Version 2.17.0-266.1.beta

Merge '2.17.0-266.0.dev' into beta
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 51bc8f5..d7bbb38 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -326,7 +326,7 @@
       "name": "frontend_server",
       "rootUri": "../pkg/frontend_server",
       "packageUri": "lib/",
-      "languageVersion": "2.7"
+      "languageVersion": "2.15"
     },
     {
       "name": "frontend_server_client",
@@ -415,13 +415,13 @@
       "name": "linter",
       "rootUri": "../third_party/pkg/linter",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.15"
     },
     {
       "name": "lints",
       "rootUri": "../third_party/pkg/lints",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.17"
     },
     {
       "name": "logging",
@@ -580,7 +580,7 @@
       "name": "shelf",
       "rootUri": "../third_party/pkg/shelf",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.16"
     },
     {
       "name": "shelf_packages_handler",
@@ -688,7 +688,7 @@
       "name": "test",
       "rootUri": "../third_party/pkg/test/pkgs/test",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.14"
     },
     {
       "name": "test_api",
@@ -700,7 +700,7 @@
       "name": "test_core",
       "rootUri": "../third_party/pkg/test/pkgs/test_core",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.14"
     },
     {
       "name": "test_descriptor",
diff --git a/BUILD.gn b/BUILD.gn
index ad09ed8..4b587be 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -39,6 +39,7 @@
     # Fuchsia has run_vm_tests marked testonly.
     testonly = true
   }
+
   deps = [
     "runtime/bin:dart",
     "runtime/bin:entrypoints_verification_test",
@@ -59,6 +60,16 @@
     ]
   }
 
+  # We do not support AOT on ia32 and should therefore not provide native
+  # snapshot tooling.
+  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
+    if (dart_runtime_mode == "release") {
+      deps += [ "runtime/bin:analyze_snapshot_product" ]
+    } else {
+      deps += [ "runtime/bin:analyze_snapshot" ]
+    }
+  }
+
   if (is_linux || is_android) {
     deps += [ "runtime/bin:abstract_socket_test" ]
   }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4a99aaa..c1dec5b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,6 +27,12 @@
   `Element.scrollIntoViewIfNeeded` should use the new `scrollIntoViewIfNeeded`
   definition instead.
 
+- Change `Performance.mark` and `Performance.measure` to accept their different
+  overloads. `mark` can now accept a `markOptions` map, and `measure` can now
+  accept a `startMark` and `endMark`, or a `measureOptions` map. Both methods
+  return their correct return types now as well - `PerformanceEntry?` and
+  `PerformanceMeasure?`, respectively.
+
 #### `dart:indexed_db`
 
 - `IdbFactory.supportsDatabaseNames` has been deprecated. It will always return
@@ -57,15 +63,20 @@
       throw UnsupportedError("keyLog not implemented");
   ```
 
+- **Breaking Change** [#34218](https://github.com/dart-lang/sdk/issues/34218):
+  Constants in `dart:io` following the `SCREAMING_CAPS` convention have been
+  removed (they were previously deprecated).  Please use the corresponding
+  `lowerCamelCase` constants instead.
+
 - Add a optional `keyLog` parameter to `SecureSocket.connect` and
   `SecureSocket.startConnect`.
 
 - Deprecate `SecureSocket.renegotiate` and `RawSecureSocket.renegotiate`,
   which were no-ops.
 
-#### `dart:isolate`
-
-- Add `Isolate.run` to run a function in a new isolate.
+- **Breaking Change** [#48513](https://github.com/dart-lang/sdk/issues/48513):
+  Add a new `allowLegacyUnsafeRenegotiation` poperty to `SecurityContext`,
+  which allows TLS renegotiation for client secure sockets.
 
 ### Tools
 
@@ -101,6 +112,49 @@
           [web]                  A web app that uses only core Dart libraries.
 ```
 
+#### Linter
+
+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
+  `null_check_on_nullable_type_parameter` to handle
+  list/set/map literals, and `yield` and `await` expressions.
+- fixes `unnecessary_null_aware_assignments` property-access
+  false positives.
+- adds new lint: `use_super_parameters`.
+- adds new lint: `use_enums`.
+- adds new lint: `use_colored_box`.
+- improves performance for `sort_constructors`.
+- improves docs for `always_use_package_imports`,
+  `avoid_print`, and `avoid_relative_lib_imports` .
+- updates `avoid_void_async` to skip `main` functions.
+- updates `prefer_final_parameters` to not super on super params.
+- updates lints for enhanced-enums and super-initializer language
+  features.
+- updates `unnecessary_late` to report on variable names.
+- marks `null_check_on_nullable_type_parameter` stable.
+
+#### Dartdoc
+
+Updated dartdoc to 5.1.0, which includes changes that
+
+- support the enhanced enums feature
+- remove superfluous `[...]` links
+- fix `categoryOrder` option
+- display categorized extensions
+- add annotations to extensions
+- make minor improvements to performance
+
+## 2.16.2 - 2022-03-24
+
+This is a patch release that fixes a dart2js crash when building some Flutter
+web apps (issue [#47916][]).
+
+[#47916]: https://github.com/dart-lang/sdk/issues/47916
+
 ## 2.16.1 - 2022-02-09
 
 This is a patch release that fixes an AOT precompiler crash when building some
@@ -167,6 +221,14 @@
 
 [an issue]: https://github.com/dart-lang/sdk/issues/new
 
+- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+  The deprecated standalone `pub` tool has been removed.
+  Its replacement is the `dart pub` command.
+  Should you find any issues, or missing features, in the replacement
+  command, kindly file [an issue][].
+
+[an issue]: https://github.com/dart-lang/pub/issues/new
+
 #### Pub
 
 - Fixed race conditions in `dart pub get`, `dart run` and `dart pub global run`.
@@ -176,8 +238,16 @@
   tracker.
 
   `dart --verbose pub [command]` will also cause the log file to be written.
+- `dart pub global activate --source=git` now takes arguments `--git-path` to
+  specify the path of the activated package in the pubspec and `--git-ref` to
+  specify the branch or revision to check out.
 - `dart pub add` can now add multiple packages in one command.
-
+- `dart pub token add` can now add a token for [pub.dev](https://pub.dev).
+- `dart pub uploader` has been removed. To manage uploaders for a package use
+  the `https://pub.dev/<packagename>/admin` web-interface.
+- Pub now supports a separate `pubspec_overrides.yaml` file that can contain
+  `dependency_overrides`. This makes it easier to avoid checking the local
+  overrides into version control.
 #### Linter
 
 Updated the Linter to `1.18.0`, which includes changes that
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index cdfcdaf..ae27a6f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -24,17 +24,23 @@
 
 We occasionally take pull requests, e.g., for comment changes, but the main flow is to use the Gerrit review system as explained below.
 
-## Setting up Environment
+## Submitting patches directly from GitHub
 
-In order to submit a patch, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
+This repository uses Gerrit for code reviews, rather than GitHub PRs. However, you may submit a GitHub PR from the GitHub interface, e.g. to edit some API documentation, and it will be automatically converted into a Gerrit CL by copybara. You can find the link to that CL from the GitHub "checks" interface, it will be the "details" of the "copybara" check. The PR will be automatically closed when the CL is reviewed and landed.
+
+## Setting up the environment
+
+In order to submit a patch from a local workspace, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
 
 ## Getting the code
 
-To work with the Dart code, you need to download and build the development branch. Active development of Dart takes place on the `main` branch, from which we push "green" versions that have passed all tests to `dev` branch. Complete instructions are found at [Getting The Source](https://github.com/dart-lang/sdk/wiki/Building#getting-the-source)
+To work with the Dart code, you need to download and build the development branch. Active development of Dart takes place on the `main` branch, from which we push "green" versions that have passed all tests to `dev` branch. Complete instructions are found at [Getting The Source](https://github.com/dart-lang/sdk/wiki/Building#getting-the-source). **You must use the `gclient` tool (`fetch`), using `git clone` will not get you a functional environment!**
 
 ## Starting a patch with git
 
-Note: you can be in any branch when you run `git new-branch`
+Create a new branch using `git new-branch` (this is a command added by the aforementioned depot_tools). 
+
+You can be in any branch when you run `git new-branch`.
 
 ```bash
 git new-branch <feature name>
@@ -51,13 +57,13 @@
 ensure your branch is merging cleanly to `origin/main`.
 
 There are multiple ways to do this, but we generally recommend
-running:
+using `git rebase-update` (another feature added by depot_tools):
 
 ```bash
 git rebase-update
 ```
 
-Note: you can run this command from any branch.
+You can run this command from any branch.
 
 This command will fetch
 `origin/main`, rebase all your open branches, and delete
@@ -67,7 +73,7 @@
 
 ## Uploading the patch for review
 
-Upload the patch for review:
+Upload the patch to Gerrit for review using `git cl upload`:
 
 ```bash
 git cl upload -s
@@ -75,7 +81,7 @@
 
 The above command returns a URL for the review. Attach this review to your issue in https://dartbug.com.
 
-To update the cl, just commit your changes and run `git cl upload -s` for your branch.
+To update the cl, just commit your changes and run `git cl upload -s` for your branch again.
 
 If you have commit access, when the review is done and the patch is good to go, submit the patch on https://dart-review.googlesource.com:
 
@@ -92,7 +98,7 @@
 
 More detailed instructions for the `git cl` tools available on https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_creating_uploading_a_cl
 
-## For committers: Merging external contributions
+## For committers: Merging contributions from non-members
 
 If the author of a patch is not a committer, they will need help landing the patch.
 Once a patch gets an LGTM, it's easy for a committer to merge it in.
@@ -109,7 +115,7 @@
 
 You should familiarize yourself with those guidelines.
 
-All files in the Dart project must start with the following header. If you add a new file please also add this. The year should be a single number (not a range; don't use "2011-2012", even if the original code did).  If you edit an existing file you don't have to update the year
+All files in the Dart project must start with the following header. If you add a new file please also add this. The year should be a single number (not a range; don't use "2011-2012", even if the original code did).  If you edit an existing file you don't have to update the year.
 
 ```dart
 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
diff --git a/DEPS b/DEPS
index dc14ff7..c8310ef 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": "a38d7c5685e64499cfbdbfe6548fbd5b63b57f15",
+  "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",
@@ -67,23 +67,23 @@
   # The list of revisions for these tools comes from Fuchsia, here:
   # https://fuchsia.googlesource.com/integration/+/HEAD/toolchain
   # If there are problems with the toolchain, contact fuchsia-toolchain@.
-  "clang_revision": "1aa59ff2f789776ebfa2d4b315fd3ea589652b4a",
-  "gn_revision": "b79031308cc878488202beb99883ec1f2efd9a6d",
+  "clang_revision": "c2592c374e469f343ecea82d6728609650924259",
+  "gn_revision": "d7c2209cebcfe37f46dba7be4e1a7000ffc342fb",
 
   # Scripts that make 'git cl format' work.
-  "clang_format_scripts_rev": "c09c8deeac31f05bd801995c475e7c8070f9ecda",
+  "clang_format_scripts_rev": "bb994c6f067340c1135eb43eed84f4b33cfa7397",
 
   "gperftools_revision": "180bfa10d7cb38e8b3784d60943d50e8fcef0dcb",
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "3b3f55766af13d895d2020ec001a28e8dc147f91",
-  "async_rev": "80886150a5e6c58006c8ae5a6c2aa7108638e2a9",
+  "async_rev": "3f58c326bd4928fca9ddc10c72b19cb7ac659256",
   "bazel_worker_rev": "ceeba0982d4ff40d32371c9d35f3d2dc1868de20",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "437e7f06c7e416bed91e16ae1df453555897e945",
   "boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
   "boringssl_rev" : "87f316d7748268eb56f2dc147bd593254ae93198",
-  "browser-compat-data_tag": "v1.0.22",
+  "browser-compat-data_tag": "ac8cae697014da1ff7124fba33b0b4245cc6cd1b", # v1.0.22
   "browser_launcher_rev": "c6cc1025d6901926cf022e144ba109677e3548f1",
   "characters_rev": "6ec389c4dfa8fce14820dc5cbf6e693202e7e052",
   "charcode_rev": "84ea427711e24abf3b832923959caa7dd9a8514b",
@@ -109,8 +109,8 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
   "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea",
 
-  "dartdoc_rev" : "a39f378f8100b907e6285ac825967d764fd664ad",
-  "devtools_rev" : "b9f2039239cc72ac8b26f8a5fe46123f34d53ce1",
+  "dartdoc_rev" : "334072b0cad436c05f6bcecf8a1a59f2f0809b84",
+  "devtools_rev" : "2a707ca56c1a9d5eeef212c28c573548a051fdd2",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
   "file_rev": "1ebc38852ffed24b564910317982298b56c2cedd",
@@ -121,16 +121,16 @@
   "http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
   "http_rev": "1e42ffa181b263f7790f276a5465832bff7ce615",
   "icu_rev" : "81d656878ec611cb0b42d52c82e9dae93920d9ba",
-  "intl_tag": "0.17.0-nullsafety",
+  "intl_tag": "9669926609e7efc17dfd74fbb44ec719a7e573cc", # 0.17.0-nullsafety
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.18.0",
-  "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
+  "linter_tag": "14c916a16e78315e212cf79e7ccf4c19159a1bda", # 1.22.0
+  "lints_tag": "8294e5648ab49474541527e2911e72e4c5aefe55", #2.0.0
   "logging_rev": "dfbe88b890c3b4f7bc06da5a7b3b43e9e263b688",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "markdown_rev": "7479783f0493f6717e1d7ae31cb37d39a91026b2",
   "matcher_rev": "07595a7739d47a8315caba5a8e58fb9ae3d81261",
-  "mime_rev": "7f4252d469de032aa4df9f90e827dbac4b8efa48",
+  "mime_rev": "c2c5ffd594674f32dc277521369da1557a1622d3",
   "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
   "oauth2_rev": "7cd3284049fe5badbec9f2bea2afc41d14c01057",
   "package_config_rev": "8731bf10b5375542792a32a0f7c8a6f370583d96",
@@ -141,14 +141,14 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "8f5ab7b1aba3b9f66b56246d77e167990339d317",
+  "pub_rev": "a3a102a549388a6dbfecc9252fabb618f9a2f5f7",
   "pub_semver_rev": "ea6c54019948dc03042c595ce9413e17aaf7aa38",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
   "shelf_static_rev": "202ec1a53c9a830c17cf3b718d089cf7eba568ad",
   "shelf_packages_handler_rev": "78302e67c035047e6348e692b0c1182131f0fe35",
-  "shelf_proxy_tag": "v1.0.0",
-  "shelf_rev": "46483f896cc4308ee3d8e997030ae799b72aa16a",
+  "shelf_proxy_tag": "ccd311f64d8689e7a145d703ba267975d6df9e28", # 1.0.0
+  "shelf_rev": "78ac724a7944700340a3cef28c84bccbe62e9367",
   "shelf_web_socket_rev": "24fb8a04befa75a94ac63a27047b231d1a22aab4",
   "source_map_stack_trace_rev": "80709f2d2fe5086ab50d744a28a2d26ea4384a1b",
   "source_maps-0.9.4_rev": "38524",
@@ -163,7 +163,7 @@
   "test_process_rev": "7c73ec8a8a6e0e63d0ec27d70c21ca4323fb5e8f",
   "term_glyph_rev": "4885b7f8af6931e23d3aa6d1767ee3f9a626923d",
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
-  "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
+  "test_rev": "b6aba5544628730b7d6a38eae1aef9117a1bb235",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
   "usage_rev": "f0cb8f7cce8b675255c81488dbab8cf9f2f56404",
   "vector_math_rev": "0cbed0914d49a6a44555e6d5444c438a4a4c3fc1",
@@ -174,7 +174,7 @@
   "WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
   "webdev_rev": "832b096c0c24798d3df46faa7b7661fe930573c2",
   "webkit_inspection_protocol_rev": "dd6fb5d8b536e19cedb384d0bbf1f5631923f1e8",
-  "yaml_edit_rev": "df1452bfe1653286277a1a8f34dddf3e4fbedd9e",
+  "yaml_edit_rev": "4fadb43801b07f90b3f0c6065dbce4efc6d8d55e",
   "yaml_rev": "ad0779d1baa25c6b10a192d080efc45de02b6a32",
   "zlib_rev": "bf44340d1b6be1af8950bbdf664fec0cf5a831cc",
   "crashpad_rev": "bf327d8ceb6a669607b0dbab5a83a275d03f99ed",
@@ -601,7 +601,7 @@
     "packages": [
       {
       "package": "fuchsia/sdk/gn/mac-amd64",
-      "version": "git_revision:190502a955c482431c2edd0525e128423728b662"
+      "version": "git_revision:c9bdf5da65647923cb79c391824434125cb00bbe"
       }
     ],
     "condition": 'host_os == "mac" and host_cpu == "x64"',
@@ -611,7 +611,7 @@
     "packages": [
       {
       "package": "fuchsia/sdk/gn/linux-amd64",
-      "version": "git_revision:190502a955c482431c2edd0525e128423728b662"
+      "version": "git_revision:c9bdf5da65647923cb79c391824434125cb00bbe"
       }
     ],
     "condition": 'host_os == "linux" and host_cpu == "x64"',
@@ -698,6 +698,12 @@
 
 hooks = [
   {
+    # Generate the .dart_tool/package_confg.json file.
+    'name': 'Generate .dart_tool/package_confg.json',
+    'pattern': '.',
+    'action': ['python3', 'sdk/tools/generate_package_config.py'],
+  },
+  {
     # Pull Debian sysroot for i386 Linux
     'name': 'sysroot_i386',
     'pattern': '.',
diff --git a/benchmarks/AsyncLiveVars/dart/AsyncLiveVars.dart b/benchmarks/AsyncLiveVars/dart/AsyncLiveVars.dart
new file mode 100644
index 0000000..7969da6
--- /dev/null
+++ b/benchmarks/AsyncLiveVars/dart/AsyncLiveVars.dart
@@ -0,0 +1,305 @@
+// 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.
+
+// Micro-benchmark for testing async/await performance in presence of
+// different number of live values across await.
+
+import 'dart:async';
+
+import 'async_benchmark_base.dart' show AsyncBenchmarkBase;
+
+class MockClass {
+  static final String str = "${int.parse('42')}";
+  static final List<int> list =
+      List<int>.filled(int.parse('3'), int.parse('42'));
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  String get1() => str;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  List<int> get2() => list;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use1(String a0) => a0.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use2(String a0, List<int> a1) => a0.length + a1.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use4(String a0, List<int> a1, String a2, List<int> a3) =>
+      a0.length + a1.length + a2.length + a3.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use8(String a0, List<int> a1, String a2, List<int> a3, String a4,
+          List<int> a5, String a6, List<int> a7) =>
+      a0.length +
+      a1.length +
+      a2.length +
+      a3.length +
+      a4.length +
+      a5.length +
+      a6.length +
+      a7.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<void> asyncMethod() async {}
+}
+
+class MockClass2 {
+  static int val1 = int.parse('42');
+  static int val2 = int.parse('43');
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int get1() => val1;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int get2() => val2;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use1(int a0) => a0;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use2(int a0, int a1) => a0 + a1;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use4(int a0, int a1, int a2, int a3) => a0 + a1 + a2 + a3;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<void> asyncMethod() async {}
+}
+
+class LiveVarsBench extends AsyncBenchmarkBase {
+  LiveVarsBench(String name) : super(name);
+  @override
+  Future<void> exercise() async {
+    // These micro-benchmarks are too small, so
+    // make a larger number of iterations per measurement.
+    for (var i = 0; i < 10000; i++) {
+      await run();
+    }
+  }
+}
+
+class LiveObj1 extends LiveVarsBench {
+  LiveObj1() : super('AsyncLiveVars.LiveObj1');
+  final field1 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+  }
+}
+
+class LiveObj2 extends LiveVarsBench {
+  LiveObj2() : super('AsyncLiveVars.LiveObj2');
+  final field1 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use2(obj1, obj2);
+  }
+}
+
+class LiveObj4 extends LiveVarsBench {
+  LiveObj4() : super('AsyncLiveVars.LiveObj4');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field2.use1(obj3);
+    await field2.asyncMethod();
+    field1.use4(obj1, obj2, obj3, obj4);
+  }
+}
+
+class LiveObj8 extends LiveVarsBench {
+  LiveObj8() : super('AsyncLiveVars.LiveObj8');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass();
+  final field4 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final obj5 = field3.get1();
+    final obj6 = field3.get2();
+    final obj7 = field4.get1();
+    final obj8 = field4.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field3.use2(obj5, obj6);
+    await field4.asyncMethod();
+    field2.use8(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8);
+  }
+}
+
+class LiveObj16 extends LiveVarsBench {
+  LiveObj16() : super('AsyncLiveVars.LiveObj16');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass();
+  final field4 = MockClass();
+  final field5 = MockClass();
+  final field6 = MockClass();
+  final field7 = MockClass();
+  final field8 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final obj5 = field3.get1();
+    final obj6 = field3.get2();
+    final obj7 = field4.get1();
+    final obj8 = field4.get2();
+    final obj9 = field5.get1();
+    final obj10 = field5.get2();
+    final obj11 = field6.get1();
+    final obj12 = field6.get2();
+    final obj13 = field7.get1();
+    final obj14 = field7.get2();
+    final obj15 = field8.get1();
+    final obj16 = field8.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field5.use2(obj11, obj12);
+    await field4.asyncMethod();
+    field2.use8(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8);
+    field3.use8(obj9, obj10, obj11, obj12, obj13, obj14, obj15, obj16);
+  }
+}
+
+class LiveInt1 extends LiveVarsBench {
+  LiveInt1() : super('AsyncLiveVars.LiveInt1');
+  final field1 = MockClass2();
+  @override
+  Future<void> run() async {
+    final int1 = field1.get1();
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field1.use1(int1);
+  }
+}
+
+class LiveInt4 extends LiveVarsBench {
+  LiveInt4() : super('AsyncLiveVars.LiveInt4');
+  final field1 = MockClass2();
+  final field2 = MockClass2();
+  @override
+  Future<void> run() async {
+    final int1 = field1.get1();
+    final int2 = field1.get2();
+    final int3 = field2.get1();
+    final int4 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field2.use1(int3);
+    await field2.asyncMethod();
+    field1.use4(int1, int2, int3, int4);
+  }
+}
+
+class LiveObj2Int2 extends LiveVarsBench {
+  LiveObj2Int2() : super('AsyncLiveVars.LiveObj2Int2');
+  final field1 = MockClass();
+  final field2 = MockClass2();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final int1 = field2.get1();
+    final int2 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field2.use1(int1);
+    await field2.asyncMethod();
+    field1.use2(obj1, obj2);
+    field2.use2(int1, int2);
+  }
+}
+
+class LiveObj4Int4 extends LiveVarsBench {
+  LiveObj4Int4() : super('AsyncLiveVars.LiveObj4Int4');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass2();
+  final field4 = MockClass2();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final int1 = field3.get1();
+    final int2 = field3.get2();
+    final int3 = field4.get1();
+    final int4 = field4.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field3.use2(int2, int4);
+    await field4.asyncMethod();
+    field2.use4(obj1, obj2, obj3, obj4);
+    field4.use4(int1, int2, int3, int4);
+  }
+}
+
+Future<void> main() async {
+  final benchmarks = [
+    LiveObj1(),
+    LiveObj2(),
+    LiveObj4(),
+    LiveObj8(),
+    LiveObj16(),
+    LiveInt1(),
+    LiveInt4(),
+    LiveObj2Int2(),
+    LiveObj4Int4()
+  ];
+  for (final bench in benchmarks) {
+    await bench.report();
+  }
+}
diff --git a/benchmarks/AsyncLiveVars/dart/async_benchmark_base.dart b/benchmarks/AsyncLiveVars/dart/async_benchmark_base.dart
new file mode 100644
index 0000000..9a415b9
--- /dev/null
+++ b/benchmarks/AsyncLiveVars/dart/async_benchmark_base.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:benchmark_harness/benchmark_harness.dart'
+    show PrintEmitter, ScoreEmitter;
+
+// Similar to BenchmarkBase from package:benchmark_harness.
+class AsyncBenchmarkBase {
+  final String name;
+  final ScoreEmitter emitter;
+
+  // Empty constructor.
+  const AsyncBenchmarkBase(this.name, {this.emitter = const PrintEmitter()});
+
+  // The benchmark code.
+  // This function is not used, if both [warmup] and [exercise] are overwritten.
+  Future<void> run() async {}
+
+  // Runs a short version of the benchmark. By default invokes [run] once.
+  Future<void> warmup() async {
+    await run();
+  }
+
+  // Exercises the benchmark. By default invokes [run] 10 times.
+  Future<void> exercise() async {
+    for (var i = 0; i < 10; i++) {
+      await run();
+    }
+  }
+
+  // Not measured setup code executed prior to the benchmark runs.
+  Future<void> setup() async {}
+
+  // Not measures teardown code executed after the benchark runs.
+  Future<void> teardown() async {}
+
+  // Measures the score for this benchmark by executing it repeatedly until
+  // time minimum has been reached.
+  static Future<double> measureFor(Function f, int minimumMillis) async {
+    final int minimumMicros = minimumMillis * 1000;
+    int iter = 0;
+    final watch = Stopwatch();
+    watch.start();
+    int elapsed = 0;
+    while (elapsed < minimumMicros) {
+      await f();
+      elapsed = watch.elapsedMicroseconds;
+      iter++;
+    }
+    return elapsed / iter;
+  }
+
+  // Measures the score for the benchmark and returns it.
+  Future<double> measure() async {
+    await setup();
+    // Warmup for at least 100ms. Discard result.
+    await measureFor(warmup, 100);
+    // Run the benchmark for at least 2000ms.
+    final result = await measureFor(exercise, 2000);
+    await teardown();
+    return result;
+  }
+
+  Future<void> report() async {
+    emitter.emit(name, await measure());
+  }
+}
diff --git a/benchmarks/AsyncLiveVars/dart2/AsyncLiveVars.dart b/benchmarks/AsyncLiveVars/dart2/AsyncLiveVars.dart
new file mode 100644
index 0000000..9176274
--- /dev/null
+++ b/benchmarks/AsyncLiveVars/dart2/AsyncLiveVars.dart
@@ -0,0 +1,307 @@
+// 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.
+
+// Micro-benchmark for testing async/await performance in presence of
+// different number of live values across await.
+
+// @dart=2.9
+
+import 'dart:async';
+
+import 'async_benchmark_base.dart' show AsyncBenchmarkBase;
+
+class MockClass {
+  static final String str = "${int.parse('42')}";
+  static final List<int> list =
+      List<int>.filled(int.parse('3'), int.parse('42'));
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  String get1() => str;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  List<int> get2() => list;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use1(String a0) => a0.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use2(String a0, List<int> a1) => a0.length + a1.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use4(String a0, List<int> a1, String a2, List<int> a3) =>
+      a0.length + a1.length + a2.length + a3.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use8(String a0, List<int> a1, String a2, List<int> a3, String a4,
+          List<int> a5, String a6, List<int> a7) =>
+      a0.length +
+      a1.length +
+      a2.length +
+      a3.length +
+      a4.length +
+      a5.length +
+      a6.length +
+      a7.length;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<void> asyncMethod() async {}
+}
+
+class MockClass2 {
+  static int val1 = int.parse('42');
+  static int val2 = int.parse('43');
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int get1() => val1;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  int get2() => val2;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use1(int a0) => a0;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use2(int a0, int a1) => a0 + a1;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  void use4(int a0, int a1, int a2, int a3) => a0 + a1 + a2 + a3;
+
+  @pragma('vm:never-inline')
+  @pragma('dart2js:noInline')
+  Future<void> asyncMethod() async {}
+}
+
+class LiveVarsBench extends AsyncBenchmarkBase {
+  LiveVarsBench(String name) : super(name);
+  @override
+  Future<void> exercise() async {
+    // These micro-benchmarks are too small, so
+    // make a larger number of iterations per measurement.
+    for (var i = 0; i < 10000; i++) {
+      await run();
+    }
+  }
+}
+
+class LiveObj1 extends LiveVarsBench {
+  LiveObj1() : super('AsyncLiveVars.LiveObj1');
+  final field1 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+  }
+}
+
+class LiveObj2 extends LiveVarsBench {
+  LiveObj2() : super('AsyncLiveVars.LiveObj2');
+  final field1 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field1.use2(obj1, obj2);
+  }
+}
+
+class LiveObj4 extends LiveVarsBench {
+  LiveObj4() : super('AsyncLiveVars.LiveObj4');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field2.use1(obj3);
+    await field2.asyncMethod();
+    field1.use4(obj1, obj2, obj3, obj4);
+  }
+}
+
+class LiveObj8 extends LiveVarsBench {
+  LiveObj8() : super('AsyncLiveVars.LiveObj8');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass();
+  final field4 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final obj5 = field3.get1();
+    final obj6 = field3.get2();
+    final obj7 = field4.get1();
+    final obj8 = field4.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field3.use2(obj5, obj6);
+    await field4.asyncMethod();
+    field2.use8(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8);
+  }
+}
+
+class LiveObj16 extends LiveVarsBench {
+  LiveObj16() : super('AsyncLiveVars.LiveObj16');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass();
+  final field4 = MockClass();
+  final field5 = MockClass();
+  final field6 = MockClass();
+  final field7 = MockClass();
+  final field8 = MockClass();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final obj5 = field3.get1();
+    final obj6 = field3.get2();
+    final obj7 = field4.get1();
+    final obj8 = field4.get2();
+    final obj9 = field5.get1();
+    final obj10 = field5.get2();
+    final obj11 = field6.get1();
+    final obj12 = field6.get2();
+    final obj13 = field7.get1();
+    final obj14 = field7.get2();
+    final obj15 = field8.get1();
+    final obj16 = field8.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field5.use2(obj11, obj12);
+    await field4.asyncMethod();
+    field2.use8(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8);
+    field3.use8(obj9, obj10, obj11, obj12, obj13, obj14, obj15, obj16);
+  }
+}
+
+class LiveInt1 extends LiveVarsBench {
+  LiveInt1() : super('AsyncLiveVars.LiveInt1');
+  final field1 = MockClass2();
+  @override
+  Future<void> run() async {
+    final int1 = field1.get1();
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field1.use1(int1);
+  }
+}
+
+class LiveInt4 extends LiveVarsBench {
+  LiveInt4() : super('AsyncLiveVars.LiveInt4');
+  final field1 = MockClass2();
+  final field2 = MockClass2();
+  @override
+  Future<void> run() async {
+    final int1 = field1.get1();
+    final int2 = field1.get2();
+    final int3 = field2.get1();
+    final int4 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(int1);
+    await field1.asyncMethod();
+    field2.use1(int3);
+    await field2.asyncMethod();
+    field1.use4(int1, int2, int3, int4);
+  }
+}
+
+class LiveObj2Int2 extends LiveVarsBench {
+  LiveObj2Int2() : super('AsyncLiveVars.LiveObj2Int2');
+  final field1 = MockClass();
+  final field2 = MockClass2();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final int1 = field2.get1();
+    final int2 = field2.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field1.asyncMethod();
+    field2.use1(int1);
+    await field2.asyncMethod();
+    field1.use2(obj1, obj2);
+    field2.use2(int1, int2);
+  }
+}
+
+class LiveObj4Int4 extends LiveVarsBench {
+  LiveObj4Int4() : super('AsyncLiveVars.LiveObj4Int4');
+  final field1 = MockClass();
+  final field2 = MockClass();
+  final field3 = MockClass2();
+  final field4 = MockClass2();
+  @override
+  Future<void> run() async {
+    final obj1 = field1.get1();
+    final obj2 = field1.get2();
+    final obj3 = field2.get1();
+    final obj4 = field2.get2();
+    final int1 = field3.get1();
+    final int2 = field3.get2();
+    final int3 = field4.get1();
+    final int4 = field4.get2();
+    await field1.asyncMethod();
+    field1.use1(obj1);
+    await field2.asyncMethod();
+    field3.use2(int2, int4);
+    await field4.asyncMethod();
+    field2.use4(obj1, obj2, obj3, obj4);
+    field4.use4(int1, int2, int3, int4);
+  }
+}
+
+Future<void> main() async {
+  final benchmarks = [
+    LiveObj1(),
+    LiveObj2(),
+    LiveObj4(),
+    LiveObj8(),
+    LiveObj16(),
+    LiveInt1(),
+    LiveInt4(),
+    LiveObj2Int2(),
+    LiveObj4Int4()
+  ];
+  for (final bench in benchmarks) {
+    await bench.report();
+  }
+}
diff --git a/benchmarks/AsyncLiveVars/dart2/async_benchmark_base.dart b/benchmarks/AsyncLiveVars/dart2/async_benchmark_base.dart
new file mode 100644
index 0000000..9a415b9
--- /dev/null
+++ b/benchmarks/AsyncLiveVars/dart2/async_benchmark_base.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:benchmark_harness/benchmark_harness.dart'
+    show PrintEmitter, ScoreEmitter;
+
+// Similar to BenchmarkBase from package:benchmark_harness.
+class AsyncBenchmarkBase {
+  final String name;
+  final ScoreEmitter emitter;
+
+  // Empty constructor.
+  const AsyncBenchmarkBase(this.name, {this.emitter = const PrintEmitter()});
+
+  // The benchmark code.
+  // This function is not used, if both [warmup] and [exercise] are overwritten.
+  Future<void> run() async {}
+
+  // Runs a short version of the benchmark. By default invokes [run] once.
+  Future<void> warmup() async {
+    await run();
+  }
+
+  // Exercises the benchmark. By default invokes [run] 10 times.
+  Future<void> exercise() async {
+    for (var i = 0; i < 10; i++) {
+      await run();
+    }
+  }
+
+  // Not measured setup code executed prior to the benchmark runs.
+  Future<void> setup() async {}
+
+  // Not measures teardown code executed after the benchark runs.
+  Future<void> teardown() async {}
+
+  // Measures the score for this benchmark by executing it repeatedly until
+  // time minimum has been reached.
+  static Future<double> measureFor(Function f, int minimumMillis) async {
+    final int minimumMicros = minimumMillis * 1000;
+    int iter = 0;
+    final watch = Stopwatch();
+    watch.start();
+    int elapsed = 0;
+    while (elapsed < minimumMicros) {
+      await f();
+      elapsed = watch.elapsedMicroseconds;
+      iter++;
+    }
+    return elapsed / iter;
+  }
+
+  // Measures the score for the benchmark and returns it.
+  Future<double> measure() async {
+    await setup();
+    // Warmup for at least 100ms. Discard result.
+    await measureFor(warmup, 100);
+    // Run the benchmark for at least 2000ms.
+    final result = await measureFor(exercise, 2000);
+    await teardown();
+    return result;
+  }
+
+  Future<void> report() async {
+    emitter.emit(name, await measure());
+  }
+}
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index b38dc18..6cfcf26 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -359,7 +359,10 @@
   # not be compatible with newer ones. To achieve this, we insert a synthetic
   # define into the compile line.
   if (is_clang && (is_linux || is_mac)) {
-    if (is_linux) {
+    if (is_linux && host_cpu == "arm64") {
+      toolchain_stamp_file =
+          "//buildtools/linux-arm64/clang/.versions/clang.cipd_version"
+    } else if (is_linux) {
       toolchain_stamp_file =
           "//buildtools/linux-x64/clang/.versions/clang.cipd_version"
     } else {
@@ -777,10 +780,17 @@
   if (is_win) {
     # The only difference on windows is that the inlining is less aggressive.
     # (We accept the default level). Otherwise it is very slow.
-    cflags = [
-      "/O${debug_optimization_level}",  # Do some optimizations.
-      "/Oy-",  # Disable omitting frame pointers, must be after /O2.
-    ]
+    if (is_clang && debug_optimization_level != "2") {
+      cflags = [
+        "-d${debug_optimization_level}",  # Do some optimizations.
+        "/Oy-",  # Disable omitting frame pointers, must be after /O2.
+      ]
+    } else {
+      cflags = [
+        "/O${debug_optimization_level}",  # Do some optimizations.
+        "/Oy-",  # Disable omitting frame pointers, must be after /O2.
+      ]
+    }
   } else if (is_android) {
     # On Android we kind of optimize some things that don't affect debugging
     # much even when optimization is disabled to get the binary size down.
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index 5f9bc32..05630d0 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -21,6 +21,14 @@
   compiler_prefix = ""
 }
 
+if (host_cpu == "arm64") {
+  rebased_clang_dir =
+      rebase_path("//buildtools/linux-arm64/clang/bin", root_build_dir)
+} else {
+  rebased_clang_dir =
+      rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+}
+
 gcc_toolchain("arm") {
   prefix = "arm-linux-gnueabihf-"
   if (toolchain_prefix != "") {
@@ -42,7 +50,7 @@
 }
 
 gcc_toolchain("clang_arm") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
@@ -78,7 +86,7 @@
 }
 
 gcc_toolchain("clang_arm64") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
@@ -94,7 +102,7 @@
 }
 
 gcc_toolchain("clang_x86") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
@@ -126,7 +134,7 @@
 }
 
 gcc_toolchain("clang_x64") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
@@ -178,7 +186,7 @@
 }
 
 gcc_toolchain("clang_riscv32") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
@@ -214,7 +222,7 @@
 }
 
 gcc_toolchain("clang_riscv64") {
-  prefix = rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
+  prefix = rebased_clang_dir
   cc = "${compiler_prefix}${prefix}/clang"
   cxx = "${compiler_prefix}${prefix}/clang++"
 
diff --git a/pkg/OWNERS b/pkg/OWNERS
index c3abcf9..eec08f0 100644
--- a/pkg/OWNERS
+++ b/pkg/OWNERS
@@ -1,2 +1,5 @@
 file:/tools/OWNERS_FOUNDATION #{LAST_RESORT_SUGGESTION}
 file:/tools/OWNERS_INFRA #{LAST_RESORT_SUGGESTION}
+
+# Test status file
+per-file pkg.status=file:/tools/OWNERS_ENG
diff --git a/pkg/_fe_analyzer_shared/lib/src/deferred_closure_heuristic.dart b/pkg/_fe_analyzer_shared/lib/src/deferred_closure_heuristic.dart
new file mode 100644
index 0000000..d5f823a
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/deferred_closure_heuristic.dart
@@ -0,0 +1,139 @@
+// 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:_fe_analyzer_shared/src/util/dependency_walker.dart';
+
+/// Data structure tracking the type inference dependencies between closures
+/// passed as invocation parameters.
+///
+/// [planClosureReconciliationStages] is used as part of support for
+/// https://github.com/dart-lang/language/issues/731 (improved inference for
+/// fold etc.) to choose the proper order in which to recursively analyze
+/// closures passed as invocation arguments.
+abstract class ClosureDependencies<TypeVariable, Closure> {
+  final List<_ClosureNode<Closure>> _closureNodes = [];
+
+  /// Construct a [ClosureDependencies] object that's prepared to determine the
+  /// order to resolve [closures] for a generic invocation involving the given
+  /// [typeVariables].
+  ClosureDependencies(
+      Iterable<Closure> closures, Iterable<TypeVariable> typeVariables) {
+    Map<TypeVariable, Set<_ClosureNode<Closure>>> closuresDependingOnTypeVar =
+        {};
+    Map<TypeVariable, Set<_ClosureNode<Closure>>> closuresConstrainingTypeVar =
+        {};
+    for (Closure closure in closures) {
+      _ClosureNode<Closure> closureNode = new _ClosureNode<Closure>(closure);
+      _closureNodes.add(closureNode);
+      for (TypeVariable v in typeVarsFreeInClosureArguments(closure)) {
+        (closuresDependingOnTypeVar[v] ??= {}).add(closureNode);
+      }
+      for (TypeVariable v in typeVarsFreeInClosureReturns(closure)) {
+        (closuresConstrainingTypeVar[v] ??= {}).add(closureNode);
+      }
+    }
+    for (TypeVariable typeVariable in typeVariables) {
+      for (_ClosureNode<Closure> closureNode
+          in closuresDependingOnTypeVar[typeVariable] ?? const {}) {
+        closureNode.dependencies
+            .addAll(closuresConstrainingTypeVar[typeVariable] ?? const {});
+      }
+    }
+  }
+
+  /// Computes the order in which to resolve the closures passed to the
+  /// constructor.
+  ///
+  /// Each entry in the returned list represents the set of closures that should
+  /// be visited during a single stage of resolution; after each stage, the
+  /// assignment of actual types to type variables should be refined.
+  ///
+  /// So, for example, if the closures in question are A, B, and C, and the
+  /// returned list is `[{A, B}, {C}]`, then first closures A and B should be
+  /// resolved, then the assignment of actual types to type variables should be
+  /// refined, and then C should be resolved, and then the final assignment of
+  /// actual types to type variables should be computed.
+  List<Set<Closure>> planClosureReconciliationStages() {
+    _DependencyWalker<Closure> walker = new _DependencyWalker<Closure>();
+    for (_ClosureNode<Closure> closureNode in _closureNodes) {
+      walker.walk(closureNode);
+    }
+    return walker.closureReconciliationStages;
+  }
+
+  /// If the type of the parameter corresponding to [closure] is a function
+  /// type, the set of type parameters referred to by the parameter types of
+  /// that parameter.  If the type of the parameter is not a function type, an
+  /// empty iterable should be returned.
+  ///
+  /// Should be overridden by the client.
+  Iterable<TypeVariable> typeVarsFreeInClosureArguments(Closure closure);
+
+  /// If the type of the parameter corresponding to [closure] is a function
+  /// type, the set of type parameters referred to by the return type of that
+  /// parameter.  If the type of the parameter is not a function type, the set
+  /// type parameters referred to by the type of the parameter should be
+  /// returned.
+  ///
+  /// Should be overridden by the client.
+  Iterable<TypeVariable> typeVarsFreeInClosureReturns(Closure closure);
+}
+
+/// Node type representing a single [Closure] for purposes of walking the
+/// graph of type inference dependencies among closures.
+class _ClosureNode<Closure> extends Node<_ClosureNode<Closure>> {
+  /// The [Closure] being represented by this node.
+  final Closure closure;
+
+  /// If not `null`, the index of the reconciliation stage to which this closure
+  /// has been assigned.
+  int? stageNum;
+
+  /// The nodes for the closures depended on by this closure.
+  final List<_ClosureNode<Closure>> dependencies = [];
+
+  _ClosureNode(this.closure);
+
+  @override
+  bool get isEvaluated => stageNum != null;
+
+  @override
+  List<_ClosureNode<Closure>> computeDependencies() => dependencies;
+}
+
+/// Derived class of [DependencyWalker] capable of walking the graph of type
+/// inference dependencies among closures.
+class _DependencyWalker<Closure>
+    extends DependencyWalker<_ClosureNode<Closure>> {
+  /// The set of closure reconciliation stages accumulated so far.
+  final List<Set<Closure>> closureReconciliationStages = [];
+
+  @override
+  void evaluate(_ClosureNode v) => evaluateScc([v]);
+
+  @override
+  void evaluateScc(List<_ClosureNode> nodes) {
+    int stageNum = 0;
+    for (_ClosureNode node in nodes) {
+      for (_ClosureNode dependency in node.dependencies) {
+        int? dependencyStageNum = dependency.stageNum;
+        if (dependencyStageNum != null && dependencyStageNum >= stageNum) {
+          stageNum = dependencyStageNum + 1;
+        }
+      }
+    }
+    if (closureReconciliationStages.length <= stageNum) {
+      closureReconciliationStages.add({});
+      // `stageNum` can't grow by more than 1 each time `evaluateScc` is called,
+      // so adding one stage is sufficient to make sure the list is now long
+      // enough.
+      assert(stageNum < closureReconciliationStages.length);
+    }
+    Set<Closure> stage = closureReconciliationStages[stageNum];
+    for (_ClosureNode node in nodes) {
+      node.stageNum = stageNum;
+      stage.add(node.closure);
+    }
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index 9a0d773..a72b342 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -344,6 +344,28 @@
   String toString() => 'DemoteViaExplicitWrite($node)';
 }
 
+/// Information gathered by flow analysis about an argument to either
+/// `identical` or `operator ==`.
+class EqualityInfo<Variable extends Object, Type extends Object> {
+  /// The [ExpressionInfo] for the expression.  This is used to determine
+  /// whether the expression is a `null` literal.
+  final ExpressionInfo<Variable, Type>? _expressionInfo;
+
+  /// The type of the expression on the LHS of `==` or `!=`.
+  final Type _type;
+
+  /// If the LHS of `==` or `!=` is a reference, the thing being referred to.
+  /// Otherwise `null`.
+  final ReferenceWithType<Variable, Type>? _reference;
+
+  EqualityInfo._(this._expressionInfo, this._type, this._reference);
+
+  @override
+  String toString() =>
+      'EqualityInfo(expressionInfo: $_expressionInfo, type: $_type, reference: '
+      '$_reference)';
+}
+
 /// A collection of flow models representing the possible outcomes of evaluating
 /// an expression that are relevant to flow analysis.
 class ExpressionInfo<Variable extends Object, Type extends Object> {
@@ -479,14 +501,27 @@
   /// [condition] should be the condition of the loop.
   void doStatement_end(Expression condition);
 
-  /// Call this method just after visiting a binary `==` or `!=` expression.
-  void equalityOp_end(Expression wholeExpression, Expression rightOperand,
-      Type rightOperandType,
-      {bool notEqual = false});
+  /// Call this method just after visiting either side of a binary `==` or `!=`
+  /// expression, or an argument to `identical`.
+  ///
+  /// Returns information about the expression that will later be needed by
+  /// [equalityOperation_end].
+  ///
+  /// Note: the return type is nullable because legacy type promotion doesn't
+  /// need to record information about equality operands.
+  EqualityInfo<Variable, Type>? equalityOperand_end(
+      Expression operand, Type type);
 
-  /// Call this method just after visiting the left hand side of a binary `==`
-  /// or `!=` expression.
-  void equalityOp_rightBegin(Expression leftOperand, Type leftOperandType);
+  /// Call this method just after visiting the operands of a binary `==` or `!=`
+  /// expression, or an invocation of `identical`.
+  ///
+  /// [leftOperandInfo] and [rightOperandInfo] should be the values returned by
+  /// [equalityOperand_end].
+  void equalityOperation_end(
+      Expression wholeExpression,
+      EqualityInfo<Variable, Type>? leftOperandInfo,
+      EqualityInfo<Variable, Type>? rightOperandInfo,
+      {bool notEqual = false});
 
   /// Retrieves the [ExpressionInfo] associated with [target], if known.  Will
   /// return `null` if (a) no info is associated with [target], or (b) another
@@ -1106,21 +1141,24 @@
   }
 
   @override
-  void equalityOp_end(Expression wholeExpression, Expression rightOperand,
-      Type rightOperandType,
-      {bool notEqual = false}) {
-    _wrap(
-        'equalityOp_end($wholeExpression, $rightOperand, $rightOperandType, '
-        'notEqual: $notEqual)',
-        () => _wrapped.equalityOp_end(
-            wholeExpression, rightOperand, rightOperandType,
-            notEqual: notEqual));
-  }
+  EqualityInfo<Variable, Type>? equalityOperand_end(
+          Expression operand, Type type) =>
+      _wrap('equalityOperand_end($operand, $type)',
+          () => _wrapped.equalityOperand_end(operand, type),
+          isQuery: true);
 
   @override
-  void equalityOp_rightBegin(Expression leftOperand, Type leftOperandType) {
-    _wrap('equalityOp_rightBegin($leftOperand, $leftOperandType)',
-        () => _wrapped.equalityOp_rightBegin(leftOperand, leftOperandType));
+  void equalityOperation_end(
+      Expression wholeExpression,
+      EqualityInfo<Variable, Type>? leftOperandInfo,
+      EqualityInfo<Variable, Type>? rightOperandInfo,
+      {bool notEqual = false}) {
+    _wrap(
+        'equalityOperation_end($wholeExpression, $leftOperandInfo, '
+        '$rightOperandInfo, notEqual: $notEqual)',
+        () => _wrapped.equalityOperation_end(
+            wholeExpression, leftOperandInfo, rightOperandInfo,
+            notEqual: notEqual));
   }
 
   @override
@@ -3408,26 +3446,6 @@
   _DemotionResult(this.promotedTypes, this.nonPromotionHistory);
 }
 
-/// [_FlowContext] representing an equality comparison using `==` or `!=`.
-class _EqualityOpContext<Variable extends Object, Type extends Object>
-    extends _BranchContext<Variable, Type> {
-  /// The type of the expression on the LHS of `==` or `!=`.
-  final Type _leftOperandType;
-
-  /// If the LHS of `==` or `!=` is a reference, the thing being referred to.
-  /// Otherwise `null`.
-  final ReferenceWithType<Variable, Type>? _leftOperandReference;
-
-  _EqualityOpContext(ExpressionInfo<Variable, Type>? conditionInfo,
-      this._leftOperandType, this._leftOperandReference)
-      : super(conditionInfo);
-
-  @override
-  String toString() =>
-      '_EqualityOpContext(conditionInfo: $_conditionInfo, lhsType: '
-      '$_leftOperandType)';
-}
-
 class _FlowAnalysisImpl<Node extends Object, Statement extends Node,
         Expression extends Object, Variable extends Object, Type extends Object>
     implements FlowAnalysis<Node, Statement, Expression, Variable, Type> {
@@ -3465,8 +3483,6 @@
   /// Otherwise `null`.
   ReferenceWithType<Variable, Type>? _expressionReference;
 
-  int _functionNestingLevel = 0;
-
   final AssignedVariables<Node, Variable> _assignedVariables;
 
   /// Indicates whether initializers of implicitly typed variables should be
@@ -3602,22 +3618,30 @@
   }
 
   @override
-  void equalityOp_end(Expression wholeExpression, Expression rightOperand,
-      Type rightOperandType,
+  EqualityInfo<Variable, Type> equalityOperand_end(
+          Expression operand, Type type) =>
+      new EqualityInfo<Variable, Type>._(
+          _getExpressionInfo(operand), type, _getExpressionReference(operand));
+
+  @override
+  void equalityOperation_end(
+      Expression wholeExpression,
+      EqualityInfo<Variable, Type>? leftOperandInfo,
+      EqualityInfo<Variable, Type>? rightOperandInfo,
       {bool notEqual = false}) {
-    _EqualityOpContext<Variable, Type> context =
-        _stack.removeLast() as _EqualityOpContext<Variable, Type>;
-    ExpressionInfo<Variable, Type>? lhsInfo = context._conditionInfo;
+    // Note: leftOperandInfo and rightOperandInfo are nullable in the base class
+    // to account for the fact that legacy type promotion doesn't record
+    // information about legacy operands.  But since we are currently in full
+    // (post null safety) flow analysis logic, we can safely assume that they
+    // are not null.
     ReferenceWithType<Variable, Type>? lhsReference =
-        context._leftOperandReference;
-    Type leftOperandType = context._leftOperandType;
-    ExpressionInfo<Variable, Type>? rhsInfo = _getExpressionInfo(rightOperand);
+        leftOperandInfo!._reference;
     ReferenceWithType<Variable, Type>? rhsReference =
-        _getExpressionReference(rightOperand);
+        rightOperandInfo!._reference;
     TypeClassification leftOperandTypeClassification =
-        typeOperations.classifyType(leftOperandType);
+        typeOperations.classifyType(leftOperandInfo._type);
     TypeClassification rightOperandTypeClassification =
-        typeOperations.classifyType(rightOperandType);
+        typeOperations.classifyType(rightOperandInfo._type);
     if (leftOperandTypeClassification == TypeClassification.nullOrEquivalent &&
         rightOperandTypeClassification == TypeClassification.nullOrEquivalent) {
       booleanLiteral(wholeExpression, !notEqual);
@@ -3631,12 +3655,14 @@
       // but weak mode it might produce an "equal" result.  We don't want flow
       // analysis behavior to depend on mode, so we conservatively assume that
       // either result is possible.
-    } else if (lhsInfo is _NullInfo<Variable, Type> && rhsReference != null) {
+    } else if (leftOperandInfo._expressionInfo is _NullInfo<Variable, Type> &&
+        rhsReference != null) {
       ExpressionInfo<Variable, Type> equalityInfo =
           _current.tryMarkNonNullable(typeOperations, rhsReference);
       _storeExpressionInfo(
           wholeExpression, notEqual ? equalityInfo : equalityInfo.invert());
-    } else if (rhsInfo is _NullInfo<Variable, Type> && lhsReference != null) {
+    } else if (rightOperandInfo._expressionInfo is _NullInfo<Variable, Type> &&
+        lhsReference != null) {
       ExpressionInfo<Variable, Type> equalityInfo =
           _current.tryMarkNonNullable(typeOperations, lhsReference);
       _storeExpressionInfo(
@@ -3645,14 +3671,6 @@
   }
 
   @override
-  void equalityOp_rightBegin(Expression leftOperand, Type leftOperandType) {
-    _stack.add(new _EqualityOpContext<Variable, Type>(
-        _getExpressionInfo(leftOperand),
-        leftOperandType,
-        _getExpressionReference(leftOperand)));
-  }
-
-  @override
   ExpressionInfo<Variable, Type>? expressionInfoForTesting(Expression target) =>
       identical(target, _expressionWithInfo) ? _expressionInfo : null;
 
@@ -3734,7 +3752,6 @@
   void functionExpression_begin(Node node) {
     AssignedVariablesNodeInfo<Variable> info =
         _assignedVariables._getInfoForNode(node);
-    ++_functionNestingLevel;
     _current = _current.conservativeJoin(const [], info._written);
     _stack.add(new _FunctionExpressionContext(_current));
     _current = _current.conservativeJoin(_assignedVariables._anywhere._written,
@@ -3743,8 +3760,6 @@
 
   @override
   void functionExpression_end() {
-    --_functionNestingLevel;
-    assert(_functionNestingLevel >= 0);
     _SimpleContext<Variable, Type> context =
         _stack.removeLast() as _FunctionExpressionContext<Variable, Type>;
     _current = context._previous;
@@ -4501,12 +4516,16 @@
   void doStatement_end(Expression condition) {}
 
   @override
-  void equalityOp_end(Expression wholeExpression, Expression rightOperand,
-      Type rightOperandType,
-      {bool notEqual = false}) {}
+  EqualityInfo<Variable, Type>? equalityOperand_end(
+          Expression operand, Type type) =>
+      null;
 
   @override
-  void equalityOp_rightBegin(Expression leftOperand, Type leftOperandType) {}
+  void equalityOperation_end(
+      Expression wholeExpression,
+      EqualityInfo<Variable, Type>? leftOperandInfo,
+      EqualityInfo<Variable, Type>? rightOperandInfo,
+      {bool notEqual = false}) {}
 
   @override
   ExpressionInfo<Variable, Type>? expressionInfoForTesting(Expression target) {
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
index 03669ef..695f56b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
@@ -114,6 +114,18 @@
   Future<TypeDeclaration> declarationOf(covariant Identifier identifier);
 }
 
+/// The interface used by [Macro]s to get the inferred type for an
+/// [OmittedTypeAnnotation].
+///
+/// Only available in the definition phase of macro expansion.
+abstract class TypeInferrer {
+  /// Infers a real type annotation for [omittedType].
+  ///
+  /// If no type could be inferred, then a type annotation representing the
+  /// dynamic type will be given.
+  Future<TypeAnnotation> inferType(covariant OmittedTypeAnnotation omittedType);
+}
+
 /// The base class for builders in the definition phase. These can convert
 /// any [TypeAnnotation] into its corresponding [TypeDeclaration], and also
 /// reflect more deeply on those.
@@ -123,7 +135,8 @@
         IdentifierResolver,
         TypeResolver,
         ClassIntrospector,
-        TypeDeclarationResolver {}
+        TypeDeclarationResolver,
+        TypeInferrer {}
 
 /// The apis used by [Macro]s that run on classes, to fill in the definitions
 /// of any external declarations within that class.
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
index 6563aef..e0a09f2 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
@@ -211,6 +211,18 @@
   });
 }
 
+class OmittedTypeAnnotationCode extends TypeAnnotationCode {
+  final OmittedTypeAnnotation typeAnnotation;
+
+  OmittedTypeAnnotationCode(this.typeAnnotation);
+
+  @override
+  CodeKind get kind => CodeKind.omittedTypeAnnotation;
+
+  @override
+  List<Object> get parts => [typeAnnotation];
+}
+
 /// A piece of code representing a valid named type parameter.
 class TypeParameterCode implements Code {
   final TypeAnnotationCode? bound;
@@ -250,6 +262,7 @@
   functionTypeAnnotation,
   namedTypeAnnotation,
   nullableTypeAnnotation,
+  omittedTypeAnnotation,
   parameter,
   raw,
   typeParameter,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
index c24cd91..cc9ef15 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
@@ -56,6 +56,19 @@
   Iterable<TypeAnnotation> get typeArguments;
 }
 
+/// An omitted type annotation.
+///
+/// This will be given whenever there is no explicit type annotation for a
+/// declaration.
+///
+/// These type annotations can still produce valid [Code] objects, which will
+/// result in the inferred type being emitted into the resulting code (or
+/// dynamic).
+///
+/// In the definition phase, you may also ask explicitly for the inferred type
+/// using the `inferType` API.
+abstract class OmittedTypeAnnotation implements TypeAnnotation {}
+
 /// The interface representing a resolved type.
 ///
 /// Resolved types understand exactly what type they represent, and can be
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
index a645eae..e94c61e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
@@ -69,15 +69,27 @@
 /// Entrypoint to be spawned with [Isolate.spawnUri] or [Process.start].
 ///
 /// Supports the client side of the macro expansion protocol.
-void main(_, [SendPort? sendPort]) {
+void main(List<String> arguments, [SendPort? sendPort]) {
   // Function that sends the result of a [Serializer] using either [sendPort]
   // or [stdout].
   void Function(Serializer) sendResult;
 
-  // The stream for incoming messages, could be either a ReceivePort or stdin.
+  // The stream for incoming messages, could be either a ReceivePort, stdin, or
+  // a socket.
   Stream<Object?> messageStream;
 
-  withSerializationMode($_modeMarker, () {
+  String? socketAddress;
+  int? socketPort;
+  if (arguments.isNotEmpty) {
+    if (arguments.length != 2) {
+      throw new ArgumentError(
+          'Expected exactly two or zero arguments, got \$arguments.');
+    }
+    socketAddress = arguments.first;
+    socketPort = int.parse(arguments[1]);
+  }
+
+  withSerializationMode($_modeMarker, () async {
     if (sendPort != null) {
       ReceivePort receivePort = new ReceivePort();
       messageStream = receivePort;
@@ -87,12 +99,20 @@
       // isolate.
       sendPort.send(receivePort.sendPort);
     } else {
-      sendResult = _sendStdoutResult;
+      late Stream<List<int>> inputStream;
+      if (socketAddress != null && socketPort != null) {
+        var socket = await Socket.connect(socketAddress, socketPort);
+        sendResult = _sendIOSinkResultFactory(socket);
+        inputStream = socket;
+      } else {
+        sendResult = _sendIOSinkResultFactory(stdout);
+        inputStream = stdin;
+      }
       if (serializationMode == SerializationMode.byteDataClient) {
-        messageStream = MessageGrouper(stdin).messageStream;
+        messageStream = MessageGrouper(inputStream).messageStream;
       } else if (serializationMode == SerializationMode.jsonClient) {
-        messageStream = stdin
-          .transform(const Utf8Decoder())
+        messageStream = const Utf8Decoder()
+          .bind(inputStream)
           .transform(const LineSplitter())
           .map((line) => jsonDecode(line)!);
       } else {
@@ -289,10 +309,14 @@
         sendRequest,
         remoteInstance: request.classIntrospector,
         serializationZoneId: request.serializationZoneId);
+    var typeInferrer = ClientTypeInferrer(
+        sendRequest,
+        remoteInstance: request.typeInferrer,
+        serializationZoneId: request.serializationZoneId);
 
     var result = await executeDefinitionMacro(
         instance, request.declaration, identifierResolver, classIntrospector,
-        typeResolver, typeDeclarationResolver);
+        typeResolver, typeDeclarationResolver, typeInferrer);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -335,26 +359,28 @@
   }
 }
 
-/// Sends [serializer.result] to [stdout].
+/// Returns a function which takes a [Serializer] and sends its result to
+/// [sink].
 ///
 /// Serializes the result to a string if using JSON.
-void _sendStdoutResult(Serializer serializer) {
-  if (serializationMode == SerializationMode.jsonClient) {
-    stdout.writeln(jsonEncode(serializer.result));
-  } else if (serializationMode == SerializationMode.byteDataClient) {
-    Uint8List result = (serializer as ByteDataSerializer).result;
-    int length = result.lengthInBytes;
-    stdout.add([
-      length >> 24 & 0xff,
-      length >> 16 & 0xff,
-      length >> 8 & 0xff,
-      length & 0xff,
-    ]);
-    stdout.add(result);
-  } else {
-    throw new UnsupportedError(
-        'Unsupported serialization mode \$serializationMode for '
-        'ProcessExecutor');
-  }
-}
+void Function(Serializer) _sendIOSinkResultFactory(IOSink sink) =>
+    (Serializer serializer) {
+      if (serializationMode == SerializationMode.jsonClient) {
+        sink.writeln(jsonEncode(serializer.result));
+      } else if (serializationMode == SerializationMode.byteDataClient) {
+        Uint8List result = (serializer as ByteDataSerializer).result;
+        int length = result.lengthInBytes;
+        sink.add([
+          length >> 24 & 0xff,
+          length >> 16 & 0xff,
+          length >> 8 & 0xff,
+          length & 0xff,
+        ]);
+        sink.add(result);
+      } else {
+        throw new UnsupportedError(
+            'Unsupported serialization mode \$serializationMode for '
+            'ProcessExecutor');
+      }
+    };
 ''';
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
index c80c9a5..f178c40 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
@@ -66,15 +66,30 @@
       IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector,
-      TypeDeclarationResolver typeDeclarationResolver);
+      TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer);
 
   /// Combines multiple [MacroExecutionResult]s into a single library
   /// augmentation file, and returns a [String] representing that file.
   ///
   /// The [resolveIdentifier] argument should return the import uri to be used
   /// for that identifier.
-  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      ResolvedIdentifier Function(Identifier) resolveIdentifier);
+  ///
+  /// The [inferOmittedType] argument is used to get the inferred type for a
+  /// given [OmittedTypeAnnotation].
+  ///
+  /// If [omittedTypes] is provided, [inferOmittedType] is allowed to return
+  /// `null` for types that have not yet been inferred. In this case a fresh
+  /// name will be used for the omitted type in the generated library code and
+  /// the omitted type will be mapped to the fresh name in [omittedTypes].
+  ///
+  /// The generated library files content must be deterministic, including the
+  /// generation of fresh names for import prefixes and omitted types.
+  String buildAugmentationLibrary(
+      Iterable<MacroExecutionResult> macroResults,
+      ResolvedIdentifier Function(Identifier) resolveIdentifier,
+      TypeAnnotation? Function(OmittedTypeAnnotation) inferOmittedType,
+      {Map<OmittedTypeAnnotation, String>? omittedTypes});
 
   /// Tell the executor to shut down and clean up any resources it may have
   /// allocated.
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/augmentation_library.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/augmentation_library.dart
index fd0b26bc..0ecb10f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/augmentation_library.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/augmentation_library.dart
@@ -9,48 +9,85 @@
 /// [MacroExecutor.buildAugmentationLibrary].
 mixin AugmentationLibraryBuilder on MacroExecutor {
   @override
-  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      ResolvedIdentifier Function(Identifier) resolveIdentifier) {
-    StringBuffer importsBuffer = new StringBuffer();
-    StringBuffer directivesBuffer = new StringBuffer();
-    Map<Uri, String> importPrefixes = {};
-    int nextPrefix = 0;
+  String buildAugmentationLibrary(
+      Iterable<MacroExecutionResult> macroResults,
+      ResolvedIdentifier Function(Identifier) resolveIdentifier,
+      TypeAnnotation? Function(OmittedTypeAnnotation) typeInferrer,
+      {Map<OmittedTypeAnnotation, String>? omittedTypes}) {
+    Map<Uri, _SynthesizedNamePart> importNames = {};
+    Map<OmittedTypeAnnotation, _SynthesizedNamePart> typeNames = {};
+    List<_Part> importParts = [];
+    List<_Part> directivesParts = [];
+    List<_StringPart> stringParts = [];
+    StringBuffer directivesStringPartBuffer = new StringBuffer();
+
+    void flushStringParts() {
+      if (directivesStringPartBuffer.isNotEmpty) {
+        _StringPart stringPart =
+            new _StringPart(directivesStringPartBuffer.toString());
+        directivesParts.add(stringPart);
+        stringParts.add(stringPart);
+        directivesStringPartBuffer = new StringBuffer();
+      }
+    }
 
     // Keeps track of the last part written in `lastDirectivePart`.
     String lastDirectivePart = '';
-    void writeDirectivePart(String part) {
+    void writeDirectiveStringPart(String part) {
       lastDirectivePart = part;
-      directivesBuffer.write(part);
+      directivesStringPartBuffer.write(part);
+    }
+
+    void writeDirectiveSynthesizedNamePart(_SynthesizedNamePart part) {
+      flushStringParts();
+      lastDirectivePart = '';
+      directivesParts.add(part);
     }
 
     void buildCode(Code code) {
       for (Object part in code.parts) {
         if (part is String) {
-          writeDirectivePart(part);
+          writeDirectiveStringPart(part);
         } else if (part is Code) {
           buildCode(part);
         } else if (part is Identifier) {
           ResolvedIdentifier resolved = resolveIdentifier(part);
-          String? prefix;
+          _SynthesizedNamePart? prefix;
           if (resolved.uri != null) {
-            prefix = importPrefixes.putIfAbsent(resolved.uri!, () {
-              String prefix = 'i${nextPrefix++}';
-              importsBuffer.writeln("import '${resolved.uri}' as $prefix;");
+            prefix = importNames.putIfAbsent(resolved.uri!, () {
+              _SynthesizedNamePart prefix = new _SynthesizedNamePart();
+              importParts.add(new _StringPart("import '${resolved.uri}' as "));
+              importParts.add(prefix);
+              importParts.add(new _StringPart(";\n"));
               return prefix;
             });
           }
           if (resolved.kind == IdentifierKind.instanceMember) {
             // Qualify with `this.` if we don't have a receiver.
             if (!lastDirectivePart.trimRight().endsWith('.')) {
-              writeDirectivePart('this.');
+              writeDirectiveStringPart('this.');
             }
           } else if (prefix != null) {
-            writeDirectivePart('${prefix}.');
+            writeDirectiveSynthesizedNamePart(prefix);
+            writeDirectiveStringPart('.');
           }
           if (resolved.kind == IdentifierKind.staticInstanceMember) {
-            writeDirectivePart('${resolved.staticScope!}.');
+            writeDirectiveStringPart('${resolved.staticScope!}.');
           }
-          writeDirectivePart('${part.name}');
+          writeDirectiveStringPart('${part.name}');
+        } else if (part is OmittedTypeAnnotation) {
+          TypeAnnotation? type = typeInferrer(part);
+          if (type == null) {
+            if (omittedTypes != null) {
+              _SynthesizedNamePart name =
+                  typeNames.putIfAbsent(part, () => new _SynthesizedNamePart());
+              writeDirectiveSynthesizedNamePart(name);
+            } else {
+              throw new ArgumentError("No type inferred for $part");
+            }
+          } else {
+            buildCode(type.code);
+          }
         } else {
           throw new ArgumentError(
               'Code objects only support String, Identifier, and Code '
@@ -63,7 +100,7 @@
     for (MacroExecutionResult result in macroResults) {
       for (DeclarationCode augmentation in result.libraryAugmentations) {
         buildCode(augmentation);
-        directivesBuffer.writeln();
+        writeDirectiveStringPart('\n');
       }
       for (MapEntry<String, Iterable<DeclarationCode>> entry
           in result.classAugmentations.entries) {
@@ -74,13 +111,79 @@
     }
     for (MapEntry<String, List<DeclarationCode>> entry
         in mergedClassResults.entries) {
-      directivesBuffer.writeln('augment class ${entry.key} {');
+      writeDirectiveStringPart('augment class ${entry.key} {\n');
       for (DeclarationCode augmentation in entry.value) {
         buildCode(augmentation);
-        directivesBuffer.writeln();
+        writeDirectiveStringPart('\n');
       }
-      directivesBuffer.writeln('}');
+      writeDirectiveStringPart('}\n');
     }
-    return '$importsBuffer\n\n$directivesBuffer';
+    flushStringParts();
+
+    if (importNames.isNotEmpty) {
+      String prefix = _computeFreshPrefix(stringParts, 'prefix');
+      int index = 0;
+      for (_SynthesizedNamePart part in importNames.values) {
+        part.text = '$prefix${index++}';
+      }
+    }
+    if (omittedTypes != null && typeNames.isNotEmpty) {
+      String prefix = _computeFreshPrefix(stringParts, 'OmittedType');
+      int index = 0;
+      typeNames.forEach(
+          (OmittedTypeAnnotation omittedType, _SynthesizedNamePart part) {
+        String name = '$prefix${index++}';
+        part.text = name;
+        omittedTypes[omittedType] = name;
+      });
+    }
+
+    StringBuffer sb = new StringBuffer();
+    for (_Part part in importParts) {
+      sb.write(part.text);
+    }
+    sb.write('\n');
+    for (_Part part in directivesParts) {
+      sb.write(part.text);
+    }
+
+    return sb.toString();
   }
 }
+
+abstract class _Part {
+  String get text;
+}
+
+class _SynthesizedNamePart implements _Part {
+  late String text;
+}
+
+class _StringPart implements _Part {
+  final String text;
+
+  _StringPart(this.text);
+}
+
+/// Computes a name starting with [name] that is unique with respect to the
+/// text in [stringParts].
+///
+/// This algorithm assumes that no two parts in [stringParts] occur in direct
+/// sequence where they are used, i.e. there is always at least one
+/// [_SynthesizedNamePart] between them.
+String _computeFreshPrefix(List<_StringPart> stringParts, String name) {
+  int index = -1;
+  String prefix = name;
+  for (_StringPart part in stringParts) {
+    while (part.text.contains(prefix)) {
+      index++;
+      prefix = '$name$index';
+    }
+  }
+  if (index > 0) {
+    // Add a separator when an index was needed. This is to ensure that
+    // suffixing number to [prefix] doesn't blend the digits.
+    prefix = '${prefix}_';
+  }
+  return prefix;
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
index 6f522e0..b7391e9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
@@ -129,14 +129,16 @@
 
 /// Base class for all [DefinitionBuilder]s.
 class DefinitionBuilderBase extends DeclarationBuilderBase
-    implements TypeDeclarationResolver {
+    implements TypeDeclarationResolver, TypeInferrer {
   final TypeDeclarationResolver typeDeclarationResolver;
+  final TypeInferrer typeInferrer;
 
   DefinitionBuilderBase(
       IdentifierResolver identifierResolver,
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       this.typeDeclarationResolver,
+      this.typeInferrer,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : super(identifierResolver, classIntrospector, typeResolver,
@@ -146,6 +148,10 @@
   @override
   Future<TypeDeclaration> declarationOf(IdentifierImpl identifier) =>
       typeDeclarationResolver.declarationOf(identifier);
+
+  @override
+  Future<TypeAnnotation> inferType(OmittedTypeAnnotationImpl omittedType) =>
+      typeInferrer.inferType(omittedType);
 }
 
 class ClassDefinitionBuilderImpl extends DefinitionBuilderBase
@@ -159,10 +165,11 @@
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : super(identifierResolver, classIntrospector, typeResolver,
-            typeDeclarationResolver,
+            typeDeclarationResolver, typeInferrer,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -173,7 +180,7 @@
         (await classIntrospector.constructorsOf(declaration))
             .firstWhere((constructor) => constructor.identifier == identifier);
     return new ConstructorDefinitionBuilderImpl(constructor, identifierResolver,
-        classIntrospector, typeResolver, typeDeclarationResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver, typeInferrer,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -183,7 +190,7 @@
     FieldDeclaration field = (await classIntrospector.fieldsOf(declaration))
         .firstWhere((field) => field.identifier == identifier);
     return new VariableDefinitionBuilderImpl(field, identifierResolver,
-        classIntrospector, typeResolver, typeDeclarationResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver, typeInferrer,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -193,7 +200,7 @@
     MethodDeclaration method = (await classIntrospector.methodsOf(declaration))
         .firstWhere((method) => method.identifier == identifier);
     return new FunctionDefinitionBuilderImpl(method, identifierResolver,
-        classIntrospector, typeResolver, typeDeclarationResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver, typeInferrer,
         parentClassAugmentations: _classAugmentations,
         parentLibraryAugmentations: _libraryAugmentations);
   }
@@ -210,10 +217,11 @@
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : super(identifierResolver, classIntrospector, typeResolver,
-            typeDeclarationResolver,
+            typeDeclarationResolver, typeInferrer,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -242,10 +250,11 @@
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : super(identifierResolver, classIntrospector, typeResolver,
-            typeDeclarationResolver,
+            typeDeclarationResolver, typeInferrer,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
@@ -272,10 +281,11 @@
       ClassIntrospector classIntrospector,
       TypeResolver typeResolver,
       TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer,
       {Map<String, List<DeclarationCode>>? parentClassAugmentations,
       List<DeclarationCode>? parentLibraryAugmentations})
       : super(identifierResolver, classIntrospector, typeResolver,
-            typeDeclarationResolver,
+            typeDeclarationResolver, typeInferrer,
             parentClassAugmentations: parentClassAugmentations,
             parentLibraryAugmentations: parentLibraryAugmentations);
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
index af3224f..67b8171 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
@@ -105,13 +105,19 @@
     IdentifierResolver identifierResolver,
     ClassIntrospector classIntrospector,
     TypeResolver typeResolver,
-    TypeDeclarationResolver typeDeclarationResolver) async {
+    TypeDeclarationResolver typeDeclarationResolver,
+    TypeInferrer typeInferrer) async {
   if (declaration is FunctionDeclaration) {
     if (macro is ConstructorDefinitionMacro &&
         declaration is ConstructorDeclaration) {
       ConstructorDefinitionBuilderImpl builder =
-          new ConstructorDefinitionBuilderImpl(declaration, identifierResolver,
-              classIntrospector, typeResolver, typeDeclarationResolver);
+          new ConstructorDefinitionBuilderImpl(
+              declaration,
+              identifierResolver,
+              classIntrospector,
+              typeResolver,
+              typeDeclarationResolver,
+              typeInferrer);
       await macro.buildDefinitionForConstructor(declaration, builder);
       return builder.result;
     } else {
@@ -120,7 +126,8 @@
           identifierResolver,
           classIntrospector,
           typeResolver,
-          typeDeclarationResolver);
+          typeDeclarationResolver,
+          typeInferrer);
       if (macro is MethodDefinitionMacro && declaration is MethodDeclaration) {
         await macro.buildDefinitionForMethod(declaration, builder);
         return builder.result;
@@ -135,7 +142,8 @@
         identifierResolver,
         classIntrospector,
         typeResolver,
-        typeDeclarationResolver);
+        typeDeclarationResolver,
+        typeInferrer);
     if (macro is FieldDefinitionMacro && declaration is FieldDeclaration) {
       await macro.buildDefinitionForField(declaration, builder);
       return builder.result;
@@ -149,7 +157,8 @@
         identifierResolver,
         classIntrospector,
         typeResolver,
-        typeDeclarationResolver);
+        typeDeclarationResolver,
+        typeInferrer);
     await macro.buildDefinitionForClass(declaration, builder);
     return builder.result;
   }
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
index 940fa5a..5609883 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
@@ -114,6 +114,21 @@
               response.serialize(serializer);
               sendResult(serializer);
               break;
+            case MessageType.inferTypeRequest:
+              InferTypeRequest request =
+                  new InferTypeRequest.deserialize(deserializer, zoneId);
+              TypeAnnotationImpl inferredType =
+                  await (request.typeInferrer.instance as TypeInferrer)
+                      .inferType(request.omittedType) as TypeAnnotationImpl;
+              SerializableResponse response = new SerializableResponse(
+                  response: inferredType,
+                  requestId: request.id,
+                  responseType: MessageType.remoteInstance,
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
             case MessageType.isExactlyTypeRequest:
               IsExactlyTypeRequest request =
                   new IsExactlyTypeRequest.deserialize(deserializer, zoneId);
@@ -147,15 +162,35 @@
             case MessageType.declarationOfRequest:
               DeclarationOfRequest request =
                   new DeclarationOfRequest.deserialize(deserializer, zoneId);
-              TypeDeclarationResolver resolver = request
-                  .typeDeclarationResolver.instance as TypeDeclarationResolver;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.remoteInstance,
-                  response: (await resolver.declarationOf(request.identifier)
-                      // TODO: Consider refactoring to avoid the need for this.
-                      as TypeDeclarationImpl),
-                  serializationZoneId: zoneId);
+              SerializableResponse response;
+              try {
+                TypeDeclarationResolver resolver = request
+                    .typeDeclarationResolver
+                    .instance as TypeDeclarationResolver;
+                response = new SerializableResponse(
+                    requestId: request.id,
+                    responseType: MessageType.remoteInstance,
+                    response: (await resolver.declarationOf(request.identifier)
+                        // TODO: Consider refactoring to avoid the need for
+                        //  this.
+                        as TypeDeclarationImpl),
+                    serializationZoneId: zoneId);
+              } on ArgumentError catch (error) {
+                response = new SerializableResponse(
+                    error: '$error',
+                    requestId: request.id,
+                    responseType: MessageType.argumentError,
+                    serializationZoneId: zoneId);
+              } catch (error, stackTrace) {
+                // TODO(johnniwinther,jakemac): How should we handle errors in
+                // general?
+                response = new SerializableResponse(
+                    error: '$error',
+                    stackTrace: '$stackTrace',
+                    requestId: request.id,
+                    responseType: MessageType.error,
+                    serializationZoneId: zoneId);
+              }
               Serializer serializer = serializerFactory();
               response.serialize(serializer);
               sendResult(serializer);
@@ -278,8 +313,11 @@
 
   /// These calls are handled by the higher level executor.
   @override
-  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-          ResolvedIdentifier Function(Identifier) resolveIdentifier) =>
+  String buildAugmentationLibrary(
+          Iterable<MacroExecutionResult> macroResults,
+          ResolvedIdentifier Function(Identifier) resolveIdentifier,
+          TypeAnnotation? Function(OmittedTypeAnnotation) inferOmittedType,
+          {Map<OmittedTypeAnnotation, String>? omittedTypes}) =>
       throw new StateError('Unreachable');
 
   @override
@@ -313,7 +351,8 @@
           IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector,
-          TypeDeclarationResolver typeDeclarationResolver) =>
+          TypeDeclarationResolver typeDeclarationResolver,
+          TypeInferrer typeInferrer) =>
       _sendRequest((zoneId) => new ExecuteDefinitionsPhaseRequest(
           macro,
           declaration,
@@ -333,6 +372,10 @@
               instance: typeDeclarationResolver,
               id: RemoteInstance.uniqueId,
               kind: RemoteInstanceKind.typeDeclarationResolver),
+          new RemoteInstanceImpl(
+              instance: typeInferrer,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.typeInferrer),
           serializationZoneId: zoneId));
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart
index 857674e..29c443b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart
@@ -156,6 +156,18 @@
   }
 }
 
+class OmittedTypeAnnotationImpl extends TypeAnnotationImpl
+    implements OmittedTypeAnnotation {
+  OmittedTypeAnnotationImpl({required int id})
+      : super(id: id, isNullable: false);
+
+  @override
+  TypeAnnotationCode get code => new OmittedTypeAnnotationCode(this);
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.omittedTypeAnnotation;
+}
+
 abstract class DeclarationImpl extends RemoteInstance implements Declaration {
   final IdentifierImpl identifier;
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/message_grouper.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/message_grouper.dart
index 7e2d390..382dd81 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/message_grouper.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/message_grouper.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:math';
 import 'dart:typed_data';
 
 /// Collects messages from an input stream of bytes.
@@ -14,18 +13,11 @@
   /// The input bytes stream subscription.
   late final StreamSubscription _inputStreamSubscription;
 
-  /// The length of the current message to read, or `-1` if we are currently
-  /// reading the length.
-  int _length = -1;
-
   /// The buffer to store the length bytes in.
-  BytesBuilder _lengthBuffer = new BytesBuilder();
+  final _FixedBuffer _lengthBuffer = new _FixedBuffer(4);
 
   /// If reading raw data, buffer for the data.
-  Uint8List _messageBuffer = new Uint8List(0);
-
-  /// The position to write the next byte in [_messageBuffer].
-  int _messagePos = 0;
+  _FixedBuffer? _messageBuffer;
 
   late StreamController<Uint8List> _messageStreamController =
       new StreamController<Uint8List>(onCancel: () {
@@ -38,45 +30,36 @@
   }
 
   void _handleBytes(List<int> bytes, [int offset = 0]) {
-    if (_length == -1) {
-      while (_lengthBuffer.length < 4 && offset < bytes.length) {
+    final _FixedBuffer? messageBuffer = _messageBuffer;
+    if (messageBuffer == null) {
+      while (offset < bytes.length && !_lengthBuffer.isReady) {
         _lengthBuffer.addByte(bytes[offset++]);
       }
-      if (_lengthBuffer.length >= 4) {
-        Uint8List lengthBytes = _lengthBuffer.takeBytes();
-        _length = lengthBytes[0] << 24 |
-            lengthBytes[1] << 16 |
-            lengthBytes[2] << 8 |
-            lengthBytes[3];
+      if (_lengthBuffer.isReady) {
+        int length = _lengthBuffer[0] << 24 |
+            _lengthBuffer[1] << 16 |
+            _lengthBuffer[2] << 8 |
+            _lengthBuffer[3];
+        // Reset the length reading state.
+        _lengthBuffer.reset();
+        // Switch to the message payload reading state.
+        _messageBuffer = new _FixedBuffer(length);
+        _handleBytes(bytes, offset);
+      } else {
+        // Continue reading the length.
+        return;
       }
-    }
+    } else {
+      // Read the data from `bytes`.
+      while (offset < bytes.length && !messageBuffer.isReady) {
+        messageBuffer.addByte(bytes[offset++]);
+      }
 
-    // Just pass along `bytes` without a copy if we can, and reset our state
-    if (offset == 0 && bytes.length == _length && bytes is Uint8List) {
-      _length = -1;
-      _messageStreamController.add(bytes);
-      return;
-    }
-
-    // Initialize a new buffer.
-    if (_messagePos == 0) {
-      _messageBuffer = new Uint8List(_length);
-    }
-
-    // Read the data from `bytes`.
-    int lenToRead = min(_length - _messagePos, bytes.length - offset);
-    while (lenToRead-- > 0) {
-      _messageBuffer[_messagePos++] = bytes[offset++];
-    }
-
-    // If we completed a message, add it to the output stream, reset our state,
-    // and call ourselves again if we have more data to read.
-    if (_messagePos >= _length) {
-      _messageStreamController.add(_messageBuffer);
-      _length = -1;
-      _messagePos = 0;
-
-      if (offset < bytes.length) {
+      // If we completed a message, add it to the output stream.
+      if (messageBuffer.isReady) {
+        _messageStreamController.add(messageBuffer.bytes);
+        // Switch to the length reading state.
+        _messageBuffer = null;
         _handleBytes(bytes, offset);
       }
     }
@@ -89,3 +72,27 @@
     _messageStreamController.close();
   }
 }
+
+/// A buffer of fixed length.
+class _FixedBuffer {
+  final Uint8List bytes;
+
+  /// The offset in [bytes].
+  int _offset = 0;
+
+  _FixedBuffer(int length) : bytes = new Uint8List(length);
+
+  /// Return `true` when the required number of bytes added.
+  bool get isReady => _offset == bytes.length;
+
+  int operator [](int index) => bytes[index];
+
+  void addByte(int byte) {
+    bytes[_offset++] = byte;
+  }
+
+  /// Reset the number of added bytes to zero.
+  void reset() {
+    _offset = 0;
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
index aa7c907..654669d 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
@@ -49,14 +49,16 @@
           IdentifierResolver identifierResolver,
           TypeResolver typeResolver,
           ClassIntrospector classIntrospector,
-          TypeDeclarationResolver typeDeclarationResolver) =>
+          TypeDeclarationResolver typeDeclarationResolver,
+          TypeInferrer typeInferrer) =>
       _executors[macro]!.executeDefinitionsPhase(
           macro,
           declaration,
           identifierResolver,
           typeResolver,
           classIntrospector,
-          typeDeclarationResolver);
+          typeDeclarationResolver,
+          typeInferrer);
 
   @override
   Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/process_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/process_executor.dart
index ed67219..07b02f0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/process_executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/process_executor.dart
@@ -23,19 +23,25 @@
 /// programs spawned must use the corresponding `client` variant.
 ///
 /// This is the only public api exposed by this library.
-Future<MacroExecutor> start(SerializationMode serializationMode) async =>
+Future<MacroExecutor> start(SerializationMode serializationMode,
+        CommunicationChannel communicationChannel) async =>
     new MultiMacroExecutor((Uri library, String name,
         {Uri? precompiledKernelUri}) {
+      // TODO: We actually assume this is a full precompiled AOT binary, and
+      // not a kernel file. We launch it directly using `Process.start`.
       if (precompiledKernelUri == null) {
         throw new UnsupportedError(
             'This environment requires a non-null `precompiledKernelUri` to be '
             'passed when loading macros.');
       }
-
-      // TODO: We actually assume this is a full precompiled AOT binary, and not
-      // a kernel file. We launch it directly using `Process.start`.
-      return _SingleProcessMacroExecutor.start(
-          library, name, serializationMode, precompiledKernelUri.toFilePath());
+      switch (communicationChannel) {
+        case CommunicationChannel.stdio:
+          return _SingleProcessMacroExecutor.startWithStdio(library, name,
+              serializationMode, precompiledKernelUri.toFilePath());
+        case CommunicationChannel.socket:
+          return _SingleProcessMacroExecutor.startWithSocket(library, name,
+              serializationMode, precompiledKernelUri.toFilePath());
+      }
     });
 
 /// Actual implementation of the separate process based macro executor.
@@ -55,8 +61,65 @@
       : super(
             messageStream: messageStream, serializationMode: serializationMode);
 
-  static Future<_SingleProcessMacroExecutor> start(Uri library, String name,
-      SerializationMode serializationMode, String programPath) async {
+  static Future<_SingleProcessMacroExecutor> startWithSocket(
+      Uri library,
+      String name,
+      SerializationMode serializationMode,
+      String programPath) async {
+    late ServerSocket serverSocket;
+    // Try an ipv6 address loopback first, and fall back on ipv4.
+    try {
+      serverSocket = await ServerSocket.bind(InternetAddress.loopbackIPv6, 0);
+    } on SocketException catch (_) {
+      serverSocket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
+    }
+    Process process = await Process.start(programPath, [
+      serverSocket.address.address,
+      serverSocket.port.toString(),
+    ]);
+    process.stderr
+        .transform(const Utf8Decoder())
+        .listen((content) => throw new RemoteException(content));
+    process.stdout.transform(const Utf8Decoder()).listen(
+        (event) => print('Stdout from MacroExecutor at $programPath:\n$event'));
+
+    Completer<Socket> clientCompleter = new Completer();
+    serverSocket.listen((client) {
+      clientCompleter.complete(client);
+    });
+    Socket client = await clientCompleter.future;
+
+    Stream<Object> messageStream;
+
+    if (serializationMode == SerializationMode.byteDataServer) {
+      messageStream = new MessageGrouper(client).messageStream;
+    } else if (serializationMode == SerializationMode.jsonServer) {
+      messageStream = const Utf8Decoder()
+          .bind(client)
+          .transform(const LineSplitter())
+          .map((line) => jsonDecode(line)!);
+    } else {
+      throw new UnsupportedError(
+          'Unsupported serialization mode \$serializationMode for '
+          'ProcessExecutor');
+    }
+
+    return new _SingleProcessMacroExecutor(
+        onClose: () {
+          client.close();
+          serverSocket.close();
+          process.kill();
+        },
+        messageStream: messageStream,
+        outSink: client,
+        serializationMode: serializationMode);
+  }
+
+  static Future<_SingleProcessMacroExecutor> startWithStdio(
+      Uri library,
+      String name,
+      SerializationMode serializationMode,
+      String programPath) async {
     Process process = await Process.start(programPath, []);
     process.stderr
         .transform(const Utf8Decoder())
@@ -115,3 +178,8 @@
     }
   }
 }
+
+enum CommunicationChannel {
+  socket,
+  stdio,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
index 73d051c6..b868726 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
@@ -92,6 +92,10 @@
         deserializer.moveNext();
         stackTrace = deserializer.expectNullableString();
         break;
+      case MessageType.argumentError:
+        deserializer.moveNext();
+        error = deserializer.expectString();
+        break;
       case MessageType.macroClassIdentifier:
         response = new MacroClassIdentifierImpl.deserialize(deserializer);
         break;
@@ -140,6 +144,9 @@
         serializer.addString(error!.toString());
         serializer.addNullableString(stackTrace);
         break;
+      case MessageType.argumentError:
+        serializer.addString(error!.toString());
+        break;
       default:
         response.serializeNullable(serializer);
     }
@@ -322,6 +329,7 @@
   final RemoteInstanceImpl typeResolver;
   final RemoteInstanceImpl classIntrospector;
   final RemoteInstanceImpl typeDeclarationResolver;
+  final RemoteInstanceImpl typeInferrer;
 
   ExecuteDefinitionsPhaseRequest(
       this.macro,
@@ -330,6 +338,7 @@
       this.typeResolver,
       this.classIntrospector,
       this.typeDeclarationResolver,
+      this.typeInferrer,
       {required int serializationZoneId})
       : super(serializationZoneId: serializationZoneId);
 
@@ -343,6 +352,7 @@
         typeResolver = RemoteInstance.deserialize(deserializer),
         classIntrospector = RemoteInstance.deserialize(deserializer),
         typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
+        typeInferrer = RemoteInstance.deserialize(deserializer),
         super.deserialize(deserializer, serializationZoneId);
 
   void serialize(Serializer serializer) {
@@ -353,6 +363,7 @@
     typeResolver.serialize(serializer);
     classIntrospector.serialize(serializer);
     typeDeclarationResolver.serialize(serializer);
+    typeInferrer.serialize(serializer);
 
     super.serialize(serializer);
   }
@@ -519,8 +530,35 @@
   }
 }
 
+/// A request to get an inferred [TypeAnnotation] for an
+/// [OmittedTypeAnnotation].
+class InferTypeRequest extends Request {
+  final OmittedTypeAnnotationImpl omittedType;
+  final RemoteInstanceImpl typeInferrer;
+
+  InferTypeRequest(this.omittedType, this.typeInferrer,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  InferTypeRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : omittedType = RemoteInstance.deserialize(deserializer),
+        typeInferrer = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.inferTypeRequest.index);
+    omittedType.serialize(serializer);
+    typeInferrer.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
 /// Client side implementation of an [IdentifierResolver], which creates a
-/// [ResolveIdentifierRequest] and passes it to a given [sendRequest] function
+/// [ResolveIdentifierRequest] and passes it to a given [_sendRequest] function
 /// which can return the [Response].
 class ClientIdentifierResolver implements IdentifierResolver {
   /// The actual remote instance of this type resolver.
@@ -735,6 +773,31 @@
   }
 }
 
+/// Client side implementation of a [TypeInferrer], converts all
+/// invocations into remote procedure calls.
+class ClientTypeInferrer implements TypeInferrer {
+  /// The actual remote instance of this type resolver.
+  final RemoteInstanceImpl remoteInstance;
+
+  /// The ID of the zone in which to find the original type resolver.
+  final int serializationZoneId;
+
+  /// A function that can send a request and return a response using an
+  /// arbitrary communication channel.
+  final Future<Response> Function(Request request) sendRequest;
+
+  ClientTypeInferrer(this.sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<TypeAnnotation> inferType(
+      OmittedTypeAnnotationImpl omittedType) async {
+    InferTypeRequest request = new InferTypeRequest(omittedType, remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<TypeAnnotation>(await sendRequest(request));
+  }
+}
+
 /// An exception that occurred remotely, the exception object and stack trace
 /// are serialized as [String]s and both included in the [toString] output.
 class RemoteException implements Exception {
@@ -752,11 +815,15 @@
 T _handleResponse<T>(Response response) {
   if (response.responseType == MessageType.error) {
     throw new RemoteException(response.error!.toString(), response.stackTrace);
+  } else if (response.responseType == MessageType.argumentError) {
+    throw new ArgumentError(response.error!.toString());
   }
+
   return response.response as T;
 }
 
 enum MessageType {
+  argumentError,
   boolean,
   constructorsOfRequest,
   declarationOfRequest,
@@ -773,6 +840,7 @@
   instantiateMacroRequest,
   resolveIdentifierRequest,
   resolveTypeRequest,
+  inferTypeRequest,
   isExactlyTypeRequest,
   isSubtypeOfRequest,
   loadMacroRequest,
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
index fc45704..4ec67e4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart
@@ -100,11 +100,13 @@
   namedStaticType,
   methodDeclaration,
   namedTypeAnnotation,
+  omittedTypeAnnotation,
   parameterDeclaration,
   staticType,
   typeAliasDeclaration,
   typeParameterDeclaration,
   typeResolver,
   typeDeclarationResolver,
+  typeInferrer,
   variableDeclaration,
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
index d039f7d..8cf9207 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
@@ -22,6 +22,7 @@
       case RemoteInstanceKind.staticType:
       case RemoteInstanceKind.typeDeclarationResolver:
       case RemoteInstanceKind.typeResolver:
+      case RemoteInstanceKind.typeInferrer:
         // These are simple wrappers, just pass in the kind
         return new RemoteInstanceImpl(id: id, kind: kind) as T;
       case RemoteInstanceKind.classDeclaration:
@@ -48,6 +49,9 @@
       case RemoteInstanceKind.namedTypeAnnotation:
         moveNext();
         return _expectNamedTypeAnnotation(id) as T;
+      case RemoteInstanceKind.omittedTypeAnnotation:
+        moveNext();
+        return _expectOmittedTypeAnnotation(id) as T;
       case RemoteInstanceKind.parameterDeclaration:
         moveNext();
         return _expectParameterDeclaration(id) as T;
@@ -80,6 +84,13 @@
         typeArguments: (this..moveNext())._expectRemoteInstanceList(),
       );
 
+  OmittedTypeAnnotation _expectOmittedTypeAnnotation(int id) {
+    expectBool(); // Always `false`.
+    return new OmittedTypeAnnotationImpl(
+      id: id,
+    );
+  }
+
   FunctionTypeAnnotation _expectFunctionTypeAnnotation(int id) =>
       new FunctionTypeAnnotationImpl(
         id: id,
@@ -274,6 +285,9 @@
       case CodeKind.nullableTypeAnnotation:
         return new NullableTypeAnnotationCode((this..moveNext()).expectCode())
             as T;
+      case CodeKind.omittedTypeAnnotation:
+        return new OmittedTypeAnnotationCode(RemoteInstance.deserialize(this))
+            as T;
       case CodeKind.parameter:
         return new ParameterCode(
             defaultValue: (this..moveNext()).expectNullableCode(),
@@ -354,6 +368,11 @@
         NullableTypeAnnotationCode self = this as NullableTypeAnnotationCode;
         self.underlyingType.serialize(serializer);
         return;
+      case CodeKind.omittedTypeAnnotation:
+        OmittedTypeAnnotationCode self = this as OmittedTypeAnnotationCode;
+        (self.typeAnnotation as OmittedTypeAnnotationImpl)
+            .serialize(serializer);
+        return;
       case CodeKind.parameter:
         ParameterCode self = this as ParameterCode;
         self.defaultValue.serializeNullable(serializer);
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index a9ec81e..830127a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -687,6 +687,52 @@
         r"""Try providing type arguments for the literal explicitly to disambiguate it.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateCantHaveNamedParameters =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""'#name' can't be declared with named parameters.""",
+        withArguments: _withArgumentsCantHaveNamedParameters);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeCantHaveNamedParameters =
+    const Code<Message Function(String name)>(
+  "CantHaveNamedParameters",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCantHaveNamedParameters(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeCantHaveNamedParameters,
+      problemMessage: """'${name}' can't be declared with named parameters.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateCantHaveOptionalParameters =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""'#name' can't be declared with optional parameters.""",
+        withArguments: _withArgumentsCantHaveOptionalParameters);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeCantHaveOptionalParameters =
+    const Code<Message Function(String name)>(
+  "CantHaveOptionalParameters",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCantHaveOptionalParameters(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeCantHaveOptionalParameters,
+      problemMessage:
+          """'${name}' can't be declared with optional parameters.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCantInferPackagesFromManyInputs =
     messageCantInferPackagesFromManyInputs;
 
@@ -2736,6 +2782,14 @@
     problemMessage: r"""Unable to decode bytes as UTF-8.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumAbstractMember = messageEnumAbstractMember;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumAbstractMember = const MessageCode(
+    "EnumAbstractMember",
+    problemMessage: r"""Enums can't declare abstract members.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String
@@ -2778,14 +2832,38 @@
     problemMessage: r"""Enum constructors can't be torn off.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateEnumContainsRestrictedInstanceDeclaration =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""An enum can't declare a non-abstract member named '#name'.""",
+        withArguments: _withArgumentsEnumContainsRestrictedInstanceDeclaration);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeEnumContainsRestrictedInstanceDeclaration =
+    const Code<Message Function(String name)>(
+  "EnumContainsRestrictedInstanceDeclaration",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumContainsRestrictedInstanceDeclaration(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeEnumContainsRestrictedInstanceDeclaration,
+      problemMessage:
+          """An enum can't declare a non-abstract member named '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumContainsValuesDeclaration =
     messageEnumContainsValuesDeclaration;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEnumContainsValuesDeclaration = const MessageCode(
     "EnumContainsValuesDeclaration",
-    problemMessage:
-        r"""Enums can't contain declarations of members with the name 'values'.""");
+    problemMessage: r"""An enum can't declare a member named 'values'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumDeclarationEmpty = messageEnumDeclarationEmpty;
@@ -2807,16 +2885,6 @@
         r"""Try removing the factory constructor declaration.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeEnumEntryWithTypeArgumentsWithoutArguments =
-    messageEnumEntryWithTypeArgumentsWithoutArguments;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageEnumEntryWithTypeArgumentsWithoutArguments =
-    const MessageCode("EnumEntryWithTypeArgumentsWithoutArguments",
-        problemMessage:
-            r"""Missing arguments in enum constructor invocation.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumFactoryRedirectsToConstructor =
     messageEnumFactoryRedirectsToConstructor;
 
@@ -2827,6 +2895,35 @@
         r"""Enum factory constructors can't redirect to generative constructors.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, String name2)>
+    templateEnumImplementerContainsRestrictedInstanceDeclaration =
+    const Template<Message Function(String name, String name2)>(
+        problemMessageTemplate:
+            r"""'#name' has 'Enum' as a superinterface and can't contain non-static members with name '#name2'.""",
+        withArguments:
+            _withArgumentsEnumImplementerContainsRestrictedInstanceDeclaration);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, String name2)>
+    codeEnumImplementerContainsRestrictedInstanceDeclaration =
+    const Code<Message Function(String name, String name2)>(
+  "EnumImplementerContainsRestrictedInstanceDeclaration",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumImplementerContainsRestrictedInstanceDeclaration(
+    String name, String name2) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  if (name2.isEmpty) throw 'No name provided';
+  name2 = demangleMixinApplicationName(name2);
+  return new Message(codeEnumImplementerContainsRestrictedInstanceDeclaration,
+      problemMessage:
+          """'${name}' has 'Enum' as a superinterface and can't contain non-static members with name '${name2}'.""",
+      arguments: {'name': name, 'name2': name2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateEnumImplementerContainsValuesDeclaration =
     const Template<Message Function(String name)>(
@@ -2861,6 +2958,38 @@
     correctionMessage: r"""Try moving the enum to the top-level.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateEnumInheritsRestricted =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""An enum can't inherit a member named '#name'.""",
+        withArguments: _withArgumentsEnumInheritsRestricted);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeEnumInheritsRestricted =
+    const Code<Message Function(String name)>(
+  "EnumInheritsRestricted",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumInheritsRestricted(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeEnumInheritsRestricted,
+      problemMessage: """An enum can't inherit a member named '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumInheritsRestrictedMember =
+    messageEnumInheritsRestrictedMember;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumInheritsRestrictedMember = const MessageCode(
+    "EnumInheritsRestrictedMember",
+    severity: Severity.context,
+    problemMessage: r"""This is the inherited member""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumInstantiation = messageEnumInstantiation;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3333,27 +3462,29 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String string2)>
+const Template<Message Function(String string, String string2)>
     templateExperimentDisabledInvalidLanguageVersion =
-    const Template<Message Function(String string2)>(
+    const Template<Message Function(String string, String string2)>(
         problemMessageTemplate:
-            r"""This requires the null safety language feature, which requires language version of #string2 or higher.""",
+            r"""This requires the '#string' language feature, which requires language version of #string2 or higher.""",
         withArguments: _withArgumentsExperimentDisabledInvalidLanguageVersion);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String string2)>
+const Code<Message Function(String string, String string2)>
     codeExperimentDisabledInvalidLanguageVersion =
-    const Code<Message Function(String string2)>(
+    const Code<Message Function(String string, String string2)>(
         "ExperimentDisabledInvalidLanguageVersion",
         analyzerCodes: <String>["ParserErrorCode.EXPERIMENT_NOT_ENABLED"]);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsExperimentDisabledInvalidLanguageVersion(String string2) {
+Message _withArgumentsExperimentDisabledInvalidLanguageVersion(
+    String string, String string2) {
+  if (string.isEmpty) throw 'No string provided';
   if (string2.isEmpty) throw 'No string provided';
   return new Message(codeExperimentDisabledInvalidLanguageVersion,
       problemMessage:
-          """This requires the null safety language feature, which requires language version of ${string2} or higher.""",
-      arguments: {'string2': string2});
+          """This requires the '${string}' language feature, which requires language version of ${string2} or higher.""",
+      arguments: {'string': string, 'string2': string2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3389,6 +3520,123 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateExperimentNotEnabledOffByDefault = const Template<
+        Message Function(String string)>(
+    problemMessageTemplate:
+        r"""This requires the experimental '#string' language feature to be enabled.""",
+    correctionMessageTemplate:
+        r"""Try passing the '--enable-experiment=#string' command line option.""",
+    withArguments: _withArgumentsExperimentNotEnabledOffByDefault);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)>
+    codeExperimentNotEnabledOffByDefault =
+    const Code<Message Function(String string)>(
+        "ExperimentNotEnabledOffByDefault",
+        analyzerCodes: <String>["ParserErrorCode.EXPERIMENT_NOT_ENABLED"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExperimentNotEnabledOffByDefault(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeExperimentNotEnabledOffByDefault,
+      problemMessage:
+          """This requires the experimental '${string}' language feature to be enabled.""",
+      correctionMessage: """Try passing the '--enable-experiment=${string}' command line option.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateExperimentOptOutComment = const Template<
+        Message Function(String string)>(
+    problemMessageTemplate:
+        r"""This is the annotation that opts out this library from the '#string' language feature.""",
+    withArguments: _withArgumentsExperimentOptOutComment);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)> codeExperimentOptOutComment =
+    const Code<Message Function(String string)>("ExperimentOptOutComment",
+        severity: Severity.context);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExperimentOptOutComment(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeExperimentOptOutComment,
+      problemMessage:
+          """This is the annotation that opts out this library from the '${string}' language feature.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateExperimentOptOutExplicit = const Template<
+        Message Function(String string, String string2)>(
+    problemMessageTemplate:
+        r"""The '#string' language feature is disabled for this library.""",
+    correctionMessageTemplate:
+        r"""Try removing the `@dart=` annotation or setting the language version to #string2 or higher.""",
+    withArguments: _withArgumentsExperimentOptOutExplicit);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeExperimentOptOutExplicit =
+    const Code<Message Function(String string, String string2)>(
+  "ExperimentOptOutExplicit",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExperimentOptOutExplicit(String string, String string2) {
+  if (string.isEmpty) throw 'No string provided';
+  if (string2.isEmpty) throw 'No string provided';
+  return new Message(codeExperimentOptOutExplicit,
+      problemMessage:
+          """The '${string}' language feature is disabled for this library.""",
+      correctionMessage:
+          """Try removing the `@dart=` annotation or setting the language version to ${string2} or higher.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateExperimentOptOutImplicit = const Template<
+        Message Function(String string, String string2)>(
+    problemMessageTemplate:
+        r"""The '#string' language feature is disabled for this library.""",
+    correctionMessageTemplate:
+        r"""Try removing the package language version or setting the language version to #string2 or higher.""",
+    withArguments: _withArgumentsExperimentOptOutImplicit);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeExperimentOptOutImplicit =
+    const Code<Message Function(String string, String string2)>(
+  "ExperimentOptOutImplicit",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExperimentOptOutImplicit(String string, String string2) {
+  if (string.isEmpty) throw 'No string provided';
+  if (string2.isEmpty) throw 'No string provided';
+  return new Message(codeExperimentOptOutImplicit,
+      problemMessage:
+          """The '${string}' language feature is disabled for this library.""",
+      correctionMessage:
+          """Try removing the package language version or setting the language version to ${string2} or higher.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExplicitExtensionArgumentMismatch =
     messageExplicitExtensionArgumentMismatch;
 
@@ -3963,6 +4211,36 @@
         r"""Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a NativeType integer with a fixed size.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String string, String name)>
+    templateFfiCompoundImplementsFinalizable =
+    const Template<Message Function(String string, String name)>(
+        problemMessageTemplate:
+            r"""#string '#name' can't implement Finalizable.""",
+        correctionMessageTemplate:
+            r"""Try removing the implements clause from '#name'.""",
+        withArguments: _withArgumentsFfiCompoundImplementsFinalizable);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String name)>
+    codeFfiCompoundImplementsFinalizable =
+    const Code<Message Function(String string, String name)>(
+  "FfiCompoundImplementsFinalizable",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsFfiCompoundImplementsFinalizable(
+    String string, String name) {
+  if (string.isEmpty) throw 'No string provided';
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeFfiCompoundImplementsFinalizable,
+      problemMessage: """${string} '${name}' can't implement Finalizable.""",
+      correctionMessage:
+          """Try removing the implements clause from '${name}'.""",
+      arguments: {'string': string, 'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String string,
@@ -5491,6 +5769,33 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateInstanceAndSynthesizedStaticConflict = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""This instance member conflicts with the synthesized static member called '#name'.""",
+    withArguments: _withArgumentsInstanceAndSynthesizedStaticConflict);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeInstanceAndSynthesizedStaticConflict =
+    const Code<Message Function(String name)>(
+        "InstanceAndSynthesizedStaticConflict",
+        analyzerCodes: <String>["CONFLICTING_STATIC_AND_INSTANCE"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsInstanceAndSynthesizedStaticConflict(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeInstanceAndSynthesizedStaticConflict,
+      problemMessage:
+          """This instance member conflicts with the synthesized static member called '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(int count, int count2)>
     templateInstantiationTooFewArguments =
     const Template<Message Function(int count, int count2)>(
@@ -6100,6 +6405,17 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidEscapeStarted = messageInvalidEscapeStarted;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidEscapeStarted = const MessageCode(
+    "InvalidEscapeStarted",
+    index: 126,
+    problemMessage: r"""The string '\' can't stand alone.""",
+    correctionMessage:
+        r"""Try adding another backslash (\) to escape the '\'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateInvalidGetterSetterTypeFieldContext =
     const Template<Message Function(String name)>(
@@ -6424,11 +6740,34 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeInvalidUnicodeEscape = messageInvalidUnicodeEscape;
+const Code<Null> codeInvalidUnicodeEscapeUBracket =
+    messageInvalidUnicodeEscapeUBracket;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageInvalidUnicodeEscape = const MessageCode(
-    "InvalidUnicodeEscape",
+const MessageCode messageInvalidUnicodeEscapeUBracket = const MessageCode(
+    "InvalidUnicodeEscapeUBracket",
+    index: 125,
+    problemMessage:
+        r"""An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidUnicodeEscapeUNoBracket =
+    messageInvalidUnicodeEscapeUNoBracket;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidUnicodeEscapeUNoBracket = const MessageCode(
+    "InvalidUnicodeEscapeUNoBracket",
+    index: 124,
+    problemMessage:
+        r"""An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeInvalidUnicodeEscapeUStarted =
+    messageInvalidUnicodeEscapeUStarted;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageInvalidUnicodeEscapeUStarted = const MessageCode(
+    "InvalidUnicodeEscapeUStarted",
     index: 38,
     problemMessage:
         r"""An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.""");
@@ -6569,17 +6908,6 @@
         r"""Try removing the 'external' keyword or adding a JS interop annotation.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeJsInteropIndexNotSupported =
-    messageJsInteropIndexNotSupported;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageJsInteropIndexNotSupported = const MessageCode(
-    "JsInteropIndexNotSupported",
-    problemMessage:
-        r"""JS interop classes do not support [] and []= operator methods.""",
-    correctionMessage: r"""Try replacing with a normal method.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String name,
@@ -6685,6 +7013,16 @@
     correctionMessage: r"""Try annotating the member with `external`.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeJsInteropOperatorsNotSupported =
+    messageJsInteropOperatorsNotSupported;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageJsInteropOperatorsNotSupported = const MessageCode(
+    "JsInteropOperatorsNotSupported",
+    problemMessage: r"""JS interop classes do not support operator methods.""",
+    correctionMessage: r"""Try replacing this with a normal method.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateJsInteropStaticInteropWithInstanceMembers =
     const Template<Message Function(String name)>(
@@ -7895,72 +8233,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeNonNullableOptOutComment = messageNonNullableOptOutComment;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageNonNullableOptOutComment = const MessageCode(
-    "NonNullableOptOutComment",
-    severity: Severity.context,
-    problemMessage:
-        r"""This is the annotation that opts out this library from null safety features.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        String
-            string)> templateNonNullableOptOutExplicit = const Template<
-        Message Function(String string)>(
-    problemMessageTemplate:
-        r"""Null safety features are disabled for this library.""",
-    correctionMessageTemplate:
-        r"""Try removing the `@dart=` annotation or setting the language version to #string or higher.""",
-    withArguments: _withArgumentsNonNullableOptOutExplicit);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String string)> codeNonNullableOptOutExplicit =
-    const Code<Message Function(String string)>(
-  "NonNullableOptOutExplicit",
-);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNonNullableOptOutExplicit(String string) {
-  if (string.isEmpty) throw 'No string provided';
-  return new Message(codeNonNullableOptOutExplicit,
-      problemMessage: """Null safety features are disabled for this library.""",
-      correctionMessage:
-          """Try removing the `@dart=` annotation or setting the language version to ${string} or higher.""",
-      arguments: {'string': string});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        String
-            string)> templateNonNullableOptOutImplicit = const Template<
-        Message Function(String string)>(
-    problemMessageTemplate:
-        r"""Null safety features are disabled for this library.""",
-    correctionMessageTemplate:
-        r"""Try removing the package language version or setting the language version to #string or higher.""",
-    withArguments: _withArgumentsNonNullableOptOutImplicit);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String string)> codeNonNullableOptOutImplicit =
-    const Code<Message Function(String string)>(
-  "NonNullableOptOutImplicit",
-);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNonNullableOptOutImplicit(String string) {
-  if (string.isEmpty) throw 'No string provided';
-  return new Message(codeNonNullableOptOutImplicit,
-      problemMessage: """Null safety features are disabled for this library.""",
-      correctionMessage:
-          """Try removing the package language version or setting the language version to ${string} or higher.""",
-      arguments: {'string': string});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonPartOfDirectiveInPart = messageNonPartOfDirectiveInPart;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8177,6 +8449,96 @@
         r"""Try moving the '?..' operator to be the first cascade operator in the sequence.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String string2)>
+    templateNullSafetyDisabledInvalidLanguageVersion =
+    const Template<Message Function(String string2)>(
+        problemMessageTemplate:
+            r"""This requires the null safety language feature, which requires language version of #string2 or higher.""",
+        withArguments: _withArgumentsNullSafetyDisabledInvalidLanguageVersion);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string2)>
+    codeNullSafetyDisabledInvalidLanguageVersion =
+    const Code<Message Function(String string2)>(
+        "NullSafetyDisabledInvalidLanguageVersion",
+        analyzerCodes: <String>["ParserErrorCode.EXPERIMENT_NOT_ENABLED"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNullSafetyDisabledInvalidLanguageVersion(String string2) {
+  if (string2.isEmpty) throw 'No string provided';
+  return new Message(codeNullSafetyDisabledInvalidLanguageVersion,
+      problemMessage:
+          """This requires the null safety language feature, which requires language version of ${string2} or higher.""",
+      arguments: {'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeNullSafetyOptOutComment = messageNullSafetyOptOutComment;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageNullSafetyOptOutComment = const MessageCode(
+    "NullSafetyOptOutComment",
+    severity: Severity.context,
+    problemMessage:
+        r"""This is the annotation that opts out this library from null safety features.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateNullSafetyOptOutExplicit = const Template<
+        Message Function(String string)>(
+    problemMessageTemplate:
+        r"""Null safety features are disabled for this library.""",
+    correctionMessageTemplate:
+        r"""Try removing the `@dart=` annotation or setting the language version to #string or higher.""",
+    withArguments: _withArgumentsNullSafetyOptOutExplicit);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)> codeNullSafetyOptOutExplicit =
+    const Code<Message Function(String string)>(
+  "NullSafetyOptOutExplicit",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNullSafetyOptOutExplicit(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeNullSafetyOptOutExplicit,
+      problemMessage: """Null safety features are disabled for this library.""",
+      correctionMessage:
+          """Try removing the `@dart=` annotation or setting the language version to ${string} or higher.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            string)> templateNullSafetyOptOutImplicit = const Template<
+        Message Function(String string)>(
+    problemMessageTemplate:
+        r"""Null safety features are disabled for this library.""",
+    correctionMessageTemplate:
+        r"""Try removing the package language version or setting the language version to #string or higher.""",
+    withArguments: _withArgumentsNullSafetyOptOutImplicit);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string)> codeNullSafetyOptOutImplicit =
+    const Code<Message Function(String string)>(
+  "NullSafetyOptOutImplicit",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNullSafetyOptOutImplicit(String string) {
+  if (string.isEmpty) throw 'No string provided';
+  return new Message(codeNullSafetyOptOutImplicit,
+      problemMessage: """Null safety features are disabled for this library.""",
+      correctionMessage:
+          """Try removing the package language version or setting the language version to ${string} or higher.""",
+      arguments: {'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableInterfaceError =
     const Template<Message Function(String name)>(
         problemMessageTemplate:
@@ -9679,6 +10041,17 @@
     correctionMessage: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSuperParameterInitializerOutsideConstructor =
+    messageSuperParameterInitializerOutsideConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSuperParameterInitializerOutsideConstructor =
+    const MessageCode("SuperParameterInitializerOutsideConstructor",
+        problemMessage:
+            r"""Super-initializer formal parameters can only be used in generative constructors.""",
+        correctionMessage: r"""Try removing 'super.'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateSuperclassHasNoConstructor =
     const Template<Message Function(String name)>(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/formal_parameter_kind.dart b/pkg/_fe_analyzer_shared/lib/src/parser/formal_parameter_kind.dart
index 7e2e6f9..fa76b8b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/formal_parameter_kind.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/formal_parameter_kind.dart
@@ -4,21 +4,35 @@
 
 library _fe_analyzer_shared.parser.formal_parameter_kind;
 
-// TODO(johnniwinther): Update this to support required named arguments.
 enum FormalParameterKind {
-  mandatory,
+  requiredPositional,
+  requiredNamed,
   optionalNamed,
   optionalPositional,
 }
 
-bool isMandatoryFormalParameterKind(FormalParameterKind type) {
-  return FormalParameterKind.mandatory == type;
-}
+extension FormalParameterKindExtension on FormalParameterKind {
+  bool get isRequiredPositional {
+    return FormalParameterKind.requiredPositional == this;
+  }
 
-bool isOptionalNamedFormalParameterKind(FormalParameterKind type) {
-  return FormalParameterKind.optionalNamed == type;
-}
+  bool get isOptionalNamed {
+    return FormalParameterKind.optionalNamed == this;
+  }
 
-bool isOptionalPositionalFormalParameterKind(FormalParameterKind type) {
-  return FormalParameterKind.optionalPositional == type;
+  bool get isOptionalPositional {
+    return FormalParameterKind.optionalPositional == this;
+  }
+
+  bool get isRequiredNamed {
+    return FormalParameterKind.requiredNamed == this;
+  }
+
+  bool get isRequired => isRequiredPositional || isRequiredNamed;
+
+  bool get isOptional => isOptionalPositional || isOptionalNamed;
+
+  bool get isPositional => isRequiredPositional || isOptionalPositional;
+
+  bool get isNamed => isRequiredNamed || isOptionalNamed;
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index b8da52c..4359e27 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -63,10 +63,7 @@
 import 'directive_context.dart';
 
 import 'formal_parameter_kind.dart'
-    show
-        FormalParameterKind,
-        isMandatoryFormalParameterKind,
-        isOptionalPositionalFormalParameterKind;
+    show FormalParameterKind, FormalParameterKindExtension;
 
 import 'forwarding_listener.dart' show ForwardingListener, NullListener;
 
@@ -1398,7 +1395,8 @@
         token = ensureCloseParen(token, begin);
         break;
       }
-      token = parseFormalParameter(token, FormalParameterKind.mandatory, kind);
+      token = parseFormalParameter(
+          token, FormalParameterKind.requiredPositional, kind);
       next = token.next!;
       if (!optional(',', next)) {
         Token next = token.next!;
@@ -1525,6 +1523,7 @@
     if (isModifier(next)) {
       if (optional('required', next)) {
         if (parameterKind == FormalParameterKind.optionalNamed) {
+          parameterKind = FormalParameterKind.requiredNamed;
           requiredToken = token = next;
           next = token.next!;
         }
@@ -1742,11 +1741,10 @@
       // TODO(danrubel): Consider removing the last parameter from the
       // handleValuedFormalParameter event... it appears to be unused.
       listener.handleValuedFormalParameter(equal, next);
-      if (isMandatoryFormalParameterKind(parameterKind)) {
+      if (parameterKind.isRequiredPositional) {
         reportRecoverableError(
             equal, codes.messageRequiredParameterWithDefault);
-      } else if (isOptionalPositionalFormalParameterKind(parameterKind) &&
-          identical(':', value)) {
+      } else if (parameterKind.isOptionalPositional && identical(':', value)) {
         reportRecoverableError(
             equal, codes.messagePositionalParameterWithEquals);
       } else if (inFunctionType ||
@@ -2151,10 +2149,35 @@
     Token beginToken = token;
     token = parseMetadataStar(token);
     token = ensureIdentifier(token, IdentifierContext.enumValueDeclaration);
-    token = parseConstructorReference(token, ConstructorReferenceContext.Const,
-        /* typeArg = */ null, /* isImplicitTypeName = */ true);
+    bool hasTypeArgumentsOrDot = false;
+    {
+      // This is almost a verbatim copy of [parseConstructorReference] inserted
+      // to provide better recovery.
+      Token start = token;
+      listener.handleNoTypeNameInConstructorReference(token.next!);
+      listener.beginConstructorReference(start);
+      TypeParamOrArgInfo typeArg = computeTypeParamOrArg(token);
+      if (typeArg != noTypeParamOrArg) {
+        hasTypeArgumentsOrDot = true;
+      }
+      token = typeArg.parseArguments(token, this);
+      Token? period = null;
+      if (optional('.', token.next!)) {
+        hasTypeArgumentsOrDot = true;
+        period = token.next!;
+        token = ensureIdentifier(
+            period,
+            IdentifierContext
+                .constructorReferenceContinuationAfterTypeArguments);
+      } else {
+        listener.handleNoConstructorReferenceContinuationAfterTypeArguments(
+            token.next!);
+      }
+      listener.endConstructorReference(
+          start, period, token.next!, ConstructorReferenceContext.Const);
+    }
     Token next = token.next!;
-    if (optional('(', next) || optional('<', next)) {
+    if (optional('(', next) || hasTypeArgumentsOrDot) {
       token = parseConstructorInvocationArguments(token);
     } else {
       listener.handleNoArguments(token);
@@ -4638,19 +4661,14 @@
 
   Token parseConstructorReference(
       Token token, ConstructorReferenceContext constructorReferenceContext,
-      [TypeParamOrArgInfo? typeArg, bool isImplicitTypeName = false]) {
+      [TypeParamOrArgInfo? typeArg]) {
+    // Note that there's an almost verbatim copy in [parseEnumElement] so
+    // any change here should be added there too.
     Token start;
-    if (isImplicitTypeName) {
-      listener.handleNoTypeNameInConstructorReference(token.next!);
-      start = token;
-    } else {
-      start = ensureIdentifier(token, IdentifierContext.constructorReference);
-    }
+    start = ensureIdentifier(token, IdentifierContext.constructorReference);
     listener.beginConstructorReference(start);
-    if (!isImplicitTypeName) {
-      token = parseQualifiedRestOpt(
-          start, IdentifierContext.constructorReferenceContinuation);
-    }
+    token = parseQualifiedRestOpt(
+        start, IdentifierContext.constructorReferenceContinuation);
     typeArg ??= computeTypeParamOrArg(token);
     token = typeArg.parseArguments(token, this);
     Token? period = null;
@@ -6710,7 +6728,7 @@
         break;
       }
       Token? colon = null;
-      if (optional(':', next.next!)) {
+      if (optional(':', next.next!) || /* recovery */ optional(':', next)) {
         token =
             ensureIdentifier(token, IdentifierContext.namedArgumentReference)
                 .next!;
@@ -7028,11 +7046,17 @@
         // to determine if this is part of a conditional expression
         //
         Listener originalListener = listener;
-        listener = new ForwardingListener();
-        // TODO(danrubel): consider using TokenStreamGhostWriter here
+        TokenStreamRewriter? originalRewriter = cachedRewriter;
+        listener = new NullListener();
+        UndoableTokenStreamRewriter undoableTokenStreamRewriter =
+            new UndoableTokenStreamRewriter();
+        cachedRewriter = undoableTokenStreamRewriter;
         Token afterExpression =
             parseExpressionWithoutCascade(afterIdentifier).next!;
+        // Undo all changes and reset.
+        undoableTokenStreamRewriter.undo();
         listener = originalListener;
+        cachedRewriter = originalRewriter;
 
         if (optional(':', afterExpression)) {
           // Looks like part of a conditional expression.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart b/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
index c9ec28a..fe146ce 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/quote.dart
@@ -193,8 +193,9 @@
       code = $LF;
     } else if (!isRaw && code == $BACKSLASH) {
       if (codeUnits.length == ++i) {
+        // This should only be reachable in error cases.
         listener.handleUnescapeError(
-            codes.messageInvalidUnicodeEscape, location, i, /* length = */ 1);
+            codes.messageInvalidEscapeStarted, location, i, /* length = */ 1);
         return new String.fromCharCodes(codeUnits);
       }
       code = codeUnits[i];
@@ -240,47 +241,78 @@
       } else if (code == $u) {
         int begin = i;
         if (codeUnits.length == i + 1) {
-          listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-              location, begin, codeUnits.length + 1 - begin);
+          listener.handleUnescapeError(
+              codes.messageInvalidUnicodeEscapeUStarted,
+              location,
+              begin,
+              codeUnits.length + 1 - begin);
           return new String.fromCharCodes(codeUnits);
         }
         code = codeUnits[i + 1];
+        bool foundEndBracket = false;
         if (code == $OPEN_CURLY_BRACKET) {
           // Expect 1-6 hex digits followed by '}'.
           if (codeUnits.length == ++i) {
-            listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-                location, begin, i + 1 - begin);
+            listener.handleUnescapeError(
+                codes.messageInvalidUnicodeEscapeUBracket,
+                location,
+                begin,
+                i + 1 - begin);
             return new String.fromCharCodes(codeUnits);
           }
           code = 0;
           for (int j = 0; j < 7; j++) {
             if (codeUnits.length == ++i) {
-              listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-                  location, begin, i + 1 - begin);
+              listener.handleUnescapeError(
+                  codes.messageInvalidUnicodeEscapeUBracket,
+                  location,
+                  begin,
+                  i + 1 - begin);
               return new String.fromCharCodes(codeUnits);
             }
             int digit = codeUnits[i];
-            if (j != 0 && digit == $CLOSE_CURLY_BRACKET) break;
+            if (j != 0 && digit == $CLOSE_CURLY_BRACKET) {
+              foundEndBracket = true;
+              break;
+            } else if (j == 6) {
+              break;
+            }
             if (!isHexDigit(digit)) {
-              listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-                  location, begin, i + 2 - begin);
+              listener.handleUnescapeError(
+                  codes.messageInvalidUnicodeEscapeUBracket,
+                  location,
+                  begin,
+                  i + 2 - begin);
               return new String.fromCharCodes(codeUnits);
             }
             code = (code << 4) + hexDigitValue(digit);
           }
+          if (!foundEndBracket) {
+            listener.handleUnescapeError(
+                codes.messageInvalidUnicodeEscapeUBracket,
+                location,
+                begin,
+                i + 1 - begin);
+          }
         } else {
           // Expect exactly 4 hex digits.
           if (codeUnits.length <= i + 4) {
-            listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-                location, begin, codeUnits.length + 1 - begin);
+            listener.handleUnescapeError(
+                codes.messageInvalidUnicodeEscapeUNoBracket,
+                location,
+                begin,
+                codeUnits.length + 1 - begin);
             return new String.fromCharCodes(codeUnits);
           }
           code = 0;
           for (int j = 0; j < 4; j++) {
             int digit = codeUnits[++i];
             if (!isHexDigit(digit)) {
-              listener.handleUnescapeError(codes.messageInvalidUnicodeEscape,
-                  location, begin, i + 1 - begin);
+              listener.handleUnescapeError(
+                  codes.messageInvalidUnicodeEscapeUNoBracket,
+                  location,
+                  begin,
+                  i + 1 - begin);
               return new String.fromCharCodes(codeUnits);
             }
             code = (code << 4) + hexDigitValue(digit);
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
index 4f5ad4e..a9c8bedb 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -56,6 +56,7 @@
   Initializers,
   Labels,
   Metadata,
+  MixinApplicationBuilder,
   Modifiers,
   Name,
   OperatorList,
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/characters.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/characters.dart
index 6e0710a..305d071 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/characters.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/characters.dart
@@ -132,16 +132,3 @@
   if (hexDigit <= $9) return hexDigit - $0;
   return (hexDigit | ($a ^ $A)) - ($a - 10);
 }
-
-bool isUnicodeScalarValue(int value) {
-  return value < $FIRST_SURROGATE ||
-      (value > $LAST_SURROGATE && value <= $LAST_CODE_POINT);
-}
-
-bool isUtf16LeadSurrogate(int value) {
-  return value >= 0xd800 && value <= 0xdbff;
-}
-
-bool isUtf16TrailSurrogate(int value) {
-  return value >= 0xdc00 && value <= 0xdfff;
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/dependency_walker.dart b/pkg/_fe_analyzer_shared/lib/src/util/dependency_walker.dart
new file mode 100644
index 0000000..b044921
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/util/dependency_walker.dart
@@ -0,0 +1,152 @@
+// Copyright (c) 2016, 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.
+
+/// An instance of [DependencyWalker] contains the core algorithms for
+/// walking a dependency graph and evaluating nodes in a safe order.
+abstract class DependencyWalker<NodeType extends Node<NodeType>> {
+  /// Called by [walk] to evaluate a single non-cyclical node, after
+  /// all that node's dependencies have been evaluated.
+  void evaluate(NodeType v);
+
+  /// Called by [walk] to evaluate a strongly connected component
+  /// containing one or more nodes.  All dependencies of the strongly
+  /// connected component have been evaluated.
+  void evaluateScc(List<NodeType> scc);
+
+  /// Walk the dependency graph starting at [startingPoint], finding
+  /// strongly connected components and evaluating them in a safe order
+  /// by calling [evaluate] and [evaluateScc].
+  ///
+  /// This is an implementation of Tarjan's strongly connected
+  /// components algorithm
+  /// (https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm).
+  void walk(NodeType startingPoint) {
+    // TODO(paulberry): consider rewriting in a non-recursive way so
+    // that long dependency chains don't cause stack overflow.
+
+    // TODO(paulberry): in the event that an exception occurs during
+    // the walk, restore the state of the [Node] data structures so
+    // that further evaluation will be safe.
+
+    if (startingPoint.isEvaluated) return;
+
+    // The index which will be assigned to the next node that is
+    // freshly visited.
+    int index = 1;
+
+    // Stack of nodes which have been seen so far and whose strongly
+    // connected component is still being determined.  Nodes are only
+    // popped off the stack when they are evaluated, so sometimes the
+    // stack contains nodes that were visited after the current node.
+    List<NodeType> stack = <NodeType>[];
+
+    void strongConnect(NodeType node) {
+      bool hasTrivialCycle = false;
+
+      // Assign the current node an index and add it to the stack.  We
+      // haven't seen any of its dependencies yet, so set its lowLink
+      // to its index, indicating that so far it is the only node in
+      // its strongly connected component.
+      node._index = node._lowLink = index++;
+      stack.add(node);
+
+      // Consider the node's dependencies one at a time.
+      for (NodeType dependency in Node.getDependencies(node)) {
+        // If the dependency has already been evaluated, it can't be
+        // part of this node's strongly connected component, so we can
+        // skip it.
+        if (dependency.isEvaluated) {
+          continue;
+        }
+        if (identical(node, dependency)) {
+          // If a node includes itself as a dependency, there is no need to
+          // explore the dependency further.
+          hasTrivialCycle = true;
+        } else if (dependency._index == 0) {
+          // The dependency hasn't been seen yet, so recurse on it.
+          strongConnect(dependency);
+          // If the dependency's lowLink refers to a node that was
+          // visited before the current node, that means that the
+          // current node, the dependency, and the node referred to by
+          // the dependency's lowLink are all part of the same
+          // strongly connected component, so we need to update the
+          // current node's lowLink accordingly.
+          if (dependency._lowLink < node._lowLink) {
+            node._lowLink = dependency._lowLink;
+          }
+        } else {
+          // The dependency has already been seen, so it is part of
+          // the current node's strongly connected component.  If it
+          // was visited earlier than the current node's lowLink, then
+          // it is a new addition to the current node's strongly
+          // connected component, so we need to update the current
+          // node's lowLink accordingly.
+          if (dependency._index < node._lowLink) {
+            node._lowLink = dependency._index;
+          }
+        }
+      }
+
+      // If the current node's lowLink is the same as its index, then
+      // we have finished visiting a strongly connected component, so
+      // pop the stack and evaluate it before moving on.
+      if (node._lowLink == node._index) {
+        // The strongly connected component has only one node.  If there is a
+        // cycle, it's a trivial one.
+        if (identical(stack.last, node)) {
+          stack.removeLast();
+          if (hasTrivialCycle) {
+            evaluateScc(<NodeType>[node]);
+          } else {
+            evaluate(node);
+          }
+        } else {
+          // There are multiple nodes in the strongly connected
+          // component.
+          List<NodeType> scc = <NodeType>[];
+          while (true) {
+            NodeType otherNode = stack.removeLast();
+            scc.add(otherNode);
+            if (identical(otherNode, node)) {
+              break;
+            }
+          }
+          evaluateScc(scc);
+        }
+      }
+    }
+
+    // Kick off the algorithm starting with the starting point.
+    strongConnect(startingPoint);
+  }
+}
+
+/// Instances of [Node] represent nodes in a dependency graph.  The
+/// type parameter, [NodeType], is the derived type (this affords some
+/// extra type safety by making it difficult to accidentally construct
+/// bridges between unrelated dependency graphs).
+abstract class Node<NodeType> {
+  /// Index used by Tarjan's strongly connected components algorithm.
+  /// Zero means the node has not been visited yet; a nonzero value
+  /// counts the order in which the node was visited.
+  int _index = 0;
+
+  /// Low link used by Tarjan's strongly connected components
+  /// algorithm.  This represents the smallest [_index] of all the nodes
+  /// in the strongly connected component to which this node belongs.
+  int _lowLink = 0;
+
+  List<NodeType>? _dependencies;
+
+  /// Indicates whether this node has been evaluated yet.
+  bool get isEvaluated;
+
+  /// Compute the dependencies of this node.
+  List<NodeType> computeDependencies();
+
+  /// Gets the dependencies of the given node, computing them if necessary.
+  static List<NodeType> getDependencies<NodeType>(Node<NodeType> node) {
+    return node._dependencies ??= node.computeDependencies();
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index e4718a0..e8855e1 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 36.0.0
+version: 38.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/_fe_analyzer_shared
 
diff --git a/pkg/_fe_analyzer_shared/test/deferred_closure_heuristic_test.dart b/pkg/_fe_analyzer_shared/test/deferred_closure_heuristic_test.dart
new file mode 100644
index 0000000..ab4b8f9
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/deferred_closure_heuristic_test.dart
@@ -0,0 +1,138 @@
+// 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:_fe_analyzer_shared/src/deferred_closure_heuristic.dart';
+import 'package:test/test.dart';
+
+main() {
+  test('single', () {
+    // If there is just a single closure and no type variables, it is selected.
+    var f = Closure('f');
+    expect(
+        _TestClosureDeps(typeVars: [], closures: [f])
+            .planClosureReconciliationStages(),
+        [
+          {f}
+        ]);
+  });
+
+  test('simple dependency', () {
+    // If f depends on g, then g is selected first, and then f.
+    var f = Closure('f', argTypes: ['T']);
+    var g = Closure('g', retTypes: ['T']);
+    expect(
+        _TestClosureDeps(typeVars: ['T'], closures: [f, g])
+            .planClosureReconciliationStages(),
+        [
+          {g},
+          {f}
+        ]);
+  });
+
+  test('long chain', () {
+    // If f depends on g and g depends on h, then we do three separate stages:
+    // h, then g, then f.
+    var f = Closure('f', argTypes: ['T']);
+    var g = Closure('g', argTypes: ['U'], retTypes: ['T']);
+    var h = Closure('h', retTypes: ['U']);
+    expect(
+        _TestClosureDeps(typeVars: ['T', 'U'], closures: [f, g, h])
+            .planClosureReconciliationStages(),
+        [
+          {h},
+          {g},
+          {f}
+        ]);
+  });
+
+  test('unrelated closure', () {
+    // Closures that are independent of all the others are inferred during the
+    // first stage.
+    var f = Closure('f', argTypes: ['T']);
+    var g = Closure('g', retTypes: ['T']);
+    var h = Closure('h');
+    expect(
+        _TestClosureDeps(typeVars: ['T', 'U'], closures: [f, g, h])
+            .planClosureReconciliationStages(),
+        [
+          {g, h},
+          {f}
+        ]);
+  });
+
+  test('independent chains', () {
+    // If f depends on g, and h depends on i, then g and i are selected first,
+    // and then f and h.
+    var f = Closure('f', argTypes: ['T']);
+    var g = Closure('g', retTypes: ['T']);
+    var h = Closure('h', argTypes: ['U']);
+    var i = Closure('i', retTypes: ['U']);
+    expect(
+        _TestClosureDeps(typeVars: ['T', 'U'], closures: [f, g, h, i])
+            .planClosureReconciliationStages(),
+        [
+          {g, i},
+          {f, h}
+        ]);
+  });
+
+  test('diamond', () {
+    // Test a diamond dependency shape: f depends on g and h; g and h both
+    // depend on i.
+    var f = Closure('f', argTypes: ['T', 'U']);
+    var g = Closure('g', argTypes: ['V'], retTypes: ['T']);
+    var h = Closure('h', argTypes: ['V'], retTypes: ['U']);
+    var i = Closure('i', retTypes: ['V']);
+    expect(
+        _TestClosureDeps(typeVars: ['T', 'U', 'V'], closures: [f, g, h, i])
+            .planClosureReconciliationStages(),
+        [
+          {i},
+          {g, h},
+          {f}
+        ]);
+  });
+
+  test('cycle', () {
+    // A dependency cycle is inferred all at once.
+    var f = Closure('f', argTypes: ['T']);
+    var g = Closure('g', argTypes: ['U']);
+    var h = Closure('h', argTypes: ['U'], retTypes: ['T']);
+    var i = Closure('i', argTypes: ['T'], retTypes: ['U']);
+    expect(
+        _TestClosureDeps(typeVars: ['T', 'U'], closures: [f, g, h, i])
+            .planClosureReconciliationStages(),
+        [
+          {h, i},
+          {f, g}
+        ]);
+  });
+}
+
+class Closure {
+  final String name;
+  final List<String> argTypes;
+  final List<String> retTypes;
+
+  Closure(this.name, {this.argTypes = const [], this.retTypes = const []});
+
+  @override
+  String toString() => name;
+}
+
+class _TestClosureDeps extends ClosureDependencies<String, Closure> {
+  final List<String> typeVars;
+  final List<Closure> closures;
+
+  _TestClosureDeps({required this.typeVars, required this.closures})
+      : super(closures, typeVars);
+
+  @override
+  Set<String> typeVarsFreeInClosureArguments(Closure closure) =>
+      closure.argTypes.toSet();
+
+  @override
+  Set<String> typeVarsFreeInClosureReturns(Closure closure) =>
+      closure.retTypes.toSet();
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
index 5a96c10..ad5e78b 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
@@ -11,18 +11,55 @@
 set setter(_) => null;
 
 @ClassMacro()
-class Class1 {}
+class Class1 {
+  var field1;
+
+  Class1();
+}
 
 @ClassMacro()
 abstract class Class2 {}
 
 @ClassMacro()
-class Class3 extends Class2 {}
+class Class3 extends Class2 implements Interface1 {
+  var field1;
+  var field2;
 
-mixin Mixin {}
+  Class3.new();
+  Class3.named();
+  factory Class3.fact() => Class3.named();
+  factory Class3.redirect() = Class3.named;
+
+  void method1() {}
+  void method2() {}
+
+  get getter1 => null;
+  set setter1(_) {}
+
+  get property1 => null;
+  set property1(_) {}
+
+  static var staticField1;
+  static void staticMethod1() {}
+}
 
 @ClassMacro()
-class Class4 extends Class1 with Mixin {}
+class Class4 extends Class1 with Mixin1 {}
+
+@ClassMacro()
+class Class5 extends Class2
+    with Mixin1, Mixin2
+    implements Interface1, Interface2 {}
+
+mixin Mixin1 {}
+
+mixin Mixin2 {}
+
+@ClassMacro()
+abstract class Interface1 {}
+
+@ClassMacro()
+abstract class Interface2 {}
 
 @FunctionMacro()
 void topLevelFunction1(Class1 a, {Class1? b, required Class2? c}) {}
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
index c826563..8c5a201 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
@@ -5,10 +5,50 @@
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
 const Map<String, ClassData> expectedClassData = {
-  'Class1': ClassData(superclassOf: 'Object'),
+  'Class1': ClassData(
+      superclassOf: 'Object', fieldsOf: ['field1'], constructorsOf: ['']),
   'Class2': ClassData(isAbstract: true, superclassOf: 'Object'),
-  'Class3': ClassData(superclassOf: 'Class2', superSuperclassOf: 'Object'),
-  'Class4': ClassData(superclassOf: 'Class1', superSuperclassOf: 'Object'),
+  'Class3': ClassData(
+      superclassOf: 'Class2',
+      superSuperclassOf: 'Object',
+      interfacesOf: [
+        'Interface1'
+      ],
+      // TODO(johnniwinther): Should we require a specific order?
+      fieldsOf: [
+        'field1',
+        'field2',
+        'staticField1',
+      ],
+      // TODO(johnniwinther): Should we require a specific order?
+      methodsOf: [
+        'method1',
+        'method2',
+        'getter1',
+        'property1',
+        'staticMethod1',
+        'setter1',
+        'property1',
+      ],
+      // TODO(johnniwinther): Should we require a specific order?
+      constructorsOf: [
+        // TODO(johnniwinther): Should we normalize no-name constructor names?
+        '',
+        'named',
+        'fact',
+        'redirect',
+      ]),
+  'Class4': ClassData(
+      superclassOf: 'Class1',
+      superSuperclassOf: 'Object',
+      mixinsOf: ['Mixin1']),
+  'Class5': ClassData(
+      superclassOf: 'Class2',
+      superSuperclassOf: 'Object',
+      mixinsOf: ['Mixin1', 'Mixin2'],
+      interfacesOf: ['Interface1', 'Interface2']),
+  'Interface1': ClassData(isAbstract: true, superclassOf: 'Object'),
+  'Interface2': ClassData(isAbstract: true, superclassOf: 'Object'),
 };
 
 const Map<String, FunctionData> expectedFunctionData = {
@@ -44,10 +84,17 @@
   }
 }
 
-Future<void> throws(Future<void> Function() f, property) async {
+Future<void> throws(Future<void> Function() f, property,
+    {String? Function(Object)? expectedError}) async {
   try {
     await f();
-  } catch (_) {
+  } catch (e) {
+    if (expectedError != null) {
+      String? errorMessage = expectedError(e);
+      if (errorMessage != null) {
+        throw 'Unexpected exception on $property: $errorMessage';
+      }
+    }
     return;
   }
   throw 'Expected throws on $property';
@@ -90,6 +137,49 @@
         expect(expected.superSuperclassOf, superSuperclassOf?.identifier.name,
             '$name.superSuperclassOf');
       }
+      List<ClassDeclaration> mixinsOf =
+          await classIntrospector.mixinsOf(declaration);
+      expect(
+          expected.mixinsOf.length, mixinsOf.length, '$name.mixinsOf.length');
+      for (int i = 0; i < mixinsOf.length; i++) {
+        expect(expected.mixinsOf[i], mixinsOf[i].identifier.name,
+            '$name.mixinsOf[$i]');
+      }
+      List<ClassDeclaration> interfacesOf =
+          await classIntrospector.interfacesOf(declaration);
+      expect(expected.interfacesOf.length, interfacesOf.length,
+          '$name.interfacesOf.length');
+      for (int i = 0; i < interfacesOf.length; i++) {
+        expect(expected.interfacesOf[i], interfacesOf[i].identifier.name,
+            '$name.interfacesOf[$i]');
+      }
+
+      List<FieldDeclaration> fieldsOf =
+          await classIntrospector.fieldsOf(declaration);
+      expect(
+          expected.fieldsOf.length, fieldsOf.length, '$name.fieldsOf.length');
+      for (int i = 0; i < fieldsOf.length; i++) {
+        expect(expected.fieldsOf[i], fieldsOf[i].identifier.name,
+            '$name.fieldsOf[$i]');
+      }
+
+      List<MethodDeclaration> methodsOf =
+          await classIntrospector.methodsOf(declaration);
+      expect(expected.methodsOf.length, methodsOf.length,
+          '$name.methodsOf.length');
+      for (int i = 0; i < methodsOf.length; i++) {
+        expect(expected.methodsOf[i], methodsOf[i].identifier.name,
+            '$name.methodsOf[$i]');
+      }
+
+      List<ConstructorDeclaration> constructorsOf =
+          await classIntrospector.constructorsOf(declaration);
+      expect(expected.constructorsOf.length, constructorsOf.length,
+          '$name.constructorsOf.length');
+      for (int i = 0; i < constructorsOf.length; i++) {
+        expect(expected.constructorsOf[i], constructorsOf[i].identifier.name,
+            '$name.constructorsOf[$i]');
+      }
     }
     // TODO(johnniwinther): Test more properties when there are supported.
   } else {
@@ -161,17 +251,52 @@
   await check(macroApiData, 'field=', expectThrows: true);
 }
 
+Future<void> checkTypeDeclarationResolver(
+    TypeDeclarationResolver typeDeclarationResolver,
+    Map<Identifier, String?> test) async {
+  Future<void> check(Identifier identifier, String name,
+      {bool expectThrows: false}) async {
+    if (expectThrows) {
+      await throws(() async {
+        await typeDeclarationResolver.declarationOf(identifier);
+      }, '$name from $identifier',
+          expectedError: (e) => e is! ArgumentError
+              ? 'Expected ArgumentError, got ${e.runtimeType}: $e'
+              : null);
+    } else {
+      TypeDeclaration result =
+          await typeDeclarationResolver.declarationOf(identifier);
+      expect(name, result.identifier.name, '$name from $identifier');
+    }
+  }
+
+  test.forEach((Identifier identifier, String? expectedName) {
+    check(identifier, expectedName ?? identifier.name,
+        expectThrows: expectedName == null);
+  });
+}
+
 class ClassData {
   final bool isAbstract;
   final bool isExternal;
   final String superclassOf;
   final String? superSuperclassOf;
+  final List<String> interfacesOf;
+  final List<String> mixinsOf;
+  final List<String> fieldsOf;
+  final List<String> methodsOf;
+  final List<String> constructorsOf;
 
   const ClassData(
       {this.isAbstract: false,
       this.isExternal: false,
       required this.superclassOf,
-      this.superSuperclassOf});
+      this.superSuperclassOf,
+      this.interfacesOf: const [],
+      this.mixinsOf: const [],
+      this.fieldsOf: const [],
+      this.methodsOf: const [],
+      this.constructorsOf: const []});
 }
 
 class FunctionData {
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
index d54db3b..3e04aae 100644
--- a/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_macro.dart
@@ -6,8 +6,6 @@
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 import 'api_test_expectations.dart';
 
-
-
 macro class ClassMacro
     implements ClassTypesMacro, ClassDeclarationsMacro, ClassDefinitionMacro {
   const ClassMacro();
@@ -25,6 +23,9 @@
   FutureOr<void> buildDefinitionForClass(
       ClassDeclaration clazz, ClassDefinitionBuilder builder) async {
     await checkClassDeclaration(clazz, classIntrospector: builder);
+    await checkIdentifierResolver(builder);
+    await checkTypeDeclarationResolver(builder,
+        {clazz.identifier : clazz.identifier.name});
   }
 }
 
@@ -51,5 +52,6 @@
       FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
     checkFunctionDeclaration(function);
     await checkIdentifierResolver(builder);
+    await checkTypeDeclarationResolver(builder, {function.identifier: null});
   }
 }
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart
index af3d9d7..cc99e93 100644
--- a/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart
@@ -2,6 +2,7 @@
 // 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:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart';
 import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart';
 import 'package:test/fake.dart';
 import 'package:test/test.dart';
@@ -15,18 +16,26 @@
 
 void main() {
   group('AugmentationLibraryBuilder', () {
+    final intIdentifier = TestIdentifier(
+        id: RemoteInstance.uniqueId,
+        name: 'int',
+        kind: IdentifierKind.topLevelMember,
+        staticScope: null,
+        uri: Uri.parse('dart:core'));
+
     test('can combine multiple execution results', () {
       var results = [
         for (var i = 0; i < 2; i++)
           MacroExecutionResultImpl(classAugmentations: {
             for (var j = 0; j < 3; j++)
               'Foo$i$j': [
-                DeclarationCode.fromString('int get i => $i;\n'),
-                DeclarationCode.fromString('int get j => $j;\n'),
+                DeclarationCode.fromParts([intIdentifier, ' get i => $i;\n']),
+                DeclarationCode.fromParts([intIdentifier, ' get j => $j;\n']),
               ]
           }, libraryAugmentations: [
             for (var j = 0; j < 3; j++)
-              DeclarationCode.fromString('int get i${i}j$j => ${i + j};\n'),
+              DeclarationCode.fromParts(
+                  [intIdentifier, ' get i${i}j$j => ${i + j};\n']),
           ], newTypeNames: [
             'Foo${i}0',
             'Foo${i}1',
@@ -34,37 +43,42 @@
           ]),
       ];
       var library = _TestExecutor().buildAugmentationLibrary(
-          results, (Identifier i) => (i as TestIdentifier).resolved);
+          results,
+          (Identifier i) => (i as TestIdentifier).resolved,
+          (OmittedTypeAnnotation i) =>
+              (i as TestOmittedTypeAnnotation).inferredType);
       expect(library, equalsIgnoringWhitespace('''
-        int get i0j0 => 0;
-        int get i0j1 => 1;
-        int get i0j2 => 2;
-        int get i1j0 => 1;
-        int get i1j1 => 2;
-        int get i1j2 => 3;
+        import 'dart:core' as prefix0;
+
+        prefix0.int get i0j0 => 0;
+        prefix0.int get i0j1 => 1;
+        prefix0.int get i0j2 => 2;
+        prefix0.int get i1j0 => 1;
+        prefix0.int get i1j1 => 2;
+        prefix0.int get i1j2 => 3;
         augment class Foo00 {
-          int get i => 0;
-          int get j => 0;
+          prefix0.int get i => 0;
+          prefix0.int get j => 0;
         }
         augment class Foo01 {
-          int get i => 0;
-          int get j => 1;
+          prefix0.int get i => 0;
+          prefix0.int get j => 1;
         }
         augment class Foo02 {
-          int get i => 0;
-          int get j => 2;
+          prefix0.int get i => 0;
+          prefix0.int get j => 2;
         }
         augment class Foo10 {
-          int get i => 1;
-          int get j => 0;
+          prefix0.int get i => 1;
+          prefix0.int get j => 0;
         }
         augment class Foo11 {
-          int get i => 1;
-          int get j => 1;
+          prefix0.int get i => 1;
+          prefix0.int get j => 1;
         }
         augment class Foo12 {
-          int get i => 1;
-          int get j => 2;
+          prefix0.int get i => 1;
+          prefix0.int get j => 2;
         }
       '''));
     });
@@ -112,7 +126,9 @@
               '<',
               barIdentifier,
               '<T>> {\n',
-              'late int ${barInstanceMember.name};\n',
+              'late ',
+              intIdentifier,
+              ' ${barInstanceMember.name};\n',
               barIdentifier,
               '<T> build() => new ',
               barIdentifier,
@@ -130,19 +146,141 @@
         )
       ];
       var library = _TestExecutor().buildAugmentationLibrary(
-          results, (Identifier i) => (i as TestIdentifier).resolved);
+          results,
+          (Identifier i) => (i as TestIdentifier).resolved,
+          (OmittedTypeAnnotation i) =>
+              (i as TestOmittedTypeAnnotation).inferredType);
       expect(library, equalsIgnoringWhitespace('''
-        import 'package:foo/foo.dart' as i0;
-        import 'package:builder/builder.dart' as i1;
-        import 'package:bar/bar.dart' as i2;
+        import 'package:foo/foo.dart' as prefix0;
+        import 'package:builder/builder.dart' as prefix1;
+        import 'package:bar/bar.dart' as prefix2;
+        import 'dart:core' as prefix3;
 
-        class FooBuilder<T extends i0.Foo> implements i1.Builder<i2.Bar<T>> {
-          late int baz;
+        class FooBuilder<T extends prefix0.Foo> implements prefix1.Builder<prefix2.Bar<T>> {
+          late prefix3.int baz;
 
-          i2.Bar<T> build() => new i2.Bar()..baz = i2.Bar.zap;
+          prefix2.Bar<T> build() => new prefix2.Bar()..baz = prefix2.Bar.zap;
         }
       '''));
     });
+
+    test('can handle omitted type annotations', () {
+      var results = [
+        MacroExecutionResultImpl(classAugmentations: {}, libraryAugmentations: [
+          DeclarationCode.fromParts([
+            OmittedTypeAnnotationCode(
+                TestOmittedTypeAnnotation(NamedTypeAnnotationImpl(
+              id: RemoteInstance.uniqueId,
+              identifier: intIdentifier,
+              isNullable: false,
+              typeArguments: [],
+            ))),
+            ' x = 1;',
+          ]),
+        ], newTypeNames: []),
+      ];
+      var library = _TestExecutor().buildAugmentationLibrary(
+          results,
+          (Identifier i) => (i as TestIdentifier).resolved,
+          (OmittedTypeAnnotation i) =>
+              (i as TestOmittedTypeAnnotation).inferredType);
+      expect(library, equalsIgnoringWhitespace('''
+        import 'dart:core' as prefix0;
+
+        prefix0.int x = 1;
+      '''));
+    });
+
+    test('can handle name conflicts', () {
+      var omittedType0 = TestOmittedTypeAnnotation();
+      var omittedType1 = TestOmittedTypeAnnotation();
+
+      var omittedTypeIdentifier = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'OmittedType',
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:foo/foo.dart'));
+      var omittedTypeIdentifier0 = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'OmittedType0',
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var prefixInstanceMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'prefix',
+          kind: IdentifierKind.instanceMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var prefix0InstanceMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'prefix0',
+          kind: IdentifierKind.instanceMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var prefix1StaticMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'prefix1',
+          kind: IdentifierKind.staticInstanceMember,
+          staticScope: 'OmittedType1',
+          uri: Uri.parse('package:bar/bar.dart'));
+      var results = [
+        MacroExecutionResultImpl(
+          classAugmentations: {},
+          libraryAugmentations: [
+            DeclarationCode.fromParts([
+              'class OmittedType {\n  ',
+              omittedType0.code,
+              ' method(',
+              omittedType1.code,
+              ' o) {\n    ',
+              intIdentifier,
+              ' ${prefixInstanceMember.name} = 0;\n    ',
+              omittedTypeIdentifier,
+              ' ${prefix0InstanceMember.name} = ',
+              'new ',
+              omittedTypeIdentifier,
+              '();\n    ',
+              'new ',
+              omittedTypeIdentifier0,
+              '()..',
+              prefixInstanceMember,
+              ' = ',
+              prefix1StaticMember,
+              ';',
+              '\n  }',
+              '\n}',
+            ]),
+          ],
+          newTypeNames: [
+            'OmittedType',
+          ],
+        )
+      ];
+      var omittedTypes = <OmittedTypeAnnotation, String>{};
+      var library = _TestExecutor().buildAugmentationLibrary(
+          results,
+          (Identifier i) => (i as TestIdentifier).resolved,
+          (OmittedTypeAnnotation i) =>
+              (i as TestOmittedTypeAnnotation).inferredType,
+          omittedTypes: omittedTypes);
+      expect(library, equalsIgnoringWhitespace('''
+        import 'dart:core' as prefix2_0;
+        import 'package:foo/foo.dart' as prefix2_1;
+        import 'package:bar/bar.dart' as prefix2_2;
+
+        class OmittedType {
+          OmittedType2_0 method(OmittedType2_1 o) {
+            prefix2_0.int prefix = 0;
+            prefix2_1.OmittedType prefix0 = new prefix2_1.OmittedType();
+            new prefix2_2.OmittedType0()..prefix = prefix2_2.OmittedType1.prefix1;
+          }
+        }
+      '''));
+      expect(omittedTypes[omittedType0], 'OmittedType2_0');
+      expect(omittedTypes[omittedType1], 'OmittedType2_1');
+    });
   });
 }
 
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
index 13b54ac..c70ad25 100644
--- a/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
@@ -11,7 +11,9 @@
 import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
     as isolatedExecutor;
 import 'package:_fe_analyzer_shared/src/macros/executor/process_executor.dart'
-    as processExecutor;
+    as processExecutor show start;
+import 'package:_fe_analyzer_shared/src/macros/executor/process_executor.dart'
+    hide start;
 
 import 'package:test/test.dart';
 
@@ -26,11 +28,15 @@
   late File simpleMacroFile;
   late Directory tmpDir;
 
-  for (var executorKind in ['Isolated', 'Process']) {
+  for (var executorKind in [
+    'Isolated',
+    'ProcessSocket',
+    'ProcessStdio',
+  ]) {
     group('$executorKind executor', () {
       for (var mode in [
         SerializationMode.byteDataServer,
-        SerializationMode.jsonServer
+        SerializationMode.jsonServer,
       ]) {
         final clientMode = mode == SerializationMode.byteDataServer
             ? SerializationMode.byteDataClient
@@ -42,7 +48,12 @@
                 File(Platform.script.resolve('simple_macro.dart').toFilePath());
             executor = executorKind == 'Isolated'
                 ? await isolatedExecutor.start(mode)
-                : await processExecutor.start(mode);
+                : executorKind == 'ProcessSocket'
+                    ? await processExecutor.start(
+                        mode, CommunicationChannel.socket)
+                    : await processExecutor.start(
+                        mode, CommunicationChannel.stdio);
+
             tmpDir = Directory.systemTemp.createTempSync('executor_test');
             macroUri = simpleMacroFile.absolute.uri;
 
@@ -271,7 +282,7 @@
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
                     equalsIgnoringWhitespace('''
-                String get delegate_myVariable => _myVariable;'''));
+                /*inferred*/String get delegate_myVariable => _myVariable;'''));
               });
 
               test('on fields', () async {
@@ -319,7 +330,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -341,7 +353,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(definitionResult.classAugmentations, hasLength(1));
                 var augmentationStrings = definitionResult
                     .classAugmentations['MyClass']!
@@ -359,7 +372,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(definitionResult.classAugmentations, hasLength(1));
                 expect(
                     definitionResult.classAugmentations['MyClass']!.first
@@ -376,7 +390,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -398,7 +413,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations.single.debugString().toString(),
@@ -421,14 +437,15 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(result.classAugmentations, isEmpty);
                 expect(
                     result.libraryAugmentations
                         .map((a) => a.debugString().toString()),
                     unorderedEquals([
                       equalsIgnoringWhitespace('''
-                augment String get _myVariable {
+                augment /*inferred*/String get _myVariable {
                   print('parentClass: ');
                   print('isExternal: false');
                   print('isFinal: true');
@@ -436,11 +453,11 @@
                   return augment super;
                 }'''),
                       equalsIgnoringWhitespace('''
-                augment set _myVariable(String value) {
+                augment set _myVariable(/*inferred*/String value) {
                   augment super = value;
                 }'''),
                       equalsIgnoringWhitespace('''
-                augment final String _myVariable = 'new initial value' + augment super;
+                augment final /*inferred*/String _myVariable = 'new initial value' + augment super;
                 '''),
                     ]));
               });
@@ -452,7 +469,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(definitionResult.classAugmentations, hasLength(1));
                 expect(
                     definitionResult.classAugmentations['MyClass']!
@@ -468,7 +486,8 @@
                     FakeIdentifierResolver(),
                     Fixtures.testTypeResolver,
                     Fixtures.testClassIntrospector,
-                    Fixtures.testTypeDeclarationResolver);
+                    Fixtures.testTypeDeclarationResolver,
+                    Fixtures.testTypeInferrer);
                 expect(definitionResult.classAugmentations, hasLength(1));
                 var augmentationStrings = definitionResult
                     .classAugmentations['MyClass']!
@@ -491,7 +510,7 @@
 }
 
 final constructorDefinitionMatcher = equalsIgnoringWhitespace('''
-augment MyClass.myConstructor() {
+augment MyClass.myConstructor(/*inferred*/String myField, ) {
   print('definingClass: MyClass');
   print('isFactory: false');
   print('isAbstract: false');
@@ -499,6 +518,7 @@
   print('isGetter: false');
   print('isSetter: false');
   print('returnType: MyClass');
+  print('positionalParam: String (inferred) myField');
   return augment super();
 }''');
 
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart b/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart
index b5a2d2d..a7d31f1 100644
--- a/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart
@@ -54,11 +54,6 @@
   FutureOr<void> buildDeclarationsForConstructor(
       ConstructorDeclaration constructor,
       ClassMemberDeclarationBuilder builder) {
-    if (constructor.positionalParameters.isNotEmpty ||
-        constructor.namedParameters.isNotEmpty) {
-      throw new UnsupportedError(
-          'Can only run on constructors with no parameters!');
-    }
     var className = constructor.definingClass.name;
     var constructorName = constructor.identifier.name;
     builder.declareInClass(DeclarationCode.fromString(
@@ -69,12 +64,6 @@
   @override
   FutureOr<void> buildDeclarationsForFunction(
       FunctionDeclaration function, DeclarationBuilder builder) {
-    if (!function.isSetter &&
-        (function.positionalParameters.isNotEmpty ||
-            function.namedParameters.isNotEmpty)) {
-      throw new UnsupportedError(
-          'Can only run on functions with no parameters!');
-    }
     var functionName = function.identifier.name;
     builder.declareInLibrary(DeclarationCode.fromParts([
       function.returnType.code,
@@ -161,7 +150,7 @@
     var fields = (await builder.fieldsOf(clazz));
 
     builder.augment(
-      body: _buildFunctionAugmentation(constructor),
+      body: await _buildFunctionAugmentation(constructor, builder),
       initializers: [
         for (var field in fields)
           // TODO: Compare against actual `int` type.
@@ -180,7 +169,7 @@
   @override
   Future<void> buildDefinitionForFunction(
       FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
-    builder.augment(_buildFunctionAugmentation(function));
+    builder.augment(await _buildFunctionAugmentation(function, builder));
   }
 
   @override
@@ -355,47 +344,57 @@
   }
 }
 
-FunctionBodyCode _buildFunctionAugmentation(FunctionDeclaration function) =>
-    FunctionBodyCode.fromParts([
-      '{\n',
-      if (function is MethodDeclaration)
-        "print('definingClass: ${function.definingClass.name}');\n",
-      if (function is ConstructorDeclaration)
-        "print('isFactory: ${function.isFactory}');\n",
-      '''
+Future<FunctionBodyCode> _buildFunctionAugmentation(
+    FunctionDeclaration function, TypeInferrer inferrer) async {
+  Future<List<Object>> typeParts(TypeAnnotation annotation) async {
+    if (annotation is OmittedTypeAnnotation) {
+      var inferred = await inferrer.inferType(annotation);
+      return [inferred.code, ' (inferred)'];
+    }
+    return [annotation.code];
+  }
+
+  return FunctionBodyCode.fromParts([
+    '{\n',
+    if (function is MethodDeclaration)
+      "print('definingClass: ${function.definingClass.name}');\n",
+    if (function is ConstructorDeclaration)
+      "print('isFactory: ${function.isFactory}');\n",
+    '''
       print('isAbstract: ${function.isAbstract}');
       print('isExternal: ${function.isExternal}');
       print('isGetter: ${function.isGetter}');
       print('isSetter: ${function.isSetter}');
       print('returnType: ''',
-      function.returnType.code,
+    function.returnType.code,
+    "');\n",
+    for (var param in function.positionalParameters) ...[
+      "print('positionalParam: ",
+      ...await typeParts(param.type),
+      ' ${param.identifier.name}',
       "');\n",
-      for (var param in function.positionalParameters) ...[
-        "print('positionalParam: ",
-        param.type.code,
-        ' ${param.identifier.name}',
-        "');\n",
-      ],
-      for (var param in function.namedParameters) ...[
-        "print('namedParam: ",
-        param.type.code,
-        ' ${param.identifier.name}',
-        "');\n",
-      ],
-      for (var param in function.typeParameters) ...[
-        "print('typeParam: ${param.identifier.name} ",
-        if (param.bound != null) param.bound!.code,
-        "');\n",
-      ],
-      'return augment super',
-      if (function.isSetter) ...[
-        ' = ',
-        function.positionalParameters.first.identifier,
-      ],
-      if (!function.isGetter && !function.isSetter) '()',
-      ''';
+    ],
+    for (var param in function.namedParameters) ...[
+      "print('namedParam: ",
+      ...await typeParts(param.type),
+      ' ${param.identifier.name}',
+      "');\n",
+    ],
+    for (var param in function.typeParameters) ...[
+      "print('typeParam: ${param.identifier.name} ",
+      if (param.bound != null) param.bound!.code,
+      "');\n",
+    ],
+    'return augment super',
+    if (function.isSetter) ...[
+      ' = ',
+      function.positionalParameters.first.identifier,
+    ],
+    if (!function.isGetter && !function.isSetter) '()',
+    ''';
     }''',
-    ]);
+  ]);
+}
 
 extension _ on String {
   String capitalize() => '${this[0].toUpperCase()}${substring(1)}';
diff --git a/pkg/_fe_analyzer_shared/test/macros/util.dart b/pkg/_fe_analyzer_shared/test/macros/util.dart
index edb0788..6049823 100644
--- a/pkg/_fe_analyzer_shared/test/macros/util.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/util.dart
@@ -111,6 +111,23 @@
       (library == other.library && identifier.name == other.identifier.name);
 }
 
+/// Assumes all omitted types are [TestOmittedTypeAnnotation]s and just returns
+/// the inferred type directly.
+class TestTypeInferrer implements TypeInferrer {
+  @override
+  Future<TypeAnnotation> inferType(
+          TestOmittedTypeAnnotation omittedType) async =>
+      omittedType.inferredType!;
+}
+
+/// Knows its inferred type ahead of time.
+class TestOmittedTypeAnnotation extends OmittedTypeAnnotationImpl {
+  final TypeAnnotation? inferredType;
+
+  TestOmittedTypeAnnotation([this.inferredType])
+      : super(id: RemoteInstance.uniqueId);
+}
+
 /// An identifier that knows the resolved version of itself.
 class TestIdentifier extends IdentifierImpl {
   final ResolvedIdentifier resolved;
@@ -137,6 +154,13 @@
         part.debugString(buffer);
       } else if (part is IdentifierImpl) {
         buffer.write(part.name);
+      } else if (part is TestOmittedTypeAnnotation) {
+        if (part.inferredType != null) {
+          buffer.write('/*inferred*/');
+          part.inferredType!.code.debugString(buffer);
+        } else {
+          buffer.write('/*omitted*/');
+        }
       } else {
         buffer.write(part as String);
       }
@@ -244,6 +268,7 @@
       identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'String'),
       isNullable: false,
       typeArguments: const []);
+  static final inferredStringType = TestOmittedTypeAnnotation(stringType);
   static final voidType = NamedTypeAnnotationImpl(
       id: RemoteInstance.uniqueId,
       identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'void'),
@@ -271,7 +296,7 @@
       isExternal: false,
       isFinal: true,
       isLate: false,
-      type: stringType);
+      type: inferredStringType);
   static final myVariableGetter = FunctionDeclarationImpl(
       id: RemoteInstance.uniqueId,
       identifier:
@@ -349,7 +374,15 @@
       isOperator: false,
       isSetter: false,
       namedParameters: [],
-      positionalParameters: [],
+      positionalParameters: [
+        ParameterDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'myField'),
+            isNamed: false,
+            isRequired: true,
+            type: TestOmittedTypeAnnotation(myField.type))
+      ],
       returnType: myClassType,
       typeParameters: [],
       definingClass: myClassType.identifier,
@@ -435,4 +468,6 @@
   );
   static final testTypeDeclarationResolver =
       TestTypeDeclarationResolver({myClass.identifier: myClass});
+
+  static final testTypeInferrer = TestTypeInferrer();
 }
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index 0c71378..3a8528c 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -1413,14 +1413,17 @@
       flow.logicalBinaryOp_begin();
     }
     var leftType = analyzeExpression(lhs);
+    EqualityInfo<Var, Type>? leftInfo;
     if (isEquals) {
-      flow.equalityOp_rightBegin(lhs, leftType);
+      leftInfo = flow.equalityOperand_end(lhs, leftType);
     } else if (isLogical) {
       flow.logicalBinaryOp_rightBegin(lhs, node, isAnd: isAnd);
     }
     var rightType = analyzeExpression(rhs);
     if (isEquals) {
-      flow.equalityOp_end(node, rhs, rightType, notEqual: isNot);
+      flow.equalityOperation_end(
+          node, leftInfo, flow.equalityOperand_end(rhs, rightType),
+          notEqual: isNot);
     } else if (isLogical) {
       flow.logicalBinaryOp_end(node, rhs, isAnd: isAnd);
     }
diff --git a/pkg/_fe_analyzer_shared/test/util/dependency_walker_test.dart b/pkg/_fe_analyzer_shared/test/util/dependency_walker_test.dart
new file mode 100644
index 0000000..ec5cd44
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/util/dependency_walker_test.dart
@@ -0,0 +1,229 @@
+// Copyright (c) 2016, 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:_fe_analyzer_shared/src/util/dependency_walker.dart';
+import 'package:test/test.dart';
+
+main() {
+  late Map<String, TestNode> nodes;
+  setUp(() {
+    nodes = {};
+  });
+
+  TestNode getNode(String name) =>
+      nodes.putIfAbsent(name, () => TestNode(name));
+
+  void makeGraph(Map<String, List<String>> graph) {
+    graph.forEach((name, deps) {
+      var node = getNode(name);
+      for (var dep in deps) {
+        node._dependencies.add(getNode(dep));
+      }
+    });
+  }
+
+  TestWalker walk(String startingNodeName) =>
+      TestWalker()..walk(getNode(startingNodeName));
+
+  void checkGraph(Map<String, List<String>> graph, String startingNodeName,
+      List<List<String>> expectedEvaluations, List<bool> expectedSccFlags) {
+    makeGraph(graph);
+    var walker = walk(startingNodeName);
+    expect(walker._evaluations, expectedEvaluations.map((x) => x.toSet()));
+    expect(walker._sccFlags, expectedSccFlags);
+  }
+
+  test('Complex graph', () {
+    checkGraph(
+        {
+          'a': ['b', 'c'],
+          'b': ['c', 'd'],
+          'c': [],
+          'd': ['c', 'e'],
+          'e': ['b', 'f'],
+          'f': ['c', 'd']
+        },
+        'a',
+        [
+          ['c'],
+          ['b', 'd', 'e', 'f'],
+          ['a']
+        ],
+        [false, true, false]);
+  });
+
+  test('Diamond', () {
+    checkGraph(
+        {
+          'a': ['b', 'c'],
+          'b': ['d'],
+          'c': ['d'],
+          'd': []
+        },
+        'a',
+        [
+          ['d'],
+          ['b'],
+          ['c'],
+          ['a']
+        ],
+        [false, false, false, false]);
+  });
+
+  test('Single node', () {
+    checkGraph(
+        {'a': []},
+        'a',
+        [
+          ['a']
+        ],
+        [false]);
+  });
+
+  test('Single node with trivial cycle', () {
+    checkGraph(
+        {
+          'a': ['a']
+        },
+        'a',
+        [
+          ['a']
+        ],
+        [true]);
+  });
+
+  test('Three nodes with circular dependency', () {
+    checkGraph(
+        {
+          'a': ['b'],
+          'b': ['c'],
+          'c': ['a'],
+        },
+        'a',
+        [
+          ['a', 'b', 'c']
+        ],
+        [true]);
+  });
+
+  group('Two backlinks:', () {
+    test('earlier first', () {
+      // Test a graph A->B->C->D, where D points back to B and then C.
+      checkGraph(
+          {
+            'a': ['b'],
+            'b': ['c'],
+            'c': ['d'],
+            'd': ['b', 'c']
+          },
+          'a',
+          [
+            ['b', 'c', 'd'],
+            ['a']
+          ],
+          [true, false]);
+    });
+
+    test('later first', () {
+      // Test a graph A->B->C->D, where D points back to C and then B.
+      checkGraph(
+          {
+            'a': ['b'],
+            'b': ['c'],
+            'c': ['d'],
+            'd': ['c', 'b']
+          },
+          'a',
+          [
+            ['b', 'c', 'd'],
+            ['a']
+          ],
+          [true, false]);
+    });
+  });
+
+  test('Two nodes with circular dependency', () {
+    checkGraph(
+        {
+          'a': ['b'],
+          'b': ['a']
+        },
+        'a',
+        [
+          ['a', 'b']
+        ],
+        [true]);
+  });
+
+  test('Two nodes with simple dependency', () {
+    checkGraph(
+        {
+          'a': ['b'],
+          'b': []
+        },
+        'a',
+        [
+          ['b'],
+          ['a']
+        ],
+        [false, false]);
+  });
+
+  test('Do not revisit already-evaluated nodes', () {
+    makeGraph({
+      'a': ['b'],
+      'b': []
+    });
+    var walker = TestWalker();
+    var a = getNode('a');
+    walker.walk(a);
+    expect(walker._evaluations, hasLength(2));
+    walker.walk(a);
+    expect(walker._evaluations, hasLength(2));
+  });
+}
+
+class TestNode extends Node<TestNode> {
+  final String _name;
+
+  @override
+  bool isEvaluated = false;
+
+  bool _computeDependenciesCalled = false;
+
+  final _dependencies = <TestNode>[];
+
+  TestNode(this._name);
+
+  @override
+  List<TestNode> computeDependencies() {
+    expect(_computeDependenciesCalled, false);
+    _computeDependenciesCalled = true;
+    return _dependencies;
+  }
+}
+
+class TestWalker extends DependencyWalker<TestNode> {
+  final _evaluations = <Set<String>>[];
+  final _sccFlags = <bool>[];
+
+  @override
+  void evaluate(TestNode v) {
+    v.isEvaluated = true;
+    _evaluations.add({v._name});
+    _sccFlags.add(false);
+  }
+
+  @override
+  void evaluateScc(List<TestNode> scc) {
+    for (var v in scc) {
+      v.isEvaluated = true;
+    }
+    var sccNames = scc.map((node) => node._name).toSet();
+    // Make sure there were no duplicates
+    expect(sccNames.length, scc.length);
+    _evaluations.add(sccNames);
+    _sccFlags.add(true);
+  }
+}
diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart
index 6dab119..26d8396 100644
--- a/pkg/_js_interop_checks/lib/js_interop_checks.dart
+++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart
@@ -14,10 +14,10 @@
         messageJsInteropEnclosingClassJSAnnotationContext,
         messageJsInteropExternalExtensionMemberOnTypeInvalid,
         messageJsInteropExternalMemberNotJSAnnotated,
-        messageJsInteropIndexNotSupported,
         messageJsInteropNamedParameters,
         messageJsInteropNonExternalConstructor,
         messageJsInteropNonExternalMember,
+        messageJsInteropOperatorsNotSupported,
         templateJsInteropDartClassExtendsJSClass,
         templateJsInteropStaticInteropWithInstanceMembers,
         templateJsInteropStaticInteropWithNonStaticSupertype,
@@ -220,10 +220,9 @@
       _checkDisallowedExternal(procedure);
     } else {
       // Check JS interop indexing.
-      if (!procedure.isStatic &&
-          (procedure.name.text == '[]=' || procedure.name.text == '[]')) {
+      if (!procedure.isStatic && procedure.kind == ProcedureKind.Operator) {
         _diagnosticsReporter.report(
-            messageJsInteropIndexNotSupported,
+            messageJsInteropOperatorsNotSupported,
             procedure.fileOffset,
             procedure.name.text.length,
             procedure.fileUri);
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index be632ea..d610cb4 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -109,7 +109,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  1.32.10
+  1.33.0
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -236,6 +236,11 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.33.0</h4>
+<ul>
+  <li>Requests <tt>getSuggestions2</tt> and <tt>getSuggestionDetails2</tt>
+    are enabled.</li>
+</ul>
 <h4>1.32.10</h4>
 <ul>
   <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
@@ -313,9 +318,11 @@
 </ul>
 
 <p><a href="#domain_completion">Completion</a></p><ul><li><a href="#request_completion.getSuggestions">completion.getSuggestions</a></li>
+<li><a href="#request_completion.getSuggestions2">completion.getSuggestions2</a></li>
 <li><a href="#request_completion.setSubscriptions">completion.setSubscriptions</a></li>
 <li><a class="deprecated" href="#request_completion.registerLibraryPaths">completion.registerLibraryPaths</a></li>
 <li><a href="#request_completion.getSuggestionDetails">completion.getSuggestionDetails</a></li>
+<li><a href="#request_completion.getSuggestionDetails2">completion.getSuggestionDetails2</a></li>
 </ul>
 
 <p><a href="#domain_search">Search</a></p><ul><li><a href="#request_search.findElementReferences">search.findElementReferences</a></li>
@@ -1606,6 +1613,94 @@
           The identifier used to associate results with this
           completion request.
         </p>
+      </dd></dl></dd><dt class="request"><a name="request_completion.getSuggestions2">completion.getSuggestions2</a></dt><dd><div class="box"><pre>request: {
+  "id": String
+  "method": "completion.getSuggestions2"
+  "params": {
+    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+    "<b>offset</b>": int
+    "<b>maxResults</b>": int
+    "<b>completionCaseMatchingMode</b>": <span style="color:#999999">optional</span> <a href="#type_CompletionCaseMatchingMode">CompletionCaseMatchingMode</a>
+  }
+}</pre><br><pre>response: {
+  "id": String
+  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
+  "result": {
+    "<b>replacementOffset</b>": int
+    "<b>replacementLength</b>": int
+    "<b>suggestions</b>": List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;
+    "<b>isIncomplete</b>": bool
+  }
+}</pre></div>
+    <p>
+      Request that completion suggestions for the given offset in the given
+      file be returned. The suggestions will be filtered using fuzzy matching
+      with the already existing prefix.
+    </p>
+    
+    
+  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
+        
+        <p>
+          The file containing the point at which suggestions are to be made.
+        </p>
+      </dd><dt class="field"><b>offset: int</b></dt><dd>
+        
+        <p>
+          The offset within the file at which suggestions are to be made.
+        </p>
+      </dd><dt class="field"><b>maxResults: int</b></dt><dd>
+        
+        <p>
+          The maximum number of suggestions to return. If the number of
+          suggestions after filtering is greater than the <tt>maxResults</tt>,
+          then <tt>isIncomplete</tt> is set to <tt>true</tt>.
+        </p>
+      </dd><dt class="field"><b>completionCaseMatchingMode: <a href="#type_CompletionCaseMatchingMode">CompletionCaseMatchingMode</a><span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          The mode of code completion being invoked. If no value is provided,
+          <tt>MATCH_FIRST_CHAR</tt> will be assumed.
+        </p>
+      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>replacementOffset: int</b></dt><dd>
+        
+        <p>
+          The offset of the start of the text to be  replaced. This will be
+          different from the offset used  to request the completion suggestions
+          if there was a portion of an identifier before the original offset.
+          In particular, the replacementOffset will be the offset of the
+          beginning of said identifier.
+        </p>
+      </dd><dt class="field"><b>replacementLength: int</b></dt><dd>
+        
+        <p>
+          The length of the text to be replaced if the remainder of the
+          identifier containing the cursor is to be replaced when the
+          suggestion is applied (that is, the number of characters in the
+          existing identifier).
+        </p>
+      </dd><dt class="field"><b>suggestions: List&lt;<a href="#type_CompletionSuggestion">CompletionSuggestion</a>&gt;</b></dt><dd>
+        
+        <p>
+          The completion suggestions being reported. This list is filtered
+          by the already existing prefix, and sorted first by relevance,
+          and (if the same) by the suggestion text. The list will have at
+          most <tt>maxResults</tt> items. If the user types a new keystroke,
+          the client is expected to either do local filtering (when the
+          returned list was complete), or ask the server again (if
+          <tt>isIncomplete</tt> was <tt>true</tt>).
+        </p>
+        <p>
+          This list contains suggestions from both imported, and not yet
+          imported libraries. Items from not yet imported libraries will
+          have <tt>isNotImported</tt> set to <tt>true</tt>.
+        </p>
+      </dd><dt class="field"><b>isIncomplete: bool</b></dt><dd>
+        
+        <p>
+          True if the number of suggestions after filtering was greater than
+          the requested <tt>maxResults</tt>.
+        </p>
       </dd></dl></dd><dt class="request"><a name="request_completion.setSubscriptions">completion.setSubscriptions</a></dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "completion.setSubscriptions"
@@ -1717,6 +1812,73 @@
           the accepted completion suggestion needs to be imported. The field
           will be omitted if there are no additional changes that need to be made.
         </p>
+      </dd></dl></dd><dt class="request"><a name="request_completion.getSuggestionDetails2">completion.getSuggestionDetails2</a></dt><dd><div class="box"><pre>request: {
+  "id": String
+  "method": "completion.getSuggestionDetails2"
+  "params": {
+    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+    "<b>offset</b>": int
+    "<b>completion</b>": String
+    "<b>libraryUri</b>": String
+  }
+}</pre><br><pre>response: {
+  "id": String
+  "error": <span style="color:#999999">optional</span> <a href="#type_RequestError">RequestError</a>
+  "result": {
+    "<b>completion</b>": String
+    "<b>change</b>": <a href="#type_SourceChange">SourceChange</a>
+  }
+}</pre></div>
+    <p>
+      Clients must make this request when the user has selected a completion
+      suggestion with the <tt>isNotImported</tt> field set to <tt>true</tt>.
+      The server will respond with the text to insert, as well as any
+      <tt>SourceChange</tt> that needs to be applied in case the completion
+      requires an additional import to be  added. The text to insert might be
+      different from the original suggestion to include an import prefix if the
+      library will be imported with a prefix to avoid shadowing
+      conflicts in the file.
+    </p>
+    
+    
+  <h4>parameters:</h4><dl><dt class="field"><b>file: <a href="#type_FilePath">FilePath</a></b></dt><dd>
+        
+        <p>
+          The path of the file into which this completion is being inserted.
+        </p>
+      </dd><dt class="field"><b>offset: int</b></dt><dd>
+        
+        <p>
+          The offset in the file where the completion will be inserted.
+        </p>
+      </dd><dt class="field"><b>completion: String</b></dt><dd>
+        
+        <p>
+          The <tt>completion</tt> from the selected
+          <tt>CompletionSuggestion</tt>.  It could be a name of a class, or a
+          name of a constructor in form "typeName.constructorName()", or an
+          enumeration constant in form "enumName.constantName", etc.
+        </p>
+      </dd><dt class="field"><b>libraryUri: String</b></dt><dd>
+        
+        <p>
+          The URI of the library to import, so that the element referenced
+          in the <tt>completion</tt> becomes accessible.
+        </p>
+      </dd></dl><h4>returns:</h4><dl><dt class="field"><b>completion: String</b></dt><dd>
+        
+        <p>
+          The full text to insert, which possibly includes now an import prefix.
+          The client should insert this text, not the <tt>completion</tt> from
+          the selected <tt>CompletionSuggestion</tt>.
+        </p>
+      </dd><dt class="field"><b>change: <a href="#type_SourceChange">SourceChange</a></b></dt><dd>
+        
+        <p>
+          A change for the client to apply to make the accepted completion
+          suggestion available. In most cases the change is to add a new
+          import directive to the file.
+        </p>
       </dd></dl></dd></dl><h3>Notifications</h3><dl><dt class="notification"><a name="notification_completion.results">completion.results</a></dt><dd><div class="box"><pre>notification: {
   "event": "completion.results"
   "params": {
@@ -2161,6 +2323,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"
@@ -3711,6 +3874,37 @@
           The type of the options parameter being suggested. This field is
           omitted if the parameterName field is omitted.
         </p>
+      </dd><dt class="field"><b>libraryUri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          This field  is omitted if <tt>getSuggestions</tt> was used rather
+          than <tt>getSuggestions2</tt>.
+        </p>
+        <p>
+          This field  is omitted if this suggestion corresponds to a locally
+          declared element.
+        </p>
+        <p>
+          If this suggestion corresponds to an already imported element,
+          then this field is the URI of a library that provides this element,
+          not the URI of the library where the element is declared.
+        </p>
+        <p>
+          If this suggestion corresponds to an element from a not yet
+          imported library, this field is the URI of a library that could be
+          imported to make this suggestion  accessible in the file where
+          completion was requested, such as <tt>package:foo/bar.dart</tt> or
+          <tt>file:///home/me/workspace/foo/test/bar_test.dart</tt>.
+        </p>
+      </dd><dt class="field"><b>isNotImported: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          True if the suggestion is for an element from a not yet imported
+          library. This field is omitted if the element is declared locally,
+          or is from library is already imported, so that the suggestion can
+          be inserted as is, or if <tt>getSuggestions</tt> was used rather
+          than <tt>getSuggestions2</tt>.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionSuggestionKind">CompletionSuggestionKind: String</a></dt><dd>
     <p>
       An enumeration of the kinds of elements that can be included in a
@@ -4777,6 +4971,13 @@
       the user edit the variable name after the operation, all occurrences of
       the name could be edited simultaneously.
     </p>
+    <p>
+      Edit groups may have a length of 0 and function as tabstops where there
+      is no default text, for example, an edit that inserts an <tt>if</tt>
+      statement might provide an empty group between parens where a condition
+      should be typed. For this reason, it's also valid for a group to contain
+      only a single position that is not linked to others.
+    </p>
     
   <dl><dt class="field"><b>positions: List&lt;<a href="#type_Position">Position</a>&gt;</b></dt><dd>
         
@@ -6148,7 +6349,7 @@
   TODO: TBD
 </p>
 <h2 class="domain"><a name="index">Index</a></h2>
-<h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li><li><a href="#request_server.cancelRequest">cancelRequest</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.log">log</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.closingLabels">closingLabels</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li><li><a href="#request_completion.setSubscriptions">setSubscriptions</a></li><li><a href="#request_completion.registerLibraryPaths">registerLibraryPaths</a></li><li><a href="#request_completion.getSuggestionDetails">getSuggestionDetails</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li><li><a href="#notification_completion.availableSuggestions">availableSuggestions</a></li><li><a href="#notification_completion.existingImports">existingImports</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getPostfixCompletion">getPostfixCompletion</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.getSuggestions">getSuggestions</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic (<a href="#domain_diagnostic">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h4>flutter (<a href="#domain_flutter">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_flutter.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_flutter.outline">outline</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_AvailableSuggestion">AvailableSuggestion</a></li><li><a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></li><li><a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a></li><li><a href="#type_BulkFix">BulkFix</a></li><li><a href="#type_BulkFixDetail">BulkFixDetail</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_ClosingLabel">ClosingLabel</a></li><li><a href="#type_CompletionCaseMatchingMode">CompletionCaseMatchingMode</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionMode">CompletionMode</a></li><li><a href="#type_CompletionService">CompletionService</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextData">ContextData</a></li><li><a href="#type_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementDeclaration">ElementDeclaration</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_ExistingImport">ExistingImport</a></li><li><a href="#type_ExistingImports">ExistingImports</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FlutterOutline">FlutterOutline</a></li><li><a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a></li><li><a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></li><li><a href="#type_FlutterService">FlutterService</a></li><li><a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a></li><li><a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a></li><li><a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></li><li><a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a></li><li><a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_ImportedElementSet">ImportedElementSet</a></li><li><a href="#type_ImportedElements">ImportedElements</a></li><li><a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a></li><li><a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a></li><li><a href="#type_KytheEntry">KytheEntry</a></li><li><a href="#type_KytheVName">KytheVName</a></li><li><a href="#type_LibraryPathSet">LibraryPathSet</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a></li><li><a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></li><li><a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></li><li><a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_EXTRACT_WIDGET">EXTRACT_WIDGET</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
+<h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li><li><a href="#request_server.cancelRequest">cancelRequest</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.log">log</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.getReachableSources">getReachableSources</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.closingLabels">closingLabels</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li><li><a href="#request_completion.getSuggestions2">getSuggestions2</a></li><li><a href="#request_completion.setSubscriptions">setSubscriptions</a></li><li><a href="#request_completion.registerLibraryPaths">registerLibraryPaths</a></li><li><a href="#request_completion.getSuggestionDetails">getSuggestionDetails</a></li><li><a href="#request_completion.getSuggestionDetails2">getSuggestionDetails2</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li><li><a href="#notification_completion.availableSuggestions">availableSuggestions</a></li><li><a href="#notification_completion.existingImports">existingImports</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getPostfixCompletion">getPostfixCompletion</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.getSuggestions">getSuggestions</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h4>diagnostic (<a href="#domain_diagnostic">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_diagnostic.getDiagnostics">getDiagnostics</a></li><li><a href="#request_diagnostic.getServerPort">getServerPort</a></li></ul></div><h4>flutter (<a href="#domain_flutter">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_flutter.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_flutter.outline">outline</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_AvailableSuggestion">AvailableSuggestion</a></li><li><a href="#type_AvailableSuggestionRelevanceTag">AvailableSuggestionRelevanceTag</a></li><li><a href="#type_AvailableSuggestionSet">AvailableSuggestionSet</a></li><li><a href="#type_BulkFix">BulkFix</a></li><li><a href="#type_BulkFixDetail">BulkFixDetail</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_ClosingLabel">ClosingLabel</a></li><li><a href="#type_CompletionCaseMatchingMode">CompletionCaseMatchingMode</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionMode">CompletionMode</a></li><li><a href="#type_CompletionService">CompletionService</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_ContextData">ContextData</a></li><li><a href="#type_DiagnosticMessage">DiagnosticMessage</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementDeclaration">ElementDeclaration</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_ExistingImport">ExistingImport</a></li><li><a href="#type_ExistingImports">ExistingImports</a></li><li><a href="#type_FileKind">FileKind</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FlutterOutline">FlutterOutline</a></li><li><a href="#type_FlutterOutlineAttribute">FlutterOutlineAttribute</a></li><li><a href="#type_FlutterOutlineKind">FlutterOutlineKind</a></li><li><a href="#type_FlutterService">FlutterService</a></li><li><a href="#type_FlutterWidgetProperty">FlutterWidgetProperty</a></li><li><a href="#type_FlutterWidgetPropertyEditor">FlutterWidgetPropertyEditor</a></li><li><a href="#type_FlutterWidgetPropertyEditorKind">FlutterWidgetPropertyEditorKind</a></li><li><a href="#type_FlutterWidgetPropertyValue">FlutterWidgetPropertyValue</a></li><li><a href="#type_FlutterWidgetPropertyValueEnumItem">FlutterWidgetPropertyValueEnumItem</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_ImportedElementSet">ImportedElementSet</a></li><li><a href="#type_ImportedElements">ImportedElements</a></li><li><a href="#type_IncludedSuggestionRelevanceTag">IncludedSuggestionRelevanceTag</a></li><li><a href="#type_IncludedSuggestionSet">IncludedSuggestionSet</a></li><li><a href="#type_KytheEntry">KytheEntry</a></li><li><a href="#type_KytheVName">KytheVName</a></li><li><a href="#type_LibraryPathSet">LibraryPathSet</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PostfixTemplateDescriptor">PostfixTemplateDescriptor</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_RuntimeCompletionExpression">RuntimeCompletionExpression</a></li><li><a href="#type_RuntimeCompletionExpressionType">RuntimeCompletionExpressionType</a></li><li><a href="#type_RuntimeCompletionExpressionTypeKind">RuntimeCompletionExpressionTypeKind</a></li><li><a href="#type_RuntimeCompletionVariable">RuntimeCompletionVariable</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_EXTRACT_WIDGET">EXTRACT_WIDGET</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
 
 
 </body></html>
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
index 7d095d7..8475456 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
@@ -1605,3 +1605,81 @@
   @override
   String toString() => jsonEncoder.convert(toJson());
 }
+
+class ValidateRefactorResult implements ToJsonable {
+  static const jsonHandler = LspJsonHandler(
+      ValidateRefactorResult.canParse, ValidateRefactorResult.fromJson);
+
+  ValidateRefactorResult({required this.valid, this.message});
+  static ValidateRefactorResult fromJson(Map<String, Object?> json) {
+    final validJson = json['valid'];
+    final valid = validJson as bool;
+    final messageJson = json['message'];
+    final message = messageJson as String?;
+    return ValidateRefactorResult(valid: valid, message: message);
+  }
+
+  final String? message;
+  final bool valid;
+
+  Map<String, Object?> toJson() {
+    var __result = <String, Object?>{};
+    __result['valid'] = valid;
+    if (message != null) {
+      __result['message'] = message;
+    }
+    return __result;
+  }
+
+  static bool canParse(Object? obj, LspJsonReporter reporter) {
+    if (obj is Map<String, Object?>) {
+      reporter.push('valid');
+      try {
+        if (!obj.containsKey('valid')) {
+          reporter.reportError('must not be undefined');
+          return false;
+        }
+        final valid = obj['valid'];
+        if (valid == null) {
+          reporter.reportError('must not be null');
+          return false;
+        }
+        if (!(valid is bool)) {
+          reporter.reportError('must be of type bool');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      reporter.push('message');
+      try {
+        final message = obj['message'];
+        if (message != null && !(message is String)) {
+          reporter.reportError('must be of type String');
+          return false;
+        }
+      } finally {
+        reporter.pop();
+      }
+      return true;
+    } else {
+      reporter.reportError('must be of type ValidateRefactorResult');
+      return false;
+    }
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (other is ValidateRefactorResult &&
+        other.runtimeType == ValidateRefactorResult) {
+      return valid == other.valid && message == other.message && true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => Object.hash(valid, message);
+
+  @override
+  String toString() => jsonEncoder.convert(toJson());
+}
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
index 65c9513..6d5b0d8 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_special.dart
@@ -65,10 +65,10 @@
   final T1? _t1;
   final T2? _t2;
 
-  Either2.t1(T1 this._t1)
+  const Either2.t1(T1 this._t1)
       : _t2 = null,
         _which = 1;
-  Either2.t2(T2 this._t2)
+  const Either2.t2(T2 this._t2)
       : _t1 = null,
         _which = 2;
 
diff --git a/pkg/analysis_server/lib/protocol/protocol.dart b/pkg/analysis_server/lib/protocol/protocol.dart
index 3481a4c..c1d6da7 100644
--- a/pkg/analysis_server/lib/protocol/protocol.dart
+++ b/pkg/analysis_server/lib/protocol/protocol.dart
@@ -310,6 +310,13 @@
   /// then the response will represent an error condition.
   Response(this.id, {this.result, this.error});
 
+  /// Initialize a newly created instance to represent the CONTENT_MODIFIED
+  /// error condition.
+  Response.contentModified(Request request)
+      : this(request.id,
+            error: RequestError(RequestErrorCode.CONTENT_MODIFIED,
+                'File was modified before the operation completed.'));
+
   /// Create and return the `DEBUG_PORT_COULD_NOT_BE_OPENED` error response.
   Response.debugPortCouldNotBeOpened(Request request, dynamic error)
       : this(request.id,
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index e8a4e7e..24ad02a 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -6,7 +6,7 @@
 // To regenerate the file, use the script
 // "pkg/analysis_server/tool/spec/generate_files".
 
-const String PROTOCOL_VERSION = '1.32.10';
+const String PROTOCOL_VERSION = '1.33.0';
 
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
@@ -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/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 12ae415..2aec83b 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -44,9 +44,11 @@
 import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart' as analysis;
 import 'package:analyzer/src/dart/analysis/status.dart' as analysis;
@@ -123,6 +125,34 @@
   final StreamController _onAnalysisSetChangedController =
       StreamController.broadcast(sync: true);
 
+  /// Key: a file path for which removing of the overlay was requested.
+  /// Value: a timer that will remove the overlay, or cancelled.
+  ///
+  /// This helps for analysis server running remotely, with slow remote file
+  /// systems, in the following scenario:
+  /// 1. User edits file, IDE sends "add overlay".
+  /// 2. User saves file, IDE saves file locally, sends "remove overlay".
+  /// 3. The remove server reads the file on "remove overlay". But the content
+  ///    of the file on the remove machine is not the same as it is locally,
+  ///    and not what the user looks in the IDE. So, analysis results, such
+  ///    as semantic highlighting, are inconsistent with the local file content.
+  /// 4. (after a few seconds) The file is synced to the remove machine,
+  ///    the watch event happens, server reads the file, sends analysis
+  ///    results that are consistent with the local file content.
+  ///
+  /// We try to prevent the inconsistency between moments (3) and (4).
+  /// It is not wrong, we are still in the eventual consistency, but we
+  /// want to keep the inconsistency time shorter.
+  ///
+  /// To do this we keep the last overlay content on "remove overlay",
+  /// and wait for the next watch event in (4). But there might be race
+  /// condition, and when it happens, we still want to get to the eventual
+  /// consistency, so on timer we remove the overlay anyway.
+  final Map<String, Timer> _pendingFilesToRemoveOverlay = {};
+
+  @visibleForTesting
+  Duration pendingFilesRemoveOverlayDelay = const Duration(seconds: 10);
+
   final DetachableFileSystemManager? detachableFileSystemManager;
 
   /// The broadcast stream of requests that were discarded because there
@@ -231,6 +261,12 @@
     cancellationTokens[id]?.cancel();
   }
 
+  Future<void> dispose() async {
+    for (var timer in _pendingFilesToRemoveOverlay.values) {
+      timer.cancel();
+    }
+  }
+
   /// The socket from which requests are being read has been closed.
   void done() {}
 
@@ -266,6 +302,9 @@
             sendResponse(response);
             return;
           }
+        } on InconsistentAnalysisException {
+          sendResponse(Response.contentModified(request));
+          return;
         } on RequestFailure catch (exception) {
           sendResponse(exception.response);
           return;
@@ -511,7 +550,7 @@
       } catch (_) {}
 
       // Prepare the new contents.
-      String? newContents;
+      String newContents;
       if (change is AddContentOverlay) {
         newContents = change.content;
       } else if (change is ChangeContentOverlay) {
@@ -530,25 +569,29 @@
                   'Invalid overlay change')));
         }
       } else if (change is RemoveContentOverlay) {
-        newContents = null;
+        _pendingFilesToRemoveOverlay.remove(file)?.cancel();
+        _pendingFilesToRemoveOverlay[file] = Timer(
+          pendingFilesRemoveOverlayDelay,
+          () {
+            _pendingFilesToRemoveOverlay.remove(file);
+            resourceProvider.removeOverlay(file);
+            _changeFileInDrivers(file);
+          },
+        );
+        return;
       } else {
         // Protocol parsing should have ensured that we never get here.
         throw AnalysisException('Illegal change type');
       }
 
-      if (newContents != null) {
-        resourceProvider.setOverlay(
-          file,
-          content: newContents,
-          modificationStamp: overlayModificationStamp++,
-        );
-      } else {
-        resourceProvider.removeOverlay(file);
-      }
+      _pendingFilesToRemoveOverlay.remove(file)?.cancel();
+      resourceProvider.setOverlay(
+        file,
+        content: newContents,
+        modificationStamp: overlayModificationStamp++,
+      );
 
-      driverMap.values.forEach((driver) {
-        driver.changeFile(file);
-      });
+      _changeFileInDrivers(file);
 
       // If the file did not exist, and is "overlay only", it still should be
       // analyzed. Add it to driver to which it should have been added.
@@ -586,6 +629,12 @@
 //    });
   }
 
+  void _changeFileInDrivers(String path) {
+    for (var driver in driverMap.values) {
+      driver.changeFile(path);
+    }
+  }
+
   /// Returns `true` if there is a subscription for the given [service] and
   /// [file].
   bool _hasAnalysisServiceSubscription(AnalysisService service, String file) {
@@ -671,7 +720,7 @@
   final AnalysisServer analysisServer;
 
   /// The [ResourceProvider] by which paths are converted into [Resource]s.
-  final ResourceProvider resourceProvider;
+  final OverlayResourceProvider resourceProvider;
 
   /// The set of files for which notifications were sent.
   final Set<String> filesToFlush = {};
@@ -698,6 +747,15 @@
 
   @override
   void afterWatchEvent(WatchEvent event) {
+    var path = event.path;
+
+    var pendingTimer = analysisServer._pendingFilesToRemoveOverlay.remove(path);
+    if (pendingTimer != null) {
+      pendingTimer.cancel();
+      resourceProvider.removeOverlay(path);
+      analysisServer._changeFileInDrivers(path);
+    }
+
     analysisServer._onAnalysisSetChangedController.add(null);
   }
 
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index b60182d..893de44 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -229,8 +229,13 @@
   }
 
   /// The list of current analysis sessions in all contexts.
-  List<AnalysisSession> get currentSessions {
-    return driverMap.values.map((driver) => driver.currentSession).toList();
+  Future<List<AnalysisSession>> get currentSessions async {
+    var sessions = <AnalysisSession>[];
+    for (var driver in driverMap.values) {
+      await driver.applyPendingFileChanges();
+      sessions.add(driver.currentSession);
+    }
+    return sessions;
   }
 
   /// A table mapping [Folder]s to the [AnalysisDriver]s associated with them.
@@ -297,6 +302,18 @@
     return null;
   }
 
+  /// Return an [AnalysisSession] in which the file with the given [path]
+  /// should be analyzed, preferring the one in which it is analyzed, then
+  /// the one where it is referenced, then the first, otherwise `null`.
+  Future<AnalysisSession?> getAnalysisSession(String path) async {
+    var analysisDriver = getAnalysisDriver(path);
+    if (analysisDriver != null) {
+      await analysisDriver.applyPendingFileChanges();
+      return analysisDriver.currentSession;
+    }
+    return null;
+  }
+
   DartdocDirectiveInfo getDartdocDirectiveInfoFor(ResolvedUnitResult result) {
     return getDartdocDirectiveInfoForSession(result.session);
   }
@@ -390,13 +407,20 @@
   }
 
   /// Return the unresolved unit for the file with the given [path].
-  ParsedUnitResult? getParsedUnit(String path) {
+  ///
+  /// Callers should handle [InconsistentAnalysisException] exceptions that may
+  /// occur if a file is modified during this operation.
+  Future<ParsedUnitResult?> getParsedUnit(String path) async {
     if (!file_paths.isDart(resourceProvider.pathContext, path)) {
       return null;
     }
 
-    var session = getAnalysisDriver(path)?.currentSession;
-    var result = session?.getParsedUnit(path);
+    var session = await getAnalysisSession(path);
+    if (session == null) {
+      return null;
+    }
+
+    var result = session.getParsedUnit(path);
     return result is ParsedUnitResult ? result : null;
   }
 
@@ -463,11 +487,11 @@
     await contextManager.refresh();
   }
 
-  ResolvedForCompletionResultImpl? resolveForCompletion({
+  Future<ResolvedForCompletionResultImpl?> resolveForCompletion({
     required String path,
     required int offset,
     required OperationPerformanceImpl performance,
-  }) {
+  }) async {
     if (!file_paths.isDart(resourceProvider.pathContext, path)) {
       return null;
     }
@@ -478,6 +502,7 @@
     }
 
     try {
+      await driver.applyPendingFileChanges();
       return driver.resolveForCompletion(
         path: path,
         offset: offset,
diff --git a/pkg/analysis_server/lib/src/cider/assists.dart b/pkg/analysis_server/lib/src/cider/assists.dart
index ba46cce..6b51f05 100644
--- a/pkg/analysis_server/lib/src/cider/assists.dart
+++ b/pkg/analysis_server/lib/src/cider/assists.dart
@@ -21,7 +21,7 @@
   Future<List<Assist>> compute(
       String path, int lineNumber, int colNumber, int length) async {
     var result = <Assist>[];
-    var resolvedUnit = _fileResolver.resolve(path: path);
+    var resolvedUnit = await _fileResolver.resolve2(path: path);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(lineNumber) + colNumber;
 
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 25a8bf9..86e6d59 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -54,14 +54,17 @@
     @visibleForTesting void Function(ResolvedUnitResult)? testResolvedUnit,
   }) async {
     return _performanceRoot.runAsync('completion', (performance) async {
-      var resolvedUnit = performance.run('resolution', (performance) {
-        return _fileResolver.resolve(
-          completionLine: line,
-          completionColumn: column,
-          path: path,
-          performance: performance,
-        );
-      });
+      var resolvedUnit = await performance.runAsync(
+        'resolution',
+        (performance) async {
+          return _fileResolver.resolve2(
+            completionLine: line,
+            completionColumn: column,
+            path: path,
+            performance: performance,
+          );
+        },
+      );
 
       if (testResolvedUnit != null) {
         testResolvedUnit(resolvedUnit);
diff --git a/pkg/analysis_server/lib/src/cider/document_symbols.dart b/pkg/analysis_server/lib/src/cider/document_symbols.dart
new file mode 100644
index 0000000..f8c77758
--- /dev/null
+++ b/pkg/analysis_server/lib/src/cider/document_symbols.dart
@@ -0,0 +1,60 @@
+// 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/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/src/computer/computer_outline.dart';
+import 'package:analysis_server/src/lsp/client_capabilities.dart';
+import 'package:analysis_server/src/lsp/mapping.dart';
+import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/dart/micro/resolve_file.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+class CiderDocumentSymbolsComputer {
+  final FileResolver _fileResolver;
+
+  CiderDocumentSymbolsComputer(this._fileResolver);
+
+  Future<List<DocumentSymbol>> compute2(String filePath) async {
+    var result = <DocumentSymbol>[];
+    var resolvedUnit = await _fileResolver.resolve2(path: filePath);
+
+    final computer = DartUnitOutlineComputer(resolvedUnit);
+    final outline = computer.compute();
+
+    final children = outline.children;
+    if (children == null) {
+      return result;
+    }
+
+    result.addAll(children.map((child) => _asDocumentSymbol(
+        LspClientCapabilities.defaultSupportedSymbolKinds,
+        resolvedUnit.lineInfo,
+        child)));
+
+    return result;
+  }
+
+  DocumentSymbol _asDocumentSymbol(
+    Set<SymbolKind> supportedKinds,
+    LineInfo lineInfo,
+    Outline outline,
+  ) {
+    final codeRange = toRange(lineInfo, outline.codeOffset, outline.codeLength);
+    final nameLocation = outline.element.location;
+    final nameRange = nameLocation != null
+        ? toRange(lineInfo, nameLocation.offset, nameLocation.length)
+        : null;
+    return DocumentSymbol(
+      name: toElementName(outline.element),
+      detail: outline.element.parameters,
+      kind: elementKindToSymbolKind(supportedKinds, outline.element.kind),
+      deprecated: outline.element.isDeprecated,
+      range: codeRange,
+      selectionRange: nameRange ?? codeRange,
+      children: outline.children
+          ?.map((child) => _asDocumentSymbol(supportedKinds, lineInfo, child))
+          .toList(),
+    );
+  }
+}
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index 6b65f24..fd9efd7 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -40,7 +40,7 @@
   /// Compute quick fixes for errors on the line with the [offset].
   Future<List<CiderErrorFixes>> compute(String path, int lineNumber) async {
     var result = <CiderErrorFixes>[];
-    var resolvedUnit = _fileResolver.resolve(path: path);
+    var resolvedUnit = await _fileResolver.resolve2(path: path);
 
     var lineInfo = resolvedUnit.lineInfo;
 
@@ -89,7 +89,7 @@
     var files = _fileResolver.getFilesWithTopLevelDeclarations(name);
     for (var file in files) {
       if (file.partOfLibrary == null) {
-        var libraryElement = _fileResolver.getLibraryByUri(
+        var libraryElement = await _fileResolver.getLibraryByUri2(
           uriStr: file.uriStr,
         );
         TopLevelDeclarations.addElement(result, libraryElement, name);
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 44eadad..84ef2e3 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -39,6 +39,8 @@
       status = validateFunctionName(name);
     } else if (element is FieldElement) {
       status = validateFieldName(name);
+    } else if (element is MethodElement) {
+      status = validateMethodName(name);
     } else if (element is TypeAliasElement) {
       status = validateTypeAliasName(name);
     } else if (element is ClassElement) {
@@ -81,7 +83,7 @@
 
   String get oldName => canRename.refactoringElement.element.displayName;
 
-  RenameResponse? computeRenameRanges() {
+  Future<RenameResponse?> computeRenameRanges2() async {
     var elements = <Element>[];
     var element = canRename.refactoringElement.element;
     if (element is PropertyInducingElement && element.isSynthetic) {
@@ -93,14 +95,15 @@
     } 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);
@@ -114,8 +117,9 @@
 
   /// Check if the identifier at the [line], [column] for the file at the
   /// [filePath] can be renamed.
-  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;
 
diff --git a/pkg/analysis_server/lib/src/cider/signature_help.dart b/pkg/analysis_server/lib/src/cider/signature_help.dart
index 6b3616a..107060e 100644
--- a/pkg/analysis_server/lib/src/cider/signature_help.dart
+++ b/pkg/analysis_server/lib/src/cider/signature_help.dart
@@ -15,8 +15,9 @@
 
   CiderSignatureHelpComputer(this._fileResolver);
 
-  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};
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/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 6dc9295..a7ea8fd 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -330,10 +330,14 @@
     var convertedErrors = const <protocol.AnalysisError>[];
     try {
       var file = resourceProvider.getFile(path);
-      var packageName = file.parent2.parent2.shortName;
+      var packageName = file.parent.parent.shortName;
       var content = _readFile(path);
       var errorListener = RecordingErrorListener();
-      var errorReporter = ErrorReporter(errorListener, file.createSource());
+      var errorReporter = ErrorReporter(
+        errorListener,
+        file.createSource(),
+        isNonNullableByDefault: false,
+      );
       var parser = TransformSetParser(errorReporter, packageName);
       parser.parse(content);
       var converter = AnalyzerConverter();
@@ -480,7 +484,9 @@
           }
 
           var optionsFile = analysisContext.contextRoot.optionsFile;
-          if (optionsFile != null) {
+
+          if (optionsFile != null &&
+              analysisContext.contextRoot.isAnalyzed(optionsFile.path)) {
             _analyzeAnalysisOptionsYaml(driver, optionsFile.path);
           }
 
@@ -493,7 +499,8 @@
 
           var pubspecFile =
               rootFolder.getChildAssumingFile(file_paths.pubspecYaml);
-          if (pubspecFile.exists) {
+          if (pubspecFile.exists &&
+              analysisContext.contextRoot.isAnalyzed(pubspecFile.path)) {
             _analyzePubspecYaml(driver, pubspecFile.path);
           }
         }
@@ -509,7 +516,6 @@
         return file_paths.isDart(pathContext, path) ||
             file_paths.isAnalysisOptionsYaml(pathContext, path) ||
             file_paths.isPubspecYaml(pathContext, path) ||
-            file_paths.isDotPackages(pathContext, path) ||
             file_paths.isPackageConfigJson(pathContext, path);
       }
 
@@ -671,7 +677,6 @@
     final isPubspec = file_paths.isPubspecYaml(pathContext, path);
     if (file_paths.isAnalysisOptionsYaml(pathContext, path) ||
         file_paths.isBazelBuild(pathContext, path) ||
-        file_paths.isDotPackages(pathContext, path) ||
         file_paths.isPackageConfigJson(pathContext, path) ||
         isPubspec ||
         false) {
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index af16242..cfd19e2 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -4,21 +4,22 @@
 
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/computer/computer_hover.dart';
-import 'package:analysis_server/src/computer/computer_signature.dart';
-import 'package:analysis_server/src/computer/imported_elements_computer.dart';
 import 'package:analysis_server/src/domain_abstract.dart';
-import 'package:analysis_server/src/domain_analysis_flags.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_errors.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_hover.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_imported_elements.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_get_navigation.dart';
+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_general_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_priority_files.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/plugin/result_merger.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/dart/analysis/results.dart';
 import 'package:analyzer/src/generated/engine.dart' as engine;
-import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
-import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
-import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
 
 /// Instances of the class [AnalysisDomainHandler] implement a [RequestHandler]
 /// that handles requests in the `analysis` domain.
@@ -27,272 +28,62 @@
   /// [server].
   AnalysisDomainHandler(AnalysisServer server) : super(server);
 
-  /// Implement the `analysis.getErrors` request.
-  Future<void> getErrors(Request request) async {
-    var file = AnalysisGetErrorsParams.fromRequest(request).file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var result = await server.getResolvedUnit(file);
-
-    if (result == null) {
-      server.sendResponse(Response.getErrorsInvalidFile(request));
-      return;
-    }
-
-    var protocolErrors = doAnalysisError_listFromEngine(result);
-    server.sendResponse(
-        AnalysisGetErrorsResult(protocolErrors).toResponse(request.id));
-  }
-
-  /// Implement the `analysis.getHover` request.
-  Future<void> getHover(Request request) async {
-    var params = AnalysisGetHoverParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    // Prepare the resolved units.
-    var result = await server.getResolvedUnit(file);
-    if (result is! ResolvedUnitResult) {
-      server.sendResponse(Response.fileNotAnalyzed(request, file));
-      return;
-    }
-    var unit = result.unit;
-
-    // Prepare the hovers.
-    var hovers = <HoverInformation>[];
-    var computer = DartUnitHoverComputer(
-        server.getDartdocDirectiveInfoFor(result), unit, params.offset);
-    var hoverInformation = computer.compute();
-    if (hoverInformation != null) {
-      hovers.add(hoverInformation);
-    }
-
-    // Send the response.
-    server.sendResponse(AnalysisGetHoverResult(hovers).toResponse(request.id));
-  }
-
-  /// Implement the `analysis.getImportedElements` request.
-  Future<void> getImportedElements(Request request) async {
-    var params = AnalysisGetImportedElementsParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    //
-    // Prepare the resolved unit.
-    //
-    var result = await server.getResolvedUnit(file);
-    if (result == null) {
-      server.sendResponse(Response.getImportedElementsInvalidFile(request));
-      return;
-    }
-
-    List<ImportedElements> elements;
-
-    //
-    // Compute the list of imported elements.
-    //
-    if (disableManageImportsOnPaste) {
-      elements = <ImportedElements>[];
-    } else {
-      elements =
-          ImportedElementsComputer(result.unit, params.offset, params.length)
-              .compute();
-    }
-
-    //
-    // Send the response.
-    //
-    server.sendResponse(
-        AnalysisGetImportedElementsResult(elements).toResponse(request.id));
-  }
-
-  /// 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.getNavigation` request.
-  Future<void> getNavigation(Request request) async {
-    var params = AnalysisGetNavigationParams.fromRequest(request);
-    var file = params.file;
-    var offset = params.offset;
-    var length = params.length;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      server.sendResponse(Response.getNavigationInvalidFile(request));
-    } else {
-      //
-      // Allow plugins to start computing navigation data.
-      //
-      var requestParams =
-          plugin.AnalysisGetNavigationParams(file, offset, length);
-      var pluginFutures = server.pluginManager.broadcastRequest(
-        requestParams,
-        contextRoot: driver.analysisContext!.contextRoot,
-      );
-      //
-      // Compute navigation data generated by server.
-      //
-      var allResults = <AnalysisNavigationParams>[];
-      var result = await server.getResolvedUnit(file);
-      if (result != null) {
-        var unit = result.unit;
-        var collector = NavigationCollectorImpl();
-        computeDartNavigation(
-            server.resourceProvider, collector, unit, offset, length);
-        collector.createRegions();
-        allResults.add(AnalysisNavigationParams(
-            file, collector.regions, collector.targets, collector.files));
-      }
-      //
-      // Add the navigation data produced by plugins to the server-generated
-      // navigation data.
-      //
-      var responses = await waitForResponses(pluginFutures,
-          requestParameters: requestParams);
-      for (var response in responses) {
-        var result = plugin.AnalysisGetNavigationResult.fromResponse(response);
-        allResults.add(AnalysisNavigationParams(
-            file, result.regions, result.targets, result.files));
-      }
-      //
-      // Return the result.
-      //
-      var merger = ResultMerger();
-      var mergedResults = merger.mergeNavigation(allResults);
-      if (mergedResults == null) {
-        server.sendResponse(AnalysisGetNavigationResult(
-                <String>[], <NavigationTarget>[], <NavigationRegion>[])
-            .toResponse(request.id));
-      } else {
-        server.sendResponse(AnalysisGetNavigationResult(mergedResults.files,
-                mergedResults.targets, mergedResults.regions)
-            .toResponse(request.id));
-      }
-    }
-  }
-
-  /// 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);
-  }
-
-  /// Implement the `analysis.getSignature` request.
-  Future<void> getSignature(Request request) async {
-    var params = AnalysisGetSignatureParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    // Prepare the resolved units.
-    var result = await server.getResolvedUnit(file);
-
-    if (result == null || !result.exists) {
-      server.sendResponse(Response.getSignatureInvalidFile(request));
-      return;
-    }
-
-    // Ensure the offset provided is a valid location in the file.
-    final unit = result.unit;
-    final computer = DartUnitSignatureComputer(
-        server.getDartdocDirectiveInfoFor(result), unit, params.offset);
-    if (!computer.offsetIsValid) {
-      server.sendResponse(Response.getSignatureInvalidOffset(request));
-      return;
-    }
-
-    // Try to get a signature.
-    final signature = computer.compute();
-    if (signature == null) {
-      server.sendResponse(Response.getSignatureUnknownFunction(request));
-      return;
-    }
-
-    server.sendResponse(signature.toResponse(request.id));
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     try {
       var requestName = request.method;
       if (requestName == ANALYSIS_REQUEST_GET_ERRORS) {
-        getErrors(request);
+        AnalysisGetErrorsHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_HOVER) {
-        getHover(request);
+        AnalysisGetHoverHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS) {
-        getImportedElements(request);
+        AnalysisGetImportedElementsHandler(server, request, cancellationToken)
+            .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) {
-        getNavigation(request);
+        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) {
-        getSignature(request);
+        AnalysisGetSignatureHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_REANALYZE) {
-        reanalyze(request);
+        AnalysisReanalyzeHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS) {
-        setAnalysisRoots(request);
+        AnalysisSetAnalysisRootsHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS) {
-        return setGeneralSubscriptions(request);
+        AnalysisSetGeneralSubscriptionsHandler(
+                server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_SET_PRIORITY_FILES) {
-        return setPriorityFiles(request);
+        AnalysisSetPriorityFilesHandler(server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } 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) {
+        // TODO(brianwilkerson) Converting this to a handler currently causes a
+        //  test to timeout.
         return updateContent(request);
       } else if (requestName == ANALYSIS_REQUEST_UPDATE_OPTIONS) {
+        // TODO(brianwilkerson) Converting this to a handler currently causes a
+        //  test to timeout.
         return updateOptions(request);
       }
     } on RequestFailure catch (exception) {
@@ -301,120 +92,6 @@
     return null;
   }
 
-  /// Implement the 'analysis.reanalyze' request.
-  void reanalyze(Request request) async {
-    server.options.analytics?.sendEvent('analysis', 'reanalyze');
-
-    await server.reanalyze();
-
-    //
-    // Restart all of the plugins. This is an async operation that will happen
-    // in the background.
-    //
-    server.pluginManager.restartPlugins();
-    //
-    // Send the response.
-    //
-    server.sendResponse(AnalysisReanalyzeResult().toResponse(request.id));
-  }
-
-  /// Implement the 'analysis.setAnalysisRoots' request.
-  void setAnalysisRoots(Request request) async {
-    var params = AnalysisSetAnalysisRootsParams.fromRequest(request);
-    var includedPathList = params.included;
-    var excludedPathList = params.excluded;
-
-    server.options.analytics?.sendEvent('analysis', 'setAnalysisRoots',
-        value: includedPathList.length);
-
-    // validate
-    for (var path in includedPathList) {
-      if (!server.isValidFilePath(path)) {
-        server.sendResponse(Response.invalidFilePathFormat(request, path));
-        return;
-      }
-    }
-    for (var path in excludedPathList) {
-      if (!server.isValidFilePath(path)) {
-        server.sendResponse(Response.invalidFilePathFormat(request, path));
-        return;
-      }
-    }
-
-    var detachableFileSystemManager = server.detachableFileSystemManager;
-    if (detachableFileSystemManager != null) {
-      // TODO(scheglov) remove the last argument
-      detachableFileSystemManager
-          .setAnalysisRoots(request.id, includedPathList, excludedPathList, {});
-    } else {
-      await server.setAnalysisRoots(
-          request.id, includedPathList, excludedPathList);
-    }
-    return server
-        .sendResponse(AnalysisSetAnalysisRootsResult().toResponse(request.id));
-  }
-
-  /// Implement the 'analysis.setGeneralSubscriptions' request.
-  Response setGeneralSubscriptions(Request request) {
-    var params = AnalysisSetGeneralSubscriptionsParams.fromRequest(request);
-    server.setGeneralAnalysisSubscriptions(params.subscriptions);
-    return AnalysisSetGeneralSubscriptionsResult().toResponse(request.id);
-  }
-
-  /// Implement the 'analysis.setPriorityFiles' request.
-  Response setPriorityFiles(Request request) {
-    var params = AnalysisSetPriorityFilesParams.fromRequest(request);
-
-    for (var file in params.files) {
-      if (!server.isAbsoluteAndNormalized(file)) {
-        return Response.invalidFilePathFormat(request, file);
-      }
-    }
-
-    server.setPriorityFiles(request.id, params.files);
-    //
-    // Forward the request to the plugins.
-    //
-    var converter = RequestConverter();
-    server.pluginManager.setAnalysisSetPriorityFilesParams(
-        converter.convertAnalysisSetPriorityFilesParams(params));
-    //
-    // Send the response.
-    //
-    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/domain_analytics.dart b/pkg/analysis_server/lib/src/domain_analytics.dart
index cec9fa8..1460410 100644
--- a/pkg/analysis_server/lib/src/domain_analytics.dart
+++ b/pkg/analysis_server/lib/src/domain_analytics.dart
@@ -4,10 +4,12 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/analytics_enable.dart';
+import 'package:analysis_server/src/handler/legacy/analytics_is_enabled.dart';
+import 'package:analysis_server/src/handler/legacy/analytics_send_event.dart';
+import 'package:analysis_server/src/handler/legacy/analytics_send_timing.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:telemetry/telemetry.dart';
 
 /// Instances of the class [AnalyticsDomainHandler] implement a [RequestHandler]
 /// that handles requests in the `analytics` domain.
@@ -16,61 +18,24 @@
 
   AnalyticsDomainHandler(this.server);
 
-  Analytics? get analytics => server.analytics;
-
-  String get _clientId => server.options.clientId ?? 'client';
-
-  Response handleEnable(Request request) {
-    var params = AnalyticsEnableParams.fromRequest(request);
-    final analytics = this.analytics;
-    if (analytics != null) {
-      analytics.enabled = params.value;
-    }
-    return AnalyticsEnableResult().toResponse(request.id);
-  }
-
-  Response handleIsEnabled(Request request) {
-    return AnalyticsIsEnabledResult(analytics?.enabled ?? false)
-        .toResponse(request.id);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     var requestName = request.method;
 
     if (requestName == ANALYTICS_REQUEST_IS_ENABLED) {
-      return handleIsEnabled(request);
+      AnalyticsIsEnabledHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_ENABLE) {
-      return handleEnable(request);
+      AnalyticsEnableHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_SEND_EVENT) {
-      return handleSendEvent(request);
+      AnalyticsSendEventHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     } else if (requestName == ANALYTICS_REQUEST_SEND_TIMING) {
-      return handleSendTiming(request);
+      AnalyticsSendTimingHandler(server, request, cancellationToken).handle();
+      return Response.DELAYED_RESPONSE;
     }
-
     return null;
   }
-
-  Response handleSendEvent(Request request) {
-    final analytics = this.analytics;
-    if (analytics == null) {
-      return AnalyticsSendEventResult().toResponse(request.id);
-    }
-
-    var params = AnalyticsSendEventParams.fromRequest(request);
-    analytics.sendEvent(_clientId, params.action);
-    return AnalyticsSendEventResult().toResponse(request.id);
-  }
-
-  Response handleSendTiming(Request request) {
-    final analytics = this.analytics;
-    if (analytics == null) {
-      return AnalyticsSendTimingResult().toResponse(request.id);
-    }
-
-    var params = AnalyticsSendTimingParams.fromRequest(request);
-    analytics.sendTiming(params.event, params.millis, category: _clientId);
-    return AnalyticsSendTimingResult().toResponse(request.id);
-  }
 }
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 9f3043e..3db8862 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -11,6 +11,8 @@
 import 'package:analysis_server/src/collections.dart';
 import 'package:analysis_server/src/domain_abstract.dart';
 import 'package:analysis_server/src/domains/completion/available_suggestions.dart';
+import 'package:analysis_server/src/handler/legacy/completion_get_suggestion_details.dart';
+import 'package:analysis_server/src/handler/legacy/completion_get_suggestion_details2.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/services/completion/completion_performance.dart';
@@ -22,7 +24,6 @@
 import 'package:analysis_server/src/services/completion/yaml/pubspec_generator.dart';
 import 'package:analysis_server/src/services/completion/yaml/yaml_completion_generator.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
@@ -30,7 +31,6 @@
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
-import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:collection/collection.dart';
 
 /// Instances of the class [CompletionDomainHandler] implement a
@@ -43,6 +43,10 @@
   Duration budgetDuration = CompletionBudget.defaultDuration;
 
   /// The completion services that the client is currently subscribed.
+  // TODO(brianwilkerson) This needs to be moved to some location where multiple
+  //  [LegacyHandler]s can access it, and the tests need to be cleaned up so
+  //  that they no longer depend on creating a new [CompletionDomainHandler] to
+  //  clear subscriptions from previous tests.
   final Set<CompletionService> subscriptions = <CompletionService>{};
 
   /// The next completion response id.
@@ -56,10 +60,6 @@
   /// The current request being processed or `null` if none.
   DartCompletionRequest? _currentRequest;
 
-  /// The identifiers of the latest `getSuggestionDetails` request.
-  /// We use it to abort previous requests.
-  int _latestGetSuggestionDetailsId = 0;
-
   /// Initialize a new request handler for the given [server].
   CompletionDomainHandler(AnalysisServer server) : super(server);
 
@@ -134,137 +134,6 @@
     return const YamlCompletionResults.empty();
   }
 
-  /// Process a `completion.getSuggestionDetails` request.
-  void getSuggestionDetails(Request request) async {
-    var params = CompletionGetSuggestionDetailsParams.fromRequest(request);
-
-    var file = params.file;
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var libraryId = params.id;
-    var declarationsTracker = server.declarationsTracker;
-    if (declarationsTracker == null) {
-      server.sendResponse(Response.unsupportedFeature(
-          request.id, 'Completion is not enabled.'));
-      return;
-    }
-    var library = declarationsTracker.getLibrary(libraryId);
-    if (library == null) {
-      server.sendResponse(Response.invalidParameter(
-        request,
-        'libraryId',
-        'No such library: $libraryId',
-      ));
-      return;
-    }
-
-    // The label might be `MyEnum.myValue`, but we import only `MyEnum`.
-    var requestedName = params.label;
-    if (requestedName.contains('.')) {
-      requestedName = requestedName.substring(
-        0,
-        requestedName.indexOf('.'),
-      );
-    }
-
-    const timeout = Duration(milliseconds: 1000);
-    var timer = Stopwatch()..start();
-    var id = ++_latestGetSuggestionDetailsId;
-    while (id == _latestGetSuggestionDetailsId && timer.elapsed < timeout) {
-      try {
-        var analysisDriver = server.getAnalysisDriver(file);
-        if (analysisDriver == null) {
-          server.sendResponse(Response.fileNotAnalyzed(request, 'libraryId'));
-          return;
-        }
-        var session = analysisDriver.currentSession;
-
-        var completion = params.label;
-        var builder = ChangeBuilder(session: session);
-        await builder.addDartFileEdit(file, (builder) {
-          var result = builder.importLibraryElement(library.uri);
-          if (result.prefix != null) {
-            completion = '${result.prefix}.$completion';
-          }
-        });
-
-        server.sendResponse(
-          CompletionGetSuggestionDetailsResult(
-            completion,
-            change: builder.sourceChange,
-          ).toResponse(request.id),
-        );
-        return;
-      } on InconsistentAnalysisException {
-        // Loop around to try again.
-      }
-    }
-
-    // Timeout or abort, send the empty response.
-    server.sendResponse(
-      CompletionGetSuggestionDetailsResult('').toResponse(request.id),
-    );
-  }
-
-  /// Process a `completion.getSuggestionDetails2` request.
-  void getSuggestionDetails2(Request request) async {
-    var params = CompletionGetSuggestionDetails2Params.fromRequest(request);
-
-    var file = params.file;
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var libraryUri = Uri.tryParse(params.libraryUri);
-    if (libraryUri == null) {
-      server.sendResponse(
-        Response.invalidParameter(request, 'libraryUri', 'Cannot parse'),
-      );
-      return;
-    }
-
-    var budget = CompletionBudget(
-      const Duration(milliseconds: 1000),
-    );
-    var id = ++_latestGetSuggestionDetailsId;
-    while (id == _latestGetSuggestionDetailsId && !budget.isEmpty) {
-      try {
-        var analysisDriver = server.getAnalysisDriver(file);
-        if (analysisDriver == null) {
-          server.sendResponse(Response.fileNotAnalyzed(request, file));
-          return;
-        }
-        var session = analysisDriver.currentSession;
-
-        var completion = params.completion;
-        var builder = ChangeBuilder(session: session);
-        await builder.addDartFileEdit(file, (builder) {
-          var result = builder.importLibraryElement(libraryUri);
-          if (result.prefix != null) {
-            completion = '${result.prefix}.$completion';
-          }
-        });
-
-        server.sendResponse(
-          CompletionGetSuggestionDetails2Result(
-            completion,
-            builder.sourceChange,
-          ).toResponse(request.id),
-        );
-        return;
-      } on InconsistentAnalysisException {
-        // Loop around to try again.
-      }
-    }
-
-    // Timeout or abort, send the empty response.
-    server.sendResponse(
-      CompletionGetSuggestionDetailsResult('').toResponse(request.id),
-    );
-  }
-
   /// Implement the 'completion.getSuggestions2' request.
   void getSuggestions2(Request request) async {
     var params = CompletionGetSuggestions2Params.fromRequest(request);
@@ -306,7 +175,7 @@
     performance.runAsync(
       'request',
       (performance) async {
-        var resolvedUnit = performance.run(
+        var resolvedUnit = await performance.runAsync(
           'resolveForCompletion',
           (performance) {
             return server.resolveForCompletion(
@@ -387,7 +256,10 @@
 
         var lengthRestricted =
             suggestionBuilders.take(params.maxResults).toList();
-        completionPerformance.suggestionCount = lengthRestricted.length;
+        completionPerformance.computedSuggestionCount =
+            suggestionBuilders.length;
+        completionPerformance.transmittedSuggestionCount =
+            lengthRestricted.length;
 
         var suggestions = lengthRestricted.map((e) => e.build()).toList();
 
@@ -423,10 +295,14 @@
       var requestName = request.method;
 
       if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS) {
-        getSuggestionDetails(request);
+        CompletionGetSuggestionDetailsHandler(
+                server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2) {
-        getSuggestionDetails2(request);
+        CompletionGetSuggestionDetails2Handler(
+                server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == COMPLETION_REQUEST_GET_SUGGESTIONS) {
         processRequest(request);
@@ -604,7 +480,10 @@
             );
           });
 
-          completionPerformance.suggestionCount = suggestionBuilders.length;
+          completionPerformance.computedSuggestionCount =
+              suggestionBuilders.length;
+          completionPerformance.transmittedSuggestionCount =
+              suggestionBuilders.length;
         } finally {
           ifMatchesRequestClear(completionRequest);
         }
diff --git a/pkg/analysis_server/lib/src/domain_diagnostic.dart b/pkg/analysis_server/lib/src/domain_diagnostic.dart
index 117bec4..35a41d6 100644
--- a/pkg/analysis_server/lib/src/domain_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/domain_diagnostic.dart
@@ -4,10 +4,10 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/diagnostic_get_diagnostics.dart';
+import 'package:analysis_server/src/handler/legacy/diagnostic_get_server_port.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
 
 /// Instances of the class [DiagnosticDomainHandler] implement a
 /// [RequestHandler] that handles requests in the `diagnostic` domain.
@@ -19,41 +19,18 @@
   /// [server].
   DiagnosticDomainHandler(this.server);
 
-  /// Answer the `diagnostic.getDiagnostics` request.
-  Response computeDiagnostics(Request request) {
-    var contexts = server.driverMap.values.map(extractDataFromDriver).toList();
-    return DiagnosticGetDiagnosticsResult(contexts).toResponse(request.id);
-  }
-
-  /// Extract context data from the given [driver].
-  ContextData extractDataFromDriver(AnalysisDriver driver) {
-    var explicitFileCount = driver.addedFiles.length;
-    var knownFileCount = driver.knownFiles.length;
-    return ContextData(driver.name, explicitFileCount,
-        knownFileCount - explicitFileCount, driver.numberOfFilesToAnalyze, []);
-  }
-
-  /// Answer the `diagnostic.getServerPort` request.
-  Future handleGetServerPort(Request request) async {
-    try {
-      // Open a port (or return the existing one).
-      var port = await server.diagnosticServer!.getServerPort();
-      server.sendResponse(
-          DiagnosticGetServerPortResult(port).toResponse(request.id));
-    } catch (error) {
-      server.sendResponse(Response.debugPortCouldNotBeOpened(request, error));
-    }
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     try {
       var requestName = request.method;
       if (requestName == DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS) {
-        return computeDiagnostics(request);
+        DiagnosticGetDiagnosticsHandler(server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == DIAGNOSTIC_REQUEST_GET_SERVER_PORT) {
-        handleGetServerPort(request);
+        DiagnosticGetServerPortHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       }
     } on RequestFailure catch (exception) {
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index 54efa9a..a5b7b83 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -4,8 +4,11 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/server_cancel_request.dart';
+import 'package:analysis_server/src/handler/legacy/server_get_version.dart';
+import 'package:analysis_server/src/handler/legacy/server_set_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/server_shutdown.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 
 /// Instances of the class [ServerDomainHandler] implement a [RequestHandler]
@@ -18,58 +21,28 @@
   /// [server].
   ServerDomainHandler(this.server);
 
-  Response cancelRequest(Request request) {
-    final id = ServerCancelRequestParams.fromRequest(request).id;
-    server.cancelRequest(id);
-
-    return ServerCancelRequestResult().toResponse(request.id);
-  }
-
-  /// Return the version number of the analysis server.
-  Response getVersion(Request request) {
-    return ServerGetVersionResult(
-      server.options.reportProtocolVersion ?? PROTOCOL_VERSION,
-    ).toResponse(request.id);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     try {
       var requestName = request.method;
       if (requestName == SERVER_REQUEST_GET_VERSION) {
-        return getVersion(request);
+        ServerGetVersionHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_SET_SUBSCRIPTIONS) {
-        return setSubscriptions(request);
+        ServerSetSubscriptionsHandler(server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_SHUTDOWN) {
-        shutdown(request);
+        ServerShutdownHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_CANCEL_REQUEST) {
-        return cancelRequest(request);
+        ServerCancelRequestHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       }
     } on RequestFailure catch (exception) {
       return exception.response;
     }
     return null;
   }
-
-  /// Subscribe for services.
-  ///
-  /// All previous subscriptions are replaced by the given set of subscriptions.
-  Response setSubscriptions(Request request) {
-    server.serverServices =
-        ServerSetSubscriptionsParams.fromRequest(request).subscriptions.toSet();
-
-    server.requestStatistics?.isNotificationSubscribed =
-        server.serverServices.contains(ServerService.LOG);
-
-    return ServerSetSubscriptionsResult().toResponse(request.id);
-  }
-
-  /// Cleanly shutdown the analysis server.
-  Future<void> shutdown(Request request) async {
-    await server.shutdown();
-    var response = ServerShutdownResult().toResponse(request.id);
-    server.sendResponse(response);
-  }
 }
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index eeda336..3b7e4a3 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -4,57 +4,31 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
-import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/collections.dart';
-import 'package:analysis_server/src/computer/import_elements_computer.dart';
 import 'package:analysis_server/src/domain_abstract.dart';
-import 'package:analysis_server/src/plugin/plugin_manager.dart';
-import 'package:analysis_server/src/plugin/result_converter.dart';
+import 'package:analysis_server/src/handler/legacy/edit_bulk_fixes.dart';
+import 'package:analysis_server/src/handler/legacy/edit_format.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';
+import 'package:analysis_server/src/handler/legacy/edit_get_statement_completion.dart';
+import 'package:analysis_server/src/handler/legacy/edit_import_elements.dart';
+import 'package:analysis_server/src/handler/legacy/edit_is_postfix_completion_applicable.dart';
+import 'package:analysis_server/src/handler/legacy/edit_list_postfix_completion_templates.dart';
+import 'package:analysis_server/src/handler/legacy/edit_organize_directives.dart';
+import 'package:analysis_server/src/handler/legacy/edit_sort_members.dart';
 import 'package:analysis_server/src/protocol_server.dart'
     hide AnalysisError, Element;
-import 'package:analysis_server/src/services/completion/postfix/postfix_completion.dart';
-import 'package:analysis_server/src/services/completion/statement/statement_completion.dart';
-import 'package:analysis_server/src/services/correction/assist.dart';
-import 'package:analysis_server/src/services/correction/assist_internal.dart';
-import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
-import 'package:analysis_server/src/services/correction/change_workspace.dart';
-import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
-import 'package:analysis_server/src/services/correction/fix/manifest/fix_generator.dart';
-import 'package:analysis_server/src/services/correction/fix/pubspec/fix_generator.dart';
-import 'package:analysis_server/src/services/correction/fix_internal.dart';
-import 'package:analysis_server/src/services/correction/organize_imports.dart';
-import 'package:analysis_server/src/services/correction/sort_members.dart';
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/error/error.dart' as engine;
-import 'package:analyzer/exception/exception.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/src/dart/analysis/results.dart' as engine;
 import 'package:analyzer/src/dart/ast/utilities.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart' as engine;
-import 'package:analyzer/src/exception/exception.dart';
-import 'package:analyzer/src/generated/parser.dart' as engine;
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/manifest/manifest_validator.dart';
-import 'package:analyzer/src/manifest/manifest_values.dart';
-import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/task/options.dart';
-import 'package:analyzer/src/util/file_paths.dart' as file_paths;
-import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
-import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
-import 'package:dart_style/dart_style.dart';
-import 'package:html/parser.dart';
-import 'package:yaml/yaml.dart';
 
 int test_resetCount = 0;
 
@@ -83,301 +57,60 @@
     _newRefactoringManager();
   }
 
-  Future bulkFixes(Request request) async {
-    //
-    // Compute bulk fixes
-    //
-    try {
-      var params = EditBulkFixesParams.fromRequest(request);
-      for (var file in params.included) {
-        if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-          return;
-        }
-      }
-
-      var collection = AnalysisContextCollectionImpl(
-        includedPaths: params.included,
-        resourceProvider: server.resourceProvider,
-        sdkPath: server.sdkPath,
-      );
-      var workspace = DartChangeWorkspace(
-          collection.contexts.map((c) => c.currentSession).toList());
-      var processor = BulkFixProcessor(server.instrumentationService, workspace,
-          useConfigFiles: params.inTestMode ?? false);
-
-      var changeBuilder = await processor.fixErrors(collection.contexts);
-
-      var response = EditBulkFixesResult(
-              changeBuilder.sourceChange.edits, processor.fixDetails)
-          .toResponse(request.id);
-      server.sendResponse(response);
-    } catch (exception, stackTrace) {
-      server.sendServerErrorNotification('Exception while getting bulk fixes',
-          CaughtException(exception, stackTrace), stackTrace);
-    }
-  }
-
-  Response format(Request request) {
-    server.options.analytics?.sendEvent('edit', 'format');
-
-    var params = EditFormatParams.fromRequest(request);
-    var file = params.file;
-
-    String unformattedCode;
-    try {
-      var resource = server.resourceProvider.getFile(file);
-      unformattedCode = resource.readAsStringSync();
-    } catch (e) {
-      return Response.formatInvalidFile(request);
-    }
-
-    int? start = params.selectionOffset;
-    int? length = params.selectionLength;
-
-    // No need to preserve 0,0 selection
-    if (start == 0 && length == 0) {
-      start = null;
-      length = null;
-    }
-
-    var code = SourceCode(unformattedCode,
-        uri: null,
-        isCompilationUnit: true,
-        selectionStart: start,
-        selectionLength: length);
-    var formatter = DartFormatter(pageWidth: params.lineLength);
-    SourceCode formattedResult;
-    try {
-      formattedResult = formatter.formatSource(code);
-    } on FormatterException {
-      return Response.formatWithErrors(request);
-    }
-    var formattedSource = formattedResult.text;
-
-    var edits = <SourceEdit>[];
-
-    if (formattedSource != unformattedCode) {
-      //TODO: replace full replacements with smaller, more targeted edits
-      var edit = SourceEdit(0, unformattedCode.length, formattedSource);
-      edits.add(edit);
-    }
-
-    var newStart = formattedResult.selectionStart;
-    var newLength = formattedResult.selectionLength;
-
-    // Sending null start/length values would violate protocol, so convert back
-    // to 0.
-    newStart ??= 0;
-    newLength ??= 0;
-
-    return EditFormatResult(edits, newStart, newLength).toResponse(request.id);
-  }
-
-  Future getAssists(Request request) async {
-    var params = EditGetAssistsParams.fromRequest(request);
-    var file = params.file;
-    var offset = params.offset;
-    var length = params.length;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    //
-    // Allow plugins to start computing assists.
-    //
-    Map<PluginInfo, Future<plugin.Response>> pluginFutures;
-    var requestParams = plugin.EditGetAssistsParams(file, offset, length);
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      pluginFutures = <PluginInfo, Future<plugin.Response>>{};
-    } else {
-      pluginFutures = server.pluginManager.broadcastRequest(
-        requestParams,
-        contextRoot: driver.analysisContext!.contextRoot,
-      );
-    }
-
-    //
-    // Compute fixes associated with server-generated errors.
-    //
-    var changes = await _computeServerAssists(request, file, offset, length);
-
-    //
-    // Add the fixes produced by plugins to the server-generated fixes.
-    //
-    var responses =
-        await waitForResponses(pluginFutures, requestParameters: requestParams);
-    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
-    var converter = ResultConverter();
-    var pluginChanges = <plugin.PrioritizedSourceChange>[];
-    for (var response in responses) {
-      var result = plugin.EditGetAssistsResult.fromResponse(response);
-      pluginChanges.addAll(result.assists);
-    }
-    pluginChanges
-        .sort((first, second) => first.priority.compareTo(second.priority));
-    changes.addAll(pluginChanges.map(converter.convertPrioritizedSourceChange));
-
-    //
-    // Send the response.
-    //
-    server.sendResponse(EditGetAssistsResult(changes).toResponse(request.id));
-  }
-
-  Future<void> getFixes(Request request) async {
-    var params = EditGetFixesParams.fromRequest(request);
-    var file = params.file;
-    var offset = params.offset;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    if (!server.isAnalyzed(file)) {
-      server.sendResponse(Response.getFixesInvalidFile(request));
-      return;
-    }
-
-    //
-    // Allow plugins to start computing fixes.
-    //
-    Map<PluginInfo, Future<plugin.Response>> pluginFutures;
-    var requestParams = plugin.EditGetFixesParams(file, offset);
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      pluginFutures = <PluginInfo, Future<plugin.Response>>{};
-    } else {
-      pluginFutures = server.pluginManager.broadcastRequest(
-        requestParams,
-        contextRoot: driver.analysisContext!.contextRoot,
-      );
-    }
-    //
-    // Compute fixes associated with server-generated errors.
-    //
-    List<AnalysisErrorFixes>? errorFixesList;
-    while (errorFixesList == null) {
-      try {
-        errorFixesList = await _computeServerErrorFixes(request, file, offset);
-      } on InconsistentAnalysisException {
-        // Loop around to try again to compute the fixes.
-      }
-    }
-    //
-    // Add the fixes produced by plugins to the server-generated fixes.
-    //
-    var responses =
-        await waitForResponses(pluginFutures, requestParameters: requestParams);
-    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
-    var converter = ResultConverter();
-    for (var response in responses) {
-      var result = plugin.EditGetFixesResult.fromResponse(response);
-      errorFixesList
-          .addAll(result.fixes.map(converter.convertAnalysisErrorFixes));
-    }
-    //
-    // Send the response.
-    //
-    server.sendResponse(
-        EditGetFixesResult(errorFixesList).toResponse(request.id));
-  }
-
-  Future getPostfixCompletion(Request request) async {
-    server.options.analytics?.sendEvent('edit', 'getPostfixCompletion');
-
-    var params = EditGetPostfixCompletionParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    SourceChange? change;
-
-    var result = await server.getResolvedUnit(file);
-    if (result != null) {
-      var context = PostfixCompletionContext(
-        result,
-        params.offset,
-        params.key,
-      );
-      var processor = PostfixCompletionProcessor(context);
-      var completion = await processor.compute();
-      change = completion.change;
-    }
-    change ??= SourceChange('', edits: []);
-
-    var response =
-        EditGetPostfixCompletionResult(change).toResponse(request.id);
-    server.sendResponse(response);
-  }
-
-  Future getStatementCompletion(Request request) async {
-    var params = EditGetStatementCompletionParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    SourceChange? change;
-
-    var result = await server.getResolvedUnit(file);
-    if (result != null) {
-      var context = StatementCompletionContext(result, params.offset);
-      var processor = StatementCompletionProcessor(context);
-      var completion = await processor.compute();
-      change = completion.change;
-    }
-    change ??= SourceChange('', edits: []);
-
-    var response =
-        EditGetStatementCompletionResult(change, false).toResponse(request.id);
-    server.sendResponse(response);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
     try {
       var requestName = request.method;
       if (requestName == EDIT_REQUEST_FORMAT) {
-        return format(request);
+        EditFormatHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
+      } else if (requestName == EDIT_REQUEST_FORMAT_IF_ENABLED) {
+        EditFormatIfEnabledHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_ASSISTS) {
-        getAssists(request);
+        EditGetAssistsHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS) {
-        return _getAvailableRefactorings(request);
+        _getAvailableRefactorings(request);
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_BULK_FIXES) {
-        bulkFixes(request);
+        EditBulkFixes(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_FIXES) {
-        getFixes(request);
+        EditGetFixesHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_REFACTORING) {
         return _getRefactoring(request, cancellationToken);
       } else if (requestName == EDIT_REQUEST_IMPORT_ELEMENTS) {
-        importElements(request);
+        EditImportElementsHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_ORGANIZE_DIRECTIVES) {
-        organizeDirectives(request);
+        EditOrganizeDirectivesHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_SORT_MEMBERS) {
-        sortMembers(request);
+        EditSortMembersHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_STATEMENT_COMPLETION) {
-        getStatementCompletion(request);
+        EditGetStatementCompletionHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE) {
-        isPostfixCompletionApplicable(request);
+        EditIsPostfixCompletionApplicableHandler(
+                server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_POSTFIX_COMPLETION) {
-        getPostfixCompletion(request);
+        EditGetPostfixCompletionHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName ==
           EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES) {
-        return listPostfixCompletionTemplates(request);
+        EditListPostfixCompletionTemplatesHandler(
+                server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       }
     } on RequestFailure catch (exception) {
       return exception.response;
@@ -385,412 +118,7 @@
     return null;
   }
 
-  /// Implement the `edit.importElements` request.
-  Future<void> importElements(Request request) async {
-    var params = EditImportElementsParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    //
-    // Prepare the resolved unit.
-    //
-    var result = await server.getResolvedUnit(file);
-    if (result == null) {
-      server.sendResponse(Response.importElementsInvalidFile(request));
-      return;
-    }
-    var libraryUnit = result.libraryElement.definingCompilationUnit;
-    if (libraryUnit != result.unit.declaredElement) {
-      // The file in the request is a part of a library. We need to pass the
-      // defining compilation unit to the computer, not the part.
-      result = await server.getResolvedUnit(libraryUnit.source.fullName);
-      if (result == null) {
-        server.sendResponse(Response.importElementsInvalidFile(request));
-        return;
-      }
-    }
-    //
-    // Compute the edits required to import the required elements.
-    //
-    var computer = ImportElementsComputer(server.resourceProvider, result);
-    var change = await computer.createEdits(params.elements);
-    var edits = change.edits;
-    var edit = edits.isEmpty ? null : edits[0];
-    //
-    // Send the response.
-    //
-    server.sendResponse(
-        EditImportElementsResult(edit: edit).toResponse(request.id));
-  }
-
-  Future isPostfixCompletionApplicable(Request request) async {
-    var params = EditGetPostfixCompletionParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var value = false;
-
-    var result = await server.getResolvedUnit(file);
-    if (result != null) {
-      var context = PostfixCompletionContext(
-        result,
-        params.offset,
-        params.key,
-      );
-      var processor = PostfixCompletionProcessor(context);
-      value = await processor.isApplicable();
-    }
-
-    var response =
-        EditIsPostfixCompletionApplicableResult(value).toResponse(request.id);
-    server.sendResponse(response);
-  }
-
-  Response listPostfixCompletionTemplates(Request request) {
-    var templates = DartPostfixCompletion.ALL_TEMPLATES
-        .map((PostfixCompletionKind kind) =>
-            PostfixTemplateDescriptor(kind.name, kind.key, kind.example))
-        .toList();
-
-    return EditListPostfixCompletionTemplatesResult(templates)
-        .toResponse(request.id);
-  }
-
-  Future<void> organizeDirectives(Request request) async {
-    server.options.analytics?.sendEvent('edit', 'organizeDirectives');
-
-    var params = EditOrganizeDirectivesParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var pathContext = server.resourceProvider.pathContext;
-    if (!file_paths.isDart(pathContext, file)) {
-      server.sendResponse(Response.fileNotAnalyzed(request, file));
-      return;
-    }
-
-    // Prepare the file information.
-    var result = await server.getResolvedUnit(file);
-    if (result == null) {
-      server.sendResponse(Response.fileNotAnalyzed(request, file));
-      return;
-    }
-    var fileStamp = -1;
-    var code = result.content;
-    var unit = result.unit;
-    var errors = result.errors;
-    // check if there are scan/parse errors in the file
-    var numScanParseErrors = _getNumberOfScanParseErrors(errors);
-    if (numScanParseErrors != 0) {
-      server.sendResponse(Response.organizeDirectivesError(
-          request, 'File has $numScanParseErrors scan/parse errors.'));
-      return;
-    }
-    // do organize
-    var sorter = ImportOrganizer(code, unit, errors);
-    var edits = sorter.organize();
-    var fileEdit = SourceFileEdit(file, fileStamp, edits: edits);
-    server.sendResponse(
-        EditOrganizeDirectivesResult(fileEdit).toResponse(request.id));
-  }
-
-  Future<void> sortMembers(Request request) async {
-    var params = EditSortMembersParams.fromRequest(request);
-    var file = params.file;
-
-    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
-      return;
-    }
-
-    var pathContext = server.resourceProvider.pathContext;
-    if (!file_paths.isDart(pathContext, file)) {
-      server.sendResponse(Response.sortMembersInvalidFile(request));
-      return;
-    }
-
-    // Prepare the file information.
-    var result = server.getParsedUnit(file);
-    if (result == null) {
-      server.sendResponse(Response.fileNotAnalyzed(request, file));
-      return;
-    }
-
-    var fileStamp = -1;
-    var code = result.content;
-    var unit = result.unit;
-    var errors = result.errors;
-    // Check if there are scan/parse errors in the file.
-    var numScanParseErrors = _getNumberOfScanParseErrors(errors);
-    if (numScanParseErrors != 0) {
-      server.sendResponse(
-          Response.sortMembersParseErrors(request, numScanParseErrors));
-      return;
-    }
-    // Do sort.
-    var sorter = MemberSorter(code, unit, result.lineInfo);
-    var edits = sorter.sort();
-    var fileEdit = SourceFileEdit(file, fileStamp, edits: edits);
-    server.sendResponse(EditSortMembersResult(fileEdit).toResponse(request.id));
-  }
-
-  /// Compute and return the fixes associated with server-generated errors in
-  /// analysis options files.
-  Future<List<AnalysisErrorFixes>> _computeAnalysisOptionsFixes(
-      String file, int offset) async {
-    var errorFixesList = <AnalysisErrorFixes>[];
-    var resourceProvider = server.resourceProvider;
-    var optionsFile = resourceProvider.getFile(file);
-    var content = _safelyRead(optionsFile);
-    if (content == null) {
-      return errorFixesList;
-    }
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      return errorFixesList;
-    }
-    var session = driver.currentSession;
-    var sourceFactory = driver.sourceFactory;
-    var errors = analyzeAnalysisOptions(
-      optionsFile.createSource(),
-      content,
-      sourceFactory,
-      driver.currentSession.analysisContext.contextRoot.root.path,
-    );
-    var options = _getOptions(sourceFactory, content);
-    if (options == null) {
-      return errorFixesList;
-    }
-    for (var error in errors) {
-      var generator = AnalysisOptionsFixGenerator(
-          resourceProvider, error, content, options);
-      var fixes = await generator.computeFixes();
-      if (fixes.isNotEmpty) {
-        fixes.sort(Fix.SORT_BY_RELEVANCE);
-        var lineInfo = LineInfo.fromContent(content);
-        var result = engine.ErrorsResultImpl(
-            session, file, Uri.file(file), lineInfo, false, errors);
-        var serverError = newAnalysisError_fromEngine(result, error);
-        var errorFixes = AnalysisErrorFixes(serverError);
-        errorFixesList.add(errorFixes);
-        fixes.forEach((fix) {
-          errorFixes.fixes.add(fix.change);
-        });
-      }
-    }
-    return errorFixesList;
-  }
-
-  /// Compute and return the fixes associated with server-generated errors in
-  /// Dart files.
-  Future<List<AnalysisErrorFixes>> _computeDartFixes(
-      Request request, String file, int offset) async {
-    var errorFixesList = <AnalysisErrorFixes>[];
-    var result = await server.getResolvedUnit(file);
-    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-    if (result != null) {
-      var lineInfo = result.lineInfo;
-      var requestLine = lineInfo.getLocation(offset).lineNumber;
-      for (var error in result.errors) {
-        var errorLine = lineInfo.getLocation(error.offset).lineNumber;
-        if (errorLine == requestLine) {
-          var workspace = DartChangeWorkspace(server.currentSessions);
-          var context = DartFixContextImpl(
-              server.instrumentationService, workspace, result, error);
-
-          List<Fix> fixes;
-          try {
-            fixes = await DartFixContributor().computeFixes(context);
-          } on InconsistentAnalysisException {
-            fixes = [];
-          } catch (exception, stackTrace) {
-            var parametersFile = '''
-offset: $offset
-error: $error
-error.errorCode: ${error.errorCode}
-''';
-            throw CaughtExceptionWithFiles(exception, stackTrace, {
-              file: result.content,
-              'parameters': parametersFile,
-            });
-          }
-
-          if (fixes.isNotEmpty) {
-            fixes.sort(Fix.SORT_BY_RELEVANCE);
-            var serverError = newAnalysisError_fromEngine(result, error);
-            var errorFixes = AnalysisErrorFixes(serverError);
-            errorFixesList.add(errorFixes);
-            fixes.forEach((fix) {
-              errorFixes.fixes.add(fix.change);
-            });
-          }
-        }
-      }
-    }
-    server.requestStatistics?.addItemTimeNow(request, 'computedFixes');
-    return errorFixesList;
-  }
-
-  /// Compute and return the fixes associated with server-generated errors in
-  /// Android manifest files.
-  Future<List<AnalysisErrorFixes>> _computeManifestFixes(
-      String file, int offset) async {
-    var errorFixesList = <AnalysisErrorFixes>[];
-    var manifestFile = server.resourceProvider.getFile(file);
-    var content = _safelyRead(manifestFile);
-    if (content == null) {
-      return errorFixesList;
-    }
-    var document =
-        parseFragment(content, container: MANIFEST_TAG, generateSpans: true);
-    var validator = ManifestValidator(manifestFile.createSource());
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      return errorFixesList;
-    }
-    var session = driver.currentSession;
-    var errors = validator.validate(content, true);
-    for (var error in errors) {
-      var generator = ManifestFixGenerator(error, content, document);
-      var fixes = await generator.computeFixes();
-      if (fixes.isNotEmpty) {
-        fixes.sort(Fix.SORT_BY_RELEVANCE);
-        var lineInfo = LineInfo.fromContent(content);
-        var result = engine.ErrorsResultImpl(
-            session, file, Uri.file(file), lineInfo, false, errors);
-        var serverError = newAnalysisError_fromEngine(result, error);
-        var errorFixes = AnalysisErrorFixes(serverError);
-        errorFixesList.add(errorFixes);
-        fixes.forEach((fix) {
-          errorFixes.fixes.add(fix.change);
-        });
-      }
-    }
-    return errorFixesList;
-  }
-
-  /// Compute and return the fixes associated with server-generated errors in
-  /// pubspec.yaml files.
-  Future<List<AnalysisErrorFixes>> _computePubspecFixes(
-      String file, int offset) async {
-    var errorFixesList = <AnalysisErrorFixes>[];
-    var resourceProvider = server.resourceProvider;
-    var pubspecFile = resourceProvider.getFile(file);
-    var content = _safelyRead(pubspecFile);
-    if (content == null) {
-      return errorFixesList;
-    }
-    var driver = server.getAnalysisDriver(file);
-    if (driver == null) {
-      return errorFixesList;
-    }
-    YamlDocument document;
-    try {
-      document = loadYamlDocument(content);
-    } catch (exception) {
-      return errorFixesList;
-    }
-    var yamlContent = document.contents;
-    if (yamlContent is! YamlMap) {
-      yamlContent = YamlMap();
-    }
-    var validator =
-        PubspecValidator(resourceProvider, pubspecFile.createSource());
-    var session = driver.currentSession;
-    var errors = validator.validate(yamlContent.nodes);
-    for (var error in errors) {
-      var generator =
-          PubspecFixGenerator(resourceProvider, error, content, document);
-      var fixes = await generator.computeFixes();
-      if (fixes.isNotEmpty) {
-        fixes.sort(Fix.SORT_BY_RELEVANCE);
-        var lineInfo = LineInfo.fromContent(content);
-        var result = engine.ErrorsResultImpl(
-            session, file, Uri.file(file), lineInfo, false, errors);
-        var serverError = newAnalysisError_fromEngine(result, error);
-        var errorFixes = AnalysisErrorFixes(serverError);
-        errorFixesList.add(errorFixes);
-        fixes.forEach((fix) {
-          errorFixes.fixes.add(fix.change);
-        });
-      }
-    }
-    return errorFixesList;
-  }
-
-  Future<List<SourceChange>> _computeServerAssists(
-      Request request, String file, int offset, int length) async {
-    var changes = <SourceChange>[];
-
-    var result = await server.getResolvedUnit(file);
-    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-
-    if (result != null) {
-      var context = DartAssistContextImpl(
-        server.instrumentationService,
-        DartChangeWorkspace(server.currentSessions),
-        result,
-        offset,
-        length,
-      );
-
-      try {
-        var processor = AssistProcessor(context);
-        var assists = await processor.compute();
-        assists.sort(Assist.SORT_BY_RELEVANCE);
-        for (var assist in assists) {
-          changes.add(assist.change);
-        }
-      } on InconsistentAnalysisException {
-        // ignore
-      } catch (exception, stackTrace) {
-        var parametersFile = '''
-offset: $offset
-length: $length
-      ''';
-        throw CaughtExceptionWithFiles(exception, stackTrace, {
-          file: result.content,
-          'parameters': parametersFile,
-        });
-      }
-
-      server.requestStatistics?.addItemTimeNow(request, 'computedAssists');
-    }
-
-    return changes;
-  }
-
-  /// Compute and return the fixes associated with server-generated errors.
-  Future<List<AnalysisErrorFixes>> _computeServerErrorFixes(
-      Request request, String file, int offset) async {
-    var pathContext = server.resourceProvider.pathContext;
-    if (file_paths.isDart(pathContext, file)) {
-      return _computeDartFixes(request, file, offset);
-    } else if (file_paths.isAnalysisOptionsYaml(pathContext, file)) {
-      return _computeAnalysisOptionsFixes(file, offset);
-    } else if (file_paths.isPubspecYaml(pathContext, file)) {
-      return _computePubspecFixes(file, offset);
-    } else if (file_paths.isAndroidManifestXml(pathContext, file)) {
-      // TODO(brianwilkerson) Do we need to check more than the file name?
-      return _computeManifestFixes(file, offset);
-    }
-    return <AnalysisErrorFixes>[];
-  }
-
-  Response _getAvailableRefactorings(Request request) {
-    _getAvailableRefactoringsImpl(request);
-    return Response.DELAYED_RESPONSE;
-  }
-
-  Future _getAvailableRefactoringsImpl(Request request) async {
+  Future<void> _getAvailableRefactorings(Request request) async {
     var params = EditGetAvailableRefactoringsParams.fromRequest(request);
     var file = params.file;
     var offset = params.offset;
@@ -857,15 +185,6 @@
     server.sendResponse(result.toResponse(request.id));
   }
 
-  YamlMap? _getOptions(SourceFactory sourceFactory, String content) {
-    var optionsProvider = AnalysisOptionsProvider(sourceFactory);
-    try {
-      return optionsProvider.getOptionsFromString(content);
-    } on OptionsFormatException {
-      return null;
-    }
-  }
-
   Response _getRefactoring(
       Request request, CancellationToken cancellationToken) {
     final refactoringManager = this.refactoringManager;
@@ -887,27 +206,6 @@
       refactoringManager = _RefactoringManager(server, refactoringWorkspace);
     }
   }
-
-  /// Return the contents of the [file], or `null` if the file does not exist or
-  /// cannot be read.
-  String? _safelyRead(File file) {
-    try {
-      return file.readAsStringSync();
-    } on FileSystemException {
-      return null;
-    }
-  }
-
-  static int _getNumberOfScanParseErrors(List<engine.AnalysisError> errors) {
-    var numScanParseErrors = 0;
-    for (var error in errors) {
-      if (error.errorCode is engine.ScannerErrorCode ||
-          error.errorCode is engine.ParserErrorCode) {
-        numScanParseErrors++;
-      }
-    }
-    return numScanParseErrors;
-  }
 }
 
 /// An object managing a single [Refactoring] instance.
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_get_errors.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_errors.dart
new file mode 100644
index 0000000..ffad95d
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_errors.dart
@@ -0,0 +1,38 @@
+// 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';
+
+/// The handler for the `analysis.getErrors` request.
+class AnalysisGetErrorsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisGetErrorsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var file = AnalysisGetErrorsParams.fromRequest(request).file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var result = await server.getResolvedUnit(file);
+
+    if (result == null) {
+      sendResponse(Response.getErrorsInvalidFile(request));
+      return;
+    }
+
+    var protocolErrors = doAnalysisError_listFromEngine(result);
+    sendResult(AnalysisGetErrorsResult(protocolErrors));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_get_hover.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_hover.dart
new file mode 100644
index 0000000..b3a4cc2
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_hover.dart
@@ -0,0 +1,52 @@
+// 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/computer/computer_hover.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+
+/// The handler for the `analysis.getHover` request.
+class AnalysisGetHoverHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisGetHoverHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisGetHoverParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    // Prepare the resolved units.
+    var result = await server.getResolvedUnit(file);
+    if (result is! ResolvedUnitResult) {
+      sendResponse(Response.fileNotAnalyzed(request, file));
+      return;
+    }
+    var unit = result.unit;
+
+    // Prepare the hovers.
+    var hovers = <HoverInformation>[];
+    var computer = DartUnitHoverComputer(
+        server.getDartdocDirectiveInfoFor(result), unit, params.offset);
+    var hoverInformation = computer.compute();
+    if (hoverInformation != null) {
+      hovers.add(hoverInformation);
+    }
+
+    // Send the response.
+    sendResult(AnalysisGetHoverResult(hovers));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_get_imported_elements.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_imported_elements.dart
new file mode 100644
index 0000000..f7b299a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_imported_elements.dart
@@ -0,0 +1,56 @@
+// 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/computer/imported_elements_computer.dart';
+import 'package:analysis_server/src/domain_analysis_flags.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `analysis.getImportedElements` request.
+class AnalysisGetImportedElementsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisGetImportedElementsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisGetImportedElementsParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    //
+    // Prepare the resolved unit.
+    //
+    var result = await server.getResolvedUnit(file);
+    if (result == null) {
+      sendResponse(Response.getImportedElementsInvalidFile(request));
+      return;
+    }
+
+    List<ImportedElements> elements;
+
+    //
+    // Compute the list of imported elements.
+    //
+    if (disableManageImportsOnPaste) {
+      elements = <ImportedElements>[];
+    } else {
+      elements =
+          ImportedElementsComputer(result.unit, params.offset, params.length)
+              .compute();
+    }
+
+    sendResult(AnalysisGetImportedElementsResult(elements));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_get_navigation.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_navigation.dart
new file mode 100644
index 0000000..060bc16
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_navigation.dart
@@ -0,0 +1,91 @@
+// 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/domain_abstract.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/plugin/result_merger.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
+import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
+import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
+
+/// The handler for the `analysis.getNavigation` request.
+class AnalysisGetNavigationHandler extends LegacyHandler
+    with RequestHandlerMixin<AnalysisServer> {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisGetNavigationHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisGetNavigationParams.fromRequest(request);
+    var file = params.file;
+    var offset = params.offset;
+    var length = params.length;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var driver = server.getAnalysisDriver(file);
+    if (driver == null) {
+      sendResponse(Response.getNavigationInvalidFile(request));
+    } else {
+      //
+      // Allow plugins to start computing navigation data.
+      //
+      var requestParams =
+          plugin.AnalysisGetNavigationParams(file, offset, length);
+      var pluginFutures = server.pluginManager.broadcastRequest(
+        requestParams,
+        contextRoot: driver.analysisContext!.contextRoot,
+      );
+      //
+      // Compute navigation data generated by server.
+      //
+      var allResults = <AnalysisNavigationParams>[];
+      var result = await server.getResolvedUnit(file);
+      if (result != null) {
+        var unit = result.unit;
+        var collector = NavigationCollectorImpl();
+        computeDartNavigation(
+            server.resourceProvider, collector, unit, offset, length);
+        collector.createRegions();
+        allResults.add(AnalysisNavigationParams(
+            file, collector.regions, collector.targets, collector.files));
+      }
+      //
+      // Add the navigation data produced by plugins to the server-generated
+      // navigation data.
+      //
+      var responses = await waitForResponses(pluginFutures,
+          requestParameters: requestParams);
+      for (var response in responses) {
+        var result = plugin.AnalysisGetNavigationResult.fromResponse(response);
+        allResults.add(AnalysisNavigationParams(
+            file, result.regions, result.targets, result.files));
+      }
+      //
+      // Return the result.
+      //
+      var merger = ResultMerger();
+      var mergedResults = merger.mergeNavigation(allResults);
+      if (mergedResults == null) {
+        sendResult(AnalysisGetNavigationResult(
+            <String>[], <NavigationTarget>[], <NavigationRegion>[]));
+      } else {
+        sendResult(AnalysisGetNavigationResult(
+            mergedResults.files, mergedResults.targets, mergedResults.regions));
+      }
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_get_signature.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_signature.dart
new file mode 100644
index 0000000..4b093bb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_get_signature.dart
@@ -0,0 +1,57 @@
+// 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/computer/computer_signature.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `analysis.getSignature` request.
+class AnalysisGetSignatureHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisGetSignatureHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisGetSignatureParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    // Prepare the resolved units.
+    var result = await server.getResolvedUnit(file);
+
+    if (result == null || !result.exists) {
+      sendResponse(Response.getSignatureInvalidFile(request));
+      return;
+    }
+
+    // Ensure the offset provided is a valid location in the file.
+    final unit = result.unit;
+    final computer = DartUnitSignatureComputer(
+        server.getDartdocDirectiveInfoFor(result), unit, params.offset);
+    if (!computer.offsetIsValid) {
+      sendResponse(Response.getSignatureInvalidOffset(request));
+      return;
+    }
+
+    // Try to get a signature.
+    final signature = computer.compute();
+    if (signature == null) {
+      sendResponse(Response.getSignatureUnknownFunction(request));
+      return;
+    }
+
+    sendResult(signature);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_reanalyze.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_reanalyze.dart
new file mode 100644
index 0000000..0473c34
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_reanalyze.dart
@@ -0,0 +1,34 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analysis.reanalyze` request.
+class AnalysisReanalyzeHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisReanalyzeHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    server.options.analytics?.sendEvent('analysis', 'reanalyze');
+
+    await server.reanalyze();
+    //
+    // Restart all of the plugins. This is an async operation that will happen
+    // in the background.
+    //
+    server.pluginManager.restartPlugins();
+
+    sendResult(AnalysisReanalyzeResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_set_analysis_roots.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_analysis_roots.dart
new file mode 100644
index 0000000..5eafdf0
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_analysis_roots.dart
@@ -0,0 +1,55 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analysis.setAnalysisRoots` request.
+class AnalysisSetAnalysisRootsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisSetAnalysisRootsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisSetAnalysisRootsParams.fromRequest(request);
+    var includedPathList = params.included;
+    var excludedPathList = params.excluded;
+
+    server.options.analytics?.sendEvent('analysis', 'setAnalysisRoots',
+        value: includedPathList.length);
+
+    // validate
+    for (var path in includedPathList) {
+      if (!server.isValidFilePath(path)) {
+        sendResponse(Response.invalidFilePathFormat(request, path));
+        return;
+      }
+    }
+    for (var path in excludedPathList) {
+      if (!server.isValidFilePath(path)) {
+        sendResponse(Response.invalidFilePathFormat(request, path));
+        return;
+      }
+    }
+
+    var detachableFileSystemManager = server.detachableFileSystemManager;
+    if (detachableFileSystemManager != null) {
+      // TODO(scheglov) remove the last argument
+      detachableFileSystemManager
+          .setAnalysisRoots(request.id, includedPathList, excludedPathList, {});
+    } else {
+      await server.setAnalysisRoots(
+          request.id, includedPathList, excludedPathList);
+    }
+    sendResult(AnalysisSetAnalysisRootsResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_set_general_subscriptions.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_general_subscriptions.dart
new file mode 100644
index 0000000..1d02f73
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_general_subscriptions.dart
@@ -0,0 +1,27 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analysis.setGeneralSubscriptions` request.
+class AnalysisSetGeneralSubscriptionsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisSetGeneralSubscriptionsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisSetGeneralSubscriptionsParams.fromRequest(request);
+    server.setGeneralAnalysisSubscriptions(params.subscriptions);
+    sendResult(AnalysisSetGeneralSubscriptionsResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_set_priority_files.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_priority_files.dart
new file mode 100644
index 0000000..9cbe6bd
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_priority_files.dart
@@ -0,0 +1,44 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analysis.setPriorityFiles` request.
+class AnalysisSetPriorityFilesHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisSetPriorityFilesHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisSetPriorityFilesParams.fromRequest(request);
+
+    for (var file in params.files) {
+      if (!server.isAbsoluteAndNormalized(file)) {
+        sendResponse(Response.invalidFilePathFormat(request, file));
+      }
+    }
+
+    server.setPriorityFiles(request.id, params.files);
+    //
+    // Forward the request to the plugins.
+    //
+    var converter = RequestConverter();
+    server.pluginManager.setAnalysisSetPriorityFilesParams(
+        converter.convertAnalysisSetPriorityFilesParams(params));
+    //
+    // Send the response.
+    //
+    sendResult(AnalysisSetPriorityFilesResult());
+  }
+}
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/analytics_enable.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_enable.dart
new file mode 100644
index 0000000..5b5a927
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_enable.dart
@@ -0,0 +1,30 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analytics.enable` request.
+class AnalyticsEnableHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsEnableHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalyticsEnableParams.fromRequest(request);
+    final analytics = server.analytics;
+    if (analytics != null) {
+      analytics.enabled = params.value;
+    }
+    sendResult(AnalyticsEnableResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.dart
new file mode 100644
index 0000000..a4d3bfb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_is_enabled.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/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/utilities/progress.dart';
+
+/// The handler for the `analytics.isEnabled` request.
+class AnalyticsIsEnabledHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsIsEnabledHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    sendResult(AnalyticsIsEnabledResult(server.analytics?.enabled ?? false));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart
new file mode 100644
index 0000000..ea1aee4
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_event.dart
@@ -0,0 +1,35 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analytics.sendEvent` request.
+class AnalyticsSendEventHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsSendEventHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  String get _clientId => server.options.clientId ?? 'client';
+
+  @override
+  Future<void> handle() async {
+    final analytics = server.analytics;
+    if (analytics == null) {
+      sendResult(AnalyticsSendEventResult());
+      return;
+    }
+
+    var params = AnalyticsSendEventParams.fromRequest(request);
+    analytics.sendEvent(_clientId, params.action);
+    sendResult(AnalyticsSendEventResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart
new file mode 100644
index 0000000..bb9961e
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analytics_send_timing.dart
@@ -0,0 +1,35 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `analytics.sendTiming` request.
+class AnalyticsSendTimingHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalyticsSendTimingHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  String get _clientId => server.options.clientId ?? 'client';
+
+  @override
+  Future<void> handle() async {
+    final analytics = server.analytics;
+    if (analytics == null) {
+      sendResult(AnalyticsSendTimingResult());
+      return;
+    }
+
+    var params = AnalyticsSendTimingParams.fromRequest(request);
+    analytics.sendTiming(params.event, params.millis, category: _clientId);
+    sendResult(AnalyticsSendTimingResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details.dart b/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details.dart
new file mode 100644
index 0000000..e531347
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details.dart
@@ -0,0 +1,93 @@
+// 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/utilities/progress.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+
+/// The handler for the `completion.getSuggestionDetails` request.
+class CompletionGetSuggestionDetailsHandler extends LegacyHandler {
+  /// The identifiers of the latest `getSuggestionDetails` request.
+  /// We use it to abort previous requests.
+  int _latestGetSuggestionDetailsId = 0;
+
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  CompletionGetSuggestionDetailsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = CompletionGetSuggestionDetailsParams.fromRequest(request);
+
+    var file = params.file;
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var libraryId = params.id;
+    var declarationsTracker = server.declarationsTracker;
+    if (declarationsTracker == null) {
+      sendResponse(Response.unsupportedFeature(
+          request.id, 'Completion is not enabled.'));
+      return;
+    }
+    var library = declarationsTracker.getLibrary(libraryId);
+    if (library == null) {
+      sendResponse(Response.invalidParameter(
+        request,
+        'libraryId',
+        'No such library: $libraryId',
+      ));
+      return;
+    }
+
+    // The label might be `MyEnum.myValue`, but we import only `MyEnum`.
+    var requestedName = params.label;
+    if (requestedName.contains('.')) {
+      requestedName = requestedName.substring(
+        0,
+        requestedName.indexOf('.'),
+      );
+    }
+
+    const timeout = Duration(milliseconds: 1000);
+    var timer = Stopwatch()..start();
+    var id = ++_latestGetSuggestionDetailsId;
+    while (id == _latestGetSuggestionDetailsId && timer.elapsed < timeout) {
+      try {
+        var session = await server.getAnalysisSession(file);
+        if (session == null) {
+          sendResponse(Response.fileNotAnalyzed(request, 'libraryId'));
+          return;
+        }
+
+        var completion = params.label;
+        var builder = ChangeBuilder(session: session);
+        await builder.addDartFileEdit(file, (builder) {
+          var result = builder.importLibraryElement(library.uri);
+          if (result.prefix != null) {
+            completion = '${result.prefix}.$completion';
+          }
+        });
+
+        sendResult(CompletionGetSuggestionDetailsResult(completion,
+            change: builder.sourceChange));
+        return;
+      } on InconsistentAnalysisException {
+        // Loop around to try again.
+      }
+    }
+
+    // Timeout or abort, send the empty response.
+    sendResult(CompletionGetSuggestionDetailsResult(''));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details2.dart b/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details2.dart
new file mode 100644
index 0000000..2cdf656
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/completion_get_suggestion_details2.dart
@@ -0,0 +1,79 @@
+// 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/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+
+/// The handler for the `completion.getSuggestionDetails2` request.
+class CompletionGetSuggestionDetails2Handler extends LegacyHandler {
+  /// The identifiers of the latest `getSuggestionDetails2` request.
+  /// We use it to abort previous requests.
+  int _latestGetSuggestionDetailsId = 0;
+
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  CompletionGetSuggestionDetails2Handler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = CompletionGetSuggestionDetails2Params.fromRequest(request);
+
+    var file = params.file;
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var libraryUri = Uri.tryParse(params.libraryUri);
+    if (libraryUri == null) {
+      sendResponse(
+        Response.invalidParameter(request, 'libraryUri', 'Cannot parse'),
+      );
+      return;
+    }
+
+    var budget = CompletionBudget(
+      const Duration(milliseconds: 1000),
+    );
+    var id = ++_latestGetSuggestionDetailsId;
+    while (id == _latestGetSuggestionDetailsId && !budget.isEmpty) {
+      try {
+        var session = await server.getAnalysisSession(file);
+        if (session == null) {
+          sendResponse(Response.fileNotAnalyzed(request, file));
+          return;
+        }
+
+        var completion = params.completion;
+        var builder = ChangeBuilder(session: session);
+        await builder.addDartFileEdit(file, (builder) {
+          var result = builder.importLibraryElement(libraryUri);
+          if (result.prefix != null) {
+            completion = '${result.prefix}.$completion';
+          }
+        });
+
+        sendResult(CompletionGetSuggestionDetails2Result(
+          completion,
+          builder.sourceChange,
+        ));
+        return;
+      } on InconsistentAnalysisException {
+        // Loop around to try again.
+      }
+    }
+
+    // Timeout or abort, send the empty response.
+    sendResult(CompletionGetSuggestionDetailsResult(''));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_diagnostics.dart b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_diagnostics.dart
new file mode 100644
index 0000000..678db0f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_diagnostics.dart
@@ -0,0 +1,35 @@
+// 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/utilities/progress.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+
+/// The handler for the `diagnostic.getDiagnostics` request.
+class DiagnosticGetDiagnosticsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  DiagnosticGetDiagnosticsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var contexts = server.driverMap.values.map(_extractDataFromDriver).toList();
+    sendResult(DiagnosticGetDiagnosticsResult(contexts));
+  }
+
+  /// Extract context data from the given [driver].
+  ContextData _extractDataFromDriver(AnalysisDriver driver) {
+    var explicitFileCount = driver.addedFiles.length;
+    var knownFileCount = driver.knownFiles.length;
+    return ContextData(driver.name, explicitFileCount,
+        knownFileCount - explicitFileCount, driver.numberOfFilesToAnalyze, []);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart
new file mode 100644
index 0000000..e76abac
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart
@@ -0,0 +1,31 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `diagnostic.getServerPort` request.
+class DiagnosticGetServerPortHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  DiagnosticGetServerPortHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    try {
+      // Open a port (or return the existing one).
+      var port = await server.diagnosticServer!.getServerPort();
+      sendResult(DiagnosticGetServerPortResult(port));
+    } catch (error) {
+      sendResponse(Response.debugPortCouldNotBeOpened(request, error));
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart
new file mode 100644
index 0000000..6e2a361
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart
@@ -0,0 +1,58 @@
+// 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/services/correction/bulk_fix_processor.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/exception/exception.dart';
+import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
+
+/// The handler for the `edit.bulkFixes` request.
+class EditBulkFixes extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditBulkFixes(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    //
+    // Compute bulk fixes
+    //
+    try {
+      var params = EditBulkFixesParams.fromRequest(request);
+      for (var file in params.included) {
+        if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+          return;
+        }
+      }
+
+      var collection = AnalysisContextCollectionImpl(
+        includedPaths: params.included,
+        resourceProvider: server.resourceProvider,
+        sdkPath: server.sdkPath,
+      );
+      var workspace = DartChangeWorkspace(
+          collection.contexts.map((c) => c.currentSession).toList());
+      var processor = BulkFixProcessor(server.instrumentationService, workspace,
+          useConfigFiles: params.inTestMode ?? false);
+
+      var changeBuilder = await processor.fixErrors(collection.contexts);
+
+      sendResult(EditBulkFixesResult(
+          changeBuilder.sourceChange.edits, processor.fixDetails));
+    } catch (exception, stackTrace) {
+      // TODO(brianwilkerson) Move exception handling outside [handle].
+      server.sendServerErrorNotification('Exception while getting bulk fixes',
+          CaughtException(exception, stackTrace), stackTrace);
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_format.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_format.dart
new file mode 100644
index 0000000..ca6d691
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_format.dart
@@ -0,0 +1,83 @@
+// 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/utilities/progress.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+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.format` request.
+class EditFormatHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditFormatHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    server.options.analytics?.sendEvent('edit', 'format');
+
+    var params = EditFormatParams.fromRequest(request);
+    var file = params.file;
+//
+    String unformattedCode;
+    try {
+      var resource = server.resourceProvider.getFile(file);
+      unformattedCode = resource.readAsStringSync();
+    } catch (e) {
+      sendResponse(Response.formatInvalidFile(request));
+      return;
+    }
+
+    int? start = params.selectionOffset;
+    int? length = params.selectionLength;
+
+    // No need to preserve 0,0 selection
+    if (start == 0 && length == 0) {
+      start = null;
+      length = null;
+    }
+
+    var code = SourceCode(unformattedCode,
+        uri: null,
+        isCompilationUnit: true,
+        selectionStart: start,
+        selectionLength: length);
+    var formatter = DartFormatter(pageWidth: params.lineLength);
+    SourceCode formattedResult;
+    try {
+      formattedResult = formatter.formatSource(code);
+    } on FormatterException {
+      sendResponse(Response.formatWithErrors(request));
+      return;
+    }
+    var formattedSource = formattedResult.text;
+
+    var edits = <SourceEdit>[];
+
+    if (formattedSource != unformattedCode) {
+      //TODO: replace full replacements with smaller, more targeted edits
+      var edit = SourceEdit(0, unformattedCode.length, formattedSource);
+      edits.add(edit);
+    }
+
+    var newStart = formattedResult.selectionStart;
+    var newLength = formattedResult.selectionLength;
+
+    // Sending null start/length values would violate protocol, so convert back
+    // to 0.
+    newStart ??= 0;
+    newLength ??= 0;
+
+    sendResult(EditFormatResult(edits, newStart, newLength));
+  }
+}
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/edit_get_assists.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
new file mode 100644
index 0000000..5d76278
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
@@ -0,0 +1,129 @@
+// 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/plugin/edit/assist/assist_core.dart';
+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/domain_abstract.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/plugin/result_converter.dart';
+import 'package:analysis_server/src/services/correction/assist.dart';
+import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/src/exception/exception.dart';
+import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
+
+/// The handler for the `edit.getAssists` request.
+class EditGetAssistsHandler extends LegacyHandler
+    with RequestHandlerMixin<AnalysisServer> {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditGetAssistsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditGetAssistsParams.fromRequest(request);
+    var file = params.file;
+    var offset = params.offset;
+    var length = params.length;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+    //
+    // Allow plugins to start computing assists.
+    //
+    Map<PluginInfo, Future<plugin.Response>> pluginFutures;
+    var requestParams = plugin.EditGetAssistsParams(file, offset, length);
+    var driver = server.getAnalysisDriver(file);
+    if (driver == null) {
+      pluginFutures = <PluginInfo, Future<plugin.Response>>{};
+    } else {
+      pluginFutures = server.pluginManager.broadcastRequest(
+        requestParams,
+        contextRoot: driver.analysisContext!.contextRoot,
+      );
+    }
+
+    //
+    // Compute fixes associated with server-generated errors.
+    //
+    var changes = await _computeServerAssists(request, file, offset, length);
+
+    //
+    // Add the fixes produced by plugins to the server-generated fixes.
+    //
+    var responses =
+        await waitForResponses(pluginFutures, requestParameters: requestParams);
+    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
+    var converter = ResultConverter();
+    var pluginChanges = <plugin.PrioritizedSourceChange>[];
+    for (var response in responses) {
+      var result = plugin.EditGetAssistsResult.fromResponse(response);
+      pluginChanges.addAll(result.assists);
+    }
+    pluginChanges
+        .sort((first, second) => first.priority.compareTo(second.priority));
+    changes.addAll(pluginChanges.map(converter.convertPrioritizedSourceChange));
+
+    //
+    // Send the response.
+    //
+    sendResult(EditGetAssistsResult(changes));
+  }
+
+  Future<List<SourceChange>> _computeServerAssists(
+      Request request, String file, int offset, int length) async {
+    var changes = <SourceChange>[];
+
+    var result = await server.getResolvedUnit(file);
+    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
+
+    if (result != null) {
+      var context = DartAssistContextImpl(
+        server.instrumentationService,
+        DartChangeWorkspace(
+          await server.currentSessions,
+        ),
+        result,
+        offset,
+        length,
+      );
+
+      try {
+        var processor = AssistProcessor(context);
+        var assists = await processor.compute();
+        assists.sort(Assist.SORT_BY_RELEVANCE);
+        for (var assist in assists) {
+          changes.add(assist.change);
+        }
+      } on InconsistentAnalysisException {
+        // ignore
+      } catch (exception, stackTrace) {
+        var parametersFile = '''
+offset: $offset
+length: $length
+      ''';
+        throw CaughtExceptionWithFiles(exception, stackTrace, {
+          file: result.content,
+          'parameters': parametersFile,
+        });
+      }
+
+      server.requestStatistics?.addItemTimeNow(request, 'computedAssists');
+    }
+
+    return changes;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
new file mode 100644
index 0000000..50595a1
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
@@ -0,0 +1,324 @@
+// 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/plugin/edit/fix/fix_core.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_abstract.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/plugin/result_converter.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
+import 'package:analysis_server/src/services/correction/fix/manifest/fix_generator.dart';
+import 'package:analysis_server/src/services/correction/fix/pubspec/fix_generator.dart';
+import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
+import 'package:analyzer/src/dart/analysis/results.dart' as engine;
+import 'package:analyzer/src/exception/exception.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/manifest/manifest_validator.dart';
+import 'package:analyzer/src/manifest/manifest_values.dart';
+import 'package:analyzer/src/pubspec/pubspec_validator.dart';
+import 'package:analyzer/src/task/options.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
+import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
+import 'package:html/parser.dart';
+import 'package:yaml/yaml.dart';
+
+/// The handler for the `edit.getFixes` request.
+class EditGetFixesHandler extends LegacyHandler
+    with RequestHandlerMixin<AnalysisServer> {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditGetFixesHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditGetFixesParams.fromRequest(request);
+    var file = params.file;
+    var offset = params.offset;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    if (!server.isAnalyzed(file)) {
+      server.sendResponse(Response.getFixesInvalidFile(request));
+      return;
+    }
+
+    //
+    // Allow plugins to start computing fixes.
+    //
+    Map<PluginInfo, Future<plugin.Response>> pluginFutures;
+    var requestParams = plugin.EditGetFixesParams(file, offset);
+    var driver = server.getAnalysisDriver(file);
+    if (driver == null) {
+      pluginFutures = <PluginInfo, Future<plugin.Response>>{};
+    } else {
+      pluginFutures = server.pluginManager.broadcastRequest(
+        requestParams,
+        contextRoot: driver.analysisContext!.contextRoot,
+      );
+    }
+    //
+    // Compute fixes associated with server-generated errors.
+    //
+    List<AnalysisErrorFixes>? errorFixesList;
+    while (errorFixesList == null) {
+      try {
+        errorFixesList = await _computeServerErrorFixes(request, file, offset);
+      } on InconsistentAnalysisException {
+        // Loop around to try again to compute the fixes.
+      }
+    }
+    //
+    // Add the fixes produced by plugins to the server-generated fixes.
+    //
+    var responses =
+        await waitForResponses(pluginFutures, requestParameters: requestParams);
+    server.requestStatistics?.addItemTimeNow(request, 'pluginResponses');
+    var converter = ResultConverter();
+    for (var response in responses) {
+      var result = plugin.EditGetFixesResult.fromResponse(response);
+      errorFixesList
+          .addAll(result.fixes.map(converter.convertAnalysisErrorFixes));
+    }
+    //
+    // Send the response.
+    //
+    sendResult(EditGetFixesResult(errorFixesList));
+  }
+
+  /// Compute and return the fixes associated with server-generated errors in
+  /// analysis options files.
+  Future<List<AnalysisErrorFixes>> _computeAnalysisOptionsFixes(
+      String file, int offset) async {
+    var errorFixesList = <AnalysisErrorFixes>[];
+    var resourceProvider = server.resourceProvider;
+    var optionsFile = resourceProvider.getFile(file);
+    var content = _safelyRead(optionsFile);
+    if (content == null) {
+      return errorFixesList;
+    }
+    var driver = server.getAnalysisDriver(file);
+    if (driver == null) {
+      return errorFixesList;
+    }
+    await driver.applyPendingFileChanges();
+    var session = driver.currentSession;
+    var sourceFactory = driver.sourceFactory;
+    var errors = analyzeAnalysisOptions(
+      optionsFile.createSource(),
+      content,
+      sourceFactory,
+      session.analysisContext.contextRoot.root.path,
+    );
+    var options = _getOptions(sourceFactory, content);
+    if (options == null) {
+      return errorFixesList;
+    }
+    for (var error in errors) {
+      var generator = AnalysisOptionsFixGenerator(
+          resourceProvider, error, content, options);
+      var fixes = await generator.computeFixes();
+      if (fixes.isNotEmpty) {
+        fixes.sort(Fix.SORT_BY_RELEVANCE);
+        var lineInfo = LineInfo.fromContent(content);
+        var result = engine.ErrorsResultImpl(
+            session, file, Uri.file(file), lineInfo, false, errors);
+        var serverError = newAnalysisError_fromEngine(result, error);
+        var errorFixes = AnalysisErrorFixes(serverError);
+        errorFixesList.add(errorFixes);
+        fixes.forEach((fix) {
+          errorFixes.fixes.add(fix.change);
+        });
+      }
+    }
+    return errorFixesList;
+  }
+
+  /// Compute and return the fixes associated with server-generated errors in
+  /// Dart files.
+  Future<List<AnalysisErrorFixes>> _computeDartFixes(
+      Request request, String file, int offset) async {
+    var errorFixesList = <AnalysisErrorFixes>[];
+    var result = await server.getResolvedUnit(file);
+    server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
+    if (result != null) {
+      var lineInfo = result.lineInfo;
+      var requestLine = lineInfo.getLocation(offset).lineNumber;
+      for (var error in result.errors) {
+        var errorLine = lineInfo.getLocation(error.offset).lineNumber;
+        if (errorLine == requestLine) {
+          var workspace = DartChangeWorkspace(
+            await server.currentSessions,
+          );
+          var context = DartFixContextImpl(
+              server.instrumentationService, workspace, result, error);
+
+          List<Fix> fixes;
+          try {
+            fixes = await DartFixContributor().computeFixes(context);
+          } on InconsistentAnalysisException {
+            fixes = [];
+          } catch (exception, stackTrace) {
+            var parametersFile = '''
+offset: $offset
+error: $error
+error.errorCode: ${error.errorCode}
+''';
+            throw CaughtExceptionWithFiles(exception, stackTrace, {
+              file: result.content,
+              'parameters': parametersFile,
+            });
+          }
+
+          if (fixes.isNotEmpty) {
+            fixes.sort(Fix.SORT_BY_RELEVANCE);
+            var serverError = newAnalysisError_fromEngine(result, error);
+            var errorFixes = AnalysisErrorFixes(serverError);
+            errorFixesList.add(errorFixes);
+            fixes.forEach((fix) {
+              errorFixes.fixes.add(fix.change);
+            });
+          }
+        }
+      }
+    }
+    server.requestStatistics?.addItemTimeNow(request, 'computedFixes');
+    return errorFixesList;
+  }
+
+  /// Compute and return the fixes associated with server-generated errors in
+  /// Android manifest files.
+  Future<List<AnalysisErrorFixes>> _computeManifestFixes(
+      String file, int offset) async {
+    var errorFixesList = <AnalysisErrorFixes>[];
+    var manifestFile = server.resourceProvider.getFile(file);
+    var content = _safelyRead(manifestFile);
+    if (content == null) {
+      return errorFixesList;
+    }
+    var document =
+        parseFragment(content, container: MANIFEST_TAG, generateSpans: true);
+    var validator = ManifestValidator(manifestFile.createSource());
+    var session = await server.getAnalysisSession(file);
+    if (session == null) {
+      return errorFixesList;
+    }
+    var errors = validator.validate(content, true);
+    for (var error in errors) {
+      var generator = ManifestFixGenerator(error, content, document);
+      var fixes = await generator.computeFixes();
+      if (fixes.isNotEmpty) {
+        fixes.sort(Fix.SORT_BY_RELEVANCE);
+        var lineInfo = LineInfo.fromContent(content);
+        var result = engine.ErrorsResultImpl(
+            session, file, Uri.file(file), lineInfo, false, errors);
+        var serverError = newAnalysisError_fromEngine(result, error);
+        var errorFixes = AnalysisErrorFixes(serverError);
+        errorFixesList.add(errorFixes);
+        fixes.forEach((fix) {
+          errorFixes.fixes.add(fix.change);
+        });
+      }
+    }
+    return errorFixesList;
+  }
+
+  /// Compute and return the fixes associated with server-generated errors in
+  /// pubspec.yaml files.
+  Future<List<AnalysisErrorFixes>> _computePubspecFixes(
+      String file, int offset) async {
+    var errorFixesList = <AnalysisErrorFixes>[];
+    var resourceProvider = server.resourceProvider;
+    var pubspecFile = resourceProvider.getFile(file);
+    var content = _safelyRead(pubspecFile);
+    if (content == null) {
+      return errorFixesList;
+    }
+    var session = await server.getAnalysisSession(file);
+    if (session == null) {
+      return errorFixesList;
+    }
+    YamlDocument document;
+    try {
+      document = loadYamlDocument(content);
+    } catch (exception) {
+      return errorFixesList;
+    }
+    var yamlContent = document.contents;
+    if (yamlContent is! YamlMap) {
+      yamlContent = YamlMap();
+    }
+    var validator =
+        PubspecValidator(resourceProvider, pubspecFile.createSource());
+    var errors = validator.validate(yamlContent.nodes);
+    for (var error in errors) {
+      var generator =
+          PubspecFixGenerator(resourceProvider, error, content, document);
+      var fixes = await generator.computeFixes();
+      if (fixes.isNotEmpty) {
+        fixes.sort(Fix.SORT_BY_RELEVANCE);
+        var lineInfo = LineInfo.fromContent(content);
+        var result = engine.ErrorsResultImpl(
+            session, file, Uri.file(file), lineInfo, false, errors);
+        var serverError = newAnalysisError_fromEngine(result, error);
+        var errorFixes = AnalysisErrorFixes(serverError);
+        errorFixesList.add(errorFixes);
+        fixes.forEach((fix) {
+          errorFixes.fixes.add(fix.change);
+        });
+      }
+    }
+    return errorFixesList;
+  }
+
+  /// Compute and return the fixes associated with server-generated errors.
+  Future<List<AnalysisErrorFixes>> _computeServerErrorFixes(
+      Request request, String file, int offset) async {
+    var pathContext = server.resourceProvider.pathContext;
+    if (file_paths.isDart(pathContext, file)) {
+      return _computeDartFixes(request, file, offset);
+    } else if (file_paths.isAnalysisOptionsYaml(pathContext, file)) {
+      return _computeAnalysisOptionsFixes(file, offset);
+    } else if (file_paths.isPubspecYaml(pathContext, file)) {
+      return _computePubspecFixes(file, offset);
+    } else if (file_paths.isAndroidManifestXml(pathContext, file)) {
+      // TODO(brianwilkerson) Do we need to check more than the file name?
+      return _computeManifestFixes(file, offset);
+    }
+    return <AnalysisErrorFixes>[];
+  }
+
+  YamlMap? _getOptions(SourceFactory sourceFactory, String content) {
+    var optionsProvider = AnalysisOptionsProvider(sourceFactory);
+    try {
+      return optionsProvider.getOptionsFromString(content);
+    } on OptionsFormatException {
+      return null;
+    }
+  }
+
+  /// Return the contents of the [file], or `null` if the file does not exist or
+  /// cannot be read.
+  String? _safelyRead(File file) {
+    try {
+      return file.readAsStringSync();
+    } on FileSystemException {
+      return null;
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_postfix_completion.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_postfix_completion.dart
new file mode 100644
index 0000000..c8d6bfb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_postfix_completion.dart
@@ -0,0 +1,51 @@
+// 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/services/completion/postfix/postfix_completion.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+/// The handler for the `edit.getPostfixCompletion` request.
+class EditGetPostfixCompletionHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditGetPostfixCompletionHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    server.options.analytics?.sendEvent('edit', 'getPostfixCompletion');
+
+    var params = EditGetPostfixCompletionParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    SourceChange? change;
+
+    var result = await server.getResolvedUnit(file);
+    if (result != null) {
+      var context = PostfixCompletionContext(
+        result,
+        params.offset,
+        params.key,
+      );
+      var processor = PostfixCompletionProcessor(context);
+      var completion = await processor.compute();
+      change = completion.change;
+    }
+    change ??= SourceChange('', edits: []);
+
+    sendResult(EditGetPostfixCompletionResult(change));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_statement_completion.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_statement_completion.dart
new file mode 100644
index 0000000..50ace41
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_statement_completion.dart
@@ -0,0 +1,45 @@
+// 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/services/completion/statement/statement_completion.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+/// The handler for the `edit.getStatementCompletion` request.
+class EditGetStatementCompletionHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditGetStatementCompletionHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditGetStatementCompletionParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    SourceChange? change;
+
+    var result = await server.getResolvedUnit(file);
+    if (result != null) {
+      var context = StatementCompletionContext(result, params.offset);
+      var processor = StatementCompletionProcessor(context);
+      var completion = await processor.compute();
+      change = completion.change;
+    }
+    change ??= SourceChange('', edits: []);
+
+    sendResult(EditGetStatementCompletionResult(change, false));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_import_elements.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_import_elements.dart
new file mode 100644
index 0000000..1dd1079
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_import_elements.dart
@@ -0,0 +1,61 @@
+// 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/computer/import_elements_computer.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `edit.importElements` request.
+class EditImportElementsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditImportElementsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditImportElementsParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    //
+    // Prepare the resolved unit.
+    //
+    var result = await server.getResolvedUnit(file);
+    if (result == null) {
+      sendResponse(Response.importElementsInvalidFile(request));
+      return;
+    }
+    var libraryUnit = result.libraryElement.definingCompilationUnit;
+    if (libraryUnit != result.unit.declaredElement) {
+      // The file in the request is a part of a library. We need to pass the
+      // defining compilation unit to the computer, not the part.
+      result = await server.getResolvedUnit(libraryUnit.source.fullName);
+      if (result == null) {
+        sendResponse(Response.importElementsInvalidFile(request));
+        return;
+      }
+    }
+    //
+    // Compute the edits required to import the required elements.
+    //
+    var computer = ImportElementsComputer(server.resourceProvider, result);
+    var change = await computer.createEdits(params.elements);
+    var edits = change.edits;
+    var edit = edits.isEmpty ? null : edits[0];
+    //
+    // Send the response.
+    //
+    sendResult(EditImportElementsResult(edit: edit));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_is_postfix_completion_applicable.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_is_postfix_completion_applicable.dart
new file mode 100644
index 0000000..7c9fd50
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_is_postfix_completion_applicable.dart
@@ -0,0 +1,46 @@
+// 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/services/completion/postfix/postfix_completion.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `edit.isPostfixCompletionApplicable` request.
+class EditIsPostfixCompletionApplicableHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditIsPostfixCompletionApplicableHandler(AnalysisServer server,
+      Request request, CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditGetPostfixCompletionParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var value = false;
+
+    var result = await server.getResolvedUnit(file);
+    if (result != null) {
+      var context = PostfixCompletionContext(
+        result,
+        params.offset,
+        params.key,
+      );
+      var processor = PostfixCompletionProcessor(context);
+      value = await processor.isApplicable();
+    }
+
+    sendResult(EditIsPostfixCompletionApplicableResult(value));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_list_postfix_completion_templates.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_list_postfix_completion_templates.dart
new file mode 100644
index 0000000..b990eea
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_list_postfix_completion_templates.dart
@@ -0,0 +1,30 @@
+// 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/services/completion/postfix/postfix_completion.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `edit.listPostfixCompletionTemplates` request.
+class EditListPostfixCompletionTemplatesHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditListPostfixCompletionTemplatesHandler(AnalysisServer server,
+      Request request, CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var templates = DartPostfixCompletion.ALL_TEMPLATES
+        .map((PostfixCompletionKind kind) =>
+            PostfixTemplateDescriptor(kind.name, kind.key, kind.example))
+        .toList();
+    sendResult(EditListPostfixCompletionTemplatesResult(templates));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_organize_directives.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_organize_directives.dart
new file mode 100644
index 0000000..9a8dbc1
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_organize_directives.dart
@@ -0,0 +1,65 @@
+// 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/services/correction/organize_imports.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+/// The handler for the `edit.organizeDirectives` request.
+class EditOrganizeDirectivesHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditOrganizeDirectivesHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    // TODO(brianwilkerson) Move analytics tracking out of [handleRequest].
+    server.options.analytics?.sendEvent('edit', 'organizeDirectives');
+
+    var params = EditOrganizeDirectivesParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var pathContext = server.resourceProvider.pathContext;
+    if (!file_paths.isDart(pathContext, file)) {
+      sendResponse(Response.fileNotAnalyzed(request, file));
+      return;
+    }
+
+    // Prepare the file information.
+    var result = await server.getResolvedUnit(file);
+    if (result == null) {
+      sendResponse(Response.fileNotAnalyzed(request, file));
+      return;
+    }
+    var fileStamp = -1;
+    var code = result.content;
+    var unit = result.unit;
+    var errors = result.errors;
+    // check if there are scan/parse errors in the file
+    var numScanParseErrors = numberOfSyntacticErrors(errors);
+    if (numScanParseErrors != 0) {
+      sendResponse(Response.organizeDirectivesError(
+          request, 'File has $numScanParseErrors scan/parse errors.'));
+      return;
+    }
+    // do organize
+    var sorter = ImportOrganizer(code, unit, errors);
+    var edits = sorter.organize();
+    var fileEdit = SourceFileEdit(file, fileStamp, edits: edits);
+    sendResult(EditOrganizeDirectivesResult(fileEdit));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_sort_members.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_sort_members.dart
new file mode 100644
index 0000000..2aa4aa6
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_sort_members.dart
@@ -0,0 +1,63 @@
+// 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/services/correction/sort_members.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+
+/// The handler for the `edit.sortMembers` request.
+class EditSortMembersHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditSortMembersHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = EditSortMembersParams.fromRequest(request);
+    var file = params.file;
+
+    if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      return;
+    }
+
+    var pathContext = server.resourceProvider.pathContext;
+    if (!file_paths.isDart(pathContext, file)) {
+      sendResponse(Response.sortMembersInvalidFile(request));
+      return;
+    }
+
+    // Prepare the file information.
+    var result = await server.getParsedUnit(file);
+    if (result == null) {
+      sendResponse(Response.fileNotAnalyzed(request, file));
+      return;
+    }
+
+    var fileStamp = -1;
+    var code = result.content;
+    var unit = result.unit;
+    var errors = result.errors;
+    // Check if there are scan/parse errors in the file.
+    var numScanParseErrors = numberOfSyntacticErrors(errors);
+    if (numScanParseErrors != 0) {
+      sendResponse(
+          Response.sortMembersParseErrors(request, numScanParseErrors));
+      return;
+    }
+    // Do sort.
+    var sorter = MemberSorter(code, unit, result.lineInfo);
+    var edits = sorter.sort();
+    var fileEdit = SourceFileEdit(file, fileStamp, edits: edits);
+    sendResult(EditSortMembersResult(fileEdit));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart b/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart
new file mode 100644
index 0000000..7e9094e
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart
@@ -0,0 +1,56 @@
+// 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:_fe_analyzer_shared/src/scanner/errors.dart';
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/protocol/protocol_internal.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.g.dart';
+
+/// A request handler for the legacy protocol.
+abstract class LegacyHandler {
+  /// The analysis server that is using this handler to process a request.
+  final AnalysisServer server;
+
+  /// The request being handled.
+  final Request request;
+
+  /// The token used in order to allow the request to be cancelled. Not all
+  /// handlers support cancelling a request.
+  final CancellationToken cancellationToken;
+
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  LegacyHandler(this.server, this.request, this.cancellationToken);
+
+  /// Handle the [request].
+  Future<void> handle();
+
+  /// Return the number of syntactic errors in the list of [errors].
+  int numberOfSyntacticErrors(List<AnalysisError> errors) {
+    var numScanParseErrors = 0;
+    for (var error in errors) {
+      if (error.errorCode is ScannerErrorCode ||
+          error.errorCode is ParserErrorCode) {
+        numScanParseErrors++;
+      }
+    }
+    return numScanParseErrors;
+  }
+
+  /// Send the [response] to the client.
+  void sendResponse(Response response) {
+    server.sendResponse(response);
+  }
+
+  /// Send a response to the client that is associated with the given [request]
+  /// and whose body if the given [result].
+  void sendResult(ResponseResult result) {
+    sendResponse(result.toResponse(request.id));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart b/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart
new file mode 100644
index 0000000..5702aba
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_cancel_request.dart
@@ -0,0 +1,27 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `server.cancelRequest` request.
+class ServerCancelRequestHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerCancelRequestHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    final id = ServerCancelRequestParams.fromRequest(request).id;
+    server.cancelRequest(id);
+    sendResult(ServerCancelRequestResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart b/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart
new file mode 100644
index 0000000..21eb232
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_get_version.dart
@@ -0,0 +1,28 @@
+// 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_constants.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/utilities/progress.dart';
+
+/// The handler for the `server.getVersion` request.
+class ServerGetVersionHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerGetVersionHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    sendResult(ServerGetVersionResult(
+      server.options.reportProtocolVersion ?? PROTOCOL_VERSION,
+    ));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart b/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart
new file mode 100644
index 0000000..67633bf
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_set_subscriptions.dart
@@ -0,0 +1,35 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `server.setSubscriptions` request.
+class ServerSetSubscriptionsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerSetSubscriptionsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    try {
+      server.serverServices = ServerSetSubscriptionsParams.fromRequest(request)
+          .subscriptions
+          .toSet();
+      server.requestStatistics?.isNotificationSubscribed =
+          server.serverServices.contains(ServerService.LOG);
+    } on RequestFailure catch (exception) {
+      sendResponse(exception.response);
+      return;
+    }
+    sendResult(ServerSetSubscriptionsResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart b/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart
new file mode 100644
index 0000000..93689a6
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart
@@ -0,0 +1,26 @@
+// 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/utilities/progress.dart';
+
+/// The handler for the `server.shutdown` request.
+class ServerShutdownHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerShutdownHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    await server.shutdown();
+    sendResult(ServerShutdownResult());
+  }
+}
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/lsp/client_capabilities.dart b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
index bac248e..9a50687 100644
--- a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
@@ -68,6 +68,7 @@
   final bool literalCodeActions;
   final bool insertReplaceCompletionRanges;
   final bool definitionLocationLink;
+  final bool typeDefinitionLocationLink;
   final bool hierarchicalSymbols;
   final bool diagnosticCodeDescription;
   final Set<CodeActionKind> codeActionKinds;
@@ -109,6 +110,8 @@
             false,
         definitionLocationLink =
             raw.textDocument?.definition?.linkSupport ?? false,
+        typeDefinitionLocationLink =
+            raw.textDocument?.typeDefinition?.linkSupport ?? false,
         completionItemTags = _listToSet(
             raw.textDocument?.completion?.completionItem?.tagSupport?.valueSet),
         diagnosticTags = _listToSet(
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
index c7497dd..a5ef8f7 100644
--- a/pkg/analysis_server/lib/src/lsp/client_configuration.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -151,6 +151,14 @@
 /// known editors allow per-file configuration and it allows us to keep the
 /// settings cached, invalidated only when WorkspaceFolders change.
 class LspResourceClientConfiguration {
+  /// The maximum number of completions to return for completion requests by
+  /// default.
+  ///
+  /// This has been set fairly high initially to avoid changing behaviour too
+  /// much. The Dart-Code extension will override this default with its own
+  /// to gather feedback and then this can be adjusted accordingly.
+  static const defaultMaxCompletions = 2000;
+
   final Map<String, Object?> _settings;
   final LspResourceClientConfiguration? _fallback;
 
@@ -166,16 +174,20 @@
       true;
 
   /// Whether to include Snippets in code completion results.
-  bool get enableSnippets =>
-      // TODO(dantup): Change this setting to `enableSnippets`
-      //    and default to `true`
-      //    and remove `initializeWithSnippetSupportAndPreviewFlag` from tests
-      //    once all snippets are implemented and VS Code has shipped a
-      //    version that maps `enableServerSnippets` to `enableSnippets` in
-      //    middleware to avoid dupes.
-      _settings['previewEnableSnippets'] as bool? ??
-      _fallback?.enableSnippets ??
-      false;
+  bool get enableSnippets {
+    // Versions of Dart-Code earlier than v3.36 (1 Mar 2022) send
+    // enableServerSnippets=false to opt-out of snippets. Later versions map
+    // this version to the documented 'enableSnippets' setting in middleware.
+    // Once the number of users on < 3.36 is insignificant, this check can be
+    // removed. At 24 Mar 2022, approx 9% of users are on < 3.36.
+    if (_settings['enableServerSnippets'] == false /* explicit false */) {
+      return false;
+    }
+
+    return _settings['enableSnippets'] as bool? ??
+        _fallback?.enableSnippets ??
+        true;
+  }
 
   /// The line length used when formatting documents.
   ///
@@ -183,6 +195,15 @@
   int? get lineLength =>
       _settings['lineLength'] as int? ?? _fallback?.lineLength;
 
+  /// Maximum number of CompletionItems per completion request.
+  ///
+  /// If more than this are available, the list is truncated and isIncomplete
+  /// is set to true.
+  int get maxCompletionItems =>
+      _settings['maxCompletionItems'] as int? ??
+      _fallback?.maxCompletionItems ??
+      defaultMaxCompletions;
+
   /// Whether to rename files when renaming classes inside them where the file
   /// and class name match.
   ///
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index 55257c6..cb2da70 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -67,6 +67,7 @@
   static const fixAll = 'edit.fixAll';
   static const sendWorkspaceEdit = 'edit.sendWorkspaceEdit';
   static const performRefactor = 'refactor.perform';
+  static const validateRefactor = 'refactor.validate';
 }
 
 abstract class CustomMethods {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart
new file mode 100644
index 0000000..cc504be
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart
@@ -0,0 +1,197 @@
+// 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/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/constants.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/simple_edit_handler.dart';
+import 'package:analysis_server/src/lsp/handlers/handlers.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+import 'package:analysis_server/src/lsp/progress.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
+
+final _manager = LspRefactorManager._();
+
+/// A base class for refactoring commands that need to create Refactorings from
+/// client-supplied arguments.
+abstract class AbstractRefactorCommandHandler extends SimpleEditCommandHandler {
+  AbstractRefactorCommandHandler(LspAnalysisServer server) : super(server);
+
+  @override
+  String get commandName => 'Perform Refactor';
+
+  LspRefactorManager get manager => _manager;
+
+  FutureOr<ErrorOr<void>> execute(
+      String path,
+      String kind,
+      int offset,
+      int length,
+      Map<String, Object?>? options,
+      CancellationToken cancellationToken,
+      ProgressReporter reporter,
+      int? docVersion);
+
+  Future<ErrorOr<Refactoring>> getRefactoring(
+    RefactoringKind kind,
+    ResolvedUnitResult result,
+    int offset,
+    int length,
+    Map<String, dynamic>? options,
+  ) async {
+    switch (kind) {
+      case RefactoringKind.EXTRACT_METHOD:
+        final refactor = ExtractMethodRefactoring(
+            server.searchEngine, result, offset, length);
+
+        var preferredName = options != null ? options['name'] as String : null;
+        // checkInitialConditions will populate names with suggestions.
+        if (preferredName == null) {
+          await refactor.checkInitialConditions();
+          if (refactor.names.isNotEmpty) {
+            preferredName = refactor.names.first;
+          }
+        }
+        refactor.name = preferredName ?? 'newMethod';
+
+        // Defaults to true, but may be surprising if users didn't have an option
+        // to opt in.
+        refactor.extractAll = false;
+        return success(refactor);
+
+      case RefactoringKind.EXTRACT_LOCAL_VARIABLE:
+        final refactor = ExtractLocalRefactoring(result, offset, length);
+
+        var preferredName = options != null ? options['name'] as String : null;
+        // checkInitialConditions will populate names with suggestions.
+        if (preferredName == null) {
+          await refactor.checkInitialConditions();
+          if (refactor.names.isNotEmpty) {
+            preferredName = refactor.names.first;
+          }
+        }
+        refactor.name = preferredName ?? 'newVariable';
+
+        // Defaults to true, but may be surprising if users didn't have an option
+        // to opt in.
+        refactor.extractAll = false;
+        return success(refactor);
+
+      case RefactoringKind.EXTRACT_WIDGET:
+        final refactor = ExtractWidgetRefactoring(
+            server.searchEngine, result, offset, length);
+        // Provide a default name for clients that do not have any custom
+        // handling.
+        // Clients can use the information documented for refactor.perform to
+        // inject their own user-provided names until LSP has some native
+        // support:
+        // https://github.com/microsoft/language-server-protocol/issues/764
+        refactor.name =
+            options != null ? options['name'] as String : 'NewWidget';
+        return success(refactor);
+
+      case RefactoringKind.INLINE_LOCAL_VARIABLE:
+        final refactor =
+            InlineLocalRefactoring(server.searchEngine, result, offset);
+        return success(refactor);
+
+      case RefactoringKind.INLINE_METHOD:
+        final refactor =
+            InlineMethodRefactoring(server.searchEngine, result, offset);
+        return success(refactor);
+
+      case RefactoringKind.CONVERT_GETTER_TO_METHOD:
+        final node = NodeLocator(offset).searchWithin(result.unit);
+        final element = server.getElementOfNode(node);
+        if (element != null) {
+          if (element is PropertyAccessorElement) {
+            final refactor = ConvertGetterToMethodRefactoring(
+                server.searchEngine, result.session, element);
+            return success(refactor);
+          }
+        }
+        return error(ServerErrorCodes.InvalidCommandArguments,
+            'Location supplied to $commandName $kind is not longer valid');
+
+      case RefactoringKind.CONVERT_METHOD_TO_GETTER:
+        final node = NodeLocator(offset).searchWithin(result.unit);
+        final element = server.getElementOfNode(node);
+        if (element != null) {
+          if (element is ExecutableElement) {
+            final refactor = ConvertMethodToGetterRefactoring(
+                server.searchEngine, result.session, element);
+            return success(refactor);
+          }
+        }
+        return error(ServerErrorCodes.InvalidCommandArguments,
+            'Location supplied to $commandName $kind is not longer valid');
+
+      default:
+        return error(ServerErrorCodes.InvalidCommandArguments,
+            'Unknown RefactoringKind $kind was supplied to $commandName');
+    }
+  }
+
+  @override
+  Future<ErrorOr<void>> handle(List<Object?>? arguments,
+      ProgressReporter reporter, CancellationToken cancellationToken) async {
+    if (arguments == null ||
+        arguments.length != 6 ||
+        arguments[0] is! String || // kind
+        arguments[1] is! String || // path
+        (arguments[2] != null && arguments[2] is! int) || // docVersion
+        arguments[3] is! int || // offset
+        arguments[4] is! int || // length
+        // options
+        // Important: This arguments position is documented in
+        // tool/lsp_spec/README.md to allow clients with custom code (such as
+        // VS Code) to intercept the request and inject options (such as a
+        // user-provided name). Any changes to these arguments must be backwards
+        // compatible, keeping the options in this position.
+        (arguments[5] != null && arguments[5] is! Map<String, Object?>)) {
+      return ErrorOr.error(ResponseError(
+        code: ServerErrorCodes.InvalidCommandArguments,
+        message:
+            '$commandName requires 6 parameters: RefactoringKind, docVersion, filePath, offset, length, options (optional)',
+      ));
+    }
+
+    final kind = arguments[0] as String;
+    final path = arguments[1] as String;
+    final docVersion = arguments[2] as int?;
+    final offset = arguments[3] as int;
+    final length = arguments[4] as int;
+    final options = arguments[5] as Map<String, Object?>?;
+
+    return execute(path, kind, offset, length, options, cancellationToken,
+        reporter, docVersion);
+  }
+}
+
+/// Manages a running refactor to help ensure only one refactor runs at a time.
+class LspRefactorManager {
+  /// The cancellation token for the current in-progress refactor (or null).
+  CancelableToken? _currentRefactoringCancellationToken;
+
+  LspRefactorManager._();
+
+  /// Begins a new refactor, cancelling any other in-progress refactors.
+  void begin(CancelableToken cancelToken) {
+    _currentRefactoringCancellationToken?.cancel();
+    _currentRefactoringCancellationToken = cancelToken;
+  }
+
+  /// Marks a refactor as no longer current.
+  void end(CancelableToken cancelToken) {
+    if (_currentRefactoringCancellationToken == cancelToken) {
+      _currentRefactoringCancellationToken = null;
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
index 4d4f523..c4d005f 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
@@ -43,7 +43,9 @@
     }
 
     return result.mapResult((result) async {
-      final workspace = DartChangeWorkspace(server.currentSessions);
+      final workspace = DartChangeWorkspace(
+        await server.currentSessions,
+      );
       final processor =
           BulkFixProcessor(server.instrumentationService, workspace);
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
index 4de8bfe..3690cf5 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/perform_refactor.dart
@@ -2,59 +2,38 @@
 // 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/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_special.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
-import 'package:analysis_server/src/lsp/handlers/commands/simple_edit_handler.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/abstract_refactor.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/lsp/progress.dart';
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/ast/utilities.dart';
 
-final _manager = _RefactorManager();
-
-class PerformRefactorCommandHandler extends SimpleEditCommandHandler {
+class PerformRefactorCommandHandler extends AbstractRefactorCommandHandler {
   PerformRefactorCommandHandler(LspAnalysisServer server) : super(server);
 
   @override
   String get commandName => 'Perform Refactor';
 
   @override
-  Future<ErrorOr<void>> handle(List<Object?>? arguments,
-      ProgressReporter reporter, CancellationToken cancellationToken) async {
-    if (arguments == null ||
-        arguments.length != 6 ||
-        arguments[0] is! String || // kind
-        arguments[1] is! String || // path
-        (arguments[2] != null && arguments[2] is! int) || // docVersion
-        arguments[3] is! int || // offset
-        arguments[4] is! int || // length
-        // options
-        (arguments[5] != null && arguments[5] is! Map<String, dynamic>)) {
-      // length
-      return ErrorOr.error(ResponseError(
-        code: ServerErrorCodes.InvalidCommandArguments,
-        message:
-            '$commandName requires 6 parameters: RefactoringKind, docVersion, filePath, offset, length, options (optional)',
-      ));
-    }
-
-    final kind = arguments[0] as String;
-    final path = arguments[1] as String;
-    final docVersion = arguments[2] as int?;
-    final offset = arguments[3] as int;
-    final length = arguments[4] as int;
-    final options = arguments[5] as Map<String, Object?>?;
-
+  FutureOr<ErrorOr<void>> execute(
+    String path,
+    String kind,
+    int offset,
+    int length,
+    Map<String, Object?>? options,
+    CancellationToken cancellationToken,
+    ProgressReporter reporter,
+    int? docVersion,
+  ) async {
     final result = await requireResolvedUnit(path);
     return result.mapResult((result) async {
-      final refactoring = await _getRefactoring(
+      final refactoring = await getRefactoring(
           RefactoringKind(kind), result, offset, length, options);
       return refactoring.mapResult((refactoring) async {
         // If the token we were given is not cancellable, replace it with one that
@@ -64,7 +43,7 @@
         final cancelableToken = cancellationToken is CancelableToken
             ? cancellationToken
             : CancelableToken();
-        _manager.begin(cancelableToken);
+        manager.begin(cancelableToken);
 
         try {
           reporter.begin('Refactoring…');
@@ -98,131 +77,11 @@
 
           final edit = createWorkspaceEdit(server, change);
           return await sendWorkspaceEditToClient(edit);
-        } on InconsistentAnalysisException {
-          return fileModifiedError;
         } finally {
-          _manager.end(cancelableToken);
+          manager.end(cancelableToken);
           reporter.end();
         }
       });
     });
   }
-
-  Future<ErrorOr<Refactoring>> _getRefactoring(
-    RefactoringKind kind,
-    ResolvedUnitResult result,
-    int offset,
-    int length,
-    Map<String, dynamic>? options,
-  ) async {
-    switch (kind) {
-      case RefactoringKind.EXTRACT_METHOD:
-        final refactor = ExtractMethodRefactoring(
-            server.searchEngine, result, offset, length);
-
-        var preferredName = options != null ? options['name'] as String : null;
-        // checkInitialConditions will populate names with suggestions.
-        if (preferredName == null) {
-          await refactor.checkInitialConditions();
-          if (refactor.names.isNotEmpty) {
-            preferredName = refactor.names.first;
-          }
-        }
-        refactor.name = preferredName ?? 'newMethod';
-
-        // Defaults to true, but may be surprising if users didn't have an option
-        // to opt in.
-        refactor.extractAll = false;
-        return success(refactor);
-
-      case RefactoringKind.EXTRACT_LOCAL_VARIABLE:
-        final refactor = ExtractLocalRefactoring(result, offset, length);
-
-        var preferredName = options != null ? options['name'] as String : null;
-        // checkInitialConditions will populate names with suggestions.
-        if (preferredName == null) {
-          await refactor.checkInitialConditions();
-          if (refactor.names.isNotEmpty) {
-            preferredName = refactor.names.first;
-          }
-        }
-        refactor.name = preferredName ?? 'newVariable';
-
-        // Defaults to true, but may be surprising if users didn't have an option
-        // to opt in.
-        refactor.extractAll = false;
-        return success(refactor);
-
-      case RefactoringKind.EXTRACT_WIDGET:
-        final refactor = ExtractWidgetRefactoring(
-            server.searchEngine, result, offset, length);
-        // TODO(dantup): For now we don't have a good way to prompt the user
-        // for a method name so we just use a placeholder and expect them to
-        // rename (this is what C#/Omnisharp does), but there's an open request
-        // to handle this better.
-        // https://github.com/microsoft/language-server-protocol/issues/764
-        refactor.name =
-            options != null ? options['name'] as String : 'NewWidget';
-        return success(refactor);
-
-      case RefactoringKind.INLINE_LOCAL_VARIABLE:
-        final refactor =
-            InlineLocalRefactoring(server.searchEngine, result, offset);
-        return success(refactor);
-
-      case RefactoringKind.INLINE_METHOD:
-        final refactor =
-            InlineMethodRefactoring(server.searchEngine, result, offset);
-        return success(refactor);
-
-      case RefactoringKind.CONVERT_GETTER_TO_METHOD:
-        final node = NodeLocator(offset).searchWithin(result.unit);
-        final element = server.getElementOfNode(node);
-        if (element != null) {
-          if (element is PropertyAccessorElement) {
-            final refactor = ConvertGetterToMethodRefactoring(
-                server.searchEngine, result.session, element);
-            return success(refactor);
-          }
-        }
-        return error(ServerErrorCodes.InvalidCommandArguments,
-            'Location supplied to $commandName $kind is not longer valid');
-
-      case RefactoringKind.CONVERT_METHOD_TO_GETTER:
-        final node = NodeLocator(offset).searchWithin(result.unit);
-        final element = server.getElementOfNode(node);
-        if (element != null) {
-          if (element is ExecutableElement) {
-            final refactor = ConvertMethodToGetterRefactoring(
-                server.searchEngine, result.session, element);
-            return success(refactor);
-          }
-        }
-        return error(ServerErrorCodes.InvalidCommandArguments,
-            'Location supplied to $commandName $kind is not longer valid');
-
-      default:
-        return error(ServerErrorCodes.InvalidCommandArguments,
-            'Unknown RefactoringKind $kind was supplied to $commandName');
-    }
-  }
-}
-
-/// Manages a running refactor to help ensure only one refactor runs at a time.
-class _RefactorManager {
-  /// The cancellation token for the current in-progress refactor (or null).
-  CancelableToken? _currentRefactoringCancellationToken;
-
-  /// Begins a new refactor, cancelling any other in-progress refactors.
-  void begin(CancelableToken cancelToken) {
-    _currentRefactoringCancellationToken?.cancel();
-    _currentRefactoringCancellationToken = cancelToken;
-  }
-
-  /// Marks a refactor as no longer current.
-  void end(CancelableToken cancelToken) {
-    if (_currentRefactoringCancellationToken == cancelToken) {
-      _currentRefactoringCancellationToken = null;
-    }
-  }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
index ee853d6..7e3ecad 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/simple_edit_handler.dart
@@ -40,8 +40,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     final lineInfo = unit.lineInfo;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
index a4c2286..d10e4db 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/sort_members.dart
@@ -35,8 +35,8 @@
     final path = arguments.single as String;
     final docIdentifier = server.getVersionedDocumentIdentifier(path);
 
-    var driver = server.getAnalysisDriver(path);
-    final result = driver?.parseFileSync(path);
+    var session = await server.getAnalysisSession(path);
+    final result = session?.getParsedUnit(path);
 
     if (cancellationToken.isCancellationRequested) {
       return error(ErrorCodes.RequestCancelled, 'Request was cancelled');
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/validate_refactor.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/validate_refactor.dart
new file mode 100644
index 0000000..6c54c7c
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/validate_refactor.dart
@@ -0,0 +1,75 @@
+// 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/lsp_protocol/protocol_custom_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/abstract_refactor.dart';
+import 'package:analysis_server/src/lsp/handlers/handlers.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+import 'package:analysis_server/src/lsp/progress.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+
+class ValidateRefactorCommandHandler extends AbstractRefactorCommandHandler {
+  ValidateRefactorCommandHandler(LspAnalysisServer server) : super(server);
+
+  @override
+  String get commandName => 'Validate Refactor';
+
+  @override
+  FutureOr<ErrorOr<ValidateRefactorResult>> execute(
+    String path,
+    String kind,
+    int offset,
+    int length,
+    Map<String, Object?>? options,
+    CancellationToken cancellationToken,
+    ProgressReporter reporter,
+    int? docVersion,
+  ) async {
+    // In order to prevent clients asking users for a method/widget name and
+    // then failing because of something like "Cannot extract closure as method"
+    // this command allows the client to call `checkInitialConditions()` after
+    // the user selects the action but before prompting for a name.
+    //
+    // We do not perform that check when building the code actions because there
+    // will be no visibility of the reason why the refactor is not available to
+    // the user.
+
+    final result = await requireResolvedUnit(path);
+    return result.mapResult((result) async {
+      final refactoring = await getRefactoring(
+          RefactoringKind(kind), result, offset, length, options);
+      return refactoring.mapResult((refactoring) async {
+        // If the token we were given is not cancellable, replace it with one that
+        // is for the rest of this request, as a future refactor may need to cancel
+        // this request.
+        // The original token should be kept and also checked for cancellation.
+        final cancelableToken = cancellationToken is CancelableToken
+            ? cancellationToken
+            : CancelableToken();
+        manager.begin(cancelableToken);
+
+        try {
+          reporter.begin('Preparing Refactor…');
+          final status = await refactoring.checkInitialConditions();
+
+          if (status.hasError) {
+            return success(
+                ValidateRefactorResult(valid: false, message: status.message!));
+          }
+
+          return success(ValidateRefactorResult(valid: true));
+        } on InconsistentAnalysisException {
+          return failure(fileModifiedError);
+        } finally {
+          manager.end(cancelableToken);
+          reporter.end();
+        }
+      });
+    });
+  }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index 521927d..acff954 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -75,8 +75,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     final supportsApplyEdit = clientCapabilities.applyEdit;
@@ -169,12 +168,13 @@
   /// version of each document being modified so it's important to call this
   /// immediately after computing edits to ensure the document is not modified
   /// before the version number is read.
-  CodeAction _createAssistAction(SourceChange change) {
+  CodeAction _createAssistAction(SourceChange change, ResolvedUnitResult unit) {
     return CodeAction(
       title: change.message,
       kind: toCodeActionKind(change.id, CodeActionKind.Refactor),
       diagnostics: const [],
-      edit: createWorkspaceEdit(server, change),
+      edit: createWorkspaceEdit(server, change,
+          allowSnippets: true, filePath: unit.path, lineInfo: unit.lineInfo),
     );
   }
 
@@ -182,12 +182,14 @@
   /// version of each document being modified so it's important to call this
   /// immediately after computing edits to ensure the document is not modified
   /// before the version number is read.
-  CodeAction _createFixAction(SourceChange change, Diagnostic diagnostic) {
+  CodeAction _createFixAction(
+      SourceChange change, Diagnostic diagnostic, ResolvedUnitResult unit) {
     return CodeAction(
       title: change.message,
       kind: toCodeActionKind(change.id, CodeActionKind.QuickFix),
       diagnostics: [diagnostic],
-      edit: createWorkspaceEdit(server, change),
+      edit: createWorkspaceEdit(server, change,
+          allowSnippets: true, filePath: unit.path, lineInfo: unit.lineInfo),
     );
   }
 
@@ -253,7 +255,9 @@
     try {
       var context = DartAssistContextImpl(
         server.instrumentationService,
-        DartChangeWorkspace(server.currentSessions),
+        DartChangeWorkspace(
+          await server.currentSessions,
+        ),
         unit,
         offset,
         length,
@@ -267,12 +271,12 @@
 
       final codeActions = <CodeAction>[];
       codeActions.addAll(assists.map((assist) {
-        final action = _createAssistAction(assist.change);
+        final action = _createAssistAction(assist.change, unit);
         codeActionPriorities[action] = assist.kind.priority;
         return action;
       }));
       codeActions.addAll(pluginChanges.map((change) {
-        final action = _createAssistAction(change.change);
+        final action = _createAssistAction(change.change, unit);
         codeActionPriorities[action] = change.priority;
         return action;
       }));
@@ -344,7 +348,9 @@
         if (errorLine < range.start.line || errorLine > range.end.line) {
           continue;
         }
-        var workspace = DartChangeWorkspace(server.currentSessions);
+        var workspace = DartChangeWorkspace(
+          await server.currentSessions,
+        );
         var context = DartFixContextImpl(
             server.instrumentationService, workspace, unit, error);
         final fixes = await fixContributor.computeFixes(context);
@@ -357,7 +363,7 @@
           );
           codeActions.addAll(
             fixes.map((fix) {
-              final action = _createFixAction(fix.change, diagnostic);
+              final action = _createFixAction(fix.change, diagnostic, unit);
               codeActionPriorities[action] = fix.kind.priority;
               return action;
             }),
@@ -378,7 +384,7 @@
       final pluginFixActions = pluginFixes.expand(
         (fix) => fix.fixes.map((fixChange) {
           final action = _createFixAction(
-              fixChange.change, pluginErrorToDiagnostic(fix.error));
+              fixChange.change, pluginErrorToDiagnostic(fix.error), unit);
           codeActionPriorities[action] = fixChange.priority;
           return action;
         }),
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index f64f323..fed7a76 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -55,8 +55,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     final triggerCharacter = params.context?.triggerCharacter;
@@ -79,13 +78,31 @@
       final pathContext = server.resourceProvider.pathContext;
       final fileExtension = pathContext.extension(path.result);
 
+      final maxResults = server.clientConfiguration
+          .forResource(path.result)
+          .maxCompletionItems;
+
+      CompletionPerformance? completionPerformance;
       if (fileExtension == '.dart' && !unit.isError) {
+        final result = unit.result;
+        var performanceOperation = OperationPerformanceImpl('<root>');
+        completionPerformance = CompletionPerformance(
+          operation: performanceOperation,
+          path: result.path,
+          content: result.content,
+          offset: offset,
+        );
+        server.performanceStats.completion.add(completionPerformance);
+
         serverResultsFuture = _getServerDartItems(
           clientCapabilities,
-          unit.result,
+          result,
+          completionPerformance,
+          performanceOperation,
           offset,
           triggerCharacter,
           token,
+          maxResults: maxResults,
         );
       } else if (fileExtension == '.yaml') {
         YamlCompletionGenerator? generator;
@@ -125,14 +142,25 @@
       if (serverResults.isError) return serverResults;
       if (pluginResults.isError) return pluginResults;
 
+      final untruncatedItems = serverResults.result.items
+          .followedBy(pluginResults.result.items)
+          .toList();
+
+      final truncatedItems = untruncatedItems.length > maxResults
+          ? (untruncatedItems..sort(sortTextComparer)).sublist(0, maxResults)
+          : untruncatedItems;
+
+      // If we're tracing performance (only Dart), record the number of results
+      // after truncation.
+      completionPerformance?.transmittedSuggestionCount = truncatedItems.length;
+
       return success(CompletionList(
         // If any set of the results is incomplete, the whole batch must be
         // marked as such.
         isIncomplete: serverResults.result.isIncomplete ||
-            pluginResults.result.isIncomplete,
-        items: serverResults.result.items
-            .followedBy(pluginResults.result.items)
-            .toList(),
+            pluginResults.result.isIncomplete ||
+            truncatedItems.length != untruncatedItems.length,
+        items: truncatedItems,
       ));
     });
   }
@@ -233,25 +261,19 @@
   Future<ErrorOr<CompletionList>> _getServerDartItems(
     LspClientCapabilities capabilities,
     ResolvedUnitResult unit,
+    CompletionPerformance completionPerformance,
+    OperationPerformanceImpl operationPerformance,
     int offset,
     String? triggerCharacter,
-    CancellationToken token,
-  ) async {
+    CancellationToken token, {
+    required int maxResults,
+  }) async {
     final useSuggestionSets =
         suggestFromUnimportedLibraries && capabilities.applyEdit;
 
-    var performance = OperationPerformanceImpl('<root>');
-    return await performance.runAsync(
+    return await operationPerformance.runAsync(
       'request',
       (performance) async {
-        final completionPerformance = CompletionPerformance(
-          operation: performance,
-          path: unit.path,
-          content: unit.content,
-          offset: offset,
-        );
-        server.performanceStats.completion.add(completionPerformance);
-
         final completionRequest = DartCompletionRequest.forResolvedUnit(
           resolvedUnit: unit,
           offset: offset,
@@ -475,7 +497,9 @@
               .where((e) => fuzzyMatcher.score(e.filterText ?? e.label) > 0)
               .toList();
 
-          completionPerformance.suggestionCount = results.length;
+          // Transmitted count will be set after combining with plugins.
+          completionPerformance.computedSuggestionCount =
+              matchingResults.length;
 
           return success(
               CompletionList(isIncomplete: false, items: matchingResults));
@@ -621,4 +645,37 @@
 
     return true; // Any other trigger character can be handled always.
   }
+
+  /// Compares [CompletionItem]s by the `sortText` field, which is derived from
+  /// relevance.
+  ///
+  /// For items with the same relevance, shorter items are sorted first so that
+  /// truncation always removes longer items first (which can be included by
+  /// typing more of their characters).
+  static int sortTextComparer(CompletionItem item1, CompletionItem item2) {
+    // Note: It should never be the case that we produce items without sortText
+    // but if they're null, fall back to label which is what the client would do
+    // when sorting.
+    final item1Text = item1.sortText ?? item1.label;
+    final item2Text = item2.sortText ?? item2.label;
+
+    // If both items have the same text, this means they had the same relevance.
+    // In this case, sort by the length of the name ascending, so that shorter
+    // items are first. This is because longer items can be obtained by typing
+    // additional characters where shorter ones may not.
+    //
+    // For example, with:
+    //   - String aaa1;
+    //   - String aaa2;
+    //   - ...
+    //   - String aaa(N); // up to past the truncation amount
+    //   - String aaa;    // declared last, same prefix
+    //
+    // Typing 'aaa' should not allow 'aaa' to be truncated before 'aaa1'.
+    if (item1Text == item2Text) {
+      return item1.label.length.compareTo(item2.label.length);
+    }
+
+    return item1Text.compareTo(item2Text);
+  }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
index fa99c2b..ef497f6 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion_resolve.dart
@@ -66,8 +66,7 @@
     _latestCompletionItem = item;
     while (item == _latestCompletionItem && timer.elapsed < timeout) {
       try {
-        final analysisDriver = server.getAnalysisDriver(file);
-        final session = analysisDriver?.currentSession;
+        final session = await server.getAnalysisSession(file);
 
         // We shouldn't not get a driver/session, but if we did perhaps the file
         // was removed from the analysis set so assume the request is no longer
@@ -199,8 +198,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     final file = data.file;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
index 36aff2e..1383b80 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
@@ -61,7 +61,7 @@
       computeDartNavigation(
           server.resourceProvider, collector, unit, offset, 0);
       if (supportsLocationLink) {
-        _updateTargetsWithCodeLocations(collector);
+        await _updateTargetsWithCodeLocations(collector);
       }
       collector.createRegions();
     }
@@ -76,8 +76,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     final supportsLocationLink = clientCapabilities.definitionLocationLink;
@@ -180,7 +179,7 @@
   }
 
   /// Get the location of the code (excluding leading doc comments) for this element.
-  protocol.Location? _getCodeLocation(Element element) {
+  Future<protocol.Location?> _getCodeLocation(Element element) async {
     var codeElement = element;
     // For synthetic getters created for fields, we need to access the associated
     // variable to get the codeOffset/codeLength.
@@ -206,7 +205,7 @@
     // Read the declaration so we can get the offset after the doc comments.
     // TODO(dantup): Skip this for parts (getParsedLibrary will throw), but find
     // a better solution.
-    final declaration = _parsedDeclaration(codeElement);
+    final declaration = await _parsedDeclaration(codeElement);
     var node = declaration?.node;
     if (node is VariableDeclaration) {
       node = node.parent;
@@ -244,9 +243,11 @@
         : null;
   }
 
-  void _updateTargetsWithCodeLocations(NavigationCollectorImpl collector) {
+  Future<void> _updateTargetsWithCodeLocations(
+    NavigationCollectorImpl collector,
+  ) async {
     for (var targetToUpdate in collector.targetsToUpdate) {
-      var codeLocation = _getCodeLocation(targetToUpdate.element);
+      var codeLocation = await _getCodeLocation(targetToUpdate.element);
       if (codeLocation != null) {
         targetToUpdate.target
           ..codeOffset = codeLocation.offset
@@ -255,7 +256,9 @@
     }
   }
 
-  static ElementDeclarationResult? _parsedDeclaration(Element element) {
+  static Future<ElementDeclarationResult?> _parsedDeclaration(
+    Element element,
+  ) async {
     var session = element.session;
     if (session == null) {
       return null;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
index 06fdd44..ed196a1 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
@@ -123,6 +123,7 @@
         SourceRange(editStart.result, editEnd.result - editStart.result);
 
     final sessionHelper = AnalysisSessionHelper(unit.session);
+    final analysisContext = unit.session.analysisContext;
     final flutter = Flutter.instance;
     final colorType = await sessionHelper.getClass(flutter.widgetsUri, 'Color');
     if (colorType == null) {
@@ -132,6 +133,13 @@
       return success([]);
     }
 
+    // If this file is outside of analysis roots, we cannot build edits for it
+    // so return null to signal to the client that it should not try to modify
+    // the source.
+    if (!analysisContext.contextRoot.isAnalyzed(unit.path)) {
+      return success([]);
+    }
+
     final colorValue = _colorValueForComponents(alpha, red, green, blue);
     final colorValueHex =
         '0x${colorValue.toRadixString(16).toUpperCase().padLeft(8, '0')}';
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
index 02c8a93..cdc6fa5 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_execute_command.dart
@@ -10,6 +10,7 @@
 import 'package:analysis_server/src/lsp/handlers/commands/perform_refactor.dart';
 import 'package:analysis_server/src/lsp/handlers/commands/send_workspace_edit.dart';
 import 'package:analysis_server/src/lsp/handlers/commands/sort_members.dart';
+import 'package:analysis_server/src/lsp/handlers/commands/validate_refactor.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
 import 'package:analysis_server/src/lsp/progress.dart';
@@ -25,6 +26,7 @@
           Commands.organizeImports: OrganizeImportsCommandHandler(server),
           Commands.fixAll: FixAllCommandHandler(server),
           Commands.performRefactor: PerformRefactorCommandHandler(server),
+          Commands.validateRefactor: ValidateRefactorCommandHandler(server),
           Commands.sendWorkspaceEdit: SendWorkspaceEditCommandHandler(server),
         },
         super(server);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
index 1149fff..a14bb7d 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_folding.dart
@@ -30,7 +30,7 @@
       final partialResults = <List<FoldingRegion>>[];
       LineInfo? lineInfo;
 
-      final unit = server.getParsedUnit(path);
+      final unit = await server.getParsedUnit(path);
       if (unit != null) {
         lineInfo = unit.lineInfo;
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
index 84da8f2..528c52b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_on_type.dart
@@ -20,14 +20,14 @@
   LspJsonHandler<DocumentOnTypeFormattingParams> get jsonHandler =>
       DocumentOnTypeFormattingParams.jsonHandler;
 
-  ErrorOr<List<TextEdit>?> formatFile(String path) {
+  Future<ErrorOr<List<TextEdit>?>> formatFile(String path) async {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
       return error(
           ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
-    final result = server.getParsedUnit(path);
+    final result = await server.getParsedUnit(path);
     if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
index f28ef15..44143fc 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_format_range.dart
@@ -20,14 +20,14 @@
   LspJsonHandler<DocumentRangeFormattingParams> get jsonHandler =>
       DocumentRangeFormattingParams.jsonHandler;
 
-  ErrorOr<List<TextEdit>?> formatRange(String path, Range range) {
+  Future<ErrorOr<List<TextEdit>?>> formatRange(String path, Range range) async {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
       return error(
           ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
-    final result = server.getParsedUnit(path);
+    final result = await server.getParsedUnit(path);
     if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
index 6ff4313..ea279ad 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
@@ -20,14 +20,14 @@
   LspJsonHandler<DocumentFormattingParams> get jsonHandler =>
       DocumentFormattingParams.jsonHandler;
 
-  ErrorOr<List<TextEdit>?> formatFile(String path) {
+  Future<ErrorOr<List<TextEdit>?>> formatFile(String path) async {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
       return error(
           ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
-    final result = server.getParsedUnit(path);
+    final result = await server.getParsedUnit(path);
     if (result == null || result.errors.isNotEmpty) {
       return success(null);
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_select_range.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_select_range.dart
index 193002f..0a97e4d 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_select_range.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_select_range.dart
@@ -39,7 +39,7 @@
         return success(null);
       }
 
-      final unit = requireUnresolvedUnit(path);
+      final unit = await requireUnresolvedUnit(path);
       final positions = params.positions;
       final offsets = await unit.mapResult((unit) =>
           ErrorOr.all(positions.map((pos) => toOffset(unit.lineInfo, pos))));
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
index 25a78ca..cb0344b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_signature_help.dart
@@ -32,8 +32,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     // If triggered automatically by pressing the trigger character, we will
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
index abc53cf..ceb4204 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
@@ -36,6 +36,7 @@
 import 'package:analysis_server/src/lsp/handlers/handler_shutdown.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_signature_help.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_text_document_changes.dart';
+import 'package:analysis_server/src/lsp/handlers/handler_type_definition.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_will_rename_files.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_workspace_configuration.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_workspace_symbols.dart';
@@ -82,6 +83,7 @@
     registerHandler(DocumentColorPresentationHandler(server));
     registerHandler(SignatureHelpHandler(server));
     registerHandler(DefinitionHandler(server));
+    registerHandler(TypeDefinitionHandler(server));
     registerHandler(SuperHandler(server));
     registerHandler(ReferencesHandler(server));
     registerHandler(ImplementationHandler(server));
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
new file mode 100644
index 0000000..f32c4c1
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
@@ -0,0 +1,166 @@
+// 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/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_special.dart';
+import 'package:analysis_server/src/lsp/handlers/handlers.dart';
+import 'package:analysis_server/src/lsp/lsp_analysis_server.dart';
+import 'package:analysis_server/src/lsp/mapping.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/dart/element/element.dart' show ElementImpl;
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
+
+typedef _LocationsOrLinks = Either2<List<Location>, List<LocationLink>>;
+
+class TypeDefinitionHandler
+    extends MessageHandler<TypeDefinitionParams, _LocationsOrLinks>
+    with LspPluginRequestHandlerMixin {
+  static const _emptyResult = _LocationsOrLinks.t1([]);
+
+  TypeDefinitionHandler(LspAnalysisServer server) : super(server);
+
+  @override
+  Method get handlesMessage => Method.textDocument_typeDefinition;
+
+  @override
+  LspJsonHandler<TypeDefinitionParams> get jsonHandler =>
+      TypeDefinitionParams.jsonHandler;
+
+  @override
+  Future<ErrorOr<_LocationsOrLinks>> handle(
+      TypeDefinitionParams params, CancellationToken token) async {
+    if (!isDartDocument(params.textDocument)) {
+      return success(_emptyResult);
+    }
+
+    final clientCapabilities = server.clientCapabilities;
+    if (clientCapabilities == null) {
+      // This should not happen unless a client misbehaves.
+      return serverNotInitializedError;
+    }
+
+    /// Whether the client supports `LocationLink` results instead of the
+    /// original `Location`. `LocationLink`s can include an additional `Range`
+    /// to distinguish between codeRange and nameRange (selectionRange), and
+    /// also an `originSelectionRange` that tells the client which range the
+    /// result is valid for.
+    final supportsLocationLink = clientCapabilities.typeDefinitionLocationLink;
+    final pos = params.position;
+    final path = pathOfDoc(params.textDocument);
+
+    return path.mapResult((path) async {
+      final result = await server.getResolvedUnit(path);
+      if (result == null) {
+        return success(_emptyResult);
+      }
+
+      final offset = toOffset(result.lineInfo, pos);
+      return offset.mapResult((offset) async {
+        final node = NodeLocator(offset).searchWithin(result.unit);
+        if (node == null) {
+          return success(_emptyResult);
+        }
+
+        final type = node is Expression ? _getType(node) : null;
+        final element = type?.element;
+        if (element is! ElementImpl) {
+          return success(_emptyResult);
+        }
+
+        // Obtain a `LineInfo` for the targets file to map offsets.
+        final targetUnitElement =
+            element.thisOrAncestorOfType<CompilationUnitElement>();
+        final targetLineInfo = targetUnitElement?.lineInfo;
+        if (targetLineInfo == null) {
+          return success(_emptyResult);
+        }
+
+        final converter = AnalyzerConverter();
+        final location = converter.locationFromElement(element);
+        if (location == null) {
+          return success(_emptyResult);
+        }
+
+        if (supportsLocationLink) {
+          return success(_LocationsOrLinks.t2([
+            _toLocationLink(
+                result.lineInfo, targetLineInfo, node, element, location)
+          ]));
+        } else {
+          return success(
+              _LocationsOrLinks.t1([_toLocation(location, targetLineInfo)]));
+        }
+      });
+    });
+  }
+
+  /// Creates an LSP [Location] for the server [location].
+  Location _toLocation(plugin.Location location, LineInfo lineInfo) {
+    return Location(
+      uri: Uri.file(location.file).toString(),
+      range: toRange(lineInfo, location.offset, location.length),
+    );
+  }
+
+  /// Creates an LSP [LocationLink] for the server [targetLocation].
+  ///
+  /// Uses [originLineInfo] and [originNode] to compute `originSelectionRange`
+  /// and [targetLineInfo] and [targetElement] for code ranges.
+  LocationLink _toLocationLink(
+    LineInfo originLineInfo,
+    LineInfo targetLineInfo,
+    AstNode originNode,
+    ElementImpl targetElement,
+    plugin.Location targetLocation,
+  ) {
+    final nameRange =
+        toRange(targetLineInfo, targetLocation.offset, targetLocation.length);
+
+    final codeOffset = targetElement.codeOffset;
+    final codeLength = targetElement.codeLength;
+    final codeRange = codeOffset != null && codeLength != null
+        ? toRange(targetLineInfo, codeOffset, codeLength)
+        : nameRange;
+
+    return LocationLink(
+      originSelectionRange:
+          toRange(originLineInfo, originNode.offset, originNode.length),
+      targetUri: Uri.file(targetLocation.file).toString(),
+      targetRange: codeRange,
+      targetSelectionRange: nameRange,
+    );
+  }
+
+  /// Returns the [DartType] most appropriate for navigating to from [node] when
+  /// invoking Go to Type Definition.
+  static DartType? _getType(Expression node) {
+    if (node is SimpleIdentifier) {
+      final element = node.staticElement;
+      if (element is ClassElement) {
+        return element.thisType;
+      } else if (element is VariableElement) {
+        if (node.inDeclarationContext()) {
+          return element.type;
+        }
+        final parent = node.parent?.parent;
+        if (parent is NamedExpression && parent.name.label == node) {
+          return element.type;
+        }
+      } else if (node.inSetterContext()) {
+        final writeElement = node.writeElement;
+        if (writeElement is PropertyAccessorElement) {
+          return writeElement.variable.type;
+        }
+      }
+    }
+
+    return node.staticType;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_symbols.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_symbols.dart
index 435013c..31ea25d 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_symbols.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_workspace_symbols.dart
@@ -25,8 +25,7 @@
     final clientCapabilities = server.clientCapabilities;
     if (clientCapabilities == null) {
       // This should not happen unless a client misbehaves.
-      return error(ErrorCodes.ServerNotInitialized,
-          'Requests not before server is initilized');
+      return serverNotInitializedError;
     }
 
     // Respond to empty queries with an empty list. The spec says this should
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
index ddd82dc..9d3225d 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
@@ -44,6 +44,9 @@
   final fileModifiedError = error<R>(ErrorCodes.ContentModified,
       'Document was modified before operation completed', null);
 
+  final serverNotInitializedError = error<R>(ErrorCodes.ServerNotInitialized,
+      'Request not valid before server is initialized');
+
   LspAnalysisServer get server;
 
   bool fileHasBeenModified(String path, num? clientVersion) {
@@ -83,8 +86,8 @@
     return success(result);
   }
 
-  ErrorOr<ParsedUnitResult> requireUnresolvedUnit(String path) {
-    final result = server.getParsedUnit(path);
+  Future<ErrorOr<ParsedUnitResult>> requireUnresolvedUnit(String path) async {
+    final result = await server.getParsedUnit(path);
     if (result == null) {
       if (server.isAnalyzed(path)) {
         // If the file was being analyzed and we got a null result, that usually
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index d0300bb..12284b0 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -38,6 +38,7 @@
 import 'package:analysis_server/src/utilities/process.dart';
 import 'package:analyzer/dart/analysis/context_locator.dart';
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -355,6 +356,13 @@
         } else {
           showErrorMessageToUser('Unknown message type');
         }
+      } on InconsistentAnalysisException {
+        sendErrorResponse(
+            message,
+            ResponseError(
+              code: ErrorCodes.ContentModified,
+              message: 'Document was modified before operation completed',
+            ));
       } catch (error, stackTrace) {
         final errorMessage = message is ResponseMessage
             ? 'An error occurred while handling the response to request ${message.id}'
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 9026e05..fa6a104 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -119,51 +119,74 @@
   return edit;
 }
 
-/// Creates a [lsp.WorkspaceEdit] from a [server.SourceChange] that can include
-/// experimental [server.SnippetTextEdit]s if the client has indicated support
-/// for these in the experimental section of their client capabilities.
+/// Creates a [lsp.WorkspaceEdit] from a [server.SourceChange].
+///
+/// Can return experimental [server.SnippetTextEdit]s if the following are true:
+/// - the client has indicated support for in the experimental section of their
+///   client capabilities, and
+/// - [allowSnippets] is true, and
+/// - [change] contains only a single edit to the single file [filePath]
+/// - [lineInfo] is provided (which should be for the single edited file)
 ///
 /// Note: This code will fetch the version of each document being modified so
 /// it's important to call this immediately after computing edits to ensure
 /// the document is not modified before the version number is read.
 lsp.WorkspaceEdit createWorkspaceEdit(
-    lsp.LspAnalysisServer server, server.SourceChange change) {
+  lsp.LspAnalysisServer server,
+  server.SourceChange change, {
+  // The caller must specify whether snippets are valid here for where they're
+  // sending this edit. Right now, support is limited to CodeActions.
+  bool allowSnippets = false,
+  String? filePath,
+  LineInfo? lineInfo,
+}) {
   // In order to return snippets, we must ensure we are only modifying a single
-  // existing file with a single edit and that there is a linked edit group with
-  // only one position and no suggestions.
-  if (!server.clientCapabilities!.experimentalSnippetTextEdit ||
+  // existing file with a single edit and that there is either a selection or a
+  // linked edit group (otherwise there's no value in snippets).
+  if (!allowSnippets ||
+      !server.clientCapabilities!.experimentalSnippetTextEdit ||
+      !server.clientCapabilities!.documentChanges ||
+      filePath == null ||
+      lineInfo == null ||
       change.edits.length != 1 ||
-      change.edits.first.fileStamp == -1 || // new file
-      change.edits.first.edits.length != 1 ||
-      change.linkedEditGroups.isEmpty ||
-      change.linkedEditGroups.first.positions.length != 1 ||
-      change.linkedEditGroups.first.suggestions.isNotEmpty) {
+      change.edits.single.fileStamp == -1 || // new file
+      change.edits.single.file != filePath ||
+      change.edits.single.edits.length != 1 ||
+      (change.selection == null && change.linkedEditGroups.isEmpty)) {
     return createPlainWorkspaceEdit(server, change.edits);
   }
 
-  // Additionally, the selection must fall within the edit offset.
-  final edit = change.edits.first.edits.first;
-  final selectionOffset = change.linkedEditGroups.first.positions.first.offset;
-  final selectionLength = change.linkedEditGroups.first.length;
+  final fileEdit = change.edits.single;
+  final snippetEdits = toSnippetTextEdits(
+    fileEdit.file,
+    fileEdit,
+    change.linkedEditGroups,
+    lineInfo,
+    selectionOffset: change.selection?.offset,
+  );
 
-  if (selectionOffset < edit.offset ||
-      selectionOffset + selectionLength > edit.offset + edit.length) {
-    return createPlainWorkspaceEdit(server, change.edits);
-  }
+  // Compile the edits into a TextDocumentEdit for this file.
+  final textDocumentEdit = lsp.TextDocumentEdit(
+    textDocument: server.getVersionedDocumentIdentifier(fileEdit.file),
+    edits: snippetEdits
+        .map((e) => Either3<lsp.SnippetTextEdit, lsp.AnnotatedTextEdit,
+            lsp.TextEdit>.t1(e))
+        .toList(),
+  );
 
-  return toWorkspaceEdit(
-      server.clientCapabilities!,
-      change.edits
-          .map((e) => FileEditInformation(
-                server.getVersionedDocumentIdentifier(e.file),
-                // We should never produce edits for a file with no LineInfo.
-                server.getLineInfo(e.file)!,
-                e.edits,
-                selectionOffsetRelative: selectionOffset - edit.offset,
-                selectionLength: selectionLength,
-                newFile: e.fileStamp == -1,
-              ))
-          .toList());
+  // Convert to the union that documentChanges require.
+  final textDocumentEditsAsUnion = Either4<lsp.TextDocumentEdit, lsp.CreateFile,
+      lsp.RenameFile, lsp.DeleteFile>.t1(textDocumentEdit);
+
+  // Convert to the union that documentChanges is.
+  final documentChanges = Either2<
+      List<lsp.TextDocumentEdit>,
+      List<
+          Either4<lsp.TextDocumentEdit, lsp.CreateFile, lsp.RenameFile,
+              lsp.DeleteFile>>>.t2([textDocumentEditsAsUnion]);
+
+  /// Add the textDocumentEdit to a WorkspaceEdit.
+  return lsp.WorkspaceEdit(documentChanges: documentChanges);
 }
 
 lsp.CompletionItemKind? declarationKindToCompletionItemKind(
@@ -323,8 +346,9 @@
     // we can assume if an item is callable it's probably being used in a context
     // that can invoke it.
     isInvocation: isCallable,
-    defaultArgumentListString: declaration.defaultArgumentListString,
-    defaultArgumentListTextRanges: declaration.defaultArgumentListTextRanges,
+    requiredArgumentListString: declaration.defaultArgumentListString,
+    requiredArgumentListTextRanges: declaration.defaultArgumentListTextRanges,
+    hasOptionalParameters: declaration.parameterNames?.isNotEmpty ?? false,
     completion: completion,
     selectionOffset: 0,
     selectionLength: 0,
@@ -1156,8 +1180,9 @@
     completeFunctionCalls: completeFunctionCalls,
     isCallable: isCallable,
     isInvocation: isInvocation,
-    defaultArgumentListString: suggestion.defaultArgumentListString,
-    defaultArgumentListTextRanges: suggestion.defaultArgumentListTextRanges,
+    requiredArgumentListString: suggestion.defaultArgumentListString,
+    requiredArgumentListTextRanges: suggestion.defaultArgumentListTextRanges,
+    hasOptionalParameters: suggestion.parameterNames?.isNotEmpty ?? false,
     completion: suggestion.completion,
     selectionOffset: suggestion.selectionOffset,
     selectionLength: suggestion.selectionLength,
@@ -1641,8 +1666,9 @@
   required bool completeFunctionCalls,
   required bool isCallable,
   required bool isInvocation,
-  required String? defaultArgumentListString,
-  required List<int>? defaultArgumentListTextRanges,
+  required String? requiredArgumentListString,
+  required List<int>? requiredArgumentListTextRanges,
+  required bool hasOptionalParameters,
   required String completion,
   required int selectionOffset,
   required int selectionLength,
@@ -1669,13 +1695,16 @@
         isInvocation) {
       insertTextFormat = lsp.InsertTextFormat.Snippet;
       final hasRequiredParameters =
-          (defaultArgumentListTextRanges?.length ?? 0) > 0;
+          requiredArgumentListTextRanges?.isNotEmpty ?? false;
       final functionCallSuffix =
-          hasRequiredParameters && defaultArgumentListString != null
+          hasRequiredParameters && requiredArgumentListString != null
               ? buildSnippetStringWithTabStops(
-                  defaultArgumentListString, defaultArgumentListTextRanges)
-              // No required params still gets a final tab stop in the parens.
-              : SnippetBuilder.finalTabStop;
+                  requiredArgumentListString, requiredArgumentListTextRanges)
+              // Optional params still gets a final tab stop in the parens.
+              : hasOptionalParameters
+                  ? SnippetBuilder.finalTabStop
+                  // And no parameters at all we skip the tabstop in the parens.
+                  : '';
       insertText =
           '${SnippetBuilder.escapeSnippetPlainText(insertText)}($functionCallSuffix)';
     } else if (selectionOffset != 0 &&
diff --git a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
index 0b28c2c..9146784 100644
--- a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
+++ b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
@@ -39,6 +39,7 @@
     Method.textDocument_rename,
     Method.textDocument_foldingRange,
     Method.textDocument_selectionRange,
+    Method.textDocument_typeDefinition,
     // workspace.fileOperations covers all file operation methods but we only
     // support this one.
     Method.workspace_willRenameFiles,
@@ -109,6 +110,9 @@
   bool get textSync =>
       _capabilities.textDocument?.synchronization?.dynamicRegistration ?? false;
 
+  bool get typeDefinition =>
+      _capabilities.textDocument?.typeDefinition?.dynamicRegistration ?? false;
+
   bool get typeFormatting =>
       _capabilities.textDocument?.onTypeFormatting?.dynamicRegistration ??
       false;
@@ -450,6 +454,13 @@
       TextDocumentRegistrationOptions(documentSelector: fullySupportedTypes),
     );
     register(
+      dynamicRegistrations.typeDefinition,
+      Method.textDocument_typeDefinition,
+      TextDocumentRegistrationOptions(
+        documentSelector: [dartFiles], // This one is currently Dart-specific
+      ),
+    );
+    register(
       dynamicRegistrations.implementation,
       Method.textDocument_implementation,
       TextDocumentRegistrationOptions(documentSelector: fullySupportedTypes),
diff --git a/pkg/analysis_server/lib/src/lsp/snippets.dart b/pkg/analysis_server/lib/src/lsp/snippets.dart
index e88dcaa..0c9d5c6 100644
--- a/pkg/analysis_server/lib/src/lsp/snippets.dart
+++ b/pkg/analysis_server/lib/src/lsp/snippets.dart
@@ -85,6 +85,11 @@
         // Use the index as an ID to keep all related positions together (so
         // the remain "linked").
         linkedGroupId: index,
+        // If there is no selection, no tabstops, and only a single edit group
+        // allow it to be the final tabstop.
+        isFinal: selectionOffset == null &&
+            (tabStopOffsetLengthPairs?.isEmpty ?? false) &&
+            editGroups?.length == 1,
       ),
     );
   }
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_locator.dart b/pkg/analysis_server/lib/src/plugin/plugin_locator.dart
index 4453aea..f5e1247 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_locator.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_locator.dart
@@ -14,9 +14,6 @@
   /// directory.
   static const String defaultPluginFolderName = 'analyzer_plugin';
 
-  /// The name of the `pubspec.yaml` file.
-  static const String pubspecFileName = 'pubspec.yaml';
-
   /// The name of the `tools` directory, in which the default plugin directory
   /// is located.
   static const String toolsFolderName = 'tools';
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index fa6eee9..ae25ec1 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -14,6 +14,8 @@
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/glob.dart';
 import 'package:analyzer/src/workspace/bazel.dart';
 import 'package:analyzer/src/workspace/gn.dart';
@@ -106,6 +108,13 @@
   String toString() => message;
 }
 
+class PluginFiles {
+  final File execution;
+  final File packages;
+
+  PluginFiles(this.execution, this.packages);
+}
+
 /// Information about a single plugin.
 abstract class PluginInfo {
   /// The object used to manage the receiving and sending of notifications.
@@ -314,9 +323,9 @@
     var isNew = false;
     if (plugin == null) {
       isNew = true;
-      List<String> pluginPaths;
+      PluginFiles pluginFiles;
       try {
-        pluginPaths = pathsFor(path);
+        pluginFiles = filesFor(path);
       } catch (exception, stackTrace) {
         plugin = DiscoveredPluginInfo(
             path, '', '', notificationManager, instrumentationService);
@@ -324,8 +333,12 @@
         _pluginMap[path] = plugin;
         return;
       }
-      plugin = DiscoveredPluginInfo(path, pluginPaths[0], pluginPaths[1],
-          notificationManager, instrumentationService);
+      plugin = DiscoveredPluginInfo(
+          path,
+          pluginFiles.execution.path,
+          pluginFiles.packages.path,
+          notificationManager,
+          instrumentationService);
       _pluginMap[path] = plugin;
       try {
         var session = await plugin.start(byteStorePath, sdkPath);
@@ -412,24 +425,24 @@
     return responses;
   }
 
-  /// Return the execution path and .packages path associated with the plugin at
-  /// the given [path]. Throw a [PluginException] if there is a problem that
-  /// prevents the plugin from being executing.
+  /// Return the files associated with the plugin at the given [pluginPath].
+  /// Throw a [PluginException] if there is a problem that prevents the plugin
+  /// from being executing.
   @visibleForTesting
-  List<String> pathsFor(String pluginPath) {
+  PluginFiles filesFor(String pluginPath) {
     var pluginFolder = resourceProvider.getFolder(pluginPath);
-    var pubspecFile = pluginFolder.getChildAssumingFile('pubspec.yaml');
+    var pubspecFile = pluginFolder.getChildAssumingFile(file_paths.pubspecYaml);
     if (!pubspecFile.exists) {
       // If there's no pubspec file, then we don't need to copy the package
       // because we won't be running pub.
-      return _computePaths(pluginFolder);
+      return _computeFiles(pluginFolder);
     }
     var workspace = BazelWorkspace.find(resourceProvider, pluginFolder.path) ??
         GnWorkspace.find(resourceProvider, pluginFolder.path);
     if (workspace != null) {
       // Similarly, we won't be running pub if we're in a workspace because
       // there is exactly one version of each package.
-      return _computePaths(pluginFolder, workspace: workspace);
+      return _computeFiles(pluginFolder, workspace: workspace);
     }
     //
     // Copy the plugin directory to a unique subdirectory of the plugin
@@ -446,10 +459,10 @@
     if (parentFolder.exists) {
       var executionFolder =
           parentFolder.getChildAssumingFolder(pluginFolder.shortName);
-      return _computePaths(executionFolder, pubCommand: 'upgrade');
+      return _computeFiles(executionFolder, pubCommand: 'upgrade');
     }
     var executionFolder = pluginFolder.copyTo(parentFolder);
-    return _computePaths(executionFolder, pubCommand: 'get');
+    return _computeFiles(executionFolder, pubCommand: 'get');
   }
 
   /// Return a list of all of the plugins that are currently associated with the
@@ -602,11 +615,11 @@
     }));
   }
 
-  /// Compute the paths to be returned by the enclosing method given that the
+  /// Compute the files to be returned by the enclosing method given that the
   /// plugin should exist in the given [pluginFolder].
   ///
   /// Runs pub if [pubCommand] is provided and not null.
-  List<String> _computePaths(Folder pluginFolder,
+  PluginFiles _computeFiles(Folder pluginFolder,
       {String? pubCommand, Workspace? workspace}) {
     var pluginFile = pluginFolder
         .getChildAssumingFolder('bin')
@@ -615,7 +628,9 @@
       throw PluginException('File "${pluginFile.path}" does not exist.');
     }
     String? reason;
-    File? packagesFile = pluginFolder.getChildAssumingFile('.packages');
+    File? packagesFile = pluginFolder
+        .getChildAssumingFolder(file_paths.dotDartTool)
+        .getChildAssumingFile(file_paths.packageConfigJson);
     if (pubCommand != null) {
       var vmPath = Platform.executable;
       var pubPath = path.join(path.dirname(vmPath), 'pub');
@@ -647,7 +662,8 @@
         packagesFile =
             _createPackagesFile(pluginFolder, workspace.packageUriResolver);
         if (packagesFile == null) {
-          reason = 'Could not create .packages file in workspace $workspace.';
+          var name = file_paths.packageConfigJson;
+          reason = 'Could not create $name file in workspace $workspace.';
         }
       } else {
         reason = 'Could not create "${packagesFile.path}".';
@@ -658,7 +674,7 @@
       reason ??= 'Could not create packages file for an unknown reason.';
       throw PluginException(reason);
     }
-    return <String>[pluginFile.path, packagesFile.path];
+    return PluginFiles(pluginFile, packagesFile);
   }
 
   WatchEventType _convertChangeType(watcher.ChangeType type) {
@@ -678,53 +694,73 @@
     return WatchEvent(_convertChangeType(watchEvent.type), watchEvent.path);
   }
 
-  /// Return a temporary `.packages` file that is appropriate for the plugin in
-  /// the given [pluginFolder]. The [packageUriResolver] is used to determine
-  /// the location of the packages that need to be included in the packages
-  /// file.
+  /// Return a temporary `package_config.json` file that is appropriate for
+  /// the plugin in the given [pluginFolder]. The [packageUriResolver] is
+  /// used to determine the location of the packages that need to be included
+  /// in the packages file.
   File? _createPackagesFile(
       Folder pluginFolder, UriResolver packageUriResolver) {
     var pluginPath = pluginFolder.path;
     var stateFolder = resourceProvider.getStateLocation('.plugin_manager')!;
-    var stateName = _uniqueDirectoryName(pluginPath) + '.packages';
+    var stateName = '${_uniqueDirectoryName(pluginPath)}.packages';
     var packagesFile = stateFolder.getChildAssumingFile(stateName);
     if (!packagesFile.exists) {
-      var pluginPubspec = pluginFolder.getChildAssumingFile('pubspec.yaml');
+      var pluginPubspec =
+          pluginFolder.getChildAssumingFile(file_paths.pubspecYaml);
       if (!pluginPubspec.exists) {
         return null;
       }
 
       try {
-        var visitedPackages = <String, String>{};
+        var visitedPackageNames = <String>{};
+        var packages = <_Package>[];
         var context = resourceProvider.pathContext;
-        visitedPackages[context.basename(pluginPath)] =
-            context.join(pluginFolder.path, 'lib');
+        packages.add(
+          _Package(
+            context.basename(pluginPath),
+            pluginFolder,
+          ),
+        );
         var pubspecFiles = <File>[];
         pubspecFiles.add(pluginPubspec);
         while (pubspecFiles.isNotEmpty) {
           var pubspecFile = pubspecFiles.removeLast();
-          for (var packageName in _readDependecies(pubspecFile)) {
-            if (!visitedPackages.containsKey(packageName)) {
+          for (var packageName in _readDependencies(pubspecFile)) {
+            if (visitedPackageNames.add(packageName)) {
               var uri = Uri.parse('package:$packageName/$packageName.dart');
               var packageSource = packageUriResolver.resolveAbsolute(uri);
               if (packageSource != null) {
-                var libDirPath = context.dirname(packageSource.fullName);
-                visitedPackages[packageName] = libDirPath;
-                var pubspecPath =
-                    context.join(context.dirname(libDirPath), 'pubspec.yaml');
-                pubspecFiles.add(resourceProvider.getFile(pubspecPath));
+                var packageRoot = resourceProvider
+                    .getFile(packageSource.fullName)
+                    .parent
+                    .parent;
+                packages.add(
+                  _Package(packageName, packageRoot),
+                );
+                pubspecFiles.add(
+                  packageRoot.getChildAssumingFile(file_paths.pubspecYaml),
+                );
               }
             }
           }
         }
 
-        var buffer = StringBuffer();
-        visitedPackages.forEach((String name, String path) {
-          buffer.write(name);
-          buffer.write(':');
-          buffer.writeln(Uri.file(path));
-        });
-        packagesFile.writeAsStringSync(buffer.toString());
+        packages.sort((a, b) => a.name.compareTo(b.name));
+
+        var packageConfigBuilder = PackageConfigFileBuilder();
+        for (var package in packages) {
+          packageConfigBuilder.add(
+            name: package.name,
+            rootPath: package.root.path,
+          );
+        }
+        packagesFile.writeAsStringSync(
+          packageConfigBuilder.toContent(
+            toUriStr: (path) {
+              return resourceProvider.pathContext.toUri(path).toString();
+            },
+          ),
+        );
       } catch (exception) {
         // If we are not able to produce a .packages file, return null so that
         // callers will not try to load the plugin.
@@ -738,7 +774,7 @@
 
   /// Return the names of packages that are listed as dependencies in the given
   /// [pubspecFile].
-  Iterable<String> _readDependecies(File pubspecFile) {
+  Iterable<String> _readDependencies(File pubspecFile) {
     var document = loadYamlDocument(pubspecFile.readAsStringSync(),
         sourceUrl: pubspecFile.toUri());
     var contents = document.contents;
@@ -983,6 +1019,13 @@
   }
 }
 
+class _Package {
+  final String name;
+  final Folder root;
+
+  _Package(this.name, this.root);
+}
+
 /// Information about a request that has been sent but for which a response has
 /// not yet been received.
 class _PendingRequest {
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 9b829c7..7f8d2e5 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
 import 'package:analyzer/error/error.dart' as engine;
-import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/generated/source.dart' as engine;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -299,25 +298,16 @@
 /// Creates a new [Location].
 Location _locationForArgs(
     engine.CompilationUnitElement unitElement, engine.SourceRange range) {
-  var startLine = 0;
-  var startColumn = 0;
-  var endLine = 0;
-  var endColumn = 0;
-  try {
-    var lineInfo = unitElement.lineInfo;
-    if (lineInfo != null) {
-      var startLocation = lineInfo.getLocation(range.offset);
-      startLine = startLocation.lineNumber;
-      startColumn = startLocation.columnNumber;
+  var lineInfo = unitElement.lineInfo;
 
-      var endLocation = lineInfo.getLocation(range.end);
-      endLine = endLocation.lineNumber;
-      endColumn = endLocation.columnNumber;
-    }
-  } on AnalysisException {
-    // TODO(brianwilkerson) It doesn't look like the code in the try block
-    //  should be able to throw an exception. Try removing the try statement.
-  }
+  var startLocation = lineInfo.getLocation(range.offset);
+  var endLocation = lineInfo.getLocation(range.end);
+
+  var startLine = startLocation.lineNumber;
+  var startColumn = startLocation.columnNumber;
+  var endLine = endLocation.lineNumber;
+  var endColumn = endLocation.columnNumber;
+
   return Location(unitElement.source.fullName, range.offset, range.length,
       startLine, startColumn,
       endLine: endLine, endColumn: endColumn);
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_performance.dart b/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
index 7815def..c41731b 100644
--- a/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
+++ b/pkg/analysis_server/lib/src/services/completion/completion_performance.dart
@@ -38,7 +38,8 @@
   final OperationPerformance operation;
   final String path;
   final String snippet;
-  int suggestionCount = -1;
+  int computedSuggestionCount = -1;
+  int transmittedSuggestionCount = -1;
 
   CompletionPerformance({
     required this.operation,
@@ -47,12 +48,17 @@
     required int offset,
   }) : snippet = _computeCompletionSnippet(content, offset);
 
+  String get computedSuggestionCountStr {
+    if (computedSuggestionCount < 1) return '';
+    return '$computedSuggestionCount';
+  }
+
   int get elapsedInMilliseconds {
     return operation.elapsed.inMilliseconds;
   }
 
-  String get suggestionCountStr {
-    if (suggestionCount < 1) return '';
-    return '$suggestionCount';
+  String get transmittedSuggestionCountStr {
+    if (transmittedSuggestionCount < 1) return '';
+    return '$transmittedSuggestionCount';
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index 2fee0c2..9a11b19 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.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:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
@@ -200,16 +199,15 @@
   bool _isEditingNamedArgLabel() {
     if (argumentList != null) {
       var entity = request.target.entity;
-      if (entity is SimpleIdentifier &&
-          entity.isSynthetic &&
-          entity.token.next?.type == TokenType.COLON) {
-        return true;
-      }
       if (entity is NamedExpression) {
         var offset = request.offset;
-        if (entity.offset < offset && offset < entity.end) {
-          return true;
+        var nameId = entity.name.label;
+        // `^id: value` - add a new named argument.
+        // `^: value` - edit the name of this named argument.
+        if (offset == nameId.offset && !nameId.isSynthetic) {
+          return false;
         }
+        return nameId.offset <= offset && offset <= nameId.end;
       }
     }
     return false;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart b/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart
index 59a5f61..69e49fe 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/fuzzy_filter_sort.dart
@@ -6,6 +6,8 @@
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
 
+final _identifierPattern = RegExp(r'([_a-zA-Z][_a-zA-Z0-9]*)');
+
 /// Filters and scores [suggestions] according to how well they match the
 /// [pattern]. Sorts [suggestions] by the score, relevance, and name.
 List<CompletionSuggestionBuilder> fuzzyFilterSort({
@@ -15,16 +17,18 @@
   var matcher = FuzzyMatcher(pattern, matchStyle: MatchStyle.SYMBOL);
 
   double score(CompletionSuggestionBuilder suggestion) {
-    var suggestionTextToMatch = suggestion.completion;
+    var textToMatch = suggestion.completion;
 
-    if (suggestion.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
-      var index = suggestionTextToMatch.indexOf(':');
-      if (index != -1) {
-        suggestionTextToMatch = suggestionTextToMatch.substring(0, index);
+    if (suggestion.kind == CompletionSuggestionKind.KEYWORD ||
+        suggestion.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
+      var identifier = _identifierPattern.matchAsPrefix(textToMatch)?.group(1);
+      if (identifier == null) {
+        return -1;
       }
+      textToMatch = identifier;
     }
 
-    return matcher.score(suggestionTextToMatch);
+    return matcher.score(textToMatch);
   }
 
   var scored = suggestions
diff --git a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
index 18f1072..46710be 100644
--- a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
+++ b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
@@ -38,6 +38,9 @@
         AnalyzerOptions.implicitDynamic: EmptyProducer(),
       }),
     }),
+    AnalyzerOptions.codeStyle: MapProducer({
+      AnalyzerOptions.format: BooleanProducer(),
+    }),
     // TODO(brianwilkerson) Create a producer to produce `package:` URIs.
     AnalyzerOptions.include: EmptyProducer(),
     // TODO(brianwilkerson) Create constants for 'linter' and 'rules'.
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index 0e0b1c9..2dbdf85 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -201,10 +201,10 @@
     30,
     'Convert to a spread',
   );
-  static const CONVERT_TO_SUPER_INITIALIZING_PARAMETER = AssistKind(
-    'dart.assist.convert.toSuperInitializingParameter',
+  static const CONVERT_TO_SUPER_PARAMETERS = AssistKind(
+    'dart.assist.convert.toSuperParameters',
     30,
-    'Convert to a super initializing parameter',
+    'Convert to using super parameters',
   );
   static const ENCAPSULATE_FIELD = AssistKind(
     'dart.assist.encapsulateField',
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 70835d5..c63b5e7 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -39,7 +39,7 @@
 import 'package:analysis_server/src/services/correction/dart/convert_to_package_import.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_relative_import.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_set_literal.dart';
-import 'package:analysis_server/src/services/correction/dart/convert_to_super_initializing_parameter.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_to_super_parameters.dart';
 import 'package:analysis_server/src/services/correction/dart/encapsulate_field.dart';
 import 'package:analysis_server/src/services/correction/dart/exchange_operands.dart';
 import 'package:analysis_server/src/services/correction/dart/flutter_convert_to_children.dart';
@@ -120,7 +120,7 @@
     ConvertToRelativeImport.newInstance,
     ConvertToSetLiteral.newInstance,
     ConvertToSingleQuotes.newInstance,
-    ConvertToSuperInitializingParameter.newInstance,
+    ConvertToSuperParameters.newInstance,
     EncapsulateField.newInstance,
     ExchangeOperands.newInstance,
     FlutterConvertToChildren.newInstance,
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 5f286c8..3104866 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -417,8 +417,13 @@
       var configFile = provider.getFile(configFileName);
       try {
         var content = configFile.readAsStringSync();
-        var parser = TransformOverrideSetParser(ErrorReporter(
-            AnalysisErrorListener.NULL_LISTENER, configFile.createSource()));
+        var parser = TransformOverrideSetParser(
+          ErrorReporter(
+            AnalysisErrorListener.NULL_LISTENER,
+            configFile.createSource(),
+            isNonNullableByDefault: false,
+          ),
+        );
         return parser.parse(content);
       } on FileSystemException {
         // Fall through to return null.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart
index 0995f2f..1b4aed0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_trailing_comma.dart
@@ -24,10 +24,18 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     final node = this.node;
-    if (node is! ArgumentList) return;
+    if (node is ArgumentList) {
+      await _insertComma(builder, node.arguments.last);
+    } else if (node is FormalParameterList) {
+      await _insertComma(builder, node.parameters.last);
+    } else if (node is Assertion) {
+      await _insertComma(builder, node.message ?? node.condition);
+    }
+  }
 
+  Future<void> _insertComma(ChangeBuilder builder, AstNode lastNode) async {
     await builder.addDartFileEdit(file, (builder) {
-      builder.addSimpleInsertion(node.arguments.last.end, ',');
+      builder.addSimpleInsertion(lastNode.end, ',');
     });
   }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
index 9530b09..61cf3f9 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/utilities/extensions/range_factory.dart';
 import 'package:analyzer/dart/analysis/features.dart';
@@ -16,6 +17,7 @@
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 import 'package:collection/collection.dart';
 
@@ -24,6 +26,18 @@
   AssistKind get assistKind => DartAssistKind.CONVERT_CLASS_TO_ENUM;
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_CLASS_TO_ENUM;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.CONVERT_CLASS_TO_ENUM_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     if (!libraryElement.featureSet.isEnabled(Feature.enhanced_enums)) {
       // If the library doesn't support enhanced_enums then the class can't be
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart
new file mode 100644
index 0000000..2da9100
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+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/visitor.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class ConvertForEachToForLoop extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_FOR_EACH_TO_FOR_LOOP;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.CONVERT_FOR_EACH_TO_FOR_LOOP_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var invocation = node.parent;
+    if (invocation is! MethodInvocation) {
+      return;
+    }
+    var statement = invocation.parent;
+    if (statement is! ExpressionStatement) {
+      return;
+    }
+    var argument = invocation.argumentList.arguments[0];
+    if (argument is! FunctionExpression) {
+      return;
+    }
+    var parameters = argument.parameters?.parameters;
+    if (parameters == null || parameters.length != 1) {
+      return;
+    }
+    var parameter = parameters[0];
+    if (parameter is! NormalFormalParameter) {
+      return;
+    }
+    var loopVariableName = parameter.identifier?.name;
+    if (loopVariableName == null) {
+      return;
+    }
+    var target = utils.getNodeText(invocation.target!);
+    var body = argument.body;
+    if (body is BlockFunctionBody) {
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addReplacement(range.startStart(invocation, body), (builder) {
+          builder.write('for (var ');
+          builder.write(loopVariableName);
+          builder.write(' in ');
+          builder.write(target);
+          builder.write(') ');
+        });
+        builder.addDeletion(range.endEnd(body, statement));
+        body.visitChildren(_ReturnVisitor(builder));
+      });
+    } else if (body is ExpressionFunctionBody) {
+      await builder.addDartFileEdit(file, (builder) {
+        var expression = body.expression;
+        var prefix = utils.getPrefix(statement.offset);
+        builder.addReplacement(range.startStart(invocation, expression),
+            (builder) {
+          builder.write('for (var ');
+          builder.write(loopVariableName);
+          builder.write(' in ');
+          builder.write(target);
+          builder.writeln(') {');
+          builder.write(prefix);
+          builder.write('  ');
+        });
+        builder.addReplacement(range.endEnd(expression, statement), (builder) {
+          builder.writeln(';');
+          builder.write(prefix);
+          builder.write('}');
+        });
+        body.visitChildren(_ReturnVisitor(builder));
+      });
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ConvertForEachToForLoop newInstance() => ConvertForEachToForLoop();
+}
+
+class _ReturnVisitor extends RecursiveAstVisitor<void> {
+  final DartFileEditBuilder builder;
+
+  _ReturnVisitor(this.builder);
+
+  @override
+  void visitReturnStatement(ReturnStatement node) {
+    builder.addSimpleReplacement(range.node(node), 'continue;');
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_cascade.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_cascade.dart
new file mode 100644
index 0000000..818a11c
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_cascade.dart
@@ -0,0 +1,72 @@
+// 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/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/token.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class ConvertToCascade extends CorrectionProducer {
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_TO_CASCADE;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var node = this.node;
+    if (node is! ExpressionStatement) return;
+
+    var block = node.parent;
+    if (block is! Block) return;
+
+    var previous = _getPrevious(block, node);
+    if (previous is! ExpressionStatement) return;
+    var previousOperator = _getTargetAndOperator(previous.expression)?.operator;
+
+    var expression = node.expression;
+    var target = _getTargetAndOperator(expression)?.target;
+    if (target == null) return;
+
+    var targetReplacement = expression is CascadeExpression ? '' : '.';
+
+    await builder.addDartFileEdit(file, (builder) {
+      if (previousOperator != null) {
+        builder.addSimpleInsertion(previousOperator.offset, '.');
+      }
+      builder.addDeletion(range.token(previous.semicolon!));
+      builder.addSimpleReplacement(range.node(target), targetReplacement);
+    });
+  }
+
+  Statement? _getPrevious(Block block, Statement statement) {
+    var statements = block.statements;
+    var index = statements.indexOf(statement);
+    return index > 0 ? statements[index - 1] : null;
+  }
+
+  _TargetAndOperator? _getTargetAndOperator(Expression expression) {
+    if (expression is AssignmentExpression) {
+      var lhs = expression.leftHandSide;
+      if (lhs is PrefixedIdentifier) {
+        return _TargetAndOperator(lhs.prefix, lhs.period);
+      }
+    } else if (expression is MethodInvocation) {
+      return _TargetAndOperator(expression.target, expression.operator);
+    } else if (expression is CascadeExpression) {
+      return _TargetAndOperator(expression.target, null);
+    }
+    return null;
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ConvertToCascade newInstance() => ConvertToCascade();
+}
+
+class _TargetAndOperator {
+  AstNode? target;
+  Token? operator;
+  _TargetAndOperator(this.target, this.operator);
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
index c66c747..31d1539 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_expression_function_body.dart
@@ -34,6 +34,13 @@
     if (body is! BlockFunctionBody || body.isGenerator) {
       return;
     }
+    if (body.keyword?.precedingComments != null ||
+        body.block.leftBracket.precedingComments != null ||
+        body.block.rightBracket.precedingComments != null) {
+      // TODO(https://github.com/dart-lang/sdk/issues/29313): Include comments
+      // in fixed output.
+      return;
+    }
     var parent = body.parent;
     if (parent is ConstructorDeclaration && parent.factoryKeyword == null) {
       return;
@@ -48,8 +55,31 @@
     Expression? returnExpression;
     if (onlyStatement is ReturnStatement) {
       returnExpression = onlyStatement.expression;
+      if (onlyStatement.returnKeyword.precedingComments != null) {
+        // TODO(https://github.com/dart-lang/sdk/issues/29313): Include comments
+        // in fixed output.
+        return;
+      }
+      // TODO(https://github.com/dart-lang/sdk/issues/29313): If there are
+      // comments after `return` keyword, before the expression, either return
+      // without offering a fix, or include the comments in the fixed output.
+
+      if (onlyStatement.semicolon.precedingComments != null) {
+        // TODO(https://github.com/dart-lang/sdk/issues/29313): Include
+        // comments in fixed output.
+        return;
+      }
     } else if (onlyStatement is ExpressionStatement) {
       returnExpression = onlyStatement.expression;
+      // TODO(https://github.com/dart-lang/sdk/issues/29313): If there are
+      // comments before the expression, either return without offering a fix,
+      // or include the comments in the fixed output.
+
+      if (onlyStatement.semicolon?.precedingComments != null) {
+        // TODO(https://github.com/dart-lang/sdk/issues/29313): Include comments
+        // in fixed output.
+        return;
+      }
     }
     if (returnExpression == null) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_for_loop.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_for_loop.dart
deleted file mode 100644
index 4abb1bf..0000000
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_for_loop.dart
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-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_plugin/utilities/change_builder/change_builder_core.dart';
-import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
-import 'package:analyzer_plugin/utilities/range_factory.dart';
-
-class ConvertForEachToForLoop extends CorrectionProducer {
-  @override
-  bool get canBeAppliedInBulk => true;
-
-  @override
-  bool get canBeAppliedToFile => true;
-
-  @override
-  FixKind get fixKind => DartFixKind.CONVERT_FOR_EACH_TO_FOR_LOOP;
-
-  @override
-  FixKind get multiFixKind => DartFixKind.CONVERT_FOR_EACH_TO_FOR_LOOP_MULTI;
-
-  @override
-  Future<void> compute(ChangeBuilder builder) async {
-    var invocation = node.parent;
-    if (invocation is! MethodInvocation) {
-      return;
-    }
-    var statement = invocation.parent;
-    if (statement is! ExpressionStatement) {
-      return;
-    }
-    var argument = invocation.argumentList.arguments[0];
-    if (argument is! FunctionExpression) {
-      return;
-    }
-    var parameters = argument.parameters?.parameters;
-    if (parameters == null || parameters.length != 1) {
-      return;
-    }
-    var parameter = parameters[0];
-    if (parameter is! NormalFormalParameter) {
-      return;
-    }
-    var loopVariableName = parameter.identifier?.name;
-    if (loopVariableName == null) {
-      return;
-    }
-    var target = utils.getNodeText(invocation.target!);
-    var body = argument.body;
-    if (body is BlockFunctionBody) {
-      await builder.addDartFileEdit(file, (builder) {
-        builder.addReplacement(range.startStart(invocation, body), (builder) {
-          builder.write('for (var ');
-          builder.write(loopVariableName);
-          builder.write(' in ');
-          builder.write(target);
-          builder.write(') ');
-        });
-        builder.addDeletion(range.endEnd(body, statement));
-      });
-    } else if (body is ExpressionFunctionBody) {
-      await builder.addDartFileEdit(file, (builder) {
-        var expression = body.expression;
-        var prefix = utils.getPrefix(statement.offset);
-        builder.addReplacement(range.startStart(invocation, expression),
-            (builder) {
-          builder.write('for (var ');
-          builder.write(loopVariableName);
-          builder.write(' in ');
-          builder.write(target);
-          builder.writeln(') {');
-          builder.write(prefix);
-          builder.write('  ');
-        });
-        builder.addReplacement(range.endEnd(expression, statement), (builder) {
-          builder.writeln(';');
-          builder.write(prefix);
-          builder.write('}');
-        });
-      });
-    }
-  }
-
-  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
-  static ConvertForEachToForLoop newInstance() => ConvertForEachToForLoop();
-}
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/lib/src/services/correction/dart/convert_to_super_initializing_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_initializing_parameter.dart
deleted file mode 100644
index b26d127..0000000
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_initializing_parameter.dart
+++ /dev/null
@@ -1,360 +0,0 @@
-// 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/src/services/correction/assist.dart';
-import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
-import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/source/source_range.dart';
-import 'package:analyzer_plugin/utilities/assist/assist.dart';
-import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
-import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
-import 'package:analyzer_plugin/utilities/range_factory.dart';
-
-class ConvertToSuperInitializingParameter extends CorrectionProducer {
-  @override
-  AssistKind get assistKind =>
-      DartAssistKind.CONVERT_TO_SUPER_INITIALIZING_PARAMETER;
-
-  /// If the selected node is the name of either a simple formal parameter or a
-  /// function-typed formal parameter, either with or without a default value,
-  /// then return the formal parameter. Otherwise return `null`.
-  FormalParameter? get _formalParameter {
-    final node = this.node;
-    if (node is SimpleIdentifier) {
-      var parent = node.parent;
-      if (parent is NormalFormalParameter &&
-          (parent is SimpleFormalParameter ||
-              parent is FunctionTypedFormalParameter) &&
-          parent.identifier == node) {
-        var grandparent = parent.parent;
-        if (grandparent is DefaultFormalParameter) {
-          return grandparent;
-        }
-        return parent;
-      }
-    }
-    return null;
-  }
-
-  @override
-  Future<void> compute(ChangeBuilder builder) async {
-    if (!libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
-      // If the library doesn't support super_parameters then the change isn't
-      // appropriate.
-      return;
-    }
-    var parameter = _formalParameter;
-    if (parameter == null) {
-      // If the user hasn't selected a formal parameter to convert then there
-      // is nothing to change.
-      return;
-    }
-    var parameterList = parameter.parent;
-    if (parameterList is! FormalParameterList) {
-      // This is here to safely cast the parent. This branch should never be
-      // reached.
-      return;
-    }
-    var constructor = parameterList.parent;
-    if (constructor is! ConstructorDeclaration) {
-      // If this isn't a parameter in a constructor declaration then the change
-      // isn't appropriate.
-      return;
-    }
-    var superInvocation = _superInvocation(constructor);
-    if (superInvocation == null) {
-      // If there isn't an explicit invocation of the super constructor then the
-      // change isn't appropriate.
-      return;
-    }
-    var superConstructor = superInvocation.staticElement;
-    if (superConstructor == null) {
-      // If the super constructor wasn't resolved then we can't apply the
-      // change.
-      return;
-    }
-    var thisParameter = parameter.declaredElement;
-    if (thisParameter == null) {
-      return;
-    }
-
-    _ParameterData? data;
-    if (parameter.isPositional) {
-      data = _dataForPositionalParameter(
-          parameter, thisParameter, superConstructor, superInvocation);
-    } else if (parameter.isNamed) {
-      data = _dataForNamedParameter(
-          parameter, thisParameter, superConstructor, superInvocation);
-    }
-    if (data == null) {
-      return;
-    }
-
-    final parameterData = data;
-    await builder.addDartFileEdit(file, (builder) {
-      var typeToDelete = parameterData.typeToDelete;
-      if (typeToDelete == null) {
-        builder.addSimpleInsertion(parameter.identifier!.offset, 'super.');
-      } else {
-        var primaryRange = typeToDelete.primaryRange;
-        if (primaryRange == null) {
-          builder.addSimpleInsertion(parameter.identifier!.offset, 'super.');
-        } else {
-          builder.addSimpleReplacement(primaryRange, 'super.');
-        }
-        var parameterRange = typeToDelete.parameterRange;
-        if (parameterRange != null) {
-          builder.addDeletion(parameterRange);
-        }
-      }
-      parameterData.argumentUpdate.addDeletion(builder);
-      var defaultValueRange = parameterData.defaultValueRange;
-      if (defaultValueRange != null) {
-        builder.addDeletion(defaultValueRange);
-      }
-    });
-  }
-
-  ParameterElement? _correspondingNamedParameter(
-      ConstructorElement superConstructor, ParameterElement thisParameter) {
-    for (var superParameter in superConstructor.parameters) {
-      if (superParameter.isNamed && superParameter.name == thisParameter.name) {
-        return superParameter;
-      }
-    }
-    return null;
-  }
-
-  /// Return `true` if the named [parameter] can be converted into a super
-  /// initializing formal parameter.
-  _ParameterData? _dataForNamedParameter(
-      FormalParameter parameter,
-      ParameterElement thisParameter,
-      ConstructorElement superConstructor,
-      SuperConstructorInvocation superInvocation) {
-    var superParameter =
-        _correspondingNamedParameter(superConstructor, thisParameter);
-    if (superParameter == null) {
-      return null;
-    }
-    // Validate that the parameter is used in the super constructor invocation.
-    _ArgumentUpdate? argumentUpdate;
-    var arguments = superInvocation.argumentList.arguments;
-    for (var argument in arguments) {
-      if (argument is NamedExpression &&
-          argument.name.label.name == thisParameter.name) {
-        var expression = argument.expression;
-        if (expression is SimpleIdentifier &&
-            expression.staticElement == thisParameter) {
-          argumentUpdate = _RemoveArgument(argument);
-          break;
-        }
-      }
-    }
-    if (argumentUpdate == null) {
-      // If the selected parameter isn't being passed to the super constructor,
-      // then the change isn't appropriate.
-      return null;
-    } else if (arguments.length == 1) {
-      // If the selected parameter is the only parameter being passed to the
-      // super constructor then we no longer need to invoke the super
-      // constructor.
-      argumentUpdate = _RemoveInvocation(superInvocation);
-    }
-    // Compare the types.
-    var superType = superParameter.type;
-    var thisType = thisParameter.type;
-    if (!typeSystem.isAssignableTo(superType, thisType)) {
-      // If the type of the selected parameter can't be assigned to the super
-      // parameter, the the change isn't appropriate.
-      return null;
-    }
-    // Return the data.
-    return _ParameterData(
-      argumentUpdate: argumentUpdate,
-      defaultValueRange:
-          _defaultValueRange(parameter, superParameter, thisParameter),
-      typeToDelete: superType == thisType ? _type(parameter) : null,
-    );
-  }
-
-  /// Return `true` if the positional [parameter] can be converted into a super
-  /// initializing formal parameter.
-  _ParameterData? _dataForPositionalParameter(
-      FormalParameter parameter,
-      ParameterElement thisParameter,
-      ConstructorElement superConstructor,
-      SuperConstructorInvocation superInvocation) {
-    var positionalArguments = _positionalArguments(superInvocation);
-    if (positionalArguments.length != 1) {
-      // If there's more than one positional parameter then they would all need
-      // to be converted at the same time. If there's less than one, the the
-      // selected parameter isn't being passed to the super constructor.
-      return null;
-    }
-    var argument = positionalArguments[0];
-    if (argument is! SimpleIdentifier ||
-        argument.staticElement != parameter.declaredElement) {
-      // If the selected parameter isn't the one being passed to the super
-      // constructor then the change isn't appropriate.
-      return null;
-    }
-    var positionalParameters = superConstructor.parameters
-        .where((param) => param.isPositional)
-        .toList();
-    if (positionalParameters.isEmpty) {
-      return null;
-    }
-    var superParameter = positionalParameters[0];
-    _ArgumentUpdate? argumentUpdate;
-    if (superInvocation.argumentList.arguments.length == 1) {
-      argumentUpdate = _RemoveInvocation(superInvocation);
-    } else {
-      argumentUpdate = _RemoveArgument(argument);
-    }
-    // Compare the types.
-    var superType = superParameter.type;
-    var thisType = thisParameter.type;
-    if (!typeSystem.isSubtypeOf(thisType, superType)) {
-      // If the type of the selected parameter can't be assigned to the super
-      // parameter, the the change isn't appropriate.
-      return null;
-    }
-    // Return the data.
-    return _ParameterData(
-      argumentUpdate: argumentUpdate,
-      defaultValueRange:
-          _defaultValueRange(parameter, superParameter, thisParameter),
-      typeToDelete: superType == thisType ? _type(parameter) : null,
-    );
-  }
-
-  /// Return the range of the default value associated with the [parameter], or
-  /// `null` if the parameter doesn't have a default value or if the default
-  /// value is not the same as the default value in the super constructor.
-  SourceRange? _defaultValueRange(FormalParameter parameter,
-      ParameterElement superParameter, ParameterElement thisParameter) {
-    if (parameter is DefaultFormalParameter) {
-      var defaultValue = parameter.defaultValue;
-      if (defaultValue != null) {
-        var superDefault = superParameter.computeConstantValue();
-        var thisDefault = thisParameter.computeConstantValue();
-        if (superDefault != null && superDefault == thisDefault) {
-          return range.endEnd(parameter.identifier!, defaultValue);
-        }
-      }
-    }
-    return null;
-  }
-
-  List<Expression> _positionalArguments(SuperConstructorInvocation invocation) {
-    return invocation.argumentList.arguments
-        .where((argument) => argument is! NamedExpression)
-        .toList();
-  }
-
-  SuperConstructorInvocation? _superInvocation(
-      ConstructorDeclaration constructor) {
-    var initializers = constructor.initializers;
-    // Search all of the initializers in case the code is invalid, but start
-    // from the end because the code will usually be correct.
-    for (var i = initializers.length - 1; i >= 0; i--) {
-      var initializer = initializers[i];
-      if (initializer is SuperConstructorInvocation) {
-        return initializer;
-      }
-    }
-    return null;
-  }
-
-  _TypeData? _type(FormalParameter parameter) {
-    if (parameter is DefaultFormalParameter) {
-      return _type(parameter.parameter);
-    } else if (parameter is SimpleFormalParameter) {
-      var typeAnnotation = parameter.type;
-      if (typeAnnotation != null) {
-        return _TypeData(
-            primaryRange:
-                range.startStart(typeAnnotation, parameter.identifier!));
-      }
-    } else if (parameter is FunctionTypedFormalParameter) {
-      var returnType = parameter.returnType;
-      return _TypeData(
-          primaryRange: returnType != null
-              ? range.startStart(returnType, parameter.identifier)
-              : null,
-          parameterRange: range.node(parameter.parameters));
-    }
-    return null;
-  }
-
-  /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
-  static ConvertToSuperInitializingParameter newInstance() =>
-      ConvertToSuperInitializingParameter();
-}
-
-abstract class _ArgumentUpdate {
-  void addDeletion(DartFileEditBuilder builder);
-}
-
-class _ParameterData {
-  /// Information used to remove the argument from the super constructor
-  /// invocation.
-  final _ArgumentUpdate argumentUpdate;
-
-  /// Information about the type annotation that should be deleted, or `null` if
-  /// there is no type annotation to delete or if the type should not be
-  /// deleted.
-  final _TypeData? typeToDelete;
-
-  /// The range of the default value that is to be deleted, or `null` if there
-  /// is no default value, the default value isn't to be deleted.
-  final SourceRange? defaultValueRange;
-
-  /// Initialize a newly create data object.
-  _ParameterData(
-      {required this.argumentUpdate,
-      required this.typeToDelete,
-      required this.defaultValueRange});
-}
-
-class _RemoveArgument extends _ArgumentUpdate {
-  final Expression argument;
-
-  _RemoveArgument(this.argument);
-
-  @override
-  void addDeletion(DartFileEditBuilder builder) {
-    var argumentList = argument.parent as ArgumentList;
-    var index = argumentList.arguments.indexOf(argument);
-    builder.addDeletion(range.argumentRange(argumentList, index, index, true));
-  }
-}
-
-class _RemoveInvocation extends _ArgumentUpdate {
-  final SuperConstructorInvocation invocation;
-
-  _RemoveInvocation(this.invocation);
-
-  @override
-  void addDeletion(DartFileEditBuilder builder) {
-    var declaration = invocation.parent as ConstructorDeclaration;
-    var initializerList = declaration.initializers;
-    if (initializerList.length == 1) {
-      builder.addDeletion(range.endEnd(declaration.parameters, invocation));
-    } else {
-      builder.addDeletion(range.nodeInList(initializerList, invocation));
-    }
-  }
-}
-
-class _TypeData {
-  SourceRange? primaryRange;
-
-  SourceRange? parameterRange;
-
-  _TypeData({required this.primaryRange, this.parameterRange});
-}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart
new file mode 100644
index 0000000..4522ffc
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart
@@ -0,0 +1,486 @@
+// 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/src/services/correction/assist.dart';
+import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/utilities/extensions/range_factory.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer_plugin/utilities/assist/assist.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class ConvertToSuperParameters extends CorrectionProducer {
+  @override
+  AssistKind get assistKind => DartAssistKind.CONVERT_TO_SUPER_PARAMETERS;
+
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_TO_SUPER_PARAMETERS;
+
+  @override
+  FixKind? get multiFixKind => DartFixKind.CONVERT_TO_SUPER_PARAMETERS_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    if (!libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
+      // If the library doesn't support super_parameters then the change isn't
+      // appropriate.
+      return;
+    }
+    var constructor = _findConstructor();
+    if (constructor == null) {
+      // If this isn't a constructor declaration then the change isn't
+      // appropriate.
+      return;
+    }
+    var superInvocation = _superInvocation(constructor);
+    if (superInvocation == null) {
+      // If there isn't an explicit invocation of a super constructor then the
+      // change isn't appropriate. Note that this also rules out factory
+      // constructors because factory constructors can't have initializers.
+      return;
+    }
+    var superConstructor = superInvocation.staticElement;
+    if (superConstructor == null) {
+      // If the super constructor wasn't resolved then we can't apply the
+      // change.
+      return;
+    }
+    // Find the arguments that can be converted. Named arguments are added to
+    // [named]. Positional arguments are added to [positional], but the list is
+    // set to `null` if a positional argument is found that can't be converted
+    // because either all of the positional parameters must be converted or none
+    // of them can be converted.
+    var referencedParameters = _referencedParameters(constructor);
+    var parameterMap = _parameterMap(constructor.parameters);
+    List<_ParameterData>? positional = [];
+    var named = <_ParameterData>[];
+    var argumentList = superInvocation.argumentList;
+    var arguments = argumentList.arguments;
+    for (var argumentIndex = 0;
+        argumentIndex < arguments.length;
+        argumentIndex++) {
+      var argument = arguments[argumentIndex];
+      if (argument is NamedExpression) {
+        var parameter = _parameterFor(parameterMap, argument.expression);
+        if (parameter != null &&
+            parameter.isNamed &&
+            parameter.element.name == argument.name.label.name &&
+            !referencedParameters.contains(parameter.element)) {
+          var data = _dataForParameter(
+            parameter,
+            argumentIndex,
+            argument.staticParameterElement,
+          );
+          if (data != null) {
+            named.add(data);
+          }
+        }
+      } else if (positional != null) {
+        var parameter = _parameterFor(parameterMap, argument);
+        if (parameter == null ||
+            !parameter.isPositional ||
+            referencedParameters.contains(parameter.element)) {
+          positional = null;
+        } else {
+          var data = _dataForParameter(
+            parameter,
+            argumentIndex,
+            argument.staticParameterElement,
+          );
+          if (data == null) {
+            positional = null;
+          } else {
+            positional.add(data);
+          }
+        }
+      }
+    }
+    if (positional != null && !_inOrder(positional)) {
+      positional = null;
+    }
+    // At this point:
+    // 1. `positional` will be `null` if
+    //    - there is at least one positional argument that can't be converted,
+    //      which implies that there are no positional arguments that can be
+    //      converted, or
+    //    - if the order of the positional parameters doesn't match the order of
+    //      the positional arguments.
+    // 2. `positional` will be empty if there are no positional arguments at
+    //    all.
+    // 3. `named` will be empty if there are no named arguments that can be
+    //    converted.
+    if ((positional == null || positional.isEmpty) && named.isEmpty) {
+      // There are no parameters that can be converted.
+      return;
+    }
+
+    var allParameters = <_ParameterData>[...?positional, ...named];
+
+    var argumentsToDelete =
+        allParameters.map((data) => data.argumentIndex).toList();
+    argumentsToDelete.sort();
+
+    await builder.addDartFileEdit(file, (builder) {
+      // Convert the parameters.
+      for (var parameterData in allParameters) {
+        var keyword = parameterData.finalKeyword;
+
+        void insertSuper() {
+          if (keyword == null) {
+            builder.addSimpleInsertion(parameterData.nameOffset, 'super.');
+          } else {
+            var tokenAfterKeyword = keyword.next!;
+            if (tokenAfterKeyword.offset == parameterData.nameOffset) {
+              builder.addSimpleReplacement(
+                  range.startStart(keyword, tokenAfterKeyword), 'super.');
+            } else {
+              builder.addDeletion(range.startStart(keyword, tokenAfterKeyword));
+              builder.addSimpleInsertion(parameterData.nameOffset, 'super.');
+            }
+          }
+        }
+
+        var typeToDelete = parameterData.typeToDelete;
+        if (typeToDelete == null) {
+          insertSuper();
+        } else {
+          var primaryRange = typeToDelete.primaryRange;
+          if (primaryRange == null) {
+            // This only happens when the type is an inline function type with
+            // no return type, such as `f(int i)`. Inline function types can't
+            // have a `final` keyword unless there's an error in the code.
+            builder.addSimpleInsertion(parameterData.nameOffset, 'super.');
+          } else {
+            if (keyword == null) {
+              builder.addSimpleReplacement(primaryRange, 'super.');
+            } else {
+              var tokenAfterKeyword = keyword.next!;
+              if (tokenAfterKeyword.offset == primaryRange.offset) {
+                builder.addSimpleReplacement(
+                    range.startOffsetEndOffset(
+                        keyword.offset, primaryRange.end),
+                    'super.');
+              } else {
+                builder
+                    .addDeletion(range.startStart(keyword, tokenAfterKeyword));
+                builder.addSimpleReplacement(primaryRange, 'super.');
+              }
+            }
+          }
+          var parameterRange = typeToDelete.parameterRange;
+          if (parameterRange != null) {
+            builder.addDeletion(parameterRange);
+          }
+        }
+        var defaultValueRange = parameterData.defaultValueRange;
+        if (defaultValueRange != null) {
+          builder.addDeletion(defaultValueRange);
+        }
+      }
+
+      // Remove the corresponding arguments.
+      if (argumentsToDelete.length == arguments.length) {
+        if (superInvocation.constructorName == null) {
+          // Delete the whole invocation.
+          var initializers = constructor.initializers;
+          SourceRange initializerRange;
+          if (initializers.length == 1) {
+            initializerRange =
+                range.endEnd(constructor.parameters, superInvocation);
+          } else {
+            initializerRange = range.nodeInList(initializers, superInvocation);
+          }
+          builder.addDeletion(initializerRange);
+        } else {
+          // Leave the invocation, but remove all of the arguments, including
+          // any trailing comma.
+          builder.addDeletion(range.endStart(
+              argumentList.leftParenthesis, argumentList.rightParenthesis));
+        }
+      } else {
+        // Remove just the arguments that are no longer needed.
+        var ranges = range.nodesInList(arguments, argumentsToDelete);
+        for (var range in ranges) {
+          builder.addDeletion(range);
+        }
+      }
+    });
+  }
+
+  /// If the [parameter] can be converted into a super initializing formal
+  /// parameter then return the data needed to do so.
+  _ParameterData? _dataForParameter(_Parameter parameter, int argumentIndex,
+      ParameterElement? superParameter) {
+    if (superParameter == null) {
+      return null;
+    }
+    // If the type of the `thisParameter` isn't a subtype of the type of the
+    // super parameter, then the change isn't appropriate.
+    var superType = superParameter.type;
+    var thisType = parameter.element.type;
+    if (!typeSystem.isSubtypeOf(thisType, superType)) {
+      return null;
+    }
+
+    var parameterNode = parameter.parameter;
+    var identifier = parameterNode.identifier;
+    if (identifier == null) {
+      // This condition should never occur, but the test is here to promote the
+      // type.
+      return null;
+    }
+
+    // Return the data.
+    return _ParameterData(
+      argumentIndex: argumentIndex,
+      defaultValueRange:
+          _defaultValueRange(parameterNode, superParameter, parameter.element),
+      finalKeyword: _finalKeyword(parameterNode),
+      nameOffset: identifier.offset,
+      parameterIndex: parameter.index,
+      typeToDelete: superType == thisType ? _type(parameterNode) : null,
+    );
+  }
+
+  /// Return the range of the default value associated with the [parameter], or
+  /// `null` if the parameter doesn't have a default value or if the default
+  /// value is not the same as the default value in the super constructor.
+  SourceRange? _defaultValueRange(FormalParameter parameter,
+      ParameterElement superParameter, ParameterElement thisParameter) {
+    if (parameter is DefaultFormalParameter) {
+      var defaultValue = parameter.defaultValue;
+      if (defaultValue != null) {
+        var superDefault = superParameter.computeConstantValue();
+        var thisDefault = thisParameter.computeConstantValue();
+        if (superDefault != null && superDefault == thisDefault) {
+          return range.endEnd(parameter.identifier!, defaultValue);
+        }
+      }
+    }
+    return null;
+  }
+
+  /// Return data about the type annotation on the [parameter]. This is the
+  /// information about the ranges of text that need to be removed in order to
+  /// remove the type annotation.
+  Token? _finalKeyword(FormalParameter parameter) {
+    if (parameter is DefaultFormalParameter) {
+      return _finalKeyword(parameter.parameter);
+    } else if (parameter is SimpleFormalParameter) {
+      var keyword = parameter.keyword;
+      if (keyword?.type == Keyword.FINAL) {
+        return keyword;
+      }
+    }
+    return null;
+  }
+
+  /// Return the constructor to be converted, or `null` if the cursor is not on
+  /// the name of a constructor.
+  ConstructorDeclaration? _findConstructor() {
+    final node = this.node;
+    if (node is SimpleIdentifier) {
+      var parent = node.parent;
+      if (parent is ConstructorDeclaration) {
+        return parent;
+      } else if (parent is ConstructorName) {
+        var grandparent = parent.parent;
+        if (grandparent is ConstructorDeclaration) {
+          return grandparent;
+        }
+      }
+    }
+    return null;
+  }
+
+  /// Return `true` if the given list of [parameterData] is in order by the
+  /// index of the parameters. The list is known to be in order by the argument
+  /// positions, so this test is used to ensure that the order won't be changed
+  /// if the parameters are converted.
+  bool _inOrder(List<_ParameterData> parameterData) {
+    var previousIndex = -1;
+    for (var data in parameterData) {
+      var index = data.parameterIndex;
+      if (index < previousIndex) {
+        return false;
+      }
+      previousIndex = index;
+    }
+    return true;
+  }
+
+  /// Return the parameter corresponding to the [expression], or `null` if the
+  /// expression isn't a simple reference to one of the normal parameters in the
+  /// constructor being converted.
+  _Parameter? _parameterFor(
+      Map<ParameterElement, _Parameter> parameterMap, Expression expression) {
+    if (expression is SimpleIdentifier) {
+      var element = expression.staticElement;
+      return parameterMap[element];
+    }
+    return null;
+  }
+
+  /// Return a map from parameter elements to the parameters that define those
+  /// elements.
+  Map<ParameterElement, _Parameter> _parameterMap(
+      FormalParameterList parameterList) {
+    bool validParameter(FormalParameter parameter) {
+      if (parameter is DefaultFormalParameter) {
+        parameter = parameter.parameter;
+      }
+      return parameter is SimpleFormalParameter ||
+          parameter is FunctionTypedFormalParameter;
+    }
+
+    var map = <ParameterElement, _Parameter>{};
+    var parameters = parameterList.parameters;
+    for (var i = 0; i < parameters.length; i++) {
+      var parameter = parameters[i];
+      if (validParameter(parameter)) {
+        var element = parameter.declaredElement;
+        if (element != null) {
+          map[element] = _Parameter(parameter, element, i);
+        }
+      }
+    }
+    return map;
+  }
+
+  /// Return a set containing the elements of all of the parameters that are
+  /// referenced in the body of the [constructor].
+  Set<ParameterElement> _referencedParameters(
+      ConstructorDeclaration constructor) {
+    var collector = _ReferencedParameterCollector();
+    constructor.body.accept(collector);
+    return collector.foundParameters;
+  }
+
+  /// Return the invocation of the super constructor.
+  SuperConstructorInvocation? _superInvocation(
+      ConstructorDeclaration constructor) {
+    var initializers = constructor.initializers;
+    // Search all of the initializers in case the code is invalid, but start
+    // from the end because the code will usually be correct.
+    for (var i = initializers.length - 1; i >= 0; i--) {
+      var initializer = initializers[i];
+      if (initializer is SuperConstructorInvocation) {
+        return initializer;
+      }
+    }
+    return null;
+  }
+
+  /// Return data about the type annotation on the [parameter]. This is the
+  /// information about the ranges of text that need to be removed in order to
+  /// remove the type annotation.
+  _TypeData? _type(FormalParameter parameter) {
+    if (parameter is DefaultFormalParameter) {
+      return _type(parameter.parameter);
+    } else if (parameter is SimpleFormalParameter) {
+      var typeAnnotation = parameter.type;
+      if (typeAnnotation != null) {
+        return _TypeData(
+            primaryRange:
+                range.startStart(typeAnnotation, parameter.identifier!));
+      }
+    } else if (parameter is FunctionTypedFormalParameter) {
+      var returnType = parameter.returnType;
+      return _TypeData(
+          primaryRange: returnType != null
+              ? range.startStart(returnType, parameter.identifier)
+              : null,
+          parameterRange: range.node(parameter.parameters));
+    }
+    return null;
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
+  static ConvertToSuperParameters newInstance() => ConvertToSuperParameters();
+}
+
+/// Information about a single parameter.
+class _Parameter {
+  final FormalParameter parameter;
+
+  final ParameterElement element;
+
+  final int index;
+
+  _Parameter(this.parameter, this.element, this.index);
+
+  bool get isNamed => element.isNamed;
+
+  bool get isPositional => element.isPositional;
+}
+
+/// Information used to convert a single parameter.
+class _ParameterData {
+  /// The `final` keyword on the parameter, or `null` if there is no `final`
+  /// keyword.
+  final Token? finalKeyword;
+
+  /// The type annotation that should be deleted from the parameter list, or
+  /// `null` if there is no type annotation to delete or if the type should not
+  /// be deleted.
+  final _TypeData? typeToDelete;
+
+  /// The offset of the name.
+  final int nameOffset;
+
+  /// The range of the default value that is to be deleted from the parameter
+  /// list, or `null` if there is no default value, the default value isn't to
+  /// be deleted.
+  final SourceRange? defaultValueRange;
+
+  /// The index of the parameter to be updated.
+  final int parameterIndex;
+
+  /// The index of the argument to be deleted.
+  final int argumentIndex;
+
+  /// Initialize a newly create data object.
+  _ParameterData(
+      {required this.finalKeyword,
+      required this.typeToDelete,
+      required this.nameOffset,
+      required this.defaultValueRange,
+      required this.parameterIndex,
+      required this.argumentIndex});
+}
+
+class _ReferencedParameterCollector extends RecursiveAstVisitor<void> {
+  final Set<ParameterElement> foundParameters = {};
+
+  @override
+  void visitSimpleIdentifier(SimpleIdentifier node) {
+    var element = node.staticElement;
+    if (element is ParameterElement) {
+      foundParameters.add(element);
+    }
+  }
+}
+
+/// Information about the ranges of text that need to be removed in order to
+/// remove a type annotation.
+class _TypeData {
+  SourceRange? primaryRange;
+
+  SourceRange? parameterRange;
+
+  _TypeData({required this.primaryRange, this.parameterRange});
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
index 94e26f2..e125e84 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
@@ -4,18 +4,19 @@
 
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 class CreateConstructorForFinalFields extends CorrectionProducer {
   @override
   FixKind get fixKind => DartFixKind.CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS;
 
-  bool get _isNonNullable => unit.featureSet.isEnabled(Feature.non_nullable);
-
   @override
   Future<void> compute(ChangeBuilder builder) async {
     if (node is! SimpleIdentifier || node.parent is! VariableDeclaration) {
@@ -33,15 +34,12 @@
       return;
     }
 
-    // prepare names of uninitialized final fields
-    var fieldNames = <String>[];
+    var variableLists = <VariableDeclarationList>[];
     for (var member in classDeclaration.members) {
       if (member is FieldDeclaration) {
         var variableList = member.fields;
         if (variableList.isFinal && !variableList.isLate) {
-          fieldNames.addAll(variableList.variables
-              .where((v) => v.initializer == null)
-              .map((v) => v.name.name));
+          variableLists.add(variableList);
         }
       }
     }
@@ -59,41 +57,22 @@
       if (keyClass == null) {
         return;
       }
-      await builder.addDartFileEdit(file, (builder) {
-        builder.addInsertion(targetLocation.offset, (builder) {
-          builder.write(targetLocation.prefix);
-          builder.write('const ');
-          builder.write(className);
-          builder.write('({');
-          builder.writeType(
-            keyClass.instantiate(
-              typeArguments: const [],
-              nullabilitySuffix: _isNonNullable
-                  ? NullabilitySuffix.question
-                  : NullabilitySuffix.star,
-            ),
-          );
-          builder.write(' key');
 
-          var childrenFields = <String>[];
-          for (var fieldName in fieldNames) {
-            if (fieldName == 'child' || fieldName == 'children') {
-              childrenFields.add(fieldName);
-              continue;
-            }
-            builder.write(', this.');
-            builder.write(fieldName);
-          }
-          for (var fieldName in childrenFields) {
-            builder.write(', this.');
-            builder.write(fieldName);
-          }
-
-          builder.write('}) : super(key: key);');
-          builder.write(targetLocation.suffix);
-        });
-      });
+      if (unit.featureSet.isEnabled(Feature.super_parameters)) {
+        await _withSuperParameters(
+            builder, targetLocation, className, variableLists);
+      } else {
+        await _withoutSuperParameters(
+            builder, targetLocation, className, keyClass, variableLists);
+      }
     } else {
+      var fieldNames = <String>[];
+      for (var variableList in variableLists) {
+        fieldNames.addAll(variableList.variables
+            .where((v) => v.initializer == null)
+            .map((v) => v.name.name));
+      }
+
       await builder.addDartFileEdit(file, (builder) {
         builder.addInsertion(targetLocation.offset, (builder) {
           builder.write(targetLocation.prefix);
@@ -105,6 +84,96 @@
     }
   }
 
+  Future<void> _withoutSuperParameters(
+      ChangeBuilder builder,
+      ClassMemberLocation targetLocation,
+      String className,
+      ClassElement keyClass,
+      List<VariableDeclarationList> variableLists) async {
+    var isNonNullable = unit.featureSet.isEnabled(Feature.non_nullable);
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addInsertion(targetLocation.offset, (builder) {
+        builder.write(targetLocation.prefix);
+        builder.write('const ');
+        builder.write(className);
+        builder.write('({');
+        builder.writeType(
+          keyClass.instantiate(
+            typeArguments: const [],
+            nullabilitySuffix: isNonNullable
+                ? NullabilitySuffix.question
+                : NullabilitySuffix.star,
+          ),
+        );
+        builder.write(' key');
+
+        _writeParameters(builder, variableLists, isNonNullable);
+
+        builder.write('}) : super(key: key);');
+        builder.write(targetLocation.suffix);
+      });
+    });
+  }
+
+  Future<void> _withSuperParameters(
+      ChangeBuilder builder,
+      ClassMemberLocation targetLocation,
+      String className,
+      List<VariableDeclarationList> variableLists) async {
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addInsertion(targetLocation.offset, (builder) {
+        builder.write(targetLocation.prefix);
+        builder.write('const ');
+        builder.write(className);
+        builder.write('({');
+        builder.write('super.key');
+
+        _writeParameters(builder, variableLists, true);
+
+        builder.write('});');
+        builder.write(targetLocation.suffix);
+      });
+    });
+  }
+
+  void _writeParameters(DartEditBuilder builder,
+      List<VariableDeclarationList> variableLists, bool isNonNullable) {
+    var childrenFields = <String>[];
+    var childrenNullables = <bool>[];
+    for (var variableList in variableLists) {
+      var fieldNames = variableList.variables
+          .where((v) => v.initializer == null)
+          .map((v) => v.name.name);
+
+      for (var fieldName in fieldNames) {
+        if (fieldName == 'child' || fieldName == 'children') {
+          childrenFields.add(fieldName);
+          childrenNullables.add(variableList.type?.type?.nullabilitySuffix ==
+              NullabilitySuffix.question);
+          continue;
+        }
+        builder.write(', ');
+        if (isNonNullable &&
+            variableList.type?.type?.nullabilitySuffix !=
+                NullabilitySuffix.question) {
+          builder.write('required ');
+        }
+        builder.write('this.');
+        builder.write(fieldName);
+      }
+    }
+    for (var i = 0; i < childrenFields.length; i++) {
+      var fieldName = childrenFields[i];
+      var nullableField = childrenNullables[i];
+      builder.write(', ');
+      if (isNonNullable && !nullableField) {
+        builder.write('required ');
+      }
+      builder.write('this.');
+      builder.write(fieldName);
+    }
+  }
+
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
   static CreateConstructorForFinalFields newInstance() =>
       CreateConstructorForFinalFields();
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
index c571123..3fd0c99 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.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:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -61,12 +62,22 @@
   List<Object> get fixArguments {
     var buffer = StringBuffer();
     buffer.write('super');
-    var constructorName = _constructor.displayName;
-    if (constructorName.isNotEmpty) {
-      buffer.write('.');
-      buffer.write(constructorName);
+    var constructorName = _constructor.name;
+    if (libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
+      if (constructorName.isNotEmpty) {
+        buffer.write('.');
+        buffer.write(constructorName);
+        buffer.write('()');
+      } else {
+        buffer.write('.');
+      }
+    } else {
+      if (constructorName.isNotEmpty) {
+        buffer.write('.');
+        buffer.write(constructorName);
+      }
+      buffer.write('(...)');
     }
-    buffer.write('(...)');
     return [buffer.toString()];
   }
 
@@ -75,6 +86,14 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
+    if (libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
+      await _computeWithSuperParameters(builder);
+    } else {
+      await _computeWithoutSuperParameters(builder);
+    }
+  }
+
+  Future<void> _computeWithoutSuperParameters(ChangeBuilder builder) async {
     var constructorName = _constructor.name;
     var requiredPositionalParameters = _constructor.parameters
         .where((parameter) => parameter.isRequiredPositional);
@@ -154,4 +173,70 @@
       });
     });
   }
+
+  Future<void> _computeWithSuperParameters(ChangeBuilder builder) async {
+    var constructorName = _constructor.name;
+    var requiredPositionalParameters = _constructor.parameters
+        .where((parameter) => parameter.isRequiredPositional);
+    var requiredNamedParameters =
+        _constructor.parameters.where((parameter) => parameter.isRequiredNamed);
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addInsertion(_targetLocation.offset, (builder) {
+        void writeParameter(ParameterElement parameter) {
+          var parameterName = parameter.displayName;
+
+          if (parameterName.length > 1 && parameterName.startsWith('_')) {
+            parameterName = parameterName.substring(1);
+          }
+
+          if (parameter.isRequiredNamed) {
+            builder.write('required ');
+          }
+
+          builder.write('super.');
+          builder.write(parameterName);
+        }
+
+        builder.write(_targetLocation.prefix);
+        builder.write(_targetClassName);
+        if (constructorName.isNotEmpty) {
+          builder.write('.');
+          builder.addSimpleLinkedEdit('NAME', constructorName);
+        }
+        builder.write('(');
+
+        var firstParameter = true;
+        void writeComma() {
+          if (firstParameter) {
+            firstParameter = false;
+          } else {
+            builder.write(', ');
+          }
+        }
+
+        for (var parameter in requiredPositionalParameters) {
+          writeComma();
+          writeParameter(parameter);
+        }
+        if (requiredNamedParameters.isNotEmpty) {
+          writeComma();
+          firstParameter = true; // Reset since we just included a comma.
+          builder.write('{');
+          for (var parameter in requiredNamedParameters) {
+            writeComma();
+            writeParameter(parameter);
+          }
+          builder.write('}');
+        }
+
+        if (constructorName.isNotEmpty) {
+          builder.write(') : super.');
+          builder.addSimpleLinkedEdit('NAME', constructorName);
+          builder.write('(');
+        }
+        builder.write(');');
+        builder.write(_targetLocation.suffix);
+      });
+    });
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
index 8c93801..e885c0e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
@@ -33,8 +33,8 @@
         builder.write('@override');
         builder.write(eol);
         builder.write(prefix);
-        builder.write(
-            'noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);');
+        builder.write('dynamic noSuchMethod(Invocation invocation) => '
+            'super.noSuchMethod(invocation);');
         builder.write(eol);
       });
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_assignment.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_assignment.dart
new file mode 100644
index 0000000..8f95178
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_assignment.dart
@@ -0,0 +1,52 @@
+// 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/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/source/source_range.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:analyzer_plugin/utilities/range_factory.dart';
+
+class RemoveAssignment extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_ASSIGNMENT;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_ASSIGNMENT_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var expression = node;
+    if (expression is! AssignmentExpression) {
+      return;
+    }
+
+    SourceRange sourceRange;
+    var parent = expression.parent;
+    while (parent is ParenthesizedExpression) {
+      parent = parent.parent;
+    }
+    if (parent is ExpressionStatement) {
+      sourceRange = utils.getLinesRange(range.node(parent));
+    } else {
+      sourceRange = range.endEnd(
+          expression.leftHandSide.endToken, expression.rightHandSide.endToken);
+    }
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addDeletion(sourceRange);
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static RemoveAssignment newInstance() => RemoveAssignment();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unnecessary_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unnecessary_late.dart
index 08c09db..01f447a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unnecessary_late.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unnecessary_late.dart
@@ -24,7 +24,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    final declaration = node;
+    final declaration = node.parent;
     if (declaration is! VariableDeclaration) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
index e3acc88..68e682f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/update_sdk_constraints.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
@@ -71,8 +72,8 @@
 
   File? _findPubspecFile() {
     var file = resourceProvider.getFile(this.file);
-    for (var folder in file.parent2.withAncestors) {
-      var pubspecFile = folder.getChildAssumingFile('pubspec.yaml');
+    for (var folder in file.parent.withAncestors) {
+      var pubspecFile = folder.getChildAssumingFile(file_paths.pubspecYaml);
       if (pubspecFile.exists) {
         return pubspecFile;
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index fa7be23..a9f8b35 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -1,28 +1,42 @@
 # This file contains a map. The key of each top-level entry is the unique name
-# of either an error code or a lint name. The value of each top-level entry is
-# a map describing the status of fixes related to that diagnostic.
+# of an error code. The value of each top-level entry is a map describing the
+# status of fixes related to that diagnostic.
 #
 # In every second-level map, the first key is `status` and the corresponding
 # value is one of the following:
-# - needsEvaluation, if the diagnostic has not been evaluated in terms of fixes.
-# - hasFix, if the diagnostic has one or more fixes.
-# - noFix, if no fix seems appropriate for the diagnostic. There should be a
+# - 'needsEvaluation', if the diagnostic has not been evaluated in terms of
+#   fixes.
+# - 'hasFix', if the diagnostic has one or more fixes.
+# - 'noFix', if no fix seems appropriate for the diagnostic. There should be a
 #   second key named `reason` whose value is text explaining why there is no
 #   appropriate fix.
-# - needsFix, if the diagnostic needs a fix, with a possible issue link. If an
+# - 'needsFix', if the diagnostic needs a fix, with a possible issue link. If an
 #   issue has been opened, there should be a second key named `issue` whose
 #   value is the URL of the issue.
 #
+# The other keys in the second-level map are all optional, and include
+# - 'since', whose value is the version number of the SDK in which the
+#   diagnostic was added.
+# - 'notes', whose value is text, typically describing why we think a fix for
+#   the diagnostic is not appropriate.
+# - 'issue', whose value is a list of the URLs of GitHub issues for the fixes
+#   that should be added. Ideally every issue marked as 'needFix' would have an
+#   issue created for it.
+#
 # Stats:
-# - 809 "needsEvaluation"
-# -  19 "needsFix"
-# - 253 "hasFix"
-# -   3 "noFix"
+# - 759 "needsEvaluation"
+# -  32 "needsFix"
+# - 265 "hasFix"
+# -  41 "noFix"
 
 AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
   status: noFix
+  notes: |-
+    The fix needs to be made in the included file.
 AnalysisOptionsErrorCode.PARSE_ERROR:
   status: noFix
+  notes: |-
+    There isn't enough information to be able to provide a fix.
 AnalysisOptionsHintCode.PREVIEW_DART_2_SETTING_DEPRECATED:
   status: needsEvaluation
 AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED:
@@ -32,11 +46,22 @@
 AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED:
   status: needsEvaluation
 AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    It would not be performant to search the disk for analysis options files
+    that could be included.
+    
+    We could potentially have a fix to create the referenced file that currently
+    doesn't exist.
 AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    The fix needs to be made in the included file.
 AnalysisOptionsWarningCode.INVALID_OPTION:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    We could look for valid options that are similar to the invalid option and
+    replace the invalid option with the selected replacement.
 AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT:
   status: needsEvaluation
 AnalysisOptionsWarningCode.SPEC_MODE_REMOVED:
@@ -276,6 +301,7 @@
   status: needsEvaluation
 CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR:
   status: hasFix
+  issue: https://github.com/dart-lang/sdk/issues/48644
 CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
   status: needsEvaluation
 CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
@@ -560,7 +586,8 @@
   status: needsEvaluation
 CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET:
   status: needsEvaluation
-CompileTimeErrorCode.INVALID_URI: needsEvaluation
+CompileTimeErrorCode.INVALID_URI:
+  status: needsEvaluation
 CompileTimeErrorCode.INVALID_USE_OF_COVARIANT:
   status: needsEvaluation
 CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE:
@@ -1060,6 +1087,8 @@
   status: needsEvaluation
 FfiCode.ARGUMENT_MUST_BE_A_CONSTANT:
   status: needsEvaluation
+FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE:
+  status: needsEvaluation
 FfiCode.CREATION_OF_STRUCT_OR_UNION:
   status: needsEvaluation
   since: ~2.15
@@ -1141,9 +1170,13 @@
 FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
   status: needsEvaluation
 HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Fix depends on user's intent, which can't be known.
 HintCode.ASSIGNMENT_OF_DO_NOT_STORE:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Fix depends on user's intent, which can't be known.
 HintCode.BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
   status: hasFix
 HintCode.CAN_BE_NULL_AFTER_NULL_AWARE:
@@ -1155,21 +1188,33 @@
 HintCode.DEAD_CODE_ON_CATCH_SUBTYPE:
   status: hasFix
 HintCode.DEPRECATED_EXTENDS_FUNCTION:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    The fix is to remove `Function` from where it's referenced.
 HintCode.DEPRECATED_FUNCTION_CLASS_DECLARATION:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    The fix is to rename the class, which can't be done as a fix.
 HintCode.DEPRECATED_IMPLEMENTS_FUNCTION:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    The fix is to remove `Function` from where it's referenced.
 HintCode.DEPRECATED_MEMBER_USE:
   status: hasFix
 HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Should probably be able to use `DataDriven`.
 HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    Should probably be able to use `DataDriven`.
 HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE:
   status: hasFix
 HintCode.DEPRECATED_MIXIN_FUNCTION:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    The fix is to remove `Function` from where it's referenced.
 HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE:
   status: hasFix
 HintCode.DIVISION_OPTIMIZATION:
@@ -1177,19 +1222,29 @@
 HintCode.DUPLICATE_HIDDEN_NAME:
   status: hasFix
 HintCode.DUPLICATE_IGNORE:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    One fix is to remove the duplicated error code.
 HintCode.DUPLICATE_IMPORT:
   status: hasFix
 HintCode.DUPLICATE_SHOWN_NAME:
   status: hasFix
 HintCode.EQUAL_ELEMENTS_IN_SET:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Fix depends on user's intent, which can't be known.
 HintCode.EQUAL_KEYS_IN_MAP:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Fix depends on user's intent, which can't be known.
 HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE:
-  status: needsEvaluation
+  status: noFix
+  notes: |-
+    Fix depends on user's intent, which can't be known.
 HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE:
-  status: needsEvaluation
+  status: needsFix
+  notes: |-
+    One fix is to convert the reference to a 'package:' URI.
 HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
   status: needsEvaluation
 HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
@@ -1534,7 +1589,7 @@
 LintCode.cancel_subscriptions:
   status: needsEvaluation
 LintCode.cascade_invocations:
-  status: needsEvaluation
+  status: hasFix
 LintCode.cast_nullable_to_non_nullable:
   status: needsEvaluation
 LintCode.close_sinks:
@@ -1783,7 +1838,7 @@
 LintCode.unnecessary_new:
   status: hasFix
 LintCode.unnecessary_null_aware_assignments:
-  status: needsFix
+  status: hasFix
 LintCode.unnecessary_null_checks:
   status: needsEvaluation
 LintCode.unnecessary_null_in_if_null_operators:
@@ -1814,8 +1869,12 @@
   status: needsEvaluation
 LintCode.use_build_context_synchronously:
   status: needsEvaluation
+LintCode.use_colored_box:
+  status: needsEvaluation
 LintCode.use_decorated_box:
   status: needsEvaluation
+LintCode.use_enums:
+    status: hasFix
 LintCode.use_full_hex_values_for_flutter_colors:
   status: hasFix
 LintCode.use_function_type_syntax_for_parameters:
@@ -1838,6 +1897,8 @@
   status: needsEvaluation
 LintCode.use_string_buffers:
   status: needsEvaluation
+LintCode.use_super_parameters:
+  status: hasFix
 LintCode.use_test_throws_matchers:
   status: needsEvaluation
 LintCode.use_to_and_as_if_applicable:
@@ -1950,13 +2011,6 @@
   notes: |-
     We can't guess at the names or number of the enum constants that should be
     added.
-ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS:
-  status: noFix
-  since: 2.17
-  notes: |-
-    We could potentially add `()`, but we generally don't have fixes for parse
-    errors because we assume the user is still typing and will soon fix the
-    problem.
 ParserErrorCode.ENUM_IN_CLASS:
   status: needsEvaluation
 ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
@@ -2097,7 +2151,13 @@
   status: needsEvaluation
 ParserErrorCode.INVALID_THIS_IN_INITIALIZER:
   status: needsEvaluation
-ParserErrorCode.INVALID_UNICODE_ESCAPE:
+ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED:
+  status: needsEvaluation
+ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET:
+  status: needsEvaluation
+ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET:
+  status: needsEvaluation
+ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED:
   status: needsEvaluation
 ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION:
   status: needsEvaluation
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index d3411f7..4f359ad 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -308,6 +308,16 @@
     DartFixKindPriority.DEFAULT,
     "Change '{0}' to '{1}' type annotation",
   );
+  static const CONVERT_CLASS_TO_ENUM = FixKind(
+    'dart.fix.convert.classToEnum',
+    DartFixKindPriority.DEFAULT,
+    'Convert class to an enum',
+  );
+  static const CONVERT_CLASS_TO_ENUM_MULTI = FixKind(
+    'dart.fix.convert.classToEnum.multi',
+    DartFixKindPriority.DEFAULT,
+    'Convert classes to enums in file',
+  );
   static const CONVERT_FLUTTER_CHILD = FixKind(
     'dart.fix.flutter.convert.childToChildren',
     DartFixKindPriority.DEFAULT,
@@ -353,6 +363,11 @@
     DartFixKindPriority.IN_FILE,
     'Convert the quotes and remove escapes everywhere in file',
   );
+  static const CONVERT_TO_CASCADE = FixKind(
+    'dart.fix.convert.toCascade',
+    DartFixKindPriority.DEFAULT,
+    'Convert to cascade notation',
+  );
   static const CONVERT_TO_CONTAINS = FixKind(
     'dart.fix.convert.toContains',
     DartFixKindPriority.DEFAULT,
@@ -558,6 +573,16 @@
     DartFixKindPriority.IN_FILE,
     'Convert to spreads everywhere in file',
   );
+  static const CONVERT_TO_SUPER_PARAMETERS = FixKind(
+    'dart.fix.convert.toSuperParameters',
+    30,
+    'Convert to using super parameters',
+  );
+  static const CONVERT_TO_SUPER_PARAMETERS_MULTI = FixKind(
+    'dart.fix.convert.toSuperParameters.multi',
+    30,
+    'Convert to using super parameters everywhere in file',
+  );
   static const CONVERT_TO_WHERE_TYPE = FixKind(
     'dart.fix.convert.toWhereType',
     DartFixKindPriority.DEFAULT,
@@ -819,6 +844,16 @@
     DartFixKindPriority.IN_FILE,
     'Remove arguments in file',
   );
+  static const REMOVE_ASSIGNMENT = FixKind(
+    'dart.fix.remove.assignment',
+    DartFixKindPriority.DEFAULT,
+    'Remove assignment',
+  );
+  static const REMOVE_ASSIGNMENT_MULTI = FixKind(
+    'dart.fix.remove.assignment.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary assignments everywhere in file',
+  );
   static const REMOVE_AWAIT = FixKind(
     'dart.fix.remove.await',
     DartFixKindPriority.DEFAULT,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
index 6d36d486..961632b 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
@@ -65,6 +65,15 @@
           // We shouldn't get here.
           return null;
         }
+      } else if (parent is NamedType) {
+        var grandparent = parent.parent;
+        if (grandparent is ConstructorName &&
+            grandparent.name?.name == components[0]) {
+          // TODO(brianwilkerson) This doesn't correctly handle constructor
+          //  invocations with type arguments. We really need to replace the
+          //  class and constructor names separately.
+          return _Data(range.node(grandparent));
+        }
       } else if (parent is PrefixedIdentifier) {
         if (parent.prefix.staticElement is PrefixElement) {
           // We have a '<prefix>.<topLevel>' pattern so we leave the prefix
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
index c2f427a..d971585 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
@@ -58,8 +58,11 @@
       var content = file.readAsStringSync();
       var parser = TransformSetParser(
           ErrorReporter(
-              AnalysisErrorListener.NULL_LISTENER, file.createSource()),
-          file.parent2.parent2.shortName);
+            AnalysisErrorListener.NULL_LISTENER,
+            file.createSource(),
+            isNonNullableByDefault: false,
+          ),
+          file.parent.parent.shortName);
       return parser.parse(content);
     } on FileSystemException {
       // Fall through to return `null`.
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 11db925..a4e4594a 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -39,17 +39,19 @@
 import 'package:analysis_server/src/services/correction/dart/change_to_static_access.dart';
 import 'package:analysis_server/src/services/correction/dart/change_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_add_all_to_spread.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_class_to_enum.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_conditional_expression_to_if_element.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_documentation_into_line.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_flutter_child.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_flutter_children.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_for_each_to_for_loop.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_into_block_body.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_into_is_not.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_quotes.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_to_cascade.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_contains.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_expression_function_body.dart';
-import 'package:analysis_server/src/services/correction/dart/convert_to_for_loop.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_generic_function_syntax.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_if_null.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_initializing_formal.dart';
@@ -64,6 +66,7 @@
 import 'package:analysis_server/src/services/correction/dart/convert_to_raw_string.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_relative_import.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_set_literal.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_to_super_parameters.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_where_type.dart';
 import 'package:analysis_server/src/services/correction/dart/create_class.dart';
 import 'package:analysis_server/src/services/correction/dart/create_constructor.dart';
@@ -103,6 +106,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_abstract.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_argument.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_assignment.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_await.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_comparison.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_const.dart';
@@ -421,6 +425,9 @@
     LintNames.await_only_futures: [
       RemoveAwait.newInstance,
     ],
+    LintNames.cascade_invocations: [
+      ConvertToCascade.newInstance,
+    ],
     LintNames.curly_braces_in_flow_control_structures: [
       UseCurlyBraces.newInstance,
     ],
@@ -627,6 +634,9 @@
     LintNames.unnecessary_new: [
       RemoveUnnecessaryNew.newInstance,
     ],
+    LintNames.unnecessary_null_aware_assignments: [
+      RemoveAssignment.newInstance,
+    ],
     LintNames.unnecessary_null_in_if_null_operators: [
       RemoveIfNullOperator.newInstance,
     ],
@@ -651,6 +661,9 @@
     LintNames.unnecessary_this: [
       RemoveThisExpression.newInstance,
     ],
+    LintNames.use_enums: [
+      ConvertClassToEnum.newInstance,
+    ],
     LintNames.use_full_hex_values_for_flutter_colors: [
       ReplaceWithEightDigitHex.newInstance,
     ],
@@ -666,6 +679,9 @@
     LintNames.use_rethrow_when_possible: [
       UseRethrow.newInstance,
     ],
+    LintNames.use_super_parameters: [
+      ConvertToSuperParameters.newInstance,
+    ],
   };
 
   /// A map from error codes to a list of generators used to create multiple
@@ -862,6 +878,7 @@
       ChangeTo.classOrMixin,
     ],
     CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR: [
+      ConvertToListLiteral.newInstance,
       ReplaceWithFilled.newInstance,
     ],
     CompileTimeErrorCode.EXTENDS_NON_CLASS: [
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index d6832cf..e70ddb4 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/workspace/gn.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     show KytheEntry, KytheVName;
+import 'package:path/path.dart' show relative;
 
 import 'schema.dart' as schema;
 
@@ -40,7 +41,25 @@
   return '$start-$end';
 }
 
-String _getPath(ResourceProvider provider, Element? e) {
+String? _getNodeKind(Element e) {
+  if (e is FieldElement && e.isEnumConstant) {
+    // FieldElement is a kind of VariableElement, so this test case must be
+    // before the e is VariableElement check.
+    return schema.CONSTANT_KIND;
+  } else if (e is VariableElement || e is PrefixElement) {
+    return schema.VARIABLE_KIND;
+  } else if (e is ExecutableElement) {
+    return schema.FUNCTION_KIND;
+  } else if (e is ClassElement || e is TypeParameterElement) {
+    // TODO(jwren): this should be using absvar instead, see
+    // https://kythe.io/docs/schema/#absvar
+    return schema.RECORD_KIND;
+  }
+  return null;
+}
+
+String _getPath(ResourceProvider provider, Element? e,
+    {String? sdkRootPath, String? corpus}) {
   // TODO(jwren) This method simply serves to provide the WORKSPACE relative
   // path for sources in Elements, it needs to be written in a more robust way.
   // TODO(jwren) figure out what source generates a e != null, but
@@ -51,6 +70,20 @@
     // "dynamic"
     return '';
   }
+  if (sdkRootPath != null) {
+    final uri = source.uri;
+    if (uri.isScheme('dart')) {
+      final pathSegments = uri.pathSegments;
+      if (pathSegments.length == 1) {
+        final libraryName = pathSegments.single;
+        return '$sdkRootPath/lib/$libraryName/$libraryName.dart';
+      } else {
+        return '$sdkRootPath/lib/${uri.path}';
+      }
+    }
+    return relative(source.fullName, from: '/$corpus/');
+  }
+
   var path = source.fullName;
   var bazelWorkspace = BazelWorkspace.find(provider, path);
   if (bazelWorkspace != null) {
@@ -63,24 +96,64 @@
   if (path.lastIndexOf('CORPUS_NAME') != -1) {
     return path.substring(path.lastIndexOf('CORPUS_NAME') + 12);
   }
+
   return path;
 }
 
 /// If a non-null element is passed, the [SignatureElementVisitor] is used to
 /// generate and return a [String] signature, otherwise [schema.DYNAMIC_KIND] is
 /// returned.
-String _getSignature(ResourceProvider provider, Element? element,
-    String nodeKind, String corpus) {
+String _getSignature(
+    ResourceProvider provider, Element? element, String nodeKind, String corpus,
+    {String? sdkRootPath}) {
   assert(nodeKind != schema.ANCHOR_KIND); // Call _getAnchorSignature instead
   if (element == null) {
     return schema.DYNAMIC_KIND;
   }
   if (element is CompilationUnitElement) {
-    return _getPath(provider, element);
+    return _getPath(provider, element,
+        sdkRootPath: sdkRootPath, corpus: corpus);
   }
   return '$nodeKind:${element.accept(SignatureElementVisitor.instance)}';
 }
 
+/// A helper class for getting the Kythe uri's for elements for querying
+/// Kythe from Cider.
+class CiderKytheHelper {
+  final String sdkRootPath;
+  final String corpus;
+  final ResourceProvider resourceProvider;
+
+  CiderKytheHelper(this.resourceProvider, this.corpus, this.sdkRootPath);
+
+  /// Returns a URI that can be used to query Kythe.
+  String toKytheUri(Element e) {
+    var nodeKind = _getNodeKind(e) ?? schema.RECORD_KIND;
+    var vname = _vNameFromElement(e, nodeKind);
+    return 'kythe://$corpus?lang=dart?path=${vname.path}#${vname.signature}';
+  }
+
+  /// Given all parameters for a [KytheVName] this method creates and returns a
+  /// [KytheVName].
+  KytheVName _vName(String signature, String root, String path,
+      [String language = schema.DART_LANG]) {
+    return KytheVName(signature, corpus, root, path, language);
+  }
+
+  /// Given some [Element] and Kythe node kind, this method generates and
+  /// returns the [KytheVName].
+  KytheVName _vNameFromElement(Element? e, String nodeKind) {
+    assert(nodeKind != schema.FILE_KIND);
+    // general case
+    return _vName(
+        _getSignature(resourceProvider, e, nodeKind, corpus,
+            sdkRootPath: sdkRootPath),
+        '',
+        _getPath(resourceProvider, e,
+            sdkRootPath: sdkRootPath, corpus: corpus));
+  }
+}
+
 /// This visitor writes out Kythe facts and edges as specified by the Kythe
 /// Schema here https://kythe.io/docs/schema/.  This visitor handles all nodes,
 /// facts and edges.
@@ -879,23 +952,6 @@
     return null;
   }
 
-  String? _getNodeKind(Element e) {
-    if (e is FieldElement && e.isEnumConstant) {
-      // FieldElement is a kind of VariableElement, so this test case must be
-      // before the e is VariableElement check.
-      return schema.CONSTANT_KIND;
-    } else if (e is VariableElement || e is PrefixElement) {
-      return schema.VARIABLE_KIND;
-    } else if (e is ExecutableElement) {
-      return schema.FUNCTION_KIND;
-    } else if (e is ClassElement || e is TypeParameterElement) {
-      // TODO(jwren): this should be using absvar instead, see
-      // https://kythe.io/docs/schema/#absvar
-      return schema.RECORD_KIND;
-    }
-    return null;
-  }
-
   void _handleRefCallEdge(
     Element? element, {
     SyntacticEntity? syntacticEntity,
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index 472ddf8..fe9d319 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -45,6 +45,7 @@
       'avoid_unnecessary_containers';
   static const String avoid_void_async = 'avoid_void_async';
   static const String await_only_futures = 'await_only_futures';
+  static const String cascade_invocations = 'cascade_invocations';
   static const String curly_braces_in_flow_control_structures =
       'curly_braces_in_flow_control_structures';
   static const String diagnostic_describe_all_properties =
@@ -136,6 +137,8 @@
   static const String unnecessary_lambdas = 'unnecessary_lambdas';
   static const String unnecessary_late = 'unnecessary_late';
   static const String unnecessary_new = 'unnecessary_new';
+  static const String unnecessary_null_aware_assignments =
+      'unnecessary_null_aware_assignments';
   static const String unnecessary_null_in_if_null_operators =
       'unnecessary_null_in_if_null_operators';
   static const String unnecessary_nullable_for_final_variable_declarations =
@@ -147,6 +150,7 @@
   static const String unnecessary_string_interpolations =
       'unnecessary_string_interpolations';
   static const String unnecessary_this = 'unnecessary_this';
+  static const String use_enums = 'use_enums';
   static const String use_full_hex_values_for_flutter_colors =
       'use_full_hex_values_for_flutter_colors';
   static const String use_function_type_syntax_for_parameters =
@@ -155,4 +159,5 @@
       'use_key_in_widget_constructors';
   static const String use_raw_strings = 'use_raw_strings';
   static const String use_rethrow_when_possible = 'use_rethrow_when_possible';
+  static const String use_super_parameters = 'use_super_parameters';
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
index caa3706..c8cd8e6 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
@@ -55,6 +55,7 @@
     }
 
     driver = drivers.first;
+    await driver.applyPendingFileChanges();
     _session = driver.currentSession;
     if (!resourceProvider.getResource(oldFile).exists) {
       return RefactoringStatus.fatal('$oldFile does not exist.');
@@ -113,8 +114,8 @@
     // If this element is a library, update outgoing references inside the file.
     if (element == libraryElement.definingCompilationUnit) {
       // Handle part-of directives in this library
-      var libraryResult = await driver.currentSession
-          .getResolvedLibraryByElement(libraryElement);
+      var libraryResult =
+          await _session.getResolvedLibraryByElement(libraryElement);
       if (libraryResult is! ResolvedLibraryResult) {
         return;
       }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 4042b04..2a0bf1f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -57,7 +57,7 @@
         if (prefix == null) {
           return;
         }
-        var node = _findNode();
+        var node = await _findNode();
         if (node != null) {
           var uriEnd = node.uri.end;
           var prefixEnd = prefix.nameOffset + prefix.nameLength;
@@ -66,7 +66,7 @@
         }
       } else {
         if (prefix == null) {
-          var node = _findNode();
+          var node = await _findNode();
           if (node != null) {
             var uriEnd = node.uri.end;
             edit = newSourceEdit_range(SourceRange(uriEnd, 0), ' as $newName');
@@ -88,15 +88,13 @@
       if (newName.isEmpty) {
         reference.addEdit(change, '');
       } else {
-        var interpolationIdentifier = _getInterpolationIdentifier(reference);
-        if (interpolationIdentifier != null) {
+        var identifier = await _getInterpolationIdentifier(reference);
+        if (identifier != null) {
           doSourceChange_addElementEdit(
               change,
               reference.element,
-              SourceEdit(
-                  interpolationIdentifier.offset,
-                  interpolationIdentifier.length,
-                  '{$newName.${interpolationIdentifier.name}}'));
+              SourceEdit(identifier.offset, identifier.length,
+                  '{$newName.${identifier.name}}'));
         } else {
           reference.addEdit(change, '$newName.');
         }
@@ -105,7 +103,7 @@
   }
 
   /// Return the [ImportDirective] node that corresponds to the [element].
-  ImportDirective? _findNode() {
+  Future<ImportDirective?> _findNode() async {
     var library = element.library;
     var path = library.source.fullName;
     var unitResult = session.getParsedUnit(path);
@@ -120,7 +118,9 @@
   /// If the given [reference] is before an interpolated [SimpleIdentifier] in
   /// an [InterpolationExpression] without surrounding curly brackets, return
   /// it. Otherwise return `null`.
-  SimpleIdentifier? _getInterpolationIdentifier(SourceReference reference) {
+  Future<SimpleIdentifier?> _getInterpolationIdentifier(
+    SourceReference reference,
+  ) async {
     var source = reference.element.source!;
     var unitResult = session.getParsedUnit(source.fullName);
     if (unitResult is! ParsedUnitResult) {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart b/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart
new file mode 100644
index 0000000..19b2fc3c
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/dart_snippet_producers.dart
@@ -0,0 +1,537 @@
+// 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/src/services/correction/util.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
+import 'package:analyzer/src/dart/analysis/session_helper.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/lint/linter.dart' show LinterContextImpl;
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+
+/// Produces a [Snippet] that creates a Class definition.
+class DartClassSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'class';
+  static const label = 'class';
+
+  DartClassSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('class ');
+        builder.addSimpleLinkedEdit('className', 'ClassName');
+        builder.writeln(' {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a class definition.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartClassSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartClassSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `do while` loop.
+class DartDoWhileLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'do';
+  static const label = 'do while';
+
+  DartDoWhileLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.writeln('do {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('} while (');
+        builder.addSimpleLinkedEdit('condition', 'condition');
+        builder.write(');');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a do-while loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartDoWhileLoopSnippetProducer newInstance(
+          DartSnippetRequest request) =>
+      DartDoWhileLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `for in` loop.
+class DartForInLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'forin';
+  static const label = 'for in';
+
+  DartForInLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+    final varOrFinal =
+        isLintEnabled(LintNames.prefer_final_locals) ? 'final' : 'var';
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('for ($varOrFinal ');
+        builder.addSimpleLinkedEdit('elementName', 'element');
+        builder.write(' in ');
+        builder.addSimpleLinkedEdit('collectionName', 'collection');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a for-in loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartForInLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartForInLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `for` loop.
+class DartForLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'for';
+  static const label = 'for';
+
+  DartForLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('for (var i = 0; i < ');
+        builder.addSimpleLinkedEdit('count', 'count');
+        builder.writeln('; i++) {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a for loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartForLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartForLoopSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates an if/else statement.
+class DartIfElseSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'ife';
+  static const label = 'ife';
+
+  DartIfElseSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.write('if (');
+        builder.addSimpleLinkedEdit('condition', 'condition');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndentedln('} else {');
+        writeIndentedln('  ');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert an if/else statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartIfElseSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartIfElseSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates an if statement.
+class DartIfSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'if';
+  static const label = 'if';
+
+  DartIfSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('if (');
+        builder.addSimpleLinkedEdit('condition', 'condition');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert an if statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartIfSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartIfSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a top-level `main` function.
+///
+/// A `List<String> args` parameter will be included when generating inside a
+/// file in `bin` or `tool` folders.
+class DartMainFunctionSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'main';
+  static const label = 'main()';
+
+  DartMainFunctionSnippetProducer._(DartSnippetRequest request)
+      : super(request);
+
+  /// Whether to insert a `List<String> args` parameter in the generated
+  /// function.
+  ///
+  /// The parameter is suppressed for any known test directories.
+  bool get _insertArgsParameter => !isInTestDirectory;
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+
+    final typeProvider = request.unit.typeProvider;
+    final listString = typeProvider.listType(typeProvider.stringType);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        builder.writeFunctionDeclaration(
+          'main',
+          returnType: VoidTypeImpl.instance,
+          parameterWriter: _insertArgsParameter
+              ? () => builder.writeParameter('args', type: listString)
+              : null,
+          bodyWriter: () {
+            builder.writeln('{');
+            builder.write('  ');
+            builder.selectHere();
+            builder.writeln();
+            builder.write('}');
+          },
+        );
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a main function, used as an entry point.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartMainFunctionSnippetProducer newInstance(
+          DartSnippetRequest request) =>
+      DartMainFunctionSnippetProducer._(request);
+}
+
+abstract class DartSnippetProducer extends SnippetProducer {
+  final AnalysisSessionHelper sessionHelper;
+  final CorrectionUtils utils;
+
+  DartSnippetProducer(DartSnippetRequest request)
+      : sessionHelper = AnalysisSessionHelper(request.analysisSession),
+        utils = CorrectionUtils(request.unit),
+        super(request);
+
+  bool get isInTestDirectory {
+    final path = request.unit.path;
+    return LinterContextImpl.testDirectories
+        .any((testDir) => path.contains(testDir));
+  }
+
+  bool isLintEnabled(String name) {
+    var analysisOptions = sessionHelper.session.analysisContext.analysisOptions;
+    return analysisOptions.isLintEnabled(name);
+  }
+}
+
+/// Produces a [Snippet] that creates an if statement.
+class DartSwitchSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'switch';
+  static const label = 'switch case';
+
+  DartSwitchSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.write('switch (');
+        builder.addSimpleLinkedEdit('expression', 'expression');
+        builder.writeln(') {');
+        writeIndented('  case ');
+        builder.addSimpleLinkedEdit('value', 'value');
+        builder.writeln(':');
+        writeIndented('    ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndentedln('    break;');
+        writeIndentedln('  default:');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a switch statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartSwitchSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartSwitchSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `test()` block.
+class DartTestBlockSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'test';
+  static const label = 'test';
+
+  DartTestBlockSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write("test('");
+        builder.addSimpleLinkedEdit('testName', 'test name');
+        builder.writeln("', () {");
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('});');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a test block.',
+      builder.sourceChange,
+    );
+  }
+
+  @override
+  Future<bool> isValid() async {
+    if (!await super.isValid()) {
+      return false;
+    }
+
+    return isInTestDirectory;
+  }
+
+  static DartTestBlockSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartTestBlockSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `test()` block.
+class DartTestGroupBlockSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'group';
+  static const label = 'group';
+
+  DartTestGroupBlockSnippetProducer._(DartSnippetRequest request)
+      : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write("group('");
+        builder.addSimpleLinkedEdit('groupName', 'group name');
+        builder.writeln("', () {");
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('});');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a test group block.',
+      builder.sourceChange,
+    );
+  }
+
+  @override
+  Future<bool> isValid() async {
+    if (!await super.isValid()) {
+      return false;
+    }
+
+    return isInTestDirectory;
+  }
+
+  static DartTestGroupBlockSnippetProducer newInstance(
+          DartSnippetRequest request) =>
+      DartTestGroupBlockSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a try/catch statement.
+class DartTryCatchSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'try';
+  static const label = 'try';
+
+  DartTryCatchSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        void writeIndentedln(String string) =>
+            builder.writeln('$indent$string');
+        builder.writeln('try {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('} catch (');
+        builder.addLinkedEdit('exceptionName', (builder) {
+          builder.write('e');
+        });
+        builder.writeln(') {');
+        writeIndentedln('  ');
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a try/catch statement.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartTryCatchSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartTryCatchSnippetProducer._(request);
+}
+
+/// Produces a [Snippet] that creates a `while` loop.
+class DartWhileLoopSnippetProducer extends DartSnippetProducer {
+  static const prefix = 'while';
+  static const label = 'while';
+
+  DartWhileLoopSnippetProducer._(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+    final indent = utils.getLinePrefix(request.offset);
+
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        void writeIndented(String string) => builder.write('$indent$string');
+        builder.write('while (');
+        builder.addSimpleLinkedEdit('condition', 'condition');
+        builder.writeln(') {');
+        writeIndented('  ');
+        builder.selectHere();
+        builder.writeln();
+        writeIndented('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a while loop.',
+      builder.sourceChange,
+    );
+  }
+
+  static DartWhileLoopSnippetProducer newInstance(DartSnippetRequest request) =>
+      DartWhileLoopSnippetProducer._(request);
+}
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
index 1a6a9ec..90b520d 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
@@ -2,25 +2,22 @@
 // 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/snippets/dart/dart_snippet_producers.dart';
 import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/analysis/session_helper.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:meta/meta.dart';
 
-abstract class FlutterSnippetProducer extends SnippetProducer {
+abstract class FlutterSnippetProducer extends DartSnippetProducer {
   final flutter = Flutter.instance;
-  final AnalysisSessionHelper sessionHelper;
 
   late ClassElement? classWidget;
 
-  FlutterSnippetProducer(DartSnippetRequest request)
-      : sessionHelper = AnalysisSessionHelper(request.analysisSession),
-        super(request);
+  FlutterSnippetProducer(DartSnippetRequest request) : super(request);
 
   @override
   @mustCallSuper
@@ -56,7 +53,7 @@
   late ClassElement? classBuildContext;
   late ClassElement? classKey;
 
-  FlutterStatefulWidgetSnippetProducer(DartSnippetRequest request)
+  FlutterStatefulWidgetSnippetProducer._(DartSnippetRequest request)
       : super(request);
 
   @override
@@ -152,7 +149,7 @@
     return Snippet(
       prefix,
       label,
-      'Insert a StatefulWidget',
+      'Insert a Flutter StatefulWidget.',
       builder.sourceChange,
     );
   }
@@ -175,7 +172,7 @@
 
   static FlutterStatefulWidgetSnippetProducer newInstance(
           DartSnippetRequest request) =>
-      FlutterStatefulWidgetSnippetProducer(request);
+      FlutterStatefulWidgetSnippetProducer._(request);
 }
 
 /// Produces a [Snippet] that creates a Flutter StatefulWidget with a
@@ -192,7 +189,7 @@
   late ClassElement? classAnimationController;
   late ClassElement? classSingleTickerProviderStateMixin;
 
-  FlutterStatefulWidgetWithAnimationControllerSnippetProducer(
+  FlutterStatefulWidgetWithAnimationControllerSnippetProducer._(
       DartSnippetRequest request)
       : super(request);
 
@@ -333,7 +330,7 @@
     return Snippet(
       prefix,
       label,
-      'Insert a StatefulWidget with an AnimationController',
+      'Insert a Flutter StatefulWidget with an AnimationController.',
       builder.sourceChange,
     );
   }
@@ -361,7 +358,8 @@
 
   static FlutterStatefulWidgetWithAnimationControllerSnippetProducer
       newInstance(DartSnippetRequest request) =>
-          FlutterStatefulWidgetWithAnimationControllerSnippetProducer(request);
+          FlutterStatefulWidgetWithAnimationControllerSnippetProducer._(
+              request);
 }
 
 /// Produces a [Snippet] that creates a Flutter StatelessWidget.
@@ -373,7 +371,7 @@
   late ClassElement? classBuildContext;
   late ClassElement? classKey;
 
-  FlutterStatelessWidgetSnippetProducer(DartSnippetRequest request)
+  FlutterStatelessWidgetSnippetProducer._(DartSnippetRequest request)
       : super(request);
 
   @override
@@ -446,7 +444,7 @@
     return Snippet(
       prefix,
       label,
-      'Insert a StatelessWidget',
+      'Insert a Flutter StatelessWidget.',
       builder.sourceChange,
     );
   }
@@ -468,5 +466,5 @@
 
   static FlutterStatelessWidgetSnippetProducer newInstance(
           DartSnippetRequest request) =>
-      FlutterStatelessWidgetSnippetProducer(request);
+      FlutterStatelessWidgetSnippetProducer._(request);
 }
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart b/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
index 34dc40b..914de9f 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/completion_core.dart';
+import 'package:analysis_server/src/services/snippets/dart/dart_snippet_producers.dart';
 import 'package:analysis_server/src/services/snippets/dart/flutter_snippet_producers.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
@@ -23,10 +24,24 @@
   final producerGenerators =
       const <SnippetContext, List<SnippetProducerGenerator>>{
     SnippetContext.atTopLevel: [
+      DartMainFunctionSnippetProducer.newInstance,
       FlutterStatefulWidgetSnippetProducer.newInstance,
       FlutterStatefulWidgetWithAnimationControllerSnippetProducer.newInstance,
       FlutterStatelessWidgetSnippetProducer.newInstance,
-    ]
+      DartClassSnippetProducer.newInstance,
+    ],
+    SnippetContext.inBlock: [
+      DartDoWhileLoopSnippetProducer.newInstance,
+      DartForInLoopSnippetProducer.newInstance,
+      DartForLoopSnippetProducer.newInstance,
+      DartIfElseSnippetProducer.newInstance,
+      DartIfSnippetProducer.newInstance,
+      DartSwitchSnippetProducer.newInstance,
+      DartTryCatchSnippetProducer.newInstance,
+      DartWhileLoopSnippetProducer.newInstance,
+      DartTestBlockSnippetProducer.newInstance,
+      DartTestGroupBlockSnippetProducer.newInstance,
+    ],
   };
 
   Future<List<Snippet>> computeSnippets(
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index b7f2f61..dfaacc9 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -30,6 +30,7 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:collection/collection.dart';
 import 'package:path/path.dart' as path;
 
@@ -204,12 +205,13 @@
     // emit the data as a table
     buf.writeln('<table>');
     buf.writeln(
-        '<tr><th>Time</th><th>Results</th><th>Source</th><th>Snippet</th></tr>');
+        '<tr><th>Time</th><th>Computed Results</th><th>Transmitted Results</th><th>Source</th><th>Snippet</th></tr>');
     for (var completion in completions) {
       var shortName = pathContext.basename(completion.path);
       buf.writeln('<tr>'
           '<td class="pre right">${printMilliseconds(completion.elapsedInMilliseconds)}</td>'
-          '<td class="right">${completion.suggestionCountStr}</td>'
+          '<td class="right">${completion.computedSuggestionCountStr}</td>'
+          '<td class="right">${completion.transmittedSuggestionCountStr}</td>'
           '<td>${escape(shortName)}</td>'
           '<td><code>${escape(completion.snippet)}</code></td>'
           '</tr>');
@@ -501,8 +503,8 @@
     buf.writeln('<p>');
     buf.writeln(
         writeOption('Has .packages file', folder.getChild('.packages').exists));
-    buf.writeln(writeOption(
-        'Has pubspec.yaml file', folder.getChild('pubspec.yaml').exists));
+    buf.writeln(writeOption('Has pubspec.yaml file',
+        folder.getChild(file_paths.pubspecYaml).exists));
     buf.writeln('</p>');
 
     buf.writeln('</div>');
diff --git a/pkg/analysis_server/lib/src/utilities/mocks.dart b/pkg/analysis_server/lib/src/utilities/mocks.dart
index 6ad7371..494b98c 100644
--- a/pkg/analysis_server/lib/src/utilities/mocks.dart
+++ b/pkg/analysis_server/lib/src/utilities/mocks.dart
@@ -207,8 +207,8 @@
   }
 
   @override
-  List<String> pathsFor(String pluginPath) {
-    fail('Unexpected invocation of pathsFor');
+  PluginFiles filesFor(String pluginPath) {
+    fail('Unexpected invocation of filesFor');
   }
 
   @override
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 59847fe..ab5be7e 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -34,9 +34,10 @@
     return _analysisContextCollection!.contexts.map((e) => e.driver).toList();
   }
 
-  /// The file system specific `/home/test/analysis_options.yaml` path.
+  /// The file system specific path for `analysis_options.yaml` in
+  /// [testPackageRootPath].
   String get analysisOptionsPath =>
-      convertPath('/home/test/analysis_options.yaml');
+      convertPath('$testPackageRootPath/analysis_options.yaml');
 
   List<String> get collectionIncludedPaths => [workspaceRootPath];
 
@@ -49,6 +50,7 @@
   /// class, an empty list if there are no experiments that should be enabled.
   List<String> get experiments => [
         EnableString.enhanced_enums,
+        EnableString.macros,
         EnableString.named_arguments_anywhere,
         EnableString.super_parameters,
       ];
@@ -62,7 +64,7 @@
 
   Folder get sdkRoot => newFolder('/sdk');
 
-  AnalysisSession get session => contextFor('/home/test').currentSession;
+  Future<AnalysisSession> get session => sessionFor(testPackageRootPath);
 
   String? get testPackageLanguageVersion => latestLanguageVersion;
 
@@ -72,19 +74,21 @@
 
   String get testPackageTestPath => '$testPackageRootPath/test';
 
-  /// The file system specific `/home/test/pubspec.yaml` path.
-  String get testPubspecPath => convertPath('/home/test/pubspec.yaml');
+  /// The file system specific path for `pubspec.yaml` in [testPackageRootPath].
+  String get testPubspecPath =>
+      convertPath('$testPackageRootPath/pubspec.yaml');
 
   String get workspaceRootPath => '/home';
 
   void addSource(String path, String content) {
-    newFile(path, content: content);
+    newFile2(path, content);
   }
 
   Future<void> analyzeTestPackageFiles() async {
     var analysisContext = contextFor(testPackageRootPath);
     var files = analysisContext.contextRoot.analyzedFiles().toList();
     for (var path in files) {
+      await analysisContext.applyPendingFileChanges();
       await analysisContext.currentSession.getResolvedUnit(path);
     }
   }
@@ -130,7 +134,7 @@
       }
     }
 
-    newFile(analysisOptionsPath, content: buffer.toString());
+    newFile2(analysisOptionsPath, buffer.toString());
   }
 
   AnalysisDriver driverFor(String path) {
@@ -154,22 +158,28 @@
   }
 
   @override
-  File newFile(String path, {String content = ''}) {
+  File newFile2(String path, String content) {
     if (_analysisContextCollection != null && !path.endsWith('.dart')) {
       throw StateError('Only dart files can be changed after analysis.');
     }
 
     path = convertPath(path);
     _addAnalyzedFileToDrivers(path);
-    return super.newFile(path, content: content);
+    return super.newFile2(path, content);
   }
 
   Future<ResolvedUnitResult> resolveFile(String path) async {
     path = convertPath(path);
-    var session = contextFor(path).currentSession;
+    var session = await sessionFor(path);
     return await session.getResolvedUnit(path) as ResolvedUnitResult;
   }
 
+  Future<AnalysisSession> sessionFor(String path) async {
+    var analysisContext = _contextFor(path);
+    await analysisContext.applyPendingFileChanges();
+    return analysisContext.currentSession;
+  }
+
   @mustCallSuper
   void setUp() {
     if (!_lintRulesAreRegistered) {
@@ -197,15 +207,15 @@
     AnalysisEngine.instance.clearCaches();
   }
 
-  /// Update `/home/test/pubspec.yaml` and create the driver.
+  /// Update `pubspec.yaml` and create the driver.
   void updateTestPubspecFile(String content) {
-    newFile(testPubspecPath, content: content);
+    newFile2(testPubspecPath, content);
   }
 
   void verifyCreatedCollection() {}
 
   void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr: toUriStr));
+    newFile2(path, config.toContent(toUriStr: toUriStr));
   }
 
   void writeTestPackageConfig({
@@ -229,23 +239,23 @@
 
     if (meta || flutter) {
       var libFolder = MockPackages.instance.addMeta(resourceProvider);
-      config.add(name: 'meta', rootPath: libFolder.parent2.path);
+      config.add(name: 'meta', rootPath: libFolder.parent.path);
     }
 
     if (flutter) {
       {
         var libFolder = MockPackages.instance.addUI(resourceProvider);
-        config.add(name: 'ui', rootPath: libFolder.parent2.path);
+        config.add(name: 'ui', rootPath: libFolder.parent.path);
       }
       {
         var libFolder = MockPackages.instance.addFlutter(resourceProvider);
-        config.add(name: 'flutter', rootPath: libFolder.parent2.path);
+        config.add(name: 'flutter', rootPath: libFolder.parent.path);
       }
     }
 
     if (vector_math) {
       var libFolder = MockPackages.instance.addVectorMath(resourceProvider);
-      config.add(name: 'vector_math', rootPath: libFolder.parent2.path);
+      config.add(name: 'vector_math', rootPath: libFolder.parent.path);
     }
 
     var path = '$testPackageRootPath/.dart_tool/package_config.json';
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 0c09690..3dd0ad3 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -57,15 +57,16 @@
   }
 
   @override
-  File newFile(String path, {String content = ''}) {
+  File newFile2(String path, String content) {
     if (useLineEndingsForPlatform) {
       content = normalizeNewlinesForPlatform(content);
     }
-    return super.newFile(path, content: content);
+    return super.newFile2(path, content);
   }
 
   Future<void> resolveFile2(String path) async {
-    var result = await session.getResolvedUnit(path) as ResolvedUnitResult;
+    var result =
+        await (await session).getResolvedUnit(path) as ResolvedUnitResult;
     testAnalysisResult = result;
     testCode = result.content;
     testUnit = result.unit;
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index baca9b0..e3f0c6e 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);
+
+    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');
-    newFile(libPath, content: r'''
-library main;
-part 'main_part.dart';
+    var libraryFile = newFile2('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
 class A {}
 ''');
-    newFile(partPath, content: 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');
-    newFile(file, content: '''
-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, testFile.path);
       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 440b1b4..bb65e9a 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(() {
@@ -20,13 +20,13 @@
 @reflectiveTest
 class AnalysisHoverBazelTest extends AbstractAnalysisTest {
   Future<void> test_bazel_notOwnedUri() async {
-    newFile('/workspace/WORKSPACE');
+    newFile2('/workspace/WORKSPACE', '');
     projectPath = newFolder('/workspace').path;
     testFile = convertPath('/workspace/dart/my/lib/test.dart');
 
-    newFile(
+    newFile2(
       '/workspace/bazel-genfiles/dart/my/lib/test.dart',
-      content: '// generated',
+      '// generated',
     );
 
     await createProject();
@@ -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);
+    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 1f81f60..9927cea 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -4,12 +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/file_system/file_system.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../mocks.dart';
 import 'notification_navigation_test.dart';
 
 void main() {
@@ -25,10 +24,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    server.handlers = [
-      AnalysisDomainHandler(server),
-    ];
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_beforeAnalysisComplete() async {
@@ -38,7 +34,7 @@
   print(test);
 }
 ''');
-    await _getNavigation(testFile, testCode.indexOf('test);'), 0);
+    await _getNavigation(search: 'test);');
     assertHasRegion('test);');
     assertHasTarget('test = 0');
   }
@@ -49,8 +45,7 @@
 String main() {
 }''');
     await waitForTasksFinished();
-    var search = 'Returns';
-    await _getNavigation(testFile, testCode.indexOf(search), 1);
+    await _getNavigation(search: 'Returns', length: 1);
     expect(regions, hasLength(0));
   }
 
@@ -60,12 +55,26 @@
 String main() {
 }''');
     await waitForTasksFinished();
-    var search = '[String';
-    await _getNavigation(testFile, testCode.indexOf(search), 1);
+    await _getNavigation(search: '[String', length: 1);
     expect(regions, hasLength(1));
     assertHasRegion('String]');
   }
 
+  Future<void> test_comment_toolSeeCodeComment() async {
+    var examplePath = 'examples/api/foo.dart';
+    newFile2('$testPackageLibPath/$examplePath', '');
+    addTestFile('''
+/// {@tool dartpad}
+/// ** See code in $examplePath **
+/// {@end-tool}
+String main() {
+}''');
+    await waitForTasksFinished();
+    await _getNavigation(search: examplePath, length: 1);
+    expect(regions, hasLength(1));
+    assertHasRegion(examplePath, examplePath.length);
+  }
+
   Future<void> test_constructorInvocation() async {
     // Check that a constructor invocation navigates to the constructor and not
     // the class.
@@ -74,32 +83,33 @@
 class Foo {
   // ...
   // ...
-  Foo() {
-    print('');
-  }
+  Foo() {}
+  Foo.named() {}
   // ...
 }
 
 final a = Foo();
-final b = new Foo();
+final b = new Foo.named(); // 0
 ''');
     await waitForTasksFinished();
 
-    // Without `new`
-    await _getNavigation(testFile, testCode.indexOf('Foo();'), 0);
+    // Without `new` / unnamed
+    await _getNavigation(search: 'Foo();');
     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.offset, findOffset('Foo() {'));
+    expect(target.length, 3);
 
-    // With `new`
-    await _getNavigation(testFile, testCode.indexOf('new Foo();') + 4, 0);
+    // With `new` / named
+    await _getNavigation(search: 'named(); // 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, findOffset('named() {'));
+    expect(target.length, 5);
   }
 
   Future<void> test_fieldType() async {
@@ -113,7 +123,7 @@
 }
 ''';
     addTestFile(text);
-    await _getNavigation(testFile, text.indexOf('Foo foo'), 0);
+    await _getNavigation(search: 'Foo foo');
     expect(targets, hasLength(1));
     var target = targets.first;
     expect(target.kind, ElementKind.CLASS);
@@ -124,7 +134,7 @@
   }
 
   Future<void> test_fileDoesNotExist() async {
-    var file = convertPath('$projectPath/doesNotExist.dart');
+    var file = convertPath('$testPackageLibPath/doesNotExist.dart');
     var request = _createGetNavigationRequest(file, 0, 100);
     var response = await serverChannel.sendRequest(request);
     expect(response.error, isNull);
@@ -134,15 +144,16 @@
     expect(result['regions'], isEmpty);
   }
 
+  /// TODO(scheglov) Rewrite these tests to work with any file.
+  @FailingTest(reason: 'requires infrastructure rewriting')
   Future<void> test_fileOutsideOfRoot() async {
-    testFile = convertPath('/outside.dart');
-    addTestFile('''
+    var file = newFile2('/outside.dart', '''
 main() {
   var test = 0;
   print(test);
 }
 ''');
-    await _getNavigation(testFile, testCode.indexOf('test);'), 0);
+    await _getNavigation(file: file, search: 'test);');
     assertHasRegion('test);');
     assertHasTarget('test = 0');
   }
@@ -154,7 +165,7 @@
 main() {
 }''');
     await waitForTasksFinished();
-    await _getNavigation(testFile, 0, 17);
+    await _getNavigation(offset: 0, length: 17);
     expect(regions, hasLength(1));
     assertHasRegionString("'dart:math'");
     expect(testTargets, hasLength(1));
@@ -168,7 +179,7 @@
 main() {
 }''');
     await waitForTasksFinished();
-    await _getNavigation(testFile, 7, 11);
+    await _getNavigation(offset: 7, length: 11);
     expect(regions, hasLength(1));
     assertHasRegionString("'dart:math'");
     expect(testTargets, hasLength(1));
@@ -176,8 +187,8 @@
   }
 
   Future<void> test_importUri_configurations() async {
-    final ioFile = newFile(join(testFolder, 'io.dart'));
-    final htmlFile = newFile(join(testFolder, 'html.dart'));
+    final ioFile = newFile2('$testPackageLibPath/io.dart', '');
+    final htmlFile = newFile2('$testPackageLibPath/html.dart', '');
     addTestFile('''
 import 'foo.dart'
   if (dart.library.io) 'io.dart'
@@ -188,7 +199,7 @@
     await waitForTasksFinished();
 
     // Request navigations for 'io.dart'
-    await _getNavigation(testFile, 41, 9);
+    await _getNavigation(offset: 41, length: 9);
     expect(regions, hasLength(1));
     assertHasRegionString("'io.dart'");
     expect(testTargets, hasLength(1));
@@ -197,7 +208,7 @@
     expect(targetFiles[target.fileIndex], equals(ioFile.path));
 
     // Request navigations for 'html.dart'
-    await _getNavigation(testFile, 76, 11);
+    await _getNavigation(offset: 76, length: 11);
     expect(regions, hasLength(1));
     assertHasRegionString("'html.dart'");
     expect(testTargets, hasLength(1));
@@ -208,20 +219,22 @@
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = _createGetNavigationRequest('test.dart', 0, 0);
-    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 =
         _createGetNavigationRequest(convertPath('/foo/../bar/test.dart'), 0, 0);
-    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,
     );
   }
 
@@ -238,7 +251,7 @@
     await waitForTasksFinished();
     // request navigation
     var navCode = ' + bbb + ';
-    await _getNavigation(testFile, testCode.indexOf(navCode), navCode.length);
+    await _getNavigation(search: navCode, length: navCode.length);
     // verify
     {
       assertHasRegion('aaa +');
@@ -271,32 +284,32 @@
     await waitForTasksFinished();
     {
       var search = '[0';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[](index)', 2);
     }
     {
       var search = ']; // []';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[](index)', 2);
     }
     {
       var search = '[1';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[]=(index', 3);
     }
     {
       var search = '] = 1';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[]=(index', 3);
     }
     {
       var search = '[2';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[]=(index', 3);
     }
     {
       var search = '] += 2';
-      await _getNavigation(testFile, testCode.indexOf(search), 1);
+      await _getNavigation(search: search, length: 1);
       assertHasOperatorRegion(search, 1, '[]=(index', 3);
     }
   }
@@ -309,7 +322,7 @@
 }
 ''');
     await waitForTasksFinished();
-    await _getNavigation(testFile, testCode.indexOf(');'), 0);
+    await _getNavigation(search: ');');
     assertHasRegion('test);');
     assertHasTarget('test = 0');
   }
@@ -322,7 +335,7 @@
 }
 ''');
     await waitForTasksFinished();
-    await _getNavigation(testFile, testCode.indexOf('test);'), 0);
+    await _getNavigation(search: 'test);');
     assertHasRegion('test);');
     assertHasTarget('test = 0');
   }
@@ -332,8 +345,23 @@
         .toRequest(requestId);
   }
 
-  Future<void> _getNavigation(String file, int offset, int length) async {
-    var request = _createGetNavigationRequest(file, offset, length);
+  Future<void> _getNavigation({
+    File? file,
+    int? offset,
+    String? search,
+    int length = 0,
+  }) async {
+    file ??= testFile;
+
+    if (offset == null) {
+      if (search != null) {
+        offset = offsetInFile(file, search);
+      } else {
+        throw ArgumentError("Either 'offset' or 'search' must be provided");
+      }
+    }
+
+    var request = _createGetNavigationRequest(file.path, offset, length);
     var response = await serverChannel.sendRequest(request);
     var result = AnalysisGetNavigationResult.fromResponse(response);
     targetFiles = result.files;
diff --git a/pkg/analysis_server/test/analysis/get_signature_test.dart b/pkg/analysis_server/test/analysis/get_signature_test.dart
index d213962..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 {
-    newFile('/project/bin/other.dart', content: '''
+    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_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index 6116340..f783d03 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -6,13 +6,13 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisOptions;
-import 'package:analysis_server/src/domain_analysis.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -21,8 +21,9 @@
 }
 
 @reflectiveTest
-class AnalysisOptionsFileNotificationTest extends AbstractAnalysisTest {
-  Map<String, List<AnalysisError>> filesErrors = {};
+class AnalysisOptionsFileNotificationTest extends PubPackageAnalysisServerTest {
+  late File optionsFile;
+  Map<File, List<AnalysisError>> filesErrors = {};
 
   final testSource = '''
 main() {
@@ -33,40 +34,27 @@
 
   List<AnalysisError> get errors => filesErrors[testFile]!;
 
-  List<AnalysisError> get optionsFileErrors => filesErrors[optionsFilePath]!;
-
-  String get optionsFilePath => '$projectPath/analysis_options.yaml';
+  List<AnalysisError> get optionsFileErrors => filesErrors[optionsFile]!;
 
   List<AnalysisError> get testFileErrors => filesErrors[testFile]!;
 
   void addOptionsFile(String contents) {
-    newFile(optionsFilePath, content: contents);
+    optionsFile = newAnalysisOptionsYamlFile2(testPackageRootPath, contents);
   }
 
   @override
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
       var decoded = AnalysisErrorsParams.fromNotification(notification);
-      filesErrors[decoded.file] = decoded.errors;
+      filesErrors[getFile(decoded.file)] = decoded.errors;
     }
   }
 
-  Future<void> setAnalysisRoot() async {
-    await setRoots(included: [projectPath], excluded: []);
-  }
-
   @override
-  void setUp() {
+  Future<void> setUp() async {
     registerLintRules();
     super.setUp();
-    server.handlers = [AnalysisDomainHandler(server)];
-  }
-
-  @override
-  void tearDown() {
-    filesErrors[optionsFilePath] = [];
-    filesErrors[testFile] = [];
-    super.tearDown();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_error_filter() async {
@@ -82,8 +70,6 @@
 }
 ''');
 
-    await setAnalysisRoot();
-
     await waitForTasksFinished();
 
     // Verify options file.
@@ -109,8 +95,6 @@
 }
 ''');
 
-    await setAnalysisRoot();
-
     await waitForTasksFinished();
 
     // Verify options file.
@@ -148,7 +132,6 @@
 ''');
 
     addTestFile(testSource);
-    await setAnalysisRoot();
 
     await waitForTasksFinished();
 
@@ -174,7 +157,6 @@
 ''');
 
     addTestFile(testSource);
-    await setAnalysisRoot();
 
     await waitForTasksFinished();
 
@@ -186,15 +168,11 @@
 
   Future<void> test_options_file_added() async {
     addTestFile(testSource);
-    await setAnalysisRoot();
 
     await waitForTasksFinished();
 
     // Verify that lints are disabled.
-    expect(analysisOptions.lint, false);
-
-    // Clear errors.
-    filesErrors[testFile] = [];
+    expect(testFileAnalysisOptions.lint, false);
 
     // Add options file with a lint enabled.
     addOptionsFile('''
@@ -213,7 +191,6 @@
     addOptionsFile('''
 ; #bang
 ''');
-    await setAnalysisRoot();
 
     await waitForTasksFinished();
 
@@ -231,25 +208,21 @@
 ''');
 
     addTestFile(testSource);
-    await setAnalysisRoot();
 
     await waitForTasksFinished();
 
     verifyLintsEnabled(['camel_case_types']);
 
-    // Clear errors.
-    filesErrors[testFile] = [];
-
-    deleteFile(optionsFilePath);
+    deleteFile(optionsFile.path);
 
     await pumpEventQueue();
     await waitForTasksFinished();
 
-    expect(analysisOptions.lint, false);
+    expect(testFileAnalysisOptions.lint, false);
   }
 
   void verifyLintsEnabled(List<String> lints) {
-    var options = analysisOptions;
+    var options = testFileAnalysisOptions;
     expect(options.lint, true);
     var rules = options.lintRules.map((rule) => rule.name);
     expect(rules, unorderedEquals(lints));
diff --git a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
index 93cb4ac..31ae228 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
@@ -5,10 +5,11 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -17,13 +18,14 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationAnalyzedFilesTest extends AbstractAnalysisTest {
+class AnalysisNotificationAnalyzedFilesTest
+    extends PubPackageAnalysisServerTest {
   late List<String> analyzedFiles;
   bool analyzedFilesReceived = false;
 
-  void assertHasFile(String filePath) {
+  void assertHasFile(File file) {
     expect(analyzedFilesReceived, isTrue);
-    expect(analyzedFiles, contains(filePath));
+    expect(analyzedFiles, contains(file.path));
   }
 
   void assertHasNoFile(String filePath) {
@@ -32,7 +34,9 @@
   }
 
   Future<void> prepareAnalyzedFiles() async {
-    addGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
+    await addGeneralAnalysisSubscription(
+      GeneralAnalysisService.ANALYZED_FILES,
+    );
     await pumpEventQueue(times: 5000);
   }
 
@@ -48,7 +52,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -69,8 +73,7 @@
   }
 
   Future<void> test_beforeAnalysis_excludeYamlFiles() async {
-    var yamlFile = getFolder(projectPath).getChildAssumingFile('sample.yaml');
-    yamlFile.writeAsStringSync('');
+    var yamlFile = newFile2('$testPackageRootPath/sample.yaml', '');
     addTestFile('''
 class A {}
 ''');
@@ -111,17 +114,19 @@
     // Making a change that *does* affect the set of reachable files should
     // trigger the notification to be re-sent.
     addTestFile('class A {}');
-    newFile('/foo.dart', content: 'library foo;');
+    var foo = newFile2('/foo.dart', 'library foo;');
     await prepareAnalyzedFiles();
     expect(analyzedFilesReceived, isTrue);
 
     analyzedFilesReceived = false;
     modifyTestFile('import "${toUriStr('/foo.dart')}";');
     await prepareAnalyzedFiles();
-    assertHasFile(convertPath('/foo.dart'));
+    assertHasFile(foo);
   }
 
   void unsubscribeAnalyzedFiles() {
-    removeGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
+    removeGeneralAnalysisSubscription(
+      GeneralAnalysisService.ANALYZED_FILES,
+    );
   }
 }
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..df55415 100644
--- a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
@@ -10,7 +10,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -19,7 +19,8 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationClosingLabelsTest extends AbstractAnalysisTest {
+class AnalysisNotificationClosingLabelsTest
+    extends PubPackageAnalysisServerTest {
   static const sampleCode = '''
 Widget build(BuildContext context) {
   return /*1*/new Row(
@@ -44,7 +45,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_CLOSING_LABELS) {
       var params = AnalysisClosingLabelsParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         lastLabels = params.labels;
         _labelsReceived.complete(null);
       }
@@ -57,11 +58,11 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
-  void subscribeForLabels() {
-    addAnalysisSubscription(AnalysisService.CLOSING_LABELS, testFile);
+  Future<void> subscribeForLabels() async {
+    await addAnalysisSubscription(AnalysisService.CLOSING_LABELS, testFile);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -69,7 +70,7 @@
     await waitForTasksFinished();
     expect(lastLabels, isNull);
 
-    await waitForLabels(() => subscribeForLabels());
+    await waitForLabels(() async => await subscribeForLabels());
 
     expect(lastLabels, expectedResults);
   }
@@ -84,18 +85,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_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index e2aa4c7..ba24eaa 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -5,16 +5,16 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:linter/src/rules.dart';
+import 'package:path/path.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 import '../src/utilities/mock_packages.dart';
 
 void main() {
@@ -24,19 +24,19 @@
 }
 
 @reflectiveTest
-class NotificationErrorsTest extends AbstractAnalysisTest {
+class NotificationErrorsTest extends PubPackageAnalysisServerTest {
   late Folder pedanticFolder;
-  Map<String, List<AnalysisError>?> filesErrors = {};
+  Map<File, List<AnalysisError>?> filesErrors = {};
 
   @override
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
       var decoded = AnalysisErrorsParams.fromNotification(notification);
-      filesErrors[decoded.file] = decoded.errors;
+      filesErrors[getFile(decoded.file)] = decoded.errors;
     } else if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
       var decoded = AnalysisFlushResultsParams.fromNotification(notification);
       for (var file in decoded.files) {
-        filesErrors[file] = null;
+        filesErrors[getFile(file)] = null;
       }
     }
   }
@@ -45,80 +45,80 @@
   void setUp() {
     registerLintRules();
     super.setUp();
-    server.handlers = [
-      AnalysisDomainHandler(server),
-    ];
+    server.pendingFilesRemoveOverlayDelay = const Duration(milliseconds: 10);
     pedanticFolder = MockPackages.instance.addPedantic(resourceProvider);
   }
 
   Future<void> test_analysisOptionsFile() async {
-    var filePath = join(projectPath, 'analysis_options.yaml');
-    var analysisOptionsFile = newFile(filePath, content: '''
+    var analysisOptions = newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - invalid_lint_rule_name
-''').path;
+''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
     // Verify the error result.
     //
-    var errors = filesErrors[analysisOptionsFile]!;
+    var errors = filesErrors[analysisOptions]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, analysisOptions.path);
     expect(error.severity, AnalysisErrorSeverity.WARNING);
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
   }
 
   Future<void> test_analysisOptionsFile_packageInclude() async {
-    var filePath = join(projectPath, 'analysis_options.yaml');
-    var analysisOptionsFile = newFile(filePath, content: '''
+    var analysisOptions = newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 include: package:pedantic/analysis_options.yaml
-''').path;
+''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
 
     // Verify there's an error for the import.
-    var errors = filesErrors[analysisOptionsFile]!;
+    var errors = filesErrors[analysisOptions]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, analysisOptions.path);
     expect(error.severity, AnalysisErrorSeverity.WARNING);
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
 
     // Write a package file that allows resolving the include.
-    newDotPackagesFile(projectPath, content: '''
-pedantic:${pedanticFolder.toUri()}
-''');
+    newPackageConfigJsonFile(
+      testPackageRootPath,
+      (PackageConfigFileBuilder()
+            ..add(name: 'pedantic', rootPath: pedanticFolder.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
 
     // Ensure the errors disappear.
     await waitForTasksFinished();
     await pumpEventQueue();
-    errors = filesErrors[analysisOptionsFile]!;
+    errors = filesErrors[analysisOptions]!;
     expect(errors, hasLength(0));
   }
 
   Future<void> test_androidManifestFile() async {
-    var filePath = join(projectPath, 'android', 'AndroidManifest.xml');
-    var manifestFile = newFile(filePath, content: '''
+    var manifestPath =
+        join(testPackageRootPath, 'android', 'AndroidManifest.xml');
+    var manifestFile = newFile2(manifestPath, '''
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android">
     <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
     <uses-feature android:name="android.software.home_screen" />
 </manifest>
-''').path;
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+''');
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
 ''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
@@ -127,27 +127,28 @@
     var errors = filesErrors[manifestFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, manifestFile.path);
     expect(error.severity, AnalysisErrorSeverity.WARNING);
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
   }
 
   Future<void> test_androidManifestFile_dotDirectoryIgnored() async {
-    var filePath = join(projectPath, 'ios', '.symlinks', 'AndroidManifest.xml');
-    var manifestFile = newFile(filePath, content: '''
+    var manifestPath =
+        join(testPackageRootPath, 'ios', '.symlinks', 'AndroidManifest.xml');
+    var manifestFile = newFile2(manifestPath, '''
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android">
     <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
     <uses-feature android:name="android.software.home_screen" />
 </manifest>
 ''').path;
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
 ''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
@@ -161,23 +162,24 @@
     // Although errors are not generated for dotfolders, their contents should
     // still be analyzed so that code that references them (for example
     // flutter_gen) should still be updated.
-    final configPath = join(projectPath, '.dart_tool/package_config.json');
-    final generatedProject = join(projectPath, '.dart_tool/foo');
+    final configPath =
+        join(testPackageRootPath, '.dart_tool/package_config.json');
+    final generatedProject = join(testPackageRootPath, '.dart_tool/foo');
     final generatedFile = join(generatedProject, 'lib', 'foo.dart');
 
     // Add the generated project into package_config.json.
     final config = PackageConfigFileBuilder();
     config.add(name: 'foo', rootPath: generatedProject);
-    newFile(configPath, content: config.toContent(toUriStr: toUriStr));
+    newFile2(configPath, config.toContent(toUriStr: toUriStr));
 
     // Set up project that references the class prior to initial analysis.
-    newFile(generatedFile, content: 'class A {}');
+    newFile2(generatedFile, 'class A {}');
     addTestFile('''
 import 'package:foo/foo.dart';
 A? a;
     ''');
 
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
     expect(filesErrors[testFile], isEmpty);
@@ -192,13 +194,12 @@
   }
 
   Future<void> test_dataFile() async {
-    var filePath = join(projectPath, 'lib', 'fix_data.yaml');
-    var dataFile = newFile(filePath, content: '''
+    var dataFile = newFile2('$testPackageLibPath/fix_data.yaml', '''
 version: 1
 transforms:
-''').path;
+''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
@@ -207,7 +208,7 @@
     var errors = filesErrors[dataFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, dataFile.path);
     expect(error.severity, AnalysisErrorSeverity.ERROR);
     expect(error.type, AnalysisErrorType.COMPILE_TIME_ERROR);
   }
@@ -216,11 +217,10 @@
     // Files inside dotFolders should not generate error notifications even
     // if they are added to priority (priority affects only priority, not what
     // is analyzed).
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('');
     var brokenFile =
-        newFile(join(projectPath, '.dart_tool/broken.dart'), content: 'err')
-            .path;
+        newFile2(join(testPackageRootPath, '.dart_tool/broken.dart'), 'err');
 
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
@@ -241,18 +241,19 @@
     // them to be opened (such as hovers) should not result in error notifications
     // because there is no event that would flush them and they'd remain in the
     // editor forever.
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('');
     var brokenFile =
-        newFile(join(projectPath, '.dart_tool/broken.dart'), content: 'err')
-            .path;
+        newFile2('$testPackageRootPath/.dart_tool/broken.dart', 'err');
 
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
     expect(filesErrors[brokenFile], isNull);
 
     // Send a getHover request for the file that will cause it to be read from disk.
-    await waitResponse(AnalysisGetHoverParams(brokenFile, 0).toRequest('0'));
+    await handleSuccessfulRequest(
+      AnalysisGetHoverParams(brokenFile.path, 0).toRequest('0'),
+    );
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
 
@@ -261,14 +262,14 @@
   }
 
   Future<void> test_excludedFolder() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   exclude:
     - excluded/**
 ''');
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     var excludedFile =
-        newFile(join(projectPath, 'excluded/broken.dart'), content: 'err').path;
+        newFile2('$testPackageRootPath/excluded/broken.dart', 'err');
 
     // There should be no errors initially.
     await waitForTasksFinished();
@@ -276,21 +277,24 @@
     expect(filesErrors[excludedFile], isNull);
 
     // Triggering the file to be processed should still generate no errors.
-    await waitResponse(AnalysisGetHoverParams(excludedFile, 0).toRequest('0'));
+    await handleSuccessfulRequest(
+      AnalysisGetHoverParams(excludedFile.path, 0).toRequest('0'),
+    );
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
     expect(filesErrors[excludedFile], isNull);
 
     // Opening the file should still generate no errors.
-    await waitResponse(
-        AnalysisSetPriorityFilesParams([excludedFile]).toRequest('0'));
+    await handleSuccessfulRequest(
+      AnalysisSetPriorityFilesParams([excludedFile.path]).toRequest('0'),
+    );
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
     expect(filesErrors[excludedFile], isNull);
   }
 
   Future<void> test_importError() async {
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
 
     addTestFile('''
 import 'does_not_exist.dart';
@@ -310,7 +314,7 @@
   Future<void> test_lintError() async {
     var camelCaseTypesLintName = 'camel_case_types';
 
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - $camelCaseTypesLintName
@@ -318,11 +322,10 @@
 
     addTestFile('class a { }');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
 
-    var testDriver = server.getAnalysisDriver(testFile)!;
-    var lints = testDriver.analysisOptions.lintRules;
+    var lints = testFileAnalysisOptions.lintRules;
 
     // Registry should only contain single lint rule.
     expect(lints, hasLength(1));
@@ -333,15 +336,15 @@
     var errors = filesErrors[testFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, join(projectPath, 'bin', 'test.dart'));
+    expect(error.location.file, testFile.path);
     expect(error.severity, AnalysisErrorSeverity.INFO);
     expect(error.type, AnalysisErrorType.LINT);
     expect(error.message, lint.description);
   }
 
   Future<void> test_notInAnalysisRoot() async {
-    await createProject();
-    var otherFile = newFile('/other.dart', content: 'UnknownType V;').path;
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    var otherFile = newFile2('/other.dart', 'UnknownType V;');
     addTestFile('''
 import '/other.dart';
 main() {
@@ -355,11 +358,10 @@
   Future<void> test_overlay_dotFolder() async {
     // Files inside dotFolders should not generate error notifications even
     // if they have overlays added.
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('');
     var brokenFile =
-        newFile(join(projectPath, '.dart_tool/broken.dart'), content: 'err')
-            .path;
+        newFile2('$testPackageRootPath/.dart_tool/broken.dart', 'err');
 
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
@@ -367,9 +369,9 @@
 
     // Add and overlay and give chance for the file to be analyzed (if
     // it would).
-    await waitResponse(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        brokenFile: AddContentOverlay('err'),
+        brokenFile.path: AddContentOverlay('err'),
       }).toRequest('1'),
     );
     await waitForTasksFinished();
@@ -383,14 +385,14 @@
     // Overlays added for files that don't exist on disk should still generate
     // error notifications. Removing the overlay if the file is not on disk
     // should clear the errors.
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('');
-    var brokenFile = convertPath(join(projectPath, 'broken.dart'));
+    var brokenFile = getFile('$testPackageRootPath/broken.dart');
 
     // Add and overlay and give chance for the file to be analyzed.
-    await waitResponse(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        brokenFile: AddContentOverlay('err'),
+        brokenFile.path: AddContentOverlay('err'),
       }).toRequest('0'),
     );
     await waitForTasksFinished();
@@ -400,11 +402,15 @@
     expect(filesErrors[brokenFile], hasLength(greaterThan(0)));
 
     // Remove the overlay (this file no longer exists anywhere).
-    await waitResponse(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        brokenFile: RemoveContentOverlay(),
+        brokenFile.path: RemoveContentOverlay(),
       }).toRequest('1'),
     );
+
+    // Wait for the timer to remove the overlay to fire.
+    await Future.delayed(server.pendingFilesRemoveOverlayDelay);
+
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
 
@@ -419,14 +425,14 @@
     // error notifications. If the file is subsequently saved to disk before the
     // overlay is removed, the errors should not be flushed when the overlay is
     // removed.
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('');
-    var brokenFile = convertPath(join(projectPath, 'broken.dart'));
+    var brokenFile = getFile('$testPackageRootPath/broken.dart');
 
     // Add and overlay and give chance for the file to be analyzed.
-    await waitResponse(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        brokenFile: AddContentOverlay('err'),
+        brokenFile.path: AddContentOverlay('err'),
       }).toRequest('0'),
     );
     await waitForTasksFinished();
@@ -436,14 +442,14 @@
     expect(filesErrors[brokenFile], hasLength(greaterThan(0)));
 
     // Write the file to disk.
-    newFile(brokenFile, content: 'err');
+    brokenFile.writeAsStringSync('err');
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
 
     // Remove the overlay.
-    await waitResponse(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        brokenFile: RemoveContentOverlay(),
+        brokenFile.path: RemoveContentOverlay(),
       }).toRequest('1'),
     );
     await waitForTasksFinished();
@@ -455,14 +461,14 @@
   }
 
   Future<void> test_ParserError() async {
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('library lib');
     await waitForTasksFinished();
     await pumpEventQueue(times: 5000);
     var errors = filesErrors[testFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, join(projectPath, 'bin', 'test.dart'));
+    expect(error.location.file, testFile.path);
     expect(error.location.offset, isPositive);
     expect(error.location.length, isNonNegative);
     expect(error.severity, AnalysisErrorSeverity.ERROR);
@@ -471,12 +477,11 @@
   }
 
   Future<void> test_pubspecFile() async {
-    var filePath = join(projectPath, 'pubspec.yaml');
-    var pubspecFile = newFile(filePath, content: '''
+    var pubspecFile = newPubspecYamlFile(testPackageRootPath, '''
 version: 1.3.2
-''').path;
+''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
@@ -485,13 +490,13 @@
     var errors = filesErrors[pubspecFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, pubspecFile.path);
     expect(error.severity, AnalysisErrorSeverity.WARNING);
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
     //
     // Fix the error and verify the new results.
     //
-    modifyFile(pubspecFile, '''
+    pubspecFile.writeAsStringSync('''
 name: sample
 version: 1.3.2
 ''');
@@ -503,22 +508,21 @@
   }
 
   Future<void> test_pubspecFile_lint() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 linter:
   rules:
     - sort_pub_dependencies
 ''');
 
-    var filePath = join(projectPath, 'pubspec.yaml');
-    var pubspecFile = newFile(filePath, content: '''
+    var pubspecFile = newPubspecYamlFile(testPackageRootPath, '''
 name: sample
 
 dependencies:
   b: any
   a: any
-''').path;
+''');
 
-    await setRoots(included: [projectPath], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await waitForTasksFinished();
     await pumpEventQueue();
     //
@@ -527,13 +531,13 @@
     var errors = filesErrors[pubspecFile]!;
     expect(errors, hasLength(1));
     var error = errors[0];
-    expect(error.location.file, filePath);
+    expect(error.location.file, pubspecFile.path);
     expect(error.severity, AnalysisErrorSeverity.INFO);
     expect(error.type, AnalysisErrorType.LINT);
     //
     // Fix the error and verify the new results.
     //
-    modifyFile(pubspecFile, '''
+    pubspecFile.writeAsStringSync('''
 name: sample
 
 dependencies:
@@ -548,7 +552,7 @@
   }
 
   Future<void> test_StaticWarning() async {
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     addTestFile('''
 enum E {e1, e2}
 
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index bc1ed96..7cbda58 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,7 +18,7 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationFoldingTest extends AbstractAnalysisTest {
+class AnalysisNotificationFoldingTest extends PubPackageAnalysisServerTest {
   static const sampleCode = '''
 import 'dart:async';
 import 'dart:core';
@@ -40,7 +40,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_FOLDING) {
       var params = AnalysisFoldingParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         lastRegions = params.regions;
         _regionsReceived.complete(null);
       }
@@ -53,11 +53,11 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
-  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 3048a8c..2e70411 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -11,7 +11,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -328,7 +328,7 @@
 void f() {
   var part = 42;
 }''');
-    newFile('/project/bin/my_part.dart', content: 'part of lib;');
+    newFile2('/project/bin/my_part.dart', 'part of lib;');
     await prepareHighlights();
     assertHasRegion(HighlightRegionType.BUILT_IN, 'part "my_');
     assertNoRegion(HighlightRegionType.BUILT_IN, 'part = 42');
@@ -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 [];
@@ -1580,7 +1593,7 @@
   }
 }
 
-class HighlightsTestSupport extends AbstractAnalysisTest {
+class HighlightsTestSupport extends PubPackageAnalysisServerTest {
   late List<HighlightRegion> regions;
 
   final Completer<void> _resultsAvailable = Completer();
@@ -1649,8 +1662,8 @@
     return length;
   }
 
-  Future prepareHighlights() {
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+  Future<void> prepareHighlights() async {
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     return _resultsAvailable.future;
   }
 
@@ -1663,7 +1676,7 @@
     }
     if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
       var params = AnalysisHighlightsParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         regions = params.regions;
         _resultsAvailable.complete();
       }
@@ -1673,11 +1686,11 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   void _addLibraryForTestPart() {
-    newFile(join(testFolder, 'my_lib.dart'), content: '''
+    newFile2('$testPackageLibPath/my_lib.dart', '''
 library lib;
 part 'test.dart';
     ''');
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index a9db25d..1b978de 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -5,11 +5,11 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.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 '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,7 +18,7 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationImplementedTest extends AbstractAnalysisTest {
+class AnalysisNotificationImplementedTest extends PubPackageAnalysisServerTest {
   List<ImplementedClass>? implementedClasses;
   List<ImplementedMember>? implementedMembers;
 
@@ -85,8 +85,8 @@
   }
 
   /// Subscribe for `IMPLEMENTED` and wait for the notification.
-  Future prepareImplementedElements() {
-    subscribeForImplemented();
+  Future<void> prepareImplementedElements() async {
+    await subscribeForImplemented();
     return waitForImplementedElements();
   }
 
@@ -94,7 +94,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_IMPLEMENTED) {
       var params = AnalysisImplementedParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         implementedClasses = params.classes;
         implementedMembers = params.members;
       }
@@ -104,12 +104,12 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
-  void subscribeForImplemented() {
+  Future<void> subscribeForImplemented() async {
     setPriorityFiles([testFile]);
-    addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
+    await addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -122,25 +122,6 @@
     assertHasImplementedClass('A {');
   }
 
-  Future<void> test_afterIncrementalResolution() async {
-    subscribeForImplemented();
-    addTestFile('''
-class A {}
-class B extends A {}
-''');
-    await prepareImplementedElements();
-    assertHasImplementedClass('A {');
-    // add a space
-    implementedClasses = null;
-    testCode = '''
-class A  {}
-class B extends A {}
-''';
-    server.updateContent('1', {testFile: AddContentOverlay(testCode)});
-    await waitForImplementedElements();
-    assertHasImplementedClass('A  {');
-  }
-
   Future<void> test_class_extended() async {
     addTestFile('''
 class A {}
@@ -365,7 +346,7 @@
   }
 
   Future<void> test_method_withMethod_private_differentLib() async {
-    newFile(join(testFolder, 'lib.dart'), content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 import 'test.dart';
 class B extends A {
   void _m() {}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 506df55..b657168 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -12,6 +12,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -19,7 +20,7 @@
   });
 }
 
-class AbstractNavigationTest extends AbstractAnalysisTest {
+class AbstractNavigationTest extends PubPackageAnalysisServerTest {
   late List<NavigationRegion> regions;
   late List<NavigationTarget> targets;
   late List<String> targetFiles;
@@ -89,7 +90,7 @@
     if (length == -1) {
       length = findIdentifierLength(search);
     }
-    assertHasFileTarget(testFile, offset, length);
+    assertHasFileTarget(testFile.path, offset, length);
   }
 
   /// TODO(scheglov) Improve target matching.
@@ -178,8 +179,13 @@
 class AnalysisNotificationNavigationTest extends AbstractNavigationTest {
   final Completer<void> _resultsAvailable = Completer();
 
-  Future prepareNavigation() async {
-    addAnalysisSubscription(AnalysisService.NAVIGATION, testFile);
+  Future<void> prepareNavigation() async {
+    await handleSuccessfulRequest(
+      AnalysisSetSubscriptionsParams({
+        AnalysisService.NAVIGATION: [testFile.path],
+      }).toRequest('0'),
+    );
+
     await _resultsAvailable.future;
     assertRegionsSorted();
   }
@@ -188,7 +194,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_NAVIGATION) {
       var params = AnalysisNavigationParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         regions = params.regions;
         targets = params.targets;
         targetFiles = params.files;
@@ -200,7 +206,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -257,7 +263,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A<int>(0)', 'A'.length);
-    assertHasTarget('A(_);', 0);
+    assertHasTarget('A(_);');
   }
 
   Future<void> test_annotationConstructor_implicit() async {
@@ -274,7 +280,7 @@
   }
 
   Future<void> test_annotationConstructor_importPrefix() async {
-    newFile(join(testFolder, 'my_annotation.dart'), content: r'''
+    newFile2('$testPackageLibPath/my_annotation.dart', r'''
 library an;
 class MyAnnotation {
   const MyAnnotation();
@@ -333,7 +339,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A()', 'A'.length);
-    assertHasTarget('A();', 0);
+    assertHasTarget('A();');
   }
 
   Future<void> test_annotationField() async {
@@ -349,7 +355,7 @@
   }
 
   Future<void> test_annotationField_importPrefix() async {
-    newFile(join(testFolder, 'mayn.dart'), content: r'''
+    newFile2('$testPackageLibPath/mayn.dart', r'''
 library an;
 const myan = new Object();
 ''');
@@ -391,7 +397,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 +428,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 +548,7 @@
 ''');
     await prepareNavigation();
     assertHasRegion('B;');
-    assertHasTarget('B() {}', 0);
+    assertHasTarget('B() {}');
   }
 
   Future<void>
@@ -559,7 +565,7 @@
     await prepareNavigation();
     {
       assertHasRegion('C<A>');
-      assertHasTarget('C() {}', 0);
+      assertHasTarget('C() {}');
     }
     {
       assertHasRegion('A>;');
@@ -652,10 +658,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 {
@@ -821,7 +827,7 @@
   }
 
   Future<void> test_functionReference_importPrefix_function() async {
-    newFile(join(testFolder, 'a.dart'), content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo<T>() {}
 ''');
     addTestFile('''
@@ -1020,7 +1026,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A();', 'A'.length);
-    assertHasTarget('A() {}', 0);
+    assertHasTarget('A() {}');
   }
 
   Future<void> test_instanceCreation_unnamed_withTypeArgument() async {
@@ -1036,7 +1042,7 @@
     await prepareNavigation();
     {
       assertHasRegionString('B<A>();', 'B'.length);
-      assertHasTarget('B() {}', 0);
+      assertHasTarget('B() {}');
     }
     {
       assertHasRegion('A>();');
@@ -1070,8 +1076,8 @@
   }
 
   Future<void> test_multiplyDefinedElement() async {
-    newFile('$projectPath/bin/libA.dart', content: 'library A; int TEST = 1;');
-    newFile('$projectPath/bin/libB.dart', content: 'library B; int TEST = 2;');
+    newFile2('$testPackageLibPath/libA.dart', 'library A; int TEST = 1;');
+    newFile2('$testPackageLibPath/libB.dart', 'library B; int TEST = 2;');
     addTestFile('''
 import 'libA.dart';
 import 'libB.dart';
@@ -1162,7 +1168,7 @@
 
   Future<void> test_partOf() async {
     var libCode = 'library lib; part "test.dart";';
-    var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
+    var libFile = newFile2('$testPackageLibPath/lib.dart', libCode).path;
     addTestFile('part of lib;');
     await prepareNavigation();
     assertHasRegionString('lib');
@@ -1208,7 +1214,7 @@
     await prepareNavigation();
     {
       assertHasRegion('this();');
-      assertHasTarget('A() {}', 0);
+      assertHasTarget('A() {}');
     }
     {
       assertHasRegion('this.foo');
@@ -1221,9 +1227,10 @@
   }
 
   Future<void> test_string_configuration() async {
-    newFile('$projectPath/bin/lib.dart', content: '').path;
-    var lib2File = newFile('$projectPath/bin/lib2.dart', content: '').path;
-    addTestFile('import "lib.dart" if (dart.library.html) "lib2.dart";');
+    newFile2('$testPackageLibPath/lib.dart', '').path;
+    var lib2File = newFile2('$testPackageLibPath/lib2.dart', '').path;
+    newFile2(
+        testFilePath, 'import "lib.dart" if (dart.library.html) "lib2.dart";');
     await prepareNavigation();
     assertHasRegionString('"lib2.dart"');
     assertHasFileTarget(lib2File, 0, 0);
@@ -1231,7 +1238,7 @@
 
   Future<void> test_string_export() async {
     var libCode = 'library lib;';
-    var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
+    var libFile = newFile2('$testPackageLibPath/lib.dart', libCode).path;
     addTestFile('export "lib.dart";');
     await prepareNavigation();
     assertHasRegionString('"lib.dart"');
@@ -1246,7 +1253,7 @@
 
   Future<void> test_string_import() async {
     var libCode = 'library lib;';
-    var libFile = newFile('$projectPath/bin/lib.dart', content: libCode).path;
+    var libFile = newFile2('$testPackageLibPath/lib.dart', libCode).path;
     addTestFile('import "lib.dart";');
     await prepareNavigation();
     assertHasRegionString('"lib.dart"');
@@ -1268,7 +1275,7 @@
   Future<void> test_string_part() async {
     var unitCode = 'part of lib;  f() {}';
     var unitFile =
-        newFile('$projectPath/bin/test_unit.dart', content: unitCode).path;
+        newFile2('$testPackageLibPath/test_unit.dart', unitCode).path;
     addTestFile('''
 library lib;
 part "test_unit.dart";
@@ -1309,7 +1316,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..8880291 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -12,6 +12,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -20,7 +21,7 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationOccurrencesTest extends AbstractAnalysisTest {
+class AnalysisNotificationOccurrencesTest extends PubPackageAnalysisServerTest {
   late List<Occurrences> occurrencesList;
   late Occurrences testOccurrences;
 
@@ -71,8 +72,8 @@
     }
   }
 
-  Future prepareOccurrences() {
-    addAnalysisSubscription(AnalysisService.OCCURRENCES, testFile);
+  Future<void> prepareOccurrences() async {
+    await addAnalysisSubscription(AnalysisService.OCCURRENCES, testFile);
     return _resultsAvailable.future;
   }
 
@@ -80,7 +81,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_OCCURRENCES) {
       var params = AnalysisOccurrencesParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         occurrencesList = params.occurrences;
         _resultsAvailable.complete();
       }
@@ -90,7 +91,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysis() async {
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 8db0451..262673b 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -11,7 +11,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -20,7 +20,7 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationOutlineTest extends AbstractAnalysisTest {
+class AnalysisNotificationOutlineTest extends PubPackageAnalysisServerTest {
   late FileKind fileKind;
   String? libraryName;
   Outline? outline;
@@ -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;
   }
 
@@ -37,7 +37,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_OUTLINE) {
       var params = AnalysisOutlineParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         fileKind = params.kind;
         libraryName = params.libraryName;
         outline = params.outline;
@@ -46,7 +46,7 @@
     }
     if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
       var params = AnalysisHighlightsParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         _highlightsReceived?.complete(null);
         _highlightsReceived = null;
       }
@@ -56,7 +56,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -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 3ce1928..ac0e7c8 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -11,6 +11,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -19,7 +20,7 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationOverridesTest extends AbstractAnalysisTest {
+class AnalysisNotificationOverridesTest extends PubPackageAnalysisServerTest {
   late List<Override> overridesList;
   late Override overrideObject;
 
@@ -104,8 +105,8 @@
     }
   }
 
-  Future prepareOverrides() {
-    addAnalysisSubscription(AnalysisService.OVERRIDES, testFile);
+  Future<void> prepareOverrides() async {
+    await addAnalysisSubscription(AnalysisService.OVERRIDES, testFile);
     return _resultsAvailable.future;
   }
 
@@ -113,7 +114,7 @@
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_OVERRIDES) {
       var params = AnalysisOverridesParams.fromNotification(notification);
-      if (params.file == testFile) {
+      if (params.file == testFile.path) {
         overridesList = params.overrides;
         _resultsAvailable.complete();
       }
@@ -123,7 +124,7 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -221,7 +222,7 @@
   }
 
   Future<void> test_class_BAD_privateByPrivate_inDifferentLib() async {
-    newFile(join(testFolder, 'lib.dart'), content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 class A {
   void _m() {}
 }
diff --git a/pkg/analysis_server/test/analysis/reanalyze_test.dart b/pkg/analysis_server/test/analysis/reanalyze_test.dart
index 4fc723b..d460e3e 100644
--- a/pkg/analysis_server/test/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/analysis/reanalyze_test.dart
@@ -5,11 +5,12 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analyzer/file_system/file_system.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 '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -18,42 +19,45 @@
 }
 
 @reflectiveTest
-class ReanalyzeTest extends AbstractAnalysisTest {
-  Map<String, List<AnalysisError>> filesErrors = {};
+class ReanalyzeTest extends PubPackageAnalysisServerTest {
+  Map<File, List<AnalysisError>> filesErrors = {};
 
   @override
   void processNotification(Notification notification) {
     if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
       var decoded = AnalysisErrorsParams.fromNotification(notification);
-      filesErrors[decoded.file] = decoded.errors;
+      filesErrors[getFile(decoded.file)] = decoded.errors;
     }
   }
 
   Future<void> test_reanalyze() async {
-    var b = convertPath('/other/b.dart');
+    var b = getFolder(testPackageLibPath).parent.getChildAssumingFile('b.dart');
 
-    newFile(testFile, content: r'''
-import '../../other/b.dart';
+    var file = newFile2('$testPackageTestPath/a.dart', r'''
+import '../b.dart';
 
 var b = B();
 ''');
-    await createProject();
+
+    await setRoots(included: [testPackageTestPath], excluded: []);
 
     // b.dart does not exist, and `B` is unresolved.
     await waitForTasksFinished();
-    expect(filesErrors[testFile], hasLength(2));
+    expect(filesErrors[file], hasLength(2));
 
     // Clear errors, so that we'll notice new results.
     filesErrors.clear();
 
     // Create b.dart, reanalyzing should fix the error.
-    newFile(b, content: 'class B {}');
+    b.writeAsStringSync('class B {}');
 
     // Reanalyze.
-    await server.reanalyze();
+    await handleSuccessfulRequest(
+      AnalysisReanalyzeParams().toRequest('0'),
+    );
     await waitForTasksFinished();
 
     // No errors.
-    expect(filesErrors[testFile], isEmpty);
+    expect(filesErrors[file], isEmpty);
   }
 }
diff --git a/pkg/analysis_server/test/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
index c39b2c1..47b2f68 100644
--- a/pkg/analysis_server/test/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
@@ -4,12 +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/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
+import '../analysis_server_base.dart';
 import '../mocks.dart';
 
 void main() {
@@ -19,18 +18,15 @@
 }
 
 @reflectiveTest
-class SetPriorityFilesTest extends AbstractAnalysisTest {
+class SetPriorityFilesTest extends PubPackageAnalysisServerTest {
   @override
   Future<void> setUp() async {
     super.setUp();
-    server.handlers = [
-      AnalysisDomainHandler(server),
-    ];
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_fileDoesNotExist() async {
-    var file = convertPath('$projectPath/doesNotExist.dart');
+    var file = getFile('$testPackageLibPath/doesNotExist.dart');
     var response = await _setPriorityFile(file);
     expect(response, isResponseSuccess('0'));
   }
@@ -45,91 +41,98 @@
   }
 
   Future<void> test_fileInAnalysisRootAddedLater() async {
-    var path = convertPath('/other/file.dart');
-    newFile(path);
-    await _setPriorityFile(path);
-    await _setAnalysisRoots('/other');
-    _verifyPriorityFiles(path);
+    var file = newFile2('/other/file.dart', '');
+    await _setPriorityFile(file);
+    await setRoots(included: [file.parent.path], excluded: []);
+    _verifyPriorityFiles(file);
   }
 
   Future<void> test_fileInSdk() async {
     addTestFile('');
     // set priority files
-    var filePath = convertPath('/lib/convert/convert.dart');
-    var response = await _setPriorityFile(filePath);
+    var file = sdkRoot
+        .getChildAssumingFolder('lib')
+        .getChildAssumingFolder('convert')
+        .getChildAssumingFile('convert.dart');
+    var response = await _setPriorityFile(file);
     expect(response, isResponseSuccess('0'));
     // verify
-    _verifyPriorityFiles(filePath);
+    _verifyPriorityFiles(file);
   }
 
   Future<void> test_fileNotInAnalysisRoot() async {
-    var path = convertPath('/other/file.dart');
-    newFile(path);
-    await _setPriorityFile(path);
-    _verifyPriorityFiles(path);
+    var file = newFile2('/other/file.dart', '');
+    await _setPriorityFile(file);
+    _verifyPriorityFiles(file);
   }
 
   Future<void> test_ignoredInAnalysisOptions() async {
-    var sampleFile = convertPath('$projectPath/samples/sample.dart');
-    newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - 'samples/**'
 ''');
-    newFile(sampleFile);
+    var file = newFile2('$testPackageRootPath/samples/sample.dart', '');
     // attempt to set priority file
-    await _setPriorityFile(sampleFile);
-    _verifyPriorityFiles(sampleFile);
+    await _setPriorityFile(file);
+    _verifyPriorityFiles(file);
   }
 
   Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
-    newDotPackagesFile(projectPath);
-    newDotPackagesFile('$projectPath/child');
-    var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
-    newFile('$projectPath/child/${file_paths.analysisOptionsYaml}',
-        content: r'''
+    newPackageConfigJsonFile(testPackageRootPath, '');
+    newPackageConfigJsonFile('$testPackageRootPath/child', '');
+    var sampleFile = newFile2(
+      '$testPackageRootPath/child/samples/sample.dart',
+      '',
+    );
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - 'samples/**'
 ''');
-    newFile(sampleFile);
     // attempt to set priority file
     await _setPriorityFile(sampleFile);
     _verifyPriorityFiles(sampleFile);
   }
 
   Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
-    newDotPackagesFile(projectPath);
-    newDotPackagesFile('$projectPath/child');
-    var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
-    newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
+    newPackageConfigJsonFile(testPackageRootPath, '');
+    newPackageConfigJsonFile('$testPackageRootPath/child', '');
+    var sampleFile = newFile2(
+      '$testPackageRootPath/child/samples/sample.dart',
+      '',
+    );
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - 'child/samples/**'
 ''');
-    newFile(sampleFile);
     // attempt to set priority file
     await _setPriorityFile(sampleFile);
     _verifyPriorityFiles(sampleFile);
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
-    var request = AnalysisSetPriorityFilesParams(['test.dart']).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(
+      AnalysisSetPriorityFilesParams([
+        'test.dart',
+      ]).toRequest('0'),
+    );
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_invalidFilePathFormat_notNormalized() async {
-    var request =
-        AnalysisSetPriorityFilesParams([convertPath('/foo/../bar/test.dart')])
-            .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(AnalysisSetPriorityFilesParams([
+      convertPath('/foo/../bar/test.dart'),
+    ]).toRequest('0'));
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -140,22 +143,20 @@
     expect(response, isResponseSuccess('0'));
     // verify
     var params = pluginManager.analysisSetPriorityFilesParams!;
-    expect(params.files, <String>[testFile]);
+    expect(params.files, [testFile.path]);
   }
 
-  Future<Response> _setAnalysisRoots(String folder) async {
-    var request = AnalysisSetAnalysisRootsParams([folder], []).toRequest('1');
-    return await serverChannel.sendRequest(request);
+  Future<Response> _setPriorityFile(File file) async {
+    return await handleSuccessfulRequest(
+      AnalysisSetPriorityFilesParams(<String>[
+        file.path,
+      ]).toRequest('0'),
+    );
   }
 
-  Future<Response> _setPriorityFile(String file) async {
-    var request = AnalysisSetPriorityFilesParams(<String>[file]).toRequest('0');
-    return await serverChannel.sendRequest(request);
-  }
-
-  void _verifyPriorityFiles(String path) {
-    var driver = server.getAnalysisDriver(path)!;
+  void _verifyPriorityFiles(File file) {
+    var driver = server.getAnalysisDriver(file.path)!;
     var prioritySources = driver.priorityFiles;
-    expect(prioritySources, [path]);
+    expect(prioritySources, [file.path]);
   }
 }
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index f85f7d4..853eebb 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -5,13 +5,14 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/file_system/file_system.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 '../analysis_server_base.dart';
 import '../mocks.dart';
+import '../services/refactoring/abstract_rename.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -20,8 +21,8 @@
 }
 
 @reflectiveTest
-class UpdateContentTest extends AbstractAnalysisTest {
-  Map<String, List<String>> filesErrors = {};
+class UpdateContentTest extends PubPackageAnalysisServerTest {
+  Map<File, List<String>> filesErrors = {};
   int serverErrorCount = 0;
   int navigationCount = 0;
 
@@ -31,7 +32,7 @@
       var decoded = AnalysisErrorsParams.fromNotification(notification);
       String _format(AnalysisError e) =>
           '${e.location.startLine}: ${e.message}';
-      filesErrors[decoded.file] = decoded.errors.map(_format).toList();
+      filesErrors[getFile(decoded.file)] = decoded.errors.map(_format).toList();
     }
     if (notification.event == ANALYSIS_NOTIFICATION_NAVIGATION) {
       navigationCount++;
@@ -44,25 +45,28 @@
   void test_illegal_ChangeContentOverlay() async {
     // It should be illegal to send a ChangeContentOverlay for a file that
     // doesn't have an overlay yet.
-    await createProject();
-    addTestFile('library foo;');
-    var id = 'myId';
-    try {
-      server.updateContent(id, {
-        testFile: ChangeContentOverlay([SourceEdit(8, 3, 'bar')])
-      });
-      fail('Expected an exception to be thrown');
-    } on RequestFailure catch (e) {
-      expect(e.response.id, id);
-      expect(e.response.error!.code, RequestErrorCode.INVALID_OVERLAY_CHANGE);
-    }
+    addTestFile('');
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    var response = await handleRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay([
+          SourceEdit(0, 0, ''),
+        ]),
+      }).toRequest('0'),
+    );
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_OVERLAY_CHANGE,
+    );
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
-    var request = AnalysisUpdateContentParams(
-      {'test.dart': AddContentOverlay('')},
-    ).toRequest('0');
-    var response = await waitResponse(request);
+    var response = await handleRequest(
+      AnalysisUpdateContentParams({
+        'test.dart': AddContentOverlay(''),
+      }).toRequest('0'),
+    );
     expect(
       response,
       isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
@@ -70,10 +74,11 @@
   }
 
   Future<void> test_invalidFilePathFormat_notNormalized() async {
-    var request = AnalysisUpdateContentParams(
-      {convertPath('/foo/../bar/test.dart'): AddContentOverlay('')},
-    ).toRequest('0');
-    var response = await waitResponse(request);
+    var response = await handleRequest(
+      AnalysisUpdateContentParams({
+        convertPath('/foo/../bar/test.dart'): AddContentOverlay(''),
+      }).toRequest('0'),
+    );
     expect(
       response,
       isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
@@ -81,41 +86,54 @@
   }
 
   Future<void> test_multiple_contexts() async {
-    var project1path = convertPath('/project1');
-    var project2path = convertPath('/project2');
-    var fooPath = newFile('/project1/foo.dart', content: '''
-library foo;
-import '../project2/baz.dart';
-main() { f(); }''').path;
-    var barPath = newFile('/project2/bar.dart', content: '''
-library bar;
-import 'baz.dart';
-main() { f(); }''').path;
-    var bazPath = newFile('/project2/baz.dart', content: '''
-library baz;
-f(int i) {}
-''').path;
-    await setRoots(included: [project1path, project2path], excluded: []);
+    writePackageConfig(
+      getFolder(workspaceRootPath),
+      PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: '$workspaceRootPath/aaa'),
+    );
+
+    var aaa = newFile2('$workspaceRootPath/aaa/lib/aaa.dart', r'''
+void f(int _) {}
+''');
+
+    var foo = newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
+import 'package:aaa/aaa.dart';
+void main() {
+  f();
+}
+''');
+
+    var bar = newFile2('$workspaceRootPath/bar/lib/bar.dart', r'''
+import 'package:aaa/aaa.dart';
+void main() {
+  f();
+}
+''');
+
+    await setRoots(included: [
+      foo.parent.path,
+      bar.parent.path,
+    ], excluded: []);
+
     {
-      await server.onAnalysisComplete;
+      await waitForTasksFinished();
       // Files foo.dart and bar.dart should both have errors, since they both
       // call f() with the wrong number of arguments.
-      expect(filesErrors[fooPath], hasLength(1));
-      expect(filesErrors[barPath], hasLength(1));
+      expect(filesErrors[foo], hasLength(1));
+      expect(filesErrors[bar], hasLength(1));
       // Overlay the content of baz.dart to eliminate the errors.
-      server.updateContent('1', {
-        bazPath: AddContentOverlay('''
-library baz;
-f() {}
-''')
-      });
+      await handleSuccessfulRequest(
+        AnalysisUpdateContentParams(
+            {aaa.path: AddContentOverlay('void f() {}')}).toRequest('0'),
+      );
     }
+
     {
-      await server.onAnalysisComplete;
+      await waitForTasksFinished();
       // The overlay should have been propagated to both contexts, causing both
       // foo.dart and bar.dart to be reanalyzed and found to be free of errors.
-      expect(filesErrors[fooPath], isEmpty);
-      expect(filesErrors[barPath], isEmpty);
+      expect(filesErrors[foo], isEmpty);
+      expect(filesErrors[bar], isEmpty);
     }
   }
 
@@ -125,17 +143,23 @@
     var project = newFolder('/project');
     await setRoots(included: [project.path], excluded: []);
 
-    server.updateContent('1',
-        {'/project/main.dart': AddContentOverlay('import "target.dart";')});
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        '/project/main.dart': AddContentOverlay('import "target.dart";'),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     expect(filesErrors, {
       '/project/main.dart': ["1: Target of URI doesn't exist: 'target.dart'."],
       '/project/target.dart': []
     });
 
-    server.updateContent('1',
-        {'/project/target.dart': AddContentOverlay('import "none.dart";')});
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        '/project/target.dart': AddContentOverlay('import "none.dart";')
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     expect(filesErrors, {
       '/project/main.dart': ['1: Unused import.'],
       '/project/target.dart': ["1: Target of URI doesn't exist: 'none.dart'."],
@@ -144,51 +168,59 @@
   }
 
   Future<void> test_overlayOnly() async {
-    var filePath1 = convertPath('/User/project1/test.dart');
-    var filePath2 = convertPath('/User/project2/test.dart');
-    var folderPath1 = newFolder('/User/project1').path;
-    var folderPath2 = newFolder('/User/project2').path;
+    var a = newFile2('$testPackageLibPath/a.dart', '');
+    var b = getFile('$testPackageLibPath/b.dart');
 
-    await setRoots(included: [folderPath1, folderPath2], excluded: []);
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await waitForTasksFinished();
+    expect(filesErrors[a], isEmpty);
+    expect(filesErrors[b], isNull);
 
-    // exactly 2 contexts
-    expect(server.driverMap, hasLength(2));
-    var driver1 = server.getAnalysisDriver(filePath1)!;
-    var driver2 = server.getAnalysisDriver(filePath2)!;
+    // Add `b.dart` overlay, analyzed.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        b.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
+    expect(filesErrors[a], isEmpty);
+    expect(filesErrors[b], isEmpty);
 
-    // no sources
-    expect(_getUserSources(driver1), isEmpty);
-    expect(_getUserSources(driver2), isEmpty);
-
-    // add an overlay - new Source in context1
-    server.updateContent('1', {filePath1: AddContentOverlay('')});
-    expect(_getUserSources(driver1), [filePath1]);
-    expect(_getUserSources(driver2), isEmpty);
-
-    // remove the overlay - no sources
-    server.updateContent('2', {filePath1: RemoveContentOverlay()});
-
-    // The file isn't removed from the list of added sources.
-//    expect(_getUserSources(driver1), isEmpty);
-    expect(_getUserSources(driver2), isEmpty);
+    // Add `b.dart` overlay, analyzed.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        b.path: RemoveContentOverlay(),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
+    expect(filesErrors[a], isEmpty);
+    // TODO(scheglov) We should get "flush" notification.
+    // expect(filesErrors[b], isNull);
   }
 
   @failingTest
   Future<void> test_sendNoticesAfterNopChange() async {
     // The errors are empty on the last line.
     addTestFile('');
-    await createProject();
-    await server.onAnalysisComplete;
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await waitForTasksFinished();
     // add an overlay
-    server.updateContent(
-        '1', {testFile: AddContentOverlay('main() {} main() {}')});
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay('main() {} main() {}'),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     // clear errors and make a no-op change
     filesErrors.clear();
-    server.updateContent('2', {
-      testFile: ChangeContentOverlay([SourceEdit(0, 4, 'main')])
-    });
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay([
+          SourceEdit(0, 4, 'main'),
+        ]),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     // errors should have been resent
     expect(filesErrors, isNotEmpty);
   }
@@ -197,31 +229,40 @@
   Future<void> test_sendNoticesAfterNopChange_flushedUnit() async {
     // The list of errors is empty on the last line.
     addTestFile('');
-    await createProject();
-    await server.onAnalysisComplete;
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await waitForTasksFinished();
     // add an overlay
-    server.updateContent(
-        '1', {testFile: AddContentOverlay('main() {} main() {}')});
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay('main() {} main() {}'),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     // clear errors and make a no-op change
     filesErrors.clear();
-    server.updateContent('2', {
-      testFile: ChangeContentOverlay([SourceEdit(0, 4, 'main')])
-    });
-    await server.onAnalysisComplete;
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay([
+          SourceEdit(0, 4, 'main'),
+        ]),
+      }).toRequest('0'),
+    );
+    await waitForTasksFinished();
     // errors should have been resent
     expect(filesErrors, isNotEmpty);
   }
 
-  void test_sentToPlugins() {
-    var filePath = convertPath('/project/target.dart');
+  Future<void> test_sentToPlugins() async {
+    var filePath = convertPath('$testPackageLibPath/a.dart');
     var fileContent = 'import "none.dart";';
     //
     // Add
     //
-    handleSuccessfulRequest(AnalysisUpdateContentParams(
-            <String, Object>{filePath: AddContentOverlay(fileContent)})
-        .toRequest('0'));
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams(<String, Object>{
+        filePath: AddContentOverlay(fileContent),
+      }).toRequest('0'),
+    );
     var params = pluginManager.analysisUpdateContentParams!;
     var files = params.files;
     expect(files, hasLength(1));
@@ -233,10 +274,14 @@
     // Change
     //
     pluginManager.analysisUpdateContentParams = null;
-    handleSuccessfulRequest(AnalysisUpdateContentParams(<String, Object>{
-      filePath: ChangeContentOverlay(
-          <SourceEdit>[SourceEdit(8, 1, "'"), SourceEdit(18, 1, "'")])
-    }).toRequest('1'));
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams(<String, Object>{
+        filePath: ChangeContentOverlay(<SourceEdit>[
+          SourceEdit(8, 1, "'"),
+          SourceEdit(18, 1, "'"),
+        ]),
+      }).toRequest('1'),
+    );
     params = pluginManager.analysisUpdateContentParams!;
     expect(params, isNotNull);
     files = params.files;
@@ -249,8 +294,11 @@
     // Remove
     //
     pluginManager.analysisUpdateContentParams = null;
-    handleSuccessfulRequest(AnalysisUpdateContentParams(
-        <String, Object>{filePath: RemoveContentOverlay()}).toRequest('2'));
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams(<String, Object>{
+        filePath: RemoveContentOverlay(),
+      }).toRequest('2'),
+    );
     params = pluginManager.analysisUpdateContentParams!;
     expect(params, isNotNull);
     files = params.files;
@@ -258,14 +306,4 @@
     overlay = files[filePath];
     expect(overlay, const TypeMatcher<RemoveContentOverlay>());
   }
-
-  List<String> _getUserSources(AnalysisDriver driver) {
-    var sources = <String>[];
-    driver.addedFiles.forEach((path) {
-      if (path.startsWith(convertPath('/User/'))) {
-        sources.add(path);
-      }
-    });
-    return sources;
-  }
 }
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index df45776..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) {
@@ -85,7 +86,7 @@
   }
 
   String addTestFile(String content) {
-    newFile(testFile, content: content);
+    newFile2(testFile, content);
     testCode = content;
     return testFile;
   }
@@ -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..804f079
--- /dev/null
+++ b/pkg/analysis_server/test/analysis_server_base.dart
@@ -0,0 +1,310 @@
+// 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/dart/analysis/analysis_options.dart' as analysis;
+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 {
+  final TestPluginManager pluginManager = TestPluginManager();
+  late final MockServerChannel serverChannel;
+  late final AnalysisServer server;
+
+  final List<GeneralAnalysisService> _analysisGeneralServices = [];
+  final Map<AnalysisService, List<String>> _analysisFileSubscriptions = {};
+
+  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,
+      ];
+
+  Folder get sdkRoot => newFolder('/sdk');
+
+  File get testFile => getFile(testFilePath);
+
+  analysis.AnalysisOptions get testFileAnalysisOptions {
+    var analysisDriver = server.getAnalysisDriver(testFile.path)!;
+    return analysisDriver.analysisOptions;
+  }
+
+  String get testFileContent => testFile.readAsStringSync();
+
+  String get testFilePath => '$testPackageLibPath/test.dart';
+
+  String get testPackageLibPath => '$testPackageRootPath/lib';
+
+  Folder get testPackageRoot => getFolder(testPackageRootPath);
+
+  String get testPackageRootPath => '$workspaceRootPath/test';
+
+  String get testPackageTestPath => '$testPackageRootPath/test';
+
+  String get workspaceRootPath => '/home';
+
+  Future<void> addAnalysisSubscription(
+    AnalysisService service,
+    File file,
+  ) async {
+    (_analysisFileSubscriptions[service] ??= []).add(file.path);
+    await handleSuccessfulRequest(
+      AnalysisSetSubscriptionsParams(
+        _analysisFileSubscriptions,
+      ).toRequest('0'),
+    );
+  }
+
+  Future<void> addGeneralAnalysisSubscription(
+    GeneralAnalysisService service,
+  ) async {
+    _analysisGeneralServices.add(service);
+    await _setGeneralAnalysisSubscriptions();
+  }
+
+  /// TODO(scheglov) rename
+  void addTestFile(String content) {
+    newFile2(testFilePath, content);
+  }
+
+  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) {
+    return offsetInFile(testFile, search);
+  }
+
+  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 modifyTestFile(String content) {
+    modifyFile(testFilePath, content);
+  }
+
+  /// Returns the offset of [search] in [file].
+  /// Fails if not found.
+  int offsetInFile(File file, String search) {
+    var content = file.readAsStringSync();
+    var offset = content.indexOf(search);
+    expect(offset, isNot(-1));
+    return offset;
+  }
+
+  void processNotification(Notification notification) {}
+
+  Future<void> removeGeneralAnalysisSubscription(
+    GeneralAnalysisService service,
+  ) async {
+    _analysisGeneralServices.remove(service);
+    await _setGeneralAnalysisSubscriptions();
+  }
+
+  void setPriorityFiles(List<File> files) {
+    handleSuccessfulRequest(
+      AnalysisSetPriorityFilesParams(
+        files.map((e) => e.path).toList(),
+      ).toRequest('0'),
+    );
+  }
+
+  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();
+
+    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);
+    server.pluginManager = pluginManager;
+    completionDomain.budgetDuration = const Duration(seconds: 30);
+  }
+
+  Future<void> tearDown() async {
+    await server.dispose();
+  }
+
+  /// Returns a [Future] that completes when the server's analysis is complete.
+  Future<void> waitForTasksFinished() async {
+    await pumpEventQueue(times: 1 << 10);
+    await server.onAnalysisComplete;
+  }
+
+  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> _setGeneralAnalysisSubscriptions() async {
+    await handleSuccessfulRequest(
+      AnalysisSetGeneralSubscriptionsParams(
+        _analysisGeneralServices,
+      ).toRequest('0'),
+    );
+  }
+}
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 9ac113c..58ac7dd 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -46,8 +46,8 @@
     server.serverServices = {ServerService.STATUS};
     newFolder('/foo');
     newFolder('/bar');
-    newFile('/foo/foo.dart', content: 'import "../bar/bar.dart";');
-    var bar = newFile('/bar/bar.dart', content: 'library bar;');
+    newFile2('/foo/foo.dart', 'import "../bar/bar.dart";');
+    var bar = newFile2('/bar/bar.dart', 'library bar;');
     await server.setAnalysisRoots('0', ['/foo', '/bar'], []);
     var subscriptions = <AnalysisService, Set<String>>{};
     for (var service in AnalysisService.VALUES) {
@@ -119,9 +119,9 @@
     // Create a file that references two packages, which will we write to
     // package_config.json individually.
     newFolder(projectRoot);
-    newFile(
+    newFile2(
       projectTestFile,
-      content: r'''
+      r'''
       import "package:foo/foo.dart";'
       import "package:bar/bar.dart";'
       ''',
@@ -157,10 +157,10 @@
 
     // Write both packages, in two events so that the first one will trigger
     // a rebuild.
-    config.add(name: 'foo', rootPath: fooLibFolder.parent2.path);
+    config.add(name: 'foo', rootPath: fooLibFolder.parent.path);
     writePackageConfig(projectPackageConfigFile, config);
     await pumpEventQueue(times: 1); // Allow server to begin processing.
-    config.add(name: 'bar', rootPath: barLibFolder.parent2.path);
+    config.add(name: 'bar', rootPath: barLibFolder.parent.path);
     writePackageConfig(projectPackageConfigFile, config);
 
     // Allow the server to catch up with everything.
@@ -183,7 +183,7 @@
   Future test_serverStatusNotifications_hasFile() async {
     server.serverServices.add(ServerService.STATUS);
 
-    newFile('/test/lib/a.dart', content: r'''
+    newFile2('/test/lib/a.dart', r'''
 class A {}
 ''');
     await server.setAnalysisRoots('0', [convertPath('/test')], []);
@@ -245,8 +245,8 @@
   Future<void>
       test_setAnalysisSubscriptions_fileInIgnoredFolder_newOptions() async {
     var path = convertPath('/project/samples/sample.dart');
-    newFile(path);
-    newAnalysisOptionsYamlFile('/project', content: r'''
+    newFile2(path, '');
+    newAnalysisOptionsYamlFile2('/project', r'''
 analyzer:
   exclude:
     - 'samples/**'
@@ -266,8 +266,8 @@
   Future<void>
       test_setAnalysisSubscriptions_fileInIgnoredFolder_oldOptions() async {
     var path = convertPath('/project/samples/sample.dart');
-    newFile(path);
-    newAnalysisOptionsYamlFile('/project', content: r'''
+    newFile2(path, '');
+    newAnalysisOptionsYamlFile2('/project', r'''
 analyzer:
   exclude:
     - 'samples/**'
@@ -334,7 +334,7 @@
   }
 
   void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr: toUriStr));
+    newFile2(path, config.toContent(toUriStr: toUriStr));
   }
 
   /// Creates a simple package named [name] with [content] in the file at
@@ -343,8 +343,8 @@
   /// Returns a [Folder] that represents the packages `lib` folder.
   Folder _addSimplePackage(String name, String content) {
     final packagePath = '/packages/$name';
-    final file = newFile('$packagePath/lib/$name.dart', content: content);
-    return file.parent2;
+    final file = newFile2('$packagePath/lib/$name.dart', content);
+    return file.parent;
   }
 }
 
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 47c6443..c8ee38b 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';
@@ -27,6 +27,10 @@
   late CompletionDriver driver;
   late List<CompletionSuggestion> suggestions;
 
+  bool get isProtocolVersion1 {
+    return protocol == TestingCompletionProtocol.version1;
+  }
+
   bool get isProtocolVersion2 {
     return protocol == TestingCompletionProtocol.version2;
   }
@@ -35,22 +39,7 @@
 
   AnalysisServerOptions get serverOptions => AnalysisServerOptions();
 
-  bool get _isProtocolVersion1 {
-    return protocol == TestingCompletionProtocol.version1;
-  }
-
-  Future<void> addProjectFile(String relativePath, String content) async {
-    newFile('$testPackageRootPath/$relativePath', content: content);
-    // todo (pq): handle more than lib
-    expect(relativePath, startsWith('lib/'));
-    var packageRelativePath = relativePath.substring(4);
-    var uriStr = 'package:test/$packageRelativePath';
-
-    if (_isProtocolVersion1) {
-      await driver.waitForSetWithUri(uriStr);
-    }
-  }
-
+  @override
   Future<List<CompletionSuggestion>> addTestFile(String content,
       {int? offset}) async {
     driver.addTestFile(content, offset: offset);
@@ -110,9 +99,9 @@
   }
 
   Future<List<CompletionSuggestion>> getSuggestions() async {
-    if (_isProtocolVersion1) {
-      await driver.waitForSetWithUri('dart:core');
-      await driver.waitForSetWithUri('dart:async');
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('dart:core');
+      await waitForSetWithUri('dart:async');
     }
 
     switch (protocol) {
@@ -159,7 +148,7 @@
 ''');
 
     driver = CompletionDriver(
-      supportsAvailableSuggestions: _isProtocolVersion1,
+      supportsAvailableSuggestions: isProtocolVersion1,
       server: this,
     );
     await driver.createProject();
@@ -211,6 +200,10 @@
     return matches.first;
   }
 
+  Future<void> waitForSetWithUri(String uri) {
+    return driver.waitForSetWithUri(uri);
+  }
+
   void _assertNoErrorsInProjectFiles() {
     var errors = <AnalysisError>[];
     driver.filesErrors.forEach((file, fileErrors) {
@@ -304,14 +297,19 @@
 
 mixin CompletionWithSuggestionsTestCases on AbstractCompletionDriverTest {
   Future<void> test_project_filterImports_defaultConstructor() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 void f() {
@@ -327,16 +325,21 @@
 
   /// See: https://github.com/dart-lang/sdk/issues/40620
   Future<void> test_project_filterImports_enumValues() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum E {
   e,
 }
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 void f() {
@@ -351,16 +354,21 @@
 
   /// See: https://github.com/dart-lang/sdk/issues/40620
   Future<void> test_project_filterImports_namedConstructors() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A.a();
 }
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 void f() {
@@ -375,14 +383,19 @@
   }
 
   Future<void> test_project_filterMultipleImports() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 import 'b.dart';
@@ -398,7 +411,7 @@
   }
 
   Future<void> test_project_lib() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 enum E {
   e,
@@ -410,6 +423,10 @@
 var v = 0;
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -451,12 +468,16 @@
   }
 
   Future<void> test_project_lib_fields_class() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int f = 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void m() {
   ^
@@ -467,12 +488,16 @@
   }
 
   Future<void> test_project_lib_fields_static() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int f = 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -486,12 +511,16 @@
   }
 
   Future<void> test_project_lib_getters_class() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get g => 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -502,12 +531,16 @@
   }
 
   Future<void> test_project_lib_getters_static() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int get g => 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -522,10 +555,14 @@
 
   /// See: https://github.com/dart-lang/sdk/issues/40626
   Future<void> test_project_lib_getters_topLevel() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int get g => 0;
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -539,12 +576,16 @@
   }
 
   Future<void> test_project_lib_methods_class() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo() => 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -555,12 +596,16 @@
   }
 
   Future<void> test_project_lib_methods_static() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static void foo() => 0;
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -571,14 +616,19 @@
   }
 
   Future<void> test_project_lib_multipleExports() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -593,12 +643,16 @@
   }
 
   Future<void> test_project_lib_setters_class() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   set s(int s) {}
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -609,12 +663,16 @@
   }
 
   Future<void> test_project_lib_setters_static() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static set g(int g) {}
 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -626,10 +684,14 @@
 
   /// See: https://github.com/dart-lang/sdk/issues/40626
   Future<void> test_project_lib_setters_topLevel() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 set s(int s) {}
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 void f() {
   ^
@@ -645,7 +707,7 @@
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/38739')
   Future<void>
       test_project_suggestionRelevance_constructorParameterType() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'b.dart';
 
 class A {
@@ -653,10 +715,15 @@
 }
 ''');
 
-    await addProjectFile('lib/b.dart', r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 class O { }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+      await waitForSetWithUri('package:test/b.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 
@@ -679,10 +746,14 @@
   }
 
   Future<void> test_project_suggestionRelevance_constructorsAndTypes() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A { }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 import 'a.dart';
 
@@ -707,11 +778,15 @@
 
   /// See: https://github.com/dart-lang/sdk/issues/35529
   Future<void> test_project_suggestMixins() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin M { }
 class A { }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     await addTestFile('''
 class C extends Object with ^
 ''');
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 095db29..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(
@@ -92,14 +92,16 @@
     if (offset != null) {
       expect(completionOffset, -1, reason: 'cannot supply offset and ^');
       completionOffset = offset;
-      server.newFile(server.testFilePath, content: content);
+      server.newFile2(server.testFilePath, content);
     } else {
       expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
       var nextOffset = content.indexOf('^', completionOffset + 1);
       expect(nextOffset, equals(-1), reason: 'too many ^');
-      server.newFile(server.testFilePath,
-          content: content.substring(0, completionOffset) +
-              content.substring(completionOffset + 1));
+      server.newFile2(
+        server.testFilePath,
+        content.substring(0, completionOffset) +
+            content.substring(completionOffset + 1),
+      );
     }
   }
 
@@ -279,16 +281,12 @@
     } else if (notification.event == SERVER_NOTIFICATION_CONNECTED) {
       // Ignored.
     } else {
-      print('Unhandled notififcation: ${notification.event}');
+      print('Unhandled notification: ${notification.event}');
     }
   }
 
-  Future<AvailableSuggestionSet> waitForSetWithUri(String uri) async {
-    while (true) {
-      var result = uriToSetMap[uri];
-      if (result != null) {
-        return result;
-      }
+  Future<void> waitForSetWithUri(String uri) async {
+    while (uriToSetMap[uri] == null) {
       await Future.delayed(const Duration(milliseconds: 1));
     }
   }
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 35f61fd..de59784 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -83,12 +83,12 @@
     await super.setUp();
     return Future(() {
       var content = spec.source;
-      newFile(testFile, content: content);
+      newFile2(testFile, content);
       testCode = content;
       completionOffset = spec.testLocation;
       if (extraFiles != null) {
         extraFiles.forEach((String fileName, String content) {
-          newFile(fileName, content: content);
+          newFile2(fileName, content);
         });
       }
     }).then((_) => getSuggestions()).then((_) {
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 21b79b3..8705302 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -7,32 +7,20 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
-import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
-import 'package:analysis_server/src/utilities/mocks.dart';
-import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:analyzer/instrumentation/instrumentation.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_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
-import 'package:analyzer_plugin/src/protocol/protocol_internal.dart'
-    show HasToJson;
 import 'package:test/test.dart';
 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() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainBazelTest);
     defineReflectiveTests(AnalysisDomainPubTest);
-    defineReflectiveTests(AnalysisDomainHandlerTest);
     defineReflectiveTests(SetSubscriptionsTest);
   });
 }
@@ -48,14 +36,14 @@
   @override
   void setUp() {
     super.setUp();
-    newFile('$workspaceRootPath/WORKSPACE');
+    newFile2('$workspaceRootPath/WORKSPACE', '');
   }
 
   Future<void> test_fileSystem_changeFile_buildFile() async {
     // This BUILD file does not enable null safety.
     newBazelBuildFile(myPackageRootPath, '');
 
-    newFile(myPackageTestFilePath, content: '''
+    newFile2(myPackageTestFilePath, '''
 void f(int? a) {}
 ''');
 
@@ -79,272 +67,6 @@
 }
 
 @reflectiveTest
-class AnalysisDomainHandlerTest extends AbstractAnalysisTest {
-  Future<void> outOfRangeTest(SourceEdit edit) async {
-    var helper = AnalysisTestHelper();
-    await helper.createSingleFileProject('library A;');
-    await helper.onAnalysisComplete;
-    helper.sendContentChange(AddContentOverlay('library B;'));
-    await helper.onAnalysisComplete;
-    var contentChange = ChangeContentOverlay([edit]);
-    var request = AnalysisUpdateContentParams({helper.testFile: contentChange})
-        .toRequest('0');
-    var response = helper.handler.handleRequest(request, NotCancelableToken());
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.INVALID_OVERLAY_CHANGE));
-  }
-
-  Future<void> test_setAnalysisRoots_excludedFolder() async {
-    newFile('/project/aaa/a.dart', content: '// a');
-    newFile('/project/bbb/b.dart', content: '// b');
-    var excludedPath = join(projectPath, 'bbb');
-    var response = await testSetAnalysisRoots([projectPath], [excludedPath]);
-    expect(response, isResponseSuccess('0'));
-  }
-
-  Future<void> test_setAnalysisRoots_included_newFolder() async {
-    newPubspecYamlFile('/project', 'name: project');
-    var file = newFile('/project/bin/test.dart', content: 'main() {}').path;
-    var response = await testSetAnalysisRoots([projectPath], []);
-    var serverRef = server;
-    expect(response, isResponseSuccess('0'));
-    // verify that unit is resolved eventually
-    await server.onAnalysisComplete;
-    var resolvedUnit = await serverRef.getResolvedUnit(file);
-    expect(resolvedUnit, isNotNull);
-  }
-
-  Future<void> test_setAnalysisRoots_included_nonexistentFolder() async {
-    var projectA = convertPath('/project_a');
-    var projectB = convertPath('/project_b');
-    var fileB = newFile('/project_b/b.dart', content: '// b').path;
-    var response = await testSetAnalysisRoots([projectA, projectB], []);
-    var serverRef = server;
-    expect(response, isResponseSuccess('0'));
-    // Non-existence of /project_a should not prevent files in /project_b
-    // from being analyzed.
-    await server.onAnalysisComplete;
-    var resolvedUnit = await serverRef.getResolvedUnit(fileB);
-    expect(resolvedUnit, isNotNull);
-  }
-
-  Future<void> test_setAnalysisRoots_included_notAbsolute() async {
-    var response = await testSetAnalysisRoots(['foo/bar'], []);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
-  }
-
-  Future<void> test_setAnalysisRoots_included_notNormalized() async {
-    var response = await testSetAnalysisRoots(['/foo/../bar'], []);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
-  }
-
-  Future<void> test_setAnalysisRoots_notAbsolute() async {
-    var response = await testSetAnalysisRoots([], ['foo/bar']);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
-  }
-
-  Future<void> test_setAnalysisRoots_notNormalized() async {
-    var response = await testSetAnalysisRoots([], ['/foo/../bar']);
-    expect(response,
-        isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT));
-  }
-
-  void test_setPriorityFiles_invalid() {
-    var request = AnalysisSetPriorityFilesParams(
-      [convertPath('/project/lib.dart')],
-    ).toRequest('0');
-    var response = handler.handleRequest(request, NotCancelableToken());
-    expect(response, isResponseSuccess('0'));
-  }
-
-  Future<void> test_setPriorityFiles_valid() async {
-    var p1 = convertPath('/p1');
-    var p2 = convertPath('/p2');
-    var aPath = convertPath('/p1/a.dart');
-    var bPath = convertPath('/p2/b.dart');
-    var cPath = convertPath('/p2/c.dart');
-    newFile(aPath, content: 'library a;');
-    newFile(bPath, content: 'library b;');
-    newFile(cPath, content: 'library c;');
-
-    await setRoots(included: [p1, p2], excluded: []);
-
-    void setPriorityFiles(List<String> fileList) {
-      var request = AnalysisSetPriorityFilesParams(fileList).toRequest('0');
-      var response = handler.handleRequest(request, NotCancelableToken());
-      expect(response, isResponseSuccess('0'));
-      // TODO(brianwilkerson) Enable the line below after getPriorityFiles
-      // has been implemented.
-      // expect(server.getPriorityFiles(), unorderedEquals(fileList));
-    }
-
-    setPriorityFiles([aPath, bPath]);
-    setPriorityFiles([bPath, cPath]);
-    setPriorityFiles([]);
-  }
-
-  Future<void> test_updateContent_badType() async {
-    var helper = AnalysisTestHelper();
-    await helper.createSingleFileProject('// empty');
-    await helper.onAnalysisComplete;
-    var request = Request('0', ANALYSIS_REQUEST_UPDATE_CONTENT, {
-      ANALYSIS_REQUEST_UPDATE_CONTENT_FILES: {
-        helper.testFile: {
-          'type': 'foo',
-        }
-      }
-    });
-    var response = helper.handler.handleRequest(request, NotCancelableToken());
-    expect(response, isResponseFailure('0'));
-  }
-
-  Future<void> test_updateContent_changeOnDisk_duringOverride() async {
-    var helper = AnalysisTestHelper();
-    await helper.createSingleFileProject('library A;');
-    await helper.onAnalysisComplete;
-    // update code
-    helper.sendContentChange(AddContentOverlay('library B;'));
-    // There should be no errors
-    await helper.onAnalysisComplete;
-    expect(helper.getTestErrors(), hasLength(0));
-    // Change file on disk, adding a syntax error.
-    helper.resourceProvider.modifyFile(helper.testFile, 'library lib');
-    // There should still be no errors (file should not have been reread).
-    await helper.onAnalysisComplete;
-    expect(helper.getTestErrors(), hasLength(0));
-    // Send a content change with a null content param--file should be
-    // reread from disk.
-    helper.sendContentChange(RemoveContentOverlay());
-    // There should be errors now.
-    await helper.onAnalysisComplete;
-    expect(helper.getTestErrors(), hasLength(1));
-  }
-
-  Future<void> test_updateContent_changeOnDisk_normal() async {
-    var helper = AnalysisTestHelper();
-    await helper.createSingleFileProject('library A;');
-    await helper.onAnalysisComplete;
-    // There should be no errors
-    expect(helper.getTestErrors(), hasLength(0));
-    // Change file on disk, adding a syntax error.
-    helper.resourceProvider.modifyFile(helper.testFile, 'library lib');
-    // There should be errors now.
-    await pumpEventQueue();
-    await helper.onAnalysisComplete;
-    expect(helper.getTestErrors(), hasLength(1));
-  }
-
-  Future<void> test_updateContent_fullContent() async {
-    var helper = AnalysisTestHelper();
-    await helper.createSingleFileProject('// empty');
-    await helper.onAnalysisComplete;
-    // no errors initially
-    var errors = helper.getTestErrors();
-    expect(errors, isEmpty);
-    // update code
-    helper.sendContentChange(AddContentOverlay('library lib'));
-    // wait, there is an error
-    await helper.onAnalysisComplete;
-    errors = helper.getTestErrors();
-    expect(errors, hasLength(1));
-  }
-
-  Future<void> test_updateContent_incremental() async {
-    var helper = AnalysisTestHelper();
-    var initialContent = 'library A;';
-    await helper.createSingleFileProject(initialContent);
-    await helper.onAnalysisComplete;
-    // no errors initially
-    var errors = helper.getTestErrors();
-    expect(errors, isEmpty);
-    // Add the file to the cache
-    helper.sendContentChange(AddContentOverlay(initialContent));
-    // update code
-    helper.sendContentChange(ChangeContentOverlay(
-        [SourceEdit('library '.length, 'A;'.length, 'lib')]));
-    // wait, there is an error
-    await helper.onAnalysisComplete;
-    errors = helper.getTestErrors();
-    expect(errors, hasLength(1));
-  }
-
-  Future<void> test_updateContent_outOfRange_beyondEnd() {
-    return outOfRangeTest(SourceEdit(6, 6, 'foo'));
-  }
-
-  Future<void> test_updateContent_outOfRange_negativeLength() {
-    return outOfRangeTest(SourceEdit(3, -1, 'foo'));
-  }
-
-  Future<void> test_updateContent_outOfRange_negativeOffset() {
-    return outOfRangeTest(SourceEdit(-1, 3, 'foo'));
-  }
-
-  void test_updateOptions_invalid() {
-    var request = Request('0', ANALYSIS_REQUEST_UPDATE_OPTIONS, {
-      ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS: {'not-an-option': true}
-    });
-    var response = handler.handleRequest(request, NotCancelableToken());
-    // Invalid options should be silently ignored.
-    expect(response, isResponseSuccess('0'));
-  }
-
-  void test_updateOptions_null() {
-    // null is allowed as a synonym for {}.
-    var request = Request('0', ANALYSIS_REQUEST_UPDATE_OPTIONS,
-        {ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS: null});
-    var response = handler.handleRequest(request, NotCancelableToken());
-    expect(response, isResponseSuccess('0'));
-  }
-
-  Future<Response> testSetAnalysisRoots(
-      List<String> included, List<String> excluded) {
-    return setRoots(
-        included: included, excluded: excluded, validateSuccessResponse: false);
-  }
-
-  Future<void> xtest_getReachableSources_invalidSource() async {
-    // TODO(brianwilkerson) Re-enable this test if we re-enable the
-    // analysis.getReachableSources request.
-    newFile('/project/a.dart', content: 'import "b.dart";');
-    await server.setAnalysisRoots('0', ['/project/'], []);
-
-    await server.onAnalysisComplete;
-
-    var request = AnalysisGetReachableSourcesParams('/does/not/exist.dart')
-        .toRequest('0');
-    var response = handler.handleRequest(request, NotCancelableToken())!;
-    var error = response.error!;
-    expect(error.code, RequestErrorCode.GET_REACHABLE_SOURCES_INVALID_FILE);
-  }
-
-  Future<void> xtest_getReachableSources_validSources() async {
-    // TODO(brianwilkerson) Re-enable this test if we re-enable the
-    // analysis.getReachableSources request.
-    var fileA = newFile('/project/a.dart', content: 'import "b.dart";').path;
-    newFile('/project/b.dart');
-
-    await server.setAnalysisRoots('0', ['/project/'], []);
-
-    await server.onAnalysisComplete;
-
-    var request = AnalysisGetReachableSourcesParams(fileA).toRequest('0');
-    var response = handler.handleRequest(request, NotCancelableToken())!;
-
-    var json = response.toJson()[Response.RESULT] as Map<String, dynamic>;
-
-    // Sanity checks.
-    expect(json['sources'], hasLength(6));
-    expect(json['sources']['file:///project/a.dart'],
-        unorderedEquals(['dart:core', 'file:///project/b.dart']));
-    expect(json['sources']['file:///project/b.dart'], ['dart:core']);
-  }
-}
-
-@reflectiveTest
 class AnalysisDomainPubTest extends _AnalysisDomainTest {
   Future<void> test_fileSystem_addFile_analysisOptions() async {
     deleteTestPackageAnalysisOptionsFile();
@@ -363,7 +85,7 @@
     );
 
     // Write the options file that excludes b.dart
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: r'''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - lib/b.dart
@@ -385,7 +107,7 @@
     var a_path = '$testPackageLibPath/a.dart';
     var options_path = '$testPackageRootPath/analysis_options.yaml';
 
-    newFile(a_path, content: 'error');
+    newFile2(a_path, 'error');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
@@ -397,7 +119,7 @@
     );
 
     // Add 'analysis_options.yaml' that has an error.
-    newFile(options_path, content: '''
+    newFile2(options_path, '''
 analyzer:
   error:
 ''');
@@ -414,9 +136,9 @@
   Future<void> test_fileSystem_addFile_androidManifestXml() async {
     var path = '$testPackageRootPath/AndroidManifest.xml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
@@ -424,7 +146,7 @@
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
-    newFile(path, content: '<manifest/>');
+    newFile2(path, '<manifest/>');
     await pumpEventQueue();
     await server.onAnalysisComplete;
 
@@ -456,7 +178,7 @@
     var a_path = '$testPackageLibPath/.foo/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import '.foo/a.dart';
 void f(A a) {}
 ''');
@@ -467,7 +189,7 @@
     // We don't have a.dart, so the import cannot be resolved.
     assertHasErrors(b_path);
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A {}
 ''');
     await pumpEventQueue();
@@ -484,13 +206,13 @@
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: r'''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - "**/a.dart"
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import 'a.dart';
 void f(A a) {}
 ''');
@@ -501,7 +223,7 @@
     // We don't have a.dart, so the import cannot be resolved.
     assertHasErrors(b_path);
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A {}
 ''');
     await pumpEventQueue();
@@ -514,45 +236,10 @@
     assertNoErrors(b_path);
   }
 
-  Future<void> test_fileSystem_addFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_addFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
@@ -560,7 +247,7 @@
     assertNoErrorsNotification(path);
 
     // Create it, will be analyzed.
-    newFile(path, content: '0: 1');
+    newFile2(path, '0: 1');
     await pumpEventQueue();
     await server.onAnalysisComplete;
 
@@ -575,11 +262,11 @@
     var aaaRootPath = '/packages/aaa';
     var a_path = '$aaaRootPath/lib/a.dart';
 
-    newFile(a_path, content: '''
+    newFile2(a_path, '''
 class A {}
 ''');
 
-    newFile(testFilePath, content: '''
+    newFile2(testFilePath, '''
 import 'package:aaa/a.dart';
 void f(A a) {}
 ''');
@@ -610,11 +297,11 @@
     var a_path = '$testPackageLibPath/a.dart';
     var pubspec_path = '$testPackageRootPath/pubspec.yaml';
 
-    newFile(a_path, content: 'error');
+    newFile2(a_path, 'error');
 
     // Write an empty file to force a new analysis context.
     // We look for `pubspec.yaml` files only in analysis context roots.
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '');
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
@@ -626,7 +313,7 @@
     );
 
     // Add a non-Dart file that we know how to analyze.
-    newFile(pubspec_path, content: '''
+    newFile2(pubspec_path, '''
 name: sample
 dependencies: true
 ''');
@@ -644,7 +331,7 @@
     var a_path = '$testPackageLibPath/a.dart';
     var unrelated_path = '$testPackageRootPath/unrelated.txt';
 
-    newFile(a_path, content: 'error');
+    newFile2(a_path, 'error');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
@@ -656,7 +343,7 @@
     );
 
     // Add an unrelated file, no analysis.
-    newFile(unrelated_path, content: 'anything');
+    newFile2(unrelated_path, 'anything');
     await pumpEventQueue();
     await server.onAnalysisComplete;
 
@@ -674,7 +361,7 @@
     _createFilesWithErrors([a_path, b_path, c_path]);
 
     // Exclude b.dart from analysis.
-    newFile(options_path, content: r'''
+    newFile2(options_path, r'''
 analyzer:
   exclude:
     - lib/b.dart
@@ -690,7 +377,7 @@
     );
 
     // Exclude c.dart from analysis.
-    newFile(options_path, content: r'''
+    newFile2(options_path, r'''
 analyzer:
   exclude:
     - lib/c.dart
@@ -711,12 +398,12 @@
   Future<void> test_fileSystem_changeFile_androidManifestXml() async {
     var path = '$testPackageRootPath/AndroidManifest.xml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
     // Has an error - no touch screen.
-    newFile(path, content: '<manifest/>');
+    newFile2(path, '<manifest/>');
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
@@ -729,7 +416,7 @@
     assertNoErrorsNotification(path);
 
     // Update the file, so analyze it.
-    newFile(path, content: '<manifest/>');
+    newFile2(path, '<manifest/>');
     await pumpEventQueue();
     await server.onAnalysisComplete;
 
@@ -741,11 +428,11 @@
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A2 {}
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import 'a.dart';
 void f(A a) {}
 ''');
@@ -758,7 +445,7 @@
     forgetReceivedErrors();
 
     // Update a.dart so that b.dart has no error.
-    newFile(a_path, content: 'class A {}');
+    newFile2(a_path, 'class A {}');
     await pumpEventQueue();
     await server.onAnalysisComplete;
 
@@ -771,11 +458,11 @@
     var a_path = '$testPackageLibPath/.foo/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class B {}
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import '.foo/a.dart';
 void f(A a) {}
 ''');
@@ -790,7 +477,7 @@
     // We have `B`, not `A`, in a.dart, so has errors.
     assertHasErrors(b_path);
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A {}
 ''');
     await pumpEventQueue();
@@ -807,17 +494,17 @@
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: r'''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - "**/a.dart"
 ''');
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class B {}
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import 'a.dart';
 void f(A a) {}
 ''');
@@ -832,7 +519,7 @@
     // We have `B`, not `A`, in a.dart, so has errors.
     assertHasErrors(b_path);
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A {}
 ''');
     await pumpEventQueue();
@@ -842,51 +529,13 @@
     assertNoErrors(b_path);
   }
 
-  Future<void> test_fileSystem_changeFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    // Write `.packages` empty, without `package:aaa`.
-    newDotPackagesFile(testPackageRootPath, content: '');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_changeFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
     // This file has an error.
-    newFile(path, content: '0: 1');
+    newFile2(path, '0: 1');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
@@ -894,7 +543,7 @@
     assertHasErrors(path);
 
     // Replace with the context that does not have errors.
-    newFile(path, content: r'''
+    newFile2(path, r'''
 version: 1
 transforms: []
 ''');
@@ -908,15 +557,124 @@
     _assertFlushedResults([]);
   }
 
+  Future<void> test_fileSystem_changeFile_hasOverlay_removeOverlay() async {
+    newFile2(testFilePath, '');
+
+    // Add an overlay without errors.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+
+    // The test file (overlay) is analyzed, no errors.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      noErrors: [testFile.path],
+      notAnalyzed: [],
+    );
+
+    // Change the file, has errors.
+    newFile2(testFilePath, 'error');
+
+    // But the overlay is still present, so the file is not analyzed.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      notAnalyzed: [testFile.path],
+    );
+
+    // Ask to remove the overlay, still active, start a timer.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: RemoveContentOverlay(),
+      }).toRequest('0'),
+    );
+
+    // Wait for the timer to remove the overlay to fire.
+    await Future.delayed(server.pendingFilesRemoveOverlayDelay);
+
+    // The file has errors.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [testFile.path],
+      noErrors: [],
+      notAnalyzed: [],
+    );
+  }
+
+  Future<void>
+      test_fileSystem_changeFile_hasOverlay_removeOverlay_delayed() async {
+    // Use long delay, so that it does not happen.
+    server.pendingFilesRemoveOverlayDelay = const Duration(seconds: 300);
+
+    newFile2(testFilePath, '');
+
+    // Add an overlay without errors.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+
+    // The test file (overlay) is analyzed, no errors.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      noErrors: [testFile.path],
+      notAnalyzed: [],
+    );
+
+    // Change the file, has errors.
+    modifyFile(testFilePath, 'error');
+
+    // But the overlay is still present, so the file is not analyzed.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      notAnalyzed: [testFile.path],
+    );
+
+    // Ask to remove the overlay, still active, start a timer.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: RemoveContentOverlay(),
+      }).toRequest('0'),
+    );
+
+    // Long timer, so still not analyzed.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      notAnalyzed: [testFile.path],
+    );
+
+    // Change the file again, has errors.
+    newFile2(testFilePath, 'error');
+
+    // The timer cancelled on the watch event, and the file analyzed.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [testFile.path],
+      noErrors: [],
+      notAnalyzed: [],
+    );
+  }
+
   Future<void> test_fileSystem_changeFile_packageConfigJsonFile() async {
     var aaaRootPath = '/packages/aaa';
     var a_path = '$aaaRootPath/lib/a.dart';
 
-    newFile(a_path, content: '''
+    newFile2(a_path, '''
 class A {}
 ''');
 
-    newFile(testFilePath, content: '''
+    newFile2(testFilePath, '''
 import 'package:aaa/a.dart';
 void f(A a) {}
 ''');
@@ -952,7 +710,7 @@
     _createFilesWithErrors([a_path, b_path]);
 
     // Exclude b.dart from analysis.
-    newFile(options_path, content: r'''
+    newFile2(options_path, r'''
 analyzer:
   exclude:
     - lib/b.dart
@@ -984,12 +742,12 @@
   Future<void> test_fileSystem_deleteFile_androidManifestXml() async {
     var path = '$testPackageRootPath/AndroidManifest.xml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
     // Has an error - no touch screen.
-    newFile(path, content: '<manifest/>');
+    newFile2(path, '<manifest/>');
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
@@ -1032,17 +790,17 @@
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: r'''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, r'''
 analyzer:
   exclude:
     - "**/a.dart"
 ''');
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 class A {}
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 import 'a.dart';
 void f(A a) {}
 ''');
@@ -1065,50 +823,13 @@
     assertHasErrors(b_path);
   }
 
-  Future<void> test_fileSystem_deleteFile_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
-
-    newFile(a_path, content: '''
-class A {}
-''');
-
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
-
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
-
-    // Write `.packages`, recreate analysis contexts.
-    deleteFile('$testPackageRootPath/.packages');
-
-    await pumpEventQueue();
-    await server.onAnalysisComplete;
-
-    // We cannot resolve `package:aaa/a.dart`
-    assertHasErrors(testFilePath);
-
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
-  }
-
   Future<void> test_fileSystem_deleteFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
     // This file has an error.
-    newFile(path, content: '0: 1');
+    newFile2(path, '0: 1');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
@@ -1127,7 +848,7 @@
     var aaaRootPath = '/packages/aaa';
     var a_path = '$aaaRootPath/lib/a.dart';
 
-    newFile(a_path, content: '''
+    newFile2(a_path, '''
 class A {}
 ''');
 
@@ -1137,7 +858,7 @@
         ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
-    newFile(testFilePath, content: '''
+    newFile2(testFilePath, '''
 import 'package:aaa/a.dart';
 void f(A a) {}
 ''');
@@ -1163,33 +884,188 @@
     assertNoErrorsNotification(a_path);
   }
 
-  Future<void> test_setRoots_dotPackagesFile() async {
-    deleteTestPackageConfigJsonFile();
-    var aaaLibPath = '/packages/aaa/lib';
-    var a_path = '$aaaLibPath/a.dart';
+  /// This test ensures that when an `addOverlay` cancels any pending
+  /// `removeOverlay` timer, it also removes it, so that a subsequent watch
+  /// event does not still try to process it.
+  Future<void>
+      test_fileSystem_removeOverlay_addOverlay_changeFile_changeOverlay() async {
+    // Use long delay, so that it does not happen.
+    server.pendingFilesRemoveOverlayDelay = const Duration(seconds: 300);
 
-    newFile(a_path, content: '''
-class A {}
-''');
+    newFile2(testFilePath, '');
 
-    newDotPackagesFile(testPackageRootPath, content: '''
-aaa:${toUriStr(aaaLibPath)}
-''');
+    // Add an overlay without errors.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
 
-    newFile(testFilePath, content: '''
-import 'package:aaa/a.dart';
-void f(A a) {}
-''');
-
-    // create project and wait for analysis
     await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
 
-    // We have `A` in 'package:aaa/a.dart', so no errors.
-    assertNoErrors(testFilePath);
+    // The test file (overlay) is analyzed, no errors.
+    await _waitAnalysisComplete();
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      noErrors: [testFile.path],
+      notAnalyzed: [],
+    );
 
-    // errors are not reported for packages
-    assertNoErrorsNotification(a_path);
+    // Ask to remove the overlay, still active, start a timer.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: RemoveContentOverlay(),
+      }).toRequest('0'),
+    );
+
+    // Re-add an overlay. Should cancel the timer and replace the overlay.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+
+    // Change the file to trigger the watcher. Since the request above should
+    // have cancelled (and removed) the timer, this should not do anything
+    // (specifically, it should not remove the new overlay).
+    modifyFile(testFilePath, 'error');
+
+    // The overlay should still be present, so we should be able to change it.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay(
+          [SourceEdit(0, 0, '//')],
+        ),
+      }).toRequest('0'),
+    );
+  }
+
+  Future<void> test_setPriorityFiles() async {
+    var a = getFile('$workspaceRootPath/foo/lib/a.dart');
+    var b = getFile('$workspaceRootPath/foo/lib/b.dart');
+    var c = getFile('$workspaceRootPath/bar/lib/c.dart');
+    var d = getFile('$workspaceRootPath/bar/lib/d.dart');
+
+    a.writeAsStringSync('');
+    b.writeAsStringSync('');
+    c.writeAsStringSync('');
+    d.writeAsStringSync('');
+
+    await handleSuccessfulRequest(
+      AnalysisSetPriorityFilesParams(
+        [a.path, c.path],
+      ).toRequest('0'),
+    );
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+
+    var hasPath = <String>{};
+    for (var notification in analysisErrorsNotifications) {
+      var path = notification.file;
+      if (!hasPath.add(path)) {
+        fail('Duplicate: $path');
+      } else if (path == a.path || path == c.path) {
+        if (hasPath.contains(b.path) || hasPath.contains(d.path)) {
+          fail('Priority after non-priority');
+        }
+      }
+    }
+  }
+
+  Future<void> test_setPriorityFiles_notAbsolute() async {
+    var response = await handleRequest(
+      AnalysisSetPriorityFilesParams(
+        ['a.dart'],
+      ).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+      ),
+    );
+  }
+
+  Future<void> test_setPriorityFiles_withoutRoots() async {
+    await handleSuccessfulRequest(
+      AnalysisSetPriorityFilesParams(
+        [convertPath('$testPackageLibPath/a.dart')],
+      ).toRequest('0'),
+    );
+  }
+
+  Future<void> test_setRoots_excluded_notAbsolute() async {
+    var response = await handleRequest(
+      AnalysisSetAnalysisRootsParams(
+        [workspaceRootPath],
+        ['foo'],
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+      ),
+    );
+  }
+
+  Future<void> test_setRoots_excluded_notNormalized() async {
+    var response = await handleRequest(
+      AnalysisSetAnalysisRootsParams(
+        [workspaceRootPath],
+        [convertPath('/foo/../bar')],
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+      ),
+    );
+  }
+
+  Future<void> test_setRoots_included_notAbsolute() async {
+    var response = await handleRequest(
+      AnalysisSetAnalysisRootsParams(
+        ['foo'],
+        [],
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+      ),
+    );
+  }
+
+  Future<void> test_setRoots_included_notNormalized() async {
+    var response = await handleRequest(
+      AnalysisSetAnalysisRootsParams(
+        [convertPath('/foo/../bar')],
+        [],
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_FILE_PATH_FORMAT,
+      ),
+    );
   }
 
   Future<void> test_setRoots_includedFile() async {
@@ -1267,7 +1143,7 @@
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   exclude:
     - "**/b.dart"
@@ -1323,18 +1199,66 @@
     );
   }
 
+  Future<void> test_setRoots_includedFolder_notExisting() async {
+    var existingFolder_path = '$testPackageLibPath/exiting';
+    var notExistingFolder_path = '$testPackageLibPath/notExisting';
+    var existingFile_path = '$existingFolder_path/1.dart';
+    var notExistingFile_path = '$notExistingFolder_path/1.dart';
+
+    _createFilesWithErrors([
+      existingFile_path,
+    ]);
+
+    await setRoots(included: [
+      existingFolder_path,
+      notExistingFolder_path,
+    ], excluded: []);
+    await server.onAnalysisComplete;
+
+    // The not existing root does not prevent analysis of the existing one.
+    _assertAnalyzedFiles(hasErrors: [
+      existingFile_path,
+    ], notAnalyzed: [
+      notExistingFile_path,
+    ]);
+  }
+
+  Future<void> test_setRoots_notDartFile_analysisOptions_excluded() async {
+    deleteTestPackageAnalysisOptionsFile();
+    var a_path = '$testPackageLibPath/a.dart';
+    var options_path = '$testPackageRootPath/analysis_options.yaml';
+
+    newFile2(a_path, 'error');
+
+    // 'analysis_options.yaml' that has an error and excludes itself.
+    newFile2(options_path, '''
+analyzer:
+  exclude:
+    - analysis_options.yaml
+  error:
+''');
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    _assertAnalyzedFiles(
+      hasErrors: [a_path],
+      notAnalyzed: [options_path],
+    );
+  }
+
   Future<void> test_setRoots_notDartFile_androidManifestXml() async {
     var path = '$testPackageRootPath/AndroidManifest.xml';
 
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
-    newAnalysisOptionsYamlFile(testPackageRootPath, content: '''
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
 ''');
 
-    newFile(path, content: '<manifest/>');
+    newFile2(path, '<manifest/>');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
@@ -1346,18 +1270,47 @@
     var path = '$testPackageLibPath/fix_data.yaml';
 
     // `lib/fix_data.yaml` will be analyzed.
-    newFile(path, content: '0: 1');
+    newFile2(path, '0: 1');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
 
     assertHasErrors(path);
   }
 
+  Future<void> test_setRoots_notDartFile_pubspec_excluded() async {
+    deleteTestPackageAnalysisOptionsFile();
+    var a_path = '$testPackageLibPath/a.dart';
+    var pubspec_path = '$testPackageRootPath/pubspec.yaml';
+    var options_path = '$testPackageRootPath/analysis_options.yaml';
+
+    newFile2(a_path, 'error');
+
+    writeTestPackagePubspecYamlFile('''
+name:
+  - error
+''');
+
+    // 'analysis_options.yaml' that excludes pubspec.yaml.
+    newFile2(options_path, '''
+analyzer:
+  exclude:
+    - pubspec.yaml
+''');
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    _assertAnalyzedFiles(
+      hasErrors: [a_path],
+      notAnalyzed: [pubspec_path],
+    );
+  }
+
   Future<void> test_setRoots_packageConfigJsonFile() async {
     var aaaRootPath = '/packages/aaa';
     var a_path = '$aaaRootPath/lib/a.dart';
 
-    newFile(a_path, content: '''
+    newFile2(a_path, '''
 class A {}
 ''');
 
@@ -1366,7 +1319,7 @@
         ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
-    newFile(testFilePath, content: '''
+    newFile2(testFilePath, '''
 import 'package:aaa/a.dart';
 void f(A a) {}
 ''');
@@ -1381,198 +1334,133 @@
     // errors are not reported for packages
     assertNoErrorsNotification(a_path);
   }
-}
 
-/// A helper to test 'analysis.*' requests.
-class AnalysisTestHelper with ResourceProviderMixin {
-  late MockServerChannel serverChannel;
-  late AnalysisServer server;
-  late AnalysisDomainHandler handler;
+  Future<void> test_updateContent_addOverlay() async {
+    newFile2(testFilePath, 'error');
 
-  Map<AnalysisService, List<String>> analysisSubscriptions = {};
+    await setRoots(included: [workspaceRootPath], excluded: []);
 
-  Map<String, List<AnalysisError>> filesErrors = {};
-  Map<String, List<HighlightRegion>> filesHighlights = {};
-  Map<String, List<NavigationRegion>> filesNavigation = {};
-
-  late String projectPath;
-  late String testFile;
-  late String testCode;
-
-  AnalysisTestHelper() {
-    projectPath = convertPath('/project');
-    testFile = convertPath('/project/bin/test.dart');
-    serverChannel = MockServerChannel();
-
-    // Create an SDK in the mock file system.
-    var sdkRoot = newFolder('/sdk');
-    createMockSdk(
-      resourceProvider: resourceProvider,
-      root: sdkRoot,
+    // The file in the file system has errors.
+    await server.onAnalysisComplete;
+    _assertAnalyzedFiles(
+      hasErrors: [testFile.path],
+      noErrors: [],
+      notAnalyzed: [],
     );
 
-    server = AnalysisServer(
-        serverChannel,
-        resourceProvider,
-        AnalysisServerOptions(),
-        DartSdkManager(sdkRoot.path),
-        CrashReportingAttachmentsBuilder.empty,
-        InstrumentationService.NULL_SERVICE);
-    handler = AnalysisDomainHandler(server);
-    // listen for notifications
-    serverChannel.notifications.listen((Notification notification) {
-      if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
-        var decoded = AnalysisErrorsParams.fromNotification(notification);
-        filesErrors[decoded.file] = decoded.errors;
-      }
-      if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
-        var params = AnalysisHighlightsParams.fromNotification(notification);
-        filesHighlights[params.file] = params.regions;
-      }
-      if (notification.event == ANALYSIS_NOTIFICATION_NAVIGATION) {
-        var params = AnalysisNavigationParams.fromNotification(notification);
-        filesNavigation[params.file] = params.regions;
-      }
-    });
+    // Add an overlay without errors.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+
+    // A new errors notification was received, no errors.
+    await server.onAnalysisComplete;
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      noErrors: [testFile.path],
+      notAnalyzed: [],
+    );
   }
 
-  /// Returns a [Future] that completes when the server's analysis is complete.
-  Future get onAnalysisComplete {
-    return server.onAnalysisComplete;
+  Future<void> test_updateContent_changeOverlay() async {
+    newFile2(testFilePath, '');
+
+    // Add the content with an error.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay('var v = 0'),
+      }).toRequest('0'),
+    );
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+
+    // The overlay has an error.
+    await server.onAnalysisComplete;
+    _assertAnalyzedFiles(
+      hasErrors: [testFile.path],
+      noErrors: [],
+      notAnalyzed: [],
+    );
+
+    // Add the missing `;`.
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay([
+          SourceEdit(9, 0, ';'),
+        ]),
+      }).toRequest('0'),
+    );
+
+    // A new errors notification was received, no errors.
+    await server.onAnalysisComplete;
+    _assertAnalyzedFiles(
+      hasErrors: [],
+      noErrors: [testFile.path],
+      notAnalyzed: [],
+    );
   }
 
-  void addAnalysisSubscription(AnalysisService service, String file) {
-    // add file to subscription
-    var files = analysisSubscriptions[service];
-    if (files == null) {
-      files = <String>[];
-      analysisSubscriptions[service] = files;
+  Future<void> test_updateContent_notAbsolute() async {
+    var response = await handleRequest(
+      AnalysisUpdateContentParams({
+        'a.dart': AddContentOverlay(''),
+      }).toRequest('0'),
+    );
+    expect(response, isResponseFailure('0'));
+  }
+
+  Future<void> test_updateContent_outOfRange_beyondEnd() {
+    return _updateContent_outOfRange('012', SourceEdit(0, 5, 'foo'));
+  }
+
+  Future<void> test_updateContent_outOfRange_negativeLength() {
+    return _updateContent_outOfRange('', SourceEdit(3, -1, 'foo'));
+  }
+
+  Future<void> test_updateContent_outOfRange_negativeOffset() {
+    return _updateContent_outOfRange('', SourceEdit(-1, 3, 'foo'));
+  }
+
+  Future<void> _updateContent_outOfRange(
+    String initialContent,
+    SourceEdit edit,
+  ) async {
+    newFile2(testFilePath, initialContent);
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    await handleSuccessfulRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: AddContentOverlay(initialContent),
+      }).toRequest('0'),
+    );
+
+    var response = await handleRequest(
+      AnalysisUpdateContentParams({
+        testFile.path: ChangeContentOverlay([edit]),
+      }).toRequest('0'),
+    );
+
+    expect(
+      response,
+      isResponseFailure(
+        '0',
+        RequestErrorCode.INVALID_OVERLAY_CHANGE,
+      ),
+    );
+  }
+
+  /// Pump the event queue, so that watch events are processed.
+  /// Wait for analysis to complete.
+  /// Repeat a few times, eventually there will be no work to do.
+  Future<void> _waitAnalysisComplete() async {
+    for (var i = 0; i < 128; i++) {
+      pumpEventQueue();
+      await server.onAnalysisComplete;
     }
-    files.add(file);
-    // set subscriptions
-    var request =
-        AnalysisSetSubscriptionsParams(analysisSubscriptions).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  void addAnalysisSubscriptionHighlights(String file) {
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file);
-  }
-
-  void addAnalysisSubscriptionNavigation(String file) {
-    addAnalysisSubscription(AnalysisService.NAVIGATION, file);
-  }
-
-  /// Creates an empty project `/project`.
-  void createEmptyProject() {
-    newFolder(projectPath);
-    var request =
-        AnalysisSetAnalysisRootsParams([projectPath], []).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  /// Creates a project with a single Dart file `/project/bin/test.dart` with
-  /// the given [code].
-  Future<void> createSingleFileProject(code) async {
-    testCode = _getCodeString(code);
-    newFolder(projectPath);
-    newFile(testFile, content: testCode);
-    await setRoots(included: [projectPath], excluded: []);
-  }
-
-  /// Returns the offset of [search] in [testCode].
-  /// Fails if not found.
-  int findOffset(String search) {
-    var offset = testCode.indexOf(search);
-    expect(offset, isNot(-1));
-    return offset;
-  }
-
-  /// Returns [AnalysisError]s recorded for the given [file].
-  /// May be empty, but not `null`.
-  List<AnalysisError> getErrors(String file) {
-    var errors = filesErrors[file];
-    if (errors != null) {
-      return errors;
-    }
-    return <AnalysisError>[];
-  }
-
-  /// Returns highlights recorded for the given [file].
-  /// May be empty, but not `null`.
-  List<HighlightRegion> getHighlights(String file) {
-    var highlights = filesHighlights[file];
-    if (highlights != null) {
-      return highlights;
-    }
-    return [];
-  }
-
-  /// Returns navigation regions recorded for the given [file].
-  /// May be empty, but not `null`.
-  List<NavigationRegion> getNavigation(String file) {
-    var navigation = filesNavigation[file];
-    if (navigation != null) {
-      return navigation;
-    }
-    return [];
-  }
-
-  /// Returns [AnalysisError]s recorded for the [testFile].
-  /// May be empty, but not `null`.
-  List<AnalysisError> getTestErrors() {
-    return getErrors(testFile);
-  }
-
-  /// Returns highlights recorded for the given [testFile].
-  /// May be empty, but not `null`.
-  List<HighlightRegion> getTestHighlights() {
-    return getHighlights(testFile);
-  }
-
-  /// Returns navigation information recorded for the given [testFile].
-  /// May be empty, but not `null`.
-  List<NavigationRegion> getTestNavigation() {
-    return getNavigation(testFile);
-  }
-
-  /// Validates that the given [request] is handled successfully.
-  void handleSuccessfulRequest(Request request) {
-    var response = handler.handleRequest(request, NotCancelableToken());
-    expect(response, isResponseSuccess('0'));
-  }
-
-  /// Send an `updateContent` request for [testFile].
-  void sendContentChange(HasToJson contentChange) {
-    var request =
-        AnalysisUpdateContentParams({testFile: contentChange}).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  Future<void> setRoots(
-      {required List<String> included, required List<String> excluded}) async {
-    var request =
-        AnalysisSetAnalysisRootsParams(included, excluded).toRequest('0');
-    var response = await waitResponse(request);
-    expect(response, isResponseSuccess(request.id));
-  }
-
-  /// Stops the associated server.
-  void stopServer() {
-    server.done();
-  }
-
-  /// Completes with a successful [Response] for the given [request].
-  /// Otherwise fails.
-  Future<Response> waitResponse(Request request) async {
-    return serverChannel.sendRequest(request);
-  }
-
-  static String _getCodeString(code) {
-    if (code is List<String>) {
-      code = code.join('\n');
-    }
-    return code as String;
   }
 }
 
@@ -1598,7 +1486,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);
@@ -1612,18 +1500,23 @@
     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);
   }
 
   Future<void> test_afterAnalysis_packageFile_external() async {
-    var pkgFile = newFile('/packages/pkgA/lib/libA.dart', content: '''
+    var pkgFile = newFile2('/packages/pkgA/lib/libA.dart', '''
 library lib_a;
 class A {}
 ''').path;
-    newDotPackagesFile('/project', content: 'pkgA:file:///packages/pkgA/lib');
+    newPackageConfigJsonFile(
+      '/project',
+      (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     //
     addTestFile('''
 import 'package:pkgA/libA.dart';
@@ -1636,7 +1529,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);
@@ -1645,11 +1538,11 @@
   Future<void> test_afterAnalysis_packageFile_inRoot() async {
     var pkgA = convertPath('/pkgA');
     var pkgB = convertPath('/pkgA');
-    var pkgFileA = newFile('$pkgA/lib/libA.dart', content: '''
+    var pkgFileA = newFile2('$pkgA/lib/libA.dart', '''
 library lib_a;
 class A {}
 ''').path;
-    newFile('$pkgA/lib/libB.dart', content: '''
+    newFile2('$pkgA/lib/libB.dart', '''
 import 'package:pkgA/libA.dart';
 main() {
   new A();
@@ -1662,18 +1555,23 @@
     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);
   }
 
   Future<void> test_afterAnalysis_packageFile_notUsed() async {
-    var pkgFile = newFile('/packages/pkgA/lib/libA.dart', content: '''
+    var pkgFile = newFile2('/packages/pkgA/lib/libA.dart', '''
 library lib_a;
 class A {}
 ''').path;
-    newDotPackagesFile('/project', content: 'pkgA:/packages/pkgA/lib');
+    newPackageConfigJsonFile(
+      '/project',
+      (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     //
     addTestFile('// no "pkgA" reference');
     await createProject();
@@ -1683,7 +1581,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);
@@ -1697,7 +1595,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);
@@ -1707,7 +1605,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);
@@ -1717,7 +1615,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!;
@@ -1729,6 +1627,7 @@
 }
 
 class _AnalysisDomainTest extends PubPackageAnalysisServerTest {
+  final List<AnalysisErrorsParams> analysisErrorsNotifications = [];
   final Map<String, List<AnalysisError>> filesErrors = {};
 
   /// The files for which `analysis.flushResults` was received.
@@ -1762,6 +1661,7 @@
     }
     if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
       var decoded = AnalysisErrorsParams.fromNotification(notification);
+      analysisErrorsNotifications.add(decoded);
       filesErrors[decoded.file] = decoded.errors;
     }
   }
@@ -1796,7 +1696,7 @@
   /// So, when analyzed, these files will satisfy [assertHasErrors].
   void _createFilesWithErrors(List<String> paths) {
     for (var path in paths) {
-      newFile(path, content: 'error');
+      newFile2(path, 'error');
     }
   }
 }
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 37bf033..03ec19a 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 {
@@ -114,7 +59,7 @@
     check(details)
       ..completion.isEqualTo('Random')
       ..change
-          .hasFileEdit(testFilePathPlatform)
+          .hasFileEdit(testFile.path)
           .appliedTo(testFileContent)
           .isEqualTo(r'''
 import 'dart:math';
@@ -133,7 +78,7 @@
 ''');
 
     var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
-    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/f.dart', '''
 class Test {}
 ''');
 
@@ -152,7 +97,7 @@
     check(details)
       ..completion.isEqualTo('Test')
       ..change
-          .hasFileEdit(testFilePathPlatform)
+          .hasFileEdit(testFile.path)
           .appliedTo(testFileContent)
           .isEqualTo(r'''
 import 'package:aaa/a.dart';
@@ -164,7 +109,7 @@
   }
 
   Future<void> test_import_package_this() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class Test {}
 ''');
 
@@ -178,7 +123,7 @@
     check(details)
       ..completion.isEqualTo('Test')
       ..change
-          .hasFileEdit(testFilePathPlatform)
+          .hasFileEdit(testFile.path)
           .appliedTo(testFileContent)
           .isEqualTo(r'''
 import 'package:test/a.dart';
@@ -193,7 +138,7 @@
     await _configureWithWorkspaceRoot();
 
     var request = CompletionGetSuggestionDetails2Params(
-            testFilePathPlatform, 0, 'Random', '[foo]:bar')
+            testFile.path, 0, 'Random', '[foo]:bar')
         .toRequest('0');
 
     var response = await handleRequest(request);
@@ -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,
@@ -224,8 +174,9 @@
     var nextOffset = content.indexOf('^', completionOffset + 1);
     expect(nextOffset, equals(-1), reason: 'too many ^');
 
-    newFile(path,
-        content: content.substring(0, completionOffset) +
+    newFile2(
+        path,
+        content.substring(0, completionOffset) +
             content.substring(completionOffset + 1));
 
     return await _getDetails(
@@ -249,7 +200,7 @@
       libraryUri,
     ).toRequest('0');
 
-    var response = await _handleSuccessfulRequest(request);
+    var response = await handleSuccessfulRequest(request);
     return CompletionGetSuggestionDetails2Result.fromResponse(response);
   }
 
@@ -282,7 +233,7 @@
       abortedIdSet.add(request.id);
     });
 
-    newFile(testFilePath, content: '');
+    newFile2(testFilePath, '');
 
     await _configureWithWorkspaceRoot();
 
@@ -320,7 +271,7 @@
       abortedIdSet.add(request.id);
     });
 
-    newFile(testFilePath, content: '');
+    newFile2(testFilePath, '');
 
     await _configureWithWorkspaceRoot();
 
@@ -328,9 +279,9 @@
     var request = _sendTestCompletionRequest('0', 0);
 
     // Simulate typing in the IDE.
-    await _handleSuccessfulRequest(
+    await handleSuccessfulRequest(
       AnalysisUpdateContentParams({
-        testFilePathPlatform: AddContentOverlay('void f() {}'),
+        testFile.path: AddContentOverlay('void f() {}'),
       }).toRequest('1'),
     );
 
@@ -343,14 +294,31 @@
       ..suggestions.isEmpty;
   }
 
+  Future<void> test_applyPendingFileChanges() async {
+    await _configureWithWorkspaceRoot();
+
+    // Request with the empty content.
+    await _getTestCodeSuggestions('^');
+
+    // Change the file, and request again.
+    // Should apply pending file changes before resolving.
+    var response = await _getTestCodeSuggestions('Str^');
+
+    check(response).suggestions.includesAll([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('String')
+        ..isClass,
+    ]);
+  }
+
   Future<void> test_isNotImportedFeature_prefixed_classInstanceMethod() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void foo01() {}
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 
 class B extends A {
@@ -424,13 +392,13 @@
   }
 
   Future<void> test_notImported_lowerRelevance_enumConstant() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 enum E1 {
   foo01
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 enum E2 {
   foo02
 }
@@ -464,13 +432,13 @@
   Future<void> test_notImported_lowerRelevance_extension_getter() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   int get foo01 => 0;
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 extension E2 on int {
   int get foo02 => 0;
 }
@@ -502,13 +470,13 @@
   Future<void> test_notImported_lowerRelevance_extension_method() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   void foo01() {}
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 extension E2 on int {
   void foo02() {}
 }
@@ -540,13 +508,13 @@
   Future<void> test_notImported_lowerRelevance_extension_setter() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   set foo01(int _) {}
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 extension E2 on int {
   set foo02(int _) {}
 }
@@ -576,11 +544,11 @@
   }
 
   Future<void> test_notImported_lowerRelevance_topLevel_class() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class A02 {}
 ''');
 
@@ -610,11 +578,11 @@
   }
 
   Future<void> test_notImported_lowerRelevance_topLevel_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 int get foo01 => 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 int get foo02 => 0;
 ''');
 
@@ -644,11 +612,11 @@
   }
 
   Future<void> test_notImported_lowerRelevance_topLevel_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 set foo01(int _) {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 set foo02(int _) {}
 ''');
 
@@ -678,11 +646,11 @@
   }
 
   Future<void> test_notImported_lowerRelevance_topLevel_variable() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var foo01 = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var foo02 = 0;
 ''');
 
@@ -721,18 +689,18 @@
 ''');
 
     var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
-    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/f.dart', '''
 class A01 {}
 ''');
-    newFile('${aaaRoot.path}/lib/src/f.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/src/f.dart', '''
 class A02 {}
 ''');
 
     var bbbRoot = getFolder('$workspaceRootPath/packages/bbb');
-    newFile('${bbbRoot.path}/lib/f.dart', content: '''
+    newFile2('${bbbRoot.path}/lib/f.dart', '''
 class A03 {}
 ''');
-    newFile('${bbbRoot.path}/lib/src/f.dart', content: '''
+    newFile2('${bbbRoot.path}/lib/src/f.dart', '''
 class A04 {}
 ''');
 
@@ -771,18 +739,18 @@
 ''');
 
     var aaaRoot = getFolder('$workspaceRootPath/packages/aaa');
-    newFile('${aaaRoot.path}/lib/f.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/f.dart', '''
 class A01 {}
 ''');
-    newFile('${aaaRoot.path}/lib/src/f.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/src/f.dart', '''
 class A02 {}
 ''');
 
     var bbbRoot = getFolder('$workspaceRootPath/packages/bbb');
-    newFile('${bbbRoot.path}/lib/f.dart', content: '''
+    newFile2('${bbbRoot.path}/lib/f.dart', '''
 class A03 {}
 ''');
-    newFile('${bbbRoot.path}/lib/src/f.dart', content: '''
+    newFile2('${bbbRoot.path}/lib/src/f.dart', '''
 class A04 {}
 ''');
 
@@ -819,11 +787,11 @@
   }
 
   Future<void> test_notImported_pub_this() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class A02 {}
 ''');
 
@@ -850,12 +818,12 @@
   }
 
   Future<void> test_notImported_pub_this_hasImport() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 class A02 {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class A03 {}
 ''');
 
@@ -887,12 +855,12 @@
   }
 
   Future<void> test_notImported_pub_this_hasImport_hasShow() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 class A02 {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class A03 {}
 ''');
 
@@ -932,11 +900,11 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageTestPath/b.dart', content: '''
+    newFile2('$testPackageTestPath/b.dart', '''
 class A02 {}
 ''');
 
@@ -964,11 +932,11 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/f.dart', content: '''
+    newFile2('$testPackageLibPath/f.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageLibPath/src/f.dart', content: '''
+    newFile2('$testPackageLibPath/src/f.dart', '''
 class A02 {}
 ''');
 
@@ -999,11 +967,11 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 ''');
 
-    var b = newFile('$testPackageTestPath/b.dart', content: '''
+    var b = newFile2('$testPackageTestPath/b.dart', '''
 class A02 {}
 ''');
     var b_uriStr = toUriStr(b.path);
@@ -1039,11 +1007,11 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/f.dart', content: '''
+    newFile2('$testPackageLibPath/f.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageLibPath/src/f.dart', content: '''
+    newFile2('$testPackageLibPath/src/f.dart', '''
 class A02 {}
 ''');
 
@@ -1132,7 +1100,7 @@
   Future<void> test_numResults_topLevelVariables_imported_withPrefix() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var foo01 = 0;
 var foo02 = 0;
 var foo03 = 0;
@@ -1312,7 +1280,7 @@
   Future<void> test_prefixed_expression_extensionGetters_notImported() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   int get foo01 => 0;
   int get bar => 0;
@@ -1353,7 +1321,7 @@
       test_prefixed_expression_extensionGetters_notImported_private() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   int get foo01 => 0;
 }
@@ -1421,7 +1389,7 @@
   Future<void> test_prefixed_expression_extensionMethods_notImported() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   void foo01() {}
   void bar() {}
@@ -1494,7 +1462,7 @@
   Future<void> test_prefixed_expression_extensionSetters_notImported() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   set foo01(int _) {}
   set bar(int _) {}
@@ -1535,7 +1503,7 @@
       test_prefixed_expression_extensionSetters_notImported_private() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   set foo01(int _) {}
 }
@@ -1570,7 +1538,7 @@
   Future<void> test_prefixed_extensionGetters_imported() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E1 on int {
   int get foo01 => 0;
   int get foo02 => 0;
@@ -1714,11 +1682,11 @@
   Future<void> test_unprefixed_imported_class() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A01 {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class A02 {}
 ''');
 
@@ -1752,11 +1720,11 @@
   Future<void> test_unprefixed_imported_topLevelVariable() async {
     await _configureWithWorkspaceRoot();
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var foo01 = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var foo02 = 0;
 ''');
 
@@ -1883,6 +1851,9 @@
         ..completion.isEqualTo('analyzer: ')
         ..kind.isIdentifier,
       (suggestion) => suggestion
+        ..completion.isEqualTo('code-style: ')
+        ..kind.isIdentifier,
+      (suggestion) => suggestion
         ..completion.isEqualTo('include: ')
         ..kind.isIdentifier,
       (suggestion) => suggestion
@@ -1940,6 +1911,11 @@
     ]);
   }
 
+  Future<void> _configureWithWorkspaceRoot() async {
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+  }
+
   Future<CompletionResponseForTesting> _getCodeSuggestions({
     required String path,
     required String content,
@@ -1951,9 +1927,11 @@
     var nextOffset = content.indexOf('^', completionOffset + 1);
     expect(nextOffset, equals(-1), reason: 'too many ^');
 
-    newFile(path,
-        content: content.substring(0, completionOffset) +
-            content.substring(completionOffset + 1));
+    newFile2(
+      path,
+      content.substring(0, completionOffset) +
+          content.substring(completionOffset + 1),
+    );
 
     return await _getSuggestions(
       path: path,
@@ -1973,7 +1951,7 @@
       maxResults,
     ).toRequest('0');
 
-    var response = await _handleSuccessfulRequest(request);
+    var response = await handleSuccessfulRequest(request);
     var result = CompletionGetSuggestions2Result.fromResponse(response);
     return CompletionResponseForTesting(
       requestOffset: completionOffset,
@@ -1997,7 +1975,7 @@
 
   RequestWithFutureResponse _sendTestCompletionRequest(String id, int offset) {
     var request = CompletionGetSuggestions2Params(
-      testFilePathPlatform,
+      testFile.path,
       0,
       1 << 10,
     ).toRequest(id);
@@ -2281,7 +2259,7 @@
   Future<void> test_import_uri_with_trailing() {
     final filePath = '/project/bin/testA.dart';
     final incompleteImportText = toUriStr('/project/bin/t');
-    newFile(filePath, content: 'library libA;');
+    newFile2(filePath, 'library libA;');
     addTestFile('''
     import "$incompleteImportText^.dart";
     void f() {}''');
@@ -2578,7 +2556,7 @@
   }
 
   Future<void> test_inDartDoc_reference1() async {
-    newFile('/testA.dart', content: '''
+    newFile2('/testA.dart', '''
   part of libA;
   foo(bar) => 0;''');
     addTestFile('''
@@ -2731,7 +2709,7 @@
   }
 
   Future<void> test_local_override() {
-    newFile('/project/bin/a.dart', content: 'class A {m() {}}');
+    newFile2('/project/bin/a.dart', 'class A {m() {}}');
     addTestFile('''
 import 'a.dart';
 class B extends A {
@@ -2796,7 +2774,7 @@
   }
 
   Future<void> test_overrides() {
-    newFile('/project/bin/a.dart', content: 'class A {m() {}}');
+    newFile2('/project/bin/a.dart', 'class A {m() {}}');
     addTestFile('''
 import 'a.dart';
 class B extends A {m() {^}}
@@ -2809,7 +2787,7 @@
   }
 
   Future<void> test_partFile() {
-    newFile('/project/bin/a.dart', content: '''
+    newFile2('/project/bin/a.dart', '''
       library libA;
       import 'dart:html';
       part 'test.dart';
@@ -2832,7 +2810,7 @@
   }
 
   Future<void> test_partFile2() {
-    newFile('/project/bin/a.dart', content: '''
+    newFile2('/project/bin/a.dart', '''
       part of libA;
       class A { }''');
     addTestFile('''
@@ -2917,151 +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);
-  }
-
-  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,
-    );
-
-    completionDomain.budgetDuration = const Duration(seconds: 30);
-  }
-
-  void writePackageConfig(Folder root, PackageConfigFileBuilder config) {
-    newPackageConfigJsonFile(
-      root.path,
-      content: config.toContent(toUriStr: toUriStr),
-    );
-  }
-
-  void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
-    newAnalysisOptionsYamlFile(
-      testPackageRootPath,
-      content: 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;
-  }
-
-  /// 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;
-  }
-}
-
 class RequestWithFutureResponse {
   final int offset;
   final Request request;
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index 2a354f2..13b5829 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/domain_diagnostic.dart';
-import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -27,14 +26,14 @@
 
   Future<void> test_getDiagnostics() async {
     newPubspecYamlFile('/project', 'name: project');
-    newFile('/project/bin/test.dart', content: 'main() {}');
+    newFile2('/project/bin/test.dart', 'main() {}');
 
     await server.setAnalysisRoots('0', [convertPath('/project')], []);
 
     await server.onAnalysisComplete;
 
     var request = DiagnosticGetDiagnosticsParams().toRequest('0');
-    var response = handler.handleRequest(request, NotCancelableToken())!;
+    var response = await waitResponse(request);
     var result = DiagnosticGetDiagnosticsResult.fromResponse(response);
 
     expect(result.contexts, hasLength(1));
@@ -50,7 +49,7 @@
 
   Future<void> test_getDiagnostics_noRoot() async {
     var request = DiagnosticGetDiagnosticsParams().toRequest('0');
-    var response = handler.handleRequest(request, NotCancelableToken())!;
+    var response = await waitResponse(request);
     var result = DiagnosticGetDiagnosticsResult.fromResponse(response);
     expect(result.contexts, isEmpty);
   }
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index d3945a8..3bfafaf 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -188,8 +188,8 @@
 }
 ''';
 
-    var path = newFile('/test.dart').path;
-    newFile(path, content: code);
+    var path = newFile2('/test.dart', '').path;
+    newFile2(path, code);
 
     var request = ExecutionGetSuggestionsParams(
         'a.',
@@ -213,7 +213,7 @@
   }
 
   void test_mapUri_file() {
-    var path = newFile('/a/b.dart').path;
+    var path = newFile2('/a/b.dart', '').path;
     // map the file
     var result = _mapUri(file: path);
     expect(result.file, isNull);
@@ -229,7 +229,7 @@
   }
 
   void test_mapUri_uri() {
-    var path = newFile('/a/b.dart').path;
+    var path = newFile2('/a/b.dart', '').path;
     // map the uri
     var result = _mapUri(uri: Uri.file(path).toString());
     expect(result.file, convertPath('/a/b.dart'));
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index b7bfaa8..9c26bd7 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -5,74 +5,52 @@
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/domain_server.dart';
-import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
-import 'package:analysis_server/src/utilities/mocks.dart';
-import 'package:analysis_server/src/utilities/progress.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/src/generated/sdk.dart';
 import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis_server_base.dart';
 import 'constants.dart';
 import 'mocks.dart';
 
 void main() {
-  late AnalysisServer server;
-  late ServerDomainHandler handler;
-  late MockServerChannel serverChannel;
-
-  setUp(() {
-    serverChannel = MockServerChannel();
-    var resourceProvider = MemoryResourceProvider();
-    server = AnalysisServer(
-        serverChannel,
-        resourceProvider,
-        AnalysisServerOptions(),
-        DartSdkManager(''),
-        CrashReportingAttachmentsBuilder.empty,
-        InstrumentationService.NULL_SERVICE);
-    handler = ServerDomainHandler(server);
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ServerDomainTest);
   });
+}
 
-  group('ServerDomainHandler', () {
-    test('getVersion', () {
-      var request = ServerGetVersionParams().toRequest('0');
-      var response = handler.handleRequest(request, NotCancelableToken())!;
-      expect(
-          response.toJson(),
-          equals({
-            Response.ID: '0',
-            Response.RESULT: {VERSION: PROTOCOL_VERSION}
-          }));
+@reflectiveTest
+class ServerDomainTest extends PubPackageAnalysisServerTest {
+  Future<void> test_getVersion() async {
+    var request = ServerGetVersionParams().toRequest('0');
+    var response = await handleSuccessfulRequest(request);
+    expect(
+        response.toJson(),
+        equals({
+          Response.ID: '0',
+          Response.RESULT: {VERSION: PROTOCOL_VERSION}
+        }));
+  }
+
+  Future<void> test_setSubscriptions_invalidServiceName() async {
+    var request = Request('0', SERVER_REQUEST_SET_SUBSCRIPTIONS, {
+      SUBSCRIPTIONS: ['noSuchService']
     });
+    var response = await handleRequest(request);
+    expect(response, isResponseFailure('0'));
+  }
 
-    group('setSubscriptions', () {
-      test('invalid service name', () {
-        var request = Request('0', SERVER_REQUEST_SET_SUBSCRIPTIONS, {
-          SUBSCRIPTIONS: ['noSuchService']
-        });
-        var response = handler.handleRequest(request, NotCancelableToken());
-        expect(response, isResponseFailure('0'));
-      });
+  Future<void> test_setSubscriptions_success() async {
+    expect(server.serverServices, isEmpty);
+    // send request
+    var request =
+        ServerSetSubscriptionsParams([ServerService.STATUS]).toRequest('0');
+    await handleSuccessfulRequest(request);
+    // set of services has been changed
+    expect(server.serverServices, contains(ServerService.STATUS));
+  }
 
-      test('success', () {
-        expect(server.serverServices, isEmpty);
-        // send request
-        var request =
-            ServerSetSubscriptionsParams([ServerService.STATUS]).toRequest('0');
-        var response = handler.handleRequest(request, NotCancelableToken());
-        expect(response, isResponseSuccess('0'));
-        // set of services has been changed
-        expect(server.serverServices, contains(ServerService.STATUS));
-      });
-    });
-
-    test('shutdown', () async {
-      var request = ServerShutdownParams().toRequest('0');
-      var response = await serverChannel.sendRequest(request);
-      expect(response, isResponseSuccess('0'));
-    });
-  });
+  Future<void> test_shutdown() async {
+    var request = ServerShutdownParams().toRequest('0');
+    await handleSuccessfulRequest(request);
+  }
 }
diff --git a/pkg/analysis_server/test/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
index b746b44..4928226 100644
--- a/pkg/analysis_server/test/edit/bulk_fixes_test.dart
+++ b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
@@ -60,7 +60,7 @@
   }
 
   Future<void> test_annotateOverrides_excludedFile() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 analyzer:
   exclude:
     - test/**
@@ -69,7 +69,7 @@
     - annotate_overrides
 ''');
 
-    newFile('$projectPath/test/test.dart', content: '''
+    newFile2('$projectPath/test/test.dart', '''
 class A {
   void f() {}
 }
@@ -83,7 +83,7 @@
 
   Future<void> test_annotateOverrides_excludedSubProject() async {
     // Root project.
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 analyzer:
   exclude:
     - test/data/**
@@ -91,7 +91,7 @@
 
     // Sub-project.
     var subprojectRoot = '$projectPath/test/data/subproject';
-    newAnalysisOptionsYamlFile(subprojectRoot, content: '''
+    newAnalysisOptionsYamlFile2(subprojectRoot, '''
 linter:
   rules:
     - annotate_overrides
@@ -101,7 +101,7 @@
 name: subproject
 ''');
 
-    newFile('$subprojectRoot/test.dart', content: '''
+    newFile2('$subprojectRoot/test.dart', '''
 class A {
   void f() {}
 }
@@ -115,7 +115,7 @@
 
   Future<void> test_annotateOverrides_subProject() async {
     var subprojectRoot = '$projectPath/test/data/subproject';
-    newAnalysisOptionsYamlFile(subprojectRoot, content: '''
+    newAnalysisOptionsYamlFile2(subprojectRoot, '''
 linter:
   rules:
     - annotate_overrides
@@ -147,7 +147,7 @@
   }
 
   Future<void> test_details() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 linter:
   rules:
     - annotate_overrides
@@ -155,7 +155,7 @@
 ''');
 
     var fileA = convertPath('$projectPath/a.dart');
-    newFile(fileA, content: '''
+    newFile2(fileA, '''
 class A {
   A f() => new A();
 }
@@ -181,7 +181,7 @@
   }
 
   Future<void> test_unnecessaryNew() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 linter:
   rules:
     - unnecessary_new
@@ -205,7 +205,7 @@
     if (Platform.isWindows) {
       fail('Should not be passing on Windows, but it does');
     }
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 linter:
   rules:
     - prefer_collection_literals
@@ -228,7 +228,7 @@
   }
 
   Future<void> test_unnecessaryNew_ignoredInOptions() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 analyzer:
   errors:
     unnecessary_new: ignore
@@ -244,7 +244,7 @@
   }
 
   Future<void> test_unnecessaryNew_ignoredInSource() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 linter:
   rules:
     - unnecessary_new
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 8ffe486..a2658e5 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/edit/edit_domain.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -32,7 +33,7 @@
 
   Future<void> test_fileOutsideRoot() async {
     final outsideFile = '/foo/test.dart';
-    newFile(outsideFile, content: 'bad code to create error');
+    newFile2(outsideFile, 'bad code to create error');
 
     // Set up the original project, as the code fix code won't run at all
     // if there are no contexts.
@@ -140,7 +141,7 @@
 print(1)
 }
 ''';
-    _addOverlay(testFile, testCode);
+    await _addOverlay(testFile, testCode);
     // ask for fixes
     await waitForTasksFinished();
     var errorFixes = await _getFixesAt('print(1)');
@@ -149,23 +150,26 @@
   }
 
   Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
-    newFolder('/aaa');
-    newDotPackagesFile('/aaa', content: '''
-aaa:${toUri('/aaa/lib')}
-bbb:${toUri('/bbb/lib')}
-''');
+    newPackageConfigJsonFile(
+      '/aaa',
+      (PackageConfigFileBuilder()
+            ..add(name: 'aaa', rootPath: '/aaa')
+            ..add(name: 'bbb', rootPath: '/bbb'))
+          .toContent(toUriStr: toUriStr),
+    );
     newPubspecYamlFile('/aaa', r'''
 dependencies:
   bbb: any
 ''');
 
-    newFolder('/bbb');
-    newDotPackagesFile('/bbb', content: '''
-bbb:${toUri('/bbb/lib')}
-''');
-    newFile('/bbb/lib/target.dart', content: 'class Foo() {}');
-    newFile('/bbb/lib/target.generated.dart', content: 'class Foo() {}');
-    newFile('/bbb/lib/target.template.dart', content: 'class Foo() {}');
+    newPackageConfigJsonFile(
+      '/bbb',
+      (PackageConfigFileBuilder()..add(name: 'bbb', rootPath: '/bbb'))
+          .toContent(toUriStr: toUriStr),
+    );
+    newFile2('/bbb/lib/target.dart', 'class Foo() {}');
+    newFile2('/bbb/lib/target.generated.dart', 'class Foo() {}');
+    newFile2('/bbb/lib/target.template.dart', 'class Foo() {}');
 
     await setRoots(
         included: [convertPath('/aaa'), convertPath('/bbb')], excluded: []);
@@ -173,7 +177,7 @@
     // Configure the test file.
     testFile = convertPath('/aaa/main.dart');
     testCode = 'main() { new Foo(); }';
-    _addOverlay(testFile, testCode);
+    await _addOverlay(testFile, testCode);
 
     await waitForTasksFinished();
     doAllDeclarationsTrackerWork();
@@ -192,11 +196,11 @@
         isFalse);
   }
 
-  void _addOverlay(String name, String contents) {
+  Future<void> _addOverlay(String name, String contents) async {
     var request =
         AnalysisUpdateContentParams({name: AddContentOverlay(contents)})
             .toRequest('0');
-    handleSuccessfulRequest(request, handler: analysisHandler);
+    await waitResponse(request);
   }
 
   Future<List<AnalysisErrorFixes>> _getFixes(int offset) async {
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/format_test.dart b/pkg/analysis_server/test/edit/format_test.dart
index d62a67e..742ae2a 100644
--- a/pkg/analysis_server/test/edit/format_test.dart
+++ b/pkg/analysis_server/test/edit/format_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
-import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -26,44 +25,42 @@
     handler = EditDomainHandler(server);
   }
 
-  Future test_format_longLine() {
+  Future<void> test_format_longLine() async {
     var content = '''
 fun(firstParam, secondParam, thirdParam, fourthParam) {
   if (firstParam.noNull && secondParam.noNull && thirdParam.noNull && fourthParam.noNull) {}
 }
 ''';
     addTestFile(content);
-    return waitForTasksFinished().then((_) {
-      var formatResult = _formatAt(0, 3, lineLength: 100);
+    await waitForTasksFinished();
+    var formatResult = await _formatAt(0, 3, lineLength: 100);
 
-      expect(formatResult.edits, isNotNull);
-      expect(formatResult.edits, hasLength(0));
+    expect(formatResult.edits, isNotNull);
+    expect(formatResult.edits, hasLength(0));
 
-      expect(formatResult.selectionOffset, equals(0));
-      expect(formatResult.selectionLength, equals(3));
-    });
+    expect(formatResult.selectionOffset, equals(0));
+    expect(formatResult.selectionLength, equals(3));
   }
 
-  Future test_format_noOp() {
+  Future<void> test_format_noOp() async {
     // Already formatted source
     addTestFile('''
 main() {
   int x = 3;
 }
 ''');
-    return waitForTasksFinished().then((_) {
-      var formatResult = _formatAt(0, 3);
-      expect(formatResult.edits, isNotNull);
-      expect(formatResult.edits, hasLength(0));
-    });
+    await waitForTasksFinished();
+    var formatResult = await _formatAt(0, 3);
+    expect(formatResult.edits, isNotNull);
+    expect(formatResult.edits, hasLength(0));
   }
 
-  Future test_format_noSelection() async {
+  Future<void> test_format_noSelection() async {
     addTestFile('''
 main() { int x = 3; }
 ''');
     await waitForTasksFinished();
-    var formatResult = _formatAt(0, 0);
+    var formatResult = await _formatAt(0, 0);
 
     expect(formatResult.edits, isNotNull);
     expect(formatResult.edits, hasLength(1));
@@ -78,44 +75,42 @@
     expect(formatResult.selectionLength, equals(0));
   }
 
-  Future test_format_simple() {
+  Future<void> test_format_simple() async {
     addTestFile('''
 main() { int x = 3; }
 ''');
-    return waitForTasksFinished().then((_) {
-      var formatResult = _formatAt(0, 3);
+    await waitForTasksFinished();
+    var formatResult = await _formatAt(0, 3);
 
-      expect(formatResult.edits, isNotNull);
-      expect(formatResult.edits, hasLength(1));
+    expect(formatResult.edits, isNotNull);
+    expect(formatResult.edits, hasLength(1));
 
-      var edit = formatResult.edits[0];
-      expect(edit.replacement, equals('''
+    var edit = formatResult.edits[0];
+    expect(edit.replacement, equals('''
 main() {
   int x = 3;
 }
 '''));
-      expect(formatResult.selectionOffset, equals(0));
-      expect(formatResult.selectionLength, equals(3));
-    });
+    expect(formatResult.selectionOffset, equals(0));
+    expect(formatResult.selectionLength, equals(3));
   }
 
-  Future test_format_withErrors() {
+  Future<void> test_format_withErrors() async {
     addTestFile('''
 main() { int x =
 ''');
-    return waitForTasksFinished().then((_) {
-      var request = EditFormatParams(testFile, 0, 3).toRequest('0');
-      var response = handler.handleRequest(request, NotCancelableToken());
-      expect(response, isResponseFailure('0'));
-    });
+    await waitForTasksFinished();
+    var request = EditFormatParams(testFile, 0, 3).toRequest('0');
+    var response = await waitResponse(request);
+    expect(response, isResponseFailure('0'));
   }
 
-  EditFormatResult _formatAt(int selectionOffset, int selectionLength,
-      {int? lineLength}) {
+  Future<EditFormatResult> _formatAt(int selectionOffset, int selectionLength,
+      {int? lineLength}) async {
     var request = EditFormatParams(testFile, selectionOffset, selectionLength,
             lineLength: lineLength)
         .toRequest('0');
-    var response = handleSuccessfulRequest(request);
+    var response = await waitResponse(request);
     return EditFormatResult.fromResponse(response);
   }
 }
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 74507b0..e391b6c 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/domain_server.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -269,7 +270,7 @@
 
   Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
-    newFile(join(testFolder, 'other.dart'), content: r'''
+    newFile2(join(testFolder, 'other.dart'), r'''
 foo(int myName) {}
 ''');
     addTestFile('''
@@ -468,7 +469,7 @@
 
   Future<void> test_resetOnAnalysisSetChanged_watch_otherFile() async {
     var otherFile = join(testFolder, 'other.dart');
-    newFile(otherFile, content: '// other 1');
+    newFile2(otherFile, '// other 1');
     addTestFile('''
 void f() {
   foo(1 + 2);
@@ -488,7 +489,7 @@
     // The refactoring is reset, even though it's a different file. It is up to
     // analyzer to track dependencies and provide resolved units fast when
     // possible.
-    newFile(otherFile, content: '// other 2');
+    newFile2(otherFile, '// other 2');
     await pumpEventQueue();
     expect(test_resetCount, initialResetCount + 1);
   }
@@ -841,11 +842,13 @@
   late List<RefactoringKind> kinds;
 
   void addFlutterPackage() {
-    var libFolder = MockPackages.instance.addFlutter(resourceProvider);
-    // Create .packages in the project.
-    newFile(join(projectPath, '.packages'), content: '''
-flutter:${libFolder.toUri()}
-''');
+    var flutterLib = MockPackages.instance.addFlutter(resourceProvider);
+    newPackageConfigJsonFile(
+      projectPath,
+      (PackageConfigFileBuilder()
+            ..add(name: 'flutter', rootPath: flutterLib.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
   }
 
   /// Tests that there is refactoring of the given [kind] is available at the
@@ -1088,7 +1091,7 @@
   Future<void> test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
     var otherFile = join(testFolder, 'other.dart');
-    newFile(otherFile, content: r'''
+    newFile2(otherFile, r'''
 foo(int p) {}
 ''');
     addTestFile('''
@@ -1156,7 +1159,7 @@
   }
 
   Future<void> test_resetOnAnalysisSetChanged() async {
-    newFile(join(testFolder, 'other.dart'), content: '// other 1');
+    newFile2(join(testFolder, 'other.dart'), '// other 1');
     addTestFile('''
 void f() {
   int res = 1 + 2;
@@ -1318,7 +1321,7 @@
   late MoveFileOptions options;
 
   Future<void> test_file_OK() {
-    newFile('/project/bin/lib.dart');
+    newFile2('/project/bin/lib.dart', '');
     addTestFile('''
 import 'dart:math';
 import 'lib.dart';
@@ -1333,7 +1336,7 @@
   }
 
   Future<void> test_folder_cancel() {
-    newFile('/project/bin/original_folder/file.dart');
+    newFile2('/project/bin/original_folder/file.dart', '');
     addTestFile('''
 import 'dart:math';
 import 'original_folder/file.dart';
@@ -1346,7 +1349,7 @@
   }
 
   Future<void> test_folder_OK() {
-    newFile('/project/bin/original_folder/file.dart');
+    newFile2('/project/bin/original_folder/file.dart', '');
     addTestFile('''
 import 'dart:math';
 import 'original_folder/file.dart';
@@ -2129,7 +2132,7 @@
   }
 
   Future<void> test_library_partOfDirective() {
-    newFile(join(testFolder, 'my_lib.dart'), content: '''
+    newFile2(join(testFolder, 'my_lib.dart'), '''
 library aaa.bbb.ccc;
 part 'test.dart';
 ''');
diff --git a/pkg/analysis_server/test/edit/sort_members_test.dart b/pkg/analysis_server/test/edit/sort_members_test.dart
index 4c173d9..05a3cc1 100644
--- a/pkg/analysis_server/test/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/edit/sort_members_test.dart
@@ -195,7 +195,7 @@
   }
 
   Future<void> test_OK_genericFunctionType() async {
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newAnalysisOptionsYamlFile2(projectPath, '''
 analyzer:
   strong-mode: true
 ''');
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/analysis/hint_sdk_version_async_exported_from_core_test.dart b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
index 38428ff..f07d1ac 100644
--- a/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/hint_sdk_version_async_exported_from_core_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -17,7 +18,7 @@
 class SdkVersionAsyncExportedFromCoreIntegrationTest
     extends AbstractAnalysisServerIntegrationTest {
   Future<void> test_update_pubspec() async {
-    var pubspecPath = sourcePath('pubspec.yaml');
+    var pubspecPath = sourcePath(file_paths.pubspecYaml);
     writeFile(pubspecPath, r'''
 name: test
 environment:
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/linter/lint_names_test.dart b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
index 58031e7..1b8e5d0 100644
--- a/pkg/analysis_server/test/integration/linter/lint_names_test.dart
+++ b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
@@ -16,7 +16,7 @@
 void main() {
   /// Ensure server lint name representations correspond w/ actual lint rules.
   /// See, e.g., https://dart-review.googlesource.com/c/sdk/+/95743.
-  group('lint_names', () {
+  test('lint_names', () async {
     var pkgRootPath = path.normalize(packageRoot);
     var fixFilePath = path.join(pkgRootPath, 'analysis_server', 'lib', 'src',
         'services', 'linter', 'lint_names.dart');
@@ -38,9 +38,7 @@
     var collector = _FixCollector();
     lintNamesClass.accept(collector);
     for (var name in collector.lintNames) {
-      test(name, () {
-        expect(registeredLintNames, contains(name));
-      });
+      expect(registeredLintNames, contains(name));
     }
   });
 }
diff --git a/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart b/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
index 4889961..f7b847d 100644
--- a/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/analyzer_status_test.dart
@@ -17,7 +17,7 @@
 class AnalyzerStatusTest extends AbstractLspAnalysisServerIntegrationTest {
   Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile(mainFilePath, initialContents);
 
     final initialAnalysis = waitForAnalysisComplete();
 
@@ -39,7 +39,7 @@
 
   Future<void> test_afterInitialize() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile(mainFilePath, initialContents);
 
     // To avoid races, set up listeners for the notifications before we initialise
     // and track which event came first to ensure they arrived in the expected
diff --git a/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart b/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
index e9ed76a..ca65cbd 100644
--- a/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/diagnostic_test.dart
@@ -23,7 +23,7 @@
   print(x);
 }
 ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile(mainFilePath, withoutMarkers(content));
 
     final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await initialize();
@@ -45,7 +45,7 @@
   }
 
   Future<void> test_initialAnalysis() async {
-    newFile(mainFilePath, content: 'String a = 1;');
+    newFile(mainFilePath, 'String a = 1;');
 
     final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await initialize();
@@ -60,8 +60,8 @@
   }
 
   Future<void> test_lints() async {
-    newFile(mainFilePath, content: '''main() async => await 1;''');
-    newFile(analysisOptionsPath, content: '''
+    newFile(mainFilePath, '''main() async => await 1;''');
+    newFile(analysisOptionsPath, '''
 linter:
   rules:
     - await_only_futures
diff --git a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
index 3022431..cbf06cd 100644
--- a/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/lsp_server/integration_tests.dart
@@ -43,8 +43,8 @@
     }
   }
 
-  void newFile(String path, {String? content}) =>
-      File(path).writeAsStringSync(content ?? '');
+  void newFile(String path, String content) =>
+      File(path).writeAsStringSync(content);
 
   void newFolder(String path) => Directory(path).createSync(recursive: true);
 
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/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 3ef73c2..46858e0 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -521,11 +521,11 @@
       var trimmedLine = line.trim();
 
       // Guard against lines like:
-      //   {"event":"server.connected","params":{...}}Observatory listening on ...
-      var observatoryMessage = 'Observatory listening on ';
-      if (trimmedLine.contains(observatoryMessage)) {
+      //   {"event":"server.connected","params":{...}}The Dart VM service is listening on ...
+      var dartVMServiceMessage = 'The Dart VM service is listening on ';
+      if (trimmedLine.contains(dartVMServiceMessage)) {
         trimmedLine = trimmedLine
-            .substring(0, trimmedLine.indexOf(observatoryMessage))
+            .substring(0, trimmedLine.indexOf(dartVMServiceMessage))
             .trim();
       }
       if (trimmedLine.isEmpty) {
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index ddf2b9b..c1c7fcc 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -288,6 +288,8 @@
 ///   "hasNamedParameters": optional bool
 ///   "parameterName": optional String
 ///   "parameterType": optional String
+///   "libraryUri": optional String
+///   "isNotImported": optional bool
 /// }
 final Matcher isCompletionSuggestion =
     LazyMatcher(() => MatchesJsonObject('CompletionSuggestion', {
@@ -2314,6 +2316,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/analyzer_status_test.dart b/pkg/analysis_server/test/lsp/analyzer_status_test.dart
index a137a95..151158d 100644
--- a/pkg/analysis_server/test/lsp/analyzer_status_test.dart
+++ b/pkg/analysis_server/test/lsp/analyzer_status_test.dart
@@ -39,7 +39,7 @@
 
   Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile2(mainFilePath, initialContents);
 
     final initialAnalysis = waitForAnalysisComplete();
 
@@ -61,7 +61,7 @@
 
   Future<void> test_afterInitialize() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile2(mainFilePath, initialContents);
 
     // To avoid races, set up listeners for the notifications before we initialise
     // and track which event came first to ensure they arrived in the expected
diff --git a/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart b/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
index 98ad357..cddb554 100644
--- a/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
+++ b/pkg/analysis_server/test/lsp/change_workspace_folders_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -32,9 +33,9 @@
     workspaceFolder2Uri = Uri.file(workspaceFolder2Path);
     workspaceFolder3Uri = Uri.file(workspaceFolder3Path);
 
-    newFile(join(workspaceFolder1Path, 'pubspec.yaml'));
-    newFile(join(workspaceFolder2Path, 'pubspec.yaml'));
-    newFile(join(workspaceFolder3Path, 'pubspec.yaml'));
+    newPubspecYamlFile(workspaceFolder1Path, '');
+    newPubspecYamlFile(workspaceFolder2Path, '');
+    newPubspecYamlFile(workspaceFolder3Path, '');
   }
 
   Future<void> test_changeWorkspaceFolders_add() async {
@@ -73,7 +74,7 @@
         join(workspaceFolder1Path, 'nested', 'deeply', 'in', 'folders');
     final nestedFilePath = join(nestedFolderPath, 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     await initialize(allowEmptyRootUri: true);
     await openFile(nestedFileUri, '');
@@ -110,7 +111,7 @@
         join(workspaceFolder1Path, 'nested', 'deeply', 'in', 'folders');
     final nestedFilePath = join(nestedFolderPath, 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     await initialize(allowEmptyRootUri: true);
     await openFile(nestedFileUri, '');
@@ -148,7 +149,7 @@
         join(workspaceFolder1Path, 'nested', 'deeply', 'in', 'folders');
     final nestedFilePath = join(nestedFolderPath, 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     await initialize(workspaceFolders: [workspaceFolder1Uri]);
 
@@ -183,7 +184,7 @@
         join(workspaceFolder1Path, 'nested', 'deeply', 'in', 'folders');
     final nestedFilePath = join(nestedFolderPath, 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     await initialize(workspaceFolders: [workspaceFolder1Uri]);
 
@@ -219,9 +220,15 @@
         join(workspaceFolder1Path, 'nested', 'deeply', 'in', 'folders');
     final nestedFilePath = join(nestedFolderPath, 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
-    deleteFile(join(
-        workspaceFolder1Path, 'pubspec.yaml')); // Ensure no pubspecs in tree.
+    newFile2(nestedFilePath, '');
+
+    // Ensure no pubspecs in tree.
+    deleteFile(
+      join(
+        workspaceFolder1Path,
+        file_paths.pubspecYaml,
+      ),
+    );
 
     await initialize(allowEmptyRootUri: true);
     await openFile(nestedFileUri, '');
@@ -249,10 +256,10 @@
     // analysis driver will be used (see [AbstractAnalysisServer.getAnalysisDriver])
     // and no new root will be created.
     final workspace1FilePath = join(workspaceFolder1Path, 'test.dart');
-    newFile(workspace1FilePath);
+    newFile2(workspace1FilePath, '');
     final workspace2FilePath = join(workspaceFolder2Path, 'test.dart');
     final workspace2FileUri = Uri.file(workspace2FilePath);
-    newFile(workspace2FilePath);
+    newFile2(workspace2FilePath, '');
 
     await initialize(workspaceFolders: [workspaceFolder1Uri]);
 
@@ -302,7 +309,7 @@
 
     // Generate an error in the test project.
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
-    newFile(mainFilePath, content: 'String a = 1;');
+    newFile2(mainFilePath, 'String a = 1;');
     final initialDiagnostics = await firstDiagnosticsUpdate;
     expect(initialDiagnostics, hasLength(1));
 
diff --git a/pkg/analysis_server/test/lsp/code_actions_assists_test.dart b/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
index cf67637f..06d962f 100644
--- a/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_assists_test.dart
@@ -45,7 +45,7 @@
 
     Future f;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -86,7 +86,7 @@
 
     Future f;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -122,7 +122,7 @@
     // indicating this is not a valid (Dart) int.
     // https://github.com/dart-lang/sdk/issues/42786
 
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize();
 
     final request = makeRequest(
@@ -157,7 +157,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -191,7 +191,7 @@
           request is plugin.EditGetAssistsParams ? pluginResult : null,
     );
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -228,7 +228,7 @@
           request is plugin.EditGetAssistsParams ? pluginResult : null,
     );
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -249,7 +249,70 @@
     );
   }
 
-  Future<void> test_snippetTextEdits_supported() async {
+  Future<void> test_snippetTextEdits_multiEditGroup() async {
+    // As test_snippetTextEdits_singleEditGroup, but uses an assist that
+    // produces multiple linked edit groups.
+
+    const content = '''
+    import 'package:flutter/widgets.dart';
+    build() {
+      return Container(
+        child: Ro^w(
+          children: [
+            Text('111'),
+            Text('222'),
+            Container(),
+          ],
+        ),
+      );
+    }
+    ''';
+
+    const expectedContent = r'''
+    import 'package:flutter/widgets.dart';
+    build() {
+      return Container(
+        child: ${1:widget}(
+          ${2:child}: Row(
+            children: [
+              Text('111'),
+              Text('222'),
+              Container(),
+            ],
+          ),
+        ),
+      );
+    }
+    ''';
+
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize(
+      textDocumentCapabilities: withCodeActionKinds(
+          emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+      experimentalCapabilities: {
+        'snippetTextEdit': true,
+      },
+    );
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        position: positionFromMarker(content));
+    final assist = findEditAction(
+        codeActions,
+        CodeActionKind('refactor.flutter.wrap.generic'),
+        'Wrap with widget...')!;
+
+    // Ensure applying the changes will give us the expected content.
+    final edit = assist.edit!;
+    final contents = {
+      mainFilePath: withoutMarkers(content),
+    };
+    applyDocumentChanges(contents, edit.documentChanges!);
+    expect(contents[mainFilePath], equals(expectedContent));
+  }
+
+  Future<void> test_snippetTextEdits_singleEditGroup() async {
     // This tests experimental support for including Snippets in TextEdits.
     // https://github.com/rust-analyzer/rust-analyzer/blob/b35559a2460e7f0b2b79a7029db0c5d4e0acdb44/docs/dev/lsp-extensions.md#snippet-textedit
     //
@@ -273,8 +336,8 @@
     ''';
 
     // For testing, the snippet will be inserted literally into the text, as
-    // this requires some magic on the client. The expected text should therefore
-    // contain the snippets in the standard format.
+    // this requires some magic on the client. The expected text should
+    // therefore contain the snippets in the standard format.
     const expectedContent = r'''
     import 'package:flutter/widgets.dart';
     build() {
@@ -294,7 +357,7 @@
     }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -358,7 +421,7 @@
     }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -400,7 +463,7 @@
     build() => Contai^ner(child: Container());
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -426,6 +489,63 @@
     );
   }
 
+  Future<void> test_surround_editGroupsAndSelection() async {
+    const content = '''
+void f() {
+  [[print(0);]]
+}
+''';
+
+    const expectedContent = r'''
+void f() {
+  if (${1:condition}) {
+    print(0);
+  }$0
+}
+''';
+
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize(
+      textDocumentCapabilities: withCodeActionKinds(
+          emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+      experimentalCapabilities: {
+        'snippetTextEdit': true,
+      },
+    );
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        range: rangeFromMarkers(content));
+    final assist = findEditAction(codeActions,
+        CodeActionKind('refactor.surround.if'), "Surround with 'if'")!;
+
+    // Ensure the edit came back, and using documentChanges.
+    final edit = assist.edit!;
+    expect(edit.documentChanges, isNotNull);
+    expect(edit.changes, isNull);
+
+    // Ensure applying the changes will give us the expected content.
+    final contents = {
+      mainFilePath: withoutMarkers(content),
+    };
+    applyDocumentChanges(contents, edit.documentChanges!);
+    expect(contents[mainFilePath], equals(expectedContent));
+
+    // Also ensure there was a single edit that was correctly marked
+    // as a SnippetTextEdit.
+    final textEdits = _extractTextDocumentEdits(edit.documentChanges!)
+        .expand((tde) => tde.edits)
+        .map((edit) => edit.map(
+              (e) => e,
+              (e) => throw 'Expected SnippetTextEdit, got AnnotatedTextEdit',
+              (e) => throw 'Expected SnippetTextEdit, got TextEdit',
+            ))
+        .toList();
+    expect(textEdits, hasLength(1));
+    expect(textEdits.first.insertTextFormat, equals(InsertTextFormat.Snippet));
+  }
+
   List<TextDocumentEdit> _extractTextDocumentEdits(
           Either2<
                   List<TextDocumentEdit>,
diff --git a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
index 9a541dc..c4664f7 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -35,7 +35,7 @@
 
     Future foo;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -77,7 +77,7 @@
 
     Future foo;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -111,7 +111,7 @@
     final expectedCreatedFile =
         path.join(path.dirname(mainFilePath), 'newfile.dart');
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -142,7 +142,7 @@
 
     Future foo;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final ofKind = (CodeActionKind kind) => getCodeActions(
@@ -182,7 +182,7 @@
 import 'dart:convert';
 
 Future foo;''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -217,7 +217,7 @@
 import 'dart:convert';
 
 Future foo;''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -244,7 +244,7 @@
     var a = [Test, Test, Te[[]]st];
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -264,7 +264,7 @@
     var a = [Test, Test, Te[[]]st];
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -281,7 +281,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -294,7 +294,7 @@
 
   Future<void> test_organizeImportsFix_namedOrganizeImports() async {
     registerLintRules();
-    newFile(analysisOptionsPath, content: '''
+    newFile2(analysisOptionsPath, '''
 linter:
   rules:
     - directives_ordering
@@ -316,7 +316,7 @@
 Completer a;
 ProcessInfo b;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -343,7 +343,7 @@
   Future<void> test_outsideRoot() async {
     final otherFilePath = convertPath('/home/otherProject/foo.dart');
     final otherFileUri = Uri.file(otherFilePath);
-    newFile(otherFilePath, content: 'bad code to create error');
+    newFile2(otherFilePath, 'bad code to create error');
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -387,7 +387,7 @@
           request is plugin.EditGetFixesParams ? pluginResult : null,
     );
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -437,7 +437,7 @@
           request is plugin.EditGetFixesParams ? pluginResult : null,
     );
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -457,6 +457,102 @@
       ]),
     );
   }
+
+  Future<void> test_snippets_createMethod_functionTypeNestedParameters() async {
+    const content = '''
+class A {
+  void a() => c^((cell) => cell.south);
+  void b() => c((cell) => cell.west);
+}
+''';
+
+    const expectedContent = r'''
+class A {
+  void a() => c((cell) => cell.south);
+  void b() => c((cell) => cell.west);
+
+  ${1:c}(${2:Function(dynamic cell)} ${3:param0}) {}
+}
+''';
+
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize(
+      textDocumentCapabilities: withCodeActionKinds(
+          emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+      experimentalCapabilities: {
+        'snippetTextEdit': true,
+      },
+    );
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        position: positionFromMarker(content));
+    final fixAction = findEditAction(codeActions,
+        CodeActionKind('quickfix.create.method'), "Create method 'c'")!;
+
+    // Ensure the edit came back, and using documentChanges.
+    final edit = fixAction.edit!;
+    expect(edit.documentChanges, isNotNull);
+    expect(edit.changes, isNull);
+
+    // Ensure applying the changes will give us the expected content.
+    final contents = {
+      mainFilePath: withoutMarkers(content),
+    };
+    applyDocumentChanges(contents, edit.documentChanges!);
+    expect(contents[mainFilePath], equals(expectedContent));
+  }
+
+  Future<void>
+      test_snippets_extractVariable_functionTypeNestedParameters() async {
+    const content = '''
+main() {
+  useFunction(te^st);
+}
+
+useFunction(int g(a, b)) {}
+''';
+
+    const expectedContent = r'''
+main() {
+  ${1:int Function(dynamic a, dynamic b)} ${2:test};
+  useFunction(test);
+}
+
+useFunction(int g(a, b)) {}
+''';
+
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize(
+      textDocumentCapabilities: withCodeActionKinds(
+          emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
+      workspaceCapabilities:
+          withDocumentChangesSupport(emptyWorkspaceClientCapabilities),
+      experimentalCapabilities: {
+        'snippetTextEdit': true,
+      },
+    );
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        position: positionFromMarker(content));
+    final fixAction = findEditAction(
+        codeActions,
+        CodeActionKind('quickfix.create.localVariable'),
+        "Create local variable 'test'")!;
+
+    // Ensure the edit came back, and using documentChanges.
+    final edit = fixAction.edit!;
+    expect(edit.documentChanges, isNotNull);
+    expect(edit.changes, isNull);
+
+    // Ensure applying the changes will give us the expected content.
+    final contents = {
+      mainFilePath: withoutMarkers(content),
+    };
+    applyDocumentChanges(contents, edit.documentChanges!);
+    expect(contents[mainFilePath], equals(expectedContent));
+  }
 }
 
 @reflectiveTest
@@ -473,7 +569,7 @@
 var b = bar();
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -495,7 +591,7 @@
 }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -524,7 +620,7 @@
   print(a);
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
@@ -556,7 +652,7 @@
     }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
           emptyTextDocumentClientCapabilities, [CodeActionKind.QuickFix]),
diff --git a/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart b/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
index e8921f7..10690ba 100644
--- a/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_refactor_test.dart
@@ -4,6 +4,7 @@
 
 import 'dart:async';
 
+import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/json_parsing.dart';
@@ -44,7 +45,7 @@
   var b = test();
 }
 ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -76,7 +77,7 @@
   var b = test;
 }
 ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -144,7 +145,7 @@
   print('Test!');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -173,7 +174,7 @@
   print('Test!');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -241,7 +242,7 @@
   [[print('Test!');]]
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
       textDocumentCapabilities: withCodeActionKinds(
         emptyTextDocumentClientCapabilities,
@@ -301,7 +302,7 @@
 Object Container(Object text) => null;
 Object Text(Object text) => null;
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -319,7 +320,7 @@
 ^
 main() {}
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString());
@@ -345,7 +346,7 @@
   print('Test!');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
         windowCapabilities:
             withWorkDoneProgressSupport(emptyWindowClientCapabilities));
@@ -381,7 +382,7 @@
   print('Test!');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     var didGetProgressNotifications = false;
@@ -417,7 +418,7 @@
   print('Test!');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
         windowCapabilities:
             withWorkDoneProgressSupport(emptyWindowClientCapabilities));
@@ -433,6 +434,82 @@
     await verifyCodeActionEdits(
         codeAction, withoutMarkers(content), expectedContent);
   }
+
+  Future<void> test_validLocation_failsInitialValidation() async {
+    const content = '''
+f() {
+  var a = 0;
+  doFoo([[() => print(a)]]);
+  print(a);
+}
+
+void doFoo(void Function() a) => a();
+
+    ''';
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize();
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        range: rangeFromMarkers(content));
+    final codeAction =
+        findCommand(codeActions, Commands.performRefactor, extractMethodTitle)!;
+
+    final command = codeAction.map(
+      (command) => command,
+      (codeAction) => codeAction.command!,
+    );
+
+    // Call the `refactor.validate` command with the same arguments.
+    // Clients that want validation behaviour will need to implement this
+    // themselves (via middleware).
+    final response = await executeCommand(
+      Command(
+          title: command.title,
+          command: Commands.validateRefactor,
+          arguments: command.arguments),
+      decoder: ValidateRefactorResult.fromJson,
+    );
+
+    expect(response.valid, isFalse);
+    expect(response.message, contains('Cannot extract closure as method'));
+  }
+
+  Future<void> test_validLocation_passesInitialValidation() async {
+    const content = '''
+f() {
+  doFoo([[() => print(1)]]);
+}
+
+void doFoo(void Function() a) => a();
+
+    ''';
+    newFile2(mainFilePath, withoutMarkers(content));
+    await initialize();
+
+    final codeActions = await getCodeActions(mainFileUri.toString(),
+        range: rangeFromMarkers(content));
+    final codeAction =
+        findCommand(codeActions, Commands.performRefactor, extractMethodTitle)!;
+
+    final command = codeAction.map(
+      (command) => command,
+      (codeAction) => codeAction.command!,
+    );
+
+    // Call the `Commands.validateRefactor` command with the same arguments.
+    // Clients that want validation behaviour will need to implement this
+    // themselves (via middleware).
+    final response = await executeCommand(
+      Command(
+          title: command.title,
+          command: Commands.validateRefactor,
+          arguments: command.arguments),
+      decoder: ValidateRefactorResult.fromJson,
+    );
+
+    expect(response.valid, isTrue);
+    expect(response.message, isNull);
+  }
 }
 
 @reflectiveTest
@@ -455,7 +532,7 @@
 
 void foo(int arg) {}
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -485,7 +562,7 @@
 
 void foo(int arg) {}
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -565,7 +642,7 @@
   }
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -583,7 +660,7 @@
 ^
 main() {}
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString());
@@ -614,7 +691,7 @@
   print(1);
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -658,7 +735,7 @@
   print('test');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
@@ -693,7 +770,7 @@
   print('test');
 }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString(),
diff --git a/pkg/analysis_server/test/lsp/code_actions_source_test.dart b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
index 75118f8..76fb7a9 100644
--- a/pkg/analysis_server/test/lsp/code_actions_source_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_source_test.dart
@@ -38,8 +38,8 @@
     ''';
 
     registerLintRules();
-    newFile(analysisOptionsPath, content: analysisOptionsContent);
-    newFile(mainFilePath, content: content);
+    newFile2(analysisOptionsPath, analysisOptionsContent);
+    newFile2(mainFilePath, content);
 
     await initialize(
         workspaceCapabilities:
@@ -70,7 +70,7 @@
 Completer foo;
 int minified(int x, int y) => min(x, y);
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities: withApplyEditSupport(
             withDocumentChangesSupport(emptyWorkspaceClientCapabilities)));
@@ -98,7 +98,7 @@
 Completer foo;
 int minified(int x, int y) => min(x, y);
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -110,7 +110,7 @@
   }
 
   Future<void> test_availableAsCodeActionLiteral() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.Source]),
@@ -126,7 +126,7 @@
   }
 
   Future<void> test_availableAsCommand() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -141,7 +141,7 @@
 
   Future<void> test_failsSilentlyIfFileHasErrors() async {
     final content = 'invalid dart code';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -161,7 +161,7 @@
   }
 
   Future<void> test_filtersCorrectly() async {
-    newFile(mainFilePath, content: '');
+    newFile2(mainFilePath, '');
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -187,7 +187,7 @@
 Completer foo;
 int minified(int x, int y) => min(x, y);
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -208,7 +208,7 @@
   }
 
   Future<void> test_unavailableWhenNotRequested() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -221,7 +221,7 @@
   }
 
   Future<void> test_unavailableWithoutApplyEditSupport() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString());
@@ -241,7 +241,7 @@
     String a;
     String b;
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities: withApplyEditSupport(
             withDocumentChangesSupport(emptyWorkspaceClientCapabilities)));
@@ -262,7 +262,7 @@
     String a;
     String b;
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -274,7 +274,7 @@
   }
 
   Future<void> test_availableAsCodeActionLiteral() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.Source]),
@@ -290,7 +290,7 @@
   }
 
   Future<void> test_availableAsCommand() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -308,7 +308,7 @@
     String b;
     String a;
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -341,7 +341,7 @@
 
   Future<void> test_failsIfFileHasErrors() async {
     final content = 'invalid dart code';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         workspaceCapabilities:
             withApplyEditSupport(emptyWorkspaceClientCapabilities));
@@ -361,7 +361,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.Source]),
@@ -374,7 +374,7 @@
   }
 
   Future<void> test_unavailableWhenNotRequested() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize(
         textDocumentCapabilities: withCodeActionKinds(
             emptyTextDocumentClientCapabilities, [CodeActionKind.Refactor]),
@@ -387,7 +387,7 @@
   }
 
   Future<void> test_unavailableWithoutApplyEditSupport() async {
-    newFile(mainFilePath);
+    newFile2(mainFilePath, '');
     await initialize();
 
     final codeActions = await getCodeActions(mainFileUri.toString());
diff --git a/pkg/analysis_server/test/lsp/completion_dart_test.dart b/pkg/analysis_server/test/lsp/completion_dart_test.dart
index 1b9520b..2387349 100644
--- a/pkg/analysis_server/test/lsp/completion_dart_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_dart_test.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analysis_server/src/services/snippets/dart/dart_snippet_producers.dart';
 import 'package:analysis_server/src/services/snippets/dart/flutter_snippet_producers.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -32,7 +33,7 @@
     with CompletionTestMixin {
   Future<void> checkCompleteFunctionCallInsertText(
       String content, String completion,
-      {required String insertText, InsertTextFormat? insertTextFormat}) async {
+      {required String? insertText, InsertTextFormat? insertTextFormat}) async {
     await provideConfig(
       () => initialize(
         textDocumentCapabilities: withCompletionItemSnippetSupport(
@@ -54,7 +55,9 @@
     expect(item.insertText, equals(insertText));
 
     final textEdit = toTextEdit(item.textEdit!);
-    expect(textEdit.newText, equals(item.insertText));
+    // newText in the edit will always be set, so if insertText is null we need
+    // fall back to item.label for the expected value.
+    expect(textEdit.newText, equals(item.insertText ?? item.label));
     expect(textEdit.range, equals(rangeFromMarkers(content)));
   }
 
@@ -379,7 +382,27 @@
         insertText: r'foo(${0:a})',
       );
 
-  Future<void> test_completeFunctionCalls_noRequiredParameters() async {
+  Future<void> test_completeFunctionCalls_noParameters() async {
+    final content = '''
+    void myFunction() {}
+
+    void f() {
+      [[myFu^]]
+    }
+    ''';
+
+    await checkCompleteFunctionCallInsertText(
+      content,
+      'myFunction()',
+      // With no params, we don't put a tab stop inside the parens. This results
+      // in the insertText being the same as the label, which means it will be
+      // set to null so that it falls back without needing to repeat the value.
+      insertText: null,
+      insertTextFormat: InsertTextFormat.Snippet,
+    );
+  }
+
+  Future<void> test_completeFunctionCalls_optionalParameters() async {
     final content = '''
     void myFunction({int a}) {}
 
@@ -388,24 +411,13 @@
     }
     ''';
 
-    await provideConfig(
-      () => initialize(
-        textDocumentCapabilities: withCompletionItemSnippetSupport(
-            emptyTextDocumentClientCapabilities),
-        workspaceCapabilities:
-            withConfigurationSupport(emptyWorkspaceClientCapabilities),
-      ),
-      {'completeFunctionCalls': true},
+    await checkCompleteFunctionCallInsertText(
+      content,
+      'myFunction(…)',
+      // With optional params, there should still be parens/tab stop inside.
+      insertText: r'myFunction($0)',
+      insertTextFormat: InsertTextFormat.Snippet,
     );
-    await openFile(mainFileUri, withoutMarkers(content));
-    final res = await getCompletion(mainFileUri, positionFromMarker(content));
-    final item = res.singleWhere((c) => c.label == 'myFunction(…)');
-    // With no required params, there should still be parens/tab stop inside.
-    expect(item.insertTextFormat, equals(InsertTextFormat.Snippet));
-    expect(item.insertText, equals(r'myFunction($0)'));
-    final textEdit = toTextEdit(item.textEdit!);
-    expect(textEdit.newText, equals(item.insertText));
-    expect(textEdit.range, equals(rangeFromMarkers(content)));
   }
 
   Future<void> test_completeFunctionCalls_show() async {
@@ -458,7 +470,7 @@
       );
 
   Future<void> test_completionKinds_default() async {
-    newFile(join(projectFolderPath, 'file.dart'));
+    newFile2(join(projectFolderPath, 'file.dart'), '');
     newFolder(join(projectFolderPath, 'folder'));
 
     final content = "import '^';";
@@ -961,6 +973,80 @@
     expect(item.detail, isNot(contains('deprecated')));
   }
 
+  Future<void> test_isIncomplete_falseIfAllIncluded() async {
+    final content = '''
+import 'a.dart';
+void f() {
+  A a = A();
+  a.^
+}
+    ''';
+
+    // Create a class with fields aaa1 to aaa500 in the other file.
+    newFile2(
+      join(projectFolderPath, 'lib', 'a.dart'),
+      [
+        'class A {',
+        for (var i = 1; i <= 500; i++) 'String get aaa$i => "";',
+        '}',
+      ].join('\n'),
+    );
+
+    final initialAnalysis = waitForAnalysisComplete();
+    await initialize(
+        workspaceCapabilities:
+            withApplyEditSupport(emptyWorkspaceClientCapabilities));
+    await openFile(mainFileUri, withoutMarkers(content));
+    await initialAnalysis;
+    final res =
+        await getCompletionList(mainFileUri, positionFromMarker(content));
+
+    // Expect everything (hashCode etc. will take it over 500).
+    expect(res.items, hasLength(greaterThanOrEqualTo(500)));
+    expect(res.isIncomplete, isFalse);
+  }
+
+  Future<void> test_isIncomplete_trueIfNotAllIncluded() async {
+    final content = '''
+import 'a.dart';
+void f() {
+  A a = A();
+  a.^
+}
+    ''';
+
+    // Create a class with fields aaa1 to aaa500 in the other file.
+    newFile2(
+      join(projectFolderPath, 'lib', 'a.dart'),
+      [
+        'class A {',
+        for (var i = 1; i <= 500; i++) '  String get aaa$i => "";',
+        '  String get aaa => "";',
+        '}',
+      ].join('\n'),
+    );
+
+    final initialAnalysis = waitForAnalysisComplete();
+    await provideConfig(
+      () => initialize(
+          workspaceCapabilities: withApplyEditSupport(
+              withConfigurationSupport(emptyWorkspaceClientCapabilities))),
+      {'maxCompletionItems': 200},
+    );
+    await openFile(mainFileUri, withoutMarkers(content));
+    await initialAnalysis;
+    final res =
+        await getCompletionList(mainFileUri, positionFromMarker(content));
+
+    // Should be capped at 200 and marked as incomplete.
+    expect(res.items, hasLength(200));
+    expect(res.isIncomplete, isTrue);
+
+    // Also ensure 'aaa' is included, since relevance sorting should have
+    // put it at the top.
+    expect(res.items.map((item) => item.label).contains('aaa'), isTrue);
+  }
+
   Future<void> test_namedArg_insertReplaceRanges() async {
     /// Helper to check multiple completions in the same template file.
     Future<void> check(
@@ -1160,7 +1246,7 @@
 
   Future<void> test_nonAnalyzedFile() async {
     final readmeFilePath = convertPath(join(projectFolderPath, 'README.md'));
-    newFile(readmeFilePath, content: '');
+    newFile2(readmeFilePath, '');
     await initialize();
 
     final res = await getCompletion(Uri.file(readmeFilePath), startOfDocPos);
@@ -1273,9 +1359,9 @@
   }
 
   Future<void> test_unimportedSymbols() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: '''
+      '''
       /// This class is in another file.
       class InOtherFile {}
       ''',
@@ -1349,21 +1435,21 @@
       test_unimportedSymbols_doesNotDuplicate_importedViaMultipleLibraries() async {
     // An item that's already imported through multiple libraries that
     // export it should not result in multiple entries.
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/source_file.dart'),
-      content: '''
+      '''
       class MyExportedClass {}
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/reexport1.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/reexport2.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
@@ -1394,21 +1480,21 @@
       test_unimportedSymbols_doesNotDuplicate_importedViaSingleLibrary() async {
     // An item that's already imported through a library that exports it
     // should not result in multiple entries.
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/source_file.dart'),
-      content: '''
+      '''
       class MyExportedClass {}
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/reexport1.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib/reexport2.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
@@ -1436,17 +1522,17 @@
 
   Future<void> test_unimportedSymbols_doesNotFilterSymbolsWithSameName() async {
     // Classes here are not re-exports, so should not be filtered out.
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file1.dart'),
-      content: 'class MyDuplicatedClass {}',
+      'class MyDuplicatedClass {}',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file2.dart'),
-      content: 'class MyDuplicatedClass {}',
+      'class MyDuplicatedClass {}',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file3.dart'),
-      content: 'class MyDuplicatedClass {}',
+      'class MyDuplicatedClass {}',
     );
 
     final content = '''
@@ -1477,9 +1563,9 @@
   }
 
   Future<void> test_unimportedSymbols_enumValues() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file.dart'),
-      content: '''
+      '''
       enum MyExportedEnum { One, Two }
       ''',
     );
@@ -1541,21 +1627,21 @@
   }
 
   Future<void> test_unimportedSymbols_enumValuesAlreadyImported() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'source_file.dart'),
-      content: '''
+      '''
       enum MyExportedEnum { One, Two }
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'reexport1.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'reexport2.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
@@ -1585,21 +1671,21 @@
   }
 
   Future<void> test_unimportedSymbols_filtersOutAlreadyImportedSymbols() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'source_file.dart'),
-      content: '''
+      '''
       class MyExportedClass {}
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'reexport1.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'reexport2.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
@@ -1628,9 +1714,9 @@
   }
 
   Future<void> test_unimportedSymbols_importsPackageUri() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'lib', 'my_class.dart'),
-      content: 'class MyClass {}',
+      'class MyClass {}',
     );
 
     final content = '''
@@ -1659,21 +1745,21 @@
 
   Future<void>
       test_unimportedSymbols_includesReexportedSymbolsForEachFile() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file.dart'),
-      content: '''
+      '''
       class MyExportedClass {}
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'reexport1.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
-    newFile(
+    newFile2(
       join(projectFolderPath, 'reexport2.dart'),
-      content: '''
+      '''
       export 'source_file.dart';
       ''',
     );
@@ -1705,9 +1791,9 @@
   }
 
   Future<void> test_unimportedSymbols_insertReplaceRanges() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: '''
+      '''
       /// This class is in another file.
       class InOtherFile {}
       ''',
@@ -1798,16 +1884,16 @@
 
   Future<void> test_unimportedSymbols_insertsIntoPartFiles() async {
     // File we'll be adding an import for.
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: 'class InOtherFile {}',
+      'class InOtherFile {}',
     );
 
     // File that will have the import added.
     final parentContent = '''part 'main.dart';''';
-    final parentFilePath = newFile(
+    final parentFilePath = newFile2(
       join(projectFolderPath, 'lib', 'parent.dart'),
-      content: parentContent,
+      parentContent,
     ).path;
 
     // File that we're invoking completion in.
@@ -1888,9 +1974,9 @@
   }
 
   Future<void> test_unimportedSymbols_members() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'source_file.dart'),
-      content: '''
+      '''
       class MyExportedClass {
         DateTime myInstanceDateTime;
         static DateTime myStaticDateTimeField;
@@ -1978,7 +2064,7 @@
     await initialAnalysis;
 
     // Start with a blank file.
-    newFile(otherFilePath, content: '');
+    newFile2(otherFilePath, '');
     await openFile(otherFileUri, '');
     await pumpEventQueue(times: 5000);
 
@@ -1996,9 +2082,9 @@
   }
 
   Future<void> test_unimportedSymbols_namedConstructors() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: '''
+      '''
       /// This class is in another file.
       class InOtherFile {
         InOtherFile.fromJson() {}
@@ -2064,7 +2150,7 @@
         join(projectFolderPath, 'lib', 'nested2', 'imported.dart');
 
     // Create a file that will be auto-imported from completion.
-    newFile(importedFilePath, content: 'class MyClass {}');
+    newFile2(importedFilePath, 'class MyClass {}');
 
     final content = '''
 void f() {
@@ -2102,7 +2188,7 @@
         join(projectFolderPath, 'lib', 'nested2', 'imported.dart');
 
     // Create a file that will be auto-imported from completion.
-    newFile(importedFilePath, content: 'class MyClass {}');
+    newFile2(importedFilePath, 'class MyClass {}');
 
     final content = '''
 void f() {
@@ -2129,9 +2215,9 @@
   }
 
   Future<void> test_unimportedSymbols_unavailableIfDisabled() async {
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: 'class InOtherFile {}',
+      'class InOtherFile {}',
     );
 
     final content = '''
@@ -2162,9 +2248,9 @@
   Future<void> test_unimportedSymbols_unavailableWithoutApplyEdit() async {
     // If client doesn't advertise support for workspace/applyEdit, we won't
     // include suggestion sets.
-    newFile(
+    newFile2(
       join(projectFolderPath, 'other_file.dart'),
-      content: 'class InOtherFile {}',
+      'class InOtherFile {}',
     );
 
     final content = '''
@@ -2197,7 +2283,7 @@
     }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
     final res = await getCompletion(mainFileUri, positionFromMarker(content));
     expect(res.any((c) => c.label == 'abcdefghij'), isTrue);
@@ -2263,7 +2349,7 @@
   void _enableLints(List<String> lintNames) {
     registerLintRules();
     final lintsYaml = lintNames.map((name) => '    - $name\n').join();
-    newFile(analysisOptionsPath, content: '''
+    newFile2(analysisOptionsPath, '''
 linter:
   rules:
 $lintsYaml
@@ -2308,10 +2394,9 @@
 
   Future<void> test_completeFunctionCalls_requiredNamed_suggestionSet() async {
     final otherFile = join(projectFolderPath, 'lib', 'other.dart');
-    newFile(
+    newFile2(
       otherFile,
-      content:
-          "void myFunction(String a, int b, {required String c, String d = ''}) {}",
+      "void myFunction(String a, int b, {required String c, String d = ''}) {}",
     );
     final content = '''
     void f() {
@@ -2370,6 +2455,27 @@
 
 @reflectiveTest
 class DartSnippetCompletionTest extends SnippetCompletionTest {
+  Future<void> test_snippets_class() async {
+    final content = '''
+clas^
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartClassSnippetProducer.prefix,
+      label: DartClassSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+class ${1:ClassName} {
+  $0
+}
+''');
+  }
+
+  /// Checks that the `enableSnippets` setting can disable snippets even if the
+  /// client supports them.
   Future<void> test_snippets_disabled() async {
     final content = '^';
 
@@ -2382,13 +2488,33 @@
         workspaceCapabilities:
             withConfigurationSupport(emptyWorkspaceClientCapabilities),
       ),
-      {'enableSnippets': true},
+      {'enableSnippets': false},
     );
 
-    await expectNoSnippet(
+    await expectNoSnippets(content);
+  }
+
+  Future<void> test_snippets_doWhile() async {
+    final content = '''
+void f() {
+  do^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
       content,
-      FlutterStatelessWidgetSnippetProducer.prefix,
+      prefix: DartDoWhileLoopSnippetProducer.prefix,
+      label: DartDoWhileLoopSnippetProducer.label,
     );
+
+    expect(updated, r'''
+void f() {
+  do {
+    $0
+  } while (${1:condition});
+}
+''');
   }
 
   Future<void>
@@ -2401,13 +2527,134 @@
 class B {}
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     await expectNoSnippet(
       content,
       FlutterStatelessWidgetSnippetProducer.prefix,
     );
   }
 
+  Future<void> test_snippets_for() async {
+    final content = '''
+void f() {
+  for^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartForLoopSnippetProducer.prefix,
+      label: DartForLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  for (var i = 0; i < ${1:count}; i++) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_forIn() async {
+    final content = '''
+void f() {
+  forin^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartForInLoopSnippetProducer.prefix,
+      label: DartForInLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  for (var ${1:element} in ${2:collection}) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_if() async {
+    final content = '''
+void f() {
+  if^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartIfSnippetProducer.prefix,
+      label: DartIfSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  if (${1:condition}) {
+    $0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_ifElse() async {
+    final content = '''
+void f() {
+  if^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartIfElseSnippetProducer.prefix,
+      label: DartIfElseSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  if (${1:condition}) {
+    $0
+  } else {
+    
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_mainFunction() async {
+    final content = '''
+class A {}
+
+main^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartMainFunctionSnippetProducer.prefix,
+      label: DartMainFunctionSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+class A {}
+
+void main(List<String> args) {
+  $0
+}
+
+class B {}
+''');
+  }
+
   Future<void> test_snippets_notSupported() async {
     final content = '^';
 
@@ -2418,6 +2665,130 @@
     final res = await getCompletion(mainFileUri, positionFromMarker(content));
     expect(res.any((c) => c.kind == CompletionItemKind.Snippet), isFalse);
   }
+
+  Future<void> test_snippets_switch() async {
+    final content = '''
+void f() {
+  swi^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartSwitchSnippetProducer.prefix,
+      label: DartSwitchSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  switch (${1:expression}) {
+    case ${2:value}:
+      $0
+      break;
+    default:
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_testBlock() async {
+    mainFilePath = join(projectFolderPath, 'test', 'foo_test.dart');
+    mainFileUri = Uri.file(mainFilePath);
+    final content = '''
+void f() {
+  test^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartTestBlockSnippetProducer.prefix,
+      label: DartTestBlockSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  test('${1:test name}', () {
+    $0
+  });
+}
+''');
+  }
+
+  Future<void> test_snippets_testGroupBlock() async {
+    mainFilePath = join(projectFolderPath, 'test', 'foo_test.dart');
+    mainFileUri = Uri.file(mainFilePath);
+    final content = '''
+void f() {
+  group^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartTestGroupBlockSnippetProducer.prefix,
+      label: DartTestGroupBlockSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  group('${1:group name}', () {
+    $0
+  });
+}
+''');
+  }
+
+  Future<void> test_snippets_tryCatch() async {
+    final content = '''
+void f() {
+  tr^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartTryCatchSnippetProducer.prefix,
+      label: DartTryCatchSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  try {
+    $0
+  } catch (${1:e}) {
+    
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_while() async {
+    final content = '''
+void f() {
+  while^
+}
+''';
+
+    await initializeWithSnippetSupport();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: DartWhileLoopSnippetProducer.prefix,
+      label: DartWhileLoopSnippetProducer.label,
+    );
+
+    expect(updated, r'''
+void f() {
+  while (${1:condition}) {
+    $0
+  }
+}
+''');
+  }
 }
 
 @reflectiveTest
@@ -2449,7 +2820,7 @@
 class B {}
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix: FlutterStatefulWidgetSnippetProducer.prefix,
@@ -2490,7 +2861,7 @@
 class B {}
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix:
@@ -2547,7 +2918,7 @@
 class B {}
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix: FlutterStatelessWidgetSnippetProducer.prefix,
@@ -2581,7 +2952,7 @@
 class B {}
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix: FlutterStatelessWidgetSnippetProducer.prefix,
@@ -2612,7 +2983,7 @@
 stless^
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix: FlutterStatelessWidgetSnippetProducer.prefix,
@@ -2639,7 +3010,7 @@
 ^
 '''; // Deliberate trailing newline to ensure imports aren't inserted at "end".
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final updated = await expectAndApplySnippet(
       content,
       prefix: FlutterStatelessWidgetSnippetProducer.prefix,
@@ -2670,7 +3041,7 @@
 }
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     await expectNoSnippet(
       content,
       FlutterStatelessWidgetSnippetProducer.prefix,
@@ -2682,7 +3053,7 @@
 stle^
 ''';
 
-    await initializeWithSnippetSupportAndPreviewFlag();
+    await initializeWithSnippetSupport();
     final otherFileUri = Uri.file(convertPath('/other/file.dart'));
     await openFile(otherFileUri, withoutMarkers(content));
     final res = await getCompletion(otherFileUri, positionFromMarker(content));
@@ -2742,6 +3113,14 @@
     expect(hasSnippet, isFalse);
   }
 
+  /// Expect that there are no snippets at the position of `^` within [content].
+  Future<void> expectNoSnippets(String content) async {
+    await openFile(mainFileUri, withoutMarkers(content));
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    final hasAnySnippet = res.any((c) => c.kind == CompletionItemKind.Snippet);
+    expect(hasAnySnippet, isFalse);
+  }
+
   /// Expect that there is a snippet for [prefix] with the label [label] at
   /// [position] in [content].
   Future<CompletionItem> expectSnippet(
@@ -2764,14 +3143,4 @@
         textDocumentCapabilities: withCompletionItemSnippetSupport(
             emptyTextDocumentClientCapabilities),
       );
-
-  Future<void> initializeWithSnippetSupportAndPreviewFlag() => provideConfig(
-        () => initialize(
-          textDocumentCapabilities: withCompletionItemSnippetSupport(
-              emptyTextDocumentClientCapabilities),
-          workspaceCapabilities:
-              withConfigurationSupport(emptyWorkspaceClientCapabilities),
-        ),
-        {'previewEnableSnippets': true},
-      );
 }
diff --git a/pkg/analysis_server/test/lsp/completion_yaml_test.dart b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
index 444b101..c1b0e04 100644
--- a/pkg/analysis_server/test/lsp/completion_yaml_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
@@ -502,7 +502,7 @@
 dependencies:
   one: ^2.3.4''';
 
-    newFile(pubspecFilePath, content: content);
+    newFile2(pubspecFilePath, content);
     await initialize();
     await openFile(pubspecFileUri, withoutMarkers(content));
     await pumpEventQueue(times: 500);
@@ -556,7 +556,7 @@
 dependencies:
   one: ^''';
 
-    newFile(pubspecFilePath, content: content);
+    newFile2(pubspecFilePath, content);
     await initialize();
     await openFile(pubspecFileUri, withoutMarkers(content));
     await pumpEventQueue(times: 500);
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index f15c592..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);
@@ -87,7 +115,7 @@
     );
     configureTestPlugin(respondWith: pluginResult);
 
-    newFile(pluginAnalyzedFilePath);
+    newFile2(pluginAnalyzedFilePath, '');
     await initialize();
     final res = await getDefinitionAsLocation(
         pluginAnalyzedFileUri, lsp.Position(line: 0, character: 0));
@@ -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';
@@ -189,7 +227,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final res = await getDefinitionAsLocation(pubspecFileUri, startOfDocPos);
@@ -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();
+}
+''';
 
-    newFile(mainFilePath, content: 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()));
+    newFile2(mainFilePath, withoutMarkers(contents));
+    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/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 2d009c7..3a7f8e0 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -21,7 +21,7 @@
   Future<void> checkPluginErrorsForFile(String pluginAnalyzedFilePath) async {
     final pluginAnalyzedUri = Uri.file(pluginAnalyzedFilePath);
 
-    newFile(pluginAnalyzedFilePath, content: '''String a = "Test";
+    newFile2(pluginAnalyzedFilePath, '''String a = "Test";
 String b = "Test";
 ''');
     await initialize();
@@ -68,7 +68,7 @@
 
   Future<void> test_afterDocumentEdits() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile2(mainFilePath, initialContents);
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await initialize();
@@ -84,7 +84,7 @@
   }
 
   Future<void> test_analysisOptionsFile() async {
-    newFile(analysisOptionsPath, content: '''
+    newFile2(analysisOptionsPath, '''
 linter:
   rules:
     - invalid_lint_rule_name
@@ -100,7 +100,7 @@
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/43926')
   Future<void> test_analysisOptionsFile_packageInclude() async {
-    newFile(analysisOptionsPath, content: '''
+    newFile2(analysisOptionsPath, '''
 include: package:pedantic/analysis_options.yaml
 ''');
 
@@ -125,7 +125,7 @@
   }
 
   Future<void> test_contextMessage() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
 void f() {
   x = 0;
   int x;
@@ -142,7 +142,7 @@
   }
 
   Future<void> test_correction() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
 void f() {
   x = 0;
 }
@@ -157,7 +157,7 @@
   }
 
   Future<void> test_deletedFile() async {
-    newFile(mainFilePath, content: 'String a = 1;');
+    newFile2(mainFilePath, 'String a = 1;');
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await initialize();
@@ -172,7 +172,7 @@
   }
 
   Future<void> test_diagnosticTag_deprecated() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
     @deprecated
     int dep;
 
@@ -191,7 +191,7 @@
   }
 
   Future<void> test_diagnosticTag_notSupported() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
     @deprecated
     int dep;
 
@@ -208,7 +208,7 @@
   }
 
   Future<void> test_diagnosticTag_unnecessary() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
     void main() {
       return;
       print('unreachable');
@@ -227,7 +227,7 @@
   }
 
   Future<void> test_documentationUrl() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
     // ignore: unused_import
     import 'dart:async' as import; // produces BUILT_IN_IDENTIFIER_IN_DECLARATION
     ''');
@@ -247,7 +247,7 @@
   }
 
   Future<void> test_documentationUrl_notSupported() async {
-    newFile(mainFilePath, content: '''
+    newFile2(mainFilePath, '''
     // ignore: unused_import
     import 'dart:async' as import; // produces BUILT_IN_IDENTIFIER_IN_DECLARATION
     ''');
@@ -266,7 +266,7 @@
         join(projectFolderPath, '.dart_tool', 'tool_file.dart');
     var dotFolderFileUri = Uri.file(dotFolderFilePath);
 
-    newFile(dotFolderFilePath, content: 'String a = 1;');
+    newFile2(dotFolderFilePath, 'String a = 1;');
 
     List<Diagnostic>? diagnostics;
     waitForDiagnostics(dotFolderFileUri).then((d) => diagnostics = d);
@@ -283,7 +283,7 @@
   Future<void> test_fixDataFile() async {
     var fixDataPath = join(projectFolderPath, 'lib', 'fix_data.yaml');
     var fixDataUri = Uri.file(fixDataPath);
-    newFile(fixDataPath, content: '''
+    newFile2(fixDataPath, '''
 version: latest
 ''').path;
 
@@ -309,7 +309,7 @@
         "A value of type 'int' can't be assigned to a variable of type 'String'";
     final pluginErrorMessage = 'Test error from plugin';
 
-    newFile(mainFilePath, content: 'String a = 1;');
+    newFile2(mainFilePath, 'String a = 1;');
     final initialDiagnosticsFuture = waitForDiagnostics(mainFileUri);
     await initialize();
     final initialDiagnostics = await initialDiagnosticsFuture;
@@ -342,7 +342,7 @@
   }
 
   Future<void> test_initialAnalysis() async {
-    newFile(mainFilePath, content: 'String a = 1;');
+    newFile2(mainFilePath, 'String a = 1;');
 
     final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await initialize();
@@ -385,7 +385,7 @@
     // FIXME: This
     String a = "";
     ''';
-    newFile(mainFilePath, content: contents);
+    newFile2(mainFilePath, contents);
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await provideConfig(
@@ -403,7 +403,7 @@
     // TODO: This
     String a = "";
     ''';
-    newFile(mainFilePath, content: contents);
+    newFile2(mainFilePath, contents);
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
     // TODOs are disabled by default so we don't need to send any config.
@@ -449,7 +449,7 @@
     // FIXME: This
     String a = "";
     ''';
-    newFile(mainFilePath, content: contents);
+    newFile2(mainFilePath, contents);
 
     final firstDiagnosticsUpdate = waitForDiagnostics(mainFileUri);
     await provideConfig(
diff --git a/pkg/analysis_server/test/lsp/document_color_test.dart b/pkg/analysis_server/test/lsp/document_color_test.dart
index 55dbf74..ff131a3 100644
--- a/pkg/analysis_server/test/lsp/document_color_test.dart
+++ b/pkg/analysis_server/test/lsp/document_color_test.dart
@@ -40,7 +40,7 @@
     importRange = ranges[0];
     colorRange = ranges[1];
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final colorPresentations = await getColorPresentation(
@@ -60,7 +60,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final colors = await getColorPresentation(
@@ -71,6 +71,29 @@
     expect(colors, isEmpty);
   }
 
+  Future<void> test_outsideAnalysisRoot() async {
+    const content = '''
+    import 'package:flutter/material.dart';
+
+    const white = [[Color(0xFFFFFFFF)]];
+    ''';
+    colorRange = rangeFromMarkers(content);
+
+    final outsideRootFilePath = convertPath('/home/other/test.dart');
+    newFile2(outsideRootFilePath, withoutMarkers(content));
+    await initialize();
+
+    final colorPresentations = await getColorPresentation(
+      Uri.file(outsideRootFilePath).toString(),
+      colorRange,
+      Color(alpha: 1, red: 1, green: 0, blue: 0),
+    );
+
+    /// Because this file is not editable (it's outside the analysis roots) an
+    /// empty result will be returned.
+    expect(colorPresentations, isEmpty);
+  }
+
   Future<void> test_simpleColor() async {
     const content = '''
     import 'package:flutter/material.dart';
@@ -79,7 +102,7 @@
     ''';
     colorRange = rangeFromMarkers(content);
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final colorPresentations = await getColorPresentation(
@@ -106,8 +129,11 @@
     String label, {
     String? colorCode,
     String? importUri,
+    bool withEdits = true,
   }) {
-    final edit = TextEdit(range: colorRange, newText: colorCode ?? label);
+    final edit = withEdits
+        ? TextEdit(range: colorRange, newText: colorCode ?? label)
+        : null;
     final additionalEdits = importUri != null
         ? [TextEdit(range: importRange, newText: "import '$importUri';\n\n")]
         : null;
@@ -129,7 +155,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final colors = await getDocumentColors(pubspecFileUri.toString());
@@ -142,7 +168,7 @@
 
     const red = [[Colors.red]];
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final colors = await getDocumentColors(mainFileUri.toString());
diff --git a/pkg/analysis_server/test/lsp/document_symbols_test.dart b/pkg/analysis_server/test/lsp/document_symbols_test.dart
index 48ddc1b..c49bf01 100644
--- a/pkg/analysis_server/test/lsp/document_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/document_symbols_test.dart
@@ -24,7 +24,7 @@
       light,
     }
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize();
 
     final result = await getDocumentSymbols(mainFileUri.toString());
@@ -53,7 +53,7 @@
       light,
     }
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
       textDocumentCapabilities: withDocumentSymbolKinds(
         emptyTextDocumentClientCapabilities,
@@ -90,7 +90,7 @@
     extension StringExtensions on String {}
     extension on String {}
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize();
 
     final result = await getDocumentSymbols(mainFileUri.toString());
@@ -143,7 +143,7 @@
       myMethod() {}
     }
     ''';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(
         textDocumentCapabilities: withHierarchicalDocumentSymbolSupport(
             emptyTextDocumentClientCapabilities));
@@ -182,7 +182,7 @@
     // When there are no analysis roots and we open a file, it should be added as
     // a temporary root allowing us to service requests for it.
     const content = 'class MyClass {}';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(allowEmptyRootUri: true);
     await openFile(mainFileUri, content);
 
@@ -203,7 +203,7 @@
     // When there are no analysis roots and we receive requests for a file that
     // was not opened, we will reject the file due to not being analyzed.
     const content = 'class MyClass {}';
-    newFile(mainFilePath, content: content);
+    newFile2(mainFilePath, content);
     await initialize(allowEmptyRootUri: true);
 
     await expectLater(
@@ -213,7 +213,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final result = await getDocumentSymbols(pubspecFileUri.toString());
diff --git a/pkg/analysis_server/test/lsp/folding_test.dart b/pkg/analysis_server/test/lsp/folding_test.dart
index 9d35988..2aa3b7c 100644
--- a/pkg/analysis_server/test/lsp/folding_test.dart
+++ b/pkg/analysis_server/test/lsp/folding_test.dart
@@ -143,7 +143,7 @@
     ''';
     final ranges = rangesFromMarkers(content);
     final withoutMarkers = withoutRangeMarkers(content);
-    newFile(pluginAnalyzedFilePath);
+    newFile2(pluginAnalyzedFilePath, '');
 
     await initialize();
     await openFile(pluginAnalyzedUri, withoutMarkers);
@@ -173,7 +173,7 @@
       );
     ''';
     final withoutMarkers = withoutRangeMarkers(content);
-    newFile(pluginAnalyzedFilePath, content: withoutMarkers);
+    newFile2(pluginAnalyzedFilePath, withoutMarkers);
 
     await initialize();
     await openFile(pluginAnalyzedUri, withoutMarkers);
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index f3d24e8..ad72337 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -695,7 +695,7 @@
   print('test');
 }
 ''';
-    newFile(mainFilePath, content: contents);
+    newFile2(mainFilePath, contents);
     await initialize();
     await expectFormattedContents(mainFileUri, contents, expected);
   }
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index bb8423b..9ac1ce2 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -316,7 +316,7 @@
     String [[a^bc]];
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
     final hover = await getHover(mainFileUri, positionFromMarker(content));
     expect(hover, isNotNull);
diff --git a/pkg/analysis_server/test/lsp/implementation_test.dart b/pkg/analysis_server/test/lsp/implementation_test.dart
index 195b46b..dabf3ec 100644
--- a/pkg/analysis_server/test/lsp/implementation_test.dart
+++ b/pkg/analysis_server/test/lsp/implementation_test.dart
@@ -151,7 +151,7 @@
     ''');
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final res = await getImplementations(pubspecFileUri, startOfDocPos);
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 5cf681a..2f693e4 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -33,15 +33,15 @@
   Future<void> test_bazelWorkspace() async {
     var workspacePath = '/home/user/ws';
     // Make it a Bazel workspace.
-    newFile(convertPath('$workspacePath/WORKSPACE'));
+    newFile2(convertPath('$workspacePath/WORKSPACE'), '');
 
     var packagePath = '$workspacePath/team/project1';
 
     // Make it a Blaze project.
-    newFile(convertPath('$packagePath/BUILD'));
+    newFile2(convertPath('$packagePath/BUILD'), '');
 
     final file1 = convertPath('$packagePath/lib/file1.dart');
-    newFile(file1);
+    newFile2(file1, '');
 
     await initialize(allowEmptyRootUri: true);
 
@@ -498,12 +498,11 @@
   Future<void> test_emptyAnalysisRoots_multipleOpenFiles() async {
     final file1 = join(projectFolderPath, 'file1.dart');
     final file1Uri = Uri.file(file1);
-    newFile(file1);
+    newFile2(file1, '');
     final file2 = join(projectFolderPath, 'file2.dart');
     final file2Uri = Uri.file(file2);
-    newFile(file2);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    newFile(pubspecPath);
+    newFile2(file2, '');
+    newPubspecYamlFile(projectFolderPath, '');
 
     await initialize(allowEmptyRootUri: true);
 
@@ -533,7 +532,7 @@
     final nestedFilePath = join(
         projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     // The project folder shouldn't be added to start with.
     await initialize(allowEmptyRootUri: true);
@@ -548,9 +547,8 @@
     final nestedFilePath = join(
         projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    newFile(pubspecPath);
+    newFile2(nestedFilePath, '');
+    newPubspecYamlFile(projectFolderPath, '');
 
     // The project folder shouldn't be added to start with.
     await initialize(allowEmptyRootUri: true);
@@ -716,8 +714,7 @@
   }
 
   Future<void> test_nonFileScheme_workspaceFolders() async {
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    newFile(pubspecPath);
+    newPubspecYamlFile(projectFolderPath, '');
 
     final rootUri = Uri.parse('vsls://');
     final fileUri = rootUri.replace(path: '/file1.dart');
@@ -739,7 +736,7 @@
 
   Future<void> test_nonProjectFiles_basicWorkspace() async {
     final file1 = convertPath('/home/nonProject/file1.dart');
-    newFile(file1);
+    newFile2(file1, '');
 
     await initialize(allowEmptyRootUri: true);
 
@@ -750,10 +747,10 @@
 
   Future<void> test_nonProjectFiles_bazelWorkspace() async {
     final file1 = convertPath('/home/nonProject/file1.dart');
-    newFile(file1);
+    newFile2(file1, '');
 
     // Make /home a bazel workspace.
-    newFile(convertPath('/home/WORKSPACE'));
+    newFile2(convertPath('/home/WORKSPACE'), '');
 
     await initialize(allowEmptyRootUri: true);
 
@@ -784,12 +781,11 @@
   Future<void> test_onlyAnalyzeProjectsWithOpenFiles_multipleFiles() async {
     final file1 = join(projectFolderPath, 'file1.dart');
     final file1Uri = Uri.file(file1);
-    newFile(file1);
+    newFile2(file1, '');
     final file2 = join(projectFolderPath, 'file2.dart');
     final file2Uri = Uri.file(file2);
-    newFile(file2);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    newFile(pubspecPath);
+    newFile2(file2, '');
+    newPubspecYamlFile(projectFolderPath, '');
 
     await initialize(
       rootUri: projectFolderUri,
@@ -823,7 +819,7 @@
     final nestedFilePath = join(
         projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
+    newFile2(nestedFilePath, '');
 
     // The project folder shouldn't be added to start with.
     await initialize(
@@ -841,9 +837,8 @@
     final nestedFilePath = join(
         projectFolderPath, 'nested', 'deeply', 'in', 'folders', 'test.dart');
     final nestedFileUri = Uri.file(nestedFilePath);
-    newFile(nestedFilePath);
-    final pubspecPath = join(projectFolderPath, 'pubspec.yaml');
-    newFile(pubspecPath);
+    newFile2(nestedFilePath, '');
+    newPubspecYamlFile(projectFolderPath, '');
 
     // The project folder shouldn't be added to start with.
     await initialize(
diff --git a/pkg/analysis_server/test/lsp/reanalyze_test.dart b/pkg/analysis_server/test/lsp/reanalyze_test.dart
index 69afce8..0c3e3d5 100644
--- a/pkg/analysis_server/test/lsp/reanalyze_test.dart
+++ b/pkg/analysis_server/test/lsp/reanalyze_test.dart
@@ -17,7 +17,7 @@
 class ReanalyzeTest extends AbstractLspAnalysisServerTest {
   Future<void> test_reanalyze() async {
     const initialContents = 'int a = 1;';
-    newFile(mainFilePath, content: initialContents);
+    newFile2(mainFilePath, initialContents);
 
     final initialAnalysis = waitForAnalysisComplete();
 
diff --git a/pkg/analysis_server/test/lsp/references_test.dart b/pkg/analysis_server/test/lsp/references_test.dart
index 350de59..df007e5 100644
--- a/pkg/analysis_server/test/lsp/references_test.dart
+++ b/pkg/analysis_server/test/lsp/references_test.dart
@@ -102,7 +102,7 @@
   }
 
   Future<void> test_nonDartFile() async {
-    newFile(pubspecFilePath, content: simplePubspecContent);
+    newFile2(pubspecFilePath, simplePubspecContent);
     await initialize();
 
     final res = await getReferences(pubspecFileUri, startOfDocPos);
@@ -137,7 +137,7 @@
     }
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(contents));
+    newFile2(mainFilePath, withoutMarkers(contents));
     await initialize();
     final res = await getReferences(mainFileUri, positionFromMarker(contents));
 
diff --git a/pkg/analysis_server/test/lsp/rename_test.dart b/pkg/analysis_server/test/lsp/rename_test.dart
index f62944d..ddb3df6 100644
--- a/pkg/analysis_server/test/lsp/rename_test.dart
+++ b/pkg/analysis_server/test/lsp/rename_test.dart
@@ -244,7 +244,7 @@
     ''';
     final otherFilePath = join(projectFolderPath, 'lib', 'other.dart');
     final newMainFilePath = join(projectFolderPath, 'lib', 'my_new_main.dart');
-    newFile(mainFilePath, content: withoutMarkers(mainContent));
+    newFile2(mainFilePath, withoutMarkers(mainContent));
     await pumpEventQueue(times: 5000);
     await provideConfig(
       () async {
@@ -539,7 +539,7 @@
     final a = new [[Ob^ject]]();
     ''';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final request = makeRequest(
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/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 01da792..fd2d8b2 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -22,6 +22,7 @@
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart' as plugin;
 import 'package:collection/collection.dart';
@@ -203,16 +204,16 @@
         processRunner: processRunner);
     server.pluginManager = pluginManager;
 
-    projectFolderPath = convertPath('/home/test');
+    projectFolderPath = convertPath('/home/my_project');
     projectFolderUri = Uri.file(projectFolderPath);
     newFolder(projectFolderPath);
     newFolder(join(projectFolderPath, 'lib'));
     // Create a folder and file to aid testing that includes imports/completion.
     newFolder(join(projectFolderPath, 'lib', 'folder'));
-    newFile(join(projectFolderPath, 'lib', 'file.dart'));
+    newFile2(join(projectFolderPath, 'lib', 'file.dart'), '');
     mainFilePath = join(projectFolderPath, 'lib', 'main.dart');
     mainFileUri = Uri.file(mainFilePath);
-    pubspecFilePath = join(projectFolderPath, 'pubspec.yaml');
+    pubspecFilePath = join(projectFolderPath, file_paths.pubspecYaml);
     pubspecFileUri = Uri.file(pubspecFilePath);
     analysisOptionsPath = join(projectFolderPath, 'analysis_options.yaml');
     analysisOptionsUri = Uri.file(analysisOptionsPath);
@@ -303,6 +304,7 @@
           formats: [],
           tokenModifiers: [],
           tokenTypes: []).toJson(),
+      'typeDefinition': {'dynamicRegistration': true},
     });
   }
 
@@ -509,6 +511,7 @@
   ) {
     return extendTextDocumentCapabilities(source, {
       'definition': {'linkSupport': true},
+      'typeDefinition': {'linkSupport': true},
       'implementation': {'linkSupport': true}
     });
   }
@@ -583,33 +586,33 @@
 
     if (meta || flutter) {
       var libFolder = MockPackages.instance.addMeta(resourceProvider);
-      config.add(name: 'meta', rootPath: libFolder.parent2.path);
+      config.add(name: 'meta', rootPath: libFolder.parent.path);
     }
 
     if (flutter) {
       {
         var libFolder = MockPackages.instance.addUI(resourceProvider);
-        config.add(name: 'ui', rootPath: libFolder.parent2.path);
+        config.add(name: 'ui', rootPath: libFolder.parent.path);
       }
       {
         var libFolder = MockPackages.instance.addFlutter(resourceProvider);
-        config.add(name: 'flutter', rootPath: libFolder.parent2.path);
+        config.add(name: 'flutter', rootPath: libFolder.parent.path);
       }
     }
 
     if (pedantic) {
       var libFolder = MockPackages.instance.addPedantic(resourceProvider);
-      config.add(name: 'pedantic', rootPath: libFolder.parent2.path);
+      config.add(name: 'pedantic', rootPath: libFolder.parent.path);
     }
 
     if (vector_math) {
       var libFolder = MockPackages.instance.addVectorMath(resourceProvider);
-      config.add(name: 'vector_math', rootPath: libFolder.parent2.path);
+      config.add(name: 'vector_math', rootPath: libFolder.parent.path);
     }
 
     var path = '$projectFolderPath/.dart_tool/package_config.json';
     var content = config.toContent(toUriStr: toUriStr);
-    newFile(path, content: content);
+    newFile2(path, content);
   }
 }
 
@@ -867,8 +870,11 @@
     return executeCommand(command);
   }
 
-  Future<Object?> executeCommand(Command command,
-      {Either2<int, String>? workDoneToken}) async {
+  Future<T> executeCommand<T>(
+    Command command, {
+    T Function(Map<String, Object?>)? decoder,
+    Either2<int, String>? workDoneToken,
+  }) async {
     final request = makeRequest(
       Method.workspace_executeCommand,
       ExecuteCommandParams(
@@ -877,7 +883,8 @@
         workDoneToken: workDoneToken,
       ),
     );
-    return expectSuccessfulResponseTo(request, (result) => result);
+    return expectSuccessfulResponseTo<T, Map<String, Object?>>(
+        request, decoder ?? (result) => result as T);
   }
 
   void expect(Object? actual, Matcher matcher, {String? reason}) =>
@@ -1289,6 +1296,43 @@
     return expectSuccessfulResponseTo(request, Location.fromJson);
   }
 
+  Future<Either2<List<Location>, List<LocationLink>>> getTypeDefinition(
+      Uri uri, Position pos) {
+    final request = makeRequest(
+      Method.textDocument_typeDefinition,
+      TypeDefinitionParams(
+        textDocument: TextDocumentIdentifier(uri: uri.toString()),
+        position: pos,
+      ),
+    );
+    return expectSuccessfulResponseTo(
+      request,
+      _generateFromJsonFor(
+          _canParseList(Location.canParse),
+          _fromJsonList(Location.fromJson),
+          _canParseList(LocationLink.canParse),
+          _fromJsonList(LocationLink.fromJson)),
+    );
+  }
+
+  Future<List<Location>> getTypeDefinitionAsLocation(
+      Uri uri, Position pos) async {
+    final results = await getTypeDefinition(uri, pos);
+    return results.map(
+      (locations) => locations,
+      (locationLinks) => throw 'Expected List<Location> got List<LocationLink>',
+    );
+  }
+
+  Future<List<LocationLink>> getTypeDefinitionAsLocationLinks(
+      Uri uri, Position pos) async {
+    final results = await getTypeDefinition(uri, pos);
+    return results.map(
+      (locations) => throw 'Expected List<LocationLink> got List<Location>',
+      (locationLinks) => locationLinks,
+    );
+  }
+
   Future<List<SymbolInformation>> getWorkspaceSymbols(String query) {
     final request = makeRequest(
       Method.workspace_symbol,
diff --git a/pkg/analysis_server/test/lsp/signature_help_test.dart b/pkg/analysis_server/test/lsp/signature_help_test.dart
index a9de8f5..17ffa43 100644
--- a/pkg/analysis_server/test/lsp/signature_help_test.dart
+++ b/pkg/analysis_server/test/lsp/signature_help_test.dart
@@ -582,7 +582,7 @@
     final expectedLabel = 'foo(String s, int i)';
     final expectedDoc = 'Does foo.';
 
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize(
         textDocumentCapabilities: withSignatureHelpContentFormat(
             emptyTextDocumentClientCapabilities, [MarkupKind.Markdown]));
diff --git a/pkg/analysis_server/test/lsp/snippets_test.dart b/pkg/analysis_server/test/lsp/snippets_test.dart
index a126c9b..48cefb0 100644
--- a/pkg/analysis_server/test/lsp/snippets_test.dart
+++ b/pkg/analysis_server/test/lsp/snippets_test.dart
@@ -155,7 +155,7 @@
       ],
     );
     expect(result, equals(r'''
-var ${1|a,aaa,bbb\${\}\,\|,ccc|} = 1;
+var ${0|a,aaa,bbb\${\}\,\|,ccc|} = 1;
 '''));
   }
 
@@ -180,8 +180,8 @@
       ],
     );
     expect(result, equals(r'''
-class $1 {
-  $1();
+class $0 {
+  $0();
 }
 '''));
   }
@@ -208,8 +208,8 @@
       ],
     );
     expect(result, equals(r'''
-class ${1:A} {
-  ${1:A}();
+class ${0:A} {
+  ${0:A}();
 }
 '''));
   }
@@ -235,8 +235,8 @@
       ],
     );
     expect(result, equals(r'''
-class ${1:A} {
-  ${1:A}();
+class ${0:A} {
+  ${0:A}();
 }
 '''));
   }
@@ -264,8 +264,8 @@
       ],
     );
     expect(result, equals(r'''
-class ${1:A} {
-  ${1:A}();
+class ${0:A} {
+  ${0:A}();
 }
 '''));
   }
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 5e5c5f5..c563746 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -43,6 +43,7 @@
 import 'signature_help_test.dart' as signature_help;
 import 'snippets_test.dart' as snippets;
 import 'super_test.dart' as get_super;
+import 'type_definition_test.dart' as type_definition;
 import 'will_rename_files_test.dart' as will_rename_files;
 import 'workspace_symbols_test.dart' as workspace_symbols;
 
@@ -87,6 +88,7 @@
     server.main();
     signature_help.main();
     snippets.main();
+    type_definition.main();
     will_rename_files.main();
     workspace_symbols.main();
   }, name: 'lsp');
diff --git a/pkg/analysis_server/test/lsp/type_definition_test.dart b/pkg/analysis_server/test/lsp/type_definition_test.dart
new file mode 100644
index 0000000..b7c92ea
--- /dev/null
+++ b/pkg/analysis_server/test/lsp/type_definition_test.dart
@@ -0,0 +1,304 @@
+// 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/lsp_protocol/protocol_generated.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'server_abstract.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TypeDefinitionTest);
+  });
+}
+
+@reflectiveTest
+class TypeDefinitionTest extends AbstractLspAnalysisServerTest {
+  Uri get sdkCoreUri {
+    final sdkCorePath = convertPath('/sdk/lib/core/core.dart');
+    return Uri.file(sdkCorePath);
+  }
+
+  Future<void> test_currentFile() async {
+    final contents = '''
+class [[A]] {}
+
+final [[a^]] = A();
+''';
+
+    final ranges = rangesFromMarkers(contents);
+    final targetRange = ranges[0];
+    final originRange = ranges[1];
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, originRange);
+    expect(result.targetUri, mainFileUri.toString());
+    expect(result.targetSelectionRange, targetRange);
+    expect(result.targetRange, rangeOfString(contents, 'class A {}'));
+  }
+
+  Future<void> test_doubleLiteral() async {
+    final contents = '''
+const a = [[12^.3]];
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'double');
+  }
+
+  Future<void> test_getter() async {
+    final contents = '''
+class A {
+  String get aaa => '';
+}
+
+void f() {
+  final a = A();
+  print(a.[[a^aa]]);
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_intLiteral() async {
+    final contents = '''
+const a = [[12^3]];
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'int');
+  }
+
+  /// Checks a result when the client does not support [LocationLink], only
+  /// the original LSP [Location].
+  Future<void> test_location() async {
+    final contents = '''
+const a^ = 'test string';
+''';
+
+    final result = await _getLocationResult(contents);
+    expect(result.uri, '$sdkCoreUri');
+    _expectNameRange(result.range, 'String');
+  }
+
+  Future<void> test_nonDartFile() async {
+    final contents = '''
+const a = '^';
+''';
+
+    newFile2(pubspecFilePath, withoutMarkers(contents));
+    await initialize();
+    final results = await getTypeDefinitionAsLocation(
+        mainFileUri, positionFromMarker(contents));
+    expect(results, isEmpty);
+  }
+
+  Future<void> test_otherFile() async {
+    final otherFilePath = join(projectFolderPath, 'lib', 'other.dart');
+    final otherFileUri = Uri.file(otherFilePath);
+    final contents = '''
+import 'other.dart';
+
+final [[a^]] = A();
+''';
+
+    final otherContents = '''
+class [[A]] {}
+''';
+
+    newFile2(otherFilePath, withoutMarkers(otherContents));
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    expect(result.targetUri, otherFileUri.toString());
+    expect(result.targetSelectionRange, rangeFromMarkers(otherContents));
+    expect(result.targetRange, rangeOfString(otherContents, 'class A {}'));
+  }
+
+  Future<void> test_parameter() async {
+    final contents = '''
+void f(String a) {
+  void f([['te^st']]);
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_parameterName() async {
+    final contents = '''
+void f({String a}) {
+  void f([[a^]]: 'test');
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_setter() async {
+    final contents = '''
+class A {
+  set aaa(String value) {}
+}
+
+void f() {
+  final a = A();
+  a.[[a^aa]] = '';
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_stringLiteral() async {
+    final contents = '''
+const a = [['te^st string']];
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_type() async {
+    final contents = '''
+[[St^ring]] a = '';
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_unopenedFile() async {
+    final contents = '''
+const a = [['^']];
+''';
+
+    newFile2(mainFilePath, withoutMarkers(contents));
+    final result = await _getResult(contents, inOpenFile: false);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_variableDeclaration() async {
+    final contents = '''
+const [[a^]] = 'test string';
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_variableDeclaration_inferredType() async {
+    final contents = '''
+var [[a^]] = 'test string';
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_variableReference() async {
+    final contents = '''
+void f() {
+  const a = 'test string';
+  print([[a^]]);
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_variableReference_inferredType() async {
+    final contents = '''
+void f() {
+  var a = 'test string';
+  print([[a^]]);
+}
+''';
+
+    final result = await _getResult(contents);
+    expect(result.originSelectionRange, rangeFromMarkers(contents));
+    _expectSdkCoreType(result, 'String');
+  }
+
+  /// Expects [range] looks consistent with a range of an elements code.
+  ///
+  /// This is used for SDK sources where the exact location is not known to the
+  /// test.
+  void _expectCodeRange(Range range) {
+    expect(range.start.line, isPositive);
+    expect(range.end.line, isPositive);
+    // And a range that spans multiple lines.
+    expect(range.start.line, lessThan(range.end.line));
+  }
+
+  /// Expects [range] looks consistent with a range of an elements name.
+  ///
+  /// This is used for SDK sources where the exact location is not known to the
+  /// test.
+  void _expectNameRange(Range range, String name) {
+    expect(range.start.line, isPositive);
+    expect(range.end.line, isPositive);
+    // Expect a single line, with the length matching `name`.
+    expect(range.start.line, range.end.line);
+    expect(
+      range.end.character - range.start.character,
+      name.length,
+    );
+  }
+
+  /// Expects [range] looks consistent with a range of an elements code.
+  ///
+  /// This is used for SDK sources where the exact location is not known to the
+  /// test.
+  void _expectSdkCoreType(LocationLink result, String typeName) {
+    expect(result.targetUri, '$sdkCoreUri');
+    _expectNameRange(result.targetSelectionRange, typeName);
+    _expectCodeRange(result.targetRange);
+  }
+
+  /// Gets the type definition as an LSP Location object.
+  Future<Location> _getLocationResult(String contents) async {
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(contents));
+    final results = await getTypeDefinitionAsLocation(
+        mainFileUri, positionFromMarker(contents));
+    return results.single;
+  }
+
+  /// Advertises support for the LSP LocationLink type and gets the type
+  /// definition using that.
+  Future<LocationLink> _getResult(String contents,
+      {Uri? fileUri, bool inOpenFile = true}) async {
+    fileUri ??= mainFileUri;
+    await initialize(
+      textDocumentCapabilities:
+          withLocationLinkSupport(emptyTextDocumentClientCapabilities),
+    );
+    if (inOpenFile) {
+      await openFile(fileUri, withoutMarkers(contents));
+    }
+    final results = await getTypeDefinitionAsLocationLinks(
+      mainFileUri,
+      positionFromMarker(contents),
+    );
+    return results.single;
+  }
+}
diff --git a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
index f81b17a..3af1f88 100644
--- a/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/workspace_symbols_test.dart
@@ -22,7 +22,7 @@
     extension StringExtensions on String {}
     extension on String {}
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final symbols = await getWorkspaceSymbols('S');
@@ -44,7 +44,7 @@
       myMethod() {}
     }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final symbols = await getWorkspaceSymbols('topLevel');
@@ -69,7 +69,7 @@
       myMethod() {}
     }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     // meld should match myField
@@ -118,7 +118,7 @@
       [[myMethodWithArgs(int a) {}]]
     }
     ''';
-    newFile(mainFilePath, content: withoutMarkers(content));
+    newFile2(mainFilePath, withoutMarkers(content));
     await initialize();
 
     final symbols = await getWorkspaceSymbols('my');
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index 3c0a02f..c5f71ad 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -83,11 +83,11 @@
   }
 
   Future<void> test_maxResults() async {
-    newFile(join(testFolder, 'a.dart'), content: r'''
+    newFile2(join(testFolder, 'a.dart'), r'''
 class A {}
 class B {}
 ''').path;
-    newFile(join(testFolder, 'b.dart'), content: r'''
+    newFile2(join(testFolder, 'b.dart'), r'''
 class C {}
 class D {}
 ''').path;
@@ -124,8 +124,8 @@
   }
 
   Future<void> test_multipleFiles() async {
-    var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
-    var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
+    var a = newFile2(join(testFolder, 'a.dart'), 'class A {}').path;
+    var b = newFile2(join(testFolder, 'b.dart'), 'class B {}').path;
 
     await _getDeclarations();
 
@@ -153,8 +153,8 @@
   }
 
   Future<void> test_onlyForFile() async {
-    var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
-    newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
+    var a = newFile2(join(testFolder, 'a.dart'), 'class A {}').path;
+    newFile2(join(testFolder, 'b.dart'), 'class B {}').path;
 
     await _getDeclarations(file: a);
 
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index c0d0616..589e9a5 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analysis_server/src/search/search_domain.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -163,16 +164,24 @@
 
   Future<void> test_class_extends_fileAndPackageUris() async {
     // prepare packages
-    newFile('/packages/pkgA/lib/libA.dart', content: '''
+    newFile2('/packages/pkgA/lib/libA.dart', '''
 library lib_a;
 class A {}
 class B extends A {}
 ''');
-    newDotPackagesFile('/packages/pkgA',
-        content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
+    newPackageConfigJsonFile(
+      '/packages/pkgA',
+      (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     // reference the package from a project
-    newDotPackagesFile(projectPath,
-        content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
+    newPackageConfigJsonFile(
+      projectPath,
+      (PackageConfigFileBuilder()
+            ..add(name: 'pkgA', rootPath: '/packages/pkgA'))
+          .toContent(toUriStr: toUriStr),
+    );
     addTestFile('''
 import 'package:pkgA/libA.dart';
 class C extends A {}
@@ -643,7 +652,7 @@
   }
 
   Future<void> test_class_member_method_private_differentLib() async {
-    newFile(join(testFolder, 'lib.dart'), content: r'''
+    newFile2(join(testFolder, 'lib.dart'), r'''
 import 'test.dart';
 class A {
   void _m() {}
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index 142d6f6..66791e5 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -732,7 +732,7 @@
     await computeAndCheck();
 
     // Annotation, imported class.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   const A$parameters;
 }
@@ -746,7 +746,7 @@
     await computeAndCheck();
 
     // Annotation, imported class, prefixed.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   const A$parameters;
 }
@@ -789,7 +789,7 @@
     await computeAndCheck();
 
     // Instance creation, imported class, generative.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A$parameters;
 }
@@ -802,7 +802,7 @@
     await computeAndCheck();
 
     // Instance creation, imported class, factory.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   factory A$parameters => throw 0;
 }
@@ -833,7 +833,7 @@
     await computeAndCheck();
 
     // Method invocation, imported function.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void f$parameters() {}
 ''');
     addTestSource2('''
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index c05f315..371d0a0 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -558,7 +558,8 @@
       DartCompletionRequest request);
 
   Future computeSuggestions({int times = 200}) async {
-    result = await session.getResolvedUnit(testFile) as ResolvedUnitResult;
+    result =
+        await (await session).getResolvedUnit(testFile) as ResolvedUnitResult;
 
     // Build the request
     var request = DartCompletionRequest.forResolvedUnit(
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index be920e7..555a28f 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -32,7 +32,7 @@
   }
 
   Future<void> test_resolveDirectives() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 library libA;
 /// My class.
 /// Short description.
@@ -40,7 +40,7 @@
 /// Longer description.
 class A {}
 ''');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 library libB;
 import "a.dart" as foo;
 part 'test.dart';
@@ -51,7 +51,7 @@
 
     // Build the request
     var resolvedUnit =
-        await session.getResolvedUnit(testFile) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(testFile) as ResolvedUnitResult;
     request = DartCompletionRequest.forResolvedUnit(
       resolvedUnit: resolvedUnit,
       offset: completionOffset,
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
index d154a6e..e06f764 100644
--- a/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
@@ -59,10 +59,14 @@
   }
 
   Future<void> test_enumConstantName_imported_withPrefix() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum MyEnum { foo01 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     var response = await getTestCodeSuggestions('''
 import 'a.dart' as prefix;
 
@@ -115,10 +119,14 @@
   }
 
   Future<void> test_enumName_imported_withPrefix() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum MyEnum { foo01 }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     var response = await getTestCodeSuggestions('''
 import 'a.dart' as prefix;
 
@@ -147,10 +155,14 @@
 
   @FailingTest(reason: 'element.kind is LIBRARY')
   Future<void> test_importPrefix() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum MyEnum { v }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     var response = await getTestCodeSuggestions('''
 import 'a.dart' as prefix01;
 
@@ -177,10 +189,14 @@
   }
 
   Future<void> test_importPrefix_dot() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum MyEnum { v }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     var response = await getTestCodeSuggestions('''
 import 'a.dart' as prefix;
 
@@ -230,10 +246,14 @@
   }
 
   Future<void> test_nothing_imported_withPrefix() async {
-    await addProjectFile('lib/a.dart', r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum MyEnum { v }
 ''');
 
+    if (isProtocolVersion1) {
+      await waitForSetWithUri('package:test/a.dart');
+    }
+
     var response = await getTestCodeSuggestions('''
 import 'a.dart' as prefix;
 
@@ -284,9 +304,12 @@
 
     // imported
     {
-      await addProjectFile('lib/a.dart', '''
+      newFile2('$testPackageLibPath/a.dart', '''
 $declaration
 ''');
+      if (isProtocolVersion1) {
+        await waitForSetWithUri('package:test/a.dart');
+      }
       var response = await getTestCodeSuggestions('''
 import 'a.dart';
 void f() {
@@ -298,9 +321,12 @@
 
     // not imported
     {
-      await addProjectFile('lib/a.dart', '''
+      newFile2('$testPackageLibPath/a.dart', '''
 $declaration
 ''');
+      if (isProtocolVersion1) {
+        await waitForSetWithUri('package:test/a.dart');
+      }
       var response = await getTestCodeSuggestions('''
 void f() {
   $codeAtCompletion
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 534635b..4305c13 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -1237,7 +1237,7 @@
   }
 
   Future<void> test_Block_unimported() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
 
     addTestSource('void f() { ^ }');
 
@@ -1971,7 +1971,7 @@
   }
 
   Future<void> test_ExtendsClause() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('''
 import 'a.dart';
 
@@ -1982,7 +1982,7 @@
   }
 
   Future<void> test_ExtensionDeclaration_extendedType() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('''
 import 'a.dart';
 
@@ -1994,7 +1994,7 @@
   }
 
   Future<void> test_ExtensionDeclaration_extendedType2() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('''
 import 'a.dart';
 
@@ -2006,7 +2006,7 @@
   }
 
   Future<void> test_ExtensionDeclaration_member() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('''
 import 'a.dart';
 
@@ -2697,7 +2697,7 @@
   }
 
   Future<void> test_implementsClause() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('''
 import 'a.dart';
 
@@ -4898,7 +4898,7 @@
   }
 
   Future<void> test_withClause_mixin() async {
-    newFile('$testPackageLibPath/a.dart', content: 'mixin M {}');
+    newFile2('$testPackageLibPath/a.dart', 'mixin M {}');
     addTestSource('''
 import 'a.dart';
 
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
index d9dc05e..5f1ccc7 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
@@ -104,7 +104,7 @@
 
   Future<void> test_libraryPrefix_deferred_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         library testA;
         import "dart:async" deferred as bar;
         part "test.dart";''');
@@ -118,8 +118,8 @@
   }
 
   Future<void> test_libraryPrefix_with_exports() async {
-    newFile('$testPackageLibPath/a.dart', content: 'library libA; class A { }');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', 'library libA; class A { }');
+    newFile2('$testPackageLibPath/b.dart', '''
         library libB;
         export "a.dart";
         class B { }
@@ -194,12 +194,12 @@
 
   Future<void> test_PrefixedIdentifier_library_inPart() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         var T1;
         class X { }
         class Y { }''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         library testA;
         import "b.dart" as b;
         part "test.dart";
@@ -225,7 +225,7 @@
 
   Future<void> test_PrefixedIdentifier_library_typesOnly() async {
     // SimpleIdentifier  PrefixedIdentifier  NamedType
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         var T1;
         class X { }
@@ -258,7 +258,7 @@
 
   Future<void> test_PrefixedIdentifier_library_typesOnly2() async {
     // SimpleIdentifier  PrefixedIdentifier  NamedType
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         var T1;
         class X { }
@@ -283,7 +283,7 @@
 
   Future<void> test_PrefixedIdentifier_parameter() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         class _W {M y; var _z;}
         class X extends _W {}
@@ -297,7 +297,7 @@
 
   Future<void> test_PrefixedIdentifier_prefix() async {
     // SimpleIdentifier  PrefixedIdentifier  ExpressionStatement
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         class A {static int bar = 10;}
         _B() {}''');
     addTestSource('''
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
index 52c6b90..5c1dd55 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
@@ -29,12 +29,12 @@
 
   Future<void> test_partFile_Constructor() async {
     // SimpleIdentifier  NamedType  ConstructorName
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         library libA;
         import "b.dart";
         part "test.dart";
@@ -64,12 +64,12 @@
 
   Future<void> test_partFile_Constructor2() async {
     // SimpleIdentifier  NamedType  ConstructorName
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         part of libA;
         class B { }''');
     addTestSource('''
@@ -97,7 +97,7 @@
   }
 
   Future<void> test_partFile_extension() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 part of libA;
 extension E on int {}
 ''');
@@ -115,12 +115,12 @@
   Future<void>
       test_partFile_InstanceCreationExpression_assignment_filter() async {
     // ConstructorName  InstanceCreationExpression  VariableDeclarationList
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         part of libA;
         class A {} class B extends A {} class C implements A {} class D {}
         ''');
@@ -162,12 +162,12 @@
   Future<void>
       test_partFile_InstanceCreationExpression_variable_declaration_filter() async {
     // ConstructorName  InstanceCreationExpression  VariableDeclarationList
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         part of libA;
         class A {} class B extends A {} class C implements A {} class D {}
         ''');
@@ -205,12 +205,12 @@
   }
 
   Future<void> test_partFile_TypeName() async {
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         library libA;
         import "b.dart";
         part "test.dart";
@@ -254,12 +254,12 @@
   }
 
   Future<void> test_partFile_TypeName2() async {
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
         lib B;
         int T1;
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
         part of libA;
         class B { var b1; b2(){}}
         int bf() => 0;
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index 235ed40..45e5c5d 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -1512,7 +1512,7 @@
   }
 
   Future<void> test_Block_unimported() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('void f() { ^ }');
 
     await computeSuggestions();
diff --git a/pkg/analysis_server/test/services/completion/dart/location/compilation_unit_test.dart b/pkg/analysis_server/test/services/completion/dart/location/compilation_unit_test.dart
new file mode 100644
index 0000000..d5130d5
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/compilation_unit_test.dart
@@ -0,0 +1,83 @@
+// 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:analyzer_utilities/check/check.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../../client/completion_driver_test.dart';
+import '../completion_check.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(CompilationUnitTest1);
+    defineReflectiveTests(CompilationUnitTest2);
+  });
+}
+
+@reflectiveTest
+class CompilationUnitTest1 extends AbstractCompletionDriverTest
+    with CompilationUnitTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class CompilationUnitTest2 extends AbstractCompletionDriverTest
+    with CompilationUnitTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin CompilationUnitTestCases on AbstractCompletionDriverTest {
+  Future<void> test_definingUnit_export() async {
+    var response = await getTestCodeSuggestions('''
+exp^
+''');
+
+    check(response).suggestions.includesAll([
+      (suggestion) => suggestion
+        ..completion.isEqualTo("export '';")
+        ..kind.isKeyword
+        ..hasSelection(offset: 8),
+    ]);
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.excludesAll([
+        (suggestion) => suggestion.completion.startsWith('import'),
+      ]);
+    }
+  }
+
+  Future<void> test_definingUnit_import() async {
+    var response = await getTestCodeSuggestions('''
+imp^
+''');
+
+    check(response).suggestions.includesAll([
+      (suggestion) => suggestion
+        ..completion.isEqualTo("import '';")
+        ..kind.isKeyword
+        ..hasSelection(offset: 8),
+    ]);
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.excludesAll([
+        (suggestion) => suggestion.completion.startsWith('export'),
+      ]);
+    }
+  }
+
+  Future<void> test_definingUnit_part() async {
+    var response = await getTestCodeSuggestions('''
+par^
+''');
+
+    check(response).suggestions.includesAll([
+      (suggestion) => suggestion
+        ..completion.isEqualTo("part '';")
+        ..kind.isKeyword
+        ..hasSelection(offset: 6),
+    ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
index 5ebb1ac..42fafb8 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
@@ -335,4 +335,23 @@
 
     check(response).suggestions.isEmpty;
   }
+
+  Future<void> test_constantName_typeArguments_dot_x_semicolon_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E<T> {
+  v<int>.^;
+  const E.foo01();
+  const E.foo02();
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo01')
+        ..isConstructorInvocation,
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo02')
+        ..isConstructorInvocation,
+    ]);
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/location/test_all.dart b/pkg/analysis_server/test/services/completion/dart/location/test_all.dart
index 5fc5401..b0fe488 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/test_all.dart
@@ -5,6 +5,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'class_body_test.dart' as class_body;
+import 'compilation_unit_test.dart' as compilation_unit;
 import 'enum_constant_test.dart' as enum_constant;
 import 'enum_test.dart' as enum_;
 import 'field_formal_parameter_test.dart' as field_formal_parameter;
@@ -15,6 +16,7 @@
 void main() {
   defineReflectiveSuite(() {
     class_body.main();
+    compilation_unit.main();
     enum_constant.main();
     enum_.main();
     field_formal_parameter.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index df03716..01f664e 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -462,7 +462,7 @@
   }
 
   Future<void> test_private_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void foo() {}
   void _bar() {}
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
index ea4ec7e..efc5a00 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../../client/completion_driver_test.dart';
@@ -34,11 +35,10 @@
   Future<void> setUp() async {
     var metaLibFolder = MockPackages.instance.addMeta(resourceProvider);
 
-    // TODO(scheglov) Use `writeTestPackageConfig` instead
-    newDotPackagesFile(testPackageRootPath, content: '''
-meta:${metaLibFolder.toUri()}
-project:${toUri(testPackageLibPath)}
-''');
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'meta', rootPath: metaLibFolder.parent.path),
+    );
 
     await super.setUp();
   }
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index a5d53f4..ea54cb1 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -1079,7 +1079,7 @@
   }
 
   Future<void> test_Block_unimported() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
     addTestSource('void f() { ^ }');
 
     await computeSuggestions();
diff --git a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
index db354c4..e2d0297 100644
--- a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
@@ -75,9 +75,9 @@
   Future<void> test_export_package2() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart', content: 'library foo;');
-    newFile('$fooRootPath/lib/baz/too.dart', content: 'library too;');
-    newFile('$barRootPath/lib/bar.dart', content: 'library bar;');
+    newFile2('$fooRootPath/lib/foo.dart', 'library foo;');
+    newFile2('$fooRootPath/lib/baz/too.dart', 'library too;');
+    newFile2('$barRootPath/lib/bar.dart', 'library bar;');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -144,9 +144,9 @@
 
   Future<void> test_import_file() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "^" import');
     await computeSuggestions();
@@ -162,9 +162,9 @@
 
   Future<void> test_import_file2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "..^" import');
     await computeSuggestions();
@@ -180,9 +180,9 @@
 
   Future<void> test_import_file_child() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "foo/^" import');
     await computeSuggestions();
@@ -197,10 +197,10 @@
   }
 
   Future<void> test_import_file_outside_lib() async {
-    newFile('$testPackageLibPath/other.dart');
-    newFile('$testPackageLibPath/foo/bar.dart');
-    newFile('$testPackageRootPath/blat.dart');
-    newFile('$testPackageRootPath/bin/boo.dart');
+    newFile2('$testPackageLibPath/other.dart', '');
+    newFile2('$testPackageLibPath/foo/bar.dart', '');
+    newFile2('$testPackageRootPath/blat.dart', '');
+    newFile2('$testPackageRootPath/bin/boo.dart', '');
 
     addTestSource('import "../^" import');
     await computeSuggestions();
@@ -218,10 +218,10 @@
 
   Future<void> test_import_file_parent() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
-    newFile('$workspaceRootPath/aaa/boo.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
+    newFile2('$workspaceRootPath/aaa/boo.dart', '');
 
     addTestSource('import "../^" import');
     await computeSuggestions();
@@ -238,9 +238,9 @@
 
   Future<void> test_import_file_parent2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "../b^" import');
     await computeSuggestions();
@@ -265,8 +265,8 @@
 
   Future<void> test_import_only_dart_files() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newAnalysisOptionsYamlFile(testPackageRootPath);
+    newFile2('$testPackageRootPath/other.dart', '');
+    newAnalysisOptionsYamlFile2(testPackageRootPath, '');
 
     addTestSource('import "package:^";');
     await computeSuggestions();
@@ -276,9 +276,9 @@
   Future<void> test_import_package() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart');
-    newFile('$fooRootPath/lib/baz/too.dart');
-    newFile('$barRootPath/lib/bar.dart');
+    newFile2('$fooRootPath/lib/foo.dart', '');
+    newFile2('$fooRootPath/lib/baz/too.dart', '');
+    newFile2('$barRootPath/lib/bar.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -304,9 +304,9 @@
   Future<void> test_import_package2() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart');
-    newFile('$fooRootPath/lib/baz/too.dart');
-    newFile('$barRootPath/lib/bar.dart');
+    newFile2('$fooRootPath/lib/foo.dart', '');
+    newFile2('$fooRootPath/lib/baz/too.dart', '');
+    newFile2('$barRootPath/lib/bar.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -323,9 +323,9 @@
   Future<void> test_import_package2_raw() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart');
-    newFile('$fooRootPath/lib/baz/too.dart');
-    newFile('$barRootPath/lib/bar.dart');
+    newFile2('$fooRootPath/lib/foo.dart', '');
+    newFile2('$fooRootPath/lib/baz/too.dart', '');
+    newFile2('$barRootPath/lib/bar.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -342,9 +342,9 @@
   Future<void> test_import_package2_with_trailing() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart');
-    newFile('$fooRootPath/lib/baz/too.dart');
-    newFile('$barRootPath/lib/bar.dart');
+    newFile2('$fooRootPath/lib/foo.dart', '');
+    newFile2('$fooRootPath/lib/baz/too.dart', '');
+    newFile2('$barRootPath/lib/bar.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -379,9 +379,9 @@
   Future<void> test_import_package_raw() async {
     var fooRootPath = '$workspaceRootPath/foo';
     var barRootPath = '$workspaceRootPath/bar';
-    newFile('$fooRootPath/lib/foo.dart');
-    newFile('$fooRootPath/lib/baz/too.dart');
-    newFile('$barRootPath/lib/bar.dart');
+    newFile2('$fooRootPath/lib/foo.dart', '');
+    newFile2('$fooRootPath/lib/baz/too.dart', '');
+    newFile2('$barRootPath/lib/bar.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -479,9 +479,9 @@
 
   Future<void> test_part_file() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "^" import');
     await computeSuggestions();
@@ -497,9 +497,9 @@
 
   Future<void> test_part_file2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "..^" import');
     await computeSuggestions();
@@ -515,9 +515,9 @@
 
   Future<void> test_part_file_child() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "foo/^" import');
     await computeSuggestions();
@@ -533,9 +533,9 @@
 
   Future<void> test_part_file_parent() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "../^" import');
     await computeSuggestions();
@@ -567,9 +567,9 @@
 
   Future<void> test_import_file() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "^" import');
     await computeSuggestions();
@@ -585,9 +585,9 @@
 
   Future<void> test_import_file2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "..^" import');
     await computeSuggestions();
@@ -603,9 +603,9 @@
 
   Future<void> test_import_file_child() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "foo/^" import');
     await computeSuggestions();
@@ -621,9 +621,9 @@
 
   Future<void> test_import_file_parent() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "../^" import');
     await computeSuggestions();
@@ -639,9 +639,9 @@
 
   Future<void> test_import_file_parent2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('import "../b^" import');
     await computeSuggestions();
@@ -657,9 +657,9 @@
 
   Future<void> test_part_file() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "^" import');
     await computeSuggestions();
@@ -675,9 +675,9 @@
 
   Future<void> test_part_file2() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "..^" import');
     await computeSuggestions();
@@ -693,9 +693,9 @@
 
   Future<void> test_part_file_child() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "foo/^" import');
     await computeSuggestions();
@@ -711,9 +711,9 @@
 
   Future<void> test_part_file_parent() async {
     testFile = convertPath('$testPackageRootPath/test.dart');
-    newFile('$testPackageRootPath/other.dart');
-    newFile('$testPackageRootPath/foo/bar.dart');
-    newFile('$workspaceRootPath/blat.dart');
+    newFile2('$testPackageRootPath/other.dart', '');
+    newFile2('$testPackageRootPath/foo/bar.dart', '');
+    newFile2('$workspaceRootPath/blat.dart', '');
 
     addTestSource('library x; part "../^" import');
     await computeSuggestions();
diff --git a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
index bc6f11e..7676492 100644
--- a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
@@ -739,7 +739,7 @@
   }
 
   Future<void> test_tryonThrowStatement_nnbd_into_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 String? x;
 ''');
     await _prepareCompletion('.tryon', '''
@@ -763,7 +763,7 @@
   }
 
   Future<void> test_tryonThrowStatement_nnbd_into_legacy_nested() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 List<String?> x;
 ''');
     await _prepareCompletion('.tryon', '''
@@ -787,7 +787,7 @@
   }
 
   Future<void> test_tryonThrowStatement_nnbd_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.8
 String x;
 ''');
@@ -810,7 +810,7 @@
   }
 
   Future<void> test_tryonThrowStatement_nnbd_legacy_nested() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.8
 List<String> x;
 ''');
diff --git a/pkg/analysis_server/test/services/correction/organize_directives_test.dart b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
index 8ecae36..737ad25 100644
--- a/pkg/analysis_server/test/services/correction/organize_directives_test.dart
+++ b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
@@ -911,7 +911,8 @@
 
   Future<void> _computeUnitAndErrors(String code) async {
     addTestSource(code);
-    var result = await session.getResolvedUnit(testFile) as ResolvedUnitResult;
+    var result =
+        await (await session).getResolvedUnit(testFile) as ResolvedUnitResult;
     testUnit = result.unit;
     testErrors = result.errors;
   }
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index 5e7fb27..bd2bf66 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -1512,7 +1512,7 @@
 
   Future<void> _parseTestUnit(String code) async {
     addTestSource(code);
-    var result = session.getParsedUnit(testFile) as ParsedUnitResult;
+    var result = (await session).getParsedUnit(testFile) as ParsedUnitResult;
     lineInfo = result.lineInfo;
     testUnit = result.unit;
   }
diff --git a/pkg/analysis_server/test/services/correction/util_test.dart b/pkg/analysis_server/test/services/correction/util_test.dart
index d6dc428..3269037 100644
--- a/pkg/analysis_server/test/services/correction/util_test.dart
+++ b/pkg/analysis_server/test/services/correction/util_test.dart
@@ -196,8 +196,8 @@
 
   Future<void>
       test_addLibraryImports_package_hasDart_hasPackages_insertAfter() async {
-    newFile('$workspaceRootPath/aaa/lib/aaa.dart');
-    newFile('$workspaceRootPath/bbb/lib/bbb.dart');
+    newFile2('$workspaceRootPath/aaa/lib/aaa.dart', '');
+    newFile2('$workspaceRootPath/bbb/lib/bbb.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -221,8 +221,8 @@
 
   Future<void>
       test_addLibraryImports_package_hasDart_hasPackages_insertBefore() async {
-    newFile('$workspaceRootPath/aaa/lib/aaa.dart');
-    newFile('$workspaceRootPath/bbb/lib/bbb.dart');
+    newFile2('$workspaceRootPath/aaa/lib/aaa.dart', '');
+    newFile2('$workspaceRootPath/bbb/lib/bbb.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -245,10 +245,10 @@
   }
 
   Future<void> test_addLibraryImports_package_hasImports_between() async {
-    newFile('$workspaceRootPath/aaa/lib/aaa.dart');
-    newFile('$workspaceRootPath/bbb/lib/bbb.dart');
-    newFile('$workspaceRootPath/ccc/lib/ccc.dart');
-    newFile('$workspaceRootPath/ddd/lib/ddd.dart');
+    newFile2('$workspaceRootPath/aaa/lib/aaa.dart', '');
+    newFile2('$workspaceRootPath/bbb/lib/bbb.dart', '');
+    newFile2('$workspaceRootPath/ccc/lib/ccc.dart', '');
+    newFile2('$workspaceRootPath/ddd/lib/ddd.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index 983df07..bb098d2 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -24,10 +24,10 @@
   Future<void> test_file_containing_imports_exports_parts() async {
     final root = '/home/test/000/1111';
     testFile = convertPath('$root/test.dart');
-    newFile('/absolute/uri.dart', content: '');
-    final fileA = newFile('$root/a.dart', content: 'part of lib;');
-    final fileB = newFile('$root/b.dart', content: "import 'test.dart';");
-    final fileC = newFile('$root/22/c.dart', content: '');
+    newFile2('/absolute/uri.dart', '');
+    final fileA = newFile2('$root/a.dart', 'part of lib;');
+    final fileB = newFile2('$root/b.dart', "import 'test.dart';");
+    final fileC = newFile2('$root/22/c.dart', '');
     verifyNoTestUnitErrors = false;
     await resolveTestCode('''
 library lib;
@@ -55,7 +55,7 @@
   }
 
   Future<void> test_file_imported_with_package_uri_down() async {
-    var file = newFile('$testPackageLibPath/old_name.dart', content: '');
+    var file = newFile2('$testPackageLibPath/old_name.dart', '');
     addTestSource(r'''
 import 'package:test/old_name.dart';
 ''');
@@ -65,7 +65,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('$testPackageLibPath/222/new_name.dart',
         oldFile: file.path);
@@ -79,8 +79,7 @@
   @failingTest
   Future<void> test_file_imported_with_package_uri_lib_change() async {
     // The current testing stack does not support creating such bazel roots
-    var file =
-        newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
+    var file = newFile2('/home/test0/test1/test2/lib/111/name.dart', '');
     addTestSource(r'''
 import 'package:test0.test1.test2/111/name.dart';
 ''');
@@ -89,7 +88,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('/home/test0/test1/test3/lib/111/name.dart',
         oldFile: file.path);
@@ -103,8 +102,7 @@
   @failingTest
   Future<void> test_file_imported_with_package_uri_lib_change_down() async {
     // The current testing stack does not support creating such bazel roots
-    var file =
-        newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
+    var file = newFile2('/home/test0/test1/test2/lib/111/name.dart', '');
     addTestSource(r'''
 import 'package:test0.test1.test2/111/name.dart';
 ''');
@@ -113,7 +111,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('/home/test0/test1/test2/test3/lib/111/name.dart',
         oldFile: file.path);
@@ -127,8 +125,7 @@
   @failingTest
   Future<void> test_file_imported_with_package_uri_lib_change_up() async {
     // The current testing stack does not support creating such bazel roots
-    var file =
-        newFile('/home/test0/test1/test2/lib/111/name.dart', content: '');
+    var file = newFile2('/home/test0/test1/test2/lib/111/name.dart', '');
     addTestSource(r'''
 import 'package:test0.test1.test2/111/name.dart';
 ''');
@@ -137,7 +134,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('/home/test0/test1/lib/111/name.dart',
         oldFile: file.path);
@@ -149,7 +146,7 @@
   }
 
   Future<void> test_file_imported_with_package_uri_sideways() async {
-    var file = newFile('$testPackageLibPath/111/old_name.dart', content: '');
+    var file = newFile2('$testPackageLibPath/111/old_name.dart', '');
     addTestSource(r'''
 import 'package:test/111/old_name.dart';
 ''');
@@ -159,7 +156,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('$testPackageLibPath/222/new_name.dart',
         oldFile: file.path);
@@ -171,7 +168,7 @@
   }
 
   Future<void> test_file_imported_with_package_uri_up() async {
-    var file = newFile('$testPackageLibPath/222/old_name.dart', content: '');
+    var file = newFile2('$testPackageLibPath/222/old_name.dart', '');
     addTestSource(r'''
 import 'package:test/222/old_name.dart';
 ''');
@@ -181,7 +178,7 @@
     // testAnalysisResult manually here, the path is referenced through the
     // referenced File object to run on Windows:
     testAnalysisResult =
-        await session.getResolvedUnit(file.path) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(file.path) as ResolvedUnitResult;
 
     _createRefactoring('$testPackageLibPath/new_name.dart', oldFile: file.path);
     await _assertSuccessfulRefactoring();
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index 524da05..7ce9136 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -740,7 +740,7 @@
 
   Future<void> test_createChange_MethodElement_potential_inPubCache() async {
     var externalPath = '$packagesRootPath/aaa/lib/lib.dart';
-    newFile(externalPath, content: r'''
+    newFile2(externalPath, r'''
 processObj(p) {
   p.test();
 }
@@ -819,7 +819,7 @@
   }
 
   Future<void> test_createChange_outsideOfProject_declarationInPackage() async {
-    newFile('$workspaceRootPath/aaa/lib/aaa.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/aaa.dart', r'''
 class A {
   void test() {}
 }
@@ -867,7 +867,7 @@
   }
 
   Future<void> test_createChange_outsideOfProject_referenceInPart() async {
-    newFile('/home/part.dart', content: r'''
+    newFile2('/home/part.dart', r'''
 part of test;
 
 void foo(A a) {
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index 16a846e..5d0000b 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -475,12 +475,12 @@
     var a = convertPath('$testPackageLibPath/a.dart');
     var b = convertPath('$testPackageLibPath/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {
   A({test});
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 
 void f() {
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index e0ebb09..34c0d21 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -236,7 +236,7 @@
   }
 
   Future<void> test_checkInitialConditions_outsideOfProject() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {}
 ''');
 
@@ -644,7 +644,7 @@
   }
 
   Future<void> test_createChange_outsideOfProject_referenceInPart() async {
-    newFile('/home/part.dart', content: r'''
+    newFile2('/home/part.dart', r'''
 part of test;
 
 Test test2;
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 0097edb..c80a680 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -31,7 +31,7 @@
   String get testFilePath => '$testPackageLibPath/test.dart';
 
   void addTestFile(String content) {
-    newFile(testFilePath, content: content);
+    newFile2(testFilePath, content);
   }
 
   /// Resolve the file with the [path] into [result].
@@ -62,7 +62,7 @@
   }
 
   Future<void> test_membersOfSubtypes_classByClass_hasMembers() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void a() {}
   void b() {}
@@ -70,14 +70,14 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class B extends A {
   void a() {}
 }
 ''');
 
-    newFile('$testPackageLibPath/c.dart', content: '''
+    newFile2('$testPackageLibPath/c.dart', '''
 import 'a.dart';
 class C extends A {
   void b() {}
@@ -126,7 +126,7 @@
   }
 
   Future<void> test_membersOfSubtypes_noMembers() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void a() {}
   void b() {}
@@ -134,7 +134,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class B extends A {}
 ''');
@@ -147,7 +147,7 @@
   }
 
   Future<void> test_membersOfSubtypes_noSubtypes() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void a() {}
   void b() {}
@@ -155,7 +155,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class B {
   void a() {}
@@ -170,7 +170,7 @@
   }
 
   Future<void> test_membersOfSubtypes_private() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void a() {}
   void _b() {}
@@ -181,7 +181,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class C extends A {
   void a() {}
@@ -219,12 +219,12 @@
   Future<void> test_searchAllSubtypes_acrossDrivers() async {
     var aaaRootPath = _configureForPackage_aaa();
 
-    newFile('$aaaRootPath/lib/a.dart', content: '''
+    newFile2('$aaaRootPath/lib/a.dart', '''
 class T {}
 class A extends T {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'package:aaa/a.dart';
 class B extends A {}
 class C extends B {}
@@ -279,8 +279,8 @@
 int test;
 ''';
 
-    newFile('$testPackageLibPath/a.dart', content: codeA);
-    newFile('$testPackageLibPath/b.dart', content: codeB);
+    newFile2('$testPackageLibPath/a.dart', codeA);
+    newFile2('$testPackageLibPath/b.dart', codeB);
 
     var matches = await searchEngine.searchMemberDeclarations('test');
     expect(matches, hasLength(2));
@@ -299,7 +299,7 @@
   }
 
   Future<void> test_searchMemberReferences() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   int test;
 }
@@ -308,7 +308,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 bar(p) {
   p.test = 1;
@@ -330,7 +330,7 @@
   Future<void> test_searchReferences() async {
     var aaaRootPath = _configureForPackage_aaa();
 
-    newFile('$aaaRootPath/lib/a.dart', content: '''
+    newFile2('$aaaRootPath/lib/a.dart', '''
 class T {}
 T a;
 ''');
@@ -352,11 +352,11 @@
   Future<void> test_searchReferences_discover_owned() async {
     var aaaRootPath = _configureForPackage_aaa();
 
-    var a = newFile('$aaaRootPath/lib/a.dart', content: '''
+    var a = newFile2('$aaaRootPath/lib/a.dart', '''
 int a;
 ''').path;
 
-    var t = newFile('$testPackageLibPath/lib/t.dart', content: '''
+    var t = newFile2('$testPackageLibPath/lib/t.dart', '''
 import 'package:aaa/a.dart';
 int t;
 ''').path;
@@ -497,12 +497,12 @@
   }
 
   Future<void> test_searchTopLevelDeclarations() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {}
 int a;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 class B {}
 get b => 42;
 ''');
@@ -528,13 +528,13 @@
   Future<void> test_searchTopLevelDeclarations_dependentPackage() async {
     var aaaRootPath = _configureForPackage_aaa();
 
-    newFile('$aaaRootPath/lib/a.dart', content: '''
+    newFile2('$aaaRootPath/lib/a.dart', '''
 class A {}
 ''');
 
     // The `package:test` uses the class `A` from the `package:aaa`.
     // So it sees the declaration the element `A`.
-    newFile('$testFilePath', content: '''
+    newFile2(testFilePath, '''
 import 'package:aaa/a.dart';
 class B extends A {}
 ''');
diff --git a/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart b/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart
new file mode 100644
index 0000000..70374d3
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/dart_snippet_producers_test.dart
@@ -0,0 +1,803 @@
+// 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/src/protocol_server.dart';
+import 'package:analysis_server/src/services/snippets/dart/dart_snippet_producers.dart';
+import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../abstract_single_unit.dart';
+import 'test_support.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DartDoWhileLoopSnippetProducerTest);
+    defineReflectiveTests(DartForInLoopSnippetProducerTest);
+    defineReflectiveTests(DartForLoopSnippetProducerTest);
+    defineReflectiveTests(DartIfElseSnippetProducerTest);
+    defineReflectiveTests(DartIfSnippetProducerTest);
+    defineReflectiveTests(DartMainFunctionSnippetProducerTest);
+    defineReflectiveTests(DartSwitchSnippetProducerTest);
+    defineReflectiveTests(DartTryCatchSnippetProducerTest);
+    defineReflectiveTests(DartWhileLoopSnippetProducerTest);
+    defineReflectiveTests(DartClassSnippetProducerTest);
+    defineReflectiveTests(DartTestBlockSnippetProducerTest);
+    defineReflectiveTests(DartTestGroupBlockSnippetProducerTest);
+  });
+}
+
+@reflectiveTest
+class DartClassSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartClassSnippetProducer.newInstance;
+
+  @override
+  String get label => DartClassSnippetProducer.label;
+
+  @override
+  String get prefix => DartClassSnippetProducer.prefix;
+
+  Future<void> test_class() async {
+    var code = r'''
+class A {}
+  
+^
+
+class B {}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+class A {}
+  
+class ClassName {
+  
+}
+
+class B {}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 34);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 20},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartDoWhileLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartDoWhileLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartDoWhileLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartDoWhileLoopSnippetProducer.prefix;
+
+  Future<void> test_do() async {
+    var code = r'''
+void f() {
+  do^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  do {
+    
+  } while (condition);
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 22);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 34},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartForInLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartForInLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartForInLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartForInLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  forin^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  for (var element in collection) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 51);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 22},
+        ],
+        'length': 7,
+        'suggestions': []
+      },
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 10,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartForLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartForLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartForLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartForLoopSnippetProducer.prefix;
+
+  Future<void> test_for() async {
+    var code = r'''
+void f() {
+  for^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  for (var i = 0; i < count; i++) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 51);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 5,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartIfElseSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartIfElseSnippetProducer.newInstance;
+
+  @override
+  String get label => DartIfElseSnippetProducer.label;
+
+  @override
+  String get prefix => DartIfElseSnippetProducer.prefix;
+
+  Future<void> test_ifElse() async {
+    var code = r'''
+void f() {
+  if^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (condition) {
+    
+  } else {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 34);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 17},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_ifElse_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    if^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    if (condition) {
+      
+    } else {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 52);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartIfSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartIfSnippetProducer.newInstance;
+
+  @override
+  String get label => DartIfSnippetProducer.label;
+
+  @override
+  String get prefix => DartIfSnippetProducer.prefix;
+
+  Future<void> test_if() async {
+    var code = r'''
+void f() {
+  if^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (condition) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 34);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 17},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_if_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    if^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    if (condition) {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 52);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 33},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartMainFunctionSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartMainFunctionSnippetProducer.newInstance;
+
+  @override
+  String get label => DartMainFunctionSnippetProducer.label;
+
+  @override
+  String get prefix => DartMainFunctionSnippetProducer.prefix;
+
+  Future<void> test_noParams_testFolder() => testInFile(
+        convertPath('$testPackageLibPath/test/foo_test.dart'),
+        expectArgsParameter: false,
+      );
+
+  Future<void> test_params_binFolder() => testInFile(
+        convertPath('$testPackageLibPath/bin/main.dart'),
+        expectArgsParameter: true,
+      );
+
+  Future<void> test_params_projectRoot() => testInFile(
+        convertPath('$testPackageRootPath/foo.dart'),
+        expectArgsParameter: true,
+      );
+
+  Future<void> test_params_toolFolder() => testInFile(
+        convertPath('$testPackageLibPath/tool/tool.dart'),
+        expectArgsParameter: true,
+      );
+
+  Future<void> test_typedPrefix() => testInFile(
+        testFile,
+        code: '$prefix^',
+        expectArgsParameter: true,
+      );
+
+  Future<void> testInFile(
+    String file, {
+    String code = '^',
+    required bool expectArgsParameter,
+  }) async {
+    testFile = file;
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    final expectedParams = expectArgsParameter ? 'List<String> args' : '';
+    expect(code, '''
+void main($expectedParams) {
+  
+}''');
+    expect(snippet.change.selection!.file, file);
+    expect(snippet.change.selection!.offset, 16 + expectedParams.length);
+    expect(snippet.change.linkedEditGroups, isEmpty);
+  }
+}
+
+abstract class DartSnippetProducerTest extends AbstractSingleUnitTest {
+  SnippetProducerGenerator get generator;
+  String get label;
+  String get prefix;
+
+  /// Override the package root because it usually contains /test/ and some
+  /// snippets behave differently for test files.
+  @override
+  String get testPackageRootPath => '$workspaceRootPath/my_package';
+
+  @override
+  bool get verifyNoTestUnitErrors => false;
+
+  Future<void> expectNotValidSnippet(
+    String code,
+  ) async {
+    await resolveTestCode(withoutMarkers(code));
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: offsetFromMarker(code),
+    );
+
+    final producer = generator(request);
+    expect(await producer.isValid(), isFalse);
+  }
+
+  Future<Snippet> expectValidSnippet(String code) async {
+    await resolveTestCode(withoutMarkers(code));
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: offsetFromMarker(code),
+    );
+
+    final producer = generator(request);
+    expect(await producer.isValid(), isTrue);
+    return producer.compute();
+  }
+}
+
+@reflectiveTest
+class DartSwitchSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartSwitchSnippetProducer.newInstance;
+
+  @override
+  String get label => DartSwitchSnippetProducer.label;
+
+  @override
+  String get prefix => DartSwitchSnippetProducer.prefix;
+
+  Future<void> test_switch() async {
+    var code = r'''
+void f() {
+  sw^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  switch (expression) {
+    case value:
+      
+      break;
+    default:
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 57);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      // expression
+      {
+        'positions': [
+          {'file': testFile, 'offset': 21},
+        ],
+        'length': 10,
+        'suggestions': []
+      },
+      // value
+      {
+        'positions': [
+          {'file': testFile, 'offset': 44},
+        ],
+        'length': 5,
+        'suggestions': []
+      },
+    ]);
+  }
+
+  Future<void> test_switch_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    sw^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    switch (expression) {
+      case value:
+        
+        break;
+      default:
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 77);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      // expression
+      {
+        'positions': [
+          {'file': testFile, 'offset': 37},
+        ],
+        'length': 10,
+        'suggestions': []
+      },
+      // value
+      {
+        'positions': [
+          {'file': testFile, 'offset': 62},
+        ],
+        'length': 5,
+        'suggestions': []
+      },
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartTestBlockSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartTestBlockSnippetProducer.newInstance;
+
+  @override
+  String get label => DartTestBlockSnippetProducer.label;
+
+  @override
+  String get prefix => DartTestBlockSnippetProducer.prefix;
+
+  Future<void> test_inTestFile() async {
+    testFile = convertPath('$testPackageLibPath/test/foo_test.dart');
+    var code = r'''
+void f() {
+  test^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  test('test name', () {
+    
+  });
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 40);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 19},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_notTestFile() async {
+    var code = r'''
+void f() {
+  test^
+}''';
+    await expectNotValidSnippet(code);
+  }
+}
+
+@reflectiveTest
+class DartTestGroupBlockSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartTestGroupBlockSnippetProducer.newInstance;
+
+  @override
+  String get label => DartTestGroupBlockSnippetProducer.label;
+
+  @override
+  String get prefix => DartTestGroupBlockSnippetProducer.prefix;
+
+  Future<void> test_inTestFile() async {
+    testFile = convertPath('$testPackageLibPath/test/foo_test.dart');
+    var code = r'''
+void f() {
+  group^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  group('group name', () {
+    
+  });
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 42);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 20},
+        ],
+        'length': 10,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_notTestFile() async {
+    var code = r'''
+void f() {
+  group^
+}''';
+    await expectNotValidSnippet(code);
+  }
+}
+
+@reflectiveTest
+class DartTryCatchSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartTryCatchSnippetProducer.newInstance;
+
+  @override
+  String get label => DartTryCatchSnippetProducer.label;
+
+  @override
+  String get prefix => DartTryCatchSnippetProducer.prefix;
+
+  Future<void> test_tryCatch() async {
+    var code = r'''
+void f() {
+  tr^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  try {
+    
+  } catch (e) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 23);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 35},
+        ],
+        'length': 1,
+        'suggestions': []
+      }
+    ]);
+  }
+
+  Future<void> test_tryCatch_indentedInsideBlock() async {
+    var code = r'''
+void f() {
+  if (true) {
+    tr^
+  }
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  if (true) {
+    try {
+      
+    } catch (e) {
+      
+    }
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 41);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 55},
+        ],
+        'length': 1,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class DartWhileLoopSnippetProducerTest extends DartSnippetProducerTest {
+  @override
+  final generator = DartWhileLoopSnippetProducer.newInstance;
+
+  @override
+  String get label => DartWhileLoopSnippetProducer.label;
+
+  @override
+  String get prefix => DartWhileLoopSnippetProducer.prefix;
+
+  Future<void> test_while() async {
+    var code = r'''
+void f() {
+  while^
+}''';
+    final snippet = await expectValidSnippet(code);
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
+    expect(snippet.change.edits, hasLength(1));
+    code = withoutMarkers(code);
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+void f() {
+  while (condition) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 37);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 20},
+        ],
+        'length': 9,
+        'suggestions': []
+      }
+    ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/snippets/dart/flutter_snippet_producers_test.dart b/pkg/analysis_server/test/services/snippets/dart/flutter_snippet_producers_test.dart
index 6edf13b..d082f0b 100644
--- a/pkg/analysis_server/test/services/snippets/dart/flutter_snippet_producers_test.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/flutter_snippet_producers_test.dart
@@ -4,12 +4,10 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/services/snippets/dart/flutter_snippet_producers.dart';
-import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../abstract_single_unit.dart';
-import 'test_support.dart';
+import 'dart_snippet_producers_test.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -20,39 +18,7 @@
   });
 }
 
-abstract class FlutterSnippetProducerTest extends AbstractSingleUnitTest {
-  SnippetProducerGenerator get generator;
-  String get label;
-  String get prefix;
-
-  @override
-  bool get verifyNoTestUnitErrors => false;
-
-  Future<void> expectNotValidSnippet(
-    String code,
-  ) async {
-    await resolveTestCode(withoutMarkers(code));
-    final request = DartSnippetRequest(
-      unit: testAnalysisResult,
-      offset: offsetFromMarker(code),
-    );
-
-    final producer = generator(request);
-    expect(await producer.isValid(), isFalse);
-  }
-
-  Future<Snippet> expectValidSnippet(String code) async {
-    await resolveTestCode(withoutMarkers(code));
-    final request = DartSnippetRequest(
-      unit: testAnalysisResult,
-      offset: offsetFromMarker(code),
-    );
-
-    final producer = generator(request);
-    expect(await producer.isValid(), isTrue);
-    return producer.compute();
-  }
-
+abstract class FlutterSnippetProducerTest extends DartSnippetProducerTest {
   /// Checks snippets can produce edits where the imports and snippet will be
   /// inserted at the same location.
   ///
@@ -64,6 +30,7 @@
 
     final snippet = await expectValidSnippet('$prefix^');
     expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
 
     // Main edits replace $prefix.length characters starting at $prefix
     final mainEdit = snippet.change.edits[0].edits[0];
@@ -85,6 +52,7 @@
 $prefix^
 ''');
     expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
 
     // Main edits replace $prefix.length characters starting at $prefix
     final mainEdit = snippet.change.edits[0].edits[0];
@@ -120,8 +88,8 @@
     writeTestPackageConfig(flutter: true);
 
     final snippet = await expectValidSnippet('^');
-    expect(snippet.prefix, 'stful');
-    expect(snippet.label, 'Flutter Stateful Widget');
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
     var code = '';
     expect(snippet.change.edits, hasLength(1));
     snippet.change.edits
@@ -187,8 +155,8 @@
     writeTestPackageConfig(flutter: true);
 
     final snippet = await expectValidSnippet('^');
-    expect(snippet.prefix, 'stanim');
-    expect(snippet.label, 'Flutter Widget with AnimationController');
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
     var code = '';
     expect(snippet.change.edits, hasLength(1));
     snippet.change.edits
@@ -268,8 +236,8 @@
     writeTestPackageConfig(flutter: true);
 
     final snippet = await expectValidSnippet('^');
-    expect(snippet.prefix, 'stless');
-    expect(snippet.label, 'Flutter Stateless Widget');
+    expect(snippet.prefix, prefix);
+    expect(snippet.label, label);
     var code = '';
     expect(snippet.change.edits, hasLength(1));
     snippet.change.edits
diff --git a/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart b/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
index 622d84f..c5ffb8a 100644
--- a/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
@@ -69,7 +69,7 @@
 /// A snippet producer that always returns `false` from [isValid] and throws
 /// if [compute] is called.
 class _NotValidSnippetProducer extends SnippetProducer {
-  _NotValidSnippetProducer(DartSnippetRequest request) : super(request);
+  _NotValidSnippetProducer._(DartSnippetRequest request) : super(request);
 
   @override
   Future<Snippet> compute() {
@@ -83,7 +83,7 @@
   Future<bool> isValid() async => false;
 
   static _NotValidSnippetProducer newInstance(DartSnippetRequest request) =>
-      _NotValidSnippetProducer(request);
+      _NotValidSnippetProducer._(request);
 }
 
 class _TestDartSnippetManager extends DartSnippetManager {
@@ -96,7 +96,7 @@
 /// A snippet producer that always returns `true` from [isValid] and a simple
 /// snippet from [compute].
 class _ValidSnippetProducer extends SnippetProducer {
-  _ValidSnippetProducer(DartSnippetRequest request) : super(request);
+  _ValidSnippetProducer._(DartSnippetRequest request) : super(request);
 
   @override
   Future<Snippet> compute() async {
@@ -112,5 +112,5 @@
   Future<bool> isValid() async => true;
 
   static _ValidSnippetProducer newInstance(DartSnippetRequest request) =>
-      _ValidSnippetProducer(request);
+      _ValidSnippetProducer._(request);
 }
diff --git a/pkg/analysis_server/test/services/snippets/dart/test_all.dart b/pkg/analysis_server/test/services/snippets/dart/test_all.dart
index 907e05a..5686247 100644
--- a/pkg/analysis_server/test/services/snippets/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/test_all.dart
@@ -4,12 +4,14 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'dart_snippet_producers_test.dart' as dart_snippet_producers;
 import 'flutter_snippet_producers_test.dart' as flutter_snippet_producers;
 import 'snippet_manager_test.dart' as snippet_manager;
 import 'snippet_request_test.dart' as snippet_request;
 
 void main() {
   defineReflectiveSuite(() {
+    dart_snippet_producers.main();
     flutter_snippet_producers.main();
     snippet_manager.main();
     snippet_request.main();
diff --git a/pkg/analysis_server/test/src/cider/assists_test.dart b/pkg/analysis_server/test/src/cider/assists_test.dart
index 0dfc1321..d4182cb 100644
--- a/pkg/analysis_server/test/src/cider/assists_test.dart
+++ b/pkg/analysis_server/test/src/cider/assists_test.dart
@@ -132,7 +132,7 @@
     var location = lineInfo.getLocation(offset);
 
     content = content.substring(0, offset) + content.substring(offset + 1);
-    newFile(testPath, content: content);
+    newFile2(testPath, content);
 
     _correctionContext = _CorrectionContext(
       content,
diff --git a/pkg/analysis_server/test/src/cider/cider_service.dart b/pkg/analysis_server/test/src/cider/cider_service.dart
index 32aafc2..0e40f53 100644
--- a/pkg/analysis_server/test/src/cider/cider_service.dart
+++ b/pkg/analysis_server/test/src/cider/cider_service.dart
@@ -51,8 +51,8 @@
 
     logger = PerformanceLog(logBuffer);
 
-    newFile('/workspace/WORKSPACE');
-    newFile('/workspace/dart/test/BUILD');
+    newFile2('/workspace/WORKSPACE', '');
+    newFile2('/workspace/dart/test/BUILD', '');
     createFileResolver();
   }
 
diff --git a/pkg/analysis_server/test/src/cider/completion_test.dart b/pkg/analysis_server/test/src/cider/completion_test.dart
index 7a50af7..06ee178 100644
--- a/pkg/analysis_server/test/src/cider/completion_test.dart
+++ b/pkg/analysis_server/test/src/cider/completion_test.dart
@@ -112,7 +112,7 @@
 
   Future<void> test_compute_updateImportedLibrary() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
@@ -132,7 +132,7 @@
     _assertHasClass(text: 'A');
 
     // Update the imported library, has 'B', but not 'A'.
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class B {}
 ''');
     _createFileResolver();
@@ -144,7 +144,7 @@
 
   Future<void> test_compute_updateImports() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
@@ -166,7 +166,7 @@
   }
 
   Future<void> test_compute_uriContributor_disabled() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: '');
+    newFile2('/workspace/dart/test/lib/a.dart', '');
     await _compute(r'''
 import '^';
 ''');
@@ -474,7 +474,7 @@
   }
 
   Future<void> test_limitedResolution_hasPart() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 class A {}
 ''');
 
@@ -488,7 +488,7 @@
   }
 
   Future<void> test_limitedResolution_inPart_partOfName() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 library my_lib;
 part 'test.dart';
 class A {}
@@ -504,7 +504,7 @@
   }
 
   Future<void> test_limitedResolution_inPart_partOfUri() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 part 'test.dart';
 class A {}
 ''');
@@ -599,12 +599,12 @@
 
   Future<void> test_warmUp_cachesImportedLibraries() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 ''');
 
@@ -885,7 +885,7 @@
     var location = lineInfo.getLocation(offset);
 
     content = content.substring(0, offset) + content.substring(offset + 1);
-    newFile(testPath, content: content);
+    newFile2(testPath, content);
 
     return _CompletionContext(
       content,
diff --git a/pkg/analysis_server/test/src/cider/document_symbols_test.dart b/pkg/analysis_server/test/src/cider/document_symbols_test.dart
new file mode 100644
index 0000000..84563f3
--- /dev/null
+++ b/pkg/analysis_server/test/src/cider/document_symbols_test.dart
@@ -0,0 +1,299 @@
+// 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/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/src/cider/document_symbols.dart';
+import 'package:test/expect.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../utilities/mock_packages.dart';
+import 'cider_service.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(CiderDocumentSymbolsComputerTest);
+  });
+}
+
+@reflectiveTest
+class CiderDocumentSymbolsComputerTest extends CiderServiceTest {
+  void test_class() async {
+    var unitOutline = await _compute('''
+abstract class A<K, V> {
+  int fa, fb;
+  String fc;
+  A(int i, String s);
+  A.name(num p);
+  A._privateName(num p);
+  static String ma(int pa) => null;
+  _mb(int pb);
+  R mc<R, P>(P p) {}
+  String get propA => null;
+  set propB(int v) {}
+}
+class B {
+  B(int p);
+}
+String fa(int pa) => null;
+R fb<R, P>(P p) {}
+''');
+
+    expect(unitOutline, hasLength(4));
+    // A
+    {
+      var outline_A = unitOutline[0];
+      _expect(outline_A,
+          kind: SymbolKind.Class,
+          name: 'A',
+          start: Position(line: 0, character: 0),
+          end: Position(line: 11, character: 1));
+      // A children
+      var outlines_A = outline_A.children!;
+      expect(outlines_A, hasLength(11));
+
+      _expect(outlines_A[0], kind: SymbolKind.Field, name: 'fa');
+      _expect(outlines_A[1], kind: SymbolKind.Field, name: 'fb');
+      _expect(outlines_A[2], kind: SymbolKind.Field, name: 'fc');
+
+      _expect(outlines_A[3],
+          kind: SymbolKind.Constructor,
+          name: 'A',
+          detail: '(int i, String s)',
+          start: Position(line: 3, character: 2),
+          end: Position(line: 3, character: 21));
+
+      _expect(outlines_A[4],
+          kind: SymbolKind.Constructor,
+          name: 'A.name',
+          start: Position(line: 4, character: 2),
+          end: Position(line: 4, character: 16),
+          detail: '(num p)');
+
+      _expect(outlines_A[5],
+          kind: SymbolKind.Constructor,
+          name: 'A._privateName',
+          start: Position(line: 5, character: 2),
+          end: Position(line: 5, character: 24),
+          detail: '(num p)');
+
+      _expect(outlines_A[6],
+          kind: SymbolKind.Method,
+          name: 'ma',
+          start: Position(line: 6, character: 2),
+          end: Position(line: 6, character: 35),
+          detail: '(int pa)');
+
+      _expect(outlines_A[7],
+          kind: SymbolKind.Method,
+          name: '_mb',
+          start: Position(line: 7, character: 2),
+          end: Position(line: 7, character: 14),
+          detail: '(int pb)');
+
+      _expect(outlines_A[8],
+          kind: SymbolKind.Method,
+          name: 'mc',
+          start: Position(line: 8, character: 2),
+          end: Position(line: 8, character: 20),
+          detail: '(P p)');
+
+      _expect(outlines_A[9],
+          kind: SymbolKind.Property,
+          name: 'propA',
+          start: Position(line: 9, character: 2),
+          end: Position(line: 9, character: 27));
+
+      _expect(outlines_A[10],
+          kind: SymbolKind.Property,
+          name: 'propB',
+          start: Position(line: 10, character: 2),
+          end: Position(line: 10, character: 21),
+          detail: '(int v)');
+      // // B
+      var outline_B = unitOutline[1];
+      _expect(outline_B,
+          kind: SymbolKind.Class,
+          name: 'B',
+          start: Position(line: 12, character: 0),
+          end: Position(line: 14, character: 1));
+
+      // B children
+      var outlines_B = outline_B.children!;
+      expect(outlines_B, hasLength(1));
+
+      _expect(outlines_B[0],
+          kind: SymbolKind.Constructor,
+          name: 'B',
+          start: Position(line: 13, character: 2),
+          end: Position(line: 13, character: 11),
+          detail: '(int p)');
+
+      _expect(unitOutline[2],
+          kind: SymbolKind.Function,
+          name: 'fa',
+          start: Position(line: 15, character: 0),
+          end: Position(line: 15, character: 26),
+          detail: '(int pa)');
+
+      _expect(unitOutline[3],
+          kind: SymbolKind.Function,
+          name: 'fb',
+          start: Position(line: 16, character: 0),
+          end: Position(line: 16, character: 18),
+          detail: '(P p)');
+    }
+  }
+
+  void test_isTest_isTestGroup() async {
+    BazelMockPackages.instance.addMeta(resourceProvider);
+
+    var outline = await _compute('''
+import 'package:meta/meta.dart';
+
+@isTestGroup
+void myGroup(name, body()) {}
+
+@isTest
+void myTest(name) {}
+
+void f() {
+  myGroup('group1', () {
+    myGroup('group1_1', () {
+      myTest('test1_1_1');
+      myTest('test1_1_2');
+    });
+    myGroup('group1_2', () {
+      myTest('test1_2_1');
+    });
+  });
+  myGroup('group2', () {
+    myTest('test2_1');
+    myTest('test2_2');
+  });
+}
+''');
+    // outline
+    expect(outline, hasLength(3));
+    // f
+    var f_outline = outline[2];
+    _expect(
+      f_outline,
+      kind: SymbolKind.Function,
+      name: 'f',
+      start: Position(line: 8, character: 0),
+      end: Position(line: 22, character: 1),
+      detail: '()',
+    );
+    var f_children = f_outline.children!;
+    expect(f_children, hasLength(2));
+    // group1
+    var group1_outline = f_children[0];
+    _expect(
+      group1_outline,
+      kind: SymbolKind.Method,
+      name: 'myGroup("group1")',
+      start: Position(line: 9, character: 2),
+      end: Position(line: 17, character: 4),
+    );
+    var group1_children = group1_outline.children!;
+    expect(group1_children, hasLength(2));
+    // group1_1
+    var group1_1_outline = group1_children[0];
+    _expect(group1_1_outline,
+        kind: SymbolKind.Method,
+        name: 'myGroup("group1_1")',
+        start: Position(line: 10, character: 4),
+        end: Position(line: 13, character: 6));
+    var group1_1_children = group1_1_outline.children!;
+    expect(group1_1_children, hasLength(2));
+    // test1_1_1
+    var test1_1_1_outline = group1_1_children[0];
+    _expect(test1_1_1_outline,
+        kind: SymbolKind.Method,
+        name: 'myTest("test1_1_1")',
+        start: Position(line: 11, character: 6),
+        end: Position(line: 11, character: 25));
+    // test1_1_1
+    var test1_1_2_outline = group1_1_children[1];
+    _expect(test1_1_2_outline,
+        kind: SymbolKind.Method,
+        name: 'myTest("test1_1_2")',
+        start: Position(line: 12, character: 6),
+        end: Position(line: 12, character: 25));
+    // group1_2
+    var group1_2_outline = group1_children[1];
+    _expect(
+      group1_2_outline,
+      kind: SymbolKind.Method,
+      name: 'myGroup("group1_2")',
+      start: Position(line: 14, character: 4),
+      end: Position(line: 16, character: 6),
+    );
+    var group1_2_children = group1_2_outline.children!;
+    expect(group1_2_children, hasLength(1));
+    // test2_1
+    var test1_2_1_outline = group1_2_children[0];
+    _expect(test1_2_1_outline,
+        kind: SymbolKind.Method,
+        name: 'myTest("test1_2_1")',
+        start: Position(line: 15, character: 6),
+        end: Position(line: 15, character: 25));
+    // group2
+    var group2_outline = f_children[1];
+    _expect(
+      group2_outline,
+      kind: SymbolKind.Method,
+      name: 'myGroup("group2")',
+      start: Position(line: 18, character: 2),
+      end: Position(line: 21, character: 4),
+    );
+    var group2_children = group2_outline.children!;
+    expect(group2_children, hasLength(2));
+    // test2_1
+    var test2_1_outline = group2_children[0];
+    _expect(test2_1_outline,
+        kind: SymbolKind.Method,
+        name: 'myTest("test2_1")',
+        start: Position(line: 19, character: 4),
+        end: Position(line: 19, character: 21));
+    // test2_2
+    var test2_2_outline = group2_children[1];
+    _expect(
+      test2_2_outline,
+      kind: SymbolKind.Method,
+      name: 'myTest("test2_2")',
+      start: Position(line: 20, character: 4),
+      end: Position(line: 20, character: 21),
+    );
+  }
+
+  Future<List<DocumentSymbol>> _compute(String content) async {
+    newFile2(testPath, content);
+    return CiderDocumentSymbolsComputer(
+      fileResolver,
+    ).compute2(convertPath(testPath));
+  }
+
+  void _expect(DocumentSymbol outline,
+      {SymbolKind? kind,
+      String? name,
+      Position? start,
+      Position? end,
+      String? detail}) {
+    if (kind != null) {
+      expect(outline.kind, kind);
+    }
+    if (name != null) {
+      expect(outline.name, name);
+    }
+    if (start != null) {
+      var range = outline.range;
+      expect(range.start, start);
+      expect(range.end, end);
+    }
+    if (detail != null) {
+      expect(outline.detail, detail);
+    }
+  }
+}
diff --git a/pkg/analysis_server/test/src/cider/fixes_test.dart b/pkg/analysis_server/test/src/cider/fixes_test.dart
index 63179b7..0d08766 100644
--- a/pkg/analysis_server/test/src/cider/fixes_test.dart
+++ b/pkg/analysis_server/test/src/cider/fixes_test.dart
@@ -73,10 +73,10 @@
   }
 
   Future<void> test_importLibrary_withClass() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 class Test {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -90,10 +90,10 @@
   }
 
   Future<void> test_importLibrary_withEnum() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 enum Test {a, b, c}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -107,12 +107,12 @@
   }
 
   Future<void> test_importLibrary_withExtension() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 extension E on int {
   void foo() {}
 }
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
@@ -130,10 +130,10 @@
   }
 
   Future<void> test_importLibrary_withFunction() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 void foo() {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
@@ -151,10 +151,10 @@
   }
 
   Future<void> test_importLibrary_withMixin() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 mixin Test {}
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f(Test a) {}^
@@ -168,10 +168,10 @@
   }
 
   Future<void> test_importLibrary_withTopLevelVariable() async {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 0;
 ''');
-    fileResolver.resolve(path: a.path);
+    await fileResolver.resolve2(path: a.path);
 
     await _compute(r'''
 void f() {
@@ -230,7 +230,7 @@
     var location = lineInfo.getLocation(offset);
 
     content = content.substring(0, offset) + content.substring(offset + 1);
-    newFile(testPath, content: content);
+    newFile2(testPath, content);
 
     _correctionContext = _CorrectionContext(
       content,
diff --git a/pkg/analysis_server/test/src/cider/rename_test.dart b/pkg/analysis_server/test/src/cider/rename_test.dart
index 59f686d..ac912a4 100644
--- a/pkg/analysis_server/test/src/cider/rename_test.dart
+++ b/pkg/analysis_server/test/src/cider/rename_test.dart
@@ -27,8 +27,8 @@
     BazelMockPackages.instance.addFlutter(resourceProvider);
   }
 
-  void test_canRename_class() {
-    var refactor = _compute(r'''
+  void test_canRename_class() async {
+    var refactor = await _compute(r'''
 class ^Old {}
 }
 ''');
@@ -37,8 +37,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_field() {
-    var refactor = _compute(r'''
+  void test_canRename_field() async {
+    var refactor = await _compute(r'''
 class A {
  int ^bar;
  void foo() {
@@ -51,8 +51,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_field_static_private() {
-    var refactor = _compute(r'''
+  void test_canRename_field_static_private() async {
+    var refactor = await _compute(r'''
 class A{
   static const ^_val = 1234;
 }
@@ -63,8 +63,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_function() {
-    var refactor = _compute(r'''
+  void test_canRename_function() async {
+    var refactor = await _compute(r'''
 void ^foo() {
 }
 ''');
@@ -73,8 +73,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_label() {
-    var refactor = _compute(r'''
+  void test_canRename_label() async {
+    var refactor = await _compute(r'''
 main() {
   myLabel:
   while (true) {
@@ -89,8 +89,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_local() {
-    var refactor = _compute(r'''
+  void test_canRename_local() async {
+    var refactor = await _compute(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -100,8 +100,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_method() {
-    var refactor = _compute(r'''
+  void test_canRename_method() async {
+    var refactor = await _compute(r'''
 extension E on int {
   void ^foo() {}
 }
@@ -111,8 +111,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_canRename_operator() {
-    var refactor = _compute(r'''
+  void test_canRename_operator() async {
+    var refactor = await _compute(r'''
 class A{
   A operator ^+(A other) => this;
 }
@@ -121,8 +121,8 @@
     expect(refactor, isNull);
   }
 
-  void test_canRename_parameter() {
-    var refactor = _compute(r'''
+  void test_canRename_parameter() async {
+    var refactor = await _compute(r'''
 void foo(int ^bar) {
   var a = bar + 1;
 }
@@ -133,8 +133,8 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
-  void test_checkName_class() {
-    var result = _checkName(r'''
+  void test_checkName_class() async {
+    var result = await _checkName(r'''
 class ^Old {}
 ''', 'New');
 
@@ -142,8 +142,8 @@
     expect(result.oldName, 'Old');
   }
 
-  void test_checkName_function() {
-    var result = _checkName(r'''
+  void test_checkName_function() async {
+    var result = await _checkName(r'''
 int ^foo() => 2;
 ''', 'bar');
 
@@ -151,8 +151,8 @@
     expect(result.oldName, 'foo');
   }
 
-  void test_checkName_local() {
-    var result = _checkName(r'''
+  void test_checkName_local() async {
+    var result = await _checkName(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -162,8 +162,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_local_invalid() {
-    var result = _checkName(r'''
+  void test_checkName_local_invalid() async {
+    var result = await _checkName(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -173,8 +173,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_parameter() {
-    var result = _checkName(r'''
+  void test_checkName_parameter() async {
+    var result = await _checkName(r'''
 void foo(String ^a) {
   var b = a + 1;
 }
@@ -184,8 +184,8 @@
     expect(result.oldName, 'a');
   }
 
-  void test_checkName_topLevelVariable() {
-    var result = _checkName(r'''
+  void test_checkName_topLevelVariable() async {
+    var result = await _checkName(r'''
 var ^foo;
 ''', 'bar');
 
@@ -193,8 +193,8 @@
     expect(result.oldName, 'foo');
   }
 
-  void test_checkName_TypeAlias() {
-    var result = _checkName(r'''
+  void test_checkName_TypeAlias() async {
+    var result = await _checkName(r'''
 typedef ^Foo = void Function();
 ''', 'Bar');
 
@@ -202,8 +202,8 @@
     expect(result.oldName, 'Foo');
   }
 
-  void test_rename_class() {
-    var result = _rename(r'''
+  void test_rename_class() async {
+    var result = await _rename(r'''
 class ^Old implements Other {
   Old() {}
   Old.named() {}
@@ -234,8 +234,8 @@
     ]);
   }
 
-  void test_rename_class_flutterWidget() {
-    var result = _rename(r'''
+  void test_rename_class_flutterWidget() async {
+    var result = await _rename(r'''
 import 'package:flutter/material.dart';
 
 class ^TestPage extends StatefulWidget {
@@ -268,8 +268,8 @@
     ]);
   }
 
-  void test_rename_field() {
-    var result = _rename(r'''
+  void test_rename_field() async {
+    var result = await _rename(r'''
 class A{
   int get ^x => 5;
 }
@@ -286,8 +286,8 @@
     ]);
   }
 
-  void test_rename_field_static_private() {
-    var result = _rename(r'''
+  void test_rename_field_static_private() async {
+    var result = await _rename(r'''
 class A{
   static const ^_val = 1234;
 }
@@ -304,8 +304,8 @@
     ]);
   }
 
-  void test_rename_function() {
-    var result = _rename(r'''
+  void test_rename_function() async {
+    var result = await _rename(r'''
 test() {}
 ^foo() {}
 void f() {
@@ -324,12 +324,12 @@
     ]);
   }
 
-  void test_rename_function_imported() {
-    var a = newFile('/workspace/dart/test/lib/a.dart', content: r'''
+  void test_rename_function_imported() async {
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
 foo() {}
 ''');
-    fileResolver.resolve(path: a.path);
-    var result = _rename(r'''
+    await fileResolver.resolve2(path: a.path);
+    var result = await _rename(r'''
 import 'a.dart';
 void f() {
   ^foo();
@@ -345,8 +345,8 @@
     ]);
   }
 
-  void test_rename_local() {
-    var result = _rename(r'''
+  void test_rename_local() async {
+    var result = await _rename(r'''
 void foo() {
   var ^a = 0; var b = a + 1;
 }
@@ -359,8 +359,31 @@
             [CharacterLocation(2, 7), CharacterLocation(2, 22)]));
   }
 
-  void test_rename_parameter() {
-    var result = _rename(r'''
+  void test_rename_method_imported() async {
+    var a = newFile2('/workspace/dart/test/lib/a.dart', r'''
+class A {
+  foo() {}
+}
+''');
+    await fileResolver.resolve2(path: a.path);
+    var result = await _rename(r'''
+import 'a.dart';
+void f() {
+  var a = A().^foo();
+}
+''', 'bar');
+    expect(result!.matches.length, 2);
+    expect(result.matches, [
+      CiderSearchMatch(convertPath('/workspace/dart/test/lib/a.dart'), [
+        CharacterLocation(2, 3),
+      ]),
+      CiderSearchMatch(convertPath('/workspace/dart/test/lib/test.dart'),
+          [CharacterLocation(3, 15)])
+    ]);
+  }
+
+  void test_rename_parameter() async {
+    var result = await _rename(r'''
 void foo(String ^a) {
   var b = a + 1;
 }
@@ -369,8 +392,8 @@
     expect(result.checkName.oldName, 'a');
   }
 
-  void test_rename_propertyAccessor() {
-    var result = _rename(r'''
+  void test_rename_propertyAccessor() async {
+    var result = await _rename(r'''
 get foo {}
 set foo(x) {}
 void f() {
@@ -389,8 +412,8 @@
     ]);
   }
 
-  void test_rename_typeAlias_functionType() {
-    var result = _rename(r'''
+  void test_rename_typeAlias_functionType() async {
+    var result = await _rename(r'''
 typedef ^F = void Function();
 void f(F a) {}
 ''', 'bar');
@@ -401,45 +424,42 @@
     ]);
   }
 
-  CheckNameResponse? _checkName(String content, String newName) {
+  Future<CheckNameResponse?> _checkName(String content, String newName) async {
     _updateFile(content);
 
-    return CiderRenameComputer(
+    var canRename = await CiderRenameComputer(
       fileResolver,
-    )
-        .canRename(
-          convertPath(testPath),
-          _correctionContext.line,
-          _correctionContext.character,
-        )
-        ?.checkNewName(newName);
+    ).canRename2(
+      convertPath(testPath),
+      _correctionContext.line,
+      _correctionContext.character,
+    );
+    return canRename?.checkNewName(newName);
   }
 
-  CanRenameResponse? _compute(String content) {
+  Future<CanRenameResponse?> _compute(String content) async {
     _updateFile(content);
 
     return CiderRenameComputer(
       fileResolver,
-    ).canRename(
+    ).canRename2(
       convertPath(testPath),
       _correctionContext.line,
       _correctionContext.character,
     );
   }
 
-  RenameResponse? _rename(String content, String newName) {
+  Future<RenameResponse?> _rename(String content, String newName) async {
     _updateFile(content);
 
-    return CiderRenameComputer(
+    var canRename = await CiderRenameComputer(
       fileResolver,
-    )
-        .canRename(
-          convertPath(testPath),
-          _correctionContext.line,
-          _correctionContext.character,
-        )
-        ?.checkNewName(newName)
-        ?.computeRenameRanges();
+    ).canRename2(
+      convertPath(testPath),
+      _correctionContext.line,
+      _correctionContext.character,
+    );
+    return canRename?.checkNewName(newName)?.computeRenameRanges2();
   }
 
   void _updateFile(String content) {
@@ -451,7 +471,7 @@
     var location = lineInfo.getLocation(offset);
 
     content = content.substring(0, offset) + content.substring(offset + 1);
-    newFile(testPath, content: content);
+    newFile2(testPath, content);
 
     _correctionContext = _CorrectionContext(
       content,
diff --git a/pkg/analysis_server/test/src/cider/signature_help_test.dart b/pkg/analysis_server/test/src/cider/signature_help_test.dart
index 2b99d72..b4ea6aa 100644
--- a/pkg/analysis_server/test/src/cider/signature_help_test.dart
+++ b/pkg/analysis_server/test/src/cider/signature_help_test.dart
@@ -21,8 +21,8 @@
 class CiderSignatureHelpComputerTest extends CiderServiceTest {
   late _CorrectionContext _correctionContext;
 
-  void test_noDefaultConstructor() {
-    var result = _compute('''
+  void test_noDefaultConstructor() async {
+    var result = await _compute('''
 class A {
   A._();
 }
@@ -33,7 +33,7 @@
     expect(result, null);
   }
 
-  void test_params_multipleNamed() {
+  void test_params_multipleNamed() async {
     final content = '''
 /// Does foo.
 foo(String s, {bool b = true, bool a}) {
@@ -42,7 +42,7 @@
 ''';
     final expectedLabel = 'foo(String s, {bool b = true, bool a})';
 
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -54,7 +54,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_params_multipleOptional() {
+  void test_params_multipleOptional() async {
     final content = '''
 /// Does foo.
 foo(String s, [bool b = true, bool a]) {
@@ -63,7 +63,7 @@
 ''';
 
     final expectedLabel = 'foo(String s, [bool b = true, bool a])';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -75,7 +75,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_retrigger_validLocation() {
+  void test_retrigger_validLocation() async {
     final content = '''
 /// Does foo.
 foo(String s, {bool b = true, bool a}) {
@@ -84,7 +84,7 @@
 ''';
     final expectedLabel = 'foo(String s, {bool b = true, bool a})';
 
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -96,7 +96,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_simple() {
+  void test_simple() async {
     final content = '''
 /// Does foo.
 foo(String s, int i) {
@@ -104,7 +104,7 @@
 }
 ''';
     final expectedLabel = 'foo(String s, int i)';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -115,7 +115,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_triggerCharacter_validLocation() {
+  void test_triggerCharacter_validLocation() async {
     final content = '''
 /// Does foo.
 foo(String s, int i) {
@@ -124,7 +124,7 @@
 ''';
 
     final expectedLabel = 'foo(String s, int i)';
-    testSignature(
+    await testSignature(
         content,
         expectedLabel,
         'Does foo.',
@@ -135,7 +135,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_typeParams_class() {
+  void test_typeParams_class() async {
     final content = '''
 /// My Foo.
 class Foo<T1, T2 extends String> {}
@@ -143,7 +143,7 @@
 class Bar extends Foo<^> {}
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'class Foo<T1, T2 extends String>',
         'My Foo.',
@@ -154,7 +154,7 @@
         CharacterLocation(4, 23));
   }
 
-  void test_typeParams_function() {
+  void test_typeParams_function() async {
     final content = '''
 /// My Foo.
 void foo<T1, T2 extends String>() {
@@ -162,7 +162,7 @@
 }
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'void foo<T1, T2 extends String>()',
         'My Foo.',
@@ -173,7 +173,7 @@
         CharacterLocation(3, 7));
   }
 
-  void test_typeParams_method() {
+  void test_typeParams_method() async {
     final content = '''
 class Foo {
   /// My Foo.
@@ -183,7 +183,7 @@
 }
 ''';
 
-    testSignature(
+    await testSignature(
         content,
         'void foo<T1, T2 extends String>()',
         'My Foo.',
@@ -194,13 +194,13 @@
         CharacterLocation(4, 9));
   }
 
-  void testSignature(
+  Future<void> testSignature(
       String content,
       String expectedLabel,
       String expectedDoc,
       List<ParameterInformation> expectedParameters,
-      CharacterLocation leftParenLocation) {
-    var result = _compute(content);
+      CharacterLocation leftParenLocation) async {
+    var result = await _compute(content);
     var signature = result!.signatureHelp.signatures.first;
     final expected =
         MarkupContent(kind: MarkupKind.Markdown, value: expectedDoc);
@@ -211,12 +211,12 @@
     expect(result.callStart == leftParenLocation, isTrue);
   }
 
-  SignatureHelpResponse? _compute(String content) {
+  Future<SignatureHelpResponse?> _compute(String content) async {
     _updateFile(content);
 
     return CiderSignatureHelpComputer(
       fileResolver,
-    ).compute(
+    ).compute2(
       convertPath(testPath),
       _correctionContext.line,
       _correctionContext.character,
@@ -232,7 +232,7 @@
     var location = lineInfo.getLocation(offset);
 
     content = content.substring(0, offset) + content.substring(offset + 1);
-    newFile(testPath, content: content);
+    newFile2(testPath, content);
 
     _correctionContext = _CorrectionContext(
       content,
diff --git a/pkg/analysis_server/test/src/cider/test_all.dart b/pkg/analysis_server/test/src/cider/test_all.dart
index 2220710..3f7985f 100644
--- a/pkg/analysis_server/test/src/cider/test_all.dart
+++ b/pkg/analysis_server/test/src/cider/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'assists_test.dart' as assists;
 import 'completion_test.dart' as completion;
+import 'document_symbols_test.dart' as symbols;
 import 'fixes_test.dart' as fixes;
 import 'rename_test.dart' as rename;
 import 'signature_help_test.dart' as signature;
@@ -14,6 +15,7 @@
   defineReflectiveSuite(() {
     assists.main();
     completion.main();
+    symbols.main();
     fixes.main();
     rename.main();
     signature.main();
diff --git a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
index 3c99d77..307a91f 100644
--- a/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/closing_labels_computer_test.dart
@@ -396,9 +396,9 @@
   }
 
   Future<List<ClosingLabel>> _computeElements(String sourceContent) async {
-    newFile(sourcePath, content: sourceContent);
+    newFile2(sourcePath, sourceContent);
     var result =
-        await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
     var computer = DartUnitClosingLabelsComputer(result.lineInfo, result.unit);
     return computer.compute();
   }
diff --git a/pkg/analysis_server/test/src/computer/color_computer_test.dart b/pkg/analysis_server/test/src/computer/color_computer_test.dart
index 1178812..2083610 100644
--- a/pkg/analysis_server/test/src/computer/color_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/color_computer_test.dart
@@ -127,15 +127,15 @@
     dartCode = _withCommonImports(dartCode);
     otherCode = otherCode != null ? _withCommonImports(otherCode) : null;
 
-    newFile(testPath, content: dartCode);
+    newFile2(testPath, dartCode);
     if (otherCode != null) {
-      newFile(otherPath, content: otherCode);
-      final otherResult =
-          await session.getResolvedUnit(otherPath) as ResolvedUnitResult;
+      newFile2(otherPath, otherCode);
+      final otherResult = await (await session).getResolvedUnit(otherPath)
+          as ResolvedUnitResult;
       expectNoErrors(otherResult);
     }
     final result =
-        await session.getResolvedUnit(testPath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(testPath) as ResolvedUnitResult;
     expectNoErrors(result);
 
     computer = ColorComputer(result);
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index bba4d0b..09c90df 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -580,9 +580,9 @@
   }
 
   Future<List<FoldingRegion>> _computeRegions(String sourceContent) async {
-    newFile(sourcePath, content: sourceContent);
+    newFile2(sourcePath, sourceContent);
     var result =
-        await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
     var computer = DartUnitFoldingComputer(result.lineInfo, result.unit);
     return computer.compute();
   }
diff --git a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
index d1a90d3..a38a867 100644
--- a/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/highlights_computer_test.dart
@@ -112,9 +112,9 @@
     bool hasErrors = false,
   }) async {
     this.content = content;
-    newFile(sourcePath, content: content);
+    newFile2(sourcePath, content);
     var result =
-        await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
 
     if (hasErrors) {
       expect(result.errors, isNotEmpty);
diff --git a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
index 133ab24..9e66300 100644
--- a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
@@ -49,8 +49,9 @@
 
   Future<void> createBuilder(String content) async {
     originalContent = content;
-    newFile(path, content: content);
-    var result = await session.getResolvedUnit(path) as ResolvedUnitResult;
+    newFile2(path, content);
+    var result =
+        await (await session).getResolvedUnit(path) as ResolvedUnitResult;
     computer = ImportElementsComputer(resourceProvider, result);
   }
 
@@ -80,7 +81,7 @@
   }
 
   Future<void> test_createEdits_addImport_noPrefix() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -100,7 +101,7 @@
   }
 
   Future<void> test_createEdits_addImport_prefix() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -120,7 +121,7 @@
   }
 
   Future<void> test_createEdits_addShow_multipleNames() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -141,7 +142,7 @@
   }
 
   Future<void> test_createEdits_addShow_removeHide() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -160,7 +161,7 @@
   }
 
   Future<void> test_createEdits_addShow_singleName_noPrefix() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -179,7 +180,7 @@
   }
 
   Future<void> test_createEdits_addShow_singleName_prefix() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -200,7 +201,7 @@
   }
 
   Future<void> test_createEdits_alreadyImported_noCombinators() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -217,7 +218,7 @@
   }
 
   Future<void> test_createEdits_alreadyImported_withPrefix() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -234,7 +235,7 @@
   }
 
   Future<void> test_createEdits_alreadyImported_withShow() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -263,7 +264,7 @@
   }
 
   Future<void> test_createEdits_invalidUri() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -289,7 +290,7 @@
   }
 
   Future<void> test_createEdits_removeHide_firstInCombinator() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -308,7 +309,7 @@
   }
 
   Future<void> test_createEdits_removeHide_lastInCombinator() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -327,7 +328,7 @@
   }
 
   Future<void> test_createEdits_removeHide_middleInCombinator() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -346,7 +347,7 @@
   }
 
   Future<void> test_createEdits_removeHide_multipleCombinators() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -365,7 +366,7 @@
   }
 
   Future<void> test_createEdits_removeHide_multipleNames() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -384,7 +385,7 @@
   }
 
   Future<void> test_createEdits_removeHideCombinator_first() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -403,7 +404,7 @@
   }
 
   Future<void> test_createEdits_removeHideCombinator_last() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -422,7 +423,7 @@
   }
 
   Future<void> test_createEdits_removeHideCombinator_middle() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -441,7 +442,7 @@
   }
 
   Future<void> test_createEdits_removeHideCombinator_only() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -460,7 +461,7 @@
   }
 
   Future<void> test_createEdits_removeHideCombinator_only_multiple() async {
-    var fooFile = newFile('$workspaceRootPath/pkg/lib/foo.dart');
+    var fooFile = newFile2('$workspaceRootPath/pkg/lib/foo.dart', '');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
diff --git a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
index cf1cf9a..c9f45ba 100644
--- a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
@@ -223,7 +223,7 @@
 
   Future<void> test_package_multipleInSame() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 class A {
   static String a = '';
 }
@@ -252,7 +252,7 @@
 
   Future<void> test_package_noPrefix() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 class Foo {
   static String first = '';
 }
@@ -278,7 +278,7 @@
 
   Future<void> test_package_prefix_selected_class() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 class Foo {
   static String first = '';
 }
@@ -304,7 +304,7 @@
 
   Future<void> test_package_prefix_selected_function() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 String foo() => '';
 ''');
 
@@ -328,7 +328,7 @@
 
   Future<void> test_package_prefix_selected_getter() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 String foo = '';
 ''');
 
@@ -352,7 +352,7 @@
 
   Future<void> test_package_prefix_selected_setter() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 String foo = '';
 ''');
 
@@ -376,7 +376,7 @@
 
   Future<void> test_package_prefix_unselected() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 class Foo {
   static String first = '';
 }
@@ -402,7 +402,7 @@
 
   Future<void> test_package_prefixedAndNot() async {
     var fooPath = '$workspaceRootPath/foo/lib/foo.dart';
-    newFile(fooPath, content: '''
+    newFile2(fooPath, '''
 class Foo {
   static String first = '';
   static String second = '';
@@ -469,9 +469,9 @@
 
   Future<void> _computeElements(String content, String selection) async {
     // TODO(brianwilkerson) Automatically extract the selection from the content.
-    newFile(sourcePath, content: content);
+    newFile2(sourcePath, content);
     var result =
-        await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
     var computer = ImportedElementsComputer(
         result.unit, content.indexOf(selection), selection.length);
     importedElements = computer.compute();
diff --git a/pkg/analysis_server/test/src/computer/outline_computer_test.dart b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
index 79818f0..25fdf23 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -31,9 +31,9 @@
 
   Future<Outline> _computeOutline(String code) async {
     testCode = code;
-    newFile(testPath, content: code);
+    newFile2(testPath, code);
     var resolveResult =
-        await session.getResolvedUnit(testPath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(testPath) as ResolvedUnitResult;
     return DartUnitOutlineComputer(
       resolveResult,
       withBasicFlutter: true,
diff --git a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
index ee07e86..20fdbfd 100644
--- a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
@@ -192,9 +192,9 @@
 
   Future<List<SelectionRange>?> _computeSelectionRanges(
       String sourceContent, int offset) async {
-    newFile(sourcePath, content: sourceContent);
+    newFile2(sourcePath, sourceContent);
     var result =
-        await session.getResolvedUnit(sourcePath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(sourcePath) as ResolvedUnitResult;
     var computer = DartSelectionRangeComputer(result.unit, offset);
     return computer.compute();
   }
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
index 477d52b..4b42e1a 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestion_sets_test.dart
@@ -26,7 +26,7 @@
 
     // Create the file, should get the set.
     {
-      newFile(path, content: r'''
+      newFile2(path, r'''
 class A {}
 ''');
       var set = await waitForSetWithUri(uriStr);
@@ -35,7 +35,7 @@
 
     // Update the file, should get the updated set.
     {
-      newFile(path, content: r'''
+      newFile2(path, r'''
 class B {}
 ''');
       removeSet(uriStr);
@@ -52,7 +52,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class A {
   A.a();
 }
@@ -120,7 +120,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 abstract class A {
   A.a();
   factory A.b() => _B();
@@ -195,12 +195,12 @@
     var b_path = convertPath('/home/test/lib/b.dart');
     var a_uriStr = 'package:test/a.dart';
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 part 'b.dart';
 class A {}
 ''');
 
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 part of 'a.dart';
 class B {}
 ''');
@@ -264,7 +264,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 enum MyEnum {
   aaa,
   bbb,
@@ -355,7 +355,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 var boolV = false;
 var intV = 0;
 var doubleV = 0.1;
@@ -473,7 +473,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 typedef MyAlias = double;
 ''');
 
@@ -509,7 +509,7 @@
     var path = convertPath('/home/test/lib/a.dart');
     var uriStr = 'package:test/a.dart';
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 typedef MyAlias = void Function();
 ''');
 
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
index 25d24d3..9fee7ee 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -78,9 +79,11 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newDotPackagesFile('/home/test', content: '''
-test:${toUri('/home/test/lib')}
-''');
+    newPackageConfigJsonFile(
+      '/home/test',
+      (PackageConfigFileBuilder()..add(name: 'test', rootPath: '/home/test'))
+          .toContent(toUriStr: toUriStr),
+    );
 
     await createProject();
     handler = server.handlers.whereType<CompletionDomainHandler>().single;
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
index 9009034..75ae254 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestion_details_test.dart
@@ -17,7 +17,7 @@
 @reflectiveTest
 class GetSuggestionDetailsTest extends AvailableSuggestionsBase {
   Future<void> test_enum() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 enum MyEnum {
   aaa, bbb
 }
@@ -218,7 +218,7 @@
 
 main() {} // ref
 ''';
-    var partPath = newFile('/home/test/lib/a.dart', content: partCode).path;
+    var partPath = newFile2('/home/test/lib/a.dart', partCode).path;
     addTestFile(r'''
 part 'a.dart';
 ''');
diff --git a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
index 9c47432..8a1b392 100644
--- a/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
+++ b/pkg/analysis_server/test/src/domains/completion/get_suggestions_available_test.dart
@@ -110,7 +110,7 @@
   }
 
   Future<void> test_defaultArgumentListString() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 void fff(int aaa, int bbb) {}
 
 void ggg({int aaa, @required int bbb, @required int ccc}) {}
@@ -129,11 +129,11 @@
 
   Future<void> test_displayUri_file() async {
     var aPath = '/home/test/test/a.dart';
-    newFile(aPath, content: 'class A {}');
+    newFile2(aPath, 'class A {}');
 
     var aSet = await waitForSetWithUri(toUriStr(aPath));
 
-    var testPath = newFile('/home/test/test/sub/test.dart').path;
+    var testPath = newFile2('/home/test/test/sub/test.dart', '').path;
     var results = await _getSuggestions(testPath, 0);
 
     expect(
@@ -146,10 +146,10 @@
 
   Future<void> test_displayUri_package() async {
     var aPath = '/home/test/lib/a.dart';
-    newFile(aPath, content: 'class A {}');
+    newFile2(aPath, 'class A {}');
 
     var aSet = await waitForSetWithUri('package:test/a.dart');
-    var testPath = newFile('/home/test/lib/test.dart').path;
+    var testPath = newFile2('/home/test/lib/test.dart', '').path;
 
     var results = await _getSuggestions(testPath, 0);
     expect(
@@ -217,10 +217,10 @@
   }
 
   Future<void> test_inHtml() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
+    newFile2('/home/test/lib/a.dart', 'class A {}');
 
     var path = convertPath('/home/test/doc/a.html');
-    newFile(path, content: '<html></html>');
+    newFile2(path, '<html></html>');
 
     await waitResponse(
       CompletionGetSuggestionsParams(path, 0).toRequest('0'),
@@ -257,7 +257,7 @@
   }
 
   Future<void> test_relevanceTags_enum() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 enum MyEnum {
   aaa, bbb
 }
diff --git a/pkg/analysis_server/test/src/domains/execution/completion_test.dart b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
index 4f3af62..b7cccdc 100644
--- a/pkg/analysis_server/test/src/domains/execution/completion_test.dart
+++ b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
@@ -335,8 +335,8 @@
 
   @FailingTest(reason: 'No support for OverlayResourceProvider')
   Future<void> test_syntheticImportPrefix() async {
-    newFile('/test/lib/a.dart', content: 'class A {}');
-    newFile('/test/lib/b.dart', content: 'class B {}');
+    newFile2('/test/lib/a.dart', 'class A {}');
+    newFile2('/test/lib/b.dart', 'class B {}');
     addContextFile(r'''
 import 'a.dart';
 impoty 'b.dart';
diff --git a/pkg/analysis_server/test/src/domains/flutter/base.dart b/pkg/analysis_server/test/src/domains/flutter/base.dart
index 50d2533..39d724f 100644
--- a/pkg/analysis_server/test/src/domains/flutter/base.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/base.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/flutter/flutter_domain.dart';
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -44,40 +45,19 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newDotPackagesFile('/home/test', content: '''
-test:${toUri('/home/test/lib')}
-''');
 
-    _addFlutterPackage();
+    var metaLib = MockPackages.instance.addMeta(resourceProvider);
+    var flutterLib = MockPackages.instance.addFlutter(resourceProvider);
+    newPackageConfigJsonFile(
+      '/home/test',
+      (PackageConfigFileBuilder()
+            ..add(name: 'test', rootPath: '/home/test')
+            ..add(name: 'meta', rootPath: metaLib.parent.path)
+            ..add(name: 'flutter', rootPath: flutterLib.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
 
     await createProject();
     handler = server.handlers.whereType<FlutterDomainHandler>().single;
   }
-
-  void _addFlutterPackage() {
-    _addMetaPackage();
-    var libFolder = MockPackages.instance.addFlutter(resourceProvider);
-    _addPackageDependency('flutter', libFolder.parent2.path);
-  }
-
-  void _addMetaPackage() {
-    var libFolder = MockPackages.instance.addMeta(resourceProvider);
-    _addPackageDependency('meta', libFolder.parent2.path);
-  }
-
-  void _addPackageDependency(String name, String rootPath) {
-    var packagesFile = getFile('/home/test/.packages');
-    var packagesContent =
-        packagesFile.exists ? packagesFile.readAsStringSync() : '';
-
-    // Ignore if there is already the same package dependency.
-    if (packagesContent.contains('$name:file://')) {
-      return;
-    }
-
-    rootPath = convertPath(rootPath);
-    packagesContent += '$name:${toUri('$rootPath/lib')}\n';
-
-    packagesFile.writeAsStringSync(packagesContent);
-  }
 }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index f59bb45..c698324 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -234,7 +234,7 @@
   }
 
   Future<void> test_children_closure_blockBody() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:flutter/widgets.dart';
 
 class WidgetA extends StatelessWidget {
@@ -270,7 +270,7 @@
   }
 
   Future<void> test_children_closure_expressionBody() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:flutter/widgets.dart';
 
 class WidgetA extends StatelessWidget {
@@ -472,7 +472,7 @@
   }
 
   Future<void> test_namedArgument_anywhere() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:flutter/widgets.dart';
 
 class WidgetA extends StatelessWidget {
@@ -512,7 +512,7 @@
   }
 
   Future<void> test_parentAssociationLabel() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:flutter/widgets.dart';
 
 class WidgetA extends StatelessWidget {
@@ -584,9 +584,9 @@
 
   Future<FlutterOutline> _computeOutline(String code) async {
     testCode = code;
-    newFile(testPath, content: code);
+    newFile2(testPath, code);
     resolveResult =
-        await session.getResolvedUnit(testPath) as ResolvedUnitResult;
+        await (await session).getResolvedUnit(testPath) as ResolvedUnitResult;
     computer = FlutterOutlineComputer(resolveResult);
     return computer.compute();
   }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
index 25c479b..96c2b66 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/flutter/flutter_domain.dart';
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -72,10 +73,13 @@
   }
 
   Future<void> test_children() async {
-    newDotPackagesFile(projectPath, content: '''
-flutter:${flutterFolder.toUri()}
-''');
-    newAnalysisOptionsYamlFile(projectPath, content: '''
+    newPackageConfigJsonFile(
+      projectPath,
+      (PackageConfigFileBuilder()
+            ..add(name: 'flutter', rootPath: flutterFolder.parent.path))
+          .toContent(toUriStr: toUriStr),
+    );
+    newAnalysisOptionsYamlFile2(projectPath, '''
 analyzer:
   strong-mode: true
 ''');
diff --git a/pkg/analysis_server/test/src/g3/fixes_test.dart b/pkg/analysis_server/test/src/g3/fixes_test.dart
index 34bdfbf..a90cff0 100644
--- a/pkg/analysis_server/test/src/g3/fixes_test.dart
+++ b/pkg/analysis_server/test/src/g3/fixes_test.dart
@@ -202,6 +202,6 @@
       }
     }
 
-    newFile('/home/test/analysis_options.yaml', content: buffer.toString());
+    newFile2('/home/test/analysis_options.yaml', buffer.toString());
   }
 }
diff --git a/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart b/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
index cf45244..4156e12 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_locator_test.dart
@@ -69,9 +69,7 @@
   }
 
   void _createPubspec(String content) {
-    pubspecPath =
-        newFile('/package/${PluginLocator.pubspecFileName}', content: content)
-            .path;
+    pubspecPath = newPubspecYamlFile('/package', content).path;
   }
 
   String _createPubspecWithKey() {
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index ffb6492..e9d809e 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/dart/analysis/context_root.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/workspace/basic.dart';
 import 'package:analyzer_plugin/channel/channel.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart';
@@ -473,35 +474,34 @@
     expect(manager.notificationManager, notificationManager);
   }
 
-  void test_pathsFor_withPackagesFile() {
+  void test_pathsFor_withPackageConfigJsonFile() {
     //
     // Build the minimal directory structure for a plugin package that includes
-    // a .packages file.
+    // a '.dart_tool/package_config.json' file.
     //
     var pluginDirPath = newFolder('/plugin').path;
-    var pluginFilePath = newFile('/plugin/bin/plugin.dart').path;
-    var packagesFilePath = newDotPackagesFile('/plugin').path;
+    var pluginFile = newFile2('/plugin/bin/plugin.dart', '');
+    var packageConfigFile = newPackageConfigJsonFile('/plugin', '');
     //
     // Test path computation.
     //
-    var paths = manager.pathsFor(pluginDirPath);
-    expect(paths, hasLength(2));
-    expect(paths[0], pluginFilePath);
-    expect(paths[1], packagesFilePath);
+    var files = manager.filesFor(pluginDirPath);
+    expect(files.execution, pluginFile);
+    expect(files.packages, packageConfigFile);
   }
 
   void test_pathsFor_withPubspec_inBazelWorkspace() {
     //
     // Build a Bazel workspace containing four packages, including the plugin.
     //
-    newFile('/workspaceRoot/WORKSPACE');
+    newFile2('/workspaceRoot/WORKSPACE', '');
     newFolder('/workspaceRoot/bazel-bin');
     newFolder('/workspaceRoot/bazel-genfiles');
 
     String newPackage(String packageName, [List<String>? dependencies]) {
       var packageRoot =
           newFolder('/workspaceRoot/third_party/dart/$packageName').path;
-      newFile('$packageRoot/lib/$packageName.dart');
+      newFile2('$packageRoot/lib/$packageName.dart', '');
       var buffer = StringBuffer();
       if (dependencies != null) {
         buffer.writeln('dependencies:');
@@ -514,30 +514,46 @@
     }
 
     var pluginDirPath = newPackage('plugin', ['b', 'c']);
-    newPackage('b', ['d']);
-    newPackage('c', ['d']);
-    newPackage('d');
-    var pluginFilePath = newFile('$pluginDirPath/bin/plugin.dart').path;
+    var bRootPath = newPackage('b', ['d']);
+    var cRootPath = newPackage('c', ['d']);
+    var dRootPath = newPackage('d');
+    var pluginFile = newFile2('$pluginDirPath/bin/plugin.dart', '');
     //
     // Test path computation.
     //
-    var paths = manager.pathsFor(pluginDirPath);
-    expect(paths, hasLength(2));
-    expect(paths[0], pluginFilePath);
-    var packagesFile = getFile(paths[1]);
+    var files = manager.filesFor(pluginDirPath);
+    expect(files.execution, pluginFile);
+    var packagesFile = files.packages;
     expect(packagesFile.exists, isTrue);
+
     var content = packagesFile.readAsStringSync();
-    var lines = content.split('\n');
-    String asFileUri(String input) => Uri.file(convertPath(input)).toString();
-    expect(
-        lines,
-        unorderedEquals([
-          'plugin:${asFileUri('/workspaceRoot/third_party/dart/plugin/lib')}',
-          'b:${asFileUri('/workspaceRoot/third_party/dart/b/lib')}',
-          'c:${asFileUri('/workspaceRoot/third_party/dart/c/lib')}',
-          'd:${asFileUri('/workspaceRoot/third_party/dart/d/lib')}',
-          ''
-        ]));
+    expect(content, '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "b",
+      "rootUri": "${toUriStr(bRootPath)}",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "c",
+      "rootUri": "${toUriStr(cRootPath)}",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "d",
+      "rootUri": "${toUriStr(dRootPath)}",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "plugin",
+      "rootUri": "${toUriStr(pluginDirPath)}",
+      "packageUri": "lib/"
+    }
+  ]
+}
+''');
   }
 
   void test_pluginsForContextRoot_none() {
@@ -760,7 +776,7 @@
       //
       // Create a pubspec.yaml file.
       //
-      var pubspecFile = io.File(path.join(pluginPath, 'pubspec.yaml'));
+      var pubspecFile = io.File(path.join(pluginPath, file_paths.pubspecYaml));
       pubspecFile.writeAsStringSync(_getPubspecFileContent());
       //
       // Create the 'bin' directory.
diff --git a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
index 62eb89f..7d12566 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_watcher_test.dart
@@ -36,9 +36,10 @@
 
   Future<void> test_addedDriver() async {
     newPubspecYamlFile('/foo', 'name: foo');
-    newFile(
+    newFile2(
       join('/foo', PluginLocator.toolsFolderName,
           PluginLocator.defaultPluginFolderName, 'bin', 'plugin.dart'),
+      '',
     );
 
     writeTestPackageConfig(
diff --git a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
index d131792..b6ad6a1 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
@@ -205,7 +205,7 @@
   }
 
   Future<void> test_explicitTarget_method_imported() async {
-    newFile(convertPath('/project/bin/lib.dart'), content: '''
+    newFile2(convertPath('/project/bin/lib.dart'), '''
 extension E on String {
   void m() {}
 }
@@ -221,7 +221,7 @@
   }
 
   Future<void> test_explicitTarget_method_inLibrary() async {
-    newFile(convertPath('/project/bin/lib.dart'), content: '''
+    newFile2(convertPath('/project/bin/lib.dart'), '''
 part 'test.dart';
 extension E on String {
   void m() {}
@@ -238,7 +238,7 @@
   }
 
   Future<void> test_explicitTarget_method_inPart() async {
-    newFile(convertPath('/project/bin/part.dart'), content: '''
+    newFile2(convertPath('/project/bin/part.dart'), '''
 extension E on String {
   void m() {}
 }
@@ -257,7 +257,7 @@
   Future<void> test_explicitTarget_method_notImported() async {
     // Available suggestions data doesn't yet have information about extension
     // methods.
-    newFile(convertPath('/project/bin/lib.dart'), content: '''
+    newFile2(convertPath('/project/bin/lib.dart'), '''
 extension E on String {
   void m() {}
 }
@@ -589,7 +589,7 @@
 
   @failingTest
   Future<void> test_unnamedConstructor_inDifferentLibrary() async {
-    newFile('/project/bin/b.dart', content: '''
+    newFile2('/project/bin/b.dart', '''
 class B implements A {
   B();
 }
@@ -710,7 +710,7 @@
 @reflectiveTest
 class SuperConstructorInvocationCompletionTest extends CompletionTestCase {
   Future<void> test_namedConstructor_notVisible() async {
-    newFile('/project/bin/a.dart', content: '''
+    newFile2('/project/bin/a.dart', '''
 class A {
   A._() {}
 }
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
index c86dc28..7d020ef 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
@@ -32,9 +32,27 @@
     assertSuggestion('${AnalyzerOptions.enableExperiment}: ');
   }
 
+  void test_codeStyle() {
+    getCompletions('''
+code-style:
+  ^
+''');
+    assertSuggestion('${AnalyzerOptions.format}: ');
+  }
+
+  void test_codeStyle_format() {
+    getCompletions('''
+code-style:
+  format: ^
+''');
+    assertSuggestion('false');
+    assertSuggestion('true');
+  }
+
   void test_empty() {
     getCompletions('^');
     assertSuggestion('${AnalyzerOptions.analyzer}: ');
+    assertSuggestion('${AnalyzerOptions.codeStyle}: ');
     assertSuggestion('${AnalyzerOptions.include}: ');
     // TODO(brianwilkerson) Replace this with a constant.
     assertSuggestion('linter: ');
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
index 051c4eb..d3d1e91 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/src/services/pub/pub_command.dart';
 import 'package:analysis_server/src/services/pub/pub_package_service.dart';
 import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:http/http.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -28,7 +29,7 @@
   late PubPackageService pubPackageService;
 
   @override
-  String get fileName => 'pubspec.yaml';
+  String get fileName => file_paths.pubspecYaml;
 
   @override
   PubspecGenerator get generator =>
@@ -84,7 +85,7 @@
   }
 
   void test_flutter_assets_invalidPath() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -94,7 +95,7 @@
   }
 
   void test_flutter_assets_nonExistentPath() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -104,7 +105,7 @@
   }
 
   void test_flutter_assets_noPath() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -114,7 +115,7 @@
   }
 
   void test_flutter_assets_partialPath() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -124,7 +125,7 @@
   }
 
   void test_flutter_assets_path_withFollowing() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -134,7 +135,7 @@
   }
 
   void test_flutter_assets_path_withoutFollowing() {
-    newFile('/home/test/assets/img1.jpg');
+    newFile2('/home/test/assets/img1.jpg', '');
     getCompletions('''
 flutter:
   assets:
@@ -379,7 +380,7 @@
       return MockProcess(1, 0, '', '');
     };
 
-    newFile('/home/DEPS');
+    newFile2('/home/DEPS', '');
     pubPackageService.beginCachePreloads([convertPath('/home/test/$fileName')]);
     await pumpEventQueue(times: 500);
 
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/yaml_generator_test_support.dart b/pkg/analysis_server/test/src/services/completion/yaml/yaml_generator_test_support.dart
index 90a8df5..c0c63d4 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/yaml_generator_test_support.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/yaml_generator_test_support.dart
@@ -57,7 +57,7 @@
     content = content.substring(0, completionOffset) +
         content.substring(completionOffset + 1);
     // Add the file to the file system.
-    var file = newFile('/home/test/$fileName', content: content);
+    var file = newFile2('/home/test/$fileName', content);
     // Generate completions.
     results = generator.getSuggestions(file.path, completionOffset).suggestions;
   }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
index 9dc4e9f..51b9dc0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
@@ -31,8 +31,8 @@
   AssistKind get kind;
 
   /// The workspace in which fixes contributor operates.
-  ChangeWorkspace get workspace {
-    return DartChangeWorkspace([session]);
+  Future<ChangeWorkspace> get workspace async {
+    return DartChangeWorkspace([await session]);
   }
 
   @override
@@ -194,7 +194,7 @@
   Future<List<Assist>> _computeAssists() async {
     var context = DartAssistContextImpl(
       TestInstrumentationService(),
-      workspace,
+      await workspace,
       testAnalysisResult,
       _offset,
       _length,
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_enum_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_enum_test.dart
index fa8e2fe..0eeb8a9 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_enum_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_enum_test.dart
@@ -321,7 +321,7 @@
   Future<void> test_invalid_hasPart() async {
     // Change this test if the assist becomes able to look for references to the
     // class and its constructors in part files.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 part of 'test.dart';
 ''');
     await resolveTestCode('''
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
index fc5175e..10ba918 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_into_expression_body_test.dart
@@ -73,6 +73,96 @@
 ''');
   }
 
+  Future<void> test_closure_hasBlockComment_afterReturnStatement() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() {
+    return 42;
+    // Comment.
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasBlockComment_beforeReturnKeyword() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() {
+    // Comment.
+    return 42;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasBlockComment_multiple() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() {
+    // Comment.
+
+    // Comment 2.
+    return 42;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasInlineComment_beforeBodyKeyword() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() /* Comment. */ async {
+    return 42;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasInlineComment_beforeOpenBrace() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() /* Comment. */ {
+    return 42;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasInlineComment_beforeReturn() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() {
+    /* Comment. */
+    return 42;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
+  Future<void> test_closure_hasInlineComment_beforeReturnSemicolon() async {
+    await resolveTestCode('''
+setup(x) {}
+main() {
+  setup(() {
+    return  42 /* Comment. */;
+  });
+}
+''');
+    await assertNoAssistAt('return');
+  }
+
   Future<void> test_closure_voidExpression() async {
     await resolveTestCode('''
 setup(x) {}
@@ -156,12 +246,12 @@
   Future<void> test_method_onBlock() async {
     await resolveTestCode('''
 class A {
-  m() { // marker
+  m() {
     return 42;
   }
 }
 ''');
-    await assertHasAssistAt('{ // marker', '''
+    await assertHasAssistAt('m() {', '''
 class A {
   m() => 42;
 }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_initializing_parameter_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_initializing_parameter_test.dart
deleted file mode 100644
index df4f094..0000000
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_initializing_parameter_test.dart
+++ /dev/null
@@ -1,484 +0,0 @@
-// 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/src/services/correction/assist.dart';
-import 'package:analyzer_plugin/utilities/assist/assist.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'assist_processor.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ConvertToSuperInitializingParameterTest);
-  });
-}
-
-@reflectiveTest
-class ConvertToSuperInitializingParameterTest extends AssistProcessorTest {
-  @override
-  AssistKind get kind => DartAssistKind.CONVERT_TO_SUPER_INITIALIZING_PARAMETER;
-
-  Future<void> test_named_first() async {
-    await resolveTestCode('''
-class A {
-  A({int? x, int? y});
-}
-class B extends A {
-  B({int? x, int? y}) : super(x: x, y: y);
-}
-''');
-    await assertHasAssistAt('x, int? y}) :', '''
-class A {
-  A({int? x, int? y});
-}
-class B extends A {
-  B({super.x, int? y}) : super(y: y);
-}
-''');
-  }
-
-  Future<void> test_named_last() async {
-    await resolveTestCode('''
-class A {
-  A({int? x, int? y});
-}
-class B extends A {
-  B({int? x, int? y}) : super(x: x, y: y);
-}
-''');
-    await assertHasAssistAt('y}) :', '''
-class A {
-  A({int? x, int? y});
-}
-class B extends A {
-  B({int? x, super.y}) : super(x: x);
-}
-''');
-  }
-
-  Future<void> test_named_middle() async {
-    await resolveTestCode('''
-class A {
-  A({int? x, int? y, int? z});
-}
-class B extends A {
-  B({int? x, int? y, int? z}) : super(x: x, y: y, z: z);
-}
-''');
-    await assertHasAssistAt('y, int? z}) :', '''
-class A {
-  A({int? x, int? y, int? z});
-}
-class B extends A {
-  B({int? x, super.y, int? z}) : super(x: x, z: z);
-}
-''');
-  }
-
-  Future<void> test_named_noSuperInvocation() async {
-    await resolveTestCode('''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({int x = 1});
-}
-''');
-    await assertNoAssistAt('x = 1');
-  }
-
-  Future<void> test_named_notGenerative() async {
-    await resolveTestCode('''
-class A {
-  A({required int x});
-}
-class B extends A {
-  static List<B> instances = [];
-  factory B({required int x}) => instances[x];
-}
-''');
-    await assertNoAssistAt('x}) =>');
-  }
-
-  Future<void> test_named_notInConstructor() async {
-    await resolveTestCode('''
-class A {
-  void m({required int x}) {}
-}
-''');
-    await assertNoAssistAt('x})');
-  }
-
-  Future<void> test_named_notPassed_unreferenced() async {
-    await resolveTestCode('''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({int x = 0}) : super(x: 0);
-}
-''');
-    await assertNoAssistAt('x = 0}) :');
-  }
-
-  Future<void> test_named_notPassed_usedInExpression() async {
-    await resolveTestCode('''
-class A {
-  A({String x = ''});
-}
-class B extends A {
-  B({required Object x}) : super(x: x.toString());
-}
-''');
-    await assertNoAssistAt('x}) :');
-  }
-
-  Future<void> test_named_notSupported() async {
-    await resolveTestCode('''
-// @dart=2.16
-class A {
-  A({int? x});
-}
-class B extends A {
-  B({int? x}) : super(x: x);
-}
-''');
-    await assertNoAssistAt('x}) :');
-  }
-
-  Future<void> test_named_only() async {
-    await resolveTestCode('''
-class A {
-  A({int? x});
-}
-class B extends A {
-  B({int? x}) : super(x: x);
-}
-''');
-    await assertHasAssistAt('x}) :', '''
-class A {
-  A({int? x});
-}
-class B extends A {
-  B({super.x});
-}
-''');
-  }
-
-  Future<void> test_named_withDifferentDefaultValue() async {
-    await resolveTestCode('''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({int x = 2}) : super(x: x);
-}
-''');
-    await assertHasAssistAt('x = 2}) :', '''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({super.x = 2});
-}
-''');
-  }
-
-  Future<void> test_named_withEqualDefaultValue() async {
-    await resolveTestCode('''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({int x = 0}) : super(x: x);
-}
-''');
-    await assertHasAssistAt('x = 0}) :', '''
-class A {
-  A({int x = 0});
-}
-class B extends A {
-  B({super.x});
-}
-''');
-  }
-
-  Future<void> test_optionalPositional_singleSuperParameter_only() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B([int x = 0]) : super(x);
-}
-''');
-    await assertHasAssistAt('x = 0]', '''
-class A {
-  A(int x);
-}
-class B extends A {
-  B([super.x = 0]);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_mixedSuperParameters_first() async {
-    await resolveTestCode('''
-class A {
-  A(int x, {int? y});
-}
-class B extends A {
-  B(int x, int y) : super(x, y: y);
-}
-''');
-    await assertHasAssistAt('x, int y)', '''
-class A {
-  A(int x, {int? y});
-}
-class B extends A {
-  B(super.x, int y) : super(y: y);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_mixedSuperParameters_last() async {
-    await resolveTestCode('''
-class A {
-  A(int x, {int? y});
-}
-class B extends A {
-  B(int y, int x) : super(x, y: y);
-}
-''');
-    await assertHasAssistAt('x) :', '''
-class A {
-  A(int x, {int? y});
-}
-class B extends A {
-  B(int y, super.x) : super(y: y);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_mixedSuperParameters_middle() async {
-    await resolveTestCode('''
-class A {
-  A(int y, {int? z});
-}
-class B extends A {
-  B(int x, int y, int z) : super(y, z: z);
-}
-''');
-    await assertHasAssistAt('y, int z) :', '''
-class A {
-  A(int y, {int? z});
-}
-class B extends A {
-  B(int x, super.y, int z) : super(z: z);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_multipleSuperParameters_first() async {
-    await resolveTestCode('''
-class A {
-  A(int x, int y);
-}
-class B extends A {
-  B(int x, int y) : super(x, y);
-}
-''');
-    await assertNoAssistAt('x, int y) :');
-  }
-
-  Future<void> test_requiredPositional_multipleSuperParameters_last() async {
-    await resolveTestCode('''
-class A {
-  A(int x, int y);
-}
-class B extends A {
-  B(int x, int y) : super(x, y);
-}
-''');
-    await assertNoAssistAt('y) :');
-  }
-
-  Future<void> test_requiredPositional_multipleSuperParameters_middle() async {
-    await resolveTestCode('''
-class A {
-  A(int x, int y, int z);
-}
-class B extends A {
-  B(int x, int y, int z) : super(x, y, z);
-}
-''');
-    await assertNoAssistAt('y, int z) :');
-  }
-
-  Future<void> test_requiredPositional_noSuperInvocation() async {
-    await resolveTestCode('''
-class A {
-  A();
-}
-class B extends A {
-  B(int x);
-}
-''');
-    await assertNoAssistAt('x);');
-  }
-
-  Future<void> test_requiredPositional_notGenerative() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  static List<B> instances = [];
-  factory B(int x) => instances[x];
-}
-''');
-    await assertNoAssistAt('x) =>');
-  }
-
-  Future<void> test_requiredPositional_notInConstructor() async {
-    await resolveTestCode('''
-class A {
-  void m(int x) {}
-}
-''');
-    await assertNoAssistAt('x)');
-  }
-
-  Future<void> test_requiredPositional_notPassed_unreferenced() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x) : super(0);
-}
-''');
-    await assertNoAssistAt('x) :');
-  }
-
-  Future<void> test_requiredPositional_notPassed_usedInExpression() async {
-    await resolveTestCode('''
-class A {
-  A(String x);
-}
-class B extends A {
-  B(Object x) : super(x.toString());
-}
-''');
-    await assertNoAssistAt('x) :');
-  }
-
-  Future<void> test_requiredPositional_notSupported() async {
-    await resolveTestCode('''
-// @dart=2.16
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x) : super(x);
-}
-''');
-    await assertNoAssistAt('x) :');
-  }
-
-  Future<void> test_requiredPositional_singleSuperParameter_first() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x, int y) : super(x);
-}
-''');
-    await assertHasAssistAt('x, int y)', '''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(super.x, int y);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_singleSuperParameter_last() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x, int y) : super(y);
-}
-''');
-    await assertHasAssistAt('y) :', '''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x, super.y);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_singleSuperParameter_middle() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x, int y, int z) : super(y);
-}
-''');
-    await assertHasAssistAt('y, int z) :', '''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x, super.y, int z);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_singleSuperParameter_only() async {
-    await resolveTestCode('''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(int x) : super(x);
-}
-''');
-    await assertHasAssistAt('x) :', '''
-class A {
-  A(int x);
-}
-class B extends A {
-  B(super.x);
-}
-''');
-  }
-
-  Future<void> test_requiredPositional_unpassedOptionalPositional() async {
-    await resolveTestCode('''
-class A {
-  A(int x, [int y = 0]);
-}
-class B extends A {
-  B(int x) : super(x);
-}
-''');
-    await assertHasAssistAt('x) :', '''
-class A {
-  A(int x, [int y = 0]);
-}
-class B extends A {
-  B(super.x);
-}
-''');
-  }
-}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_parameters_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_parameters_test.dart
new file mode 100644
index 0000000..1af8888
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_parameters_test.dart
@@ -0,0 +1,821 @@
+// 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/src/services/correction/assist.dart';
+import 'package:analyzer_plugin/utilities/assist/assist.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'assist_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertToSuperParametersTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToSuperParametersTest extends AssistProcessorTest {
+  @override
+  AssistKind get kind => DartAssistKind.CONVERT_TO_SUPER_PARAMETERS;
+
+  Future<void> test_cursorLocation_named_onClassName() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B.name({int? x}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B.name', '''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B.name({super.x});
+}
+''');
+  }
+
+  Future<void> test_cursorLocation_named_onConstructorName() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B.name({int? x}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('ame(', '''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B.name({super.x});
+}
+''');
+  }
+
+  Future<void> test_cursorLocation_unnamed_notOnClassName() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x);
+}
+''');
+    await assertNoAssistAt('super');
+  }
+
+  Future<void> test_cursorLocation_unnamed_onClassName() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({super.x});
+}
+''');
+  }
+
+  Future<void> test_defaultValue_different_named() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 2}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({super.x = 2});
+}
+''');
+  }
+
+  Future<void> test_defaultValue_different_positional() async {
+    await resolveTestCode('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([int x = 2]) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([super.x = 2]);
+}
+''');
+  }
+
+  Future<void> test_defaultValue_equal_named() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 0}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({super.x});
+}
+''');
+  }
+
+  Future<void> test_defaultValue_equal_positional() async {
+    await resolveTestCode('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([int x = 0]) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([super.x]);
+}
+''');
+  }
+
+  Future<void> test_final_named_withoutType() async {
+    await resolveTestCode('''
+class A {
+  A({required int x});
+}
+class B extends A {
+  B({required final x}) : super(x: x);
+}
+''');
+    // `dynamic` is not a subtype of `int`
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_final_named_withType() async {
+    await resolveTestCode('''
+class A {
+  A({required int x});
+}
+class B extends A {
+  B({required final int x}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({required int x});
+}
+class B extends A {
+  B({required super.x});
+}
+''');
+  }
+
+  Future<void> test_final_positional_withoutType() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(final x) : super(x);
+}
+''');
+    // `dynamic` is not a subtype of `int`
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_final_positional_withType() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(final int x) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_functionTypedFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int f(int x));
+}
+class B extends A {
+  B(int f(int x)) : super(f);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int f(int x));
+}
+class B extends A {
+  B(super.f);
+}
+''');
+  }
+
+  Future<void> test_invalid_fieldFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  int x;
+  A(this.x);
+}
+class B extends A {
+  int y;
+  B(this.y) : super(y);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_namedToPositional() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B({int x = 0}) : super(x);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_noSuperInvocation_factory() async {
+    await resolveTestCode('''
+class A {
+  A({required int x});
+}
+class B extends A {
+  static List<B> instances = [];
+  factory B({required int x}) => instances[x];
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_noSuperInvocation_generative() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 1});
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_notAConstructor() async {
+    await resolveTestCode('''
+class A {
+  void m({required int x}) {}
+}
+''');
+    await assertNoAssistAt('m(');
+  }
+
+  Future<void> test_invalid_notPassed_unreferenced_named() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 0}) : super(x: 0);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_notPassed_unreferenced_positional() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x) : super(0);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_notPassed_usedInExpression_named() async {
+    await resolveTestCode('''
+class A {
+  A({String x = ''});
+}
+class B extends A {
+  B({required Object x}) : super(x: x.toString());
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_notPassed_usedInExpression_positional() async {
+    await resolveTestCode('''
+class A {
+  A(String x);
+}
+class B extends A {
+  B(Object x) : super(x.toString());
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_optedOut() async {
+    await resolveTestCode('''
+// @dart=2.16
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_positionalToNamed() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B(int x) : super(x: x);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_referencedInBody_named() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x) {
+    print(x);
+  }
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_invalid_referencedInBody_positional() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x) : super(x) {
+    print(x);
+  }
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_mixed_first() async {
+    await resolveTestCode('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int x, int y) : super(x, y: y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(super.x, int y) : super(y: y);
+}
+''');
+  }
+
+  Future<void> test_mixed_last() async {
+    await resolveTestCode('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int y, int x) : super(x, y: y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int y, super.x) : super(y: y);
+}
+''');
+  }
+
+  Future<void> test_mixed_middle() async {
+    await resolveTestCode('''
+class A {
+  A(int y, {int? z});
+}
+class B extends A {
+  B(int x, int y, int z) : super(y, z: z);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int y, {int? z});
+}
+class B extends A {
+  B(int x, super.y, int z) : super(z: z);
+}
+''');
+  }
+
+  Future<void> test_named_all_reversedOrder() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? y, int? x}) : super(x: x, y: y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.y, super.x});
+}
+''');
+  }
+
+  Future<void> test_named_all_sameOrder() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? x, int? y}) : super(x: x, y: y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.x, super.y});
+}
+''');
+  }
+
+  Future<void> test_named_first() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? x, required int y}) : super(x: x, y: y + 1);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.x, required int y}) : super(y: y + 1);
+}
+''');
+  }
+
+  Future<void> test_named_last() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({required int x, int? y}) : super(x: x + 1, y: y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({required int x, super.y}) : super(x: x + 1);
+}
+''');
+  }
+
+  Future<void> test_named_middle() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y, int? z});
+}
+class B extends A {
+  B({required int x, int? y, required int z}) : super(x: x + 1, y: y, z: z + 1);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x, int? y, int? z});
+}
+class B extends A {
+  B({required int x, super.y, required int z}) : super(x: x + 1, z: z + 1);
+}
+''');
+  }
+
+  Future<void> test_named_only() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({super.x});
+}
+''');
+  }
+
+  Future<void> test_namedConstructor() async {
+    await resolveTestCode('''
+class A {
+  A.m({int? x});
+}
+class B extends A {
+  B.m({int? x}) : super.m(x: x);
+}
+''');
+    await assertHasAssistAt('B.m', '''
+class A {
+  A.m({int? x});
+}
+class B extends A {
+  B.m({super.x}) : super.m();
+}
+''');
+  }
+
+  Future<void> test_positional_first() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(super.x, int y);
+}
+''');
+  }
+
+  Future<void> test_positional_functionTypedFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int x(int));
+}
+class B extends A {
+  B(int x(int)) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x(int));
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_positional_last() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y) : super(y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, super.y);
+}
+''');
+  }
+
+  Future<void> test_positional_middle() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y, int z) : super(y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, super.y, int z);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_notInOrder() async {
+    await resolveTestCode('''
+class A {
+  A(int x, int y);
+}
+class B extends A {
+  B(int x, int y) : super(y, x);
+}
+''');
+    await assertNoAssistAt('B(');
+  }
+
+  Future<void> test_positional_multiple_optional() async {
+    await resolveTestCode('''
+class A {
+  A([int? x, int? y]);
+}
+class B extends A {
+  B([int? x, int? y]) : super(x, y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A([int? x, int? y]);
+}
+class B extends A {
+  B([super.x, super.y]);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_required() async {
+    await resolveTestCode('''
+class A {
+  A(int x, int y);
+}
+class B extends A {
+  B(int x, int y) : super(x, y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x, int y);
+}
+class B extends A {
+  B(super.x, super.y);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_requiredAndOptional() async {
+    await resolveTestCode('''
+class A {
+  A(int x, [int? y]);
+}
+class B extends A {
+  B(int x, [int? y]) : super(x, y);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x, [int? y]);
+}
+class B extends A {
+  B(super.x, [super.y]);
+}
+''');
+  }
+
+  Future<void> test_positional_only() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_positional_only_optional() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B([int x = 0]) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x);
+}
+class B extends A {
+  B([super.x = 0]);
+}
+''');
+  }
+
+  Future<void> test_positional_unpassedOptionalPositional() async {
+    await resolveTestCode('''
+class A {
+  A(int x, [int y = 0]);
+}
+class B extends A {
+  B(int x) : super(x);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A(int x, [int y = 0]);
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_trailingComma() async {
+    await resolveTestCode('''
+class A {
+  A._(int x, int y);
+}
+class B extends A {
+  B(int x, int y) : super._(x, y,);
+}
+''');
+    await assertHasAssistAt('B(', '''
+class A {
+  A._(int x, int y);
+}
+class B extends A {
+  B(super.x, super.y) : super._();
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
index 320890d..8c1dd75 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
@@ -46,6 +46,20 @@
 ''');
   }
 
+  Future<void> test_mixinOnDirective() async {
+    addSource('$testPackageLibPath/lib.dart', '''
+mixin M {}
+''');
+    await resolveTestCode('''
+import 'lib.dart';
+void f(M m) {}
+''');
+    await assertHasAssistAt('import ', '''
+import 'lib.dart' show M;
+void f(M m) {}
+''');
+  }
+
   Future<void> test_onDirective() async {
     await resolveTestCode('''
 import 'dart:math';
@@ -104,6 +118,20 @@
 ''');
   }
 
+  Future<void> test_typedefOnDirective() async {
+    addSource('$testPackageLibPath/lib.dart', '''
+typedef Cb = void Function();
+''');
+    await resolveTestCode('''
+import 'lib.dart';
+void f(Cb cb) {}
+''');
+    await assertHasAssistAt('import ', '''
+import 'lib.dart' show Cb;
+void f(Cb cb) {}
+''');
+  }
+
   Future<void> test_unresolvedUri() async {
     verifyNoTestUnitErrors = false;
     await resolveTestCode('''
diff --git a/pkg/analysis_server/test/src/services/correction/assist/test_all.dart b/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
index 2c05865..d32b3c0 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/test_all.dart
@@ -42,8 +42,7 @@
 import 'convert_to_single_quoted_string_test.dart'
     as convert_to_single_quoted_string;
 import 'convert_to_spread_test.dart' as convert_to_spread;
-import 'convert_to_super_initializing_parameter_test.dart'
-    as convert_to_super_initializing_parameter;
+import 'convert_to_super_parameters_test.dart' as convert_to_super_parameters;
 import 'encapsulate_field_test.dart' as encapsulate_field;
 import 'exchange_operands_test.dart' as exchange_operands;
 import 'flutter_convert_to_children_test.dart' as flutter_convert_to_children;
@@ -126,7 +125,7 @@
     convert_to_set_literal.main();
     convert_to_single_quoted_string.main();
     convert_to_spread.main();
-    convert_to_super_initializing_parameter.main();
+    convert_to_super_parameters.main();
     encapsulate_field.main();
     exchange_operands.main();
     flutter_convert_to_children.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
index 2b5f910..5a9faa9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
@@ -161,12 +161,12 @@
   ChangeWorkspace? _workspace;
 
   @override
-  ChangeWorkspace get workspace {
-    return _workspace ?? super.workspace;
+  Future<ChangeWorkspace> get workspace async {
+    return _workspace ?? await super.workspace;
   }
 
   Future<void> test_function_inPackage_inWorkspace() async {
-    newFile('/home/aaa/lib/a.dart', content: 'void test() {}');
+    newFile2('/home/aaa/lib/a.dart', 'void test() {}');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
@@ -174,8 +174,8 @@
     );
 
     _workspace = DartChangeWorkspace([
-      session,
-      getContext('/home/aaa').currentSession,
+      await session,
+      await sessionFor('/home/aaa'),
     ]);
 
     await resolveTestCode('''
@@ -193,7 +193,7 @@
   }
 
   Future<void> test_function_inPackage_outsideWorkspace() async {
-    newFile('/home/bbb/lib/b.dart', content: 'void test() {}');
+    newFile2('/home/bbb/lib/b.dart', 'void test() {}');
 
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart
index f8ba15b..474e1d8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_trailing_comma_test.dart
@@ -72,6 +72,36 @@
   @override
   String get lintCode => LintNames.require_trailing_commas;
 
+  Future<void> test_assert_initializer() async {
+    await resolveTestCode('''
+class C {
+  C(a) : assert(a,
+    '');
+}
+''');
+    await assertHasFix('''
+class C {
+  C(a) : assert(a,
+    '',);
+}
+''');
+  }
+
+  Future<void> test_assert_statement() async {
+    await resolveTestCode('''
+void f(a, b) {
+  assert(a ||
+    b);
+}
+''');
+    await assertHasFix('''
+void f(a, b) {
+  assert(a ||
+    b,);
+}
+''');
+  }
+
   Future<void> test_named() async {
     await resolveTestCode('''
 void f({a, b}) {
@@ -87,6 +117,17 @@
 ''');
   }
 
+  Future<void> test_parameters() async {
+    await resolveTestCode('''
+void f(a,
+  b) {}
+''');
+    await assertHasFix('''
+void f(a,
+  b,) {}
+''');
+  }
+
   Future<void> test_positional() async {
     await resolveTestCode('''
 void f(a, b) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_class_to_enum_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_class_to_enum_test.dart
new file mode 100644
index 0000000..b918348
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_class_to_enum_test.dart
@@ -0,0 +1,212 @@
+// 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/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertClassToEnumBulkTest);
+    defineReflectiveTests(ConvertClassToEnumTest);
+  });
+}
+
+@reflectiveTest
+class ConvertClassToEnumBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.use_enums;
+
+  Future<void> test_multipleClasses() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0);
+  static const _E c1 = _E(1);
+
+  final int value;
+
+  const _E(this.value);
+}
+
+class E {
+  static const E c0 = E._(0);
+  static const E c1 = E._(1);
+
+  final int value;
+
+  const E._(this.value);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+    await assertHasFix('''
+enum _E {
+  c0(0),
+  c1(1);
+
+  final int value;
+
+  const _E(this.value);
+}
+
+enum E {
+  c0._(0),
+  c1._(1);
+
+  final int value;
+
+  const E._(this.value);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertClassToEnumTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_CLASS_TO_ENUM;
+
+  @override
+  String get lintCode => LintNames.use_enums;
+
+  Future<void> test_minimal_intField_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0);
+  static const _E c1 = _E(1);
+
+  final int value;
+
+  const _E(this.value);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+    await assertHasFix('''
+enum _E {
+  c0(0),
+  c1(1);
+
+  final int value;
+
+  const _E(this.value);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+  }
+
+  Future<void> test_minimal_intField_publicClass() async {
+    await resolveTestCode('''
+class E {
+  static const E c0 = E._(0);
+  static const E c1 = E._(1);
+
+  final int value;
+
+  const E._(this.value);
+}
+''');
+    await assertHasFix('''
+enum E {
+  c0._(0),
+  c1._(1);
+
+  final int value;
+
+  const E._(this.value);
+}
+''');
+  }
+
+  Future<void> test_minimal_notIntField_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E('c0');
+  static const _E c1 = _E('c1');
+
+  final String name;
+
+  const _E(this.name);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+    await assertHasFix('''
+enum _E {
+  c0('c0'),
+  c1('c1');
+
+  final String name;
+
+  const _E(this.name);
+}
+
+var x = [_E.c0, _E.c1];
+''');
+  }
+
+  Future<void> test_minimal_notIntField_publicClass() async {
+    await resolveTestCode('''
+class E {
+  static const E c0 = E._('c0');
+  static const E c1 = E._('c1');
+
+  final String name;
+
+  const E._(this.name);
+}
+''');
+    await assertHasFix('''
+enum E {
+  c0._('c0'),
+  c1._('c1');
+
+  final String name;
+
+  const E._(this.name);
+}
+''');
+  }
+
+  Future<void> test_withReferencedFactoryConstructor() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0);
+  static const _E c1 = _E(1);
+
+  final int value;
+
+  const _E(this.value);
+
+  factory _E.withValue(int x) => c0;
+}
+
+_E e = _E.withValue(0);
+
+var x = [_E.c0, _E.c1];
+''');
+    await assertHasFix('''
+enum _E {
+  c0(0),
+  c1(1);
+
+  final int value;
+
+  const _E(this.value);
+
+  factory _E.withValue(int x) => c0;
+}
+
+_E e = _E.withValue(0);
+
+var x = [_E.c0, _E.c1];
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_for_each_to_for_loop_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_for_each_to_for_loop_test.dart
index 88ac31a..75125cc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_for_each_to_for_loop_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_for_each_to_for_loop_test.dart
@@ -143,4 +143,25 @@
 }
 ''');
   }
+
+  Future<void> test_return() async {
+    await resolveTestCode('''
+void f(List<String> list) {
+  list.forEach((e) {
+    if (e == 'whatever') {
+      return;
+    }
+  });
+}
+''');
+    await assertHasFix('''
+void f(List<String> list) {
+  for (var e in list) {
+    if (e == 'whatever') {
+      continue;
+    }
+  }
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_cascade_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_cascade_test.dart
new file mode 100644
index 0000000..66c1a2a
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_cascade_test.dart
@@ -0,0 +1,169 @@
+// 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/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertToCascadeTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToCascadeTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_CASCADE;
+
+  @override
+  String get lintCode => LintNames.cascade_invocations;
+
+  Future<void> test_cascade_method() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+
+void f(A a) {
+  a..x = 1
+  ..x = 2;
+  a..m();
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+
+void f(A a) {
+  a..x = 1
+  ..x = 2
+  ..m();
+}
+''');
+  }
+
+  Future<void> test_method_method() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a.m();
+  a.m();
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a..m()
+  ..m();
+}
+''');
+  }
+
+  Future<void> test_method_property() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a.m();
+  a.x = 1;
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a..m()
+  ..x = 1;
+}
+''');
+  }
+
+  Future<void> test_property_cascade() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+
+void f(A a) {
+  a.x = 1;
+  a..m();
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+
+void f(A a) {
+  a..x = 1
+  ..m();
+}
+''');
+  }
+
+  Future<void> test_property_method() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a.x = 1;
+  a.m();
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a..x = 1
+  ..m();
+}
+''');
+  }
+
+  Future<void> test_property_property() async {
+    await resolveTestCode('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a.x = 1;
+  a.x = 2;
+}
+''');
+    await assertHasFix('''
+class A {
+  void m() {}
+  int? x;
+}
+void f(A a) {
+  a..x = 1
+  ..x = 2;
+}
+''');
+  }
+}
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/convert_to_list_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
index a74a556..31b6596 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_list_literal_test.dart
@@ -13,6 +13,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertToListLiteralBulkTest);
     defineReflectiveTests(ConvertToListLiteralTest);
+    defineReflectiveTests(ConvertToListLiteralWithNullSafetyTest);
   });
 }
 
@@ -80,3 +81,18 @@
 ''');
   }
 }
+
+@reflectiveTest
+class ConvertToListLiteralWithNullSafetyTest extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_LIST_LITERAL;
+
+  Future<void> test_default() async {
+    await resolveTestCode('''
+final l = List();
+''');
+    await assertHasFix('''
+final l = [];
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
index 9e78353..7f66a9b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_package_import_test.dart
@@ -60,7 +60,7 @@
   String get lintCode => LintNames.always_use_package_imports;
 
   Future<void> test_relativeImport() async {
-    newFile('$testPackageLibPath/foo.dart', content: '''
+    newFile2('$testPackageLibPath/foo.dart', '''
 class Foo {}
 ''');
     await resolveTestCode('''
@@ -118,7 +118,7 @@
     // This test fails because any attempt to specify a relative path that
     // includes 'lib' (which the lint requires) results in a malformed URI when
     // trying to resolve the import.
-    newFile('$testPackageLibPath/foo/bar.dart', content: '''
+    newFile2('$testPackageLibPath/foo/bar.dart', '''
 class C {}
 ''');
     await resolveTestCode('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_super_parameters_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_super_parameters_test.dart
new file mode 100644
index 0000000..1b070d0
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_super_parameters_test.dart
@@ -0,0 +1,511 @@
+// 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/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertToSuperParametersBulkTest);
+    defineReflectiveTests(ConvertToSuperParametersTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToSuperParametersBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.use_super_parameters;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+class A {
+  A.m({int? x});
+  A.n(int x);
+}
+class B extends A {
+  B.m({int? x}) : super.m(x: x);
+  B.n(int x) : super.n(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A.m({int? x});
+  A.n(int x);
+}
+class B extends A {
+  B.m({super.x}) : super.m();
+  B.n(super.x) : super.n();
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertToSuperParametersTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_SUPER_PARAMETERS;
+
+  @override
+  String get lintCode => LintNames.use_super_parameters;
+
+  Future<void> test_defaultValue_different_named() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 2}) : super(x: x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({super.x = 2});
+}
+''');
+  }
+
+  Future<void> test_defaultValue_different_positional() async {
+    await resolveTestCode('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([int x = 2]) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([super.x = 2]);
+}
+''');
+  }
+
+  Future<void> test_defaultValue_equal_named() async {
+    await resolveTestCode('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({int x = 0}) : super(x: x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int x = 0});
+}
+class B extends A {
+  B({super.x});
+}
+''');
+  }
+
+  Future<void> test_defaultValue_equal_positional() async {
+    await resolveTestCode('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([int x = 0]) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A([int x = 0]);
+}
+class B extends A {
+  B([super.x]);
+}
+''');
+  }
+
+  Future<void> test_mixed_first() async {
+    await resolveTestCode('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int x, int y) : super(x, y: y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(super.x, int y) : super(y: y);
+}
+''');
+  }
+
+  Future<void> test_mixed_last() async {
+    await resolveTestCode('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int y, int x) : super(x, y: y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x, {int? y});
+}
+class B extends A {
+  B(int y, super.x) : super(y: y);
+}
+''');
+  }
+
+  Future<void> test_mixed_middle() async {
+    await resolveTestCode('''
+class A {
+  A(int y, {int? z});
+}
+class B extends A {
+  B(int x, int y, int z) : super(y, z: z);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int y, {int? z});
+}
+class B extends A {
+  B(int x, super.y, int z) : super(z: z);
+}
+''');
+  }
+
+  Future<void> test_named_all_reversedOrder() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? y, int? x}) : super(x: x, y: y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.y, super.x});
+}
+''');
+  }
+
+  Future<void> test_named_all_sameOrder() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? x, int? y}) : super(x: x, y: y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.x, super.y});
+}
+''');
+  }
+
+  Future<void> test_named_first() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? x, required int y}) : super(x: x, y: y + 1);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.x, required int y}) : super(y: y + 1);
+}
+''');
+  }
+
+  Future<void> test_named_last() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({required int x, int? y}) : super(x: x + 1, y: y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({required int x, super.y}) : super(x: x + 1);
+}
+''');
+  }
+
+  Future<void> test_named_middle() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y, int? z});
+}
+class B extends A {
+  B({required int x, int? y, required int z}) : super(x: x + 1, y: y, z: z + 1);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y, int? z});
+}
+class B extends A {
+  B({required int x, super.y, required int z}) : super(x: x + 1, z: z + 1);
+}
+''');
+  }
+
+  Future<void> test_named_oneWithNameChange() async {
+    await resolveTestCode('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({int? x, int? z}) : super(x: x, y: z);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x, int? y});
+}
+class B extends A {
+  B({super.x, int? z}) : super(y: z);
+}
+''');
+  }
+
+  Future<void> test_named_only() async {
+    await resolveTestCode('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({int? x}) : super(x: x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? x});
+}
+class B extends A {
+  B({super.x});
+}
+''');
+  }
+
+  Future<void> test_positional_first() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(super.x, int y);
+}
+''');
+  }
+
+  Future<void> test_positional_functionTypedFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int x(int));
+}
+class B extends A {
+  B(int x(int)) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x(int));
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_positional_last() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y) : super(y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, super.y);
+}
+''');
+  }
+
+  Future<void> test_positional_middle() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, int y, int z) : super(y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x, super.y, int z);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_optional() async {
+    await resolveTestCode('''
+class A {
+  A([int? x, int? y]);
+}
+class B extends A {
+  B([int? x, int? y]) : super(x, y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A([int? x, int? y]);
+}
+class B extends A {
+  B([super.x, super.y]);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_required() async {
+    await resolveTestCode('''
+class A {
+  A(int x, int y);
+}
+class B extends A {
+  B(int x, int y) : super(x, y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x, int y);
+}
+class B extends A {
+  B(super.x, super.y);
+}
+''');
+  }
+
+  Future<void> test_positional_multiple_requiredAndOptional() async {
+    await resolveTestCode('''
+class A {
+  A(int x, [int? y]);
+}
+class B extends A {
+  B(int x, [int? y]) : super(x, y);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x, [int? y]);
+}
+class B extends A {
+  B(super.x, [super.y]);
+}
+''');
+  }
+
+  Future<void> test_positional_only() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(int x) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+
+  Future<void> test_positional_only_optional() async {
+    await resolveTestCode('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B([int x = 0]) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x);
+}
+class B extends A {
+  B([super.x = 0]);
+}
+''');
+  }
+
+  Future<void> test_positional_unpassedOptionalPositional() async {
+    await resolveTestCode('''
+class A {
+  A(int x, [int y = 0]);
+}
+class B extends A {
+  B(int x) : super(x);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int x, [int y = 0]);
+}
+class B extends A {
+  B(super.x);
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
index 92c5799..783000a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
@@ -12,6 +12,9 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateConstructorForFinalFieldsTest);
+    defineReflectiveTests(CreateConstructorForFinalFieldsWithoutNullSafetyTest);
+    defineReflectiveTests(
+        CreateConstructorForFinalFieldsWithoutSuperParametersTest);
   });
 }
 
@@ -45,7 +48,7 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final int b = 2;
-  final int c;
+  final int? c;
 }
 ''');
     await assertHasFix('''
@@ -54,9 +57,9 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final int b = 2;
-  final int c;
+  final int? c;
 
-  const MyWidget({Key? key, this.a, this.c}) : super(key: key);
+  const MyWidget({super.key, required this.a, this.c});
 }
 ''', errorFilter: (error) {
       return error.message.contains("'a'");
@@ -71,7 +74,7 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final Widget child;
-  final int b;
+  final int? b;
 }
 ''');
     await assertHasFix('''
@@ -80,9 +83,9 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final Widget child;
-  final int b;
+  final int? b;
 
-  const MyWidget({Key? key, this.a, this.b, this.child}) : super(key: key);
+  const MyWidget({super.key, required this.a, this.b, required this.child});
 }
 ''', errorFilter: (error) {
       return error.message.contains("'a'");
@@ -97,7 +100,7 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final List<Widget> children;
-  final int b;
+  final int? b;
 }
 ''');
     await assertHasFix('''
@@ -106,9 +109,9 @@
 class MyWidget extends StatelessWidget {
   final int a;
   final List<Widget> children;
-  final int b;
+  final int? b;
 
-  const MyWidget({Key? key, this.a, this.b, this.children}) : super(key: key);
+  const MyWidget({super.key, required this.a, this.b, required this.children});
 }
 ''', errorFilter: (error) {
       return error.message.contains("'a'");
@@ -175,3 +178,179 @@
     await assertNoFix();
   }
 }
+
+@reflectiveTest
+class CreateConstructorForFinalFieldsWithoutNullSafetyTest
+    extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS;
+
+  @override
+  String get testPackageLanguageVersion => '2.9';
+
+  Future<void> test_flutter() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final int b = 2;
+  final int c;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final int b = 2;
+  final int c;
+
+  const MyWidget({Key key, this.a, this.c}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+
+  Future<void> test_flutter_childLast() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final Widget child;
+  final int b;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final Widget child;
+  final int b;
+
+  const MyWidget({Key key, this.a, this.b, this.child}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+
+  Future<void> test_flutter_childrenLast() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final List<Widget> children;
+  final int b;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final List<Widget> children;
+  final int b;
+
+  const MyWidget({Key key, this.a, this.b, this.children}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+}
+
+@reflectiveTest
+class CreateConstructorForFinalFieldsWithoutSuperParametersTest
+    extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS;
+
+  @override
+  String get testPackageLanguageVersion => '2.16';
+
+  Future<void> test_flutter() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final int b = 2;
+  final int? c;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final int b = 2;
+  final int? c;
+
+  const MyWidget({Key? key, required this.a, this.c}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+
+  Future<void> test_flutter_childLast() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final Widget child;
+  final int? b;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final Widget child;
+  final int? b;
+
+  const MyWidget({Key? key, required this.a, this.b, required this.child}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+
+  Future<void> test_flutter_childrenLast() async {
+    writeTestPackageConfig(flutter: true);
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final List<Widget>? children;
+  final int? b;
+}
+''');
+    await assertHasFix('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  final int a;
+  final List<Widget>? children;
+  final int? b;
+
+  const MyWidget({Key? key, required this.a, this.b, this.children}) : super(key: key);
+}
+''', errorFilter: (error) {
+      return error.message.contains("'a'");
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
index 6095520..d5a3275 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_super_test.dart
@@ -12,6 +12,7 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateConstructorSuperTest);
+    defineReflectiveTests(CreateConstructorSuperWithoutSuperParametersTest);
   });
 }
 
@@ -42,18 +43,271 @@
 class B extends A {
   int existingField = 0;
 
-  B(int field) : super(field);
+  B(super.field);
+
+  void existingMethod() {}
+}
+''', matchFixMessage: 'Create constructor to call super.');
+  }
+
+  Future<void> test_importType() async {
+    addSource('$testPackageLibPath/a.dart', '''
+class A {}
+''');
+    addSource('$testPackageLibPath/b.dart', '''
+import 'package:test/a.dart';
+
+class B {
+  B(A a);
+}
+''');
+    await resolveTestCode('''
+import 'package:test/b.dart';
+
+class C extends B {
+}
+''');
+    await assertHasFix('''
+import 'package:test/b.dart';
+
+class C extends B {
+  C(super.a);
+}
+''');
+  }
+
+  Future<void> test_lint_sortConstructorsFirst() async {
+    createAnalysisOptionsFile(lints: [LintNames.sort_constructors_first]);
+    await resolveTestCode('''
+class A {
+  A(this.field);
+
+  int field;
+}
+class B extends A {
+  int existingField = 0;
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A(this.field);
+
+  int field;
+}
+class B extends A {
+  B(super.field);
+
+  int existingField = 0;
+  void existingMethod() {}
+}
+''');
+  }
+
+  Future<void> test_namedConstructor() async {
+    await resolveTestCode('''
+class A {
+  A.named(p1, int p2);
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A.named(p1, int p2);
+}
+class B extends A {
+  int existingField = 0;
+
+  B.named(super.p1, super.p2) : super.named();
+
+  void existingMethod() {}
+}
+''', matchFixMessage: 'Create constructor to call super.named()');
+  }
+
+  Future<void> test_namedOptionalParams() async {
+    await resolveTestCode('''
+class A {
+  A(p1, int p2, List<String> p3, {int? p4});
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A(p1, int p2, List<String> p3, {int? p4});
+}
+class B extends A {
+  int existingField = 0;
+
+  B(super.p1, super.p2, super.p3);
 
   void existingMethod() {}
 }
 ''');
   }
 
+  Future<void> test_namedRequiredParams() async {
+    await resolveTestCode('''
+class A {
+  A(p1, int p2, List<String> p3, {required int p4, required int p5});
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A(p1, int p2, List<String> p3, {required int p4, required int p5});
+}
+class B extends A {
+  int existingField = 0;
+
+  B(super.p1, super.p2, super.p3, {required super.p4, required super.p5});
+
+  void existingMethod() {}
+}
+''');
+  }
+
+  Future<void> test_optional() async {
+    await resolveTestCode('''
+class A {
+  A(p1, int p2, List<String> p3, [int p4 = 0]);
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  A(p1, int p2, List<String> p3, [int p4 = 0]);
+}
+class B extends A {
+  int existingField = 0;
+
+  B(super.p1, super.p2, super.p3);
+
+  void existingMethod() {}
+}
+''');
+  }
+
+  Future<void> test_private() async {
+    await resolveTestCode('''
+class A {
+  A._named(p);
+}
+class B extends A {
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_typeArgument() async {
+    await resolveTestCode('''
+class C<T> {
+  final T x;
+  C(this.x);
+}
+class D extends C<int> {
+}
+''');
+    await assertHasFix('''
+class C<T> {
+  final T x;
+  C(this.x);
+}
+class D extends C<int> {
+  D(super.x);
+}
+''');
+  }
+
+  Future<void> test_underscore() async {
+    await resolveTestCode('''
+class A {
+  int _;
+  A(this._);
+  int get field => _;
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  int _;
+  A(this._);
+  int get field => _;
+}
+class B extends A {
+  int existingField = 0;
+
+  B(super._);
+
+  void existingMethod() {}
+}
+''');
+  }
+}
+
+@reflectiveTest
+class CreateConstructorSuperWithoutSuperParametersTest
+    extends FixProcessorTest {
+  @override
+  FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR_SUPER;
+
+  @override
+  String get testPackageLanguageVersion => '2.16';
+
+  Future<void> test_fieldInitializer() async {
+    await resolveTestCode('''
+class A {
+  int _field;
+  A(this._field);
+  int get field => _field;
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  int _field;
+  A(this._field);
+  int get field => _field;
+}
+class B extends A {
+  int existingField = 0;
+
+  B(int field) : super(field);
+
+  void existingMethod() {}
+}
+''', matchFixMessage: 'Create constructor to call super(...)');
+  }
+
   Future<void> test_importType() async {
-    addSource('$testPackageLibPath/a.dart', r'''
+    addSource('$testPackageLibPath/a.dart', '''
 class A {}
 ''');
-    addSource('$testPackageLibPath/b.dart', r'''
+    addSource('$testPackageLibPath/b.dart', '''
 import 'package:test/a.dart';
 
 class B {
@@ -126,7 +380,7 @@
 
   void existingMethod() {}
 }
-''');
+''', matchFixMessage: 'Create constructor to call super.named(...)');
   }
 
   Future<void> test_namedOptionalParams() async {
@@ -222,7 +476,8 @@
   C(this.x);
 }
 class D extends C<int> {
-}''');
+}
+''');
     await assertHasFix('''
 class C<T> {
   final T x;
@@ -230,6 +485,36 @@
 }
 class D extends C<int> {
   D(int x) : super(x);
-}''');
+}
+''');
+  }
+
+  Future<void> test_underscore() async {
+    await resolveTestCode('''
+class A {
+  int _;
+  A(this._);
+  int get field => _;
+}
+class B extends A {
+  int existingField = 0;
+
+  void existingMethod() {}
+}
+''');
+    await assertHasFix('''
+class A {
+  int _;
+  A(this._);
+  int get field => _;
+}
+class B extends A {
+  int existingField = 0;
+
+  B(int _) : super(_);
+
+  void existingMethod() {}
+}
+''');
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
index 96d0f22..088e4bf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -41,7 +40,7 @@
   FixKind get kind => DartFixKind.CREATE_CONSTRUCTOR;
 
   Future<void> test_inLibrary_insteadOfSyntheticDefault() async {
-    var a = newFile('$testPackageLibPath/a.dart', content: '''
+    var a = newFile2('$testPackageLibPath/a.dart', '''
 /// $_text200
 class A {}
 ''').path;
@@ -61,7 +60,7 @@
   }
 
   Future<void> test_inLibrary_named() async {
-    var a = newFile('$testPackageLibPath/a.dart', content: '''
+    var a = newFile2('$testPackageLibPath/a.dart', '''
 /// $_text200
 class A {}
 ''').path;
@@ -126,9 +125,7 @@
   new M(3);
 }
 ''');
-    await assertNoFix(
-        errorFilter: (error) =>
-            error.errorCode != CompileTimeErrorCode.MIXIN_INSTANTIATE);
+    await assertNoFix();
   }
 
   Future<void> test_named() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
index c06ac62..eb9fe9a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_local_variable_test.dart
@@ -158,13 +158,13 @@
   }
 
   Future<void> test_withImport() async {
-    newFile('$workspaceRootPath/pkg/lib/a/a.dart', content: '''
+    newFile2('$workspaceRootPath/pkg/lib/a/a.dart', '''
 class A {}
 ''');
-    newFile('$workspaceRootPath/pkg/lib/b/b.dart', content: '''
+    newFile2('$workspaceRootPath/pkg/lib/b/b.dart', '''
 class B {}
 ''');
-    newFile('$workspaceRootPath/pkg/lib/c/c.dart', content: '''
+    newFile2('$workspaceRootPath/pkg/lib/c/c.dart', '''
 import 'package:pkg/a/a.dart';
 import 'package:pkg/b/b.dart';
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
index 5f54e50..2add22c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
@@ -515,6 +515,26 @@
 ''');
   }
 
+  Future<void> test_functionType_argument() async {
+    await resolveTestCode('''
+class A {
+  a() => b((c) => c.d);
+}
+''');
+    await assertHasFix('''
+class A {
+  a() => b((c) => c.d);
+
+  b(Function(dynamic c) param0) {}
+}
+''');
+    var groups = change.linkedEditGroups;
+    var index = 0;
+    assertLinkedGroup(groups[index++], ['b((c', 'b(Function']);
+    assertLinkedGroup(groups[index++], ['Function(dynamic c)']);
+    assertLinkedGroup(groups[index++], ['param0']);
+  }
+
   Future<void> test_functionType_method_enclosingClass_instance() async {
     await resolveTestCode('''
 class C {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
index 00c6398..74de357 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_no_such_method_test.dart
@@ -40,7 +40,7 @@
   existing() {}
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 ''');
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
index d20113b..8878039 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_fragment_parser_test.dart
@@ -68,7 +68,11 @@
 
   CodeFragmentParser _parser(GatheringErrorListener listener,
       {List<String>? variables}) {
-    var errorReporter = ErrorReporter(listener, MockSource());
+    var errorReporter = ErrorReporter(
+      listener,
+      MockSource(),
+      isNonNullableByDefault: false,
+    );
     var map = <String, ValueGenerator>{};
     if (variables != null) {
       for (var variableName in variables) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
index f6ccc74..ba29ed2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
@@ -78,7 +78,7 @@
     var statement = body.block.statements[0] as ExpressionStatement;
     var node = statement.expression;
     var template = CodeTemplate(CodeTemplateKind.expression, components, null);
-    var builder = ChangeBuilder(session: session);
+    var builder = ChangeBuilder(session: await session);
     var context = TemplateContext(node, CorrectionUtils(testAnalysisResult));
     await builder.addDartFileEdit(testFile, (builder) {
       builder.addInsertion(0, (builder) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
index 82353b0..aeffff8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test.dart
@@ -576,7 +576,7 @@
   }
 
   Future<void> test_addParameter_withImport() async {
-    newFile('$workspaceRootPath/p/lib/d.dart', content: '''
+    newFile2('$workspaceRootPath/p/lib/d.dart', '''
 class D {}
 ''');
     setPackageContent('''
@@ -1356,14 +1356,14 @@
   /// Add the file containing the data used by the data-driven fix with the
   /// given [content].
   void addPackageDataFile(String content) {
-    newFile('$workspaceRootPath/p/lib/${TransformSetManager.dataFileName}',
-        content: content);
+    newFile2('$workspaceRootPath/p/lib/${TransformSetManager.dataFileName}',
+        content);
   }
 
   /// Set the content of the library that defines the element referenced by the
   /// data on which this test is based.
   void setPackageContent(String content) {
-    newFile('$workspaceRootPath/p/lib/lib.dart', content: content);
+    newFile2('$workspaceRootPath/p/lib/lib.dart', content);
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
         ..add(name: 'p', rootPath: '$workspaceRootPath/p'),
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 e26e0061..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
@@ -26,8 +26,16 @@
   /// Add the file containing the data used by the data-driven fix with the
   /// given [content].
   void addPackageDataFile(String content) {
-    newFile('$workspaceRootPath/p/lib/${TransformSetManager.dataFileName}',
-        content: content);
+    newFile2('$workspaceRootPath/p/lib/${TransformSetManager.dataFileName}',
+        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].
@@ -44,7 +52,7 @@
   /// Set the content of the library that defines the element referenced by the
   /// data on which this test is based.
   void setPackageContent(String content) {
-    newFile('$workspaceRootPath/p/lib/lib.dart', content: content);
+    newFile2('$workspaceRootPath/p/lib/lib.dart', content);
     writeTestPackageConfig(
       config: PackageConfigFileBuilder()
         ..add(name: 'p', rootPath: '$workspaceRootPath/p'),
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
index e7a0f03..327eb16 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
@@ -366,7 +366,7 @@
 
   Future<void> test_imports_package() async {
     var packageRootPath = '$workspaceRootPath/other';
-    newFile('$packageRootPath/lib/other.dart', content: '');
+    newFile2('$packageRootPath/lib/other.dart', '');
     writeTestPackageConfig(
         config: PackageConfigFileBuilder()
           ..add(name: 'other', rootPath: packageRootPath));
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/flutter_use_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
index ce50e6b..3795cb8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
@@ -706,7 +706,6 @@
 ''');
   }
 
-  @failingTest
   Future<void> test_material_FlatButton_deprecated() async {
     setPackageContent('''
 @deprecated
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 72a5b03..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,11 +15,6 @@
 }
 
 class AbstractSdkFixTest extends DataDrivenFixProcessorTest {
-  void addSdkDataFile(String content) {
-    newFile('${sdkRoot.path}/lib/_internal/${TransformSetManager.dataFileName}',
-        content: content);
-  }
-
   @override
   void setUp() {
     addSdkDataFile('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_override_set_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_override_set_parser_test.dart
index 9d4c388..50fdbb9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_override_set_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_override_set_parser_test.dart
@@ -56,8 +56,11 @@
 
   void parse(String content) {
     errorListener = GatheringErrorListener();
-    var errorReporter =
-        ErrorReporter(errorListener, MockSource(fullName: 'data.yaml'));
+    var errorReporter = ErrorReporter(
+      errorListener,
+      MockSource(fullName: 'data.yaml'),
+      isNonNullableByDefault: false,
+    );
     var parser = TransformOverrideSetParser(errorReporter);
     result = parser.parse(content);
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
index 4205071..2f7755b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_manager_test.dart
@@ -35,7 +35,7 @@
 
     var testFile = convertPath('$testPackageLibPath/test.dart');
     addSource(testFile, '');
-    var result = await session.getResolvedLibraryValid(testFile);
+    var result = await (await session).getResolvedLibraryValid(testFile);
     var sets = manager.forLibrary(result.element);
     expect(sets, hasLength(2));
   }
@@ -46,13 +46,13 @@
     addSource('/home/test/pubspec.yaml', '');
     var testFile = convertPath('$testPackageLibPath/test.dart');
     addSource(testFile, '');
-    var result = await session.getResolvedLibraryValid(testFile);
+    var result = await (await session).getResolvedLibraryValid(testFile);
     var sets = manager.forLibrary(result.element);
     expect(sets, hasLength(0));
   }
 
   void _addDataFile(String packageName) {
-    newFile('$workspaceRootPath/$packageName/lib/fix_data.yaml', content: '''
+    newFile2('$workspaceRootPath/$packageName/lib/fix_data.yaml', '''
 version: 1
 transforms:
 - title: 'Rename A'
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test_support.dart
index 66ddafd..5ed5d4e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test_support.dart
@@ -39,8 +39,11 @@
           expectedContextMessages: contextMessages);
 
   void parse(String content) {
-    var errorReporter =
-        ErrorReporter(errorListener, MockSource(fullName: 'data.yaml'));
+    var errorReporter = ErrorReporter(
+      errorListener,
+      MockSource(fullName: 'data.yaml'),
+      isNonNullableByDefault: false,
+    );
     var parser = TransformSetParser(errorReporter, 'myPackage');
     result = parser.parse(content);
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index 87e18e9..c0f1f6e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -33,8 +33,8 @@
   late String resultCode;
 
   /// The workspace in which fixes contributor operates.
-  ChangeWorkspace get workspace {
-    return DartChangeWorkspace([session]);
+  Future<ChangeWorkspace> get workspace async {
+    return DartChangeWorkspace([await session]);
   }
 
   /// Find the error that is to be fixed by computing the errors in the file,
@@ -97,8 +97,8 @@
   bool get useConfigFiles => false;
 
   /// The workspace in which fixes contributor operates.
-  DartChangeWorkspace get workspace {
-    return DartChangeWorkspace([session]);
+  Future<DartChangeWorkspace> get workspace async {
+    return DartChangeWorkspace([await session]);
   }
 
   Future<void> assertHasFix(String expected) async {
@@ -124,7 +124,8 @@
     var tracker = DeclarationsTracker(MemoryByteStore(), resourceProvider);
     var analysisContext = contextFor(testFile);
     tracker.addContext(analysisContext);
-    var processor = BulkFixProcessor(TestInstrumentationService(), workspace,
+    var processor = BulkFixProcessor(
+        TestInstrumentationService(), await workspace,
         useConfigFiles: useConfigFiles);
     await processor.fixErrors([analysisContext]);
     return processor;
@@ -196,7 +197,7 @@
   Future<List<Fix>> _computeFixes(AnalysisError error) async {
     var context = DartFixContextImpl(
       TestInstrumentationService(),
-      workspace,
+      await workspace,
       testAnalysisResult,
       error,
     );
@@ -500,7 +501,7 @@
   Future<List<Fix>> _computeFixes(AnalysisError error) async {
     var context = DartFixContextImpl(
       TestInstrumentationService(),
-      workspace,
+      await workspace,
       testAnalysisResult,
       error,
     );
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
index 75e8a94..db8bd08 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
@@ -237,11 +237,11 @@
   Future<void> test_extension_otherPackage_exported_fromSrc() async {
     var pkgRootPath = '$packagesRootPath/aaa';
 
-    newFile('$pkgRootPath/lib/a.dart', content: r'''
+    newFile2('$pkgRootPath/lib/a.dart', r'''
 export 'src/b.dart';
 ''');
 
-    newFile('$pkgRootPath/lib/src/b.dart', content: r'''
+    newFile2('$pkgRootPath/lib/src/b.dart', r'''
 extension IntExtension on int {
   int get foo => 0;
 }
@@ -299,7 +299,7 @@
   }
 
   Future<void> test_lib() async {
-    newFile('$packagesRootPath/my_pkg/lib/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -331,7 +331,7 @@
   }
 
   Future<void> test_lib_extension() async {
-    newFile('$packagesRootPath/my_pkg/lib/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/a.dart', '''
 extension E on int {
   static String m() => '';
 }
@@ -363,7 +363,7 @@
   }
 
   Future<void> test_lib_src() async {
-    newFile('$packagesRootPath/my_pkg/lib/src/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/src/a.dart', '''
 class Test {}
 ''');
 
@@ -718,7 +718,7 @@
 
   Future<void> test_withClass_pub_other_inLib_dependencies() async {
     var aaaRoot = getFolder('$packagesRootPath/aaa');
-    newFile('${aaaRoot.path}/lib/a.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -746,7 +746,7 @@
 
   Future<void> test_withClass_pub_other_inLib_devDependencies() async {
     var aaaRoot = getFolder('$packagesRootPath/aaa');
-    newFile('${aaaRoot.path}/lib/a.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -770,7 +770,7 @@
 
   Future<void> test_withClass_pub_other_inLib_notListed() async {
     var aaaRoot = getFolder('$packagesRootPath/aaa');
-    newFile('${aaaRoot.path}/lib/a.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -793,7 +793,7 @@
 
   Future<void> test_withClass_pub_other_inTest_dependencies() async {
     var aaaRoot = getFolder('$packagesRootPath/aaa');
-    newFile('${aaaRoot.path}/lib/a.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -808,7 +808,7 @@
         ..add(name: 'aaa', rootPath: aaaRoot.path),
     );
 
-    var b = newFile('$testPackageTestPath/b.dart', content: r'''
+    var b = newFile2('$testPackageTestPath/b.dart', r'''
 void f(Test t) {}
 ''');
 
@@ -823,7 +823,7 @@
 
   Future<void> test_withClass_pub_other_inTest_devDependencies() async {
     var aaaRoot = getFolder('$packagesRootPath/aaa');
-    newFile('${aaaRoot.path}/lib/a.dart', content: '''
+    newFile2('${aaaRoot.path}/lib/a.dart', '''
 class Test {}
 ''');
 
@@ -838,7 +838,7 @@
         ..add(name: 'aaa', rootPath: aaaRoot.path),
     );
 
-    var b = newFile('$testPackageTestPath/b.dart', content: r'''
+    var b = newFile2('$testPackageTestPath/b.dart', r'''
 void f(Test t) {}
 ''');
 
@@ -856,7 +856,7 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class Test {}
 ''');
 
@@ -876,7 +876,7 @@
 name: test
 ''');
 
-    newFile('$testPackageTestPath/a.dart', content: r'''
+    newFile2('$testPackageTestPath/a.dart', r'''
 class Test {}
 ''');
 
@@ -891,11 +891,11 @@
 name: test
 ''');
 
-    newFile('$testPackageTestPath/a.dart', content: r'''
+    newFile2('$testPackageTestPath/a.dart', r'''
 class Test {}
 ''');
 
-    var b = newFile('$testPackageTestPath/b.dart', content: r'''
+    var b = newFile2('$testPackageTestPath/b.dart', r'''
 void f(Test t) {}
 ''');
 
@@ -913,7 +913,7 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension IntExtension on int {
   int get foo => 0;
 }
@@ -1225,10 +1225,10 @@
   FixKind get kind => DartFixKind.IMPORT_LIBRARY_PROJECT2;
 
   Future<void> test_lib() async {
-    newFile('$packagesRootPath/my_pkg/lib/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/a.dart', '''
 export 'b.dart';
 ''');
-    newFile('$packagesRootPath/my_pkg/lib/b.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/b.dart', '''
 class Test {}
 ''');
 
@@ -1258,10 +1258,10 @@
   }
 
   Future<void> test_lib_src() async {
-    newFile('$packagesRootPath/my_pkg/lib/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/a.dart', '''
 export 'src/b.dart';
 ''');
-    newFile('$packagesRootPath/my_pkg/lib/src/b.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/src/b.dart', '''
 class Test {}
 ''');
 
@@ -1291,10 +1291,10 @@
   }
 
   Future<void> test_lib_src_extension() async {
-    newFile('$packagesRootPath/my_pkg/lib/a.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/a.dart', '''
 export 'src/b.dart';
 ''');
-    newFile('$packagesRootPath/my_pkg/lib/src/b.dart', content: '''
+    newFile2('$packagesRootPath/my_pkg/lib/src/b.dart', '''
 extension E on int {
   static String m() => '';
 }
@@ -1354,7 +1354,7 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/src/a.dart', content: r'''
+    newFile2('$testPackageLibPath/src/a.dart', r'''
 class Test {}
 ''');
 
@@ -1374,11 +1374,11 @@
 name: test
 ''');
 
-    newFile('$testPackageLibPath/src/a.dart', content: r'''
+    newFile2('$testPackageLibPath/src/a.dart', r'''
 class Test {}
 ''');
 
-    var b = newFile('$testPackageTestPath/b.dart', content: r'''
+    var b = newFile2('$testPackageTestPath/b.dart', r'''
 void f(Test t) {}
 ''');
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart b/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
index 8d5d664..770e2c0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
@@ -42,12 +42,12 @@
   }
 
   Future<void> test_organizePathImports() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
 ''');
-    newFile('$testPackageLibPath/a/b.dart', content: '''
+    newFile2('$testPackageLibPath/a/b.dart', '''
 class B {
   static void m() {}
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
index dcf483f..2f939e1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/pubspec/test_support.dart
@@ -43,7 +43,7 @@
 
   void validatePubspec(String content) {
     this.content = content;
-    var pubspecFile = newFile('/home/test/pubspec.yaml', content: content);
+    var pubspecFile = newFile2('/home/test/pubspec.yaml', content);
     document = loadYamlDocument(content);
     var yamlContent = document.contents;
     if (yamlContent is! YamlMap) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
index 6d3cf03..6c3ee19 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/qualify_reference_test.dart
@@ -43,7 +43,7 @@
   }
 
   Future<void> test_class_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
@@ -60,7 +60,7 @@
   }
 
   Future<void> test_class_importedWithPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
@@ -104,12 +104,12 @@
   }
 
   Future<void> test_class_notImported() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
 ''');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class B extends A {}
 ''');
@@ -148,7 +148,7 @@
   }
 
   Future<void> test_extension_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
@@ -165,7 +165,7 @@
   }
 
   Future<void> test_extension_importedWithPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
@@ -209,12 +209,12 @@
   }
 
   Future<void> test_extension_notImported() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void m() {}
 }
 ''');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 class B extends A {}
 ''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_assignment_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_assignment_test.dart
new file mode 100644
index 0000000..c613d86
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_assignment_test.dart
@@ -0,0 +1,88 @@
+// 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/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RemoveAssignmentBulkTest);
+    defineReflectiveTests(RemoveAssignmentTest);
+  });
+}
+
+@reflectiveTest
+class RemoveAssignmentBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.unnecessary_null_aware_assignments;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+void f() {
+  var x;
+  var y;
+  x ??= null;
+  y ??= null;
+}
+''');
+    await assertHasFix('''
+void f() {
+  var x;
+  var y;
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveAssignmentTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_ASSIGNMENT;
+
+  @override
+  String get lintCode => LintNames.unnecessary_null_aware_assignments;
+
+  Future<void> test_assignment() async {
+    await resolveTestCode('''
+void f() {
+  var x;
+  x ??= null;
+}
+''');
+    await assertHasFix('''
+void f() {
+  var x;
+}
+''');
+  }
+
+  Future<void> test_assignment_compound() async {
+    await resolveTestCode('''
+void f(x, y) {
+  y = x ??= null;
+}
+''');
+    await assertHasFix('''
+void f(x, y) {
+  y = x;
+}
+''');
+  }
+
+  Future<void> test_assignment_parenthesized() async {
+    await resolveTestCode('''
+void f(int? x) {
+  (x ??= null);
+}
+''');
+    await assertHasFix('''
+void f(int? x) {
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
index 4dec631..319a8e9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_method_declaration_test.dart
@@ -126,7 +126,7 @@
   @FailingTest(issue: 'https://github.com/dart-lang/linter/issues/1997')
   Future<void> test_method_nullSafety_optIn_fromOptOut() async {
     createAnalysisOptionsFile(lints: [lintCode]);
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo() => 0;
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_late_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_late_test.dart
index 171d193..abaa6f3a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_late_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_late_test.dart
@@ -71,7 +71,7 @@
       '''
 String s1 = '', s2 = '';
 ''',
-      errorFilter: (error) => error.toString().contains('test.dart(21..27)'),
+      errorFilter: (error) => error.toString().contains('test.dart(21..22)'),
     );
   }
 
@@ -83,7 +83,7 @@
       '''
 String s1 = '', s2 = '';
 ''',
-      errorFilter: (error) => error.toString().contains('test.dart(12..18)'),
+      errorFilter: (error) => error.toString().contains('test.dart(12..13)'),
     );
   }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
index eaf03e1..809b33f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_with_extension_name_test.dart
@@ -62,7 +62,7 @@
   }
 
   Future<void> test_qualified() async {
-    newFile('$testPackageLibPath/ext.dart', content: '''
+    newFile2('$testPackageLibPath/ext.dart', '''
 extension E on String {
   static int m() => 0;
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
index 5997525..4f1543a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/test_all.dart
@@ -48,6 +48,7 @@
 import 'change_to_static_access_test.dart' as change_to_static_access;
 import 'change_to_test.dart' as change_to;
 import 'change_type_annotation_test.dart' as change_type_annotation;
+import 'convert_class_to_enum_test.dart' as convert_class_to_enum;
 import 'convert_documentation_into_line_test.dart'
     as convert_documentation_into_line;
 import 'convert_flutter_child_test.dart' as convert_flutter_child;
@@ -57,6 +58,7 @@
 import 'convert_into_expression_body_test.dart' as convert_into_expression_body;
 import 'convert_into_is_not_test.dart' as convert_into_is_not;
 import 'convert_quotes_test.dart' as convert_quotes;
+import 'convert_to_cascade_test.dart' as convert_to_cascade;
 import 'convert_to_contains_test.dart' as convert_to_contains;
 import 'convert_to_double_quoted_string_test.dart'
     as convert_to_double_quoted_string;
@@ -81,6 +83,7 @@
 import 'convert_to_single_quoted_string_test.dart'
     as convert_to_single_quoted_string;
 import 'convert_to_spread_test.dart' as convert_to_spread;
+import 'convert_to_super_parameters_test.dart' as convert_to_super_parameters;
 import 'convert_to_where_type_test.dart' as convert_to_where_type;
 import 'create_class_test.dart' as create_class;
 import 'create_constructor_for_final_fields_test.dart'
@@ -128,6 +131,7 @@
 import 'remove_abstract_test.dart' as remove_abstract;
 import 'remove_annotation_test.dart' as remove_annotation;
 import 'remove_argument_test.dart' as remove_argument;
+import 'remove_assignment_test.dart' as remove_assignment;
 import 'remove_await_test.dart' as remove_await;
 import 'remove_comparison_test.dart' as remove_comparison;
 import 'remove_const_test.dart' as remove_const;
@@ -262,6 +266,7 @@
     change_to_nearest_precise_value.main();
     change_to_static_access.main();
     change_type_annotation.main();
+    convert_class_to_enum.main();
     convert_documentation_into_line.main();
     convert_flutter_child.main();
     convert_flutter_children.main();
@@ -270,6 +275,7 @@
     convert_into_expression_body.main();
     convert_into_is_not.main();
     convert_quotes.main();
+    convert_to_cascade.main();
     convert_to_contains.main();
     convert_to_double_quoted_string.main();
     convert_to_for_element.main();
@@ -290,6 +296,7 @@
     convert_to_set_literal.main();
     convert_to_single_quoted_string.main();
     convert_to_spread.main();
+    convert_to_super_parameters.main();
     convert_to_where_type.main();
     create_class.main();
     create_constructor_for_final_field.main();
@@ -335,6 +342,7 @@
     remove_abstract.main();
     remove_annotation.main();
     remove_argument.main();
+    remove_assignment.main();
     remove_await.main();
     remove_comparison.main();
     remove_const.main();
diff --git a/pkg/analysis_server/test/src/utilities/mock_packages.dart b/pkg/analysis_server/test/src/utilities/mock_packages.dart
index 3df14ee..884b687 100644
--- a/pkg/analysis_server/test/src/utilities/mock_packages.dart
+++ b/pkg/analysis_server/test/src/utilities/mock_packages.dart
@@ -53,6 +53,10 @@
     _addFiles(provider, 'flutter');
   }
 
+  void addMeta(MemoryResourceProvider provider) {
+    _addFiles(provider, 'meta');
+  }
+
   /// Add files of the given [packageName] to the [provider].
   Folder _addFiles(MemoryResourceProvider provider, String packageName) {
     var packagesPath = provider.convertPath('/workspace/third_party/dart');
diff --git a/pkg/analysis_server/test/stress/replay/replay.dart b/pkg/analysis_server/test/stress/replay/replay.dart
index 7de5c96..2cbad2f 100644
--- a/pkg/analysis_server/test/stress/replay/replay.dart
+++ b/pkg/analysis_server/test/stress/replay/replay.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/src/dart/scanner/reader.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/glob.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:args/args.dart';
@@ -48,9 +49,6 @@
   /// interaction to use when making `analysis.updateContent` requests.
   static String OVERLAY_STYLE_OPTION_NAME = 'overlay-style';
 
-  /// The name of the pubspec file.
-  static const String PUBSPEC_FILE_NAME = 'pubspec.yaml';
-
   /// The name of the branch used to clean-up after making temporary changes.
   static const String TEMP_BRANCH_NAME = 'temp';
 
@@ -203,7 +201,7 @@
       var children = directory.listSync(recursive: true, followLinks: false);
       for (var child in children) {
         var filePath = child.path;
-        if (path.basename(filePath) == PUBSPEC_FILE_NAME) {
+        if (path.basename(filePath) == file_paths.pubspecYaml) {
           pubspecFiles.add(filePath);
         }
       }
@@ -353,7 +351,7 @@
           statistics.commitsWithChangeInRootCount++;
           await _replayDiff(commitDelta);
         }
-        changedPubspecs = commitDelta.filesMatching(PUBSPEC_FILE_NAME);
+        changedPubspecs = commitDelta.filesMatching(file_paths.pubspecYaml);
       }
     } finally {
       // Ensure that the repository is left at the most recent commit.
diff --git a/pkg/analysis_server/test/stress/utilities/server.dart b/pkg/analysis_server/test/stress/utilities/server.dart
index b2eefa3..68ef712 100644
--- a/pkg/analysis_server/test/stress/utilities/server.dart
+++ b/pkg/analysis_server/test/stress/utilities/server.dart
@@ -762,7 +762,7 @@
 
     var trimmedLine = line.trim();
     if (trimmedLine.isEmpty ||
-        trimmedLine.startsWith('Observatory listening on ')) {
+        trimmedLine.startsWith('The Dart VM service is listening on ')) {
       return;
     }
     logger?.log(fromServer, '$trimmedLine');
diff --git a/pkg/analysis_server/test/verify_no_solo_test.dart b/pkg/analysis_server/test/verify_no_solo_test.dart
index 150c731..32f3e1e 100644
--- a/pkg/analysis_server/test/verify_no_solo_test.dart
+++ b/pkg/analysis_server/test/verify_no_solo_test.dart
@@ -45,9 +45,9 @@
     fail('The directory $testsPath contains multiple analysis contexts.');
   }
 
-  test('no @soloTest', () {
+  test('no @soloTest', () async {
     var failures = <String>[];
-    buildTestsIn(contexts[0].currentSession, testsPath,
+    await buildTestsIn(contexts[0].currentSession, testsPath,
         provider.getFolder(testsPath), failures);
 
     if (failures.isNotEmpty) {
@@ -56,14 +56,14 @@
   });
 }
 
-void buildTestsIn(AnalysisSession session, String testDirPath, Folder directory,
-    List<String> failures) {
+Future<void> buildTestsIn(AnalysisSession session, String testDirPath,
+    Folder directory, List<String> failures) async {
   var pathContext = session.resourceProvider.pathContext;
   var children = directory.getChildren();
   children.sort((first, second) => first.shortName.compareTo(second.shortName));
   for (var child in children) {
     if (child is Folder) {
-      buildTestsIn(session, testDirPath, child, failures);
+      await buildTestsIn(session, testDirPath, child, failures);
     } else if (child is File && child.shortName.endsWith('_test.dart')) {
       var path = child.path;
       var relativePath = pathContext.relative(path, from: testDirPath);
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index 37de909..cb8675d 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.dart
@@ -142,7 +142,7 @@
         continue;
       }
       var relativePath = pathContext.relative(path, from: testDirPath);
-      test(relativePath, () {
+      test(relativePath, () async {
         var result = session.getParsedUnit(path);
         if (result is! ParsedUnitResult) {
           fail('Could not parse $path');
diff --git a/pkg/analysis_server/tool/code_completion/corpus.dart b/pkg/analysis_server/tool/code_completion/corpus.dart
index d7f02f2..26cae4f 100644
--- a/pkg/analysis_server/tool/code_completion/corpus.dart
+++ b/pkg/analysis_server/tool/code_completion/corpus.dart
@@ -5,6 +5,7 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:html/parser.dart' show parse;
 import 'package:http/http.dart' as http;
 import 'package:path/path.dart' as path;
@@ -96,7 +97,8 @@
         headers: const {'User-Agent': 'dart.pkg.completion_metrics'});
 
 bool _hasPubspec(FileSystemEntity f) =>
-    f is Directory && File(path.join(f.path, 'pubspec.yaml')).existsSync();
+    f is Directory &&
+    File(path.join(f.path, file_paths.pubspecYaml)).existsSync();
 
 Future<ProcessResult> _runPub(String dir) async =>
     await Process.run('flutter', ['pub', 'get'], workingDirectory: dir);
diff --git a/pkg/analysis_server/tool/lsp_spec/README.md b/pkg/analysis_server/tool/lsp_spec/README.md
index ccf6e8a..a27f04c 100644
--- a/pkg/analysis_server/tool/lsp_spec/README.md
+++ b/pkg/analysis_server/tool/lsp_spec/README.md
@@ -23,22 +23,23 @@
 
 ## Initialization Options
 
-- `onlyAnalyzeProjectsWithOpenFiles`: When set to `true`, workspace folders will be ignored and analysis will be performed based on the open files, as if no workspace was open at all. This allows opening large folders without causing them to be completely analyzed. Defaults to `false`.
-- `suggestFromUnimportedLibraries`: When set to `false`, completion will not include synbols that are not already imported into the current file. Defaults to `true`, though the client must additionally support `workspace/applyEdit` for these completions to be included.
-- `closingLabels`: When set to `true`, `dart/textDocument/publishClosingLabels` notifications will be sent with information to render editor closing labels.
-- `outline`: When set to `true`, `dart/textDocument/publishOutline` notifications will be sent with outline information for open files.
-- `flutterOutline`: When set to `true`, `dart/textDocument/publishFlutterOutline` notifications will be sent with Flutter outline information for open files.
+- `onlyAnalyzeProjectsWithOpenFiles` (`bool?`): When set to `true`, workspace folders will be ignored and analysis will be performed based on the open files, as if no workspace was open at all. This allows opening large folders without causing them to be completely analyzed. Defaults to `false`.
+- `suggestFromUnimportedLibraries` (`bool?`): When set to `false`, completion will not include synbols that are not already imported into the current file. Defaults to `true`, though the client must additionally support `workspace/applyEdit` for these completions to be included.
+- `closingLabels` (`bool?`): When set to `true`, `dart/textDocument/publishClosingLabels` notifications will be sent with information to render editor closing labels.
+- `outline` (`bool?`): When set to `true`, `dart/textDocument/publishOutline` notifications will be sent with outline information for open files.
+- `flutterOutline` (`bool?`): When set to `true`, `dart/textDocument/publishFlutterOutline` notifications will be sent with Flutter outline information for open files.
 
 ## Client Workspace Configuration
 
 Client workspace settings are requested with `workspace/configuration` during initialization and re-requested whenever the client notifies the server with `workspace/didChangeConfiguration`. This allows the settings to take effect without restarting the server.
 
-- `dart.analysisExcludedFolders`: An array of paths (absolute or relative to each workspace folder) that should be excluded from analysis.
-- `dart.enableSdkFormatter`: When set to `false`, prevents registration (or unregisters) the SDK formatter. When set to `true` or not supplied, will register/reregister the SDK formatter.
-- `dart.lineLength`: The number of characters the formatter should wrap code at. If unspecified, code will be wrapped at `80` characters.
-- `dart.completeFunctionCalls`: Completes functions/methods with their required parameters.
-- `dart.showTodos`: Whether to generate diagnostics for TODO comments. If unspecified, diagnostics will not be generated.
-- `dart.renameFilesWithClasses`: When set to `"always"`, will rename files when classes are renamed if the filename matches the class name (but in snake_form). When set to `"prompt"`, a prompt will be shown on each class rename asking to confirm the file rename. Otherwise, files will not be renamed. Renames are performed using LSP's ResourceOperation edits - that means the rename is simply included in the resulting `WorkspaceEdit` and must be handled by the client.
+- `dart.analysisExcludedFolders` (`List<String>?`): An array of paths (absolute or relative to each workspace folder) that should be excluded from analysis.
+- `dart.enableSdkFormatter` (`bool?`): When set to `false`, prevents registration (or unregisters) the SDK formatter. When set to `true` or not supplied, will register/reregister the SDK formatter.
+- `dart.lineLength` (`int?`): The number of characters the formatter should wrap code at. If unspecified, code will be wrapped at `80` characters.
+- `dart.completeFunctionCalls` (`bool?`): When set to true, completes functions/methods with their required parameters.
+- `dart.showTodos` (`bool?`): Whether to generate diagnostics for TODO comments. If unspecified, diagnostics will not be generated.
+- `dart.renameFilesWithClasses` (`String`): When set to `"always"`, will include edits to rename files when classes are renamed if the filename matches the class name (but in snake_form). When set to `"prompt"`, a prompt will be shown on each class rename asking to confirm the file rename. Otherwise, files will not be renamed. Renames are performed using LSP's ResourceOperation edits - that means the rename is simply included in the resulting `WorkspaceEdit` and must be handled by the client.
+- `dart.enableSnippets` (`bool?`): Whether to include code snippets (such as `class`, `stful`, `switch`) in code completion. When unspecified, snippets will be included.
 
 ## Method Status
 
@@ -85,7 +86,7 @@
 | textDocument/signatureHelp | ✅ | ✅ | | ✅ | ✅ | trigger character handling outstanding
 | textDocument/declaration | | | | | |
 | textDocument/definition | ✅ | ✅ | ✅ | ✅ | ✅ |
-| textDocument/typeDefinition | | | | | |
+| textDocument/typeDefinition | ✅ | ✅ | | ✅ | ✅ |
 | textDocument/implementation | ✅ | ✅ | | ✅ | ✅ |
 | textDocument/references | ✅ | ✅ | | ✅ | ✅ |
 | textDocument/documentHighlight | ✅ | ✅ | | ✅ | ✅ |
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index 58a60e2..f050549 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -286,6 +286,14 @@
       ],
       baseType: 'TextEdit',
     ),
+    // Return type for refactor.validate command.
+    interface(
+      'ValidateRefactorResult',
+      [
+        field('valid', type: 'boolean'),
+        field('message', type: 'string', canBeUndefined: true),
+      ],
+    ),
     TypeAlias(
       null,
       Token.identifier('TextDocumentEditEdits'),
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/generated/java/types/LinkedEditGroup.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
index e858201..2ff6c65 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
@@ -30,6 +30,11 @@
  * wanted to let the user edit the variable name after the operation, all occurrences of the name
  * could be edited simultaneously.
  *
+ * Edit groups may have a length of 0 and function as tabstops where there is no default text, for
+ * example, an edit that inserts an if statement might provide an empty group between parens where
+ * a condition should be typed. For this reason, it's also valid for a group to contain only a
+ * single position that is not linked to others.
+ *
  * @coverage dart.server.generated.types
  */
 @SuppressWarnings("unused")
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 5c07676..aaaeeb5 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -7,7 +7,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  <version>1.32.10</version>
+  <version>1.33.0</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -134,6 +134,11 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.33.0</h4>
+<ul>
+  <li>Requests <tt>getSuggestions2</tt> and <tt>getSuggestionDetails2</tt>
+    are enabled.</li>
+</ul>
 <h4>1.32.10</h4>
 <ul>
   <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
@@ -1485,7 +1490,7 @@
       </field>
     </result>
   </request>
-  <request method="getSuggestions2" experimental="true">
+  <request method="getSuggestions2">
     <p>
       Request that completion suggestions for the given offset in the given
       file be returned. The suggestions will be filtered using fuzzy matching
@@ -1690,7 +1695,7 @@
       </field>
     </result>
   </request>
-  <request method="getSuggestionDetails2" experimental="true">
+  <request method="getSuggestionDetails2">
     <p>
       Clients must make this request when the user has selected a completion
       suggestion with the <tt>isNotImported</tt> field set to <tt>true</tt>.
@@ -2272,6 +2277,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_common.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
index 97e7427..e129eed 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
@@ -504,6 +504,8 @@
 ///   "hasNamedParameters": optional bool
 ///   "parameterName": optional String
 ///   "parameterType": optional String
+///   "libraryUri": optional String
+///   "isNotImported": optional bool
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
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..24ad02a 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -6,7 +6,7 @@
 // To regenerate the file, use the script
 // "pkg/analysis_server/tool/spec/generate_files".
 
-const String PROTOCOL_VERSION = '1.32.10';
+const String PROTOCOL_VERSION = '1.33.0';
 
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
@@ -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/analysis_server_client/lib/src/server_base.dart b/pkg/analysis_server_client/lib/src/server_base.dart
index dd9668c..34f3f2e 100644
--- a/pkg/analysis_server_client/lib/src/server_base.dart
+++ b/pkg/analysis_server_client/lib/src/server_base.dart
@@ -113,11 +113,11 @@
     var trimmedLine = line.trim();
 
     // Guard against lines like:
-    //   {"event":"server.connected","params":{...}}Observatory listening on ...
-    const observatoryMessage = 'Observatory listening on ';
-    if (trimmedLine.contains(observatoryMessage)) {
+    //   {"event":"server.connected","params":{...}}The Dart VM service is listening on ...
+    const dartVMServiceMessage = 'The Dart VM service is listening on ';
+    if (trimmedLine.contains(dartVMServiceMessage)) {
       trimmedLine = trimmedLine
-          .substring(0, trimmedLine.indexOf(observatoryMessage))
+          .substring(0, trimmedLine.indexOf(dartVMServiceMessage))
           .trim();
     }
     if (trimmedLine.isEmpty) {
diff --git a/pkg/analysis_server_client/test/server_test.dart b/pkg/analysis_server_client/test/server_test.dart
index 286938d..504f9f0 100644
--- a/pkg/analysis_server_client/test/server_test.dart
+++ b/pkg/analysis_server_client/test/server_test.dart
@@ -173,7 +173,7 @@
 };
 
 Stream<List<int>> _badMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'id': '0',
     'error': _badErrorMessage,
@@ -182,7 +182,7 @@
 }
 
 Stream<List<int>> _eventMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'event': 'fooEvent',
     'params': {'foo': 'bar', 'baz': 'bang'}
@@ -191,7 +191,7 @@
 }
 
 Stream<List<int>> _goodMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'id': '0',
     'result': {'foo': 'bar'}
diff --git a/pkg/analysis_server_client/test/verify_sorted_test.dart b/pkg/analysis_server_client/test/verify_sorted_test.dart
index 8380e74..7d64d9b 100644
--- a/pkg/analysis_server_client/test/verify_sorted_test.dart
+++ b/pkg/analysis_server_client/test/verify_sorted_test.dart
@@ -54,7 +54,7 @@
         continue;
       }
       var relativePath = pathContext.relative(path, from: testDirPath);
-      test(relativePath, () {
+      test(relativePath, () async {
         var result = session.getParsedUnit(path);
         if (result is! ParsedUnitResult) {
           fail('Could not parse $path');
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 0b6f526..af3475f 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 3.4.1
+* Remove checks for consistency after operations in `AnalysisSession`.
+
+## 3.4.0
+* Deprecated `Resource.parent2`, use `parent` instead.
+* Deprecated `astFactory`, clients should not create AST nodes manually.
+* Changed `CompilationUnit.lineInfo` to be non-nullable.
+* Changed `CompilationUnitElement.lineInfo` to be non-nullable.
+* Deprecated `ResourceProviderMixin.newFile`, use `newFile2` instead.
+* Deprecated `ResourceProviderMixin.newAnalysisOptionsYamlFile`.
+* Added `AnalysisContext.changeFile` and `AnalysisContext.applyPendingFileChanges`.
+* Deprecated `buildSdkSummary`, use asynchronous `buildSdkSummary2` instead.
+
 ## 3.3.1
 * Report HintCode.OVERRIDE_ON_NON_OVERRIDING_xyz on enum.
 
diff --git a/pkg/analyzer/doc/tutorial/ast.md b/pkg/analyzer/doc/tutorial/ast.md
index ed449d8..5206b39 100644
--- a/pkg/analyzer/doc/tutorial/ast.md
+++ b/pkg/analyzer/doc/tutorial/ast.md
@@ -54,7 +54,7 @@
 the AST:
 
 ```dart
-void processFile(AnalysisSession session, String path) {
+void processFile(AnalysisSession session, String path) async {
   var result = session.getParsedUnit(path);
   if (result is ParsedUnitResult) {
     CompilationUnit unit = result.unit;
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_context.dart b/pkg/analyzer/lib/dart/analysis/analysis_context.dart
index 124fe2d..4003c68 100644
--- a/pkg/analyzer/lib/dart/analysis/analysis_context.dart
+++ b/pkg/analyzer/lib/dart/analysis/analysis_context.dart
@@ -35,4 +35,32 @@
   /// Return the workspace for containing the context root.
   @Deprecated('Use contextRoot.workspace instead')
   Workspace get workspace;
+
+  /// Return a [Future] that completes after pending file changes are applied,
+  /// so that [currentSession] can be used to compute results.
+  ///
+  /// The value is the set of all files that are potentially affected by
+  /// the pending changes. This set can be both wider than the set of analyzed
+  /// files (because it may include files imported from other packages, and
+  /// which are on the import path from a changed file to an analyzed file),
+  /// and narrower than the set of analyzed files (because only files that
+  /// were previously accessed are considered to be known and affected).
+  Future<List<String>> applyPendingFileChanges();
+
+  /// Schedules the file with the [path] to be read before producing new
+  /// analysis results.
+  ///
+  /// The file is expected to be a Dart file, reporting non-Dart files, such
+  /// as configuration files `analysis_options.yaml`, `package_config.json`,
+  /// etc will not re-create analysis contexts.
+  ///
+  /// This will invalidate any previously returned [AnalysisSession], to
+  /// get a new analysis session apply pending file changes:
+  /// ```dart
+  /// analysisContext.changeFile(...);
+  /// await analysisContext.applyPendingFileChanges();
+  /// var analysisSession = analysisContext.currentSession;
+  /// var resolvedUnit = analysisSession.getResolvedUnit(...);
+  /// ```
+  void changeFile(String path);
 }
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_options.dart b/pkg/analyzer/lib/dart/analysis/analysis_options.dart
new file mode 100644
index 0000000..fbb185e
--- /dev/null
+++ b/pkg/analyzer/lib/dart/analysis/analysis_options.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2014, 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:typed_data';
+
+import 'package:analyzer/dart/analysis/code_style_options.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/source/error_processor.dart';
+import 'package:analyzer/src/services/lint.dart';
+import 'package:pub_semver/src/version_constraint.dart';
+
+/// A set of analysis options used to control the behavior of an analysis
+/// context.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class AnalysisOptions {
+  /// A flag indicating whether to run checks on AndroidManifest.xml file to
+  /// see if it is complaint with Chrome OS.
+  bool get chromeOsManifestChecks;
+
+  /// Return the options used to control the code that is generated.
+  CodeStyleOptions get codeStyleOptions;
+
+  /// The set of features that are globally enabled for this context.
+  FeatureSet get contextFeatures;
+
+  /// Return a list of the names of the packages for which, if they define a
+  /// plugin, the plugin should be enabled.
+  List<String> get enabledPluginNames;
+
+  /// Return a list of error processors that are to be used when reporting
+  /// errors in some analysis context.
+  List<ErrorProcessor> get errorProcessors;
+
+  /// Return a list of exclude patterns used to exclude some sources from
+  /// analysis.
+  List<String> get excludePatterns;
+
+  /// Return `true` if analysis is to generate hint results (e.g. type inference
+  /// based information and pub best practices).
+  bool get hint;
+
+  /// Return `true` if analysis is to generate lint warnings.
+  bool get lint;
+
+  /// Return a list of the lint rules that are to be run in an analysis context
+  /// if [lint] returns `true`.
+  List<Linter> get lintRules;
+
+  /// The version range for the SDK specified in `pubspec.yaml`, or `null` if
+  /// there is no `pubspec.yaml` or if it does not contain an SDK range.
+  VersionConstraint? get sdkVersionConstraint;
+
+  /// Return the opaque signature of the options.
+  Uint32List get signature;
+
+  /// Return `true` the lint with the given [name] is enabled.
+  bool isLintEnabled(String name);
+
+  /// Determine whether two signatures returned by [signature] are equal.
+  static bool signaturesEqual(Uint32List a, Uint32List b) {
+    if (a.length != b.length) {
+      return false;
+    }
+    for (int i = 0; i < a.length; i++) {
+      if (a[i] != b[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+}
diff --git a/pkg/analyzer/lib/dart/analysis/code_style_options.dart b/pkg/analyzer/lib/dart/analysis/code_style_options.dart
new file mode 100644
index 0000000..4fb8a42
--- /dev/null
+++ b/pkg/analyzer/lib/dart/analysis/code_style_options.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/// A set of options related to coding style that apply to the code within a
+/// single analysis context.
+///
+/// Clients may not extend, implement or mix-in this class.
+abstract class CodeStyleOptions {
+  /// Return `true` if local variables should be `final` whenever possible.
+  bool get makeLocalsFinal;
+
+  /// Return `true` if the formatter should be used on code changes in this
+  /// context.
+  bool get useFormatter;
+
+  /// Return `true` if URIs should be "relative", meaning without a scheme,
+  /// whenever possible.
+  bool get useRelativeUris;
+}
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 9922aec..effa404 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -34,6 +34,9 @@
   /// Feature information for generic metadata.
   static final generic_metadata = ExperimentalFeatures.generic_metadata;
 
+  /// Feature information for inference-update-1.
+  static final inference_update_1 = ExperimentalFeatures.inference_update_1;
+
   /// Feature information for macros.
   static final macros = ExperimentalFeatures.macros;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 682228e..dfba96d 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -14,6 +14,7 @@
 /// instances of the interfaces that constitute the AST.
 ///
 /// Clients should not extend, implement or mix-in this class.
+@Deprecated('Should not be used by clients')
 abstract class AstFactory {
   /// Returns a newly created list of adjacent strings. To be syntactically
   /// valid, the list of [strings] must contain at least two elements.
diff --git a/pkg/analyzer/lib/dart/ast/standard_ast_factory.dart b/pkg/analyzer/lib/dart/ast/standard_ast_factory.dart
index 0b7a130..544346b 100644
--- a/pkg/analyzer/lib/dart/ast/standard_ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/standard_ast_factory.dart
@@ -6,4 +6,5 @@
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 
 /// Gets an instance of [AstFactory] based on the standard AST implementation.
+@Deprecated('Should not be used by clients')
 final AstFactory astFactory = AstFactoryImpl();
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index 309fcf1..364355a 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -102,9 +102,7 @@
 
   @override
   T? visitNode(AstNode node) {
-    delegates.forEach((delegate) {
-      node.accept(delegate);
-    });
+    delegates.forEach(node.accept);
     node.visitChildren(this);
     return null;
   }
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index e0478a0..3a393c3 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -413,8 +413,8 @@
   @Deprecated('Not useful for clients')
   bool get hasLoadLibraryFunction;
 
-  /// Return the [LineInfo] for the [source], or `null` if not computed yet.
-  LineInfo? get lineInfo;
+  /// Return the [LineInfo] for the [source].
+  LineInfo get lineInfo;
 
   /// Return a list containing all of the mixins contained in this compilation
   /// unit.
@@ -1234,6 +1234,10 @@
   /// invoke an undefined method on an object.
   static final String NO_SUCH_METHOD_METHOD_NAME = "noSuchMethod";
 
+  /// Return `true` if this function represents `identical` from the
+  /// `dart:core` library.
+  bool get isDartCoreIdentical;
+
   /// Return `true` if the function is an entry point, i.e. a top-level function
   /// and has the name `main`.
   bool get isEntryPoint;
diff --git a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
index c87a35f..e5d5193 100644
--- a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
+++ b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart
@@ -29,6 +29,7 @@
 ///
 /// If [embedderYamlPath] is provided, then libraries from this file are
 /// appended to the libraries of the specified SDK.
+@Deprecated('Use buildSdkSummary2() instead')
 Uint8List buildSdkSummary({
   required ResourceProvider resourceProvider,
   required String sdkPath,
@@ -46,7 +47,7 @@
     var map = loadYaml(content) as YamlMap;
     var embedderSdk = EmbedderSdk(
       resourceProvider,
-      {file.parent2: map},
+      {file.parent: map},
       languageVersion: sdk.languageVersion,
     );
     for (var library in embedderSdk.sdkLibraries) {
@@ -74,6 +75,55 @@
   ).build();
 }
 
+/// Build summary for SDK at the given [sdkPath].
+///
+/// If [embedderYamlPath] is provided, then libraries from this file are
+/// appended to the libraries of the specified SDK.
+Future<Uint8List> buildSdkSummary2({
+  required ResourceProvider resourceProvider,
+  required String sdkPath,
+  String? embedderYamlPath,
+}) async {
+  var sdk = FolderBasedDartSdk(
+    resourceProvider,
+    resourceProvider.getFolder(sdkPath),
+  );
+
+  // Append libraries from the embedder.
+  if (embedderYamlPath != null) {
+    var file = resourceProvider.getFile(embedderYamlPath);
+    var content = file.readAsStringSync();
+    var map = loadYaml(content) as YamlMap;
+    var embedderSdk = EmbedderSdk(
+      resourceProvider,
+      {file.parent: map},
+      languageVersion: sdk.languageVersion,
+    );
+    for (var library in embedderSdk.sdkLibraries) {
+      var uriStr = library.shortName;
+      if (sdk.libraryMap.getLibrary(uriStr) == null) {
+        sdk.libraryMap.setLibrary(uriStr, library);
+      }
+    }
+  }
+
+  var librarySources = sdk.sdkLibraries.map((e) {
+    return sdk.mapDartUri(e.shortName)!;
+  }).toList();
+
+  var analysisContext = AnalysisContextImpl(
+    SynchronousSession(AnalysisOptionsImpl(), DeclaredVariables()),
+    SourceFactory([DartUriResolver(sdk)]),
+  );
+
+  return _Builder(
+    analysisContext,
+    sdk.allowedExperimentsJson,
+    sdk.languageVersion,
+    librarySources,
+  ).build2();
+}
+
 class _Builder {
   final AnalysisContextImpl context;
   final String allowedExperimentsJson;
@@ -95,6 +145,7 @@
   }
 
   /// Build the linked bundle and return its bytes.
+  @deprecated
   Uint8List build() {
     librarySources.forEach(_addLibrary);
 
@@ -125,6 +176,37 @@
     );
   }
 
+  /// Build the linked bundle and return its bytes.
+  Future<Uint8List> build2() async {
+    librarySources.forEach(_addLibrary);
+
+    var elementFactory = LinkedElementFactory(
+      context,
+      AnalysisSessionImpl(
+        _FakeAnalysisDriver(),
+      ),
+      Reference.root(),
+    );
+
+    var linkResult = await link2(elementFactory, inputLibraries);
+
+    var bundleBuilder = PackageBundleBuilder();
+    for (var library in inputLibraries) {
+      bundleBuilder.addLibrary(
+        library.uriStr,
+        library.units.map((e) => e.uriStr).toList(),
+      );
+    }
+    return bundleBuilder.finish(
+      resolutionBytes: linkResult.resolutionBytes,
+      sdk: PackageBundleSdk(
+        languageVersionMajor: languageVersion.major,
+        languageVersionMinor: languageVersion.minor,
+        allowedExperimentsJson: allowedExperimentsJson,
+      ),
+    );
+  }
+
   void _addLibrary(Source source) {
     String uriStr = source.uri.toString();
     if (!libraryUris.add(uriStr)) {
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 1e78252..6477d49 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -507,6 +507,7 @@
   FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED,
   FfiCode.ANNOTATION_ON_POINTER_FIELD,
   FfiCode.ARGUMENT_MUST_BE_A_CONSTANT,
+  FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE,
   FfiCode.CREATION_OF_STRUCT_OR_UNION,
   FfiCode.EMPTY_STRUCT,
   FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD,
@@ -735,7 +736,6 @@
   ParserErrorCode.DUPLICATE_PREFIX,
   ParserErrorCode.DUPLICATED_MODIFIER,
   ParserErrorCode.EMPTY_ENUM_BODY,
-  ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
   ParserErrorCode.ENUM_IN_CLASS,
   ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND,
   ParserErrorCode.EXPECTED_BODY,
@@ -806,7 +806,10 @@
   ParserErrorCode.INVALID_SUPER_IN_INITIALIZER,
   ParserErrorCode.INVALID_SYNC,
   ParserErrorCode.INVALID_THIS_IN_INITIALIZER,
-  ParserErrorCode.INVALID_UNICODE_ESCAPE,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED,
   ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION,
   ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
   ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW,
@@ -941,7 +944,7 @@
 
 /// The lazy initialized map from [ErrorCode.uniqueName] to the [ErrorCode]
 /// instance.
-late final HashMap<String, ErrorCode> _uniqueNameToCodeMap =
+final HashMap<String, ErrorCode> _uniqueNameToCodeMap =
     _computeUniqueNameToCodeMap();
 
 /// Return the [ErrorCode] with the given [uniqueName], or `null` if not
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 807499c..113f4bb 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -70,8 +70,9 @@
   /// is used to compute the location of the error.
   void reportErrorForElement(ErrorCode errorCode, Element element,
       [List<Object>? arguments]) {
-    reportErrorForOffset(errorCode, element.nonSynthetic.nameOffset,
-        element.nameLength, arguments);
+    var nonSynthetic = element.nonSynthetic;
+    reportErrorForOffset(
+        errorCode, nonSynthetic.nameOffset, nonSynthetic.nameLength, arguments);
   }
 
   /// Report a diagnostic with the given [code] and [arguments]. The
diff --git a/pkg/analyzer/lib/file_system/file_system.dart b/pkg/analyzer/lib/file_system/file_system.dart
index 96f5b84..e0f9c23 100644
--- a/pkg/analyzer/lib/file_system/file_system.dart
+++ b/pkg/analyzer/lib/file_system/file_system.dart
@@ -156,6 +156,11 @@
 
   /// Return the [Folder] that contains this resource, possibly itself if this
   /// resource is a root folder.
+  Folder get parent;
+
+  /// Return the [Folder] that contains this resource, possibly itself if this
+  /// resource is a root folder.
+  @Deprecated('Use parent instead')
   Folder get parent2;
 
   /// Return the full path to this resource.
@@ -262,7 +267,7 @@
       if (current.isRoot) {
         break;
       }
-      current = current.parent2;
+      current = current.parent;
     }
   }
 }
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index 53c2a00..6f8edc5 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -567,7 +567,7 @@
   }
 
   @override
-  Uri toUri() => provider.pathContext.toUri(path + '/');
+  Uri toUri() => provider.pathContext.toUri('$path/');
 }
 
 /// An in-memory implementation of [Resource].
@@ -586,12 +586,15 @@
   int get hashCode => path.hashCode;
 
   @override
-  Folder get parent2 {
+  Folder get parent {
     String parentPath = provider.pathContext.dirname(path);
     return provider.getFolder(parentPath);
   }
 
   @override
+  Folder get parent2 => parent;
+
+  @override
   String get shortName => provider.pathContext.basename(path);
 
   @override
diff --git a/pkg/analyzer/lib/file_system/overlay_file_system.dart b/pkg/analyzer/lib/file_system/overlay_file_system.dart
index 2fe9521..710ce97 100644
--- a/pkg/analyzer/lib/file_system/overlay_file_system.dart
+++ b/pkg/analyzer/lib/file_system/overlay_file_system.dart
@@ -122,6 +122,7 @@
   _OverlayFile(OverlayResourceProvider provider, File file)
       : super(provider, file);
 
+  @Deprecated('Use watch() instead')
   @override
   Stream<WatchEvent> get changes => watch().changes;
 
@@ -236,6 +237,7 @@
   _OverlayFolder(OverlayResourceProvider provider, Folder folder)
       : super(provider, folder);
 
+  @Deprecated('Use watch() instead')
   @override
   Stream<WatchEvent> get changes => watch().changes;
 
@@ -351,12 +353,15 @@
   int get hashCode => path.hashCode;
 
   @override
-  Folder get parent2 {
-    var parent = _resource.parent2;
+  Folder get parent {
+    var parent = _resource.parent;
     return _OverlayFolder(provider, parent);
   }
 
   @override
+  Folder get parent2 => parent;
+
+  @override
   String get path => _resource.path;
 
   @override
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 5a2c317..6b75c0c 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -13,7 +13,7 @@
 
 /// The name of the directory containing plugin specific subfolders used to
 /// store data across sessions.
-const String _SERVER_DIR = ".dartServer";
+const String _serverDir = ".dartServer";
 
 /// Returns the path to default state location.
 ///
@@ -28,7 +28,7 @@
 
   final home = io.Platform.isWindows ? env['LOCALAPPDATA'] : env['HOME'];
   return home != null && io.FileSystemEntity.isDirectorySync(home)
-      ? join(home, _SERVER_DIR)
+      ? join(home, _serverDir)
       : null;
 }
 
@@ -96,6 +96,7 @@
 class _PhysicalFile extends _PhysicalResource implements File {
   _PhysicalFile(io.File file) : super(file);
 
+  @Deprecated('Use watch() instead')
   @override
   Stream<WatchEvent> get changes => watch().changes;
 
@@ -208,6 +209,7 @@
 class _PhysicalFolder extends _PhysicalResource implements Folder {
   _PhysicalFolder(io.Directory directory) : super(directory);
 
+  @Deprecated('Use watch() instead')
   @override
   Stream<WatchEvent> get changes => watch().changes;
 
@@ -340,12 +342,15 @@
   int get hashCode => path.hashCode;
 
   @override
-  Folder get parent2 {
+  Folder get parent {
     String parentPath = pathContext.dirname(path);
     return _PhysicalFolder(io.Directory(parentPath));
   }
 
   @override
+  Folder get parent2 => parent;
+
+  @override
   String get path => _entry.path;
 
   /// Return the path context used by this resource provider.
diff --git a/pkg/analyzer/lib/instrumentation/multicast_service.dart b/pkg/analyzer/lib/instrumentation/multicast_service.dart
index 9c7e0af..7962f56 100644
--- a/pkg/analyzer/lib/instrumentation/multicast_service.dart
+++ b/pkg/analyzer/lib/instrumentation/multicast_service.dart
@@ -13,7 +13,9 @@
 
   @override
   void logError(String message) {
-    _services.forEach((s) => s.logError(message));
+    for (var service in _services) {
+      service.logError(message);
+    }
   }
 
   @override
@@ -22,81 +24,105 @@
     StackTrace? stackTrace,
     List<InstrumentationServiceAttachment>? attachments,
   ]) {
-    _services
-        .forEach((s) => s.logException(exception, stackTrace, attachments));
+    for (var service in _services) {
+      service.logException(exception, stackTrace, attachments);
+    }
   }
 
   @override
   void logInfo(String message, [dynamic exception]) {
-    _services.forEach((s) => s.logInfo(message, exception));
+    for (var service in _services) {
+      service.logInfo(message, exception);
+    }
   }
 
   @override
   void logLogEntry(String level, DateTime time, String message,
       Object exception, StackTrace stackTrace) {
-    _services.forEach(
-        (s) => s.logLogEntry(level, time, message, exception, stackTrace));
+    for (var service in _services) {
+      service.logLogEntry(level, time, message, exception, stackTrace);
+    }
   }
 
   @override
   void logNotification(String notification) {
-    _services.forEach((s) => s.logNotification(notification));
+    for (var service in _services) {
+      service.logNotification(notification);
+    }
   }
 
   @override
   void logPluginError(
       PluginData plugin, String code, String message, String stackTrace) {
-    _services
-        .forEach((s) => s.logPluginError(plugin, code, message, stackTrace));
+    for (var service in _services) {
+      service.logPluginError(plugin, code, message, stackTrace);
+    }
   }
 
   @override
   void logPluginException(
       PluginData plugin, Object exception, StackTrace? stackTrace) {
-    _services
-        .forEach((s) => s.logPluginException(plugin, exception, stackTrace));
+    for (var service in _services) {
+      service.logPluginException(plugin, exception, stackTrace);
+    }
   }
 
   @override
   void logPluginNotification(String pluginId, String notification) {
-    _services.forEach((s) => s.logPluginNotification(pluginId, notification));
+    for (var service in _services) {
+      service.logPluginNotification(pluginId, notification);
+    }
   }
 
   @override
   void logPluginRequest(String pluginId, String request) {
-    _services.forEach((s) => s.logPluginRequest(pluginId, request));
+    for (var service in _services) {
+      service.logPluginRequest(pluginId, request);
+    }
   }
 
   @override
   void logPluginResponse(String pluginId, String response) {
-    _services.forEach((s) => s.logPluginResponse(pluginId, response));
+    for (var service in _services) {
+      service.logPluginResponse(pluginId, response);
+    }
   }
 
   @override
   void logPluginTimeout(PluginData plugin, String request) {
-    _services.forEach((s) => s.logPluginTimeout(plugin, request));
+    for (var service in _services) {
+      service.logPluginTimeout(plugin, request);
+    }
   }
 
   @override
   void logRequest(String request) {
-    _services.forEach((s) => s.logRequest(request));
+    for (var service in _services) {
+      service.logRequest(request);
+    }
   }
 
   @override
   void logResponse(String response) {
-    _services.forEach((s) => s.logResponse(response));
+    for (var service in _services) {
+      service.logResponse(response);
+    }
   }
 
   @override
   void logVersion(String uuid, String clientId, String clientVersion,
       String serverVersion, String sdkVersion) {
-    _services.forEach((s) =>
-        s.logVersion(uuid, clientId, clientVersion, serverVersion, sdkVersion));
+    for (var service in _services) {
+      service.logVersion(
+          uuid, clientId, clientVersion, serverVersion, sdkVersion);
+    }
   }
 
   @override
   void logWatchEvent(String folderPath, String filePath, String changeType) {
-    _services.forEach((s) => s.logWatchEvent(folderPath, filePath, changeType));
+    for (var service in _services) {
+      service.logWatchEvent(folderPath, filePath, changeType);
+    }
   }
 
   @override
diff --git a/pkg/analyzer/lib/instrumentation/service.dart b/pkg/analyzer/lib/instrumentation/service.dart
index 4269a99..0021002 100644
--- a/pkg/analyzer/lib/instrumentation/service.dart
+++ b/pkg/analyzer/lib/instrumentation/service.dart
@@ -87,8 +87,7 @@
 
   /// Create a new attachment with the unique [id] and string [value].
   InstrumentationServiceAttachment.string({
-    required String id,
+    required this.id,
     required String value,
-  })  : id = id,
-        stringValue = value;
+  }) : stringValue = value;
 }
diff --git a/pkg/analyzer/lib/source/line_info.dart b/pkg/analyzer/lib/source/line_info.dart
index 41ce1ac..fb794c1 100644
--- a/pkg/analyzer/lib/source/line_info.dart
+++ b/pkg/analyzer/lib/source/line_info.dart
@@ -15,10 +15,10 @@
   CharacterLocation(this.lineNumber, this.columnNumber);
 
   @override
-  bool operator ==(Object object) =>
-      object is CharacterLocation &&
-      lineNumber == object.lineNumber &&
-      columnNumber == object.columnNumber;
+  bool operator ==(Object other) =>
+      other is CharacterLocation &&
+      lineNumber == other.lineNumber &&
+      columnNumber == other.columnNumber;
 
   @override
   String toString() => '$lineNumber:$columnNumber';
diff --git a/pkg/analyzer/lib/src/analysis_options/code_style_options.dart b/pkg/analyzer/lib/src/analysis_options/code_style_options.dart
new file mode 100644
index 0000000..1276bd9
--- /dev/null
+++ b/pkg/analyzer/lib/src/analysis_options/code_style_options.dart
@@ -0,0 +1,26 @@
+// 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:analyzer/dart/analysis/analysis_options.dart';
+import 'package:analyzer/dart/analysis/code_style_options.dart';
+
+/// The concrete implementation of [CodeStyleOptions].
+class CodeStyleOptionsImpl implements CodeStyleOptions {
+  /// The analysis options that owns this instance.
+  final AnalysisOptions options;
+
+  @override
+  final bool useFormatter;
+
+  CodeStyleOptionsImpl(this.options, {required this.useFormatter});
+
+  @override
+  bool get makeLocalsFinal => _isLintEnabled('prefer_final_locals');
+
+  @override
+  bool get useRelativeUris => _isLintEnabled('prefer_relative_imports');
+
+  /// Return `true` if the lint with the given [name] is enabled.
+  bool _isLintEnabled(String name) => options.isLintEnabled(name);
+}
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
index bd2a210..f32b90b 100644
--- a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -46,7 +46,7 @@
     ...uriResolvers,
   ]);
 
-  var dataStore = SummaryDataStore.tmp();
+  var dataStore = SummaryDataStore();
   dataStore.addBundle('', sdkBundle);
 
   var logger = PerformanceLog(null);
@@ -77,6 +77,12 @@
     return _driver.currentSession;
   }
 
+  /// Return a [Future] that completes after pending file changes are applied,
+  /// so that [currentSession] can be used to compute results.
+  Future<void> applyPendingFileChanges() {
+    return _driver.applyPendingFileChanges();
+  }
+
   /// The file with the given [path] might have changed - updated, added or
   /// removed. Or not, we don't know. Or it might have, but then changed back.
   ///
diff --git a/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart b/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
index dc054a8..3cccf58 100644
--- a/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
+++ b/pkg/analyzer/lib/src/clients/dart_style/rewrite_cascade.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/ast_factory.dart';
 
 /// Parenthesize the target of the [expressionStatement]'s expression (assumed
 /// to [cascadeExpression]) before removing the cascade.
diff --git a/pkg/analyzer/lib/src/context/packages.dart b/pkg/analyzer/lib/src/context/packages.dart
index d63d228..78f5bb5 100644
--- a/pkg/analyzer/lib/src/context/packages.dart
+++ b/pkg/analyzer/lib/src/context/packages.dart
@@ -14,7 +14,7 @@
 /// Looks for `.dart_tool/package_config.json` or `.packages` in the given
 /// and parent directories.
 Packages findPackagesFrom(ResourceProvider provider, Resource start) {
-  var startFolder = start is Folder ? start : start.parent2;
+  var startFolder = start is Folder ? start : start.parent;
   for (var current in startFolder.withAncestors) {
     try {
       var jsonFile = current
@@ -122,7 +122,7 @@
     if (isJson) {
       return parsePackageConfigJsonFile(provider, file);
     } else {
-      var relativePackageConfigFile = file.parent2
+      var relativePackageConfigFile = file.parent
           .getChildAssumingFolder('.dart_tool')
           .getChildAssumingFile('package_config.json');
       if (relativePackageConfigFile.exists) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
index 2f3fd34..266ad41 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/analysis/file_content_cache.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/summary2/macro.dart';
 import 'package:analyzer/src/util/sdk.dart';
 
 /// An implementation of [AnalysisContextCollection].
@@ -42,6 +43,7 @@
     AnalysisDriverScheduler? scheduler,
     FileContentCache? fileContentCache,
     void Function(AnalysisOptionsImpl)? updateAnalysisOptions,
+    MacroKernelBuilder? macroKernelBuilder,
   }) : resourceProvider =
             resourceProvider ?? PhysicalResourceProvider.INSTANCE {
     sdkPath ??= getSdkPath();
@@ -74,6 +76,7 @@
         scheduler: scheduler,
         updateAnalysisOptions: updateAnalysisOptions,
         fileContentCache: fileContentCache,
+        macroKernelBuilder: macroKernelBuilder,
       );
       contexts.add(context);
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index c999006..ddb9cc9 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -25,8 +25,10 @@
 import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
+import 'package:analyzer/src/summary2/macro.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
 import 'package:analyzer/src/task/options.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/sdk.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
 
@@ -57,6 +59,7 @@
     String? sdkSummaryPath,
     void Function(AnalysisOptionsImpl)? updateAnalysisOptions,
     FileContentCache? fileContentCache,
+    MacroKernelBuilder? macroKernelBuilder,
   }) {
     // TODO(scheglov) Remove this, and make `sdkPath` required.
     sdkPath ??= getSdkPath();
@@ -72,7 +75,7 @@
 
     SummaryDataStore? summaryData;
     if (librarySummaryPaths != null) {
-      summaryData = SummaryDataStore.tmp();
+      summaryData = SummaryDataStore();
       for (var summaryPath in librarySummaryPaths) {
         var bytes = resourceProvider.getFile(summaryPath).readAsBytesSync();
         var bundle = PackageBundleReader(bytes);
@@ -114,6 +117,7 @@
       externalSummaries: summaryData,
       retainDataForTesting: retainDataForTesting,
       fileContentCache: fileContentCache,
+      macroKernelBuilder: macroKernelBuilder,
     );
 
     if (declaredVariables != null) {
@@ -176,7 +180,7 @@
       );
       if (embedderYamlSource != null) {
         var embedderYamlPath = embedderYamlSource.fullName;
-        var libFolder = resourceProvider.getFile(embedderYamlPath).parent2;
+        var libFolder = resourceProvider.getFile(embedderYamlPath).parent;
         var locator = EmbedderYamlLocator.forLibFolder(libFolder);
         var embedderMap = locator.embedderYamls;
         if (embedderMap.isNotEmpty) {
@@ -198,7 +202,7 @@
   /// TODO(scheglov) Get it from [Workspace]?
   File? _findPubspecFile(ContextRoot contextRoot) {
     for (var current in contextRoot.root.withAncestors) {
-      var file = current.getChildAssumingFile('pubspec.yaml');
+      var file = current.getChildAssumingFile(file_paths.pubspecYaml);
       if (file.exists) {
         return file;
       }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 245db3d..033fcb4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -125,7 +125,7 @@
     }
 
     for (File file in includedFiles) {
-      Folder parent = file.parent2;
+      Folder parent = file.parent;
 
       var location = _contextRootLocation(
         parent,
@@ -186,7 +186,7 @@
       optionsFile = defaultOptionsFile;
     } else {
       optionsFile = _findOptionsFile(parent);
-      optionsFolderToChooseRoot = optionsFile?.parent2;
+      optionsFolderToChooseRoot = optionsFile?.parent;
     }
 
     File? packagesFile;
@@ -380,17 +380,6 @@
 
     var rootPath = folder.path;
 
-    // TODO(scheglov) Do we need this?
-    if (_hasPackageFileInPath(rootPath)) {
-      // A Bazel or Gn workspace that includes a '.packages' file is treated
-      // like a normal (non-Bazel/Gn) directory. But may still use
-      // package:build or Pub.
-      return PackageBuildWorkspace.find(
-              resourceProvider, packageMap, rootPath) ??
-          PubWorkspace.find(resourceProvider, packageMap, rootPath) ??
-          BasicWorkspace.find(resourceProvider, packageMap, rootPath);
-    }
-
     Workspace? workspace;
     workspace = BazelWorkspace.find(resourceProvider, rootPath,
         lookForBuildFileSubstitutes: false);
@@ -478,7 +467,7 @@
               var excludedComponents = posix.split(excludedPath);
               if (pathContext.isRelative(excludedPath)) {
                 excludedComponents = [
-                  ...pathContext.split(optionsFile.parent2.path),
+                  ...pathContext.split(optionsFile.parent.path),
                   ...excludedComponents,
                 ];
               }
@@ -519,16 +508,7 @@
       return file;
     }
 
-    return _getFile(folder, file_paths.dotPackages);
-  }
-
-  /// Return `true` if either the directory at [rootPath] or a parent of that
-  /// directory contains a `.packages` file.
-  bool _hasPackageFileInPath(String rootPath) {
-    var folder = resourceProvider.getFolder(rootPath);
-    return folder.withAncestors.any((current) {
-      return current.getChildAssumingFile('.packages').exists;
-    });
+    return null;
   }
 
   /// Add to the given lists of [folders] and [files] all of the resources in
@@ -558,7 +538,7 @@
   }
 
   static Folder _fileSystemRoot(Resource resource) {
-    for (var current = resource.parent2;; current = current.parent2) {
+    for (var current = resource.parent;; current = current.parent) {
       if (current.isRoot) {
         return current;
       }
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
index b8a21dc..2def037 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
@@ -31,9 +31,9 @@
   @override
   String toString() {
     if (isShow) {
-      return 'show ' + names.join(', ');
+      return 'show ${names.join(', ')}';
     } else {
-      return 'hide ' + names.join(', ');
+      return 'hide ${names.join(', ')}';
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 84644e4..46404b1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -42,6 +42,7 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
+import 'package:analyzer/src/summary2/macro.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:meta/meta.dart';
@@ -82,7 +83,9 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 209;
+  static const int DATA_VERSION = 212;
+
+  static const bool _applyFileChangesSynchronously = true;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
@@ -122,6 +125,8 @@
   /// from file paths.
   SourceFactory _sourceFactory;
 
+  final MacroKernelBuilder? macroKernelBuilder;
+
   /// The declared environment variables.
   DeclaredVariables declaredVariables = DeclaredVariables();
 
@@ -140,6 +145,16 @@
   /// The set of priority files, that should be analyzed sooner.
   final _priorityFiles = <String>{};
 
+  /// The file changes that should be applied before processing requests.
+  final List<_FileChange> _pendingFileChanges = [];
+
+  /// When [_applyFileChangesSynchronously] is `true`, affected files are
+  /// accumulated here.
+  Set<String> _accumulatedAffected = {};
+
+  /// The completers to complete after [_pendingFileChanges] are applied.
+  final _pendingFileChangesCompleters = <Completer<List<String>>>[];
+
   /// The mapping from the files for which analysis was requested using
   /// [getResult] to the [Completer]s to report the result.
   final _requestedFiles = <String, List<Completer<ResolvedUnitResult>>>{};
@@ -245,8 +260,9 @@
     required SourceFactory sourceFactory,
     required AnalysisOptionsImpl analysisOptions,
     required Packages packages,
+    this.macroKernelBuilder,
     FileContentCache? fileContentCache,
-    bool enableIndex = false,
+    this.enableIndex = false,
     SummaryDataStore? externalSummaries,
     bool retainDataForTesting = false,
   })  : _scheduler = scheduler,
@@ -255,7 +271,6 @@
         _fileContentCache =
             fileContentCache ?? FileContentCache.ephemeral(resourceProvider),
         _analysisOptions = analysisOptions,
-        enableIndex = enableIndex,
         _logger = logger,
         _packages = packages,
         _sourceFactory = sourceFactory,
@@ -287,7 +302,8 @@
 
   @override
   bool get hasFilesToAnalyze {
-    return _fileTracker.hasChangedFiles ||
+    return _pendingFileChanges.isNotEmpty ||
+        _fileTracker.hasChangedFiles ||
         _requestedFiles.isNotEmpty ||
         _requestedParts.isNotEmpty ||
         _fileTracker.hasPendingFiles ||
@@ -309,7 +325,9 @@
       analysisOptions: _analysisOptions,
       declaredVariables: declaredVariables,
       sourceFactory: _sourceFactory,
+      macroKernelBuilder: macroKernelBuilder,
       externalSummaries: _externalSummaries,
+      fileSystemState: _fsState,
     );
   }
 
@@ -407,6 +425,9 @@
         }
       }
     }
+    if (_pendingFileChanges.isNotEmpty) {
+      return AnalysisDriverPriority.general;
+    }
     if (_fileTracker.hasChangedFiles) {
       return AnalysisDriverPriority.changedFiles;
     }
@@ -425,7 +446,8 @@
     if (_errorsRequestedParts.isNotEmpty ||
         _requestedParts.isNotEmpty ||
         _partsToAnalyze.isNotEmpty ||
-        _unitElementRequestedParts.isNotEmpty) {
+        _unitElementRequestedParts.isNotEmpty ||
+        _pendingFileChangesCompleters.isNotEmpty) {
       return AnalysisDriverPriority.general;
     }
     return AnalysisDriverPriority.nothing;
@@ -439,12 +461,39 @@
     }
     if (file_paths.isDart(resourceProvider.pathContext, path)) {
       _priorityResults.clear();
-      _removePotentiallyAffectedLibraries(path);
-      _fileTracker.addFile(path);
+      if (_applyFileChangesSynchronously) {
+        _removePotentiallyAffectedLibraries(_accumulatedAffected, path);
+        _fileTracker.addFile(path);
+      } else {
+        _pendingFileChanges.add(
+          _FileChange(path, _FileChangeKind.add),
+        );
+      }
       _scheduler.notify(this);
     }
   }
 
+  /// Return a [Future] that completes after pending file changes are applied,
+  /// so that [currentSession] can be used to compute results.
+  ///
+  /// The value is the set of all files that are potentially affected by
+  /// the pending changes. This set can be both wider than the set of analyzed
+  /// files (because it may include files imported from other packages, and
+  /// which are on the import path from a changed file to an analyze file),
+  /// and narrower than the set of analyzed files (because only files that
+  /// were previously accessed are considered to be known and affected).
+  Future<List<String>> applyPendingFileChanges() {
+    if (_pendingFileChanges.isNotEmpty) {
+      var completer = Completer<List<String>>();
+      _pendingFileChangesCompleters.add(completer);
+      return completer.future;
+    } else {
+      var accumulatedAffected = _accumulatedAffected.toList();
+      _accumulatedAffected = {};
+      return Future.value(accumulatedAffected);
+    }
+  }
+
   /// The file with the given [path] might have changed - updated, added or
   /// removed. Or not, we don't know. Or it might have, but then changed back.
   ///
@@ -468,8 +517,14 @@
     }
     if (file_paths.isDart(resourceProvider.pathContext, path)) {
       _priorityResults.clear();
-      _removePotentiallyAffectedLibraries(path);
-      _fileTracker.changeFile(path);
+      if (_applyFileChangesSynchronously) {
+        _removePotentiallyAffectedLibraries(_accumulatedAffected, path);
+        _fileTracker.changeFile(path);
+      } else {
+        _pendingFileChanges.add(
+          _FileChange(path, _FileChangeKind.change),
+        );
+      }
       _scheduler.notify(this);
     }
   }
@@ -616,6 +671,8 @@
       return InvalidPathResult();
     }
 
+    _applyPendingFileChanges();
+
     FileState file = _fileTracker.getFile(path);
     return FileResultImpl(
         currentSession, path, file.uri, file.lineInfo, file.isPart);
@@ -921,6 +978,8 @@
       );
     }
 
+    _applyPendingFileChanges();
+
     var completer = Completer<UnitElementResult>();
     _unitElementRequestedFiles
         .putIfAbsent(path, () => <Completer<UnitElementResult>>[])
@@ -975,6 +1034,8 @@
       return InvalidPathResult();
     }
 
+    _applyPendingFileChanges();
+
     FileState file = _fileTracker.getFile(path);
     RecordingErrorListener listener = RecordingErrorListener();
     CompilationUnit unit = file.parse(listener);
@@ -991,7 +1052,7 @@
   /// The parsing is performed in the method itself, and the result is not
   /// produced through the [results] stream (just because it is not a fully
   /// resolved unit).
-  @Deprecated('Use parseFileSync() instead')
+  @Deprecated('Use parseFile() instead')
   SomeParsedUnitResult parseFileSync2(String path) {
     return parseFileSync(path);
   }
@@ -1020,18 +1081,18 @@
           return;
         }
         // Notify the completers.
-        _requestedFiles.remove(path)!.forEach((completer) {
+        for (var completer in _requestedFiles.remove(path)!) {
           completer.complete(result.unitResult!);
-        });
+        }
         // Remove from to be analyzed and produce it now.
         _fileTracker.fileWasAnalyzed(path);
         _resultController.add(result.unitResult!);
       } catch (exception, stackTrace) {
         _reportException(path, exception, stackTrace);
         _fileTracker.fileWasAnalyzed(path);
-        _requestedFiles.remove(path)!.forEach((completer) {
+        for (var completer in _requestedFiles.remove(path)!) {
           completer.completeError(exception, stackTrace);
-        });
+        }
         _clearLibraryContextAfterException();
       }
       return;
@@ -1042,13 +1103,13 @@
       String path = _requestedLibraries.keys.first;
       try {
         var result = _computeResolvedLibrary(path);
-        _requestedLibraries.remove(path)!.forEach((completer) {
+        for (var completer in _requestedLibraries.remove(path)!) {
           completer.complete(result);
-        });
+        }
       } catch (exception, stackTrace) {
-        _requestedLibraries.remove(path)!.forEach((completer) {
+        for (var completer in _requestedLibraries.remove(path)!) {
           completer.completeError(exception, stackTrace);
-        });
+        }
         _clearLibraryContextAfterException();
       }
       return;
@@ -1060,9 +1121,9 @@
       var completers = _errorsRequestedFiles.remove(path)!;
       var result = _computeErrors(path: path, asIsIfPartWithoutLibrary: false);
       if (result != null) {
-        completers.forEach((completer) {
+        for (var completer in completers) {
           completer.complete(result);
-        });
+        }
       } else {
         _errorsRequestedParts.putIfAbsent(path, () => []).addAll(completers);
       }
@@ -1073,9 +1134,9 @@
     if (_indexRequestedFiles.isNotEmpty) {
       String path = _indexRequestedFiles.keys.first;
       AnalysisDriverUnitIndex index = _computeIndex(path);
-      _indexRequestedFiles.remove(path)!.forEach((completer) {
+      for (var completer in _indexRequestedFiles.remove(path)!) {
         completer.complete(index);
-      });
+      }
       return;
     }
 
@@ -1085,9 +1146,9 @@
       UnitElementResult? result = _computeUnitElement(path);
       var completers = _unitElementRequestedFiles.remove(path)!;
       if (result != null) {
-        completers.forEach((completer) {
+        for (var completer in completers) {
           completer.complete(result);
-        });
+        }
       } else {
         _unitElementRequestedParts
             .putIfAbsent(path, () => [])
@@ -1177,18 +1238,18 @@
         var result = _computeAnalysisResult(path,
             withUnit: true, asIsIfPartWithoutLibrary: true)!;
         // Notify the completers.
-        _requestedParts.remove(path)!.forEach((completer) {
+        for (var completer in _requestedParts.remove(path)!) {
           completer.complete(result.unitResult!);
-        });
+        }
         // Remove from to be analyzed and produce it now.
         _partsToAnalyze.remove(path);
         _resultController.add(result.unitResult!);
       } catch (exception, stackTrace) {
         _reportException(path, exception, stackTrace);
         _partsToAnalyze.remove(path);
-        _requestedParts.remove(path)!.forEach((completer) {
+        for (var completer in _requestedParts.remove(path)!) {
           completer.completeError(exception, stackTrace);
-        });
+        }
         _clearLibraryContextAfterException();
       }
       return;
@@ -1221,9 +1282,9 @@
       String path = _unitElementRequestedParts.keys.first;
       UnitElementResult result =
           _computeUnitElement(path, asIsIfPartWithoutLibrary: true)!;
-      _unitElementRequestedParts.remove(path)!.forEach((completer) {
+      for (var completer in _unitElementRequestedParts.remove(path)!) {
         completer.complete(result);
-      });
+      }
       return;
     }
 
@@ -1232,9 +1293,9 @@
       var path = _errorsRequestedParts.keys.first;
       var completers = _errorsRequestedParts.remove(path)!;
       var result = _computeErrors(path: path, asIsIfPartWithoutLibrary: true);
-      completers.forEach((completer) {
+      for (var completer in completers) {
         completer.complete(result);
-      });
+      }
       return;
     }
   }
@@ -1254,8 +1315,14 @@
     if (file_paths.isDart(resourceProvider.pathContext, path)) {
       _lastProducedSignatures.remove(path);
       _priorityResults.clear();
-      _removePotentiallyAffectedLibraries(path);
-      _fileTracker.removeFile(path);
+      if (_applyFileChangesSynchronously) {
+        _removePotentiallyAffectedLibraries(_accumulatedAffected, path);
+        _fileTracker.removeFile(path);
+      } else {
+        _pendingFileChanges.add(
+          _FileChange(path, _FileChangeKind.remove),
+        );
+      }
       _scheduler.notify(this);
     }
   }
@@ -1326,6 +1393,36 @@
     }
   }
 
+  void _applyPendingFileChanges() {
+    var accumulatedAffected = <String>{};
+    for (var fileChange in _pendingFileChanges) {
+      var path = fileChange.path;
+      _removePotentiallyAffectedLibraries(accumulatedAffected, path);
+      switch (fileChange.kind) {
+        case _FileChangeKind.add:
+          _fileTracker.addFile(path);
+          break;
+        case _FileChangeKind.change:
+          _fileTracker.changeFile(path);
+          break;
+        case _FileChangeKind.remove:
+          _fileTracker.removeFile(path);
+          break;
+      }
+    }
+    _pendingFileChanges.clear();
+
+    if (_pendingFileChangesCompleters.isNotEmpty) {
+      var completers = _pendingFileChangesCompleters.toList();
+      _pendingFileChangesCompleters.clear();
+      for (var completer in completers) {
+        completer.complete(
+          accumulatedAffected.toList(),
+        );
+      }
+    }
+  }
+
   /// There was an exception during a file analysis, we don't know why.
   /// But it might have been caused by an inconsistency of files state, and
   /// the library context state. Reset the library context, and hope that
@@ -1732,12 +1829,16 @@
         'missing', errorsResult, AnalysisDriverUnitIndexBuilder());
   }
 
-  void _removePotentiallyAffectedLibraries(String path) {
+  void _removePotentiallyAffectedLibraries(
+    Set<String> accumulatedAffected,
+    String path,
+  ) {
     var affected = <FileState>{};
     _fsState.collectAffected(path, affected);
 
     for (var file in affected) {
       file.invalidateLibraryCycle();
+      accumulatedAffected.add(file.path);
     }
 
     _libraryContext?.elementFactory.removeLibraries(
@@ -2051,6 +2152,12 @@
 
       await _hasWork.signal;
 
+      for (var driver in _drivers) {
+        if (driver is AnalysisDriver) {
+          driver._applyPendingFileChanges();
+        }
+      }
+
       // Transition to analyzing if there are files to analyze.
       if (_hasFilesToAnalyze) {
         _statusSupport.transitionToAnalyzing();
@@ -2172,11 +2279,10 @@
         unitResult = null,
         _index = null;
 
-  AnalysisResult.unit(this._signature, ResolvedUnitResultImpl unitResult,
-      AnalysisDriverUnitIndex index)
+  AnalysisResult.unit(
+      this._signature, this.unitResult, AnalysisDriverUnitIndex index)
       : isUnchangedErrors = false,
         errorsResult = null,
-        unitResult = unitResult,
         _index = index;
 }
 
@@ -2410,6 +2516,20 @@
   String toString() => '$exception\n$stackTrace';
 }
 
+class _FileChange {
+  final String path;
+  final _FileChangeKind kind;
+
+  _FileChange(this.path, this.kind);
+
+  @override
+  String toString() {
+    return '[path: $path][kind: $kind]';
+  }
+}
+
+enum _FileChangeKind { add, change, remove }
+
 /// Task that computes the list of files that were added to the driver and
 /// declare a class member with the given [name].
 class _FilesDefiningClassMemberNameTask {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart b/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
index a83f20f..394b920 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver_based_analysis_context.dart
@@ -53,4 +53,14 @@
   Workspace get workspace {
     return contextRoot.workspace;
   }
+
+  @override
+  Future<List<String>> applyPendingFileChanges() {
+    return driver.applyPendingFileChanges();
+  }
+
+  @override
+  void changeFile(String path) {
+    driver.changeFile(path);
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index ca06838..ff42940 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -21,6 +21,7 @@
   EnableString.extension_methods: ExperimentalFeatures.extension_methods,
   EnableString.extension_types: ExperimentalFeatures.extension_types,
   EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
+  EnableString.inference_update_1: ExperimentalFeatures.inference_update_1,
   EnableString.macros: ExperimentalFeatures.macros,
   EnableString.named_arguments_anywhere:
       ExperimentalFeatures.named_arguments_anywhere,
@@ -63,6 +64,9 @@
   /// String to enable the experiment "generic-metadata"
   static const String generic_metadata = 'generic-metadata';
 
+  /// String to enable the experiment "inference-update-1"
+  static const String inference_update_1 = 'inference-update-1';
+
   /// String to enable the experiment "macros"
   static const String macros = 'macros';
 
@@ -181,8 +185,18 @@
     releaseVersion: Version.parse('2.14.0'),
   );
 
-  static final macros = ExperimentalFeature(
+  static final inference_update_1 = ExperimentalFeature(
     index: 8,
+    enableString: EnableString.inference_update_1,
+    isEnabledByDefault: IsEnabledByDefault.inference_update_1,
+    isExpired: IsExpired.inference_update_1,
+    documentation: 'Enhanced type inference',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final macros = ExperimentalFeature(
+    index: 9,
     enableString: EnableString.macros,
     isEnabledByDefault: IsEnabledByDefault.macros,
     isExpired: IsExpired.macros,
@@ -192,7 +206,7 @@
   );
 
   static final named_arguments_anywhere = ExperimentalFeature(
-    index: 9,
+    index: 10,
     enableString: EnableString.named_arguments_anywhere,
     isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
     isExpired: IsExpired.named_arguments_anywhere,
@@ -202,7 +216,7 @@
   );
 
   static final non_nullable = ExperimentalFeature(
-    index: 10,
+    index: 11,
     enableString: EnableString.non_nullable,
     isEnabledByDefault: IsEnabledByDefault.non_nullable,
     isExpired: IsExpired.non_nullable,
@@ -212,7 +226,7 @@
   );
 
   static final nonfunction_type_aliases = ExperimentalFeature(
-    index: 11,
+    index: 12,
     enableString: EnableString.nonfunction_type_aliases,
     isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
     isExpired: IsExpired.nonfunction_type_aliases,
@@ -222,7 +236,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 12,
+    index: 13,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -232,7 +246,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 13,
+    index: 14,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -242,7 +256,7 @@
   );
 
   static final super_parameters = ExperimentalFeature(
-    index: 14,
+    index: 15,
     enableString: EnableString.super_parameters,
     isEnabledByDefault: IsEnabledByDefault.super_parameters,
     isExpired: IsExpired.super_parameters,
@@ -252,7 +266,7 @@
   );
 
   static final test_experiment = ExperimentalFeature(
-    index: 15,
+    index: 16,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -263,7 +277,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 16,
+    index: 17,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -273,7 +287,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 17,
+    index: 18,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -283,7 +297,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 18,
+    index: 19,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -320,6 +334,9 @@
   /// Default state of the experiment "generic-metadata"
   static const bool generic_metadata = true;
 
+  /// Default state of the experiment "inference-update-1"
+  static const bool inference_update_1 = false;
+
   /// Default state of the experiment "macros"
   static const bool macros = false;
 
@@ -382,6 +399,9 @@
   /// Expiration status of the experiment "generic-metadata"
   static const bool generic_metadata = true;
 
+  /// Expiration status of the experiment "inference-update-1"
+  static const bool inference_update_1 = false;
+
   /// Expiration status of the experiment "macros"
   static const bool macros = false;
 
@@ -445,6 +465,10 @@
   /// Current state for the flag "generic-metadata"
   bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
 
+  /// Current state for the flag "inference-update-1"
+  bool get inference_update_1 =>
+      isEnabled(ExperimentalFeatures.inference_update_1);
+
   /// Current state for the flag "macros"
   bool get macros => isEnabled(ExperimentalFeatures.macros);
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 2e1c323..8d0f309 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -40,6 +40,7 @@
 import 'package:collection/collection.dart';
 import 'package:convert/convert.dart';
 import 'package:meta/meta.dart';
+import 'package:path/path.dart' as package_path;
 import 'package:pub_semver/pub_semver.dart';
 
 var counterFileStateRefresh = 0;
@@ -599,6 +600,7 @@
     var exports = <UnlinkedNamespaceDirective>[];
     var imports = <UnlinkedNamespaceDirective>[];
     var parts = <String>[];
+    var macroClasses = <MacroClass>[];
     var hasDartCoreImport = false;
     var hasLibraryDirective = false;
     var hasPartOfDirective = false;
@@ -621,6 +623,25 @@
         hasPartOfDirective = true;
       }
     }
+    for (var declaration in unit.declarations) {
+      if (declaration is ClassDeclarationImpl) {
+        if (declaration.macroKeyword != null) {
+          var constructors = declaration.members
+              .whereType<ConstructorDeclaration>()
+              .map((e) => e.name?.name ?? '')
+              .where((e) => !e.startsWith('_'))
+              .toList();
+          if (constructors.isNotEmpty) {
+            macroClasses.add(
+              MacroClass(
+                name: declaration.name.name,
+                constructors: constructors,
+              ),
+            );
+          }
+        }
+      }
+    }
     if (!hasDartCoreImport) {
       imports.add(
         UnlinkedNamespaceDirective(
@@ -637,6 +658,7 @@
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
       lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
+      macroClasses: macroClasses,
       partOfName: null,
       partOfUri: null,
       parts: parts,
@@ -764,6 +786,8 @@
     _testView = FileSystemStateTestView(this);
   }
 
+  package_path.Context get pathContext => _resourceProvider.pathContext;
+
   @visibleForTesting
   FileSystemStateTestView get test => _testView;
 
@@ -1007,10 +1031,9 @@
         packageName = null;
 
   FileUriProperties._package({
-    required String packageName,
+    required this.packageName,
     required bool isSrc,
-  })  : _flags = isSrc ? _isSrc : 0,
-        packageName = packageName;
+  }) : _flags = isSrc ? _isSrc : 0;
 
   const FileUriProperties._unknown()
       : _flags = 0,
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 74c3887..8406aee 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -923,11 +923,8 @@
     List<String> members = [];
 
     String getClassElementId(ClassElement element) {
-      return element.library.source.uri.toString() +
-          ';' +
-          element.source.uri.toString() +
-          ';' +
-          element.name;
+      return '${element.library.source.uri};'
+          '${element.source.uri};${element.name}';
     }
 
     void addSupertype(NamedType? type) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 6ec80ea..091145d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -22,7 +22,9 @@
 import 'package:analyzer/src/summary2/bundle_reader.dart';
 import 'package:analyzer/src/summary2/link.dart' as link2;
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
+import 'package:analyzer/src/summary2/macro.dart';
 import 'package:analyzer/src/summary2/reference.dart';
+import 'package:path/src/context.dart';
 
 var counterLinkedLibraries = 0;
 var counterLoadedLibraries = 0;
@@ -39,7 +41,9 @@
   final LibraryContextTestView testView;
   final PerformanceLog logger;
   final ByteStore byteStore;
-  final SummaryDataStore store = SummaryDataStore.tmp();
+  final FileSystemState fileSystemState;
+  final MacroKernelBuilder? macroKernelBuilder;
+  final SummaryDataStore store = SummaryDataStore();
 
   late final AnalysisContextImpl analysisContext;
   late LinkedElementFactory elementFactory;
@@ -47,14 +51,15 @@
   LibraryContext({
     required this.testView,
     required AnalysisSessionImpl analysisSession,
-    required PerformanceLog logger,
-    required ByteStore byteStore,
+    required this.logger,
+    required this.byteStore,
+    required this.fileSystemState,
     required AnalysisOptionsImpl analysisOptions,
     required DeclaredVariables declaredVariables,
     required SourceFactory sourceFactory,
+    this.macroKernelBuilder,
     required SummaryDataStore? externalSummaries,
-  })  : logger = logger,
-        byteStore = byteStore {
+  }) {
     var synchronousSession =
         SynchronousSession(analysisOptions, declaredVariables);
     analysisContext = AnalysisContextImpl(synchronousSession, sourceFactory);
@@ -120,9 +125,28 @@
       cycle.directDependencies.forEach(loadBundle);
 
       var unitsInformativeBytes = <Uri, Uint8List>{};
+      var macroLibraries = <MacroLibrary>[];
       for (var library in cycle.libraries) {
+        var macroClasses = <MacroClass>[];
         for (var file in library.libraryFiles) {
           unitsInformativeBytes[file.uri] = file.unlinked2.informativeBytes;
+          for (var macroClass in file.unlinked2.macroClasses) {
+            macroClasses.add(
+              MacroClass(
+                name: macroClass.name,
+                constructors: macroClass.constructors,
+              ),
+            );
+          }
+        }
+        if (macroClasses.isNotEmpty) {
+          macroLibraries.add(
+            MacroLibrary(
+              uri: library.uri,
+              path: library.path,
+              classes: macroClasses,
+            ),
+          );
         }
       }
 
@@ -180,6 +204,8 @@
         link2.LinkResult linkResult;
         try {
           timerLinking.start();
+          // TODO(scheglov) Migrate when we are ready to switch to async.
+          // ignore: deprecated_member_use_from_same_package
           linkResult = link2.link(elementFactory, inputLibraries);
           librariesLinked += cycle.libraries.length;
           counterLinkedLibraries += inputLibraries.length;
@@ -206,6 +232,17 @@
           ),
         );
       }
+
+      final macroKernelBuilder = this.macroKernelBuilder;
+      if (macroKernelBuilder != null && macroLibraries.isNotEmpty) {
+        var macroKernelKey = cycle.transitiveSignature + '.macro_kernel';
+        var macroKernelBytes = macroKernelBuilder.build(
+          fileSystem: _MacroFileSystem(fileSystemState),
+          libraries: macroLibraries,
+        );
+        byteStore.put(macroKernelKey, macroKernelBytes);
+        bytesPut += macroKernelBytes.length;
+      }
     }
 
     logger.run('Prepare linked bundles', () {
@@ -259,3 +296,30 @@
 class LibraryContextTestView {
   final List<Set<String>> linkedCycles = [];
 }
+
+class _MacroFileEntry implements MacroFileEntry {
+  final FileState fileState;
+
+  _MacroFileEntry(this.fileState);
+
+  @override
+  String get content => fileState.content;
+
+  @override
+  bool get exists => fileState.exists;
+}
+
+class _MacroFileSystem implements MacroFileSystem {
+  final FileSystemState fileSystemState;
+
+  _MacroFileSystem(this.fileSystemState);
+
+  @override
+  Context get pathContext => fileSystemState.pathContext;
+
+  @override
+  MacroFileEntry getFile(String path) {
+    var fileState = fileSystemState.getFileForPath(path);
+    return _MacroFileEntry(fileState);
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
index ff481c5..1a4ed51 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_graph.dart
@@ -4,10 +4,10 @@
 
 import 'dart:typed_data';
 
+import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 import 'package:collection/collection.dart';
 
 /// Ensure that the [FileState.libraryCycle] for the [file] and anything it
@@ -64,7 +64,7 @@
 
   @override
   String toString() {
-    return '[' + libraries.join(', ') + ']';
+    return '[${libraries.join(', ')}]';
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 6df7913..988d60f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -259,7 +259,7 @@
           try {
             unitElement.accept(
               _FunctionElementVisitor((element) {
-                addDeclaration(unitElement.lineInfo!, element);
+                addDeclaration(unitElement.lineInfo, element);
               }),
             );
           } on _MaxNumberOfDeclarationsError {
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 32eeaca..eef485d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -55,9 +55,9 @@
   driver.AnalysisDriver getDriver() => _driver;
 
   @override
-  Future<SomeErrorsResult> getErrors(String path) {
+  Future<SomeErrorsResult> getErrors(String path) async {
     _checkConsistency();
-    return _driver.getErrors(path);
+    return await _driver.getErrors(path);
   }
 
   @override
@@ -67,9 +67,9 @@
   }
 
   @override
-  Future<SomeLibraryElementResult> getLibraryByUri(String uri) {
+  Future<SomeLibraryElementResult> getLibraryByUri(String uri) async {
     _checkConsistency();
-    return _driver.getLibraryByUri(uri);
+    return await _driver.getLibraryByUri(uri);
   }
 
   @override
@@ -96,30 +96,28 @@
   }
 
   @override
-  Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) {
+  Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) async {
     _checkConsistency();
-    return _driver.getResolvedLibrary(path);
+    return await _driver.getResolvedLibrary(path);
   }
 
   @override
   Future<SomeResolvedLibraryResult> getResolvedLibraryByElement(
     LibraryElement element,
-  ) {
+  ) async {
     _checkConsistency();
 
     if (element.session != this) {
-      return Future.value(
-        NotElementOfThisSessionResult(),
-      );
+      return NotElementOfThisSessionResult();
     }
 
-    return _driver.getResolvedLibraryByUri(element.source.uri);
+    return await _driver.getResolvedLibraryByUri(element.source.uri);
   }
 
   @override
-  Future<SomeResolvedUnitResult> getResolvedUnit(String path) {
+  Future<SomeResolvedUnitResult> getResolvedUnit(String path) async {
     _checkConsistency();
-    return _driver.getResult(path);
+    return await _driver.getResult(path);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart
index 5ab1857..88cfdb8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_data.dart
@@ -65,6 +65,31 @@
   }
 }
 
+/// Unlinked information about a `macro` class.
+class MacroClass {
+  final String name;
+  final List<String> constructors;
+
+  MacroClass({
+    required this.name,
+    required this.constructors,
+  });
+
+  factory MacroClass.read(
+    SummaryDataReader reader,
+  ) {
+    return MacroClass(
+      name: reader.readStringUtf8(),
+      constructors: reader.readStringUtf8List(),
+    );
+  }
+
+  void write(BufferedSink sink) {
+    sink.writeStringUtf8(name);
+    sink.writeStringUtf8Iterable(constructors);
+  }
+}
+
 /// Unlinked information about a namespace directive.
 class UnlinkedNamespaceDirective {
   /// The configurations that control which library will actually be used.
@@ -159,6 +184,9 @@
   /// Offsets of the first character of each line in the source code.
   final Uint32List lineStarts;
 
+  /// The list of `macro` classes.
+  final List<MacroClass> macroClasses;
+
   /// The library name of the `part of my.name;` directive.
   final String? partOfName;
 
@@ -176,6 +204,7 @@
     required this.imports,
     required this.informativeBytes,
     required this.lineStarts,
+    required this.macroClasses,
     required this.partOfName,
     required this.partOfUri,
     required this.parts,
@@ -194,6 +223,9 @@
       ),
       informativeBytes: reader.readUint8List(),
       lineStarts: reader.readUInt30List(),
+      macroClasses: reader.readTypedList(
+        () => MacroClass.read(reader),
+      ),
       partOfName: reader.readOptionalStringUtf8(),
       partOfUri: reader.readOptionalStringUtf8(),
       parts: reader.readStringUtf8List(),
@@ -212,6 +244,9 @@
     });
     sink.writeUint8List(informativeBytes);
     sink.writeUint30List(lineStarts);
+    sink.writeList<MacroClass>(macroClasses, (x) {
+      x.write(sink);
+    });
     sink.writeOptionalStringUtf8(partOfName);
     sink.writeOptionalStringUtf8(partOfUri);
     sink.writeStringUtf8Iterable(parts);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index b033bbe..7c3815a 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -58,8 +58,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAdjacentStrings(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitAdjacentStrings(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitAdjacentStrings(this, contextType: contextType);
   }
 
   @override
@@ -460,8 +460,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAsExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitAsExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitAsExpression(this, contextType: contextType);
   }
 
   @override
@@ -710,8 +710,8 @@
       visitor.visitAssignmentExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitAssignmentExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitAssignmentExpression(this, contextType: contextType);
   }
 
   @override
@@ -721,8 +721,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) =>
-      identical(child, _leftHandSide);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, _leftHandSide);
 }
 
 /// A node in the AST structure for a Dart program.
@@ -889,8 +889,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAwaitExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitAwaitExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitAwaitExpression(this, contextType: contextType);
   }
 
   @override
@@ -924,9 +924,14 @@
   FunctionType? staticInvokeType;
 
   /// Initialize a newly created binary expression.
-  BinaryExpressionImpl(this._leftOperand, this.operator, this._rightOperand) {
-    _becomeParentOf(_leftOperand);
-    _becomeParentOf(_rightOperand);
+  BinaryExpressionImpl({
+    required ExpressionImpl leftOperand,
+    required this.operator,
+    required ExpressionImpl rightOperand,
+  })  : _leftOperand = leftOperand,
+        _rightOperand = rightOperand {
+    _becomeParentOf(leftOperand);
+    _becomeParentOf(rightOperand);
   }
 
   @override
@@ -962,8 +967,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBinaryExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitBinaryExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitBinaryExpression(this, contextType: contextType);
   }
 
   @override
@@ -1124,8 +1129,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBooleanLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitBooleanLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitBooleanLiteral(this, contextType: contextType);
   }
 
   @override
@@ -1260,8 +1265,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitCascadeExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitCascadeExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitCascadeExpression(this, contextType: contextType);
   }
 
   @override
@@ -2339,8 +2344,8 @@
       visitor.visitConditionalExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitConditionalExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitConditionalExpression(this, contextType: contextType);
   }
 
   @override
@@ -2846,8 +2851,8 @@
       visitor.visitConstructorReference(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitConstructorReference(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitConstructorReference(this, contextType: contextType);
   }
 
   @override
@@ -3336,8 +3341,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDoubleLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitDoubleLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitDoubleLiteral(this, contextType: contextType);
   }
 
   @override
@@ -4817,10 +4822,10 @@
     for (int i = 0; i < length; i++) {
       FormalParameter parameter = _parameters[i];
       if (leftDelimiterNeeded && leftDelimiter!.offset < parameter.offset) {
-        result..addToken('leftDelimiter', leftDelimiter);
+        result.addToken('leftDelimiter', leftDelimiter);
         leftDelimiterNeeded = false;
       }
-      result..addNode('parameter', parameter);
+      result.addNode('parameter', parameter);
     }
     return result
       ..addToken('rightDelimiter', rightDelimiter)
@@ -5332,8 +5337,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitFunctionExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitFunctionExpression(this, contextType: contextType);
   }
 
   @override
@@ -5399,8 +5404,8 @@
       visitor.visitFunctionExpressionInvocation(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitFunctionExpressionInvocation(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitFunctionExpressionInvocation(this, contextType: contextType);
   }
 
   @override
@@ -5411,7 +5416,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) => identical(child, _function);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, _function);
 }
 
 /// An expression representing a reference to a function, possibly with type
@@ -5464,8 +5470,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionReference(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitFunctionReference(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitFunctionReference(this, contextType: contextType);
   }
 
   @override
@@ -6526,8 +6532,8 @@
   }
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitIndexExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitIndexExpression(this, contextType: contextType);
   }
 
   @override
@@ -6537,7 +6543,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) => identical(child, _target);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, _target);
 }
 
 /// An instance creation expression.
@@ -6639,8 +6646,8 @@
       visitor.visitInstanceCreationExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitInstanceCreationExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitInstanceCreationExpression(this, contextType: contextType);
   }
 
   @override
@@ -6701,8 +6708,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIntegerLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitIntegerLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitIntegerLiteral(this, contextType: contextType);
   }
 
   @override
@@ -6977,8 +6984,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIsExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitIsExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitIsExpression(this, contextType: contextType);
   }
 
   @override
@@ -7276,8 +7283,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitListLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitListLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitListLiteral(this, contextType: contextType);
   }
 
   @override
@@ -7696,8 +7703,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMethodInvocation(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitMethodInvocation(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitMethodInvocation(this, contextType: contextType);
   }
 
   @override
@@ -7709,7 +7716,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) => identical(child, _target);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, _target);
 }
 
 /// The declaration of a mixin.
@@ -7899,7 +7907,6 @@
 ///
 ///    typeName ::=
 ///        [Identifier] typeArguments? '?'?
-/// ignore: deprecated_member_use_from_same_package
 class NamedTypeImpl extends TypeAnnotationImpl implements NamedType {
   /// The name of the type.
   IdentifierImpl _name;
@@ -8205,13 +8212,13 @@
   }
 
   @override
-  void add(E node) {
-    insert(length, node);
+  void add(E element) {
+    insert(length, element);
   }
 
   @override
-  void addAll(Iterable<E> nodes) {
-    for (E node in nodes) {
+  void addAll(Iterable<E> iterable) {
+    for (E node in iterable) {
       _elements.add(node);
       _owner._becomeParentOf(node as AstNodeImpl);
     }
@@ -8223,9 +8230,9 @@
   }
 
   @override
-  void insert(int index, E node) {
-    _elements.insert(index, node);
-    _owner._becomeParentOf(node as AstNodeImpl);
+  void insert(int index, E element) {
+    _elements.insert(index, element);
+    _owner._becomeParentOf(element as AstNodeImpl);
   }
 
   @override
@@ -8389,8 +8396,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitNullLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitNullLiteral(this, contextType: contextType);
   }
 
   @override
@@ -8531,8 +8538,8 @@
       visitor.visitParenthesizedExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitParenthesizedExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitParenthesizedExpression(this, contextType: contextType);
   }
 
   @override
@@ -8734,8 +8741,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPostfixExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitPostfixExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitPostfixExpression(this, contextType: contextType);
   }
 
   @override
@@ -8744,7 +8751,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) => identical(child, operand);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, operand);
 }
 
 /// An identifier that is prefixed or an access to an object property where the
@@ -8825,8 +8833,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPrefixedIdentifier(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitPrefixedIdentifier(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitPrefixedIdentifier(this, contextType: contextType);
   }
 
   @override
@@ -8904,8 +8912,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPrefixExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitPrefixExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitPrefixExpression(this, contextType: contextType);
   }
 
   @override
@@ -8914,8 +8922,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) =>
-      identical(child, operand) && operator.type.isIncrementOperator;
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, operand) && operator.type.isIncrementOperator;
 }
 
 /// The access of a property of an object.
@@ -9023,8 +9031,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPropertyAccess(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitPropertyAccess(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitPropertyAccess(this, contextType: contextType);
   }
 
   @override
@@ -9034,7 +9042,8 @@
   }
 
   @override
-  bool _extendsNullShorting(Expression child) => identical(child, _target);
+  bool _extendsNullShorting(Expression descendant) =>
+      identical(descendant, _target);
 }
 
 /// The invocation of a constructor in the same class from within a
@@ -9144,8 +9153,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitRethrowExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitRethrowExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitRethrowExpression(this, contextType: contextType);
   }
 
   @override
@@ -9748,8 +9757,8 @@
   }
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitSimpleIdentifier(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitSimpleIdentifier(this, contextType: contextType);
   }
 
   @override
@@ -9827,8 +9836,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSimpleStringLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitSimpleStringLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitSimpleStringLiteral(this, contextType: contextType);
   }
 
   @override
@@ -10238,8 +10247,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSuperExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitSuperExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitSuperExpression(this, contextType: contextType);
   }
 
   @override
@@ -10622,8 +10631,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSymbolLiteral(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitSymbolLiteral(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitSymbolLiteral(this, contextType: contextType);
   }
 
   @override
@@ -10661,8 +10670,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitThisExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitThisExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitThisExpression(this, contextType: contextType);
   }
 
   @override
@@ -10715,8 +10724,8 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitThrowExpression(this);
 
   @override
-  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
-    visitor.visitThrowExpression(this, contextType: contextType);
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitThrowExpression(this, contextType: contextType);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index e427e92..7a31a07 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -15,8 +15,7 @@
 /// The instance of [AstFactoryImpl].
 final AstFactoryImpl astFactory = AstFactoryImpl();
 
-/// Concrete implementation of [AstFactory] based on the standard AST
-/// implementation.
+// ignore: deprecated_member_use_from_same_package
 class AstFactoryImpl extends AstFactory {
   @override
   AdjacentStringsImpl adjacentStrings(List<StringLiteral> strings) =>
@@ -94,11 +93,15 @@
           Token awaitKeyword, Expression expression) =>
       AwaitExpressionImpl(awaitKeyword, expression as ExpressionImpl);
 
+  @Deprecated('Use the constructor instead.')
   @override
   BinaryExpressionImpl binaryExpression(
           Expression leftOperand, Token operator, Expression rightOperand) =>
-      BinaryExpressionImpl(leftOperand as ExpressionImpl, operator,
-          rightOperand as ExpressionImpl);
+      BinaryExpressionImpl(
+        leftOperand: leftOperand as ExpressionImpl,
+        operator: operator,
+        rightOperand: rightOperand as ExpressionImpl,
+      );
 
   @override
   BlockImpl block(
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 856da93..df44e47 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -1069,7 +1069,7 @@
     // added to the interface.
     var varianceKeyword = (node as TypeParameterImpl).varianceKeyword;
     if (varianceKeyword != null) {
-      sink.write(varianceKeyword.lexeme + ' ');
+      sink.write('${varianceKeyword.lexeme} ');
     }
     _visitNode(node.name);
     _visitNode(node.bound, prefix: ' extends ');
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index dd78df6..263dcde 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -1696,10 +1696,10 @@
   @override
   bool visitBinaryExpression(covariant BinaryExpressionImpl node) {
     if (identical(node.leftOperand, _oldNode)) {
-      node.leftOperand = _newNode as Expression;
+      node.leftOperand = _newNode as ExpressionImpl;
       return true;
     } else if (identical(node.rightOperand, _oldNode)) {
-      node.rightOperand = _newNode as Expression;
+      node.rightOperand = _newNode as ExpressionImpl;
       return true;
     }
     return visitNode(node);
diff --git a/pkg/analyzer/lib/src/dart/constant/compute.dart b/pkg/analyzer/lib/src/dart/constant/compute.dart
index b2b67c8..6a08985 100644
--- a/pkg/analyzer/lib/src/dart/constant/compute.dart
+++ b/pkg/analyzer/lib/src/dart/constant/compute.dart
@@ -2,12 +2,12 @@
 // 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:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 
 /// Compute values of the given [constants] with correct ordering.
 void computeConstants(DeclaredVariables declaredVariables,
@@ -15,10 +15,7 @@
   var walker = _ConstantWalker(declaredVariables, featureSet);
 
   for (var constant in constants) {
-    var node = walker._getNode(constant);
-    if (!node.isEvaluated) {
-      walker.walk(node);
-    }
+    walker.walk(walker._getNode(constant));
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index ba68d5e..4621e73 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -16,6 +16,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/constant/from_environment_evaluator.dart';
 import 'package:analyzer/src/dart/constant/has_type_parameter_reference.dart';
 import 'package:analyzer/src/dart/constant/potentially_constant.dart';
@@ -1996,7 +1997,7 @@
 
   /// If a superinitializer was encountered, the arguments passed to the super
   /// constructor, otherwise `null`.
-  final NodeList<Expression>? superArguments;
+  final List<Expression>? superArguments;
 
   _InitializersEvaluationResult(
     this.result, {
@@ -2199,6 +2200,34 @@
     );
   }
 
+  void _addImplicitArgumentsFromSuperFormals(List<Expression> superArguments) {
+    var positionalIndex = 0;
+    for (var parameter in _constructor.parameters) {
+      if (parameter is SuperFormalParameterElement) {
+        var value = astFactory.simpleIdentifier(
+          StringToken(TokenType.STRING, parameter.name, -1),
+        )
+          ..staticElement = parameter
+          ..staticType = parameter.type;
+        if (parameter.isPositional) {
+          superArguments.insert(positionalIndex++, value);
+        } else {
+          superArguments.add(
+            astFactory.namedExpression(
+              astFactory.label(
+                astFactory.simpleIdentifier(
+                  StringToken(TokenType.STRING, parameter.name, -1),
+                )..staticElement = parameter,
+                StringToken(TokenType.COLON, ':', -1),
+              ),
+              value,
+            )..staticType = value.typeOrThrow,
+          );
+        }
+      }
+    }
+  }
+
   void _checkFields() {
     var fields = _constructor.enclosingElement.fields;
     for (var field in fields) {
@@ -2271,7 +2300,7 @@
     // If we encounter a superinitializer, store the name of the constructor,
     // and the arguments.
     String? superName;
-    NodeList<Expression>? superArguments;
+    List<Expression>? superArguments;
     for (var initializer in constructorBase.constantInitializers) {
       if (initializer is ConstructorFieldInitializer) {
         var initializerExpression = initializer.expression;
@@ -2303,7 +2332,8 @@
         if (name != null) {
           superName = name.name;
         }
-        superArguments = initializer.argumentList.arguments;
+        superArguments = initializer.argumentList.arguments.toList();
+        _addImplicitArgumentsFromSuperFormals(superArguments);
       } else if (initializer is RedirectingConstructorInvocation) {
         // This is a redirecting constructor, so just evaluate the constructor
         // it redirects to.
@@ -2340,6 +2370,12 @@
         }
       }
     }
+
+    if (definingType.superclass != null && superArguments == null) {
+      superArguments = [];
+      _addImplicitArgumentsFromSuperFormals(superArguments);
+    }
+
     return _InitializersEvaluationResult(null,
         evaluationIsComplete: false,
         superName: superName,
@@ -2422,7 +2458,7 @@
   /// Otherwise these parameters are `null`.
   void _checkSuperConstructorCall({
     required String? superName,
-    required NodeList<Expression>? superArguments,
+    required List<Expression>? superArguments,
   }) {
     var superclass = definingType.superclass;
     if (superclass != null && !superclass.isDartCoreObject) {
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index 66503bc..6c13da9 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -269,9 +269,9 @@
 
   void _methodInvocation(MethodInvocation node) {
     var arguments = node.argumentList.arguments;
-    if (arguments.length == 2 && node.methodName.name == 'identical') {
-      var library = node.methodName.staticElement?.library;
-      if (library?.isDartCore == true) {
+    if (arguments.length == 2) {
+      var element = node.methodName.staticElement;
+      if (element is FunctionElement && element.isDartCoreIdentical) {
         collect(arguments[0]);
         collect(arguments[1]);
         return;
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 06b9e06..04506a4 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -48,8 +48,8 @@
   String get typeName => "bool";
 
   @override
-  bool operator ==(Object object) =>
-      object is BoolState && identical(value, object.value);
+  bool operator ==(Object other) =>
+      other is BoolState && identical(value, other.value);
 
   @override
   BoolState convertToBool() => this;
@@ -211,10 +211,10 @@
   List<DartType>? get typeArguments => (_state as FunctionState)._typeArguments;
 
   @override
-  bool operator ==(Object object) {
-    if (object is DartObjectImpl) {
-      return _typeSystem.runtimeTypesEqual(type, object.type) &&
-          _state == object._state;
+  bool operator ==(Object other) {
+    if (other is DartObjectImpl) {
+      return _typeSystem.runtimeTypesEqual(type, other.type) &&
+          _state == other._state;
     }
     return false;
   }
@@ -979,8 +979,8 @@
   String get typeName => "double";
 
   @override
-  bool operator ==(Object object) =>
-      object is DoubleState && (value == object.value);
+  bool operator ==(Object other) =>
+      other is DoubleState && (value == other.value);
 
   @override
   NumState add(InstanceState rightOperand) {
@@ -1289,22 +1289,22 @@
   String get typeName => "Function";
 
   @override
-  bool operator ==(Object object) {
-    if (object is! FunctionState) {
+  bool operator ==(Object other) {
+    if (other is! FunctionState) {
       return false;
     }
-    if (_element != object._element) {
+    if (_element != other._element) {
       return false;
     }
     var typeArguments = _typeArguments;
-    var otherTypeArguments = object._typeArguments;
+    var otherTypeArguments = other._typeArguments;
     if (typeArguments == null || otherTypeArguments == null) {
       return typeArguments == null && otherTypeArguments == null;
     }
     if (typeArguments.length != otherTypeArguments.length) {
       return false;
     }
-    if (_viaTypeAlias != object._viaTypeAlias) {
+    if (_viaTypeAlias != other._viaTypeAlias) {
       return false;
     }
     for (var i = 0; i < typeArguments.length; i++) {
@@ -1412,18 +1412,18 @@
   String get typeName => "user defined type";
 
   @override
-  bool operator ==(Object object) {
-    if (object is GenericState) {
+  bool operator ==(Object other) {
+    if (other is GenericState) {
       HashSet<String> otherFields =
-          HashSet<String>.from(object._fieldMap.keys.toSet());
+          HashSet<String>.from(other._fieldMap.keys.toSet());
       for (String fieldName in _fieldMap.keys.toSet()) {
-        if (_fieldMap[fieldName] != object._fieldMap[fieldName]) {
+        if (_fieldMap[fieldName] != other._fieldMap[fieldName]) {
           return false;
         }
         otherFields.remove(fieldName);
       }
       for (String fieldName in otherFields) {
-        if (object._fieldMap[fieldName] != _fieldMap[fieldName]) {
+        if (other._fieldMap[fieldName] != _fieldMap[fieldName]) {
           return false;
         }
       }
@@ -1897,8 +1897,7 @@
   String get typeName => "int";
 
   @override
-  bool operator ==(Object object) =>
-      object is IntState && (value == object.value);
+  bool operator ==(Object other) => other is IntState && (value == other.value);
 
   @override
   NumState add(InstanceState rightOperand) {
@@ -2322,9 +2321,9 @@
   String get typeName => "List";
 
   @override
-  bool operator ==(Object object) {
-    if (object is ListState) {
-      List<DartObjectImpl> otherElements = object._elements;
+  bool operator ==(Object other) {
+    if (other is ListState) {
+      List<DartObjectImpl> otherElements = other._elements;
       int count = _elements.length;
       if (otherElements.length != count) {
         return false;
@@ -2360,14 +2359,14 @@
     StringBuffer buffer = StringBuffer();
     buffer.write('[');
     bool first = true;
-    _elements.forEach((DartObjectImpl element) {
+    for (var element in _elements) {
       if (first) {
         first = false;
       } else {
         buffer.write(', ');
       }
       buffer.write(element);
-    });
+    }
     buffer.write(']');
     return buffer.toString();
   }
@@ -2395,9 +2394,9 @@
   String get typeName => "Map";
 
   @override
-  bool operator ==(Object object) {
-    if (object is MapState) {
-      Map<DartObjectImpl, DartObjectImpl> otherElements = object._entries;
+  bool operator ==(Object other) {
+    if (other is MapState) {
+      Map<DartObjectImpl, DartObjectImpl> otherElements = other._entries;
       int count = _entries.length;
       if (otherElements.length != count) {
         return false;
@@ -2468,7 +2467,7 @@
   String get typeName => "Null";
 
   @override
-  bool operator ==(Object object) => object is NullState;
+  bool operator ==(Object other) => other is NullState;
 
   @override
   BoolState convertToBool() {
@@ -2532,10 +2531,10 @@
   String get typeName => "Set";
 
   @override
-  bool operator ==(Object object) {
-    if (object is SetState) {
+  bool operator ==(Object other) {
+    if (other is SetState) {
       List<DartObjectImpl> elements = _elements.toList();
-      List<DartObjectImpl> otherElements = object._elements.toList();
+      List<DartObjectImpl> otherElements = other._elements.toList();
       int count = elements.length;
       if (otherElements.length != count) {
         return false;
@@ -2571,14 +2570,14 @@
     StringBuffer buffer = StringBuffer();
     buffer.write('{');
     bool first = true;
-    _elements.forEach((DartObjectImpl element) {
+    for (var element in _elements) {
       if (first) {
         first = false;
       } else {
         buffer.write(', ');
       }
       buffer.write(element);
-    });
+    }
     buffer.write('}');
     return buffer.toString();
   }
@@ -2608,8 +2607,8 @@
   String get typeName => "String";
 
   @override
-  bool operator ==(Object object) =>
-      object is StringState && (value == object.value);
+  bool operator ==(Object other) =>
+      other is StringState && (value == other.value);
 
   @override
   StringState concatenate(InstanceState rightOperand) {
@@ -2677,8 +2676,8 @@
   String get typeName => "Symbol";
 
   @override
-  bool operator ==(Object object) =>
-      object is SymbolState && (value == object.value);
+  bool operator ==(Object other) =>
+      other is SymbolState && (value == other.value);
 
   @override
   StringState convertToString() {
@@ -2728,8 +2727,8 @@
   String get typeName => "Type";
 
   @override
-  bool operator ==(Object object) =>
-      object is TypeState && (_type == object._type);
+  bool operator ==(Object other) =>
+      other is TypeState && (_type == other._type);
 
   @override
   StringState convertToString() {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 060903e..627f80a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -712,6 +712,14 @@
     return true;
   }
 
+  bool get isMacro {
+    return hasModifier(Modifier.MACRO);
+  }
+
+  set isMacro(bool isMacro) {
+    setModifier(Modifier.MACRO, isMacro);
+  }
+
   @override
   bool get isMixinApplication {
     return hasModifier(Modifier.MIXIN_APPLICATION);
@@ -971,10 +979,10 @@
     implements CompilationUnitElement {
   /// The source that corresponds to this compilation unit.
   @override
-  late Source source;
+  final Source source;
 
   @override
-  LineInfo? lineInfo;
+  LineInfo lineInfo;
 
   /// The source of the library containing this compilation unit.
   ///
@@ -982,7 +990,7 @@
   /// except that it does not require the containing [LibraryElement] to be
   /// computed.
   @override
-  late Source librarySource;
+  final Source librarySource;
 
   /// A list containing all of the top-level accessors (getters and setters)
   /// contained in this compilation unit.
@@ -1016,7 +1024,11 @@
 
   /// Initialize a newly created compilation unit element to have the given
   /// [name].
-  CompilationUnitElementImpl() : super(null, -1);
+  CompilationUnitElementImpl({
+    required this.source,
+    required this.librarySource,
+    required this.lineInfo,
+  }) : super(null, -1);
 
   @override
   List<PropertyAccessorElement> get accessors {
@@ -1181,8 +1193,8 @@
   }
 
   @override
-  bool operator ==(Object object) =>
-      object is CompilationUnitElementImpl && source == object.source;
+  bool operator ==(Object other) =>
+      other is CompilationUnitElementImpl && source == other.source;
 
   @override
   T? accept<T>(ElementVisitor<T> visitor) =>
@@ -1291,7 +1303,7 @@
   /// For every constructor we initially set this flag to `true`, and then
   /// set it to `false` during computing constant values if we detect that it
   /// is a part of a cycle.
-  bool _isCycleFree = true;
+  bool isCycleFree = true;
 
   @override
   bool isConstantEvaluated = false;
@@ -1339,16 +1351,6 @@
     setModifier(Modifier.CONST, isConst);
   }
 
-  bool get isCycleFree {
-    return _isCycleFree;
-  }
-
-  set isCycleFree(bool isCycleFree) {
-    // This property is updated in ConstantEvaluationEngine even for
-    // resynthesized constructors, so we don't have the usual assert here.
-    _isCycleFree = isCycleFree;
-  }
-
   @override
   bool get isFactory {
     return hasModifier(Modifier.FACTORY);
@@ -1365,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;
@@ -1609,6 +1611,20 @@
     return null;
   }
 
+  @override
+  EvaluationResultImpl? get evaluationResult {
+    if (constantInitializer != null) {
+      return super.evaluationResult;
+    }
+
+    var superConstructorParameter = this.superConstructorParameter;
+    if (superConstructorParameter is ParameterElementImpl) {
+      return superConstructorParameter.evaluationResult;
+    }
+
+    return null;
+  }
+
   DartObject? get _superConstructorParameterDefaultValue {
     var superDefault = superConstructorParameter?.computeConstantValue();
     var superDefaultType = superDefault?.type;
@@ -2404,13 +2420,11 @@
   }
 
   @override
-  bool operator ==(Object object) {
-    if (identical(this, object)) {
+  bool operator ==(Object other) {
+    if (identical(this, other)) {
       return true;
     }
-    return object is Element &&
-        object.kind == kind &&
-        object.location == location;
+    return other is Element && other.kind == kind && other.location == location;
   }
 
   /// Append a textual representation of this element to the given [builder].
@@ -2610,12 +2624,12 @@
   int get hashCode => Object.hashAll(_components);
 
   @override
-  bool operator ==(Object object) {
-    if (identical(this, object)) {
+  bool operator ==(Object other) {
+    if (identical(this, other)) {
       return true;
     }
-    if (object is ElementLocationImpl) {
-      List<String> otherComponents = object._components;
+    if (other is ElementLocationImpl) {
+      List<String> otherComponents = other._components;
       int length = _components.length;
       if (otherComponents.length != length) {
         return false;
@@ -3339,6 +3353,11 @@
   }
 
   @override
+  bool get isDartCoreIdentical {
+    return isStatic && name == 'identical' && library.isDartCore;
+  }
+
+  @override
   bool get isEntryPoint {
     return isStatic && displayName == FunctionElement.MAIN_FUNCTION_NAME;
   }
@@ -4338,23 +4357,26 @@
   /// Indicates that modifier 'lazy' was applied to the element.
   static const Modifier LATE = Modifier('LATE', 17);
 
+  /// Indicates that a class is a macro builder.
+  static const Modifier MACRO = Modifier('MACRO', 18);
+
   /// Indicates that a class is a mixin application.
-  static const Modifier MIXIN_APPLICATION = Modifier('MIXIN_APPLICATION', 18);
+  static const Modifier MIXIN_APPLICATION = Modifier('MIXIN_APPLICATION', 19);
 
   /// Indicates that the pseudo-modifier 'set' was applied to the element.
-  static const Modifier SETTER = Modifier('SETTER', 19);
+  static const Modifier SETTER = Modifier('SETTER', 20);
 
   /// See [TypeParameterizedElement.isSimplyBounded].
-  static const Modifier SIMPLY_BOUNDED = Modifier('SIMPLY_BOUNDED', 20);
+  static const Modifier SIMPLY_BOUNDED = Modifier('SIMPLY_BOUNDED', 21);
 
   /// Indicates that the modifier 'static' was applied to the element.
-  static const Modifier STATIC = Modifier('STATIC', 21);
+  static const Modifier STATIC = Modifier('STATIC', 22);
 
   /// Indicates that the element does not appear in the source code but was
   /// implicitly created. For example, if a class does not define any
   /// constructors, an implicit zero-argument constructor will be created and it
   /// will be marked as being synthetic.
-  static const Modifier SYNTHETIC = Modifier('SYNTHETIC', 22);
+  static const Modifier SYNTHETIC = Modifier('SYNTHETIC', 23);
 
   static const List<Modifier> values = [
     ABSTRACT,
@@ -4374,6 +4396,7 @@
     HAS_PART_OF_DIRECTIVE,
     IMPLICIT_TYPE,
     LATE,
+    MACRO,
     MIXIN_APPLICATION,
     SETTER,
     STATIC,
@@ -4550,7 +4573,7 @@
         withNullability: withNullability,
       );
     }).join(', ');
-    return '[' + elementsStr + ']';
+    return '[$elementsStr]';
   }
 
   @override
@@ -4797,10 +4820,8 @@
 class ParameterElementImpl_ofImplicitSetter extends ParameterElementImpl {
   final PropertyAccessorElementImpl_ImplicitSetter setter;
 
-  ParameterElementImpl_ofImplicitSetter(
-      PropertyAccessorElementImpl_ImplicitSetter setter)
-      : setter = setter,
-        super(
+  ParameterElementImpl_ofImplicitSetter(this.setter)
+      : super(
           name: '_${setter.variable.name}',
           nameOffset: -1,
           parameterKind: ParameterKind.REQUIRED,
@@ -4965,11 +4986,10 @@
 
   /// Initialize a newly created synthetic property accessor element to be
   /// associated with the given [variable].
-  PropertyAccessorElementImpl.forVariable(PropertyInducingElementImpl variable,
-      {Reference? reference})
+  PropertyAccessorElementImpl.forVariable(this.variable, {Reference? reference})
       : super(variable.name, -1, reference: reference) {
-    this.variable = variable;
-    isAbstract = variable is FieldElementImpl && variable.isAbstract;
+    isAbstract = variable is FieldElementImpl &&
+        (variable as FieldElementImpl).isAbstract;
     isStatic = variable.isStatic;
     isSynthetic = true;
   }
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index f4077d4..47ca3ea 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -56,12 +56,55 @@
   final Set<TypeParameterElement> _typeParameters = Set.identity();
   final Map<TypeParameterElement, List<_TypeConstraint>> _constraints = {};
 
-  GenericInferrer(
-    this._typeSystem,
-    Iterable<TypeParameterElement> typeFormals,
-  ) {
-    _typeParameters.addAll(typeFormals);
-    for (var formal in typeFormals) {
+  /// The list of type parameters being inferred.
+  final List<TypeParameterElement> _typeFormals;
+
+  /// The [ErrorReporter] to which inference errors should be reported, or
+  /// `null` if errors shouldn't be reported.
+  final ErrorReporter? errorReporter;
+
+  /// The [AstNode] to which errors should be attached.  May be `null` if errors
+  /// are not being reported (that is, if [errorReporter] is also `null`).
+  final AstNode? errorNode;
+
+  /// Indicates whether the "generic metadata" feature is enabled.  When it is,
+  /// type arguments are allowed to be instantiated with generic function types.
+  final bool genericMetadataIsEnabled;
+
+  /// The set of type parameters for which a previous inference phase has
+  /// "fixed" a type; no further constraints will be added for types in this
+  /// list.
+  ///
+  /// Background: sometimes the upwards inference phase of generic type
+  /// inference is capable of assigning a more specific type than the downwards
+  /// inference phase, but we don't want to use the more specific type due to
+  /// Dart's "runtime checked covariant generics" design.  For example, in this
+  /// code:
+  ///
+  ///     List<num> x = [1, 2, 3];
+  ///     x.add(4.0);
+  ///
+  /// Downwards inference provisionally considers the list to be a `List<num>`.
+  /// Without this heuristic, upwards inference would refine the type to
+  /// `List<int>`, leading to a runtime failure.  So what we do is "fix" the
+  /// type parameter to `num` after downwards inference, preventing upwards
+  /// inference from doing any further refinement.
+  ///
+  /// (Note that the heuristic isn't needed for type parameters whose variance
+  /// is explicitly specified using the as-yet-unreleased "variance" feature,
+  /// since type parameters whose variance is explicitly specified don't undergo
+  /// implicit runtime checks).
+  final Set<TypeParameterElement> _fixedTypeParameters = {};
+
+  GenericInferrer(this._typeSystem, this._typeFormals,
+      {this.errorReporter,
+      this.errorNode,
+      required this.genericMetadataIsEnabled}) {
+    if (errorReporter != null) {
+      assert(errorNode != null);
+    }
+    _typeParameters.addAll(_typeFormals);
+    for (var formal in _typeFormals) {
       _constraints[formal] = [];
     }
   }
@@ -82,7 +125,25 @@
       genericClass: genericClass,
       isNonNullableByDefault: isNonNullableByDefault,
     );
-    tryMatchSubtypeOf(argumentType, parameterType, origin, covariant: false);
+    _tryMatchSubtypeOf(argumentType, parameterType, origin, covariant: false);
+  }
+
+  /// Applies all the argument constraints implied by [parameters] and
+  /// [argumentTypes].
+  void constrainArguments(
+      {ClassElement? genericClass,
+      required List<ParameterElement> parameters,
+      required List<DartType> argumentTypes}) {
+    for (int i = 0; i < argumentTypes.length; i++) {
+      // Try to pass each argument to each parameter, recording any type
+      // parameter bounds that were implied by this assignment.
+      constrainArgument(
+        argumentTypes[i],
+        parameters[i].type,
+        parameters[i].name,
+        genericClass: genericClass,
+      );
+    }
   }
 
   /// Constrain a universal function type [fnType] used in a context
@@ -103,7 +164,7 @@
       returnType: fnType.returnType,
       nullabilitySuffix: fnType.nullabilitySuffix,
     );
-    tryMatchSubtypeOf(inferFnType, contextType, origin, covariant: true);
+    _tryMatchSubtypeOf(inferFnType, contextType, origin, covariant: true);
   }
 
   /// Apply a return type constraint, which asserts that the [declaredType]
@@ -114,70 +175,23 @@
       contextType,
       isNonNullableByDefault: isNonNullableByDefault,
     );
-    tryMatchSubtypeOf(declaredType, contextType, origin, covariant: true);
+    _tryMatchSubtypeOf(declaredType, contextType, origin, covariant: true);
   }
 
-  /// Given the constraints that were given by calling [constrainArgument] and
-  /// [constrainReturnType], find the type arguments for the [typeFormals] that
-  /// satisfies these constraints.
-  ///
-  /// If [downwardsInferPhase] is set, we are in the first pass of inference,
-  /// pushing context types down. At that point we are allowed to push down
-  /// `_` to precisely represent an unknown type. If [downwardsInferPhase] is
-  /// false, we are on our final inference pass, have all available information
-  /// including argument types, and must not conclude `_` for any type formal.
-  List<DartType>? infer(
-    List<TypeParameterElement> typeFormals, {
-    bool considerExtendsClause = true,
-    ErrorReporter? errorReporter,
-    AstNode? errorNode,
-    bool failAtError = false,
-    bool downwardsInferPhase = false,
-    required bool genericMetadataIsEnabled,
-  }) {
-    // Initialize the inferred type array.
-    //
-    // In the downwards phase, they all start as `_` to offer reasonable
-    // degradation for f-bounded type parameters.
-    var inferredTypes =
-        List<DartType>.filled(typeFormals.length, UnknownInferredType.instance);
+  /// Performs partial (either downwards or horizontal) inference, producing a
+  /// set of inferred types that may contain references to the "unknown type".
+  List<DartType> partialInfer() => _chooseTypes(partial: true);
 
-    for (int i = 0; i < typeFormals.length; i++) {
-      // TODO (kallentu) : Clean up TypeParameterElementImpl casting once
-      // variance is added to the interface.
-      var typeParam = typeFormals[i] as TypeParameterElementImpl;
-      _TypeConstraint? extendsClause;
-      var bound = typeParam.bound;
-      if (considerExtendsClause && bound != null) {
-        extendsClause = _TypeConstraint.fromExtends(
-          typeParam,
-          bound,
-          Substitution.fromPairs(typeFormals, inferredTypes)
-              .substituteType(bound),
-          isNonNullableByDefault: isNonNullableByDefault,
-        );
-      }
-
-      var constraints = _constraints[typeParam]!;
-      inferredTypes[i] = downwardsInferPhase
-          ? _inferTypeParameterFromContext(constraints, extendsClause,
-              isContravariant: typeParam.variance.isContravariant)
-          : _inferTypeParameterFromAll(constraints, extendsClause,
-              isContravariant: typeParam.variance.isContravariant,
-              preferUpwardsInference: !typeParam.isLegacyCovariant);
-    }
-
-    // If the downwards infer phase has failed, we'll catch this in the upwards
-    // phase later on.
-    if (downwardsInferPhase) {
-      return inferredTypes;
-    }
-
+  /// Same as [upwardsInfer], but if [failAtError] is `true` (the default) and
+  /// inference fails, returns `null` rather than trying to perform error
+  /// recovery.
+  List<DartType>? tryUpwardsInfer({bool failAtError = true}) {
+    var inferredTypes = _chooseTypes(partial: false);
     // Check the inferred types against all of the constraints.
     var knownTypes = <TypeParameterElement, DartType>{};
     var hasErrorReported = false;
-    for (int i = 0; i < typeFormals.length; i++) {
-      TypeParameterElement parameter = typeFormals[i];
+    for (int i = 0; i < _typeFormals.length; i++) {
+      TypeParameterElement parameter = _typeFormals[i];
       var constraints = _constraints[parameter]!;
 
       var inferred = inferredTypes[i];
@@ -189,7 +203,7 @@
         var parameterBoundRaw = parameter.bound;
         if (parameterBoundRaw != null) {
           var parameterBound =
-              Substitution.fromPairs(typeFormals, inferredTypes)
+              Substitution.fromPairs(_typeFormals, inferredTypes)
                   .substituteType(parameterBoundRaw);
           parameterBound = _toLegacyElementIfOptOut(parameterBound);
           var extendsConstraint = _TypeConstraint.fromExtends(
@@ -225,7 +239,7 @@
         hasErrorReported = true;
         var typeFormals = inferred.typeFormals;
         var typeFormalsStr = typeFormals.map(_elementStr).join(', ');
-        errorReporter.reportErrorForNode(
+        errorReporter!.reportErrorForNode(
             CompileTimeErrorCode.COULD_NOT_INFER, errorNode!, [
           parameter.name,
           ' Inferred candidate type ${_typeStr(inferred)} has type parameters'
@@ -250,8 +264,8 @@
     }
 
     // Use instantiate to bounds to finish things off.
-    var hasError = List<bool>.filled(typeFormals.length, false);
-    var result = _typeSystem.instantiateTypeFormalsToBounds(typeFormals,
+    var hasError = List<bool>.filled(_typeFormals.length, false);
+    var result = _typeSystem.instantiateTypeFormalsToBounds(_typeFormals,
         hasError: hasError, knownTypes: knownTypes);
 
     // Report any errors from instantiateToBounds.
@@ -259,8 +273,8 @@
       if (hasError[i]) {
         if (failAtError) return null;
         hasErrorReported = true;
-        TypeParameterElement typeParam = typeFormals[i];
-        var typeParamBound = Substitution.fromPairs(typeFormals, inferredTypes)
+        TypeParameterElement typeParam = _typeFormals[i];
+        var typeParamBound = Substitution.fromPairs(_typeFormals, inferredTypes)
             .substituteType(typeParam.bound ?? typeProvider.objectType);
         // TODO(jmesserly): improve this error message.
         errorReporter?.reportErrorForNode(
@@ -277,7 +291,6 @@
       _checkArgumentsNotMatchingBounds(
         errorNode: errorNode,
         errorReporter: errorReporter,
-        typeParameters: typeFormals,
         typeArguments: result,
       );
     }
@@ -286,47 +299,18 @@
     return result;
   }
 
-  /// Tries to make [i1] a subtype of [i2] and accumulate constraints as needed.
-  ///
-  /// The return value indicates whether the match was successful.  If it was
-  /// unsuccessful, any constraints that were accumulated during the match
-  /// attempt have been rewound (see [_rewindConstraints]).
-  bool tryMatchSubtypeOf(DartType t1, DartType t2, _TypeConstraintOrigin origin,
-      {required bool covariant}) {
-    var gatherer = TypeConstraintGatherer(
-      typeSystem: _typeSystem,
-      typeParameters: _typeParameters,
-    );
-    var success = gatherer.trySubtypeMatch(t1, t2, !covariant);
-    if (success) {
-      var constraints = gatherer.computeConstraints();
-      for (var entry in constraints.entries) {
-        if (!entry.value.isEmpty) {
-          var constraint = _constraints[entry.key]!;
-          constraint.add(
-            _TypeConstraint(
-              origin,
-              entry.key,
-              lower: entry.value.lower,
-              upper: entry.value.upper,
-            ),
-          );
-        }
-      }
-    }
-
-    return success;
-  }
+  /// Performs upwards inference, producing a final set of inferred types that
+  /// does not  contain references to the "unknown type".
+  List<DartType> upwardsInfer() => tryUpwardsInfer(failAtError: false)!;
 
   /// Check that inferred [typeArguments] satisfy the [typeParameters] bounds.
   void _checkArgumentsNotMatchingBounds({
     required AstNode? errorNode,
     required ErrorReporter? errorReporter,
-    required List<TypeParameterElement> typeParameters,
     required List<DartType> typeArguments,
   }) {
-    for (int i = 0; i < typeParameters.length; i++) {
-      var parameter = typeParameters[i];
+    for (int i = 0; i < _typeFormals.length; i++) {
+      var parameter = _typeFormals[i];
       var argument = typeArguments[i];
 
       var rawBound = parameter.bound;
@@ -335,7 +319,7 @@
       }
       rawBound = _typeSystem.toLegacyTypeIfOptOut(rawBound);
 
-      var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+      var substitution = Substitution.fromPairs(_typeFormals, typeArguments);
       var bound = substitution.substituteType(rawBound);
       if (!_typeSystem.isSubtypeOf(argument, bound)) {
         errorReporter?.reportErrorForNode(
@@ -438,6 +422,46 @@
     }
   }
 
+  /// Computes (or recomputes) a set of [inferredTypes] based on the constraints
+  /// that have been recorded so far.
+  List<DartType> _chooseTypes({required bool partial}) {
+    var inferredTypes = List<DartType>.filled(
+        _typeFormals.length, UnknownInferredType.instance);
+    for (int i = 0; i < _typeFormals.length; i++) {
+      // TODO (kallentu) : Clean up TypeParameterElementImpl casting once
+      // variance is added to the interface.
+      var typeParam = _typeFormals[i] as TypeParameterElementImpl;
+      _TypeConstraint? extendsClause;
+      var bound = typeParam.bound;
+      if (bound != null) {
+        extendsClause = _TypeConstraint.fromExtends(
+            typeParam,
+            bound,
+            Substitution.fromPairs(_typeFormals, inferredTypes)
+                .substituteType(bound),
+            isNonNullableByDefault: isNonNullableByDefault);
+      }
+
+      var constraints = _constraints[typeParam]!;
+      if (partial) {
+        var inferredType = _inferTypeParameterFromContext(
+            constraints, extendsClause,
+            isContravariant: typeParam.variance.isContravariant);
+        inferredTypes[i] = inferredType;
+        if (typeParam.isLegacyCovariant &&
+            UnknownInferredType.isKnown(inferredTypes[i])) {
+          _fixedTypeParameters.add(typeParam);
+        }
+      } else {
+        inferredTypes[i] = _inferTypeParameterFromAll(
+            constraints, extendsClause,
+            isContravariant: typeParam.variance.isContravariant);
+      }
+    }
+
+    return inferredTypes;
+  }
+
   String _elementStr(Element element) {
     return element.getDisplayString(withNullability: isNonNullableByDefault);
   }
@@ -476,20 +500,7 @@
 
   DartType _inferTypeParameterFromAll(
       List<_TypeConstraint> constraints, _TypeConstraint? extendsClause,
-      {required bool isContravariant, required bool preferUpwardsInference}) {
-    // See if we already fixed this type from downwards inference.
-    // If so, then we aren't allowed to change it based on argument types unless
-    // [preferUpwardsInference] is true.
-    DartType t = _inferTypeParameterFromContext(
-        constraints.where((c) => c.isDownwards), extendsClause,
-        isContravariant: isContravariant);
-    if (!preferUpwardsInference && UnknownInferredType.isKnown(t)) {
-      // Remove constraints that aren't downward ones; we'll ignore these for
-      // error reporting, because inference already succeeded.
-      constraints.removeWhere((c) => !c.isDownwards);
-      return t;
-    }
-
+      {required bool isContravariant}) {
     if (extendsClause != null) {
       constraints = constraints.toList()..add(extendsClause);
     }
@@ -618,6 +629,33 @@
     return NullabilityEliminator.perform(typeProvider, type);
   }
 
+  /// Tries to make [i1] a subtype of [i2] and accumulate constraints as needed.
+  ///
+  /// The return value indicates whether the match was successful.  If it was
+  /// unsuccessful, any constraints that were accumulated during the match
+  /// attempt have been rewound (see [_rewindConstraints]).
+  bool _tryMatchSubtypeOf(
+      DartType t1, DartType t2, _TypeConstraintOrigin origin,
+      {required bool covariant}) {
+    var gatherer = TypeConstraintGatherer(
+        typeSystem: _typeSystem, typeParameters: _typeParameters);
+    var success = gatherer.trySubtypeMatch(t1, t2, !covariant);
+    if (success) {
+      var constraints = gatherer.computeConstraints();
+      for (var entry in constraints.entries) {
+        if (!entry.value.isEmpty && !_fixedTypeParameters.contains(entry.key)) {
+          var constraint = _constraints[entry.key]!;
+          constraint.add(
+            _TypeConstraint(origin, entry.key,
+                lower: entry.value.lower, upper: entry.value.upper),
+          );
+        }
+      }
+    }
+
+    return success;
+  }
+
   String _typeStr(DartType type) {
     return type.getDisplayString(withNullability: isNonNullableByDefault);
   }
@@ -675,8 +713,6 @@
             element,
             upper: extendsType);
 
-  bool get isDownwards => origin is! _TypeConstraintFromArgument;
-
   bool isSatisfiedBy(TypeSystemImpl ts, DartType type) {
     return ts.isSubtypeOf(lowerBound, type) && ts.isSubtypeOf(type, upperBound);
   }
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 6195260..e48d939b 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -1023,13 +1023,9 @@
         : _ParameterDesc.index(index);
   }
 
-  _ParameterDesc.index(int index)
-      : index = index,
-        name = null;
+  _ParameterDesc.index(this.index) : name = null;
 
-  _ParameterDesc.name(String name)
-      : index = null,
-        name = name;
+  _ParameterDesc.name(this.name) : index = null;
 
   @override
   int get hashCode {
diff --git a/pkg/analyzer/lib/src/dart/element/least_greatest_closure.dart b/pkg/analyzer/lib/src/dart/element/least_greatest_closure.dart
index 0d4ee9a..d96fd08 100644
--- a/pkg/analyzer/lib/src/dart/element/least_greatest_closure.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_greatest_closure.dart
@@ -81,16 +81,16 @@
   }
 
   @override
-  DartType? visitTypeParameterType(TypeParameterType node) {
-    if (eliminationTargets.contains(node.element)) {
+  DartType? visitTypeParameterType(TypeParameterType type) {
+    if (eliminationTargets.contains(type.element)) {
       var replacement = _typeParameterReplacement as TypeImpl;
       return replacement.withNullability(
         uniteNullabilities(
           replacement.nullabilitySuffix,
-          node.nullabilitySuffix,
+          type.nullabilitySuffix,
         ),
       );
     }
-    return super.visitTypeParameterType(node);
+    return super.visitTypeParameterType(type);
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index f6195f1..73aebd1 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -185,6 +185,10 @@
         return FieldFormalParameterMember(
             _typeProvider, p, _substitution, isLegacy);
       }
+      if (p is SuperFormalParameterElement) {
+        return SuperFormalParameterMember(
+            _typeProvider, p, _substitution, isLegacy);
+      }
       return ParameterMember(_typeProvider, p, _substitution, isLegacy);
     }).toList();
   }
@@ -419,6 +423,9 @@
   Element get enclosingElement => declaration.enclosingElement;
 
   @override
+  bool get isDartCoreIdentical => declaration.isDartCoreIdentical;
+
+  @override
   bool get isEntryPoint => declaration.isEntryPoint;
 
   @override
@@ -995,6 +1002,64 @@
   }
 }
 
+class SuperFormalParameterMember extends ParameterMember
+    implements SuperFormalParameterElement {
+  factory SuperFormalParameterMember(
+    TypeProviderImpl typeProvider,
+    SuperFormalParameterElement declaration,
+    MapSubstitution substitution,
+    bool isLegacy,
+  ) {
+    var freshTypeParameters = _SubstitutedTypeParameters(
+      declaration.typeParameters,
+      substitution,
+    );
+    return SuperFormalParameterMember._(
+      typeProvider,
+      declaration,
+      freshTypeParameters.substitution,
+      isLegacy,
+      freshTypeParameters.elements,
+    );
+  }
+
+  SuperFormalParameterMember._(
+    TypeProviderImpl typeProvider,
+    SuperFormalParameterElement declaration,
+    MapSubstitution substitution,
+    bool isLegacy,
+    List<TypeParameterElement> typeParameters,
+  ) : super._(
+          typeProvider,
+          declaration,
+          substitution,
+          isLegacy,
+          typeParameters,
+        );
+
+  @override
+  bool get hasDefaultValue => declaration.hasDefaultValue;
+
+  @override
+  bool get isCovariant => declaration.isCovariant;
+
+  @override
+  ParameterElement? get superConstructorParameter {
+    var superConstructorParameter =
+        (declaration as SuperFormalParameterElement).superConstructorParameter;
+    if (superConstructorParameter == null) {
+      return null;
+    }
+
+    return ParameterMember(
+        _typeProvider, superConstructorParameter, _substitution, isLegacy);
+  }
+
+  @override
+  T? accept<T>(ElementVisitor<T> visitor) =>
+      visitor.visitSuperFormalParameterElement(this);
+}
+
 class TopLevelVariableMember extends VariableMember
     implements TopLevelVariableElement {
   TopLevelVariableMember(
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/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 92ac1d9..dcef43d 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -40,7 +40,7 @@
   NullabilitySuffix get nullabilitySuffix => NullabilitySuffix.none;
 
   @override
-  bool operator ==(Object object) => identical(object, this);
+  bool operator ==(Object other) => identical(other, this);
 
   @override
   R accept<R>(TypeVisitor<R> visitor) {
@@ -82,15 +82,12 @@
   final NullabilitySuffix nullabilitySuffix;
 
   FunctionTypeImpl({
-    required List<TypeParameterElement> typeFormals,
+    required this.typeFormals,
     required List<ParameterElement> parameters,
-    required DartType returnType,
-    required NullabilitySuffix nullabilitySuffix,
+    required this.returnType,
+    required this.nullabilitySuffix,
     InstantiatedTypeAliasElement? alias,
-  })  : typeFormals = typeFormals,
-        parameters = _sortNamedParameters(parameters),
-        returnType = returnType,
-        nullabilitySuffix = nullabilitySuffix,
+  })  : parameters = _sortNamedParameters(parameters),
         super(null, alias: alias);
 
   @override
@@ -921,7 +918,7 @@
   String get name => 'Never';
 
   @override
-  bool operator ==(Object object) => identical(object, this);
+  bool operator ==(Object other) => identical(other, this);
 
   @override
   R accept<R>(TypeVisitor<R> visitor) {
@@ -1046,7 +1043,7 @@
   void appendTo(ElementDisplayStringBuilder builder);
 
   @override
-  InterfaceType? asInstanceOf(ClassElement element) => null;
+  InterfaceType? asInstanceOf(ClassElement targetElement) => null;
 
   @override
   String getDisplayString({
@@ -1195,8 +1192,8 @@
   }
 
   @override
-  InterfaceType? asInstanceOf(ClassElement element) {
-    return bound.asInstanceOf(element);
+  InterfaceType? asInstanceOf(ClassElement targetElement) {
+    return bound.asInstanceOf(targetElement);
   }
 
   @override
@@ -1264,7 +1261,7 @@
   NullabilitySuffix get nullabilitySuffix => NullabilitySuffix.none;
 
   @override
-  bool operator ==(Object object) => identical(object, this);
+  bool operator ==(Object other) => identical(other, this);
 
   @override
   R accept<R>(TypeVisitor<R> visitor) {
diff --git a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
index c729106..eed4d97 100644
--- a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
@@ -47,6 +47,8 @@
     _typeParameters.addAll(typeParameters);
   }
 
+  bool get isConstraintSetEmpty => _constraints.isEmpty;
+
   DartType get _defaultTypeParameterBound {
     if (_typeSystem.isNonNullableByDefault) {
       return _typeSystem.objectQuestion;
@@ -581,9 +583,17 @@
     var rewind = _constraints.length;
 
     for (var i = 0; i < P.typeArguments.length; i++) {
+      var variance =
+          (P.element.typeParameters[i] as TypeParameterElementImpl).variance;
       var M = P.typeArguments[i];
       var N = Q.typeArguments[i];
-      if (!trySubtypeMatch(M, N, leftSchema)) {
+      if ((variance.isCovariant || variance.isInvariant) &&
+          !trySubtypeMatch(M, N, leftSchema)) {
+        _constraints.length = rewind;
+        return false;
+      }
+      if ((variance.isContravariant || variance.isInvariant) &&
+          !trySubtypeMatch(N, M, leftSchema)) {
         _constraints.length = rewind;
         return false;
       }
diff --git a/pkg/analyzer/lib/src/dart/element/type_provider.dart b/pkg/analyzer/lib/src/dart/element/type_provider.dart
index 15242b5..26d915f 100644
--- a/pkg/analyzer/lib/src/dart/element/type_provider.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_provider.dart
@@ -154,10 +154,9 @@
   TypeProviderImpl({
     required LibraryElement coreLibrary,
     required LibraryElement asyncLibrary,
-    required bool isNonNullableByDefault,
+    required this.isNonNullableByDefault,
   })  : _coreLibrary = coreLibrary,
-        _asyncLibrary = asyncLibrary,
-        isNonNullableByDefault = isNonNullableByDefault;
+        _asyncLibrary = asyncLibrary;
 
   TypeProviderImpl get asLegacy {
     if (isNonNullableByDefault) {
diff --git a/pkg/analyzer/lib/src/dart/element/type_schema.dart b/pkg/analyzer/lib/src/dart/element/type_schema.dart
index f65f66c..267ba37 100644
--- a/pkg/analyzer/lib/src/dart/element/type_schema.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_schema.dart
@@ -35,7 +35,7 @@
   NullabilitySuffix get nullabilitySuffix => NullabilitySuffix.star;
 
   @override
-  bool operator ==(Object object) => identical(object, this);
+  bool operator ==(Object other) => identical(other, this);
 
   @override
   R accept<R>(TypeVisitor<R> visitor) {
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index 9097f205..d420c963 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -347,6 +347,52 @@
     return null;
   }
 
+  /// Computes the set of free type parameters appearing in [rootType].
+  ///
+  /// If a non-null [candidates] set is given, then only type parameters
+  /// appearing in it are considered; otherwise all type parameters are
+  /// considered.
+  List<TypeParameterElement>? getFreeParameters(DartType rootType,
+      {Set<TypeParameterElement>? candidates}) {
+    List<TypeParameterElement>? parameters;
+    Set<DartType> visitedTypes = HashSet<DartType>();
+    Set<TypeParameterElement> boundTypeParameters =
+        HashSet<TypeParameterElement>();
+
+    void appendParameters(DartType? type) {
+      if (type == null) {
+        return;
+      }
+      if (visitedTypes.contains(type)) {
+        return;
+      }
+      visitedTypes.add(type);
+      if (type is TypeParameterType) {
+        var element = type.element;
+        if ((candidates == null || candidates.contains(element)) &&
+            !boundTypeParameters.contains(element)) {
+          parameters ??= <TypeParameterElement>[];
+          parameters!.add(element);
+        }
+      } else {
+        if (type is FunctionType) {
+          assert(!type.typeFormals.any((t) => boundTypeParameters.contains(t)));
+          boundTypeParameters.addAll(type.typeFormals);
+          appendParameters(type.returnType);
+          type.parameters.map((p) => p.type).forEach(appendParameters);
+          // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44218
+          type.alias?.typeArguments.forEach(appendParameters);
+          boundTypeParameters.removeAll(type.typeFormals);
+        } else if (type is InterfaceType) {
+          type.typeArguments.forEach(appendParameters);
+        }
+      }
+    }
+
+    appendParameters(rootType);
+    return parameters;
+  }
+
   /// Computes the greatest lower bound of [T1] and [T2].
   DartType getGreatestLowerBound(DartType T1, DartType T2) {
     return _greatestLowerBoundHelper.getGreatestLowerBound(T1, T2);
@@ -425,13 +471,9 @@
   /// Given a generic function type `F<T0, T1, ... Tn>` and a context type C,
   /// infer an instantiation of F, such that `F<S0, S1, ..., Sn>` <: C.
   ///
-  /// This is similar to [inferGenericFunctionOrType], but the return type is
+  /// This is similar to [setupGenericTypeInference], but the return type is
   /// also considered as part of the solution.
-  ///
-  /// If this function is called with a [contextType] that is also
-  /// uninstantiated, or a [fnType] that is already instantiated, it will have
-  /// no effect and return `null`.
-  List<DartType>? inferFunctionTypeInstantiation(
+  List<DartType> inferFunctionTypeInstantiation(
     FunctionType contextType,
     FunctionType fnType, {
     ErrorReporter? errorReporter,
@@ -446,87 +488,14 @@
     // inferred. It will optimistically assume these type parameters can be
     // subtypes (or supertypes) as necessary, and track the constraints that
     // are implied by this.
-    var inferrer = GenericInferrer(this, fnType.typeFormals);
+    var inferrer = GenericInferrer(this, fnType.typeFormals,
+        errorReporter: errorReporter,
+        errorNode: errorNode,
+        genericMetadataIsEnabled: genericMetadataIsEnabled);
     inferrer.constrainGenericFunctionInContext(fnType, contextType);
 
     // Infer and instantiate the resulting type.
-    return inferrer.infer(
-      fnType.typeFormals,
-      errorReporter: errorReporter,
-      errorNode: errorNode,
-      genericMetadataIsEnabled: genericMetadataIsEnabled,
-    );
-  }
-
-  /// Infers type arguments for a generic type, function, method, or
-  /// list/map literal, using the downward context type as well as the
-  /// argument types if available.
-  ///
-  /// For example, given a function type with generic type parameters, this
-  /// infers the type parameters from the actual argument types, and returns the
-  /// instantiated function type.
-  ///
-  /// Concretely, given a function type with parameter types P0, P1, ... Pn,
-  /// result type R, and generic type parameters T0, T1, ... Tm, use the
-  /// argument types A0, A1, ... An to solve for the type parameters.
-  ///
-  /// For each parameter Pi, we want to ensure that Ai <: Pi. We can do this by
-  /// running the subtype algorithm, and when we reach a type parameter Tj,
-  /// recording the lower or upper bound it must satisfy. At the end, all
-  /// constraints can be combined to determine the type.
-  ///
-  /// All constraints on each type parameter Tj are tracked, as well as where
-  /// they originated, so we can issue an error message tracing back to the
-  /// argument values, type parameter "extends" clause, or the return type
-  /// context.
-  List<DartType>? inferGenericFunctionOrType({
-    ClassElement? genericClass,
-    required List<TypeParameterElement> typeParameters,
-    required List<ParameterElement> parameters,
-    required DartType declaredReturnType,
-    required List<DartType> argumentTypes,
-    required DartType? contextReturnType,
-    ErrorReporter? errorReporter,
-    AstNode? errorNode,
-    bool downwards = false,
-    bool isConst = false,
-    required bool genericMetadataIsEnabled,
-  }) {
-    if (typeParameters.isEmpty) {
-      return null;
-    }
-
-    // Create a TypeSystem that will allow certain type parameters to be
-    // inferred. It will optimistically assume these type parameters can be
-    // subtypes (or supertypes) as necessary, and track the constraints that
-    // are implied by this.
-    var inferrer = GenericInferrer(this, typeParameters);
-
-    if (contextReturnType != null) {
-      if (isConst) {
-        contextReturnType = eliminateTypeVariables(contextReturnType);
-      }
-      inferrer.constrainReturnType(declaredReturnType, contextReturnType);
-    }
-
-    for (int i = 0; i < argumentTypes.length; i++) {
-      // Try to pass each argument to each parameter, recording any type
-      // parameter bounds that were implied by this assignment.
-      inferrer.constrainArgument(
-        argumentTypes[i],
-        parameters[i].type,
-        parameters[i].name,
-        genericClass: genericClass,
-      );
-    }
-
-    return inferrer.infer(
-      typeParameters,
-      errorReporter: errorReporter,
-      errorNode: errorNode,
-      downwardsInferPhase: downwards,
-      genericMetadataIsEnabled: genericMetadataIsEnabled,
-    );
+    return inferrer.upwardsInfer();
   }
 
   /// Given a [DartType] [type], if [type] is an uninstantiated
@@ -618,46 +587,12 @@
       }
     }
 
-    List<TypeParameterElement>? getFreeParameters(DartType rootType) {
-      List<TypeParameterElement>? parameters;
-      Set<DartType> visitedTypes = HashSet<DartType>();
-
-      void appendParameters(DartType? type) {
-        if (type == null) {
-          return;
-        }
-        if (visitedTypes.contains(type)) {
-          return;
-        }
-        visitedTypes.add(type);
-        if (type is TypeParameterType) {
-          var element = type.element;
-          if (all.contains(element)) {
-            parameters ??= <TypeParameterElement>[];
-            parameters!.add(element);
-          }
-        } else {
-          if (type is FunctionType) {
-            appendParameters(type.returnType);
-            type.parameters.map((p) => p.type).forEach(appendParameters);
-            // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44218
-            type.alias?.typeArguments.forEach(appendParameters);
-          } else if (type is InterfaceType) {
-            type.typeArguments.forEach(appendParameters);
-          }
-        }
-      }
-
-      appendParameters(rootType);
-      return parameters;
-    }
-
     bool hasProgress = true;
     while (hasProgress) {
       hasProgress = false;
       for (TypeParameterElement parameter in partials.keys) {
         DartType value = partials[parameter]!;
-        var freeParameters = getFreeParameters(value);
+        var freeParameters = getFreeParameters(value, candidates: all);
         if (freeParameters == null) {
           defaults[parameter] = value;
           partials.remove(parameter);
@@ -1295,19 +1230,17 @@
     required bool genericMetadataIsEnabled,
   }) {
     var typeParameters = mixinElement.typeParameters;
-    var inferrer = GenericInferrer(this, typeParameters);
+    var inferrer = GenericInferrer(this, typeParameters,
+        genericMetadataIsEnabled: genericMetadataIsEnabled);
     for (int i = 0; i < srcTypes.length; i++) {
       inferrer.constrainReturnType(srcTypes[i], destTypes[i]);
       inferrer.constrainReturnType(destTypes[i], srcTypes[i]);
     }
 
-    var inferredTypes = inferrer.infer(
-      typeParameters,
-      considerExtendsClause: false,
-      genericMetadataIsEnabled: genericMetadataIsEnabled,
-    )!;
-    inferredTypes =
-        inferredTypes.map(_removeBoundsOfGenericFunctionTypes).toList();
+    var inferredTypes = inferrer
+        .upwardsInfer()
+        .map(_removeBoundsOfGenericFunctionTypes)
+        .toList();
     var substitution = Substitution.fromPairs(typeParameters, inferredTypes);
 
     for (int i = 0; i < srcTypes.length; i++) {
@@ -1568,6 +1501,36 @@
     return RuntimeTypeEqualityHelper(this).equal(T1, T2);
   }
 
+  /// Prepares to infer type arguments for a generic type, function, method, or
+  /// list/map literal, initializing a [GenericInferrer] using the downward
+  /// context type.
+  GenericInferrer setupGenericTypeInference(
+      {required List<TypeParameterElement> typeParameters,
+      required DartType declaredReturnType,
+      required DartType? contextReturnType,
+      ErrorReporter? errorReporter,
+      AstNode? errorNode,
+      required bool genericMetadataIsEnabled,
+      bool isConst = false}) {
+    // Create a GenericInferrer that will allow certain type parameters to be
+    // inferred. It will optimistically assume these type parameters can be
+    // subtypes (or supertypes) as necessary, and track the constraints that
+    // are implied by this.
+    var inferrer = GenericInferrer(this, typeParameters,
+        errorReporter: errorReporter,
+        errorNode: errorNode,
+        genericMetadataIsEnabled: genericMetadataIsEnabled);
+
+    if (contextReturnType != null) {
+      if (isConst) {
+        contextReturnType = eliminateTypeVariables(contextReturnType);
+      }
+      inferrer.constrainReturnType(declaredReturnType, contextReturnType);
+    }
+
+    return inferrer;
+  }
+
   /// If a legacy library, return the legacy version of the [type].
   /// Otherwise, return the original type.
   DartType toLegacyTypeIfOptOut(DartType type) {
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
index 18488af..c52348a 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -168,6 +168,48 @@
   );
 
   /**
+   * Parameters:
+   * 0: the name of the struct or union class
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a subclass of either `Struct`
+  // or `Union` implements `Finalizable`.
+  //
+  // For more information about FFI, see [C interop using dart:ffi][].
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the class `S`
+  // implements `Finalizable`:
+  //
+  // ```dart
+  // import 'dart:ffi';
+  //
+  // class [!S!] extends Struct implements Finalizable {
+  //   external Pointer notEmpty;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Try removing the implements clause from the class:
+  //
+  // ```dart
+  // import 'dart:ffi';
+  //
+  // class S extends Struct {
+  //   external Pointer notEmpty;
+  // }
+  // ```
+  static const FfiCode COMPOUND_IMPLEMENTS_FINALIZABLE = FfiCode(
+    'COMPOUND_IMPLEMENTS_FINALIZABLE',
+    "The class '{0}' can't implement Finalizable.",
+    correctionMessage: "Try removing the implements clause from '{0}'.",
+    hasPublishedDocs: true,
+  );
+
+  /**
    * No parameters.
    */
   // #### Description
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 06dc036..41bb550 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -52,7 +52,7 @@
   ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
   ParserErrorCode.MISSING_INITIALIZER,
   ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST,
-  ParserErrorCode.INVALID_UNICODE_ESCAPE,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED,
   ParserErrorCode.INVALID_OPERATOR,
   ParserErrorCode.INVALID_HEX_ESCAPE,
   ParserErrorCode.EXPECTED_INSTEAD,
@@ -138,6 +138,9 @@
   ParserErrorCode.MULTIPLE_CLAUSES,
   ParserErrorCode.OUT_OF_ORDER_CLAUSES,
   ParserErrorCode.UNEXPECTED_TOKENS,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET,
+  ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED,
 ];
 
 class ParserErrorCode extends ErrorCode {
@@ -461,13 +464,6 @@
     correctionMessage: "Try declaring a constant.",
   );
 
-  static const ParserErrorCode
-      ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS = ParserErrorCode(
-    'ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS',
-    "Missing arguments in enum constructor invocation.",
-    correctionMessage: "Try adding an argument list.",
-  );
-
   static const ParserErrorCode ENUM_IN_CLASS = ParserErrorCode(
     'ENUM_IN_CLASS',
     "Enums can't be declared inside classes.",
@@ -1025,8 +1021,29 @@
         "'this.namedConstructor())",
   );
 
-  static const ParserErrorCode INVALID_UNICODE_ESCAPE = ParserErrorCode(
-    'INVALID_UNICODE_ESCAPE',
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE_STARTED = ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE_STARTED',
+    "The string '\\' can't stand alone.",
+    correctionMessage: "Try adding another backslash (\\) to escape the '\\'.",
+  );
+
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE_U_BRACKET =
+      ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE_U_BRACKET',
+    "An escape sequence starting with '\\u{' must be followed by 1 to 6 "
+        "hexadecimal digits followed by a '}'.",
+  );
+
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE_U_NO_BRACKET =
+      ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE_U_NO_BRACKET',
+    "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
+        "digits.",
+  );
+
+  static const ParserErrorCode INVALID_UNICODE_ESCAPE_U_STARTED =
+      ParserErrorCode(
+    'INVALID_UNICODE_ESCAPE_U_STARTED',
     "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
         "digits or from 1 to 6 digits between '{' and '}'.",
   );
diff --git a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
index 10b3313..715bba0 100644
--- a/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/micro/analysis_context.dart
@@ -57,12 +57,11 @@
   analysisContext2.currentSession = analysisSession;
   analysisSession.analysisContext = analysisContext2;
 
-  return MicroContextObjects(
+  return MicroContextObjects._(
     declaredVariables: declaredVariables,
     synchronousSession: synchronousSession,
     analysisSession: analysisSession,
     analysisContext: analysisContext,
-    analysisContext2: analysisContext2,
   );
 }
 
@@ -71,14 +70,12 @@
   final SynchronousSession synchronousSession;
   final _MicroAnalysisSessionImpl analysisSession;
   final AnalysisContextImpl analysisContext;
-  final _MicroAnalysisContextImpl analysisContext2;
 
-  MicroContextObjects({
+  MicroContextObjects._({
     required this.declaredVariables,
     required this.synchronousSession,
     required this.analysisSession,
     required this.analysisContext,
-    required this.analysisContext2,
   });
 
   set analysisOptions(AnalysisOptionsImpl analysisOptions) {
@@ -182,18 +179,20 @@
 
   @override
   Future<SomeLibraryElementResult> getLibraryByUri(String uriStr) async {
-    var element = analysisContext.fileResolver.getLibraryByUri(uriStr: uriStr);
+    var element = await analysisContext.fileResolver.getLibraryByUri2(
+      uriStr: uriStr,
+    );
     return LibraryElementResultImpl(element);
   }
 
   @override
   Future<SomeResolvedLibraryResult> getResolvedLibrary(String path) async {
-    return analysisContext.fileResolver.resolveLibrary(path: path);
+    return analysisContext.fileResolver.resolveLibrary2(path: path);
   }
 
   @override
   Future<SomeResolvedUnitResult> getResolvedUnit(String path) async {
-    return analysisContext.fileResolver.resolve(path: path);
+    return analysisContext.fileResolver.resolve2(path: path);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 6e65351..1510042 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -434,7 +434,11 @@
   ErrorReporter _getErrorReporter(FileState file) {
     return _errorReporters.putIfAbsent(file, () {
       RecordingErrorListener listener = _getErrorListener(file);
-      return ErrorReporter(listener, file.source);
+      return ErrorReporter(
+        listener,
+        file.source,
+        isNonNullableByDefault: _libraryElement.isNonNullableByDefault,
+      );
     });
   }
 
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 9597bff..d58d6bb 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -6,6 +6,8 @@
 import 'dart:typed_data';
 
 import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart';
+import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
@@ -24,8 +26,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 import 'package:analyzer/src/summary2/data_reader.dart';
 import 'package:analyzer/src/summary2/data_writer.dart';
 import 'package:analyzer/src/summary2/informative_data.dart';
@@ -87,7 +87,7 @@
   /// Files that reference this file.
   final List<FileState> referencingFiles = [];
 
-  _FileStateFiles? _files;
+  FileStateFiles? _files;
 
   LibraryCycle? _libraryCycle;
 
@@ -154,10 +154,10 @@
     }
   }
 
-  _FileStateFiles files({
+  FileStateFiles files({
     OperationPerformanceImpl? performance,
   }) {
-    return _files ??= _FileStateFiles(
+    return _files ??= FileStateFiles(
       owner: this,
       performance: performance ?? OperationPerformanceImpl('<root>'),
     );
@@ -194,6 +194,68 @@
   }
 }
 
+class FileStateFiles {
+  final List<FileState> imported = [];
+  final List<FileState> exported = [];
+  final List<FileState> parted = [];
+  final List<FileState> ofLibrary = [];
+
+  FileStateFiles({
+    required FileState owner,
+    required OperationPerformanceImpl performance,
+  }) {
+    var unlinked = owner._unlinked;
+    var location = unlinked.location;
+    var unlinkedUnit = unlinked.unlinked.unit;
+
+    // Build the graph.
+    for (var directive in unlinkedUnit.imports) {
+      var file = location._fileForRelativeUri(
+        relativeUri: directive.uri,
+        performance: performance,
+      );
+      if (file != null) {
+        file.referencingFiles.add(owner);
+        imported.add(file);
+      }
+    }
+    for (var directive in unlinkedUnit.exports) {
+      var file = location._fileForRelativeUri(
+        relativeUri: directive.uri,
+        performance: performance,
+      );
+      if (file != null) {
+        exported.add(file);
+        file.referencingFiles.add(owner);
+      }
+    }
+    for (var uri in unlinkedUnit.parts) {
+      var file = location._fileForRelativeUri(
+        containingLibrary: owner,
+        relativeUri: uri,
+        performance: performance,
+      );
+      if (file != null) {
+        parted.add(file);
+        file.referencingFiles.add(owner);
+      }
+    }
+
+    ofLibrary.add(owner);
+    ofLibrary.addAll(parted);
+  }
+
+  /// Return all directly referenced files - imported, exported or parted.
+  Set<FileState> get directReferencedFiles {
+    return <FileState>{...imported, ...exported, ...parted};
+  }
+
+  /// Return all directly referenced libraries - imported or exported.
+  Set<FileState> get directReferencedLibraries {
+    return <FileState>{...imported, ...exported};
+  }
+}
+
 class FileSystemState {
   final ResourceProvider _resourceProvider;
   final CiderByteStore _byteStore;
@@ -500,7 +562,7 @@
 
   @override
   String toString() {
-    return '[' + libraries.join(', ') + ']';
+    return '[${libraries.join(', ')}]';
   }
 }
 
@@ -514,68 +576,6 @@
   });
 }
 
-class _FileStateFiles {
-  final List<FileState> imported = [];
-  final List<FileState> exported = [];
-  final List<FileState> parted = [];
-  final List<FileState> ofLibrary = [];
-
-  _FileStateFiles({
-    required FileState owner,
-    required OperationPerformanceImpl performance,
-  }) {
-    var unlinked = owner._unlinked;
-    var location = unlinked.location;
-    var unlinkedUnit = unlinked.unlinked.unit;
-
-    // Build the graph.
-    for (var directive in unlinkedUnit.imports) {
-      var file = location._fileForRelativeUri(
-        relativeUri: directive.uri,
-        performance: performance,
-      );
-      if (file != null) {
-        file.referencingFiles.add(owner);
-        imported.add(file);
-      }
-    }
-    for (var directive in unlinkedUnit.exports) {
-      var file = location._fileForRelativeUri(
-        relativeUri: directive.uri,
-        performance: performance,
-      );
-      if (file != null) {
-        exported.add(file);
-        file.referencingFiles.add(owner);
-      }
-    }
-    for (var uri in unlinkedUnit.parts) {
-      var file = location._fileForRelativeUri(
-        containingLibrary: owner,
-        relativeUri: uri,
-        performance: performance,
-      );
-      if (file != null) {
-        parted.add(file);
-        file.referencingFiles.add(owner);
-      }
-    }
-
-    ofLibrary.add(owner);
-    ofLibrary.addAll(parted);
-  }
-
-  /// Return all directly referenced files - imported, exported or parted.
-  Set<FileState> get directReferencedFiles {
-    return <FileState>{...imported, ...exported, ...parted};
-  }
-
-  /// Return all directly referenced libraries - imported or exported.
-  Set<FileState> get directReferencedLibraries {
-    return <FileState>{...imported, ...exported};
-  }
-}
-
 class _FileStateLocation {
   final FileSystemState _fsState;
 
@@ -663,7 +663,7 @@
 
     var siblings = <Resource>[];
     try {
-      siblings = resource.parent2.getChildren();
+      siblings = resource.parent.getChildren();
     } catch (_) {}
 
     for (var sibling in siblings) {
@@ -962,6 +962,7 @@
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
       lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
+      macroClasses: [],
       partOfName: partOfName,
       partOfUri: partOfUriStr,
       parts: parts,
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index 73c6f51..5670310 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -51,11 +51,11 @@
   CiderSearchMatch(this.path, this.startPositions);
 
   @override
-  bool operator ==(Object object) =>
-      object is CiderSearchMatch &&
-      path == object.path &&
+  bool operator ==(Object other) =>
+      other is CiderSearchMatch &&
+      path == other.path &&
       const ListEquality<CharacterLocation?>()
-          .equals(startPositions, object.startPositions);
+          .equals(startPositions, other.startPositions);
 
   @override
   String toString() {
@@ -132,22 +132,15 @@
         );
 
   FileResolver.from({
-    required PerformanceLog logger,
-    required ResourceProvider resourceProvider,
-    required SourceFactory sourceFactory,
-    required String Function(String path) getFileDigest,
-    required void Function(List<String> paths)? prefetchFiles,
-    required Workspace workspace,
-    bool Function(String path)? isGenerated,
+    required this.logger,
+    required this.resourceProvider,
+    required this.sourceFactory,
+    required this.getFileDigest,
+    required this.prefetchFiles,
+    required this.workspace,
+    this.isGenerated,
     CiderByteStore? byteStore,
-  })  : logger = logger,
-        sourceFactory = sourceFactory,
-        resourceProvider = resourceProvider,
-        getFileDigest = getFileDigest,
-        prefetchFiles = prefetchFiles,
-        workspace = workspace,
-        isGenerated = isGenerated,
-        byteStore = byteStore ?? CiderCachedByteStore(memoryCacheSize);
+  }) : byteStore = byteStore ?? CiderCachedByteStore(memoryCacheSize);
 
   /// Update the resolver to reflect the fact that the file with the given
   /// [path] was changed. We need to make sure that when this file, of any file
@@ -187,15 +180,15 @@
 
   /// Looks for references to the given Element. All the files currently
   ///  cached by the resolver are searched, generated files are ignored.
-  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;
@@ -214,28 +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);
         });
-        result.forEach((filePath) {
-          collectReferences(filePath, performance!);
-        });
+        for (var filePath in result) {
+          await collectReferences2(filePath, performance!);
+        }
       }
       return references;
     });
   }
 
-  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!,
@@ -247,7 +240,7 @@
       errorsSignatureBuilder.addBytes(file.digest);
       var errorsSignature = errorsSignatureBuilder.toByteList();
 
-      var errorsKey = file.path + '.errors';
+      var errorsKey = '${file.path}.errors';
       var bytes = byteStore.get(errorsKey, errorsSignature)?.bytes;
       List<AnalysisError>? errors;
       if (bytes != null) {
@@ -258,7 +251,7 @@
       }
 
       if (errors == null) {
-        var unitResult = resolve(
+        var unitResult = await resolve2(
           path: path,
           performance: performance,
         );
@@ -318,10 +311,10 @@
     return fsState.getFilesWithTopLevelDeclarations(name);
   }
 
-  LibraryElement getLibraryByUri({
+  Future<LibraryElement> getLibraryByUri2({
     required String uriStr,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     performance ??= OperationPerformanceImpl('<default>');
 
     var uri = Uri.parse(uriStr);
@@ -341,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,
       );
@@ -382,11 +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.
-  void linkLibraries({
+  Future<void> linkLibraries2({
     required String path,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     var performance = OperationPerformanceImpl('<unused>');
@@ -398,7 +391,7 @@
     var file = fileContext.file;
     var libraryFile = file.partOfLibrary ?? file;
 
-    libraryContext!.load2(
+    await libraryContext!.load(
       targetLibrary: libraryFile,
       performance: performance,
     );
@@ -424,17 +417,17 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
-  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!,
@@ -451,7 +444,7 @@
         }
       }
 
-      var libraryResult = resolveLibrary(
+      var libraryResult = await resolveLibrary2(
         completionLine: completionLine,
         completionColumn: completionColumn,
         path: libraryFile.path,
@@ -465,13 +458,13 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
-  ResolvedLibraryResult resolveLibrary({
+  Future<ResolvedLibraryResult> resolveLibrary2({
     int? completionLine,
     int? completionColumn,
     String? completionPath,
     required String path,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     performance ??= OperationPerformanceImpl('<default>');
@@ -481,7 +474,7 @@
       return cachedResult;
     }
 
-    return logger.run('Resolve $path', () {
+    return logger.runAsync('Resolve $path', () async {
       var fileContext = getFileContext(
         path: path,
         performance: performance!,
@@ -504,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,
         );
@@ -676,7 +669,7 @@
     File? optionsFile;
     if (!isThirdParty) {
       optionsFile = performance.run('findOptionsFile', (_) {
-        var folder = resourceProvider.getFile(path).parent2;
+        var folder = resourceProvider.getFile(path).parent;
         return _findOptionsFile(folder);
       });
     }
@@ -817,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);
@@ -894,7 +889,7 @@
         }
         inputsTimer.stop();
 
-        var linkResult = link2.link(elementFactory, inputLibraries);
+        var linkResult = await link2.link2(elementFactory, inputLibraries);
         librariesLinked += cycle.libraries.length;
 
         resolutionBytes = linkResult.resolutionBytes;
@@ -921,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 46980c7..f43c056 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -31,7 +31,7 @@
     AnnotationImpl node,
     ClassElement classElement,
     SimpleIdentifierImpl? constructorName,
-    ArgumentList argumentList,
+    ArgumentListImpl argumentList,
     List<WhyNotPromotedGetter> whyNotPromotedList,
   ) {
     ConstructorElement? constructorElement;
@@ -98,27 +98,28 @@
     SimpleIdentifierImpl? constructorName,
     List<TypeParameterElement> typeParameters,
     ConstructorElement? constructorElement,
-    ArgumentList argumentList,
+    ArgumentListImpl argumentList,
     InterfaceType Function(List<DartType> typeArguments) instantiateElement,
     List<WhyNotPromotedGetter> whyNotPromotedList,
   ) {
     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,
-          rawType: null,
-          contextType: null,
-          whyNotPromotedList: whyNotPromotedList);
+      AnnotationInferrer(
+              resolver: _resolver,
+              node: node,
+              argumentList: argumentList,
+              rawType: null,
+              contextType: null,
+              whyNotPromotedList: whyNotPromotedList,
+              constructorName: constructorName)
+          .resolveInvocation();
       return;
     }
 
@@ -128,12 +129,15 @@
     );
     var constructorRawType = elementToInfer.asType;
 
-    annotationInferrer.resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        rawType: constructorRawType,
-        contextType: null,
-        whyNotPromotedList: whyNotPromotedList);
+    AnnotationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: constructorRawType,
+            contextType: null,
+            whyNotPromotedList: whyNotPromotedList,
+            constructorName: constructorName)
+        .resolveInvocation();
   }
 
   void _extensionGetter(
@@ -338,7 +342,7 @@
     TypeAliasElement typeAliasElement,
     SimpleIdentifierImpl? constructorName,
     InterfaceType aliasedType,
-    ArgumentList argumentList,
+    ArgumentListImpl argumentList,
     List<WhyNotPromotedGetter> whyNotPromotedList,
   ) {
     var constructorElement = aliasedType.lookUpConstructor(
@@ -399,12 +403,15 @@
       AnnotationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList) {
     var arguments = node.arguments;
     if (arguments != null) {
-      AnnotationInferrer(constructorName: null).resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          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/applicable_extensions.dart b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
index 5d26817..0d09988 100644
--- a/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart
@@ -196,24 +196,21 @@
       var freshTypeParameters = freshTypes.freshTypeParameters;
       var rawExtendedType = freshTypes.substitute(extension.extendedType);
 
-      var inferrer = GenericInferrer(typeSystem, freshTypeParameters);
+      var inferrer = GenericInferrer(typeSystem, freshTypeParameters,
+          genericMetadataIsEnabled: genericMetadataIsEnabled);
       inferrer.constrainArgument(
         targetType,
         rawExtendedType,
         'extendedType',
       );
-      var typeArguments = inferrer.infer(
-        freshTypeParameters,
-        failAtError: true,
-        genericMetadataIsEnabled: genericMetadataIsEnabled,
-      );
-      if (typeArguments == null) {
+      var inferredTypes = inferrer.tryUpwardsInfer();
+      if (inferredTypes == null) {
         continue;
       }
 
       var substitution = Substitution.fromPairs(
         extension.typeParameters,
-        typeArguments,
+        inferredTypes,
       );
       var extendedType = substitution.substituteType(
         extension.extendedType,
diff --git a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
index 5e1246d..6d8741a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -111,9 +111,10 @@
     left = node.leftOperand;
 
     var flow = _resolver.flowAnalysis.flow;
+    EqualityInfo<PromotableElement, DartType>? leftInfo;
     var leftExtensionOverride = left is ExtensionOverride;
     if (!leftExtensionOverride) {
-      flow?.equalityOp_rightBegin(left, left.typeOrThrow);
+      leftInfo = flow?.equalityOperand_end(left, left.typeOrThrow);
     }
 
     var right = node.rightOperand;
@@ -122,7 +123,9 @@
     var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
     if (!leftExtensionOverride) {
-      flow?.equalityOp_end(node, right, right.typeOrThrow, notEqual: notEqual);
+      flow?.equalityOperation_end(
+          node, leftInfo, flow.equalityOperand_end(right, right.typeOrThrow),
+          notEqual: notEqual);
     }
 
     _resolveUserDefinableElement(
diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
index 15862ca..0e5d140 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -343,18 +343,16 @@
         return _listOfDynamic(typeParameters);
       }
     } else {
-      var inferrer = GenericInferrer(_typeSystem, typeParameters);
+      var inferrer = GenericInferrer(_typeSystem, typeParameters,
+          errorReporter: _errorReporter,
+          errorNode: node.extensionName,
+          genericMetadataIsEnabled: _genericMetadataIsEnabled);
       inferrer.constrainArgument(
         receiverType,
         element.extendedType,
         'extendedType',
       );
-      return inferrer.infer(
-        typeParameters,
-        errorReporter: _errorReporter,
-        errorNode: node.extensionName,
-        genericMetadataIsEnabled: _genericMetadataIsEnabled,
-      );
+      return inferrer.upwardsInfer();
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index ee6db4b..4b31179 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -106,7 +106,7 @@
   }
 
   void assignmentExpression(AssignmentExpression node) {
-    if (flow == null) return null;
+    if (flow == null) return;
 
     if (node.operator.type == TokenType.QUESTION_QUESTION_EQ) {
       flow!.ifNullExpression_rightBegin(node.leftHandSide, node.readType!);
@@ -114,7 +114,7 @@
   }
 
   void assignmentExpression_afterRight(AssignmentExpression node) {
-    if (flow == null) return null;
+    if (flow == null) return;
 
     if (node.operator.type == TokenType.QUESTION_QUESTION_EQ) {
       flow!.ifNullExpression_end();
@@ -147,7 +147,8 @@
   }
 
   void executableDeclaration_enter(
-      AstNode node, FormalParameterList? parameters, bool isClosure) {
+      AstNode node, FormalParameterList? parameters,
+      {required bool isClosure}) {
     if (isClosure) {
       flow!.functionExpression_begin(node);
     }
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 ddbdfdb..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,14 +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);
@@ -205,12 +205,14 @@
       List<WhyNotPromotedGetter> whyNotPromotedList,
       {required DartType? contextType}) {
     _setExplicitTypeArgumentTypes(node);
-    const FunctionExpressionInvocationInferrer().resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        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/function_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
index bcddf19..cde7754 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
@@ -39,7 +39,7 @@
 
     if (_resolver.flowAnalysis.flow != null && !isFunctionDeclaration) {
       _resolver.flowAnalysis
-          .executableDeclaration_enter(node, node.parameters, true);
+          .executableDeclaration_enter(node, node.parameters, isClosure: true);
     }
 
     bool wasFunctionTypeSupplied = contextType is FunctionType;
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 bfdf73f..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,12 +62,14 @@
       constructorName: constructorName,
       definingLibrary: _resolver.definingLibrary,
     );
-    const InstanceCreationInferrer().resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        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 945c794..495866a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -133,7 +133,7 @@
         errorReporter: _errorReporter,
         errorNode: expression,
         genericMetadataIsEnabled: _genericMetadataIsEnabled,
-      )!;
+      );
       identifier.tearOffTypeArgumentTypes = typeArguments;
       if (typeArguments.isNotEmpty) {
         return tearOffType.instantiate(typeArguments);
@@ -170,13 +170,14 @@
     required List<WhyNotPromotedGetter> whyNotPromotedList,
     required DartType? contextType,
   }) {
-    var returnType = MethodInvocationInferrer.forNode(node).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 c40a4ff..2904afc 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -3,14 +3,18 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/base/errors.dart';
+import 'package:_fe_analyzer_shared/src/deferred_closure_heuristic.dart';
+import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/element/generic_inferrer.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -24,31 +28,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
-  ArgumentListImpl _getArgumentList(AnnotationImpl node) => node.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(
@@ -64,57 +77,62 @@
 }
 
 /// Specialization of [InvocationInferrer] for performing type inference on AST
-/// nodes of type [ExtensionOverride].
-class ExtensionOverrideInferrer
-    extends InvocationInferrer<ExtensionOverrideImpl> {
-  const ExtensionOverrideInferrer() : super._();
-
-  @override
-  ArgumentListImpl _getArgumentList(ExtensionOverrideImpl node) =>
-      node.argumentList;
-}
-
-/// Specialization of [InvocationInferrer] for performing type inference on AST
 /// nodes that require full downward and upward inference.
 abstract class FullInvocationInferrer<Node extends AstNodeImpl>
     extends InvocationInferrer<Node> {
-  const FullInvocationInferrer._() : super._();
+  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 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;
-    FunctionType? invokeType;
-    if (_isGenericInferenceDisabled(resolver)) {
+    GenericInferrer? inferrer;
+    Substitution? substitution;
+    if (_isGenericInferenceDisabled) {
       if (rawType != null && rawType.typeFormals.isNotEmpty) {
         typeArgumentTypes = List.filled(
           rawType.typeFormals.length,
           DynamicTypeImpl.instance,
         );
+        substitution =
+            Substitution.fromPairs(rawType.typeFormals, typeArgumentTypes);
       } else {
         typeArgumentTypes = const <DartType>[];
-        invokeType = rawType;
       }
-
-      invokeType = rawType?.instantiate(typeArgumentTypes);
     } else if (typeArgumentList != null) {
       if (rawType != null &&
           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,
@@ -148,76 +166,62 @@
         }
       }
 
-      invokeType = rawType?.instantiate(typeArgumentTypes);
+      if (rawType != null) {
+        substitution =
+            Substitution.fromPairs(rawType.typeFormals, typeArgumentTypes);
+      }
     } else if (rawType == null || rawType.typeFormals.isEmpty) {
       typeArgumentTypes = const <DartType>[];
-      invokeType = rawType;
     } else {
       rawType = getFreshTypeParameters(rawType.typeFormals)
           .applyToFunctionType(rawType);
 
-      var downwardsTypeArguments =
-          resolver.typeSystem.inferGenericFunctionOrType(
+      inferrer = resolver.typeSystem.setupGenericTypeInference(
         typeParameters: rawType.typeFormals,
-        parameters: const <ParameterElement>[],
         declaredReturnType: rawType.returnType,
-        argumentTypes: const <DartType>[],
         contextReturnType: contextType,
-        downwards: true,
-        isConst: _getIsConst(node),
+        isConst: _isConst,
         errorReporter: resolver.errorReporter,
-        errorNode: _getErrorNode(node),
+        errorNode: _errorNode,
         genericMetadataIsEnabled: resolver.genericMetadataIsEnabled,
-      )!;
+      );
 
-      invokeType = rawType.instantiate(downwardsTypeArguments);
+      substitution =
+          Substitution.fromPairs(rawType.typeFormals, inferrer.partialInfer());
     }
 
-    super.resolveInvocation(
-        resolver: resolver,
-        node: node,
-        rawType: invokeType,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList);
-
-    var argumentList = _getArgumentList(node);
-
-    if (typeArgumentTypes == null) {
-      if (rawType != null) {
-        // Get the parameters that correspond to the uninstantiated generic.
-        List<ParameterElement?> rawParameters =
-            ResolverVisitor.resolveArgumentsToParameters(
-          argumentList: argumentList,
-          parameters: rawType.parameters,
-        );
-
-        List<ParameterElement> params = <ParameterElement>[];
-        List<DartType> argTypes = <DartType>[];
-        for (int i = 0, length = rawParameters.length; i < length; i++) {
-          ParameterElement? parameter = rawParameters[i];
-          if (parameter != null) {
-            params.add(parameter);
-            argTypes.add(argumentList.arguments[i].typeOrThrow);
-          }
+    List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo =
+        _isIdentical ? [] : null;
+    var deferredClosures = _visitArguments(
+        rawType: rawType,
+        identicalInfo: identicalInfo,
+        substitution: substitution,
+        inferrer: inferrer);
+    if (deferredClosures != null) {
+      for (var stage in _ClosureDependencies(resolver.typeSystem,
+              deferredClosures, rawType?.typeFormals.toSet() ?? const {})
+          .planClosureReconciliationStages()) {
+        if (inferrer != null) {
+          substitution = Substitution.fromPairs(
+              rawType!.typeFormals, inferrer.partialInfer());
         }
-        typeArgumentTypes = resolver.typeSystem.inferGenericFunctionOrType(
-          typeParameters: rawType.typeFormals,
-          parameters: params,
-          declaredReturnType: rawType.returnType,
-          argumentTypes: argTypes,
-          contextReturnType: contextType,
-          isConst: _getIsConst(node),
-          errorReporter: resolver.errorReporter,
-          errorNode: _getErrorNode(node),
-          genericMetadataIsEnabled: resolver.genericMetadataIsEnabled,
-        )!;
-        invokeType = rawType.instantiate(typeArgumentTypes);
-      } else {
-        typeArgumentTypes = const [];
+        _resolveDeferredClosures(
+            rawType: rawType,
+            deferredClosures: stage,
+            identicalInfo: identicalInfo,
+            substitution: substitution,
+            inferrer: inferrer);
       }
     }
 
-    var parameters = _storeResult(node, typeArgumentTypes, invokeType);
+    if (inferrer != null) {
+      typeArgumentTypes = inferrer.upwardsInfer();
+    }
+    FunctionType? invokeType = typeArgumentTypes != null
+        ? rawType?.instantiate(typeArgumentTypes)
+        : rawType;
+
+    var parameters = _storeResult(typeArgumentTypes, invokeType);
     if (parameters != null) {
       argumentList.correspondingStaticParameters =
           ResolverVisitor.resolveArgumentsToParameters(
@@ -226,27 +230,16 @@
         errorReporter: resolver.errorReporter,
       );
     }
-    var returnType = InvocationInferrer.computeInvokeReturnType(invokeType);
-    return _refineReturnType(resolver, node, returnType);
+    var returnType = _refineReturnType(
+        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,
@@ -259,7 +252,7 @@
   }
 
   List<ParameterElement>? _storeResult(
-      Node node, List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+      List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
     return invokeType?.parameters;
   }
 }
@@ -268,51 +261,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
-  ArgumentListImpl _getArgumentList(InstanceCreationExpressionImpl node) =>
-      node.argumentList;
-
-  @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;
@@ -333,41 +343,134 @@
 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
-  ArgumentListImpl _getArgumentList(Node node) => node.argumentList;
+  Expression get _errorNode => node.function;
 
   @override
-  Expression _getErrorNode(Node node) => 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);
   }
 }
 
 /// Base class containing functionality for performing type inference on AST
 /// nodes that invoke a method, function, or constructor.
-abstract class InvocationInferrer<Node extends AstNodeImpl> {
-  const InvocationInferrer._();
+///
+/// This class may be used directly for inference of [ExtensionOverride],
+/// [RedirectingConstructorInvocation], or [SuperConstructorInvocation].
+class InvocationInferrer<Node extends AstNodeImpl> {
+  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 FunctionType? rawType,
-    required DartType? contextType,
-    required List<WhyNotPromotedGetter> 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(
+          rawType: rawType, deferredClosures: deferredClosures);
+    }
+  }
+
+  /// Computes the type context that should be used when evaluating a particular
+  /// 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(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(
+      List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo) {
+    var flow = resolver.flowAnalysis.flow;
+    if (identicalInfo != null) {
+      flow?.equalityOperation_end(argumentList.parent as Expression,
+          identicalInfo[0], identicalInfo[1]);
+    }
+  }
+
+  /// Resolves any closures that were deferred by [_visitArguments].
+  void _resolveDeferredClosures(
+      {required FunctionType? rawType,
+      required Iterable<_DeferredClosure> deferredClosures,
+      List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo,
+      Substitution? substitution,
+      GenericInferrer? inferrer}) {
+    var flow = resolver.flowAnalysis.flow;
+    var arguments = argumentList.arguments;
+    for (var deferredArgument in deferredClosures) {
+      var parameter = deferredArgument.parameter;
+      DartType? parameterContextType;
+      if (parameter != null) {
+        var parameterType = parameter.type;
+        if (substitution != null) {
+          parameterType = substitution.substituteType(parameterType);
+        }
+        parameterContextType = _computeContextForArgument(parameterType);
+      }
+      var argument = arguments[deferredArgument.index];
+      resolver.analyzeExpression(argument, parameterContextType);
+      // In case of rewrites, we need to grab the argument again.
+      argument = arguments[deferredArgument.index];
+      if (flow != null) {
+        identicalInfo?[deferredArgument.index] =
+            flow.equalityOperand_end(argument, argument.typeOrThrow);
+      }
+      if (parameter != null) {
+        inferrer?.constrainArgument(
+            argument.typeOrThrow, parameter.type, parameter.name);
+      }
+    }
+  }
+
+  /// Visits [argumentList], resolving each argument.  If any arguments need to
+  /// be deferred due to the `inference-update-1` feature, a list of them is
+  /// returned.
+  List<_DeferredClosure>? _visitArguments(
+      {required FunctionType? rawType,
+      List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo,
+      Substitution? substitution,
+      GenericInferrer? inferrer}) {
+    assert(whyNotPromotedList.isEmpty);
+    List<_DeferredClosure>? deferredClosures;
     var parameters = rawType?.parameters;
     var namedParameters = <String, ParameterElement>{};
     if (parameters != null) {
@@ -378,54 +481,63 @@
         }
       }
     }
-    var argumentList = _getArgumentList(node);
     resolver.checkUnreachableNode(argumentList);
     var flow = resolver.flowAnalysis.flow;
     var positionalParameterIndex = 0;
-    for (var argument in _iterateArguments(resolver, argumentList)) {
+    var arguments = argumentList.arguments;
+    for (int i = 0; i < arguments.length; i++) {
+      var argument = arguments[i];
+      Expression value;
       ParameterElement? parameter;
       if (argument is NamedExpression) {
+        value = argument.expression;
         parameter = namedParameters[argument.name.label.name];
-      } else if (parameters != null) {
-        while (positionalParameterIndex < parameters.length) {
-          parameter = parameters[positionalParameterIndex++];
-          if (!parameter.isNamed) {
-            break;
+      } else {
+        value = argument;
+        if (parameters != null) {
+          while (positionalParameterIndex < parameters.length) {
+            var candidate = parameters[positionalParameterIndex++];
+            if (!candidate.isNamed) {
+              parameter = candidate;
+              break;
+            }
           }
         }
       }
-      DartType? parameterContextType;
-      if (parameter != null) {
-        var parameterType = parameter.type;
-        parameterContextType = _computeContextForArgument(
-            resolver, node, parameterType, contextType);
-      }
-      resolver.analyzeExpression(argument, parameterContextType);
-      if (flow != null) {
-        whyNotPromotedList.add(flow.whyNotPromoted(argument));
+      if (resolver.isInferenceUpdate1Enabled &&
+          value is FunctionExpressionImpl) {
+        (deferredClosures ??= []).add(_DeferredClosure(parameter, value, i));
+        identicalInfo?.add(null);
+        // The "why not promoted" list isn't really relevant for closures
+        // because promoting a closure doesn't even make sense.  So we store an
+        // innocuous value in the list.
+        whyNotPromotedList.add(() => const {});
+      } else {
+        DartType? parameterContextType;
+        if (parameter != null) {
+          var parameterType = parameter.type;
+          if (substitution != null) {
+            parameterType = substitution.substituteType(parameterType);
+          }
+          parameterContextType = _computeContextForArgument(parameterType);
+        }
+        resolver.analyzeExpression(argument, parameterContextType);
+        // In case of rewrites, we need to grab the argument again.
+        argument = arguments[i];
+        if (flow != null) {
+          identicalInfo
+              ?.add(flow.equalityOperand_end(argument, argument.typeOrThrow));
+          whyNotPromotedList.add(flow.whyNotPromoted(argument));
+        }
+        if (parameter != null) {
+          inferrer?.constrainArgument(
+              argument.typeOrThrow, parameter.type, parameter.name);
+        }
       }
     }
+    return deferredClosures;
   }
 
-  /// Computes the type context that should be used when evaluating a particular
-  /// 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;
-
-  /// Gets the argument list for the invocation.  TODO(paulberry): remove?
-  ArgumentListImpl _getArgumentList(Node node);
-
-  /// Iterates through the argument list for the invocation.  Usually this is
-  /// just a simple iteration through the arguments, but in certain cases, some
-  /// flow analysis methods need to be called in between visiting the various
-  /// arguments.
-  Iterable<Expression> _iterateArguments(
-          ResolverVisitor resolver, ArgumentList argumentList) =>
-      argumentList.arguments;
-
   /// Computes the return type of the method or function represented by the
   /// given type that is being invoked.
   static DartType computeInvokeReturnType(DartType? type) {
@@ -441,46 +553,45 @@
 /// nodes of type [MethodInvocation].
 class MethodInvocationInferrer
     extends InvocationExpressionInferrer<MethodInvocationImpl> {
-  /// Gets the appropriate instance of [MethodInvocation] for the given [node].
-  ///
-  /// This factory takes care of the fact that invocations of `identical` need
-  /// to have special integration with flow analysis.
-  factory MethodInvocationInferrer.forNode(MethodInvocationImpl node) {
-    var invokedMethod = node.methodName.staticElement;
-    if (invokedMethod != null &&
-        invokedMethod.name == 'identical' &&
-        invokedMethod.library!.isDartCore &&
-        node.argumentList.arguments.length == 2) {
-      return const _IdenticalInvocationInferrer._();
-    } else {
-      return const MethodInvocationInferrer._();
-    }
-  }
-
-  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);
+  bool get _isIdentical {
+    var invokedMethod = node.methodName.staticElement;
+    return invokedMethod is FunctionElement &&
+        invokedMethod.isDartCoreIdentical &&
+        node.argumentList.arguments.length == 2;
+  }
+
+  @override
+  DartType? _computeContextForArgument(DartType parameterType) {
+    var argumentContextType = super._computeContextForArgument(parameterType);
     var targetType = node.realTarget?.staticType;
     if (targetType != null) {
-      contextType = resolver.typeSystem.refineNumericInvocationContext(
+      argumentContextType = resolver.typeSystem.refineNumericInvocationContext(
           targetType,
           node.methodName.staticElement,
-          methodInvocationContext,
+          contextType,
           parameterType);
     }
-    return contextType;
+    return argumentContextType;
   }
 
   @override
-  DartType _refineReturnType(ResolverVisitor resolver,
-      MethodInvocationImpl node, DartType returnType) {
+  DartType _refineReturnType(DartType returnType) {
     var targetType = node.realTarget?.staticType;
     if (targetType != null) {
       returnType = resolver.typeSystem.refineNumericInvocationType(
@@ -496,50 +607,62 @@
   }
 }
 
-/// Specialization of [InvocationInferrer] for performing type inference on AST
-/// nodes of type [RedirectingConstructorInvocation].
-class RedirectingConstructorInvocationInferrer
-    extends InvocationInferrer<RedirectingConstructorInvocationImpl> {
-  const RedirectingConstructorInvocationInferrer() : super._();
+class _ClosureDependencies
+    extends ClosureDependencies<TypeParameterElement, _DeferredClosure> {
+  final TypeSystemImpl _typeSystem;
+
+  final Set<TypeParameterElement> _typeVariables;
+
+  _ClosureDependencies(this._typeSystem, Iterable<_DeferredClosure> closures,
+      this._typeVariables)
+      : super(closures, _typeVariables);
 
   @override
-  ArgumentListImpl _getArgumentList(
-          RedirectingConstructorInvocationImpl node) =>
-      node.argumentList;
-}
-
-/// Specialization of [InvocationInferrer] for performing type inference on AST
-/// nodes of type [SuperConstructorInvocation].
-class SuperConstructorInvocationInferrer
-    extends InvocationInferrer<SuperConstructorInvocationImpl> {
-  const SuperConstructorInvocationInferrer() : super._();
-
-  @override
-  ArgumentListImpl _getArgumentList(SuperConstructorInvocationImpl node) =>
-      node.argumentList;
-}
-
-/// Specialization of [InvocationInferrer] for performing type inference on AST
-/// nodes of type [MethodInvocation] that resolve to the core function
-/// `identical`.  (Such nodes need to be handled in a special way due to the
-/// interaction between `identical` and flow analysis).
-class _IdenticalInvocationInferrer extends MethodInvocationInferrer {
-  const _IdenticalInvocationInferrer._() : super._();
-
-  @override
-  Iterable<Expression> _iterateArguments(
-      ResolverVisitor resolver, ArgumentList argumentList) sync* {
-    var flow = resolver.flowAnalysis.flow;
-    var arguments = argumentList.arguments;
-    assert(arguments.length == 2);
-    var firstArg = arguments[0];
-    yield firstArg;
-    firstArg = arguments[0]; // In case it was rewritten
-    flow?.equalityOp_rightBegin(firstArg, firstArg.typeOrThrow);
-    var secondArg = arguments[1];
-    yield secondArg;
-    secondArg = arguments[1]; // In case it was rewritten
-    flow?.equalityOp_end(
-        argumentList.parent as Expression, secondArg, secondArg.typeOrThrow);
+  Iterable<TypeParameterElement> typeVarsFreeInClosureArguments(
+      _DeferredClosure closure) {
+    var type = closure.parameter?.type;
+    if (type is FunctionType) {
+      Set<TypeParameterElement> result = {};
+      for (var parameter in type.parameters) {
+        result.addAll(_typeSystem.getFreeParameters(parameter.type,
+                candidates: _typeVariables) ??
+            const []);
+      }
+      return result;
+    } else {
+      return const [];
+    }
   }
+
+  @override
+  Iterable<TypeParameterElement> typeVarsFreeInClosureReturns(
+      _DeferredClosure closure) {
+    var type = closure.parameter?.type;
+    if (type is FunctionType) {
+      return _typeSystem.getFreeParameters(type.returnType,
+              candidates: _typeVariables) ??
+          const [];
+    } else if (type != null) {
+      return _typeSystem.getFreeParameters(type, candidates: _typeVariables) ??
+          const [];
+    } else {
+      return const [];
+    }
+  }
+}
+
+/// Information about an invocation argument that needs to be resolved later due
+/// to the fact that it's a closure and the `inference-update-1` feature is
+/// enabled.
+class _DeferredClosure {
+  /// The [ParameterElement] the closure is being passed to.
+  final ParameterElement? parameter;
+
+  /// The closure expression.
+  final FunctionExpression value;
+
+  /// The index into the argument list of the closure expression.
+  final int index;
+
+  _DeferredClosure(this.parameter, this.value, this.index);
 }
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 724f3c1..081bb5d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -327,14 +327,15 @@
   void _resolveArguments_finishInference(
       MethodInvocationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList,
       {required DartType? contextType}) {
-    var methodInvocationInferrer = MethodInvocationInferrer.forNode(node);
     var rawType = node.methodName.staticType;
-    DartType staticStaticType = methodInvocationInferrer.resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        rawType: rawType is FunctionType ? rawType : null,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList);
+    DartType staticStaticType = MethodInvocationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: rawType is FunctionType ? rawType : null,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     _inferenceHelper.recordStaticType(node, staticStaticType,
         contextType: contextType);
   }
@@ -473,12 +474,14 @@
     }
 
     _setExplicitTypeArgumentTypes();
-    MethodInvocationInferrer.forNode(node).resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        rawType: rawType,
-        whyNotPromotedList: whyNotPromotedList,
-        contextType: contextType);
+    MethodInvocationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: rawType,
+            whyNotPromotedList: whyNotPromotedList,
+            contextType: contextType)
+        .resolveInvocation();
   }
 
   void _resolveReceiverFunctionBounded(
@@ -546,12 +549,14 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = NeverTypeImpl.instance;
 
-      MethodInvocationInferrer.forNode(node).resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          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,
@@ -565,12 +570,14 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = _dynamicType;
 
-      MethodInvocationInferrer.forNode(node).resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          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/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index 5063c86..1d564ff 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -172,14 +172,13 @@
       if (typeParameters.isEmpty) {
         return element.thisType;
       } else {
-        var typeArguments = typeSystem.inferGenericFunctionOrType(
+        var inferrer = typeSystem.setupGenericTypeInference(
           typeParameters: typeParameters,
-          parameters: const [],
           declaredReturnType: element.thisType,
-          argumentTypes: const [],
           contextReturnType: enclosingClass!.thisType,
           genericMetadataIsEnabled: _genericMetadataIsEnabled,
-        )!;
+        );
+        var typeArguments = inferrer.upwardsInfer();
         return element.instantiate(
           typeArguments: typeArguments,
           nullabilitySuffix: _noneOrStarSuffix,
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 0cef5e5..cb2de85 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -140,7 +140,10 @@
   DartType get _dynamicType => _typeProvider.dynamicType;
 
   @override
-  void visitAnnotation(Annotation node) {
+  void visitAnnotation(covariant AnnotationImpl node) {
+    if (_elementWalker == null) {
+      _createElementAnnotation(node);
+    }
     _withElementWalker(null, () {
       super.visitAnnotation(node);
     });
@@ -220,8 +223,7 @@
     node.name.staticElement = element;
     _namedTypeResolver.enclosingClass = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forClass(element), () {
       _withNameScope(() {
@@ -256,8 +258,7 @@
     node.name.staticElement = element;
     _namedTypeResolver.enclosingClass = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forClass(element), () {
       _withNameScope(() {
@@ -284,8 +285,7 @@
     (node as ConstructorDeclarationImpl).declaredElement = element;
     node.name?.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementHolder(ElementHolder(element), () {
       _withElementWalker(null, () {
@@ -392,8 +392,7 @@
     var element = _elementWalker!.getVariable();
     node.name.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     var arguments = node.arguments;
     if (arguments != null) {
@@ -411,8 +410,7 @@
     node.name.staticElement = element;
     _namedTypeResolver.enclosingClass = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forClass(element), () {
       _withNameScope(() {
@@ -434,11 +432,13 @@
 
   @override
   void visitExportDirective(ExportDirective node) {
+    var element = node.element;
+    if (element is ExportElementImpl) {
+      _setOrCreateMetadataElements(element, node.metadata);
+    }
+
     _withElementWalker(null, () {
       super.visitExportDirective(node);
-      if (node.element != null) {
-        _setElementAnnotations(node.metadata, node.element!.metadata);
-      }
     });
   }
 
@@ -448,8 +448,7 @@
     (node as ExtensionDeclarationImpl).declaredElement = element;
     node.name?.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forExtension(element), () {
       _withNameScope(() {
@@ -465,14 +464,6 @@
   }
 
   @override
-  void visitFieldDeclaration(FieldDeclaration node) {
-    super.visitFieldDeclaration(node);
-    var firstFieldElement =
-        node.fields.variables[0].declaredElement as FieldElement;
-    _setElementAnnotations(node.metadata, firstFieldElement.metadata);
-  }
-
-  @override
   void visitFieldFormalParameter(covariant FieldFormalParameterImpl node) {
     FieldFormalParameterElementImpl element;
     if (node.parent is DefaultFormalParameter) {
@@ -639,8 +630,7 @@
     var element = _elementWalker!.getTypedef();
     node.name.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forTypedef(element), () {
       _withNameScope(() {
@@ -754,8 +744,7 @@
     var element = _elementWalker!.getTypedef();
     node.name.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forGenericTypeAlias(element), () {
       _withNameScope(() {
@@ -768,11 +757,13 @@
 
   @override
   void visitImportDirective(ImportDirective node) {
+    var element = node.element;
+    if (element is ImportElementImpl) {
+      _setOrCreateMetadataElements(element, node.metadata);
+    }
+
     _withElementWalker(null, () {
       super.visitImportDirective(node);
-      if (node.element != null) {
-        _setElementAnnotations(node.metadata, node.element!.metadata);
-      }
     });
   }
 
@@ -825,18 +816,15 @@
 
   @override
   void visitLibraryDirective(LibraryDirective node) {
-    super.visitLibraryDirective(node);
     ++_libraryDirectiveIndex;
-    if (node.element != null && _libraryDirectiveIndex == 1) {
-      _setElementAnnotations(node.metadata, node.element!.metadata);
-    } else {
-      for (var annotation in node.metadata) {
-        annotation as AnnotationImpl;
-        var elementAnnotation = ElementAnnotationImpl(_unitElement);
-        elementAnnotation.annotationAst = annotation;
-        annotation.elementAnnotation = elementAnnotation;
-      }
+    var element = node.element;
+    if (element is LibraryElementImpl && _libraryDirectiveIndex == 1) {
+      _setOrCreateMetadataElements(element, node.metadata);
     }
+
+    _withElementWalker(null, () {
+      super.visitLibraryDirective(node);
+    });
   }
 
   @override
@@ -846,8 +834,7 @@
         : _elementWalker!.getFunction();
     node.name.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forExecutable(element), () {
       node.metadata.accept(this);
@@ -882,8 +869,7 @@
     var element = _elementWalker!.getMixin();
     node.name.staticElement = element;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     _withElementWalker(ElementWalker.forClass(element), () {
       _withNameScope(() {
@@ -914,18 +900,21 @@
 
   @override
   void visitPartDirective(PartDirective node) {
+    var element = node.element;
+    if (element is CompilationUnitElementImpl) {
+      _setOrCreateMetadataElements(element, node.metadata);
+    }
+
     _withElementWalker(null, () {
       super.visitPartDirective(node);
-      if (node.element != null) {
-        _setElementAnnotations(node.metadata, node.element!.metadata);
-      }
     });
   }
 
   @override
   void visitPartOfDirective(PartOfDirective node) {
-    _createElementAnnotations(node.metadata);
-    super.visitPartOfDirective(node);
+    _withElementWalker(null, () {
+      super.visitPartOfDirective(node);
+    });
   }
 
   @override
@@ -1073,8 +1062,7 @@
   void visitTypeParameter(TypeParameter node) {
     var element = node.declaredElement as TypeParameterElementImpl;
 
-    node.metadata.accept(this);
-    _setElementAnnotations(node.metadata, element.metadata);
+    _setOrCreateMetadataElements(element, node.metadata);
 
     var boundNode = node.bound;
     if (boundNode != null) {
@@ -1137,7 +1125,7 @@
     for (var i = 0; i < variables.length; i++) {
       var variable = variables[i];
       var element = variable.declaredElement as ElementImpl;
-      _setOrCreateMetadataElements(element, annotations);
+      _setOrCreateMetadataElements(element, annotations, visitNodes: false);
 
       var offset = (i == 0 ? node.parent! : variable).offset;
       var length = variable.end - offset;
@@ -1238,20 +1226,11 @@
     }
   }
 
-  /// For each [Annotation] found in [annotations], create a new
-  /// [ElementAnnotation] object and set the [Annotation] to point to it.
-  List<ElementAnnotation> _createElementAnnotations(
-      List<Annotation> annotations) {
-    if (annotations.isEmpty) {
-      return const <ElementAnnotation>[];
-    }
-    return annotations.map((annotation) {
-      annotation as AnnotationImpl;
-      var elementAnnotation = ElementAnnotationImpl(_unitElement);
-      elementAnnotation.annotationAst = annotation;
-      annotation.elementAnnotation = elementAnnotation;
-      return elementAnnotation;
-    }).toList();
+  /// Create a new [ElementAnnotation] for the [node].
+  void _createElementAnnotation(AnnotationImpl node) {
+    var element = ElementAnnotationImpl(_unitElement);
+    element.annotationAst = node;
+    node.elementAnnotation = element;
   }
 
   void _define(Element element) {
@@ -1388,13 +1367,18 @@
 
   void _setOrCreateMetadataElements(
     ElementImpl element,
-    NodeList<Annotation> annotations,
-  ) {
-    annotations.accept(this);
+    NodeList<Annotation> annotations, {
+    bool visitNodes = true,
+  }) {
+    if (visitNodes) {
+      annotations.accept(this);
+    }
     if (_elementWalker != null) {
       _setElementAnnotations(annotations, element.metadata);
-    } else {
-      element.metadata = _createElementAnnotations(annotations);
+    } else if (annotations.isNotEmpty) {
+      element.metadata = annotations.map((annotation) {
+        return annotation.elementAnnotation!;
+      }).toList();
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
index 660a6eb..ad94d27 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/generic_inferrer.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
@@ -98,6 +99,7 @@
   void resolveListLiteral(ListLiteralImpl node,
       {required DartType? contextType}) {
     InterfaceType? listType;
+    GenericInferrer? inferrer;
 
     var typeArguments = node.typeArguments?.arguments;
     if (typeArguments != null) {
@@ -108,8 +110,12 @@
         }
       }
     } else {
-      listType =
-          _inferListType(node, downwards: true, contextType: contextType);
+      inferrer = _inferListTypeDownwards(node, contextType: contextType);
+      if (contextType != null) {
+        var typeArguments = inferrer.partialInfer();
+        listType = _typeProvider.listElement.instantiate(
+            typeArguments: typeArguments, nullabilitySuffix: _noneOrStarSuffix);
+      }
     }
     CollectionLiteralContext? context;
     if (listType != null) {
@@ -121,7 +127,7 @@
 
     node.typeArguments?.accept(_resolver);
     _resolveElements(node.elements, context);
-    _resolveListLiteral2(node, contextType: contextType);
+    _resolveListLiteral2(inferrer, node, contextType: contextType);
   }
 
   void resolveSetOrMapLiteral(SetOrMapLiteral node,
@@ -130,6 +136,7 @@
     var typeArguments = node.typeArguments?.arguments;
 
     InterfaceType? literalType;
+    GenericInferrer? inferrer;
     var literalResolution =
         _computeSetOrMapResolution(node, contextType: contextType);
     if (literalResolution.kind == _LiteralResolutionKind.set) {
@@ -137,8 +144,13 @@
         var elementType = typeArguments[0].typeOrThrow;
         literalType = _typeProvider.setType(elementType);
       } else {
-        literalType =
-            _inferSetTypeDownwards(node, literalResolution.contextType);
+        inferrer = _inferSetTypeDownwards(node, literalResolution.contextType);
+        if (literalResolution.contextType != null) {
+          var typeArguments = inferrer.partialInfer();
+          literalType = _typeProvider.setElement.instantiate(
+              typeArguments: typeArguments,
+              nullabilitySuffix: _noneOrStarSuffix);
+        }
       }
     } else if (literalResolution.kind == _LiteralResolutionKind.map) {
       if (typeArguments != null && typeArguments.length == 2) {
@@ -146,8 +158,13 @@
         var valueType = typeArguments[1].typeOrThrow;
         literalType = _typeProvider.mapType(keyType, valueType);
       } else {
-        literalType =
-            _inferMapTypeDownwards(node, literalResolution.contextType);
+        inferrer = _inferMapTypeDownwards(node, literalResolution.contextType);
+        if (literalResolution.contextType != null) {
+          var typeArguments = inferrer.partialInfer();
+          literalType = _typeProvider.mapElement.instantiate(
+              typeArguments: typeArguments,
+              nullabilitySuffix: _noneOrStarSuffix);
+        }
       }
     } else {
       assert(literalResolution.kind == _LiteralResolutionKind.ambiguous);
@@ -182,7 +199,8 @@
 
     node.typeArguments?.accept(_resolver);
     _resolveElements(node.elements, context);
-    _resolveSetOrMapLiteral2(node, contextType: contextType);
+    _resolveSetOrMapLiteral2(inferrer, literalResolution, node,
+        contextType: contextType);
   }
 
   DartType _computeElementType(CollectionElement element) {
@@ -450,30 +468,37 @@
     }
   }
 
-  InterfaceType? _inferListType(ListLiteral node,
-      {bool downwards = false, required DartType? contextType}) {
+  GenericInferrer _inferListTypeDownwards(ListLiteral node,
+      {required DartType? contextType}) {
+    var element = _typeProvider.listElement;
+    var typeParameters = element.typeParameters;
+
+    return _typeSystem.setupGenericTypeInference(
+        typeParameters: typeParameters,
+        declaredReturnType: element.thisType,
+        contextReturnType: contextType,
+        isConst: node.isConst,
+        errorReporter: _errorReporter,
+        errorNode: node,
+        genericMetadataIsEnabled: _genericMetadataIsEnabled);
+  }
+
+  InterfaceType? _inferListTypeUpwards(
+      GenericInferrer inferrer, ListLiteral node,
+      {required DartType? contextType}) {
     var element = _typeProvider.listElement;
     var typeParameters = element.typeParameters;
     var genericElementType = typeParameters[0].instantiate(
       nullabilitySuffix: _noneOrStarSuffix,
     );
 
-    List<DartType> elementTypes;
-    List<ParameterElement> parameters;
-
-    if (downwards) {
-      if (contextType == null) {
-        return null;
-      }
-      elementTypes = [];
-      parameters = [];
-    } else {
-      // Also use upwards information to infer the type.
-      elementTypes = _getListElements(node).map(_computeElementType).toList();
-      var syntheticParameter = ParameterElementImpl.synthetic(
-          'element', genericElementType, ParameterKind.POSITIONAL);
-      parameters = List.filled(elementTypes.length, syntheticParameter);
-    }
+    // Also use upwards information to infer the type.
+    List<DartType> elementTypes =
+        _getListElements(node).map(_computeElementType).toList();
+    var syntheticParameter = ParameterElementImpl.synthetic(
+        'element', genericElementType, ParameterKind.POSITIONAL);
+    List<ParameterElement> parameters =
+        List.filled(elementTypes.length, syntheticParameter);
     if (_strictInference && parameters.isEmpty && contextType == null) {
       // We cannot infer the type of a collection literal with no elements, and
       // no context type. If there are any elements, inference has not failed,
@@ -482,50 +507,29 @@
           HintCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL, node, ['List']);
     }
 
-    var typeArguments = _typeSystem.inferGenericFunctionOrType(
-      typeParameters: typeParameters,
-      parameters: parameters,
-      declaredReturnType: element.thisType,
-      argumentTypes: elementTypes,
-      contextReturnType: contextType,
-      downwards: downwards,
-      isConst: node.isConst,
-      errorReporter: _errorReporter,
-      errorNode: node,
-      genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    )!;
+    inferrer.constrainArguments(
+        parameters: parameters, argumentTypes: elementTypes);
+    var typeArguments = inferrer.upwardsInfer();
     return element.instantiate(
       typeArguments: typeArguments,
       nullabilitySuffix: _noneOrStarSuffix,
     );
   }
 
-  InterfaceType? _inferMapTypeDownwards(
+  GenericInferrer _inferMapTypeDownwards(
       SetOrMapLiteral node, DartType? contextType) {
-    if (contextType == null) {
-      return null;
-    }
-
     var element = _typeProvider.mapElement;
-    var typeArguments = _typeSystem.inferGenericFunctionOrType(
+    return _typeSystem.setupGenericTypeInference(
       typeParameters: element.typeParameters,
-      parameters: const [],
       declaredReturnType: element.thisType,
-      argumentTypes: const [],
       contextReturnType: contextType,
-      downwards: true,
       isConst: node.isConst,
-      errorReporter: _errorReporter,
-      errorNode: node,
       genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    )!;
-    return element.instantiate(
-      typeArguments: typeArguments,
-      nullabilitySuffix: _noneOrStarSuffix,
     );
   }
 
-  DartType _inferSetOrMapLiteralType(SetOrMapLiteral literal) {
+  DartType _inferSetOrMapLiteralType(GenericInferrer? inferrer,
+      _LiteralResolution literalResolution, SetOrMapLiteral literal) {
     var literalImpl = literal as SetOrMapLiteralImpl;
     var contextType = literalImpl.contextType;
     literalImpl.contextType = null; // Not needed anymore.
@@ -545,9 +549,9 @@
       mustBeASet = mustBeASet || inferredType.mustBeSet;
     }
     if (canBeASet && mustBeASet) {
-      return _toSetType(literal, contextType, inferredTypes);
+      return _toSetType(inferrer, literalResolution, literal, inferredTypes);
     } else if (canBeAMap && mustBeAMap) {
-      return _toMapType(literal, contextType, inferredTypes);
+      return _toMapType(inferrer, literalResolution, literal, inferredTypes);
     }
 
     // Note: according to the spec, the following computations should be based
@@ -568,12 +572,12 @@
 
       // When `S` implements `Iterable` but not `Map`, `e` is a set literal.
       if (contextIsIterable && !contextIsMap) {
-        return _toSetType(literal, contextType, inferredTypes);
+        return _toSetType(inferrer, literalResolution, literal, inferredTypes);
       }
 
       // When `S` implements `Map` but not `Iterable`, `e` is a map literal.
       if (contextIsMap && !contextIsIterable) {
-        return _toMapType(literal, contextType, inferredTypes);
+        return _toMapType(inferrer, literalResolution, literal, inferredTypes);
       }
     }
 
@@ -599,28 +603,15 @@
     return _typeProvider.dynamicType;
   }
 
-  InterfaceType? _inferSetTypeDownwards(
+  GenericInferrer _inferSetTypeDownwards(
       SetOrMapLiteral node, DartType? contextType) {
-    if (contextType == null) {
-      return null;
-    }
-
     var element = _typeProvider.setElement;
-    var typeArguments = _typeSystem.inferGenericFunctionOrType(
+    return _typeSystem.setupGenericTypeInference(
       typeParameters: element.typeParameters,
-      parameters: const [],
       declaredReturnType: element.thisType,
-      argumentTypes: const [],
       contextReturnType: contextType,
-      downwards: true,
       isConst: node.isConst,
-      errorReporter: _errorReporter,
-      errorNode: node,
       genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    )!;
-    return element.instantiate(
-      typeArguments: typeArguments,
-      nullabilitySuffix: _noneOrStarSuffix,
     );
   }
 
@@ -631,7 +622,7 @@
     }
   }
 
-  void _resolveListLiteral2(ListLiteralImpl node,
+  void _resolveListLiteral2(GenericInferrer? inferrer, ListLiteralImpl node,
       {required DartType? contextType}) {
     var typeArguments = node.typeArguments?.arguments;
 
@@ -651,7 +642,8 @@
     DartType listDynamicType = _typeProvider.listType(_dynamicType);
 
     // If there are no type arguments, try to infer some arguments.
-    var inferred = _inferListType(node, contextType: contextType);
+    var inferred =
+        _inferListTypeUpwards(inferrer!, node, contextType: contextType);
 
     if (inferred != listDynamicType) {
       // TODO(brianwilkerson) Determine whether we need to make the inferred
@@ -664,7 +656,8 @@
     node.staticType = listDynamicType;
   }
 
-  void _resolveSetOrMapLiteral2(SetOrMapLiteralImpl node,
+  void _resolveSetOrMapLiteral2(GenericInferrer? inferrer,
+      _LiteralResolution literalResolution, SetOrMapLiteralImpl node,
       {required DartType? contextType}) {
     var typeArguments = node.typeArguments?.arguments;
 
@@ -693,7 +686,8 @@
       // If we get here, then a nonsense number of type arguments were provided,
       // so treat it as though no type arguments were provided.
     }
-    DartType literalType = _inferSetOrMapLiteralType(node);
+    DartType literalType =
+        _inferSetOrMapLiteralType(inferrer, literalResolution, node);
     if (literalType.isDynamic) {
       // The literal is ambiguous, and further analysis won't resolve the
       // ambiguity.  Leave it as neither a set nor a map.
@@ -720,7 +714,10 @@
     node.staticType = literalType;
   }
 
-  DartType _toMapType(SetOrMapLiteral node, DartType? contextType,
+  DartType _toMapType(
+      GenericInferrer? inferrer,
+      _LiteralResolution literalResolution,
+      SetOrMapLiteral node,
       List<_InferredCollectionElementTypeInformation> inferredTypes) {
     DartType dynamicType = _typeProvider.dynamicType;
 
@@ -744,21 +741,25 @@
       argumentTypes.add(inferredTypes[i].valueType ?? dynamicType);
     }
 
-    var typeArguments = _typeSystem.inferGenericFunctionOrType(
-      typeParameters: typeParameters,
+    if (inferrer == null ||
+        literalResolution.kind == _LiteralResolutionKind.set) {
+      inferrer = _inferMapTypeDownwards(node, null);
+    }
+    inferrer.constrainArguments(
       parameters: parameters,
-      declaredReturnType: element.thisType,
       argumentTypes: argumentTypes,
-      contextReturnType: contextType,
-      genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    )!;
+    );
+    var typeArguments = inferrer.upwardsInfer();
     return element.instantiate(
       typeArguments: typeArguments,
       nullabilitySuffix: _noneOrStarSuffix,
     );
   }
 
-  DartType _toSetType(SetOrMapLiteral node, DartType? contextType,
+  DartType _toSetType(
+      GenericInferrer? inferrer,
+      _LiteralResolution literalResolution,
+      SetOrMapLiteral node,
       List<_InferredCollectionElementTypeInformation> inferredTypes) {
     DartType dynamicType = _typeProvider.dynamicType;
 
@@ -776,18 +777,15 @@
       argumentTypes.add(inferredTypes[i].elementType ?? dynamicType);
     }
 
-    var typeArguments = _typeSystem.inferGenericFunctionOrType(
-      typeParameters: typeParameters,
-      parameters: parameters,
-      declaredReturnType: element.thisType,
-      argumentTypes: argumentTypes,
-      contextReturnType: contextType,
-      genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    )!;
+    if (inferrer == null ||
+        literalResolution.kind == _LiteralResolutionKind.map) {
+      inferrer = _inferSetTypeDownwards(node, null);
+    }
+    inferrer.constrainArguments(
+        parameters: parameters, argumentTypes: argumentTypes);
+    var typeArguments = inferrer.upwardsInfer();
     return element.instantiate(
-      typeArguments: typeArguments,
-      nullabilitySuffix: _noneOrStarSuffix,
-    );
+        typeArguments: typeArguments, nullabilitySuffix: _noneOrStarSuffix);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
index 60cfa66..bf547a3 100644
--- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart
+++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
@@ -206,7 +206,7 @@
     var coreSource = mapDartUri('dart:core');
     if (coreSource != null) {
       var coreFile = resourceProvider.getFile(coreSource.fullName);
-      var embeddedFolder = coreFile.parent2.parent2;
+      var embeddedFolder = coreFile.parent.parent;
       try {
         return embeddedFolder
             .getChildAssumingFolder('_internal')
@@ -515,7 +515,7 @@
     try {
       File file = libraryDirectory.getChildAssumingFile(library.path);
       if (relativePath.isNotEmpty) {
-        File relativeFile = file.parent2.getChildAssumingFile(relativePath);
+        File relativeFile = file.parent.getChildAssumingFile(relativePath);
         if (relativeFile.path == file.path) {
           // The relative file is the library, so return a Source for the
           // library rather than the part format.
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 10bbfb6..64e21e7 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -1605,12 +1605,59 @@
     uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a concrete class indirectly has
+  // the class `Enum` as a superinterface.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the concrete class `B`
+  // has `Enum` as a superinterface as a result of implementing `A`:
+  //
+  // ```dart
+  // abstract class A implements Enum {}
+  //
+  // class [!B!] implements A {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the implemented class isn't the class you intend to implement, then
+  // change it:
+  //
+  // ```dart
+  // abstract class A implements Enum {}
+  //
+  // class B implements C {}
+  //
+  // class C {}
+  // ```
+  //
+  // If the implemented class can be changed to not implement `Enum`, then do
+  // so:
+  //
+  // ```dart
+  // abstract class A {}
+  //
+  // class B implements A {}
+  // ```
+  //
+  // If the implemented class can't be changed to not implement `Enum`, then
+  // remove it from the `implements` clause:
+  //
+  // ```dart
+  // abstract class A implements Enum {}
+  //
+  // class B {}
+  // ```
   static const CompileTimeErrorCode CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE =
       CompileTimeErrorCode(
     'CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE',
     "Concrete classes can't have 'Enum' as a superinterface.",
     correctionMessage:
         "Try specifying a different interface, or remove it from the list.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3767,11 +3814,44 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum constant is being
+  // created using either a factory constructor or a generative constructor
+  // that isn't marked as being `const`.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the enum constant `e`
+  // is being initialized by a factory constructor:
+  //
+  // ```dart
+  // enum E {
+  //   [!e!]();
+  //
+  //   factory E() => e;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Use a generative constructor marked as `const`:
+  //
+  // ```dart
+  // enum E {
+  //   e._();
+  //
+  //   factory E() => e;
+  //
+  //   const E._();
+  // }
+  // ```
   static const CompileTimeErrorCode ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR =
       CompileTimeErrorCode(
     'ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR',
-    "The invoked constructor isn't a const constructor.",
-    correctionMessage: "Try invoking a const generative constructor.",
+    "The invoked constructor isn't a 'const' constructor.",
+    correctionMessage: "Try invoking a 'const' generative constructor.",
+    hasPublishedDocs: true,
   );
 
   static const CompileTimeErrorCode
@@ -3781,11 +3861,56 @@
     correctionMessage: "Try using different bounds for type parameters.",
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a mixin that's applied to an
+  // enum declares one or more instance variables. This isn't allowed because
+  // the enum constants are constant, and there isn't any way for the
+  // constructor in the enum to initialize any of the mixin's fields.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the mixin `M` defines
+  // the instance field `x`:
+  //
+  // ```dart
+  // mixin M {
+  //   int x = 0;
+  // }
+  //
+  // enum E with [!M!] {
+  //   a
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you need to apply the mixin, then change all instance fields into
+  // getter and setter pairs and implement them in the enum if necessary:
+  //
+  // ```dart
+  // mixin M {
+  //   int get x => 0;
+  // }
+  //
+  // enum E with M {
+  //   a
+  // }
+  // ```
+  //
+  // If you don't need to apply the mixin, then remove it:
+  //
+  // ```dart
+  // enum E {
+  //   a
+  // }
+  // ```
   static const CompileTimeErrorCode ENUM_MIXIN_WITH_INSTANCE_VARIABLE =
       CompileTimeErrorCode(
     'ENUM_MIXIN_WITH_INSTANCE_VARIABLE',
     "Mixins applied to enums can't have instance variables.",
     correctionMessage: "Try replacing the instance variables with getters.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3793,18 +3918,70 @@
    * 0: the name of the abstract method
    * 1: the name of the enclosing enum
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a member of an enum is found
+  // that doesn't have a concrete implementation. Enums aren't allowed to
+  // contain abstract members.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because `m` is an abstract
+  // method and `E` is an enum:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   [!void m();!]
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Provide an implementation for the member:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   void m() {}
+  // }
+  // ```
   static const CompileTimeErrorCode ENUM_WITH_ABSTRACT_MEMBER =
       CompileTimeErrorCode(
     'ENUM_WITH_ABSTRACT_MEMBER',
     "'{0}' must have a method body because '{1}' is an enum.",
     correctionMessage: "Try adding a body to '{0}'.",
+    hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum is declared to have the
+  // name `values`. This isn't allowed because the enum has an implicit static
+  // field named `values`, and the two would collide.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because there's an enum
+  // declaration that has the name `values`:
+  //
+  // ```dart
+  // enum [!values!] {
+  //   c
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Rename the enum to something other than `values`.
   static const CompileTimeErrorCode ENUM_WITH_NAME_VALUES =
       CompileTimeErrorCode(
     'ENUM_WITH_NAME_VALUES',
     "The name 'values' is not a valid name for an enum.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -5943,12 +6120,74 @@
    * Parameters:
    * 0: the name of member that cannot be declared
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when either an enum declaration, a
+  // class that implements `Enum`, or a mixin with a superclass constraint of
+  // `Enum`, declares or inherits a concrete instance member named either
+  // `index`, `hashCode`, or `==`.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the enum `E` declares
+  // an instance getter named `index`:
+  //
+  // ```dart
+  // enum E {
+  //   v;
+  //
+  //   int get [!index!] => 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the class `C`, which
+  // implements `Enum`, declares an instance field named `hashCode`:
+  //
+  // ```dart
+  // abstract class C implements Enum {
+  //   int [!hashCode!] = 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the class `C`, which
+  // indirectly implements `Enum` through the class `A`, declares an instance
+  // getter named `hashCode`:
+  //
+  // ```dart
+  // abstract class A implements Enum {}
+  //
+  // abstract class C implements A {
+  //   int get [!hashCode!] => 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the mixin `M`, which
+  // has `Enum` in the `on` clause, declares an explicit operator named `==`:
+  //
+  // ```dart
+  // mixin M on Enum {
+  //   bool operator [!==!](Object? other) => false;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Rename the conflicting member:
+  //
+  // ```dart
+  // enum E {
+  //   v;
+  //
+  //   int get getIndex => 0;
+  // }
+  // ```
   static const CompileTimeErrorCode ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION =
       CompileTimeErrorCode(
     'ILLEGAL_CONCRETE_ENUM_MEMBER',
     "A concrete instance member named '{0}' can't be declared in a class that "
         "implements 'Enum'.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
     uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION',
   );
 
@@ -5963,15 +6202,54 @@
     "A concrete instance member named '{0}' can't be inherited from '{1}' in a "
         "class that implements 'Enum'.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
     uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE',
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when either a class that implements
+  // `Enum` or a mixin with a superclass constraint of `Enum` has an instance
+  // member named `values`.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the class `C`, which
+  // implements `Enum`, declares an instance field named `values`:
+  //
+  // ```dart
+  // abstract class C implements Enum {
+  //   int get [!values!] => 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the class `B`, which
+  // implements `Enum`, inherits an instance method named `values` from `A`:
+  //
+  // ```dart
+  // abstract class A {
+  //   int values() => 0;
+  // }
+  //
+  // abstract class [!B!] extends A implements Enum {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Change the name of the conflicting member:
+  //
+  // ```dart
+  // abstract class C implements Enum {
+  //   int get value => 0;
+  // }
+  // ```
   static const CompileTimeErrorCode ILLEGAL_ENUM_VALUES_DECLARATION =
       CompileTimeErrorCode(
     'ILLEGAL_ENUM_VALUES',
     "An instance member named 'values' can't be declared in a class that "
         "implements 'Enum'.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
     uniqueName: 'ILLEGAL_ENUM_VALUES_DECLARATION',
   );
 
@@ -5985,6 +6263,7 @@
     "An instance member named 'values' can't be inherited from '{0}' in a "
         "class that implements 'Enum'.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
     uniqueName: 'ILLEGAL_ENUM_VALUES_INHERITANCE',
   );
 
@@ -6209,13 +6488,93 @@
    * Parameters:
    * 0: the name of the superclass
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a constructor implicitly
+  // invokes the unnamed constructor from the superclass, the unnamed
+  // constructor of the superclass has a required parameter, and there's no
+  // super parameter corresponding to the required parameter.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the unnamed
+  // constructor in the class `B` implicitly invokes the unnamed constructor in
+  // the class `A`, but the constructor in `A` has a required positional
+  // parameter named `x`:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   [!B!]();
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the unnamed
+  // constructor in the class `B` implicitly invokes the unnamed constructor in
+  // the class `A`, but the constructor in `A` has a required named parameter
+  // named `x`:
+  //
+  // ```dart
+  // class A {
+  //   A({required int x});
+  // }
+  //
+  // class B extends A {
+  //   [!B!]();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you can add a parameter to the constructor in the subclass, then add a
+  // super parameter corresponding to the required parameter in the superclass'
+  // constructor. The new parameter can either be required:
+  //
+  // ```dart
+  // class A {
+  //   A({required int x});
+  // }
+  //
+  // class B extends A {
+  //   B({required super.x});
+  // }
+  // ```
+  //
+  // or it can be optional:
+  //
+  // ```dart
+  // class A {
+  //   A({required int x});
+  // }
+  //
+  // class B extends A {
+  //   B({super.x = 0});
+  // }
+  // ```
+  //
+  // If you can't add a parameter to the constructor in the subclass, then add
+  // an explicit super constructor invocation with the required argument:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   B() : super(0);
+  // }
+  // ```
   static const CompileTimeErrorCode
       IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS = CompileTimeErrorCode(
     'IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS',
     "The implicitly invoked unnamed constructor from '{0}' has required "
         "parameters.",
     correctionMessage:
-        "Try adding an explicit super initializer with the required arguments.",
+        "Try adding an explicit super parameter with the required arguments.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -7860,11 +8219,63 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a generative constructor
+  // defined on an enum is used anywhere other than to create one of the enum
+  // constants or as the target of a redirection from another constructor in
+  // the same enum.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the constructor for
+  // `E` is being used to create an instance in the function `f`:
+  //
+  // ```dart
+  // enum E {
+  //   a(0);
+  //
+  //   const E(int x);
+  // }
+  //
+  // E f() => const [!E!](2);
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If there's an enum constant with the same value, or if you add such a
+  // constant, then reference the constant directly:
+  //
+  // ```dart
+  // enum E {
+  //   a(0), b(2);
+  //
+  //   const E(int x);
+  // }
+  //
+  // E f() => E.b;
+  // ```
+  //
+  // If you need to use a constructor invocation, then use a factory
+  // constructor:
+  //
+  // ```dart
+  // enum E {
+  //   a(0);
+  //
+  //   const E(int x);
+  //
+  //   factory E.c(int x) => a;
+  // }
+  //
+  // E f() => E.c(2);
+  // ```
   static const CompileTimeErrorCode
       INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR = CompileTimeErrorCode(
     'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
     "Generative enum constructors can only be used as targets of redirection.",
-    correctionMessage: "Try using a factory constructor, or an enum constant.",
+    correctionMessage: "Try using an enum constant, or a factory constructor.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -7909,14 +8320,94 @@
    * Parameters:
    * 0: the super modifier
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a super parameter is used
+  // anywhere other than a non-redirecting generative constructor.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the super parameter
+  // `x` is in a redirecting generative constructor:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   B.b([!super!].x) : this._();
+  //   B._() : super(0);
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the super parameter
+  // `x` isn't in a generative constructor:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class C extends A {
+  //   factory C.c([!super!].x) => C._();
+  //   C._() : super(0);
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the super parameter
+  // `x` is in a method:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class D extends A {
+  //   D() : super(0);
+  //
+  //   void m([!super!].x) {}
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the function containing the super parameter can be changed to be a
+  // non-redirecting generative constructor, then do so:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   B.b(super.x);
+  // }
+  // ```
+  //
+  // If the function containing the super parameter can't be changed to be a
+  // non-redirecting generative constructor, then remove the `super`:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class D extends A {
+  //   D() : super(0);
+  //
+  //   void m(int x) {}
+  // }
+  // ```
   static const CompileTimeErrorCode INVALID_SUPER_FORMAL_PARAMETER_LOCATION =
       CompileTimeErrorCode(
     'INVALID_SUPER_FORMAL_PARAMETER_LOCATION',
-    "Super-formal parameters can only be used in non-redirecting generative "
+    "Super parameters can only be used in non-redirecting generative "
         "constructors.",
     correctionMessage:
         "Try removing the 'super' modifier, or changing the constructor to be "
         "non-redirecting and generative.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -10682,11 +11173,41 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum declaration contains a
+  // generative constructor that isn't marked as `const`.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the constructor in `E`
+  // isn't marked as being `const`:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   [!E!]();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Add the `const` keyword before the constructor:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   const E();
+  // }
+  // ```
   static const CompileTimeErrorCode NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR =
       CompileTimeErrorCode(
     'NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR',
     "Generative enum constructors must be 'const'.",
     correctionMessage: "Try adding the keyword 'const'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -10704,11 +11225,50 @@
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an instance field in an enum
+  // isn't marked as `final`.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the field `f` isn't a
+  // final field:
+  //
+  // ```dart
+  // enum E {
+  //   c;
+  //
+  //   int [!f!] = 0;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the field must be defined for the enum, then mark the field as being
+  // `final`:
+  //
+  // ```dart
+  // enum E {
+  //   c;
+  //
+  //   final int f = 0;
+  // }
+  // ```
+  //
+  // If the field can be removed, then remove it:
+  //
+  // ```dart
+  // enum E {
+  //   c
+  // }
+  // ```
   static const CompileTimeErrorCode NON_FINAL_FIELD_IN_ENUM =
       CompileTimeErrorCode(
     'NON_FINAL_FIELD_IN_ENUM',
-    "Enum can only declare final fields.",
+    "Enums can only declare final fields.",
     correctionMessage: "Try making the field final.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -12165,15 +12725,74 @@
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when some, but not all, of the
+  // positional parameters provided to the constructor of the superclass are
+  // using a super parameter.
+  //
+  // Positional super parameters are associated with positional parameters in
+  // the super constructor by their index. That is, the first super parameter
+  // is associated with the first positional parameter in the super
+  // constructor, the second with the second, and so on. The same is true for
+  // positional arguments. Having both positional super parameters and
+  // positional arguments means that there are two values associated with the
+  // same parameter in the superclass's constructor, and hence isn't allowed.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the constructor
+  // `B.new` is using a super parameter to pass one of the required positional
+  // parameters to the super constructor in `A`, but is explicitly passing the
+  // other in the super constructor invocation:
+  //
+  // ```dart
+  // class A {
+  //   A(int x, int y);
+  // }
+  //
+  // class B extends A {
+  //   B(int x, super.[!y!]) : super(x);
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If all the positional parameters can be super parameters, then convert the
+  // normal positional parameters to be super parameters:
+  //
+  // ```dart
+  // class A {
+  //   A(int x, int y);
+  // }
+  //
+  // class B extends A {
+  //   B(super.x, super.y);
+  // }
+  // ```
+  //
+  // If some positional parameters can't be super parameters, then convert the
+  // super parameters to be normal parameters:
+  //
+  // ```dart
+  // class A {
+  //   A(int x, int y);
+  // }
+  //
+  // class B extends A {
+  //   B(int x, int y) : super(x, y);
+  // }
+  // ```
   static const CompileTimeErrorCode
       POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT =
       CompileTimeErrorCode(
     'POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT',
-    "Positional super-formal parameters can't be used when the "
-        "super-constructor invocation has a positional argument.",
+    "Positional super parameters can't be used when the super constructor "
+        "invocation has a positional argument.",
     correctionMessage:
-        "Try removing the 'super' modifier, or changing the super-constructor "
-        "to use named parameters.",
+        "Try making all the positional parameters passed to the super "
+        "constructor be either all super parameters or all normal parameters.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -13832,38 +14451,240 @@
    * 0: the type of super-parameter
    * 1: the type of associated super-constructor parameter
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the type of a super parameter
+  // isn't a subtype of the corresponding parameter from the super constructor.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the type of the super
+  // parameter `x` in the constructor for `B` isn't a subtype of the parameter
+  // `x` in the constructor for `A`:
+  //
+  // ```dart
+  // class A {
+  //   A(num x);
+  // }
+  //
+  // class B extends A {
+  //   B(String super.[!x!]);
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the type of the super parameter can be the same as the parameter from
+  // the super constructor, then remove the type annotation from the super
+  // parameter (if the type is implicit, it is inferred from the type in the
+  // super constructor):
+  //
+  // ```dart
+  // class A {
+  //   A(num x);
+  // }
+  //
+  // class B extends A {
+  //   B(super.x);
+  // }
+  // ```
+  //
+  // If the type of the super parameter can be a subtype of the corresponding
+  // parameter's type, then change the type of the super parameter:
+  //
+  // ```dart
+  // class A {
+  //   A(num x);
+  // }
+  //
+  // class B extends A {
+  //   B(int super.x);
+  // }
+  // ```
+  //
+  // If the type of the super parameter can't be changed, then use a normal
+  // parameter instead of a super parameter:
+  //
+  // ```dart
+  // class A {
+  //   A(num x);
+  // }
+  //
+  // class B extends A {
+  //   B(String x) : super(x.length);
+  // }
+  // ```
   static const CompileTimeErrorCode
       SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED =
       CompileTimeErrorCode(
     'SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED',
-    "The type '{0}' of this parameter is not a subtype of the type '{1}' of "
-        "the associated super-constructor parameter.",
+    "The type '{0}' of this parameter isn't a subtype of the type '{1}' of the "
+        "associated super constructor parameter.",
     correctionMessage:
         "Try removing the explicit type annotation from the parameter.",
+    hasPublishedDocs: true,
   );
 
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when there's a named super parameter
+  // in a constructor and the implicitly or explicitly invoked super
+  // constructor doesn't have a named parameter with the same name.
+  //
+  // Named super parameters are associated by name with named parameters in the
+  // super constructor.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the constructor in `A`
+  // doesn't have a parameter named `y`:
+  //
+  // ```dart
+  // class A {
+  //   A({int? x});
+  // }
+  //
+  // class B extends A {
+  //   B({super.[!y!]});
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the super parameter should be associated with an existing parameter
+  // from the super constructor, then change the name to match the name of the
+  // corresponding parameter:
+  //
+  // ```dart
+  // class A {
+  //   A({int? x});
+  // }
+  //
+  // class B extends A {
+  //   B({super.x});
+  // }
+  // ```
+  //
+  // If the super parameter should be associated with a parameter that hasn't
+  // yet been added to the super constructor, then add it:
+  //
+  // ```dart
+  // class A {
+  //   A({int? x, int? y});
+  // }
+  //
+  // class B extends A {
+  //   B({super.y});
+  // }
+  // ```
+  //
+  // If the super parameter doesn't correspond to a named parameter from the
+  // super constructor, then change it to be a normal parameter:
+  //
+  // ```dart
+  // class A {
+  //   A({int? x});
+  // }
+  //
+  // class B extends A {
+  //   B({int? y});
+  // }
+  // ```
   static const CompileTimeErrorCode
       SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED = CompileTimeErrorCode(
     'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED',
-    "No associated named super-constructor parameter.",
-    correctionMessage: "Try changing the name to the name of an existing named "
-        "super-constructor parameter, or creating such named parameter.",
+    "No associated named super constructor parameter.",
+    correctionMessage:
+        "Try changing the name to the name of an existing named super "
+        "constructor parameter, or creating such named parameter.",
+    hasPublishedDocs: true,
   );
 
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when there's a positional super
+  // parameter in a constructor and the implicitly or explicitly invoked super
+  // constructor doesn't have a positional parameter at the corresponding
+  // index.
+  //
+  // Positional super parameters are associated with positional parameters in
+  // the super constructor by their index. That is, the first super parameter
+  // is associated with the first positional parameter in the super
+  // constructor, the second with the second, and so on.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the constructor in `B`
+  // has a positional super parameter, but there's no positional parameter in
+  // the super constructor in `A`:
+  //
+  // ```dart
+  // class A {
+  //   A({int? x});
+  // }
+  //
+  // class B extends A {
+  //   B(super.[!x!]);
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the constructor in `B`
+  // has two positional super parameters, but there's only one positional
+  // parameter in the super constructor in `A`, which means that there's no
+  // corresponding parameter for `y`:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   B(super.x, super.[!y!]);
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the super constructor should have a positional parameter corresponding
+  // to the super parameter, then update the super constructor appropriately:
+  //
+  // ```dart
+  // class A {
+  //   A(int x, int y);
+  // }
+  //
+  // class B extends A {
+  //   B(super.x, super.y);
+  // }
+  // ```
+  //
+  // If the super constructor is correct, or can't be changed, then convert the
+  // super parameter into a normal parameter:
+  //
+  // ```dart
+  // class A {
+  //   A(int x);
+  // }
+  //
+  // class B extends A {
+  //   B(super.x, int y);
+  // }
+  // ```
   static const CompileTimeErrorCode
       SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL =
       CompileTimeErrorCode(
     'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL',
-    "No associated positional super-constructor parameter.",
+    "No associated positional super constructor parameter.",
     correctionMessage:
-        "Try using named parameters instead, or adding more positional "
-        "parameters to the super-constructor.",
+        "Try using a normal parameter, or adding more positional parameters to "
+        "the super constructor.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -13923,11 +14744,44 @@
     hasPublishedDocs: true,
   );
 
+  /**
+   * No parameters.
+   */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the initializer list in a
+  // constructor in an enum contains an invocation of a super constructor.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the constructor in
+  // the enum `E` has a super constructor invocation in the initializer list:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   const E() : [!super!]();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the super constructor invocation:
+  //
+  // ```dart
+  // enum E {
+  //   e;
+  //
+  //   const E();
+  // }
+  // ```
   static const CompileTimeErrorCode SUPER_IN_ENUM_CONSTRUCTOR =
       CompileTimeErrorCode(
     'SUPER_IN_ENUM_CONSTRUCTOR',
     "The enum constructor can't have a 'super' initializer.",
     correctionMessage: "Try removing the 'super' invocation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -14991,6 +15845,88 @@
    * Parameters:
    * 0: the name of the constructor that is undefined
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the constructor invoked to
+  // initialize an enum constant doesn't exist.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the enum constant `c`
+  // is being initialized by the unnamed constructor, but there's no unnamed
+  // constructor defined in `E`:
+  //
+  // ```dart
+  // enum E {
+  //   [!c!]();
+  //
+  //   const E.x();
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the enum constant `c`
+  // is being initialized by the constructor named `x`, but there's no
+  // constructor named `x` defined in `E`:
+  //
+  // ```dart
+  // enum E {
+  //   c.[!x!]();
+  //
+  //   const E.y();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the enum constant is being initialized by the unnamed constructor and
+  // one of the named constructors should have been used, then add the name of
+  // the constructor:
+  //
+  // ```dart
+  // enum E {
+  //   c.x();
+  //
+  //   const E.x();
+  // }
+  // ```
+  //
+  // If the enum constant is being initialized by the unnamed constructor and
+  // none of the named constructors are appropriate, then define the unnamed
+  // constructor:
+  //
+  // ```dart
+  // enum E {
+  //   c();
+  //
+  //   const E();
+  // }
+  // ```
+  //
+  // If the enum constant is being initialized by a named constructor and one
+  // of the existing constructors should have been used, then change the name
+  // of the constructor being invoked (or remove it if the unnamed constructor
+  // should be used):
+  //
+  // ```dart
+  // enum E {
+  //   c.y();
+  //
+  //   const E();
+  //   const E.y();
+  // }
+  // ```
+  //
+  // If the enum constant is being initialized by a named constructor and none
+  // of the existing constructors should have been used, then define a
+  // constructor with the name that was used:
+  //
+  // ```dart
+  // enum E {
+  //   c.x();
+  //
+  //   const E.x();
+  // }
+  // ```
   static const CompileTimeErrorCode UNDEFINED_ENUM_CONSTRUCTOR_NAMED =
       CompileTimeErrorCode(
     'UNDEFINED_ENUM_CONSTRUCTOR',
@@ -14998,6 +15934,7 @@
     correctionMessage:
         "Try correcting the name to the name of an existing constructor, or "
         "defining constructor with the name '{0}'.",
+    hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_NAMED',
   );
 
@@ -15008,6 +15945,7 @@
     correctionMessage:
         "Try adding the name of an existing constructor, or defining an "
         "unnamed constructor.",
+    hasPublishedDocs: true,
     uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED',
   );
 
@@ -16240,11 +17178,44 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum declaration defines a
+  // member named `values`, whether the member is an enum constant, an instance
+  // member, or a static member.
+  //
+  // Any such member conflicts with the implicit declaration of the static
+  // getter named `values` that returns a list containing all the enum
+  // constants.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the enum `E` defines
+  // an instance member named `values`:
+  //
+  // ```dart
+  // enum E {
+  //   v;
+  //   void [!values!]() {}
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Change the name of the conflicting member:
+  //
+  // ```dart
+  // enum E {
+  //   v;
+  //   void getValues() {}
+  // }
+  // ```
   static const CompileTimeErrorCode VALUES_DECLARATION_IN_ENUM =
       CompileTimeErrorCode(
     'VALUES_DECLARATION_IN_ENUM',
     "A member named 'values' can't be declared in an enum.",
     correctionMessage: "Try using a different name.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -16562,12 +17533,51 @@
    * 0: the number of type parameters that were declared
    * 1: the number of type arguments provided
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum constant in an enum
+  // that has type parameters is instantiated and type arguments are provided,
+  // but the number of type arguments isn't the same as the number of type
+  // parameters.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the enum constant `c`
+  // provides one type argument even though the enum `E` is declared to have
+  // two type parameters:
+  //
+  // ```dart
+  // enum E<T, U> {
+  //   c[!<int>!]()
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the number of type parameters is correct, then change the number of
+  // type arguments to match the number of type parameters:
+  //
+  // ```dart
+  // enum E<T, U> {
+  //   c<int, String>()
+  // }
+  // ```
+  //
+  // If the number of type arguments is correct, then change the number of type
+  // parameters to match the number of type arguments:
+  //
+  // ```dart
+  // enum E<T> {
+  //   c<int>()
+  // }
+  // ```
   static const CompileTimeErrorCode WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM =
       CompileTimeErrorCode(
     'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM',
     "The enum is declared with {0} type parameters, but {1} type arguments "
         "were given.",
     correctionMessage: "Try adjusting the number of type arguments.",
+    hasPublishedDocs: true,
   );
 
   /**
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index 496f77d..42d4dde 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -82,12 +82,13 @@
     }
 
     // Prepare lists of not initialized fields.
-    List<FieldElement> notInitFinalFields = <FieldElement>[];
-    List<FieldElement> notInitNonNullableFields = <FieldElement>[];
+    var notInitFinalFields = <FieldElement>[];
+    var notInitNonNullableFields = <FieldElement>[];
     _fieldMap.forEach((FieldElement field, _InitState state) {
       if (state != _InitState.notInit) return;
       if (field.isLate) return;
       if (field.isAbstract || field.isExternal) return;
+      if (field.isStatic) return;
 
       if (field.isFinal) {
         notInitFinalFields.add(field);
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 623f429..14775ba 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -93,7 +93,9 @@
           member.name,
           setterScope: member.isStatic ? staticSetters : instanceSetters,
         );
-        _checkValuesDeclarationInEnum(member.name);
+        if (!(member.isStatic && member.isSetter)) {
+          _checkValuesDeclarationInEnum(member.name);
+        }
       }
     }
 
@@ -308,7 +310,7 @@
       for (TopLevelVariableElement variable in element.topLevelVariables) {
         definedGetters[variable.name] = variable;
         if (!variable.isFinal && !variable.isConst) {
-          definedGetters[variable.name + '='] = variable;
+          definedGetters['${variable.name}='] = variable;
         }
       }
       for (TypeAliasElement alias in element.typeAliases) {
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index 0ec6f98..425cb32 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -12,14 +12,14 @@
 import 'package:analyzer/src/error/codes.dart';
 
 /// A visitor that visits ASTs and fills [UsedImportedElements].
-class GatherUsedImportedElementsVisitor extends RecursiveAstVisitor {
+class GatherUsedImportedElementsVisitor extends RecursiveAstVisitor<void> {
   final LibraryElement library;
   final UsedImportedElements usedElements = UsedImportedElements();
 
   GatherUsedImportedElementsVisitor(this.library);
 
   @override
-  visitAssignmentExpression(AssignmentExpression node) {
+  void visitAssignmentExpression(AssignmentExpression node) {
     _recordAssignmentTarget(node, node.leftHandSide);
     return super.visitAssignmentExpression(node);
   }
@@ -58,7 +58,7 @@
   }
 
   @override
-  visitPostfixExpression(PostfixExpression node) {
+  void visitPostfixExpression(PostfixExpression node) {
     _recordAssignmentTarget(node, node.operand);
     return super.visitPostfixExpression(node);
   }
diff --git a/pkg/analyzer/lib/src/error/literal_element_verifier.dart b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
index 05ee001..4cb6aef 100644
--- a/pkg/analyzer/lib/src/error/literal_element_verifier.dart
+++ b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
@@ -211,7 +211,7 @@
             errorReporter: errorReporter,
             errorNode: expression,
             genericMetadataIsEnabled: true,
-          )!;
+          );
           if (typeArguments.isNotEmpty) {
             tearoffType = tearoffType.instantiate(typeArguments);
           }
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index dcac77f..216f128 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -101,6 +101,16 @@
   }
 
   @override
+  void visitDefaultFormalParameter(DefaultFormalParameter node) {
+    var element = node.declaredElement;
+    if (element is SuperFormalParameterElement) {
+      usedElements.addElement(element.superConstructorParameter);
+    }
+
+    super.visitDefaultFormalParameter(node);
+  }
+
+  @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     usedElements.addElement(node.constructorElement?.declaration);
 
diff --git a/pkg/analyzer/lib/src/error/use_result_verifier.dart b/pkg/analyzer/lib/src/error/use_result_verifier.dart
index a2bd7bb..a54515c 100644
--- a/pkg/analyzer/lib/src/error/use_result_verifier.dart
+++ b/pkg/analyzer/lib/src/error/use_result_verifier.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -26,7 +27,7 @@
   void checkPropertyAccess(PropertyAccess node) {
     var element = node.propertyName.staticElement;
     if (element == null) {
-      return null;
+      return;
     }
 
     _check(node, element);
@@ -45,7 +46,7 @@
 
     var element = node.staticElement;
     if (element == null) {
-      return null;
+      return;
     }
 
     _check(node, element);
@@ -157,23 +158,56 @@
       }
     }
 
-    if (parent is ParenthesizedExpression ||
+    if (parent is PostfixExpression) {
+      if (parent.operator.type == TokenType.BANG) {
+        // Null-checking a result is not a "use."
+        return _isUsed(parent);
+      } else {
+        // Other uses, like `++`, count as a "use."
+        return true;
+      }
+    }
+
+    if (parent is AwaitExpression ||
         parent is ConditionalExpression ||
-        parent is AwaitExpression) {
+        parent is ForElement ||
+        parent is IfElement ||
+        parent is ParenthesizedExpression ||
+        parent is SpreadElement) {
       return _isUsed(parent);
     }
 
+    if (parent is ForParts) {
+      // If [node] is the condition of a for-loop, it is used; if it is one of
+      // the updaters, it is not.
+      return parent.condition == node;
+    }
+
     return parent is ArgumentList ||
-        // Node should always be RHS so no need to check for a property assignment.
+        parent is AssertInitializer ||
+        parent is AssertStatement ||
+        // Node should always be RHS so no need to check for a property
+        // assignment.
         parent is AssignmentExpression ||
-        parent is VariableDeclaration ||
+        parent is BinaryExpression ||
+        parent is ConstructorFieldInitializer ||
+        parent is DoStatement ||
+        parent is ExpressionFunctionBody ||
+        parent is ForEachParts ||
+        parent is ForLoopParts ||
+        parent is FunctionExpressionInvocation ||
+        parent is IfStatement ||
+        parent is IndexExpression ||
+        parent is ListLiteral ||
+        parent is MapLiteralEntry ||
         parent is MethodInvocation ||
         parent is PropertyAccess ||
-        parent is ExpressionFunctionBody ||
         parent is ReturnStatement ||
-        parent is FunctionExpressionInvocation ||
-        parent is ListLiteral ||
         parent is SetOrMapLiteral ||
-        parent is MapLiteralEntry;
+        parent is SwitchStatement ||
+        parent is ThrowExpression ||
+        parent is VariableDeclaration ||
+        parent is WhileStatement ||
+        parent is YieldStatement;
   }
 }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 9526d94..e14406b 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -60,25 +60,8 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/dart/ast/ast.dart'
-    show
-        ArgumentListImpl,
-        ClassDeclarationImpl,
-        CompilationUnitImpl,
-        ConstructorNameImpl,
-        ConstructorSelectorImpl,
-        EnumConstantArgumentsImpl,
-        EnumConstantDeclarationImpl,
-        EnumDeclarationImpl,
-        ExtensionDeclarationImpl,
-        ImportDirectiveImpl,
-        MethodInvocationImpl,
-        MixinDeclarationImpl,
-        SimpleIdentifierImpl,
-        TypeArgumentListImpl,
-        TypeParameterImpl;
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/fasta/error_converter.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
@@ -586,13 +569,13 @@
   void checkFieldFormalParameters(FormalParameterList? parameterList) {
     var parameters = parameterList?.parameters;
     if (parameters != null) {
-      parameters.forEach((FormalParameter param) {
-        if (param is FieldFormalParameter) {
+      for (var parameter in parameters) {
+        if (parameter is FieldFormalParameter) {
           // This error is reported in the BodyBuilder.endFormalParameter.
           handleRecoverableError(messageFieldInitializerOutsideConstructor,
-              param.thisKeyword, param.thisKeyword);
+              parameter.thisKeyword, parameter.thisKeyword);
         }
-      });
+      }
     }
   }
 
@@ -740,10 +723,16 @@
         identical("?..", operatorToken.stringValue)) {
       doDotExpression(operatorToken);
     } else {
-      var right = pop() as Expression;
-      var left = pop() as Expression;
+      var right = pop() as ExpressionImpl;
+      var left = pop() as ExpressionImpl;
       reportErrorIfSuper(right);
-      push(ast.binaryExpression(left, operatorToken, right));
+      push(
+        BinaryExpressionImpl(
+          leftOperand: left,
+          operator: operatorToken,
+          rightOperand: right,
+        ),
+      );
       if (!enableTripleShift && operatorToken.type == TokenType.GT_GT_GT) {
         var feature = ExperimentalFeatures.triple_shift;
         handleRecoverableError(
@@ -1632,8 +1621,7 @@
       }
     }
 
-    ParameterKind analyzerKind =
-        _toAnalyzerParameterKind(kind, requiredKeyword);
+    ParameterKind analyzerKind = _toAnalyzerParameterKind(kind);
     FormalParameter parameter = node;
     if (analyzerKind != ParameterKind.REQUIRED) {
       parameter = ast.defaultFormalParameter(
@@ -2147,8 +2135,8 @@
     }
     var withClause = pop(NullValue.WithClause) as WithClause;
     var superclass = pop() as NamedType;
-    var macroKeyword = pop(NullValue.Token) as Token?;
     var augmentKeyword = pop(NullValue.Token) as Token?;
+    var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2751,8 +2739,8 @@
     var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
     var withClause = pop(NullValue.WithClause) as WithClause?;
     var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
-    var macroKeyword = pop(NullValue.Token) as Token?;
     var augmentKeyword = pop(NullValue.Token) as Token?;
+    var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2915,18 +2903,6 @@
           name: constructorNameId,
         );
       }
-      // enum E { v<int> }
-      if (typeArguments != null && argumentList == null) {
-        errorReporter.errorReporter?.reportErrorForNode(
-          ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
-          typeArguments,
-        );
-        argumentList = _syntheticArgumentList(typeArguments.endToken);
-      }
-      // enum E { v.^ }
-      if (constructorSelector != null) {
-        argumentList ??= _syntheticArgumentList(constructorSelector.endToken);
-      }
     }
 
     // Replace the constant to include arguments.
@@ -4359,17 +4335,16 @@
     );
   }
 
-  ParameterKind _toAnalyzerParameterKind(
-      FormalParameterKind type, Token? requiredKeyword) {
-    if (type == FormalParameterKind.optionalPositional) {
-      return ParameterKind.POSITIONAL;
-    } else if (type == FormalParameterKind.optionalNamed) {
-      if (requiredKeyword != null) {
+  ParameterKind _toAnalyzerParameterKind(FormalParameterKind type) {
+    switch (type) {
+      case FormalParameterKind.requiredPositional:
+        return ParameterKind.REQUIRED;
+      case FormalParameterKind.requiredNamed:
         return ParameterKind.NAMED_REQUIRED;
-      }
-      return ParameterKind.NAMED;
-    } else {
-      return ParameterKind.REQUIRED;
+      case FormalParameterKind.optionalNamed:
+        return ParameterKind.NAMED;
+      case FormalParameterKind.optionalPositional:
+        return ParameterKind.POSITIONAL;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 650fde4..c20f28d 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -162,7 +162,8 @@
   /// an [IndexError] if there are no more.
   EnumElementImpl getEnum() => _enums![_enumIndex++] as EnumElementImpl;
 
-  ExtensionElement getExtension() => _extensions![_extensionIndex++];
+  ExtensionElementImpl getExtension() =>
+      _extensions![_extensionIndex++] as ExtensionElementImpl;
 
   /// Returns the next non-synthetic child of [element] which is a top level
   /// function, method, or local function; throws an [IndexError] if there are
@@ -172,7 +173,7 @@
 
   /// Returns the next non-synthetic child of [element] which is a mixin; throws
   /// an [IndexError] if there are no more.
-  ClassElement getMixin() => _mixins![_mixinIndex++];
+  ClassElementImpl getMixin() => _mixins![_mixinIndex++] as ClassElementImpl;
 
   /// Returns the next non-synthetic child of [element] which is a parameter;
   /// throws an [IndexError] if there are no more.
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index bc9aba5..eb6df5c 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -5,10 +5,13 @@
 import 'dart:typed_data';
 
 import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart';
+import 'package:analyzer/dart/analysis/analysis_options.dart';
+import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/source/error_processor.dart';
+import 'package:analyzer/src/analysis_options/code_style_options.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -16,6 +19,7 @@
 import 'package:analyzer/src/summary/api_signature.dart';
 import 'package:pub_semver/pub_semver.dart';
 
+export 'package:analyzer/dart/analysis/analysis_options.dart';
 export 'package:analyzer/error/listener.dart' show RecordingErrorListener;
 export 'package:analyzer/src/generated/timestamped_data.dart'
     show TimestampedData;
@@ -148,69 +152,6 @@
 
 /// A set of analysis options used to control the behavior of an analysis
 /// context.
-abstract class AnalysisOptions {
-  /// A flag indicating whether to run checks on AndroidManifest.xml file to
-  /// see if it is complaint with Chrome OS.
-  bool get chromeOsManifestChecks;
-
-  /// The set of features that are globally enabled for this context.
-  FeatureSet get contextFeatures;
-
-  /// Return a list of the names of the packages for which, if they define a
-  /// plugin, the plugin should be enabled.
-  List<String> get enabledPluginNames;
-
-  /// Return `true` if timing data should be gathered during execution.
-  bool get enableTiming;
-
-  /// Return a list of error processors that are to be used when reporting
-  /// errors in some analysis context.
-  List<ErrorProcessor> get errorProcessors;
-
-  /// Return a list of exclude patterns used to exclude some sources from
-  /// analysis.
-  List<String> get excludePatterns;
-
-  /// Return `true` if analysis is to generate hint results (e.g. type inference
-  /// based information and pub best practices).
-  bool get hint;
-
-  /// Return `true` if analysis is to generate lint warnings.
-  bool get lint;
-
-  /// Return a list of the lint rules that are to be run in an analysis context
-  /// if [lint] returns `true`.
-  List<Linter> get lintRules;
-
-  /// The version range for the SDK specified in `pubspec.yaml`, or `null` if
-  /// there is no `pubspec.yaml` or if it does not contain an SDK range.
-  VersionConstraint? get sdkVersionConstraint;
-
-  /// Return the opaque signature of the options.
-  Uint32List get signature;
-
-  /// Return `true` if analyzer should use the Dart 2.0 Front End parser.
-  bool get useFastaParser;
-
-  /// Return `true` the lint with the given [name] is enabled.
-  bool isLintEnabled(String name);
-
-  /// Determine whether two signatures returned by [signature] are equal.
-  static bool signaturesEqual(Uint32List a, Uint32List b) {
-    if (a.length != b.length) {
-      return false;
-    }
-    for (int i = 0; i < a.length; i++) {
-      if (a[i] != b[i]) {
-        return false;
-      }
-    }
-    return true;
-  }
-}
-
-/// A set of analysis options used to control the behavior of an analysis
-/// context.
 class AnalysisOptionsImpl implements AnalysisOptions {
   /// The cached [unlinkedSignature].
   Uint32List? _unlinkedSignature;
@@ -246,7 +187,7 @@
   @override
   List<String> enabledPluginNames = const <String>[];
 
-  @override
+  /// Return `true` if timing data should be gathered during execution.
   bool enableTiming = false;
 
   /// A list of error processors that are to be used when reporting errors in
@@ -266,9 +207,6 @@
   /// `true`.
   List<Linter>? _lintRules;
 
-  @override
-  bool useFastaParser = true;
-
   /// A flag indicating whether implicit casts are allowed in [strongMode]
   /// (they are always allowed in Dart 1.0 mode).
   ///
@@ -307,27 +245,32 @@
   @override
   bool chromeOsManifestChecks = false;
 
+  @override
+  late CodeStyleOptions codeStyleOptions;
+
   /// The set of "un-ignorable" error names, as parsed in [AnalyzerOptions] from
   /// an analysis options file.
   Set<String> unignorableNames = {};
 
   /// Initialize a newly created set of analysis options to have their default
   /// values.
-  AnalysisOptionsImpl();
+  AnalysisOptionsImpl() {
+    codeStyleOptions = CodeStyleOptionsImpl(this, useFormatter: false);
+  }
 
   /// Initialize a newly created set of analysis options to have the same values
   /// as those in the given set of analysis [options].
   AnalysisOptionsImpl.from(AnalysisOptions options) {
+    codeStyleOptions = options.codeStyleOptions;
     contextFeatures = options.contextFeatures;
     enabledPluginNames = options.enabledPluginNames;
-    enableTiming = options.enableTiming;
     errorProcessors = options.errorProcessors;
     excludePatterns = options.excludePatterns;
     hint = options.hint;
     lint = options.lint;
     lintRules = options.lintRules;
-    useFastaParser = options.useFastaParser;
     if (options is AnalysisOptionsImpl) {
+      enableTiming = options.enableTiming;
       implicitCasts = options.implicitCasts;
       implicitDynamic = options.implicitDynamic;
       propagateLinterExceptions = options.propagateLinterExceptions;
@@ -393,7 +336,6 @@
       buffer.addBool(strictCasts);
       buffer.addBool(strictInference);
       buffer.addBool(strictRawTypes);
-      buffer.addBool(useFastaParser);
 
       // Append features.
       buffer.addInt(ExperimentStatus.knownFeatures.length);
@@ -449,9 +391,6 @@
     if (_unlinkedSignature == null) {
       ApiSignature buffer = ApiSignature();
 
-      // Append boolean flags.
-      buffer.addBool(useFastaParser);
-
       // Append the current language version.
       buffer.addInt(ExperimentStatus.currentVersion.major);
       buffer.addInt(ExperimentStatus.currentVersion.minor);
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 01ff198..b93727e 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1250,7 +1250,7 @@
   @override
   void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
     _checkForFinalNotInitialized(node.variables);
-    _checkForNotInitializedNonNullableVariable(node.variables);
+    _checkForNotInitializedNonNullableVariable(node.variables, true);
 
     for (var declaration in node.variables.variables) {
       _checkForMainFunction(declaration.name);
@@ -2451,7 +2451,7 @@
             errorReporter: errorReporter,
             errorNode: node.iterable,
             genericMetadataIsEnabled: true,
-          )!;
+          );
           if (typeArguments.isNotEmpty) {
             tearoffType = tearoffType.instantiate(typeArguments);
           }
@@ -3789,18 +3789,19 @@
     if (!node.isStatic) {
       return;
     }
-    _checkForNotInitializedNonNullableVariable(node.fields);
+    _checkForNotInitializedNonNullableVariable(node.fields, false);
   }
 
   void _checkForNotInitializedNonNullableVariable(
     VariableDeclarationList node,
+    bool topLevel,
   ) {
     if (!_isNonNullableByDefault) {
       return;
     }
 
-    // Const and final checked separately.
-    if (node.isConst || node.isFinal) {
+    // Checked separately.
+    if (node.isConst || (topLevel && node.isFinal)) {
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 34d16ab..4c8241b 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -146,9 +146,25 @@
       }
     }
 
-    if (inCompound && node.declaredElement!.typeParameters.isNotEmpty) {
-      _errorReporter.reportErrorForNode(
-          FfiCode.GENERIC_STRUCT_SUBCLASS, node.name, [node.name.name]);
+    if (inCompound) {
+      if (node.declaredElement!.typeParameters.isNotEmpty) {
+        _errorReporter.reportErrorForNode(
+            FfiCode.GENERIC_STRUCT_SUBCLASS, node.name, [node.name.name]);
+      }
+      final implementsClause = node.implementsClause;
+      if (implementsClause != null) {
+        final compoundType = node.declaredElement!.thisType;
+        final structType = compoundType.superclass!;
+        final ffiLibrary = structType.element.library;
+        final finalizableElement = ffiLibrary.getType(_finalizableClassName)!;
+        final finalizableType = finalizableElement.thisType;
+        if (typeSystem.isSubtypeOf(compoundType, finalizableType)) {
+          _errorReporter.reportErrorForNode(
+              FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE,
+              node.name,
+              [node.name.name]);
+        }
+      }
     }
     super.visitClassDeclaration(node);
   }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 92f03a7..78180a7 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -296,14 +296,13 @@
       FeatureSet featureSet,
       this.flowAnalysis,
       this._migratableAstInfoProvider,
-      MigrationResolutionHooks? migrationResolutionHooks)
+      this.migrationResolutionHooks)
       : errorReporter = ErrorReporter(
           errorListener,
           source,
           isNonNullableByDefault: definingLibrary.isNonNullableByDefault,
         ),
         _featureSet = featureSet,
-        migrationResolutionHooks = migrationResolutionHooks,
         genericMetadataIsEnabled =
             definingLibrary.featureSet.isEnabled(Feature.generic_metadata) {
     var analysisOptions =
@@ -383,6 +382,9 @@
   bool get isConstructorTearoffsEnabled =>
       _featureSet.isEnabled(Feature.constructor_tearoffs);
 
+  bool get isInferenceUpdate1Enabled =>
+      _featureSet.isEnabled(Feature.inference_update_1);
+
   /// Return the object providing promoted or declared types of variables.
   LocalVariableTypeProvider get localVariableTypeProvider {
     return flowAnalysis.localVariableTypeProvider;
@@ -441,7 +443,7 @@
     // TODO(scheglov) encapsulate
     var bodyContext = BodyInferenceContext.of(body);
     if (bodyContext == null) {
-      return null;
+      return;
     }
     var returnType = bodyContext.contextType;
     if (returnType == null) {
@@ -664,7 +666,7 @@
       // If the constructor-tearoffs feature is enabled, then so is
       // generic-metadata.
       genericMetadataIsEnabled: true,
-    )!;
+    );
     if (typeArgumentTypes.isNotEmpty) {
       staticType = staticType.instantiate(typeArgumentTypes);
     }
@@ -1222,7 +1224,8 @@
   @override
   void visitConstructorDeclaration(covariant ConstructorDeclarationImpl node) {
     flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
-    flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
+    flowAnalysis.executableDeclaration_enter(node, node.parameters,
+        isClosure: false);
 
     var returnType = node.declaredElement!.type.returnType;
 
@@ -1540,21 +1543,23 @@
 
     var receiverContextType =
         ExtensionMemberResolver(this).computeOverrideReceiverContextType(node);
-    const ExtensionOverrideInferrer().resolveInvocation(
-        resolver: this,
-        node: node,
-        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);
   }
@@ -1611,7 +1616,7 @@
     flowAnalysis.executableDeclaration_enter(
       node,
       node.functionExpression.parameters,
-      isLocal,
+      isClosure: isLocal,
     );
 
     var functionType = node.declaredElement!.type;
@@ -1908,7 +1913,8 @@
   @override
   void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
     flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
-    flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
+    flowAnalysis.executableDeclaration_enter(node, node.parameters,
+        isClosure: false);
 
     DartType returnType = node.declaredElement!.returnType;
 
@@ -2162,12 +2168,14 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitRedirectingConstructorInvocation(
         node as RedirectingConstructorInvocationImpl);
-    const RedirectingConstructorInvocationInferrer().resolveInvocation(
-        resolver: this,
-        node: node,
-        rawType: node.staticElement?.type,
-        contextType: null,
-        whyNotPromotedList: whyNotPromotedList);
+    InvocationInferrer<RedirectingConstructorInvocationImpl>(
+            resolver: this,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: node.staticElement?.type,
+            contextType: null,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -2270,12 +2278,14 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitSuperConstructorInvocation(
         node as SuperConstructorInvocationImpl);
-    const SuperConstructorInvocationInferrer().resolveInvocation(
-        resolver: this,
-        node: node,
-        rawType: node.staticElement?.type,
-        contextType: null,
-        whyNotPromotedList: whyNotPromotedList);
+    InvocationInferrer<SuperConstructorInvocationImpl>(
+            resolver: this,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: node.staticElement?.type,
+            contextType: null,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -2577,7 +2587,7 @@
         // If the constructor-tearoffs feature is enabled, then so is
         // generic-metadata.
         genericMetadataIsEnabled: true,
-      )!;
+      );
       if (typeArgumentTypes.isNotEmpty) {
         callMethodType = callMethodType.instantiate(typeArgumentTypes);
       }
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index 77865a9..48a0c91 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -37,7 +37,7 @@
   String get shortName => pathos.basename(fullName);
 
   @override
-  bool operator ==(Object object) => object is Source && object.uri == uri;
+  bool operator ==(Object other) => other is Source && other.uri == uri;
 }
 
 /// Instances of the class `DartUriResolver` resolve `dart` URI's.
@@ -241,7 +241,7 @@
   ///         source code as this source
   /// See [Object.==].
   @override
-  bool operator ==(Object object);
+  bool operator ==(Object other);
 
   /// Return `true` if this source exists.
   ///
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 34986e6..1264004 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -126,11 +126,6 @@
           TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "await"),
           expression);
 
-  static BinaryExpressionImpl binaryExpression(Expression leftOperand,
-          TokenType operator, Expression rightOperand) =>
-      astFactory.binaryExpression(
-          leftOperand, TokenFactory.tokenFromType(operator), rightOperand);
-
   static BlockImpl block([List<Statement> statements = const []]) =>
       astFactory.block(
           TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index cd89eef..68896c6 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -90,14 +90,16 @@
           [List<String>? parameterNames]) =>
       classTypeAlias(typeName, objectType, parameterNames);
 
-  static CompilationUnitElementImpl compilationUnit(String fileName,
-      [Source? librarySource]) {
-    Source source = NonExistingSource(fileName, toUri(fileName));
-    CompilationUnitElementImpl unit = CompilationUnitElementImpl();
-    unit.source = source;
-    librarySource ??= source;
-    unit.librarySource = librarySource;
-    return unit;
+  static CompilationUnitElementImpl compilationUnit({
+    required Source source,
+    Source? librarySource,
+    LineInfo? lineInfo,
+  }) {
+    return CompilationUnitElementImpl(
+      source: source,
+      librarySource: librarySource ?? source,
+      lineInfo: lineInfo ?? LineInfo([0]),
+    );
   }
 
   static ConstLocalVariableElementImpl constLocalVariableElement(String name) =>
@@ -206,7 +208,9 @@
   static LibraryElementImpl library(
       AnalysisContext context, String libraryName) {
     String fileName = "/$libraryName.dart";
-    CompilationUnitElementImpl unit = compilationUnit(fileName);
+    CompilationUnitElementImpl unit = compilationUnit(
+      source: NonExistingSource(fileName, toUri(fileName)),
+    );
     LibraryElementImpl library = LibraryElementImpl(
       context,
       _MockAnalysisSession(),
diff --git a/pkg/analyzer/lib/src/generated/utilities_general.dart b/pkg/analyzer/lib/src/generated/utilities_general.dart
index d9e6742..c24cb69 100644
--- a/pkg/analyzer/lib/src/generated/utilities_general.dart
+++ b/pkg/analyzer/lib/src/generated/utilities_general.dart
@@ -50,8 +50,8 @@
   LimitedQueue(this.limit);
 
   @override
-  void add(E o) {
-    super.add(o);
+  void add(E value) {
+    super.add(value);
     while (length > limit) {
       remove(first);
     }
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
index 7eb9520..18d98ab 100644
--- a/pkg/analyzer/lib/src/lint/analysis.dart
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -138,11 +138,11 @@
         projectAnalysisSession,
         _filesAnalyzed.toList(),
       );
-      Registry.ruleRegistry.forEach((lint) {
+      for (var lint in Registry.ruleRegistry) {
         if (lint is ProjectVisitor) {
           (lint as ProjectVisitor).visit(project);
         }
-      });
+      }
     }
 
     var result = <AnalysisErrorInfo>[];
diff --git a/pkg/analyzer/lib/src/lint/config.dart b/pkg/analyzer/lib/src/lint/config.dart
index 288bf06..d27f4ae 100644
--- a/pkg/analyzer/lib/src/lint/config.dart
+++ b/pkg/analyzer/lib/src/lint/config.dart
@@ -65,7 +65,9 @@
 
   void addAsListOrString(Object? value, List<String> list) {
     if (value is List) {
-      value.forEach((v) => list.add(v));
+      for (var entry in value) {
+        list.add(entry);
+      }
     } else if (value is String) {
       list.add(value);
     }
@@ -130,12 +132,12 @@
           // - unnecessary_getters
           // - camel_case_types
           if (v is YamlList) {
-            v.nodes.forEach((rule) {
+            for (var rule in v.nodes) {
               var config = _RuleConfig();
               config.name = asString(rule);
               config.args = {'enabled': true};
               ruleConfigs.add(config);
-            });
+            }
           }
 
           // style_guide: {unnecessary_getters: false, camel_case_types: true}
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 542e9ec..2e07c8a 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -280,7 +280,7 @@
 
 /// Implementation of [LinterContext]
 class LinterContextImpl implements LinterContext {
-  static final _testDirectories = [
+  static final testDirectories = [
     '${p.separator}test${p.separator}',
     '${p.separator}integration_test${p.separator}',
     '${p.separator}test_driver${p.separator}',
@@ -393,7 +393,7 @@
   @override
   bool inTestDir(CompilationUnit unit) {
     var path = unit.declaredElement?.source.fullName;
-    return path != null && _testDirectories.any(path.contains);
+    return path != null && testDirectories.any(path.contains);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/lint/project.dart b/pkg/analyzer/lib/src/lint/project.dart
index 38da850..6feb9f4 100644
--- a/pkg/analyzer/lib/src/lint/project.dart
+++ b/pkg/analyzer/lib/src/lint/project.dart
@@ -129,8 +129,8 @@
       return;
     }
 
-    String libDir = root.path + '/lib';
-    String libSrcDir = libDir + '/src';
+    String libDir = '${root.path}/lib';
+    String libSrcDir = '$libDir/src';
 
     for (var file in files) {
       if (file.startsWith(libDir) && !file.startsWith(libSrcDir)) {
diff --git a/pkg/analyzer/lib/src/lint/pub.dart b/pkg/analyzer/lib/src/lint/pub.dart
index be9b149..abcae60 100644
--- a/pkg/analyzer/lib/src/lint/pub.dart
+++ b/pkg/analyzer/lib/src/lint/pub.dart
@@ -133,7 +133,7 @@
   PSEntry(this.key, this.value);
 
   @override
-  String toString() => '${key != null ? (key.toString() + ': ') : ''}$value';
+  String toString() => '${key != null ? ('$key: ') : ''}$value';
 }
 
 /// Representation of git-dependency in `pubspec.yaml`.
diff --git a/pkg/analyzer/lib/src/lint/util.dart b/pkg/analyzer/lib/src/lint/util.dart
index 392df53..476ee13 100644
--- a/pkg/analyzer/lib/src/lint/util.dart
+++ b/pkg/analyzer/lib/src/lint/util.dart
@@ -72,7 +72,7 @@
   _SourceVisitor(this.sink);
 
   String asString(AstNode node) =>
-      typeInfo(node.runtimeType) + ' [${node.toString()}]';
+      '${typeInfo(node.runtimeType)} [${node.toString()}]';
 
   List<CommentToken> getPrecedingComments(Token token) {
     var comments = <CommentToken>[];
@@ -107,9 +107,11 @@
   }
 
   void write(AstNode node) {
-    //EOL comments
+    // EOL comments.
     var comments = getPrecedingComments(node.beginToken);
-    comments.forEach((c) => sink.writeln('${"  " * indent}$c'));
+    for (var comment in comments) {
+      sink.writeln('${"  " * indent}$comment');
+    }
 
     sink.writeln(
         '${"  " * indent}${asString(node)} ${getTrailingComment(node)}');
diff --git a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
index bb8803b..83f9fc7 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
@@ -86,7 +86,7 @@
       return true;
     }
     String fileName = assetFile.shortName;
-    Folder assetFolder = assetFile.parent2;
+    Folder assetFolder = assetFile.parent;
     if (!assetFolder.exists) {
       return false;
     }
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index e39cd99..b41bafc 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -5,6 +5,8 @@
 import 'dart:async';
 import 'dart:collection';
 
+import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
@@ -22,8 +24,6 @@
 import 'package:analyzer/src/summary/api_signature.dart';
 import 'package:analyzer/src/summary/format.dart' as idl;
 import 'package:analyzer/src/summary/idl.dart' as idl;
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 import 'package:analyzer/src/util/comment.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:collection/collection.dart';
@@ -344,7 +344,7 @@
     for (var path in _analysisContext.contextRoot.analyzedFiles()) {
       if (file_paths.isBazelBuild(pathContext, path)) {
         var file = _tracker._resourceProvider.getFile(path);
-        var packageFolder = file.parent2;
+        var packageFolder = file.parent;
         _packages.add(_Package(packageFolder));
       } else if (file_paths.isPubspecYaml(pathContext, path)) {
         var file = _tracker._resourceProvider.getFile(path);
@@ -352,7 +352,7 @@
         var libPaths = _resolvePackageNamesToLibPaths(dependencies.lib);
         var devPaths = _resolvePackageNamesToLibPaths(dependencies.dev);
 
-        var packageFolder = file.parent2;
+        var packageFolder = file.parent;
         var packagePath = packageFolder.path;
         pubPathPrefixToPathList[packagePath] = [
           ...libPaths,
@@ -1233,7 +1233,7 @@
       pathKeyBuilder.addInt(DATA_VERSION);
       pathKeyBuilder.addString(path);
       pathKeyBuilder.addInt(modificationStamp);
-      pathKey = pathKeyBuilder.toHex() + '.declarations_content';
+      pathKey = '${pathKeyBuilder.toHex()}.declarations_content';
     }
 
     // With Bazel multiple workspaces might be copies of the same workspace,
@@ -1254,7 +1254,7 @@
         tracker._byteStore.put(pathKey, contentHashBytes);
       }
 
-      contentKey = hex.encode(contentHashBytes) + '.declarations';
+      contentKey = '${hex.encode(contentHashBytes)}.declarations';
     }
 
     var bytes = tracker._byteStore.get(contentKey);
diff --git a/pkg/analyzer/lib/src/source/custom_resolver.dart b/pkg/analyzer/lib/src/source/custom_resolver.dart
deleted file mode 100644
index c7fabf8..0000000
--- a/pkg/analyzer/lib/src/source/custom_resolver.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2016, 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:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/util/uri.dart';
-
-class CustomUriResolver extends UriResolver {
-  final ResourceProvider resourceProvider;
-  final Map<String, String> _urlMappings;
-
-  CustomUriResolver(this.resourceProvider, this._urlMappings);
-
-  @override
-  Source? resolveAbsolute(Uri uri) {
-    var mapping = _urlMappings[uri.toString()];
-    if (mapping == null) {
-      return null;
-    }
-    Uri fileUri = Uri.file(mapping);
-    if (!fileUri.isAbsolute) {
-      return null;
-    }
-    var pathContext = resourceProvider.pathContext;
-    var path = fileUriToNormalizedPath(pathContext, fileUri);
-    return resourceProvider.getFile(path).createSource(uri);
-  }
-}
diff --git a/pkg/analyzer/lib/src/source/source_resource.dart b/pkg/analyzer/lib/src/source/source_resource.dart
index 3e4adf7..275165b 100644
--- a/pkg/analyzer/lib/src/source/source_resource.dart
+++ b/pkg/analyzer/lib/src/source/source_resource.dart
@@ -44,9 +44,8 @@
   /// Initialize a newly created source object to represent the given [file]. If
   /// a [uri] is given, then it will be used as the URI from which the source
   /// was derived, otherwise a `file:` URI will be created based on the [file].
-  FileSource(File file, [Uri? uri])
+  FileSource(this.file, [Uri? uri])
       : uri = uri ?? file.toUri(),
-        file = file,
         id = _idTable.putIfAbsent(
             '${uri ?? file.toUri()}@${file.path}', () => _idTable.length);
 
@@ -100,11 +99,11 @@
   UriKind get uriKind => UriKind.fromScheme(uri.scheme);
 
   @override
-  bool operator ==(Object object) {
-    if (object is FileSource) {
-      return id == object.id;
-    } else if (object is Source) {
-      return uri == object.uri;
+  bool operator ==(Object other) {
+    if (other is FileSource) {
+      return id == other.id;
+    } else if (other is Source) {
+      return uri == other.uri;
     }
     return false;
   }
diff --git a/pkg/analyzer/lib/src/summary/flat_buffers.dart b/pkg/analyzer/lib/src/summary/flat_buffers.dart
index 80ba07c..1624f4c 100644
--- a/pkg/analyzer/lib/src/summary/flat_buffers.dart
+++ b/pkg/analyzer/lib/src/summary/flat_buffers.dart
@@ -627,9 +627,9 @@
   T createObject(BufferContext bc, int offset);
 
   @override
-  T read(BufferContext bp, int offset) {
-    int objectOffset = bp.derefObject(offset);
-    return createObject(bp, objectOffset);
+  T read(BufferContext bc, int offset) {
+    int objectOffset = bc.derefObject(offset);
+    return createObject(bc, objectOffset);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
deleted file mode 100644
index c2dbee3..0000000
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2016, 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.
-
-/// An instance of [DependencyWalker] contains the core algorithms for
-/// walking a dependency graph and evaluating nodes in a safe order.
-abstract class DependencyWalker<NodeType extends Node<NodeType>> {
-  /// Called by [walk] to evaluate a single non-cyclical node, after
-  /// all that node's dependencies have been evaluated.
-  void evaluate(NodeType v);
-
-  /// Called by [walk] to evaluate a strongly connected component
-  /// containing one or more nodes.  All dependencies of the strongly
-  /// connected component have been evaluated.
-  void evaluateScc(List<NodeType> scc);
-
-  /// Walk the dependency graph starting at [startingPoint], finding
-  /// strongly connected components and evaluating them in a safe order
-  /// by calling [evaluate] and [evaluateScc].
-  ///
-  /// This is an implementation of Tarjan's strongly connected
-  /// components algorithm
-  /// (https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm).
-  void walk(NodeType startingPoint) {
-    // TODO(paulberry): consider rewriting in a non-recursive way so
-    // that long dependency chains don't cause stack overflow.
-
-    // TODO(paulberry): in the event that an exception occurs during
-    // the walk, restore the state of the [Node] data structures so
-    // that further evaluation will be safe.
-
-    // The index which will be assigned to the next node that is
-    // freshly visited.
-    int index = 1;
-
-    // Stack of nodes which have been seen so far and whose strongly
-    // connected component is still being determined.  Nodes are only
-    // popped off the stack when they are evaluated, so sometimes the
-    // stack contains nodes that were visited after the current node.
-    List<NodeType> stack = <NodeType>[];
-
-    void strongConnect(NodeType node) {
-      bool hasTrivialCycle = false;
-
-      // Assign the current node an index and add it to the stack.  We
-      // haven't seen any of its dependencies yet, so set its lowLink
-      // to its index, indicating that so far it is the only node in
-      // its strongly connected component.
-      node._index = node._lowLink = index++;
-      stack.add(node);
-
-      // Consider the node's dependencies one at a time.
-      for (NodeType dependency in Node.getDependencies(node)) {
-        // If the dependency has already been evaluated, it can't be
-        // part of this node's strongly connected component, so we can
-        // skip it.
-        if (dependency.isEvaluated) {
-          continue;
-        }
-        if (identical(node, dependency)) {
-          // If a node includes itself as a dependency, there is no need to
-          // explore the dependency further.
-          hasTrivialCycle = true;
-        } else if (dependency._index == 0) {
-          // The dependency hasn't been seen yet, so recurse on it.
-          strongConnect(dependency);
-          // If the dependency's lowLink refers to a node that was
-          // visited before the current node, that means that the
-          // current node, the dependency, and the node referred to by
-          // the dependency's lowLink are all part of the same
-          // strongly connected component, so we need to update the
-          // current node's lowLink accordingly.
-          if (dependency._lowLink < node._lowLink) {
-            node._lowLink = dependency._lowLink;
-          }
-        } else {
-          // The dependency has already been seen, so it is part of
-          // the current node's strongly connected component.  If it
-          // was visited earlier than the current node's lowLink, then
-          // it is a new addition to the current node's strongly
-          // connected component, so we need to update the current
-          // node's lowLink accordingly.
-          if (dependency._index < node._lowLink) {
-            node._lowLink = dependency._index;
-          }
-        }
-      }
-
-      // If the current node's lowLink is the same as its index, then
-      // we have finished visiting a strongly connected component, so
-      // pop the stack and evaluate it before moving on.
-      if (node._lowLink == node._index) {
-        // The strongly connected component has only one node.  If there is a
-        // cycle, it's a trivial one.
-        if (identical(stack.last, node)) {
-          stack.removeLast();
-          if (hasTrivialCycle) {
-            evaluateScc(<NodeType>[node]);
-          } else {
-            evaluate(node);
-          }
-        } else {
-          // There are multiple nodes in the strongly connected
-          // component.
-          List<NodeType> scc = <NodeType>[];
-          while (true) {
-            NodeType otherNode = stack.removeLast();
-            scc.add(otherNode);
-            if (identical(otherNode, node)) {
-              break;
-            }
-          }
-          evaluateScc(scc);
-        }
-      }
-    }
-
-    // Kick off the algorithm starting with the starting point.
-    strongConnect(startingPoint);
-  }
-}
-
-/// Instances of [Node] represent nodes in a dependency graph.  The
-/// type parameter, [NodeType], is the derived type (this affords some
-/// extra type safety by making it difficult to accidentally construct
-/// bridges between unrelated dependency graphs).
-abstract class Node<NodeType> {
-  /// Index used by Tarjan's strongly connected components algorithm.
-  /// Zero means the node has not been visited yet; a nonzero value
-  /// counts the order in which the node was visited.
-  int _index = 0;
-
-  /// Low link used by Tarjan's strongly connected components
-  /// algorithm.  This represents the smallest [_index] of all the nodes
-  /// in the strongly connected component to which this node belongs.
-  int _lowLink = 0;
-
-  List<NodeType>? _dependencies;
-
-  /// Indicates whether this node has been evaluated yet.
-  bool get isEvaluated;
-
-  /// Compute the dependencies of this node.
-  List<NodeType> computeDependencies();
-
-  /// Gets the dependencies of the given node, computing them if necessary.
-  static List<NodeType> getDependencies<NodeType>(Node<NodeType> node) {
-    return node._dependencies ??= node.computeDependencies();
-  }
-}
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index f9c96037..635bb96 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -4,9 +4,7 @@
 
 import 'dart:io' as io;
 import 'dart:math' show min;
-import 'dart:typed_data';
 
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
@@ -121,16 +119,6 @@
   final Set<String> _libraryUris = <String>{};
   final Set<String> _partUris = <String>{};
 
-  /// Create a [SummaryDataStore] and populate it with the summaries in
-  /// [summaryPaths].
-  @Deprecated('Use tmp() and addBundle() instead')
-  SummaryDataStore(Iterable<String> summaryPaths,
-      {ResourceProvider? resourceProvider}) {
-    summaryPaths.forEach((String path) => _fillMaps(path, resourceProvider));
-  }
-
-  SummaryDataStore.tmp();
-
   /// Add the given [bundle] loaded from the file with the given [path].
   void addBundle(String? path, PackageBundleReader bundle) {
     bundles.add(bundle);
@@ -164,17 +152,4 @@
   bool isPartUnit(String uri) {
     return _partUris.contains(uri);
   }
-
-  void _fillMaps(String path, ResourceProvider? resourceProvider) {
-    Uint8List bytes;
-    if (resourceProvider != null) {
-      var file = resourceProvider.getFile(path);
-      bytes = file.readAsBytesSync();
-    } else {
-      io.File file = io.File(path);
-      bytes = file.readAsBytesSync();
-    }
-    var bundle = PackageBundleReader(bytes);
-    addBundle(path, bundle);
-  }
 }
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index 3713497..d48a21f 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -17,7 +17,7 @@
   late final InSummaryUriResolver _uriResolver;
 
   SummaryBasedDartSdk.forBundle(this._bundle) {
-    var dataStore = SummaryDataStore.tmp();
+    var dataStore = SummaryDataStore();
     // TODO(scheglov) We need a solution to avoid these paths at all.
     dataStore.addBundle('', bundle);
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index df1bb2d..be75c39 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -270,13 +270,13 @@
   }
 
   BinaryExpression _readBinaryExpression() {
-    var leftOperand = readNode() as Expression;
-    var rightOperand = readNode() as Expression;
+    var leftOperand = readNode() as ExpressionImpl;
+    var rightOperand = readNode() as ExpressionImpl;
     var operatorType = UnlinkedTokenType.values[_readByte()];
-    var node = astFactory.binaryExpression(
-      leftOperand,
-      Tokens.fromType(operatorType),
-      rightOperand,
+    var node = BinaryExpressionImpl(
+      leftOperand: leftOperand,
+      operator: Tokens.fromType(operatorType),
+      rightOperand: rightOperand,
     );
     node.staticElement = _reader.readElement() as MethodElement?;
     node.staticInvokeType = _reader.readOptionalFunctionType();
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 6400c29..b58c5c6 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -186,7 +186,7 @@
 
   void read(ElementImpl element) {
     if (_offset == -1) {
-      return null;
+      return;
     }
 
     var dataReader = _libraryReader._reader.fork(_offset);
@@ -1180,9 +1180,11 @@
     var unitUri = Uri.parse(unitUriStr);
     var unitSource = sourceFactory.forUri2(unitUri)!;
 
-    var unitElement = CompilationUnitElementImpl();
-    unitElement.source = unitSource;
-    unitElement.librarySource = librarySource;
+    var unitElement = CompilationUnitElementImpl(
+      source: unitSource,
+      librarySource: librarySource,
+      lineInfo: LineInfo([0]),
+    );
 
     var unitReference = unitContainerRef.getChild(unitUriStr);
     unitElement.setLinkedData(
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index a8fdcde..c27ae0c 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -98,6 +98,7 @@
 
     var element = ClassElementImpl(name, nameNode.offset);
     element.isAbstract = node.isAbstract;
+    element.isMacro = node.macroKeyword != null;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
@@ -130,6 +131,7 @@
 
     var element = ClassElementImpl(name, nameNode.offset);
     element.isAbstract = node.isAbstract;
+    element.isMacro = node.macroKeyword != null;
     element.isMixinApplication = true;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
@@ -1116,7 +1118,7 @@
       _visitPropertyFirst<FieldDeclaration>(node.members);
     });
 
-    if (holder.constructors.isEmpty) {
+    if (node is ClassDeclaration && holder.constructors.isEmpty) {
       holder.addConstructor(
         ConstructorElementImpl('', -1)..isSynthetic = true,
       );
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index 201c671..945b4ab 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -8,12 +8,14 @@
 
 class ClassElementFlags {
   static const int _isAbstract = 1 << 0;
-  static const int _isMixinApplication = 1 << 1;
-  static const int _isSimplyBounded = 1 << 2;
+  static const int _isMacro = 1 << 1;
+  static const int _isMixinApplication = 1 << 2;
+  static const int _isSimplyBounded = 1 << 3;
 
   static void read(SummaryDataReader reader, ClassElementImpl element) {
     var byte = reader.readByte();
     element.isAbstract = (byte & _isAbstract) != 0;
+    element.isMacro = (byte & _isMacro) != 0;
     element.isMixinApplication = (byte & _isMixinApplication) != 0;
     element.isSimplyBounded = (byte & _isSimplyBounded) != 0;
   }
@@ -21,6 +23,7 @@
   static void write(BufferedSink sink, ClassElementImpl element) {
     var result = 0;
     result |= element.isAbstract ? _isAbstract : 0;
+    result |= element.isMacro ? _isMacro : 0;
     result |= element.isMixinApplication ? _isMixinApplication : 0;
     result |= element.isSimplyBounded ? _isSimplyBounded : 0;
     sink.writeByte(result);
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index e2bf8ca..2cb8c14 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -134,6 +134,8 @@
           unitInfo.genericTypeAliases,
           _applyToGenericTypeAlias,
         );
+      } else {
+        unitElement.lineInfo = LineInfo([0]);
       }
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 36f7c25..ee3209b 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -265,11 +265,12 @@
     for (var inputUnit in inputLibrary.units) {
       var unitNode = inputUnit.unit as ast.CompilationUnitImpl;
 
-      var unitElement = CompilationUnitElementImpl();
+      var unitElement = CompilationUnitElementImpl(
+        source: inputUnit.source,
+        librarySource: inputLibrary.source,
+        lineInfo: unitNode.lineInfo,
+      );
       unitElement.isSynthetic = inputUnit.isSynthetic;
-      unitElement.librarySource = inputLibrary.source;
-      unitElement.lineInfo = unitNode.lineInfo;
-      unitElement.source = inputUnit.source;
       unitElement.uri = inputUnit.partUriStr;
       unitElement.setCodeRange(0, unitNode.length);
 
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 4526d92..af9b7da 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -26,6 +26,7 @@
 var timerLinkingLinkingBundle = Stopwatch();
 
 /// Note that AST units and tokens of [inputLibraries] will be damaged.
+@Deprecated('Use link2() instead')
 LinkResult link(
   LinkedElementFactory elementFactory,
   List<LinkInputLibrary> inputLibraries,
@@ -37,6 +38,18 @@
   );
 }
 
+/// Note that AST units and tokens of [inputLibraries] will be damaged.
+Future<LinkResult> link2(
+  LinkedElementFactory elementFactory,
+  List<LinkInputLibrary> inputLibraries,
+) async {
+  var linker = Linker(elementFactory);
+  linker.link(inputLibraries);
+  return LinkResult(
+    resolutionBytes: linker.resolutionBytes,
+  );
+}
+
 class Linker {
   final LinkedElementFactory elementFactory;
 
@@ -61,6 +74,11 @@
 
   Reference get rootReference => elementFactory.rootReference;
 
+  bool get _isLinkingDartCore {
+    var dartCoreUri = Uri.parse('dart:core');
+    return builders.containsKey(dartCoreUri);
+  }
+
   /// If the [element] is part of a library being linked, return the node
   /// from which it was created.
   ast.AstNode? getLinkingNode(Element element) {
@@ -86,6 +104,7 @@
   }
 
   void _buildOutlines() {
+    _createTypeSystemIfNotLinkingDartCore();
     _computeLibraryScopes();
     _createTypeSystem();
     _resolveTypes();
@@ -168,6 +187,15 @@
     inheritance = InheritanceManager3();
   }
 
+  /// To resolve macro annotations we need to access exported namespaces of
+  /// imported (and already linked) libraries. While computing it we might
+  /// need `Null` from `dart:core` (to convert null safe types to legacy).
+  void _createTypeSystemIfNotLinkingDartCore() {
+    if (!_isLinkingDartCore) {
+      _createTypeSystem();
+    }
+  }
+
   void _detachNodes() {
     for (var builder in builders.values) {
       detachElementsFromNodes(builder.element);
diff --git a/pkg/analyzer/lib/src/summary2/macro.dart b/pkg/analyzer/lib/src/summary2/macro.dart
new file mode 100644
index 0000000..a3502d0
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/macro.dart
@@ -0,0 +1,50 @@
+// 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:typed_data';
+
+import 'package:path/path.dart' as package_path;
+
+class MacroClass {
+  final String name;
+  final List<String> constructors;
+
+  MacroClass({
+    required this.name,
+    required this.constructors,
+  });
+}
+
+abstract class MacroFileEntry {
+  String get content;
+
+  /// When CFE searches for `package_config.json` we need to check this.
+  bool get exists;
+}
+
+abstract class MacroFileSystem {
+  /// Used to convert `file:` URIs into paths.
+  package_path.Context get pathContext;
+
+  MacroFileEntry getFile(String path);
+}
+
+abstract class MacroKernelBuilder {
+  Uint8List build({
+    required MacroFileSystem fileSystem,
+    required List<MacroLibrary> libraries,
+  });
+}
+
+class MacroLibrary {
+  final Uri uri;
+  final String path;
+  final List<MacroClass> classes;
+
+  MacroLibrary({
+    required this.uri,
+    required this.path,
+    required this.classes,
+  });
+}
diff --git a/pkg/analyzer/lib/src/summary2/simply_bounded.dart b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
index 0fe77da..660df6f 100644
--- a/pkg/analyzer/lib/src/summary2/simply_bounded.dart
+++ b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
@@ -2,11 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 import 'package:analyzer/src/summary2/link.dart';
 
 /// Compute simple-boundedness for all classes and generic types aliases in
@@ -37,9 +37,7 @@
   }
 
   for (var node in nodes) {
-    if (!node.isEvaluated) {
-      walker.walk(node);
-    }
+    walker.walk(node);
     var node2 = node._node;
     if (node2 is ClassOrMixinDeclaration) {
       var element = node2.declaredElement as ClassElementImpl;
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 993aa69..50db402 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -2,6 +2,8 @@
 // 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:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph
+    show DependencyWalker, Node;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -13,8 +15,6 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/summary/link.dart' as graph
-    show DependencyWalker, Node;
 import 'package:analyzer/src/summary2/ast_resolver.dart';
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/linking_node_scope.dart';
@@ -140,7 +140,7 @@
 
 class _ConstructorInferenceNode extends _InferenceNode {
   final _InferenceWalker _walker;
-  final ConstructorElement _constructor;
+  final ConstructorElementImpl _constructor;
   final List<_FieldFormalParameter> _fieldParameters = [];
   final List<_SuperFormalParameter> _superParameters = [];
 
@@ -199,11 +199,14 @@
   List<_InferenceNode> computeDependencies() {
     var dependencies = [
       ..._fieldParameters.map((e) => _walker.getNode(e.field)).whereNotNull(),
-      ..._superParameters
-          .map((e) => _walker.getNode(e.superParameter))
-          .whereNotNull(),
     ];
 
+    if (_superParameters.isNotEmpty) {
+      dependencies.addIfNotNull(
+        _walker.getNode(_constructor.superConstructor?.declaration),
+      );
+    }
+
     dependencies.addIfNotNull(
       _walker.getNode(_baseConstructor?.element),
     );
@@ -224,12 +227,11 @@
     // Update types of a mixin application constructor formal parameters.
     var baseConstructor = _baseConstructor;
     if (baseConstructor != null) {
-      var constructor = _constructor as ConstructorElementImpl;
       var substitution = Substitution.fromInterfaceType(
         baseConstructor.superType,
       );
       forCorrespondingPairs<ParameterElement, ParameterElement>(
-        constructor.parameters,
+        _constructor.parameters,
         baseConstructor.element.parameters,
         (parameter, baseParameter) {
           var type = substitution.substituteType(baseParameter.type);
@@ -239,10 +241,10 @@
       // Update arguments of `SuperConstructorInvocation` to have the types
       // (which we have just set) of the corresponding formal parameters.
       // MixinApp(x, y) : super(x, y);
-      var initializers = constructor.constantInitializers;
+      var initializers = _constructor.constantInitializers;
       var initializer = initializers.single as SuperConstructorInvocation;
       forCorrespondingPairs<ParameterElement, Expression>(
-        constructor.parameters,
+        _constructor.parameters,
         initializer.argumentList.arguments,
         (parameter, argument) {
           (argument as SimpleIdentifierImpl).staticType = parameter.type;
@@ -329,9 +331,7 @@
 
   void walkNodes() {
     for (var node in _nodes.values) {
-      if (!node.isEvaluated) {
-        walk(node);
-      }
+      walk(node);
     }
   }
 }
@@ -370,6 +370,7 @@
 
   void _addClassConstructorFieldFormals(ClassElement class_) {
     for (var constructor in class_.constructors) {
+      constructor as ConstructorElementImpl;
       var inferenceNode = _ConstructorInferenceNode(_walker, constructor);
       _walker._nodes[constructor] = inferenceNode;
     }
@@ -421,9 +422,7 @@
 
   @override
   void perform() {
-    if (!_node.isEvaluated) {
-      _node._walker.walk(_node);
-    }
+    _node._walker.walk(_node);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 682acc6..ea2f3f4 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -2,11 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
+import 'package:analyzer/src/analysis_options/code_style_options.dart';
 import 'package:analyzer/src/analysis_options/error/option_codes.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -120,6 +122,7 @@
   static const String enablePreviewDart2 = 'enablePreviewDart2';
 
   static const String cannotIgnore = 'cannot-ignore';
+  static const String codeStyle = 'code-style';
   static const String enableExperiment = 'enable-experiment';
   static const String errors = 'errors';
   static const String exclude = 'exclude';
@@ -142,6 +145,9 @@
   static const String strictInference = 'strict-inference';
   static const String strictRawTypes = 'strict-raw-types';
 
+  // Code style options
+  static const String format = 'format';
+
   /// Ways to say `ignore`.
   static const List<String> ignoreSynonyms = ['ignore', 'false'];
 
@@ -188,6 +194,11 @@
     chromeOsManifestChecks,
   ];
 
+  /// Supported 'code-style' options.
+  static const List<String> codeStyleOptions = [
+    format,
+  ];
+
   /// Proposed values for a `true` or `false` option.
   static String get trueOrFalseProposal =>
       AnalyzerOptions.trueOrFalse.quotedAndCommaSeparatedWithAnd;
@@ -265,6 +276,61 @@
   }
 }
 
+/// Validates `code-style` options.
+class CodeStyleOptionsValidator extends OptionsValidator {
+  @override
+  void validate(ErrorReporter reporter, YamlMap options) {
+    var codeStyle = options.valueAt(AnalyzerOptions.codeStyle);
+    if (codeStyle is YamlMap) {
+      codeStyle.nodeMap.forEach((keyNode, valueNode) {
+        var key = keyNode.value;
+        if (key == AnalyzerOptions.format) {
+          _validateFormat(reporter, valueNode);
+        } else {
+          reporter.reportErrorForSpan(
+              AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES,
+              keyNode.span,
+              [AnalyzerOptions.codeStyle, keyNode.toString()]);
+        }
+      });
+    } else if (codeStyle is YamlScalar && codeStyle.value != null) {
+      reporter.reportErrorForSpan(
+          AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+          codeStyle.span,
+          [AnalyzerOptions.codeStyle]);
+    } else if (codeStyle is YamlList) {
+      reporter.reportErrorForSpan(
+          AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+          codeStyle.span,
+          [AnalyzerOptions.codeStyle]);
+    }
+  }
+
+  void _validateFormat(ErrorReporter reporter, YamlNode format) {
+    if (format is YamlMap) {
+      reporter.reportErrorForSpan(
+          AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+          format.span,
+          [AnalyzerOptions.format]);
+    } else if (format is YamlScalar) {
+      var formatValue = toBool(format.value);
+      if (formatValue == null) {
+        reporter.reportErrorForSpan(
+            AnalysisOptionsWarningCode.UNSUPPORTED_VALUE, format.span, [
+          AnalyzerOptions.format,
+          format.value,
+          AnalyzerOptions.trueOrFalseProposal
+        ]);
+      }
+    } else if (format is YamlList) {
+      reporter.reportErrorForSpan(
+          AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+          format.span,
+          [AnalyzerOptions.format]);
+    }
+  }
+}
+
 /// Convenience class for composing validators.
 class CompositeValidator extends OptionsValidator {
   final List<OptionsValidator> validators;
@@ -272,8 +338,11 @@
   CompositeValidator(this.validators);
 
   @override
-  void validate(ErrorReporter reporter, YamlMap options) =>
-      validators.forEach((v) => v.validate(reporter, options));
+  void validate(ErrorReporter reporter, YamlMap options) {
+    for (var validator in validators) {
+      validator.validate(reporter, options);
+    }
+  }
 }
 
 /// Validates `analyzer` language configuration options.
@@ -537,6 +606,7 @@
 
   final List<OptionsValidator> _validators = [
     AnalyzerOptionsValidator(),
+    CodeStyleOptionsValidator(),
     LinterOptionsValidator(),
     LinterRuleOptionsValidator()
   ];
@@ -550,7 +620,9 @@
       source,
       isNonNullableByDefault: false,
     );
-    _validators.forEach((OptionsValidator v) => v.validate(reporter, options));
+    for (var validator in _validators) {
+      validator.validate(reporter, options);
+    }
     return recorder.errors;
   }
 }
@@ -731,6 +803,10 @@
       options.enabledPluginNames = pluginNames;
     }
 
+    // Process the 'code-style' option.
+    var codeStyle = optionMap.valueAt(AnalyzerOptions.codeStyle);
+    options.codeStyleOptions = _buildCodeStyleOptions(options, codeStyle);
+
     var config = parseConfig(optionMap);
     if (config != null) {
       Iterable<LintRule> lintRules = Registry.ruleRegistry.enabled(config);
@@ -866,6 +942,21 @@
     }
   }
 
+  CodeStyleOptions _buildCodeStyleOptions(
+      AnalysisOptionsImpl options, YamlNode? config) {
+    var useFormatter = false;
+    if (config is YamlMap) {
+      var formatNode = config.valueAt(AnalyzerOptions.format);
+      if (formatNode != null) {
+        var formatValue = toBool(formatNode);
+        if (formatValue is bool) {
+          useFormatter = formatValue;
+        }
+      }
+    }
+    return CodeStyleOptionsImpl(options, useFormatter: useFormatter);
+  }
+
   String? _toString(YamlNode? node) {
     if (node is YamlScalar) {
       var value = node.value;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index d137ec9..674c573 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -499,7 +499,7 @@
         }
       }
     }
-    throw StateError('$name');
+    throw StateError(name);
   }
 
   TryStatement tryStatement(String search) {
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index d1cb139..ba0dc02 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -71,6 +71,8 @@
   }
   static void run(void callback()) {}
 }
+
+void unawaited(Future<void>? future) {}
 ''',
   ),
   MockSdkLibraryUnit(
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index f289112..bfd8020 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -860,19 +861,12 @@
   }
 
   LibraryElementImpl _buildAsync() {
-    var asyncLibrary = LibraryElementImpl(
-      analysisContext,
-      analysisSession,
-      'dart.async',
-      0,
-      0,
-      FeatureSet.latestLanguageVersion(),
-    );
-
-    var asyncUnit = CompilationUnitElementImpl();
     var asyncSource = analysisContext.sourceFactory.forUri('dart:async')!;
-    asyncUnit.librarySource = asyncUnit.source = asyncSource;
-    asyncLibrary.definingCompilationUnit = asyncUnit;
+    var asyncUnit = CompilationUnitElementImpl(
+      source: asyncSource,
+      librarySource: asyncSource,
+      lineInfo: LineInfo([0]),
+    );
 
     asyncUnit.classes = <ClassElement>[
       completerElement,
@@ -882,14 +876,26 @@
       streamSubscriptionElement
     ];
 
+    var asyncLibrary = LibraryElementImpl(
+      analysisContext,
+      analysisSession,
+      'dart.async',
+      0,
+      0,
+      FeatureSet.latestLanguageVersion(),
+    );
+    asyncLibrary.definingCompilationUnit = asyncUnit;
+
     return asyncLibrary;
   }
 
   LibraryElementImpl _buildCore() {
-    var coreUnit = CompilationUnitElementImpl();
-
     var coreSource = analysisContext.sourceFactory.forUri('dart:core')!;
-    coreUnit.librarySource = coreUnit.source = coreSource;
+    var coreUnit = CompilationUnitElementImpl(
+      source: coreSource,
+      librarySource: coreSource,
+      lineInfo: LineInfo([0]),
+    );
 
     coreUnit.classes = <ClassElement>[
       boolElement,
diff --git a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
index 867272e..dadf358 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -64,22 +64,27 @@
     resourceProvider.modifyFile(convertedPath, content);
   }
 
+  @Deprecated('Use newAnalysisOptionsYamlFile2() instead')
   File newAnalysisOptionsYamlFile(String directoryPath, {String content = ''}) {
+    return newAnalysisOptionsYamlFile2(directoryPath, content);
+  }
+
+  File newAnalysisOptionsYamlFile2(String directoryPath, String content) {
     String path = join(directoryPath, file_paths.analysisOptionsYaml);
-    return newFile(path, content: content);
+    return newFile2(path, content);
   }
 
   File newBazelBuildFile(String directoryPath, String content) {
     String path = join(directoryPath, file_paths.bazelBuild);
-    return newFile(path, content: content);
+    return newFile2(path, content);
   }
 
-  File newDotPackagesFile(String directoryPath, {String content = ''}) {
-    String path = join(directoryPath, file_paths.dotPackages);
-    return newFile(path, content: content);
-  }
-
+  @Deprecated('Use newFile2() instead')
   File newFile(String path, {String content = ''}) {
+    return newFile2(path, content);
+  }
+
+  File newFile2(String path, String content) {
     String convertedPath = convertPath(path);
     return resourceProvider.newFile(convertedPath, content);
   }
@@ -89,18 +94,18 @@
     return resourceProvider.newFolder(convertedPath);
   }
 
-  File newPackageConfigJsonFile(String directoryPath, {String content = ''}) {
+  File newPackageConfigJsonFile(String directoryPath, String content) {
     String path = join(
       directoryPath,
       file_paths.dotDartTool,
       file_paths.packageConfigJson,
     );
-    return newFile(path, content: content);
+    return newFile2(path, content);
   }
 
   File newPubspecYamlFile(String directoryPath, String content) {
     String path = join(directoryPath, file_paths.pubspecYaml);
-    return newFile(path, content: content);
+    return newFile2(path, content);
   }
 
   Uri toUri(String path) {
diff --git a/pkg/analyzer/lib/src/util/file_paths.dart b/pkg/analyzer/lib/src/util/file_paths.dart
index 08b1e22..85d865f 100644
--- a/pkg/analyzer/lib/src/util/file_paths.dart
+++ b/pkg/analyzer/lib/src/util/file_paths.dart
@@ -19,9 +19,6 @@
 /// The name of the `.dart_tool` directory.
 const String dotDartTool = '.dart_tool';
 
-/// File name of package spec files.
-const String dotPackages = '.packages';
-
 /// The name of the data file used to specify data-driven fixes.
 const String fixDataYaml = 'fix_data.yaml';
 
@@ -59,11 +56,6 @@
   return pathContext.extension(path) == '.dart';
 }
 
-/// Return `true` if [path] is a `.packages` file.
-bool isDotPackages(p.Context pathContext, String path) {
-  return pathContext.basename(path) == dotPackages;
-}
-
 /// Return `true` if the [path] is a `fix_data.yaml` file.
 /// Such files specify data-driven fixes.
 bool isFixDataYaml(p.Context pathContext, String path) {
diff --git a/pkg/analyzer/lib/src/workspace/basic.dart b/pkg/analyzer/lib/src/workspace/basic.dart
index eb412f9..81697c4 100644
--- a/pkg/analyzer/lib/src/workspace/basic.dart
+++ b/pkg/analyzer/lib/src/workspace/basic.dart
@@ -47,7 +47,7 @@
   ) {
     Resource resource = provider.getResource(path);
     if (resource is File) {
-      path = resource.parent2.path;
+      path = resource.parent.path;
     }
     return BasicWorkspace._(provider, packageMap, path);
   }
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index 7350937..6da9eb6 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -22,9 +22,7 @@
 class BazelFileUriResolver extends ResourceUriResolver {
   final BazelWorkspace workspace;
 
-  BazelFileUriResolver(BazelWorkspace workspace)
-      : workspace = workspace,
-        super(workspace.provider);
+  BazelFileUriResolver(this.workspace) : super(workspace.provider);
 
   @override
   Source? resolveAbsolute(Uri uri) {
@@ -447,7 +445,7 @@
     var context = provider.pathContext;
     var startFolder = provider.getFolder(filePath);
     for (var folder in startFolder.withAncestors) {
-      var parent = folder.parent2;
+      var parent = folder.parent;
 
       // Found the READONLY folder, might be a git-based workspace.
       Folder readonlyFolder = parent.getChildAssumingFolder(_READONLY);
diff --git a/pkg/analyzer/lib/src/workspace/gn.dart b/pkg/analyzer/lib/src/workspace/gn.dart
index 8ebed62..3bc7b3e 100644
--- a/pkg/analyzer/lib/src/workspace/gn.dart
+++ b/pkg/analyzer/lib/src/workspace/gn.dart
@@ -75,8 +75,8 @@
   }
 
   @override
-  WorkspacePackage? findPackageFor(String path) {
-    var startFolder = provider.getFolder(path);
+  WorkspacePackage? findPackageFor(String filePath) {
+    var startFolder = provider.getFolder(filePath);
     for (var folder in startFolder.withAncestors) {
       if (folder.path.length < root.length) {
         // We've walked up outside of [root], so [path] is definitely not
@@ -99,7 +99,7 @@
   static GnWorkspace? find(ResourceProvider provider, String filePath) {
     Resource resource = provider.getResource(filePath);
     if (resource is File) {
-      filePath = resource.parent2.path;
+      filePath = resource.parent.path;
     }
 
     var startFolder = provider.getFolder(filePath);
diff --git a/pkg/analyzer/lib/src/workspace/package_build.dart b/pkg/analyzer/lib/src/workspace/package_build.dart
index c30333e..a43ef0a 100644
--- a/pkg/analyzer/lib/src/workspace/package_build.dart
+++ b/pkg/analyzer/lib/src/workspace/package_build.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/uri.dart';
 import 'package:analyzer/src/workspace/pub.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
@@ -23,9 +24,7 @@
 class PackageBuildFileUriResolver extends ResourceUriResolver {
   final PackageBuildWorkspace workspace;
 
-  PackageBuildFileUriResolver(PackageBuildWorkspace workspace)
-      : workspace = workspace,
-        super(workspace.provider);
+  PackageBuildFileUriResolver(this.workspace) : super(workspace.provider);
 
   @override
   Source? resolveAbsolute(Uri uri) {
@@ -136,10 +135,6 @@
     'generated'
   ];
 
-  /// We use pubspec.yaml to get the package name to be consistent with how
-  /// package:build does it.
-  static const String _pubspecName = 'pubspec.yaml';
-
   /// The associated pubspec file.
   final File _pubspecFile;
 
@@ -273,17 +268,17 @@
   }
 
   @override
-  PackageBuildWorkspacePackage? findPackageFor(String path) {
+  PackageBuildWorkspacePackage? findPackageFor(String filePath) {
     var pathContext = provider.pathContext;
 
     // Must be in this workspace.
-    if (!pathContext.isWithin(root, path)) {
+    if (!pathContext.isWithin(root, filePath)) {
       return null;
     }
 
     // If generated, must be for this package.
-    if (pathContext.isWithin(generatedRootPath, path)) {
-      if (!pathContext.isWithin(generatedThisPath, path)) {
+    if (pathContext.isWithin(generatedRootPath, filePath)) {
+      if (!pathContext.isWithin(generatedThisPath, filePath)) {
         return null;
       }
     }
@@ -298,7 +293,7 @@
       Map<String, List<Folder>> packageMap, String filePath) {
     var startFolder = provider.getFolder(filePath);
     for (var folder in startFolder.withAncestors) {
-      final File pubspec = folder.getChildAssumingFile(_pubspecName);
+      final File pubspec = folder.getChildAssumingFile(file_paths.pubspecYaml);
       final Folder dartToolDir =
           folder.getChildAssumingFolder(_dartToolRootName);
       final Folder dartToolBuildDir =
diff --git a/pkg/analyzer/lib/src/workspace/pub.dart b/pkg/analyzer/lib/src/workspace/pub.dart
index 1d83253..a6e66ce 100644
--- a/pkg/analyzer/lib/src/workspace/pub.dart
+++ b/pkg/analyzer/lib/src/workspace/pub.dart
@@ -7,15 +7,13 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/pub.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/workspace/simple.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
 import 'package:meta/meta.dart';
 
 /// Information about a Pub workspace.
 class PubWorkspace extends SimpleWorkspace {
-  /// The name of the file that identifies the root of the workspace.
-  static const String _pubspecName = 'pubspec.yaml';
-
   /// The singular package in this workspace.
   ///
   /// Each Pub workspace is itself one package.
@@ -68,7 +66,7 @@
   ) {
     var start = provider.getFolder(filePath);
     for (var current in start.withAncestors) {
-      var pubspec = current.getChildAssumingFile(_pubspecName);
+      var pubspec = current.getChildAssumingFile(file_paths.pubspecYaml);
       if (pubspec.exists) {
         var root = current.path;
         return PubWorkspace._(provider, packageMap, root, pubspec);
diff --git a/pkg/analyzer/lib/src/workspace/workspace.dart b/pkg/analyzer/lib/src/workspace/workspace.dart
index 035744b..58c019a 100644
--- a/pkg/analyzer/lib/src/workspace/workspace.dart
+++ b/pkg/analyzer/lib/src/workspace/workspace.dart
@@ -41,12 +41,12 @@
   SourceFactory createSourceFactory(
       DartSdk? sdk, SummaryDataStore? summaryData);
 
-  /// Find the [WorkspacePackage] where the library at [path] is defined.
+  /// Find the [WorkspacePackage] where the library at [filePath] is defined.
   ///
   /// Separate from [Packages] or [packageMap], this method is designed to find
   /// the package, by its root, in which a library at an arbitrary path is
   /// defined.
-  WorkspacePackage? findPackageFor(String path);
+  WorkspacePackage? findPackageFor(String filePath);
 }
 
 /// Abstract superclass of classes that provide information about a package
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 477c268..372e4e8 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -1554,6 +1554,37 @@
   NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
     problemMessage: Generative enum constructors must be 'const'.
     correctionMessage: Try adding the keyword 'const'.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an enum declaration contains a
+      generative constructor that isn't marked as `const`.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the constructor in `E`
+      isn't marked as being `const`:
+      
+      ```dart
+      enum E {
+        e;
+      
+        [!E!]();
+      }
+      ```
+      
+      #### Common fixes
+      
+      Add the `const` keyword before the constructor:
+      
+      ```dart
+      enum E {
+        e;
+      
+        const E();
+      }
+      ```
   NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as keys in a 'const' map literal."
@@ -1638,6 +1669,54 @@
   CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
     problemMessage: "Concrete classes can't have 'Enum' as a superinterface."
     correctionMessage: Try specifying a different interface, or remove it from the list.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a concrete class indirectly has
+      the class `Enum` as a superinterface.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the concrete class `B`
+      has `Enum` as a superinterface as a result of implementing `A`:
+      
+      ```dart
+      abstract class A implements Enum {}
+      
+      class [!B!] implements A {}
+      ```
+      
+      #### Common fixes
+      
+      If the implemented class isn't the class you intend to implement, then
+      change it:
+      
+      ```dart
+      abstract class A implements Enum {}
+      
+      class B implements C {}
+      
+      class C {}
+      ```
+      
+      If the implemented class can be changed to not implement `Enum`, then do
+      so:
+      
+      ```dart
+      abstract class A {}
+      
+      class B implements A {}
+      ```
+      
+      If the implemented class can't be changed to not implement `Enum`, then
+      remove it from the `implements` clause:
+      
+      ```dart
+      abstract class A implements Enum {}
+      
+      class B {}
+      ```
   CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
     problemMessage: "'{0}' must have a method body because '{1}' isn't abstract."
     correctionMessage: "Try making '{1}' abstract, or adding a body to '{0}'."
@@ -3451,24 +3530,158 @@
       }
       ```
   ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR:
-    problemMessage: The invoked constructor isn't a const constructor.
-    correctionMessage: Try invoking a const generative constructor.
+    problemMessage: The invoked constructor isn't a 'const' constructor.
+    correctionMessage: Try invoking a 'const' generative constructor.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an enum constant is being
+      created using either a factory constructor or a generative constructor
+      that isn't marked as being `const`.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the enum constant `e`
+      is being initialized by a factory constructor:
+      
+      ```dart
+      enum E {
+        [!e!]();
+      
+        factory E() => e;
+      }
+      ```
+      
+      #### Common fixes
+      
+      Use a generative constructor marked as `const`:
+      
+      ```dart
+      enum E {
+        e._();
+      
+        factory E() => e;
+      
+        const E._();
+      }
+      ```
   ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
     problemMessage: The result of instantiating the enum to bounds is not well-bounded.
     correctionMessage: Try using different bounds for type parameters.
   ENUM_MIXIN_WITH_INSTANCE_VARIABLE:
     problemMessage: Mixins applied to enums can't have instance variables.
     correctionMessage: Try replacing the instance variables with getters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a mixin that's applied to an
+      enum declares one or more instance variables. This isn't allowed because
+      the enum constants are constant, and there isn't any way for the
+      constructor in the enum to initialize any of the mixin's fields.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the mixin `M` defines
+      the instance field `x`:
+      
+      ```dart
+      mixin M {
+        int x = 0;
+      }
+      
+      enum E with [!M!] {
+        a
+      }
+      ```
+      
+      #### Common fixes
+      
+      If you need to apply the mixin, then change all instance fields into
+      getter and setter pairs and implement them in the enum if necessary:
+      
+      ```dart
+      mixin M {
+        int get x => 0;
+      }
+      
+      enum E with M {
+        a
+      }
+      ```
+      
+      If you don't need to apply the mixin, then remove it:
+      
+      ```dart
+      enum E {
+        a
+      }
+      ```
   ENUM_WITH_ABSTRACT_MEMBER:
     problemMessage: "'{0}' must have a method body because '{1}' is an enum."
     correctionMessage: "Try adding a body to '{0}'."
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the abstract method
       1: the name of the enclosing enum
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a member of an enum is found
+      that doesn't have a concrete implementation. Enums aren't allowed to
+      contain abstract members.
+      
+      #### Example
+      
+      The following code produces this diagnostic because `m` is an abstract
+      method and `E` is an enum:
+      
+      ```dart
+      enum E {
+        e;
+      
+        [!void m();!]
+      }
+      ```
+      
+      #### Common fixes
+      
+      Provide an implementation for the member:
+      
+      ```dart
+      enum E {
+        e;
+      
+        void m() {}
+      }
+      ```
   ENUM_WITH_NAME_VALUES:
     problemMessage: The name 'values' is not a valid name for an enum.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an enum is declared to have the
+      name `values`. This isn't allowed because the enum has an implicit static
+      field named `values`, and the two would collide.
+      
+      #### Example
+      
+      The following code produces this diagnostic because there's an enum
+      declaration that has the name `values`:
+      
+      ```dart
+      enum [!values!] {
+        c
+      }
+      ```
+      
+      #### Common fixes
+      
+      Rename the enum to something other than `values`.
   EQUAL_ELEMENTS_IN_CONST_SET:
     problemMessage: "Two elements in a constant set literal can't be equal."
     correctionMessage: Change or remove the duplicate element.
@@ -5210,10 +5423,50 @@
     sharedName: ILLEGAL_ENUM_VALUES
     problemMessage: An instance member named 'values' can't be declared in a class that implements 'Enum'.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when either a class that implements
+      `Enum` or a mixin with a superclass constraint of `Enum` has an instance
+      member named `values`.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the class `C`, which
+      implements `Enum`, declares an instance field named `values`:
+      
+      ```dart
+      abstract class C implements Enum {
+        int get [!values!] => 0;
+      }
+      ```
+      
+      The following code produces this diagnostic because the class `B`, which
+      implements `Enum`, inherits an instance method named `values` from `A`:
+      
+      ```dart
+      abstract class A {
+        int values() => 0;
+      }
+      
+      abstract class [!B!] extends A implements Enum {}
+      ```
+      
+      #### Common fixes
+      
+      Change the name of the conflicting member:
+      
+      ```dart
+      abstract class C implements Enum {
+        int get value => 0;
+      }
+      ```
   ILLEGAL_ENUM_VALUES_INHERITANCE:
     sharedName: ILLEGAL_ENUM_VALUES
     problemMessage: An instance member named 'values' can't be inherited from '{0}' in a class that implements 'Enum'.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the class that declares 'values'
@@ -5224,13 +5477,77 @@
     sharedName: ILLEGAL_CONCRETE_ENUM_MEMBER
     problemMessage: A concrete instance member named '{0}' can't be declared in a class that implements 'Enum'.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of member that cannot be declared
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when either an enum declaration, a
+      class that implements `Enum`, or a mixin with a superclass constraint of
+      `Enum`, declares or inherits a concrete instance member named either
+      `index`, `hashCode`, or `==`.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the enum `E` declares
+      an instance getter named `index`:
+      
+      ```dart
+      enum E {
+        v;
+      
+        int get [!index!] => 0;
+      }
+      ```
+      
+      The following code produces this diagnostic because the class `C`, which
+      implements `Enum`, declares an instance field named `hashCode`:
+      
+      ```dart
+      abstract class C implements Enum {
+        int [!hashCode!] = 0;
+      }
+      ```
+      
+      The following code produces this diagnostic because the class `C`, which
+      indirectly implements `Enum` through the class `A`, declares an instance
+      getter named `hashCode`:
+      
+      ```dart
+      abstract class A implements Enum {}
+      
+      abstract class C implements A {
+        int get [!hashCode!] => 0;
+      }
+      ```
+      
+      The following code produces this diagnostic because the mixin `M`, which
+      has `Enum` in the `on` clause, declares an explicit operator named `==`:
+      
+      ```dart
+      mixin M on Enum {
+        bool operator [!==!](Object? other) => false;
+      }
+      ```
+      
+      #### Common fixes
+      
+      Rename the conflicting member:
+      
+      ```dart
+      enum E {
+        v;
+      
+        int get getIndex => 0;
+      }
+      ```
   ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE:
     sharedName: ILLEGAL_CONCRETE_ENUM_MEMBER
     problemMessage: A concrete instance member named '{0}' can't be inherited from '{1}' in a class that implements 'Enum'.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of member that cannot be inherited
@@ -5440,10 +5757,91 @@
       ```
   IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
     problemMessage: The implicitly invoked unnamed constructor from '{0}' has required parameters.
-    correctionMessage: Try adding an explicit super initializer with the required arguments.
+    correctionMessage: Try adding an explicit super parameter with the required arguments.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the superclass
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a constructor implicitly
+      invokes the unnamed constructor from the superclass, the unnamed
+      constructor of the superclass has a required parameter, and there's no
+      super parameter corresponding to the required parameter.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the unnamed
+      constructor in the class `B` implicitly invokes the unnamed constructor in
+      the class `A`, but the constructor in `A` has a required positional
+      parameter named `x`:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        [!B!]();
+      }
+      ```
+      
+      The following code produces this diagnostic because the unnamed
+      constructor in the class `B` implicitly invokes the unnamed constructor in
+      the class `A`, but the constructor in `A` has a required named parameter
+      named `x`:
+      
+      ```dart
+      class A {
+        A({required int x});
+      }
+      
+      class B extends A {
+        [!B!]();
+      }
+      ```
+      
+      #### Common fixes
+      
+      If you can add a parameter to the constructor in the subclass, then add a
+      super parameter corresponding to the required parameter in the superclass'
+      constructor. The new parameter can either be required:
+      
+      ```dart
+      class A {
+        A({required int x});
+      }
+      
+      class B extends A {
+        B({required super.x});
+      }
+      ```
+      
+      or it can be optional:
+      
+      ```dart
+      class A {
+        A({required int x});
+      }
+      
+      class B extends A {
+        B({super.x = 0});
+      }
+      ```
+      
+      If you can't add a parameter to the constructor in the subclass, then add
+      an explicit super constructor invocation with the required argument:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        B() : super(0);
+      }
+      ```
   IMPORT_INTERNAL_LIBRARY:
     problemMessage: "The library '{0}' is internal and can't be imported."
     hasPublishedDocs: true
@@ -6815,7 +7213,60 @@
       ```
   INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
     problemMessage: Generative enum constructors can only be used as targets of redirection.
-    correctionMessage: Try using a factory constructor, or an enum constant.
+    correctionMessage: Try using an enum constant, or a factory constructor.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a generative constructor
+      defined on an enum is used anywhere other than to create one of the enum
+      constants or as the target of a redirection from another constructor in
+      the same enum.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the constructor for
+      `E` is being used to create an instance in the function `f`:
+      
+      ```dart
+      enum E {
+        a(0);
+      
+        const E(int x);
+      }
+      
+      E f() => const [!E!](2); 
+      ```
+      
+      #### Common fixes
+      
+      If there's an enum constant with the same value, or if you add such a
+      constant, then reference the constant directly:
+      
+      ```dart
+      enum E {
+        a(0), b(2);
+      
+        const E(int x);
+      }
+      
+      E f() => E.b; 
+      ```
+      
+      If you need to use a constructor invocation, then use a factory
+      constructor:
+      
+      ```dart
+      enum E {
+        a(0);
+      
+        const E(int x);
+      
+        factory E.c(int x) => a;
+      }
+      
+      E f() => E.c(2);
+      ```
   INVALID_REFERENCE_TO_THIS:
     problemMessage: "Invalid reference to 'this' expression."
     hasPublishedDocs: true
@@ -6850,11 +7301,92 @@
       class C {}
       ```
   INVALID_SUPER_FORMAL_PARAMETER_LOCATION:
-    problemMessage: "Super-formal parameters can only be used in non-redirecting generative constructors."
+    problemMessage: Super parameters can only be used in non-redirecting generative constructors.
+    correctionMessage: Try removing the 'super' modifier, or changing the constructor to be non-redirecting and generative.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the super modifier
-    correctionMessage: Try removing the 'super' modifier, or changing the constructor to be non-redirecting and generative.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when a super parameter is used
+      anywhere other than a non-redirecting generative constructor.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the super parameter
+      `x` is in a redirecting generative constructor:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        B.b([!super!].x) : this._();
+        B._() : super(0);
+      }
+      ```
+      
+      The following code produces this diagnostic because the super parameter
+      `x` isn't in a generative constructor:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class C extends A {
+        factory C.c([!super!].x) => C._();
+        C._() : super(0);
+      }
+      ```
+      
+      The following code produces this diagnostic because the super parameter
+      `x` is in a method:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class D extends A {
+        D() : super(0);
+      
+        void m([!super!].x) {}
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the function containing the super parameter can be changed to be a
+      non-redirecting generative constructor, then do so:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        B.b(super.x);
+      }
+      ```
+      
+      If the function containing the super parameter can't be changed to be a
+      non-redirecting generative constructor, then remove the `super`:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class D extends A {
+        D() : super(0);
+      
+        void m(int x) {}
+      }
+      ```
   INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
     sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
     problemMessage: "Constant list literals can't include a type parameter as a type argument, such as '{0}'."
@@ -9074,9 +9606,49 @@
       map literal that has no explicit type arguments appears in a place where a
       statement is expected.
   NON_FINAL_FIELD_IN_ENUM:
-    problemMessage: Enum can only declare final fields.
+    problemMessage: Enums can only declare final fields.
     correctionMessage: Try making the field final.
+    hasPublishedDocs: true
     comment: No parameters.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an instance field in an enum
+      isn't marked as `final`.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the field `f` isn't a
+      final field:
+      
+      ```dart
+      enum E {
+        c;
+      
+        int [!f!] = 0;
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the field must be defined for the enum, then mark the field as being
+      `final`:
+      
+      ```dart
+      enum E {
+        c;
+      
+        final int f = 0;
+      }
+      ```
+      
+      If the field can be removed, then remove it:
+      
+      ```dart
+      enum E {
+        c
+      }
+      ```
   NON_GENERATIVE_CONSTRUCTOR:
     problemMessage: "The generative constructor '{0}' is expected, but a factory was found."
     correctionMessage: Try calling a different constructor of the superclass, or making the called constructor not be a factory constructor.
@@ -10348,9 +10920,69 @@
       part of 'test.dart';
       ```
   POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
-    problemMessage: Positional super-formal parameters can't be used when the super-constructor invocation has a positional argument.
+    problemMessage: Positional super parameters can't be used when the super constructor invocation has a positional argument.
+    correctionMessage: Try making all the positional parameters passed to the super constructor be either all super parameters or all normal parameters.
+    hasPublishedDocs: true
     comment: No parameters.
-    correctionMessage: Try removing the 'super' modifier, or changing the super-constructor to use named parameters.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when some, but not all, of the
+      positional parameters provided to the constructor of the superclass are
+      using a super parameter.
+      
+      Positional super parameters are associated with positional parameters in
+      the super constructor by their index. That is, the first super parameter
+      is associated with the first positional parameter in the super
+      constructor, the second with the second, and so on. The same is true for
+      positional arguments. Having both positional super parameters and
+      positional arguments means that there are two values associated with the
+      same parameter in the superclass's constructor, and hence isn't allowed.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the constructor
+      `B.new` is using a super parameter to pass one of the required positional
+      parameters to the super constructor in `A`, but is explicitly passing the
+      other in the super constructor invocation:
+      
+      ```dart
+      class A {
+        A(int x, int y);
+      }
+      
+      class B extends A {
+        B(int x, super.[!y!]) : super(x);
+      }
+      ```
+      
+      #### Common fixes
+      
+      If all the positional parameters can be super parameters, then convert the
+      normal positional parameters to be super parameters:
+      
+      ```dart
+      class A {
+        A(int x, int y);
+      }
+      
+      class B extends A {
+        B(super.x, super.y);
+      }
+      ```
+      
+      If some positional parameters can't be super parameters, then convert the
+      super parameters to be normal parameters:
+      
+      ```dart
+      class A {
+        A(int x, int y);
+      }
+      
+      class B extends A {
+        B(int x, int y) : super(x, y);
+      }
+      ```
   PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
     problemMessage: "The name '{0}' is already used as an import prefix and can't be used to name a top-level element."
     correctionMessage: Try renaming either the top-level element or the prefix.
@@ -11790,20 +12422,224 @@
       int f(C c) => c.b;
       ```
   SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
-    problemMessage: The type '{0}' of this parameter is not a subtype of the type '{1}' of the associated super-constructor parameter.
+    problemMessage: The type '{0}' of this parameter isn't a subtype of the type '{1}' of the associated super constructor parameter.
+    correctionMessage: Try removing the explicit type annotation from the parameter.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the type of super-parameter
       1: the type of associated super-constructor parameter
-    correctionMessage: Try removing the explicit type annotation from the parameter.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when the type of a super parameter
+      isn't a subtype of the corresponding parameter from the super constructor.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the type of the super
+      parameter `x` in the constructor for `B` isn't a subtype of the parameter
+      `x` in the constructor for `A`:
+      
+      ```dart
+      class A {
+        A(num x);
+      }
+      
+      class B extends A {
+        B(String super.[!x!]);
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the type of the super parameter can be the same as the parameter from
+      the super constructor, then remove the type annotation from the super
+      parameter (if the type is implicit, it is inferred from the type in the
+      super constructor):
+      
+      ```dart
+      class A {
+        A(num x);
+      }
+      
+      class B extends A {
+        B(super.x);
+      }
+      ```
+      
+      If the type of the super parameter can be a subtype of the corresponding
+      parameter's type, then change the type of the super parameter:
+      
+      ```dart
+      class A {
+        A(num x);
+      }
+      
+      class B extends A {
+        B(int super.x);
+      }
+      ```
+      
+      If the type of the super parameter can't be changed, then use a normal
+      parameter instead of a super parameter:
+      
+      ```dart
+      class A {
+        A(num x);
+      }
+      
+      class B extends A {
+        B(String x) : super(x.length);
+      }
+      ```
   SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
-    problemMessage: No associated named super-constructor parameter.
+    problemMessage: No associated named super constructor parameter.
+    correctionMessage: Try changing the name to the name of an existing named super constructor parameter, or creating such named parameter.
+    hasPublishedDocs: true
     comment: No parameters.
-    correctionMessage: Try changing the name to the name of an existing named super-constructor parameter, or creating such named parameter.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when there's a named super parameter
+      in a constructor and the implicitly or explicitly invoked super
+      constructor doesn't have a named parameter with the same name.
+      
+      Named super parameters are associated by name with named parameters in the
+      super constructor.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the constructor in `A`
+      doesn't have a parameter named `y`:
+      
+      ```dart
+      class A {
+        A({int? x});
+      }
+      
+      class B extends A {
+        B({super.[!y!]});
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the super parameter should be associated with an existing parameter
+      from the super constructor, then change the name to match the name of the
+      corresponding parameter:
+      
+      ```dart
+      class A {
+        A({int? x});
+      }
+      
+      class B extends A {
+        B({super.x});
+      }
+      ```
+      
+      If the super parameter should be associated with a parameter that hasn't
+      yet been added to the super constructor, then add it:
+      
+      ```dart
+      class A {
+        A({int? x, int? y});
+      }
+      
+      class B extends A {
+        B({super.y});
+      }
+      ```
+      
+      If the super parameter doesn't correspond to a named parameter from the
+      super constructor, then change it to be a normal parameter:
+      
+      ```dart
+      class A {
+        A({int? x});
+      }
+      
+      class B extends A {
+        B({int? y});
+      }
+      ```
   SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
-    problemMessage: No associated positional super-constructor parameter.
+    problemMessage: No associated positional super constructor parameter.
+    correctionMessage: Try using a normal parameter, or adding more positional parameters to the super constructor.
+    hasPublishedDocs: true
     comment: No parameters.
-    correctionMessage: Try using named parameters instead, or adding more positional parameters to the super-constructor.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when there's a positional super
+      parameter in a constructor and the implicitly or explicitly invoked super
+      constructor doesn't have a positional parameter at the corresponding
+      index.
+      
+      Positional super parameters are associated with positional parameters in
+      the super constructor by their index. That is, the first super parameter
+      is associated with the first positional parameter in the super
+      constructor, the second with the second, and so on.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the constructor in `B`
+      has a positional super parameter, but there's no positional parameter in
+      the super constructor in `A`:
+      
+      ```dart
+      class A {
+        A({int? x});
+      }
+      
+      class B extends A {
+        B(super.[!x!]);
+      }
+      ```
+      
+      The following code produces this diagnostic because the constructor in `B`
+      has two positional super parameters, but there's only one positional
+      parameter in the super constructor in `A`, which means that there's no
+      corresponding parameter for `y`:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        B(super.x, super.[!y!]);
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the super constructor should have a positional parameter corresponding
+      to the super parameter, then update the super constructor appropriately:
+      
+      ```dart
+      class A {
+        A(int x, int y);
+      }
+      
+      class B extends A {
+        B(super.x, super.y);
+      }
+      ```
+      
+      If the super constructor is correct, or can't be changed, then convert the
+      super parameter into a normal parameter:
+      
+      ```dart
+      class A {
+        A(int x);
+      }
+      
+      class B extends A {
+        B(super.x, int y);
+      }
+      ```
   IMPLEMENTS_DEFERRED_CLASS:
     sharedName: SUBTYPE_OF_DEFERRED_CLASS
     problemMessage: "Classes and mixins can't implement deferred classes."
@@ -12049,6 +12885,38 @@
   SUPER_IN_ENUM_CONSTRUCTOR:
     problemMessage: The enum constructor can't have a 'super' initializer.
     correctionMessage: Try removing the 'super' invocation.
+    hasPublishedDocs: true
+    comment: No parameters.
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when the initializer list in a
+      constructor in an enum contains an invocation of a super constructor.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the constructor in
+      the enum `E` has a super constructor invocation in the initializer list:
+      
+      ```dart
+      enum E {
+        e;
+      
+        const E() : [!super!]();
+      }
+      ```
+      
+      #### Common fixes
+      
+      Remove the super constructor invocation:
+      
+      ```dart
+      enum E {
+        e;
+      
+        const E();
+      }
+      ```
   SUPER_IN_EXTENSION:
     problemMessage: "The 'super' keyword can't be used in an extension because an extension doesn't have a superclass."
     hasPublishedDocs: true
@@ -12947,13 +13815,98 @@
     sharedName: UNDEFINED_ENUM_CONSTRUCTOR
     problemMessage: The enum doesn't have a constructor named '{0}'.
     correctionMessage: Try correcting the name to the name of an existing constructor, or defining constructor with the name '{0}'.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the name of the constructor that is undefined
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when the constructor invoked to
+      initialize an enum constant doesn't exist.
+      
+      #### Examples
+      
+      The following code produces this diagnostic because the enum constant `c`
+      is being initialized by the unnamed constructor, but there's no unnamed
+      constructor defined in `E`:
+      
+      ```dart
+      enum E {
+        [!c!]();
+      
+        const E.x();
+      }
+      ```
+      
+      The following code produces this diagnostic because the enum constant `c`
+      is being initialized by the constructor named `x`, but there's no
+      constructor named `x` defined in `E`:
+      
+      ```dart
+      enum E {
+        c.[!x!]();
+      
+        const E.y();
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the enum constant is being initialized by the unnamed constructor and
+      one of the named constructors should have been used, then add the name of
+      the constructor:
+      
+      ```dart
+      enum E {
+        c.x();
+      
+        const E.x();
+      }
+      ```
+      
+      If the enum constant is being initialized by the unnamed constructor and
+      none of the named constructors are appropriate, then define the unnamed
+      constructor:
+      
+      ```dart
+      enum E {
+        c();
+      
+        const E();
+      }
+      ```
+      
+      If the enum constant is being initialized by a named constructor and one
+      of the existing constructors should have been used, then change the name
+      of the constructor being invoked (or remove it if the unnamed constructor
+      should be used):
+      
+      ```dart
+      enum E {
+        c.y();
+      
+        const E();
+        const E.y();
+      }
+      ```
+      
+      If the enum constant is being initialized by a named constructor and none
+      of the existing constructors should have been used, then define a
+      constructor with the name that was used:
+      
+      ```dart
+      enum E {
+        c.x();
+      
+        const E.x();
+      }
+      ```
   UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
     sharedName: UNDEFINED_ENUM_CONSTRUCTOR
     problemMessage: The enum doesn't have an unnamed constructor.
     correctionMessage: Try adding the name of an existing constructor, or defining an unnamed constructor.
+    hasPublishedDocs: true
   UNDEFINED_EXTENSION_GETTER:
     problemMessage: "The getter '{0}' isn't defined for the extension '{1}'."
     correctionMessage: "Try correcting the name to the name of an existing getter, or defining a getter named '{0}'."
@@ -14030,6 +14983,40 @@
   VALUES_DECLARATION_IN_ENUM:
     problemMessage: A member named 'values' can't be declared in an enum.
     correctionMessage: Try using a different name.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an enum declaration defines a
+      member named `values`, whether the member is an enum constant, an instance
+      member, or a static member.
+      
+      Any such member conflicts with the implicit declaration of the static
+      getter named `values` that returns a list containing all the enum
+      constants.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the enum `E` defines
+      an instance member named `values`:
+      
+      ```dart
+      enum E {
+        v;
+        void [!values!]() {}
+      }
+      ```
+      
+      #### Common fixes
+      
+      Change the name of the conflicting member:
+      
+      ```dart
+      enum E {
+        v;
+        void getValues() {}
+      }
+      ```
   VARIABLE_TYPE_MISMATCH:
     problemMessage: "A value of type '{0}' can't be assigned to a const variable of type '{1}'."
     correctionMessage: "Try using a subtype, or removing the 'const' keyword"
@@ -14288,10 +15275,50 @@
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM:
     problemMessage: The enum is declared with {0} type parameters, but {1} type arguments were given.
     correctionMessage: Try adjusting the number of type arguments.
+    hasPublishedDocs: true
     comment: |-
       Parameters:
       0: the number of type parameters that were declared
       1: the number of type arguments provided
+    documentation: |-
+      #### Description
+      
+      The analyzer produces this diagnostic when an enum constant in an enum
+      that has type parameters is instantiated and type arguments are provided,
+      but the number of type arguments isn't the same as the number of type
+      parameters.
+      
+      #### Example
+      
+      The following code produces this diagnostic because the enum constant `c`
+      provides one type argument even though the enum `E` is declared to have
+      two type parameters:
+      
+      ```dart
+      enum E<T, U> {
+        c[!<int>!]()
+      }
+      ```
+      
+      #### Common fixes
+      
+      If the number of type parameters is correct, then change the number of
+      type arguments to match the number of type parameters:
+      
+      ```dart
+      enum E<T, U> {
+        c<int, String>()
+      }
+      ```
+      
+      If the number of type arguments is correct, then change the number of type
+      parameters to match the number of type arguments:
+      
+      ```dart
+      enum E<T> {
+        c<int>()
+      }
+      ```
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
     problemMessage: "The extension '{0}' is declared with {1} type parameters, but {2} type arguments were given."
     correctionMessage: Try adjusting the number of type arguments.
@@ -14657,6 +15684,45 @@
         return p.asFunction(isLeaf: true);
       }
       ```
+  COMPOUND_IMPLEMENTS_FINALIZABLE:
+    problemMessage: "The class '{0}' can't implement Finalizable."
+    correctionMessage: "Try removing the implements clause from '{0}'."
+    comment: |-
+      Parameters:
+      0: the name of the struct or union class
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a subclass of either `Struct`
+      or `Union` implements `Finalizable`.
+
+      For more information about FFI, see [C interop using dart:ffi][].
+
+      #### Example
+
+      The following code produces this diagnostic because the class `S`
+      implements `Finalizable`:
+
+      ```dart
+      import 'dart:ffi';
+
+      class [!S!] extends Struct implements Finalizable {
+        external Pointer notEmpty;
+      }
+      ```
+
+      #### Common fixes
+
+      Try removing the implements clause from the class:
+
+      ```dart
+      import 'dart:ffi';
+
+      class S extends Struct {
+        external Pointer notEmpty;
+      }
+      ```
   CREATION_OF_STRUCT_OR_UNION:
     problemMessage: "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't be instantiated by a generative constructor."
     correctionMessage: "Try allocating it via allocation, or load from a 'Pointer'."
@@ -20124,9 +21190,6 @@
   EMPTY_ENUM_BODY:
     problemMessage: An enum must declare at least one constant name.
     correctionMessage: Try declaring a constant.
-  ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS:
-    problemMessage: Missing arguments in enum constructor invocation.
-    correctionMessage: Try adding an argument list.
   EXPECTED_CASE_OR_DEFAULT:
     problemMessage: "Expected 'case' or 'default'."
     correctionMessage: Try placing this code inside a case clause.
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 064de4b..86abb1d 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 3.3.1
+version: 3.4.1
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.14.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^36.0.0
+  _fe_analyzer_shared: ^38.0.0
   collection: ^1.15.0
   convert: ^3.0.0
   crypto: ^3.0.0
@@ -24,7 +24,13 @@
     path: ../analyzer_utilities
   args: ^2.0.0
   async: ^2.5.0
+  front_end:
+    path: ../front_end
+  kernel:
+    path: ../kernel
   linter: ^1.12.0
   matcher: ^0.12.10
   test: ^1.16.0
   test_reflective_loader: ^0.2.0
+  vm:
+    path: ../vm
diff --git a/pkg/analyzer/test/dart/analysis/analysis_context_test.dart b/pkg/analyzer/test/dart/analysis/analysis_context_test.dart
new file mode 100644
index 0000000..4ebf81d
--- /dev/null
+++ b/pkg/analyzer/test/dart/analysis/analysis_context_test.dart
@@ -0,0 +1,74 @@
+// 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:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../src/dart/resolution/context_collection_resolution.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AnalysisContextTest);
+  });
+}
+
+@reflectiveTest
+class AnalysisContextTest extends PubPackageResolutionTest {
+  test_changeFile_imported() async {
+    var a = newFile2('$testPackageLibPath/a.dart', '');
+
+    var b = newFile2('$testPackageLibPath/b.dart', r'''
+import 'a.dart';
+''');
+
+    var c = newFile2('$testPackageLibPath/c.dart', '');
+
+    var analysisContext = contextFor(a.path);
+
+    // Ask for files, so that they are known.
+    var analysisSession = analysisContext.currentSession;
+    analysisSession.getFile(a.path);
+    analysisSession.getFile(b.path);
+    analysisSession.getFile(c.path);
+
+    analysisContext.changeFile(a.path);
+
+    var affected = await analysisContext.applyPendingFileChanges();
+    expect(affected, unorderedEquals([a.path, b.path]));
+
+    expect(analysisContext.currentSession, isNot(analysisSession));
+  }
+
+  test_changeFile_part() async {
+    var a = newFile2('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
+''');
+
+    var b = newFile2('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
+''');
+
+    var c = newFile2('$testPackageLibPath/c.dart', r'''
+import 'a.dart';
+''');
+
+    var d = newFile2('$testPackageLibPath/d.dart', '');
+
+    var analysisContext = contextFor(a.path);
+
+    // Ask for files, so that they are known.
+    var analysisSession = analysisContext.currentSession;
+    analysisSession.getFile(a.path);
+    analysisSession.getFile(b.path);
+    analysisSession.getFile(c.path);
+    analysisSession.getFile(d.path);
+
+    analysisContext.changeFile(b.path);
+
+    var affected = await analysisContext.applyPendingFileChanges();
+    expect(affected, unorderedEquals([a.path, b.path, c.path]));
+
+    expect(analysisContext.currentSession, isNot(analysisSession));
+  }
+}
diff --git a/pkg/analyzer/test/dart/analysis/test_all.dart b/pkg/analyzer/test/dart/analysis/test_all.dart
index 40e2965..13113c5 100644
--- a/pkg/analyzer/test/dart/analysis/test_all.dart
+++ b/pkg/analyzer/test/dart/analysis/test_all.dart
@@ -4,11 +4,13 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis_context_test.dart' as analysis_context;
 import 'from_environment_evaluator_test.dart' as declared_variables;
 import 'utilities_test.dart' as utilities;
 
 void main() {
   defineReflectiveSuite(() {
+    analysis_context.main();
     declared_variables.main();
     utilities.main();
   }, name: 'analysis');
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index 5519a0d..a29e78d 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -5,14 +5,17 @@
 import 'package:analyzer/dart/analysis/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
 import 'package:analyzer/src/generated/testing/token_factory.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../generated/parser_test_base.dart' show ParserTestCase;
+import '../../util/feature_sets.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -237,7 +240,7 @@
 }
 
 @reflectiveTest
-class IndexExpressionTest {
+class IndexExpressionTest extends _AstTest {
   void test_inGetterContext_assignment_compound_left() {
     IndexExpression expression = AstTestFactory.indexExpression(
       target: AstTestFactory.identifier3("a"),
@@ -261,14 +264,10 @@
   }
 
   void test_inGetterContext_nonAssignment() {
-    IndexExpression expression = AstTestFactory.indexExpression(
-      target: AstTestFactory.identifier3("a"),
-      index: AstTestFactory.identifier3("b"),
-    );
-    // a[b] + c
-    AstTestFactory.binaryExpression(
-        expression, TokenType.PLUS, AstTestFactory.identifier3("c"));
-    expect(expression.inGetterContext(), isTrue);
+    var node = _parseStringToNode<IndexExpression>(r'''
+var v = ^a[b] + c;
+''');
+    expect(node.inGetterContext(), isTrue);
   }
 
   void test_inSetterContext_assignment_compound_left() {
@@ -316,14 +315,10 @@
   }
 
   void test_inSetterContext_nonAssignment() {
-    IndexExpression expression = AstTestFactory.indexExpression(
-      target: AstTestFactory.identifier3("a"),
-      index: AstTestFactory.identifier3("b"),
-    );
-    AstTestFactory.binaryExpression(
-        expression, TokenType.PLUS, AstTestFactory.identifier3("c"));
-    // a[b] + cc
-    expect(expression.inSetterContext(), isFalse);
+    var node = _parseStringToNode<IndexExpression>(r'''
+var v = ^a[b] + c;
+''');
+    expect(node.inSetterContext(), isFalse);
   }
 
   void test_inSetterContext_postfix_bang() {
@@ -1053,7 +1048,7 @@
 }
 
 @reflectiveTest
-class SimpleIdentifierTest extends ParserTestCase {
+class SimpleIdentifierTest extends _AstTest {
   void test_inGetterContext() {
     for (_WrapperKind wrapper in _WrapperKind.values) {
       for (_AssignmentKind assignment in _AssignmentKind.values) {
@@ -1200,8 +1195,8 @@
 
   SimpleIdentifier _createIdentifier(
       _WrapperKind wrapper, _AssignmentKind assignment) {
-    SimpleIdentifier identifier = AstTestFactory.identifier3("a");
-    Expression expression = identifier;
+    var identifier = AstTestFactory.identifier3("a");
+    ExpressionImpl expression = identifier;
     while (true) {
       if (wrapper == _WrapperKind.PREFIXED_LEFT) {
         expression = AstTestFactory.identifier(
@@ -1221,8 +1216,11 @@
     }
     while (true) {
       if (assignment == _AssignmentKind.BINARY) {
-        AstTestFactory.binaryExpression(
-            expression, TokenType.PLUS, AstTestFactory.identifier3("_"));
+        BinaryExpressionImpl(
+          leftOperand: expression,
+          operator: TokenFactory.tokenFromType(TokenType.PLUS),
+          rightOperand: AstTestFactory.identifier3("_"),
+        );
       } else if (assignment == _AssignmentKind.COMPOUND_LEFT) {
         AstTestFactory.assignmentExpression(
             expression, TokenType.PLUS_EQ, AstTestFactory.identifier3("_"));
@@ -1376,13 +1374,13 @@
     expect(
         astFactory
             .simpleStringLiteral(
-                TokenFactory.tokenFromString("''' \ \nX''"), "X")
+                TokenFactory.tokenFromString("'''  \nX''"), "X")
             .contentsOffset,
         6);
     expect(
         astFactory
             .simpleStringLiteral(
-                TokenFactory.tokenFromString('r""" \ \nX"""'), "X")
+                TokenFactory.tokenFromString('r"""  \nX"""'), "X")
             .contentsOffset,
         7);
   }
@@ -1787,6 +1785,37 @@
   String toString() => name;
 }
 
+class _AstTest {
+  T _parseStringToNode<T extends AstNode>(String codeWithMark) {
+    var offset = codeWithMark.indexOf('^');
+    expect(offset, isNot(equals(-1)), reason: 'missing ^');
+
+    var nextOffset = codeWithMark.indexOf('^', offset + 1);
+    expect(nextOffset, equals(-1), reason: 'too many ^');
+
+    var codeBefore = codeWithMark.substring(0, offset);
+    var codeAfter = codeWithMark.substring(offset + 1);
+    var code = codeBefore + codeAfter;
+
+    var parseResult = parseString(
+      content: code,
+      featureSet: FeatureSets.latestWithExperiments,
+    );
+
+    var node = NodeLocator2(offset).searchWithin(parseResult.unit);
+    if (node == null) {
+      throw StateError('No node at $offset:\n$code');
+    }
+
+    var result = node.thisOrAncestorOfType<T>();
+    if (result == null) {
+      throw StateError('No node of $T at $offset:\n$code');
+    }
+
+    return result;
+  }
+}
+
 class _WrapperKind {
   static const _WrapperKind PREFIXED_LEFT = _WrapperKind('PREFIXED_LEFT', 0);
 
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index 55923b8..41d54bd 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -73,8 +73,8 @@
   }
 
   test_reportErrorForNode_types_differentNames() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/b.dart', content: 'class B {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/b.dart', 'class B {}');
     await resolveTestCode(r'''
 import 'package:test/a.dart';
 import 'package:test/b.dart';
@@ -112,8 +112,8 @@
   }
 
   test_reportErrorForNode_types_sameName() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/b.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/b.dart', 'class A {}');
     await resolveTestCode(r'''
 import 'package:test/a.dart';
 import 'package:test/b.dart';
@@ -150,8 +150,8 @@
   }
 
   test_reportErrorForNode_types_sameName_functionType() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A{}');
-    newFile('$testPackageLibPath/b.dart', content: 'class A{}');
+    newFile2('$testPackageLibPath/a.dart', 'class A{}');
+    newFile2('$testPackageLibPath/b.dart', 'class A{}');
     await resolveTestCode(r'''
 import 'a.dart' as a;
 import 'b.dart' as b;
@@ -184,8 +184,8 @@
   }
 
   test_reportErrorForNode_types_sameName_nested() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A{}');
-    newFile('$testPackageLibPath/b.dart', content: 'class A{}');
+    newFile2('$testPackageLibPath/a.dart', 'class A{}');
+    newFile2('$testPackageLibPath/b.dart', 'class A{}');
     await resolveTestCode(r'''
 import 'a.dart' as a;
 import 'b.dart' as b;
diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
index afad0dc..bc0e269 100644
--- a/pkg/analyzer/test/error/error_test.dart
+++ b/pkg/analyzer/test/error/error_test.dart
@@ -45,7 +45,7 @@
               if ((fields.type == null ? bad() : true) &&
                   fields.type!.toSource() == className) {
                 String fieldName = fields.variables[0].name.name;
-                declaredCodes.add(className + '.' + fieldName);
+                declaredCodes.add('$className.$fieldName');
               }
             }
           }
diff --git a/pkg/analyzer/test/file_system/file_system_test_support.dart b/pkg/analyzer/test/file_system/file_system_test_support.dart
index 11cf39f..517ac99 100644
--- a/pkg/analyzer/test/file_system/file_system_test_support.dart
+++ b/pkg/analyzer/test/file_system/file_system_test_support.dart
@@ -84,7 +84,7 @@
     Folder destination = provider.getFolder(join(tempPath, 'destination'));
 
     File copy = file.copyTo(destination);
-    expect(copy.parent2, destination);
+    expect(copy.parent, destination);
     expect(copy.shortName, file.shortName);
     expect(copy.exists, isTrue);
     expect(copy.readAsStringSync(), 'contents');
@@ -111,11 +111,11 @@
   test_delete_existing() {
     File file = getFile(exists: true);
     expect(file.exists, isTrue);
-    expect(file.parent2.getChildren(), contains(file));
+    expect(file.parent.getChildren(), contains(file));
 
     file.delete();
     expect(file.exists, isFalse);
-    expect(file.parent2.getChildren(), isNot(contains(file)));
+    expect(file.parent.getChildren(), isNot(contains(file)));
   }
 
   test_delete_notExisting();
@@ -232,7 +232,7 @@
   test_parent2() {
     File file = getFile(exists: true);
 
-    var parent = file.parent2;
+    var parent = file.parent;
     expect(parent.exists, isTrue);
     expect(parent.path, defaultFolderPath);
   }
@@ -497,7 +497,7 @@
         getFolder(exists: true, folderPath: join(tempPath, 'destination'));
 
     Folder copy = source.copyTo(destination);
-    expect(copy.parent2, destination);
+    expect(copy.parent, destination);
     _verifyStructure(copy, source);
   }
 
@@ -512,7 +512,7 @@
   test_delete() {
     File file =
         getFile(exists: true, filePath: join(defaultFolderPath, 'myFile'));
-    var folder = file.parent2;
+    var folder = file.parent;
     expect(folder.exists, isTrue);
     expect(file.exists, isTrue);
 
@@ -665,9 +665,9 @@
     expect(children, hasLength(3));
     children.sort((a, b) => a.shortName.compareTo(b.shortName));
     // check that each child exists
-    children.forEach((child) {
+    for (var child in children) {
       expect(child.exists, true);
-    });
+    }
     // check names
     expect(children[0].shortName, 'a.txt');
     expect(children[1].shortName, 'bFolder');
@@ -781,7 +781,7 @@
   test_parent() {
     Folder folder = getFolder(exists: true);
 
-    var parent = folder.parent2;
+    var parent = folder.parent;
     expect(parent.path, equals(tempPath));
     //
     // Since the OS is in control of where tempPath is, we don't know how far it
@@ -789,7 +789,7 @@
     // in a folder with a shorter path, and that we reach the root eventually.
     //
     while (true) {
-      var grandParent = parent.parent2;
+      var grandParent = parent.parent;
       if (grandParent.isRoot) {
         break;
       }
diff --git a/pkg/analyzer/test/file_system/overlay_file_system_test.dart b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
index dae3df2..6b61a07 100644
--- a/pkg/analyzer/test/file_system/overlay_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/overlay_file_system_test.dart
@@ -38,7 +38,7 @@
     File targetFile =
         provider.getFile(baseProvider.convertPath('/foo/test.dart'));
     expect(targetFile.exists, isFalse);
-    file.copyTo(file.parent2.parent2);
+    file.copyTo(file.parent.parent);
     expect(targetFile.exists, isTrue);
   }
 
@@ -48,7 +48,7 @@
     File targetFile =
         provider.getFile(baseProvider.convertPath('/foo/test.dart'));
     expect(targetFile.exists, isFalse);
-    file.copyTo(file.parent2.parent2);
+    file.copyTo(file.parent.parent);
     expect(targetFile.exists, isTrue);
     expect(targetFile.readAsStringSync(), 'overlay');
     provider.removeOverlay(targetFile.path);
@@ -61,7 +61,7 @@
     File targetFile =
         provider.getFile(baseProvider.convertPath('/foo/test.dart'));
     expect(targetFile.exists, isFalse);
-    file.copyTo(file.parent2.parent2);
+    file.copyTo(file.parent.parent);
     expect(targetFile.exists, isTrue);
     expect(targetFile.readAsStringSync(), 'overlay');
     provider.removeOverlay(targetFile.path);
@@ -166,7 +166,7 @@
   }
 
   test_parent() {
-    var parent = _file(exists: true).parent2;
+    var parent = _file(exists: true).parent;
     expect(parent.exists, isTrue);
     expect(parent.path, defaultFolderPath);
   }
@@ -461,7 +461,7 @@
         provider.getFolder(baseProvider.convertPath('/destination'));
 
     Folder copy = source.copyTo(destination);
-    expect(copy.parent2, destination);
+    expect(copy.parent, destination);
     _verifyStructure(copy, source);
   }
 
@@ -611,7 +611,7 @@
 
   test_getChildren_nonExisting_withOverlay() {
     File file = _file(exists: false, withOverlay: true);
-    List<Resource> children = file.parent2.parent2.getChildren();
+    List<Resource> children = file.parent.parent.getChildren();
     expect(children, hasLength(1));
     expect(children[0], _isFolder);
   }
@@ -632,13 +632,13 @@
   }
 
   test_parent_ofNonRoot() {
-    Folder parent = _folder(exists: true).parent2;
+    Folder parent = _folder(exists: true).parent;
     expect(parent.exists, isTrue);
     expect(parent.path, baseProvider.convertPath('/foo'));
   }
 
   test_parent_ofRoot() {
-    var parent = _folder(exists: true, path: '/').parent2;
+    var parent = _folder(exists: true, path: '/').parent;
     expect(parent.exists, isTrue);
     expect(parent.path, baseProvider.convertPath('/'));
   }
@@ -806,7 +806,7 @@
 
   test_getFolder_notExisting_withOverlay() {
     File file = _file(exists: false, withOverlay: true);
-    Folder folder = file.parent2;
+    Folder folder = file.parent;
     expect(folder, isNotNull);
     expect(folder.path, defaultFolderPath);
     expect(folder.exists, isTrue);
diff --git a/pkg/analyzer/test/file_system/physical_file_system_test.dart b/pkg/analyzer/test/file_system/physical_file_system_test.dart
index 8794f1d..08a7fa5 100644
--- a/pkg/analyzer/test/file_system/physical_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/physical_file_system_test.dart
@@ -70,7 +70,7 @@
   File getFile({required bool exists, String? content, String? filePath}) {
     File file = provider.getFile(filePath ?? defaultFilePath);
     if (exists) {
-      file.parent2.create();
+      file.parent.create();
       file.writeAsStringSync(content ?? defaultFileContent);
     }
     return file;
diff --git a/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart b/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
index 61f06df..a34d548 100644
--- a/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
+++ b/pkg/analyzer/test/file_system/resource_uri_resolver_test.dart
@@ -20,7 +20,7 @@
 
   void setUp() {
     resolver = ResourceUriResolver(resourceProvider);
-    newFile('/test.dart');
+    newFile2('/test.dart', '');
     newFolder('/folder');
   }
 
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 532fa53..2b959b8 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -213,19 +213,18 @@
   late final DartSdk sdk;
 
   void setUp() {
-    newFile('/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart',
-        content: '''
+    newFile2('/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart', '''
 const Map<String, LibraryInfo> libraries = const {
   "core": const LibraryInfo("core/core.dart")
 };
 ''');
 
-    newFile('/sdk/lib/core/core.dart', content: '''
+    newFile2('/sdk/lib/core/core.dart', '''
 library dart.core;
 part 'int.dart';
 ''');
 
-    newFile('/sdk/lib/core/int.dart', content: '''
+    newFile2('/sdk/lib/core/int.dart', '''
 part of dart.core;
 ''');
 
diff --git a/pkg/analyzer/test/generated/constant_test.dart b/pkg/analyzer/test/generated/constant_test.dart
index 7e7f0ab..e4a67c3 100644
--- a/pkg/analyzer/test/generated/constant_test.dart
+++ b/pkg/analyzer/test/generated/constant_test.dart
@@ -571,6 +571,250 @@
     await _assertValueInt(6, "'Dvorak'.length");
   }
 
+  test_superFormalParameter_explicitSuper_hasNamedArgument_requiredNamed() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  final int b;
+  const A({required this.a, required this.b});
+}
+
+class B extends A {
+  final int c;
+  const B(this.c, {required super.b}) : super(a: 1);
+}
+
+const x = B(3, b: 2);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+    b: int 2
+  c: int 3
+''');
+  }
+
+  test_superFormalParameter_explicitSuper_hasNamedArgument_requiredPositional() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  final int b;
+  const A(this.a, {required this.b});
+}
+
+class B extends A {
+  final int c;
+  const B(super.a, {required this.c}) : super(b: 2);
+}
+
+const x = B(1, c: 3);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+    b: int 2
+  c: int 3
+''');
+  }
+
+  test_superFormalParameter_explicitSuper_requiredNamed() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A({required this.a});
+}
+
+class B extends A {
+  final int b;
+  const B(this.b, {required super.a}) : super();
+}
+
+const x = B(2, a: 1);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_explicitSuper_requiredNamed_generic() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A({required this.a});
+}
+
+class B<T> extends A {
+  final int b;
+  const B(this.b, {required super.a}) : super();
+}
+
+const x = B<int>(2, a: 1);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B<int>
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_explicitSuper_requiredPositional() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A(this.a);
+}
+
+class B extends A {
+  final int b;
+  const B(super.a, this.b) : super();
+}
+
+const x = B(1, 2);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_explicitSuper_requiredPositional_generic() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A(this.a);
+}
+
+class B<T> extends A {
+  final int b;
+  const B(super.a, this.b) : super();
+}
+
+const x = B<int>(1, 2);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B<int>
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_implicitSuper_requiredNamed() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A({required this.a});
+}
+
+class B extends A {
+  final int b;
+  const B(this.b, {required super.a});
+}
+
+const x = B(2, a: 1);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_implicitSuper_requiredNamed_generic() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A({required this.a});
+}
+
+class B<T> extends A {
+  final int b;
+  const B(this.b, {required super.a});
+}
+
+const x = B<int>(2, a: 1);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B<int>
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_implicitSuper_requiredPositional() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A(this.a);
+}
+
+class B extends A {
+  final int b;
+  const B(super.a, this.b);
+}
+
+const x = B(1, 2);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
+  test_superFormalParameter_implicitSuper_requiredPositional_generic() async {
+    await assertNoErrorsInCode('''
+class A {
+  final int a;
+  const A(this.a);
+}
+
+class B<T> extends A {
+  final int b;
+  const B(super.a, this.b);
+}
+
+const x = B<int>(1, 2);
+''');
+
+    var value = findElement.topVar('x').evaluationResult.value;
+    assertDartObjectText(value, r'''
+B<int>
+  (super): A
+    a: int 1
+  b: int 2
+''');
+  }
+
   void _assertTopVarConstValue(String name, String expected) {
     assertDartObjectText(_topVarConstResult(name).value, expected);
   }
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index f6b0fed..9cd13b7 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -21,7 +21,7 @@
 @reflectiveTest
 class AnnotationElementResolverTest extends PubPackageResolutionTest {
   test_class_namedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A.named();
 }
@@ -46,7 +46,7 @@
   }
 
   test_class_prefixed_namedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A.named();
 }
@@ -72,7 +72,7 @@
   }
 
   test_class_prefixed_staticConstField() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const V = 0;
 }
@@ -97,7 +97,7 @@
   }
 
   test_class_prefixed_unnamedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A();
 }
@@ -121,7 +121,7 @@
   }
 
   test_class_staticConstField() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const V = 0;
 }
@@ -145,7 +145,7 @@
   }
 
   test_class_unnamedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A();
 }
@@ -168,7 +168,7 @@
   }
 
   test_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const V = 0;
 ''');
     await _validateAnnotation('', '@V',
@@ -189,7 +189,7 @@
   }
 
   test_topLevelVariable_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const V = 0;
 ''');
     await _validateAnnotation('as p', '@p.V',
@@ -437,7 +437,7 @@
   }
 
   test_visitImportDirective_withCombinators() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 int v1 = 0;
 final int v2 = 0;
 ''');
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 8c01ffe..8b660f5 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -367,6 +367,15 @@
     required AnalysisContext analysisContext,
     required AnalysisSessionImpl analysisSession,
   }) {
+    var uri = Uri.parse(uriStr);
+    var source = _MockSource(uri);
+
+    var definingUnit = CompilationUnitElementImpl(
+      source: source,
+      librarySource: source,
+      lineInfo: LineInfo([0]),
+    );
+
     var library = LibraryElementImpl(
       analysisContext,
       analysisSession,
@@ -375,18 +384,9 @@
       0,
       FeatureSet.latestLanguageVersion(),
     );
-    library.typeSystem = typeSystem;
-    library.typeProvider = typeSystem.typeProvider;
-
-    var uri = Uri.parse(uriStr);
-    var source = _MockSource(uri);
-
-    var definingUnit = CompilationUnitElementImpl();
-    definingUnit.source = source;
-    definingUnit.librarySource = source;
-
-    definingUnit.enclosingElement = library;
     library.definingCompilationUnit = definingUnit;
+    library.typeProvider = typeSystem.typeProvider;
+    library.typeSystem = typeSystem;
 
     return library;
   }
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 139bb79..a8779b3 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -1705,43 +1705,64 @@
   void test_invalidUnicodeEscape_incomplete_noDigits() {
     Expression expression = parseStringLiteral("'\\u{'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 3)]);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET, 1, 3)
+    ]);
+  }
+
+  void test_invalidUnicodeEscape_incomplete_noDigits_noBracket() {
+    Expression expression = parseStringLiteral("'\\u'");
+    expectNotNullIfNoErrors(expression);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED, 1, 2)
+    ]);
   }
 
   void test_invalidUnicodeEscape_incomplete_someDigits() {
     Expression expression = parseStringLiteral("'\\u{0A'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 5)]);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET, 1, 5)
+    ]);
   }
 
   void test_invalidUnicodeEscape_invalidDigit() {
     Expression expression = parseStringLiteral("'\\u0 and some more'");
     expectNotNullIfNoErrors(expression);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET, 1, 3)
+    ]);
+  }
+
+  void test_invalidUnicodeEscape_too_high_number_variable() {
+    Expression expression = parseStringLiteral("'\\u{110000}'");
+    expectNotNullIfNoErrors(expression);
     listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 3)]);
+        [expectedError(ParserErrorCode.INVALID_CODE_POINT, 1, 9)]);
   }
 
   void test_invalidUnicodeEscape_tooFewDigits_fixed() {
     Expression expression = parseStringLiteral("'\\u04'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 4)]);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET, 1, 4)
+    ]);
   }
 
   void test_invalidUnicodeEscape_tooFewDigits_variable() {
     Expression expression = parseStringLiteral("'\\u{}'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE, 1, 4)]);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET, 1, 4)
+    ]);
   }
 
   void test_invalidUnicodeEscape_tooManyDigits_variable() {
-    Expression expression = parseStringLiteral("'\\u{12345678}'");
+    Expression expression = parseStringLiteral("'\\u{0000000001}'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.INVALID_CODE_POINT, 1, 9)]);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET, 1, 9)
+    ]);
   }
 
   void test_libraryDirectiveNotFirst() {
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 51d910d..96e8861 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -61,7 +61,7 @@
   }
 
   test_methodInvocation_ofGenericClass_generic_static_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   static void foo<T2>() {}
 }
@@ -162,7 +162,7 @@
   }
 
   test_extensionOverrideInAnnotationContext_importedWithPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on Object {
   int f() => 0;
 }
@@ -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/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index bc4e648..d06a00c 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -138,7 +138,7 @@
   }
 
   test_typedef_not_function() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 typedef F = int;
 ''');
     await assertNoErrorsInCode('''
@@ -150,11 +150,11 @@
 
 mixin NonErrorResolverTestCases on PubPackageResolutionTest {
   test_ambiguousExport() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 class M {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library lib2;
 class N {}
 ''');
@@ -166,12 +166,12 @@
   }
 
   test_ambiguousExport_combinators_hide() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library L1;
 class A {}
 class B {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library L2;
 class B {}
 class C {}
@@ -184,12 +184,12 @@
   }
 
   test_ambiguousExport_combinators_show() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library L1;
 class A {}
 class B {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library L2;
 class B {}
 class C {}
@@ -202,7 +202,7 @@
   }
 
   test_ambiguousExport_sameDeclaration() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 class N {}
 ''');
@@ -214,7 +214,7 @@
   }
 
   test_ambiguousImport_dart_implicitHide() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 class Future {
   static const zero = 0;
 }
@@ -228,17 +228,17 @@
   }
 
   test_ambiguousImport_hideCombinator() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 class N {}
 class N1 {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library lib2;
 class N {}
 class N2 {}
 ''');
-    newFile("$testPackageLibPath/lib3.dart", content: r'''
+    newFile2("$testPackageLibPath/lib3.dart", r'''
 library lib3;
 class N {}
 class N3 {}
@@ -256,12 +256,12 @@
   }
 
   test_ambiguousImport_showCombinator() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 class N {}
 class N1 {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library lib2;
 class N {}
 class N2 {}
@@ -279,7 +279,7 @@
   }
 
   test_annotated_partOfDeclaration() async {
-    newFile('$testPackageLibPath/part.dart', content: '''
+    newFile2('$testPackageLibPath/part.dart', '''
 @deprecated part of L;
 ''');
     await assertNoErrorsInCode('''
@@ -505,7 +505,7 @@
   }
 
   test_assignmentToFinals_importWithPrefix() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 bool x = false;''');
     await assertNoErrorsInCode(r'''
@@ -773,7 +773,7 @@
   }
 
   test_closure_in_type_inferred_variable_in_other_lib() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 var y = (Object x) => x is int && x.isEven;
 ''');
     await assertNoErrorsInCode('''
@@ -817,13 +817,13 @@
   }
 
   test_const_imported_defaultParameterValue_withImportPrefix() async {
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'c.dart' as ccc;
 class B {
   const B([p = ccc.value]);
 }
 ''');
-    newFile('$testPackageLibPath/c.dart', content: r'''
+    newFile2('$testPackageLibPath/c.dart', r'''
 const int value = 12345;
 ''');
     await assertNoErrorsInCode(r'''
@@ -900,7 +900,7 @@
   }
 
   test_constDeferredClass_new() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 class A {
   const A.b();
 }
@@ -921,7 +921,7 @@
   }
 
   test_constEval_propertyExtraction_fieldStatic_targetType() async {
-    newFile("$testPackageLibPath/math.dart", content: r'''
+    newFile2("$testPackageLibPath/math.dart", r'''
 library math;
 const PI = 3.14;
 ''');
@@ -942,7 +942,7 @@
   }
 
   test_constEval_symbol() async {
-    newFile("$testPackageLibPath/math.dart", content: r'''
+    newFile2("$testPackageLibPath/math.dart", r'''
 library math;
 const PI = 3.14;
 ''');
@@ -1117,7 +1117,7 @@
   }
 
   test_deprecatedMemberUse_hide() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 class A {}
 @deprecated
@@ -1626,7 +1626,7 @@
   }
 
   test_importDuplicatedLibraryName() async {
-    newFile("$testPackageLibPath/lib.dart", content: "library lib;");
+    newFile2("$testPackageLibPath/lib.dart", "library lib;");
     await assertErrorsInCode(r'''
 library test;
 import 'lib.dart';
@@ -1639,8 +1639,8 @@
   }
 
   test_importDuplicatedLibraryUnnamed() async {
-    newFile("$testPackageLibPath/lib1.dart");
-    newFile("$testPackageLibPath/lib2.dart");
+    newFile2("$testPackageLibPath/lib1.dart", '');
+    newFile2("$testPackageLibPath/lib2.dart", '');
     // No warning on duplicate import (https://github.com/dart-lang/sdk/issues/24156)
     await assertErrorsInCode(r'''
 library test;
@@ -1653,7 +1653,7 @@
   }
 
   test_importOfNonLibrary_libraryDeclared() async {
-    newFile("$testPackageLibPath/part.dart", content: r'''
+    newFile2("$testPackageLibPath/part.dart", r'''
 library lib1;
 class A {}
 ''');
@@ -1665,7 +1665,7 @@
   }
 
   test_importOfNonLibrary_libraryNotDeclared() async {
-    newFile("$testPackageLibPath/part.dart", content: '''
+    newFile2("$testPackageLibPath/part.dart", '''
 class A {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -1676,11 +1676,11 @@
   }
 
   test_importPrefixes_withFirstLetterDifference() async {
-    newFile("$testPackageLibPath/lib1.dart", content: r'''
+    newFile2("$testPackageLibPath/lib1.dart", r'''
 library lib1;
 test1() {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: r'''
+    newFile2("$testPackageLibPath/lib2.dart", r'''
 library lib2;
 test2() {}
 ''');
@@ -1846,7 +1846,7 @@
   }
 
   test_instanceMethodNameCollidesWithSuperclassStatic_field() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library L;
 class A {
   static var _m;
@@ -1863,7 +1863,7 @@
   }
 
   test_instanceMethodNameCollidesWithSuperclassStatic_method() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library L;
 class A {
   static _m() {}
@@ -1937,7 +1937,7 @@
   }
 
   test_invalidAnnotation_constantVariable_field_importWithPrefix() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 class A {
   static const C = 0;
@@ -1961,7 +1961,7 @@
   }
 
   test_invalidAnnotation_constantVariable_topLevel_importWithPrefix() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 const C = 0;
 ''');
@@ -1974,7 +1974,7 @@
   }
 
   test_invalidAnnotation_constConstructor_importWithPrefix() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 class A {
   const A(int p);
@@ -1989,7 +1989,7 @@
   }
 
   test_invalidAnnotation_constConstructor_named_importWithPrefix() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 class A {
   const A.named(int p);
@@ -2166,12 +2166,12 @@
   }
 
   Future test_issue32114() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class O {}
 
 typedef T Func<T extends O>(T e);
 ''');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 export 'a.dart' show Func;
 
@@ -2219,7 +2219,7 @@
   }
 
   test_issue_35320_lists() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 const x = const <String>['a'];
 ''');
     await assertNoErrorsInCode('''
@@ -2239,7 +2239,7 @@
   }
 
   test_issue_35320_maps() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 const x = const <String, String>{'a': 'b'};
 ''');
     await assertNoErrorsInCode('''
@@ -2259,7 +2259,7 @@
   }
 
   test_loadLibraryDefined() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 foo() => 22;''');
     await assertNoErrorsInCode(r'''
@@ -2813,13 +2813,13 @@
   }
 
   test_optionalNew_rewrite() async {
-    newFile("$testPackageLibPath/a.dart", content: r'''
+    newFile2("$testPackageLibPath/a.dart", r'''
 class A {
   const A();
   const A.named();
 }
 ''');
-    newFile("$testPackageLibPath/b.dart", content: r'''
+    newFile2("$testPackageLibPath/b.dart", r'''
 import 'a.dart';
 import 'a.dart' as p;
 
@@ -2849,7 +2849,7 @@
   }
 
   test_optionalNew_rewrite_instantiatesToBounds() async {
-    newFile("$testPackageLibPath/a.dart", content: r'''
+    newFile2("$testPackageLibPath/a.dart", r'''
 class Unbounded<T> {
   const Unbounded();
   const Unbounded.named();
@@ -2859,7 +2859,7 @@
   const Bounded.named();
 }
 ''');
-    newFile("$testPackageLibPath/b.dart", content: r'''
+    newFile2("$testPackageLibPath/b.dart", r'''
 import 'a.dart';
 import 'a.dart' as p;
 
@@ -2902,7 +2902,7 @@
     expect(result.unit.declarations, hasLength(1));
     final mainDecl = result.unit.declarations[0];
     expect(mainDecl.metadata, hasLength(8));
-    mainDecl.metadata.forEach((metadata) {
+    for (var metadata in mainDecl.metadata) {
       final value = metadata.elementAnnotation!.computeConstantValue()!;
       expect(value, isNotNull);
       assertType(value.type, 'B');
@@ -2915,7 +2915,7 @@
         expect(unbounded.isNull, true);
         assertType(bounded.type, 'Bounded<String>');
       }
-    });
+    }
   }
 
   test_parameterScope_local() async {
@@ -3050,13 +3050,13 @@
   }
 
   test_sharedDeferredPrefix() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 f1() {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 f2() {}
 ''');
-    newFile('$testPackageLibPath/lib3.dart', content: r'''
+    newFile2('$testPackageLibPath/lib3.dart', r'''
 f3() {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -3237,7 +3237,7 @@
   }
 
   test_typeType_class_prefixed() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 class C {}''');
     await assertNoErrorsInCode(r'''
@@ -3260,7 +3260,7 @@
   }
 
   test_typeType_functionTypeAlias_prefixed() async {
-    newFile("$testPackageLibPath/lib.dart", content: r'''
+    newFile2("$testPackageLibPath/lib.dart", r'''
 library lib;
 typedef F();''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index e283dd5..17cf69b 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -235,8 +235,8 @@
   }
 
   test_import_referenceIntoLibDirectory() async {
-    newFile("/myproj/pubspec.yaml", content: "");
-    newFile("/myproj/lib/other.dart", content: "");
+    newFile2("/myproj/pubspec.yaml", '');
+    newFile2("/myproj/lib/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/web/test.dart", "import '../lib/other.dart';", [
       error(HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE, 0, 0),
@@ -244,14 +244,14 @@
   }
 
   test_import_referenceIntoLibDirectory_no_pubspec() async {
-    newFile("/myproj/lib/other.dart", content: "");
+    newFile2("/myproj/lib/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/web/test.dart", "import '../lib/other.dart';", []);
   }
 
   test_import_referenceOutOfLibDirectory() async {
-    newFile("/myproj/pubspec.yaml", content: "");
-    newFile("/myproj/web/other.dart", content: "");
+    newFile2("/myproj/pubspec.yaml", '');
+    newFile2("/myproj/web/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/lib/test.dart", "import '../web/other.dart';", [
       error(HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE, 0, 0),
@@ -259,28 +259,28 @@
   }
 
   test_import_referenceOutOfLibDirectory_no_pubspec() async {
-    newFile("/myproj/web/other.dart", content: "");
+    newFile2("/myproj/web/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/lib/test.dart", "import '../web/other.dart';", []);
   }
 
   test_import_valid_inside_lib1() async {
-    newFile("/myproj/pubspec.yaml", content: "");
-    newFile("/myproj/lib/other.dart", content: "");
+    newFile2("/myproj/pubspec.yaml", '');
+    newFile2("/myproj/lib/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/lib/test.dart", "import 'other.dart';", []);
   }
 
   test_import_valid_inside_lib2() async {
-    newFile("/myproj/pubspec.yaml", content: "");
-    newFile("/myproj/lib/bar/other.dart", content: "");
+    newFile2("/myproj/pubspec.yaml", '');
+    newFile2("/myproj/lib/bar/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/lib/foo/test.dart", "import '../bar/other.dart';", []);
   }
 
   test_import_valid_outside_lib() async {
-    newFile("/myproj/pubspec.yaml", content: "");
-    newFile("/myproj/web/other.dart", content: "");
+    newFile2("/myproj/pubspec.yaml", '');
+    newFile2("/myproj/web/other.dart", '');
     await _assertErrorsInCodeInFile(
         "/myproj/lib2/test.dart", "import '../web/other.dart';", []);
   }
@@ -288,7 +288,7 @@
   Future<void> _assertErrorsInCodeInFile(
       String path, String content, List<ExpectedError> expectedErrors) async {
     path = convertPath(path);
-    newFile(path, content: content);
+    newFile2(path, content);
     result = await resolveFile(path);
 
     var errorListener = GatheringErrorListener();
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index e565e23..e0c50bb 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -555,7 +555,7 @@
       Token? token, String? typeArgumentsCode, String code) {
     String sc = '';
     if (token != null) {
-      sc += token.lexeme + ' ';
+      sc += '${token.lexeme} ';
     }
     if (typeArgumentsCode != null) {
       sc += typeArgumentsCode;
@@ -585,7 +585,7 @@
       Token? token, String? typeArgumentsCode, String code) {
     String sc = '';
     if (token != null) {
-      sc += token.lexeme + ' ';
+      sc += '${token.lexeme} ';
     }
     if (typeArgumentsCode != null) {
       sc += typeArgumentsCode;
@@ -1338,7 +1338,7 @@
       Token? token, String? typeArgumentsCode, String code) {
     String sc = '';
     if (token != null) {
-      sc += token.lexeme + ' ';
+      sc += '${token.lexeme} ';
     }
     if (typeArgumentsCode != null) {
       sc += typeArgumentsCode;
@@ -1372,7 +1372,7 @@
       Token? token, String? typeArgumentsCode, String code) {
     String sc = '';
     if (token != null) {
-      sc += token.lexeme + ' ';
+      sc += '${token.lexeme} ';
     }
     if (typeArgumentsCode != null) {
       sc += typeArgumentsCode;
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index e53b5e8..e5232e6 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -528,7 +528,7 @@
   }
 
   test_invocation_target_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int max(int x, int y) => 0;
 ''');
     await resolveTestCode('''
@@ -591,7 +591,7 @@
   }
 
   test_objectAccessInference_disabled_for_library_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 dynamic get hashCode => 42;
 ''');
     await assertNoErrorsInCode('''
@@ -612,7 +612,7 @@
   }
 
   test_objectMethodInference_disabled_for_library_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 dynamic toString = (int x) => x + 42;
 ''');
     await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index ba05ff5..704b831 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -227,7 +227,7 @@
       MethodInvocation invocation = parent;
       if (identical(invocation.methodName, node)) {
         var target = invocation.realTarget;
-        var targetType = target == null ? null : target.staticType;
+        var targetType = target?.staticType;
         if (targetType == null || targetType.isDynamic) {
           return;
         }
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 254dea0..d4cedc5 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -422,7 +422,7 @@
   }
 
   test_entryPoint_exported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 main() {}
 ''');
 
@@ -457,7 +457,7 @@
   }
 
   test_enum_externalLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum EEE {A, B, C}
 ''');
     await assertNoErrorsInCode(r'''
@@ -590,11 +590,11 @@
   }
 
   test_import_hide() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 set foo(value) {}
 class A {}''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 set foo(value) {}''');
 
     await assertNoErrorsInCode(r'''
@@ -609,7 +609,7 @@
   }
 
   test_import_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 f(int x) {
   return x * x;
 }''');
@@ -678,7 +678,7 @@
   }
 
   test_import_spaceInUri() async {
-    newFile('$testPackageLibPath/sub folder/a.dart', content: r'''
+    newFile2('$testPackageLibPath/sub folder/a.dart', r'''
 foo() {}''');
 
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index b34ef50..e2f886f 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -227,33 +227,37 @@
     if (buffer.isNotEmpty) {
       errors.sort((first, second) => first.offset.compareTo(second.offset));
       buffer.writeln();
-      buffer.writeln('To accept the current state, expect:');
-      for (AnalysisError actual in errors) {
-        List<DiagnosticMessage> contextMessages = actual.contextMessages;
-        buffer.write('  error(');
-        buffer.write(actual.errorCode);
-        buffer.write(', ');
-        buffer.write(actual.offset);
-        buffer.write(', ');
-        buffer.write(actual.length);
-        if (contextMessages.isNotEmpty) {
-          buffer.write(', contextMessages: [');
-          for (int i = 0; i < contextMessages.length; i++) {
-            DiagnosticMessage message = contextMessages[i];
-            if (i > 0) {
+      if (errors.isEmpty) {
+        buffer.writeln('To accept the current state, expect no errors.');
+      } else {
+        buffer.writeln('To accept the current state, expect:');
+        for (AnalysisError actual in errors) {
+          List<DiagnosticMessage> contextMessages = actual.contextMessages;
+          buffer.write('  error(');
+          buffer.write(actual.errorCode);
+          buffer.write(', ');
+          buffer.write(actual.offset);
+          buffer.write(', ');
+          buffer.write(actual.length);
+          if (contextMessages.isNotEmpty) {
+            buffer.write(', contextMessages: [');
+            for (int i = 0; i < contextMessages.length; i++) {
+              DiagnosticMessage message = contextMessages[i];
+              if (i > 0) {
+                buffer.write(', ');
+              }
+              buffer.write('message(\'');
+              buffer.write(message.filePath);
+              buffer.write('\', ');
+              buffer.write(message.offset);
               buffer.write(', ');
+              buffer.write(message.length);
+              buffer.write(')');
             }
-            buffer.write('message(\'');
-            buffer.write(message.filePath);
-            buffer.write('\', ');
-            buffer.write(message.offset);
-            buffer.write(', ');
-            buffer.write(message.length);
-            buffer.write(')');
+            buffer.write(']');
           }
-          buffer.write(']');
+          buffer.writeln('),');
         }
-        buffer.writeln('),');
       }
       fail(buffer.toString());
     }
@@ -447,7 +451,7 @@
   TimestampedData<String> get contents {
     readCount++;
     if (generateExceptionOnRead) {
-      String msg = "I/O Exception while getting the contents of " + _name;
+      String msg = "I/O Exception while getting the contents of $_name";
       throw Exception(msg);
     }
     return TimestampedData<String>(0, _contents);
@@ -512,7 +516,7 @@
   }
 
   @override
-  String toString() => '$_name';
+  String toString() => _name;
 }
 
 class TestSourceWithUri extends TestSource {
diff --git a/pkg/analyzer/test/source/analysis_options_provider_test.dart b/pkg/analyzer/test/source/analysis_options_provider_test.dart
index 8cb98e3..cb2db31 100644
--- a/pkg/analyzer/test/source/analysis_options_provider_test.dart
+++ b/pkg/analyzer/test/source/analysis_options_provider_test.dart
@@ -101,12 +101,12 @@
 
   void test_getOptions_crawlUp_hasInFolder() {
     newFolder('/foo/bar');
-    newFile('/foo/$analysisOptionsYaml', content: r'''
+    newFile2('/foo/$analysisOptionsYaml', r'''
 analyzer:
   ignore:
     - foo
 ''');
-    newFile('/foo/bar/$analysisOptionsYaml', content: r'''
+    newFile2('/foo/bar/$analysisOptionsYaml', r'''
 analyzer:
   ignore:
     - bar
@@ -122,12 +122,12 @@
 
   void test_getOptions_crawlUp_hasInParent() {
     newFolder('/foo/bar/baz');
-    newFile('/foo/$analysisOptionsYaml', content: r'''
+    newFile2('/foo/$analysisOptionsYaml', r'''
 analyzer:
   ignore:
     - foo
 ''');
-    newFile('/foo/bar/$analysisOptionsYaml', content: r'''
+    newFile2('/foo/bar/$analysisOptionsYaml', r'''
 analyzer:
   ignore:
     - bar
@@ -148,20 +148,20 @@
   }
 
   void test_getOptions_empty() {
-    newFile('/$analysisOptionsYaml', content: r'''#empty''');
+    newFile2('/$analysisOptionsYaml', r'''#empty''');
     YamlMap options = _getOptions('/');
     expect(options, isNotNull);
     expect(options, isEmpty);
   }
 
   void test_getOptions_include() {
-    newFile('/foo.include', content: r'''
+    newFile2('/foo.include', r'''
 analyzer:
   ignore:
     - ignoreme.dart
     - 'sdk_ext/**'
 ''');
-    newFile('/$analysisOptionsYaml', content: r'''
+    newFile2('/$analysisOptionsYaml', r'''
 include: foo.include
 ''');
     YamlMap options = _getOptions('/');
@@ -179,12 +179,12 @@
   }
 
   void test_getOptions_include_emptyLints() {
-    newFile('/foo.include', content: r'''
+    newFile2('/foo.include', r'''
 linter:
   rules:
     - prefer_single_quotes
 ''');
-    newFile('/$analysisOptionsYaml', content: r'''
+    newFile2('/$analysisOptionsYaml', r'''
 include: foo.include
 linter:
   rules:
@@ -204,7 +204,7 @@
   }
 
   void test_getOptions_include_missing() {
-    newFile('/$analysisOptionsYaml', content: r'''
+    newFile2('/$analysisOptionsYaml', r'''
 include: /foo.include
 ''');
     YamlMap options = _getOptions('/');
@@ -212,13 +212,13 @@
   }
 
   void test_getOptions_invalid() {
-    newFile('/$analysisOptionsYaml', content: r''':''');
+    newFile2('/$analysisOptionsYaml', r''':''');
     YamlMap options = _getOptions('/');
     expect(options, hasLength(1));
   }
 
   void test_getOptions_simple() {
-    newFile('/$analysisOptionsYaml', content: r'''
+    newFile2('/$analysisOptionsYaml', r'''
 analyzer:
   ignore:
     - ignoreme.dart
diff --git a/pkg/analyzer/test/source/package_map_resolver_test.dart b/pkg/analyzer/test/source/package_map_resolver_test.dart
index 27d7a9c..5498a6d 100644
--- a/pkg/analyzer/test/source/package_map_resolver_test.dart
+++ b/pkg/analyzer/test/source/package_map_resolver_test.dart
@@ -71,7 +71,7 @@
     var b = provider.newFile(provider.convertPath('/bbb/b.dart'), '');
     expect(() {
       PackageMapUriResolver(provider, <String, List<Folder>>{
-        'pkg': <Folder>[a.parent2, b.parent2]
+        'pkg': <Folder>[a.parent, b.parent]
       });
     }, throwsArgumentError);
   }
diff --git a/pkg/analyzer/test/src/context/package_config_json_test.dart b/pkg/analyzer/test/src/context/package_config_json_test.dart
index 382d4ce..b1090fd 100644
--- a/pkg/analyzer/test/src/context/package_config_json_test.dart
+++ b/pkg/analyzer/test/src/context/package_config_json_test.dart
@@ -24,7 +24,7 @@
   }
 
   void setUp() {
-    newFile('/test/lib/test.dart', content: '');
+    newFile2('/test/lib/test.dart', '');
   }
 
   test_configVersion_2() {
@@ -301,7 +301,7 @@
 
   PackageConfigJson _parse(String content) {
     var path = '/test/.dart_tool/package_config.json';
-    newFile(path, content: content);
+    newFile2(path, content);
 
     var uri = toUri(path);
     return parsePackageConfigJson(uri, content);
diff --git a/pkg/analyzer/test/src/context/packages_test.dart b/pkg/analyzer/test/src/context/packages_test.dart
index 17cef59..a4e359a6 100644
--- a/pkg/analyzer/test/src/context/packages_test.dart
+++ b/pkg/analyzer/test/src/context/packages_test.dart
@@ -17,33 +17,7 @@
 @reflectiveTest
 class PackagesTest with ResourceProviderMixin {
   void setUp() {
-    newFile('/test/lib/test.dart', content: '');
-  }
-
-  void test_findPackagesFrom_fallbackToDotPackages() {
-    newDotPackagesFile('/test', content: '''
-test:lib/
-bbb:${toUriStr('/packages/bbb/lib')}
-''');
-
-    var packages = findPackagesFrom(
-      resourceProvider,
-      getFile('/test/lib/a.dart'),
-    );
-
-    _assertPackage(
-      packages,
-      name: 'test',
-      expectedLibPath: '/test/lib',
-      expectedVersion: null,
-    );
-
-    _assertPackage(
-      packages,
-      name: 'bbb',
-      expectedLibPath: '/packages/bbb/lib',
-      expectedVersion: null,
-    );
+    newFile2('/test/lib/test.dart', '');
   }
 
   void test_findPackagesFrom_missing() {
@@ -55,52 +29,6 @@
     expect(packages.packages, isEmpty);
   }
 
-  void test_findPackagesFrom_preferPackageConfig() {
-    newFile('/test/.dart_tool/package_config.json', content: '''
-{
-  "configVersion": 2,
-  "packages": [
-    {
-      "name": "test",
-      "rootUri": "../",
-      "packageUri": "lib/",
-      "languageVersion": "2.6"
-    },
-    {
-      "name": "aaa",
-      "rootUri": "${toUriStr('/packages/aaa')}",
-      "packageUri": "lib/",
-      "languageVersion": "2.3"
-    }
-  ]
-}
-''');
-
-    newDotPackagesFile('/test', content: '''
-test:lib/
-bbb:${toUriStr('/packages/bbb/lib')}
-''');
-
-    var packages = findPackagesFrom(
-      resourceProvider,
-      getFile('/test/lib/a.dart'),
-    );
-
-    _assertPackage(
-      packages,
-      name: 'test',
-      expectedLibPath: '/test/lib',
-      expectedVersion: Version(2, 6, 0),
-    );
-
-    _assertPackage(
-      packages,
-      name: 'aaa',
-      expectedLibPath: '/packages/aaa/lib',
-      expectedVersion: Version(2, 3, 0),
-    );
-  }
-
   test_packageForPath() {
     var packages = Packages(
       {
@@ -137,31 +65,8 @@
     check('/home/ddd/lib/d.dart', null);
   }
 
-  test_parseDotPackagesFile() {
-    var file = newDotPackagesFile('/test', content: '''
-# Generated by pub
-aaa:${toUriStr('/packages/aaa/lib/')}
-test:lib/
-''');
-    var packages = parseDotPackagesFile(resourceProvider, file);
-
-    _assertPackage(
-      packages,
-      name: 'test',
-      expectedLibPath: '/test/lib',
-      expectedVersion: null,
-    );
-
-    _assertPackage(
-      packages,
-      name: 'aaa',
-      expectedLibPath: '/packages/aaa/lib',
-      expectedVersion: null,
-    );
-  }
-
   test_parsePackageConfigJsonFile() {
-    var file = newFile('/test/.dart_tool/package_config.json', content: '''
+    var file = newFile2('/test/.dart_tool/package_config.json', '''
 {
   "configVersion": 2,
   "packages": [
@@ -209,24 +114,9 @@
     );
   }
 
-  test_parsePackagesFile_dotPackages() {
-    var dotPackagesFile = newDotPackagesFile('/test', content: '''
-bbb:${toUriStr('/packages/bbb/lib')}
-''');
-
-    var packages = parsePackagesFile(resourceProvider, dotPackagesFile);
-
-    _assertPackage(
-      packages,
-      name: 'bbb',
-      expectedLibPath: '/packages/bbb/lib',
-      expectedVersion: null,
-    );
-  }
-
   test_parsePackagesFile_packageConfig() {
     var path = convertPath('/test/.dart_tool/package_config.json');
-    newFile(path, content: '''
+    newFile2(path, '''
 {
   "configVersion": 2,
   "packages": [
@@ -250,38 +140,6 @@
     );
   }
 
-  test_parsePackagesFile_packageConfig_fromDotPackages() {
-    newFile('/test/.dart_tool/package_config.json', content: '''
-{
-  "configVersion": 2,
-  "packages": [
-    {
-      "name": "aaa",
-      "rootUri": "${toUriStr('/packages/aaa')}",
-      "packageUri": "lib/",
-      "languageVersion": "2.3"
-    }
-  ]
-}
-''');
-
-    var dotPackagesFile = newDotPackagesFile('/test', content: '''
-bbb:${toUriStr('/packages/bbb/lib')}
-''');
-
-    var packages = parsePackagesFile(
-      resourceProvider,
-      dotPackagesFile,
-    );
-
-    _assertPackage(
-      packages,
-      name: 'aaa',
-      expectedLibPath: '/packages/aaa/lib',
-      expectedVersion: Version(2, 3, 0),
-    );
-  }
-
   void _assertPackage(
     Packages packages, {
     required String name,
diff --git a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
index e8c8c62..2ff4f6d 100644
--- a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
@@ -57,7 +57,7 @@
   test_new_analysisOptions_includes() {
     var rootFolder = newFolder('/home/test');
     var fooFolder = newFolder('/home/packages/foo');
-    newFile('${fooFolder.path}/lib/included.yaml', content: r'''
+    newFile2('${fooFolder.path}/lib/included.yaml', r'''
 linter:
   rules:
     - empty_statements
@@ -67,10 +67,10 @@
       ..add(name: 'foo', rootPath: fooFolder.path);
     newPackageConfigJsonFile(
       rootFolder.path,
-      content: packageConfigFileBuilder.toContent(toUriStr: toUriStr),
+      packageConfigFileBuilder.toContent(toUriStr: toUriStr),
     );
 
-    newAnalysisOptionsYamlFile(rootFolder.path, content: r'''
+    newAnalysisOptionsYamlFile2(rootFolder.path, r'''
 include: package:foo/included.yaml
 
 linter:
@@ -90,7 +90,7 @@
 
   test_new_analysisOptions_lintRules() {
     var rootFolder = newFolder('/home/test');
-    newAnalysisOptionsYamlFile(rootFolder.path, content: r'''
+    newAnalysisOptionsYamlFile2(rootFolder.path, r'''
 linter:
   rules:
     - non_existent_lint_rule
@@ -124,11 +124,11 @@
 
   test_new_outer_inner() {
     var outerFolder = newFolder('/test/outer');
-    newFile('/test/outer/lib/outer.dart');
+    newFile2('/test/outer/lib/outer.dart', '');
 
     var innerFolder = newFolder('/test/outer/inner');
-    newAnalysisOptionsYamlFile('/test/outer/inner');
-    newFile('/test/outer/inner/inner.dart');
+    newAnalysisOptionsYamlFile2('/test/outer/inner', '');
+    newFile2('/test/outer/inner/inner.dart', '');
 
     var collection = _newCollection(includedPaths: [outerFolder.path]);
 
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 4ed178b..b5bbf7d 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -42,7 +42,7 @@
 
   void addTestFile(String content, {bool priority = false}) {
     testCode = content;
-    newFile(testFile, content: content);
+    newFile2(testFile, content);
     driver.addFile(testFile);
     if (priority) {
       driver.priorityFiles = [testFile];
@@ -95,7 +95,6 @@
   }
 
   AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
-    ..useFastaParser = true
     ..contextFeatures = FeatureSet.latestLanguageVersion();
 
   int findOffset(String search) {
diff --git a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
index 17144c0..dc50e76 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
@@ -60,7 +60,7 @@
 
   void test_analysisOptions_invalid() {
     var projectPath = convertPath('/home/test');
-    newAnalysisOptionsYamlFile(projectPath, content: ';');
+    newAnalysisOptionsYamlFile2(projectPath, ';');
 
     var analysisContext = _createSingleAnalysisContext(projectPath);
     var analysisOptions = analysisContext.analysisOptionsImpl;
@@ -69,9 +69,9 @@
 
   void test_analysisOptions_languageOptions() {
     var projectPath = convertPath('/home/test');
-    newAnalysisOptionsYamlFile(
+    newAnalysisOptionsYamlFile2(
       projectPath,
-      content: AnalysisOptionsFileConfig(
+      AnalysisOptionsFileConfig(
         strictRawTypes: true,
       ).toContent(),
     );
@@ -98,7 +98,7 @@
 
   void test_analysisOptions_sdkVersionConstraint_noPubspec() {
     var projectPath = convertPath('/home/test');
-    newFile('$projectPath/lib/a.dart');
+    newFile2('$projectPath/lib/a.dart', '');
 
     var analysisContext = _createSingleAnalysisContext(projectPath);
     var analysisOptions = analysisContext.driver.analysisOptions;
@@ -167,7 +167,7 @@
 
   void test_sourceFactory_bazelWorkspace() {
     var projectPath = convertPath('/workspace/my/module');
-    newFile('/workspace/WORKSPACE');
+    newFile2('/workspace/WORKSPACE', '');
     newFolder('/workspace/bazel-bin');
     newFolder('/workspace/bazel-genfiles');
 
@@ -186,7 +186,7 @@
 
   void test_sourceFactory_pubWorkspace() {
     var projectPath = convertPath('/home/my');
-    newFile('/home/my/pubspec.yaml');
+    newFile2('/home/my/pubspec.yaml', '');
 
     var analysisContext = _createSingleAnalysisContext(projectPath);
     expect(analysisContext.contextRoot.workspace, isA<PubWorkspace>());
diff --git a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
index efbf9533f..36f385f 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_locator_test.dart
@@ -48,8 +48,8 @@
 
   void test_locateRoots_link_file_toOutOfRoot() {
     Folder rootFolder = newFolder('/home/test');
-    newFile('/home/test/lib/a.dart');
-    newFile('/home/b.dart');
+    newFile2('/home/test/lib/a.dart', '');
+    newFile2('/home/b.dart', '');
     resourceProvider.newLink(
       convertPath('/home/test/lib/c.dart'),
       convertPath('/home/b.dart'),
@@ -73,7 +73,7 @@
 
   void test_locateRoots_link_file_toSiblingInRoot() {
     Folder rootFolder = newFolder('/test');
-    newFile('/test/lib/a.dart');
+    newFile2('/test/lib/a.dart', '');
     resourceProvider.newLink(
       convertPath('/test/lib/b.dart'),
       convertPath('/test/lib/a.dart'),
@@ -97,7 +97,7 @@
 
   void test_locateRoots_link_folder_notExistingTarget() {
     var rootFolder = newFolder('/test');
-    newFile('/test/lib/a.dart');
+    newFile2('/test/lib/a.dart', '');
     newFolder('/test/lib/foo');
     resourceProvider.newLink(
       convertPath('/test/lib/foo'),
@@ -127,7 +127,7 @@
 
   void test_locateRoots_link_folder_toParentInRoot() {
     Folder rootFolder = newFolder('/test');
-    newFile('/test/lib/a.dart');
+    newFile2('/test/lib/a.dart', '');
     resourceProvider.newLink(
       convertPath('/test/lib/foo'),
       convertPath('/test/lib'),
@@ -153,9 +153,9 @@
 
   void test_locateRoots_link_folder_toParentOfRoot() {
     Folder rootFolder = newFolder('/home/test');
-    newFile('/home/test/lib/a.dart');
-    newFile('/home/b.dart');
-    newFile('/home/other/c.dart');
+    newFile2('/home/test/lib/a.dart', '');
+    newFile2('/home/b.dart', '');
+    newFile2('/home/other/c.dart', '');
     resourceProvider.newLink(
       convertPath('/home/test/lib/foo'),
       convertPath('/home'),
@@ -182,8 +182,8 @@
 
   void test_locateRoots_link_folder_toSiblingInRoot() {
     Folder rootFolder = newFolder('/test');
-    newFile('/test/lib/a.dart');
-    newFile('/test/lib/foo/b.dart');
+    newFile2('/test/lib/a.dart', '');
+    newFile2('/test/lib/foo/b.dart', '');
     resourceProvider.newLink(
       convertPath('/test/lib/bar'),
       convertPath('/test/lib/foo'),
@@ -209,12 +209,12 @@
   void test_locateRoots_multiple_dirAndNestedDir_excludedByOptions() {
     var rootPath = convertPath('/home/test');
     var rootFolder = newFolder(rootPath);
-    var optionsFile = newAnalysisOptionsYamlFile(rootPath, content: r'''
+    var optionsFile = newAnalysisOptionsYamlFile2(rootPath, r'''
 analyzer:
   exclude:
     - examples/**
 ''');
-    var packagesFile = newPackageConfigJsonFile(rootPath);
+    var packagesFile = newPackageConfigJsonFile(rootPath, '');
     var includedFolder = newFolder('$rootPath/examples/included');
     newFolder('$rootPath/examples/not_included'); // not used
 
@@ -234,8 +234,10 @@
 
   void test_locateRoots_multiple_dirAndNestedDir_innerConfigurationFiles() {
     var outerRootFolder = newFolder('/outer');
-    var innerOptionsFile = newAnalysisOptionsYamlFile('/outer/examples/inner');
-    var innerPackagesFile = newDotPackagesFile('/outer/examples/inner');
+    var innerOptionsFile =
+        newAnalysisOptionsYamlFile2('/outer/examples/inner', '');
+    var innerPackagesFile =
+        newPackageConfigJsonFile('/outer/examples/inner', '');
     var innerRootFolder = newFolder('/outer/examples/inner');
 
     var roots = contextLocator.locateRoots(
@@ -273,8 +275,8 @@
 
   void test_locateRoots_multiple_dirAndNestedDir_outerConfigurationFiles() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
@@ -291,15 +293,15 @@
   void test_locateRoots_multiple_dirAndNestedFile_excludedByOptions() {
     var rootPath = convertPath('/home/test');
     var rootFolder = newFolder(rootPath);
-    var optionsFile = newAnalysisOptionsYamlFile(rootPath, content: r'''
+    var optionsFile = newAnalysisOptionsYamlFile2(rootPath, r'''
 analyzer:
   exclude:
     - lib/f*.dart
 ''');
-    var packagesFile = newPackageConfigJsonFile(rootPath);
-    var fooFile = newFile('$rootPath/lib/foo.dart');
-    newFile('$rootPath/lib/far.dart'); // not used
-    var barFile = newFile('$rootPath/lib/bar.dart');
+    var packagesFile = newPackageConfigJsonFile(rootPath, '');
+    var fooFile = newFile2('$rootPath/lib/foo.dart', '');
+    newFile2('$rootPath/lib/far.dart', ''); // not used
+    var barFile = newFile2('$rootPath/lib/bar.dart', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [rootFolder.path, fooFile.path],
@@ -320,7 +322,7 @@
 
   void test_locateRoots_multiple_dirAndNestedFile_noConfigurationFiles() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File testFile = newFile('/test/outer/examples/inner/test.dart');
+    File testFile = newFile2('/test/outer/examples/inner/test.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [outerRootFolder.path, testFile.path]);
@@ -335,9 +337,9 @@
 
   void test_locateRoots_multiple_dirAndNestedFile_outerConfigurationFiles() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
-    File testFile = newFile('/test/outer/examples/inner/test.dart');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
+    File testFile = newFile2('/test/outer/examples/inner/test.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [outerRootFolder.path, testFile.path]);
@@ -352,12 +354,12 @@
 
   void test_locateRoots_multiple_dirAndSiblingDir_bothConfigurationFiles() {
     Folder outer1RootFolder = newFolder('/test/outer1');
-    File outer1OptionsFile = newAnalysisOptionsYamlFile('/test/outer1');
-    File outer1PackagesFile = newDotPackagesFile('/test/outer1');
+    File outer1OptionsFile = newAnalysisOptionsYamlFile2('/test/outer1', '');
+    File outer1PackagesFile = newPackageConfigJsonFile('/test/outer1', '');
 
     Folder outer2RootFolder = newFolder('/test/outer2');
-    File outer2OptionsFile = newAnalysisOptionsYamlFile('/test/outer2');
-    File outer2PackagesFile = newDotPackagesFile('/test/outer2');
+    File outer2OptionsFile = newAnalysisOptionsYamlFile2('/test/outer2', '');
+    File outer2PackagesFile = newPackageConfigJsonFile('/test/outer2', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outer1RootFolder.path, outer2RootFolder.path]);
@@ -399,12 +401,12 @@
 
   void test_locateRoots_multiple_dirAndSiblingFile() {
     Folder outer1RootFolder = newFolder('/test/outer1');
-    File outer1OptionsFile = newAnalysisOptionsYamlFile('/test/outer1');
-    File outer1PackagesFile = newDotPackagesFile('/test/outer1');
+    File outer1OptionsFile = newAnalysisOptionsYamlFile2('/test/outer1', '');
+    File outer1PackagesFile = newPackageConfigJsonFile('/test/outer1', '');
 
-    File outer2OptionsFile = newAnalysisOptionsYamlFile('/test/outer2');
-    File outer2PackagesFile = newDotPackagesFile('/test/outer2');
-    File testFile = newFile('/test/outer2/test.dart');
+    File outer2OptionsFile = newAnalysisOptionsYamlFile2('/test/outer2', '');
+    File outer2PackagesFile = newPackageConfigJsonFile('/test/outer2', '');
+    File testFile = newFile2('/test/outer2/test.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [outer1RootFolder.path, testFile.path]);
@@ -416,7 +418,7 @@
     expect(outer1Root.optionsFile, outer1OptionsFile);
     expect(outer1Root.packagesFile, outer1PackagesFile);
 
-    ContextRoot outer2Root = findRoot(roots, testFile.parent2);
+    ContextRoot outer2Root = findRoot(roots, testFile.parent);
     expect(outer2Root.includedPaths, unorderedEquals([testFile.path]));
     expect(outer2Root.excludedPaths, isEmpty);
     expect(outer2Root.optionsFile, outer2OptionsFile);
@@ -425,7 +427,7 @@
 
   void test_locateRoots_multiple_dirAndSiblingFile_noConfigurationFiles() {
     Folder outer1RootFolder = newFolder('/test/outer1');
-    File testFile = newFile('/test/outer2/test.dart');
+    File testFile = newFile2('/test/outer2/test.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [outer1RootFolder.path, testFile.path]);
@@ -450,15 +452,15 @@
     var pkgPath1 = '$workspacePath1/pkg1';
     var pkgPath2 = '$workspacePath2/pkg2';
 
-    newFile('$workspacePath1/WORKSPACE');
-    newFile('$workspacePath2/WORKSPACE');
+    newFile2('$workspacePath1/WORKSPACE', '');
+    newFile2('$workspacePath2/WORKSPACE', '');
     newBazelBuildFile(pkgPath1, '');
     newBazelBuildFile(pkgPath2, '');
 
     var folder1 = newFolder('$pkgPath1/lib/folder1');
     var folder2 = newFolder('$pkgPath2/lib/folder2');
-    var file1 = newFile('$pkgPath1/lib/folder1/file1.dart');
-    var file2 = newFile('$pkgPath2/lib/folder2/file2.dart');
+    var file1 = newFile2('$pkgPath1/lib/folder1/file1.dart', '');
+    var file2 = newFile2('$pkgPath2/lib/folder2/file2.dart', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [folder1.path, folder2.path],
@@ -485,14 +487,14 @@
   /// Even if a file is excluded by the options, when it is explicitly included
   /// into analysis, it should be analyzed.
   void test_locateRoots_multiple_fileAndSiblingFile_excludedByOptions() {
-    File optionsFile = newAnalysisOptionsYamlFile('/home/test', content: r'''
+    File optionsFile = newAnalysisOptionsYamlFile2('/home/test', r'''
 analyzer:
   exclude:
     - lib/test2.dart
 ''');
-    File packagesFile = newDotPackagesFile('/home/test');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    File packagesFile = newPackageConfigJsonFile('/home/test', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
@@ -509,9 +511,9 @@
   }
 
   void test_locateRoots_multiple_fileAndSiblingFile_hasOptions() {
-    File optionsFile = newAnalysisOptionsYamlFile('/home/test');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    File optionsFile = newAnalysisOptionsYamlFile2('/home/test', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
@@ -529,10 +531,10 @@
 
   void
       test_locateRoots_multiple_fileAndSiblingFile_hasOptions_overrideOptions() {
-    newAnalysisOptionsYamlFile('/home/test'); // not used
-    File overrideOptionsFile = newAnalysisOptionsYamlFile('/home');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    newAnalysisOptionsYamlFile2('/home/test', ''); // not used
+    File overrideOptionsFile = newAnalysisOptionsYamlFile2('/home', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
       includedPaths: [testFile1.path, testFile2.path],
@@ -551,10 +553,10 @@
   }
 
   void test_locateRoots_multiple_fileAndSiblingFile_hasOptionsPackages() {
-    File optionsFile = newAnalysisOptionsYamlFile('/home/test');
-    File packagesFile = newDotPackagesFile('/home/test');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    File optionsFile = newAnalysisOptionsYamlFile2('/home/test', '');
+    File packagesFile = newPackageConfigJsonFile('/home/test', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
@@ -571,9 +573,9 @@
   }
 
   void test_locateRoots_multiple_fileAndSiblingFile_hasPackages() {
-    File packagesFile = newDotPackagesFile('/home/test');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    File packagesFile = newPackageConfigJsonFile('/home/test', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
@@ -595,10 +597,10 @@
   /// just the file system root.
   void
       test_locateRoots_multiple_fileAndSiblingFile_hasPackages_overridePackages() {
-    newDotPackagesFile('/home/test'); // not used
-    File overridePackagesFile = newDotPackagesFile('/home');
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    newPackageConfigJsonFile('/home/test', ''); // not used
+    File overridePackagesFile = newPackageConfigJsonFile('/home', '');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
       includedPaths: [testFile1.path, testFile2.path],
@@ -619,8 +621,8 @@
   /// When there are no configuration files, we can use the root of the file
   /// system, because it contains all the files.
   void test_locateRoots_multiple_fileAndSiblingFile_noConfigurationFiles() {
-    File testFile1 = newFile('/home/test/lib/test1.dart');
-    File testFile2 = newFile('/home/test/lib/test2.dart');
+    File testFile1 = newFile2('/home/test/lib/test1.dart', '');
+    File testFile2 = newFile2('/home/test/lib/test2.dart', '');
 
     List<ContextRoot> roots = contextLocator
         .locateRoots(includedPaths: [testFile1.path, testFile2.path]);
@@ -643,13 +645,13 @@
     var pkgPath1 = '$workspacePath1/pkg1';
     var pkgPath2 = '$workspacePath2/pkg2';
 
-    newFile('$workspacePath1/WORKSPACE');
-    newFile('$workspacePath2/WORKSPACE');
+    newFile2('$workspacePath1/WORKSPACE', '');
+    newFile2('$workspacePath2/WORKSPACE', '');
     newBazelBuildFile(pkgPath1, '');
     newBazelBuildFile(pkgPath2, '');
 
-    var file1 = newFile('$pkgPath1/lib/file1.dart');
-    var file2 = newFile('$pkgPath2/lib/file2.dart');
+    var file1 = newFile2('$pkgPath1/lib/file1.dart', '');
+    var file2 = newFile2('$pkgPath2/lib/file2.dart', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [file1.path, file2.path],
@@ -678,12 +680,12 @@
     var fooPath = '$workspacePath/foo';
     var barPath = '$workspacePath/bar';
 
-    newFile('$workspacePath/WORKSPACE');
+    newFile2('$workspacePath/WORKSPACE', '');
     newBazelBuildFile(fooPath, '');
     newBazelBuildFile(barPath, '');
 
-    var fooFile = newFile('$fooPath/lib/foo.dart');
-    var barFile = newFile('$barPath/lib/bar.dart');
+    var fooFile = newFile2('$fooPath/lib/foo.dart', '');
+    var barFile = newFile2('$barPath/lib/bar.dart', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [fooFile.path, barFile.path],
@@ -707,8 +709,8 @@
     newPubspecYamlFile(fooPath, '');
     newPubspecYamlFile(barPath, '');
 
-    var fooFile = newFile('$fooPath/lib/foo.dart');
-    var barFile = newFile('$barPath/lib/bar.dart');
+    var fooFile = newFile2('$fooPath/lib/foo.dart', '');
+    var barFile = newFile2('$barPath/lib/bar.dart', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [fooFile.path, barFile.path],
@@ -733,11 +735,11 @@
   }
 
   void test_locateRoots_multiple_files_sameOptions_differentPackages() {
-    var fooPackagesFile = newPackageConfigJsonFile('/home/foo');
-    var barPackagesFile = newPackageConfigJsonFile('/home/bar');
-    var optionsFile = newAnalysisOptionsYamlFile('/home');
-    var fooFile = newFile('/home/foo/lib/foo.dart');
-    var barFile = newFile('/home/bar/lib/bar.dart');
+    var fooPackagesFile = newPackageConfigJsonFile('/home/foo', '');
+    var barPackagesFile = newPackageConfigJsonFile('/home/bar', '');
+    var optionsFile = newAnalysisOptionsYamlFile2('/home', '');
+    var fooFile = newFile2('/home/foo/lib/foo.dart', '');
+    var barFile = newFile2('/home/bar/lib/bar.dart', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
       includedPaths: [fooFile.path, barFile.path],
@@ -760,11 +762,11 @@
   }
 
   void test_locateRoots_multiple_files_samePackages_differentOptions() {
-    var packagesFile = newPackageConfigJsonFile('/home');
-    var fooOptionsFile = newAnalysisOptionsYamlFile('/home/foo');
-    var barOptionsFile = newAnalysisOptionsYamlFile('/home/bar');
-    var fooFile = newFile('/home/foo/lib/foo.dart');
-    var barFile = newFile('/home/bar/lib/bar.dart');
+    var packagesFile = newPackageConfigJsonFile('/home', '');
+    var fooOptionsFile = newAnalysisOptionsYamlFile2('/home/foo', '');
+    var barOptionsFile = newAnalysisOptionsYamlFile2('/home/bar', '');
+    var fooFile = newFile2('/home/foo/lib/foo.dart', '');
+    var barFile = newFile2('/home/bar/lib/bar.dart', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
       includedPaths: [fooFile.path, barFile.path],
@@ -788,11 +790,11 @@
 
   void test_locateRoots_nested_excluded_dot() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
 
     newFolder('/test/outer/.examples');
-    newAnalysisOptionsYamlFile('/test/outer/.examples/inner');
+    newAnalysisOptionsYamlFile2('/test/outer/.examples/inner', '');
 
     // Only one analysis root, we skipped `.examples` for context roots.
     List<ContextRoot> roots =
@@ -808,10 +810,10 @@
 
   void test_locateRoots_nested_excluded_explicit() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder excludedFolder = newFolder('/test/outer/examples');
-    newAnalysisOptionsYamlFile('/test/outer/examples/inner');
+    newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -827,13 +829,14 @@
 
   void test_locateRoots_nested_multiple() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder inner1RootFolder = newFolder('/test/outer/examples/inner1');
     File inner1OptionsFile =
-        newAnalysisOptionsYamlFile('/test/outer/examples/inner1');
+        newAnalysisOptionsYamlFile2('/test/outer/examples/inner1', '');
     Folder inner2RootFolder = newFolder('/test/outer/examples/inner2');
-    File inner2PackagesFile = newDotPackagesFile('/test/outer/examples/inner2');
+    File inner2PackagesFile =
+        newPackageConfigJsonFile('/test/outer/examples/inner2', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
@@ -861,11 +864,11 @@
 
   void test_locateRoots_nested_options() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
     File innerOptionsFile =
-        newAnalysisOptionsYamlFile('/test/outer/examples/inner');
+        newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
@@ -886,11 +889,12 @@
 
   void test_locateRoots_nested_options_overriddenOptions() {
     Folder outerRootFolder = newFolder('/test/outer');
-    newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     newFolder('/test/outer/examples/inner');
-    newAnalysisOptionsYamlFile('/test/outer/examples/inner');
-    File overrideOptionsFile = newAnalysisOptionsYamlFile('/test/override');
+    newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
+    File overrideOptionsFile =
+        newAnalysisOptionsYamlFile2('/test/override', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -906,12 +910,12 @@
 
   void test_locateRoots_nested_options_overriddenPackages() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
     File innerOptionsFile =
-        newAnalysisOptionsYamlFile('/test/outer/examples/inner');
-    File overridePackagesFile = newDotPackagesFile('/test/override');
+        newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
+    File overridePackagesFile = newPackageConfigJsonFile('/test/override', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -933,12 +937,13 @@
 
   void test_locateRoots_nested_optionsAndPackages() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
     File innerOptionsFile =
-        newAnalysisOptionsYamlFile('/test/outer/examples/inner');
-    File innerPackagesFile = newDotPackagesFile('/test/outer/examples/inner');
+        newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
+    File innerPackagesFile =
+        newPackageConfigJsonFile('/test/outer/examples/inner', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
@@ -959,13 +964,14 @@
 
   void test_locateRoots_nested_optionsAndPackages_overriddenBoth() {
     Folder outerRootFolder = newFolder('/test/outer');
-    newAnalysisOptionsYamlFile('/test/outer');
-    newDotPackagesFile('/test/outer');
+    newAnalysisOptionsYamlFile2('/test/outer', '');
+    newPackageConfigJsonFile('/test/outer', '');
     newFolder('/test/outer/examples/inner');
-    newAnalysisOptionsYamlFile('/test/outer/examples/inner');
-    newDotPackagesFile('/test/outer/examples/inner');
-    File overrideOptionsFile = newAnalysisOptionsYamlFile('/test/override');
-    File overridePackagesFile = newDotPackagesFile('/test/override');
+    newAnalysisOptionsYamlFile2('/test/outer/examples/inner', '');
+    newPackageConfigJsonFile('/test/outer/examples/inner', '');
+    File overrideOptionsFile =
+        newAnalysisOptionsYamlFile2('/test/override', '');
+    File overridePackagesFile = newPackageConfigJsonFile('/test/override', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -982,11 +988,11 @@
 
   void test_locateRoots_nested_packageConfigJson() {
     var outerRootFolder = newFolder('/test/outer');
-    var outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    var outerPackagesFile = newPackageConfigJsonFile('/test/outer');
+    var outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    var outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     var innerRootFolder = newFolder('/test/outer/examples/inner');
     var innerPackagesFile =
-        newPackageConfigJsonFile('/test/outer/examples/inner');
+        newPackageConfigJsonFile('/test/outer/examples/inner', '');
 
     var roots = contextLocator.locateRoots(
       includedPaths: [outerRootFolder.path],
@@ -1008,10 +1014,11 @@
 
   void test_locateRoots_nested_packages() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
-    File innerPackagesFile = newDotPackagesFile('/test/outer/examples/inner');
+    File innerPackagesFile =
+        newPackageConfigJsonFile('/test/outer/examples/inner', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
@@ -1032,11 +1039,13 @@
 
   void test_locateRoots_nested_packages_overriddenOptions() {
     Folder outerRootFolder = newFolder('/test/outer');
-    newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     Folder innerRootFolder = newFolder('/test/outer/examples/inner');
-    File innerPackagesFile = newDotPackagesFile('/test/outer/examples/inner');
-    File overrideOptionsFile = newAnalysisOptionsYamlFile('/test/override');
+    File innerPackagesFile =
+        newPackageConfigJsonFile('/test/outer/examples/inner', '');
+    File overrideOptionsFile =
+        newAnalysisOptionsYamlFile2('/test/override', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -1058,11 +1067,11 @@
 
   void test_locateRoots_nested_packages_overriddenPackages() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    newPackageConfigJsonFile('/test/outer', '');
     newFolder('/test/outer/examples/inner');
-    newDotPackagesFile('/test/outer/examples/inner');
-    File overridePackagesFile = newDotPackagesFile('/test/override');
+    newPackageConfigJsonFile('/test/outer/examples/inner', '');
+    File overridePackagesFile = newPackageConfigJsonFile('/test/override', '');
 
     List<ContextRoot> roots = contextLocator.locateRoots(
         includedPaths: [outerRootFolder.path],
@@ -1078,10 +1087,10 @@
 
   void test_locateRoots_nested_packagesDirectory_included() {
     Folder outerRootFolder = newFolder('/test/outer');
-    File outerOptionsFile = newAnalysisOptionsYamlFile('/test/outer');
-    File outerPackagesFile = newDotPackagesFile('/test/outer');
+    File outerOptionsFile = newAnalysisOptionsYamlFile2('/test/outer', '');
+    File outerPackagesFile = newPackageConfigJsonFile('/test/outer', '');
     File innerOptionsFile =
-        newAnalysisOptionsYamlFile('/test/outer/packages/inner');
+        newAnalysisOptionsYamlFile2('/test/outer/packages/inner', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [outerRootFolder.path]);
@@ -1090,7 +1099,7 @@
     ContextRoot outerRoot = findRoot(roots, outerRootFolder);
     expect(outerRoot.includedPaths, unorderedEquals([outerRootFolder.path]));
     expect(outerRoot.excludedPaths,
-        unorderedEquals([innerOptionsFile.parent2.path]));
+        unorderedEquals([innerOptionsFile.parent.path]));
     expect(outerRoot.optionsFile, outerOptionsFile);
     expect(outerRoot.packagesFile, outerPackagesFile);
   }
@@ -1098,9 +1107,10 @@
   void test_locateRoots_options_default_bazel() {
     var workspacePath = '/home/workspace';
     var workspaceFolder = getFolder(workspacePath);
-    newFile('$workspacePath/WORKSPACE');
-    var bazelOptionsFile = newFile(
+    newFile2('$workspacePath/WORKSPACE', '');
+    var bazelOptionsFile = newFile2(
       '$workspacePath/dart/analysis_options/lib/default.yaml',
+      '',
     );
 
     var rootFolder = getFolder('$workspacePath/test');
@@ -1121,15 +1131,16 @@
     var rootFolder = newFolder('/home/test');
 
     var flutterPath = '/home/packages/flutter';
-    var flutterAnalysisOptionsFile = newFile(
+    var flutterAnalysisOptionsFile = newFile2(
       '$flutterPath/lib/analysis_options_user.yaml',
+      '',
     );
 
     var packageConfigFileBuilder = PackageConfigFileBuilder()
       ..add(name: 'flutter', rootPath: flutterPath);
     var packagesFile = newPackageConfigJsonFile(
       rootFolder.path,
-      content: packageConfigFileBuilder.toContent(toUriStr: toUriStr),
+      packageConfigFileBuilder.toContent(toUriStr: toUriStr),
     );
 
     var roots = contextLocator.locateRoots(
@@ -1146,13 +1157,13 @@
 
   void test_locateRoots_options_hasError() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 analyzer:
   exclude:
     - **.g.dart
 analyzer:
 ''');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1173,12 +1184,12 @@
 
   void test_locateRoots_options_withExclude_someFiles() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 analyzer:
   exclude:
     - data/**.g.dart
 ''');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1206,12 +1217,12 @@
 
   void test_locateRoots_options_withExclude_someFolders() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 analyzer:
   exclude:
     - data/**/foo/**
 ''');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1238,12 +1249,12 @@
 
   void test_locateRoots_options_withExclude_wholeFolder() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 analyzer:
   exclude:
     - data/**
 ''');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
     newFolder('/test/root/data');
 
     List<ContextRoot> roots =
@@ -1268,16 +1279,16 @@
 
   void test_locateRoots_options_withExclude_wholeFolder_includedOptions() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 include: has_excludes.yaml
 ''');
-    newFile('/test/root/has_excludes.yaml', content: '''
+    newFile2('/test/root/has_excludes.yaml', '''
 analyzer:
   exclude:
     - data/**
 ''');
 
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
     newFolder('/test/root/data');
 
     List<ContextRoot> roots =
@@ -1302,19 +1313,19 @@
 
   void test_locateRoots_options_withExclude_wholeFolder_includedOptionsMerge() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 include: has_excludes.yaml
 analyzer:
   exclude:
     - bar/**
 ''');
-    newFile('/test/root/has_excludes.yaml', content: '''
+    newFile2('/test/root/has_excludes.yaml', '''
 analyzer:
   exclude:
     - foo/**
 ''');
 
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
     newFolder('/test/root/foo');
     newFolder('/test/root/bar');
 
@@ -1343,14 +1354,14 @@
 
   void test_locateRoots_options_withExclude_wholeFolder_withItsOptions() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root', content: '''
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '''
 analyzer:
   exclude:
     - data/**
 ''');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
     newFolder('/test/root/data');
-    newAnalysisOptionsYamlFile('/test/root/data', content: '');
+    newAnalysisOptionsYamlFile2('/test/root/data', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1374,8 +1385,8 @@
 
   void test_locateRoots_single_dir_directOptions_directPackages() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1390,8 +1401,8 @@
 
   void test_locateRoots_single_dir_directOptions_inheritedPackages() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test/root');
-    File packagesFile = newDotPackagesFile('/test');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test/root', '');
+    File packagesFile = newPackageConfigJsonFile('/test', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1406,8 +1417,8 @@
 
   void test_locateRoots_single_dir_inheritedOptions_directPackages() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test', '');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1422,8 +1433,8 @@
 
   void test_locateRoots_single_dir_inheritedOptions_inheritedPackages() {
     Folder rootFolder = newFolder('/test/root');
-    File optionsFile = newAnalysisOptionsYamlFile('/test');
-    File packagesFile = newDotPackagesFile('/test');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test', '');
+    File packagesFile = newPackageConfigJsonFile('/test', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [rootFolder.path]);
@@ -1438,9 +1449,9 @@
 
   void test_locateRoots_single_dir_prefer_packageConfigJson() {
     var rootFolder = newFolder('/test');
-    var optionsFile = newAnalysisOptionsYamlFile('/test');
-    newDotPackagesFile('/test'); // the file is not used
-    var packageConfigJsonFile = newPackageConfigJsonFile('/test');
+    var optionsFile = newAnalysisOptionsYamlFile2('/test', '');
+    newPackageConfigJsonFile('/test', ''); // the file is not used
+    var packageConfigJsonFile = newPackageConfigJsonFile('/test', '');
 
     var roots = contextLocator.locateRoots(includedPaths: [rootFolder.path]);
     expect(roots, hasLength(1));
@@ -1453,15 +1464,15 @@
   }
 
   void test_locateRoots_single_file_inheritedOptions_directPackages() {
-    File optionsFile = newAnalysisOptionsYamlFile('/test');
-    File packagesFile = newDotPackagesFile('/test/root');
-    File testFile = newFile('/test/root/test.dart');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test', '');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
+    File testFile = newFile2('/test/root/test.dart', '');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [testFile.path]);
     expect(roots, hasLength(1));
 
-    ContextRoot package1Root = findRoot(roots, testFile.parent2);
+    ContextRoot package1Root = findRoot(roots, testFile.parent);
     expect(package1Root.includedPaths, unorderedEquals([testFile.path]));
     expect(package1Root.excludedPaths, isEmpty);
     expect(package1Root.optionsFile, optionsFile);
@@ -1469,15 +1480,15 @@
   }
 
   void test_locateRoots_single_file_notExisting() {
-    File optionsFile = newAnalysisOptionsYamlFile('/test');
-    File packagesFile = newDotPackagesFile('/test/root');
+    File optionsFile = newAnalysisOptionsYamlFile2('/test', '');
+    File packagesFile = newPackageConfigJsonFile('/test/root', '');
     File testFile = getFile('/test/root/test.dart');
 
     List<ContextRoot> roots =
         contextLocator.locateRoots(includedPaths: [testFile.path]);
     expect(roots, hasLength(1));
 
-    ContextRoot package1Root = findRoot(roots, testFile.parent2);
+    ContextRoot package1Root = findRoot(roots, testFile.parent);
     expect(package1Root.includedPaths, unorderedEquals([testFile.path]));
     expect(package1Root.excludedPaths, isEmpty);
     expect(package1Root.optionsFile, optionsFile);
diff --git a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
index 90eb23e..95d12bc 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
@@ -42,11 +42,11 @@
     String excludePath = convertPath('/test/root/exclude');
     String cPath = convertPath('/test/root/exclude/c.dart');
 
-    newFile(optionsPath);
-    newFile(readmePath);
-    newFile(aPath);
-    newFile(bPath);
-    newFile(cPath);
+    newFile2(optionsPath, '');
+    newFile2(readmePath, '');
+    newFile2(aPath, '');
+    newFile2(bPath, '');
+    newFile2(cPath, '');
     contextRoot.excluded.add(newFolder(excludePath));
 
     expect(contextRoot.analyzedFiles(),
@@ -55,9 +55,9 @@
 
   test_isAnalyzed_excludedByGlob_includedFile() {
     var rootPath = '/home/test';
-    var includedFile = newFile('$rootPath/lib/a1.dart');
-    var excludedFile = newFile('$rootPath/lib/a2.dart');
-    var implicitFile = newFile('$rootPath/lib/b.dart');
+    var includedFile = newFile2('$rootPath/lib/a1.dart', '');
+    var excludedFile = newFile2('$rootPath/lib/a2.dart', '');
+    var implicitFile = newFile2('$rootPath/lib/b.dart', '');
 
     var root = _createContextRoot(rootPath);
     root.included.add(includedFile);
@@ -80,14 +80,14 @@
 
     var includedFolderPath = convertPath('$rootPath/lib/src/included');
     var includedFolder = getFolder(includedFolderPath);
-    var includedFile1 = newFile('$includedFolderPath/a1.dart');
-    var includedFile2 = newFile('$includedFolderPath/inner/a2.dart');
-    var excludedFile1 = newFile('$includedFolderPath/a1.g.dart');
+    var includedFile1 = newFile2('$includedFolderPath/a1.dart', '');
+    var includedFile2 = newFile2('$includedFolderPath/inner/a2.dart', '');
+    var excludedFile1 = newFile2('$includedFolderPath/a1.g.dart', '');
 
     var excludedFolderPath = convertPath('$rootPath/lib/src/not_included');
-    var excludedFile2 = newFile('$excludedFolderPath/b.dart');
+    var excludedFile2 = newFile2('$excludedFolderPath/b.dart', '');
 
-    var implicitFile = newFile('$rootPath/lib/c.dart');
+    var implicitFile = newFile2('$rootPath/lib/c.dart', '');
 
     var root = _createContextRoot(rootPath);
     root.included.add(includedFolder);
@@ -113,6 +113,26 @@
     );
   }
 
+  test_isAnalyzed_explicitlyExcluded_byFile() {
+    var excludePath = convertPath('/test/root/exclude/c.dart');
+    var siblingPath = convertPath('/test/root/exclude/d.dart');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+    expect(contextRoot.isAnalyzed(siblingPath), isTrue);
+  }
+
+  test_isAnalyzed_explicitlyExcluded_byFile_analysisOptions() {
+    var excludePath = convertPath('/test/root/analysis_options.yaml');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+  }
+
+  test_isAnalyzed_explicitlyExcluded_byFile_pubspec() {
+    var excludePath = convertPath('/test/root/pubspec.yaml');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+  }
+
   test_isAnalyzed_explicitlyExcluded_byFolder() {
     String excludePath = convertPath('/test/root/exclude');
     String filePath = convertPath('/test/root/exclude/root.dart');
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
index 0c2aefa..c263789 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/base.dart
@@ -60,8 +60,11 @@
 //      await _addLibraryByUri('dart:_internal');
 //    }
 
-    newFile(path, content: content);
-    driverFor(path).changeFile(path);
+    newFile2(path, content);
+
+    var analysisDriver = driverFor(path);
+    analysisDriver.changeFile(path);
+    await analysisDriver.applyPendingFileChanges();
 
     var units = await _resolveLibrary(path);
     var uri = units.first.declaredElement!.source.uri;
diff --git a/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart b/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
index 5e1206c..38d8b2d 100644
--- a/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/dependency/reference_collector_test.dart
@@ -1085,7 +1085,7 @@
   }
 
   test_prefixedIdentifier_importPrefix() async {
-    newFile(b, content: 'var b = 0;');
+    newFile2(b, 'var b = 0;');
     var library = await buildTestLibrary(a, r'''
 import 'b.dart' as pb;
 
@@ -1099,7 +1099,7 @@
   }
 
   test_prefixedIdentifier_importPrefix_unresolvedIdentifier() async {
-    newFile(b, content: '');
+    newFile2(b, '');
     var library = await buildTestLibrary(a, r'''
 import 'b.dart' as pb;
 
@@ -1420,7 +1420,7 @@
   }
 
   test_class_constructor_factoryRedirect_named_prefixed() async {
-    newFile(b, content: 'class A {}');
+    newFile2(b, 'class A {}');
 
     var library = await buildTestLibrary(a, r'''
 import 'b.dart' as p;
@@ -1464,7 +1464,7 @@
   }
 
   test_class_constructor_factoryRedirect_unnamed_prefixed() async {
-    newFile(b, content: 'class A {}');
+    newFile2(b, 'class A {}');
 
     var library = await buildTestLibrary(a, r'''
 import 'b.dart' as p;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
index cabe570..e64b61a 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
@@ -35,7 +35,7 @@
       ),
     );
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 dynamic a = 0;
 int b = a;
 ''');
@@ -64,7 +64,10 @@
 }
 ''');
 
-    driverFor(testFilePathPlatform).changeFile(testFilePathPlatform);
+    var analysisDriver = driverFor(testFilePathPlatform);
+    analysisDriver.changeFile(testFilePathPlatform);
+    await analysisDriver.applyPendingFileChanges();
+
     await resolveTestCode(r'''
 class A {
   factory A() =;
@@ -80,7 +83,10 @@
 }
 ''');
 
-    driverFor(testFilePathPlatform).changeFile(testFilePathPlatform);
+    var analysisDriver = driverFor(testFilePathPlatform);
+    analysisDriver.changeFile(testFilePathPlatform);
+    await analysisDriver.applyPendingFileChanges();
+
     await resolveTestCode(r'''
 class A {
   factory A() =
@@ -96,7 +102,10 @@
 }
 ''');
 
-    driverFor(testFilePathPlatform).changeFile(testFilePathPlatform);
+    var analysisDriver = driverFor(testFilePathPlatform);
+    analysisDriver.changeFile(testFilePathPlatform);
+    await analysisDriver.applyPendingFileChanges();
+
     await resolveTestCode(r'''
 class A {
   const
@@ -108,7 +117,7 @@
   test_change_field_staticFinal_hasConstConstructor_changeInitializer() async {
     useEmptyByteStore();
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 class A {
   static const a = 0;
   static const b = 1;
@@ -128,7 +137,7 @@
     // We will reuse the byte store, so can reuse summaries.
     disposeAnalysisContextCollection();
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 class A {
   static const a = 0;
   static const b = 1;
@@ -149,7 +158,7 @@
   test_change_functionBody() async {
     useEmptyByteStore();
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 void f() {
   print(0);
 }
@@ -166,7 +175,7 @@
     // We will reuse the byte store, so can reuse summaries.
     disposeAnalysisContextCollection();
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 void f() {
   print(1);
 }
@@ -183,7 +192,7 @@
     useEmptyByteStore();
 
     var aaaPackageRootPath = '$packagesRootPath/aaa';
-    newFile('$aaaPackageRootPath/lib/a.dart', content: '');
+    newFile2('$aaaPackageRootPath/lib/a.dart', '');
 
     writeTestPackageConfig(
       PackageConfigFileBuilder()
@@ -204,7 +213,7 @@
       ),
     );
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 // ignore:unused_import
 import 'package:aaa/a.dart';
 ''');
@@ -247,7 +256,7 @@
       AnalysisOptionsFileConfig(lints: []),
     );
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 void f() {
   ![0].isEmpty;
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index ebf8025..83e4941 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -247,7 +247,7 @@
   }
 
   test_annotation_onDirective_part() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 part of 'test.dart';
 ''');
     addTestFile(r'''
@@ -270,7 +270,7 @@
   }
 
   test_annotation_onDirective_partOf() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 part 'test.dart';
 ''');
     addTestFile(r'''
@@ -393,7 +393,7 @@
   }
 
   test_annotation_prefixed_classField() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const a = 1;
 }
@@ -432,7 +432,7 @@
   }
 
   test_annotation_prefixed_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A(int a, {int b});
 }
@@ -473,7 +473,7 @@
   }
 
   test_annotation_prefixed_constructor_named() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A.named(int a, {int b});
 }
@@ -516,7 +516,7 @@
   }
 
   test_annotation_prefixed_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const topAnnotation = 1;
 ''');
     addTestFile(r'''
@@ -1422,7 +1422,7 @@
   }
 
   test_deferredImport_loadLibrary_invocation() async {
-    newFile('$testPackageLibPath/a.dart');
+    newFile2('$testPackageLibPath/a.dart', '');
     addTestFile(r'''
 import 'a.dart' deferred as a;
 main() {
@@ -1446,7 +1446,7 @@
   }
 
   test_deferredImport_loadLibrary_invocation_argument() async {
-    newFile('$testPackageLibPath/a.dart');
+    newFile2('$testPackageLibPath/a.dart', '');
     addTestFile(r'''
 import 'a.dart' deferred as a;
 var b = 1;
@@ -1480,7 +1480,7 @@
   }
 
   test_deferredImport_loadLibrary_tearOff() async {
-    newFile('$testPackageLibPath/a.dart');
+    newFile2('$testPackageLibPath/a.dart', '');
     addTestFile(r'''
 import 'a.dart' deferred as a;
 main() {
@@ -1503,7 +1503,7 @@
   }
 
   test_deferredImport_variable() async {
-    newFile('$testPackageLibPath/a.dart', content: 'var v = 0;');
+    newFile2('$testPackageLibPath/a.dart', 'var v = 0;');
     addTestFile(r'''
 import 'a.dart' deferred as a;
 main() async {
@@ -1542,7 +1542,7 @@
   }
 
   test_directive_export() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class MyClass {}
 int myVar;
 int get myGetter => 0;
@@ -1590,7 +1590,7 @@
   }
 
   test_directive_import_hide() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class MyClass {}
 int myVar;
 int get myGetter => 0;
@@ -1638,7 +1638,7 @@
   }
 
   test_directive_import_show() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class MyClass {}
 int myVar;
 int get myGetter => 0;
@@ -2187,7 +2187,7 @@
   }
 
   test_instanceCreation_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C<T> {
   C(T p);
   C.named(T p);
@@ -3595,7 +3595,7 @@
 
   @failingTest
   test_invalid_nonTypeAsType_topLevelFunction_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int T() => 0;
 ''');
     addTestFile(r'''
@@ -3663,7 +3663,7 @@
 
   @failingTest
   test_invalid_nonTypeAsType_topLevelVariable_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int T;
 ''');
     addTestFile(r'''
@@ -5618,7 +5618,7 @@
   }
 
   test_optionalConst_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   const C();
   const C.named();
@@ -6132,7 +6132,7 @@
   }
 
   test_prefixedIdentifier_importPrefix_className() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class MyClass {}
 typedef void MyFunctionTypeAlias();
 int myTopVariable;
@@ -7733,9 +7733,9 @@
   }
 
   test_typeAnnotation_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/b.dart', content: "export 'a.dart';");
-    newFile('$testPackageLibPath/c.dart', content: "export 'a.dart';");
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/b.dart', "export 'a.dart';");
+    newFile2('$testPackageLibPath/c.dart', "export 'a.dart';");
     addTestFile(r'''
 import 'b.dart' as b;
 import 'c.dart' as c;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index afefd83..0f775f5 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -58,7 +58,7 @@
 
     var innerPath = convertPath('$outerLibPath/inner/lib/b.dart');
     var innerUri = Uri.parse('package:my.outer.lib.inner/b.dart');
-    newFile(innerPath, content: 'class B {}');
+    newFile2(innerPath, 'class B {}');
 
     var analysisSession = contextFor(innerPath).currentSession;
 
@@ -71,7 +71,7 @@
 
     // Reference "inner" using a non-canonical URI.
     {
-      var a = newFile(convertPath('$outerLibPath/a.dart'), content: r'''
+      var a = newFile2(convertPath('$outerLibPath/a.dart'), r'''
 import 'inner/lib/b.dart';
 ''');
       var result = await analysisSession.getResolvedUnit(a.path);
@@ -81,7 +81,7 @@
 
     // Reference "inner" using the canonical URI, via relative.
     {
-      var c = newFile('$outerLibPath/inner/lib/c.dart', content: r'''
+      var c = newFile2('$outerLibPath/inner/lib/c.dart', r'''
 import 'b.dart';
 ''');
       var result = await analysisSession.getResolvedUnit(c.path);
@@ -91,7 +91,7 @@
 
     // Reference "inner" using the canonical URI, via absolute.
     {
-      var d = newFile('$outerLibPath/inner/lib/d.dart', content: '''
+      var d = newFile2('$outerLibPath/inner/lib/d.dart', '''
 import '$innerUri';
 ''');
       var result = await analysisSession.getResolvedUnit(d.path);
@@ -153,10 +153,10 @@
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
     String d = convertPath('/d.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: "import 'a.dart';");
-    newFile(c, content: 'class C {}');
-    newFile(d, content: "import 'c.dart';");
+    newFile2(a, 'class A {}');
+    newFile2(b, "import 'a.dart';");
+    newFile2(c, 'class C {}');
+    newFile2(d, "import 'c.dart';");
     driver1.addFile(a);
     driver1.addFile(b);
     driver2.addFile(c);
@@ -185,9 +185,9 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
-    newFile(a, content: "import 'c.dart';");
-    newFile(b, content: 'class B {}');
-    newFile(c, content: "import 'b.dart';");
+    newFile2(a, "import 'c.dart';");
+    newFile2(b, 'class B {}');
+    newFile2(c, "import 'b.dart';");
     driver1.addFile(a);
     driver1.addFile(b);
     driver2.addFile(c);
@@ -213,10 +213,10 @@
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
     String d = convertPath('/d.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: "export 'a.dart';");
-    newFile(c, content: "import 'b.dart';");
-    newFile(d, content: "import 'b.dart'; class D extends X {}");
+    newFile2(a, 'class A {}');
+    newFile2(b, "export 'a.dart';");
+    newFile2(c, "import 'b.dart';");
+    newFile2(d, "import 'b.dart'; class D extends X {}");
     driver1.addFile(a);
     driver1.addFile(b);
     driver2.addFile(c);
@@ -242,9 +242,9 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
     driver1.addFile(a);
     driver2.addFile(b);
     driver2.addFile(c);
@@ -268,8 +268,8 @@
 
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
     driver1.addFile(a);
     driver2.addFile(b);
     driver1.priorityFiles = [a];
@@ -288,8 +288,8 @@
 
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
     driver1.addFile(a);
     driver2.addFile(b);
     driver1.priorityFiles = [b];
@@ -309,9 +309,9 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
     driver1.addFile(a);
     driver1.addFile(b);
     driver2.addFile(c);
@@ -333,9 +333,9 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
     String c = convertPath('/c.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
     driver1.addFile(a);
     driver2.addFile(b);
     driver2.addFile(c);
@@ -366,8 +366,8 @@
 
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
     driver1.addFile(a);
     driver2.addFile(b);
 
@@ -407,10 +407,12 @@
     var b = convertPath('/test/lib/b.dart');
 
     driver.addFile(a);
+    await driver.applyPendingFileChanges();
     expect(driver.addedFiles, contains(a));
     expect(driver.addedFiles, isNot(contains(b)));
 
     driver.removeFile(a);
+    await driver.applyPendingFileChanges();
     expect(driver.addedFiles, isNot(contains(a)));
     expect(driver.addedFiles, isNot(contains(b)));
   }
@@ -425,8 +427,8 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: 'class A {}');
-    newFile(b, content: r'''
+    newFile2(a, 'class A {}');
+    newFile2(b, r'''
 import 'a.dart';
 ''');
 
@@ -444,7 +446,7 @@
     assertNumberOfErrorsInB(1);
 
     // Update 'b' to use 'a', no more hints.
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 main() {
   print(A);
@@ -457,7 +459,7 @@
     // Change 'b' content so that it has a hint.
     // Remove 'b' and add it again.
     // The file 'b' must be refreshed, and the hint must be reported.
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 ''');
     driver.removeFile(b);
@@ -469,8 +471,8 @@
   test_addFile_thenRemove() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
     driver.addFile(a);
     driver.addFile(b);
 
@@ -488,15 +490,15 @@
     var lib = convertPath('/test/lib.dart');
     var part1 = convertPath('/test/part1.dart');
     var part2 = convertPath('/test/part2.dart');
-    newFile(lib, content: '''
+    newFile2(lib, '''
 library lib;
 part 'part1.dart';
 part 'part2.dart';
 ''');
-    newFile(part1, content: '''
+    newFile2(part1, '''
 part of lib;
 ''');
-    newFile(part2, content: '''
+    newFile2(part2, '''
 part of 'lib.dart';
 ''');
 
@@ -538,10 +540,10 @@
   test_analyze_resolveDirectives_error_missingLibraryDirective() async {
     var lib = convertPath('/test/lib.dart');
     var part = convertPath('/test/part.dart');
-    newFile(lib, content: '''
+    newFile2(lib, '''
 part 'part.dart';
 ''');
-    newFile(part, content: '''
+    newFile2(part, '''
 part of lib;
 ''');
 
@@ -556,11 +558,11 @@
   test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName() async {
     var lib = convertPath('/test/lib.dart');
     var part = convertPath('/test/part.dart');
-    newFile(lib, content: '''
+    newFile2(lib, '''
 library lib;
 part 'part.dart';
 ''');
-    newFile(part, content: '''
+    newFile2(part, '''
 part of someOtherLib;
 ''');
 
@@ -575,11 +577,11 @@
   test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async {
     var lib = convertPath('/test/lib.dart');
     var part = convertPath('/test/part.dart');
-    newFile(lib, content: '''
+    newFile2(lib, '''
 library lib;
 part 'part.dart';
 ''');
-    newFile(part, content: '''
+    newFile2(part, '''
 part of 'other_lib.dart';
 ''');
 
@@ -594,11 +596,11 @@
   test_analyze_resolveDirectives_error_partOfNonPart() async {
     var lib = convertPath('/test/lib.dart');
     var part = convertPath('/test/part.dart');
-    newFile(lib, content: '''
+    newFile2(lib, '''
 library lib;
 part 'part.dart';
 ''');
-    newFile(part, content: '''
+    newFile2(part, '''
 // no part of directive
 ''');
 
@@ -612,7 +614,7 @@
 
   test_cachedPriorityResults() async {
     var a = convertPath('/test/bin/a.dart');
-    newFile(a, content: 'var a = 1;');
+    newFile2(a, 'var a = 1;');
 
     driver.priorityFiles = [a];
 
@@ -642,8 +644,8 @@
   test_cachedPriorityResults_flush_onAnyFileChange() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
-    newFile(a, content: 'var a = 1;');
-    newFile(a, content: 'var b = 2;');
+    newFile2(a, 'var a = 1;');
+    newFile2(a, 'var b = 2;');
 
     driver.priorityFiles = [a];
 
@@ -673,8 +675,8 @@
   test_cachedPriorityResults_flush_onPrioritySetChange() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
-    newFile(a, content: 'var a = 1;');
-    newFile(b, content: 'var b = 2;');
+    newFile2(a, 'var a = 1;');
+    newFile2(b, 'var b = 2;');
 
     driver.priorityFiles = [a];
 
@@ -703,7 +705,7 @@
 
   test_cachedPriorityResults_notPriority() async {
     var a = convertPath('/test/bin/a.dart');
-    newFile(a, content: 'var a = 1;');
+    newFile2(a, 'var a = 1;');
 
     ResolvedUnitResult result1 = await driver.getResultValid(a);
     expect(driver.test.priorityResults, isEmpty);
@@ -716,11 +718,11 @@
   test_changeFile_implicitlyAnalyzed() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'b.dart';
 var A = B;
 ''');
-    newFile(b, content: 'var B = 1;');
+    newFile2(b, 'var B = 1;');
 
     driver.priorityFiles = [a];
     driver.addFile(a);
@@ -764,8 +766,8 @@
   test_changeFile_notUsed() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/other/b.dart');
-    newFile(a);
-    newFile(b, content: 'class B1 {}');
+    newFile2(a, '');
+    newFile2(b, 'class B1 {}');
 
     driver.addFile(a);
 
@@ -784,17 +786,17 @@
   }
 
   test_changeFile_potentiallyAffected_imported() async {
-    newFile('/test/lib/a.dart', content: '');
-    var b = newFile('/test/lib/b.dart', content: '''
+    newFile2('/test/lib/a.dart', '');
+    var b = newFile2('/test/lib/b.dart', '''
 import 'a.dart';
 ''');
-    newFile('/test/lib/c.dart', content: '''
+    var c = newFile2('/test/lib/c.dart', '''
 import 'b.dart';
 ''');
-    newFile('/test/lib/d.dart', content: '''
+    var d = newFile2('/test/lib/d.dart', '''
 import 'c.dart';
 ''');
-    newFile('/test/lib/e.dart', content: '');
+    newFile2('/test/lib/e.dart', '');
 
     Future<LibraryElementImpl> getLibrary(String shortName) async {
       var uriStr = 'package:test/$shortName';
@@ -830,6 +832,13 @@
     // Change `b.dart`, also removes `c.dart` and `d.dart` that import it.
     // But `a.dart` and `d.dart` is not affected.
     driver.changeFile(b.path);
+    var affectedPathList = await driver.applyPendingFileChanges();
+    expect(affectedPathList, unorderedEquals([b.path, c.path, d.path]));
+
+    // We have a new session.
+    var session2 = driver.currentSession;
+    expect(session2, isNot(session1));
+
     driver.assertLoadedLibraryUriSet(
       excluded: [
         'package:test/b.dart',
@@ -842,10 +851,6 @@
       ],
     );
 
-    // We have a new session.
-    var session2 = driver.currentSession;
-    expect(session2, isNot(session1));
-
     // `a.dart` and `e.dart` moved to the new session.
     // Invalidated libraries stuck with the old session.
     expect(a_element.session, session2);
@@ -856,16 +861,16 @@
   }
 
   test_changeFile_potentiallyAffected_part() async {
-    var a = newFile('/test/lib/a.dart', content: '''
+    var a = newFile2('/test/lib/a.dart', '''
 part of 'b.dart';
 ''');
-    newFile('/test/lib/b.dart', content: '''
+    var b = newFile2('/test/lib/b.dart', '''
 part 'a.dart';
 ''');
-    newFile('/test/lib/c.dart', content: '''
+    var c = newFile2('/test/lib/c.dart', '''
 import 'b.dart';
 ''');
-    newFile('/test/lib/d.dart', content: '');
+    newFile2('/test/lib/d.dart', '');
 
     Future<LibraryElementImpl> getLibrary(String shortName) async {
       var uriStr = 'package:test/$shortName';
@@ -896,6 +901,13 @@
     // Removes `c.dart` that imports `b.dart`.
     // But `d.dart` is not affected.
     driver.changeFile(a.path);
+    var affectedPathList = await driver.applyPendingFileChanges();
+    expect(affectedPathList, unorderedEquals([a.path, b.path, c.path]));
+
+    // We have a new session.
+    var session2 = driver.currentSession;
+    expect(session2, isNot(session1));
+
     driver.assertLoadedLibraryUriSet(
       excluded: [
         'package:test/b.dart',
@@ -906,10 +918,6 @@
       ],
     );
 
-    // We have a new session.
-    var session2 = driver.currentSession;
-    expect(session2, isNot(session1));
-
     // `d.dart` moved to the new session.
     // Invalidated libraries stuck with the old session.
     expect(b_element.session, session1);
@@ -920,12 +928,12 @@
   test_changeFile_selfConsistent() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'b.dart';
 var A1 = 1;
 var A2 = B1;
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 var B1 = A1;
 ''');
@@ -1001,9 +1009,7 @@
 
     // Notify the driver about the change.
     driver.changeFile(testFile);
-
-    // The file was changed, so it is scheduled for analysis.
-    expect(driver.test.fileTracker.isFilePending(testFile), isTrue);
+    await driver.applyPendingFileChanges();
 
     // We get a new result.
     {
@@ -1104,13 +1110,13 @@
   test_const_implicitCreation() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class C {
   const C();
   static const C WARNING = C();
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 
 class D {
@@ -1128,7 +1134,7 @@
   test_const_implicitCreation_rewrite() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {
   const A();
 }
@@ -1143,7 +1149,7 @@
   const C();
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 
 main() {
@@ -1179,7 +1185,7 @@
   test_currentSession() async {
     var a = convertPath('/test/lib/a.dart');
 
-    newFile(a, content: 'var V = 1;');
+    newFile2(a, 'var V = 1;');
     await driver.getResultValid(a);
 
     var session1 = driver.currentSession;
@@ -1204,12 +1210,12 @@
     var b = convertPath('/bbb/lib/b.dart');
     var c = convertPath('/ccc/lib/c.dart');
 
-    newFile(t, content: 'class T {}');
-    newFile(a1, content: 'class A1 {}');
-    newFile(a2, content: 'class A2 {}');
-    newFile(a3, content: 'text');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(t, 'class T {}');
+    newFile2(a1, 'class A1 {}');
+    newFile2(a2, 'class A2 {}');
+    newFile2(a3, 'text');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
 
     driver.addFile(t);
     // Don't add a1.dart, a2.dart, or b.dart - they should be discovered.
@@ -1296,12 +1302,12 @@
     String templatePath = convertPath('/aaa/lib/foo.dart');
     String generatedPath = convertPath('/generated/aaa/lib/foo.dart');
 
-    newFile(templatePath, content: r'''
+    newFile2(templatePath, r'''
 a() {}
 b() {}
 ''');
 
-    newFile(generatedPath, content: r'''
+    newFile2(generatedPath, r'''
 aaa() {}
 bbb() {}
 ''');
@@ -1355,7 +1361,7 @@
 
   test_getCachedResult() async {
     var a = convertPath('/test/bin/a.dart');
-    newFile(a, content: 'var a = 1;');
+    newFile2(a, 'var a = 1;');
 
     expect(driver.getCachedResult(a), isNull);
 
@@ -1386,10 +1392,10 @@
     var c = convertPath('/test/bin/c.dart');
     var d = convertPath('/test/bin/d.dart');
 
-    newFile(a, content: 'class A { m1() {} }');
-    newFile(b, content: 'class B { m2() {} }');
-    newFile(c, content: 'class C { m2() {} }');
-    newFile(d, content: 'class D { m3() {} }');
+    newFile2(a, 'class A { m1() {} }');
+    newFile2(b, 'class B { m2() {} }');
+    newFile2(c, 'class C { m2() {} }');
+    newFile2(d, 'class D { m3() {} }');
 
     driver.addFile(a);
     driver.addFile(b);
@@ -1412,10 +1418,10 @@
     var c = convertPath('/test/bin/c.dart');
     var d = convertPath('/test/bin/d.dart');
 
-    newFile(a, content: 'mixin A { m1() {} }');
-    newFile(b, content: 'mixin B { m2() {} }');
-    newFile(c, content: 'mixin C { m2() {} }');
-    newFile(d, content: 'mixin D { m3() {} }');
+    newFile2(a, 'mixin A { m1() {} }');
+    newFile2(b, 'mixin B { m2() {} }');
+    newFile2(c, 'mixin C { m2() {} }');
+    newFile2(d, 'mixin D { m3() {} }');
 
     driver.addFile(a);
     driver.addFile(b);
@@ -1439,11 +1445,11 @@
     var d = convertPath('/test/bin/d.dart');
     var e = convertPath('/test/bin/e.dart');
 
-    newFile(a, content: 'class A {}');
-    newFile(b, content: "import 'a.dart'; A a;");
-    newFile(c, content: "import 'a.dart'; var a = new A();");
-    newFile(d, content: "class A{} A a;");
-    newFile(e, content: "import 'a.dart'; main() {}");
+    newFile2(a, 'class A {}');
+    newFile2(b, "import 'a.dart'; A a;");
+    newFile2(c, "import 'a.dart'; var a = new A();");
+    newFile2(d, "class A{} A a;");
+    newFile2(e, "import 'a.dart'; main() {}");
 
     driver.addFile(a);
     driver.addFile(b);
@@ -1469,10 +1475,10 @@
     var b = convertPath('/bbb/lib/b.dart');
     var c = convertPath('/ccc/lib/c.dart');
 
-    newFile(t, content: 'int t;');
-    newFile(a, content: 'int a;');
-    newFile(b, content: 'int b;');
-    newFile(c, content: 'int c;');
+    newFile2(t, 'int t;');
+    newFile2(a, 'int a;');
+    newFile2(b, 'int b;');
+    newFile2(c, 'int c;');
 
     driver.addFile(t);
 
@@ -1487,8 +1493,8 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: '');
-    newFile(b, content: r'''
+    newFile2(a, '');
+    newFile2(b, r'''
 import 'a.dart';
 
 void f(A a) {}
@@ -1500,7 +1506,7 @@
 
     // Update the file, changing its API signature.
     // Note that we don't call `changeFile`.
-    newFile(a, content: 'class A {}\n');
+    newFile2(a, 'class A {}\n');
 
     // Get the file.
     // We have not called `changeFile(a)`, so we should not read the file.
@@ -1522,7 +1528,7 @@
 
   test_getFileSync_library() async {
     var path = convertPath('/test/lib/a.dart');
-    newFile(path);
+    newFile2(path, '');
     var file = driver.getFileSyncValid(path);
     expect(file.path, path);
     expect(file.uri.toString(), 'package:test/a.dart');
@@ -1536,7 +1542,7 @@
 
   test_getFileSync_part() async {
     var path = convertPath('/test/lib/a.dart');
-    newFile(path, content: 'part of lib;');
+    newFile2(path, 'part of lib;');
     var file = driver.getFileSyncValid(path);
     expect(file.path, path);
     expect(file.uri.toString(), 'package:test/a.dart');
@@ -1573,13 +1579,13 @@
     String aUriStr = 'package:test/a.dart';
     String bUriStr = 'package:test/b.dart';
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 
 class A {}
 ''');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 
 class B {}
@@ -1726,8 +1732,8 @@
   test_getResult_constants_defaultParameterValue_localFunction() async {
     var a = convertPath('/test/bin/a.dart');
     var b = convertPath('/test/bin/b.dart');
-    newFile(a, content: 'const C = 42;');
-    newFile(b, content: r'''
+    newFile2(a, 'const C = 42;');
+    newFile2(b, r'''
 import 'a.dart';
 main() {
   foo({int p: C}) {}
@@ -1805,8 +1811,8 @@
   test_getResult_importLibrary_thenRemoveIt() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: r'''
+    newFile2(a, 'class A {}');
+    newFile2(b, r'''
 import 'a.dart';
 class B extends A {}
 ''');
@@ -1835,7 +1841,7 @@
     }
 
     // Restore a.dart and reanalyze.
-    newFile(a, content: 'class A {}');
+    newFile2(a, 'class A {}');
     driver.addFile(a);
 
     // No errors in b.dart again.
@@ -1968,7 +1974,7 @@
 
   test_getResult_languageVersion() async {
     var path = convertPath('/test/lib/test.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 // @dart = 2.7
 class A{}
 ''');
@@ -1984,19 +1990,19 @@
     var b = convertPath('/test/bin/b.dart');
     var c = convertPath('/test/lib/c.dart');
     var d = convertPath('/test/test/d.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'package:test/c.dart';
 int x = y;
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import '../lib/c.dart';
 int x = y;
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 import '../test/d.dart';
 var y = z;
 ''');
-    newFile(d, content: r'''
+    newFile2(d, r'''
 String z = "string";
 ''');
 
@@ -2050,7 +2056,7 @@
 
   test_getResult_notDartFile() async {
     var path = convertPath('/test/lib/test.txt');
-    newFile(path, content: 'class A {}');
+    newFile2(path, 'class A {}');
 
     ResolvedUnitResult result = await driver.getResultValid(path);
     expect(result, isNotNull);
@@ -2071,12 +2077,12 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/test/c.dart');
-    newFile(a, content: 'class A<T> {}');
-    newFile(b, content: r'''
+    newFile2(a, 'class A<T> {}');
+    newFile2(b, r'''
 import 'a.dart';
 var VB = new A<int>();
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 import '../lib/a.dart';
 var VC = new A<double>();
 ''');
@@ -2107,12 +2113,12 @@
   test_getResult_selfConsistent() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'b.dart';
 var A1 = 1;
 var A2 = B1;
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 import 'a.dart';
 var B1 = A1;
 ''');
@@ -2195,7 +2201,7 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'package:test/b.dart';
 ''');
 
@@ -2210,7 +2216,7 @@
 
   test_getUnitElement_notDart() async {
     var path = convertPath('/test.txt');
-    newFile(path, content: 'class A {}');
+    newFile2(path, 'class A {}');
     var unitResult = await driver.getUnitElement(path);
     unitResult as UnitElementResult;
     expect(unitResult.element.classes.map((e) => e.name), ['A']);
@@ -2251,14 +2257,14 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 part 'b.dart';
 class C {
   int foo;
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of a;
 var c = new C();
 ''');
@@ -2270,7 +2276,7 @@
 
     // Modify the library, but don't notify the driver.
     // The driver should use the previous library content and elements.
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 part 'b.dart';
 class C {
@@ -2291,17 +2297,17 @@
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
 
-    newFile(a, content: '''
+    newFile2(a, '''
 library my.lib;
 
 part 'b.dart';
 ''');
-    newFile(b, content: '''
+    newFile2(b, '''
 part of my.lib;
 
 class A {}
 ''');
-    newFile(c, content: '''
+    newFile2(c, '''
 import 'b.dart';
 ''');
 
@@ -2314,7 +2320,7 @@
 
   test_instantiateToBounds_invalid() async {
     var a = convertPath('/test/lib/a.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A<T extends B> {}
 class B<T extends A<B>> {}
 ''');
@@ -2335,7 +2341,7 @@
 
   test_issue34619() async {
     var a = convertPath('/test/lib/a.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class C {
   final Set<String> f = new Set<String>();
 
@@ -2365,11 +2371,11 @@
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'b.dart';
 ''');
-    newFile(b);
-    newFile(c);
+    newFile2(b, '');
+    newFile2(c, '');
 
     driver.addFile(a);
     driver.addFile(c);
@@ -2392,7 +2398,7 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a);
+    newFile2(a, '');
 
     // 'a.dart' is added, but not processed yet.
     // So, the set of known files is empty yet.
@@ -2435,8 +2441,8 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: '');
-    newFile(b, content: r'''
+    newFile2(a, '');
+    newFile2(b, r'''
 import 'a.dart';
 
 void f(A a) {}
@@ -2448,7 +2454,7 @@
 
     // Update the file, changing its API signature.
     // Note that we don't call `changeFile`.
-    newFile(a, content: 'class A {}');
+    newFile2(a, 'class A {}');
 
     // Parse the file.
     // We have not called `changeFile(a)`, so we should not read the file.
@@ -2484,8 +2490,8 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: '');
-    newFile(b, content: r'''
+    newFile2(a, '');
+    newFile2(b, r'''
 import 'a.dart';
 ''');
 
@@ -2504,10 +2510,10 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part of my;
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 library my;
 part 'a.dart';
 ''');
@@ -2526,7 +2532,7 @@
   test_parseFileSync_languageVersion() async {
     var path = convertPath('/test/lib/test.dart');
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 // @dart = 2.7
 class A {}
 ''');
@@ -2540,7 +2546,7 @@
   test_parseFileSync_languageVersion_null() async {
     var path = convertPath('/test/lib/test.dart');
 
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class A {}
 ''');
 
@@ -2555,7 +2561,7 @@
 
   test_parseFileSync_notDart() async {
     var p = convertPath('/test/bin/a.txt');
-    newFile(p, content: 'class A {}');
+    newFile2(p, 'class A {}');
 
     var parseResult = driver.parseFileSync(p) as ParsedUnitResult;
     expect(parseResult, isNotNull);
@@ -2566,15 +2572,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2602,15 +2608,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2632,15 +2638,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2671,15 +2677,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2701,7 +2707,7 @@
   test_part_getResult_changePart_invalidatesLibraryCycle() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'dart:async';
 part 'b.dart';
 ''');
@@ -2713,7 +2719,7 @@
     // Create the part file.
     // This should invalidate library file state (specifically the library
     // cycle), so that we can re-link the library, and get new dependencies.
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 Future<int> f;
 ''');
@@ -2726,7 +2732,7 @@
 
   test_part_getResult_noLibrary() async {
     var c = convertPath('/test/lib/c.dart');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2746,15 +2752,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2786,15 +2792,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2821,7 +2827,7 @@
 
   test_part_getUnitElement_noLibrary() async {
     var c = convertPath('/test/lib/c.dart');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 part of a;
 var a = new A();
 var b = new B();
@@ -2848,15 +2854,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2896,15 +2902,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2929,7 +2935,7 @@
 
   test_part_results_noLibrary() async {
     var c = convertPath('/test/lib/c.dart');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2951,15 +2957,15 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library a;
 import 'b.dart';
 part 'c.dart';
 class A {}
 var c = new C();
 ''');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: r'''
+    newFile2(b, 'class B {}');
+    newFile2(c, r'''
 part of a;
 class C {}
 var a = new A();
@@ -2987,7 +2993,7 @@
 
   test_removeFile_addFile_results() async {
     var a = convertPath('/test/lib/a.dart');
-    newFile(a, content: 'class A {}');
+    newFile2(a, 'class A {}');
 
     driver.addFile(a);
 
@@ -3006,11 +3012,11 @@
   test_removeFile_changeFile_implicitlyAnalyzed() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'b.dart';
 var A = B;
 ''');
-    newFile(b, content: 'var B = 1;');
+    newFile2(b, 'var B = 1;');
 
     driver.priorityFiles = [a, b];
     driver.addFile(a);
@@ -3074,8 +3080,8 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: 'class A {}');
-    newFile(b, content: "import 'a.dart';  var a = new A();");
+    newFile2(a, 'class A {}');
+    newFile2(b, "import 'a.dart';  var a = new A();");
 
     driver.addFile(a);
     driver.addFile(b);
@@ -3106,20 +3112,20 @@
     var d = convertPath('/test/lib/d.dart');
     var e = convertPath('/test/lib/e.dart');
     var f = convertPath('/test/lib/f.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 import 'd.dart';
 ''');
-    newFile(b);
-    newFile(c, content: r'''
+    newFile2(b, '');
+    newFile2(c, r'''
 import 'd.dart';
 ''');
-    newFile(d, content: r'''
+    newFile2(d, r'''
 import 'b.dart';
 ''');
-    newFile(e, content: r'''
+    newFile2(e, r'''
 export 'b.dart';
 ''');
-    newFile(f, content: r'''
+    newFile2(f, r'''
 import 'e.dart';
 class F extends X {}
 ''');
@@ -3161,11 +3167,11 @@
     var c = convertPath('/test/lib/c.dart');
     var d = convertPath('/test/lib/d.dart');
     var e = convertPath('/test/lib/e.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c);
-    newFile(d, content: "import 'a.dart';");
-    newFile(e, content: "import 'b.dart';");
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, '');
+    newFile2(d, "import 'a.dart';");
+    newFile2(e, "import 'b.dart';");
 
     driver.addFile(a);
     driver.addFile(b);
@@ -3219,9 +3225,9 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
     var c = convertPath('/test/lib/c.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
 
     driver.addFile(a);
     driver.addFile(b);
@@ -3252,7 +3258,7 @@
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 var v = 0;
 ''');
     driver.addFile(a);
@@ -3261,7 +3267,7 @@
     expect(allResults.singleWhere((r) => r.path == a).errors, hasLength(0));
     allResults.clear();
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 var v = 0
 ''');
     driver.removeFile(b);
@@ -3273,8 +3279,8 @@
   test_results_skipNotAffected() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
 
     driver.addFile(a);
     driver.addFile(b);
diff --git a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
index 0f485b1..d4c241f 100644
--- a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart
@@ -32,7 +32,7 @@
   Folder get sdkRoot => newFolder('/sdk');
 
   void setUp() {
-    newFile('/test/lib/test.dart', content: '');
+    newFile2('/test/lib/test.dart', '');
 
     createMockSdk(
       resourceProvider: resourceProvider,
@@ -457,7 +457,6 @@
   }
 
   void _newSdkExperimentsFile(String content) {
-    newFile('$sdkRoot/lib/_internal/allowed_experiments.json',
-        content: content);
+    newFile2('$sdkRoot/lib/_internal/allowed_experiments.json', content);
   }
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 3cc2617..5326c4c 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -47,7 +47,7 @@
     var generatedPath = convertPath('$workspaceRootPath/bazel-bin/$relPath');
 
     // This generated file should be used instead of the writable.
-    newFile(generatedPath);
+    newFile2(generatedPath, '');
 
     var analysisDriver = driverFor(convertPath(testFilePath));
 
@@ -73,7 +73,7 @@
     var generatedPath = convertPath('$workspaceRootPath/bazel-bin/$relPath');
 
     // This generated file should be used instead of the writable.
-    newFile(generatedPath);
+    newFile2(generatedPath, '');
 
     var analysisDriver = driverFor(convertPath(testFilePath));
 
@@ -182,7 +182,7 @@
 
   test_definedClassMemberNames() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class A {
   int a, b;
   A();
@@ -202,7 +202,7 @@
 
   test_definedClassMemberNames_enum() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 enum E1 {
   v1;
   int field1, field2;
@@ -236,7 +236,7 @@
 
   test_definedTopLevelNames() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class A {}
 class B = Object with A;
 typedef C();
@@ -270,7 +270,7 @@
 
   test_getFileForPath_emptyUri() {
     String path = convertPath('/test.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 import '';
 export '';
 part '';
@@ -284,7 +284,7 @@
 
   test_getFileForPath_hasLibraryDirective_hasPartOfDirective() {
     String a = convertPath('/test/lib/a.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library L;
 part of L;
 ''');
@@ -307,7 +307,7 @@
 part 'a3.dart';
 part ':[invalid uri]';
 ''';
-    newFile(a, content: content_a1);
+    newFile2(a, content_a1);
 
     FileState file = fileSystemState.getFileForPath(a);
 
@@ -346,7 +346,7 @@
 
 class A1 {}
 ''';
-    newFile(a1, content: content_a1);
+    newFile2(a1, content_a1);
 
     FileState file = fileSystemState.getFileForPath(a1);
     expect(file.path, a1);
@@ -388,7 +388,7 @@
     String b = convertPath('/test/lib/b.dart');
     String c = convertPath('/test/lib/c.dart');
     String d = convertPath('/test/lib/d.dart');
-    newFile(a, content: r'''
+    newFile2(a, r'''
 library lib;
 import 'dart:math';
 import 'b.dart';
@@ -409,11 +409,11 @@
   test_getFileForPath_part() {
     String a1 = convertPath('/aaa/lib/a1.dart');
     String a2 = convertPath('/aaa/lib/a2.dart');
-    newFile(a1, content: r'''
+    newFile2(a1, r'''
 library a1;
 part 'a2.dart';
 ''');
-    newFile(a2, content: r'''
+    newFile2(a2, r'''
 part of a1;
 class A2 {}
 ''');
@@ -446,7 +446,7 @@
     // Now update the library, and refresh its file.
     // The 'a2.dart' is not referenced anymore.
     // So the part file does not have the library anymore.
-    newFile(a1, content: r'''
+    newFile2(a1, r'''
 library a1;
 part 'not-a2.dart';
 ''');
@@ -477,11 +477,11 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 class B extends A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class A {}
 class D implements A {}
 ''');
@@ -495,7 +495,7 @@
     );
 
     // Change b.dart so that it does not subtype A.
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class C {}
 class D implements C {}
 ''');
@@ -514,13 +514,13 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 enum E1 implements A {
   v
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class A {}
 enum E2 implements A {
   v
@@ -536,7 +536,7 @@
     );
 
     // Change b.dart so that it does not subtype A.
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class C {}
 enum E2 implements C {
   v
@@ -557,13 +557,13 @@
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 mixin M {}
 enum E1 with M {
   v
 }
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 mixin M {}
 enum E2 with M {
   v
@@ -611,17 +611,17 @@
     _assertFilesWithoutLibraryCycle([]);
 
     // No imports, so just a single file.
-    newFile(pa);
+    newFile2(pa, '');
     _assertLibraryCycle(fa, [fa], []);
 
     // Import b.dart into a.dart, two files now.
-    newFile(pa, content: "import 'b.dart';");
+    newFile2(pa, "import 'b.dart';");
     fa.refresh();
     _assertFilesWithoutLibraryCycle([fa]);
     _assertLibraryCycle(fa, [fa], [fb.libraryCycle]);
 
     // Update b.dart so that it imports c.dart now.
-    newFile(pb, content: "import 'c.dart';");
+    newFile2(pb, "import 'c.dart';");
     fb.refresh();
     _assertFilesWithoutLibraryCycle([fa, fb]);
     _assertLibraryCycle(fa, [fa], [fb.libraryCycle]);
@@ -629,7 +629,7 @@
     _assertFilesWithoutLibraryCycle([]);
 
     // Update b.dart so that it exports d.dart instead.
-    newFile(pb, content: "export 'd.dart';");
+    newFile2(pb, "export 'd.dart';");
     fb.refresh();
     _assertFilesWithoutLibraryCycle([fa, fb]);
     _assertLibraryCycle(fa, [fa], [fb.libraryCycle]);
@@ -637,7 +637,7 @@
     _assertFilesWithoutLibraryCycle([]);
 
     // Update a.dart so that it does not import b.dart anymore.
-    newFile(pa);
+    newFile2(pa, '');
     fa.refresh();
     _assertFilesWithoutLibraryCycle([fa]);
     _assertLibraryCycle(fa, [fa], []);
@@ -647,8 +647,8 @@
     String pa = convertPath('/aaa/lib/a.dart');
     String pb = convertPath('/aaa/lib/b.dart');
 
-    newFile(pa, content: "import 'b.dart';");
-    newFile(pb, content: "import 'a.dart';");
+    newFile2(pa, "import 'b.dart';");
+    newFile2(pb, "import 'a.dart';");
 
     FileState fa = fileSystemState.getFileForPath(pa);
     FileState fb = fileSystemState.getFileForPath(pb);
@@ -664,7 +664,7 @@
     expect(fa.libraryCycle, same(fb.libraryCycle));
 
     // Update a.dart so that it does not import b.dart anymore.
-    newFile(pa);
+    newFile2(pa, '');
     fa.refresh();
     _assertFilesWithoutLibraryCycle([fa, fb]);
     _assertLibraryCycle(fa, [fa], []);
@@ -674,7 +674,7 @@
   test_libraryCycle_invalidPart_withPart() {
     var pa = convertPath('/aaa/lib/a.dart');
 
-    newFile(pa, content: r'''
+    newFile2(pa, r'''
 part of lib;
 part 'a.dart';
 ''');
@@ -688,10 +688,10 @@
     var a_path = convertPath('/aaa/lib/a.dart');
     var b_path = convertPath('/aaa/lib/b.dart');
 
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 part 'b.dart';
 ''');
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 part of 'a.dart';
 ''');
 
@@ -716,7 +716,7 @@
 
   test_referencedNames() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 A foo(B p) {
   foo(null);
   C c = new C(p);
@@ -729,7 +729,7 @@
 
   test_refresh_differentApiSignature() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class A {}
 ''');
     FileState file = fileSystemState.getFileForPath(path);
@@ -737,7 +737,7 @@
     List<int> signature = file.apiSignature;
 
     // Update the resource and refresh the file state.
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class B {}
 ''');
     bool apiSignatureChanged = file.refresh();
@@ -749,7 +749,7 @@
 
   test_refresh_sameApiSignature() {
     String path = convertPath('/aaa/lib/a.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class C {
   foo() {
     print(111);
@@ -760,7 +760,7 @@
     List<int> signature = file.apiSignature;
 
     // Update the resource and refresh the file state.
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class C {
   foo() {
     print(222);
@@ -775,7 +775,7 @@
 
   test_store_zeroLengthUnlinked() {
     String path = convertPath('/test.dart');
-    newFile(path, content: 'class A {}');
+    newFile2(path, 'class A {}');
 
     // Get the file, prepare unlinked.
     FileState file = fileSystemState.getFileForPath(path);
@@ -791,7 +791,7 @@
 
   test_subtypedNames() {
     String path = convertPath('/test.dart');
-    newFile(path, content: r'''
+    newFile2(path, r'''
 class X extends A {}
 class Y extends A with B {}
 class Z implements C, D {}
@@ -806,10 +806,10 @@
     String pc = convertPath('/aaa/lib/c.dart');
     String pd = convertPath('/aaa/lib/d.dart');
 
-    newFile(pa, content: "class A {}");
-    newFile(pb, content: "import 'a.dart';");
-    newFile(pc, content: "import 'b.dart';");
-    newFile(pd, content: "class D {}");
+    newFile2(pa, "class A {}");
+    newFile2(pb, "import 'a.dart';");
+    newFile2(pc, "import 'b.dart';");
+    newFile2(pd, "class D {}");
 
     FileState fa = fileSystemState.getFileForPath(pa);
     FileState fb = fileSystemState.getFileForPath(pb);
@@ -826,13 +826,13 @@
 
     // Make an update to a.dart that does not change its API signature.
     // All library cycles are still valid.
-    newFile(pa, content: "class A {} // the same API signature");
+    newFile2(pa, "class A {} // the same API signature");
     fa.refresh();
     _assertFilesWithoutLibraryCycle([]);
 
     // Change a.dart API signature.
     // This flushes signatures of b.dart and c.dart, but d.dart is still OK.
-    newFile(pa, content: "class A2 {}");
+    newFile2(pa, "class A2 {}");
     fa.refresh();
     _assertFilesWithoutLibraryCycle([fa, fb, fc]);
   }
@@ -841,10 +841,10 @@
     var aPath = convertPath('/test/lib/a.dart');
     var bPath = convertPath('/test/lib/b.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 part 'b.dart';
 ''');
-    newFile(bPath, content: '''
+    newFile2(bPath, '''
 part of 'a.dart';
 ''');
 
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 4c31935..0f5e9ad 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -82,7 +82,7 @@
     assertThat(classElementA)
       ..isAncestorOf('C1 = Object with A')
       ..isAncestorOf('C2 = Object with B');
-    assertThat(classElementB)..isAncestorOf('C2 = Object with B');
+    assertThat(classElementB).isAncestorOf('C2 = Object with B');
   }
 
   test_hasAncestor_MixinDeclaration() async {
@@ -107,7 +107,7 @@
   }
 
   test_isExtendedBy_ClassDeclaration_isQualified() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -152,7 +152,7 @@
   }
 
   test_isExtendedBy_ClassTypeAlias_isQualified() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -178,7 +178,7 @@
   }
 
   test_isImplementedBy_ClassDeclaration_isQualified() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -251,7 +251,7 @@
   }
 
   test_isInvokedBy_FunctionElement() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 foo() {}
 ''');
@@ -328,7 +328,7 @@
 }
 ''');
     MethodElement element = findElement.method('foo');
-    assertThat(element)..isInvokedAt('foo();', true);
+    assertThat(element).isInvokedAt('foo();', true);
   }
 
   test_isInvokedBy_MethodElement_ofNamedExtension_static() async {
@@ -342,7 +342,7 @@
 }
 ''');
     MethodElement element = findElement.method('foo');
-    assertThat(element)..isInvokedAt('foo();', true);
+    assertThat(element).isInvokedAt('foo();', true);
   }
 
   test_isInvokedBy_MethodElement_ofUnnamedExtension_instance() async {
@@ -363,11 +363,11 @@
 
     var intMethod = findNode.methodDeclaration('foo() {} // int');
     assertThat(intMethod.declaredElement!)
-      ..isInvokedAt('foo(); // int ref', true);
+        .isInvokedAt('foo(); // int ref', true);
 
     var doubleMethod = findNode.methodDeclaration('foo() {} // double');
     assertThat(doubleMethod.declaredElement!)
-      ..isInvokedAt('foo(); // double ref', true);
+        .isInvokedAt('foo(); // double ref', true);
   }
 
   test_isInvokedBy_MethodElement_propagatedType() async {
@@ -510,7 +510,7 @@
   }
 
   test_isMixedInBy_ClassDeclaration_isQualified() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -636,7 +636,7 @@
 extension E on A<int> {}
 ''');
     ClassElement element = findElement.class_('A');
-    assertThat(element)..isReferencedAt('A<int>', false);
+    assertThat(element).isReferencedAt('A<int>', false);
   }
 
   test_isReferencedBy_ClassElement_implicitNew() async {
@@ -674,7 +674,7 @@
   }
 
   test_isReferencedBy_ClassElement_invocation_isQualified() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 ''');
     await _indexTestUnit('''
@@ -695,7 +695,7 @@
 }
 ''');
     ClassElement element = findElement.class_('A');
-    assertThat(element)..isReferencedAt('A>();', false);
+    assertThat(element).isReferencedAt('A>();', false);
   }
 
   test_isReferencedBy_ClassTypeAlias() async {
@@ -713,40 +713,40 @@
   }
 
   test_isReferencedBy_CompilationUnitElement_export() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await _indexTestUnit('''
 export 'lib.dart';
 ''');
     var element = findElement.export('package:test/lib.dart').exportedLibrary!;
-    assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10);
+    assertThat(element).isReferencedAt("'lib.dart'", true, length: 10);
   }
 
   test_isReferencedBy_CompilationUnitElement_import() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await _indexTestUnit('''
 import 'lib.dart';
 ''');
     var element = findElement.import('package:test/lib.dart').importedLibrary!;
-    assertThat(element)..isReferencedAt("'lib.dart'", true, length: 10);
+    assertThat(element).isReferencedAt("'lib.dart'", true, length: 10);
   }
 
   test_isReferencedBy_CompilationUnitElement_part() async {
-    newFile('$testPackageLibPath/my_unit.dart', content: 'part of my_lib;');
+    newFile2('$testPackageLibPath/my_unit.dart', 'part of my_lib;');
     await _indexTestUnit('''
 library my_lib;
 part 'my_unit.dart';
 ''');
     var element = findElement.part('my_unit.dart');
-    assertThat(element)..isReferencedAt("'my_unit.dart';", true, length: 14);
+    assertThat(element).isReferencedAt("'my_unit.dart';", true, length: 14);
   }
 
   test_isReferencedBy_CompilationUnitElement_part_inPart() async {
-    newFile('$testPackageLibPath/a.dart', content: 'part of lib;');
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', 'part of lib;');
+    newFile2('$testPackageLibPath/b.dart', '''
 library lib;
 part 'a.dart';
 ''');
@@ -1025,7 +1025,7 @@
 }
 ''');
     ExtensionElement element = findElement.extension_('E');
-    assertThat(element)..isReferencedAt('E(0).foo()', false);
+    assertThat(element).isReferencedAt('E(0).foo()', false);
   }
 
   test_isReferencedBy_FieldElement_class() async {
@@ -1048,14 +1048,14 @@
     PropertyAccessorElement getter = field.getter!;
     PropertyAccessorElement setter = field.setter!;
     // A()
-    assertThat(field)..isWrittenAt('field});', true);
+    assertThat(field).isWrittenAt('field});', true);
     // m()
-    assertThat(setter)..isReferencedAt('field = 2; // nq', false);
-    assertThat(getter)..isReferencedAt('field); // nq', false);
+    assertThat(setter).isReferencedAt('field = 2; // nq', false);
+    assertThat(getter).isReferencedAt('field); // nq', false);
     // main()
-    assertThat(setter)..isReferencedAt('field = 3; // q', true);
-    assertThat(getter)..isReferencedAt('field); // q', true);
-    assertThat(field)..isReferencedAt('field: 4', true);
+    assertThat(setter).isReferencedAt('field = 3; // q', true);
+    assertThat(getter).isReferencedAt('field); // q', true);
+    assertThat(field).isReferencedAt('field: 4', true);
   }
 
   test_isReferencedBy_FieldElement_class_multiple() async {
@@ -1077,18 +1077,18 @@
       FieldElement field = findElement.field('aaa');
       PropertyAccessorElement getter = field.getter!;
       PropertyAccessorElement setter = field.setter!;
-      assertThat(field)..isWrittenAt('aaa, ', true);
-      assertThat(getter)..isReferencedAt('aaa);', false);
-      assertThat(setter)..isReferencedAt('aaa = 1;', false);
+      assertThat(field).isWrittenAt('aaa, ', true);
+      assertThat(getter).isReferencedAt('aaa);', false);
+      assertThat(setter).isReferencedAt('aaa = 1;', false);
     }
     // bbb
     {
       FieldElement field = findElement.field('bbb');
       PropertyAccessorElement getter = field.getter!;
       PropertyAccessorElement setter = field.setter!;
-      assertThat(field)..isWrittenAt('bbb) {}', true);
-      assertThat(getter)..isReferencedAt('bbb);', false);
-      assertThat(setter)..isReferencedAt('bbb = 2;', false);
+      assertThat(field).isWrittenAt('bbb) {}', true);
+      assertThat(getter).isReferencedAt('bbb);', false);
+      assertThat(setter).isReferencedAt('bbb = 2;', false);
     }
   }
 
@@ -1147,14 +1147,14 @@
     PropertyAccessorElement getter = field.getter!;
     PropertyAccessorElement setter = field.setter!;
     // E()
-    assertThat(field)..isWrittenAt('field});', true);
+    assertThat(field).isWrittenAt('field});', true);
     // foo()
-    assertThat(setter)..isReferencedAt('field = 2; // nq', false);
-    assertThat(getter)..isReferencedAt('field; // nq', false);
+    assertThat(setter).isReferencedAt('field = 2; // nq', false);
+    assertThat(getter).isReferencedAt('field; // nq', false);
     // f()
-    assertThat(setter)..isReferencedAt('field = 3; // q', true);
-    assertThat(getter)..isReferencedAt('field; // q', true);
-    assertThat(field)..isReferencedAt('field: 4', true);
+    assertThat(setter).isReferencedAt('field = 3; // q', true);
+    assertThat(getter).isReferencedAt('field; // q', true);
+    assertThat(field).isReferencedAt('field: 4', true);
   }
 
   test_isReferencedBy_FieldElement_enum_index() async {
@@ -1171,11 +1171,11 @@
 ''');
     ClassElement enumElement = findElement.enum_('MyEnum');
     assertThat(enumElement.getGetter('values')!)
-      ..isReferencedAt('values);', true);
+        .isReferencedAt('values);', true);
     assertThat(typeProvider.enumElement!.getGetter('index')!)
-      ..isReferencedAt('index);', true);
-    assertThat(enumElement.getGetter('A')!)..isReferencedAt('A);', true);
-    assertThat(enumElement.getGetter('B')!)..isReferencedAt('B);', true);
+        .isReferencedAt('index);', true);
+    assertThat(enumElement.getGetter('A')!).isReferencedAt('A);', true);
+    assertThat(enumElement.getGetter('B')!).isReferencedAt('B);', true);
   }
 
   test_isReferencedBy_FieldElement_enum_synthetic_hasGetter() async {
@@ -1227,7 +1227,7 @@
   }
 
   test_isReferencedBy_FunctionElement_with_LibraryElement() async {
-    newFile('$testPackageLibPath/foo.dart', content: r'''
+    newFile2('$testPackageLibPath/foo.dart', r'''
 bar() {}
 ''');
     await _indexTestUnit('''
@@ -1239,10 +1239,10 @@
 
     var importFind = findElement.importFind('package:test/foo.dart');
     assertThat(importFind.importedLibrary)
-      ..isReferencedAt('"foo.dart";', true, length: 10);
+        .isReferencedAt('"foo.dart";', true, length: 10);
 
     FunctionElement bar = importFind.topFunction('bar');
-    assertThat(bar)..isInvokedAt('bar();', false);
+    assertThat(bar).isInvokedAt('bar();', false);
   }
 
   test_isReferencedBy_FunctionTypeAliasElement() async {
@@ -1252,7 +1252,7 @@
 }
 ''');
     Element element = findElement.typeAlias('A');
-    assertThat(element)..isReferencedAt('A p) {', false);
+    assertThat(element).isReferencedAt('A p) {', false);
   }
 
   /// There was a bug in the AST structure, when single [Comment] was cloned and
@@ -1267,7 +1267,7 @@
 var myVariable = null;
 ''');
     Element element = findElement.class_('A');
-    assertThat(element)..isReferencedAt('A] text', false);
+    assertThat(element).isReferencedAt('A] text', false);
   }
 
   test_isReferencedBy_MethodElement_class() async {
@@ -1306,8 +1306,8 @@
   }
 
   test_isReferencedBy_MultiplyDefinedElement() async {
-    newFile('$testPackageLibPath/a1.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a2.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a1.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a2.dart', 'class A {}');
     await _indexTestUnit('''
 import 'a1.dart';
 import 'a2.dart';
@@ -1330,7 +1330,7 @@
 }
 ''');
     Element element = findElement.parameter('p');
-    assertThat(element)..isReferencedAt('p: 1', true);
+    assertThat(element).isReferencedAt('p: 1', true);
   }
 
   test_isReferencedBy_ParameterElement_genericFunctionType() async {
@@ -1357,10 +1357,10 @@
   }
 
   test_isReferencedBy_ParameterElement_multiplyDefined_generic() async {
-    newFile('/test/lib/a.dart', content: r'''
+    newFile2('/test/lib/a.dart', r'''
 void foo<T>({T? a}) {}
 ''');
-    newFile('/test/lib/b.dart', content: r'''
+    newFile2('/test/lib/b.dart', r'''
 void foo<T>({T? a}) {}
 ''');
     await _indexTestUnit(r"""
@@ -1384,7 +1384,7 @@
 }
 ''');
     var element = findElement.unnamedConstructor('A').parameter('a');
-    assertThat(element)..isReferencedAt('a}); // ref', true);
+    assertThat(element).isReferencedAt('a}); // ref', true);
   }
 
   test_isReferencedBy_ParameterElement_ofConstructor_super_positional() async {
@@ -1397,7 +1397,7 @@
 }
 ''');
     var element = findElement.unnamedConstructor('A').parameter('a');
-    assertThat(element)..isReferencedAt('a); // ref', true);
+    assertThat(element).isReferencedAt('a); // ref', true);
   }
 
   test_isReferencedBy_ParameterElement_optionalNamed_ofConstructor_genericClass() async {
@@ -1411,7 +1411,7 @@
 }
 ''');
     Element element = findElement.parameter('test');
-    assertThat(element)..isReferencedAt('test: 0', true);
+    assertThat(element).isReferencedAt('test: 0', true);
   }
 
   test_isReferencedBy_ParameterElement_optionalNamed_ofMethod_genericClass() async {
@@ -1425,7 +1425,7 @@
 }
 ''');
     Element element = findElement.parameter('test');
-    assertThat(element)..isReferencedAt('test: 0', true);
+    assertThat(element).isReferencedAt('test: 0', true);
   }
 
   test_isReferencedBy_ParameterElement_optionalNamed_ofTopFunction() async {
@@ -1437,7 +1437,7 @@
 }
 ''');
     Element element = findElement.parameter('test');
-    assertThat(element)..isReferencedAt('test: 0', true);
+    assertThat(element).isReferencedAt('test: 0', true);
   }
 
   test_isReferencedBy_ParameterElement_optionalNamed_ofTopFunction_anywhere() async {
@@ -1449,7 +1449,7 @@
 }
 ''');
     Element element = findElement.parameter('test');
-    assertThat(element)..isReferencedAt('test: 0', true);
+    assertThat(element).isReferencedAt('test: 0', true);
   }
 
   test_isReferencedBy_ParameterElement_optionalPositional() async {
@@ -1476,7 +1476,7 @@
 }
 ''');
     Element element = findElement.parameter('test');
-    assertThat(element)..isReferencedAt('test: 0', true);
+    assertThat(element).isReferencedAt('test: 0', true);
   }
 
   test_isReferencedBy_PropertyAccessor_ofNamedExtension_instance() async {
@@ -1493,8 +1493,8 @@
 ''');
     PropertyAccessorElement getter = findElement.getter('foo');
     PropertyAccessorElement setter = findElement.setter('foo');
-    assertThat(getter)..isReferencedAt('foo;', true);
-    assertThat(setter)..isReferencedAt('foo = 0;', true);
+    assertThat(getter).isReferencedAt('foo;', true);
+    assertThat(setter).isReferencedAt('foo = 0;', true);
   }
 
   test_isReferencedBy_PropertyAccessor_ofNamedExtension_static() async {
@@ -1511,8 +1511,8 @@
 ''');
     PropertyAccessorElement getter = findElement.getter('foo');
     PropertyAccessorElement setter = findElement.setter('foo');
-    assertThat(getter)..isReferencedAt('foo;', true);
-    assertThat(setter)..isReferencedAt('foo = 0;', true);
+    assertThat(getter).isReferencedAt('foo;', true);
+    assertThat(setter).isReferencedAt('foo = 0;', true);
   }
 
   test_isReferencedBy_PropertyAccessor_ofUnnamedExtension_instance() async {
@@ -1538,16 +1538,16 @@
     var intGetter = findNode.methodDeclaration('0; // int getter');
     var intSetter = findNode.methodDeclaration('{} // int setter');
     assertThat(intGetter.declaredElement!)
-      ..isReferencedAt('foo; // int getter ref', true);
+        .isReferencedAt('foo; // int getter ref', true);
     assertThat(intSetter.declaredElement!)
-      ..isReferencedAt('foo = 0; // int setter ref', true);
+        .isReferencedAt('foo = 0; // int setter ref', true);
 
     var doubleGetter = findNode.methodDeclaration('0; // double getter');
     var doubleSetter = findNode.methodDeclaration('{} // double setter');
     assertThat(doubleGetter.declaredElement!)
-      ..isReferencedAt('foo; // double getter ref', true);
+        .isReferencedAt('foo; // double getter ref', true);
     assertThat(doubleSetter.declaredElement!)
-      ..isReferencedAt('foo = 0; // double setter ref', true);
+        .isReferencedAt('foo = 0; // double setter ref', true);
   }
 
   test_isReferencedBy_synthetic_leastUpperBound() async {
@@ -1563,7 +1563,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 var V;
 ''');
@@ -1577,7 +1577,7 @@
   print(V); // nq
 }''');
     TopLevelVariableElement variable = importFindLib().topVar('V');
-    assertThat(variable)..isReferencedAt('V; // imp', true);
+    assertThat(variable).isReferencedAt('V; // imp', true);
     assertThat(variable.getter!)
       ..isReferencedAt('V); // q', true)
       ..isReferencedAt('V); // nq', false);
@@ -1587,7 +1587,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement_synthetic_hasGetterSetter() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 int get V => 0;
 void set V(_) {}
 ''');
@@ -1599,7 +1599,7 @@
   }
 
   test_isReferencedBy_TopLevelVariableElement_synthetic_hasSetter() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 void set V(_) {}
 ''');
     await _indexTestUnit('''
@@ -1661,7 +1661,7 @@
 
   test_subtypes_classDeclaration() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 class B {}
 class C {}
@@ -1711,7 +1711,7 @@
 
   test_subtypes_classTypeAlias() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 class B {}
 class C {}
@@ -1779,7 +1779,7 @@
 
   test_subtypes_mixinDeclaration() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 class B {}
 class C {}
@@ -2052,7 +2052,7 @@
   void _failWithIndexDump(String msg) {
     String packageIndexJsonString =
         JsonEncoder.withIndent('  ').convert(index.toJson());
-    fail('$msg in\n' + packageIndexJsonString);
+    fail('$msg in\n$packageIndexJsonString');
   }
 
   /// Return the [element] identifier in [index] or fail.
diff --git a/pkg/analyzer/test/src/dart/analysis/resolve_for_completion_test.dart b/pkg/analyzer/test/src/dart/analysis/resolve_for_completion_test.dart
index d570325..e9b7143 100644
--- a/pkg/analyzer/test/src/dart/analysis/resolve_for_completion_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/resolve_for_completion_test.dart
@@ -25,7 +25,7 @@
   String get testFilePathPlatform => convertPath(testFilePath);
 
   test_class__fieldDeclaration_type_namedType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   var f1 = 0;
   doub^ f2 = null;
@@ -37,7 +37,7 @@
   }
 
   test_class__fieldDeclaration_type_namedType_typeArgument_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   var f1 = 0;
   List<doub^>? f2 = null;
@@ -49,7 +49,7 @@
   }
 
   test_class_extends_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A extends foo^ {}
 ''');
 
@@ -57,7 +57,7 @@
   }
 
   test_class_fieldDeclaration_initializer() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   var f1 = 0;
   var f2 = foo^;
@@ -71,7 +71,7 @@
   }
 
   test_class_implements_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A implements foo^ {}
 ''');
 
@@ -79,7 +79,7 @@
   }
 
   test_class_methodDeclaration_body() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {}
 
 class B {
@@ -101,7 +101,7 @@
   }
 
   test_class_methodDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   void foo^() {
     print(0);
@@ -113,7 +113,7 @@
   }
 
   test_class_methodDeclaration_returnType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   doub^ foo() {}
 }
@@ -123,7 +123,7 @@
   }
 
   test_class_with_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A with foo^ {}
 ''');
 
@@ -131,7 +131,7 @@
   }
 
   test_constructorDeclaration_body() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {}
 
 class B {
@@ -153,7 +153,7 @@
   }
 
   test_constructorDeclaration_fieldFormalParameter_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   final int f;
   A(this.^);
@@ -166,7 +166,7 @@
   }
 
   test_constructorDeclaration_fieldInitializer_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {}
 
 class B {
@@ -186,7 +186,7 @@
   }
 
   test_constructorDeclaration_fieldInitializer_value() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   var f;
 
@@ -203,7 +203,7 @@
   }
 
   test_constructorDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   A.foo^() {
     print(0);
@@ -215,7 +215,7 @@
   }
 
   test_constructorDeclaration_superFormalParameter_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {
   A(int first, double second);
   A.named(int third);
@@ -232,7 +232,7 @@
   }
 
   test_doubleLiteral() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v = 1.2^;
 ''');
 
@@ -240,7 +240,7 @@
   }
 
   test_extension_methodDeclaration_body() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 extension E on int {
   void foo1() {}
 
@@ -260,7 +260,7 @@
   }
 
   test_extension_methodDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 extension E on int {
   void foo^() {
     print(0);
@@ -272,7 +272,7 @@
   }
 
   test_extension_methodDeclaration_returnType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 extension E on int {
   doub^ foo() {}
 }
@@ -282,7 +282,7 @@
   }
 
   test_extension_on_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 extension E on int^ {
   void foo() {}
 }
@@ -292,7 +292,7 @@
   }
 
   test_functionDeclaration_body() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void foo1() {}
 
 void foo2() {
@@ -310,7 +310,7 @@
   }
 
   test_functionDeclaration_body_withSemicolon() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void foo1() {}
 
 void foo2() {
@@ -328,7 +328,7 @@
   }
 
   test_functionDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void foo^() {
   print(0);
 }
@@ -338,7 +338,7 @@
   }
 
   test_functionDeclaration_returnType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 doub^ f() {}
 ''');
 
@@ -346,7 +346,7 @@
   }
 
   test_importDirective_show_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 import 'dart:async';
 import 'dart:math' show ^;
 import 'dart:io';
@@ -358,7 +358,7 @@
   }
 
   test_importDirective_uri() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 import 'dart:async';
 import 'dart:ma^'
 import 'dart:io';
@@ -370,7 +370,7 @@
   }
 
   test_integerLiteral() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v = 0^;
 ''');
 
@@ -378,7 +378,7 @@
   }
 
   test_localVariableDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void f() {
   var foo^
 }
@@ -388,7 +388,7 @@
   }
 
   test_localVariableDeclaration_type_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void f() {
   doub^ a;
 }
@@ -398,7 +398,7 @@
   }
 
   test_mixin_implements_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 mixin M implements foo^ {}
 ''');
 
@@ -406,7 +406,7 @@
   }
 
   test_mixin_methodDeclaration_body() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 class A {}
 
 mixin M {
@@ -428,7 +428,7 @@
   }
 
   test_mixin_methodDeclaration_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 mixin M {
   void foo^() {
     print(0);
@@ -440,7 +440,7 @@
   }
 
   test_mixin_methodDeclaration_returnType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 mixin M {
   doub^ foo() {}
 }
@@ -450,7 +450,7 @@
   }
 
   test_mixin_on_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 mixin M on foo^ {}
 ''');
 
@@ -458,13 +458,13 @@
   }
 
   test_processPendingChanges() async {
-    newFile(testFilePath, content: 'class A {}');
+    newFile2(testFilePath, 'class A {}');
 
     // Read the file.
     testDriver.getFileSync(testFilePathPlatform);
 
     // Should call `changeFile()`, and the driver must re-read the file.
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v1 = 0;
 var v2 = v1.^;
 ''');
@@ -475,7 +475,7 @@
   }
 
   test_simpleFormalParameter_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void f(doub^) {}
 ''');
 
@@ -483,7 +483,7 @@
   }
 
   test_simpleFormalParameter_type_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void f(doub^ a) {}
 ''');
 
@@ -491,7 +491,7 @@
   }
 
   test_topLevelVariable_initializer() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v1 = 0;
 var v2 = foo^;
 var v3 = 1;
@@ -503,7 +503,7 @@
   }
 
   test_topLevelVariable_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v1 = 0;
 var v2^
 var v3 = 0;
@@ -513,7 +513,7 @@
   }
 
   test_topLevelVariable_type_namedType_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v1 = 0;
 doub^ v2 = null;
 var v3 = 1;
@@ -523,7 +523,7 @@
   }
 
   test_topLevelVariable_type_namedType_typeArgument_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 var v1 = 0;
 List<doub^>? v2 = null;
 var v3 = 1;
@@ -533,7 +533,7 @@
   }
 
   test_typedef_name_nothing() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 typedef F^
 ''');
 
@@ -541,7 +541,7 @@
   }
 
   test_typeParameter_name() async {
-    var result = _resolveTestCode(r'''
+    var result = await _resolveTestCode(r'''
 void f<T^>() {
   print(0);
 }
@@ -559,15 +559,19 @@
 
     var before = content.substring(0, offset);
     var after = content.substring(offset + 1);
-    newFile(path, content: before + after);
+    newFile2(path, before + after);
 
     return offset;
   }
 
-  ResolvedForCompletionResultImpl _resolveTestCode(String content) {
+  Future<ResolvedForCompletionResultImpl> _resolveTestCode(
+    String content,
+  ) async {
     var path = testFilePathPlatform;
     var offset = _newFileWithOffset(path, content);
+
     testDriver.changeFile(path);
+    await testDriver.applyPendingFileChanges();
 
     var performance = OperationPerformanceImpl('<root>');
     var result = testDriver.resolveForCompletion(
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index 983d7bb..5d1a963 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -59,7 +59,7 @@
   }
 
   test_class_inPart() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 part of 'test.dart';
 class A {}
 ''');
@@ -433,11 +433,11 @@
   Future<ElementDeclarationResult?> getElementDeclaration(
       Element element) async {
     var libraryPath = element.library!.source.fullName;
-    var library = _getParsedLibrary(libraryPath);
+    var library = await _getParsedLibrary(libraryPath);
     return library.getElementDeclaration(element);
   }
 
-  ParsedLibraryResult _getParsedLibrary(String path) {
+  Future<ParsedLibraryResult> _getParsedLibrary(String path) async {
     var session = contextFor(path).currentSession;
     return session.getParsedLibrary(path) as ParsedLibraryResult;
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 6c5e71d..55c4c67 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -179,9 +179,9 @@
         ..add(name: 'bbb', rootPath: bbbPackageRootPath),
     );
 
-    newFile(aaaFilePath, content: 'class A {}');
-    newFile(bbbFilePath, content: 'class B {}');
-    newFile(cccFilePath, content: 'class C {}');
+    newFile2(aaaFilePath, 'class A {}');
+    newFile2(bbbFilePath, 'class B {}');
+    newFile2(cccFilePath, 'class C {}');
 
     await resolveTestCode('class T {}');
 
@@ -252,8 +252,8 @@
   }
 
   test_declarations_onlyForFile() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    var b = newFile('$testPackageLibPath/b.dart', content: 'class B {}').path;
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    var b = newFile2('$testPackageLibPath/b.dart', 'class B {}').path;
 
     var results = WorkspaceSymbols();
     await driver.search.declarations(results, null, null, onlyForFile: b);
@@ -525,7 +525,7 @@
   }
 
   test_searchReferences_ClassElement_definedOutside() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 class A {};
 ''');
     await resolveTestCode('''
@@ -600,7 +600,7 @@
   }
 
   test_searchReferences_CompilationUnitElement() async {
-    newFile('$testPackageLibPath/foo.dart');
+    newFile2('$testPackageLibPath/foo.dart', '');
     await resolveTestCode('''
 import 'foo.dart'; // import
 export 'foo.dart'; // export
@@ -734,8 +734,7 @@
   A(); // in other
 }
 ''';
-    newFile(other, content: otherCode);
-    driver.addFile(other);
+    newFile2(other, otherCode);
 
     await resolveTestCode('''
 class A {
@@ -1101,7 +1100,7 @@
   }
 
   test_searchReferences_ImportElement_noPrefix_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class N1 {}
 void N2() {}
 int get N3 => 0;
@@ -1185,7 +1184,7 @@
   }
 
   test_searchReferences_ImportElement_withPrefix_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class N1 {}
 void N2() {}
 int get N3 => 0;
@@ -1240,8 +1239,8 @@
   test_searchReferences_LibraryElement() async {
     var codeA = 'part of lib; // A';
     var codeB = 'part of lib; // B';
-    newFile('$testPackageLibPath/unitA.dart', content: codeA);
-    newFile('$testPackageLibPath/unitB.dart', content: codeB);
+    newFile2('$testPackageLibPath/unitA.dart', codeA);
+    newFile2('$testPackageLibPath/unitB.dart', codeB);
     await resolveTestCode('''
 library lib;
 part 'unitA.dart';
@@ -1273,8 +1272,8 @@
 
     var codeA = 'part of lib; // A';
     var codeB = 'part of lib; // B';
-    newFile(partPathA, content: codeA);
-    newFile(partPathB, content: codeB);
+    newFile2(partPathA, codeA);
+    newFile2(partPathB, codeB);
 
     pathForContextSelection = testFilePath;
 
@@ -1787,7 +1786,7 @@
 part of my_lib;
 ppp.Future c;
 ''';
-    newFile('$testPackageLibPath/my_part.dart', content: partCode);
+    newFile2('$testPackageLibPath/my_part.dart', partCode);
     await resolveTestCode('''
 library my_lib;
 import 'dart:async' as ppp;
@@ -1826,7 +1825,7 @@
 part of my_lib;
 ppp.Future c;
 ''';
-    newFile(partPath, content: partCode);
+    newFile2(partPath, partCode);
     await resolveFileCode(libPath, '''
 library my_lib;
 import 'dart:async' as ppp;
@@ -1854,9 +1853,9 @@
     String p3 = convertPath('$testPackageLibPath/part3.dart');
     String code1 = 'part of lib; _C v1;';
     String code2 = 'part of lib; _C v2;';
-    newFile(p1, content: code1);
-    newFile(p2, content: code2);
-    newFile(p3, content: 'part of lib; int v3;');
+    newFile2(p1, code1);
+    newFile2(p2, code2);
+    newFile2(p3, 'part of lib; int v3;');
 
     await resolveTestCode('''
 library lib;
@@ -1898,9 +1897,9 @@
 ''';
     String code2 = 'part of lib; _C v2;';
 
-    newFile(p, content: code);
-    newFile(p1, content: code1);
-    newFile(p2, content: code2);
+    newFile2(p, code);
+    newFile2(p1, code1);
+    newFile2(p2, code2);
 
     await resolveTestCode(code);
 
@@ -1941,8 +1940,8 @@
     String code1 = 'part of lib; _C v1;';
     String code2 = 'part of lib; _C v2;';
 
-    newFile(p1, content: code1);
-    newFile(p2, content: code2);
+    newFile2(p1, code1);
+    newFile2(p2, code2);
 
     await resolveFileCode(testFile, testCode);
 
@@ -2060,7 +2059,7 @@
   }
 
   test_searchReferences_TopLevelVariableElement() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 var V;
 ''');
@@ -2126,7 +2125,7 @@
   }
 
   test_searchReferences_TypeAliasElement_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef A<T> = Map<int, T>;
 ''');
     await resolveTestCode('''
@@ -2359,7 +2358,7 @@
     var aUri = 'package:aaa/a.dart';
     var bUri = 'package:bbb/b.dart';
 
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 import 'package:aaa/a.dart';
 
 class T1 extends A {
@@ -2371,7 +2370,7 @@
 }
 ''');
 
-    newFile(bbbFilePath, content: r'''
+    newFile2(bbbFilePath, r'''
 import 'package:aaa/a.dart';
 
 class B extends A {
@@ -2379,7 +2378,7 @@
 }
 ''');
 
-    newFile(aaaFilePath, content: r'''
+    newFile2(aaaFilePath, r'''
 class A {
   void method1() {}
   void method2() {}
@@ -2427,10 +2426,10 @@
         ..add(name: 'bbb', rootPath: bbbPackageRootPath),
     );
 
-    newFile(testFilePath, content: 'class T implements List {}');
-    newFile(aaaFilePath, content: 'class A implements List {}');
-    newFile(bbbFilePath, content: 'class B implements List {}');
-    newFile(cccFilePath, content: 'class C implements List {}');
+    newFile2(testFilePath, 'class T implements List {}');
+    newFile2(aaaFilePath, 'class A implements List {}');
+    newFile2(bbbFilePath, 'class B implements List {}');
+    newFile2(cccFilePath, 'class C implements List {}');
 
     var coreLibResult =
         await driver.getLibraryByUri('dart:core') as LibraryElementResult;
@@ -2456,11 +2455,11 @@
   test_subtypes_class_files() async {
     String pathB = convertPath('$testPackageLibPath/b.dart');
     String pathC = convertPath('$testPackageLibPath/c.dart');
-    newFile(pathB, content: r'''
+    newFile2(pathB, r'''
 import 'test.dart';
 class B extends A {}
 ''');
-    newFile(pathC, content: r'''
+    newFile2(pathC, r'''
 import 'test.dart';
 class C extends A {}
 class D {}
diff --git a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
index 6beca53..46131f0 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
@@ -28,7 +28,7 @@
   }
 
   test_getClass_defined() async {
-    var file = newFile('$testPackageLibPath/c.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/c.dart', r'''
 class C {}
 int v = 0;
 ''');
@@ -39,7 +39,7 @@
   }
 
   test_getClass_defined_notClass() async {
-    var file = newFile('$testPackageLibPath/c.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/c.dart', r'''
 int v = 0;
 ''');
     String uri = file.toUri().toString();
@@ -49,10 +49,10 @@
   }
 
   test_getClass_exported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
-    var bFile = newFile('$testPackageLibPath/b.dart', content: r'''
+    var bFile = newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
     String bUri = bFile.toUri().toString();
@@ -62,10 +62,10 @@
   }
 
   test_getClass_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
-    var bFile = newFile('$testPackageLibPath/b.dart', content: r'''
+    var bFile = newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart';
 ''');
     String bUri = bFile.toUri().toString();
@@ -95,7 +95,7 @@
   }
 
   test_getTopLevelPropertyAccessor_defined_getter() async {
-    var file = newFile('$testPackageLibPath/test.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/test.dart', r'''
 int get a => 0;
 ''');
     String uri = file.toUri().toString();
@@ -106,7 +106,7 @@
   }
 
   test_getTopLevelPropertyAccessor_defined_setter() async {
-    var file = newFile('$testPackageLibPath/test.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/test.dart', r'''
 set a(_) {}
 ''');
     String uri = file.toUri().toString();
@@ -117,7 +117,7 @@
   }
 
   test_getTopLevelPropertyAccessor_defined_variable() async {
-    var file = newFile('$testPackageLibPath/test.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/test.dart', r'''
 int a;
 ''');
     String uri = file.toUri().toString();
@@ -128,10 +128,10 @@
   }
 
   test_getTopLevelPropertyAccessor_exported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int a;
 ''');
-    var bFile = newFile('$testPackageLibPath/b.dart', content: r'''
+    var bFile = newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
     String bUri = bFile.toUri().toString();
@@ -142,10 +142,10 @@
   }
 
   test_getTopLevelPropertyAccessor_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int a;
 ''');
-    var bFile = newFile('$testPackageLibPath/b.dart', content: r'''
+    var bFile = newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart';
 ''');
     String bUri = bFile.toUri().toString();
@@ -155,7 +155,7 @@
   }
 
   test_getTopLevelPropertyAccessor_notDefined() async {
-    var file = newFile('$testPackageLibPath/test.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/test.dart', r'''
 int a;
 ''');
     String uri = file.toUri().toString();
@@ -165,7 +165,7 @@
   }
 
   test_getTopLevelPropertyAccessor_notPropertyAccessor() async {
-    var file = newFile('$testPackageLibPath/test.dart', content: r'''
+    var file = newFile2('$testPackageLibPath/test.dart', r'''
 int a() {}
 ''');
     String uri = file.toUri().toString();
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 6953e85..fac7f1f 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -23,7 +23,7 @@
     extends BazelWorkspaceResolutionTest {
   void test_getErrors_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
-    newFile('$workspaceRootPath/bazel-bin/$relPath');
+    newFile2('$workspaceRootPath/bazel-bin/$relPath', '');
 
     var path = convertPath('$workspaceRootPath/$relPath');
     var session = contextFor(path).currentSession;
@@ -32,9 +32,9 @@
   }
 
   void test_getErrors_valid() async {
-    var file = newFile(
+    var file = newFile2(
       '$workspaceRootPath/dart/my/lib/a.dart',
-      content: 'var x = 0',
+      'var x = 0',
     );
 
     var session = contextFor(file.path).currentSession;
@@ -46,7 +46,7 @@
 
   void test_getParsedLibrary_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
-    newFile('$workspaceRootPath/bazel-bin/$relPath');
+    newFile2('$workspaceRootPath/bazel-bin/$relPath', '');
 
     var path = convertPath('$workspaceRootPath/$relPath');
     var session = contextFor(path).currentSession;
@@ -56,7 +56,7 @@
 
   void test_getResolvedLibrary_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
-    newFile('$workspaceRootPath/bazel-bin/$relPath');
+    newFile2('$workspaceRootPath/bazel-bin/$relPath', '');
 
     var path = convertPath('$workspaceRootPath/$relPath');
     var session = contextFor(path).currentSession;
@@ -66,7 +66,7 @@
 
   void test_getResolvedUnit_notFileOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
-    newFile('$workspaceRootPath/bazel-bin/$relPath');
+    newFile2('$workspaceRootPath/bazel-bin/$relPath', '');
 
     var path = convertPath('$workspaceRootPath/$relPath');
     var session = contextFor(path).currentSession;
@@ -75,9 +75,9 @@
   }
 
   void test_getResolvedUnit_valid() async {
-    var file = newFile(
+    var file = newFile2(
       '$workspaceRootPath/dart/my/lib/a.dart',
-      content: 'class A {}',
+      'class A {}',
     );
 
     var session = contextFor(file.path).currentSession;
@@ -88,9 +88,9 @@
   }
 
   void test_getUnitElement_invalidPath_notAbsolute() async {
-    var file = newFile(
+    var file = newFile2(
       '$workspaceRootPath/dart/my/lib/a.dart',
-      content: 'class A {}',
+      'class A {}',
     );
 
     var session = contextFor(file.path).currentSession;
@@ -100,7 +100,7 @@
 
   void test_getUnitElement_notPathOfUri() async {
     var relPath = 'dart/my/lib/a.dart';
-    newFile('$workspaceRootPath/bazel-bin/$relPath');
+    newFile2('$workspaceRootPath/bazel-bin/$relPath', '');
 
     var path = convertPath('$workspaceRootPath/$relPath');
     var session = contextFor(path).currentSession;
@@ -109,9 +109,9 @@
   }
 
   void test_getUnitElement_valid() async {
-    var file = newFile(
+    var file = newFile2(
       '$workspaceRootPath/dart/my/lib/a.dart',
-      content: 'class A {}',
+      'class A {}',
     );
 
     var session = contextFor(file.path).currentSession;
@@ -125,7 +125,7 @@
 @reflectiveTest
 class AnalysisSessionImplTest extends PubPackageResolutionTest {
   test_getErrors() async {
-    var test = newFile(testFilePath, content: 'class C {');
+    var test = newFile2(testFilePath, 'class C {');
 
     var session = contextFor(testFilePath).currentSession;
     var errorsResult = await session.getErrorsValid(test.path);
@@ -135,7 +135,7 @@
   }
 
   test_getErrors_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -150,14 +150,8 @@
     expect(errorsResult, isA<InvalidPathResult>());
   }
 
-  test_getFile_invalidPath_notAbsolute() async {
-    var session = contextFor(testFilePath).currentSession;
-    var errorsResult = session.getFile('not_absolute.dart');
-    expect(errorsResult, isA<InvalidPathResult>());
-  }
-
-  test_getFileSync_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+  test_getFile_inconsistent() async {
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -166,8 +160,14 @@
     );
   }
 
-  test_getFileSync_library() async {
-    var a = newFile('$testPackageLibPath/a.dart', content: '');
+  test_getFile_invalidPath_notAbsolute() async {
+    var session = contextFor(testFilePath).currentSession;
+    var errorsResult = session.getFile('not_absolute.dart');
+    expect(errorsResult, isA<InvalidPathResult>());
+  }
+
+  test_getFile_library() async {
+    var a = newFile2('$testPackageLibPath/a.dart', '');
 
     var session = contextFor(testFilePath).currentSession;
     var file = session.getFileValid(a.path);
@@ -176,8 +176,8 @@
     expect(file.isPart, isFalse);
   }
 
-  test_getFileSync_part() async {
-    var a = newFile('$testPackageLibPath/a.dart', content: 'part of lib;');
+  test_getFile_part() async {
+    var a = newFile2('$testPackageLibPath/a.dart', 'part of lib;');
 
     var session = contextFor(testFilePath).currentSession;
     var file = session.getFileValid(a.path);
@@ -187,7 +187,7 @@
   }
 
   test_getLibraryByUri() async {
-    newFile(testFilePath, content: r'''
+    newFile2(testFilePath, r'''
 class A {}
 class B {}
 ''');
@@ -201,7 +201,7 @@
   }
 
   test_getLibraryByUri_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -217,7 +217,7 @@
   }
 
   test_getParsedLibrary() async {
-    var test = newFile('$testPackageLibPath/a.dart', content: r'''
+    var test = newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 class B {}
 ''');
@@ -237,7 +237,7 @@
   }
 
   test_getParsedLibrary_getElementDeclaration_class() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 class A {}
 class B {}
 ''');
@@ -257,7 +257,7 @@
   }
 
   test_getParsedLibrary_getElementDeclaration_notThisLibrary() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var resolvedUnit =
@@ -273,7 +273,7 @@
   }
 
   test_getParsedLibrary_getElementDeclaration_synthetic() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 int foo = 0;
 ''');
 
@@ -298,7 +298,7 @@
   }
 
   test_getParsedLibrary_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -308,7 +308,7 @@
   }
 
   test_getParsedLibrary_invalidPartUri() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 part 'a.dart';
 part ':[invalid uri].dart';
 part 'c.dart';
@@ -339,7 +339,7 @@
   }
 
   test_getParsedLibrary_notLibrary() async {
-    var test = newFile(testFilePath, content: 'part of "a.dart";');
+    var test = newFile2(testFilePath, 'part of "a.dart";');
     var session = contextFor(testFilePath).currentSession;
     expect(session.getParsedLibrary(test.path), isA<NotLibraryButPartResult>());
   }
@@ -367,9 +367,9 @@
 class C3 {}
 ''';
 
-    var a = newFile('$testPackageLibPath/a.dart', content: aContent);
-    var b = newFile('$testPackageLibPath/b.dart', content: bContent);
-    var c = newFile('$testPackageLibPath/c.dart', content: cContent);
+    var a = newFile2('$testPackageLibPath/a.dart', aContent);
+    var b = newFile2('$testPackageLibPath/b.dart', bContent);
+    var c = newFile2('$testPackageLibPath/c.dart', cContent);
 
     var session = contextFor(testFilePath).currentSession;
     var parsedLibrary = session.getParsedLibraryValid(a.path);
@@ -398,7 +398,7 @@
   }
 
   test_getParsedLibraryByElement() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var libraryResult = await session.getLibraryByUriValid(
@@ -419,7 +419,7 @@
   }
 
   test_getParsedLibraryByElement_differentSession() async {
-    newFile(testFilePath, content: '');
+    newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var libraryResult = await session.getLibraryByUriValid(
@@ -434,7 +434,7 @@
   }
 
   test_getParsedUnit() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 class A {}
 class B {}
 ''');
@@ -448,7 +448,7 @@
   }
 
   test_getParsedUnit_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -469,7 +469,7 @@
 
 class A /*a*/ {}
 ''';
-    var a = newFile('$testPackageLibPath/a.dart', content: aContent);
+    var a = newFile2('$testPackageLibPath/a.dart', aContent);
 
     var bContent = r'''
 part of 'a.dart';
@@ -477,7 +477,7 @@
 class B /*b*/ {}
 class B2 extends X {}
 ''';
-    var b = newFile('$testPackageLibPath/b.dart', content: bContent);
+    var b = newFile2('$testPackageLibPath/b.dart', bContent);
 
     var session = contextFor(testFilePath).currentSession;
     var resolvedLibrary = await session.getResolvedLibraryValid(a.path);
@@ -526,7 +526,7 @@
   }
 
   test_getResolvedLibrary_getElementDeclaration_notThisLibrary() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var resolvedLibrary = await session.getResolvedLibraryValid(test.path);
@@ -538,7 +538,7 @@
   }
 
   test_getResolvedLibrary_getElementDeclaration_synthetic() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 int foo = 0;
 ''');
 
@@ -563,7 +563,7 @@
   }
 
   test_getResolvedLibrary_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -573,7 +573,7 @@
   }
 
   test_getResolvedLibrary_invalidPartUri() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 part 'a.dart';
 part ':[invalid uri].dart';
 part 'c.dart';
@@ -604,7 +604,7 @@
   }
 
   test_getResolvedLibrary_notLibrary() async {
-    var test = newFile(testFilePath, content: 'part of "a.dart";');
+    var test = newFile2(testFilePath, 'part of "a.dart";');
 
     var session = contextFor(testFilePath).currentSession;
     var result = await session.getResolvedLibrary(test.path);
@@ -612,7 +612,7 @@
   }
 
   test_getResolvedLibraryByElement() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var libraryResult = await session.getLibraryByUriValid(
@@ -629,7 +629,7 @@
   }
 
   test_getResolvedLibraryByElement_differentSession() async {
-    newFile(testFilePath, content: '');
+    newFile2(testFilePath, '');
 
     var session = contextFor(testFilePath).currentSession;
     var libraryResult = await session.getLibraryByUriValid(
@@ -644,7 +644,7 @@
   }
 
   test_getResolvedUnit() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 class A {}
 class B {}
 ''');
@@ -661,7 +661,7 @@
   }
 
   test_getResolvedUnit_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
@@ -671,7 +671,7 @@
   }
 
   test_getUnitElement() async {
-    var test = newFile(testFilePath, content: r'''
+    var test = newFile2(testFilePath, r'''
 class A {}
 class B {}
 ''');
@@ -685,7 +685,7 @@
   }
 
   test_getUnitElement_inconsistent() async {
-    var test = newFile(testFilePath, content: '');
+    var test = newFile2(testFilePath, '');
     var session = contextFor(test.path).currentSession;
     driverFor(test.path).changeFile(test.path);
     expect(
diff --git a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
index 7bd38c2..954761a 100644
--- a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
@@ -27,11 +27,11 @@
   void assertSignature(String oldCode, String newCode, {required bool same}) {
     var path = convertPath('/test.dart');
 
-    newFile(path, content: oldCode);
+    newFile2(path, oldCode);
     var oldUnit = parseUnit(path).unit;
     var oldSignature = computeUnlinkedApiSignature(oldUnit);
 
-    newFile(path, content: newCode);
+    newFile2(path, newCode);
     var newUnit = parseUnit(path).unit;
     var newSignature = computeUnlinkedApiSignature(newUnit);
 
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
index c388c0b..efd2a34 100644
--- a/pkg/analyzer/test/src/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -615,7 +615,7 @@
   }
 
   test_isConst_notInContext_constructor_const_generic_named_prefixed() async {
-    newFile('$testPackageLibPath/c.dart', content: '''
+    newFile2('$testPackageLibPath/c.dart', '''
 class C<E> {
   const C.n();
 }
@@ -638,7 +638,7 @@
   }
 
   test_isConst_notInContext_constructor_const_generic_unnamed_prefixed() async {
-    newFile('$testPackageLibPath/c.dart', content: '''
+    newFile2('$testPackageLibPath/c.dart', '''
 class C<E> {
   const C();
 }
@@ -689,7 +689,7 @@
   }
 
   test_isConst_notInContext_constructor_const_nonGeneric_named_prefixed() async {
-    newFile('$testPackageLibPath/c.dart', content: '''
+    newFile2('$testPackageLibPath/c.dart', '''
 class C {
   const C.n();
 }
@@ -712,7 +712,7 @@
   }
 
   test_isConst_notInContext_constructor_const_nonGeneric_unnamed_prefixed() async {
-    newFile('$testPackageLibPath/c.dart', content: '''
+    newFile2('$testPackageLibPath/c.dart', '''
 class C {
   const C();
 }
diff --git a/pkg/analyzer/test/src/dart/ast/constant_evaluator_test.dart b/pkg/analyzer/test/src/dart/ast/constant_evaluator_test.dart
index d491c73..5dd2c78 100644
--- a/pkg/analyzer/test/src/dart/ast/constant_evaluator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/constant_evaluator_test.dart
@@ -339,7 +339,7 @@
   Object? _getConstantValue(String expressionCode) {
     var path = convertPath('/test/lib/test.dart');
 
-    newFile(path, content: '''
+    newFile2(path, '''
 void f() {
   ($expressionCode); // ref
 }
diff --git a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
index 4bd8ed4..2c0abd8 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -204,7 +204,7 @@
   }
 
   test_locate_InstanceCreationExpression_type_prefixedIdentifier() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await resolveTestCode(r'''
@@ -220,7 +220,7 @@
   }
 
   test_locate_InstanceCreationExpression_type_simpleIdentifier() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 ''');
     await resolveTestCode(r'''
 class A {}
@@ -284,12 +284,12 @@
     var libPath = convertPath('$testPackageLibPath/lib.dart');
     var partPath = convertPath('$testPackageLibPath/test.dart');
 
-    newFile(libPath, content: r'''
+    newFile2(libPath, r'''
 library my.lib;
 part 'test.dart';
 ''');
 
-    newFile(partPath, content: r'''
+    newFile2(partPath, r'''
 part of my.lib;
 ''');
 
@@ -326,7 +326,7 @@
   }
 
   test_locate_StringLiteral_exportUri() async {
-    newFile("$testPackageLibPath/foo.dart", content: '');
+    newFile2("$testPackageLibPath/foo.dart", '');
     await resolveTestCode("export 'foo.dart';");
     var node = findNode.stringLiteral('foo.dart');
     var element = ElementLocator.locate(node);
@@ -341,7 +341,7 @@
   }
 
   test_locate_StringLiteral_importUri() async {
-    newFile("$testPackageLibPath/foo.dart", content: '');
+    newFile2("$testPackageLibPath/foo.dart", '');
     await resolveTestCode("import 'foo.dart';");
     var node = findNode.stringLiteral('foo.dart');
     var element = ElementLocator.locate(node);
@@ -349,7 +349,7 @@
   }
 
   test_locate_StringLiteral_partUri() async {
-    newFile("$testPackageLibPath/foo.dart", content: 'part of lib;');
+    newFile2("$testPackageLibPath/foo.dart", 'part of lib;');
     await resolveTestCode('''
 library lib;
 
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index 17ba251..2aac19c 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -93,20 +93,23 @@
   }
 
   void test_visitBinaryExpression() {
+    var findNode = _parseStringToFindNode(r'''
+var v = a + b;
+''');
     _assertSource(
-        "a + b",
-        AstTestFactory.binaryExpression(AstTestFactory.identifier3("a"),
-            TokenType.PLUS, AstTestFactory.identifier3("b")));
+      'a + b',
+      findNode.binary('a + b'),
+    );
   }
 
   void test_visitBinaryExpression_precedence() {
-    var a = AstTestFactory.identifier3('a');
-    var b = AstTestFactory.identifier3('b');
-    var c = AstTestFactory.identifier3('c');
+    var findNode = _parseStringToFindNode(r'''
+var v = a * (b + c);
+''');
     _assertSource(
-        'a * (b + c)',
-        AstTestFactory.binaryExpression(a, TokenType.STAR,
-            AstTestFactory.binaryExpression(b, TokenType.PLUS, c)));
+      'a * (b + c)',
+      findNode.binary('a *'),
+    );
   }
 
   void test_visitBlock_empty() {
@@ -225,11 +228,15 @@
     _assertSource("abstract macro class C {}", declaration);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48541')
   void test_visitClassDeclaration_augment() {
-    ClassDeclaration declaration = AstTestFactory.classDeclaration(
-        null, "C", null, null, null, null,
-        isAugmentation: true);
-    _assertSource("augment class C {}", declaration);
+    var findNode = _parseStringToFindNode(r'''
+augment class A {}
+''');
+    _assertSource(
+      'augment class A {}',
+      findNode.classDeclaration('class A'),
+    );
   }
 
   void test_visitClassDeclaration_empty() {
@@ -293,10 +300,13 @@
   }
 
   void test_visitClassDeclaration_macro() {
-    ClassDeclaration declaration = AstTestFactory.classDeclaration(
-        null, "C", null, null, null, null,
-        isMacro: true);
-    _assertSource("macro class C {}", declaration);
+    var findNode = _parseStringToFindNode(r'''
+macro class A {}
+''');
+    _assertSource(
+      'macro class A {}',
+      findNode.classDeclaration('class A'),
+    );
   }
 
   void test_visitClassDeclaration_multipleMember() {
@@ -446,17 +456,15 @@
             isMacro: true));
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48541')
   void test_visitClassTypeAlias_augment() {
+    var findNode = _parseStringToFindNode(r'''
+augment class A = S with M;
+''');
     _assertSource(
-        "augment class C = S with M1;",
-        AstTestFactory.classTypeAlias(
-            "C",
-            null,
-            null,
-            AstTestFactory.namedType4("S"),
-            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
-            null,
-            isAugmentation: true));
+      'augment class A = S with M;',
+      findNode.classTypeAlias('class A'),
+    );
   }
 
   void test_visitClassTypeAlias_generic() {
@@ -486,16 +494,13 @@
   }
 
   void test_visitClassTypeAlias_macro() {
+    var findNode = _parseStringToFindNode(r'''
+macro class A = S with M;
+''');
     _assertSource(
-        "macro class C = S with M1;",
-        AstTestFactory.classTypeAlias(
-            "C",
-            null,
-            null,
-            AstTestFactory.namedType4("S"),
-            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
-            null,
-            isMacro: true));
+      'macro class A = S with M;',
+      findNode.classTypeAlias('class A'),
+    );
   }
 
   void test_visitClassTypeAlias_minimal() {
@@ -2785,12 +2790,13 @@
   }
 
   void test_visitPrefixExpression_precedence() {
-    var a = AstTestFactory.identifier3('a');
-    var b = AstTestFactory.identifier3('b');
+    var findNode = _parseStringToFindNode(r'''
+var v = !(a == b);
+''');
     _assertSource(
-        '!(a == b)',
-        AstTestFactory.prefixExpression(TokenType.BANG,
-            AstTestFactory.binaryExpression(a, TokenType.EQ_EQ, b)));
+      '!(a == b)',
+      findNode.prefix('!'),
+    );
   }
 
   void test_visitPropertyAccess() {
diff --git a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
index e356a67..b86f22b 100644
--- a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
@@ -25,7 +25,7 @@
   }
 
   test_class_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await _assertConst(r'''
@@ -35,7 +35,7 @@
   }
 
   test_class_prefix_deferred() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await _assertNeverConst(r'''
@@ -805,7 +805,7 @@
   }
 
   test_prefixedIdentifier_importPrefix_deferred() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 0;
 ''');
     await _assertNotConst(r'''
@@ -815,7 +815,7 @@
   }
 
   test_prefixedIdentifier_importPrefix_function() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void f() {}
 ''');
     await _assertConst(r'''
@@ -825,7 +825,7 @@
   }
 
   test_prefixedIdentifier_importPrefix_topVar() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 0;
 ''');
     await _assertConst(r'''
@@ -920,7 +920,7 @@
   }
 
   test_prefixedIdentifier_typedef_interfaceType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef A = List<int>;
 ''');
     await _assertConst(r'''
@@ -978,7 +978,7 @@
   }
 
   test_propertyAccess_staticField_withPrefix_const() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const a = 0;
 }
@@ -990,7 +990,7 @@
   }
 
   test_propertyAccess_staticField_withPrefix_deferred() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const a = 0;
 }
@@ -1002,7 +1002,7 @@
   }
 
   test_propertyAccess_staticField_withPrefix_final() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static final a = 0;
 }
@@ -1024,7 +1024,7 @@
   }
 
   test_propertyAccess_target_variable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final a = 0;
   const A();
diff --git a/pkg/analyzer/test/src/dart/constant/utilities_test.dart b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
index 99bd23a..913f242 100644
--- a/pkg/analyzer/test/src/dart/constant/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
@@ -41,7 +41,7 @@
   /// represents a reference to a compile-time constant variable).
   void test_visitAnnotation_constantVariable() {
     var compilationUnitElement =
-        ElementFactory.compilationUnit('/test.dart', _source)..source = _source;
+        ElementFactory.compilationUnit(source: _source);
     ElementFactory.library(_AnalysisContextMock(), 'L')
         .definingCompilationUnit = compilationUnitElement;
     ElementAnnotationImpl elementAnnotation =
@@ -56,7 +56,7 @@
   /// constructor.
   void test_visitAnnotation_invocation() {
     var compilationUnitElement =
-        ElementFactory.compilationUnit('/test.dart', _source)..source = _source;
+        ElementFactory.compilationUnit(source: _source);
     ElementFactory.library(_AnalysisContextMock(), 'L')
         .definingCompilationUnit = compilationUnitElement;
     ElementAnnotationImpl elementAnnotation =
diff --git a/pkg/analyzer/test/src/dart/element/class_element_test.dart b/pkg/analyzer/test/src/dart/element/class_element_test.dart
index 9505982..6562a8c 100644
--- a/pkg/analyzer/test/src/dart/element/class_element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/class_element_test.dart
@@ -174,7 +174,7 @@
   }
 
   test_lookUpInheritedConcreteGetter_declared_hasExtends_private_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -478,7 +478,7 @@
   }
 
   test_lookUpInheritedConcreteMethod_declared_hasExtends_private_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -782,7 +782,7 @@
   }
 
   test_lookUpInheritedConcreteSetter_declared_hasExtends_private_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   set _foo(int _) {}
 }
@@ -1086,7 +1086,7 @@
   }
 
   test_lookUpInheritedMethod_declared_hasExtends_private_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index e39414a..715ee3a 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -17,6 +17,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../generated/test_analysis_context.dart';
+import '../../../generated/test_support.dart';
 import '../../../generated/type_system_test.dart';
 import '../resolution/context_collection_resolution.dart';
 
@@ -467,7 +468,7 @@
 class CompilationUnitElementImplTest {
   void test_getType_declared() {
     CompilationUnitElementImpl unit =
-        ElementFactory.compilationUnit("/lib.dart");
+        ElementFactory.compilationUnit(source: TestSource("/lib.dart"));
     String className = "C";
     ClassElement classElement = ElementFactory.classElement2(className);
     unit.classes = <ClassElement>[classElement];
@@ -476,7 +477,7 @@
 
   void test_getType_undeclared() {
     CompilationUnitElementImpl unit =
-        ElementFactory.compilationUnit("/lib.dart");
+        ElementFactory.compilationUnit(source: TestSource("/lib.dart"));
     String className = "C";
     ClassElement classElement = ElementFactory.classElement2(className);
     unit.classes = <ClassElement>[classElement];
@@ -487,7 +488,7 @@
 @reflectiveTest
 class ElementAnnotationImplTest extends PubPackageResolutionTest {
   test_computeConstantValue() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final String f;
   const A(this.f);
@@ -1327,10 +1328,14 @@
     AnalysisContext context = TestAnalysisContext();
     LibraryElementImpl library = ElementFactory.library(context, "test");
     CompilationUnitElement unitLib = library.definingCompilationUnit;
-    CompilationUnitElementImpl unitA =
-        ElementFactory.compilationUnit("unit_a.dart", unitLib.source);
-    CompilationUnitElementImpl unitB =
-        ElementFactory.compilationUnit("unit_b.dart", unitLib.source);
+    CompilationUnitElementImpl unitA = ElementFactory.compilationUnit(
+      source: TestSource("unit_a.dart"),
+      librarySource: unitLib.source,
+    );
+    CompilationUnitElementImpl unitB = ElementFactory.compilationUnit(
+      source: TestSource("unit_b.dart"),
+      librarySource: unitLib.source,
+    );
     library.parts = <CompilationUnitElement>[unitA, unitB];
     expect(library.units,
         unorderedEquals(<CompilationUnitElement>[unitLib, unitA, unitB]));
@@ -1361,7 +1366,7 @@
 @reflectiveTest
 class TopLevelVariableElementImplTest extends PubPackageResolutionTest {
   test_computeConstantValue() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const int C = 42;
 ''');
     await resolveTestCode(r'''
diff --git a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
index 82433a76..221b9e0 100644
--- a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
+++ b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
@@ -646,16 +646,17 @@
       isNonNullableByDefault: false,
     );
 
-    var typeArguments = typeSystem.inferGenericFunctionOrType(
+    var inferrer = typeSystem.setupGenericTypeInference(
       typeParameters: ft.typeFormals,
-      parameters: ft.parameters,
       declaredReturnType: ft.returnType,
-      argumentTypes: arguments,
       contextReturnType: returnType,
       errorReporter: reporter,
       errorNode: astFactory.nullLiteral(KeywordToken(Keyword.NULL, 0)),
       genericMetadataIsEnabled: true,
     );
+    inferrer.constrainArguments(
+        parameters: ft.parameters, argumentTypes: arguments);
+    var typeArguments = inferrer.upwardsInfer();
 
     if (expectError) {
       expect(listener.errors.map((e) => e.errorCode).toList(),
@@ -664,7 +665,7 @@
     } else {
       expect(listener.errors, isEmpty, reason: 'did not expect any errors.');
     }
-    return typeArguments!;
+    return typeArguments;
   }
 
   FunctionType _inferCall2(FunctionType ft, List<DartType> arguments,
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index 704c6ed..5410feb 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -19,7 +19,7 @@
 @reflectiveTest
 class InheritanceManager3Test extends _InheritanceManager3Base {
   test_getInheritedMap_topMerge_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.6
 class A {
   void foo({int a}) {}
@@ -69,7 +69,7 @@
   }
 
   test_getMember_optIn_inheritsOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -93,7 +93,7 @@
   }
 
   test_getMember_optIn_inheritsOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.6
 class A {
   int foo(int a, int b) => 0;
@@ -218,7 +218,7 @@
   }
 
   test_getMember_optOut_inheritsOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -244,7 +244,7 @@
   }
 
   test_getMember_optOut_mixesOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -269,12 +269,12 @@
   }
 
   test_getMember_optOut_passOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
 ''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.6
 import 'a.dart';
 class B extends A {
@@ -1516,7 +1516,7 @@
     }
 
     lines.sort();
-    var actual = lines.isNotEmpty ? lines.join('\n') + '\n' : '';
+    var actual = lines.isNotEmpty ? '${lines.join('\n')}\n' : '';
 
     if (actual != expected) {
       print(actual);
diff --git a/pkg/analyzer/test/src/dart/element/normalize_type_test.dart b/pkg/analyzer/test/src/dart/element/normalize_type_test.dart
index bb73cc4c..2463868 100644
--- a/pkg/analyzer/test/src/dart/element/normalize_type_test.dart
+++ b/pkg/analyzer/test/src/dart/element/normalize_type_test.dart
@@ -436,7 +436,7 @@
 
   void _assertNullability(DartType type, NullabilitySuffix expected) {
     if (type.nullabilitySuffix != expected) {
-      fail('Expected $expected in ' + _typeString(type));
+      fail('Expected $expected in ${_typeString(type)}');
     }
   }
 
@@ -548,7 +548,7 @@
 
       if (bound != null) {
         var boundStr = bound.getDisplayString(withNullability: true);
-        str += '${type.element.name} extends ' + boundStr;
+        str += '${type.element.name} extends $boundStr';
       }
 
       if (promotedBound != null) {
@@ -558,7 +558,7 @@
         if (str.isNotEmpty) {
           str += ', ';
         }
-        str += '${type.element.name} & ' + promotedBoundStr;
+        str += '${type.element.name} & $promotedBoundStr';
       }
 
       typeParameters.add(str);
diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart
index 884d010..e989b4d 100644
--- a/pkg/analyzer/test/src/dart/element/subtype_test.dart
+++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart
@@ -6061,7 +6061,7 @@
       var str = '';
 
       var boundStr = bound.getDisplayString(withNullability: true);
-      str += '${type.element.name} extends ' + boundStr;
+      str += '${type.element.name} extends $boundStr';
 
       typeParameters.add(str);
     }
diff --git a/pkg/analyzer/test/src/dart/element/type_constraint_gatherer_test.dart b/pkg/analyzer/test/src/dart/element/type_constraint_gatherer_test.dart
index 8695591..e78f19a 100644
--- a/pkg/analyzer/test/src/dart/element/type_constraint_gatherer_test.dart
+++ b/pkg/analyzer/test/src/dart/element/type_constraint_gatherer_test.dart
@@ -1137,5 +1137,6 @@
 
     var isMatch = gatherer.trySubtypeMatch(P, Q, leftSchema);
     expect(isMatch, isFalse);
+    expect(gatherer.isConstraintSetEmpty, isTrue);
   }
 }
diff --git a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
index 5f956f5..125e786 100644
--- a/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
+++ b/pkg/analyzer/test/src/dart/element/upper_lower_bound_test.dart
@@ -39,7 +39,7 @@
     _assertIsBottomOrNull(T);
     _assertIsBottomOrNull(S);
 
-    var str = _typeString(T) + ' vs ' + _typeString(S);
+    var str = '${_typeString(T)} vs ${_typeString(S)}';
     _checkUniqueTypeStr(_isMoreBottomChecked, str);
 
     expect(typeSystem.isMoreBottom(T, S), isTrue, reason: str);
@@ -49,7 +49,7 @@
     _assertIsTopOrObject(T);
     _assertIsTopOrObject(S);
 
-    var str = _typeString(T) + ' vs ' + _typeString(S);
+    var str = '${_typeString(T)} vs ${_typeString(S)}';
     _checkUniqueTypeStr(_isMoreTopChecked, str);
 
     expect(typeSystem.isMoreTop(T, S), isTrue, reason: str);
@@ -63,7 +63,7 @@
     _assertIsBottomOrNull(T);
     _assertIsBottomOrNull(S);
 
-    var str = _typeString(T) + ' vs ' + _typeString(S);
+    var str = '${_typeString(T)} vs ${_typeString(S)}';
     _checkUniqueTypeStr(_isMoreBottomChecked, str);
 
     expect(typeSystem.isMoreBottom(T, S), isFalse, reason: str);
@@ -73,7 +73,7 @@
     _assertIsTopOrObject(T);
     _assertIsTopOrObject(S);
 
-    var str = _typeString(T) + ' vs ' + _typeString(S);
+    var str = '${_typeString(T)} vs ${_typeString(S)}';
     _checkUniqueTypeStr(_isMoreTopChecked, str);
 
     expect(typeSystem.isMoreTop(T, S), isFalse, reason: str);
@@ -3342,25 +3342,25 @@
 class _BoundsTestBase extends AbstractTypeSystemTest {
   void _assertBottom(DartType type) {
     if (!typeSystem.isBottom(type)) {
-      fail('isBottom must be true: ' + _typeString(type));
+      fail('isBottom must be true: ${_typeString(type)}');
     }
   }
 
   void _assertNotBottom(DartType type) {
     if (typeSystem.isBottom(type)) {
-      fail('isBottom must be false: ' + _typeString(type));
+      fail('isBottom must be false: ${_typeString(type)}');
     }
   }
 
   void _assertNotNull(DartType type) {
     if (typeSystem.isNull(type)) {
-      fail('isNull must be false: ' + _typeString(type));
+      fail('isNull must be false: ${_typeString(type)}');
     }
   }
 
   void _assertNotObject(DartType type) {
     if (typeSystem.isObject(type)) {
-      fail('isObject must be false: ' + _typeString(type));
+      fail('isObject must be false: ${_typeString(type)}');
     }
   }
 
@@ -3373,19 +3373,19 @@
 
   void _assertNotTop(DartType type) {
     if (typeSystem.isTop(type)) {
-      fail('isTop must be false: ' + _typeString(type));
+      fail('isTop must be false: ${_typeString(type)}');
     }
   }
 
   void _assertNull(DartType type) {
     if (!typeSystem.isNull(type)) {
-      fail('isNull must be true: ' + _typeString(type));
+      fail('isNull must be true: ${_typeString(type)}');
     }
   }
 
   void _assertNullability(DartType type, NullabilitySuffix expected) {
     if (type.nullabilitySuffix != expected) {
-      fail('Expected $expected in ' + _typeString(type));
+      fail('Expected $expected in ${_typeString(type)}');
     }
   }
 
@@ -3403,13 +3403,13 @@
 
   void _assertObject(DartType type) {
     if (!typeSystem.isObject(type)) {
-      fail('isObject must be true: ' + _typeString(type));
+      fail('isObject must be true: ${_typeString(type)}');
     }
   }
 
   void _assertTop(DartType type) {
     if (!typeSystem.isTop(type)) {
-      fail('isTop must be true: ' + _typeString(type));
+      fail('isTop must be true: ${_typeString(type)}');
     }
   }
 
@@ -3504,7 +3504,7 @@
 
       if (bound != null) {
         var boundStr = bound.getDisplayString(withNullability: true);
-        str += '${type.element.name} extends ' + boundStr;
+        str += '${type.element.name} extends $boundStr';
       }
 
       if (promotedBound != null) {
@@ -3514,7 +3514,7 @@
         if (str.isNotEmpty) {
           str += ', ';
         }
-        str += '${type.element.name} & ' + promotedBoundStr;
+        str += '${type.element.name} & $promotedBoundStr';
       }
 
       typeParameters.add(str);
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index 52969ec..57c9d56 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -37,7 +37,7 @@
 
   @override
   void addTestFile(String content) {
-    newFile(_testFile, content: content);
+    newFile2(_testFile, content);
   }
 
   /// Create a new [FileResolver] into [fileResolver].
@@ -66,9 +66,9 @@
     fileResolver.testView = FileResolverTestView();
   }
 
-  ErrorsResult getTestErrors() {
+  Future<ErrorsResult> getTestErrors() async {
     var path = convertPath(_testFile);
-    return fileResolver.getErrors(path: path);
+    return fileResolver.getErrors2(path: path);
   }
 
   @override
@@ -76,7 +76,7 @@
     String path, {
     OperationPerformanceImpl? performance,
   }) async {
-    result = fileResolver.resolve(
+    result = await fileResolver.resolve2(
       path: path,
       performance: performance,
     );
@@ -100,8 +100,12 @@
       root: sdkRoot,
     );
 
-    newFile('/workspace/WORKSPACE', content: '');
-    newFile('/workspace/dart/test/BUILD', content: '');
+    newFile2('/workspace/WORKSPACE', '');
+    newFile2('/workspace/dart/test/BUILD', r'''
+dart_package(
+  null_safety = True,
+)
+''');
     createFileResolver();
   }
 
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index de30fd9..7319323 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -38,15 +38,15 @@
   }
 
   test_changeFile_refreshedFiles() async {
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 class B {}
 ''');
 
-    newFile(cPath, content: r'''
+    newFile2(cPath, r'''
 import 'a.dart';
 import 'b.dart';
 ''');
@@ -70,22 +70,21 @@
   }
 
   test_changeFile_resolution() async {
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
-A a;
-B b;
+void f(A a, B b) {}
 ''');
 
     result = await resolveFile(bPath);
     assertErrorsInResolvedUnit(result, [
-      error(CompileTimeErrorCode.UNDEFINED_CLASS, 22, 1),
+      error(CompileTimeErrorCode.UNDEFINED_CLASS, 29, 1),
     ]);
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 class B {}
 ''');
@@ -96,13 +95,13 @@
   }
 
   test_changeFile_resolution_flushInheritanceManager() async {
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   final int foo = 0;
 }
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 void f(A a) {
@@ -115,7 +114,7 @@
       error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 36, 3),
     ]);
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   int foo = 0;
 }
@@ -127,7 +126,7 @@
   }
 
   test_changeFile_resolution_missingChangeFileForPart() async {
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 part 'b.dart';
 
 var b = B(0);
@@ -141,7 +140,7 @@
 
     // Update a.dart, and notify the resolver. We need this to have at least
     // one change, so that we decided to rebuild the library summary.
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 part 'b.dart';
 
 var b = B(1);
@@ -150,7 +149,7 @@
 
     // Update b.dart, but do not notify the resolver.
     // If we try to read it now, it will throw.
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 part of 'a.dart';
 
 class B {
@@ -169,19 +168,19 @@
   }
 
   test_changePartFile_refreshedFiles() async {
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 part 'b.dart';
 
 class A {}
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 part of 'a.dart';
 
 class B extends A {}
 ''');
 
-    newFile(cPath, content: r'''
+    newFile2(cPath, r'''
 import 'a.dart';
 ''');
 
@@ -222,10 +221,10 @@
 @reflectiveTest
 class FileResolverTest extends FileResolutionTest {
   @override
-  bool isNullSafetyEnabled = false;
+  bool get isNullSafetyEnabled => true;
 
   test_analysisOptions_default_fromPackageUri() async {
-    newFile('/workspace/dart/analysis_options/lib/default.yaml', content: r'''
+    newFile2('/workspace/dart/analysis_options/lib/default.yaml', r'''
 analyzer:
   strong-mode:
     implicit-casts: false
@@ -240,7 +239,7 @@
   }
 
   test_analysisOptions_file_inPackage() async {
-    newAnalysisOptionsYamlFile('/workspace/dart/test', content: r'''
+    newAnalysisOptionsYamlFile2('/workspace/dart/test', r'''
 analyzer:
   strong-mode:
     implicit-casts: false
@@ -255,14 +254,13 @@
   }
 
   test_analysisOptions_file_inThirdParty() async {
-    newFile('/workspace/dart/analysis_options/lib/third_party.yaml',
-        content: r'''
+    newFile2('/workspace/dart/analysis_options/lib/third_party.yaml', r'''
 analyzer:
   strong-mode:
     implicit-casts: false
 ''');
 
-    newAnalysisOptionsYamlFile('/workspace/third_party/dart/aaa', content: r'''
+    newAnalysisOptionsYamlFile2('/workspace/third_party/dart/aaa', r'''
 analyzer:
   strong-mode:
     implicit-casts: true
@@ -278,15 +276,13 @@
   }
 
   test_analysisOptions_file_inThirdPartyDartLang() async {
-    newFile('/workspace/dart/analysis_options/lib/third_party.yaml',
-        content: r'''
+    newFile2('/workspace/dart/analysis_options/lib/third_party.yaml', r'''
 analyzer:
   strong-mode:
     implicit-casts: false
 ''');
 
-    newAnalysisOptionsYamlFile('/workspace/third_party/dart_lang/aaa',
-        content: r'''
+    newAnalysisOptionsYamlFile2('/workspace/third_party/dart_lang/aaa', r'''
 analyzer:
   strong-mode:
     implicit-casts: true
@@ -302,7 +298,7 @@
   }
 
   test_analysisOptions_lints() async {
-    newFile('/workspace/dart/analysis_options/lib/default.yaml', content: r'''
+    newFile2('/workspace/dart/analysis_options/lib/default.yaml', r'''
 linter:
   rules:
     - omit_local_variable_types
@@ -320,13 +316,6 @@
     ]);
   }
 
-  test_analysisOptions_no() async {
-    await assertNoErrorsInCode(r'''
-num a = 0;
-int b = a;
-''');
-  }
-
   test_basic() async {
     await assertNoErrorsInCode(r'''
 int a = 0;
@@ -341,7 +330,7 @@
   test_collectSharedDataIdentifiers() async {
     var aPath = convertPath('/workspace/third_party/dart/aaa/lib/a.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
@@ -353,7 +342,7 @@
 
   test_elements_export_dartCoreDynamic() async {
     var a_path = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 export 'dart:core' show dynamic;
 ''');
 
@@ -374,16 +363,27 @@
 ''');
   }
 
+  test_errors_hasNullSuffix() {
+    assertErrorsInCode(r'''
+String f(Map<int, String> a) {
+  return a[0];
+}
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 40, 4,
+          messageContains: ["'String'", 'String?']),
+    ]);
+  }
+
   test_findReferences_class() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   int foo;
 }
 ''');
 
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 void func() {
@@ -393,7 +393,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(6, aPath));
+    var element = await _findElement(6, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 11)]),
       CiderSearchMatch(aPath, [CharacterLocation(1, 7)])
@@ -403,7 +404,7 @@
 
   test_findReferences_field() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   int foo = 0;
 
@@ -414,7 +415,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(16, aPath));
+    var element = await _findElement(16, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(2, 7), CharacterLocation(5, 5)])
@@ -424,7 +426,7 @@
 
   test_findReferences_function() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 main() {
   foo('Hello');
 }
@@ -433,7 +435,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(11, aPath));
+    var element = await _findElement(11, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(2, 3), CharacterLocation(5, 1)])
@@ -443,13 +446,13 @@
 
   test_findReferences_getter() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   int get foo => 6;
 }
 ''');
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 main() {
@@ -459,7 +462,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(20, aPath));
+    var element = await _findElement(20, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 15)]),
       CiderSearchMatch(aPath, [CharacterLocation(2, 11)])
@@ -469,7 +473,7 @@
 
   test_findReferences_local_variable() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   void func(int n) {
     var foo = bar+1;
@@ -478,7 +482,8 @@
 }
 ''');
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(39, aPath));
+    var element = await _findElement(39, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(3, 9), CharacterLocation(4, 11)])
@@ -488,7 +493,7 @@
 
   test_findReferences_method() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   void func() {
    print('hello');
@@ -501,7 +506,7 @@
 ''');
 
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 main() {
@@ -511,7 +516,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(17, aPath));
+    var element = await _findElement(17, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
       CiderSearchMatch(
@@ -522,13 +528,13 @@
 
   test_findReferences_setter() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   void set value(int m){ };
 }
 ''');
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 main() {
@@ -538,7 +544,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(21, aPath));
+    var element = await _findElement(21, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
       CiderSearchMatch(aPath, [CharacterLocation(2, 12)])
@@ -549,14 +556,14 @@
   test_findReferences_top_level_getter() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 int _foo;
 
 int get foo => _foo;
 ''');
 
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 main() {
@@ -565,7 +572,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(19, aPath));
+    var element = await _findElement(19, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 13)]),
       CiderSearchMatch(aPath, [CharacterLocation(3, 9)])
@@ -576,14 +584,14 @@
   test_findReferences_top_level_setter() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 int _foo;
 
 void set foo(int bar) { _foo = bar; }
 ''');
 
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 main() {
@@ -592,7 +600,8 @@
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(20, aPath));
+    var element = await _findElement(20, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(4, 3)]),
       CiderSearchMatch(aPath, [CharacterLocation(3, 10)])
@@ -603,7 +612,7 @@
   test_findReferences_top_level_variable() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 const int C = 42;
 
 void func() {
@@ -612,7 +621,8 @@
 ''');
 
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(10, aPath));
+    var element = await _findElement(10, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(
           aPath, [CharacterLocation(1, 11), CharacterLocation(4, 11)])
@@ -622,7 +632,7 @@
 
   test_findReferences_type_parameter() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class Foo<T> {
   List<T> l;
 
@@ -630,7 +640,8 @@
 }
 ''');
     await resolveFile(aPath);
-    var result = fileResolver.findReferences(_findElement(10, aPath));
+    var element = await _findElement(10, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(aPath, [
         CharacterLocation(1, 11),
@@ -646,19 +657,20 @@
 
   test_findReferences_typedef() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 typedef func = int Function(int);
 
 ''');
     var bPath = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 
 void f(func o) {}
 ''');
 
     await resolveFile(bPath);
-    var result = fileResolver.findReferences(_findElement(8, aPath));
+    var element = await _findElement(8, aPath);
+    var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(bPath, [CharacterLocation(3, 8)]),
       CiderSearchMatch(aPath, [CharacterLocation(1, 9)])
@@ -666,13 +678,13 @@
     expect(result, unorderedEquals(expected));
   }
 
-  test_getErrors() {
+  test_getErrors() async {
     addTestFile(r'''
 var a = b;
 var foo = 0;
 ''');
 
-    var result = getTestErrors();
+    var result = await getTestErrors();
     expect(result.path, convertPath('/workspace/dart/test/lib/test.dart'));
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.errors, [
@@ -681,7 +693,7 @@
     expect(result.lineInfo.lineStarts, [0, 11, 24]);
   }
 
-  test_getErrors_reuse() {
+  test_getErrors_reuse() async {
     addTestFile('var a = b;');
 
     var path = convertPath('/workspace/dart/test/lib/test.dart');
@@ -690,35 +702,35 @@
     expect(fileResolver.testView!.resolvedLibraries, isEmpty);
 
     // No cached, will resolve once.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Has cached, will be not resolved again.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
 
     // Change the file, new resolver.
     // With changed file the previously cached result cannot be used.
     addTestFile('var a = c;');
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
   }
 
-  test_getErrors_reuse_changeDependency() {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+  test_getErrors_reuse_changeDependency() async {
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 0;
 ''');
 
@@ -733,27 +745,27 @@
     expect(fileResolver.testView!.resolvedLibraries, isEmpty);
 
     // No cached, will resolve once.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Has cached, will be not resolved again.
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // Change the dependency, new resolver.
     // The signature of the result is different.
     // The previously cached result cannot be used.
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 4.2;
 ''');
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, [path]);
 
     // New resolver.
     // Still has cached, will be not resolved.
     createFileResolver();
-    expect(getTestErrors().errors, hasLength(1));
+    expect((await getTestErrors()).errors, hasLength(1));
     expect(fileResolver.testView!.resolvedLibraries, <Object>[]);
   }
 
@@ -782,39 +794,41 @@
     assertHasOneVariable();
   }
 
-  test_getLibraryByUri() {
-    newFile('/workspace/dart/my/lib/a.dart', content: r'''
+  test_getLibraryByUri() async {
+    newFile2('/workspace/dart/my/lib/a.dart', r'''
 class A {}
 ''');
 
-    var element = fileResolver.getLibraryByUri(
+    var element = await fileResolver.getLibraryByUri2(
       uriStr: 'package:dart.my/a.dart',
     );
     expect(element.definingCompilationUnit.classes, hasLength(1));
   }
 
-  test_getLibraryByUri_notExistingFile() {
-    var element = fileResolver.getLibraryByUri(
+  test_getLibraryByUri_notExistingFile() async {
+    var element = await fileResolver.getLibraryByUri2(
       uriStr: 'package:dart.my/a.dart',
     );
     expect(element.definingCompilationUnit.classes, isEmpty);
   }
 
-  test_getLibraryByUri_partOf() {
-    newFile('/workspace/dart/my/lib/a.dart', content: r'''
+  test_getLibraryByUri_partOf() async {
+    newFile2('/workspace/dart/my/lib/a.dart', r'''
 part of 'b.dart';
 ''');
 
-    expect(() {
-      fileResolver.getLibraryByUri(
+    expect(() async {
+      await fileResolver.getLibraryByUri2(
         uriStr: 'package:dart.my/a.dart',
       );
     }, throwsArgumentError);
   }
 
-  test_getLibraryByUri_unresolvedUri() {
-    expect(() {
-      fileResolver.getLibraryByUri(uriStr: 'my:unresolved');
+  test_getLibraryByUri_unresolvedUri() async {
+    expect(() async {
+      await fileResolver.getLibraryByUri2(
+        uriStr: 'my:unresolved',
+      );
     }, throwsArgumentError);
   }
 
@@ -828,23 +842,23 @@
 
   test_hint_in_third_party() async {
     var aPath = convertPath('/workspace/third_party/dart/aaa/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 import 'dart:math';
 ''');
     await resolveFile(aPath);
     assertNoErrorsInResult();
   }
 
-  test_linkLibraries_getErrors() {
+  test_linkLibraries_getErrors() async {
     addTestFile(r'''
 var a = b;
 var foo = 0;
 ''');
 
     var path = convertPath('/workspace/dart/test/lib/test.dart');
-    fileResolver.linkLibraries(path: path);
+    await fileResolver.linkLibraries2(path: path);
 
-    var result = getTestErrors();
+    var result = await getTestErrors();
     expect(result.path, path);
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.errors, [
@@ -854,7 +868,7 @@
   }
 
   test_nameOffset_class_method_fromBytes() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 class A {
   void foo() {}
 }
@@ -885,7 +899,7 @@
   }
 
   test_nameOffset_unit_variable_fromBytes() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 var a = 0;
 ''');
 
@@ -911,14 +925,6 @@
   }
 
   test_nullSafety_enabled() async {
-    isNullSafetyEnabled = true;
-
-    newFile('/workspace/dart/test/BUILD', content: r'''
-dart_package(
-  null_safety = True,
-)
-''');
-
     await assertNoErrorsInCode(r'''
 void f(int? a) {
   if (a != null) {
@@ -934,7 +940,7 @@
   }
 
   test_nullSafety_notEnabled() async {
-    isNullSafetyEnabled = true;
+    newFile2('/workspace/dart/test/BUILD', '');
 
     await assertErrorsInCode(r'''
 void f(int? a) {}
@@ -960,15 +966,15 @@
     var bPath = convertPath('/workspace/dart/aaa/lib/b.dart');
     var cPath = convertPath('/workspace/dart/aaa/lib/c.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 import 'a.dart';
 ''');
 
-    newFile(cPath, content: r'''
+    newFile2(cPath, r'''
 import 'a.dart';
 ''');
 
@@ -984,28 +990,28 @@
     var ePath = convertPath('/workspace/dart/aaa/lib/e.dart');
     var fPath = convertPath('/workspace/dart/aaa/lib/f.dart');
 
-    newFile('/workspace/dart/aaa/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/aaa/lib/a.dart', r'''
 class A {}
 ''');
 
-    newFile(bPath, content: r'''
+    newFile2(bPath, r'''
 class B {}
 ''');
 
-    newFile('/workspace/dart/aaa/lib/c.dart', content: r'''
+    newFile2('/workspace/dart/aaa/lib/c.dart', r'''
 class C {}
 ''');
 
-    newFile(dPath, content: r'''
+    newFile2(dPath, r'''
 import 'a.dart';
 ''');
 
-    newFile(ePath, content: r'''
+    newFile2(ePath, r'''
 import 'a.dart';
 import 'b.dart';
 ''');
 
-    newFile(fPath, content: r'''
+    newFile2(fPath, r'''
 import 'c.dart';
  ''');
 
@@ -1020,7 +1026,7 @@
     var aPath = convertPath('/workspace/dart/aaa/lib/a.dart');
     var bPath = convertPath('/workspace/dart/aaa/lib/b.dart');
 
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {}
 ''');
 
@@ -1032,7 +1038,7 @@
 
   test_resolve_libraryWithPart_noLibraryDiscovery() async {
     var partPath = '/workspace/dart/test/lib/a.dart';
-    newFile(partPath, content: r'''
+    newFile2(partPath, r'''
 part of 'test.dart';
 
 class A {}
@@ -1050,7 +1056,7 @@
   }
 
   test_resolve_part_of_name() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 library my.lib;
 
 part 'test.dart';
@@ -1073,7 +1079,7 @@
   }
 
   test_resolve_part_of_uri() async {
-    newFile('/workspace/dart/test/lib/a.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/a.dart', r'''
 part 'test.dart';
 
 class A {
@@ -1095,7 +1101,7 @@
 
   test_resolveFile_cache() async {
     var path = convertPath('/workspace/dart/test/lib/test.dart');
-    newFile(path, content: 'var a = 0;');
+    newFile2(path, 'var a = 0;');
 
     // No resolved files yet.
     var testView = fileResolver.testView!;
@@ -1131,12 +1137,12 @@
 
   test_resolveFile_dontCache_whenForCompletion() async {
     var a_path = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(a_path, content: r'''
+    newFile2(a_path, r'''
 part 'b.dart';
 ''');
 
     var b_path = convertPath('/workspace/dart/test/lib/b.dart');
-    newFile(b_path, content: r'''
+    newFile2(b_path, r'''
 part of 'a.dart';
 ''');
 
@@ -1144,7 +1150,7 @@
     var testView = fileResolver.testView!;
     expect(testView.resolvedLibraries, isEmpty);
 
-    fileResolver.resolve(
+    await fileResolver.resolve2(
       path: b_path,
       completionLine: 0,
       completionColumn: 0,
@@ -1160,7 +1166,7 @@
 
   test_resolveLibrary() async {
     var aPath = convertPath('/workspace/dart/test/lib/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 part 'test.dart';
 
 class A {
@@ -1168,7 +1174,7 @@
 }
 ''');
 
-    newFile('/workspace/dart/test/lib/test.dart', content: r'''
+    newFile2('/workspace/dart/test/lib/test.dart', r'''
 part of 'a.dart';
 
 void func() {
@@ -1177,15 +1183,15 @@
 }
 ''');
 
-    var result = fileResolver.resolveLibrary(path: aPath);
+    var result = await fileResolver.resolveLibrary2(path: aPath);
     expect(result.units.length, 2);
     expect(result.units[0].path, aPath);
     expect(result.units[0].uri, Uri.parse('package:dart.test/a.dart'));
   }
 
   test_reuse_compatibleOptions() async {
-    newFile('/workspace/dart/aaa/BUILD', content: '');
-    newFile('/workspace/dart/bbb/BUILD', content: '');
+    newFile2('/workspace/dart/aaa/BUILD', '');
+    newFile2('/workspace/dart/bbb/BUILD', '');
 
     var aPath = '/workspace/dart/aaa/lib/a.dart';
     var aResult = await assertErrorsInFile(aPath, r'''
@@ -1208,15 +1214,15 @@
   }
 
   test_reuse_incompatibleOptions_implicitCasts() async {
-    newFile('/workspace/dart/aaa/BUILD', content: '');
-    newAnalysisOptionsYamlFile('/workspace/dart/aaa', content: r'''
+    newFile2('/workspace/dart/aaa/BUILD', '');
+    newAnalysisOptionsYamlFile2('/workspace/dart/aaa', r'''
 analyzer:
   strong-mode:
     implicit-casts: false
 ''');
 
-    newFile('/workspace/dart/bbb/BUILD', content: '');
-    newAnalysisOptionsYamlFile('/workspace/dart/bbb', content: r'''
+    newFile2('/workspace/dart/bbb/BUILD', '');
+    newAnalysisOptionsYamlFile2('/workspace/dart/bbb', r'''
 analyzer:
   strong-mode:
     implicit-casts: true
@@ -1278,8 +1284,8 @@
     expect(fileResolver.fsState!.testView.removedPaths, matcher);
   }
 
-  Element _findElement(int offset, String filePath) {
-    var resolvedUnit = fileResolver.resolve(path: filePath);
+  Future<Element> _findElement(int offset, String filePath) async {
+    var resolvedUnit = await fileResolver.resolve2(path: filePath);
     var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
     var element = getElementOfNode(node);
     return element!;
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 3ee6a27..b230bf5 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -636,8 +636,8 @@
   }
 
   test_notLValue_typeLiteral_class_ambiguous_simple() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class C {}');
-    newFile('$testPackageLibPath/b.dart', content: 'class C {}');
+    newFile2('$testPackageLibPath/a.dart', 'class C {}');
+    newFile2('$testPackageLibPath/b.dart', 'class C {}');
     await assertErrorsInCode('''
 import 'a.dart';
 import 'b.dart';
@@ -902,7 +902,7 @@
   }
 
   test_prefixedIdentifier_topLevel_compound() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int get x => 0;
 set x(num _) {}
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index 77954c0..2050ac9 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -366,15 +365,44 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('A<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int, String>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('A<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+          NamedType
+            name: SimpleIdentifier
+              token: String
+              staticElement: dart:core::@class::String
+              staticType: null
+            type: String
+        rightBracket: >
+      type: A<int, String>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int, U: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int, String>
+''');
   }
 
   test_targetNull_extension() async {
@@ -408,10 +436,42 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('A<int, String>(0);');
-    assertElement(invocation, findElement.topFunction('A'));
-    assertInvokeType(invocation, 'void Function(int)');
-    _assertArgumentList(invocation.argumentList, ['0']);
+    var node = findNode.methodInvocation('A<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: A
+    staticElement: self::@function::A
+    staticType: void Function<T, U>(int)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: String
+          staticElement: dart:core::@class::String
+          staticType: null
+        type: String
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+  typeArgumentTypes
+    int
+    String
+''');
   }
 
   test_targetNull_typeAlias_interfaceType() async {
@@ -427,16 +487,44 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('X<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int, String>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-      expectedTypeNameElement: findElement.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('X<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: X
+        staticElement: self::@typeAlias::X
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+          NamedType
+            name: SimpleIdentifier
+              token: String
+              staticElement: dart:core::@class::String
+              staticType: null
+            type: String
+        rightBracket: >
+      type: A<int, String>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int, U: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int, String>
+''');
   }
 
   test_targetNull_typeAlias_Never() async {
@@ -455,7 +543,7 @@
   }
 
   test_targetPrefixedIdentifier_prefix_class_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A.named(T a);
 }
@@ -469,23 +557,47 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('A.named(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedPrefix: importFind.prefix,
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('A.named(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: prefix
+          staticElement: self::@prefix::prefix
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_targetPrefixedIdentifier_prefix_class_constructor_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A.named(int a);
 }
@@ -503,28 +615,57 @@
           messageContains: ["The constructor 'prefix.A.named'"]),
     ]);
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('named<int>(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedPrefix: importFind.prefix,
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
-    _assertTypeArgumentList(
-      creation.constructorName.type.typeArguments,
-      ['int'],
-    );
-    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('named<int>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: prefix
+          staticElement: self::@prefix::prefix
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::A::@constructor::named
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_targetPrefixedIdentifier_prefix_class_constructor_typeArguments_new() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A.new(int a);
 }
@@ -542,27 +683,57 @@
           messageContains: ["The constructor 'prefix.A.new'"]),
     ]);
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('new<int>(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int>',
-      expectedPrefix: importFind.prefix,
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
-    _assertTypeArgumentList(
-      creation.constructorName.type.typeArguments,
-      ['int'],
-    );
-    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('new<int>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: prefix
+          staticElement: self::@prefix::prefix
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::•
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_targetPrefixedIdentifier_prefix_getter_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 A get foo => A();
 
 class A {
@@ -578,16 +749,40 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('bar(0);');
-    assertElement(invocation, importFind.class_('A').getMethod('bar'));
-    assertInvokeType(invocation, 'void Function(int)');
-    _assertArgumentList(invocation.argumentList, ['0']);
+    var node = findNode.methodInvocation('bar(0);');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@getter::foo
+      staticType: A
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: A
+  operator: .
+  methodName: SimpleIdentifier
+    token: bar
+    staticElement: package:test/a.dart::@class::A::@method::bar
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
   }
 
   test_targetPrefixedIdentifier_typeAlias_interfaceType_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A.named(T a);
 }
@@ -603,20 +798,43 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('X.named(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-      expectedPrefix: findElement.prefix('prefix'),
-      expectedTypeNameElement: importFind.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('X.named(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: prefix
+          staticElement: self::@prefix::prefix
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: X
+          staticElement: package:test/a.dart::@typeAlias::X
+          staticType: null
+        staticElement: package:test/a.dart::@typeAlias::X
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_targetSimpleIdentifier_class_constructor() async {
@@ -630,16 +848,35 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('A.named(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('A.named(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_targetSimpleIdentifier_class_constructor_typeArguments() async {
@@ -657,27 +894,52 @@
           messageContains: ["The constructor 'A.named'"]),
     ]);
 
-    var creation = findNode.instanceCreation('named<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      // TODO(scheglov) Move type arguments
-      'A<dynamic, dynamic>',
-//      'A<int, String>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      // TODO(scheglov) Move type arguments
-      expectedSubstitution: {'T': 'dynamic', 'U': 'dynamic'},
-//      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
     // TODO(scheglov) Move type arguments
-//    _assertTypeArgumentList(
-//      creation.constructorName.type.typeArguments,
-//      ['int', 'String'],
-//    );
-    // TODO(scheglov) Fix and uncomment.
-//    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('named<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<dynamic, dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic, U: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: dynamic, U: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: String
+          staticElement: dart:core::@class::String
+          staticType: null
+        type: String
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<dynamic, dynamic>
+''');
   }
 
   test_targetSimpleIdentifier_class_constructor_typeArguments_new() async {
@@ -695,26 +957,52 @@
           messageContains: ["The constructor 'A.new'"]),
     ]);
 
-    var creation = findNode.instanceCreation('new<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      // TODO(scheglov) Move type arguments
-      'A<dynamic, dynamic>',
-//      'A<int, String>',
-      expectedConstructorMember: true,
-      // TODO(scheglov) Move type arguments
-      expectedSubstitution: {'T': 'dynamic', 'U': 'dynamic'},
-//      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
     // TODO(scheglov) Move type arguments
-//    _assertTypeArgumentList(
-//      creation.constructorName.type.typeArguments,
-//      ['int', 'String'],
-//    );
-    // TODO(scheglov) Fix and uncomment.
-//    expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('new<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<dynamic, dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: dynamic, U: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: dynamic, U: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: String
+          staticElement: dart:core::@class::String
+          staticType: null
+        type: String
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<dynamic, dynamic>
+''');
   }
 
   test_targetSimpleIdentifier_class_staticMethod() async {
@@ -733,7 +1021,7 @@
   }
 
   test_targetSimpleIdentifier_prefix_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T, U> {
   A(int a);
 }
@@ -747,22 +1035,56 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('A<int, String>(0);');
-    assertInstanceCreation(
-      creation,
-      importFind.class_('A'),
-      'A<int, String>',
-      expectedPrefix: importFind.prefix,
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
+    var node = findNode.instanceCreation('A<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: prefix
+          staticElement: self::@prefix::prefix
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+          NamedType
+            name: SimpleIdentifier
+              token: String
+              staticElement: dart:core::@class::String
+              staticType: null
+            type: String
+        rightBracket: >
+      type: A<int, String>
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::•
+      substitution: {T: int, U: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int, String>
+''');
   }
 
   test_targetSimpleIdentifier_prefix_extension() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 
 extension E<T> on A {
@@ -791,7 +1113,7 @@
   }
 
   test_targetSimpleIdentifier_prefix_function() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void A<T, U>(int a) {}
 ''');
 
@@ -803,12 +1125,47 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('A<int, String>(0);');
-    assertElement(invocation, importFind.topFunction('A'));
-    assertInvokeType(invocation, 'void Function(int)');
-    _assertArgumentList(invocation.argumentList, ['0']);
+    var node = findNode.methodInvocation('A<int, String>(0);');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: A
+    staticElement: package:test/a.dart::@function::A
+    staticType: void Function<T, U>(int)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: String
+          staticElement: dart:core::@class::String
+          staticType: null
+        type: String
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+  typeArgumentTypes
+    int
+    String
+''');
   }
 
   test_targetSimpleIdentifier_typeAlias_interfaceType_constructor() async {
@@ -824,27 +1181,35 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('X.named(0);');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-      expectedTypeNameElement: findElement.typeAlias('X'),
-    );
-    _assertArgumentList(creation.argumentList, ['0']);
-  }
-
-  void _assertArgumentList(
-    ArgumentList argumentList,
-    List<String> expectedArguments,
-  ) {
-    var argumentStrings = argumentList.arguments
-        .map((e) => result.content.substring(e.offset, e.end))
-        .toList();
-    expect(argumentStrings, expectedArguments);
+    var node = findNode.instanceCreation('X.named(0);');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: X
+        staticElement: self::@typeAlias::X
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   void _assertExtensionOverride(
@@ -864,20 +1229,6 @@
     );
     assertType(override.extendedType, expectedExtendedType);
   }
-
-  void _assertTypeArgumentList(
-    TypeArgumentList? argumentList,
-    List<String> expectedArguments,
-  ) {
-    if (argumentList == null) {
-      fail('Expected TypeArgumentList, actually null.');
-    }
-
-    var argumentStrings = argumentList.arguments
-        .map((e) => result.content.substring(e.offset, e.end))
-        .toList();
-    expect(argumentStrings, expectedArguments);
-  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 286ec22..24c790e 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -23,7 +23,7 @@
 @reflectiveTest
 class ConstantResolutionTest extends PubPackageResolutionTest {
   test_constructor_nullSafe_fromLegacy_super() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A(List<Object> a);
 }
@@ -46,7 +46,7 @@
   }
 
   test_constructor_nullSafe_fromLegacy_this() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A(List<Object> a) : this(a);
   const A.second(List<Object> a);
@@ -87,7 +87,7 @@
   }
 
   test_field_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const foo = 42;
 }
@@ -105,7 +105,7 @@
   }
 
   test_fromEnvironment_optOut_fromOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 
 const cBool = const bool.fromEnvironment('foo', defaultValue: false);
@@ -133,7 +133,7 @@
   }
 
   test_topLevelVariable_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const foo = 42;
 ''');
 
@@ -150,11 +150,11 @@
   }
 
   test_topLevelVariable_optOut2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 42;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart';
 
 const b = a;
@@ -173,7 +173,7 @@
   }
 
   test_topLevelVariable_optOut3() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 const a = int.fromEnvironment('a', defaultValue: 42);
 ''');
@@ -199,7 +199,7 @@
 class ConstantResolutionWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_constantValue_defaultParameter_noDefaultValue() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A({int p});
 }
@@ -281,7 +281,7 @@
   }
 
   test_functionType_element_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F<T> = T Function(int);
 const a = C<F<double>>();
 
@@ -312,7 +312,7 @@
   }
 
   test_imported_prefixedIdentifier_staticField_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = C.f;
 
 class C {
@@ -329,7 +329,7 @@
   }
 
   test_imported_prefixedIdentifier_staticField_extension() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = E.f;
 
 extension E on int {
@@ -346,7 +346,7 @@
   }
 
   test_imported_prefixedIdentifier_staticField_mixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = M.f;
 
 class C {}
@@ -365,7 +365,7 @@
   }
 
   test_imported_super_defaultFieldFormalParameter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'test.dart';
 
 class A {
@@ -409,7 +409,7 @@
 
   /// See https://github.com/dart-lang/sdk/issues/43462
   test_useLanguageVersionOfEnclosingLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class Wrapper {
   final int value;
   const Wrapper(Object value) : value = value as int;
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
index a48aaa1..aa3e3d3 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -830,7 +830,7 @@
   }
 
   test_prefixedAlias_generic_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A<T> {
   A();
 }
@@ -886,7 +886,7 @@
   }
 
   test_prefixedClass_generic_named() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A<T> {
   A.foo();
 }
@@ -941,7 +941,7 @@
   }
 
   test_prefixedClass_generic_targetOfFunctionCall() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A<T> {
   A();
 }
@@ -999,7 +999,7 @@
   }
 
   test_prefixedClass_generic_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A<T> {
   A();
 }
@@ -1388,7 +1388,7 @@
   }
 
   test_prefixedAlias_nonGeneric_named() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A.foo();
 }
@@ -1430,7 +1430,7 @@
   }
 
   test_prefixedAlias_nonGeneric_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A();
 }
@@ -1472,7 +1472,7 @@
   }
 
   test_prefixedClass_nonGeneric_named() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A.foo();
 }
@@ -1513,7 +1513,7 @@
   }
 
   test_prefixedClass_nonGeneric_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   A();
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index 7d4c7a1..5b9d9a4 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/summary2/macro.dart';
 import 'package:analyzer/src/test_utilities/mock_packages.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
@@ -26,6 +27,7 @@
 import 'package:test/test.dart';
 
 import '../../../generated/test_support.dart';
+import '../../summary/repository_macro_kernel_builder.dart';
 import 'context_collection_resolution_caching.dart';
 import 'resolution.dart';
 
@@ -102,8 +104,8 @@
   @override
   void setUp() {
     super.setUp();
-    newFile('$workspaceRootPath/WORKSPACE', content: '');
-    newFile('$myPackageRootPath/BUILD', content: '');
+    newFile2('$workspaceRootPath/WORKSPACE', '');
+    newFile2('$myPackageRootPath/BUILD', '');
   }
 
   @override
@@ -139,6 +141,8 @@
     _declaredVariables = map;
   }
 
+  MacroKernelBuilder? get macroKernelBuilder => null;
+
   bool get retainDataForTesting => false;
 
   Folder get sdkRoot => newFolder('/sdk');
@@ -183,12 +187,12 @@
   }
 
   @override
-  File newFile(String path, {String content = ''}) {
+  File newFile2(String path, String content) {
     if (_analysisContextCollection != null && !path.endsWith('.dart')) {
       throw StateError('Only dart files can be changed after analysis.');
     }
 
-    return super.newFile(path, content: content);
+    return super.newFile2(path, content);
   }
 
   @override
@@ -246,6 +250,7 @@
       retainDataForTesting: retainDataForTesting,
       sdkPath: sdkRoot.path,
       updateAnalysisOptions: updateAnalysisOptions,
+      macroKernelBuilder: macroKernelBuilder,
     );
 
     verifyCreatedCollection();
@@ -262,8 +267,8 @@
   List<String> get collectionIncludedPaths => [workspaceRootPath];
 
   List<String> get experiments => [
-        EnableString.constructor_tearoffs,
         EnableString.enhanced_enums,
+        EnableString.macros,
         EnableString.named_arguments_anywhere,
         EnableString.super_parameters,
       ];
@@ -300,18 +305,18 @@
   }
 
   void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(
+    newFile2(
       path,
-      content: config.toContent(
+      config.toContent(
         toUriStr: toUriStr,
       ),
     );
   }
 
   void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
-    newAnalysisOptionsYamlFile(
+    newAnalysisOptionsYamlFile2(
       testPackageRootPath,
-      content: config.toContent(),
+      config.toContent(),
     );
   }
 
@@ -321,6 +326,7 @@
     bool ffi = false,
     bool js = false,
     bool meta = false,
+    MacrosEnvironment? macrosEnvironment,
   }) {
     config = config.copy();
 
@@ -354,6 +360,15 @@
       config.add(name: 'meta', rootPath: metaPath);
     }
 
+    if (macrosEnvironment != null) {
+      var packagesRootFolder = getFolder(packagesRootPath);
+      macrosEnvironment.packageSharedFolder.copyTo(packagesRootFolder);
+      config.add(
+        name: '_fe_analyzer_shared',
+        rootPath: getFolder('$packagesRootPath/_fe_analyzer_shared').path,
+      );
+    }
+
     var path = '$testPackageRootPath/.dart_tool/package_config.json';
     writePackageConfig(path, config);
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/export_test.dart b/pkg/analyzer/test/src/dart/resolution/export_test.dart
index fe41eaf..84d485d 100644
--- a/pkg/analyzer/test/src/dart/resolution/export_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/export_test.dart
@@ -16,9 +16,9 @@
 @reflectiveTest
 class ExportResolutionTest extends PubPackageResolutionTest {
   test_configurations_default() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'false',
@@ -44,9 +44,9 @@
   }
 
   test_configurations_first() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'true',
@@ -72,9 +72,9 @@
   }
 
   test_configurations_second() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'false',
@@ -101,7 +101,7 @@
 
   /// Test that both getter and setter are in the export namespace.
   test_namespace_getter_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 get f => null;
 set f(_) {}
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index 8cc8ab5..bafe4c6 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -178,7 +178,7 @@
   }
 
   test_visibility_hidden() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int a = 1;
@@ -196,7 +196,7 @@
   }
 
   test_visibility_notShown() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int a = 1;
@@ -214,7 +214,7 @@
   }
 
   test_visibility_shadowed_byClass() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int get a => 1;
@@ -235,12 +235,12 @@
   }
 
   test_visibility_shadowed_byImport() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 extension E on Object {
   int get a => 1;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 class E {}
 class A {}
 ''');
@@ -259,7 +259,7 @@
   }
 
   test_visibility_shadowed_byLocal_imported() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int get a => 1;
@@ -300,7 +300,7 @@
   }
 
   test_visibility_shadowed_byTopLevelVariable() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int get a => 1;
@@ -321,7 +321,7 @@
   }
 
   test_visibility_shadowed_platformByNonPlatform() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 extension E on Object {
   int get a => 1;
 }
@@ -338,7 +338,7 @@
   }
 
   test_visibility_withPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 extension E on C {
   int get a => 1;
@@ -546,13 +546,25 @@
       error(HintCode.RECEIVER_OF_TYPE_NEVER, 57, 1),
       error(HintCode.DEAD_CODE, 62, 3),
     ]);
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'Never',
-    );
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@50
+    staticType: Never
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: Never
+''');
   }
 
   test_instance_method_fromInstance_nullable() async {
@@ -1539,7 +1551,7 @@
   }
 
   test_static_field_importedWithPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 
 extension E on C {
@@ -1577,7 +1589,7 @@
   }
 
   test_static_getter_importedWithPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 
 extension E on C {
@@ -1615,7 +1627,7 @@
   }
 
   test_static_method_importedWithPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 
 extension E on C {
@@ -1653,7 +1665,7 @@
   }
 
   test_static_setter_importedWithPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 
 extension E on C {
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
index cfc5917..c8dc8ea 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -88,13 +88,35 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo();'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int?',
-    );
+    var node = findNode.methodInvocation('foo();');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@54
+          staticType: int?
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@extension::E::@method::foo
+    staticType: int Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int?
+''');
   }
 
   test_propertyAccess_getter_nullAware() async {
@@ -301,7 +323,7 @@
   }
 
   test_call_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   int call(String s) => 0;
@@ -392,7 +414,7 @@
 
   test_call_prefix_typeArguments() async {
     // The test is failing because we're not yet doing type inference.
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   int call(T s) => 0;
@@ -757,7 +779,7 @@
   }
 
   test_getter_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   int get g => 0;
@@ -841,7 +863,7 @@
   }
 
   test_getter_prefix_typeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   int get g => 0;
@@ -1127,7 +1149,7 @@
   }
 
   test_method_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   void m() {}
@@ -1219,7 +1241,7 @@
   }
 
   test_method_prefix_typeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   void m() {}
@@ -1579,7 +1601,7 @@
   }
 
   test_operator_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   void operator +(int offset) {}
@@ -1665,7 +1687,7 @@
   }
 
   test_operator_prefix_typeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   void operator +(int offset) {}
@@ -1977,7 +1999,7 @@
   }
 
   test_setter_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   set s(int x) {}
@@ -2083,7 +2105,7 @@
   }
 
   test_setter_prefix_typeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   set s(int x) {}
@@ -2429,7 +2451,7 @@
   }
 
   test_setterAndGetter_prefix_noTypeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E on A {
   int get s => 0;
@@ -2538,7 +2560,7 @@
   }
 
   test_setterAndGetter_prefix_typeArguments() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class A {}
 extension E<T> on A {
   int get s => 0;
diff --git a/pkg/analyzer/test/src/dart/resolution/field_test.dart b/pkg/analyzer/test/src/dart/resolution/field_test.dart
index 1ff7e4e..f4805b3 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_test.dart
@@ -63,7 +63,7 @@
   }
 
   test_type_inferred_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 var a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
index 06f0e44..82803f7 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
@@ -17,7 +17,7 @@
 class ForEachElementTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A implements Iterable<int> {
   Iterator<int> iterator => throw 0;
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index 10b5c99..98e0425 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -363,6 +363,7 @@
     token: f
     staticElement: f@61
     staticType: void Function<U>(U)
+      alias: self::@typeAlias::Fn
   staticType: void Function(int)
   typeArgumentTypes
     int
@@ -1015,7 +1016,7 @@
   }
 
   test_extension_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 extension E<T> on String {}
 ''');
     await assertErrorsInCode('''
@@ -1801,7 +1802,7 @@
   }
 
   test_implicitCallTearoff_prefix_class_staticGetter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   static const v = C();
   const C();
@@ -1857,7 +1858,7 @@
   }
 
   test_implicitCallTearoff_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class C {
   T call<T>(T t) => t;
 }
@@ -2596,7 +2597,7 @@
   }
 
   test_instanceMethod_explicitReceiver_topLevelVariable_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   void foo<T>(T a) {}
 }
@@ -2651,7 +2652,7 @@
   }
 
   test_instanceMethod_explicitReceiver_topLevelVariable_prefix_unknown() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {}
 var a = A();
 ''');
@@ -3379,7 +3380,7 @@
   }
 
   test_staticMethod_explicitReceiver_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void foo<T>(T a) {}
 }
@@ -3434,7 +3435,7 @@
   }
 
   test_staticMethod_explicitReceiver_prefix_typeAlias() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void foo<T>(T a) {}
 }
@@ -3533,7 +3534,7 @@
   }
 
   test_staticMethod_explicitReciver_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   static void foo<T>(T a) {}
 }
@@ -3700,7 +3701,7 @@
   }
 
   test_topLevelFunction_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void foo<T>(T arg) {}
 ''');
     await assertNoErrorsInCode('''
@@ -3744,7 +3745,7 @@
   }
 
   test_topLevelFunction_importPrefix_asTargetOfFunctionCall() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void foo<T>(T arg) {}
 ''');
     await assertNoErrorsInCode('''
@@ -3895,7 +3896,7 @@
   }
 
   test_topLevelVariable_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void Function<T>(T) foo = <T>(T arg) {}
 ''');
     await assertNoErrorsInCode('''
@@ -3939,7 +3940,7 @@
   }
 
   test_topLevelVariable_prefix_unknownIdentifier() async {
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
     await assertErrorsInCode('''
 import 'a.dart' as prefix;
 
@@ -4134,7 +4135,7 @@
   }
 
   test_unknownIdentifier_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
     await assertErrorsInCode('''
 import 'a.dart' as a;
 
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
index 60b6def..8d1af31 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
@@ -82,7 +82,7 @@
   }
 
   test_genericFunctionTypeCannotBeTypeArgument_optOutOfGenericMetadata() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 typedef G = Function<S>();
 ''');
     await assertErrorsInCode('''
@@ -131,7 +131,7 @@
   }
 
   test_missingGenericFunction_imported_withPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F<T> = ;
 ''');
     await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/import_test.dart b/pkg/analyzer/test/src/dart/resolution/import_test.dart
index 145bae8..0249c90 100644
--- a/pkg/analyzer/test/src/dart/resolution/import_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/import_test.dart
@@ -15,9 +15,9 @@
 @reflectiveTest
 class ImportDirectiveResolutionTest extends PubPackageResolutionTest {
   test_configurations_default() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'false',
@@ -43,9 +43,9 @@
   }
 
   test_configurations_first() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'true',
@@ -71,9 +71,9 @@
   }
 
   test_configurations_second() async {
-    newFile('$testPackageLibPath/a.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_html.dart', content: 'class A {}');
-    newFile('$testPackageLibPath/a_io.dart', content: 'class A {}');
+    newFile2('$testPackageLibPath/a.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_html.dart', 'class A {}');
+    newFile2('$testPackageLibPath/a_io.dart', 'class A {}');
 
     declaredVariables = {
       'dart.library.html': 'false',
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index 5175800..89bebe0 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -32,15 +32,35 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A.named(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('A.named(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_class_generic_named_withTypeArguments() async {
@@ -55,15 +75,41 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A<int>');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('A<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A<int>
+''');
     assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
@@ -79,14 +125,28 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('A(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<int>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_class_generic_unnamed_withTypeArguments() async {
@@ -99,14 +159,34 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A<int>');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('A<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: A<int>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A<int>
+''');
     assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
@@ -122,8 +202,26 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A(0)');
-    assertInstanceCreation(creation, findElement.class_('A'), 'A');
+    var node = findNode.instanceCreation('A(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A
+    staticElement: self::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_demoteType() async {
@@ -140,10 +238,29 @@
 
 ''');
 
-    assertType(
-      findNode.instanceCreation('A(s)'),
-      'A<S>',
-    );
+    var node = findNode.instanceCreation('A(s)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A<S>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: S}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: s
+        staticElement: s@38
+        staticType: S & int
+    rightParenthesis: )
+  staticType: A<S>
+''');
   }
 
   test_error_newWithInvalidTypeParameters_implicitNew_inference_top() async {
@@ -153,14 +270,34 @@
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS, 12, 8),
     ]);
 
-    var creation = findNode.instanceCreation('Map<int>');
-    assertInstanceCreation(
-      creation,
-      mapElement,
-      'Map<dynamic, dynamic>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'K': 'dynamic', 'V': 'dynamic'},
-    );
+    var node = findNode.instanceCreation('Map<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: Map
+        staticElement: dart:core::@class::Map
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: Map<dynamic, dynamic>
+    staticElement: ConstructorMember
+      base: dart:core::@class::Map::@constructor::•
+      substitution: {K: dynamic, V: dynamic}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Map<dynamic, dynamic>
+''');
   }
 
   test_error_wrongNumberOfTypeArgumentsConstructor_explicitNew() async {
@@ -178,15 +315,42 @@
           messageContains: ["The constructor 'Foo.bar'"]),
     ]);
 
-    var creation = findNode.instanceCreation('Foo.bar<int>');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('Foo'),
-      'Foo<dynamic>',
-      constructorName: 'bar',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'X': 'dynamic'},
-    );
+    var node = findNode.instanceCreation('Foo.bar<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  keyword: new
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: Foo
+        staticElement: self::@class::Foo
+        staticType: null
+      type: Foo<dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: bar
+      staticElement: ConstructorMember
+        base: self::@class::Foo::@constructor::bar
+        substitution: {X: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::Foo::@constructor::bar
+      substitution: {X: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Foo<dynamic>
+''');
   }
 
   test_error_wrongNumberOfTypeArgumentsConstructor_explicitNew_new() async {
@@ -204,18 +368,46 @@
           messageContains: ["The constructor 'Foo.new'"]),
     ]);
 
-    var creation = findNode.instanceCreation('Foo.new<int>');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('Foo'),
-      'Foo<dynamic>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'X': 'dynamic'},
-    );
+    var node = findNode.instanceCreation('Foo.new<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  keyword: new
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: Foo
+        staticElement: self::@class::Foo
+        staticType: null
+      type: Foo<dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::Foo::@constructor::•
+        substitution: {X: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::Foo::@constructor::•
+      substitution: {X: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Foo<dynamic>
+''');
   }
 
   test_error_wrongNumberOfTypeArgumentsConstructor_explicitNew_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class Foo<X> {
   Foo.bar();
 }
@@ -232,15 +424,50 @@
 
     // TODO(brianwilkerson) Test this more carefully after we can re-write the
     // AST to reflect the expected structure.
-//    var creation = findNode.instanceCreation('Foo.bar<int>');
-//    var import = findElement.import('package:test/a.dart');
-//    assertInstanceCreation(
-//      creation,
-//      import.importedLibrary.getType('Foo'),
-//      'Foo',
-//      constructorName: 'bar',
-//      expectedPrefix: import.prefix,
-//    );
+    var node = findNode.instanceCreation('Foo.bar<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  keyword: new
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: Foo
+          staticElement: package:test/a.dart::@class::Foo
+          staticType: null
+        staticElement: package:test/a.dart::@class::Foo
+        staticType: null
+      type: Foo<dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: bar
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::Foo::@constructor::bar
+        substitution: {X: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::Foo::@constructor::bar
+      substitution: {X: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Foo<dynamic>
+''');
   }
 
   test_error_wrongNumberOfTypeArgumentsConstructor_implicitNew() async {
@@ -257,23 +484,45 @@
           5),
     ]);
 
-    var creation = findNode.instanceCreation('Foo.bar<int>');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('Foo'),
-      // TODO(scheglov) Move type arguments
-      'Foo<dynamic>',
-//      'Foo<int>',
-      constructorName: 'bar',
-      expectedConstructorMember: true,
-      // TODO(scheglov) Move type arguments
-      expectedSubstitution: {'X': 'dynamic'},
-//      expectedSubstitution: {'X': 'int'},
-    );
+    var node = findNode.instanceCreation('Foo.bar<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: Foo
+        staticElement: self::@class::Foo
+        staticType: null
+      type: Foo<dynamic>
+    period: .
+    name: SimpleIdentifier
+      token: bar
+      staticElement: ConstructorMember
+        base: self::@class::Foo::@constructor::bar
+        substitution: {X: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::Foo::@constructor::bar
+      substitution: {X: dynamic}
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Foo<dynamic>
+''');
   }
 
   test_error_wrongNumberOfTypeArgumentsConstructor_implicitNew_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class Foo<X> {
   Foo.bar();
 }
@@ -289,18 +538,49 @@
           5),
     ]);
 
-    var import = findElement.import('package:test/a.dart');
-
-    var creation = findNode.instanceCreation('Foo.bar<int>');
-    assertInstanceCreation(
-      creation,
-      import.importedLibrary!.getType('Foo')!,
-      'Foo<int>',
-      constructorName: 'bar',
-      expectedConstructorMember: true,
-      expectedPrefix: import.prefix,
-      expectedSubstitution: {'X': 'int'},
-    );
+    var node = findNode.instanceCreation('Foo.bar<int>');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: Foo
+          staticElement: package:test/a.dart::@class::Foo
+          staticType: null
+        staticElement: package:test/a.dart::@class::Foo
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: Foo<int>
+    period: .
+    name: SimpleIdentifier
+      token: bar
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::Foo::@constructor::bar
+        substitution: {X: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::Foo::@constructor::bar
+      substitution: {X: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: Foo<int>
+''');
   }
 
   test_namedArgument_anywhere() async {
@@ -324,11 +604,85 @@
 }
 ''');
 
-    assertInstanceCreation(
-      findNode.instanceCreation('X(g'),
-      findElement.class_('X'),
-      'X',
-    );
+    var node = findNode.instanceCreation('X(g');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: X
+        staticElement: self::@class::X
+        staticType: null
+      type: X
+    staticElement: self::@class::X::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: g1
+          staticElement: self::@function::g1
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: A Function()
+        staticType: A
+        typeArgumentTypes
+          A
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: c
+            staticElement: self::@class::X::@constructor::•::@parameter::c
+            staticType: null
+          colon: :
+        expression: MethodInvocation
+          methodName: SimpleIdentifier
+            token: g3
+            staticElement: self::@function::g3
+            staticType: T Function<T>()
+          argumentList: ArgumentList
+            leftParenthesis: (
+            rightParenthesis: )
+          staticInvokeType: C? Function()
+          staticType: C?
+          typeArgumentTypes
+            C?
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: g2
+          staticElement: self::@function::g2
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: B Function()
+        staticType: B
+        typeArgumentTypes
+          B
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: d
+            staticElement: self::@class::X::@constructor::•::@parameter::d
+            staticType: null
+          colon: :
+        expression: MethodInvocation
+          methodName: SimpleIdentifier
+            token: g4
+            staticElement: self::@function::g4
+            staticType: T Function<T>()
+          argumentList: ArgumentList
+            leftParenthesis: (
+            rightParenthesis: )
+          staticInvokeType: D? Function()
+          staticType: D?
+          typeArgumentTypes
+            D?
+    rightParenthesis: )
+  staticType: X
+''');
 
     var g1 = findNode.methodInvocation('g1()');
     assertType(g1, 'A');
@@ -362,16 +716,35 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('B.named(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      constructorName: 'named',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('B.named(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<int>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_typeAlias_generic_class_generic_named_infer_partial() async {
@@ -387,16 +760,37 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('B.named(0, ');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int, String>',
-      constructorName: 'named',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
+    var node = findNode.instanceCreation('B.named(0, ');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<int, String>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: dynamic, U: String}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int, U: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticType: A<int, String>
+''');
   }
 
   test_typeAlias_generic_class_generic_unnamed_infer_all() async {
@@ -412,15 +806,28 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('B(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int>',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int'},
-    );
+    var node = findNode.instanceCreation('B(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<int>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<int>
+''');
   }
 
   test_typeAlias_generic_class_generic_unnamed_infer_partial() async {
@@ -436,15 +843,30 @@
 }
 ''');
 
-    var creation = findNode.instanceCreation('B(0, ');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<int, String>',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'int', 'U': 'String'},
-    );
+    var node = findNode.instanceCreation('B(0, ');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<int, String>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int, U: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticType: A<int, String>
+''');
   }
 
   test_typeAlias_notGeneric_class_generic_named_argumentTypeMismatch() async {
@@ -462,16 +884,35 @@
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 77, 1),
     ]);
 
-    var creation = findNode.instanceCreation('B.named(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<String>',
-      constructorName: 'named',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'String'},
-    );
+    var node = findNode.instanceCreation('B.named(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<String>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: String}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<String>
+''');
   }
 
   test_typeAlias_notGeneric_class_generic_unnamed_argumentTypeMismatch() async {
@@ -489,15 +930,28 @@
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 65, 1),
     ]);
 
-    var creation = findNode.instanceCreation('B(0)');
-    assertInstanceCreation(
-      creation,
-      findElement.class_('A'),
-      'A<String>',
-      expectedTypeNameElement: findElement.typeAlias('B'),
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'String'},
-    );
+    var node = findNode.instanceCreation('B(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@typeAlias::B
+        staticType: null
+      type: A<String>
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: String}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A<String>
+''');
   }
 
   test_unnamed_declaredNew() async {
@@ -512,8 +966,26 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A(0)');
-    assertInstanceCreation(creation, findElement.class_('A'), 'A');
+    var node = findNode.instanceCreation('A(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A
+    staticElement: self::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_unnamedViaNew_declaredNew() async {
@@ -528,8 +1000,31 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A.new(0)');
-    assertInstanceCreation(creation, findElement.class_('A'), 'A');
+    var node = findNode.instanceCreation('A.new(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_unnamedViaNew_declaredUnnamed() async {
@@ -544,8 +1039,31 @@
 
 ''');
 
-    var creation = findNode.instanceCreation('A.new(0)');
-    assertInstanceCreation(creation, findElement.class_('A'), 'A');
+    var node = findNode.instanceCreation('A.new(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A
+''');
   }
 }
 
@@ -567,7 +1085,30 @@
     ]);
 
     // Resolution should continue even though the experiment is not enabled.
-    var creation = findNode.instanceCreation('A.new(0)');
-    assertInstanceCreation(creation, findElement.class_('A'), 'A');
+    var node = findNode.instanceCreation('A.new(0)');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: A
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticType: A
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
index aaf0e18..601714b 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
@@ -159,7 +159,7 @@
   }
 
   test_field_multiple_gettersSetters_final_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int get foo;
@@ -258,7 +258,7 @@
   }
 
   test_field_multiple_gettersSetters_notFinal_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int get foo;
@@ -312,7 +312,7 @@
   }
 
   test_field_single_getter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int get foo;
@@ -330,7 +330,7 @@
   }
 
   test_field_single_setter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   set foo(int _);
@@ -466,7 +466,7 @@
   }
 
   test_getter_single_getter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int get foo;
@@ -484,7 +484,7 @@
   }
 
   test_getter_single_setter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   set foo(int _);
@@ -715,7 +715,7 @@
   }
 
   test_method_parameter_required_single_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A {
   void foo(int p) {}
@@ -895,7 +895,7 @@
   }
 
   test_method_return_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int foo();
@@ -1057,7 +1057,7 @@
   }
 
   test_setter_single_getter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   int get foo;
@@ -1075,7 +1075,7 @@
   }
 
   test_setter_single_setter_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 abstract class A {
   set foo(int _);
diff --git a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
index fa4ab1c..7438e78 100644
--- a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart
@@ -37,7 +37,7 @@
 }
 ''');
 
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 int a = 0;
 ''');
 
@@ -74,7 +74,7 @@
 }
 ''');
 
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 int a = 0;
 ''');
 
@@ -148,9 +148,9 @@
 
 class _FeaturesTest extends PubPackageResolutionTest {
   void _configureTestWithJsonConfig(String content) {
-    newFile(
+    newFile2(
       '$testPackageRootPath/.dart_tool/package_config.json',
-      content: content,
+      content,
     );
   }
 }
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/test/src/dart/resolution/local_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
index ddad876..f83f9e7 100644
--- a/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
@@ -16,6 +16,29 @@
 
 @reflectiveTest
 class LocalVariableResolutionTest extends PubPackageResolutionTest {
+  test_annotation_twoVariables() async {
+    await assertNoErrorsInCode(r'''
+const a = 0;
+
+void f() {
+  // ignore:unused_local_variable
+  @a var x = 0, y = 0;
+}
+''');
+
+    var x = findElement.localVar('x');
+    assertElement2(
+      x.metadata.single.element,
+      declaration: findElement.topGet('a'),
+    );
+
+    var y = findElement.localVar('y');
+    assertElement2(
+      y.metadata.single.element,
+      declaration: findElement.topGet('a'),
+    );
+  }
+
   test_demoteTypeParameterType() async {
     await assertNoErrorsInCode('''
 void f<T>(T a, T b) {
@@ -112,7 +135,7 @@
   }
 
   test_nonNullifyType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 var a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/macro_test.dart b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
new file mode 100644
index 0000000..2b41573
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
@@ -0,0 +1,54 @@
+// 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:analyzer/src/summary2/macro.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../summary/repository_macro_kernel_builder.dart';
+import 'context_collection_resolution.dart';
+
+main() {
+  try {
+    MacrosEnvironment.instance;
+  } catch (_) {
+    print('Cannot initialize environment. Skip macros tests.');
+    return;
+  }
+
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MacroResolutionTest);
+  });
+}
+
+@reflectiveTest
+class MacroResolutionTest extends PubPackageResolutionTest {
+  @override
+  MacroKernelBuilder? get macroKernelBuilder {
+    return DartRepositoryMacroKernelBuilder(
+      MacrosEnvironment.instance.platformDillBytes,
+    );
+  }
+
+  @override
+  void setUp() {
+    super.setUp();
+
+    writeTestPackageConfig(
+      PackageConfigFileBuilder(),
+      macrosEnvironment: MacrosEnvironment.instance,
+    );
+  }
+
+  test_0() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro class EmptyMacro implements ClassTypesMacro {
+  const EmptyMacro();
+  FutureOr<void> buildTypesForClass(clazz, builder) {}
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 458a44b..cb2351c 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -43,7 +43,7 @@
   }
 
   test_location_partDirective() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 part of 'test.dart';
 ''');
 
@@ -66,11 +66,11 @@
   }
 
   test_location_partOfDirective() async {
-    var libPath = newFile('$testPackageLibPath/lib.dart', content: r'''
+    var libPath = newFile2('$testPackageLibPath/lib.dart', r'''
 part 'part.dart';
 ''').path;
 
-    var partPath = newFile('$testPackageLibPath/part.dart', content: r'''
+    var partPath = newFile2('$testPackageLibPath/part.dart', r'''
 @foo
 part of 'lib.dart';
 const foo = 42;
@@ -212,7 +212,7 @@
   }
 
   test_optIn_fromOptOut_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A(int a);
 }
@@ -239,7 +239,7 @@
   }
 
   test_optIn_fromOptOut_class_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final int a;
   const A.named(this.a);
@@ -273,7 +273,7 @@
   }
 
   test_optIn_fromOptOut_class_constructor_withDefault() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final int a;
   const A.named({this.a = 42});
@@ -307,7 +307,7 @@
   }
 
   test_optIn_fromOptOut_class_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const foo = 42;
 }
@@ -339,7 +339,7 @@
   }
 
   test_optIn_fromOptOut_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const foo = 42;
 ''');
 
@@ -364,7 +364,7 @@
   }
 
   test_optIn_fromOptOut_prefix_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A(int a);
 }
@@ -391,7 +391,7 @@
   }
 
   test_optIn_fromOptOut_prefix_class_constructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   const A.named(int a);
 }
@@ -418,7 +418,7 @@
   }
 
   test_optIn_fromOptOut_prefix_class_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const foo = 0;
 }
@@ -445,7 +445,7 @@
   }
 
   test_optIn_fromOptOut_prefix_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const foo = 0;
 ''');
 
@@ -1338,7 +1338,7 @@
   }
 
   test_value_otherLibrary_implicitConst() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final int f;
   const A(this.f);
@@ -1369,14 +1369,14 @@
   }
 
   test_value_otherLibrary_namedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final int f;
   const A.named(this.f);
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart';
 
 @A.named(42)
@@ -1398,14 +1398,14 @@
   }
 
   test_value_otherLibrary_unnamedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   final int f;
   const A(this.f);
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart';
 
 @A(42)
@@ -1427,7 +1427,7 @@
   }
 
   test_value_prefix_typeAlias_class_staticConstField() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static const int foo = 42;
 }
@@ -1470,7 +1470,7 @@
   }
 
   test_value_prefix_typeAlias_generic_class_generic_all_inference_namedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   final T f;
   const A.named(this.f);
@@ -1532,7 +1532,7 @@
   }
 
   test_value_prefix_typeAlias_generic_class_generic_all_inference_unnamedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   final T f;
   const A(this.f);
@@ -1587,7 +1587,7 @@
   }
 
   test_value_prefix_typeAlias_generic_class_generic_all_typeArguments_namedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   final T f;
   const A.named(this.f);
@@ -1659,7 +1659,7 @@
   }
 
   test_value_prefix_typeAlias_generic_class_generic_all_typeArguments_unnamedConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   final T f;
   const A(this.f);
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 41cc3bc..3801936 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -20,7 +20,7 @@
 class MethodInvocationResolutionTest extends PubPackageResolutionTest
     with MethodInvocationResolutionTestCases {
   test_hasReceiver_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
@@ -3238,10 +3238,10 @@
   }
 
   test_error_ambiguousImport_topFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo(int _) {}
 ''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 void foo(int _) {}
 ''');
 
@@ -3295,10 +3295,10 @@
   }
 
   test_error_ambiguousImport_topFunction_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo(int _) {}
 ''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 void foo(int _) {}
 ''');
 
@@ -3687,6 +3687,7 @@
     token: foo
     staticElement: self::@class::C::@getter::foo
     staticType: double Function(int)
+      alias: self::@typeAlias::MyFunction
   argumentList: ArgumentList
     leftParenthesis: (
     arguments
@@ -3696,6 +3697,7 @@
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: double Function(int)
+    alias: self::@typeAlias::MyFunction
   staticType: double
 ''');
     } else {
@@ -3705,6 +3707,7 @@
     token: foo
     staticElement: self::@class::C::@getter::foo
     staticType: double* Function(int*)*
+      alias: self::@typeAlias::MyFunction
   argumentList: ArgumentList
     leftParenthesis: (
     arguments
@@ -3714,6 +3717,7 @@
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: double* Function(int*)*
+    alias: self::@typeAlias::MyFunction
   staticType: double*
 ''');
     }
@@ -3963,7 +3967,7 @@
   }
 
   test_error_prefixIdentifierNotFollowedByDot() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo() {}
 ''');
 
@@ -4806,7 +4810,7 @@
   }
 
   test_error_undefinedMethod_private() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo(int _) {}
 }
@@ -6020,7 +6024,7 @@
   }
 
   test_hasReceiver_importPrefix_topFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 T foo<T extends num>(T a, T b) => a;
 ''');
 
@@ -6091,7 +6095,7 @@
   }
 
   test_hasReceiver_importPrefix_topGetter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 T Function<T>(T a, T b) get foo => null;
 ''');
 
@@ -6722,7 +6726,7 @@
   }
 
   test_hasReceiver_prefixed_class_staticGetter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   static double Function(int) get foo => null;
 }
@@ -6807,7 +6811,7 @@
   }
 
   test_hasReceiver_prefixed_class_staticMethod() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   static void foo(int _) => null;
 }
@@ -7696,11 +7700,13 @@
     token: a
     staticElement: a@39
     staticType: void Function()
+      alias: self::@typeAlias::F
   argumentList: ArgumentList
     leftParenthesis: (
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: void Function()
+    alias: self::@typeAlias::F
   staticType: void
 ''');
     } else {
@@ -7710,11 +7716,13 @@
     token: a
     staticElement: a@39
     staticType: void Function()*
+      alias: self::@typeAlias::F
   argumentList: ArgumentList
     leftParenthesis: (
     rightParenthesis: )
   staticElement: <null>
   staticInvokeType: void Function()*
+    alias: self::@typeAlias::F
   staticType: void
 ''');
     }
diff --git a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
index fcb7a12..9a82a1d 100644
--- a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
@@ -15,7 +15,7 @@
 @reflectiveTest
 class ImportResolutionTest extends PubPackageResolutionTest {
   test_overrideCoreType_Never() async {
-    newFile('$testPackageLibPath/declares_never.dart', content: '''
+    newFile2('$testPackageLibPath/declares_never.dart', '''
 class Never {}
 ''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
index 76fafef..b5a17b92 100644
--- a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
+++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
@@ -53,7 +53,7 @@
             _Replacement(
               expectationOffset,
               expectationEnd,
-              '\n' + actual,
+              '\n$actual',
             ),
           );
         }
@@ -104,11 +104,11 @@
   void applyReplacements() {
     replacements.sort((a, b) => b.offset - a.offset);
     var newCode = content;
-    replacements.forEach((replacement) {
+    for (var replacement in replacements) {
       newCode = newCode.substring(0, replacement.offset) +
           replacement.text +
           newCode.substring(replacement.end);
-    });
+    }
     io.File(path).writeAsStringSync(newCode);
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
index 7c4aad2..a91b101 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
@@ -21,7 +21,7 @@
   bool get isNullSafetyEnabled => true;
 
   test_buildFile_legacy_commentedOut() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
 #  null_safety = True,
 ''');
@@ -35,7 +35,7 @@
   }
 
   test_buildFile_nonNullable() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
   null_safety = True,
 )
@@ -67,7 +67,7 @@
   }
 
   test_buildFile_nonNullable_languageVersion_current() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
   null_safety = True,
 )
@@ -84,7 +84,7 @@
   }
 
   test_buildFile_nonNullable_languageVersion_fromWorkspace() async {
-    newFile('$workspaceRootPath/dart/build_defs/bzl/language.bzl', content: r'''
+    newFile2('$workspaceRootPath/dart/build_defs/bzl/language.bzl', r'''
 _version = "2.9"
 _version_null_safety = "2.14"
 _version_for_analyzer = _version_null_safety
@@ -96,7 +96,7 @@
 )
 ''');
 
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
   null_safety = True,
 )
@@ -113,7 +113,7 @@
   }
 
   test_buildFile_nonNullable_oneLine_noComma() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(null_safety = True)
 ''');
 
@@ -126,7 +126,7 @@
   }
 
   test_buildFile_nonNullable_soundNullSafety() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
   sound_null_safety = True
 )
@@ -141,7 +141,7 @@
   }
 
   test_buildFile_nonNullable_withComments() async {
-    newFile('$myPackageRootPath/BUILD', content: r'''
+    newFile2('$myPackageRootPath/BUILD', r'''
 dart_package(
   # Preceding comment.
   null_safety = True,  # Trailing comment.
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
index 89408dc..3f34708 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
@@ -59,7 +59,7 @@
   }
 
   test_library_typeProvider_typeSystem() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await resolveTestCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
index daa949c..8f6dc88 100644
--- a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
@@ -17,157 +17,276 @@
 
 @reflectiveTest
 class OptionalConstDriverResolutionTest extends PubPackageResolutionTest {
-  Map<String, LibraryElement> libraries = {};
-
-  LibraryElement get libraryA => libraries['package:test/a.dart']!;
-
   test_instantiateToBounds_notPrefixed_named() async {
-    var creation = await _resolveImplicitConst('B.named()');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('B')!,
-      'B<num>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'num'},
-    );
+    var node = await _resolveImplicitConst('B.named()');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: package:test/a.dart::@class::B
+        staticType: null
+      type: B<num>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::B::@constructor::named
+        substitution: {T: num}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::B::@constructor::named
+      substitution: {T: num}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: B<num>
+''');
   }
 
   test_instantiateToBounds_notPrefixed_unnamed() async {
-    var creation = await _resolveImplicitConst('B()');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('B')!,
-      'B<num>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'num'},
-    );
+    var node = await _resolveImplicitConst('B()');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: package:test/a.dart::@class::B
+        staticType: null
+      type: B<num>
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::B::@constructor::•
+      substitution: {T: num}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: B<num>
+''');
   }
 
   test_instantiateToBounds_prefixed_named() async {
-    var creation = await _resolveImplicitConst('p.B.named()', prefix: 'p');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('B')!,
-      'B<num>',
-      constructorName: 'named',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'num'},
-      expectedPrefix: _importOfA().prefix,
-    );
+    var node = await _resolveImplicitConst('p.B.named()', prefix: 'p');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: package:test/b.dart::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: B
+          staticElement: package:test/a.dart::@class::B
+          staticType: null
+        staticElement: package:test/a.dart::@class::B
+        staticType: null
+      type: B<num>
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::B::@constructor::named
+        substitution: {T: num}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::B::@constructor::named
+      substitution: {T: num}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: B<num>
+''');
   }
 
   test_instantiateToBounds_prefixed_unnamed() async {
-    var creation = await _resolveImplicitConst('p.B()', prefix: 'p');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('B')!,
-      'B<num>',
-      expectedConstructorMember: true,
-      expectedSubstitution: {'T': 'num'},
-      expectedPrefix: _importOfA().prefix,
-    );
+    var node = await _resolveImplicitConst('p.B()', prefix: 'p');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: package:test/b.dart::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: B
+          staticElement: package:test/a.dart::@class::B
+          staticType: null
+        staticElement: package:test/a.dart::@class::B
+        staticType: null
+      type: B<num>
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::B::@constructor::•
+      substitution: {T: num}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: B<num>
+''');
   }
 
   test_notPrefixed_named() async {
-    var creation = await _resolveImplicitConst('A.named()');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('A')!,
-      'A',
-      constructorName: 'named',
-    );
+    var node = await _resolveImplicitConst('A.named()');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      type: A
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: package:test/a.dart::@class::A::@constructor::named
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::named
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_notPrefixed_unnamed() async {
-    var creation = await _resolveImplicitConst('A()');
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('A')!,
-      'A',
-    );
+    var node = await _resolveImplicitConst('A()');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      type: A
+    staticElement: package:test/a.dart::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_prefixed_named() async {
-    var creation = await _resolveImplicitConst('p.A.named()', prefix: 'p');
-    // Note, that we don't resynthesize the import prefix.
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('A')!,
-      'A',
-      constructorName: 'named',
-      expectedPrefix: _importOfA().prefix,
-    );
+    var node = await _resolveImplicitConst('p.A.named()', prefix: 'p');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: package:test/b.dart::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      type: A
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: package:test/a.dart::@class::A::@constructor::named
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::named
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_prefixed_unnamed() async {
-    var creation = await _resolveImplicitConst('p.A()', prefix: 'p');
-    // Note, that we don't resynthesize the import prefix.
-    assertInstanceCreation(
-      creation,
-      libraryA.getType('A')!,
-      'A',
-      expectedPrefix: _importOfA().prefix,
-    );
+    var node = await _resolveImplicitConst('p.A()', prefix: 'p');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: package:test/b.dart::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: A
+          staticElement: package:test/a.dart::@class::A
+          staticType: null
+        staticElement: package:test/a.dart::@class::A
+        staticType: null
+      type: A
+    staticElement: package:test/a.dart::@class::A::@constructor::•
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: A
+''');
   }
 
   test_prefixed_unnamed_generic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C<T> {
   const C();
 }
 ''');
+
     await assertNoErrorsInCode(r'''
 import 'a.dart' as p;
 
 const x = p.C<int>();
 ''');
-    _fillLibraries();
 
-    var element_C = libraryA.getType('C');
-    var element_p = findElement.prefix('p');
-
-    var creation = findNode.instanceCreation('p.C<int>()');
-    assertType(creation, 'C<int>');
-
-    var constructorName = creation.constructorName;
-
-    var typeName = constructorName.type;
-    assertType(typeName, 'C<int>');
-
-    var pC = typeName.name as PrefixedIdentifier;
-    assertElement(pC, element_C);
-    // TODO(scheglov) enforce
-//    assertTypeNull(pC);
-
-    var ref_p = pC.prefix;
-    assertElement(ref_p, element_p);
-    assertTypeNull(ref_p);
-
-    var ref_C = pC.identifier;
-    assertElement(ref_C, element_C);
-    assertTypeNull(ref_C);
-
-    assertType(typeName.typeArguments!.arguments[0], 'int');
-  }
-
-  void _fillLibraries([LibraryElement? library]) {
-    library ??= result.unit.declaredElement!.library;
-    var uriStr = library.source.uri.toString();
-    if (!libraries.containsKey(uriStr)) {
-      libraries[uriStr] = library;
-      library.importedLibraries.forEach(_fillLibraries);
-    }
-  }
-
-  ImportElement _importOfA() {
-    var importOfB = findElement.import('package:test/b.dart');
-    return importOfB.importedLibrary!.imports[0];
+    var node = findNode.instanceCreation('p.C<int>()');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: C
+          staticElement: package:test/a.dart::@class::C
+          staticType: null
+        staticElement: package:test/a.dart::@class::C
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: C<int>
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::C::@constructor::•
+      substitution: {T: int}
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: C<int>
+''');
   }
 
   Future<InstanceCreationExpression> _resolveImplicitConst(String expr,
       {String? prefix}) async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   const A();
   const A.named();
@@ -179,12 +298,12 @@
 ''');
 
     if (prefix != null) {
-      newFile('$testPackageLibPath/b.dart', content: '''
+      newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart' as $prefix;
 const a = $expr;
 ''');
     } else {
-      newFile('$testPackageLibPath/b.dart', content: '''
+      newFile2('$testPackageLibPath/b.dart', '''
 import 'a.dart';
 const a = $expr;
 ''');
@@ -194,7 +313,6 @@
 import 'b.dart';
 var v = a;
 ''');
-    _fillLibraries();
 
     var vg = findNode.simple('a;').staticElement as PropertyAccessorElement;
     var v = vg.variable as ConstVariableElement;
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index 1846448..1847d44 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -176,15 +176,8 @@
 int g() => f(null)!;
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('f(null)'),
-      element: findElement.topFunction('f'),
-      typeArgumentTypes: ['int?'],
-      invokeType: 'int? Function(int?)',
-      type: 'int?',
-    );
-
-    assertResolvedNodeText(findNode.postfix('f(null)!'), r'''
+    var node = findNode.postfix('f(null)!');
+    assertResolvedNodeText(node, r'''
 PostfixExpression
   operand: MethodInvocation
     methodName: SimpleIdentifier
@@ -284,25 +277,27 @@
       error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 70, 6),
     ]);
 
-    assertTypeDynamic(findNode.super_('super!'));
-
-    assertResolvedNodeText(findNode.postfix('super!'), r'''
-PostfixExpression
-  operand: SuperExpression
-    superKeyword: super
+    var node = findNode.methodInvocation('foo();');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: PostfixExpression
+    operand: SuperExpression
+      superKeyword: super
+      staticType: dynamic
+    operator: !
+    staticElement: <null>
     staticType: dynamic
-  operator: !
-  staticElement: <null>
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
   staticType: dynamic
 ''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo();'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
   }
 
   test_nullCheck_typeParameter() async {
@@ -785,7 +780,7 @@
   }
 
   test_inc_prefixedIdentifier_topLevel() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int x = 0;
 ''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
index 06faef1..845f018 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_element_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PrefixElementTest extends PubPackageResolutionTest {
   test_scope_lookup() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var foo = 0;
 ''');
 
@@ -40,11 +40,11 @@
   }
 
   test_scope_lookup_ambiguous_notSdk_both() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var foo = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 var foo = 1.2;
 ''');
 
@@ -79,7 +79,7 @@
   }
 
   test_scope_lookup_ambiguous_notSdk_first() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var pi = 4;
 ''');
 
@@ -101,7 +101,7 @@
   }
 
   test_scope_lookup_ambiguous_notSdk_second() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var pi = 4;
 ''');
 
@@ -123,11 +123,11 @@
   }
 
   test_scope_lookup_ambiguous_same() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var foo = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart';
 ''');
 
@@ -154,11 +154,11 @@
   }
 
   test_scope_lookup_differentPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var foo = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 var bar = 0;
 ''');
 
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
index 59238ca..888d74f 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -193,52 +193,36 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('f();'),
-      element: findElement.topFunction('f'),
-      typeArgumentTypes: ['bool'],
-      invokeType: 'bool Function()',
-      type: 'bool',
-    );
-
-    var node = findNode.prefix('!f()');
+    var node = findNode.methodInvocation('f();');
     if (isNullSafetyEnabled) {
       assertResolvedNodeText(node, r'''
-PrefixExpression
-  operator: !
-  operand: MethodInvocation
-    methodName: SimpleIdentifier
-      token: f
-      staticElement: self::@function::f
-      staticType: T Function<T>()
-    argumentList: ArgumentList
-      leftParenthesis: (
-      rightParenthesis: )
-    staticInvokeType: bool Function()
-    staticType: bool
-    typeArgumentTypes
-      bool
-  staticElement: <null>
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: bool Function()
   staticType: bool
+  typeArgumentTypes
+    bool
 ''');
     } else {
       assertResolvedNodeText(node, r'''
-PrefixExpression
-  operator: !
-  operand: MethodInvocation
-    methodName: SimpleIdentifier
-      token: f
-      staticElement: self::@function::f
-      staticType: T* Function<T>()*
-    argumentList: ArgumentList
-      leftParenthesis: (
-      rightParenthesis: )
-    staticInvokeType: bool* Function()*
-    staticType: bool*
-    typeArgumentTypes
-      bool*
-  staticElement: <null>
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: bool* Function()*
   staticType: bool*
+  typeArgumentTypes
+    bool*
 ''');
     }
   }
@@ -716,7 +700,7 @@
   }
 
   test_plusPlus_prefixedIdentifier_topLevel() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int x = 0;
 ''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index 998efbf..1a011b1 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -19,7 +19,7 @@
 class PrefixedIdentifierResolutionTest extends PubPackageResolutionTest
     with PrefixedIdentifierResolutionTestCases {
   test_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
@@ -145,7 +145,7 @@
   }
 
   test_implicitCall_tearOff_nullable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int call() => 0;
 }
@@ -171,7 +171,7 @@
   }
 
   test_read_typedef_interfaceType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef A = List<int>;
 ''');
 
@@ -298,7 +298,7 @@
   }
 
   test_class_read_typedef_functionType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef A = void Function();
 ''');
 
@@ -431,7 +431,7 @@
   }
 
   test_implicitCall_tearOff() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int call() => 0;
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 0495690..ae050fb 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -88,7 +87,7 @@
   VoidType get voidType => VoidTypeImpl.instance;
 
   void addTestFile(String content) {
-    newFile(testFilePath, content: content);
+    newFile2(testFilePath, content);
   }
 
   void assertAssignment(
@@ -282,7 +281,7 @@
     List<ExpectedError> expectedErrors,
   ) async {
     path = convertPath(path);
-    newFile(path, content: content);
+    newFile2(path, content);
 
     var result = await resolveFile(path);
     assertErrorsInResolvedUnit(result, expectedErrors);
@@ -385,54 +384,6 @@
     assertTypeNull(identifier);
   }
 
-  /// TODO(srawlins): Refactor to accept an `Object? expectedConstructor` which
-  /// can accept `elementMatcher` for generics, and simplify, similar to
-  /// `assertConstructorReference`.
-  void assertInstanceCreation(
-    InstanceCreationExpression creation,
-    ClassElement expectedClassElement,
-    String expectedType, {
-    String? constructorName,
-    bool expectedConstructorMember = false,
-    Map<String, String>? expectedSubstitution,
-    PrefixElement? expectedPrefix,
-    Element? expectedTypeNameElement,
-  }) {
-    var expectedConstructorElement =
-        _getConstructorElement(expectedClassElement, constructorName);
-
-    var actualConstructorElement =
-        getNodeElement(creation) as ConstructorElement?;
-    var constructorName2 = creation.constructorName.name;
-    if (constructorName2 != null) {
-      // TODO(brianwilkerson) This used to enforce that the two elements were
-      // the same object, but the changes to the AstRewriteVisitor broke that.
-      // We should explore re-establishing this restriction for performance.
-      assertConstructorElement(
-        constructorName2.staticElement as ConstructorElement?,
-        actualConstructorElement,
-      );
-    }
-
-    if (expectedConstructorMember) {
-      expect(actualConstructorElement, const TypeMatcher<Member>());
-      assertMember(
-        creation,
-        expectedConstructorElement,
-        expectedSubstitution!,
-      );
-    } else {
-      assertElement(creation, expectedConstructorElement);
-    }
-
-    assertType(creation, expectedType);
-
-    var namedType = creation.constructorName.type;
-    expectedTypeNameElement ??= expectedClassElement;
-    assertNamedType(namedType, expectedTypeNameElement, expectedType,
-        expectedPrefix: expectedPrefix);
-  }
-
   /// Resolve the [code], and ensure that it can be resolved without a crash,
   /// and is invalid, i.e. produces a diagnostic.
   Future<void> assertInvalidTestCode(String code) async {
@@ -479,59 +430,6 @@
     assertSubstitution(actual.substitution, expectedSubstitution);
   }
 
-  void assertMethodInvocation(
-    MethodInvocation invocation,
-    Object? expectedElement,
-    String expectedInvokeType, {
-    String? expectedMethodNameType,
-    String? expectedNameType,
-    String? expectedType,
-    List<String> expectedTypeArguments = const <String>[],
-  }) {
-    var invocationImpl = invocation as MethodInvocationImpl;
-
-    // TODO(scheglov) Check for Member.
-    var element = invocation.methodName.staticElement;
-    if (expectedElement is Element) {
-      expect(element?.declaration, same(expectedElement));
-    } else {
-      expect(element, expectedElement);
-    }
-
-    // TODO(scheglov) Should we enforce this?
-//    if (expectedNameType == null) {
-//      if (expectedElement is ExecutableElement) {
-//        expectedNameType = expectedElement.type.displayName;
-//      } else if (expectedElement is VariableElement) {
-//        expectedNameType = expectedElement.type.displayName;
-//      }
-//    }
-//    assertType(invocation.methodName, expectedNameType);
-
-    assertTypeArgumentTypes(invocation, expectedTypeArguments);
-
-    assertInvokeType(invocation, expectedInvokeType);
-
-    expectedType ??= _extractReturnType(expectedInvokeType);
-    assertType(invocation, expectedType);
-
-    expectedMethodNameType ??= expectedInvokeType;
-    assertType(invocationImpl.methodNameType, expectedMethodNameType);
-  }
-
-  void assertMethodInvocation2(
-    MethodInvocation node, {
-    required Object? element,
-    required List<String> typeArgumentTypes,
-    required String invokeType,
-    required String type,
-  }) {
-    assertElement(node.methodName, element);
-    assertTypeArgumentTypes(node, typeArgumentTypes);
-    assertType(node.staticInvokeType, invokeType);
-    assertType(node.staticType, type);
-  }
-
   void assertNamedParameterRef(String search, String name) {
     var ref = findNode.simple(search);
     assertElement(ref, findElement.parameter(name));
@@ -620,8 +518,15 @@
     assertType(node.staticType, type);
   }
 
-  void assertResolvedNodeText(AstNode node, String expected) {
-    var actual = _resolvedNodeText(node);
+  void assertResolvedNodeText(
+    AstNode node,
+    String expected, {
+    bool skipArgumentList = false,
+  }) {
+    var actual = _resolvedNodeText(
+      node,
+      skipArgumentList: skipArgumentList,
+    );
     if (actual != expected) {
       print(actual);
       NodeTextExpectationsCollector.add(actual);
@@ -921,7 +826,7 @@
 
   /// Create a new file with the [path] and [content], resolve it into [result].
   Future<void> resolveFileCode(String path, String content) {
-    newFile(path, content: content);
+    newFile2(path, content);
     return resolveFile2(path);
   }
 
@@ -989,33 +894,21 @@
     fail('Expected SimpleIdentifier: (${node.runtimeType}) $node');
   }
 
-  ConstructorElement _getConstructorElement(
-      ClassElement classElement, String? constructorName) {
-    var constructorElement = constructorName == null
-        ? classElement.unnamedConstructor
-        : classElement.getNamedConstructor(constructorName);
-    return constructorElement ??
-        fail("No constructor '${constructorName ?? '<unnamed>'}' in class "
-            "'${classElement.name}'.");
-  }
-
-  String _resolvedNodeText(AstNode node) {
+  String _resolvedNodeText(
+    AstNode node, {
+    bool skipArgumentList = false,
+  }) {
     var buffer = StringBuffer();
     node.accept(
       ResolvedAstPrinter(
         selfUriStr: result.uri.toString(),
         sink: buffer,
         indent: '',
+        skipArgumentList: skipArgumentList,
       ),
     );
     return buffer.toString();
   }
-
-  static String _extractReturnType(String invokeType) {
-    int functionIndex = invokeType.indexOf(' Function');
-    expect(functionIndex, isNonNegative);
-    return invokeType.substring(0, functionIndex);
-  }
 }
 
 class _ElementMatcher extends Matcher {
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index 5ff9302..eb4521e 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -44,6 +44,7 @@
 import 'library_element_test.dart' as library_element;
 import 'local_function_test.dart' as local_function;
 import 'local_variable_test.dart' as local_variable;
+import 'macro_test.dart' as macro;
 import 'metadata_test.dart' as metadata;
 import 'method_declaration_test.dart' as method_declaration;
 import 'method_invocation_test.dart' as method_invocation;
@@ -66,6 +67,7 @@
 import 'type_inference/test_all.dart' as type_inference;
 import 'type_literal_test.dart' as type_literal;
 import 'type_name_test.dart' as type_name;
+import 'variance_test.dart' as variance_test;
 import 'yield_statement_test.dart' as yield_statement;
 
 main() {
@@ -107,6 +109,7 @@
     library_element.main();
     local_function.main();
     local_variable.main();
+    macro.main();
     metadata.main();
     method_declaration.main();
     method_invocation.main();
@@ -128,6 +131,7 @@
     type_inference.main();
     type_literal.main();
     type_name.main();
+    variance_test.main();
     yield_statement.main();
     defineReflectiveTests(UpdateNodeTextExpectations);
   }, name: 'resolution');
diff --git a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
index 444c894..f478f61 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
@@ -19,7 +19,7 @@
 class TopLevelVariableTest extends PubPackageResolutionTest
     with TopLevelVariableTestCases {
   test_type_inferred_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 var a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index 8112a55..48e4fb1 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -11,12 +11,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionMethodsTest);
+    defineReflectiveTests(ExtensionMethodsWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ExtensionMethodsTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ExtensionMethodsTestCases {}
+    with ExtensionMethodsTestCases {}
 
 mixin ExtensionMethodsTestCases on ResolutionTest {
   test_implicit_getter() async {
@@ -75,16 +76,49 @@
   List<T> bar(List<T> other) => other.foo();
 }
 ''');
-    assertMethodInvocation2(
-      findNode.methodInvocation('other.foo()'),
-      element: elementMatcher(
-        findElement.method('foo'),
-        substitution: {'T': 'T'},
-      ),
-      typeArgumentTypes: [],
-      invokeType: 'List<T> Function()',
-      type: 'List<T>',
-    );
+
+    var node = findNode.methodInvocation('other.foo()');
+    if (result.libraryElement.isNonNullableByDefault) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: other
+    staticElement: other@75
+    staticType: List<T>
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: MethodMember
+      base: self::@extension::E::@method::foo
+      substitution: {T: T}
+    staticType: List<T> Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: List<T> Function()
+  staticType: List<T>
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: other
+    staticElement: other@75
+    staticType: List<T*>*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: MethodMember
+      base: self::@extension::E::@method::foo
+      substitution: {T: T*}
+    staticType: List<T*>* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: List<T*>* Function()*
+  staticType: List<T*>*
+''');
+    }
   }
 
   test_implicit_method_onTypeParameter() async {
@@ -171,28 +205,47 @@
 }
 ''');
 
+    var node = findNode.methodInvocation('test();');
     if (result.libraryElement.isNonNullableByDefault) {
-      assertMethodInvocation2(
-        findNode.methodInvocation('test();'),
-        element: elementMatcher(
-          findElement.method('test'),
-          substitution: {'T': 'S'},
-        ),
-        typeArgumentTypes: [],
-        invokeType: 'S Function(S) Function()',
-        type: 'S Function(S)',
-      );
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@87
+    staticType: S
+  operator: .
+  methodName: SimpleIdentifier
+    token: test
+    staticElement: MethodMember
+      base: self::@extension::Test::@method::test
+      substitution: {T: S}
+    staticType: S Function(S) Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: S Function(S) Function()
+  staticType: S Function(S)
+''');
     } else {
-      assertMethodInvocation2(
-        findNode.methodInvocation('test();'),
-        element: elementMatcher(
-          findElement.method('test'),
-          substitution: {'T': 'num'},
-        ),
-        typeArgumentTypes: [],
-        invokeType: 'num Function(num) Function()',
-        type: 'num Function(num)',
-      );
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@87
+    staticType: S*
+  operator: .
+  methodName: SimpleIdentifier
+    token: test
+    staticElement: MethodMember
+      base: self::@extension::Test::@method::test
+      substitution: {T: num*}
+    staticType: num* Function(num*)* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*)* Function()*
+  staticType: num* Function(num*)*
+''');
     }
   }
 
@@ -567,3 +620,7 @@
     );
   }
 }
+
+@reflectiveTest
+class ExtensionMethodsWithoutNullSafetyTest extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, ExtensionMethodsTestCases {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index 11676d2..c761dab 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -18,7 +18,7 @@
 class FunctionExpressionTest extends PubPackageResolutionTest
     with FunctionExpressionTestCases {
   test_contextFunctionType_nonNullify() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 
 int Function(int a) v;
@@ -42,7 +42,7 @@
   }
 
   test_contextFunctionType_nonNullify_returnType_takeActual() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 
 void foo(int Function() x) {}
@@ -60,7 +60,7 @@
   }
 
   test_contextFunctionType_nonNullify_returnType_takeContext() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 
 void foo(int Function() x) {}
@@ -117,7 +117,7 @@
   }
 
   test_optOut_downward_returnType_expressionBody_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo(Map<String, String> Function() f) {}
 ''');
     await resolveTestCode('''
@@ -460,7 +460,7 @@
   }
 
   test_noContext_returnType_sync_blockBody_notNullable_switch_onEnum_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 enum E { a, b }
 ''');
 
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
new file mode 100644
index 0000000..f6700c42
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
@@ -0,0 +1,247 @@
+// 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:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(HorizontalInferenceEnabledTest);
+    defineReflectiveTests(HorizontalInferenceDisabledTest);
+  });
+}
+
+@reflectiveTest
+class HorizontalInferenceDisabledTest extends PubPackageResolutionTest
+    with HorizontalInferenceTestCases {
+  @override
+  String get testPackageLanguageVersion => '2.17';
+}
+
+@reflectiveTest
+class HorizontalInferenceEnabledTest extends PubPackageResolutionTest
+    with HorizontalInferenceTestCases {
+  @override
+  List<String> get experiments =>
+      [...super.experiments, EnableString.inference_update_1];
+}
+
+mixin HorizontalInferenceTestCases on PubPackageResolutionTest {
+  bool get _isEnabled => experiments.contains(EnableString.inference_update_1);
+
+  test_closure_passed_to_dynamic() async {
+    await assertNoErrorsInCode('''
+test(dynamic d) => d(() {});
+''');
+    // No further assertions; we just want to make sure the interaction with a
+    // dynamic receiver doesn't lead to a crash.
+  }
+
+  test_closure_passed_to_identical() async {
+    await assertNoErrorsInCode('''
+test() => identical(() {}, () {});
+''');
+    // No further assertions; we just want to make sure the interaction between
+    // flow analysis for `identical` and deferred analysis of closures doesn't
+    // lead to a crash.
+  }
+
+  test_fold_inference() async {
+    var code = '''
+example(List<int> list) {
+  var a = list.fold(0, (x, y) => x + y);
+}
+''';
+    if (_isEnabled) {
+      await assertErrorsInCode(code, [
+        error(HintCode.UNUSED_LOCAL_VARIABLE, 32, 1),
+      ]);
+      assertType(findElement.localVar('a').type, 'int');
+      assertType(findElement.parameter('x').type, 'int');
+      assertType(findElement.parameter('y').type, 'int');
+      expect(
+          findNode.binary('x + y').staticElement!.enclosingElement.name, 'num');
+    } else {
+      await assertErrorsInCode(code, [
+        error(HintCode.UNUSED_LOCAL_VARIABLE, 32, 1),
+        error(
+            CompileTimeErrorCode
+                .UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE,
+            61,
+            1),
+      ]);
+    }
+  }
+
+  test_horizontal_inference_closure_as_parameter_type() async {
+    // Test the case where a closure is passed to a parameter whose declared
+    // type is not a function but instead a type parameter.  We should still
+    // pick up the appropriate dependencies.
+    await assertErrorsInCode('''
+U f<T, U>(T t, U Function(T) g) => throw '';
+test() {
+  var a = f(() => 0, (h) => [h()]);
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 60, 1),
+      if (!_isEnabled)
+        error(
+            CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE, 83, 1),
+    ]);
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![0],
+        'int Function()');
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![1],
+        _isEnabled ? 'List<int>' : 'List<dynamic>');
+    assertType(
+        findNode.methodInvocation('f(').staticInvokeType,
+        _isEnabled
+            ? 'List<int> Function(int Function(), '
+                'List<int> Function(int Function()))'
+            : 'List<dynamic> Function(int Function(), '
+                'List<dynamic> Function(int Function()))');
+    assertType(findNode.simpleParameter('h)').declaredElement!.type,
+        _isEnabled ? 'int Function()' : 'Object?');
+    assertType(findNode.variableDeclaration('a =').declaredElement!.type,
+        _isEnabled ? 'List<int>' : 'List<dynamic>');
+  }
+
+  test_horizontal_inference_propagate_to_earlier_closure() async {
+    await assertErrorsInCode('''
+U f<T, U>(U Function(T) g, T Function() h) => throw '';
+test() {
+  var a = f((x) => [x], () => 0);
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 71, 1),
+    ]);
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![1],
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+    assertType(
+        findNode.methodInvocation('f(').staticInvokeType,
+        _isEnabled
+            ? 'List<int> Function(List<int> Function(int), int Function())'
+            : 'List<Object?> Function(List<Object?> Function(int), int Function())');
+    assertType(findNode.simpleParameter('x)').declaredElement!.type,
+        _isEnabled ? 'int' : 'Object?');
+    assertType(findNode.variableDeclaration('a =').declaredElement!.type,
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+  }
+
+  test_horizontal_inference_propagate_to_later_closure() async {
+    await assertErrorsInCode('''
+U f<T, U>(T Function() g, U Function(T) h) => throw '';
+test() {
+  var a = f(() => 0, (x) => [x]);
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 71, 1),
+    ]);
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![1],
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+    assertType(
+        findNode.methodInvocation('f(').staticInvokeType,
+        _isEnabled
+            ? 'List<int> Function(int Function(), List<int> Function(int))'
+            : 'List<Object?> Function(int Function(), List<Object?> Function(int))');
+    assertType(findNode.simpleParameter('x)').declaredElement!.type,
+        _isEnabled ? 'int' : 'Object?');
+    assertType(findNode.variableDeclaration('a =').declaredElement!.type,
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+  }
+
+  test_horizontal_inference_propagate_to_return_type() async {
+    await assertErrorsInCode('''
+U f<T, U>(T t, U Function(T) g) => throw '';
+test() {
+  var a = f(0, (x) => [x]);
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 60, 1),
+    ]);
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
+    assertType(findNode.methodInvocation('f(').typeArgumentTypes![1],
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+    assertType(
+        findNode.methodInvocation('f(').staticInvokeType,
+        _isEnabled
+            ? 'List<int> Function(int, List<int> Function(int))'
+            : 'List<Object?> Function(int, List<Object?> Function(int))');
+    assertType(findNode.simpleParameter('x)').declaredElement!.type,
+        _isEnabled ? 'int' : 'Object?');
+    assertType(findNode.variableDeclaration('a =').declaredElement!.type,
+        _isEnabled ? 'List<int>' : 'List<Object?>');
+  }
+
+  test_horizontal_inference_simple() async {
+    await assertNoErrorsInCode('''
+void f<T>(T t, void Function(T) g) {}
+test() => f(0, (x) {});
+''');
+    assertType(
+        findNode.methodInvocation('f(').typeArgumentTypes!.single, 'int');
+    assertType(findNode.methodInvocation('f(').staticInvokeType,
+        'void Function(int, void Function(int))');
+    assertType(findNode.simpleParameter('x').declaredElement!.type,
+        _isEnabled ? 'int' : 'Object?');
+  }
+
+  test_horizontal_inference_simple_named() async {
+    await assertNoErrorsInCode('''
+void f<T>({required T t, required void Function(T) g}) {}
+test() => f(t: 0, g: (x) {});
+''');
+    assertType(
+        findNode.methodInvocation('f(').typeArgumentTypes!.single, 'int');
+    assertType(findNode.methodInvocation('f(').staticInvokeType,
+        'void Function({required void Function(int) g, required int t})');
+    assertType(findNode.simpleParameter('x').declaredElement!.type,
+        _isEnabled ? 'int' : 'Object?');
+  }
+
+  test_write_capture_deferred() async {
+    await assertNoErrorsInCode('''
+test(int? i) {
+  if (i != null) {
+    f(() { i = null; }, i); // (1)
+    i; // (2)
+  }
+}
+void f(void Function() g, Object? x) {}
+''');
+    // With the feature enabled, analysis of the closure is deferred until after
+    // all the other arguments to `f`, so the `i` at (1) is not yet write
+    // captured and retains its promoted value.  With the experiment disabled,
+    // it is write captured immediately.
+    assertType(findNode.simple('i); // (1)'), _isEnabled ? 'int' : 'int?');
+    // At (2), after the call to `f`, the write capture has taken place
+    // regardless of whether the experiment is enabled.
+    assertType(findNode.simple('i; // (2)'), 'int?');
+  }
+
+  test_write_capture_deferred_named() async {
+    await assertNoErrorsInCode('''
+test(int? i) {
+  if (i != null) {
+    f(g: () { i = null; }, x: i); // (1)
+    i; // (2)
+  }
+}
+void f({required void Function() g, Object? x}) {}
+''');
+    // With the feature enabled, analysis of the closure is deferred until after
+    // all the other arguments to `f`, so the `i` at (1) is not yet write
+    // captured and retains its promoted value.  With the experiment disabled,
+    // it is write captured immediately.
+    assertType(findNode.simple('i); // (1)'), _isEnabled ? 'int' : 'int?');
+    // At (2), after the call to `f`, the write capture has taken place
+    // regardless of whether the experiment is enabled.
+    assertType(findNode.simple('i; // (2)'), 'int?');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
index 39f7df5..fd9aae8 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
@@ -26,13 +26,25 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('f(null)'),
-      element: findElement.topFunction('f'),
-      typeArgumentTypes: ['Iterable<int>?'],
-      invokeType: 'Iterable<int>? Function(Iterable<int>?)',
-      type: 'Iterable<int>?',
-    );
+    var node = findNode.methodInvocation('f(null)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>(T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NullLiteral
+        literal: null
+        staticType: Null
+    rightParenthesis: )
+  staticInvokeType: Iterable<int>? Function(Iterable<int>?)
+  staticType: Iterable<int>?
+  typeArgumentTypes
+    Iterable<int>?
+''');
   }
 
   test_nested_hasNull_1() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
index 2d38f07..d081d5f 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
@@ -41,13 +41,25 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('f(null)'),
-      element: findElement.topFunction('f'),
-      typeArgumentTypes: ['Map<int, double>?'],
-      invokeType: 'Map<int, double>? Function(Map<int, double>?)',
-      type: 'Map<int, double>?',
-    );
+    var node = findNode.methodInvocation('f(null)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>(T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NullLiteral
+        literal: null
+        staticType: Null
+    rightParenthesis: )
+  staticInvokeType: Map<int, double>? Function(Map<int, double>?)
+  staticType: Map<int, double>?
+  typeArgumentTypes
+    Map<int, double>?
+''');
   }
 
   test_noContext_noTypeArgs_spread_never() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
index 17dfe68..ade0cef 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
@@ -4,12 +4,14 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../node_text_expectations.dart';
 import 'collection_elements_test.dart' as collection_elements;
 import 'conditional_expression_test.dart' as conditional_expression;
 import 'equality_expressions_test.dart' as equality_expressions;
 import 'extension_methods_test.dart' as extension_methods;
 import 'function_expression_test.dart' as function_expression;
 import 'function_test.dart' as function;
+import 'inference_update_1_test.dart' as inference_update_1;
 import 'list_literal_test.dart' as list_literal;
 import 'local_variable_test.dart' as local_variable;
 import 'logical_boolean_expressions_test.dart' as logical_boolean_expressions;
@@ -28,6 +30,7 @@
     extension_methods.main();
     function.main();
     function_expression.main();
+    inference_update_1.main();
     list_literal.main();
     local_variable.main();
     logical_boolean_expressions.main();
@@ -37,5 +40,6 @@
     tear_off.main();
     throw_expression.main();
     type_test_expressions.main();
+    defineReflectiveTests(UpdateNodeTextExpectations);
   }, name: 'type inference');
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
index 866b8c3..a0a53a1 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
@@ -28,7 +28,7 @@
   }
 
   test_class_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class C<T> {}
 ''');
     await assertNoErrorsInCode('''
@@ -119,7 +119,7 @@
   }
 
   test_classAlias_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class C<T> {}
 typedef CA<T> = C<T>;
 ''');
@@ -163,7 +163,7 @@
   }
 
   test_functionAlias_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 typedef Fn<T> = void Function(T);
 ''');
     await assertNoErrorsInCode('''
@@ -204,7 +204,7 @@
   }
 
   test_functionAlias_targetOfMethodCall_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 typedef Fn<T> = void Function(T);
 ''');
     await assertErrorsInCode('''
@@ -433,7 +433,7 @@
   }
 
   test_class_importPrefix() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class C<T> {}
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index 2e4fc17..1e9d9ca 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -24,7 +24,7 @@
   }
 
   test_optIn_fromOptOut_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
@@ -43,7 +43,7 @@
   }
 
   test_optIn_fromOptOut_class_generic_toBounds() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T extends num> {}
 ''');
 
@@ -62,7 +62,7 @@
   }
 
   test_optIn_fromOptOut_class_generic_toBounds_dynamic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 ''');
 
@@ -81,7 +81,7 @@
   }
 
   test_optIn_fromOptOut_class_generic_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 ''');
 
@@ -100,7 +100,7 @@
   }
 
   test_optIn_fromOptOut_functionTypeAlias() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F = int Function(bool);
 ''');
 
@@ -124,7 +124,7 @@
   }
 
   test_optIn_fromOptOut_functionTypeAlias_generic_dynamic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F<T> = T Function(bool);
 ''');
 
@@ -148,7 +148,7 @@
   }
 
   test_optIn_fromOptOut_functionTypeAlias_generic_toBounds() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F<T extends num> = T Function(bool);
 ''');
 
@@ -172,7 +172,7 @@
   }
 
   test_optIn_fromOptOut_functionTypeAlias_generic_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef F<T> = T Function(bool);
 ''');
 
@@ -196,7 +196,7 @@
   }
 
   test_optOut_fromOptIn_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A {}
 ''');
@@ -217,7 +217,7 @@
   }
 
   test_optOut_fromOptIn_class_generic_toBounds() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A<T extends num> {}
 ''');
@@ -238,7 +238,7 @@
   }
 
   test_optOut_fromOptIn_class_generic_toBounds_dynamic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A<T> {}
 ''');
@@ -259,7 +259,7 @@
   }
 
   test_optOut_fromOptIn_class_generic_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A<T> {}
 ''');
@@ -280,7 +280,7 @@
   }
 
   test_optOut_fromOptIn_functionTypeAlias() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 typedef F = int Function();
 ''');
@@ -301,7 +301,7 @@
   }
 
   test_optOut_fromOptIn_functionTypeAlias_generic_toBounds() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 typedef F<T extends num> = T Function();
 ''');
@@ -322,7 +322,7 @@
   }
 
   test_optOut_fromOptIn_functionTypeAlias_generic_toBounds_dynamic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 typedef F<T> = T Function();
 ''');
@@ -343,7 +343,7 @@
   }
 
   test_optOut_fromOptIn_functionTypeAlias_generic_typeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 typedef F<T> = T Function();
 ''');
@@ -437,7 +437,7 @@
   }
 
   test_typeAlias_asParameterType_interfaceType_none_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef X<T> = Map<int, T>;
 ''');
     await assertNoErrorsInCode(r'''
@@ -473,7 +473,7 @@
   }
 
   test_typeAlias_asParameterType_interfaceType_question_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef X<T> = List<T?>;
 ''');
     await assertNoErrorsInCode(r'''
@@ -509,7 +509,7 @@
   }
 
   test_typeAlias_asParameterType_Never_none_inLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 typedef X = Never;
 ''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/variance_test.dart b/pkg/analyzer/test/src/dart/resolution/variance_test.dart
new file mode 100644
index 0000000..96e40ac
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/variance_test.dart
@@ -0,0 +1,159 @@
+// 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:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(VarianceTest);
+  });
+}
+
+@reflectiveTest
+class VarianceTest extends PubPackageResolutionTest {
+  @override
+  List<String> get experiments => [
+        ...super.experiments,
+        EnableString.variance,
+      ];
+
+  test_inference_in_parameter() async {
+    await assertNoErrorsInCode('''
+class Contravariant<in T> {}
+
+class Exactly<inout T> {}
+
+class Upper {}
+class Middle extends Upper {}
+
+Exactly<T> inferContraContra<T>(Contravariant<T> x, Contravariant<T> y)
+    => new Exactly<T>();
+
+main() {
+  inferContraContra(Contravariant<Upper>(), Contravariant<Middle>());
+}
+    ''');
+
+    var node = findNode.methodInvocation('inferContraContra(');
+    assertResolvedNodeText(
+        node,
+        r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: inferContraContra
+    staticElement: self::@function::inferContraContra
+    staticType: Exactly<T> Function<T>(Contravariant<T>, Contravariant<T>)
+  staticInvokeType: Exactly<Middle> Function(Contravariant<Middle>, Contravariant<Middle>)
+  staticType: Exactly<Middle>
+  typeArgumentTypes
+    Middle
+''',
+        skipArgumentList: true);
+  }
+
+  test_inference_in_parameter_downwards() async {
+    await assertErrorsInCode('''
+class B<in T> {
+  B(List<T> x);
+  void set x(T val) {}
+}
+
+main() {
+  B<int> b = B(<num>[])..x=2.2;
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 76, 1),
+    ]);
+
+    var node = findNode.instanceCreation('B(<num>');
+    assertResolvedNodeText(
+        node,
+        r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: B
+        staticElement: self::@class::B
+        staticType: null
+      type: B<num>
+    staticElement: ConstructorMember
+      base: self::@class::B::@constructor::•
+      substitution: {T: num}
+  staticType: B<num>
+''',
+        skipArgumentList: true);
+  }
+
+  test_inference_inout_parameter() async {
+    await assertErrorsInCode('''
+class Invariant<inout T> {}
+
+class Exactly<inout T> {}
+
+Exactly<T> inferInvInv<T>(Invariant<T> x, Invariant<T> y) => new Exactly<T>();
+
+main() {
+  inferInvInv(Invariant<String>(), Invariant<int>());
+}
+''', [
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 147, 11),
+      error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 159, 19),
+      error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 180, 16),
+    ]);
+
+    var node = findNode.methodInvocation('inferInvInv(');
+    assertResolvedNodeText(
+        node,
+        r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: inferInvInv
+    staticElement: self::@function::inferInvInv
+    staticType: Exactly<T> Function<T>(Invariant<T>, Invariant<T>)
+  staticInvokeType: Exactly<Object> Function(Invariant<Object>, Invariant<Object>)
+  staticType: Exactly<Object>
+  typeArgumentTypes
+    Object
+''',
+        skipArgumentList: true);
+  }
+
+  test_inference_out_parameter() async {
+    await assertNoErrorsInCode('''
+class Covariant<out T> {}
+
+class Exactly<inout T> {}
+
+class Upper {}
+class Middle extends Upper {}
+
+Exactly<T> inferCovCov<T>(Covariant<T> x, Covariant<T> y) => new Exactly<T>();
+
+main() {
+  inferCovCov(Covariant<Upper>(), Covariant<Middle>());
+}
+''');
+
+    var node = findNode.methodInvocation('inferCovCov(');
+    assertResolvedNodeText(
+        node,
+        r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: inferCovCov
+    staticElement: self::@function::inferCovCov
+    staticType: Exactly<T> Function<T>(Covariant<T>, Covariant<T>)
+  staticInvokeType: Exactly<Upper> Function(Covariant<Upper>, Covariant<Upper>)
+  staticType: Exactly<Upper>
+  typeArgumentTypes
+    Upper
+''',
+        skipArgumentList: true);
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
index 23db79e..972c387 100644
--- a/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/yield_statement_test.dart
@@ -18,7 +18,7 @@
   setUp() {
     super.setUp();
 
-    newFile('$testPackageLibPath/my_stream.dart', content: r'''
+    newFile2('$testPackageLibPath/my_stream.dart', r'''
 import 'dart:async';
 
 export 'dart:async';
diff --git a/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart b/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
index c2fe3b1..f80c2d8 100644
--- a/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
+++ b/pkg/analyzer/test/src/dart/resolver/exit_detector_test.dart
@@ -114,7 +114,7 @@
   void _assertHasReturn(String expressionCode, bool expected) {
     var path = convertPath('/test/lib/test.dart');
 
-    newFile(path, content: '''
+    newFile2(path, '''
 void f() { // ref
   $expressionCode;
 }
@@ -903,7 +903,7 @@
   void _assertHasReturn(String statementCode, bool expected) {
     var path = convertPath('/test/lib/test.dart');
 
-    newFile(path, content: '''
+    newFile2(path, '''
 void f() { // ref
   $statementCode
 }
diff --git a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
index 6e9b9ef..ebc6338 100644
--- a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
+++ b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
@@ -244,7 +244,7 @@
       parent = parent.getChildAssumingFolder(segments[i]);
     }
     File file = parent.getChildAssumingFile(segments[last]);
-    newFile(file.path, content: content);
+    newFile2(file.path, content);
   }
 
   String _librariesFileContent() => '''
diff --git a/pkg/analyzer/test/src/diagnostics/abstract_super_member_reference_test.dart b/pkg/analyzer/test/src/diagnostics/abstract_super_member_reference_test.dart
index da65cb3..59a6b97 100644
--- a/pkg/analyzer/test/src/diagnostics/abstract_super_member_reference_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abstract_super_member_reference_test.dart
@@ -30,13 +30,27 @@
       error(CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE, 82, 3),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo(0)'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function(int)',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('super.foo(0)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: M
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
   }
 
   test_methodInvocation_mixinHasConcrete() async {
@@ -56,13 +70,23 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo()'),
-      element: findElement.method('foo', of: 'M'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('super.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::M::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
   }
 
   test_methodInvocation_mixinHasNoSuchMethod() async {
@@ -80,13 +104,23 @@
       error(CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE, 107, 3),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo()'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('super.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
   }
 
   test_methodInvocation_superHasAbstract() async {
@@ -106,13 +140,27 @@
       error(CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE, 95, 3),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo(0)'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function(int)',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('super.foo(0)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
   }
 
   test_methodInvocation_superHasConcrete_mixinHasAbstract() async {
@@ -132,13 +180,23 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo(); // ref'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('foo(); // ref');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
   }
 
   test_methodInvocation_superHasNoSuchMethod() async {
@@ -154,13 +212,23 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo()'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
+    var node = findNode.methodInvocation('super.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: int Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int
+''');
   }
 
   test_methodInvocation_superSuperHasConcrete() async {
@@ -180,13 +248,23 @@
 }
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.foo()'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('super.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
   }
 
   test_propertyAccess_getter() async {
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart
index b22efa2..ee5cdfb 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart
@@ -16,10 +16,10 @@
 @reflectiveTest
 class AmbiguousExportTest extends PubPackageResolutionTest {
   test_class() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class N {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class N {}
 ''');
     await assertErrorsInCode(r'''
@@ -31,10 +31,10 @@
   }
 
   test_extensions_bothExported() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 extension E on String {}
 ''');
     await assertErrorsInCode(r'''
@@ -46,7 +46,7 @@
   }
 
   test_extensions_localAndExported() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {}
 ''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
index 81c91fd..ec177b1 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
@@ -20,11 +20,11 @@
 @reflectiveTest
 class AmbiguousImportTest extends PubPackageResolutionTest {
   test_annotation_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const foo = 0;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 const foo = 0;
 ''');
 
@@ -41,10 +41,10 @@
   }
 
   test_as() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -56,10 +56,10 @@
   }
 
   test_extends() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -72,10 +72,10 @@
   }
 
   test_implements() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -88,19 +88,19 @@
   }
 
   test_inPart() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}
 ''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}
 ''');
-    newFile('$testPackageLibPath/part.dart', content: '''
+    newFile2('$testPackageLibPath/part.dart', '''
 part of lib;
 class A extends N {}
 ''');
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 import 'lib1.dart';
 import 'lib2.dart';
@@ -120,10 +120,10 @@
   }
 
   test_instanceCreation() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -136,10 +136,10 @@
   }
 
   test_is() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -151,10 +151,10 @@
   }
 
   test_qualifier() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -168,7 +168,7 @@
   test_systemLibrary_nonSystemLibrary() async {
     // From the spec, "a declaration from a non-system library shadows
     // declarations from system libraries."
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class StreamController {}
 ''');
     await assertNoErrorsInCode('''
@@ -190,10 +190,10 @@
   }
 
   test_typeAnnotation() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -220,10 +220,10 @@
   }
 
   test_typeArgument_annotation() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -236,10 +236,10 @@
   }
 
   test_typeArgument_instanceCreation() async {
-    newFile("$testPackageLibPath/lib1.dart", content: '''
+    newFile2("$testPackageLibPath/lib1.dart", '''
 library lib1;
 class N {}''');
-    newFile("$testPackageLibPath/lib2.dart", content: '''
+    newFile2("$testPackageLibPath/lib2.dart", '''
 library lib2;
 class N {}''');
     await assertErrorsInCode('''
@@ -252,11 +252,11 @@
   }
 
   test_variable_read() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var x;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var x;
 ''');
 
@@ -273,11 +273,11 @@
   }
 
   test_variable_read_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var x;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var x;
 ''');
 
@@ -294,11 +294,11 @@
   }
 
   test_variable_write() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var x;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var x;
 ''');
 
@@ -321,11 +321,11 @@
   }
 
   test_variable_write_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var x;
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 var x;
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index 59d97c5..4a5a07d 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -210,7 +210,7 @@
 mixin ArgumentTypeNotAssignableTestCases on PubPackageResolutionTest {
   test_ambiguousClassName() async {
     // See dartbug.com/19624
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 class _A {}
 g(h(_A a)) {}''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
index a0c388c..d644c46 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_of_do_not_store_test.dart
@@ -296,7 +296,7 @@
   }
 
   test_topLevelVariable_libraryAnnotation() async {
-    newFile('$testPackageLibPath/library.dart', content: '''
+    newFile2('$testPackageLibPath/library.dart', '''
 @doNotStore
 library lib;
 
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
index cfa5128..34462f3 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
@@ -47,7 +47,7 @@
   }
 
   test_class_extends_implements_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class I<T> {}
 class A implements I<int> {}
 class B implements I<int?> {}
@@ -61,7 +61,7 @@
   }
 
   test_class_extends_optIn_implements_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 
 class B extends A<int> {}
@@ -86,7 +86,7 @@
   }
 
   test_class_mixed_viaLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 
 class Bi implements A<int> {}
@@ -95,7 +95,7 @@
 ''');
 
     // Both `Bi` and `Biq` implement `A<int*>` in legacy, so identical.
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.7
 import 'a.dart';
 
@@ -124,11 +124,11 @@
   }
 
   test_class_topMerge_optIn_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.5
 import 'a.dart';
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
index 6f8fad0..8988cf5 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
@@ -75,7 +75,7 @@
   }
 
   test_notGeneric_null_forNonNullable_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   final int f;
   const C(a) : f = a;
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
index 5cb3c4e..67cdfa0 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_param_type_mismatch_test.dart
@@ -131,7 +131,7 @@
   }
 
   test_int_to_double_reference_from_other_library_other_file_after() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 import 'test.dart';
 class D {
   final C c;
@@ -159,7 +159,7 @@
 }
 const C constant = const C(0);
 ''');
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 import 'test.dart';
 class D {
   final C c;
@@ -183,7 +183,7 @@
   }
 
   test_int_to_double_via_default_value_other_file_after() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class C {
   final double x;
   const C([this.x = 0]);
@@ -199,7 +199,7 @@
   }
 
   test_int_to_double_via_default_value_other_file_before() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class C {
   final double x;
   const C([this.x = 0]);
@@ -315,6 +315,34 @@
     ]);
   }
 
+  test_superFormalParameter_explicit() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  const A({int a = 0});
+}
+
+class B extends A {
+  static const f = B();
+
+  const B({super.a = 2});
+}
+''');
+  }
+
+  test_superFormalParameter_inherited() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  const A({int a = 0});
+}
+
+class B extends A {
+  static const f = B();
+
+  const B({super.a});
+}
+''');
+  }
+
   test_unknown_conditionalExpression_unknownCondition() async {
     await assertNoErrorsInCode(r'''
 const bool kIsWeb = identical(0, 0.0);
diff --git a/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart
index 31e9d07..f39c1e2 100644
--- a/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ConstDeferredClassTest extends PubPackageResolutionTest {
   test_namedConstructor() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {
   const A.b();
@@ -32,7 +32,7 @@
   }
 
   test_nonFunctionTypedef() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {
   const A();
@@ -51,7 +51,7 @@
   }
 
   test_unnamed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {
   const A();
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
index f5911ee..e51f7d3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
@@ -82,7 +82,7 @@
 
   test_CastError_intToDouble_constructor_importAnalyzedAfter() async {
     // See dartbug.com/35993
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class Foo {
   final double value;
 
@@ -112,7 +112,7 @@
 
   test_CastError_intToDouble_constructor_importAnalyzedBefore() async {
     // See dartbug.com/35993
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class Foo {
   final double value;
 
@@ -141,7 +141,7 @@
   }
 
   test_default_constructor_arg_empty_map_import() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class C {
   final Map<String, int> m;
   const C({this.m = const <String, int>{}})
@@ -290,7 +290,7 @@
   }
 
   test_invalid_constructorFieldInitializer_fromSeparateLibrary() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 class A<T> {
   final int f;
   const A() : f = T.foo;
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
index 2a14814..ba5f389 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
@@ -18,7 +18,7 @@
 class ConstInitializedWithNonConstantValueFromDeferredLibraryTest
     extends PubPackageResolutionTest {
   test_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const V = 1;
 ''');
@@ -36,7 +36,7 @@
   }
 
   test_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const V = 1;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
index 3f39cf5..0c5ecbe 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ConstWithNonTypeTest extends PubPackageResolutionTest {
   test_fromLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode('''
 import 'lib1.dart' as lib;
 void f() {
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
index 90bd671..29c62ef 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
@@ -75,7 +75,7 @@
   }
 
   test_unnamed_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {
   const A.name();
 }
diff --git a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
index 70ce1ae..768c741 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
@@ -19,7 +19,7 @@
 @reflectiveTest
 class CouldNotInferTest extends PubPackageResolutionTest {
   test_constructor_nullSafe_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class C<T extends Object> {
   C(T t);
 }
@@ -46,7 +46,7 @@
   }
 
   test_functionType_optOutOfGenericMetadata() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void f<X>() {}
 ''');
     await assertErrorsInCode('''
@@ -224,7 +224,7 @@
   }
 
   test_functionType_parameterIsObject_returnIsBound_prefixedFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 external T f<T extends num>(T a, T b);
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
index 1ef5d39..3483ddf 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
@@ -315,7 +315,7 @@
   }
 
   test_deadBlock_if_debugConst_prefixedIdentifier2() async {
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class A {
   static const bool DEBUG = false;
 }''');
@@ -327,7 +327,7 @@
   }
 
   test_deadBlock_if_debugConst_propertyAccessor() async {
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class A {
   static const bool DEBUG = false;
 }''');
diff --git a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
index 05b0e8b..7cfa142 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class DeadNullAwareExpressionTest extends PubPackageResolutionTest {
   test_assignCompound_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = 0;
 ''');
@@ -64,7 +64,7 @@
   }
 
   test_binary_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = 0;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
index 2475e1e..702d49f 100644
--- a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class DeferredImportOfExtensionTest extends PubPackageResolutionTest {
   test_deferredImport_withExtensions() {
-    newFile('$testPackageLibPath/foo.dart', content: '''
+    newFile2('$testPackageLibPath/foo.dart', '''
 extension E on C {}
 class C {}
 ''');
@@ -32,7 +32,7 @@
   }
 
   test_deferredImport_withHiddenExtensions() {
-    newFile('$testPackageLibPath/foo.dart', content: '''
+    newFile2('$testPackageLibPath/foo.dart', '''
 extension E on C {}
 class C {}
 ''');
@@ -46,7 +46,7 @@
   }
 
   test_deferredImport_withoutExtensions() {
-    newFile('$testPackageLibPath/foo.dart', content: '''
+    newFile2('$testPackageLibPath/foo.dart', '''
 class C {}
 ''');
     assertNoErrorsInCode('''
@@ -59,7 +59,7 @@
   }
 
   test_deferredImport_withShownNonExtensions() {
-    newFile('$testPackageLibPath/foo.dart', content: '''
+    newFile2('$testPackageLibPath/foo.dart', '''
 extension E on C {}
 class C {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 0b7b7e8..d1364a8 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -38,7 +38,7 @@
 class DeprecatedMemberUse_BasicWorkspaceTest extends PubPackageResolutionTest
     with DeprecatedMemberUse_BasicWorkspaceTestCases {
   test_instanceCreation_namedParameter_fromLegacy() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   A({@deprecated int a}) {}
 }
@@ -57,7 +57,7 @@
   }
 
   test_methodInvocation_namedParameter_ofFunction_fromLegacy() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 void foo({@deprecated int a}) {}
 ''');
 
@@ -74,7 +74,7 @@
   }
 
   test_methodInvocation_namedParameter_ofMethod_fromLegacy() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   void foo({@deprecated int a}) {}
 }
@@ -93,7 +93,7 @@
   }
 
   test_superConstructorInvocation_namedParameter_fromLegacy() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   A({@deprecated int a}) {}
 }
@@ -124,7 +124,7 @@
   }
 
   test_export() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 @deprecated
 library a;
 ''');
@@ -137,7 +137,7 @@
   }
 
   test_field_inDeprecatedConstructor() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   int x = 0;
@@ -158,7 +158,7 @@
   }
 
   test_fieldGet_implicitGetter() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   int foo = 0;
@@ -177,7 +177,7 @@
   }
 
   test_fieldSet_implicitSetter() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   int foo = 0;
@@ -196,7 +196,7 @@
   }
 
   test_import() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 @deprecated
 library a;
 ''');
@@ -211,7 +211,7 @@
   }
 
   test_method_inDeprecatedConstructor() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   void foo() {}
@@ -231,7 +231,7 @@
   }
 
   test_methodInvocation() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   void foo() {}
@@ -250,7 +250,7 @@
   }
 
   test_methodInvocation_withMessage() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @Deprecated('0.9')
   void foo() {}
@@ -269,7 +269,7 @@
   }
 
   test_parameter_named_ofFunction() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 void foo({@deprecated int a}) {}
 ''');
 
@@ -285,7 +285,7 @@
   }
 
   test_parameter_named_ofMethod() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   void foo({@deprecated int a}) {}
 }
@@ -303,7 +303,7 @@
   }
 
   test_setterInvocation() async {
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 class A {
   @deprecated
   set foo(int _) {}
@@ -332,7 +332,7 @@
 class DeprecatedMemberUse_BazelWorkspaceTest
     extends BazelWorkspaceResolutionTest {
   test_dart() async {
-    newFile('$workspaceRootPath/foo/bar/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/bar/lib/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -347,7 +347,7 @@
   }
 
   test_thirdPartyDart() async {
-    newFile('$workspaceThirdPartyDartPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceThirdPartyDartPath/aaa/lib/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -386,17 +386,17 @@
 
   test_differentPackage() async {
     newPubspecYamlFile('$workspaceRootPath/my', '');
-    newFile('$workspaceRootPath/my/BUILD.gn');
+    newFile2('$workspaceRootPath/my/BUILD.gn', '');
 
     newPubspecYamlFile('$workspaceRootPath/aaa', '');
-    newFile('$workspaceRootPath/aaa/BUILD.gn');
+    newFile2('$workspaceRootPath/aaa/BUILD.gn', '');
 
     _writeWorkspacePackagesFile({
       'aaa': '$workspaceRootPath/aaa/lib',
       'my': myPackageLibPath,
     });
 
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -412,13 +412,13 @@
 
   test_samePackage() async {
     newPubspecYamlFile('$workspaceRootPath/my', '');
-    newFile('$workspaceRootPath/my/BUILD.gn');
+    newFile2('$workspaceRootPath/my/BUILD.gn', '');
 
     _writeWorkspacePackagesFile({
       'my': myPackageLibPath,
     });
 
-    newFile('$myPackageLibPath/a.dart', content: r'''
+    newFile2('$myPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -448,7 +448,7 @@
 
     var buildDir = 'out/debug-x87_128';
     var genPath = '$workspaceRootPath/$buildDir/dartlang/gen';
-    newFile('$genPath/foo_package_config.json', content: '''{
+    newFile2('$genPath/foo_package_config.json', '''{
   "configVersion": 2,
   "packages": [ ${packages.join(', ')} ]
 }''');
@@ -489,7 +489,7 @@
         ..add(name: 'aaa', rootPath: '$workspaceRootPath/aaa'),
     );
 
-    newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
+    newFile2('$workspaceRootPath/aaa/lib/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -597,7 +597,7 @@
   }
 
   test_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -627,7 +627,7 @@
   }
 
   test_export() async {
-    newFile('$testPackageLibPath/deprecated_library.dart', content: r'''
+    newFile2('$testPackageLibPath/deprecated_library.dart', r'''
 @deprecated
 library deprecated_library;
 class A {}
@@ -713,7 +713,7 @@
   }
 
   test_hideCombinator() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -725,7 +725,7 @@
   }
 
   test_import() async {
-    newFile('$testPackageLibPath/deprecated_library.dart', content: r'''
+    newFile2('$testPackageLibPath/deprecated_library.dart', r'''
 @deprecated
 library deprecated_library;
 class A {}
@@ -1235,7 +1235,7 @@
   }
 
   test_showCombinator() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -1559,7 +1559,7 @@
 class DeprecatedMemberUseFromSamePackage_BazelWorkspaceTest
     extends BazelWorkspaceResolutionTest {
   test_it() async {
-    newFile('$myPackageLibPath/a.dart', content: r'''
+    newFile2('$myPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -1602,7 +1602,7 @@
     newPubspecYamlFile(testPackageRootPath, 'name: test');
     _createTestPackageBuildMarker();
 
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 @deprecated
 class A {}
 ''');
@@ -1637,9 +1637,9 @@
     required String pathInLib,
     required String content,
   }) {
-    newFile(
+    newFile2(
       '$testPackageGeneratedPath/$packageName/lib/$pathInLib',
-      content: content,
+      content,
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index 7fec331..34cbd6e 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -1556,12 +1556,12 @@
   test_unitMembers_part_library() async {
     var libPath = convertPath('$testPackageLibPath/lib.dart');
     var aPath = convertPath('$testPackageLibPath/a.dart');
-    newFile(libPath, content: '''
+    newFile2(libPath, '''
 part 'a.dart';
 
 class A {}
 ''');
-    newFile(aPath, content: '''
+    newFile2(aPath, '''
 part of 'lib.dart';
 
 class A {}
@@ -1581,16 +1581,16 @@
     var libPath = convertPath('$testPackageLibPath/lib.dart');
     var aPath = convertPath('$testPackageLibPath/a.dart');
     var bPath = convertPath('$testPackageLibPath/b.dart');
-    newFile(libPath, content: '''
+    newFile2(libPath, '''
 part 'a.dart';
 part 'b.dart';
 ''');
-    newFile(aPath, content: '''
+    newFile2(aPath, '''
 part of 'lib.dart';
 
 class A {}
 ''');
-    newFile(bPath, content: '''
+    newFile2(bPath, '''
 part of 'lib.dart';
 
 class A {}
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart
index ab9c46d..f607d26 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class DuplicateHiddenNameTest extends PubPackageResolutionTest {
   test_hidden() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
index 85eb884..343555d 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
@@ -17,11 +17,11 @@
 @reflectiveTest
 class DuplicateImportTest extends PubPackageResolutionTest {
   test_duplicateImport() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart';
 import 'lib1.dart';
@@ -34,13 +34,13 @@
   }
 
   test_importsHaveIdenticalShowHide() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart' as M show A hide B;
 import 'lib1.dart' as M show A hide B;
@@ -54,12 +54,12 @@
   }
 
   test_oneImportHasHide() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}
 class B {}''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart';
 import 'lib1.dart' hide A;
@@ -71,13 +71,13 @@
   }
 
   test_oneImportHasShow() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart';
 import 'lib1.dart' show A; // ignore: unnecessary_import
@@ -90,11 +90,11 @@
   }
 
   test_oneImportUsesAs() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart';
 import 'lib1.dart' as one;
@@ -107,11 +107,11 @@
   }
 
   test_twoDuplicateImports() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 library lib1;
 class A {}''');
 
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 library L;
 import 'lib1.dart';
 import 'lib1.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart
index 64ed945..19acede 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart
@@ -16,10 +16,10 @@
 @reflectiveTest
 class DuplicatePartTest extends PubPackageResolutionTest {
   test_no_duplicates() async {
-    newFile('$testPackageLibPath/part1.dart', content: '''
+    newFile2('$testPackageLibPath/part1.dart', '''
 part of lib;
 ''');
-    newFile('$testPackageLibPath/part2.dart', content: '''
+    newFile2('$testPackageLibPath/part2.dart', '''
 part of lib;
 ''');
     await assertNoErrorsInCode(r'''
@@ -30,7 +30,7 @@
   }
 
   test_sameSource() async {
-    newFile('$testPackageLibPath/part.dart', content: 'part of lib;');
+    newFile2('$testPackageLibPath/part.dart', 'part of lib;');
     await assertErrorsInCode(r'''
 library lib;
 part 'part.dart';
@@ -41,7 +41,7 @@
   }
 
   test_sameUri() async {
-    newFile('$testPackageLibPath/part.dart', content: 'part of lib;');
+    newFile2('$testPackageLibPath/part.dart', 'part of lib;');
     await assertErrorsInCode(r'''
 library lib;
 part 'part.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart
index e1e0cde..5a6f20b 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class DuplicateShownNameTest extends PubPackageResolutionTest {
   test_hidden() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/export_legacy_symbol_test.dart b/pkg/analyzer/test/src/diagnostics/export_legacy_symbol_test.dart
index 2f22ba9..c7549ef 100644
--- a/pkg/analyzer/test/src/diagnostics/export_legacy_symbol_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_legacy_symbol_test.dart
@@ -28,7 +28,7 @@
   }
 
   test_exportOptedIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -37,11 +37,11 @@
   }
 
   test_exportOptedOut_exportOptedIn_hasLegacySymbol() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.5
 export 'a.dart';
 class B {}
@@ -55,11 +55,11 @@
   }
 
   test_exportOptedOut_exportOptedIn_hideLegacySymbol() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.5
 export 'a.dart';
 class B {}
@@ -71,7 +71,7 @@
   }
 
   test_exportOptedOut_hasLegacySymbol() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 class A {}
 class B {}
diff --git a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
index d595b74..dbc6573 100644
--- a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ExportOfNonLibraryTest extends PubPackageResolutionTest {
   test_export_of_non_library() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 part of lib;
 ''');
     await assertErrorsInCode(r'''
@@ -29,7 +29,7 @@
   }
 
   test_libraryDeclared() async {
-    newFile('$testPackageLibPath/lib1.dart', content: "library lib1;");
+    newFile2('$testPackageLibPath/lib1.dart', "library lib1;");
     await assertNoErrorsInCode(r'''
 library L;
 export 'lib1.dart';
@@ -37,7 +37,7 @@
   }
 
   test_libraryNotDeclared() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertNoErrorsInCode(r'''
 library L;
 export 'lib1.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart
index effaba0..798558b 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ExtendsDeferredClassTest extends PubPackageResolutionTest {
   test_classTypeAlias() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
@@ -31,7 +31,7 @@
   }
 
   test_extends_deferred_class() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
@@ -45,7 +45,7 @@
   }
 
   test_extends_deferred_interfaceTypeTypedef() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 class B {}
diff --git a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
index e38a3bb..62547b2 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
@@ -128,7 +128,7 @@
   }
 
   test_undefined_ignore_part_exists_uriGenerated_nameIgnorable() async {
-    newFile('$testPackageLibPath/a.g.dart', content: r'''
+    newFile2('$testPackageLibPath/a.g.dart', r'''
 part of 'test.dart';
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart b/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart
index 61d3e2c..4c9374b 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ExtensionAsExpressionTest extends PubPackageResolutionTest {
   test_prefixedIdentifier() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {}
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
index 9b46e54..8279ab9 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
@@ -81,12 +81,34 @@
       error(CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER, 77,
           5),
     ]);
-    var invocation = findNode.methodInvocation('empty();');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('empty'),
-      'String Function()',
-    );
+
+    var node = findNode.methodInvocation('empty();');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleStringLiteral
+          literal: 'a'
+      rightParenthesis: )
+    extendedType: String
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: empty
+    staticElement: self::@extension::E::@method::empty
+    staticType: String Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: String Function()
+  staticType: String
+''');
   }
 
   test_setter() async {
diff --git a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
index 038a4ef..e8ac634 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
@@ -60,6 +60,23 @@
     ]);
   }
 
+  test_context() async {
+    // No context type should be supplied when type inferring an extra
+    // positional argument, even if there is an unmatched name parameter.
+    await assertErrorsInCode(r'''
+T f<T>() => throw '$T';
+g({int? named}) {}
+main() {
+  g(f());
+}
+''', [
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 56,
+          3),
+    ]);
+    assertType(
+        findNode.methodInvocation('f()').typeArgumentTypes!.single, 'dynamic');
+  }
+
   test_enumConstant() async {
     await assertErrorsInCode(r'''
 enum E {
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
index f24221e..5a9b9f2 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
@@ -185,6 +185,14 @@
 external final int x;
 ''');
   }
+
+  test_topLevel_final() async {
+    await assertErrorsInCode('''
+final int x;
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 10, 1),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
index 02c4641..d32935b 100644
--- a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
@@ -32,7 +32,7 @@
   }
 
   test_genericFunction_optOutOfGenericMetadata() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 typedef F = S Function<S>(S);
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
index 517130b..876c26e 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
@@ -54,7 +54,7 @@
   }
 
   test_class_instance_private_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -71,12 +71,12 @@
   }
 
   test_class_instance_private_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
 ''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 class B {
   set _foo(String _) {}
 }
@@ -90,7 +90,7 @@
   }
 
   test_class_instance_private_interfaces2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -107,7 +107,7 @@
   }
 
   test_class_instance_private_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   set _foo(String _) {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
index f20aedb..7f6a0b0 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
@@ -74,7 +74,7 @@
   }
 
   test_class_instance_private_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -91,12 +91,12 @@
   }
 
   test_class_instance_private_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
 ''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 class B {
   set _foo(String _) {}
 }
@@ -110,7 +110,7 @@
   }
 
   test_class_instance_private_interfaces2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -127,7 +127,7 @@
   }
 
   test_class_instance_private_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   set _foo(String _) {}
 }
@@ -326,6 +326,17 @@
     ]);
   }
 
+  test_enum_static_generatedGetter_thisSetter_index() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  static set values(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 5, 1),
+    ]);
+  }
+
   test_extension_instance() async {
     await assertErrorsInCode('''
 extension E on Object {
diff --git a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
index c85d229..db0c21d 100644
--- a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
@@ -20,7 +20,7 @@
 mixin IfElementConditionFromDeferredLibraryTestCases
     on PubPackageResolutionTest {
   test_inList_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -33,7 +33,7 @@
   }
 
   test_inList_nonConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -43,7 +43,7 @@
   }
 
   test_inList_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
@@ -53,7 +53,7 @@
   }
 
   test_inMap_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -66,7 +66,7 @@
   }
 
   test_inMap_notConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -76,7 +76,7 @@
   }
 
   test_inMap_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
@@ -86,7 +86,7 @@
   }
 
   test_inSet_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -99,7 +99,7 @@
   }
 
   test_inSet_notConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -109,7 +109,7 @@
   }
 
   test_inSet_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const bool c = true;''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
diff --git a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
index bfa2a8d..da1430f 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ImplementsDeferredClassTest extends PubPackageResolutionTest {
   test_class_implements() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
@@ -30,7 +30,7 @@
   }
 
   test_class_implements_interfaceTypeTypedef() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 typedef B = A;
@@ -45,7 +45,7 @@
   }
 
   test_classTypeAlias() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart b/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
index 5befb60..388dd30 100644
--- a/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
@@ -17,7 +17,7 @@
 class ImportDeferredLibraryWithLoadFunctionTest
     extends PubPackageResolutionTest {
   test_deferredImport_withLoadLibraryFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void loadLibrary() {}
 void f() {}
 ''');
@@ -33,7 +33,7 @@
   }
 
   test_deferredImport_withLoadLibraryFunction_hide() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void loadLibrary() {}
 void f() {}
 ''');
@@ -47,7 +47,7 @@
   }
 
   test_deferredImport_withLoadLibraryFunction_hide2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void loadLibrary() {}
 void f() {}
 void f2() {}
@@ -64,7 +64,7 @@
   }
 
   test_deferredImport_withLoadLibraryFunction_show() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void loadLibrary() {}
 void f() {}
 ''');
@@ -78,7 +78,7 @@
   }
 
   test_deferredImport_withoutLoadLibraryFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void f() {}
 ''');
 
@@ -91,7 +91,7 @@
   }
 
   test_nonDeferredImport_withLoadLibraryFunction() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void loadLibrary() {}
 void f() {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart
index 7a6c3ab..e56a81d 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_legacy_library_into_null_safe_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ImportOfLegacyLibraryInoNullSafeTest extends PubPackageResolutionTest {
   test_legacy_into_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.9
 class A {}
 ''');
@@ -29,7 +29,7 @@
   }
 
   test_legacy_into_nullSafe() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.9
 class A {}
 ''');
@@ -43,7 +43,7 @@
   }
 
   test_nullSafe_into_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -55,7 +55,7 @@
   }
 
   test_nullSafe_into_nullSafe() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -66,9 +66,9 @@
   }
 
   test_nullSafe_into_nullSafe_part() async {
-    newFile('$testPackageLibPath/a.dart', content: '');
+    newFile2('$testPackageLibPath/a.dart', '');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 part of 'test.dart';
 import 'a.dart';
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
index 04c4fc3..77f8322 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ImportOfNonLibraryTest extends PubPackageResolutionTest {
   test_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 part of lib;
 class A {}
 ''');
@@ -31,7 +31,7 @@
   }
 
   test_part() async {
-    newFile('$testPackageLibPath/part.dart', content: r'''
+    newFile2('$testPackageLibPath/part.dart', r'''
 part of lib;
 class A{}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
index 8045084..805135e 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_case_expression_types_test.dart
@@ -17,7 +17,7 @@
 @reflectiveTest
 class InconsistentCaseExpressionTypesTest extends PubPackageResolutionTest {
   test_int_none_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 0;
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
index 617a0d2..e71a823 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
@@ -103,9 +103,9 @@
     var libraryPath = convertPath('$testPackageLibPath/a.dart');
     var partPath = convertPath('$testPackageLibPath/b.dart');
 
-    newFile(libraryPath, content: libraryContent);
+    newFile2(libraryPath, libraryContent);
 
-    newFile(partPath, content: partContent);
+    newFile2(partPath, partContent);
 
     await assertErrorsInFile2(libraryPath, libraryErrors);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_invocation_test.dart
index 67cc9aa..83ddae8 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_invocation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_invocation_test.dart
@@ -224,7 +224,7 @@
   }
 
   test_topLevelFunction_withImportPrefix_noInference() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 void f<T>() {}
 ''');
     await assertErrorsInCode('''
@@ -238,7 +238,7 @@
   }
 
   test_topLevelFunction_withImportPrefix_optionalTypeArgs() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'package:meta/meta.dart';
 @optionalTypeArgs
 void f<T>() {}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
index 518858a..31828e1 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
@@ -17,7 +17,7 @@
 class InvalidAnnotationFromDeferredLibraryTest
     extends PubPackageResolutionTest {
   test_constructor() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class C { const C(); }
 ''');
@@ -32,7 +32,7 @@
   }
 
   test_constructor_argument() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 const x = 0;
 ''');
     await assertErrorsInCode('''
@@ -50,7 +50,7 @@
   }
 
   test_from_deferred_library() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class V { const V(); }
 const v = const V();
@@ -66,7 +66,7 @@
   }
 
   test_namedConstructor() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class C { const C.name(); }
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart
index 00abc76..6212082 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart
@@ -66,7 +66,7 @@
   }
 
   test_getter_importWithPrefix() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 get V => 0;
 ''');
@@ -81,7 +81,7 @@
   }
 
   test_importWithPrefix_notConstantVariable() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 final V = 0;
 ''');
@@ -96,7 +96,7 @@
   }
 
   test_importWithPrefix_notVariableOrConstructorInvocation() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 typedef V();
 ''');
@@ -145,7 +145,7 @@
   }
 
   test_notClass_importWithPrefix() async {
-    newFile('$testPackageLibPath/annotations.dart', content: r'''
+    newFile2('$testPackageLibPath/annotations.dart', r'''
 class Property {
   final int value;
   const Property(this.value);
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
index 78185db..3958315 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
@@ -61,7 +61,7 @@
   }
 
   test_in_initializer_from_deferred_library_field() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const int c = 1;''');
     await assertErrorsInCode('''
@@ -77,7 +77,7 @@
   }
 
   test_in_initializer_from_deferred_library_field_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const int c = 1;
 ''');
@@ -94,7 +94,7 @@
   }
 
   test_in_initializer_from_deferred_library_redirecting() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const int c = 1;
 ''');
@@ -111,7 +111,7 @@
   }
 
   test_in_initializer_from_deferred_library_super() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const int c = 1;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
index c52be8b..2f9fb0c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
@@ -36,12 +36,12 @@
     MockPackages.addMetaPackageFiles(
       getFolder(metaPath),
     );
-    newFile('$testPackageBazelBinPath/my.packages');
+    newFile2('$testPackageBazelBinPath/my.packages', '');
     newFolder('$workspaceRootPath/bazel-out');
   }
 
   void test_exporterIsInBazelBinLib() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -56,7 +56,7 @@
   }
 
   void test_exporterIsInBazelBinLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -69,7 +69,7 @@
   }
 
   void test_exporterIsInGenfilesLib() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -84,7 +84,7 @@
   }
 
   void test_exporterIsInGenfilesLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -97,7 +97,7 @@
   }
 
   void test_exporterIsInLib() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -112,7 +112,7 @@
   }
 
   void test_exporterIsInLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -125,7 +125,7 @@
   }
 
   void test_exporterIsInTest() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -138,7 +138,7 @@
   }
 
   void test_internalIsInBazelBin() async {
-    newFile('$testPackageBazelBinPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageBazelBinPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -151,7 +151,7 @@
   }
 
   void test_internalIsInGenfiles() async {
-    newFile('$testPackageGenfilesPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageGenfilesPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -164,7 +164,7 @@
   }
 
   void test_internalIsInLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -188,7 +188,7 @@
 analysis. So, there is no context to analyze it.
 ''')
   void test_exporterInGeneratedLib() async {
-    newFile('$testPackageRootPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageRootPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -207,7 +207,7 @@
 analysis. So, there is no context to analyze it.
 ''')
   void test_exporterInGeneratedLibSrc() async {
-    newFile('$testPackageRootPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageRootPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -220,7 +220,7 @@
   }
 
   void test_exporterInLib() async {
-    newFile('$testPackageRootPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageRootPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -235,7 +235,7 @@
   }
 
   void test_exporterInLibSrc() async {
-    newFile('$testPackageRootPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageRootPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -248,7 +248,7 @@
   }
 
   void test_internalIsInGeneratedLibSrc() async {
-    newFile('$testPackageDartToolPath/lib/src/foo.dart', content: r'''
+    newFile2('$testPackageDartToolPath/lib/src/foo.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -262,7 +262,7 @@
 
   @override
   void test_internalIsLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -289,7 +289,7 @@
   }
 
   void test_exporterIsInLib() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -304,7 +304,7 @@
   }
 
   void test_exporterIsInLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -317,7 +317,7 @@
   }
 
   void test_exporterIsInTest() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -330,7 +330,7 @@
   }
 
   void test_internalIsLibSrc() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -350,7 +350,7 @@
   String get testPackageLibPath;
 
   void test_hideCombinator_internalHidden() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 class Two {}
@@ -362,7 +362,7 @@
   }
 
   void test_hideCombinator_internalNotHidden() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 class Two {}
@@ -376,7 +376,7 @@
   }
 
   void test_indirectlyViaFunction_parameter() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef int IntFunc(int x);
 int func(IntFunc f, int x) => f(x);
@@ -390,7 +390,7 @@
   }
 
   void test_indirectlyViaFunction_parameter_generic() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef IntFunc = int Function(int);
 int func(IntFunc f, int x) => f(x);
@@ -404,7 +404,7 @@
   }
 
   void test_indirectlyViaFunction_parameter_generic_typeArg() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef IntFunc<T> = int Function(T);
 int func(IntFunc<num> f, int x) => f(x);
@@ -418,7 +418,7 @@
   }
 
   void test_indirectlyViaFunction_returnType() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef int IntFunc(int x);
 IntFunc func() => (int x) => x;
@@ -432,7 +432,7 @@
   }
 
   void test_indirectlyViaFunction_typeArgument_bounded() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef int IntFunc(int x);
 void func<T extends IntFunc>() {}
@@ -446,7 +446,7 @@
   }
 
   void test_indirectlyViaFunction_typeArgument_unbounded() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal typedef int IntFunc(int x);
 void func<T>() {}
@@ -458,7 +458,7 @@
   }
 
   void test_noCombinators() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -471,11 +471,11 @@
   }
 
   void test_noCombinators_indirectExport() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 export 'bar.dart';
 ''');
 
-    newFile('$testPackageLibPath/src/bar.dart', content: r'''
+    newFile2('$testPackageLibPath/src/bar.dart', r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 ''');
@@ -488,7 +488,7 @@
   }
 
   void test_noCombinators_library() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 @internal
 library foo;
 
@@ -503,7 +503,7 @@
   }
 
   void test_noCombinators_library_notInternal() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 library foo;
 ''');
 
@@ -513,7 +513,7 @@
   }
 
   void test_noCombinators_noInternal() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 class One {}
 ''');
 
@@ -523,7 +523,7 @@
   }
 
   void test_showCombinator_internalNotShown() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 class Two {}
@@ -535,7 +535,7 @@
   }
 
   void test_showCombinator_internalShown() async {
-    newFile(testPackageImplementationFilePath, content: r'''
+    newFile2(testPackageImplementationFilePath, r'''
 import 'package:meta/meta.dart';
 @internal class One {}
 class Two {}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
index a411785..7343ea7 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
@@ -195,7 +195,7 @@
   }
 
   test_getter_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = 0;
 ''');
@@ -249,7 +249,7 @@
   /// report [StaticWarningCode.INVALID_NULL_AWARE_OPERATOR]. But we also
   /// report another error.
   test_getter_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int x = 0;
 ''');
     await assertErrorsInCode('''
@@ -264,7 +264,7 @@
   }
 
   test_index_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = [0];
 ''');
@@ -327,7 +327,7 @@
   }
 
   test_method_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = 0;
 ''');
@@ -386,7 +386,7 @@
   }
 
   test_nullableSpread_legacyType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = <int>[];
 ''');
@@ -460,7 +460,7 @@
   /// report [StaticWarningCode.INVALID_NULL_AWARE_OPERATOR]. But we also
   /// report another error.
   test_setter_prefix() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int x = 0;
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
index c44810c..57bb470 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
@@ -20,7 +20,7 @@
 class InvalidOverrideDifferentDefaultValuesNamedTest
     extends InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest {
   test_concrete_equal_optIn_extends_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A {
   void foo({int a = 0}) {}
@@ -39,7 +39,7 @@
   }
 
   test_concrete_equal_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo({int a = 0}) {}
 }
@@ -217,7 +217,7 @@
   }
 
   test_concrete_equal_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo([a = 0]) {}
 }
@@ -232,7 +232,7 @@
   }
 
   test_concrete_equal_otherLibrary_listLiteral() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class C {
   void foo({x: const ['x']}) {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
index 9c9fe63..11b7180 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
@@ -22,7 +22,7 @@
 class InvalidOverrideDifferentDefaultValuesPositionalTest
     extends InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest {
   test_concrete_equal_optIn_extends_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 class A {
   void foo([int a = 0]) {}
@@ -41,7 +41,7 @@
   }
 
   test_concrete_equal_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo([int a = 0]) {}
 }
@@ -231,7 +231,7 @@
   }
 
   test_concrete_equal_otherLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo([x = 0]) {}
 }
@@ -246,7 +246,7 @@
   }
 
   test_concrete_equal_otherLibrary_listLiteral() async {
-    newFile('$testPackageLibPath/other.dart', content: '''
+    newFile2('$testPackageLibPath/other.dart', '''
 class C {
   void foo([x = const ['x']]) {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index cc85b0c..9725362 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -215,7 +215,7 @@
   }
 
   test_method_parameter_functionTyped_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 abstract class A {
   A catchError(void Function(Object) a);
 }
@@ -232,7 +232,7 @@
   }
 
   test_method_parameter_interfaceOptOut_concreteOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo(Object a) {}
 }
@@ -249,7 +249,7 @@
   }
 
   test_mixedInheritance_1() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class B {
   List<int Function(int)> get a => [];
   set a(List<int Function(int)> _) {}
@@ -263,7 +263,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.7
 import 'a.dart';
 
@@ -281,7 +281,7 @@
   }
 
   test_mixedInheritance_2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class B {
   List<int Function(int)> get a => [];
   set a(List<int Function(int)> _) {}
@@ -295,7 +295,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart = 2.7
 import 'a.dart';
 
@@ -416,7 +416,7 @@
   }
 
   test_viaLegacy_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A1 {
   int m() => 0;
   int get g => 0;
@@ -430,7 +430,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart=2.6
 import 'a.dart';
 
@@ -455,7 +455,7 @@
   }
 
   test_viaLegacy_mixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A1 {
   int m() => 0;
   int get g => 0;
@@ -469,7 +469,7 @@
 }
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 // @dart=2.6
 import 'a.dart';
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
index 2fbaf44..98da1f6 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
@@ -37,12 +37,12 @@
   }
 
   test_insidePackage() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 class A {}
 ''');
-    newFile('$fooPackageRootPath/lib/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/a.dart', '''
 import 'src/a.dart';
 
 A a = A();
@@ -53,7 +53,7 @@
   }
 
   test_outsidePackage_class() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 class A {}
@@ -69,7 +69,7 @@
   }
 
   test_outsidePackage_constructor_named() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -87,7 +87,7 @@
   }
 
   test_outsidePackage_constructor_unnamed() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -105,7 +105,7 @@
   }
 
   test_outsidePackage_enum() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 enum E {one}
@@ -121,7 +121,7 @@
   }
 
   test_outsidePackage_enumValue() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 enum E {@internal one}
 ''');
@@ -136,7 +136,7 @@
   }
 
   test_outsidePackage_extensionMethod() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 extension E on String {
   @internal
@@ -154,7 +154,7 @@
   }
 
   test_outsidePackage_function() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a() => 1;
@@ -170,7 +170,7 @@
   }
 
   test_outsidePackage_function_generic() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a<T>() => 1;
@@ -186,7 +186,7 @@
   }
 
   test_outsidePackage_function_generic_tearoff() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a<T>() => 1;
@@ -202,7 +202,7 @@
   }
 
   test_outsidePackage_function_tearoff() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a() => 1;
@@ -218,7 +218,7 @@
   }
 
   test_outsidePackage_functionLiteralForInternalTypedef() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 @internal
 typedef IntFunc = int Function(int);
 int foo(IntFunc f, int x) => f(x);
@@ -232,7 +232,7 @@
   }
 
   test_outsidePackage_inCommentReference() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int get a => 1;
@@ -247,7 +247,7 @@
   }
 
   test_outsidePackage_library() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 @internal
 library a;
 import 'package:meta/meta.dart';
@@ -262,7 +262,7 @@
   }
 
   test_outsidePackage_method() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -280,7 +280,7 @@
   }
 
   test_outsidePackage_method_generic() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -298,7 +298,7 @@
   }
 
   test_outsidePackage_method_subclassed() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal int f() => 1;
@@ -317,7 +317,7 @@
   }
 
   test_outsidePackage_method_subclassed_overridden() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal int f() => 1;
@@ -336,7 +336,7 @@
   }
 
   test_outsidePackage_method_tearoff() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -354,7 +354,7 @@
   }
 
   test_outsidePackage_methodParameter_named() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   int m({@internal int a = 0}) => 1;
@@ -372,7 +372,7 @@
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/28066')
   test_outsidePackage_methodParameter_positional() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   int m([@internal int a = 0]) => 1;
@@ -389,7 +389,7 @@
   }
 
   test_outsidePackage_mixin() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 mixin A {}
@@ -405,7 +405,7 @@
   }
 
   test_outsidePackage_pairedWithProtected() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -426,7 +426,7 @@
   }
 
   test_outsidePackage_redirectingFactoryConstructor() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 class D implements C {
@@ -446,7 +446,7 @@
   }
 
   test_outsidePackage_setter() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal
@@ -466,7 +466,7 @@
   }
 
   test_outsidePackage_setter_compound() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   int get s() => 1;
@@ -488,7 +488,7 @@
   }
 
   test_outsidePackage_setter_questionQuestion() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   int get s() => 1;
@@ -510,7 +510,7 @@
   }
 
   test_outsidePackage_superConstructor() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal C();
@@ -529,7 +529,7 @@
   }
 
   test_outsidePackage_superConstructor_named() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 class C {
   @internal C.named();
@@ -548,7 +548,7 @@
   }
 
   test_outsidePackage_topLevelGetter() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int get a => 1;
@@ -564,7 +564,7 @@
   }
 
   test_outsidePackage_typedef() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 typedef t = void Function();
@@ -581,7 +581,7 @@
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/28066')
   test_outsidePackage_typedefParameter() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 typedef T = void Function({@internal int a = 1});
 ''');
@@ -596,7 +596,7 @@
   }
 
   test_outsidePackage_variable() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a = 1;
@@ -612,7 +612,7 @@
   }
 
   test_outsidePackage_variable_prefixed() async {
-    newFile('$fooPackageRootPath/lib/src/a.dart', content: '''
+    newFile2('$fooPackageRootPath/lib/src/a.dart', '''
 import 'package:meta/meta.dart';
 @internal
 int a = 1;
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
index 97f44e6..8b4a8e4 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
@@ -23,7 +23,7 @@
   }
 
   test_closure() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 
 class A {
@@ -31,7 +31,7 @@
   int a() => 42;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
@@ -59,14 +59,14 @@
   }
 
   test_extension_outsideClassAndFile() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   void a(int i) {}
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 extension E on A {
   e() {
@@ -95,14 +95,14 @@
   }
 
   test_field_outsideClassAndLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   int a = 0;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 abstract class B {
   int b() => new A().a;
@@ -128,14 +128,14 @@
   }
 
   test_fromSuperclassConstraint() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 abstract class A {
   @protected
   void foo() {}
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 mixin M on A {
   @override
@@ -150,14 +150,14 @@
   }
 
   test_function_outsideClassAndLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   void a(){ }
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 main() {
@@ -210,14 +210,14 @@
   }
 
   test_getter_outsideClassAndLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   int get a => 42;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 class B {
   A a = A();
@@ -244,7 +244,7 @@
   }
 
   test_inDocs() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 
 class A {
@@ -258,7 +258,7 @@
   int a() => 0;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 /// OK: [A.a], [A.b], [A.c].
 f() {}
@@ -269,14 +269,14 @@
   }
 
   test_method_outsideClassAndLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   void a() {}
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 class B {
@@ -355,14 +355,14 @@
     // TODO(srawlins): This test verifies that the analyzer **allows**
     // protected members to be called on objects other than `this`, which
     // violates the protected spec.
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
   void set a(int i) { }
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 class B {
   A a = A();
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
index 0387086..a5d17bd 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
@@ -23,7 +23,7 @@
   }
 
   test_differentLibrary_invalid() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'package:meta/meta.dart';
 
 class Parent {
@@ -45,7 +45,7 @@
   }
 
   test_differentLibrary_valid_onlyOverride() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'package:meta/meta.dart';
 
 class Parent {
@@ -65,7 +65,7 @@
   }
 
   test_differentLibrary_valid_overrideAndUse() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'package:meta/meta.dart';
 
 class Parent {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
index 2e35506..a14ecc8 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
@@ -22,7 +22,7 @@
     super.setUp();
 
     var angularMetaPath = '/packages/angular_meta';
-    newFile('$angularMetaPath/lib/angular_meta.dart', content: r'''
+    newFile2('$angularMetaPath/lib/angular_meta.dart', r'''
 library angular.meta;
 
 const _VisibleForTemplate visibleForTemplate = const _VisibleForTemplate();
@@ -40,13 +40,13 @@
   }
 
   test_export() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 
 @visibleForTemplate
 int fn0() => 1;
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 export 'lib1.dart' show fn0;
 ''');
 
@@ -55,14 +55,14 @@
   }
 
   test_functionInExtension() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 extension E on List {
   @visibleForTemplate
   int m() => 1;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   E([]).m();
@@ -76,14 +76,14 @@
   }
 
   test_functionInExtension_fromTemplate() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 extension E on List {
   @visibleForTemplate
   int m() => 1;
 }
 ''');
-    newFile('$testPackageLibPath/lib1.template.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.template.dart', r'''
 import 'lib1.dart';
 void main() {
   E([]).m();
@@ -95,14 +95,14 @@
   }
 
   test_method() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 class A {
   @visibleForTemplate
   void a(){ }
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 class B {
@@ -117,14 +117,14 @@
   }
 
   test_method_fromTemplate() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 class A {
   @visibleForTemplate
   void a(){ }
 }
 ''');
-    newFile('$testPackageLibPath/lib1.template.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.template.dart', r'''
 import 'lib1.dart';
 
 class B {
@@ -137,7 +137,7 @@
   }
 
   test_namedConstructor() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 class A {
   int _x;
@@ -146,7 +146,7 @@
   A.forTemplate(this._x);
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
@@ -163,7 +163,7 @@
   }
 
   test_propertyAccess() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 class A {
   @visibleForTemplate
@@ -173,7 +173,7 @@
   set b(_) => 7;
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
@@ -190,7 +190,7 @@
   }
 
   test_protectedAndForTemplate_usedAsProtected() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 import 'package:meta/meta.dart';
 class A {
@@ -199,7 +199,7 @@
   void a(){ }
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 class B extends A {
   void b() => new A().a();
@@ -211,7 +211,7 @@
   }
 
   test_protectedAndForTemplate_usedAsTemplate() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 import 'package:meta/meta.dart';
 class A {
@@ -220,7 +220,7 @@
   void a(){ }
 }
 ''');
-    newFile('$testPackageLibPath/lib1.template.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.template.dart', r'''
 import 'lib1.dart';
 void main() {
   new A().a();
@@ -232,13 +232,13 @@
   }
 
   test_topLevelFunction() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 
 @visibleForTemplate
 int fn0() => 1;
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
@@ -253,12 +253,12 @@
   }
 
   test_topLevelVariable() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 @visibleForTemplate
 int a = 7;
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
@@ -273,7 +273,7 @@
   }
 
   test_unnamedConstructor() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:angular_meta/angular_meta.dart';
 class A {
   int _x;
@@ -282,7 +282,7 @@
   A(this._x);
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 import 'lib1.dart';
 
 void main() {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
index 530f0ae..c4ef484 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
@@ -26,7 +26,7 @@
   }
 
   test_export_hide() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 
 @visibleForTesting
@@ -35,7 +35,7 @@
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart' hide A;
 ''');
 
@@ -44,7 +44,7 @@
   }
 
   test_export_show() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 
 @visibleForTesting
@@ -53,7 +53,7 @@
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 export 'a.dart' show A;
 ''');
 
@@ -62,14 +62,14 @@
   }
 
   test_fromIntegrationTestDirectory() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/integration_test/test.dart', content: r'''
+    newFile2('$testPackageRootPath/integration_test/test.dart', r'''
 import '../lib1.dart';
 class B {
   void b() => new A().a();
@@ -81,14 +81,14 @@
   }
 
   test_fromTestDirectory() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/test/test.dart', content: r'''
+    newFile2('$testPackageRootPath/test/test.dart', r'''
 import '../lib1.dart';
 class B {
   void b() => new A().a();
@@ -100,14 +100,14 @@
   }
 
   test_fromTestDriverDirectory() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/test_driver/test.dart', content: r'''
+    newFile2('$testPackageRootPath/test_driver/test.dart', r'''
 import '../lib1.dart';
 class B {
   void b() => new A().a();
@@ -119,14 +119,14 @@
   }
 
   test_fromTestingDirectory() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/testing/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/testing/lib1.dart', r'''
 import '../lib1.dart';
 class C {
   void b() => new A().a();
@@ -138,14 +138,14 @@
   }
 
   test_functionInExtension() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 extension E on List {
   @visibleForTesting
   int m() => 1;
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   E([]).m();
@@ -159,14 +159,14 @@
   }
 
   test_functionInExtension_fromTestDirectory() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 extension E on List {
   @visibleForTesting
   int m() => 1;
 }
 ''');
-    newFile('$testPackageRootPath/test/test.dart', content: r'''
+    newFile2('$testPackageRootPath/test/test.dart', r'''
 import '../lib1.dart';
 void main() {
   E([]).m();
@@ -178,14 +178,14 @@
   }
 
   test_getter() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   int get a => 7;
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   new A().a;
@@ -199,7 +199,7 @@
   }
 
   test_import_hide() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 
 @visibleForTesting
@@ -208,7 +208,7 @@
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart' hide A;
 
 void f(B _) {}
@@ -219,7 +219,7 @@
   }
 
   test_import_show() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 
 @visibleForTesting
@@ -228,7 +228,7 @@
 class B {}
 ''');
 
-    newFile('$testPackageLibPath/b.dart', content: r'''
+    newFile2('$testPackageLibPath/b.dart', r'''
 import 'a.dart' show A;
 
 void f(A _) {}
@@ -242,14 +242,14 @@
   }
 
   test_method() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 class B {
   void b() => new A().a();
@@ -263,7 +263,7 @@
   }
 
   test_mixin() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 mixin M {
   @visibleForTesting
@@ -271,7 +271,7 @@
 }
 class C with M {}
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   C().m();
@@ -285,7 +285,7 @@
   }
 
   test_namedConstructor() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   int _x;
@@ -294,7 +294,7 @@
   A.forTesting(this._x);
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   new A.forTesting(0);
@@ -311,7 +311,7 @@
   }
 
   test_protectedAndForTesting_usedAsProtected() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
@@ -319,7 +319,7 @@
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 class B extends A {
   void b() => new A().a();
@@ -331,7 +331,7 @@
   }
 
   test_protectedAndForTesting_usedAsTesting() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @protected
@@ -339,7 +339,7 @@
   void a(){ }
 }
 ''');
-    newFile('$testPackageRootPath/test/test1.dart', content: r'''
+    newFile2('$testPackageRootPath/test/test1.dart', r'''
 import '../lib1.dart';
 void main() {
   new A().a();
@@ -351,14 +351,14 @@
   }
 
   test_setter() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   @visibleForTesting
   set b(_) => 7;
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   new A().b = 6;
@@ -372,12 +372,12 @@
   }
 
   test_topLevelFunction() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 @visibleForTesting
 int fn0() => 1;
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   fn0();
@@ -391,12 +391,12 @@
   }
 
   test_topLevelVariable() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 @visibleForTesting
 int a = 7;
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   a;
@@ -410,7 +410,7 @@
   }
 
   test_unnamedConstructor() async {
-    newFile('$testPackageRootPath/lib1.dart', content: r'''
+    newFile2('$testPackageRootPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   int _x;
@@ -419,7 +419,7 @@
   A(this._x);
 }
 ''');
-    newFile('$testPackageRootPath/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/lib2.dart', r'''
 import 'lib1.dart';
 void main() {
   new A(0);
diff --git a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
index e089c34..c6166de 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
@@ -18,7 +18,7 @@
 @reflectiveTest
 class MissingRequiredParamTest extends PubPackageResolutionTest {
   test_constructor_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A({required int a});
 }
@@ -34,7 +34,7 @@
   }
 
   test_constructor_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A({required int a});
 }
@@ -162,7 +162,7 @@
   }
 
   test_function_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo({required int a}) {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -176,7 +176,7 @@
   }
 
   test_function_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo({required int a}) {}
 ''');
     await assertErrorsInCode(r'''
@@ -216,7 +216,7 @@
   }
 
   test_method_inOtherLib() async {
-    newFile('$testPackageLibPath/a_lib.dart', content: r'''
+    newFile2('$testPackageLibPath/a_lib.dart', r'''
 class A {
   void m({required int a}) {}
 }
@@ -232,7 +232,7 @@
   }
 
   test_method_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo({required int a}) {}
 }
@@ -248,7 +248,7 @@
   }
 
   test_method_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void foo({required int a}) {}
 }
@@ -454,13 +454,13 @@
   }
 
   test_method_inOtherLib() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 class A {
   void m({@Required('must specify an `a`') int a}) {}
 }
 ''');
-    newFile('$testPackageLibPath/test.dart', content: r'''
+    newFile2('$testPackageLibPath/test.dart', r'''
 import 'a.dart';
 f() {
   new A().m();
diff --git a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
index 4c1104b..be7dce8 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
@@ -36,7 +36,7 @@
   }
 
   test_function_sync_block_Never() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 Never foo() {
   throw 0;
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
index b8a8c67..e45b0bc 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class MixinDeferredClassTest extends PubPackageResolutionTest {
   test_classTypeAlias() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
@@ -31,7 +31,7 @@
   }
 
   test_enum() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {}
 ''');
     await assertErrorsInCode('''
@@ -45,7 +45,7 @@
   }
 
   test_mixin_deferred_class() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
index 2ba1557..d2fd8ed 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
@@ -22,7 +22,7 @@
 class MixinInferenceNoPossibleSubstitutionTest extends PubPackageResolutionTest
     with MixinInferenceNoPossibleSubstitutionTestCases {
   test_valid_nonNullableMixins_legacyApplication() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {}
 
 mixin B<T> on A<T> {}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
index 8dd5c55..665bf45 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
@@ -30,9 +30,28 @@
       error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 43, 1),
     ]);
 
-    var creation = findNode.instanceCreation('M.named();');
-    var m = findElement.mixin('M');
-    assertInstanceCreation(creation, m, 'M', constructorName: 'named');
+    var node = findNode.instanceCreation('M.named();');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  keyword: new
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: M
+        staticElement: self::@mixin::M
+        staticType: null
+      type: M
+    period: .
+    name: SimpleIdentifier
+      token: named
+      staticElement: self::@mixin::M::@constructor::named
+      staticType: null
+    staticElement: self::@mixin::M::@constructor::named
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: M
+''');
   }
 
   test_namedConstructor_undefined() async {
@@ -62,8 +81,22 @@
       error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 27, 1),
     ]);
 
-    var creation = findNode.instanceCreation('M();');
-    var m = findElement.mixin('M');
-    assertInstanceCreation(creation, m, 'M');
+    var node = findNode.instanceCreation('M();');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  keyword: new
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: M
+        staticElement: self::@mixin::M
+        staticType: null
+      type: M
+    staticElement: <null>
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticType: M
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
index beb970a..20036a2 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
@@ -125,7 +125,7 @@
   }
 
   test_undefined_ignore_part_exists_uriGenerated_nameIgnorable() async {
-    newFile('$testPackageLibPath/a.g.dart', content: r'''
+    newFile2('$testPackageLibPath/a.g.dart', r'''
 part of 'test.dart';
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
index c12044a..e03b2cd 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
@@ -28,7 +28,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -50,12 +50,12 @@
   }
 
   test_withinPackageLibDirectory_OK() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
 
-    newFile('$testPackageLibPath/src/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/src/lib2.dart', r'''
 import '../lib1.dart';
 mixin Bar on Foo {}
 ''');
@@ -68,12 +68,12 @@
   }
 
   test_withinPackageTestDirectory_OK() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
 
-    newFile('$testPackageRootPath/test/lib2.dart', content: r'''
+    newFile2('$testPackageRootPath/test/lib2.dart', r'''
 import 'package:test/lib1.dart';
 mixin Bar on Foo {}
 ''');
@@ -86,13 +86,13 @@
   }
 
   test_withinPart_OK() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 import 'package:meta/meta.dart';
 part 'part1.dart';
 @sealed class Foo {}
 ''');
 
-    newFile('$testPackageLibPath/part1.dart', content: r'''
+    newFile2('$testPackageLibPath/part1.dart', r'''
 part of 'lib1.dart';
 mixin Bar on Foo {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
index 6cf08fb..9fccc5a 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
@@ -28,7 +28,7 @@
   }
 
   test_imported() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class B {}
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
index 4a7c777..e059e0f 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
@@ -49,7 +49,7 @@
   }
 
   test_default_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {
   A.name() {}
 }
@@ -127,7 +127,7 @@
   }
 
   test_named_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {
   A() {}
 }
@@ -144,7 +144,7 @@
   }
 
   test_private_named() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A._named() {}
 }
@@ -160,7 +160,7 @@
   }
 
   test_private_named_genericClass_noTypeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A._named() {}
 }
@@ -176,7 +176,7 @@
   }
 
   test_private_named_genericClass_withTypeArguments() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A._named() {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
index 1d80a8d..7a8ae3f 100644
--- a/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/no_default_super_constructor_test.dart
@@ -80,7 +80,7 @@
   }
 
   test_super_requiredNamed_legacySubclass_explicitConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A({required String s});
 }
@@ -96,7 +96,7 @@
   }
 
   test_super_requiredNamed_legacySubclass_implicitConstructor() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A({required String s});
 }O
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
index 9c6dd7a..be174947 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
@@ -17,7 +17,7 @@
 class NonConstantCaseExpressionFromDeferredLibraryTest
     extends PubPackageResolutionTest {
   test_nested() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 const int c = 0;
 ''');
 
@@ -40,7 +40,7 @@
   }
 
   test_simple() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 const int c = 0;
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
index bde3524..e0c8d12 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
@@ -17,7 +17,7 @@
 class NonConstantDefaultValueFromDeferredLibraryTest
     extends PubPackageResolutionTest {
   test_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const V = 1;
 ''');
@@ -34,7 +34,7 @@
   }
 
   test_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 const V = 1;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
index 69fcfac..66cd709 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
@@ -62,7 +62,7 @@
   }
 
   test_constructor_inDifferentFile() async {
-    newFile('/test/lib/a.dart', content: '''
+    newFile2('/test/lib/a.dart', '''
 import 'b.dart';
 const v = const MyClass();
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
index 080f941..304ab6d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
@@ -23,7 +23,7 @@
   @failingTest
   test_const_ifElement_thenTrue_deferredElse() async {
     // reports wrong error code (which is not crucial to fix)
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -38,7 +38,7 @@
   }
 
   test_const_ifElement_thenTrue_deferredThen() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -53,7 +53,7 @@
   }
 
   test_const_topLevel_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -67,7 +67,7 @@
   }
 
   test_const_topLevel_deferred_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
index cc4d444..0ca45d8 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
@@ -22,7 +22,7 @@
   @failingTest
   test_const_ifElement_thenTrue_deferredElse() async {
 // reports wrong error code
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -35,7 +35,7 @@
   }
 
   test_const_ifElement_thenTrue_deferredThen() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -48,7 +48,7 @@
   }
 
   test_const_topLevel_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -60,7 +60,7 @@
   }
 
   test_const_topLevel_deferred_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
index aec5701..5cc04b3 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
@@ -23,7 +23,7 @@
   @failingTest
   test_const_ifElement_thenTrue_elseDeferred() async {
     // reports wrong error code
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -36,7 +36,7 @@
   }
 
   test_const_ifElement_thenTrue_thenDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -49,7 +49,7 @@
   }
 
   test_const_topLevel_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -61,7 +61,7 @@
   }
 
   test_const_topLevel_deferred_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
diff --git a/pkg/analyzer/test/src/diagnostics/non_null_opt_out_test.dart b/pkg/analyzer/test/src/diagnostics/non_null_opt_out_test.dart
index 42aa615..3bc5532 100644
--- a/pkg/analyzer/test/src/diagnostics/non_null_opt_out_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_null_opt_out_test.dart
@@ -24,7 +24,7 @@
   }
 
   test_assignment_indexExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void operator[]=(int a, int b) {}
 }
@@ -53,7 +53,7 @@
   }
 
   test_assignment_prefixedIdentifier_instanceTarget_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -81,7 +81,7 @@
   }
 
   test_assignment_prefixedIdentifier_instanceTarget_extension_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   void set foo(int _) {}
@@ -110,7 +110,7 @@
   }
 
   test_assignment_prefixedIdentifier_staticTarget_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int foo = 0;
 }
@@ -138,7 +138,7 @@
   }
 
   test_assignment_prefixedIdentifier_staticTarget_extension_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {
   static int foo = 0;
 }
@@ -166,7 +166,7 @@
   }
 
   test_assignment_prefixedIdentifier_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo = 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -192,7 +192,7 @@
   }
 
   test_assignment_propertyAccess_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -220,7 +220,7 @@
   }
 
   test_assignment_propertyAccess_extension_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   void set foo(int a) {}
@@ -249,7 +249,7 @@
   }
 
   test_assignment_propertyAccess_extensionOverride_setter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   void set foo(int a) {}
@@ -278,7 +278,7 @@
   }
 
   test_assignment_propertyAccess_superTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -308,7 +308,7 @@
   }
 
   test_assignment_simpleIdentifier_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo = 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -334,7 +334,7 @@
   }
 
   test_binaryExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int operator+(int a) => 0;
 }
@@ -356,7 +356,7 @@
   }
 
   test_functionExpressionInvocation() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int Function(int, int?)? foo;
 ''');
     await assertNoErrorsInCode(r'''
@@ -379,7 +379,7 @@
   }
 
   test_functionExpressionInvocation_call() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int call(int a, int? b) => 0;
 }
@@ -404,7 +404,7 @@
   }
 
   test_functionExpressionInvocation_extension_staticTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {
   static int Function(int) get foo => (_) => 0;
 }
@@ -429,7 +429,7 @@
   }
 
   test_instanceCreation() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A(int a, int? b);
 }
@@ -452,7 +452,7 @@
   }
 
   test_instanceCreation_generic() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T> {
   A(T a, T? b);
 }
@@ -476,7 +476,7 @@
   }
 
   test_instanceCreation_generic_instantiateToBounds() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<T extends num> {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -491,7 +491,7 @@
   }
 
   test_methodInvocation_extension_functionTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on void Function() {
   int foo(int a) => 0;
 }
@@ -516,7 +516,7 @@
   }
 
   test_methodInvocation_extension_interfaceTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {
   int foo(int a) => 0;
 }
@@ -541,7 +541,7 @@
   }
 
   test_methodInvocation_extension_nullTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   int foo(int a) => 0;
@@ -569,7 +569,7 @@
   }
 
   test_methodInvocation_extension_staticTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {
   static int foo(int a) => 0;
 }
@@ -594,7 +594,7 @@
   }
 
   test_methodInvocation_extensionOverride() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E on int {
   int foo(int a) => 0;
 }
@@ -619,7 +619,7 @@
   }
 
   test_methodInvocation_function() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo(int a, int? b) => 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -642,7 +642,7 @@
   }
 
   test_methodInvocation_function_prefixed() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo(int a, int? b) => 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -665,7 +665,7 @@
   }
 
   test_methodInvocation_method_cascade() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -690,7 +690,7 @@
   }
 
   test_methodInvocation_method_interfaceTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -715,7 +715,7 @@
   }
 
   test_methodInvocation_method_nullTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -742,7 +742,7 @@
   }
 
   test_methodInvocation_method_staticTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int foo(int a, int? b) => 0;
 }
@@ -767,7 +767,7 @@
   }
 
   test_methodInvocation_method_superTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a, int? b) => 0;
 }
@@ -821,7 +821,7 @@
   }
 
   test_postfixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A operator+(int a) => this;
 }
@@ -842,7 +842,7 @@
   }
 
   test_prefixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int operator-() => 0;
 }
@@ -863,7 +863,7 @@
   }
 
   test_read_indexExpression_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int operator[](int a) => 0;
 }
@@ -884,7 +884,7 @@
   }
 
   test_read_prefixedIdentifier_instanceTarget_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo;
 }
@@ -908,7 +908,7 @@
   }
 
   test_read_prefixedIdentifier_instanceTarget_extension_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   int get foo => 0;
@@ -933,7 +933,7 @@
   }
 
   test_read_prefixedIdentifier_staticTarget_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int foo;
 }
@@ -957,7 +957,7 @@
   }
 
   test_read_prefixedIdentifier_staticTarget_class_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int foo(int a) => 0;
 }
@@ -981,7 +981,7 @@
   }
 
   test_read_prefixedIdentifier_staticTarget_extension_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E {
   static int foo;
 }
@@ -1005,7 +1005,7 @@
   }
 
   test_read_prefixedIdentifier_staticTarget_extension_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E {
   static int foo(int a) => 0;
 }
@@ -1029,7 +1029,7 @@
   }
 
   test_read_prefixedIdentifier_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo = 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -1051,7 +1051,7 @@
   }
 
   test_read_propertyAccessor_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -1075,7 +1075,7 @@
   }
 
   test_read_propertyAccessor_class_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo() => 0;
 }
@@ -1099,7 +1099,7 @@
   }
 
   test_read_propertyAccessor_extensionOverride_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   int get foo => 0;
@@ -1124,7 +1124,7 @@
   }
 
   test_read_propertyAccessor_superTarget() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -1150,7 +1150,7 @@
   }
 
   test_read_simpleIdentifier_class_field() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo = 0;
 }
@@ -1173,7 +1173,7 @@
   }
 
   test_read_simpleIdentifier_class_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int foo(int a) => 0;
 }
@@ -1196,7 +1196,7 @@
   }
 
   test_read_simpleIdentifier_extension_getter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   int get foo => 0;
@@ -1220,7 +1220,7 @@
   }
 
   test_read_simpleIdentifier_extension_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {}
 extension E on A {
   int foo(int a) => 0;
@@ -1244,7 +1244,7 @@
   }
 
   test_read_simpleIdentifier_topLevelVariable() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int foo = 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -1263,7 +1263,7 @@
   }
 
   test_superConstructorInvocation() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   A(int a, int? b);
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
index 560bb4f..5c971f3 100644
--- a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
@@ -65,6 +65,28 @@
     ]);
   }
 
+  test_staticField_noInitializer_constructor() async {
+    await assertErrorsInCode('''
+class A {
+  static int x = 0, y, z = 2;
+  A();
+}
+''', [
+      error(CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE, 30, 1),
+    ]);
+  }
+
+  test_staticField_noInitializer_final_constructor() async {
+    await assertErrorsInCode('''
+class A {
+  static final int x = 0, y, z = 2;
+  A();
+}
+''', [
+      error(CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE, 36, 1),
+    ]);
+  }
+
   test_staticField_nullable() async {
     await assertNoErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
index d968410..c992263 100644
--- a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
@@ -108,6 +108,14 @@
       error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 43, 1),
     ]);
   }
+
+  test_spread_map_in_iterable_context() async {
+    await assertErrorsInCode('''
+List<int> f() => [...{1: 2, 3: 4}];
+''', [
+      error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 21, 12),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart b/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
index e26ae88..2aa3af9 100644
--- a/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PartOfDifferentLibraryTest extends PubPackageResolutionTest {
   test_name() async {
-    newFile('$testPackageLibPath/part.dart', content: "part of lub;");
+    newFile2('$testPackageLibPath/part.dart', "part of lub;");
     await assertErrorsInCode('''
 library lib;
 part 'part.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart b/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
index a03e62c..9f69cdc 100644
--- a/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PartOfNonPartTest extends PubPackageResolutionTest {
   test_part_of_non_part() async {
-    newFile('$testPackageLibPath/l2.dart', content: '''
+    newFile2('$testPackageLibPath/l2.dart', '''
 library l2;
 ''');
     await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
index 55ef355..855cc07 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PrefixCollidesWithTopLevelMemberTest extends PubPackageResolutionTest {
   test_functionTypeAlias() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 class A{}
 ''');
@@ -30,7 +30,7 @@
   }
 
   test_no_collision() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 class A {}''');
     await assertNoErrorsInCode(r'''
@@ -44,7 +44,7 @@
   }
 
   test_topLevelFunction() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 class A{}
 ''');
@@ -58,7 +58,7 @@
   }
 
   test_topLevelVariable() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 class A{}
 ''');
@@ -72,7 +72,7 @@
   }
 
   test_type() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 class A{}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
index 1979034..3ae3ccc 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PrefixIdentifierNotFollowedByDotTest extends PubPackageResolutionTest {
   test_assignment_compound_in_method() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -32,7 +32,7 @@
   }
 
   test_assignment_compound_not_in_method() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -46,7 +46,7 @@
   }
 
   test_assignment_in_method() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -81,7 +81,7 @@
   }
 
   test_assignment_not_in_method() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -95,7 +95,7 @@
   }
 
   test_compoundAssignment() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -109,7 +109,7 @@
   }
 
   test_conditionalMethodInvocation() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 g() {}
 ''');
@@ -124,7 +124,7 @@
   }
 
   test_conditionalPropertyAccess_call_loadLibrary() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -139,7 +139,7 @@
   }
 
   test_conditionalPropertyAccess_get() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 var x;
 ''');
@@ -154,7 +154,7 @@
   }
 
   test_conditionalPropertyAccess_get_loadLibrary() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -168,7 +168,7 @@
   }
 
   test_conditionalPropertyAccess_set() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 var x;
 ''');
@@ -183,7 +183,7 @@
   }
 
   test_conditionalPropertyAccess_set_loadLibrary() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
@@ -197,7 +197,7 @@
   }
 
   test_prefix_not_followed_by_dot() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 ''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/private_collision_in_mixin_application_test.dart b/pkg/analyzer/test/src/diagnostics/private_collision_in_mixin_application_test.dart
index 60dea5a..53a4ceb 100644
--- a/pkg/analyzer/test/src/diagnostics/private_collision_in_mixin_application_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/private_collision_in_mixin_application_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PrivateCollisionInMixinApplicationTest extends PubPackageResolutionTest {
   test_class_interfaceAndMixin_same() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -31,7 +31,7 @@
   }
 
   test_class_mixinAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -51,7 +51,7 @@
   }
 
   test_class_mixinAndMixin_indirect() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -72,7 +72,7 @@
   }
 
   test_class_mixinAndMixin_withoutExtends() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -92,7 +92,7 @@
   }
 
   test_class_staticAndInstanceElement() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static void _foo() {}
 }
@@ -110,7 +110,7 @@
   }
 
   test_class_staticElements() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static void _foo() {}
 }
@@ -128,7 +128,7 @@
   }
 
   test_class_superclassAndMixin_getter2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   int get _foo => 0;
 }
@@ -148,7 +148,7 @@
   }
 
   test_class_superclassAndMixin_method2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -185,7 +185,7 @@
   }
 
   test_class_superclassAndMixin_setter2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   set _foo(int _) {}
 }
@@ -205,7 +205,7 @@
   }
 
   test_classTypeAlias_mixinAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -225,7 +225,7 @@
   }
 
   test_classTypeAlias_mixinAndMixin_indirect() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -246,7 +246,7 @@
   }
 
   test_classTypeAlias_superclassAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void _foo() {}
 }
@@ -266,7 +266,7 @@
   }
 
   test_enum_getter_mixinAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin A {
   int get _foo => 0;
 }
@@ -288,7 +288,7 @@
   }
 
   test_enum_method_interfaceAndMixin_same() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin A {
   void _foo() {}
 }
@@ -305,7 +305,7 @@
   }
 
   test_enum_method_mixinAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin A {
   void _foo() {}
 }
@@ -327,7 +327,7 @@
   }
 
   test_enum_method_staticAndInstanceElement() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin A {
   static void _foo() {}
 }
@@ -347,7 +347,7 @@
   }
 
   test_enum_setter_mixinAndMixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 mixin A {
   set _foo(int _) {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart b/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
index 2768242..1ab1e89 100644
--- a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class PrivateSetterTest extends PubPackageResolutionTest {
   test_typeLiteral_privateField_differentLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static int _foo = 0;
 }
@@ -58,7 +58,7 @@
   }
 
   test_typeLiteral_privateSetter_differentLibrary_hasGetter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static set _foo(int _) {}
 
@@ -89,7 +89,7 @@
   }
 
   test_typeLiteral_privateSetter_differentLibrary_noGetter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   static set _foo(int _) {}
 }
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index ae6f8b6..b751b98 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -402,15 +402,36 @@
       error(HintCode.DEAD_CODE, 25, 8),
     ]);
 
-    assertMethodInvocation(
-      findNode.methodInvocation('.foo(1 + 2)'),
-      null,
-      'dynamic',
-      expectedType: 'Never',
-    );
-
-    // Verify that arguments are resolved.
-    assertType(findNode.binary('1 + 2'), 'int');
+    var node = findNode.methodInvocation('.foo(1 + 2)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: Never
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      BinaryExpression
+        leftOperand: IntegerLiteral
+          literal: 1
+          staticType: int
+        operator: +
+        rightOperand: IntegerLiteral
+          literal: 2
+          staticType: int
+        staticElement: dart:core::@class::num::@method::+
+        staticInvokeType: num Function(num)
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: Never
+''');
   }
 
   test_methodInvocation_never_toString() async {
@@ -423,15 +444,36 @@
       error(HintCode.DEAD_CODE, 30, 8),
     ]);
 
-    assertMethodInvocation(
-      findNode.methodInvocation('.toString(1 + 2)'),
-      null,
-      'dynamic',
-      expectedType: 'Never',
-    );
-
-    // Verify that arguments are resolved.
-    assertType(findNode.binary('1 + 2'), 'int');
+    var node = findNode.methodInvocation('.toString(1 + 2)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: Never
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      BinaryExpression
+        leftOperand: IntegerLiteral
+          literal: 1
+          staticType: int
+        operator: +
+        rightOperand: IntegerLiteral
+          literal: 2
+          staticType: int
+        staticElement: dart:core::@class::num::@method::+
+        staticInvokeType: num Function(num)
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: Never
+''');
   }
 
   test_methodInvocation_neverQ_toString() async {
@@ -443,15 +485,36 @@
       error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 32, 5),
     ]);
 
-    assertMethodInvocation(
-      findNode.methodInvocation('.toString(1 + 2)'),
-      objectElement.getMethod('toString'),
-      'String Function()',
-      expectedType: 'String',
-    );
-
-    // Verify that arguments are resolved.
-    assertType(findNode.binary('1 + 2'), 'int');
+    var node = findNode.methodInvocation('.toString(1 + 2)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: Never?
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: dart:core::@class::Object::@method::toString
+    staticType: String Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      BinaryExpression
+        leftOperand: IntegerLiteral
+          literal: 1
+          staticType: int
+        operator: +
+        rightOperand: IntegerLiteral
+          literal: 2
+          staticType: int
+        staticElement: dart:core::@class::num::@method::+
+        staticInvokeType: num Function(num)
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: String Function()
+  staticType: String
+''');
   }
 
   test_postfixExpression_never_plusPlus() async {
@@ -787,12 +850,29 @@
 }
 ''');
 
-    assertMethodInvocation(
-      findNode.methodInvocation('toString()'),
-      null,
-      'dynamic',
-      expectedType: 'dynamic',
-    );
+    var node = findNode.methodInvocation('toString()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ParenthesizedExpression
+    leftParenthesis: (
+    expression: ThrowExpression
+      throwKeyword: throw
+      expression: SimpleStringLiteral
+        literal: ''
+      staticType: Never*
+    rightParenthesis: )
+    staticType: Never*
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
   }
 
   test_propertyAccess_toString() async {
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
index e65cbff..6ce6a7e 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
@@ -73,9 +73,9 @@
   }
 
   test_fromMapLiteral() async {
-    newFile(
+    newFile2(
       '$testPackageLibPath/constants.dart',
-      content: r'''
+      r'''
 const int x = y;
 const int y = x;
 ''',
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
index 1a11708..3b54f2e 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
@@ -546,6 +546,14 @@
       error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD, 23, 3),
     ]);
   }
+
+  test_spread_iterable_in_map_context() async {
+    await assertErrorsInCode('''
+Map<int, int> f() => {...[1, 2, 3, 4]};
+''', [
+      error(CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION, 21, 17),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
index 47c4e1a..aa0b7e5 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
@@ -32,7 +32,7 @@
   }
 
   test_equals_explicitImportOfExportingLibrary() async {
-    newFile('$testPackageLibPath/exporter.dart', content: '''
+    newFile2('$testPackageLibPath/exporter.dart', '''
 export 'dart:async';
 ''');
     await verifyVersion('2.1.0', '''
@@ -49,7 +49,7 @@
   }
 
   test_equals_implicitImportOfCore_inPart() async {
-    newFile('/lib.dart', content: '''
+    newFile2('/lib.dart', '''
 library lib;
 ''');
     await verifyVersion('2.1.0', '''
@@ -78,7 +78,7 @@
   }
 
   test_lessThan_explicitImportOfExportingLibrary() async {
-    newFile('$testPackageLibPath/exporter.dart', content: '''
+    newFile2('$testPackageLibPath/exporter.dart', '''
 export 'dart:async';
 ''');
     await verifyVersion('2.0.0', '''
@@ -97,7 +97,7 @@
   }
 
   test_lessThan_implicitImportOfCore_inPart() async {
-    newFile('/lib.dart', content: '''
+    newFile2('/lib.dart', '''
 library lib;
 ''');
     await verifyVersion('2.0.0', '''
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
index e5e1fd7..3aade1c 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
@@ -21,7 +21,7 @@
   @failingTest
   test_const_ifElement_thenTrue_elseDeferred() async {
     // reports wrong error code
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -33,7 +33,7 @@
   }
 
   test_const_ifElement_thenTrue_thenDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -45,7 +45,7 @@
   }
 
   test_const_topLevel_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -56,7 +56,7 @@
   }
 
   test_const_topLevel_deferred_nested() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int c = 1;''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
diff --git a/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart b/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart
index 9574bc5..fbf12c2 100644
--- a/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart
@@ -16,11 +16,11 @@
 @reflectiveTest
 class SharedDeferredPrefixTest extends PubPackageResolutionTest {
   test_hasSharedDeferredPrefix() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 f1() {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 library lib2;
 f2() {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
index cf83fc1..69b8519 100644
--- a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
@@ -19,7 +19,7 @@
 
 mixin SpreadExpressionFromDeferredLibraryTestCases on PubPackageResolutionTest {
   test_inList_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const List c = [];''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -32,7 +32,7 @@
   }
 
   test_inList_deferred_notConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const List c = [];''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -42,7 +42,7 @@
   }
 
   test_inList_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const List c = [];''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
@@ -52,7 +52,7 @@
   }
 
   test_inMap_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Map c = <int, int>{};''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -65,7 +65,7 @@
   }
 
   test_inMap_notConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Map c = <int, int>{};''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -75,7 +75,7 @@
   }
 
   test_inMap_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Map c = <int, int>{};''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
@@ -85,7 +85,7 @@
   }
 
   test_inSet_deferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Set c = <int>{};''');
     await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -98,7 +98,7 @@
   }
 
   test_inSet_notConst() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Set c = <int>{};''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
@@ -108,7 +108,7 @@
   }
 
   test_inSet_notDeferred() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const Set c = <int>{};''');
     await assertNoErrorsInCode(r'''
 import 'lib1.dart' as a;
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
index 9322aa2..c58a45c 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
@@ -28,7 +28,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -48,7 +48,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -68,7 +68,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -89,7 +89,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed mixin Foo {}
 ''');
@@ -110,7 +110,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed mixin Foo {}
 ''');
@@ -130,7 +130,7 @@
       meta: true,
     );
 
-    newFile('$workspaceRootPath/foo/lib/foo.dart', content: r'''
+    newFile2('$workspaceRootPath/foo/lib/foo.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -156,7 +156,7 @@
   }
 
   test_withinPackageLibDirectory_OK() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -172,7 +172,7 @@
   }
 
   test_withinPackageTestDirectory_OK() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'package:meta/meta.dart';
 @sealed class Foo {}
 ''');
@@ -192,13 +192,13 @@
     var libPath = '$testPackageLibPath/a.dart';
     var partPath = '$testPackageLibPath/b.dart';
 
-    newFile(libPath, content: r'''
+    newFile2(libPath, r'''
 import 'package:meta/meta.dart';
 part 'b.dart';
 @sealed class Foo {}
 ''');
 
-    newFile(partPath, content: r'''
+    newFile2(partPath, r'''
 part of 'a.dart';
 class Bar1 extends Foo {}
 class Bar2 implements Foo {}
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
index 0d24687..e48f5fe 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
@@ -75,7 +75,7 @@
   }
 
   test_implements_struct_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 import 'dart:ffi';
 class S extends Struct {}
 ''');
@@ -116,7 +116,7 @@
   }
 
   test_with_struct_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 import 'dart:ffi';
 class S extends Struct {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
index ca2e979..a424550 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
@@ -246,13 +246,23 @@
       error(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, 70, 5),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('super.m()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+    var node = findNode.methodInvocation('super.m()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
   }
 
   test_staticVariableInitializer() async {
diff --git a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
index 3cbef8b..6acba98 100644
--- a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
@@ -24,7 +24,7 @@
   }
 
   test_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 int a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
index 3a78473..93c3e4e 100644
--- a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
@@ -47,7 +47,7 @@
   }
 
   test_field_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A {
   int f = 0;
 }
@@ -293,7 +293,7 @@
   }
 
   test_implicitlyTyped_new_explicit_type_params_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class B<T> {
   B(x);
 }
@@ -352,7 +352,7 @@
   }
 
   test_implicitlyTyped_new_not_generic_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class B {
   B(x);
 }
@@ -369,7 +369,7 @@
   }
 
   test_implicitlyTyped_new_prefixed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class B<T> {
   B(T x);
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
index b432e45..d46f4ea 100644
--- a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class TypeAnnotationDeferredClassTest extends PubPackageResolutionTest {
   test_annotation_typeArgument() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class D {}
 ''');
     await assertErrorsInCode('''
@@ -31,7 +31,7 @@
   }
 
   test_asExpression() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -45,7 +45,7 @@
   }
 
   test_catchClause() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -61,7 +61,7 @@
   }
 
   test_fieldFormalParameter() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -76,7 +76,7 @@
   }
 
   test_functionDeclaration_returnType() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -89,7 +89,7 @@
   }
 
   test_functionTypedFormalParameter_returnType() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -101,7 +101,7 @@
   }
 
   test_isExpression() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -116,7 +116,7 @@
   }
 
   test_methodDeclaration_returnType() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -130,7 +130,7 @@
   }
 
   test_simpleFormalParameter() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -142,7 +142,7 @@
   }
 
   test_typeArgumentList() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -156,7 +156,7 @@
   }
 
   test_typeArgumentList2() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -171,7 +171,7 @@
   }
 
   test_typeParameter_bound() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
@@ -183,7 +183,7 @@
   }
 
   test_variableDeclarationList() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 library lib1;
 class A {}''');
     await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index a4c3dd6..3f52554 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -49,7 +49,7 @@
   }
 
   test_extends_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<X extends int> {}
 ''');
 
@@ -62,7 +62,7 @@
   }
 
   test_extends_optIn_fromOptOut_otherTypeParameter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo<T extends U, U>() {
 }
 ''');
@@ -81,7 +81,7 @@
   }
 
   test_extensionOverride_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 extension E<X extends int> on List<X> {
   void m() {}
 }
@@ -146,7 +146,7 @@
   }
 
   test_instanceCreation_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A<X extends int> {}
 ''');
 
@@ -222,7 +222,7 @@
   }
 
   test_methodInvocation_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class A {
   void m<X extends int>() {}
 ''');
@@ -340,7 +340,7 @@
   }
 
   test_redirectingConstructor_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'test.dart';
 
 class A<X extends int> implements B {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
index 8c78d5c..49bc006 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
@@ -67,7 +67,7 @@
   }
 
   test_ignore_part_exists_uriGenerated_nameIgnorable() async {
-    newFile('$testPackageLibPath/a.g.dart', content: r'''
+    newFile2('$testPackageLibPath/a.g.dart', r'''
 part of 'test.dart';
 ''');
 
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart
index 07b1785..d01fefd 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart
@@ -35,13 +35,34 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD, 40, 1),
     ]);
-    var invocation = findNode.methodInvocation('m();');
-    assertMethodInvocation(
-      invocation,
-      null,
-      'dynamic',
-      expectedType: 'dynamic',
-    );
+
+    var node = findNode.methodInvocation('m();');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleStringLiteral
+          literal: 'a'
+      rightParenthesis: )
+    extendedType: String
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
   }
 
   test_static_withInference() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
index cf1eba2..52e9002 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
@@ -20,7 +20,7 @@
 
 mixin UndefinedHiddenNameTestCases on PubPackageResolutionTest {
   test_export() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode(r'''
 export 'lib1.dart' hide a;
 ''', [
@@ -29,7 +29,7 @@
   }
 
   test_import() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode(r'''
 import 'lib1.dart' hide a;
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index c484dd0..89d58bb 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -371,7 +371,7 @@
   }
 
   test_private_getter() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 class A {
   var _foo;
@@ -389,7 +389,7 @@
   }
 
   test_private_setter() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 library lib;
 class A {
   var _foo;
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
index 9c11a5e..bc446a2 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
@@ -38,7 +38,7 @@
   }
 
   test_definedInPrivateExtension() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class B {}
 
 extension _ on B {
@@ -57,7 +57,7 @@
   }
 
   test_definedInUnnamedExtension() async {
-    newFile('$testPackageLibPath/lib.dart', content: '''
+    newFile2('$testPackageLibPath/lib.dart', '''
 class C {}
 
 extension on C {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
index e9c6092..8cb6a74 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UndefinedPrefixedNameTest extends PubPackageResolutionTest {
   test_getterContext() async {
-    newFile('$testPackageLibPath/lib.dart');
+    newFile2('$testPackageLibPath/lib.dart', '');
     await assertErrorsInCode('''
 import 'lib.dart' as p;
 f() => p.c;
@@ -26,7 +26,7 @@
   }
 
   test_new() async {
-    newFile('$testPackageLibPath/lib.dart', content: '');
+    newFile2('$testPackageLibPath/lib.dart', '');
     await assertErrorsInCode(r'''
 import 'lib.dart' as p;
 void f() {
@@ -38,7 +38,7 @@
   }
 
   test_setterContext() async {
-    newFile('$testPackageLibPath/lib.dart');
+    newFile2('$testPackageLibPath/lib.dart', '');
     await assertErrorsInCode('''
 import 'lib.dart' as p;
 f() {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index df6bcf4..0aedd03 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -151,7 +151,7 @@
 
 mixin UndefinedSetterTestCases on PubPackageResolutionTest {
   test_importWithPrefix_defined() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
+    newFile2('$testPackageLibPath/lib.dart', r'''
 library lib;
 set y(int value) {}''');
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
index f486367..5839381 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
@@ -20,7 +20,7 @@
 
 mixin UndefinedShownNameTestCases on PubPackageResolutionTest {
   test_export() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode(r'''
 export 'lib1.dart' show a;
 ''', [
@@ -29,7 +29,7 @@
   }
 
   test_import() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode(r'''
 import 'lib1.dart' show a;
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
index 0735628..443694b 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
@@ -221,7 +221,7 @@
 class UnnecessaryCastTestWithNullSafety extends PubPackageResolutionTest
     with UnnecessaryCastTestCases {
   test_interfaceType_star_toNone() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 int a = 0;
 ''');
@@ -240,7 +240,7 @@
   }
 
   test_interfaceType_star_toQuestion() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.7
 int a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
index 431f22d..7f08baa 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnnecessaryImportTest extends PubPackageResolutionTest {
   test_annotationOnDirective() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {
   const A() {}
 }
@@ -28,10 +28,10 @@
   }
 
   test_as() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart';
 class B {}
 ''');
@@ -43,10 +43,10 @@
   }
 
   test_as_differentPrefixes() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart';
 class B {}
 ''');
@@ -58,10 +58,10 @@
   }
 
   test_as_equalPrefixes_referenced() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -72,13 +72,13 @@
   }
 
   test_as_equalPrefixes_referenced_via_export() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
-    newFile('$testPackageLibPath/lib3.dart', content: r'''
+    newFile2('$testPackageLibPath/lib3.dart', r'''
 export 'lib2.dart';
 ''');
     await assertNoErrorsInCode(r'''
@@ -89,10 +89,10 @@
   }
 
   test_as_equalPrefixes_unreferenced() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -103,7 +103,7 @@
   }
 
   test_as_show_multipleElements() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
@@ -114,7 +114,7 @@
   }
 
   test_as_showTopLevelFunction() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class One {}
 topLevelFunction() {}
 ''');
@@ -128,7 +128,7 @@
   }
 
   test_as_showTopLevelFunction_multipleDirectives() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class One {}
 topLevelFunction() {}
 ''');
@@ -144,7 +144,7 @@
   }
 
   test_as_systemShadowing() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class File {}
 ''');
     await assertNoErrorsInCode('''
@@ -155,10 +155,10 @@
   }
 
   test_as_unnecessary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart';
 class B {}
 ''');
@@ -172,7 +172,7 @@
   }
 
   test_duplicteImport_differentPrefix() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 class B {}
 ''');
@@ -184,10 +184,10 @@
   }
 
   test_hide() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart' hide A;
 class B {}
 ''');
@@ -199,7 +199,7 @@
   }
 
   test_systemShadowing() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class File {}
 ''');
     await assertNoErrorsInCode('''
@@ -210,10 +210,10 @@
   }
 
   test_unnecessaryImport() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart';
 class B {}
 ''');
@@ -227,10 +227,10 @@
   }
 
   test_unnecessaryImport_sameUri() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: '''
+    newFile2('$testPackageLibPath/lib2.dart', '''
 export 'lib1.dart';
 class B {}
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
index 5114424..dd5dc92 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnnecessaryNonNullAssertionTest extends PubPackageResolutionTest {
   test_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var x = 0;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
index 33b4b6a..05e6462 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
@@ -28,7 +28,7 @@
   }
 
   test_equal_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var a = 0;
 ''');
@@ -91,7 +91,7 @@
   }
 
   test_notEqual_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 // @dart = 2.5
 var a = 0;
 ''');
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index 74c8fa5..69468f2 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -261,6 +261,18 @@
     ]);
   }
 
+  test_parameter_optionalNamed_isUsed_superFormal() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  _A({int? a});
+}
+
+class B extends _A {
+  B({super.a});
+}
+''');
+  }
+
   test_parameter_optionalPositional_fieldFormal_isUsed_constructorInvocation() async {
     await assertNoErrorsInCode(r'''
 class _A {
@@ -307,6 +319,18 @@
     ]);
   }
 
+  test_parameter_optionalPositional_isUsed_superFormal() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  _A([int? a]);
+}
+
+class B extends _A {
+  B([super.a]);
+}
+''');
+  }
+
   test_privateEnum_privateConstructor_isUsed_redirect() async {
     await assertNoErrorsInCode(r'''
 enum _E {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index 8cce111..3279925 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnusedImportTest extends PubPackageResolutionTest {
   test_annotationOnDirective() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {
   const A() {}
 }
@@ -28,7 +28,7 @@
   }
 
   test_as() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
     await assertErrorsInCode(r'''
@@ -41,10 +41,10 @@
   }
 
   test_as_equalPrefixes_referenced() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -56,13 +56,13 @@
   }
 
   test_as_equalPrefixes_referenced_via_export() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
-    newFile('$testPackageLibPath/lib3.dart', content: r'''
+    newFile2('$testPackageLibPath/lib3.dart', r'''
 export 'lib2.dart';
 ''');
     await assertNoErrorsInCode(r'''
@@ -74,10 +74,10 @@
   }
 
   test_as_equalPrefixes_unreferenced() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class B {}
 ''');
     await assertErrorsInCode(r'''
@@ -90,7 +90,7 @@
   }
 
   test_as_show_multipleElements() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
@@ -102,7 +102,7 @@
   }
 
   test_as_showTopLevelFunction() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class One {}
 topLevelFunction() {}
 ''');
@@ -121,7 +121,7 @@
   }
 
   test_as_showTopLevelFunction_multipleDirectives() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class One {}
 topLevelFunction() {}
 ''');
@@ -139,7 +139,7 @@
   }
 
   test_as_systemLibrary() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class File {}
 ''');
     await assertErrorsInCode(r'''
@@ -158,11 +158,11 @@
   }
 
   test_export() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 export 'lib2.dart';
 class One {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 class Two {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -172,15 +172,15 @@
   }
 
   test_export2() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 export 'lib2.dart';
 class One {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 export 'lib3.dart';
 class Two {}
 ''');
-    newFile('$testPackageLibPath/lib3.dart', content: r'''
+    newFile2('$testPackageLibPath/lib3.dart', r'''
 class Three {}
 ''');
     await assertNoErrorsInCode(r'''
@@ -190,15 +190,15 @@
   }
 
   test_export_infiniteLoop() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 export 'lib2.dart';
 class One {}
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 export 'lib3.dart';
 class Two {}
 ''');
-    newFile('$testPackageLibPath/lib3.dart', content: r'''
+    newFile2('$testPackageLibPath/lib3.dart', r'''
 export 'lib2.dart';
 class Three {}
 ''');
@@ -209,7 +209,7 @@
   }
 
   test_extension_instance_call() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on int {
   int call(int x) => 0;
 }
@@ -224,7 +224,7 @@
   }
 
   test_extension_instance_getter() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String get empty => '';
 }
@@ -239,7 +239,7 @@
   }
 
   test_extension_instance_method() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String empty() => '';
 }
@@ -254,7 +254,7 @@
   }
 
   test_extension_instance_operator_binary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String operator -(String s) => this;
 }
@@ -269,7 +269,7 @@
   }
 
   test_extension_instance_operator_index() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on int {
   int operator [](int i) => 0;
 }
@@ -284,7 +284,7 @@
   }
 
   test_extension_instance_operator_unary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   void operator -() {}
 }
@@ -299,7 +299,7 @@
   }
 
   test_extension_instance_setter() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   void set foo(int i) {}
 }
@@ -314,7 +314,7 @@
   }
 
   test_extension_override_getter() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String get empty => '';
 }
@@ -329,7 +329,7 @@
   }
 
   test_extension_prefixed_isUsed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String empty() => '';
 }
@@ -344,7 +344,7 @@
   }
 
   test_extension_prefixed_notUsed() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String empty() => '';
 }
@@ -357,7 +357,7 @@
   }
 
   test_extension_static_field() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   static const String empty = '';
 }
@@ -372,7 +372,7 @@
   }
 
   test_hide() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 ''');
     await assertErrorsInCode(r'''
@@ -392,7 +392,7 @@
   }
 
   test_metadata() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const x = 0;
 ''');
     await assertNoErrorsInCode(r'''
@@ -406,12 +406,12 @@
   }
 
   test_multipleExtensions() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String a() => '';
 }
 ''');
-    newFile('$testPackageLibPath/lib2.dart', content: r'''
+    newFile2('$testPackageLibPath/lib2.dart', r'''
 extension E on String {
   String b() => '';
 }
@@ -429,7 +429,7 @@
   }
 
   test_show() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
@@ -443,7 +443,7 @@
   }
 
   test_systemLibrary() async {
-    newFile('$testPackageLibPath/lib1.dart', content: '''
+    newFile2('$testPackageLibPath/lib1.dart', '''
 class File {}
 ''');
     await assertErrorsInCode(r'''
@@ -456,7 +456,7 @@
   }
 
   test_unusedImport() async {
-    newFile('$testPackageLibPath/lib1.dart');
+    newFile2('$testPackageLibPath/lib1.dart', '');
     await assertErrorsInCode(r'''
 import 'lib1.dart';
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
index 812bf13..1954c47 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
@@ -497,6 +497,37 @@
     ]);
   }
 
+  test_method_result_assertInitializer() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+class B {
+  B(A a) :
+    assert(a.foo() != 7);
+}
+''');
+  }
+
+  test_method_result_assertStatement() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+void f(A a) {
+  assert(a.foo() != 7);
+}
+''');
+  }
+
   test_method_result_assigned() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -513,6 +544,234 @@
 ''');
   }
 
+  test_method_result_binaryExpression() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+void f(A a) {
+  1 + a.foo();
+}
+''');
+  }
+
+  test_method_result_conditional() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  if (a.foo()) {}
+}
+''');
+  }
+
+  test_method_result_constructorCall() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+class B {
+  B(int i);
+}
+
+void f(A a) {
+  new B(a.foo());
+}
+''');
+  }
+
+  test_method_result_doWhile() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  do {}
+  while (a.foo());
+}
+''');
+  }
+
+  test_method_result_fieldInitializer() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+class B {
+  int i;
+  B(A a) : i = a.foo();
+}
+''');
+  }
+
+  test_method_result_for() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+void f(A a) {
+  for (var i = 1; i < a.foo(); i++) {}
+}
+''');
+  }
+
+  test_method_result_for_updaters() async {
+    await assertErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+void f(A a) {
+  for (var i = 1; i < 7; a.foo()) {}
+}
+''', [
+      error(HintCode.UNUSED_RESULT, 119, 3),
+    ]);
+  }
+
+  test_method_result_forElement() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  List<int> foo() => [];
+}
+
+void f(A a) {
+  // Note that the list literal is unused, but we unconditionally consider use
+  // within a list literal to be "use of result."
+  [
+    for (var e in a.foo()) e,
+  ];
+}
+''');
+  }
+
+  test_method_result_forIn() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  List<int> foo() => [];
+}
+
+void f(A a) {
+  for (var _ in a.foo()) {}
+}
+''');
+  }
+
+  test_method_result_ifElement() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  // Note that the list literal is unused, but we unconditionally consider use
+  // within a list literal to be "use of result."
+  [
+    if (a.foo()) 1,
+  ];
+}
+''');
+  }
+
+  test_method_result_ifNull() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int? foo() => 1;
+}
+
+int f(A a) {
+  return a.foo() ?? 7;
+}
+''');
+  }
+
+  test_method_result_indexExpression() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+void f(A a, List<int> list) {
+  list[a.foo()];
+}
+''');
+  }
+
+  test_method_result_nullCheck_isUsed() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int? foo() => 1;
+}
+
+int f(A a) {
+  return a.foo()!;
+}
+''');
+  }
+
+  test_method_result_nullCheck_notUsed() async {
+    await assertErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int? foo() => 1;
+}
+
+void f(A a) {
+  a.foo()!;
+}
+''', [
+      error(HintCode.UNUSED_RESULT, 97, 3),
+    ]);
+  }
+
   test_method_result_passed() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -544,6 +803,57 @@
 ''');
   }
 
+  test_method_result_spread() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  List<int> foo() => [];
+}
+
+void f(A a) {
+  // Note that the list literal is unused, but we unconditionally consider use
+  // within a list literal to be "use of result."
+  [...a.foo()];
+}
+''');
+  }
+
+  test_method_result_superInitializer() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+class B {
+  B(int i);
+}
+
+class C extends B {
+  C(A a) : super(a.foo());
+}
+''');
+  }
+
+  test_method_result_switchCondition() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  switch (a.foo()) {}
+}
+''');
+  }
+
   test_method_result_targetedMethod() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -572,6 +882,21 @@
 ''');
   }
 
+  test_method_result_thrown() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  throw a.foo();
+}
+''');
+  }
+
   test_method_result_unassigned() async {
     await assertErrorsInCode(r'''
 import 'package:meta/meta.dart';
@@ -639,6 +964,36 @@
 ''');
   }
 
+  test_method_result_while() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  bool foo() => false;
+}
+
+void f(A a) {
+  while (a.foo()) {}
+}
+''');
+  }
+
+  test_method_result_yield() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+
+class A {
+  @useResult
+  int foo() => 1;
+}
+
+Stream<int> f(A a) async* {
+  yield a.foo();
+}
+''');
+  }
+
   test_topLevelFunction_result_assigned() async {
     await assertNoErrorsInCode(r'''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
index 2f968cd..3f0c9a4 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnusedShownNameTest extends PubPackageResolutionTest {
   test_extension_instance_method_unused() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String empty() => '';
 }
@@ -34,7 +34,7 @@
   }
 
   test_extension_instance_method_used() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 extension E on String {
   String empty() => '';
 }
@@ -49,7 +49,7 @@
   }
 
   test_referenced_prefixed_assignmentExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -63,7 +63,7 @@
   }
 
   test_referenced_prefixed_postfixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -77,7 +77,7 @@
   }
 
   test_referenced_prefixed_prefixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -91,7 +91,7 @@
   }
 
   test_referenced_unprefixed_assignmentExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -105,7 +105,7 @@
   }
 
   test_referenced_unprefixed_postfixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -119,7 +119,7 @@
   }
 
   test_referenced_unprefixed_prefixExpression() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 var a = 0;
 ''');
 
@@ -133,7 +133,7 @@
   }
 
   test_unreferenced() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
@@ -157,7 +157,7 @@
   }
 
   test_unusedShownName_as() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 ''');
@@ -170,7 +170,7 @@
   }
 
   test_unusedShownName_duplicates() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 class A {}
 class B {}
 class C {}
@@ -188,7 +188,7 @@
   }
 
   test_unusedShownName_topLevelVariable() async {
-    newFile('$testPackageLibPath/lib1.dart', content: r'''
+    newFile2('$testPackageLibPath/lib1.dart', r'''
 const int var1 = 1;
 const int var2 = 2;
 const int var3 = 3;
diff --git a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
index ceca9ef..b411c0c 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
@@ -43,7 +43,7 @@
   }
 
   test_import_appears_after_deleting_target() async {
-    String filePath = newFile('$testPackageLibPath/target.dart').path;
+    String filePath = newFile2('$testPackageLibPath/target.dart', '').path;
 
     await assertErrorsInCode('''
 import 'target.dart';
@@ -53,7 +53,10 @@
 
     // Remove the overlay in the same way as AnalysisServer.
     deleteFile(filePath);
-    driverFor(testFilePath).removeFile(filePath);
+
+    var analysisDriver = driverFor(testFilePath);
+    analysisDriver.removeFile(filePath);
+    await analysisDriver.applyPendingFileChanges();
 
     await resolveTestFile();
     assertErrorsInResult([
@@ -69,7 +72,7 @@
       error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 13),
     ]);
 
-    newFile('$testPackageLibPath/target.dart');
+    newFile2('$testPackageLibPath/target.dart', '');
 
     // Make sure the error goes away.
     // TODO(brianwilkerson) The error does not go away, possibly because the
diff --git a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
index 3deb2aa..bef10e6 100644
--- a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
@@ -115,13 +115,11 @@
   }
 
   test_setter_static() async {
-    await assertErrorsInCode(r'''
+    await assertNoErrorsInCode(r'''
 enum E {
   v;
   static set values(_) {}
 }
-''', [
-      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 27, 6),
-    ]);
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/fasta/ast_builder_test.dart b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
index 059b211..8c4659e 100644
--- a/pkg/analyzer/test/src/fasta/ast_builder_test.dart
+++ b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
@@ -15,6 +15,71 @@
 
 @reflectiveTest
 class AstBuilderTest extends ParserDiagnosticsTest {
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48541')
+  void test_class_augment() {
+    var parseResult = parseStringWithErrors(r'''
+augment class A {}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.classDeclaration('class A {}');
+    assertParsedNodeText(node, r'''
+ClassDeclaration
+  augmentKeyword: augment
+  classKeyword: class
+  name: SimpleIdentifier
+    token: A
+  leftBracket: {
+  rightBracket: }
+''');
+  }
+
+  void test_class_macro() {
+    var parseResult = parseStringWithErrors(r'''
+macro class A {}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.classDeclaration('class A {}');
+    assertParsedNodeText(node, r'''
+ClassDeclaration
+  macroKeyword: macro
+  classKeyword: class
+  name: SimpleIdentifier
+    token: A
+  leftBracket: {
+  rightBracket: }
+''');
+  }
+
+  void test_classAlias_macro() {
+    var parseResult = parseStringWithErrors(r'''
+mixin M {}
+macro class A = Object with M;
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.classTypeAlias('class A');
+    assertParsedNodeText(node, r'''
+ClassTypeAlias
+  typedefKeyword: class
+  name: SimpleIdentifier
+    token: A
+  equals: =
+  macroKeyword: macro
+  superclass: NamedType
+    name: SimpleIdentifier
+      token: Object
+  withClause: WithClause
+    withKeyword: with
+    mixinTypes
+      NamedType
+        name: SimpleIdentifier
+          token: M
+  semicolon: ;
+''');
+  }
+
   void test_constructor_factory_misnamed() {
     var parseResult = parseStringWithErrors(r'''
 class A {
@@ -78,6 +143,7 @@
 ''');
     parseResult.assertErrors([
       error(ParserErrorCode.MISSING_IDENTIFIER, 14, 1),
+      error(ParserErrorCode.EXPECTED_TOKEN, 14, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v.');
@@ -102,7 +168,9 @@
   v.named;
 }
 ''');
-    parseResult.assertNoErrors();
+    parseResult.assertErrors([
+      error(ParserErrorCode.EXPECTED_TOKEN, 13, 5),
+    ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v.');
     assertParsedNodeText(node, r'''
@@ -127,6 +195,7 @@
 }
 ''');
     parseResult.assertErrors([
+      error(ParserErrorCode.EXPECTED_TOKEN, 13, 1),
       error(ParserErrorCode.MISSING_IDENTIFIER, 13, 1),
     ]);
 
@@ -153,9 +222,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
-          12, 5),
       error(ParserErrorCode.MISSING_IDENTIFIER, 19, 1),
+      error(ParserErrorCode.EXPECTED_TOKEN, 19, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>.');
@@ -181,7 +249,6 @@
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48380')
   void test_enum_constant_name_typeArguments_dot_semicolon() {
     var parseResult = parseStringWithErrors(r'''
 enum E {
@@ -189,9 +256,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
-          12, 5),
       error(ParserErrorCode.MISSING_IDENTIFIER, 18, 1),
+      error(ParserErrorCode.EXPECTED_TOKEN, 18, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>');
@@ -199,23 +265,23 @@
         node,
         r'''
 EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
   arguments: EnumConstantArguments
-    argumentList: ArgumentList
-      leftParenthesis: ( <synthetic>
-      rightParenthesis: ) <synthetic>
-    constructorSelector: ConstructorSelector
-      name: SimpleIdentifier
-        token: <empty> <synthetic>
-      period: .
     typeArguments: TypeArgumentList
+      leftBracket: <
       arguments
         NamedType
           name: SimpleIdentifier
             token: int
-      leftBracket: <
       rightBracket: >
-  name: SimpleIdentifier
-    token: v
+    constructorSelector: ConstructorSelector
+      period: .
+      name: SimpleIdentifier
+        token: <empty> <synthetic>
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
 ''',
         withCheckingLinking: true);
   }
@@ -227,8 +293,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
-          15, 5),
+      error(ParserErrorCode.EXPECTED_TOKEN, 19, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>');
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
index 0622739..da370bd 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
@@ -169,13 +169,13 @@
           GatheringErrorListener(checkRanges: true);
       parseCompilationUnit2(base.toString(), listener, featureSet: featureSet);
       var baseErrorCodes = <ErrorCode>[];
-      listener.errors.forEach((AnalysisError error) {
+      for (var error in listener.errors) {
         if (error.errorCode == ParserErrorCode.BREAK_OUTSIDE_OF_LOOP ||
             error.errorCode == ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP ||
             error.errorCode == ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE) {
           baseErrorCodes.add(error.errorCode);
         }
-      });
+      }
 
       var expectedValidCodeErrors = <ErrorCode>[];
       expectedValidCodeErrors.addAll(baseErrorCodes);
diff --git a/pkg/analyzer/test/src/hint/sdk_constraint_extractor_test.dart b/pkg/analyzer/test/src/hint/sdk_constraint_extractor_test.dart
index 5d90e76..b02ead8 100644
--- a/pkg/analyzer/test/src/hint/sdk_constraint_extractor_test.dart
+++ b/pkg/analyzer/test/src/hint/sdk_constraint_extractor_test.dart
@@ -18,7 +18,7 @@
 class SdkConstraintExtractorTest with ResourceProviderMixin {
   SdkConstraintExtractor extractorFor(String pubspecContent) {
     String pubspecPath = '/pkg/test/pubspec.yaml';
-    File pubspecFile = newFile(pubspecPath, content: pubspecContent);
+    File pubspecFile = newFile2(pubspecPath, pubspecContent);
     return SdkConstraintExtractor(pubspecFile);
   }
 
diff --git a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
index 5beaead..6e1f3c9 100644
--- a/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/linter_context_impl_test.dart
@@ -244,7 +244,7 @@
   }
 
   void test_true_computeDependencies() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 0;
 ''');
 
@@ -285,7 +285,7 @@
 
   void test_true_importedClass_defaultValue() async {
     var aPath = convertPath('$testPackageLibPath/a.dart');
-    newFile(aPath, content: r'''
+    newFile2(aPath, r'''
 class A {
   final int a;
   const A({int b = 1}) : a = b * 2;
@@ -334,7 +334,7 @@
   }
 
   void test_listLiteral_true_computeDependencies() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 0;
 ''');
 
@@ -499,7 +499,7 @@
   }
 
   test_hasValue_constantReference_imported() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 const a = 42;
 ''');
     await resolve('''
diff --git a/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart b/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
index 0520a63..37080e4 100644
--- a/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
+++ b/pkg/analyzer/test/src/lint/linter/resolve_name_in_scope_test.dart
@@ -46,7 +46,7 @@
   }
 
   test_class_getter_different_importScope() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 set foo(int _) {}
 ''');
     await resolve('''
@@ -116,7 +116,7 @@
   }
 
   test_class_getter_requested_importScope() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 int get foo => 0;
 ''');
     await resolve('''
@@ -276,7 +276,7 @@
   }
 
   test_class_method_requested_importScope() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 void foo() {}
 ''');
     await resolve('''
@@ -530,7 +530,7 @@
   }
 
   test_class_setter_requested_importScope() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 set foo(int _) {}
 ''');
     await resolve('''
diff --git a/pkg/analyzer/test/src/lint/pub_test.dart b/pkg/analyzer/test/src/lint/pub_test.dart
index aa4dfe1..303e6d3 100644
--- a/pkg/analyzer/test/src/lint/pub_test.dart
+++ b/pkg/analyzer/test/src/lint/pub_test.dart
@@ -203,13 +203,13 @@
 testDepListContains(
     String label, PSDependencyList? list, List<Map<String, String>> exp) {
   test(label, () {
-    exp.forEach((Map<String, String> entry) {
+    for (var entry in exp) {
       entry.forEach((k, v) {
         PSDependency dep = findDependency(list, name: k);
         expect(dep, isNotNull);
         expect(dep.version!.value.text, equals(v));
       });
-    });
+    }
   });
 }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
index 8cd2803..00030c8 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
@@ -25,7 +25,7 @@
   }
 
   test_assetDoesNotExist_path_inRoot_noError() {
-    newFile('/sample/assets/my_icon.png');
+    newFile2('/sample/assets/my_icon.png', '');
     assertNoErrors('''
 name: sample
 flutter:
@@ -35,7 +35,7 @@
   }
 
   test_assetDoesNotExist_path_inSubdir_noError() {
-    newFile('/sample/assets/images/2.0x/my_icon.png');
+    newFile2('/sample/assets/images/2.0x/my_icon.png', '');
     assertNoErrors('''
 name: sample
 flutter:
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
index 89b9c89..d0ca77d 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
@@ -32,7 +32,7 @@
   }
 
   test_assetFieldNotList_noError() {
-    newFile('/sample/assets/my_icon.png');
+    newFile2('/sample/assets/my_icon.png', '');
     assertNoErrors('''
 name: sample
 flutter:
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart
index dd68fb2..298d360 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart
@@ -36,7 +36,7 @@
   }
 
   test_assetNotString_noError() {
-    newFile('/sample/assets/my_icon.png');
+    newFile2('/sample/assets/my_icon.png', '');
     assertNoErrors('''
 name: sample
 flutter:
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
index 85f587b..09e5955 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
@@ -36,7 +36,7 @@
   }
 
   test_flutterFieldNotMap_noError() {
-    newFile('/sample/assets/my_icon.png');
+    newFile2('/sample/assets/my_icon.png', '');
     assertNoErrors('''
 name: sample
 flutter:
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 357ca89..84e997f 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -14,6 +14,8 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/resolution/context_collection_resolution.dart';
+
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AvailableDeclarationsTest);
@@ -38,43 +40,20 @@
 
   Folder get sdkRoot => newFolder('/sdk');
 
-  void addDotPackagesDependency(String path, String name, String rootPath) {
-    var packagesFile = getFile(path);
-
-    String packagesContent;
-    try {
-      packagesContent = packagesFile.readAsStringSync();
-    } catch (_) {
-      packagesContent = '';
-    }
-
-    // Ignore if there is already the same package dependency.
-    if (packagesContent.contains('$name:file://')) {
-      return;
-    }
-
-    rootPath = convertPath(rootPath);
-    packagesContent += '$name:${toUri('$rootPath/lib')}\n';
-
-    packagesFile.writeAsStringSync(packagesContent);
-
-    createAnalysisContexts();
-  }
-
-  void addTestPackageDependency(String name, String rootPath) {
-    addDotPackagesDependency('/home/test/.packages', name, rootPath);
-  }
-
   /// Create all analysis contexts in `/home`.
   void createAnalysisContexts() {
+    createAnalysisContexts0('/home', '/home/test');
+  }
+
+  void createAnalysisContexts0(String rootPath, String testPath) {
     analysisContextCollection = AnalysisContextCollectionImpl(
-      includedPaths: [convertPath('/home')],
+      includedPaths: [convertPath(rootPath)],
       resourceProvider: resourceProvider,
       sdkPath: sdkRoot.path,
     );
 
-    var testPath = convertPath('/home/test');
-    testAnalysisContext = getContext(testPath);
+    var testPath_ = convertPath(testPath);
+    testAnalysisContext = getContext(testPath_);
   }
 
   /// Create an analysis options file based on the given arguments.
@@ -87,7 +66,7 @@
         buffer.writeln('    - $experiment');
       }
     }
-    newFile(analysisOptionsPath, content: buffer.toString());
+    newFile2(analysisOptionsPath, buffer.toString());
 
     createAnalysisContexts();
   }
@@ -107,32 +86,62 @@
     );
 
     newFolder('/home/test');
-    newDotPackagesFile('/home/test', content: '''
-test:${toUri('/home/test/lib')}
-''');
+    writeTestPackageConfig(
+      PackageConfigFileBuilder(),
+    );
 
     createAnalysisContexts();
   }
+
+  void writePackageConfig(
+    String directoryPath,
+    PackageConfigFileBuilder config,
+  ) {
+    newPackageConfigJsonFile(
+      directoryPath,
+      config.toContent(
+        toUriStr: toUriStr,
+      ),
+    );
+    createAnalysisContexts();
+  }
+
+  void writeTestPackageConfig(PackageConfigFileBuilder config) {
+    config = config.copy();
+
+    config.add(
+      name: 'test',
+      rootPath: '/home/test',
+    );
+
+    writePackageConfig('/home/test', config);
+  }
 }
 
 @reflectiveTest
 class AvailableDeclarationsTest extends _Base {
   test_changesStream_noDuplicates() async {
-    newFile('/home/aaa/lib/a.dart', content: 'class A {}');
+    newFile2('/home/aaa/lib/a.dart', 'class A {}');
 
     newPubspecYamlFile('/home/bbb', r'''
 dependencies:
   aaa: any
 ''');
-    addDotPackagesDependency('/home/bbb/.packages', 'aaa', '/home/aaa');
-    newFile('/home/bbb/lib/b.dart', content: 'class B {}');
+    writePackageConfig(
+      '/home/bbb',
+      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: '/home/aaa'),
+    );
+    newFile2('/home/bbb/lib/b.dart', 'class B {}');
 
     newPubspecYamlFile('/home/ccc', r'''
 dependencies:
   aaa: any
 ''');
-    addDotPackagesDependency('/home/ccc/.packages', 'aaa', '/home/aaa');
-    newFile('/home/ccc/lib/c.dart', content: 'class C {}');
+    writePackageConfig(
+      '/home/ccc',
+      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: '/home/aaa'),
+    );
+    newFile2('/home/ccc/lib/c.dart', 'class C {}');
 
     createAnalysisContexts();
 
@@ -157,7 +166,7 @@
   }
 
   test_discardContexts() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class A {}
 ''');
 
@@ -180,7 +189,7 @@
   }
 
   test_getContext() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 ''');
@@ -189,7 +198,7 @@
   }
 
   test_getLibrary() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -203,7 +212,7 @@
   }
 
   test_getLibrary_export_notExisting() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 export 'b.dart';
 class A {}
 ''');
@@ -222,7 +231,7 @@
       convertPath('/home/test/lib'),
     );
 
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 export 'foo/a.dart';
 class A {}
 ''');
@@ -236,13 +245,13 @@
   }
 
   test_readByteStore() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart' show A;
 part 'b.dart';
 class C {}
@@ -287,10 +296,10 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part 'a.dart';
 class B {}
 ''');
@@ -307,7 +316,7 @@
       ]),
     ]);
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A2 {}
 ''');
     tracker.changeFile(a);
@@ -333,15 +342,15 @@
     var c = convertPath('/home/test/lib/c.dart');
     var d = convertPath('/home/test/lib/d.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 export 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 export 'c.dart';
 class B {}
 ''');
-    newFile(d, content: r'''
+    newFile2(d, r'''
 class D {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -367,7 +376,7 @@
       ]),
     ]);
 
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
     tracker.changeFile(c);
@@ -408,7 +417,7 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 ''');
     var declarationsContext = tracker.addContext(testAnalysisContext);
@@ -421,7 +430,7 @@
     ]);
     _assertHasNoLibrary('package:test/b.dart');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class B {}
 ''');
     tracker.changeFile(b);
@@ -452,11 +461,11 @@
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 class A {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -474,7 +483,7 @@
       ]),
     ]);
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B {}
 ''');
@@ -500,7 +509,7 @@
   test_added_part_withoutLibrary() async {
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 ''');
     tracker.changeFile(b);
@@ -522,7 +531,7 @@
     tracker.addContext(testContext);
     await _doAllTrackerWork();
 
-    newFile(filePath, content: 'class A {}');
+    newFile2(filePath, 'class A {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -537,7 +546,7 @@
       relevanceTags: ['ElementKind.CLASS', 'package:test/test.dart::A'],
     );
 
-    newFile(filePath, content: 'class B {}');
+    newFile2(filePath, 'class B {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -563,7 +572,9 @@
 dependencies:
   aaa: any
 ''');
-    addTestPackageDependency('aaa', '/packages/aaa');
+    writeTestPackageConfig(
+      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: '/packages/aaa'),
+    );
 
     var homeContext = analysisContextCollection.contextFor(homePath);
     var testContext = analysisContextCollection.contextFor(testPath);
@@ -572,7 +583,7 @@
     tracker.addContext(testContext);
     await _doAllTrackerWork();
 
-    newFile(filePath, content: 'class A {}');
+    newFile2(filePath, 'class A {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -587,7 +598,7 @@
       relevanceTags: ['ElementKind.CLASS', 'package:aaa/a.dart::A'],
     );
 
-    newFile(filePath, content: 'class B {}');
+    newFile2(filePath, 'class B {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -609,7 +620,7 @@
     tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
 
-    newFile(filePath, content: 'class A {}');
+    newFile2(filePath, 'class A {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -624,7 +635,7 @@
       relevanceTags: ['ElementKind.CLASS', 'dart:math::A'],
     );
 
-    newFile(filePath, content: 'class B {}');
+    newFile2(filePath, 'class B {}');
     uriToLibrary.clear();
     tracker.changeFile(filePath);
     await _doAllTrackerWork();
@@ -646,18 +657,18 @@
     var c = convertPath('/home/test/lib/c.dart');
     var d = convertPath('/home/test/lib/d.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 export 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 export 'c.dart';
 class B {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
-    newFile(d, content: r'''
+    newFile2(d, r'''
 class D {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -722,8 +733,8 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: '');
-    newFile(b, content: '');
+    newFile2(a, '');
+    newFile2(b, '');
     tracker.addContext(testAnalysisContext);
 
     await _doAllTrackerWork();
@@ -742,10 +753,10 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 ''');
     tracker.addContext(testAnalysisContext);
@@ -767,15 +778,15 @@
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -814,7 +825,7 @@
   test_deleted_part_withoutLibrary() async {
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 ''');
     tracker.addContext(testAnalysisContext);
@@ -830,18 +841,18 @@
     var c = convertPath('/home/test/lib/c.dart');
     var d = convertPath('/home/test/lib/d.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 export 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 export 'c.dart';
 class B {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
-    newFile(d, content: r'''
+    newFile2(d, r'''
 class D {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -877,7 +888,7 @@
       ]),
     ]);
 
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C2 {}
 ''');
     tracker.changeFile(c);
@@ -920,13 +931,13 @@
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class B {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 export 'a.dart';
 export 'b.dart';
 class C {}
@@ -948,10 +959,10 @@
 
     changes.clear();
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A2 {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class B2 {}
 ''');
     tracker.changeFile(a);
@@ -987,10 +998,10 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 class B {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -1007,7 +1018,7 @@
       ]),
     ]);
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A2 {}
 ''');
     tracker.changeFile(a);
@@ -1030,11 +1041,11 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B {}
 ''');
@@ -1056,7 +1067,7 @@
       relevanceTags: ['ElementKind.CLASS', 'package:test/a.dart::B'],
     );
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 class A2 {}
 ''');
@@ -1082,7 +1093,7 @@
   test_updated_library_to_part() async {
     var a = convertPath('/home/test/lib/a.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -1094,7 +1105,7 @@
       ]),
     ]);
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part of nothing;
 class A {}
 ''');
@@ -1102,7 +1113,7 @@
     await _doAllTrackerWork();
     _assertHasNoLibrary('package:test/a.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 class A2 {}
 ''');
     tracker.changeFile(a);
@@ -1119,15 +1130,15 @@
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B {}
 ''');
-    newFile(c, content: r'''
+    newFile2(c, r'''
 class C {}
 ''');
     tracker.addContext(testAnalysisContext);
@@ -1147,7 +1158,7 @@
       ]),
     ]);
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B2 {}
 ''');
@@ -1173,11 +1184,11 @@
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part of unknown;
 class A {}
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 export 'a.dart';
 class B {}
 ''');
@@ -1191,7 +1202,7 @@
       ]),
     ]);
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part of unknown;
 class A2 {}
 ''');
@@ -1208,7 +1219,7 @@
   test_updated_part_withoutLibrary() async {
     var b = convertPath('/home/test/lib/b.dart');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B {}
 ''');
@@ -1218,7 +1229,7 @@
     _assertHasNoLibrary('package:test/a.dart');
     _assertHasNoLibrary('package:test/b.dart');
 
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 class B2 {}
 ''');
@@ -1233,7 +1244,7 @@
 @reflectiveTest
 class DartdocInfoTest extends _Base {
   test_samePackage() async {
-    File file = newFile('/home/aaa/lib/definition.dart', content: '''
+    File file = newFile2('/home/aaa/lib/definition.dart', '''
 /// {@template foo}
 /// Body of the template.
 /// {@endtemplate}
@@ -1262,7 +1273,7 @@
 @reflectiveTest
 class DeclarationTest extends _Base {
   test_CLASS() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class A {}
 
 abstract class B {}
@@ -1312,7 +1323,7 @@
   }
 
   test_class_FIELD() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {
   static int f1 = 0;
 
@@ -1417,7 +1428,7 @@
   }
 
   test_class_GETTER() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {
   static int get g1 => 0;
 
@@ -1474,7 +1485,7 @@
   }
 
   test_class_METHOD() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {
   static void m1() {}
 
@@ -1562,7 +1573,7 @@
   }
 
   test_class_SETTER() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {
   static set s1(int value) {}
 
@@ -1631,7 +1642,7 @@
   }
 
   test_CLASS_TYPE_ALIAS() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 mixin M {}
 
 class A = Object with M;
@@ -1673,7 +1684,7 @@
   }
 
   test_CONSTRUCTOR() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {
   int f1;
   int f2;
@@ -1778,7 +1789,7 @@
   }
 
   test_ENUM() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 enum A {v}
 
 @deprecated
@@ -1818,7 +1829,7 @@
   }
 
   test_ENUM_CONSTANT() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 enum MyEnum {
   a,
 
@@ -1875,7 +1886,7 @@
 
   test_EXTENSION() async {
     createAnalysisOptionsFile(experiments: [EnableString.extension_methods]);
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 extension A on String {}
 
 extension on String {}
@@ -1918,7 +1929,7 @@
   }
 
   test_FUNCTION() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 void a() {}
 
 @deprecated
@@ -2002,7 +2013,7 @@
   }
 
   test_FUNCTION_defaultArgumentList() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 void a() {}
 
 void b(int a, double bb, String ccc) {}
@@ -2069,7 +2080,7 @@
   }
 
   test_FUNCTION_TYPE_ALIAS() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 typedef A = void Function();
 
 @deprecated
@@ -2182,7 +2193,7 @@
   }
 
   test_FUNCTION_TYPE_ALIAS_noFunction() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 typedef A = ;
 ''');
 
@@ -2194,7 +2205,7 @@
   }
 
   test_FUNCTION_TYPE_ALIAS_old() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 typedef void A();
 
 @deprecated
@@ -2307,7 +2318,7 @@
   }
 
   test_GETTER() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 int get a => 0;
 
 @deprecated
@@ -2350,12 +2361,12 @@
   }
 
   test_library_isDeprecated() async {
-    newFile('/home/test/lib/a.dart', content: '');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', '');
+    newFile2('/home/test/lib/b.dart', r'''
 @deprecated
 library my.lib;
 ''');
-    newFile('/home/test/lib/c.dart', content: r'''
+    newFile2('/home/test/lib/c.dart', r'''
 @Deprecated('description')
 library my.lib;
 ''');
@@ -2369,7 +2380,7 @@
   }
 
   test_library_partDirective_empty() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 part ' ';
 
 class A {}
@@ -2388,7 +2399,7 @@
   }
 
   test_library_partDirective_incomplete() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 part
 
 class A {}
@@ -2407,15 +2418,15 @@
   }
 
   test_library_parts() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 part of 'test.dart';
 class A {}
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 part of 'test.dart';
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 part 'a.dart';
 part 'b.dart';
 class C {}
@@ -2437,12 +2448,12 @@
   }
 
   test_library_publicOnly() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 part of 'test.dart';
 class A {}
 class _A {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 part 'a.dart';
 class B {}
 class _B {}
@@ -2461,12 +2472,12 @@
   }
 
   test_library_publicOnly_enum() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 part of 'test.dart';
 enum A {a, _a}
 enum _A {a, _a}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 part 'a.dart';
 enum B {b, _b}
 enum _B {b, _b}
@@ -2490,7 +2501,7 @@
 
 class B {}
 ''';
-    var testPath = newFile('/home/test/lib/test.dart', content: code).path;
+    var testPath = newFile2('/home/test/lib/test.dart', code).path;
 
     tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
@@ -2519,7 +2530,7 @@
   }
 
   test_MIXIN() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 mixin A {}
 
 @deprecated
@@ -2560,7 +2571,7 @@
   }
 
   test_SETTER() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 set a(int value) {}
 
 @deprecated
@@ -2612,7 +2623,7 @@
   }
 
   test_TYPE_ALIAS() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 typedef A = double;
 
 @deprecated
@@ -2667,7 +2678,7 @@
   }
 
   test_VARIABLE() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 int a;
 
 @deprecated
@@ -2737,7 +2748,7 @@
 @reflectiveTest
 class ExportTest extends _Base {
   test_classTypeAlias() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 mixin M {}
 class A = Object with M;
 ''');
@@ -2751,12 +2762,12 @@
   }
 
   test_combinators_hide() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 class C {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart' hide B;
 class D {}
 ''');
@@ -2777,12 +2788,12 @@
   }
 
   test_combinators_show() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 class C {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart' show B;
 class D {}
 ''');
@@ -2800,11 +2811,11 @@
   }
 
   test_combinators_show_enum() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 enum E1 {a}
 enum E2 {b}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart' show E1;
 ''');
     tracker.addContext(testAnalysisContext);
@@ -2818,15 +2829,15 @@
   }
 
   test_cycle() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 export 'b.dart';
 class A {}
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'b.dart';
 class C {}
 ''');
@@ -2866,7 +2877,7 @@
   }
 
   test_enum() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 enum E1 {a, b}
 enum E2 {a, b}
 ''');
@@ -2886,7 +2897,7 @@
   }
 
   test_function() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 int foo() => 0;
 int bar() => 0;
 ''');
@@ -2900,7 +2911,7 @@
   }
 
   test_functionTypeAlias() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 typedef F = int Function();
 ''');
     tracker.addContext(testAnalysisContext);
@@ -2912,7 +2923,7 @@
   }
 
   test_missing() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart';
 class C {}
 ''');
@@ -2927,14 +2938,14 @@
   }
 
   test_sequence() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'b.dart';
 class C {}
 ''');
@@ -2971,11 +2982,11 @@
   }
 
   test_shadowedByLocal() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart';
 
 mixin B {}
@@ -2992,11 +3003,11 @@
   }
 
   test_simple() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 ''');
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 export 'a.dart';
 class C {}
 ''');
@@ -3017,7 +3028,7 @@
   }
 
   test_variable() async {
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 int foo = 0;
 ''');
     tracker.addContext(testAnalysisContext);
@@ -3031,168 +3042,14 @@
 
 @reflectiveTest
 class GetLibrariesTest extends _Base {
-  test_bazel() async {
-    newFile('/home/aaa/lib/a.dart', content: 'class A {}');
-    newFile('/home/aaa/lib/src/a2.dart', content: 'class A2 {}');
-
-    newFile('/home/bbb/lib/b.dart', content: 'class B {}');
-    newFile('/home/bbb/lib/src/b2.dart', content: 'class B2 {}');
-
-    newFile('/home/material_button/BUILD', content: '');
-    newFile(
-      '/home/material_button/lib/button.dart',
-      content: 'class MaterialButton {}',
-    );
-    newFile(
-      '/home/material_button/test/button_test.dart',
-      content: 'class MaterialButtonTest {}',
-    );
-
-    newFile('/home/material_button/testing/BUILD', content: '');
-    newFile(
-      '/home/material_button/testing/lib/material_button_po.dart',
-      content: 'class MaterialButtonPO {}',
-    );
-
-    var packagesFilePath = '/home/material_button/.packages';
-    addDotPackagesDependency(packagesFilePath, 'aaa', '/home/aaa');
-    addDotPackagesDependency(packagesFilePath, 'bbb', '/home/bbb');
-    addDotPackagesDependency(
-      packagesFilePath,
-      'material_button',
-      '/home/material_button',
-    );
-    addDotPackagesDependency(
-      packagesFilePath,
-      'material_button_testing',
-      '/home/material_button/testing',
-    );
-
-    var analysisContext = analysisContextCollection.contextFor(
-      convertPath('/home/material_button'),
-    );
-    var context = tracker.addContext(analysisContext);
-    context.setDependencies({
-      convertPath('/home/material_button'): [convertPath('/home/aaa/lib')],
-      convertPath('/home/material_button/testing'): [
-        convertPath('/home/bbb/lib'),
-        convertPath('/home/material_button/lib'),
-      ],
-    });
-    await _doAllTrackerWork();
-
-    _assertHasLibrary('package:aaa/a.dart', declarations: [
-      _ExpectedDeclaration.class_('A', [
-        _ExpectedDeclaration.constructor(''),
-      ]),
-    ]);
-    _assertHasNoLibrary('package:aaa/src/a2.dart');
-
-    _assertHasLibrary('package:bbb/b.dart', declarations: [
-      _ExpectedDeclaration.class_('B', [
-        _ExpectedDeclaration.constructor(''),
-      ]),
-    ]);
-    _assertHasNoLibrary('package:bbb/src/b2.dart');
-
-    _assertHasLibrary('package:material_button/button.dart', declarations: [
-      _ExpectedDeclaration.class_('MaterialButton', [
-        _ExpectedDeclaration.constructor(''),
-      ]),
-    ]);
-    _assertHasLibrary(
-      toUriStr('/home/material_button/test/button_test.dart'),
-      declarations: [
-        _ExpectedDeclaration.class_('MaterialButtonTest', [
-          _ExpectedDeclaration.constructor(''),
-        ]),
-      ],
-    );
-    _assertHasLibrary(
-      'package:material_button_testing/material_button_po.dart',
-      declarations: [
-        _ExpectedDeclaration.class_('MaterialButtonPO', [
-          _ExpectedDeclaration.constructor(''),
-        ]),
-      ],
-    );
-
-    {
-      var path = convertPath('/home/material_button/lib/_.dart');
-      var libraries = context.getLibraries(path);
-      _assertHasLibraries(
-        libraries.sdk,
-        uriList: ['dart:core', 'dart:async'],
-      );
-      _assertHasLibraries(
-        libraries.dependencies,
-        uriList: ['package:aaa/a.dart'],
-        only: true,
-      );
-      _assertHasLibraries(
-        libraries.context,
-        uriList: [
-          'package:material_button/button.dart',
-        ],
-        only: true,
-      );
-    }
-
-    {
-      var path = convertPath('/home/material_button/test/_.dart');
-      var libraries = context.getLibraries(path);
-      _assertHasLibraries(
-        libraries.sdk,
-        uriList: ['dart:core', 'dart:async'],
-      );
-      _assertHasLibraries(
-        libraries.dependencies,
-        uriList: ['package:aaa/a.dart'],
-        only: true,
-      );
-      _assertHasLibraries(
-        libraries.context,
-        uriList: [
-          'package:material_button/button.dart',
-          toUriStr('/home/material_button/test/button_test.dart'),
-        ],
-        only: true,
-      );
-    }
-
-    {
-      var path = convertPath('/home/material_button/testing/lib/_.dart');
-      var libraries = context.getLibraries(path);
-      _assertHasLibraries(
-        libraries.sdk,
-        uriList: ['dart:core', 'dart:async'],
-      );
-      _assertHasLibraries(
-        libraries.dependencies,
-        uriList: [
-          'package:bbb/b.dart',
-          'package:material_button/button.dart',
-        ],
-        only: true,
-      );
-      _assertHasLibraries(
-        libraries.context,
-        uriList: [
-          'package:material_button_testing/material_button_po.dart',
-        ],
-        only: true,
-      );
-    }
-  }
-
   test_excludeSelf() async {
     var a = convertPath('/home/test/lib/a.dart');
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a);
-    newFile(b);
-    newFile(c);
+    newFile2(a, '');
+    newFile2(b, '');
+    newFile2(c, '');
 
     var context = tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
@@ -3221,13 +3078,13 @@
     var b = convertPath('/home/test/lib/b.dart');
     var c = convertPath('/home/test/lib/c.dart');
 
-    newFile(a, content: r'''
+    newFile2(a, r'''
 part 'b.dart';
 ''');
-    newFile(b, content: r'''
+    newFile2(b, r'''
 part of 'a.dart';
 ''');
-    newFile(c);
+    newFile2(c, '');
 
     var context = tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
@@ -3243,14 +3100,14 @@
   }
 
   test_pub() async {
-    newFile('/home/aaa/lib/a.dart', content: 'class A {}');
-    newFile('/home/aaa/lib/src/a2.dart', content: 'class A2 {}');
+    newFile2('/home/aaa/lib/a.dart', 'class A {}');
+    newFile2('/home/aaa/lib/src/a2.dart', 'class A2 {}');
 
-    newFile('/home/bbb/lib/b.dart', content: 'class B {}');
-    newFile('/home/bbb/lib/src/b2.dart', content: 'class B2 {}');
+    newFile2('/home/bbb/lib/b.dart', 'class B {}');
+    newFile2('/home/bbb/lib/src/b2.dart', 'class B2 {}');
 
-    newFile('/home/ccc/lib/c.dart', content: 'class C {}');
-    newFile('/home/ccc/lib/src/c2.dart', content: 'class C2 {}');
+    newFile2('/home/ccc/lib/c.dart', 'class C {}');
+    newFile2('/home/ccc/lib/src/c2.dart', 'class C2 {}');
 
     newPubspecYamlFile('/home/test', r'''
 name: test
@@ -3259,10 +3116,10 @@
 dev_dependencies:
   bbb: any
 ''');
-    newFile('/home/test/lib/t.dart', content: 'class T {}');
-    newFile('/home/test/lib/src/t2.dart', content: 'class T2 {}');
-    newFile('/home/test/bin/t3.dart', content: 'class T3 {}');
-    newFile('/home/test/test/t4.dart', content: 'class T4 {}');
+    newFile2('/home/test/lib/t.dart', 'class T {}');
+    newFile2('/home/test/lib/src/t2.dart', 'class T2 {}');
+    newFile2('/home/test/bin/t3.dart', 'class T3 {}');
+    newFile2('/home/test/test/t4.dart', 'class T4 {}');
 
     newPubspecYamlFile('/home/test/samples/basic', r'''
 name: test
@@ -3270,12 +3127,15 @@
   ccc: any
   test: any
 ''');
-    newFile('/home/test/samples/basic/lib/s.dart', content: 'class S {}');
+    newFile2('/home/test/samples/basic/lib/s.dart', 'class S {}');
 
-    addTestPackageDependency('aaa', '/home/aaa');
-    addTestPackageDependency('bbb', '/home/bbb');
-    addTestPackageDependency('ccc', '/home/ccc');
-    addTestPackageDependency('basic', '/home/test/samples/basic');
+    writeTestPackageConfig(
+      PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: '/home/aaa')
+        ..add(name: 'bbb', rootPath: '/home/bbb')
+        ..add(name: 'ccc', rootPath: '/home/ccc')
+        ..add(name: 'basic', rootPath: '/home/test/samples/basic'),
+    );
 
     var context = tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
@@ -3423,7 +3283,7 @@
   }
 
   test_sdk_excludesPrivate() async {
-    newFile('/home/test/lib/test.dart', content: '');
+    newFile2('/home/test/lib/test.dart', '');
 
     var context = tracker.addContext(testAnalysisContext);
     await _doAllTrackerWork();
@@ -3437,24 +3297,27 @@
   }
 
   test_setDependencies() async {
-    newFile('/home/aaa/lib/a.dart', content: r'''
+    newFile2('/home/aaa/lib/a.dart', r'''
 export 'src/a2.dart' show A2;
 class A1 {}
 ''');
-    newFile('/home/aaa/lib/src/a2.dart', content: r'''
+    newFile2('/home/aaa/lib/src/a2.dart', r'''
 class A2 {}
 class A3 {}
 ''');
-    newFile('/home/bbb/lib/b.dart', content: r'''
+    newFile2('/home/bbb/lib/b.dart', r'''
 class B {}
 ''');
 
-    addTestPackageDependency('aaa', '/home/aaa');
-    addTestPackageDependency('bbb', '/home/bbb');
+    writeTestPackageConfig(
+      PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: '/home/aaa')
+        ..add(name: 'bbb', rootPath: '/home/bbb'),
+    );
 
-    newFile('/home/test/lib/t.dart', content: 'class T {}');
-    newFile('/home/test/lib/src/t2.dart', content: 'class T2 {}');
-    newFile('/home/test/test/t3.dart', content: 'class T3 {}');
+    newFile2('/home/test/lib/t.dart', 'class T {}');
+    newFile2('/home/test/lib/src/t2.dart', 'class T2 {}');
+    newFile2('/home/test/test/t3.dart', 'class T3 {}');
 
     var context = tracker.addContext(testAnalysisContext);
     context.setDependencies({
@@ -3547,17 +3410,20 @@
   }
 
   test_setDependencies_twice() async {
-    newFile('/home/aaa/lib/a.dart', content: r'''
+    newFile2('/home/aaa/lib/a.dart', r'''
 class A {}
 ''');
-    newFile('/home/bbb/lib/b.dart', content: r'''
+    newFile2('/home/bbb/lib/b.dart', r'''
 class B {}
 ''');
 
-    addTestPackageDependency('aaa', '/home/aaa');
-    addTestPackageDependency('bbb', '/home/bbb');
+    writeTestPackageConfig(
+      PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: '/home/aaa')
+        ..add(name: 'bbb', rootPath: '/home/bbb'),
+    );
 
-    newFile('/home/test/lib/test.dart', content: r'''
+    newFile2('/home/test/lib/test.dart', r'''
 class C {}
 ''');
 
@@ -3622,9 +3488,9 @@
     var b = convertPath('/home/test/bin/b.dart');
     var c = convertPath('/home/test/bin/c.dart');
 
-    newFile(a, content: 'class A {}');
-    newFile(b, content: 'class B {}');
-    newFile(c, content: 'class C {}');
+    newFile2(a, 'class A {}');
+    newFile2(b, 'class B {}');
+    newFile2(c, 'class C {}');
     testAnalysisContext.currentSession.getFile(a);
     testAnalysisContext.currentSession.getFile(b);
     testAnalysisContext.currentSession.getFile(c);
diff --git a/pkg/analyzer/test/src/source/source_resource_test.dart b/pkg/analyzer/test/src/source/source_resource_test.dart
index 901d10f..a646957 100644
--- a/pkg/analyzer/test/src/source/source_resource_test.dart
+++ b/pkg/analyzer/test/src/source/source_resource_test.dart
@@ -55,7 +55,7 @@
   }
 
   void test_fileReadMode_changed() {
-    FileSource.fileReadMode = (String s) => s + 'xyz';
+    FileSource.fileReadMode = (String s) => '${s}xyz';
     expect(FileSource.fileReadMode('a'), 'axyz');
     expect(FileSource.fileReadMode('a\n'), 'a\nxyz');
     expect(FileSource.fileReadMode('ab'), 'abxyz');
diff --git a/pkg/analyzer/test/src/summary/dependency_walker_test.dart b/pkg/analyzer/test/src/summary/dependency_walker_test.dart
deleted file mode 100644
index 6165430..0000000
--- a/pkg/analyzer/test/src/summary/dependency_walker_test.dart
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright (c) 2016, 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:analyzer/src/summary/link.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(DependencyWalkerTest);
-  });
-}
-
-@reflectiveTest
-class DependencyWalkerTest {
-  final nodes = <String, TestNode>{};
-
-  void checkGraph(Map<String, List<String>> graph, String startingNodeName,
-      List<List<String>> expectedEvaluations, List<bool> expectedSccFlags) {
-    makeGraph(graph);
-    var walker = walk(startingNodeName);
-    expect(walker._evaluations, expectedEvaluations.map((x) => x.toSet()));
-    expect(walker._sccFlags, expectedSccFlags);
-  }
-
-  TestNode getNode(String name) =>
-      nodes.putIfAbsent(name, () => TestNode(name));
-
-  void makeGraph(Map<String, List<String>> graph) {
-    graph.forEach((name, deps) {
-      var node = getNode(name);
-      for (var dep in deps) {
-        node._dependencies.add(getNode(dep));
-      }
-    });
-  }
-
-  void test_complex_graph() {
-    checkGraph(
-        {
-          'a': ['b', 'c'],
-          'b': ['c', 'd'],
-          'c': [],
-          'd': ['c', 'e'],
-          'e': ['b', 'f'],
-          'f': ['c', 'd']
-        },
-        'a',
-        [
-          ['c'],
-          ['b', 'd', 'e', 'f'],
-          ['a']
-        ],
-        [false, true, false]);
-  }
-
-  void test_diamond() {
-    checkGraph(
-        {
-          'a': ['b', 'c'],
-          'b': ['d'],
-          'c': ['d'],
-          'd': []
-        },
-        'a',
-        [
-          ['d'],
-          ['b'],
-          ['c'],
-          ['a']
-        ],
-        [false, false, false, false]);
-  }
-
-  void test_singleNode() {
-    checkGraph(
-        {'a': []},
-        'a',
-        [
-          ['a']
-        ],
-        [false]);
-  }
-
-  void test_singleNodeWithTrivialCycle() {
-    checkGraph(
-        {
-          'a': ['a']
-        },
-        'a',
-        [
-          ['a']
-        ],
-        [true]);
-  }
-
-  void test_threeNodesWithCircularDependency() {
-    checkGraph(
-        {
-          'a': ['b'],
-          'b': ['c'],
-          'c': ['a'],
-        },
-        'a',
-        [
-          ['a', 'b', 'c']
-        ],
-        [true]);
-  }
-
-  test_twoBacklinksEarlierFirst() {
-    // Test a graph A->B->C->D, where D points back to B and then C.
-    checkGraph(
-        {
-          'a': ['b'],
-          'b': ['c'],
-          'c': ['d'],
-          'd': ['b', 'c']
-        },
-        'a',
-        [
-          ['b', 'c', 'd'],
-          ['a']
-        ],
-        [true, false]);
-  }
-
-  test_twoBacklinksLaterFirst() {
-    // Test a graph A->B->C->D, where D points back to C and then B.
-    checkGraph(
-        {
-          'a': ['b'],
-          'b': ['c'],
-          'c': ['d'],
-          'd': ['c', 'b']
-        },
-        'a',
-        [
-          ['b', 'c', 'd'],
-          ['a']
-        ],
-        [true, false]);
-  }
-
-  void test_twoNodesWithCircularDependency() {
-    checkGraph(
-        {
-          'a': ['b'],
-          'b': ['a']
-        },
-        'a',
-        [
-          ['a', 'b']
-        ],
-        [true]);
-  }
-
-  void test_twoNodesWithSimpleDependency() {
-    checkGraph(
-        {
-          'a': ['b'],
-          'b': []
-        },
-        'a',
-        [
-          ['b'],
-          ['a']
-        ],
-        [false, false]);
-  }
-
-  TestWalker walk(String startingNodeName) =>
-      TestWalker()..walk(getNode(startingNodeName));
-}
-
-class TestNode extends Node<TestNode> {
-  final String _name;
-
-  @override
-  bool isEvaluated = false;
-
-  bool _computeDependenciesCalled = false;
-
-  final _dependencies = <TestNode>[];
-
-  TestNode(this._name);
-
-  @override
-  List<TestNode> computeDependencies() {
-    expect(_computeDependenciesCalled, false);
-    _computeDependenciesCalled = true;
-    return _dependencies;
-  }
-}
-
-class TestWalker extends DependencyWalker<TestNode> {
-  final _evaluations = <Set<String>>[];
-  final _sccFlags = <bool>[];
-
-  @override
-  void evaluate(TestNode v) {
-    v.isEvaluated = true;
-    _evaluations.add({v._name});
-    _sccFlags.add(false);
-  }
-
-  @override
-  void evaluateScc(List<TestNode> scc) {
-    for (var v in scc) {
-      v.isEvaluated = true;
-    }
-    var sccNames = scc.map((node) => node._name).toSet();
-    // Make sure there were no duplicates
-    expect(sccNames.length, scc.length);
-    _evaluations.add(sccNames);
-    _sccFlags.add(true);
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 4fda1a5..23fd861 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -31,10 +31,11 @@
   if (_testPath != null && _replacements.isNotEmpty) {
     _replacements.sort((a, b) => b.offset - a.offset);
     String newCode = _testCode!;
-    _replacements.forEach((r) {
-      newCode =
-          newCode.substring(0, r.offset) + r.text + newCode.substring(r.end);
-    });
+    for (var replacement in _replacements) {
+      newCode = newCode.substring(0, replacement.offset) +
+          replacement.text +
+          newCode.substring(replacement.end);
+    }
     File(_testPath!).writeAsStringSync(newCode);
   }
 }
@@ -101,7 +102,7 @@
       int expectationEnd = _testCode!.indexOf("'''", expectationOffset);
 
       _replacements.add(
-          _Replacement(expectationOffset, expectationEnd, '\n' + actualText));
+          _Replacement(expectationOffset, expectationEnd, '\n$actualText'));
     }
   }
 
@@ -243,12 +244,6 @@
     return components.join(';');
   }
 
-  String? _typeStr(DartType? type) {
-    return type?.getDisplayString(
-      withNullability: true,
-    );
-  }
-
   void _withIndent(void Function() f) {
     var savedIndent = indent;
     indent = '$savedIndent  ';
@@ -273,6 +268,7 @@
   void _writeClassElement(ClassElement e) {
     _writeIndentedLine(() {
       _writeIf(e.isAbstract && !e.isMixin, 'abstract ');
+      _writeIf(e.isMacro, 'macro ');
       _writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
 
       if (e.isEnum) {
@@ -296,7 +292,7 @@
       var supertype = e.supertype;
       if (supertype != null &&
           (supertype.element.name != 'Object' || e.mixins.isNotEmpty)) {
-        _writeType(supertype, name: 'supertype');
+        _writeType('supertype', supertype);
       }
 
       if (e.isMixin) {
@@ -304,21 +300,21 @@
         if (superclassConstraints.isEmpty) {
           throw StateError('At least Object is expected.');
         }
-        _writeElements<DartType>(
-          'superclassConstraints',
-          superclassConstraints,
-          _writeType,
-        );
+        _writeTypeList('superclassConstraints', superclassConstraints);
       }
 
-      _writeElements<DartType>('mixins', e.mixins, _writeType);
-      _writeElements<DartType>('interfaces', e.interfaces, _writeType);
+      _writeTypeList('mixins', e.mixins);
+      _writeTypeList('interfaces', e.interfaces);
 
       _writeElements('fields', e.fields, _writePropertyInducingElement);
 
       var constructors = e.constructors;
-      expect(constructors, isNotEmpty);
-      _writeElements('constructors', constructors, _writeConstructorElement);
+      if (e.isMixin) {
+        expect(constructors, isEmpty);
+      } else {
+        expect(constructors, isNotEmpty);
+        _writeElements('constructors', constructors, _writeConstructorElement);
+      }
 
       _writeElements('accessors', e.accessors, _writePropertyAccessorElement);
       _writeElements('methods', e.methods, _writeMethodElement);
@@ -484,7 +480,7 @@
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
-      _writeType(e.extendedType, name: 'extendedType');
+      _writeType('extendedType', e.extendedType);
     });
 
     _withIndent(() {
@@ -522,7 +518,7 @@
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
     });
 
     _assertNonSyntheticElementSelf(e);
@@ -597,7 +593,7 @@
 
       _writeTypeParameterElements(e.typeParameters);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
       _writeNonSyntheticElement(e);
     });
 
@@ -672,7 +668,7 @@
     });
 
     _withIndent(() {
-      _writeType(e.type, name: 'type');
+      _writeType('type', e.type);
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
@@ -741,7 +737,7 @@
 
       expect(e.typeParameters, isEmpty);
       _writeParameterElements(e.parameters);
-      _writeType(e.returnType, name: 'returnType');
+      _writeType('returnType', e.returnType);
       _writeNonSyntheticElement(e);
     });
   }
@@ -783,7 +779,7 @@
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeInferenceError(e);
-      _writeType(e.type, name: 'type');
+      _writeType('type', e.type);
       _writeConstantInitializer(e);
       _writeNonSyntheticElement(e);
     });
@@ -800,26 +796,8 @@
     }
   }
 
-  void _writeType(DartType type, {String? name}) {
-    var typeStr = _typeStr(type);
-    if (name != null) {
-      _writelnWithIndent('$name: $typeStr');
-    } else {
-      _writelnWithIndent('$typeStr');
-    }
-
-    var alias = type.alias;
-    if (alias != null) {
-      _withIndent(() {
-        _createAstPrinter().writeElement('aliasElement', alias.element);
-
-        _writeElements<DartType>(
-          'aliasArguments',
-          alias.typeArguments,
-          _writeType,
-        );
-      });
-    }
+  void _writeType(String name, DartType type) {
+    _createAstPrinter().writeType(type, name: name);
   }
 
   void _writeTypeAliasElement(TypeAliasElement e) {
@@ -838,7 +816,7 @@
       _writeTypeParameterElements(e.typeParameters);
 
       var aliasedType = e.aliasedType;
-      _writeType(aliasedType, name: 'aliasedType');
+      _writeType('aliasedType', aliasedType);
       // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
       // TODO(scheglov) Remove it when we stop providing it everywhere.
       if (aliasedType is FunctionType) {
@@ -851,7 +829,7 @@
         _withIndent(() {
           _writeTypeParameterElements(aliasedElement.typeParameters);
           _writeParameterElements(aliasedElement.parameters);
-          _writeType(aliasedElement.returnType, name: 'returnType');
+          _writeType('returnType', aliasedElement.returnType);
         });
       }
     });
@@ -876,6 +854,10 @@
     }
   }
 
+  void _writeTypeList(String name, List<DartType> types) {
+    _createAstPrinter().writeTypeList(name, types);
+  }
+
   void _writeTypeParameterElement(TypeParameterElement e) {
     e as TypeParameterElementImpl;
 
@@ -889,12 +871,12 @@
 
       var bound = e.bound;
       if (bound != null) {
-        _writeType(bound, name: 'bound');
+        _writeType('bound', bound);
       }
 
       var defaultType = e.defaultType;
       if (defaultType != null) {
-        _writeType(defaultType, name: 'defaultType');
+        _writeType('defaultType', defaultType);
       }
 
       _writeMetadata(e);
@@ -947,3 +929,10 @@
 
   _Replacement(this.offset, this.end, this.text);
 }
+
+extension on ClassElement {
+  bool get isMacro {
+    final self = this;
+    return self is ClassElementImpl && self.isMacro;
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/elements_base.dart b/pkg/analyzer/test/src/summary/elements_base.dart
new file mode 100644
index 0000000..fb702f8
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements_base.dart
@@ -0,0 +1,309 @@
+// 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:typed_data';
+
+import 'package:analyzer/dart/analysis/declared_variables.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/context/context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
+import 'package:analyzer/src/dart/element/class_hierarchy.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
+import 'package:analyzer/src/dart/sdk/sdk.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/source/package_map_resolver.dart';
+import 'package:analyzer/src/summary2/bundle_reader.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
+import 'package:analyzer/src/summary2/link.dart';
+import 'package:analyzer/src/summary2/linked_element_factory.dart';
+import 'package:analyzer/src/summary2/reference.dart';
+import 'package:analyzer/src/test_utilities/mock_sdk.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/uri.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../util/feature_sets.dart';
+import 'test_strategies.dart';
+
+/// A base for testing building elements.
+@reflectiveTest
+abstract class ElementsBaseTest with ResourceProviderMixin {
+  /// The shared SDK bundle, computed once and shared among test invocations.
+  static _SdkBundle? _sdkBundle;
+
+  /// The set of features enabled in this test.
+  FeatureSet featureSet = FeatureSets.latestWithExperiments;
+
+  DeclaredVariables declaredVariables = DeclaredVariables();
+  late final SourceFactory sourceFactory;
+  late final FolderBasedDartSdk sdk;
+
+  ElementsBaseTest() {
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+    sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
+
+    sourceFactory = SourceFactory([
+      DartUriResolver(sdk),
+      PackageMapUriResolver(resourceProvider, {
+        'test': [
+          getFolder('/home/test/lib'),
+        ],
+      }),
+      ResourceUriResolver(resourceProvider),
+    ]);
+  }
+
+  /// We need to test both cases - when we keep linking libraries (happens for
+  /// new or invalidated libraries), and when we load libraries from bytes
+  /// (happens internally in Blaze or when we have cached summaries).
+  bool get keepLinkingLibraries;
+
+  Future<_SdkBundle> get sdkBundle async {
+    if (_sdkBundle != null) {
+      return _sdkBundle!;
+    }
+
+    var featureSet = FeatureSet.latestLanguageVersion();
+    var inputLibraries = <LinkInputLibrary>[];
+    for (var sdkLibrary in sdk.sdkLibraries) {
+      var source = sourceFactory.resolveUri(null, sdkLibrary.shortName)!;
+      var text = getFile(source.fullName).readAsStringSync();
+      var unit = parseText(source, text, featureSet);
+
+      var inputUnits = <LinkInputUnit>[];
+      _addLibraryUnits(source, unit, inputUnits, featureSet);
+      inputLibraries.add(
+        LinkInputLibrary(
+          source: source,
+          units: inputUnits,
+        ),
+      );
+    }
+
+    var elementFactory = LinkedElementFactory(
+      AnalysisContextImpl(
+        SynchronousSession(
+          AnalysisOptionsImpl(),
+          declaredVariables,
+        ),
+        sourceFactory,
+      ),
+      _AnalysisSessionForLinking(),
+      Reference.root(),
+    );
+
+    var sdkLinkResult = await link2(elementFactory, inputLibraries);
+
+    return _sdkBundle = _SdkBundle(
+      resolutionBytes: sdkLinkResult.resolutionBytes,
+    );
+  }
+
+  String get testFilePath => '$testPackageLibPath/test.dart';
+
+  String get testPackageLibPath => '$testPackageRootPath/lib';
+
+  String get testPackageRootPath => '/home/test';
+
+  void addSource(String path, String contents) {
+    newFile2(path, contents);
+  }
+
+  Future<LibraryElementImpl> buildLibrary(
+    String text, {
+    bool allowErrors = false,
+    bool dumpSummaries = false,
+  }) async {
+    var testFile = newFile2(testFilePath, text);
+    var testUri = sourceFactory.pathToUri(testFile.path)!;
+    var testSource = sourceFactory.forUri2(testUri)!;
+
+    var inputLibraries = <LinkInputLibrary>[];
+    _addNonDartLibraries({}, inputLibraries, testSource);
+
+    var unitsInformativeBytes = <Uri, Uint8List>{};
+    for (var inputLibrary in inputLibraries) {
+      for (var inputUnit in inputLibrary.units) {
+        var informativeBytes = writeUnitInformative(inputUnit.unit);
+        unitsInformativeBytes[inputUnit.uri] = informativeBytes;
+      }
+    }
+
+    var analysisContext = AnalysisContextImpl(
+      SynchronousSession(
+        AnalysisOptionsImpl()..contextFeatures = featureSet,
+        declaredVariables,
+      ),
+      sourceFactory,
+    );
+
+    var elementFactory = LinkedElementFactory(
+      analysisContext,
+      _AnalysisSessionForLinking(),
+      Reference.root(),
+    );
+    elementFactory.addBundle(
+      BundleReader(
+        elementFactory: elementFactory,
+        unitsInformativeBytes: {},
+        resolutionBytes: (await sdkBundle).resolutionBytes,
+      ),
+    );
+
+    var linkResult = await link2(elementFactory, inputLibraries);
+
+    if (!keepLinkingLibraries) {
+      elementFactory.removeBundle(
+        inputLibraries.map((e) => e.uriStr).toSet(),
+      );
+      elementFactory.addBundle(
+        BundleReader(
+          elementFactory: elementFactory,
+          unitsInformativeBytes: unitsInformativeBytes,
+          resolutionBytes: linkResult.resolutionBytes,
+        ),
+      );
+    }
+
+    return elementFactory.libraryOfUri2('$testUri');
+  }
+
+  void _addLibraryUnits(
+    Source definingSource,
+    CompilationUnit definingUnit,
+    List<LinkInputUnit> units,
+    FeatureSet featureSet,
+  ) {
+    units.add(
+      LinkInputUnit(
+        partDirectiveIndex: null,
+        source: definingSource,
+        isSynthetic: false,
+        unit: definingUnit,
+      ),
+    );
+
+    var partDirectiveIndex = -1;
+    for (var directive in definingUnit.directives) {
+      if (directive is PartDirective) {
+        ++partDirectiveIndex;
+        var relativeUriStr = directive.uri.stringValue;
+
+        var partSource = sourceFactory.resolveUri(
+          definingSource,
+          relativeUriStr,
+        );
+
+        if (partSource != null) {
+          var text = _readSafely(partSource.fullName);
+          var unit = parseText(partSource, text, featureSet);
+          units.add(
+            LinkInputUnit(
+              partDirectiveIndex: partDirectiveIndex,
+              partUriStr: relativeUriStr,
+              source: partSource,
+              isSynthetic: false,
+              unit: unit,
+            ),
+          );
+        }
+      }
+    }
+  }
+
+  void _addNonDartLibraries(
+    Set<Source> addedLibraries,
+    List<LinkInputLibrary> libraries,
+    Source source,
+  ) {
+    if (source.uri.isScheme('dart') || !addedLibraries.add(source)) {
+      return;
+    }
+
+    var text = _readSafely(source.fullName);
+    var unit = parseText(source, text, featureSet);
+
+    var units = <LinkInputUnit>[];
+    _addLibraryUnits(source, unit, units, featureSet);
+    libraries.add(
+      LinkInputLibrary(
+        source: source,
+        units: units,
+      ),
+    );
+
+    void addRelativeUriStr(StringLiteral uriNode) {
+      var relativeUriStr = uriNode.stringValue;
+      if (relativeUriStr == null) {
+        return;
+      }
+
+      Uri relativeUri;
+      try {
+        relativeUri = Uri.parse(relativeUriStr);
+      } on FormatException {
+        return;
+      }
+
+      var absoluteUri = resolveRelativeUri(source.uri, relativeUri);
+      var rewrittenUri = rewriteToCanonicalUri(sourceFactory, absoluteUri);
+      if (rewrittenUri == null) {
+        return;
+      }
+
+      var uriSource = sourceFactory.forUri2(rewrittenUri);
+      if (uriSource == null) {
+        return;
+      }
+
+      _addNonDartLibraries(addedLibraries, libraries, uriSource);
+    }
+
+    for (var directive in unit.directives) {
+      if (directive is NamespaceDirective) {
+        addRelativeUriStr(directive.uri);
+        for (var configuration in directive.configurations) {
+          addRelativeUriStr(configuration.uri);
+        }
+      }
+    }
+  }
+
+  String _readSafely(String path) {
+    try {
+      var file = resourceProvider.getFile(path);
+      return file.readAsStringSync();
+    } catch (_) {
+      return '';
+    }
+  }
+}
+
+class _AnalysisSessionForLinking implements AnalysisSessionImpl {
+  @override
+  final ClassHierarchy classHierarchy = ClassHierarchy();
+
+  @override
+  InheritanceManager3 inheritanceManager = InheritanceManager3();
+
+  @override
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+class _SdkBundle {
+  final Uint8List resolutionBytes;
+
+  _SdkBundle({
+    required this.resolutionBytes,
+  });
+}
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
new file mode 100644
index 0000000..fdca05f
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -0,0 +1,37807 @@
+// 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.
+
+import 'package:analyzer/dart/analysis/declared_variables.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../util/feature_sets.dart';
+import 'element_text.dart';
+import 'elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ElementsKeepLinkingTest);
+    defineReflectiveTests(ElementsFromBytesTest);
+    // defineReflectiveTests(ApplyCheckElementTextReplacements);
+  });
+}
+
+@reflectiveTest
+class ApplyCheckElementTextReplacements {
+  test_applyReplacements() {
+    applyCheckElementTextReplacements();
+  }
+}
+
+@reflectiveTest
+class ElementsFromBytesTest extends ElementsTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ElementsKeepLinkingTest extends ElementsTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+abstract class ElementsTest extends ElementsBaseTest {
+  test_class_abstract() async {
+    var library = await buildLibrary('abstract class C {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_constructor_const() async {
+    var library = await buildLibrary('class C { const C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @16
+''');
+  }
+
+  test_class_constructor_const_external() async {
+    var library = await buildLibrary('class C { external const C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          external const @25
+''');
+  }
+
+  test_class_constructor_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  C();
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @34
+            documentationComment: /**\n   * Docs\n   */
+''');
+  }
+
+  test_class_constructor_explicit_named() async {
+    var library = await buildLibrary('class C { C.foo(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          foo @12
+            periodOffset: 11
+            nameEnd: 15
+''');
+  }
+
+  test_class_constructor_explicit_type_params() async {
+    var library = await buildLibrary('class C<T, U> { C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          @16
+''');
+  }
+
+  test_class_constructor_explicit_unnamed() async {
+    var library = await buildLibrary('class C { C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
+''');
+  }
+
+  test_class_constructor_external() async {
+    var library = await buildLibrary('class C { external C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          external @19
+''');
+  }
+
+  test_class_constructor_factory() async {
+    var library = await buildLibrary('class C { factory C() => throw 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @18
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_dynamic() async {
+    var library =
+        await buildLibrary('class C { dynamic x; C(dynamic this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @36
+                type: dynamic
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_typed() async {
+    var library = await buildLibrary('class C { dynamic x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @32
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_untyped() async {
+    var library = await buildLibrary('class C { dynamic x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @28
+                type: dynamic
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_noReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  var x;
+  C(this.x(double b));
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @28
+                type: dynamic Function(double)
+                parameters
+                  requiredPositional b @37
+                    type: double
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_withReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  var x;
+  C(int this.x(double b));
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @32
+                type: int Function(double)
+                parameters
+                  requiredPositional b @41
+                    type: double
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_withReturnType_generic() async {
+    var library = await buildLibrary(r'''
+class C {
+  Function() f;
+  C(List<U> this.f<T, U>(T t));
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          f @23
+            type: dynamic Function()
+        constructors
+          @28
+            parameters
+              requiredPositional final this.f @43
+                type: List<U> Function<T, U>(T)
+                typeParameters
+                  covariant T @45
+                  covariant U @48
+                parameters
+                  requiredPositional t @53
+                    type: T
+                field: self::@class::C::@field::f
+        accessors
+          synthetic get f @-1
+            returnType: dynamic Function()
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: dynamic Function()
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_multiple_matching_fields() async {
+    // This is a compile-time error but it should still analyze consistently.
+    var library = await buildLibrary('class C { C(this.x); int x; String x; }',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @25
+            type: int
+          x @35
+            type: String
+        constructors
+          @10
+            parameters
+              requiredPositional final this.x @17
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+          synthetic get x @-1
+            returnType: String
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: String
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_no_matching_field() async {
+    // This is a compile-time error but it should still analyze consistently.
+    var library =
+        await buildLibrary('class C { C(this.x); }', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
+            parameters
+              requiredPositional final this.x @17
+                type: dynamic
+                field: <null>
+''');
+  }
+
+  test_class_constructor_field_formal_typed_dynamic() async {
+    var library = await buildLibrary('class C { num x; C(dynamic this.x); }',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @32
+                type: dynamic
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: num
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: num
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_typed_typed() async {
+    var library = await buildLibrary('class C { num x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @28
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: num
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: num
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_typed_untyped() async {
+    var library = await buildLibrary('class C { num x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @24
+                type: num
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: num
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: num
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_dynamic() async {
+    var library = await buildLibrary('class C { var x; C(dynamic this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @32
+                type: dynamic
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_typed() async {
+    var library = await buildLibrary('class C { var x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @28
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_untyped() async {
+    var library = await buildLibrary('class C { var x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @24
+                type: dynamic
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_named_noDefault() async {
+    var library = await buildLibrary('class C { int x; C({this.x}); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalNamed final this.x @25
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_named_withDefault() async {
+    var library = await buildLibrary('class C { int x; C({this.x: 42}); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalNamed final this.x @25
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @28
+                    staticType: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_optional_noDefault() async {
+    var library = await buildLibrary('class C { int x; C([this.x]); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalPositional final this.x @25
+                type: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_optional_withDefault() async {
+    var library = await buildLibrary('class C { int x; C([this.x = 42]); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalPositional final this.x @25
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @29
+                    staticType: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_constructor_implicit_type_params() async {
+    var library = await buildLibrary('class C<T, U> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_constructor_initializers_assertInvocation() async {
+    var library = await buildLibrary('''
+class C {
+  const C(int x) : assert(x >= 42);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            parameters
+              requiredPositional x @24
+                type: int
+            constantInitializers
+              AssertInitializer
+                assertKeyword: assert @29
+                leftParenthesis: ( @35
+                condition: BinaryExpression
+                  leftOperand: SimpleIdentifier
+                    token: x @36
+                    staticElement: x@24
+                    staticType: int
+                  operator: >= @38
+                  rightOperand: IntegerLiteral
+                    literal: 42 @41
+                    staticType: int
+                  staticElement: dart:core::@class::num::@method::>=
+                  staticInvokeType: bool Function(num)
+                  staticType: bool
+                rightParenthesis: ) @43
+''');
+  }
+
+  test_class_constructor_initializers_assertInvocation_message() async {
+    var library = await buildLibrary('''
+class C {
+  const C(int x) : assert(x >= 42, 'foo');
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            parameters
+              requiredPositional x @24
+                type: int
+            constantInitializers
+              AssertInitializer
+                assertKeyword: assert @29
+                leftParenthesis: ( @35
+                condition: BinaryExpression
+                  leftOperand: SimpleIdentifier
+                    token: x @36
+                    staticElement: x@24
+                    staticType: int
+                  operator: >= @38
+                  rightOperand: IntegerLiteral
+                    literal: 42 @41
+                    staticType: int
+                  staticElement: dart:core::@class::num::@method::>=
+                  staticInvokeType: bool Function(num)
+                  staticType: bool
+                comma: , @43
+                message: SimpleStringLiteral
+                  literal: 'foo' @45
+                rightParenthesis: ) @50
+''');
+  }
+
+  test_class_constructor_initializers_field() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @35
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                equals: = @37
+                expression: IntegerLiteral
+                  literal: 42 @39
+                  staticType: int
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_class_constructor_initializers_field_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = foo();
+}
+int foo() => 42;
+''', allowErrors: true);
+    // It is OK to keep non-constant initializers.
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @35
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                equals: = @37
+                expression: MethodInvocation
+                  methodName: SimpleIdentifier
+                    token: foo @39
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @42
+                    rightParenthesis: ) @43
+                  staticInvokeType: int Function()
+                  staticType: int
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+    functions
+      foo @52
+        returnType: int
+''');
+  }
+
+  test_class_constructor_initializers_field_optionalPositionalParameter() async {
+    var library = await buildLibrary('''
+class A {
+  final int _f;
+  const A([int f = 0]) : _f = f;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final _f @22
+            type: int
+        constructors
+          const @34
+            parameters
+              optionalPositional f @41
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 0 @45
+                    staticType: int
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: _f @51
+                  staticElement: self::@class::A::@field::_f
+                  staticType: null
+                equals: = @54
+                expression: SimpleIdentifier
+                  token: f @56
+                  staticElement: self::@class::A::@constructor::•::@parameter::f
+                  staticType: int
+        accessors
+          synthetic get _f @-1
+            returnType: int
+''');
+  }
+
+  test_class_constructor_initializers_field_withParameter() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C(int p) : x = 1 + p;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              requiredPositional p @35
+                type: int
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @40
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                equals: = @42
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @44
+                    staticType: int
+                  operator: + @46
+                  rightOperand: SimpleIdentifier
+                    token: p @48
+                    staticElement: p@35
+                    staticType: int
+                  staticElement: dart:core::@class::num::@method::+
+                  staticInvokeType: num Function(num)
+                  staticType: int
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_class_constructor_initializers_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  const B(dynamic x);
+  const B.f()
+   : this(A<Function()>());
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        constructors
+          const @46
+            parameters
+              requiredPositional x @56
+                type: dynamic
+          const f @70
+            periodOffset: 69
+            nameEnd: 71
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @79
+                argumentList: ArgumentList
+                  leftParenthesis: ( @83
+                  arguments
+                    InstanceCreationExpression
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: SimpleIdentifier
+                            token: A @84
+                            staticElement: self::@class::A
+                            staticType: null
+                          typeArguments: TypeArgumentList
+                            leftBracket: < @85
+                            arguments
+                              GenericFunctionType
+                                functionKeyword: Function @86
+                                parameters: FormalParameterList
+                                  leftParenthesis: ( @94
+                                  rightParenthesis: ) @95
+                                declaredElement: GenericFunctionTypeElement
+                                  parameters
+                                  returnType: dynamic
+                                  type: dynamic Function()
+                                type: dynamic Function()
+                            rightBracket: > @96
+                          type: A<dynamic Function()>
+                        staticElement: ConstructorMember
+                          base: self::@class::A::@constructor::•
+                          substitution: {T: dynamic Function()}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @97
+                        rightParenthesis: ) @98
+                      staticType: A<dynamic Function()>
+                  rightParenthesis: ) @99
+                staticElement: self::@class::B::@constructor::•
+            redirectedConstructor: self::@class::B::@constructor::•
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_argumentContextType() async {
+    var library = await buildLibrary('''
+class A {
+  const A(List<String> values);
+}
+class B extends A {
+  const B() : super(const []);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional values @33
+                type: List<String>
+      class B @50
+        supertype: A
+        constructors
+          const @72
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @78
+                argumentList: ArgumentList
+                  leftParenthesis: ( @83
+                  arguments
+                    ListLiteral
+                      constKeyword: const @84
+                      leftBracket: [ @90
+                      rightBracket: ] @91
+                      staticType: List<String>
+                  rightParenthesis: ) @92
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_named() async {
+    var library = await buildLibrary('''
+class A {
+  const A.aaa(int p);
+}
+class C extends A {
+  const C() : super.aaa(42);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const aaa @20
+            periodOffset: 19
+            nameEnd: 23
+            parameters
+              requiredPositional p @28
+                type: int
+      class C @40
+        supertype: A
+        constructors
+          const @62
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @68
+                period: . @73
+                constructorName: SimpleIdentifier
+                  token: aaa @74
+                  staticElement: self::@class::A::@constructor::aaa
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @77
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @78
+                      staticType: int
+                  rightParenthesis: ) @80
+                staticElement: self::@class::A::@constructor::aaa
+            superConstructor: self::@class::A::@constructor::aaa
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_named_underscore() async {
+    var library = await buildLibrary('''
+class A {
+  const A._();
+}
+class B extends A {
+  const B() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const _ @20
+            periodOffset: 19
+            nameEnd: 21
+      class B @33
+        supertype: A
+        constructors
+          const @55
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @61
+                period: . @66
+                constructorName: SimpleIdentifier
+                  token: _ @67
+                  staticElement: self::@class::A::@constructor::_
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @68
+                  rightParenthesis: ) @69
+                staticElement: self::@class::A::@constructor::_
+            superConstructor: self::@class::A::@constructor::_
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_namedExpression() async {
+    var library = await buildLibrary('''
+class A {
+  const A.aaa(a, {int b});
+}
+class C extends A {
+  const C() : super.aaa(1, b: 2);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const aaa @20
+            periodOffset: 19
+            nameEnd: 23
+            parameters
+              requiredPositional a @24
+                type: dynamic
+              optionalNamed b @32
+                type: int
+      class C @45
+        supertype: A
+        constructors
+          const @67
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @73
+                period: . @78
+                constructorName: SimpleIdentifier
+                  token: aaa @79
+                  staticElement: self::@class::A::@constructor::aaa
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @82
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @83
+                      staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: b @86
+                          staticElement: self::@class::A::@constructor::aaa::@parameter::b
+                          staticType: null
+                        colon: : @87
+                      expression: IntegerLiteral
+                        literal: 2 @89
+                        staticType: int
+                  rightParenthesis: ) @90
+                staticElement: self::@class::A::@constructor::aaa
+            superConstructor: self::@class::A::@constructor::aaa
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class A {
+  const A(int p);
+}
+class C extends A {
+  const C.ccc() : super(42);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional p @24
+                type: int
+      class C @36
+        supertype: A
+        constructors
+          const ccc @60
+            periodOffset: 59
+            nameEnd: 63
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @68
+                argumentList: ArgumentList
+                  leftParenthesis: ( @73
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @74
+                      staticType: int
+                  rightParenthesis: ) @76
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_argumentContextType() async {
+    var library = await buildLibrary('''
+class A {
+  const A(List<String> values);
+  const A.empty() : this(const []);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional values @33
+                type: List<String>
+          const empty @52
+            periodOffset: 51
+            nameEnd: 57
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @62
+                argumentList: ArgumentList
+                  leftParenthesis: ( @66
+                  arguments
+                    ListLiteral
+                      constKeyword: const @67
+                      leftBracket: [ @73
+                      rightBracket: ] @74
+                      staticType: List<String>
+                  rightParenthesis: ) @75
+                staticElement: self::@class::A::@constructor::•
+            redirectedConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_named() async {
+    var library = await buildLibrary('''
+class C {
+  const C() : this.named(1, 'bbb');
+  const C.named(int a, String b);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @24
+                period: . @28
+                constructorName: SimpleIdentifier
+                  token: named @29
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @34
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @35
+                      staticType: int
+                    SimpleStringLiteral
+                      literal: 'bbb' @38
+                  rightParenthesis: ) @43
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+          const named @56
+            periodOffset: 55
+            nameEnd: 61
+            parameters
+              requiredPositional a @66
+                type: int
+              requiredPositional b @76
+                type: String
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_namedExpression() async {
+    var library = await buildLibrary('''
+class C {
+  const C() : this.named(1, b: 2);
+  const C.named(a, {int b});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @24
+                period: . @28
+                constructorName: SimpleIdentifier
+                  token: named @29
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @34
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @35
+                      staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: b @38
+                          staticElement: self::@class::C::@constructor::named::@parameter::b
+                          staticType: null
+                        colon: : @39
+                      expression: IntegerLiteral
+                        literal: 2 @41
+                        staticType: int
+                  rightParenthesis: ) @42
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              requiredPositional a @61
+                type: dynamic
+              optionalNamed b @69
+                type: int
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  const C.named() : this(1, 'bbb');
+  const C(int a, String b);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @30
+                argumentList: ArgumentList
+                  leftParenthesis: ( @34
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @35
+                      staticType: int
+                    SimpleStringLiteral
+                      literal: 'bbb' @38
+                  rightParenthesis: ) @43
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
+          const @54
+            parameters
+              requiredPositional a @60
+                type: int
+              requiredPositional b @70
+                type: String
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_function() async {
+    var library = await buildLibrary('''
+class A {
+  A(Object? a);
+}
+
+class B extends A {
+  B(int super.a<T extends num>(T d)?);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @22
+                type: Object?
+      class B @35
+        supertype: A
+        constructors
+          @51
+            parameters
+              requiredPositional final super.a @63
+                type: int Function<T extends num>(T)?
+                typeParameters
+                  covariant T @65
+                    bound: num
+                parameters
+                  requiredPositional d @82
+                    type: T
+                superConstructorParameter: a@22
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_interface() async {
+    var library = await buildLibrary('''
+class A {
+  A(num a);
+}
+
+class B extends A {
+  B(int super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: num
+      class B @31
+        supertype: A
+        constructors
+          @47
+            parameters
+              requiredPositional final super.a @59
+                type: int
+                superConstructorParameter: a@18
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_interface_nullable() async {
+    var library = await buildLibrary('''
+class A {
+  A(num? a);
+}
+
+class B extends A {
+  B(int? super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @19
+                type: num?
+      class B @32
+        supertype: A
+        constructors
+          @48
+            parameters
+              requiredPositional final super.a @61
+                type: int?
+                superConstructorParameter: a@19
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_invalid_topFunction() async {
+    var library = await buildLibrary('''
+void f(super.a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional final super.a @13
+            type: dynamic
+            superConstructorParameter: <null>
+        returnType: void
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a, required double b});
+}
+
+class B extends A {
+  B({String o1, super.a, String o2, super.b}) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredNamed a @28
+                type: int
+              requiredNamed b @47
+                type: double
+      class B @61
+        supertype: A
+        constructors
+          @77
+            parameters
+              optionalNamed o1 @87
+                type: String
+              optionalNamed final super.a @97
+                type: int
+                superConstructorParameter: self::@class::A::@constructor::•::@parameter::a
+              optionalNamed o2 @107
+                type: String
+              optionalNamed final super.b @117
+                type: double
+                superConstructorParameter: self::@class::A::@constructor::•::@parameter::b
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed_unresolved() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a});
+}
+
+class B extends A {
+  B({super.b});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredNamed a @28
+                type: int
+      class B @42
+        supertype: A
+        constructors
+          @58
+            parameters
+              optionalNamed final super.b @67
+                type: dynamic
+                superConstructorParameter: <null>
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed_unresolved2() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a);
+}
+
+class B extends A {
+  B({super.a});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+      class B @31
+        supertype: A
+        constructors
+          @47
+            parameters
+              optionalNamed final super.a @56
+                type: dynamic
+                superConstructorParameter: <null>
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalPositional() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a, double b);
+}
+
+class B extends A {
+  B([String o1, super.a, String o2, super.b]) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+              requiredPositional b @28
+                type: double
+      class B @41
+        supertype: A
+        constructors
+          @57
+            parameters
+              optionalPositional o1 @67
+                type: String
+              optionalPositional final super.a @77
+                type: int
+                superConstructorParameter: a@18
+              optionalPositional o2 @87
+                type: String
+              optionalPositional final super.b @97
+                type: double
+                superConstructorParameter: b@28
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredNamed() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a, required double b});
+}
+
+class B extends A {
+  B({
+    required String o1,
+    required super.a,
+    required String o2,
+    required super.b,
+  }) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredNamed a @28
+                type: int
+              requiredNamed b @47
+                type: double
+      class B @61
+        supertype: A
+        constructors
+          @77
+            parameters
+              requiredNamed o1 @101
+                type: String
+              requiredNamed final super.a @124
+                type: int
+                superConstructorParameter: self::@class::A::@constructor::•::@parameter::a
+              requiredNamed o2 @147
+                type: String
+              requiredNamed final super.b @170
+                type: double
+                superConstructorParameter: self::@class::A::@constructor::•::@parameter::b
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a, double b);
+}
+
+class B extends A {
+  B(String o1, super.a, String o2, super.b) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+              requiredPositional b @28
+                type: double
+      class B @41
+        supertype: A
+        constructors
+          @57
+            parameters
+              requiredPositional o1 @66
+                type: String
+              requiredPositional final super.a @76
+                type: int
+                superConstructorParameter: a@18
+              requiredPositional o2 @86
+                type: String
+              requiredPositional final super.b @96
+                type: double
+                superConstructorParameter: b@28
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_inferenceOrder() async {
+    // It is important that `B` is declared after `C`, so that we check that
+    // inference happens in order - first `B`, then `C`.
+    var library = await buildLibrary('''
+abstract class A {
+  A(int a);
+}
+
+class C extends B {
+  C(super.a);
+}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        constructors
+          @21
+            parameters
+              requiredPositional a @27
+                type: int
+      class C @40
+        supertype: B
+        constructors
+          @56
+            parameters
+              requiredPositional final super.a @64
+                type: int
+                superConstructorParameter: a@101
+            superConstructor: self::@class::B::@constructor::•
+      class B @77
+        supertype: A
+        constructors
+          @93
+            parameters
+              requiredPositional final super.a @101
+                type: int
+                superConstructorParameter: a@27
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_inferenceOrder_generic() async {
+    // It is important that `C` is declared before `B`, so that we check that
+    // inference happens in order - first `B`, then `C`.
+    var library = await buildLibrary('''
+class A {
+  A(int a);
+}
+
+class C extends B<String> {
+  C(super.a);
+}
+
+class B<T> extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+      class C @31
+        supertype: B<String>
+        constructors
+          @55
+            parameters
+              requiredPositional final super.a @63
+                type: int
+                superConstructorParameter: SuperFormalParameterMember
+                  base: a@103
+                  substitution: {T: String}
+            superConstructor: ConstructorMember
+              base: self::@class::B::@constructor::•
+              substitution: {T: String}
+      class B @76
+        typeParameters
+          covariant T @78
+            defaultType: dynamic
+        supertype: A
+        constructors
+          @95
+            parameters
+              requiredPositional final super.a @103
+                type: int
+                superConstructorParameter: a@18
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_unresolved() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @18
+        supertype: A
+        constructors
+          @34
+            parameters
+              requiredPositional final super.a @42
+                type: dynamic
+                superConstructorParameter: <null>
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_unresolved2() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a})
+}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredNamed a @28
+                type: int
+      class B @41
+        supertype: A
+        constructors
+          @57
+            parameters
+              requiredPositional final super.a @65
+                type: dynamic
+                superConstructorParameter: <null>
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_params() async {
+    var library = await buildLibrary('class C { C(x, int y); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
+            parameters
+              requiredPositional x @12
+                type: dynamic
+              requiredPositional y @19
+                type: int
+''');
+  }
+
+  test_class_constructor_redirected_factory_named() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() = D.named;
+  C._();
+}
+class D extends C {
+  D.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @20
+            redirectedConstructor: self::@class::D::@constructor::named
+          _ @39
+            periodOffset: 38
+            nameEnd: 40
+      class D @52
+        supertype: C
+        constructors
+          named @70
+            periodOffset: 69
+            nameEnd: 75
+            superConstructor: self::@class::C::@constructor::_
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_generic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          factory @26
+            redirectedConstructor: ConstructorMember
+              base: self::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @51
+            periodOffset: 50
+            nameEnd: 52
+      class D @64
+        typeParameters
+          covariant T @66
+            defaultType: dynamic
+          covariant U @69
+            defaultType: dynamic
+        supertype: C<U, T>
+        constructors
+          named @94
+            periodOffset: 93
+            nameEnd: 99
+            superConstructor: ConstructorMember
+              base: self::@class::C::@constructor::_
+              substitution: {T: U, U: T}
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_generic_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A<T, U> = C<T, U>;
+class B<T, U> {
+  factory B() = A<U, T>.named;
+  B._();
+}
+class C<T, U> extends A<U, T> {
+  C.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        constructors
+          factory @53
+            redirectedConstructor: ConstructorMember
+              base: self::@class::C::@constructor::named
+              substitution: {T: U, U: T}
+          _ @78
+            periodOffset: 77
+            nameEnd: 79
+      class C @91
+        typeParameters
+          covariant T @93
+            defaultType: dynamic
+          covariant U @96
+            defaultType: dynamic
+        supertype: C<U, T>
+          alias: self::@typeAlias::A
+            typeArguments
+              U
+              T
+        constructors
+          named @121
+            periodOffset: 120
+            nameEnd: 126
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+          covariant U @13
+            defaultType: dynamic
+        aliasedType: C<T, U>
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_imported() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: package:test/foo.dart::@class::D::@constructor::named
+          _ @58
+            periodOffset: 57
+            nameEnd: 59
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_imported_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class C @25
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+          covariant U @30
+            defaultType: dynamic
+        constructors
+          factory @45
+            redirectedConstructor: ConstructorMember
+              base: package:test/foo.dart::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @70
+            periodOffset: 69
+            nameEnd: 71
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.D.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: package:test/foo.dart::@class::D::@constructor::named
+          _ @69
+            periodOffset: 68
+            nameEnd: 70
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_prefixed_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = foo.D<U, T>.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          factory @52
+            redirectedConstructor: ConstructorMember
+              base: package:test/foo.dart::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @81
+            periodOffset: 80
+            nameEnd: 82
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_unresolved_class() async {
+    var library = await buildLibrary('''
+class C<E> {
+  factory C() = D.named<E>;
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant E @8
+            defaultType: dynamic
+        constructors
+          factory @23
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_unresolved_constructor() async {
+    var library = await buildLibrary('''
+class D {}
+class C<E> {
+  factory C() = D.named<E>;
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class D @6
+        constructors
+          synthetic @-1
+      class C @17
+        typeParameters
+          covariant E @19
+            defaultType: dynamic
+        constructors
+          factory @34
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() = D;
+  C._();
+}
+class D extends C {
+  D() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @20
+            redirectedConstructor: self::@class::D::@constructor::•
+          _ @33
+            periodOffset: 32
+            nameEnd: 34
+      class D @46
+        supertype: C
+        constructors
+          @62
+            superConstructor: self::@class::C::@constructor::_
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_generic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          factory @26
+            redirectedConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @45
+            periodOffset: 44
+            nameEnd: 46
+      class D @58
+        typeParameters
+          covariant T @60
+            defaultType: dynamic
+          covariant U @63
+            defaultType: dynamic
+        supertype: C<U, T>
+        constructors
+          @86
+            superConstructor: ConstructorMember
+              base: self::@class::C::@constructor::_
+              substitution: {T: U, U: T}
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A<T, U> = C<T, U>;
+class B<T, U> {
+  factory B() = A<U, T>;
+  B_();
+}
+class C<T, U> extends B<U, T> {
+  C() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        constructors
+          factory @53
+            redirectedConstructor: ConstructorMember
+              base: self::@class::C::@constructor::•
+              substitution: {T: U, U: T}
+        methods
+          abstract B_ @70
+            returnType: dynamic
+      class C @84
+        typeParameters
+          covariant T @86
+            defaultType: dynamic
+          covariant U @89
+            defaultType: dynamic
+        supertype: B<U, T>
+        constructors
+          @112
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+          covariant U @13
+            defaultType: dynamic
+        aliasedType: C<T, U>
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: package:test/foo.dart::@class::D::@constructor::•
+          _ @52
+            periodOffset: 51
+            nameEnd: 53
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class C @25
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+          covariant U @30
+            defaultType: dynamic
+        constructors
+          factory @45
+            redirectedConstructor: ConstructorMember
+              base: package:test/foo.dart::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @64
+            periodOffset: 63
+            nameEnd: 65
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+typedef A = B;
+class B extends C {
+  B() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = A;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: package:test/foo.dart::@class::B::@constructor::•
+          _ @52
+            periodOffset: 51
+            nameEnd: 53
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.D;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: package:test/foo.dart::@class::D::@constructor::•
+          _ @63
+            periodOffset: 62
+            nameEnd: 64
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = foo.D<U, T>;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          factory @52
+            redirectedConstructor: ConstructorMember
+              base: package:test/foo.dart::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @75
+            periodOffset: 74
+            nameEnd: 76
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+typedef A = B;
+class B extends C {
+  B() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.A;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: package:test/foo.dart::@class::B::@constructor::•
+          _ @63
+            periodOffset: 62
+            nameEnd: 64
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_unresolved() async {
+    var library = await buildLibrary('''
+class C<E> {
+  factory C() = D<E>;
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant E @8
+            defaultType: dynamic
+        constructors
+          factory @23
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A = C;
+class B {
+  factory B() = A;
+  B._();
+}
+class C extends B {
+  C() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @21
+        constructors
+          factory @35
+            redirectedConstructor: self::@class::C::@constructor::•
+          _ @48
+            periodOffset: 47
+            nameEnd: 49
+      class C @61
+        supertype: B
+        constructors
+          @77
+            superConstructor: self::@class::B::@constructor::_
+    typeAliases
+      A @8
+        aliasedType: C
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named() async {
+    var library = await buildLibrary('''
+class C {
+  const C.named();
+  const C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+          const @37
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @43
+                period: . @47
+                constructorName: SimpleIdentifier
+                  token: named @48
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @53
+                  rightParenthesis: ) @54
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named_generic() async {
+    var library = await buildLibrary('''
+class C<T> {
+  const C.named();
+  const C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+          const @40
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @46
+                period: . @50
+                constructorName: SimpleIdentifier
+                  token: named @51
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @56
+                  rightParenthesis: ) @57
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  C.named();
+  C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+          @25
+            redirectedConstructor: self::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  const C();
+  const C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+          const named @33
+            periodOffset: 32
+            nameEnd: 38
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @43
+                argumentList: ArgumentList
+                  leftParenthesis: ( @47
+                  rightParenthesis: ) @48
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed_generic() async {
+    var library = await buildLibrary('''
+class C<T> {
+  const C();
+  const C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+          const named @36
+            periodOffset: 35
+            nameEnd: 41
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @46
+                argumentList: ArgumentList
+                  leftParenthesis: ( @50
+                  rightParenthesis: ) @51
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+  C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
+            redirectedConstructor: self::@class::C::@constructor::•
+''');
+  }
+
+  test_class_constructor_superConstructor_generic_named() async {
+    var library = await buildLibrary('''
+class A<T> {
+  A.named(T a);
+}
+class B extends A<int> {
+  B() : super.named(0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          named @17
+            periodOffset: 16
+            nameEnd: 22
+            parameters
+              requiredPositional a @25
+                type: T
+      class B @37
+        supertype: A<int>
+        constructors
+          @58
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_named() async {
+    var library = await buildLibrary('''
+class A {
+  A.named();
+}
+class B extends A {
+  B() : super.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+      class B @31
+        supertype: A
+        constructors
+          @47
+            superConstructor: self::@class::A::@constructor::named
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {
+  B() : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          @33
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {
+  B();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          @33
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+''');
+  }
+
+  test_class_constructor_unnamed_implicit() async {
+    var library = await buildLibrary('class C {}');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+            displayName: C
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructor_withCycles_const() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = const D();
+}
+class D {
+  final x;
+  const D() : x = const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @35
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                equals: = @37
+                expression: InstanceCreationExpression
+                  keyword: const @39
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: D @45
+                        staticElement: self::@class::D
+                        staticType: null
+                      type: D
+                    staticElement: self::@class::D::@constructor::•
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @46
+                    rightParenthesis: ) @47
+                  staticType: D
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+      class D @58
+        fields
+          final x @70
+            type: dynamic
+        constructors
+          const @81
+            constantInitializers
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @87
+                  staticElement: self::@class::D::@field::x
+                  staticType: null
+                equals: = @89
+                expression: InstanceCreationExpression
+                  keyword: const @91
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: C @97
+                        staticElement: self::@class::C
+                        staticType: null
+                      type: C
+                    staticElement: self::@class::C::@constructor::•
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @98
+                    rightParenthesis: ) @99
+                  staticType: C
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_class_constructor_withCycles_nonConst() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  C() : x = new D();
+}
+class D {
+  final x;
+  D() : x = new C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          @23
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+      class D @50
+        fields
+          final x @62
+            type: dynamic
+        constructors
+          @67
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_class_constructors_named() async {
+    var library = await buildLibrary('''
+class C {
+  C.foo();
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          foo @14
+            displayName: C.foo
+            periodOffset: 13
+            nameEnd: 17
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructors_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+            displayName: C
+''',
+        withDisplayName: true);
+  }
+
+  test_class_constructors_unnamed_new() async {
+    var library = await buildLibrary('''
+class C {
+  C.new();
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @14
+            displayName: C
+            periodOffset: 13
+            nameEnd: 17
+''',
+        withDisplayName: true);
+  }
+
+  test_class_documented() async {
+    var library = await buildLibrary('''
+/**
+ * Docs
+ */
+class C {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_mix() async {
+    var library = await buildLibrary('''
+/**
+ * aaa
+ */
+/**
+ * bbb
+ */
+class A {}
+
+/**
+ * aaa
+ */
+/// bbb
+/// ccc
+class B {}
+
+/// aaa
+/// bbb
+/**
+ * ccc
+ */
+class C {}
+
+/// aaa
+/// bbb
+/**
+ * ccc
+ */
+/// ddd
+class D {}
+
+/**
+ * aaa
+ */
+// bbb
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @36
+        documentationComment: /**\n * bbb\n */
+        constructors
+          synthetic @-1
+      class B @79
+        documentationComment: /// bbb\n/// ccc
+        constructors
+          synthetic @-1
+      class C @122
+        documentationComment: /**\n * ccc\n */
+        constructors
+          synthetic @-1
+      class D @173
+        documentationComment: /// ddd
+        constructors
+          synthetic @-1
+      class E @207
+        documentationComment: /**\n * aaa\n */
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// first
+/// second
+/// third
+class C {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @37
+        documentationComment: /// first\n/// second\n/// third
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_with_references() async {
+    var library = await buildLibrary('''
+/**
+ * Docs referring to [D] and [E]
+ */
+class C {}
+
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @47
+        documentationComment: /**\n * Docs referring to [D] and [E]\n */
+        constructors
+          synthetic @-1
+      class D @59
+        constructors
+          synthetic @-1
+      class E @70
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_with_windows_line_endings() async {
+    var library = await buildLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @25
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_withLeadingNotDocumentation() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+class C {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @66
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_documented_withMetadata() async {
+    var library = await buildLibrary('''
+/// Comment 1
+/// Comment 2
+@Annotation()
+class BeforeMeta {}
+
+/// Comment 1
+/// Comment 2
+@Annotation.named()
+class BeforeMetaNamed {}
+
+@Annotation()
+/// Comment 1
+/// Comment 2
+class AfterMeta {}
+
+/// Comment 1
+@Annotation()
+/// Comment 2
+class AroundMeta {}
+
+/// Doc comment.
+@Annotation()
+// Not doc comment.
+class DocBeforeMetaNotDocAfter {}
+
+class Annotation {
+  const Annotation();
+  const Annotation.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class BeforeMeta @48
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            atSign: @ @28
+            name: SimpleIdentifier
+              token: Annotation @29
+              staticElement: self::@class::Annotation
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @39
+              rightParenthesis: ) @40
+            element: self::@class::Annotation::@constructor::•
+        constructors
+          synthetic @-1
+      class BeforeMetaNamed @117
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            atSign: @ @91
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: Annotation @92
+                staticElement: self::@class::Annotation
+                staticType: null
+              period: . @102
+              identifier: SimpleIdentifier
+                token: named @103
+                staticElement: self::@class::Annotation::@constructor::named
+                staticType: null
+              staticElement: self::@class::Annotation::@constructor::named
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @108
+              rightParenthesis: ) @109
+            element: self::@class::Annotation::@constructor::named
+        constructors
+          synthetic @-1
+      class AfterMeta @185
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            atSign: @ @137
+            name: SimpleIdentifier
+              token: Annotation @138
+              staticElement: self::@class::Annotation
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @148
+              rightParenthesis: ) @149
+            element: self::@class::Annotation::@constructor::•
+        constructors
+          synthetic @-1
+      class AroundMeta @247
+        documentationComment: /// Comment 2
+        metadata
+          Annotation
+            atSign: @ @213
+            name: SimpleIdentifier
+              token: Annotation @214
+              staticElement: self::@class::Annotation
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @224
+              rightParenthesis: ) @225
+            element: self::@class::Annotation::@constructor::•
+        constructors
+          synthetic @-1
+      class DocBeforeMetaNotDocAfter @319
+        documentationComment: /// Doc comment.
+        metadata
+          Annotation
+            atSign: @ @279
+            name: SimpleIdentifier
+              token: Annotation @280
+              staticElement: self::@class::Annotation
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @290
+              rightParenthesis: ) @291
+            element: self::@class::Annotation::@constructor::•
+        constructors
+          synthetic @-1
+      class Annotation @354
+        constructors
+          const @375
+          const named @408
+            periodOffset: 407
+            nameEnd: 413
+''');
+  }
+
+  test_class_field_abstract() async {
+    var library = await buildLibrary('''
+abstract class C {
+  abstract int i;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          abstract i @34
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic abstract get i @-1
+            returnType: int
+          synthetic abstract set i @-1
+            parameters
+              requiredPositional _i @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_const() async {
+    var library = await buildLibrary('class C { static const int i = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const i @27
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @31
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_const_late() async {
+    var library =
+        await buildLibrary('class C { static late const int i = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static late const i @32
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @36
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_covariant() async {
+    var library = await buildLibrary('''
+class C {
+  covariant int x;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          covariant x @26
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional covariant _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  var x;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @38
+            documentationComment: /**\n   * Docs\n   */
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_field_external() async {
+    var library = await buildLibrary('''
+abstract class C {
+  external int i;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          external i @34
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @-1
+            returnType: int
+          synthetic set i @-1
+            parameters
+              requiredPositional _i @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_final_hasInitializer_hasConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 42;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @22
+                staticType: int
+        constructors
+          const @34
+        accessors
+          synthetic get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_final_hasInitializer_hasConstConstructor_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  final f = const A<int Function(double a)>();
+  const B();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        fields
+          final f @46
+            type: A<int Function(double)>
+            constantInitializer
+              InstanceCreationExpression
+                keyword: const @50
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: A @56
+                      staticElement: self::@class::A
+                      staticType: null
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @57
+                      arguments
+                        GenericFunctionType
+                          returnType: NamedType
+                            name: SimpleIdentifier
+                              token: int @58
+                              staticElement: dart:core::@class::int
+                              staticType: null
+                            type: int
+                          functionKeyword: Function @62
+                          parameters: FormalParameterList
+                            leftParenthesis: ( @70
+                            parameter: SimpleFormalParameter
+                              type: NamedType
+                                name: SimpleIdentifier
+                                  token: double @71
+                                  staticElement: dart:core::@class::double
+                                  staticType: null
+                                type: double
+                              identifier: SimpleIdentifier
+                                token: a @78
+                                staticElement: a@78
+                                staticType: null
+                              declaredElement: a@78
+                              declaredElementType: double
+                            rightParenthesis: ) @79
+                          declaredElement: GenericFunctionTypeElement
+                            parameters
+                              a
+                                kind: required positional
+                                type: double
+                            returnType: int
+                            type: int Function(double)
+                          type: int Function(double)
+                      rightBracket: > @80
+                    type: A<int Function(double)>
+                  staticElement: ConstructorMember
+                    base: self::@class::A::@constructor::•
+                    substitution: {T: int Function(double)}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @81
+                  rightParenthesis: ) @82
+                staticType: A<int Function(double)>
+        constructors
+          const @93
+        accessors
+          synthetic get f @-1
+            returnType: A<int Function(double)>
+''');
+  }
+
+  test_class_field_final_hasInitializer_noConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_final_withSetter() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int foo;
+  A(this.foo);
+  set foo(int newValue) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final foo @22
+            type: int
+        constructors
+          @29
+            parameters
+              requiredPositional final this.foo @36
+                type: int
+                field: self::@class::A::@field::foo
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          set foo @48
+            parameters
+              requiredPositional newValue @56
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_formal_param_inferred_type_implicit() async {
+    var library = await buildLibrary('class C extends D { var v; C(this.v); }'
+        ' abstract class D { int get v; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          v @24
+            type: int
+        constructors
+          @27
+            parameters
+              requiredPositional final this.v @34
+                type: int
+                field: self::@class::C::@field::v
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          synthetic get v @-1
+            returnType: int
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int
+            returnType: void
+      abstract class D @55
+        fields
+          synthetic v @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @67
+            returnType: int
+''');
+  }
+
+  test_class_field_implicit_type() async {
+    var library = await buildLibrary('class C { var x; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_field_implicit_type_late() async {
+    var library = await buildLibrary('class C { late var x; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late x @19
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_explicit_initialized() async {
+    var library = await buildLibrary('class C { num v = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @14
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @-1
+            returnType: num
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: num
+            returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_implicit_initialized() async {
+    var library = await buildLibrary('class C { var v = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @-1
+            returnType: int
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_implicit_uninitialized() async {
+    var library = await buildLibrary(
+        'class C extends D { var v; } abstract class D { int get v; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          v @24
+            type: int
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          synthetic get v @-1
+            returnType: int
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int
+            returnType: void
+      abstract class D @44
+        fields
+          synthetic v @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @56
+            returnType: int
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_inherited_resolveInitializer() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+abstract class A {
+  const A();
+  List<int> get f;
+}
+class B extends A {
+  const B();
+  final f = [a];
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @28
+        fields
+          synthetic f @-1
+            type: List<int>
+        constructors
+          const @40
+        accessors
+          abstract get f @61
+            returnType: List<int>
+      class B @72
+        supertype: A
+        fields
+          final f @107
+            type: List<int>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @111
+                elements
+                  SimpleIdentifier
+                    token: a @112
+                    staticElement: self::@getter::a
+                    staticType: int
+                rightBracket: ] @113
+                staticType: List<int>
+        constructors
+          const @94
+            superConstructor: self::@class::A::@constructor::•
+        accessors
+          synthetic get f @-1
+            returnType: List<int>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_class_field_inferred_type_static_implicit_initialized() async {
+    var library = await buildLibrary('class C { static var v = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static v @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get v @-1
+            returnType: int
+          synthetic static set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_inheritedContextType_double() async {
+    var library = await buildLibrary('''
+abstract class A {
+  const A();
+  double get foo;
+}
+class B extends A {
+  const B();
+  final foo = 2;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic foo @-1
+            type: double
+        constructors
+          const @27
+        accessors
+          abstract get foo @45
+            returnType: double
+      class B @58
+        supertype: A
+        fields
+          final foo @93
+            type: double
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @99
+                staticType: double
+        constructors
+          const @80
+            superConstructor: self::@class::A::@constructor::•
+        accessors
+          synthetic get foo @-1
+            returnType: double
+''');
+  }
+
+  test_class_field_propagatedType_const_noDep() async {
+    var library = await buildLibrary('''
+class C {
+  static const x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const x @25
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @29
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_dep_inLib() async {
+    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
+    var library = await buildLibrary('''
+import "a.dart";
+class C {
+  final b = a / 2;
+}''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class C @23
+        fields
+          final b @35
+            type: double
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @-1
+            returnType: double
+''');
+  }
+
+  test_class_field_propagatedType_final_dep_inPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
+    var library = await buildLibrary('''
+library lib;
+part "a.dart";
+class C {
+  final b = a / 2;
+}''');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+    classes
+      class C @34
+        fields
+          final b @46
+            type: double
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @-1
+            returnType: double
+  parts
+    a.dart
+      topLevelVariables
+        static final a @19
+          type: int
+      accessors
+        synthetic static get a @-1
+          returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_noDep_instance() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_noDep_static() async {
+    var library = await buildLibrary('''
+class C {
+  static final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static final x @25
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_static() async {
+    var library = await buildLibrary('class C { static int i; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static i @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @-1
+            returnType: int
+          synthetic static set i @-1
+            parameters
+              requiredPositional _i @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_static_final_hasConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  static final f = 0;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static final f @25
+            type: int
+        constructors
+          const @40
+        accessors
+          synthetic static get f @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_static_final_untyped() async {
+    var library = await buildLibrary('class C { static final x = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static final x @23
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @-1
+            returnType: int
+''');
+  }
+
+  test_class_field_static_late() async {
+    var library = await buildLibrary('class C { static late int i; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static late i @26
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @-1
+            returnType: int
+          synthetic static set i @-1
+            parameters
+              requiredPositional _i @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_type_inferred_Never() async {
+    var library = await buildLibrary(r'''
+class C {
+  var a = throw 42;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          a @16
+            type: Never
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @-1
+            returnType: Never
+          synthetic set a @-1
+            parameters
+              requiredPositional _a @-1
+                type: Never
+            returnType: void
+''');
+  }
+
+  test_class_field_type_inferred_nonNullify() async {
+    addSource('$testPackageLibPath/a.dart', '''
+// @dart = 2.7
+var a = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+class C {
+  var b = a;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class C @23
+        fields
+          b @33
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @-1
+            returnType: int
+          synthetic set b @-1
+            parameters
+              requiredPositional _b @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_typed() async {
+    var library = await buildLibrary('class C { int x = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_field_untyped() async {
+    var library = await buildLibrary('class C { var x = 0; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_fields() async {
+    var library = await buildLibrary('class C { int i; int j; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          i @14
+            type: int
+          j @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @-1
+            returnType: int
+          synthetic set i @-1
+            parameters
+              requiredPositional _i @-1
+                type: int
+            returnType: void
+          synthetic get j @-1
+            returnType: int
+          synthetic set j @-1
+            parameters
+              requiredPositional _j @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_fields_late() async {
+    var library = await buildLibrary('''
+class C {
+  late int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late foo @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_fields_late_final() async {
+    var library = await buildLibrary('''
+class C {
+  late final int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late final foo @27
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_fields_late_final_initialized() async {
+    var library = await buildLibrary('''
+class C {
+  late final int foo = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late final foo @27
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+''');
+  }
+
+  test_class_fields_late_inference_usingSuper_methodInvocation() async {
+    var library = await buildLibrary('''
+class A {
+  int foo() => 0;
+}
+
+class B extends A {
+  late var f = super.foo();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          foo @16
+            returnType: int
+      class B @37
+        supertype: A
+        fields
+          late f @62
+            type: int
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+        accessors
+          synthetic get f @-1
+            returnType: int
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_fields_late_inference_usingSuper_propertyAccess() async {
+    var library = await buildLibrary('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  late var f = super.foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get foo @20
+            returnType: int
+      class B @39
+        supertype: A
+        fields
+          late f @64
+            type: int
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+        accessors
+          synthetic get f @-1
+            returnType: int
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_getter_abstract() async {
+    var library = await buildLibrary('abstract class C { int get x; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @27
+            returnType: int
+''');
+  }
+
+  test_class_getter_external() async {
+    var library = await buildLibrary('class C { external int get x; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external get x @27
+            returnType: int
+''');
+  }
+
+  test_class_getter_implicit_return_type() async {
+    var library = await buildLibrary('class C { get x => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @14
+            returnType: dynamic
+''');
+  }
+
+  test_class_getter_native() async {
+    var library = await buildLibrary('''
+class C {
+  int get x() native;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external get x @20
+            returnType: int
+''');
+  }
+
+  test_class_getter_static() async {
+    var library = await buildLibrary('class C { static int get x => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static get x @25
+            returnType: int
+''');
+  }
+
+  test_class_getters() async {
+    var library =
+        await buildLibrary('class C { int get x => null; get y => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @18
+            returnType: int
+          get y @33
+            returnType: dynamic
+''');
+  }
+
+  test_class_implicitField_getterFirst() async {
+    var library = await buildLibrary('''
+class C {
+  int get x => 0;
+  void set x(int value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @20
+            returnType: int
+          set x @39
+            parameters
+              requiredPositional value @45
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_implicitField_setterFirst() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) {}
+  int get x => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+          get x @47
+            returnType: int
+''');
+  }
+
+  test_class_interfaces() async {
+    var library = await buildLibrary('''
+class C implements D, E {}
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        interfaces
+          D
+          E
+        constructors
+          synthetic @-1
+      class D @33
+        constructors
+          synthetic @-1
+      class E @44
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_interfaces_Function() async {
+    var library = await buildLibrary('''
+class A {}
+class B {}
+class C implements A, Function, B {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class C @28
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_interfaces_unresolved() async {
+    var library = await buildLibrary(
+        'class C implements X, Y, Z {} class X {} class Z {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        interfaces
+          X
+          Z
+        constructors
+          synthetic @-1
+      class X @36
+        constructors
+          synthetic @-1
+      class Z @47
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_method_abstract() async {
+    var library = await buildLibrary('abstract class C { f(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        constructors
+          synthetic @-1
+        methods
+          abstract f @19
+            returnType: dynamic
+''');
+  }
+
+  test_class_method_async() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+class C {
+  Future f() async {}
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    classes
+      class C @27
+        constructors
+          synthetic @-1
+        methods
+          f @40 async
+            returnType: Future<dynamic>
+''');
+  }
+
+  test_class_method_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+class C {
+  Stream f() async* {}
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    classes
+      class C @27
+        constructors
+          synthetic @-1
+        methods
+          f @40 async*
+            returnType: Stream<dynamic>
+''');
+  }
+
+  test_class_method_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  f() {}
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @34
+            documentationComment: /**\n   * Docs\n   */
+            returnType: dynamic
+''');
+  }
+
+  test_class_method_external() async {
+    var library = await buildLibrary('class C { external f(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external f @19
+            returnType: dynamic
+''');
+  }
+
+  test_class_method_hasImplicitReturnType_false() async {
+    var library = await buildLibrary('''
+class C {
+  int m() => 0;
+}
+''');
+    var c = library.definingCompilationUnit.classes.single;
+    var m = c.methods.single;
+    expect(m.hasImplicitReturnType, isFalse);
+  }
+
+  test_class_method_hasImplicitReturnType_true() async {
+    var library = await buildLibrary('''
+class C {
+  m() => 0;
+}
+''');
+    var c = library.definingCompilationUnit.classes.single;
+    var m = c.methods.single;
+    expect(m.hasImplicitReturnType, isTrue);
+  }
+
+  test_class_method_inferred_type_nonStatic_implicit_param() async {
+    var library = await buildLibrary('class C extends D { void f(value) {} }'
+        ' abstract class D { void f(int value); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        methods
+          f @25
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+      abstract class D @54
+        constructors
+          synthetic @-1
+        methods
+          abstract f @63
+            parameters
+              requiredPositional value @69
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_method_inferred_type_nonStatic_implicit_return() async {
+    var library = await buildLibrary('''
+class C extends D {
+  f() => null;
+}
+abstract class D {
+  int f();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        methods
+          f @22
+            returnType: int
+      abstract class D @52
+        constructors
+          synthetic @-1
+        methods
+          abstract f @62
+            returnType: int
+''');
+  }
+
+  test_class_method_namedAsSupertype() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B extends A {
+  void A() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+        methods
+          A @38
+            returnType: void
+''');
+  }
+
+  test_class_method_native() async {
+    var library = await buildLibrary('''
+class C {
+  int m() native;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external m @16
+            returnType: int
+''');
+  }
+
+  test_class_method_params() async {
+    var library = await buildLibrary('class C { f(x, y) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional x @12
+                type: dynamic
+              requiredPositional y @15
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_class_method_static() async {
+    var library = await buildLibrary('class C { static f() {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static f @17
+            returnType: dynamic
+''');
+  }
+
+  test_class_method_syncStar() async {
+    var library = await buildLibrary(r'''
+class C {
+  Iterable<int> f() sync* {
+    yield 42;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @26 sync*
+            returnType: Iterable<int>
+''');
+  }
+
+  test_class_method_type_parameter() async {
+    var library = await buildLibrary('class C { T f<T, U>(U u) => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @12
+            typeParameters
+              covariant T @14
+              covariant U @17
+            parameters
+              requiredPositional u @22
+                type: U
+            returnType: T
+''');
+  }
+
+  test_class_method_type_parameter_in_generic_class() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  V f<V, W>(T t, U u, W w) => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            typeParameters
+              covariant V @22
+              covariant W @25
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional u @35
+                type: U
+              requiredPositional w @40
+                type: W
+            returnType: V
+''');
+  }
+
+  test_class_method_type_parameter_with_function_typed_parameter() async {
+    var library = await buildLibrary('class C { void f<T, U>(T x(U u)) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @15
+            typeParameters
+              covariant T @17
+              covariant U @20
+            parameters
+              requiredPositional x @25
+                type: T Function(U)
+                parameters
+                  requiredPositional u @29
+                    type: U
+            returnType: void
+''');
+  }
+
+  test_class_methods() async {
+    var library = await buildLibrary('class C { f() {} g() {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            returnType: dynamic
+          g @17
+            returnType: dynamic
+''');
+  }
+
+  test_class_mixins() async {
+    var library = await buildLibrary('''
+class C extends D with E, F, G {}
+class D {}
+class E {}
+class F {}
+class G {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        mixins
+          E
+          F
+          G
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+      class D @40
+        constructors
+          synthetic @-1
+      class E @51
+        constructors
+          synthetic @-1
+      class F @62
+        constructors
+          synthetic @-1
+      class G @73
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_mixins_generic() async {
+    var library = await buildLibrary('''
+class Z extends A with B<int>, C<double> {}
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class Z @6
+        supertype: A
+        mixins
+          B<int>
+          C<double>
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+      class A @50
+        constructors
+          synthetic @-1
+      class B @61
+        typeParameters
+          covariant B1 @63
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class C @76
+        typeParameters
+          covariant C1 @78
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_mixins_unresolved() async {
+    var library = await buildLibrary(
+        'class C extends Object with X, Y, Z {} class X {} class Z {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: Object
+        mixins
+          X
+          Z
+        constructors
+          synthetic @-1
+      class X @45
+        constructors
+          synthetic @-1
+      class Z @56
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_circularity_via_typedef() async {
+    // C's type parameter T is not simply bounded because its bound, F, expands
+    // to `dynamic F(C)`, which refers to C.
+    var library = await buildLibrary('''
+class C<T extends F> {}
+typedef F(C value);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @32
+        aliasedType: dynamic Function(C<dynamic>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @36
+              type: C<dynamic>
+          returnType: dynamic
+''');
+  }
+
+  test_class_notSimplyBounded_circularity_with_type_params() async {
+    // C's type parameter T is simply bounded because even though it refers to
+    // C, it specifies a bound.
+    var library = await buildLibrary('''
+class C<T extends C<dynamic>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_class() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T extends C> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @30
+        typeParameters
+          covariant T @32
+            bound: C<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_typedef_functionType() async {
+    var library = await buildLibrary('''
+typedef C<T extends D> = void Function();
+typedef D<T extends C> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded C @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      notSimplyBounded D @50
+        typeParameters
+          unrelated T @52
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
+    var library = await buildLibrary('''
+typedef C<T extends D> = List<T>;
+typedef D<T extends C> = List<T>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded C @8
+        typeParameters
+          covariant T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<T>
+      notSimplyBounded D @42
+        typeParameters
+          covariant T @44
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<T>
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_reference_to_cycle() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T extends D> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @30
+        typeParameters
+          covariant T @32
+            bound: D<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_use_of_parameter() async {
+    var library = await buildLibrary('''
+class C<T extends D<T>> {}
+class D<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<T>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      class D @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_dependency_with_type_params() async {
+    // C's type parameter T is simply bounded because even though it refers to
+    // non-simply-bounded type D, it specifies a bound.
+    var library = await buildLibrary('''
+class C<T extends D<dynamic>> {}
+class D<T extends D<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @39
+        typeParameters
+          covariant T @41
+            bound: D<T>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type() async {
+    var library = await buildLibrary('''
+class C<T extends void Function(T)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function(T)
+            defaultType: void Function(Never)
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class C<T extends void Function(T)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function(T*)*
+            defaultType: void Function(Null*)*
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_complex_via_return_type() async {
+    var library = await buildLibrary('''
+class C<T extends T Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: T Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_simple() async {
+    var library = await buildLibrary('''
+class C<T extends void Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function()
+            defaultType: void Function()
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_refers_to_circular_typedef() async {
+    // C's type parameter T has a bound of F, which is a circular typedef.  This
+    // is illegal in Dart, but we need to make sure it doesn't lead to a crash
+    // or infinite loop.
+    var library = await buildLibrary('''
+class C<T extends F> {}
+typedef F(G value);
+typedef G(F value);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @32
+        aliasedType: dynamic Function(dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @36
+              type: dynamic
+          returnType: dynamic
+      functionTypeAliasBased notSimplyBounded G @52
+        aliasedType: dynamic Function(dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @56
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_class_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+class C<T extends C> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_simple_because_non_generic() async {
+    // If no type parameters are specified, then the class is simply bounded, so
+    // there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_simple_by_lack_of_cycles() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      class D @30
+        typeParameters
+          covariant T @32
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_notSimplyBounded_simple_by_syntax() async {
+    // If no bounds are specified, then the class is simply bounded by syntax
+    // alone, so there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_operator() async {
+    var library =
+        await buildLibrary('class C { C operator+(C other) => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          + @20
+            parameters
+              requiredPositional other @24
+                type: C
+            returnType: C
+''');
+  }
+
+  test_class_operator_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator==(Object other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          == @25
+            parameters
+              requiredPositional other @35
+                type: Object
+            returnType: bool
+''');
+  }
+
+  test_class_operator_external() async {
+    var library =
+        await buildLibrary('class C { external C operator+(C other); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external + @29
+            parameters
+              requiredPositional other @33
+                type: C
+            returnType: C
+''');
+  }
+
+  test_class_operator_greater_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator>=(C other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          >= @25
+            parameters
+              requiredPositional other @30
+                type: C
+            returnType: bool
+''');
+  }
+
+  test_class_operator_index() async {
+    var library =
+        await buildLibrary('class C { bool operator[](int i) => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          [] @23
+            parameters
+              requiredPositional i @30
+                type: int
+            returnType: bool
+''');
+  }
+
+  test_class_operator_index_set() async {
+    var library = await buildLibrary('''
+class C {
+  void operator[]=(int i, bool v) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          []= @25
+            parameters
+              requiredPositional i @33
+                type: int
+              requiredPositional v @41
+                type: bool
+            returnType: void
+''');
+  }
+
+  test_class_operator_less_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator<=(C other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          <= @25
+            parameters
+              requiredPositional other @30
+                type: C
+            returnType: bool
+''');
+  }
+
+  test_class_ref_nullability_none() async {
+    var library = await buildLibrary('''
+class C {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_class_ref_nullability_question() async {
+    var library = await buildLibrary('''
+class C {}
+C? c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @14
+        type: C?
+    accessors
+      synthetic static get c @-1
+        returnType: C?
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C?
+        returnType: void
+''');
+  }
+
+  test_class_ref_nullability_star() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class C {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C*
+    accessors
+      synthetic static get c @-1
+        returnType: C*
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C*
+        returnType: void
+''');
+  }
+
+  test_class_setter_abstract() async {
+    var library =
+        await buildLibrary('abstract class C { void set x(int value); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @28
+            parameters
+              requiredPositional value @34
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_covariant() async {
+    var library =
+        await buildLibrary('class C { void set x(covariant int value); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @19
+            parameters
+              requiredPositional covariant value @35
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_external() async {
+    var library =
+        await buildLibrary('class C { external void set x(int value); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external set x @28
+            parameters
+              requiredPositional value @34
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_implicit_param_type() async {
+    var library = await buildLibrary('class C { void set x(value) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              requiredPositional value @21
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_setter_implicit_return_type() async {
+    var library = await buildLibrary('class C { set x(int value) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set x @14
+            parameters
+              requiredPositional value @20
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_conflictingInheritance() async {
+    var library = await buildLibrary('''
+class A {
+  int t;
+}
+class B extends A {
+  double t;
+}
+class C extends A implements B {
+}
+class D extends C {
+  void set t(p) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          t @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @-1
+            returnType: int
+          synthetic set t @-1
+            parameters
+              requiredPositional _t @-1
+                type: int
+            returnType: void
+      class B @27
+        supertype: A
+        fields
+          t @50
+            type: double
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+        accessors
+          synthetic get t @-1
+            returnType: double
+          synthetic set t @-1
+            parameters
+              requiredPositional _t @-1
+                type: double
+            returnType: void
+      class C @61
+        supertype: A
+        interfaces
+          B
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+      class D @96
+        supertype: C
+        fields
+          synthetic t @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
+        accessors
+          set t @121
+            parameters
+              requiredPositional p @123
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_nonStatic_implicit_param() async {
+    var library =
+        await buildLibrary('class C extends D { void set f(value) {} }'
+            ' abstract class D { void set f(int value); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          set f @29
+            parameters
+              requiredPositional value @31
+                type: int
+            returnType: void
+      abstract class D @58
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set f @71
+            parameters
+              requiredPositional value @77
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_static_implicit_return() async {
+    var library = await buildLibrary('''
+class C {
+  static set f(int value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static set f @23
+            parameters
+              requiredPositional value @29
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_invalid_named_parameter() async {
+    var library = await buildLibrary('class C { void set x({a}) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              optionalNamed a @22
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_setter_invalid_no_parameter() async {
+    var library = await buildLibrary('class C { void set x() {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            returnType: void
+''');
+  }
+
+  test_class_setter_invalid_optional_parameter() async {
+    var library = await buildLibrary('class C { void set x([a]) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              optionalPositional a @22
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_setter_invalid_too_many_parameters() async {
+    var library = await buildLibrary('class C { void set x(a, b) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              requiredPositional a @21
+                type: dynamic
+              requiredPositional b @24
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_setter_native() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) native;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setter_static() async {
+    var library =
+        await buildLibrary('class C { static void set x(int value) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static set x @26
+            parameters
+              requiredPositional value @32
+                type: int
+            returnType: void
+''');
+  }
+
+  test_class_setters() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) {}
+  set y(value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+          set y @43
+            parameters
+              requiredPositional value @45
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_class_supertype() async {
+    var library = await buildLibrary('''
+class C extends D {}
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+      class D @27
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_supertype_typeArguments() async {
+    var library = await buildLibrary('''
+class C extends D<int, double> {}
+class D<T1, T2> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D<int, double>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {T1: int, T2: double}
+      class D @40
+        typeParameters
+          covariant T1 @42
+            defaultType: dynamic
+          covariant T2 @46
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_supertype_typeArguments_self() async {
+    var library = await buildLibrary('''
+class A<T> {}
+class B extends A<B> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @20
+        supertype: A<B>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: B}
+''');
+  }
+
+  test_class_supertype_unresolved() async {
+    var library = await buildLibrary('class C extends D {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters() async {
+    var library = await buildLibrary('class C<T, U> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_bound() async {
+    var library = await buildLibrary('''
+class C<T extends Object, U extends D> {}
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: Object
+            defaultType: Object
+          covariant U @26
+            bound: D
+            defaultType: D
+        constructors
+          synthetic @-1
+      class D @48
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_cycle_1of1() async {
+    var library = await buildLibrary('class C<T extends T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_cycle_2of3() async {
+    var library = await buildLibrary(r'''
+class C<T extends V, U, V extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+          covariant U @21
+            defaultType: dynamic
+          covariant V @24
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_cycle_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+class A<T extends void Function(A)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant T @8
+            bound: void Function(A<dynamic>)
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
+    var library = await buildLibrary(r'''
+class C<T extends void Function<U extends C>()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function<U extends C<dynamic>>()
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary(r'''
+typedef F<X> = void Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @40
+        typeParameters
+          covariant X @42
+            bound: void Function(X*)*
+              alias: self::@typeAlias::F
+                typeArguments
+                  X*
+            defaultType: void Function(Null*)*
+              alias: self::@typeAlias::F
+                typeArguments
+                  Null*
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: void Function(X*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X*
+          returnType: void
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_nullSafe() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = void Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @40
+        typeParameters
+          covariant X @42
+            bound: void Function(X)
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
+            defaultType: void Function(Never)
+              alias: self::@typeAlias::F
+                typeArguments
+                  Never
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: void Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: void
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_covariant_nullSafe() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function();
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @36
+        typeParameters
+          covariant X @38
+            bound: X Function()
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
+            defaultType: dynamic Function()
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          covariant X @10
+            defaultType: dynamic
+        aliasedType: X Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: X
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_invariant_legacy() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @37
+        typeParameters
+          covariant X @39
+            bound: X Function(X)
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
+            defaultType: dynamic Function(dynamic)
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          invariant X @10
+            defaultType: dynamic
+        aliasedType: X Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: X
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_invariant_nullSafe() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @37
+        typeParameters
+          covariant X @39
+            bound: X Function(X)
+              alias: self::@typeAlias::F
+                typeArguments
+                  X
+            defaultType: dynamic Function(dynamic)
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          invariant X @10
+            defaultType: dynamic
+        aliasedType: X Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: X
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_both_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary(r'''
+class A<X extends X Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X* Function(X*)*
+            defaultType: dynamic Function(Null*)*
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_both_nullSafe() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function(X)
+            defaultType: dynamic Function(Never)
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_contravariant_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary(r'''
+class A<X extends void Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: void Function(X*)*
+            defaultType: void Function(Null*)*
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_contravariant_nullSafe() async {
+    var library = await buildLibrary(r'''
+class A<X extends void Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: void Function(X)
+            defaultType: void Function(Never)
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant_nullSafe() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef A<X> = List<void Function(X)>;
+
+class B<X extends A<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class B @46
+        typeParameters
+          covariant X @48
+            bound: List<void Function(X)>
+              alias: self::@typeAlias::A
+                typeArguments
+                  X
+            defaultType: List<void Function(Never)>
+              alias: self::@typeAlias::A
+                typeArguments
+                  Never
+        constructors
+          synthetic @-1
+    typeAliases
+      A @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: List<void Function(X)>
+''');
+  }
+
+  test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
+    var library = await buildLibrary(r'''
+typedef A<X> = Map<X, int>;
+
+class B<X extends A<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class B @35
+        typeParameters
+          covariant X @37
+            bound: Map<X, int>
+              alias: self::@typeAlias::A
+                typeArguments
+                  X
+            defaultType: Map<dynamic, int>
+              alias: self::@typeAlias::A
+                typeArguments
+                  dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      A @8
+        typeParameters
+          covariant X @10
+            defaultType: dynamic
+        aliasedType: Map<X, int>
+''');
+  }
+
+  test_class_typeParameters_f_bound_complex() async {
+    var library = await buildLibrary('class C<T extends List<U>, U> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: List<U>
+            defaultType: List<dynamic>
+          covariant U @27
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_f_bound_simple() async {
+    var library = await buildLibrary('class C<T extends U, U> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: U
+            defaultType: dynamic
+          covariant U @21
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('class C<in T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('class C<out T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('class C<inout T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_class_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('class C<inout T, in U, out V> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+          contravariant U @20
+            defaultType: dynamic
+          covariant V @27
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias() async {
+    var library = await buildLibrary('''
+class C = D with E, F, G;
+class D {}
+class E {}
+class F {}
+class G {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+          F
+          G
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @32
+        constructors
+          synthetic @-1
+      class E @43
+        constructors
+          synthetic @-1
+      class F @54
+        constructors
+          synthetic @-1
+      class G @65
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_abstract() async {
+    var library = await buildLibrary('''
+abstract class C = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class alias C @15
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @35
+        constructors
+          synthetic @-1
+      class E @46
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_documented() async {
+    var library = await buildLibrary('''
+/**
+ * Docs
+ */
+class C = D with E;
+
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @22
+        documentationComment: /**\n * Docs\n */
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @43
+        constructors
+          synthetic @-1
+      class E @54
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// aaa
+/// b
+/// cc
+class C = D with E;
+
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @27
+        documentationComment: /// aaa\n/// b\n/// cc
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @48
+        constructors
+          synthetic @-1
+      class E @59
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_documented_withLeadingNonDocumentation() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+class C = D with E;
+
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @66
+        documentationComment: /**\n * Docs\n */
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @87
+        constructors
+          synthetic @-1
+      class E @98
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_generic() async {
+    var library = await buildLibrary('''
+class Z = A with B<int>, C<double>;
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias Z @6
+        supertype: A
+        mixins
+          B<int>
+          C<double>
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+      class A @42
+        constructors
+          synthetic @-1
+      class B @53
+        typeParameters
+          covariant B1 @55
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class C @68
+        typeParameters
+          covariant C1 @70
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+class C<T extends C> = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class alias C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: dynamic
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @39
+        constructors
+          synthetic @-1
+      class E @50
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_notSimplyBounded_simple_no_type_parameter_bound() async {
+    // If no bounds are specified, then the class is simply bounded by syntax
+    // alone, so there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C<T> = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @29
+        constructors
+          synthetic @-1
+      class E @40
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_notSimplyBounded_simple_non_generic() async {
+    // If no type parameters are specified, then the class is simply bounded, so
+    // there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @26
+        constructors
+          synthetic @-1
+      class E @37
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_with_const_constructors() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class Base {
+  const Base._priv();
+  const Base();
+  const Base.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class M @23
+        constructors
+          synthetic @-1
+      class alias MixinApp @34
+        supertype: Base
+        mixins
+          M
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::•
+            superConstructor: package:test/a.dart::@class::Base::@constructor::•
+          synthetic const named @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: named @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::named
+            superConstructor: package:test/a.dart::@class::Base::@constructor::named
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class Base {
+  bool x = true;
+  Base._priv();
+  Base();
+  Base.noArgs();
+  Base.requiredArg(x);
+  Base.positionalArg([bool x = true]);
+  Base.positionalArg2([this.x = true]);
+  Base.namedArg({int x = 42});
+  Base.namedArg2({this.x = true});
+  factory Base.fact() => Base();
+  factory Base.fact2() = Base.noArgs;
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class M @23
+        constructors
+          synthetic @-1
+      class alias MixinApp @34
+        supertype: Base
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::•
+            superConstructor: package:test/a.dart::@class::Base::@constructor::•
+          synthetic noArgs @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: noArgs @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
+            superConstructor: package:test/a.dart::@class::Base::@constructor::noArgs
+          synthetic requiredArg @-1
+            parameters
+              requiredPositional x @-1
+                type: dynamic
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: requiredArg @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: x @-1
+                      staticElement: x@-1
+                      staticType: dynamic
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
+            superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
+          synthetic positionalArg @-1
+            parameters
+              optionalPositional x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @127
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: positionalArg @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: x @-1
+                      staticElement: x@-1
+                      staticType: bool
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
+            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
+          synthetic positionalArg2 @-1
+            parameters
+              optionalPositional final x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @167
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: positionalArg2 @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: x @-1
+                      staticElement: x@-1
+                      staticType: bool
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
+            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
+          synthetic namedArg @-1
+            parameters
+              optionalNamed x @-1
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @200
+                    staticType: int
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: namedArg @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: x @-1
+                      staticElement: x@-1
+                      staticType: int
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
+            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
+          synthetic namedArg2 @-1
+            parameters
+              optionalNamed final x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @233
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: namedArg2 @-1
+                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: x @-1
+                      staticElement: x@-1
+                      staticType: bool
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
+            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg2
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors_type_substitution() async {
+    var library = await buildLibrary('''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class Base @6
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        constructors
+          ctor @23
+            periodOffset: 22
+            nameEnd: 27
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional l @41
+                type: List<T>
+      class M @53
+        constructors
+          synthetic @-1
+      class alias MixinApp @64
+        supertype: Base<dynamic>
+        mixins
+          M
+        constructors
+          synthetic ctor @-1
+            parameters
+              requiredPositional t @-1
+                type: dynamic
+              requiredPositional l @-1
+                type: List<dynamic>
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: ctor @-1
+                  staticElement: self::@class::Base::@constructor::ctor
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: t @-1
+                      staticElement: t@-1
+                      staticType: dynamic
+                    SimpleIdentifier
+                      token: l @-1
+                      staticElement: l@-1
+                      staticType: List<dynamic>
+                  rightParenthesis: ) @0
+                staticElement: self::@class::Base::@constructor::ctor
+            superConstructor: ConstructorMember
+              base: self::@class::Base::@constructor::ctor
+              substitution: {T: dynamic}
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors_type_substitution_complex() async {
+    var library = await buildLibrary('''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {}
+class MixinApp<U> = Base<List<U>> with M;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class Base @6
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        constructors
+          ctor @23
+            periodOffset: 22
+            nameEnd: 27
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional l @41
+                type: List<T>
+      class M @53
+        constructors
+          synthetic @-1
+      class alias MixinApp @64
+        typeParameters
+          covariant U @73
+            defaultType: dynamic
+        supertype: Base<List<U>>
+        mixins
+          M
+        constructors
+          synthetic ctor @-1
+            parameters
+              requiredPositional t @-1
+                type: List<U>
+              requiredPositional l @-1
+                type: List<List<U>>
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: ctor @-1
+                  staticElement: self::@class::Base::@constructor::ctor
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: t @-1
+                      staticElement: t@-1
+                      staticType: List<U>
+                    SimpleIdentifier
+                      token: l @-1
+                      staticElement: l@-1
+                      staticType: List<List<U>>
+                  rightParenthesis: ) @0
+                staticElement: self::@class::Base::@constructor::ctor
+            superConstructor: ConstructorMember
+              base: self::@class::Base::@constructor::ctor
+              substitution: {T: List<U>}
+''');
+  }
+
+  test_classAlias_with_mixin_members() async {
+    var library = await buildLibrary('''
+class C = D with E;
+class D {}
+class E {
+  int get a => null;
+  void set b(int i) {}
+  void f() {}
+  int x;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @26
+        constructors
+          synthetic @-1
+      class E @37
+        fields
+          x @105
+            type: int
+          synthetic a @-1
+            type: int
+          synthetic b @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+          get a @51
+            returnType: int
+          set b @73
+            parameters
+              requiredPositional i @79
+                type: int
+            returnType: void
+        methods
+          f @92
+            returnType: void
+''');
+  }
+
+  test_classes() async {
+    var library = await buildLibrary('class C {} class D {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+      class D @17
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_closure_executable_with_return_type_from_closure() async {
+    var library = await buildLibrary('''
+f() {
+  print(() {});
+  print(() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+''');
+  }
+
+  test_closure_generic() async {
+    var library = await buildLibrary(r'''
+final f = <U, V>(U x, V y) => y;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final f @6
+        type: V Function<U, V>(U, V)
+    accessors
+      synthetic static get f @-1
+        returnType: V Function<U, V>(U, V)
+''');
+  }
+
+  test_closure_in_variable_declaration_in_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of lib; final f = (int i) => i.toDouble();');
+    var library = await buildLibrary('''
+library lib;
+part "a.dart";
+''');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        static final f @19
+          type: double Function(int)
+      accessors
+        synthetic static get f @-1
+          returnType: double Function(int)
+''');
+  }
+
+  test_codeRange_class() async {
+    var library = await buildLibrary('''
+class Raw {}
+
+/// Comment 1.
+/// Comment 2.
+class HasDocComment {}
+
+@Object()
+class HasAnnotation {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+class AnnotationThenComment {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+class CommentThenAnnotation {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+class CommentAroundAnnotation {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class Raw @6
+        codeOffset: 0
+        codeLength: 12
+        constructors
+          synthetic @-1
+      class HasDocComment @50
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 14
+        codeLength: 52
+        constructors
+          synthetic @-1
+      class HasAnnotation @84
+        metadata
+          Annotation
+            atSign: @ @68
+            name: SimpleIdentifier
+              token: Object @69
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @75
+              rightParenthesis: ) @76
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 68
+        codeLength: 32
+        constructors
+          synthetic @-1
+      class AnnotationThenComment @148
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @102
+            name: SimpleIdentifier
+              token: Object @103
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @109
+              rightParenthesis: ) @110
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 102
+        codeLength: 70
+        constructors
+          synthetic @-1
+      class CommentThenAnnotation @220
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @204
+            name: SimpleIdentifier
+              token: Object @205
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @211
+              rightParenthesis: ) @212
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 174
+        codeLength: 70
+        constructors
+          synthetic @-1
+      class CommentAroundAnnotation @292
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @261
+            name: SimpleIdentifier
+              token: Object @262
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @268
+              rightParenthesis: ) @269
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 261
+        codeLength: 57
+        constructors
+          synthetic @-1
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_class_namedMixin() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B {}
+
+class Raw = Object with A, B;
+
+/// Comment 1.
+/// Comment 2.
+class HasDocComment = Object with A, B;
+
+@Object()
+class HasAnnotation = Object with A, B;
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+class AnnotationThenComment = Object with A, B;
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+class CommentThenAnnotation = Object with A, B;
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+class CommentAroundAnnotation = Object with A, B;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 10
+        constructors
+          synthetic @-1
+      class B @18
+        codeOffset: 12
+        codeLength: 10
+        constructors
+          synthetic @-1
+      class alias Raw @30
+        codeOffset: 24
+        codeLength: 29
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias HasDocComment @91
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 55
+        codeLength: 69
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias HasAnnotation @142
+        metadata
+          Annotation
+            atSign: @ @126
+            name: SimpleIdentifier
+              token: Object @127
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @133
+              rightParenthesis: ) @134
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 126
+        codeLength: 49
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias AnnotationThenComment @223
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @177
+            name: SimpleIdentifier
+              token: Object @178
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @184
+              rightParenthesis: ) @185
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 177
+        codeLength: 87
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias CommentThenAnnotation @312
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @296
+            name: SimpleIdentifier
+              token: Object @297
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @303
+              rightParenthesis: ) @304
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 266
+        codeLength: 87
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias CommentAroundAnnotation @401
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @370
+            name: SimpleIdentifier
+              token: Object @371
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @377
+              rightParenthesis: ) @378
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 370
+        codeLength: 74
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_constructor() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+
+  C.raw() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  C.hasDocComment() {}
+
+  @Object()
+  C.hasAnnotation() {}
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  C.annotationThenComment() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  C.commentThenAnnotation() {}
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  C.commentAroundAnnotation() {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 362
+        constructors
+          @12
+            codeOffset: 12
+            codeLength: 4
+          raw @22
+            codeOffset: 20
+            codeLength: 10
+            periodOffset: 21
+            nameEnd: 25
+          hasDocComment @70
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 34
+            codeLength: 54
+            periodOffset: 69
+            nameEnd: 83
+          hasAnnotation @106
+            metadata
+              Annotation
+                atSign: @ @92
+                name: SimpleIdentifier
+                  token: Object @93
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @99
+                  rightParenthesis: ) @100
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 92
+            codeLength: 32
+            periodOffset: 105
+            nameEnd: 119
+          annotationThenComment @176
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @128
+                name: SimpleIdentifier
+                  token: Object @129
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @135
+                  rightParenthesis: ) @136
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 128
+            codeLength: 74
+            periodOffset: 175
+            nameEnd: 197
+          commentThenAnnotation @254
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @240
+                name: SimpleIdentifier
+                  token: Object @241
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @247
+                  rightParenthesis: ) @248
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 206
+            codeLength: 74
+            periodOffset: 253
+            nameEnd: 275
+          commentAroundAnnotation @332
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @301
+                name: SimpleIdentifier
+                  token: Object @302
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @308
+                  rightParenthesis: ) @309
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 301
+            codeLength: 59
+            periodOffset: 331
+            nameEnd: 355
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_constructor_factory() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() => throw 0;
+
+  factory C.raw() => throw 0;
+
+  /// Comment 1.
+  /// Comment 2.
+  factory C.hasDocComment() => throw 0;
+
+  @Object()
+  factory C.hasAnnotation() => throw 0;
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  factory C.annotationThenComment() => throw 0;
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  factory C.commentThenAnnotation() => throw 0;
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  factory C.commentAroundAnnotation() => throw 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 483
+        constructors
+          factory @20
+            codeOffset: 12
+            codeLength: 23
+          factory raw @49
+            codeOffset: 39
+            codeLength: 27
+            periodOffset: 48
+            nameEnd: 52
+          factory hasDocComment @114
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 70
+            codeLength: 71
+            periodOffset: 113
+            nameEnd: 127
+          factory hasAnnotation @167
+            metadata
+              Annotation
+                atSign: @ @145
+                name: SimpleIdentifier
+                  token: Object @146
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @152
+                  rightParenthesis: ) @153
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 145
+            codeLength: 49
+            periodOffset: 166
+            nameEnd: 180
+          factory annotationThenComment @254
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @198
+                name: SimpleIdentifier
+                  token: Object @199
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @205
+                  rightParenthesis: ) @206
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 198
+            codeLength: 91
+            periodOffset: 253
+            nameEnd: 275
+          factory commentThenAnnotation @349
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @327
+                name: SimpleIdentifier
+                  token: Object @328
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @334
+                  rightParenthesis: ) @335
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 293
+            codeLength: 91
+            periodOffset: 348
+            nameEnd: 370
+          factory commentAroundAnnotation @444
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @405
+                name: SimpleIdentifier
+                  token: Object @406
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @412
+                  rightParenthesis: ) @413
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 405
+            codeLength: 76
+            periodOffset: 443
+            nameEnd: 467
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_enum() async {
+    var library = await buildLibrary('''
+enum E {
+  aaa, bbb, ccc
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        codeOffset: 0
+        codeLength: 26
+        supertype: Enum
+        fields
+          static const enumConstant aaa @11
+            codeOffset: 11
+            codeLength: 3
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant bbb @16
+            codeOffset: 16
+            codeLength: 3
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant ccc @21
+            codeOffset: 21
+            codeLength: 3
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: aaa @-1
+                    staticElement: self::@enum::E::@getter::aaa
+                    staticType: E
+                  SimpleIdentifier
+                    token: bbb @-1
+                    staticElement: self::@enum::E::@getter::bbb
+                    staticType: E
+                  SimpleIdentifier
+                    token: ccc @-1
+                    staticElement: self::@enum::E::@getter::ccc
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get aaa @-1
+            returnType: E
+          synthetic static get bbb @-1
+            returnType: E
+          synthetic static get ccc @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_extensions() async {
+    var library = await buildLibrary('''
+class A {}
+
+extension Raw on A {}
+
+/// Comment 1.
+/// Comment 2.
+extension HasDocComment on A {}
+
+@Object()
+extension HasAnnotation on A {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+extension AnnotationThenComment on A {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+extension CommentThenAnnotation on A {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+extension CommentAroundAnnotation on A {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 10
+        constructors
+          synthetic @-1
+    extensions
+      Raw @22
+        codeOffset: 12
+        codeLength: 21
+        extendedType: A
+      HasDocComment @75
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 35
+        codeLength: 61
+        extendedType: A
+      HasAnnotation @118
+        metadata
+          Annotation
+            atSign: @ @98
+            name: SimpleIdentifier
+              token: Object @99
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @105
+              rightParenthesis: ) @106
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 98
+        codeLength: 41
+        extendedType: A
+      AnnotationThenComment @191
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @141
+            name: SimpleIdentifier
+              token: Object @142
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @148
+              rightParenthesis: ) @149
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 141
+        codeLength: 79
+        extendedType: A
+      CommentThenAnnotation @272
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @252
+            name: SimpleIdentifier
+              token: Object @253
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @259
+              rightParenthesis: ) @260
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 222
+        codeLength: 79
+        extendedType: A
+      CommentAroundAnnotation @353
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @318
+            name: SimpleIdentifier
+              token: Object @319
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @325
+              rightParenthesis: ) @326
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 318
+        codeLength: 66
+        extendedType: A
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_field() async {
+    var library = await buildLibrary('''
+class C {
+  int withInit = 1;
+
+  int withoutInit;
+
+  int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 115
+        fields
+          withInit @16
+            codeOffset: 12
+            codeLength: 16
+            type: int
+          withoutInit @37
+            codeOffset: 33
+            codeLength: 15
+            type: int
+          multiWithInit @57
+            codeOffset: 53
+            codeLength: 21
+            type: int
+          multiWithoutInit @76
+            codeOffset: 76
+            codeLength: 16
+            type: int
+          multiWithInit2 @94
+            codeOffset: 94
+            codeLength: 18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get withInit @-1
+            returnType: int
+          synthetic set withInit @-1
+            parameters
+              requiredPositional _withInit @-1
+                type: int
+            returnType: void
+          synthetic get withoutInit @-1
+            returnType: int
+          synthetic set withoutInit @-1
+            parameters
+              requiredPositional _withoutInit @-1
+                type: int
+            returnType: void
+          synthetic get multiWithInit @-1
+            returnType: int
+          synthetic set multiWithInit @-1
+            parameters
+              requiredPositional _multiWithInit @-1
+                type: int
+            returnType: void
+          synthetic get multiWithoutInit @-1
+            returnType: int
+          synthetic set multiWithoutInit @-1
+            parameters
+              requiredPositional _multiWithoutInit @-1
+                type: int
+            returnType: void
+          synthetic get multiWithInit2 @-1
+            returnType: int
+          synthetic set multiWithInit2 @-1
+            parameters
+              requiredPositional _multiWithInit2 @-1
+                type: int
+            returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_field_annotations() async {
+    var library = await buildLibrary('''
+class C {
+  /// Comment 1.
+  /// Comment 2.
+  int hasDocComment, hasDocComment2;
+
+  @Object()
+  int hasAnnotation, hasAnnotation2;
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  int annotationThenComment, annotationThenComment2;
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  int commentThenAnnotation, commentThenAnnotation2;
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  int commentAroundAnnotation, commentAroundAnnotation2;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 436
+        fields
+          hasDocComment @50
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 12
+            codeLength: 51
+            type: int
+          hasDocComment2 @65
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 65
+            codeLength: 14
+            type: int
+          hasAnnotation @100
+            metadata
+              Annotation
+                atSign: @ @84
+                name: SimpleIdentifier
+                  token: Object @85
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @91
+                  rightParenthesis: ) @92
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 84
+            codeLength: 29
+            type: int
+          hasAnnotation2 @115
+            metadata
+              Annotation
+                atSign: @ @84
+                name: SimpleIdentifier
+                  token: Object @85
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @91
+                  rightParenthesis: ) @92
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 115
+            codeLength: 14
+            type: int
+          annotationThenComment @184
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @134
+                name: SimpleIdentifier
+                  token: Object @135
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @141
+                  rightParenthesis: ) @142
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 134
+            codeLength: 71
+            type: int
+          annotationThenComment2 @207
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @134
+                name: SimpleIdentifier
+                  token: Object @135
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @141
+                  rightParenthesis: ) @142
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 207
+            codeLength: 22
+            type: int
+          commentThenAnnotation @284
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @268
+                name: SimpleIdentifier
+                  token: Object @269
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @275
+                  rightParenthesis: ) @276
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 234
+            codeLength: 71
+            type: int
+          commentThenAnnotation2 @307
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @268
+                name: SimpleIdentifier
+                  token: Object @269
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @275
+                  rightParenthesis: ) @276
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 307
+            codeLength: 22
+            type: int
+          commentAroundAnnotation @384
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @351
+                name: SimpleIdentifier
+                  token: Object @352
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @358
+                  rightParenthesis: ) @359
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 351
+            codeLength: 56
+            type: int
+          commentAroundAnnotation2 @409
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @351
+                name: SimpleIdentifier
+                  token: Object @352
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @358
+                  rightParenthesis: ) @359
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 409
+            codeLength: 24
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get hasDocComment @-1
+            returnType: int
+          synthetic set hasDocComment @-1
+            parameters
+              requiredPositional _hasDocComment @-1
+                type: int
+            returnType: void
+          synthetic get hasDocComment2 @-1
+            returnType: int
+          synthetic set hasDocComment2 @-1
+            parameters
+              requiredPositional _hasDocComment2 @-1
+                type: int
+            returnType: void
+          synthetic get hasAnnotation @-1
+            returnType: int
+          synthetic set hasAnnotation @-1
+            parameters
+              requiredPositional _hasAnnotation @-1
+                type: int
+            returnType: void
+          synthetic get hasAnnotation2 @-1
+            returnType: int
+          synthetic set hasAnnotation2 @-1
+            parameters
+              requiredPositional _hasAnnotation2 @-1
+                type: int
+            returnType: void
+          synthetic get annotationThenComment @-1
+            returnType: int
+          synthetic set annotationThenComment @-1
+            parameters
+              requiredPositional _annotationThenComment @-1
+                type: int
+            returnType: void
+          synthetic get annotationThenComment2 @-1
+            returnType: int
+          synthetic set annotationThenComment2 @-1
+            parameters
+              requiredPositional _annotationThenComment2 @-1
+                type: int
+            returnType: void
+          synthetic get commentThenAnnotation @-1
+            returnType: int
+          synthetic set commentThenAnnotation @-1
+            parameters
+              requiredPositional _commentThenAnnotation @-1
+                type: int
+            returnType: void
+          synthetic get commentThenAnnotation2 @-1
+            returnType: int
+          synthetic set commentThenAnnotation2 @-1
+            parameters
+              requiredPositional _commentThenAnnotation2 @-1
+                type: int
+            returnType: void
+          synthetic get commentAroundAnnotation @-1
+            returnType: int
+          synthetic set commentAroundAnnotation @-1
+            parameters
+              requiredPositional _commentAroundAnnotation @-1
+                type: int
+            returnType: void
+          synthetic get commentAroundAnnotation2 @-1
+            returnType: int
+          synthetic set commentAroundAnnotation2 @-1
+            parameters
+              requiredPositional _commentAroundAnnotation2 @-1
+                type: int
+            returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_function() async {
+    var library = await buildLibrary('''
+void raw() {}
+
+/// Comment 1.
+/// Comment 2.
+void hasDocComment() {}
+
+@Object()
+void hasAnnotation() {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+void annotationThenComment() {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+void commentThenAnnotation() {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+void commentAroundAnnotation() {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    functions
+      raw @5
+        codeOffset: 0
+        codeLength: 13
+        returnType: void
+      hasDocComment @50
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 15
+        codeLength: 53
+        returnType: void
+      hasAnnotation @85
+        metadata
+          Annotation
+            atSign: @ @70
+            name: SimpleIdentifier
+              token: Object @71
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @77
+              rightParenthesis: ) @78
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 70
+        codeLength: 33
+        returnType: void
+      annotationThenComment @150
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @105
+            name: SimpleIdentifier
+              token: Object @106
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @112
+              rightParenthesis: ) @113
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 105
+        codeLength: 71
+        returnType: void
+      commentThenAnnotation @223
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @208
+            name: SimpleIdentifier
+              token: Object @209
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @215
+              rightParenthesis: ) @216
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 178
+        codeLength: 71
+        returnType: void
+      commentAroundAnnotation @296
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @266
+            name: SimpleIdentifier
+              token: Object @267
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @273
+              rightParenthesis: ) @274
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 266
+        codeLength: 58
+        returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_functionTypeAlias() async {
+    var library = await buildLibrary('''
+typedef Raw();
+
+/// Comment 1.
+/// Comment 2.
+typedef HasDocComment();
+
+@Object()
+typedef HasAnnotation();
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+typedef AnnotationThenComment();
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+typedef CommentThenAnnotation();
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+typedef CommentAroundAnnotation();
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased Raw @8
+        codeOffset: 0
+        codeLength: 14
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased HasDocComment @54
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 16
+        codeLength: 54
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased HasAnnotation @90
+        metadata
+          Annotation
+            atSign: @ @72
+            name: SimpleIdentifier
+              token: Object @73
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @79
+              rightParenthesis: ) @80
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 72
+        codeLength: 34
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased AnnotationThenComment @156
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @108
+            name: SimpleIdentifier
+              token: Object @109
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @115
+              rightParenthesis: ) @116
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 108
+        codeLength: 72
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased CommentThenAnnotation @230
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @212
+            name: SimpleIdentifier
+              token: Object @213
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @219
+              rightParenthesis: ) @220
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 182
+        codeLength: 72
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased CommentAroundAnnotation @304
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @271
+            name: SimpleIdentifier
+              token: Object @272
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @278
+              rightParenthesis: ) @279
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 271
+        codeLength: 59
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_genericTypeAlias() async {
+    var library = await buildLibrary('''
+typedef Raw = Function();
+
+/// Comment 1.
+/// Comment 2.
+typedef HasDocComment = Function();
+
+@Object()
+typedef HasAnnotation = Function();
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+typedef AnnotationThenComment = Function();
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+typedef CommentThenAnnotation = Function();
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+typedef CommentAroundAnnotation = Function();
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    typeAliases
+      Raw @8
+        codeOffset: 0
+        codeLength: 25
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      HasDocComment @65
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 27
+        codeLength: 65
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      HasAnnotation @112
+        metadata
+          Annotation
+            atSign: @ @94
+            name: SimpleIdentifier
+              token: Object @95
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @101
+              rightParenthesis: ) @102
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 94
+        codeLength: 45
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      AnnotationThenComment @189
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @141
+            name: SimpleIdentifier
+              token: Object @142
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @148
+              rightParenthesis: ) @149
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 141
+        codeLength: 83
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      CommentThenAnnotation @274
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @256
+            name: SimpleIdentifier
+              token: Object @257
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @263
+              rightParenthesis: ) @264
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 226
+        codeLength: 83
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      CommentAroundAnnotation @359
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @326
+            name: SimpleIdentifier
+              token: Object @327
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @333
+              rightParenthesis: ) @334
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 326
+        codeLength: 70
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_method() async {
+    var library = await buildLibrary('''
+class C {
+  void raw() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  void hasDocComment() {}
+
+  @Object()
+  void hasAnnotation() {}
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  void annotationThenComment() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  void commentThenAnnotation() {}
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  void commentAroundAnnotation() {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 372
+        constructors
+          synthetic @-1
+        methods
+          raw @17
+            codeOffset: 12
+            codeLength: 13
+            returnType: void
+          hasDocComment @68
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 29
+            codeLength: 57
+            returnType: void
+          hasAnnotation @107
+            metadata
+              Annotation
+                atSign: @ @90
+                name: SimpleIdentifier
+                  token: Object @91
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @97
+                  rightParenthesis: ) @98
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 90
+            codeLength: 35
+            returnType: void
+          annotationThenComment @180
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @129
+                name: SimpleIdentifier
+                  token: Object @130
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @136
+                  rightParenthesis: ) @137
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 129
+            codeLength: 77
+            returnType: void
+          commentThenAnnotation @261
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @244
+                name: SimpleIdentifier
+                  token: Object @245
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @251
+                  rightParenthesis: ) @252
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 210
+            codeLength: 77
+            returnType: void
+          commentAroundAnnotation @342
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                atSign: @ @308
+                name: SimpleIdentifier
+                  token: Object @309
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @315
+                  rightParenthesis: ) @316
+                element: dart:core::@class::Object::@constructor::•
+            codeOffset: 308
+            codeLength: 62
+            returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_parameter() async {
+    var library = await buildLibrary('''
+main({int a = 1, int b, int c = 2}) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        parameters
+          optionalNamed a @10
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @14
+                staticType: int
+          optionalNamed b @21
+            type: int
+          optionalNamed c @28
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @32
+                staticType: int
+        returnType: dynamic
+''');
+  }
+
+  test_codeRange_parameter_annotations() async {
+    var library = await buildLibrary('''
+main(@Object() int a, int b, @Object() int c) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        parameters
+          requiredPositional a @19
+            type: int
+            metadata
+              Annotation
+                atSign: @ @5
+                name: SimpleIdentifier
+                  token: Object @6
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @12
+                  rightParenthesis: ) @13
+                element: dart:core::@class::Object::@constructor::•
+          requiredPositional b @26
+            type: int
+          requiredPositional c @43
+            type: int
+            metadata
+              Annotation
+                atSign: @ @29
+                name: SimpleIdentifier
+                  token: Object @30
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @36
+                  rightParenthesis: ) @37
+                element: dart:core::@class::Object::@constructor::•
+        returnType: dynamic
+''');
+  }
+
+  test_codeRange_topLevelVariable() async {
+    var library = await buildLibrary('''
+int withInit = 1 + 2 * 3;
+
+int withoutInit;
+
+int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      static withInit @4
+        codeOffset: 0
+        codeLength: 24
+        type: int
+      static withoutInit @31
+        codeOffset: 27
+        codeLength: 15
+        type: int
+      static multiWithInit @49
+        codeOffset: 45
+        codeLength: 21
+        type: int
+      static multiWithoutInit @68
+        codeOffset: 68
+        codeLength: 16
+        type: int
+      static multiWithInit2 @86
+        codeOffset: 86
+        codeLength: 18
+        type: int
+    accessors
+      synthetic static get withInit @-1
+        returnType: int
+      synthetic static set withInit @-1
+        parameters
+          requiredPositional _withInit @-1
+            type: int
+        returnType: void
+      synthetic static get withoutInit @-1
+        returnType: int
+      synthetic static set withoutInit @-1
+        parameters
+          requiredPositional _withoutInit @-1
+            type: int
+        returnType: void
+      synthetic static get multiWithInit @-1
+        returnType: int
+      synthetic static set multiWithInit @-1
+        parameters
+          requiredPositional _multiWithInit @-1
+            type: int
+        returnType: void
+      synthetic static get multiWithoutInit @-1
+        returnType: int
+      synthetic static set multiWithoutInit @-1
+        parameters
+          requiredPositional _multiWithoutInit @-1
+            type: int
+        returnType: void
+      synthetic static get multiWithInit2 @-1
+        returnType: int
+      synthetic static set multiWithInit2 @-1
+        parameters
+          requiredPositional _multiWithInit2 @-1
+            type: int
+        returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_topLevelVariable_annotations() async {
+    var library = await buildLibrary('''
+/// Comment 1.
+/// Comment 2.
+int hasDocComment, hasDocComment2;
+
+@Object()
+int hasAnnotation, hasAnnotation2;
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+int annotationThenComment, annotationThenComment2;
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+int commentThenAnnotation, commentThenAnnotation2;
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+int commentAroundAnnotation, commentAroundAnnotation2;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      static hasDocComment @34
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 0
+        codeLength: 47
+        type: int
+      static hasDocComment2 @49
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 49
+        codeLength: 14
+        type: int
+      static hasAnnotation @80
+        metadata
+          Annotation
+            atSign: @ @66
+            name: SimpleIdentifier
+              token: Object @67
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @73
+              rightParenthesis: ) @74
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 66
+        codeLength: 27
+        type: int
+      static hasAnnotation2 @95
+        metadata
+          Annotation
+            atSign: @ @66
+            name: SimpleIdentifier
+              token: Object @67
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @73
+              rightParenthesis: ) @74
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 95
+        codeLength: 14
+        type: int
+      static annotationThenComment @156
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @112
+            name: SimpleIdentifier
+              token: Object @113
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @119
+              rightParenthesis: ) @120
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 112
+        codeLength: 65
+        type: int
+      static annotationThenComment2 @179
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @112
+            name: SimpleIdentifier
+              token: Object @113
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @119
+              rightParenthesis: ) @120
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 179
+        codeLength: 22
+        type: int
+      static commentThenAnnotation @248
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @234
+            name: SimpleIdentifier
+              token: Object @235
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @241
+              rightParenthesis: ) @242
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 204
+        codeLength: 65
+        type: int
+      static commentThenAnnotation2 @271
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @234
+            name: SimpleIdentifier
+              token: Object @235
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @241
+              rightParenthesis: ) @242
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 271
+        codeLength: 22
+        type: int
+      static commentAroundAnnotation @340
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @311
+            name: SimpleIdentifier
+              token: Object @312
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @318
+              rightParenthesis: ) @319
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 311
+        codeLength: 52
+        type: int
+      static commentAroundAnnotation2 @365
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            atSign: @ @311
+            name: SimpleIdentifier
+              token: Object @312
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @318
+              rightParenthesis: ) @319
+            element: dart:core::@class::Object::@constructor::•
+        codeOffset: 365
+        codeLength: 24
+        type: int
+    accessors
+      synthetic static get hasDocComment @-1
+        returnType: int
+      synthetic static set hasDocComment @-1
+        parameters
+          requiredPositional _hasDocComment @-1
+            type: int
+        returnType: void
+      synthetic static get hasDocComment2 @-1
+        returnType: int
+      synthetic static set hasDocComment2 @-1
+        parameters
+          requiredPositional _hasDocComment2 @-1
+            type: int
+        returnType: void
+      synthetic static get hasAnnotation @-1
+        returnType: int
+      synthetic static set hasAnnotation @-1
+        parameters
+          requiredPositional _hasAnnotation @-1
+            type: int
+        returnType: void
+      synthetic static get hasAnnotation2 @-1
+        returnType: int
+      synthetic static set hasAnnotation2 @-1
+        parameters
+          requiredPositional _hasAnnotation2 @-1
+            type: int
+        returnType: void
+      synthetic static get annotationThenComment @-1
+        returnType: int
+      synthetic static set annotationThenComment @-1
+        parameters
+          requiredPositional _annotationThenComment @-1
+            type: int
+        returnType: void
+      synthetic static get annotationThenComment2 @-1
+        returnType: int
+      synthetic static set annotationThenComment2 @-1
+        parameters
+          requiredPositional _annotationThenComment2 @-1
+            type: int
+        returnType: void
+      synthetic static get commentThenAnnotation @-1
+        returnType: int
+      synthetic static set commentThenAnnotation @-1
+        parameters
+          requiredPositional _commentThenAnnotation @-1
+            type: int
+        returnType: void
+      synthetic static get commentThenAnnotation2 @-1
+        returnType: int
+      synthetic static set commentThenAnnotation2 @-1
+        parameters
+          requiredPositional _commentThenAnnotation2 @-1
+            type: int
+        returnType: void
+      synthetic static get commentAroundAnnotation @-1
+        returnType: int
+      synthetic static set commentAroundAnnotation @-1
+        parameters
+          requiredPositional _commentAroundAnnotation @-1
+            type: int
+        returnType: void
+      synthetic static get commentAroundAnnotation2 @-1
+        returnType: int
+      synthetic static set commentAroundAnnotation2 @-1
+        parameters
+          requiredPositional _commentAroundAnnotation2 @-1
+            type: int
+        returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_codeRange_type_parameter() async {
+    var library = await buildLibrary('''
+class A<T> {}
+void f<U extends num> {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 13
+        typeParameters
+          covariant T @8
+            codeOffset: 8
+            codeLength: 1
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    functions
+      f @19
+        codeOffset: 14
+        codeLength: 24
+        typeParameters
+          covariant U @21
+            codeOffset: 21
+            codeLength: 13
+            bound: num
+        returnType: void
+''',
+        withCodeRanges: true);
+  }
+
+  test_compilationUnit_nnbd_disabled_via_dart_directive() async {
+    var library = await buildLibrary('''
+// @dart=2.2
+''');
+    expect(library.isNonNullableByDefault, isFalse);
+  }
+
+  test_compilationUnit_nnbd_disabled_via_feature_set() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('');
+    expect(library.isNonNullableByDefault, isFalse);
+  }
+
+  test_compilationUnit_nnbd_enabled() async {
+    var library = await buildLibrary('');
+    expect(library.isNonNullableByDefault, isTrue);
+  }
+
+  test_const_asExpression() async {
+    var library = await buildLibrary('''
+const num a = 0;
+const b = a as int;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @10
+        type: num
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+      static const b @23
+        type: int
+        constantInitializer
+          AsExpression
+            expression: SimpleIdentifier
+              token: a @27
+              staticElement: self::@getter::a
+              staticType: num
+            asOperator: as @29
+            type: NamedType
+              name: SimpleIdentifier
+                token: int @32
+                staticElement: dart:core::@class::int
+                staticType: null
+              type: int
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: num
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_assignmentExpression() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = (a += 1);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          ParenthesizedExpression
+            leftParenthesis: ( @23
+            expression: AssignmentExpression
+              leftHandSide: SimpleIdentifier
+                token: a @24
+                staticElement: <null>
+                staticType: null
+              operator: += @26
+              rightHandSide: IntegerLiteral
+                literal: 1 @29
+                staticType: int
+              readElement: self::@getter::a
+              readType: int
+              writeElement: self::@getter::a
+              writeType: dynamic
+              staticElement: dart:core::@class::num::@method::+
+              staticType: int
+            rightParenthesis: ) @30
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_cascadeExpression() async {
+    var library = await buildLibrary(r'''
+const a = 0..isEven..abs();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          CascadeExpression
+            target: IntegerLiteral
+              literal: 0 @10
+              staticType: int
+            cascadeSections
+              PropertyAccess
+                operator: .. @11
+                propertyName: SimpleIdentifier
+                  token: isEven @13
+                  staticElement: dart:core::@class::int::@getter::isEven
+                  staticType: bool
+                staticType: bool
+              MethodInvocation
+                operator: .. @19
+                methodName: SimpleIdentifier
+                  token: abs @21
+                  staticElement: dart:core::@class::int::@method::abs
+                  staticType: int Function()
+                argumentList: ArgumentList
+                  leftParenthesis: ( @24
+                  rightParenthesis: ) @25
+                staticInvokeType: int Function()
+                staticType: int
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_const_classField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const int f1 = 1;
+  static const int f2 = C.f1, f3 = C.f2;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const f1 @29
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @34
+                staticType: int
+          static const f2 @56
+            type: int
+            constantInitializer
+              PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: C @61
+                  staticElement: self::@class::C
+                  staticType: null
+                period: . @62
+                identifier: SimpleIdentifier
+                  token: f1 @63
+                  staticElement: self::@class::C::@getter::f1
+                  staticType: int
+                staticElement: self::@class::C::@getter::f1
+                staticType: int
+          static const f3 @67
+            type: int
+            constantInitializer
+              PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: C @72
+                  staticElement: self::@class::C
+                  staticType: null
+                period: . @73
+                identifier: SimpleIdentifier
+                  token: f2 @74
+                  staticElement: self::@class::C::@getter::f2
+                  staticType: int
+                staticElement: self::@class::C::@getter::f2
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get f1 @-1
+            returnType: int
+          synthetic static get f2 @-1
+            returnType: int
+          synthetic static get f3 @-1
+            returnType: int
+''');
+  }
+
+  test_const_constructor_inferred_args() async {
+    var library = await buildLibrary('''
+class C<T> {
+  final T t;
+  const C(this.t);
+  const C.named(this.t);
+}
+const Object x = const C(0);
+const Object y = const C.named(0);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final t @23
+            type: T
+        constructors
+          const @34
+            parameters
+              requiredPositional final this.t @41
+                type: T
+                field: self::@class::C::@field::t
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              requiredPositional final this.t @66
+                type: T
+                field: self::@class::C::@field::t
+        accessors
+          synthetic get t @-1
+            returnType: T
+    topLevelVariables
+      static const x @85
+        type: Object
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @89
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @95
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C<int>
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {T: int}
+            argumentList: ArgumentList
+              leftParenthesis: ( @96
+              arguments
+                IntegerLiteral
+                  literal: 0 @97
+                  staticType: int
+              rightParenthesis: ) @98
+            staticType: C<int>
+      static const y @114
+        type: Object
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @118
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @124
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C<int>
+              period: . @125
+              name: SimpleIdentifier
+                token: named @126
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {T: dynamic}
+                staticType: null
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {T: int}
+            argumentList: ArgumentList
+              leftParenthesis: ( @131
+              arguments
+                IntegerLiteral
+                  literal: 0 @132
+                  staticType: int
+              rightParenthesis: ) @133
+            staticType: C<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+      synthetic static get y @-1
+        returnType: Object
+''');
+    var x = library.definingCompilationUnit.topLevelVariables[0]
+        as TopLevelVariableElementImpl;
+    var xExpr = x.constantInitializer as InstanceCreationExpression;
+    var xType = xExpr.constructorName.staticElement!.returnType;
+    _assertTypeStr(
+      xType,
+      'C<int>',
+    );
+    var y = library.definingCompilationUnit.topLevelVariables[0]
+        as TopLevelVariableElementImpl;
+    var yExpr = y.constantInitializer as InstanceCreationExpression;
+    var yType = yExpr.constructorName.staticElement!.returnType;
+    _assertTypeStr(yType, 'C<int>');
+  }
+
+  test_const_constructorReference() async {
+    var library = await buildLibrary(r'''
+class A {
+  A.named();
+}
+const v = A.named;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+    topLevelVariables
+      static const v @31
+        type: A Function()
+        constantInitializer
+          ConstructorReference
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @35
+                  staticElement: self::@class::A
+                  staticType: null
+                type: null
+              period: . @36
+              name: SimpleIdentifier
+                token: named @37
+                staticElement: self::@class::A::@constructor::named
+                staticType: null
+              staticElement: self::@class::A::@constructor::named
+            staticType: A Function()
+    accessors
+      synthetic static get v @-1
+        returnType: A Function()
+''');
+  }
+
+  test_const_finalField_hasConstConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  final int f = 42;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final f @22
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @26
+                staticType: int
+        constructors
+          const @38
+        accessors
+          synthetic get f @-1
+            returnType: int
+''');
+  }
+
+  test_const_functionExpression_typeArgumentTypes() async {
+    var library = await buildLibrary('''
+void f<T>(T a) {}
+
+const void Function(int) v = f;
+''');
+    checkElementText(library, '''
+library
+  definingUnit
+    topLevelVariables
+      static const v @44
+        type: void Function(int)
+        constantInitializer
+          FunctionReference
+            function: SimpleIdentifier
+              token: f @48
+              staticElement: self::@function::f
+              staticType: void Function<T>(T)
+            staticType: void Function(int)
+            typeArgumentTypes
+              int
+    accessors
+      synthetic static get v @-1
+        returnType: void Function(int)
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+        parameters
+          requiredPositional a @12
+            type: T
+        returnType: void
+''');
+  }
+
+  test_const_functionReference() async {
+    var library = await buildLibrary(r'''
+void f<T>(T a) {}
+const v = f<int>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @24
+        type: void Function(int)
+        constantInitializer
+          FunctionReference
+            function: SimpleIdentifier
+              token: f @28
+              staticElement: self::@function::f
+              staticType: void Function<T>(T)
+            typeArguments: TypeArgumentList
+              leftBracket: < @29
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @30
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @33
+            staticType: void Function(int)
+            typeArgumentTypes
+              int
+    accessors
+      synthetic static get v @-1
+        returnType: void Function(int)
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+        parameters
+          requiredPositional a @12
+            type: T
+        returnType: void
+''');
+  }
+
+  test_const_indexExpression() async {
+    var library = await buildLibrary(r'''
+const a = [0];
+const b = 0;
+const c = a[b];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            leftBracket: [ @10
+            elements
+              IntegerLiteral
+                literal: 0 @11
+                staticType: int
+            rightBracket: ] @12
+            staticType: List<int>
+      static const b @21
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @25
+            staticType: int
+      static const c @34
+        type: int
+        constantInitializer
+          IndexExpression
+            target: SimpleIdentifier
+              token: a @38
+              staticElement: self::@getter::a
+              staticType: List<int>
+            leftBracket: [ @39
+            index: SimpleIdentifier
+              token: b @40
+              staticElement: self::@getter::b
+              staticType: int
+            rightBracket: ] @41
+            staticElement: MethodMember
+              base: dart:core::@class::List::@method::[]
+              substitution: {E: int}
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: List<int>
+      synthetic static get b @-1
+        returnType: int
+      synthetic static get c @-1
+        returnType: int
+''');
+  }
+
+  test_const_inference_downward_list() async {
+    var library = await buildLibrary('''
+class P<T> {
+  const P();
+}
+
+class P1<T> extends P<T> {
+  const P1();
+}
+
+class P2<T> extends P<T> {
+  const P2();
+}
+
+const List<P> values = [
+  P1(),
+  P2<int>(),
+];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class P @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class P1 @35
+        typeParameters
+          covariant T @38
+            defaultType: dynamic
+        supertype: P<T>
+        constructors
+          const @64
+            superConstructor: ConstructorMember
+              base: self::@class::P::@constructor::•
+              substitution: {T: T}
+      class P2 @79
+        typeParameters
+          covariant T @82
+            defaultType: dynamic
+        supertype: P<T>
+        constructors
+          const @108
+            superConstructor: ConstructorMember
+              base: self::@class::P::@constructor::•
+              substitution: {T: T}
+    topLevelVariables
+      static const values @131
+        type: List<P<dynamic>>
+        constantInitializer
+          ListLiteral
+            leftBracket: [ @140
+            elements
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: P1 @144
+                      staticElement: self::@class::P1
+                      staticType: null
+                    type: P1<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@class::P1::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @146
+                  rightParenthesis: ) @147
+                staticType: P1<dynamic>
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: P2 @152
+                      staticElement: self::@class::P2
+                      staticType: null
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @154
+                      arguments
+                        NamedType
+                          name: SimpleIdentifier
+                            token: int @155
+                            staticElement: dart:core::@class::int
+                            staticType: null
+                          type: int
+                      rightBracket: > @158
+                    type: P2<int>
+                  staticElement: ConstructorMember
+                    base: self::@class::P2::@constructor::•
+                    substitution: {T: int}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @159
+                  rightParenthesis: ) @160
+                staticType: P2<int>
+            rightBracket: ] @163
+            staticType: List<P<dynamic>>
+    accessors
+      synthetic static get values @-1
+        returnType: List<P<dynamic>>
+''');
+  }
+
+  test_const_invalid_field_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const f = 1 + foo();
+}
+int foo() => 42;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const f @25
+            type: int
+            constantInitializer
+              BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @29
+                  staticType: int
+                operator: + @31
+                rightOperand: MethodInvocation
+                  methodName: SimpleIdentifier
+                    token: foo @33
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @36
+                    rightParenthesis: ) @37
+                  staticInvokeType: int Function()
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: num Function(num)
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get f @-1
+            returnType: int
+    functions
+      foo @46
+        returnType: int
+''');
+  }
+
+  test_const_invalid_field_final() async {
+    var library = await buildLibrary(r'''
+class C {
+  final f = 1 + foo();
+}
+int foo() => 42;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final f @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @-1
+            returnType: int
+    functions
+      foo @39
+        returnType: int
+''');
+  }
+
+  test_const_invalid_functionExpression() async {
+    var library = await buildLibrary('''
+const v = () { return 0; };
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int Function()
+        constantInitializer
+          FunctionExpression
+            parameters: FormalParameterList
+              leftParenthesis: ( @10
+              rightParenthesis: ) @0
+            body: BlockFunctionBody
+              block: Block
+                leftBracket: { @0
+                rightBracket: } @25
+            declaredElement: <null>
+            staticType: null
+    accessors
+      synthetic static get v @-1
+        returnType: int Function()
+''');
+  }
+
+  test_const_invalid_functionExpression_nested() async {
+    var library = await buildLibrary('''
+const v = () { return 0; } + 2;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: dynamic
+        constantInitializer
+          BinaryExpression
+            leftOperand: FunctionExpression
+              parameters: FormalParameterList
+                leftParenthesis: ( @10
+                rightParenthesis: ) @0
+              body: BlockFunctionBody
+                block: Block
+                  leftBracket: { @0
+                  rightBracket: } @25
+              declaredElement: <null>
+              staticType: null
+            operator: + @27
+            rightOperand: IntegerLiteral
+              literal: 2 @29
+              staticType: int
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
+  test_const_invalid_intLiteral() async {
+    var library = await buildLibrary(r'''
+const int x = 0x;
+''', allowErrors: true);
+    checkElementText(library, r'''
+const int x = 0;
+''');
+  }
+
+  test_const_invalid_topLevel() async {
+    var library = await buildLibrary(r'''
+const v = 1 + foo();
+int foo() => 42;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @10
+              staticType: int
+            operator: + @12
+            rightOperand: MethodInvocation
+              methodName: SimpleIdentifier
+                token: foo @14
+                staticElement: self::@function::foo
+                staticType: int Function()
+              argumentList: ArgumentList
+                leftParenthesis: ( @17
+                rightParenthesis: ) @18
+              staticInvokeType: int Function()
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+    functions
+      foo @25
+        returnType: int
+''');
+  }
+
+  test_const_invalid_typeMismatch() async {
+    var library = await buildLibrary(r'''
+const int a = 0;
+const bool b = a + 5;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @10
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+      static const b @28
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              token: a @32
+              staticElement: self::@getter::a
+              staticType: int
+            operator: + @34
+            rightOperand: IntegerLiteral
+              literal: 5 @36
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: bool
+''');
+  }
+
+  test_const_invokeConstructor_generic_named() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+const V = const C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const named @26
+            periodOffset: 25
+            nameEnd: 31
+            parameters
+              requiredPositional k @34
+                type: K
+              requiredPositional v @39
+                type: V
+    topLevelVariables
+      static const V @51
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @55
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @61
+                  staticElement: self::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @62
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @63
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @68
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @74
+                type: C<int, String>
+              period: . @75
+              name: SimpleIdentifier
+                token: named @76
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @81
+              arguments
+                IntegerLiteral
+                  literal: 1 @82
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @85
+              rightParenthesis: ) @90
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_named_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @27
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @33
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @34
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @35
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @40
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @46
+                type: C<int, String>
+              period: . @47
+              name: SimpleIdentifier
+                token: named @48
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+              staticElement: ConstructorMember
+                base: package:test/a.dart::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @53
+              arguments
+                IntegerLiteral
+                  literal: 1 @54
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @57
+              rightParenthesis: ) @62
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_named_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @41
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @42
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @47
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @53
+                type: C<int, String>
+              period: . @54
+              name: SimpleIdentifier
+                token: named @55
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+              staticElement: ConstructorMember
+                base: package:test/a.dart::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @60
+              arguments
+                IntegerLiteral
+                  literal: 1 @61
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @64
+              rightParenthesis: ) @69
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_noTypeArguments() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C();
+}
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const @24
+    topLevelVariables
+      static const V @37
+        type: C<dynamic, dynamic>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @41
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @47
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C<dynamic, dynamic>
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {K: dynamic, V: dynamic}
+            argumentList: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            staticType: C<dynamic, dynamic>
+    accessors
+      synthetic static get V @-1
+        returnType: C<dynamic, dynamic>
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C();
+}
+const V = const C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const @24
+    topLevelVariables
+      static const V @37
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @41
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @47
+                  staticElement: self::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @48
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @49
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @54
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @60
+                type: C<int, String>
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @61
+              rightParenthesis: ) @62
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @27
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @33
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @34
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @35
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @40
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @46
+                type: C<int, String>
+              staticElement: ConstructorMember
+                base: package:test/a.dart::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @41
+                  arguments
+                    NamedType
+                      name: SimpleIdentifier
+                        token: int @42
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    NamedType
+                      name: SimpleIdentifier
+                        token: String @47
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                      type: String
+                  rightBracket: > @53
+                type: C<int, String>
+              staticElement: ConstructorMember
+                base: package:test/a.dart::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+            argumentList: ArgumentList
+              leftParenthesis: ( @54
+              rightParenthesis: ) @55
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @-1
+        returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C.named(bool a, int b, int c, {String d, double e});
+}
+const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            parameters
+              requiredPositional a @31
+                type: bool
+              requiredPositional b @38
+                type: int
+              requiredPositional c @45
+                type: int
+              optionalNamed d @56
+                type: String
+              optionalNamed e @66
+                type: double
+    topLevelVariables
+      static const V @79
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @83
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @89
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C
+              period: . @90
+              name: SimpleIdentifier
+                token: named @91
+                staticElement: self::@class::C::@constructor::named
+                staticType: null
+              staticElement: self::@class::C::@constructor::named
+            argumentList: ArgumentList
+              leftParenthesis: ( @96
+              arguments
+                BooleanLiteral
+                  literal: true @97
+                  staticType: bool
+                IntegerLiteral
+                  literal: 1 @103
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @106
+                  staticType: int
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      token: d @109
+                      staticElement: self::@class::C::@constructor::named::@parameter::d
+                      staticType: null
+                    colon: : @110
+                  expression: SimpleStringLiteral
+                    literal: 'ccc' @112
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      token: e @119
+                      staticElement: self::@class::C::@constructor::named::@parameter::e
+                      staticType: null
+                    colon: : @120
+                  expression: DoubleLiteral
+                    literal: 3.4 @122
+                    staticType: double
+              rightParenthesis: ) @125
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C.named();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C.named();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @27
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @33
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                type: C
+              period: . @34
+              name: SimpleIdentifier
+                token: named @35
+                staticElement: package:test/a.dart::@class::C::@constructor::named
+                staticType: null
+              staticElement: package:test/a.dart::@class::C::@constructor::named
+            argumentList: ArgumentList
+              leftParenthesis: ( @40
+              rightParenthesis: ) @41
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C.named();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                type: C
+              period: . @41
+              name: SimpleIdentifier
+                token: named @42
+                staticElement: package:test/a.dart::@class::C::@constructor::named
+                staticType: null
+              staticElement: package:test/a.dart::@class::C::@constructor::named
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved() async {
+    var library = await buildLibrary(r'''
+class C {}
+const V = const C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @17
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @21
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @27
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C
+              period: . @28
+              name: SimpleIdentifier
+                token: named @29
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @34
+              rightParenthesis: ) @35
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved2() async {
+    var library = await buildLibrary(r'''
+const V = const C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @10
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: C @16
+                    staticElement: <null>
+                    staticType: null
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: named @18
+                    staticElement: <null>
+                    staticType: null
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @23
+              rightParenthesis: ) @24
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved3() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                type: C
+              period: . @41
+              name: SimpleIdentifier
+                token: named @42
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved4() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: <null>
+                    staticType: null
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              period: . @41
+              name: SimpleIdentifier
+                token: named @42
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved5() async {
+    var library = await buildLibrary(r'''
+const V = const p.C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @10
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @16
+                    staticElement: <null>
+                    staticType: null
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: C @18
+                    staticElement: <null>
+                    staticType: null
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              period: . @19
+              name: SimpleIdentifier
+                token: named @20
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @25
+              rightParenthesis: ) @26
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved6() async {
+    var library = await buildLibrary(r'''
+class C<T> {}
+const V = const C.named();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @20
+        type: C<dynamic>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @24
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @30
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C<dynamic>
+              period: . @31
+              name: SimpleIdentifier
+                token: named @32
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            staticType: C<dynamic>
+    accessors
+      synthetic static get V @-1
+        returnType: C<dynamic>
+''');
+  }
+
+  test_const_invokeConstructor_unnamed() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C();
+}
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+    topLevelVariables
+      static const V @31
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @35
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @41
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C
+              staticElement: self::@class::C::@constructor::•
+            argumentList: ArgumentList
+              leftParenthesis: ( @42
+              rightParenthesis: ) @43
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @27
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @33
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                type: C
+              staticElement: package:test/a.dart::@class::C::@constructor::•
+            argumentList: ArgumentList
+              leftParenthesis: ( @34
+              rightParenthesis: ) @35
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                type: C
+              staticElement: package:test/a.dart::@class::C::@constructor::•
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
+            staticType: C
+    accessors
+      synthetic static get V @-1
+        returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved() async {
+    var library = await buildLibrary(r'''
+const V = const C();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @10
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @16
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @17
+              rightParenthesis: ) @18
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved2() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @32
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @38
+                    staticElement: self::@prefix::p
+                    staticType: null
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: <null>
+                    staticType: null
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved3() async {
+    var library = await buildLibrary(r'''
+const V = const p.C();
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @10
+            constructorName: ConstructorName
+              type: NamedType
+                name: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @16
+                    staticElement: <null>
+                    staticType: null
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: C @18
+                    staticElement: <null>
+                    staticType: null
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @19
+              rightParenthesis: ) @20
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_isExpression() async {
+    var library = await buildLibrary('''
+const a = 0;
+const b = a is int;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: bool
+        constantInitializer
+          IsExpression
+            expression: SimpleIdentifier
+              token: a @23
+              staticElement: self::@getter::a
+              staticType: int
+            isOperator: is @25
+            type: NamedType
+              name: SimpleIdentifier
+                token: int @28
+                staticElement: dart:core::@class::int
+                staticType: null
+              type: int
+            staticType: bool
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: bool
+''');
+  }
+
+  test_const_length_ofClassConstField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const String F = '';
+}
+const int v = C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const F @32
+            type: String
+            constantInitializer
+              SimpleStringLiteral
+                literal: '' @36
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get F @-1
+            returnType: String
+    topLevelVariables
+      static const v @52
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @56
+                staticElement: self::@class::C
+                staticType: null
+              period: . @57
+              identifier: SimpleIdentifier
+                token: F @58
+                staticElement: self::@class::C::@getter::F
+                staticType: String
+              staticElement: self::@class::C::@getter::F
+              staticType: String
+            operator: . @59
+            propertyName: SimpleIdentifier
+              token: length @60
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofClassConstField_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const String F = '';
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const int v = C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const v @27
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @31
+                staticElement: package:test/a.dart::@class::C
+                staticType: null
+              period: . @32
+              identifier: SimpleIdentifier
+                token: F @33
+                staticElement: package:test/a.dart::@class::C::@getter::F
+                staticType: String
+              staticElement: package:test/a.dart::@class::C::@getter::F
+              staticType: String
+            operator: . @34
+            propertyName: SimpleIdentifier
+              token: length @35
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofClassConstField_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const String F = '';
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const int v = p.C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @32
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @36
+                  staticElement: self::@prefix::p
+                  staticType: null
+                period: . @37
+                identifier: SimpleIdentifier
+                  token: C @38
+                  staticElement: package:test/a.dart::@class::C
+                  staticType: null
+                staticElement: package:test/a.dart::@class::C
+                staticType: null
+              operator: . @39
+              propertyName: SimpleIdentifier
+                token: F @40
+                staticElement: package:test/a.dart::@class::C::@getter::F
+                staticType: String
+              staticType: String
+            operator: . @41
+            propertyName: SimpleIdentifier
+              token: length @42
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofStringLiteral() async {
+    var library = await buildLibrary(r'''
+const v = 'abc'.length;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: SimpleStringLiteral
+              literal: 'abc' @10
+            operator: . @15
+            propertyName: SimpleIdentifier
+              token: length @16
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable() async {
+    var library = await buildLibrary(r'''
+const String S = 'abc';
+const v = S.length;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const S @13
+        type: String
+        constantInitializer
+          SimpleStringLiteral
+            literal: 'abc' @17
+      static const v @30
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: S @34
+              staticElement: self::@getter::S
+              staticType: String
+            period: . @35
+            identifier: SimpleIdentifier
+              token: length @36
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticElement: dart:core::@class::String::@getter::length
+            staticType: int
+    accessors
+      synthetic static get S @-1
+        returnType: String
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const String S = 'abc';
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const v = S.length;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const v @23
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: S @27
+              staticElement: package:test/a.dart::@getter::S
+              staticType: String
+            period: . @28
+            identifier: SimpleIdentifier
+              token: length @29
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticElement: dart:core::@class::String::@getter::length
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const String S = 'abc';
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const v = p.S.length;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @28
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @32
+                staticElement: self::@prefix::p
+                staticType: null
+              period: . @33
+              identifier: SimpleIdentifier
+                token: S @34
+                staticElement: package:test/a.dart::@getter::S
+                staticType: String
+              staticElement: package:test/a.dart::@getter::S
+              staticType: String
+            operator: . @35
+            propertyName: SimpleIdentifier
+              token: length @36
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_const_length_staticMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  static int length() => 42;
+}
+const v = C.length;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static length @23
+            returnType: int
+    topLevelVariables
+      static const v @47
+        type: int Function()
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @51
+              staticElement: self::@class::C
+              staticType: null
+            period: . @52
+            identifier: SimpleIdentifier
+              token: length @53
+              staticElement: self::@class::C::@method::length
+              staticType: int Function()
+            staticElement: self::@class::C::@method::length
+            staticType: int Function()
+    accessors
+      synthetic static get v @-1
+        returnType: int Function()
+''');
+  }
+
+  test_const_list_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[if (true) 1];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: [ @28
+            elements
+              IfElement
+                ifKeyword: if @29
+                leftParenthesis: ( @32
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                rightParenthesis: ) @37
+                thenElement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+            rightBracket: ] @40
+            staticType: List<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_list_if_else() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[if (true) 1 else 2];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: [ @28
+            elements
+              IfElement
+                ifKeyword: if @29
+                leftParenthesis: ( @32
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                rightParenthesis: ) @37
+                thenElement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+                elseKeyword: else @41
+                elseElement: IntegerLiteral
+                  literal: 2 @46
+                  staticType: int
+            rightBracket: ] @47
+            staticType: List<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_list_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const [1];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @17
+            leftBracket: [ @23
+            elements
+              IntegerLiteral
+                literal: 1 @24
+                staticType: int
+            rightBracket: ] @25
+            staticType: List<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_list_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[...<int>[1]];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: [ @28
+            elements
+              SpreadElement
+                spreadOperator: ... @29
+                expression: ListLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @32
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @33
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @36
+                  leftBracket: [ @37
+                  elements
+                    IntegerLiteral
+                      literal: 1 @38
+                      staticType: int
+                  rightBracket: ] @39
+                  staticType: List<int>
+            rightBracket: ] @40
+            staticType: List<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_list_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[...?<int>[1]];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: [ @28
+            elements
+              SpreadElement
+                spreadOperator: ...? @29
+                expression: ListLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @33
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @34
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @37
+                  leftBracket: [ @38
+                  elements
+                    IntegerLiteral
+                      literal: 1 @39
+                      staticType: int
+                  rightBracket: ] @40
+                  staticType: List<int>
+            rightBracket: ] @41
+            staticType: List<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_map_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{if (true) 1: 2};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @29
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @32
+            leftBracket: { @33
+            elements
+              IfElement
+                ifKeyword: if @34
+                leftParenthesis: ( @37
+                condition: BooleanLiteral
+                  literal: true @38
+                  staticType: bool
+                rightParenthesis: ) @42
+                thenElement: SetOrMapLiteral
+                  key: IntegerLiteral
+                    literal: 1 @44
+                    staticType: int
+                  separator: : @45
+                  value: IntegerLiteral
+                    literal: 2 @47
+                    staticType: int
+            rightBracket: } @48
+            isMap: true
+            staticType: Map<int, int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_map_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const {1: 1.0};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            leftBracket: { @23
+            elements
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 1 @24
+                  staticType: int
+                separator: : @25
+                value: DoubleLiteral
+                  literal: 1.0 @27
+                  staticType: double
+            rightBracket: } @30
+            isMap: true
+            staticType: Map<int, double>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_map_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{...<int, int>{1: 2}};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @29
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @32
+            leftBracket: { @33
+            elements
+              SpreadElement
+                spreadOperator: ... @34
+                expression: SetOrMapLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @37
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @38
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @43
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @46
+                  leftBracket: { @47
+                  elements
+                    SetOrMapLiteral
+                      key: IntegerLiteral
+                        literal: 1 @48
+                        staticType: int
+                      separator: : @49
+                      value: IntegerLiteral
+                        literal: 2 @51
+                        staticType: int
+                  rightBracket: } @52
+                  isMap: true
+                  staticType: Map<int, int>
+            rightBracket: } @53
+            isMap: true
+            staticType: Map<int, int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_map_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{...?<int, int>{1: 2}};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @29
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @32
+            leftBracket: { @33
+            elements
+              SpreadElement
+                spreadOperator: ...? @34
+                expression: SetOrMapLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @38
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @39
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @44
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @47
+                  leftBracket: { @48
+                  elements
+                    SetOrMapLiteral
+                      key: IntegerLiteral
+                        literal: 1 @49
+                        staticType: int
+                      separator: : @50
+                      value: IntegerLiteral
+                        literal: 2 @52
+                        staticType: int
+                  rightBracket: } @53
+                  isMap: true
+                  staticType: Map<int, int>
+            rightBracket: } @54
+            isMap: true
+            staticType: Map<int, int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_methodInvocation() async {
+    var library = await buildLibrary(r'''
+T f<T>(T a) => a;
+const b = f<int>(0);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const b @24
+        type: int
+        constantInitializer
+          MethodInvocation
+            methodName: SimpleIdentifier
+              token: f @28
+              staticElement: self::@function::f
+              staticType: T Function<T>(T)
+            typeArguments: TypeArgumentList
+              leftBracket: < @29
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @30
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @33
+            argumentList: ArgumentList
+              leftParenthesis: ( @34
+              arguments
+                IntegerLiteral
+                  literal: 0 @35
+                  staticType: int
+              rightParenthesis: ) @36
+            staticInvokeType: int Function(int)
+            staticType: int
+            typeArgumentTypes
+              int
+    accessors
+      synthetic static get b @-1
+        returnType: int
+    functions
+      f @2
+        typeParameters
+          covariant T @4
+        parameters
+          requiredPositional a @9
+            type: T
+        returnType: T
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C({this.x: foo});
+}
+int foo() => 42;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalNamed final this.x @37
+                type: dynamic
+                constantInitializer
+                  SimpleIdentifier
+                    token: foo @40
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+    functions
+      foo @53
+        returnType: int
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C({this.x: 1 + 2});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalNamed final this.x @37
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @40
+                      staticType: int
+                    operator: + @42
+                    rightOperand: IntegerLiteral
+                      literal: 2 @44
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_positional() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C([this.x = 1 + 2]);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalPositional final this.x @37
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @41
+                      staticType: int
+                    operator: + @43
+                    rightOperand: IntegerLiteral
+                      literal: 2 @45
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_const_parameterDefaultValue_normal() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C.positional([p = 1 + 2]);
+  const C.named({p: 1 + 2});
+  void methodPositional([p = 1 + 2]) {}
+  void methodPositionalWithoutDefault([p]) {}
+  void methodNamed({p: 1 + 2}) {}
+  void methodNamedWithoutDefault({p}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const positional @20
+            periodOffset: 19
+            nameEnd: 30
+            parameters
+              optionalPositional p @32
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @36
+                      staticType: int
+                    operator: + @38
+                    rightOperand: IntegerLiteral
+                      literal: 2 @40
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              optionalNamed p @62
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @65
+                      staticType: int
+                    operator: + @67
+                    rightOperand: IntegerLiteral
+                      literal: 2 @69
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+        methods
+          methodPositional @81
+            parameters
+              optionalPositional p @99
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @103
+                      staticType: int
+                    operator: + @105
+                    rightOperand: IntegerLiteral
+                      literal: 2 @107
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+            returnType: void
+          methodPositionalWithoutDefault @121
+            parameters
+              optionalPositional p @153
+                type: dynamic
+            returnType: void
+          methodNamed @167
+            parameters
+              optionalNamed p @180
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @183
+                      staticType: int
+                    operator: + @185
+                    rightOperand: IntegerLiteral
+                      literal: 2 @187
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+            returnType: void
+          methodNamedWithoutDefault @201
+            parameters
+              optionalNamed p @228
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_const_postfixExpression_increment() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = a++;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PostfixExpression
+            operand: SimpleIdentifier
+              token: a @23
+              staticElement: <null>
+              staticType: null
+            operator: ++ @24
+            readElement: self::@getter::a
+            readType: int
+            writeElement: self::@getter::a
+            writeType: dynamic
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_postfixExpression_nullCheck() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a!;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @11
+        type: int?
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @15
+            staticType: int
+      static const b @24
+        type: int
+        constantInitializer
+          PostfixExpression
+            operand: SimpleIdentifier
+              token: a @28
+              staticElement: self::@getter::a
+              staticType: int?
+            operator: ! @29
+            staticElement: <null>
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int?
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_prefixExpression_class_unaryMinus() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = -a;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: - @23
+            operand: SimpleIdentifier
+              token: a @24
+              staticElement: self::@getter::a
+              staticType: int
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_prefixExpression_extension_unaryMinus() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+extension E on Object {
+  int operator -() => 0;
+}
+const a = const Object();
+''');
+    var library = await buildLibrary('''
+import 'a.dart';
+const b = -a;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const b @23
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: - @27
+            operand: SimpleIdentifier
+              token: a @28
+              staticElement: package:test/a.dart::@getter::a
+              staticType: Object
+            staticElement: package:test/a.dart::@extension::E::@method::unary-
+            staticType: int
+    accessors
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_prefixExpression_increment() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = ++a;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: ++ @23
+            operand: SimpleIdentifier
+              token: a @25
+              staticElement: <null>
+              staticType: null
+            readElement: self::@getter::a
+            readType: int
+            writeElement: self::@getter::a
+            writeType: dynamic
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get b @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_staticField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const int F = 42;
+}
+const V = C.F;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const F @29
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @33
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get F @-1
+            returnType: int
+    topLevelVariables
+      static const V @45
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @49
+              staticElement: self::@class::C
+              staticType: null
+            period: . @50
+            identifier: SimpleIdentifier
+              token: F @51
+              staticElement: self::@class::C::@getter::F
+              staticType: int
+            staticElement: self::@class::C::@getter::F
+            staticType: int
+    accessors
+      synthetic static get V @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_staticField_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const int F = 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = C.F;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @27
+              staticElement: package:test/a.dart::@class::C
+              staticType: null
+            period: . @28
+            identifier: SimpleIdentifier
+              token: F @29
+              staticElement: package:test/a.dart::@class::C::@getter::F
+              staticType: int
+            staticElement: package:test/a.dart::@class::C::@getter::F
+            staticType: int
+    accessors
+      synthetic static get V @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_staticField_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const int F = 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.C.F;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @32
+                staticElement: self::@prefix::p
+                staticType: null
+              period: . @33
+              identifier: SimpleIdentifier
+                token: C @34
+                staticElement: package:test/a.dart::@class::C
+                staticType: null
+              staticElement: package:test/a.dart::@class::C
+              staticType: null
+            operator: . @35
+            propertyName: SimpleIdentifier
+              token: F @36
+              staticElement: package:test/a.dart::@class::C::@getter::F
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get V @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_staticMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+const V = C.m;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static m @23
+            parameters
+              requiredPositional a @29
+                type: int
+              requiredPositional b @39
+                type: String
+            returnType: int
+    topLevelVariables
+      static const V @57
+        type: int Function(int, String)
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @61
+              staticElement: self::@class::C
+              staticType: null
+            period: . @62
+            identifier: SimpleIdentifier
+              token: m @63
+              staticElement: self::@class::C::@method::m
+              staticType: int Function(int, String)
+            staticElement: self::@class::C::@method::m
+            staticType: int Function(int, String)
+    accessors
+      synthetic static get V @-1
+        returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = C.m;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: int Function(int, String)
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @27
+              staticElement: package:test/a.dart::@class::C
+              staticType: null
+            period: . @28
+            identifier: SimpleIdentifier
+              token: m @29
+              staticElement: package:test/a.dart::@class::C::@method::m
+              staticType: int Function(int, String)
+            staticElement: package:test/a.dart::@class::C::@method::m
+            staticType: int Function(int, String)
+    accessors
+      synthetic static get V @-1
+        returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.C.m;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: int Function(int, String)
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @32
+                staticElement: self::@prefix::p
+                staticType: null
+              period: . @33
+              identifier: SimpleIdentifier
+                token: C @34
+                staticElement: package:test/a.dart::@class::C
+                staticType: null
+              staticElement: package:test/a.dart::@class::C
+              staticType: null
+            operator: . @35
+            propertyName: SimpleIdentifier
+              token: m @36
+              staticElement: package:test/a.dart::@class::C::@method::m
+              staticType: int Function(int, String)
+            staticType: int Function(int, String)
+    accessors
+      synthetic static get V @-1
+        returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_ofExtension() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static void f() {}
+}
+const x = E.f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @44
+            returnType: void
+    topLevelVariables
+      static const x @59
+        type: void Function()
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: E @63
+              staticElement: self::@extension::E
+              staticType: null
+            period: . @64
+            identifier: SimpleIdentifier
+              token: f @65
+              staticElement: self::@extension::E::@method::f
+              staticType: void Function()
+            staticElement: self::@extension::E::@method::f
+            staticType: void Function()
+    accessors
+      synthetic static get x @-1
+        returnType: void Function()
+''');
+  }
+
+  test_const_reference_topLevelFunction() async {
+    var library = await buildLibrary(r'''
+foo() {}
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @15
+        type: dynamic Function()
+        constantInitializer
+          SimpleIdentifier
+            token: foo @19
+            staticElement: self::@function::foo
+            staticType: dynamic Function()
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic Function()
+    functions
+      foo @0
+        returnType: dynamic
+''');
+  }
+
+  test_const_reference_topLevelFunction_generic() async {
+    var library = await buildLibrary(r'''
+R foo<P, R>(P p) {}
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @26
+        type: R Function<P, R>(P)
+        constantInitializer
+          SimpleIdentifier
+            token: foo @30
+            staticElement: self::@function::foo
+            staticType: R Function<P, R>(P)
+    accessors
+      synthetic static get V @-1
+        returnType: R Function<P, R>(P)
+    functions
+      foo @2
+        typeParameters
+          covariant P @6
+          covariant R @9
+        parameters
+          requiredPositional p @14
+            type: P
+        returnType: R
+''');
+  }
+
+  test_const_reference_topLevelFunction_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+foo() {}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: dynamic Function()
+        constantInitializer
+          SimpleIdentifier
+            token: foo @27
+            staticElement: package:test/a.dart::@function::foo
+            staticType: dynamic Function()
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic Function()
+''');
+  }
+
+  test_const_reference_topLevelFunction_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+foo() {}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.foo;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic Function()
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: p @32
+              staticElement: self::@prefix::p
+              staticType: null
+            period: . @33
+            identifier: SimpleIdentifier
+              token: foo @34
+              staticElement: package:test/a.dart::@function::foo
+              staticType: dynamic Function()
+            staticElement: package:test/a.dart::@function::foo
+            staticType: dynamic Function()
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic Function()
+''');
+  }
+
+  test_const_reference_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+const A = 1;
+const B = A + 2;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const A @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 1 @10
+            staticType: int
+      static const B @19
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              token: A @23
+              staticElement: self::@getter::A
+              staticType: int
+            operator: + @25
+            rightOperand: IntegerLiteral
+              literal: 2 @27
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+    accessors
+      synthetic static get A @-1
+        returnType: int
+      synthetic static get B @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_topLevelVariable_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const A = 1;
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const B = A + 2;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const B @23
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              token: A @27
+              staticElement: package:test/a.dart::@getter::A
+              staticType: int
+            operator: + @29
+            rightOperand: IntegerLiteral
+              literal: 2 @31
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+    accessors
+      synthetic static get B @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_topLevelVariable_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const A = 1;
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const B = p.A + 2;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const B @28
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @32
+                staticElement: self::@prefix::p
+                staticType: null
+              period: . @33
+              identifier: SimpleIdentifier
+                token: A @34
+                staticElement: package:test/a.dart::@getter::A
+                staticType: int
+              staticElement: package:test/a.dart::@getter::A
+              staticType: int
+            operator: + @36
+            rightOperand: IntegerLiteral
+              literal: 2 @38
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+    accessors
+      synthetic static get B @-1
+        returnType: int
+''');
+  }
+
+  test_const_reference_type() async {
+    var library = await buildLibrary(r'''
+class C {}
+class D<T> {}
+enum E {a, b, c}
+typedef F(int a, String b);
+const vDynamic = dynamic;
+const vNull = Null;
+const vObject = Object;
+const vClass = C;
+const vGenericClass = D;
+const vEnum = E;
+const vFunctionTypeAlias = F;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+      class D @17
+        typeParameters
+          covariant T @19
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    enums
+      enum E @30
+        supertype: Enum
+        fields
+          static const enumConstant a @33
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @36
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant c @39
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    typeAliases
+      functionTypeAliasBased F @50
+        aliasedType: dynamic Function(int, String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @56
+              type: int
+            requiredPositional b @66
+              type: String
+          returnType: dynamic
+    topLevelVariables
+      static const vDynamic @76
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: dynamic @87
+            staticElement: dynamic@-1
+            staticType: Type
+      static const vNull @102
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: Null @110
+            staticElement: dart:core::@class::Null
+            staticType: Type
+      static const vObject @122
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: Object @132
+            staticElement: dart:core::@class::Object
+            staticType: Type
+      static const vClass @146
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: C @155
+            staticElement: self::@class::C
+            staticType: Type
+      static const vGenericClass @164
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: D @180
+            staticElement: self::@class::D
+            staticType: Type
+      static const vEnum @189
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: E @197
+            staticElement: self::@enum::E
+            staticType: Type
+      static const vFunctionTypeAlias @206
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: F @227
+            staticElement: self::@typeAlias::F
+            staticType: Type
+    accessors
+      synthetic static get vDynamic @-1
+        returnType: Type
+      synthetic static get vNull @-1
+        returnType: Type
+      synthetic static get vObject @-1
+        returnType: Type
+      synthetic static get vClass @-1
+        returnType: Type
+      synthetic static get vGenericClass @-1
+        returnType: Type
+      synthetic static get vEnum @-1
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @-1
+        returnType: Type
+''');
+  }
+
+  test_const_reference_type_functionType() async {
+    var library = await buildLibrary(r'''
+typedef F();
+class C {
+  final f = <F>[];
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @19
+        fields
+          final f @31
+            type: List<dynamic Function()>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @-1
+            returnType: List<dynamic Function()>
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''');
+  }
+
+  test_const_reference_type_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {}
+enum E {a, b, c}
+typedef F(int a, String b);
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const vClass = C;
+const vEnum = E;
+const vFunctionTypeAlias = F;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const vClass @23
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: C @32
+            staticElement: package:test/a.dart::@class::C
+            staticType: Type
+      static const vEnum @41
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: E @49
+            staticElement: package:test/a.dart::@enum::E
+            staticType: Type
+      static const vFunctionTypeAlias @58
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: F @79
+            staticElement: package:test/a.dart::@typeAlias::F
+            staticType: Type
+    accessors
+      synthetic static get vClass @-1
+        returnType: Type
+      synthetic static get vEnum @-1
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @-1
+        returnType: Type
+''');
+  }
+
+  test_const_reference_type_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {}
+enum E {a, b, c}
+typedef F(int a, String b);
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const vClass = p.C;
+const vEnum = p.E;
+const vFunctionTypeAlias = p.F;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const vClass @28
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: p @37
+              staticElement: self::@prefix::p
+              staticType: null
+            period: . @38
+            identifier: SimpleIdentifier
+              token: C @39
+              staticElement: package:test/a.dart::@class::C
+              staticType: Type
+            staticElement: package:test/a.dart::@class::C
+            staticType: Type
+      static const vEnum @48
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: p @56
+              staticElement: self::@prefix::p
+              staticType: null
+            period: . @57
+            identifier: SimpleIdentifier
+              token: E @58
+              staticElement: package:test/a.dart::@enum::E
+              staticType: Type
+            staticElement: package:test/a.dart::@enum::E
+            staticType: Type
+      static const vFunctionTypeAlias @67
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: p @88
+              staticElement: self::@prefix::p
+              staticType: null
+            period: . @89
+            identifier: SimpleIdentifier
+              token: F @90
+              staticElement: package:test/a.dart::@typeAlias::F
+              staticType: Type
+            staticElement: package:test/a.dart::@typeAlias::F
+            staticType: Type
+    accessors
+      synthetic static get vClass @-1
+        returnType: Type
+      synthetic static get vEnum @-1
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @-1
+        returnType: Type
+''');
+  }
+
+  test_const_reference_type_typeParameter() async {
+    var library = await buildLibrary(r'''
+class C<T> {
+  final f = <T>[];
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final f @21
+            type: List<T>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @-1
+            returnType: List<T>
+''');
+  }
+
+  test_const_reference_unresolved_prefix0() async {
+    var library = await buildLibrary(r'''
+const V = foo;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          SimpleIdentifier
+            token: foo @10
+            staticElement: <null>
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_reference_unresolved_prefix1() async {
+    var library = await buildLibrary(r'''
+class C {}
+const V = C.foo;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @17
+        type: dynamic
+        constantInitializer
+          PrefixedIdentifier
+            prefix: SimpleIdentifier
+              token: C @21
+              staticElement: self::@class::C
+              staticType: null
+            period: . @22
+            identifier: SimpleIdentifier
+              token: foo @23
+              staticElement: <null>
+              staticType: dynamic
+            staticElement: <null>
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_reference_unresolved_prefix2() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class C {}
+''');
+    var library = await buildLibrary(r'''
+import 'foo.dart' as p;
+const V = p.C.foo;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as p @21
+  definingUnit
+    topLevelVariables
+      static const V @30
+        type: dynamic
+        constantInitializer
+          PropertyAccess
+            target: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @34
+                staticElement: self::@prefix::p
+                staticType: null
+              period: . @35
+              identifier: SimpleIdentifier
+                token: C @36
+                staticElement: package:test/foo.dart::@class::C
+                staticType: null
+              staticElement: package:test/foo.dart::@class::C
+              staticType: null
+            operator: . @37
+            propertyName: SimpleIdentifier
+              token: foo @38
+              staticElement: <null>
+              staticType: dynamic
+            staticType: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_set_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{if (true) 1};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: { @28
+            elements
+              IfElement
+                ifKeyword: if @29
+                leftParenthesis: ( @32
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                rightParenthesis: ) @37
+                thenElement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+            rightBracket: } @40
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_set_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const {1};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            leftBracket: { @23
+            elements
+              IntegerLiteral
+                literal: 1 @24
+                staticType: int
+            rightBracket: } @25
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_set_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{...<int>{1}};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: { @28
+            elements
+              SpreadElement
+                spreadOperator: ... @29
+                expression: SetOrMapLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @32
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @33
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @36
+                  leftBracket: { @37
+                  elements
+                    IntegerLiteral
+                      literal: 1 @38
+                      staticType: int
+                  rightBracket: } @39
+                  isMap: false
+                  staticType: Set<int>
+            rightBracket: } @40
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_set_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{...?<int>{1}};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @17
+            typeArguments: TypeArgumentList
+              leftBracket: < @23
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @24
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @27
+            leftBracket: { @28
+            elements
+              SpreadElement
+                spreadOperator: ...? @29
+                expression: SetOrMapLiteral
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @33
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @34
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                    rightBracket: > @37
+                  leftBracket: { @38
+                  elements
+                    IntegerLiteral
+                      literal: 1 @39
+                      staticType: int
+                  rightBracket: } @40
+                  isMap: false
+                  staticType: Set<int>
+            rightBracket: } @41
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get x @-1
+        returnType: Object
+''');
+  }
+
+  test_const_topLevel_binary() async {
+    var library = await buildLibrary(r'''
+const vEqual = 1 == 2;
+const vAnd = true && false;
+const vOr = false || true;
+const vBitXor = 1 ^ 2;
+const vBitAnd = 1 & 2;
+const vBitOr = 1 | 2;
+const vBitShiftLeft = 1 << 2;
+const vBitShiftRight = 1 >> 2;
+const vAdd = 1 + 2;
+const vSubtract = 1 - 2;
+const vMiltiply = 1 * 2;
+const vDivide = 1 / 2;
+const vFloorDivide = 1 ~/ 2;
+const vModulo = 1 % 2;
+const vGreater = 1 > 2;
+const vGreaterEqual = 1 >= 2;
+const vLess = 1 < 2;
+const vLessEqual = 1 <= 2;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vEqual @6
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @15
+              staticType: int
+            operator: == @17
+            rightOperand: IntegerLiteral
+              literal: 2 @20
+              staticType: int
+            staticElement: dart:core::@class::num::@method::==
+            staticInvokeType: bool Function(Object)
+            staticType: bool
+      static const vAnd @29
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: BooleanLiteral
+              literal: true @36
+              staticType: bool
+            operator: && @41
+            rightOperand: BooleanLiteral
+              literal: false @44
+              staticType: bool
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: bool
+      static const vOr @57
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: BooleanLiteral
+              literal: false @63
+              staticType: bool
+            operator: || @69
+            rightOperand: BooleanLiteral
+              literal: true @72
+              staticType: bool
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: bool
+      static const vBitXor @84
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @94
+              staticType: int
+            operator: ^ @96
+            rightOperand: IntegerLiteral
+              literal: 2 @98
+              staticType: int
+            staticElement: dart:core::@class::int::@method::^
+            staticInvokeType: int Function(int)
+            staticType: int
+      static const vBitAnd @107
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @117
+              staticType: int
+            operator: & @119
+            rightOperand: IntegerLiteral
+              literal: 2 @121
+              staticType: int
+            staticElement: dart:core::@class::int::@method::&
+            staticInvokeType: int Function(int)
+            staticType: int
+      static const vBitOr @130
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @139
+              staticType: int
+            operator: | @141
+            rightOperand: IntegerLiteral
+              literal: 2 @143
+              staticType: int
+            staticElement: dart:core::@class::int::@method::|
+            staticInvokeType: int Function(int)
+            staticType: int
+      static const vBitShiftLeft @152
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @168
+              staticType: int
+            operator: << @170
+            rightOperand: IntegerLiteral
+              literal: 2 @173
+              staticType: int
+            staticElement: dart:core::@class::int::@method::<<
+            staticInvokeType: int Function(int)
+            staticType: int
+      static const vBitShiftRight @182
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @199
+              staticType: int
+            operator: >> @201
+            rightOperand: IntegerLiteral
+              literal: 2 @204
+              staticType: int
+            staticElement: dart:core::@class::int::@method::>>
+            staticInvokeType: int Function(int)
+            staticType: int
+      static const vAdd @213
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @220
+              staticType: int
+            operator: + @222
+            rightOperand: IntegerLiteral
+              literal: 2 @224
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: num Function(num)
+            staticType: int
+      static const vSubtract @233
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @245
+              staticType: int
+            operator: - @247
+            rightOperand: IntegerLiteral
+              literal: 2 @249
+              staticType: int
+            staticElement: dart:core::@class::num::@method::-
+            staticInvokeType: num Function(num)
+            staticType: int
+      static const vMiltiply @258
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @270
+              staticType: int
+            operator: * @272
+            rightOperand: IntegerLiteral
+              literal: 2 @274
+              staticType: int
+            staticElement: dart:core::@class::num::@method::*
+            staticInvokeType: num Function(num)
+            staticType: int
+      static const vDivide @283
+        type: double
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @293
+              staticType: int
+            operator: / @295
+            rightOperand: IntegerLiteral
+              literal: 2 @297
+              staticType: int
+            staticElement: dart:core::@class::num::@method::/
+            staticInvokeType: double Function(num)
+            staticType: double
+      static const vFloorDivide @306
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @321
+              staticType: int
+            operator: ~/ @323
+            rightOperand: IntegerLiteral
+              literal: 2 @326
+              staticType: int
+            staticElement: dart:core::@class::num::@method::~/
+            staticInvokeType: int Function(num)
+            staticType: int
+      static const vModulo @335
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @345
+              staticType: int
+            operator: % @347
+            rightOperand: IntegerLiteral
+              literal: 2 @349
+              staticType: int
+            staticElement: dart:core::@class::num::@method::%
+            staticInvokeType: num Function(num)
+            staticType: int
+      static const vGreater @358
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @369
+              staticType: int
+            operator: > @371
+            rightOperand: IntegerLiteral
+              literal: 2 @373
+              staticType: int
+            staticElement: dart:core::@class::num::@method::>
+            staticInvokeType: bool Function(num)
+            staticType: bool
+      static const vGreaterEqual @382
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @398
+              staticType: int
+            operator: >= @400
+            rightOperand: IntegerLiteral
+              literal: 2 @403
+              staticType: int
+            staticElement: dart:core::@class::num::@method::>=
+            staticInvokeType: bool Function(num)
+            staticType: bool
+      static const vLess @412
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @420
+              staticType: int
+            operator: < @422
+            rightOperand: IntegerLiteral
+              literal: 2 @424
+              staticType: int
+            staticElement: dart:core::@class::num::@method::<
+            staticInvokeType: bool Function(num)
+            staticType: bool
+      static const vLessEqual @433
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @446
+              staticType: int
+            operator: <= @448
+            rightOperand: IntegerLiteral
+              literal: 2 @451
+              staticType: int
+            staticElement: dart:core::@class::num::@method::<=
+            staticInvokeType: bool Function(num)
+            staticType: bool
+    accessors
+      synthetic static get vEqual @-1
+        returnType: bool
+      synthetic static get vAnd @-1
+        returnType: bool
+      synthetic static get vOr @-1
+        returnType: bool
+      synthetic static get vBitXor @-1
+        returnType: int
+      synthetic static get vBitAnd @-1
+        returnType: int
+      synthetic static get vBitOr @-1
+        returnType: int
+      synthetic static get vBitShiftLeft @-1
+        returnType: int
+      synthetic static get vBitShiftRight @-1
+        returnType: int
+      synthetic static get vAdd @-1
+        returnType: int
+      synthetic static get vSubtract @-1
+        returnType: int
+      synthetic static get vMiltiply @-1
+        returnType: int
+      synthetic static get vDivide @-1
+        returnType: double
+      synthetic static get vFloorDivide @-1
+        returnType: int
+      synthetic static get vModulo @-1
+        returnType: int
+      synthetic static get vGreater @-1
+        returnType: bool
+      synthetic static get vGreaterEqual @-1
+        returnType: bool
+      synthetic static get vLess @-1
+        returnType: bool
+      synthetic static get vLessEqual @-1
+        returnType: bool
+''');
+  }
+
+  test_const_topLevel_conditional() async {
+    var library = await buildLibrary(r'''
+const vConditional = (1 == 2) ? 11 : 22;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vConditional @6
+        type: int
+        constantInitializer
+          ConditionalExpression
+            condition: ParenthesizedExpression
+              leftParenthesis: ( @21
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @22
+                  staticType: int
+                operator: == @24
+                rightOperand: IntegerLiteral
+                  literal: 2 @27
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::==
+                staticInvokeType: bool Function(Object)
+                staticType: bool
+              rightParenthesis: ) @28
+              staticType: bool
+            question: ? @30
+            thenExpression: IntegerLiteral
+              literal: 11 @32
+              staticType: int
+            colon: : @35
+            elseExpression: IntegerLiteral
+              literal: 22 @37
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get vConditional @-1
+        returnType: int
+''');
+  }
+
+  test_const_topLevel_identical() async {
+    var library = await buildLibrary(r'''
+const vIdentical = (1 == 2) ? 11 : 22;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vIdentical @6
+        type: int
+        constantInitializer
+          ConditionalExpression
+            condition: ParenthesizedExpression
+              leftParenthesis: ( @19
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @20
+                  staticType: int
+                operator: == @22
+                rightOperand: IntegerLiteral
+                  literal: 2 @25
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::==
+                staticInvokeType: bool Function(Object)
+                staticType: bool
+              rightParenthesis: ) @26
+              staticType: bool
+            question: ? @28
+            thenExpression: IntegerLiteral
+              literal: 11 @30
+              staticType: int
+            colon: : @33
+            elseExpression: IntegerLiteral
+              literal: 22 @35
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get vIdentical @-1
+        returnType: int
+''');
+  }
+
+  test_const_topLevel_ifNull() async {
+    var library = await buildLibrary(r'''
+const vIfNull = 1 ?? 2.0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vIfNull @6
+        type: num
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @16
+              staticType: int
+            operator: ?? @18
+            rightOperand: DoubleLiteral
+              literal: 2.0 @21
+              staticType: double
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: num
+    accessors
+      synthetic static get vIfNull @-1
+        returnType: num
+''');
+  }
+
+  test_const_topLevel_literal() async {
+    var library = await buildLibrary(r'''
+const vNull = null;
+const vBoolFalse = false;
+const vBoolTrue = true;
+const vIntPositive = 1;
+const vIntNegative = -2;
+const vIntLong1 = 0x7FFFFFFFFFFFFFFF;
+const vIntLong2 = 0xFFFFFFFFFFFFFFFF;
+const vIntLong3 = 0x8000000000000000;
+const vDouble = 2.3;
+const vString = 'abc';
+const vStringConcat = 'aaa' 'bbb';
+const vStringInterpolation = 'aaa ${true} ${42} bbb';
+const vSymbol = #aaa.bbb.ccc;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vNull @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @14
+            staticType: Null
+      static const vBoolFalse @26
+        type: bool
+        constantInitializer
+          BooleanLiteral
+            literal: false @39
+            staticType: bool
+      static const vBoolTrue @52
+        type: bool
+        constantInitializer
+          BooleanLiteral
+            literal: true @64
+            staticType: bool
+      static const vIntPositive @76
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 1 @91
+            staticType: int
+      static const vIntNegative @100
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: - @115
+            operand: IntegerLiteral
+              literal: 2 @116
+              staticType: int
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const vIntLong1 @125
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0x7FFFFFFFFFFFFFFF @137
+            staticType: int
+      static const vIntLong2 @163
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0xFFFFFFFFFFFFFFFF @175
+            staticType: int
+      static const vIntLong3 @201
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0x8000000000000000 @213
+            staticType: int
+      static const vDouble @239
+        type: double
+        constantInitializer
+          DoubleLiteral
+            literal: 2.3 @249
+            staticType: double
+      static const vString @260
+        type: String
+        constantInitializer
+          SimpleStringLiteral
+            literal: 'abc' @270
+      static const vStringConcat @283
+        type: String
+        constantInitializer
+          AdjacentStrings
+            strings
+              SimpleStringLiteral
+                literal: 'aaa' @299
+              SimpleStringLiteral
+                literal: 'bbb' @305
+            staticType: String
+            stringValue: aaabbb
+      static const vStringInterpolation @318
+        type: String
+        constantInitializer
+          StringInterpolation
+            elements
+              InterpolationString
+                contents: 'aaa  @341
+              InterpolationExpression
+                leftBracket: ${ @346
+                expression: BooleanLiteral
+                  literal: true @348
+                  staticType: bool
+                rightBracket: } @352
+              InterpolationString
+                contents:   @353
+              InterpolationExpression
+                leftBracket: ${ @354
+                expression: IntegerLiteral
+                  literal: 42 @356
+                  staticType: int
+                rightBracket: } @358
+              InterpolationString
+                contents:  bbb' @359
+            staticType: String
+            stringValue: null
+      static const vSymbol @372
+        type: Symbol
+        constantInitializer
+          SymbolLiteral
+            poundSign: # @382
+            components
+              components: aaa
+                offset: 383
+              components: bbb
+                offset: 387
+              components: ccc
+                offset: 391
+    accessors
+      synthetic static get vNull @-1
+        returnType: dynamic
+      synthetic static get vBoolFalse @-1
+        returnType: bool
+      synthetic static get vBoolTrue @-1
+        returnType: bool
+      synthetic static get vIntPositive @-1
+        returnType: int
+      synthetic static get vIntNegative @-1
+        returnType: int
+      synthetic static get vIntLong1 @-1
+        returnType: int
+      synthetic static get vIntLong2 @-1
+        returnType: int
+      synthetic static get vIntLong3 @-1
+        returnType: int
+      synthetic static get vDouble @-1
+        returnType: double
+      synthetic static get vString @-1
+        returnType: String
+      synthetic static get vStringConcat @-1
+        returnType: String
+      synthetic static get vStringInterpolation @-1
+        returnType: String
+      synthetic static get vSymbol @-1
+        returnType: Symbol
+''');
+  }
+
+  test_const_topLevel_methodInvocation_questionPeriod() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a?.toString();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @11
+        type: int?
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @15
+            staticType: int
+      static const b @24
+        type: String?
+        constantInitializer
+          MethodInvocation
+            target: SimpleIdentifier
+              token: a @28
+              staticElement: self::@getter::a
+              staticType: int?
+            operator: ?. @29
+            methodName: SimpleIdentifier
+              token: toString @31
+              staticElement: dart:core::@class::int::@method::toString
+              staticType: String Function()
+            argumentList: ArgumentList
+              leftParenthesis: ( @39
+              rightParenthesis: ) @40
+            staticInvokeType: String Function()
+            staticType: String?
+    accessors
+      synthetic static get a @-1
+        returnType: int?
+      synthetic static get b @-1
+        returnType: String?
+''');
+  }
+
+  test_const_topLevel_methodInvocation_questionPeriodPeriod() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a?..toString();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @11
+        type: int?
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @15
+            staticType: int
+      static const b @24
+        type: int?
+        constantInitializer
+          CascadeExpression
+            target: SimpleIdentifier
+              token: a @28
+              staticElement: self::@getter::a
+              staticType: int?
+            cascadeSections
+              MethodInvocation
+                operator: ?.. @29
+                methodName: SimpleIdentifier
+                  token: toString @32
+                  staticElement: dart:core::@class::int::@method::toString
+                  staticType: String Function()
+                argumentList: ArgumentList
+                  leftParenthesis: ( @40
+                  rightParenthesis: ) @41
+                staticInvokeType: String Function()
+                staticType: String
+            staticType: int?
+    accessors
+      synthetic static get a @-1
+        returnType: int?
+      synthetic static get b @-1
+        returnType: int?
+''');
+  }
+
+  test_const_topLevel_nullSafe_nullAware_propertyAccess() async {
+    var library = await buildLibrary(r'''
+const String? a = '';
+
+const List<int?> b = [
+  a?.length,
+];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @14
+        type: String?
+        constantInitializer
+          SimpleStringLiteral
+            literal: '' @18
+      static const b @40
+        type: List<int?>
+        constantInitializer
+          ListLiteral
+            leftBracket: [ @44
+            elements
+              PropertyAccess
+                target: SimpleIdentifier
+                  token: a @48
+                  staticElement: self::@getter::a
+                  staticType: String?
+                operator: ?. @49
+                propertyName: SimpleIdentifier
+                  token: length @51
+                  staticElement: dart:core::@class::String::@getter::length
+                  staticType: int
+                staticType: int?
+            rightBracket: ] @59
+            staticType: List<int?>
+    accessors
+      synthetic static get a @-1
+        returnType: String?
+      synthetic static get b @-1
+        returnType: List<int?>
+''');
+  }
+
+  test_const_topLevel_parenthesis() async {
+    var library = await buildLibrary(r'''
+const int v1 = (1 + 2) * 3;
+const int v2 = -(1 + 2);
+const int v3 = ('aaa' + 'bbb').length;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v1 @10
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: ParenthesizedExpression
+              leftParenthesis: ( @15
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @16
+                  staticType: int
+                operator: + @18
+                rightOperand: IntegerLiteral
+                  literal: 2 @20
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: num Function(num)
+                staticType: int
+              rightParenthesis: ) @21
+              staticType: int
+            operator: * @23
+            rightOperand: IntegerLiteral
+              literal: 3 @25
+              staticType: int
+            staticElement: dart:core::@class::num::@method::*
+            staticInvokeType: num Function(num)
+            staticType: int
+      static const v2 @38
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: - @43
+            operand: ParenthesizedExpression
+              leftParenthesis: ( @44
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @45
+                  staticType: int
+                operator: + @47
+                rightOperand: IntegerLiteral
+                  literal: 2 @49
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: num Function(num)
+                staticType: int
+              rightParenthesis: ) @50
+              staticType: int
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const v3 @63
+        type: int
+        constantInitializer
+          PropertyAccess
+            target: ParenthesizedExpression
+              leftParenthesis: ( @68
+              expression: BinaryExpression
+                leftOperand: SimpleStringLiteral
+                  literal: 'aaa' @69
+                operator: + @75
+                rightOperand: SimpleStringLiteral
+                  literal: 'bbb' @77
+                staticElement: dart:core::@class::String::@method::+
+                staticInvokeType: String Function(String)
+                staticType: String
+              rightParenthesis: ) @82
+              staticType: String
+            operator: . @83
+            propertyName: SimpleIdentifier
+              token: length @84
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+            staticType: int
+    accessors
+      synthetic static get v1 @-1
+        returnType: int
+      synthetic static get v2 @-1
+        returnType: int
+      synthetic static get v3 @-1
+        returnType: int
+''');
+  }
+
+  test_const_topLevel_prefix() async {
+    var library = await buildLibrary(r'''
+const vNotEqual = 1 != 2;
+const vNot = !true;
+const vNegate = -1;
+const vComplement = ~1;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vNotEqual @6
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @18
+              staticType: int
+            operator: != @20
+            rightOperand: IntegerLiteral
+              literal: 2 @23
+              staticType: int
+            staticElement: dart:core::@class::num::@method::==
+            staticInvokeType: bool Function(Object)
+            staticType: bool
+      static const vNot @32
+        type: bool
+        constantInitializer
+          PrefixExpression
+            operator: ! @39
+            operand: BooleanLiteral
+              literal: true @40
+              staticType: bool
+            staticElement: <null>
+            staticType: bool
+      static const vNegate @52
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: - @62
+            operand: IntegerLiteral
+              literal: 1 @63
+              staticType: int
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const vComplement @72
+        type: int
+        constantInitializer
+          PrefixExpression
+            operator: ~ @86
+            operand: IntegerLiteral
+              literal: 1 @87
+              staticType: int
+            staticElement: dart:core::@class::int::@method::~
+            staticType: int
+    accessors
+      synthetic static get vNotEqual @-1
+        returnType: bool
+      synthetic static get vNot @-1
+        returnType: bool
+      synthetic static get vNegate @-1
+        returnType: int
+      synthetic static get vComplement @-1
+        returnType: int
+''');
+  }
+
+  test_const_topLevel_super() async {
+    var library = await buildLibrary(r'''
+const vSuper = super;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vSuper @6
+        type: dynamic
+        constantInitializer
+          SuperExpression
+            superKeyword: super @15
+            staticType: dynamic
+    accessors
+      synthetic static get vSuper @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_topLevel_this() async {
+    var library = await buildLibrary(r'''
+const vThis = this;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vThis @6
+        type: dynamic
+        constantInitializer
+          ThisExpression
+            thisKeyword: this @14
+            staticType: dynamic
+    accessors
+      synthetic static get vThis @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_topLevel_throw() async {
+    var library = await buildLibrary(r'''
+const c = throw 42;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const c @6
+        type: Never
+        constantInitializer
+          ThrowExpression
+            throwKeyword: throw @10
+            expression: IntegerLiteral
+              literal: 42 @16
+              staticType: int
+            staticType: Never
+    accessors
+      synthetic static get c @-1
+        returnType: Never
+''');
+  }
+
+  test_const_topLevel_throw_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary(r'''
+const c = throw 42;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const c @6
+        type: dynamic
+        constantInitializer
+          ThrowExpression
+            throwKeyword: throw @10
+            expression: IntegerLiteral
+              literal: 42 @16
+              staticType: int*
+            staticType: Never*
+    accessors
+      synthetic static get c @-1
+        returnType: dynamic
+''');
+  }
+
+  test_const_topLevel_typedList() async {
+    var library = await buildLibrary(r'''
+const vNull = const <Null>[];
+const vDynamic = const <dynamic>[1, 2, 3];
+const vInterfaceNoTypeParameters = const <int>[1, 2, 3];
+const vInterfaceNoTypeArguments = const <List>[];
+const vInterfaceWithTypeArguments = const <List<String>>[];
+const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vNull @6
+        type: List<Null>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @14
+            typeArguments: TypeArgumentList
+              leftBracket: < @20
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: Null @21
+                    staticElement: dart:core::@class::Null
+                    staticType: null
+                  type: Null
+              rightBracket: > @25
+            leftBracket: [ @26
+            rightBracket: ] @27
+            staticType: List<Null>
+      static const vDynamic @36
+        type: List<dynamic>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @47
+            typeArguments: TypeArgumentList
+              leftBracket: < @53
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: dynamic @54
+                    staticElement: dynamic@-1
+                    staticType: null
+                  type: dynamic
+              rightBracket: > @61
+            leftBracket: [ @62
+            elements
+              IntegerLiteral
+                literal: 1 @63
+                staticType: int
+              IntegerLiteral
+                literal: 2 @66
+                staticType: int
+              IntegerLiteral
+                literal: 3 @69
+                staticType: int
+            rightBracket: ] @70
+            staticType: List<dynamic>
+      static const vInterfaceNoTypeParameters @79
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @108
+            typeArguments: TypeArgumentList
+              leftBracket: < @114
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @115
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @118
+            leftBracket: [ @119
+            elements
+              IntegerLiteral
+                literal: 1 @120
+                staticType: int
+              IntegerLiteral
+                literal: 2 @123
+                staticType: int
+              IntegerLiteral
+                literal: 3 @126
+                staticType: int
+            rightBracket: ] @127
+            staticType: List<int>
+      static const vInterfaceNoTypeArguments @136
+        type: List<List<dynamic>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @164
+            typeArguments: TypeArgumentList
+              leftBracket: < @170
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: List @171
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                  type: List<dynamic>
+              rightBracket: > @175
+            leftBracket: [ @176
+            rightBracket: ] @177
+            staticType: List<List<dynamic>>
+      static const vInterfaceWithTypeArguments @186
+        type: List<List<String>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @216
+            typeArguments: TypeArgumentList
+              leftBracket: < @222
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: List @223
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @227
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: String @228
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                    rightBracket: > @234
+                  type: List<String>
+              rightBracket: > @235
+            leftBracket: [ @236
+            rightBracket: ] @237
+            staticType: List<List<String>>
+      static const vInterfaceWithTypeArguments2 @246
+        type: List<Map<int, List<String>>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @277
+            typeArguments: TypeArgumentList
+              leftBracket: < @283
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: Map @284
+                    staticElement: dart:core::@class::Map
+                    staticType: null
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @287
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: int @288
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                        type: int
+                      NamedType
+                        name: SimpleIdentifier
+                          token: List @293
+                          staticElement: dart:core::@class::List
+                          staticType: null
+                        typeArguments: TypeArgumentList
+                          leftBracket: < @297
+                          arguments
+                            NamedType
+                              name: SimpleIdentifier
+                                token: String @298
+                                staticElement: dart:core::@class::String
+                                staticType: null
+                              type: String
+                          rightBracket: > @304
+                        type: List<String>
+                    rightBracket: > @305
+                  type: Map<int, List<String>>
+              rightBracket: > @306
+            leftBracket: [ @307
+            rightBracket: ] @308
+            staticType: List<Map<int, List<String>>>
+    accessors
+      synthetic static get vNull @-1
+        returnType: List<Null>
+      synthetic static get vDynamic @-1
+        returnType: List<dynamic>
+      synthetic static get vInterfaceNoTypeParameters @-1
+        returnType: List<int>
+      synthetic static get vInterfaceNoTypeArguments @-1
+        returnType: List<List<dynamic>>
+      synthetic static get vInterfaceWithTypeArguments @-1
+        returnType: List<List<String>>
+      synthetic static get vInterfaceWithTypeArguments2 @-1
+        returnType: List<Map<int, List<String>>>
+''');
+  }
+
+  test_const_topLevel_typedList_imported() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const v = const <C>[];
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const v @23
+        type: List<C>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @27
+            typeArguments: TypeArgumentList
+              leftBracket: < @33
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: C @34
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  type: C
+              rightBracket: > @35
+            leftBracket: [ @36
+            rightBracket: ] @37
+            staticType: List<C>
+    accessors
+      synthetic static get v @-1
+        returnType: List<C>
+''');
+  }
+
+  test_const_topLevel_typedList_importedWithPrefix() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const v = const <p.C>[];
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @28
+        type: List<C>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @32
+            typeArguments: TypeArgumentList
+              leftBracket: < @38
+              arguments
+                NamedType
+                  name: PrefixedIdentifier
+                    prefix: SimpleIdentifier
+                      token: p @39
+                      staticElement: self::@prefix::p
+                      staticType: null
+                    period: . @40
+                    identifier: SimpleIdentifier
+                      token: C @41
+                      staticElement: package:test/a.dart::@class::C
+                      staticType: null
+                    staticElement: package:test/a.dart::@class::C
+                    staticType: null
+                  type: C
+              rightBracket: > @42
+            leftBracket: [ @43
+            rightBracket: ] @44
+            staticType: List<C>
+    accessors
+      synthetic static get v @-1
+        returnType: List<C>
+''');
+  }
+
+  test_const_topLevel_typedList_typedefArgument() async {
+    var library = await buildLibrary(r'''
+typedef int F(String id);
+const v = const <F>[];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function(String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional id @21
+              type: String
+          returnType: int
+    topLevelVariables
+      static const v @32
+        type: List<int Function(String)>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @36
+            typeArguments: TypeArgumentList
+              leftBracket: < @42
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: F @43
+                    staticElement: self::@typeAlias::F
+                    staticType: null
+                  type: int Function(String)
+                    alias: self::@typeAlias::F
+              rightBracket: > @44
+            leftBracket: [ @45
+            rightBracket: ] @46
+            staticType: List<int Function(String)>
+    accessors
+      synthetic static get v @-1
+        returnType: List<int Function(String)>
+''');
+  }
+
+  test_const_topLevel_typedMap() async {
+    var library = await buildLibrary(r'''
+const vDynamic1 = const <dynamic, int>{};
+const vDynamic2 = const <int, dynamic>{};
+const vInterface = const <int, String>{};
+const vInterfaceWithTypeArguments = const <int, List<String>>{};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vDynamic1 @6
+        type: Map<dynamic, int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @18
+            typeArguments: TypeArgumentList
+              leftBracket: < @24
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: dynamic @25
+                    staticElement: dynamic@-1
+                    staticType: null
+                  type: dynamic
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @34
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @37
+            leftBracket: { @38
+            rightBracket: } @39
+            isMap: true
+            staticType: Map<dynamic, int>
+      static const vDynamic2 @48
+        type: Map<int, dynamic>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @60
+            typeArguments: TypeArgumentList
+              leftBracket: < @66
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @67
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: dynamic @72
+                    staticElement: dynamic@-1
+                    staticType: null
+                  type: dynamic
+              rightBracket: > @79
+            leftBracket: { @80
+            rightBracket: } @81
+            isMap: true
+            staticType: Map<int, dynamic>
+      static const vInterface @90
+        type: Map<int, String>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @103
+            typeArguments: TypeArgumentList
+              leftBracket: < @109
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @110
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: String @115
+                    staticElement: dart:core::@class::String
+                    staticType: null
+                  type: String
+              rightBracket: > @121
+            leftBracket: { @122
+            rightBracket: } @123
+            isMap: true
+            staticType: Map<int, String>
+      static const vInterfaceWithTypeArguments @132
+        type: Map<int, List<String>>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @162
+            typeArguments: TypeArgumentList
+              leftBracket: < @168
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @169
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+                NamedType
+                  name: SimpleIdentifier
+                    token: List @174
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @178
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: String @179
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                    rightBracket: > @185
+                  type: List<String>
+              rightBracket: > @186
+            leftBracket: { @187
+            rightBracket: } @188
+            isMap: true
+            staticType: Map<int, List<String>>
+    accessors
+      synthetic static get vDynamic1 @-1
+        returnType: Map<dynamic, int>
+      synthetic static get vDynamic2 @-1
+        returnType: Map<int, dynamic>
+      synthetic static get vInterface @-1
+        returnType: Map<int, String>
+      synthetic static get vInterfaceWithTypeArguments @-1
+        returnType: Map<int, List<String>>
+''');
+  }
+
+  test_const_topLevel_typedSet() async {
+    var library = await buildLibrary(r'''
+const vDynamic1 = const <dynamic>{};
+const vInterface = const <int>{};
+const vInterfaceWithTypeArguments = const <List<String>>{};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const vDynamic1 @6
+        type: Set<dynamic>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @18
+            typeArguments: TypeArgumentList
+              leftBracket: < @24
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: dynamic @25
+                    staticElement: dynamic@-1
+                    staticType: null
+                  type: dynamic
+              rightBracket: > @32
+            leftBracket: { @33
+            rightBracket: } @34
+            isMap: false
+            staticType: Set<dynamic>
+      static const vInterface @43
+        type: Set<int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @56
+            typeArguments: TypeArgumentList
+              leftBracket: < @62
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @63
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @66
+            leftBracket: { @67
+            rightBracket: } @68
+            isMap: false
+            staticType: Set<int>
+      static const vInterfaceWithTypeArguments @77
+        type: Set<List<String>>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @107
+            typeArguments: TypeArgumentList
+              leftBracket: < @113
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: List @114
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @118
+                    arguments
+                      NamedType
+                        name: SimpleIdentifier
+                          token: String @119
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                    rightBracket: > @125
+                  type: List<String>
+              rightBracket: > @126
+            leftBracket: { @127
+            rightBracket: } @128
+            isMap: false
+            staticType: Set<List<String>>
+    accessors
+      synthetic static get vDynamic1 @-1
+        returnType: Set<dynamic>
+      synthetic static get vInterface @-1
+        returnType: Set<int>
+      synthetic static get vInterfaceWithTypeArguments @-1
+        returnType: Set<List<String>>
+''');
+  }
+
+  test_const_topLevel_untypedList() async {
+    var library = await buildLibrary(r'''
+const v = const [1, 2, 3];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @10
+            leftBracket: [ @16
+            elements
+              IntegerLiteral
+                literal: 1 @17
+                staticType: int
+              IntegerLiteral
+                literal: 2 @20
+                staticType: int
+              IntegerLiteral
+                literal: 3 @23
+                staticType: int
+            rightBracket: ] @24
+            staticType: List<int>
+    accessors
+      synthetic static get v @-1
+        returnType: List<int>
+''');
+  }
+
+  test_const_topLevel_untypedMap() async {
+    var library = await buildLibrary(r'''
+const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Map<int, String>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @10
+            leftBracket: { @16
+            elements
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 0 @17
+                  staticType: int
+                separator: : @18
+                value: SimpleStringLiteral
+                  literal: 'aaa' @20
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 1 @27
+                  staticType: int
+                separator: : @28
+                value: SimpleStringLiteral
+                  literal: 'bbb' @30
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 2 @37
+                  staticType: int
+                separator: : @38
+                value: SimpleStringLiteral
+                  literal: 'ccc' @40
+            rightBracket: } @45
+            isMap: true
+            staticType: Map<int, String>
+    accessors
+      synthetic static get v @-1
+        returnType: Map<int, String>
+''');
+  }
+
+  test_const_topLevel_untypedSet() async {
+    var library = await buildLibrary(r'''
+const v = const {0, 1, 2};
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Set<int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @10
+            leftBracket: { @16
+            elements
+              IntegerLiteral
+                literal: 0 @17
+                staticType: int
+              IntegerLiteral
+                literal: 1 @20
+                staticType: int
+              IntegerLiteral
+                literal: 2 @23
+                staticType: int
+            rightBracket: } @24
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get v @-1
+        returnType: Set<int>
+''');
+  }
+
+  test_const_typeLiteral() async {
+    var library = await buildLibrary(r'''
+const v = List<int>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Type
+        constantInitializer
+          TypeLiteral
+            type: NamedType
+              name: SimpleIdentifier
+                token: List @10
+                staticElement: dart:core::@class::List
+                staticType: List<int>
+              typeArguments: TypeArgumentList
+                leftBracket: < @14
+                arguments
+                  NamedType
+                    name: SimpleIdentifier
+                      token: int @15
+                      staticElement: dart:core::@class::int
+                      staticType: null
+                    type: int
+                rightBracket: > @18
+              type: List<int>
+            staticType: Type
+    accessors
+      synthetic static get v @-1
+        returnType: Type
+''');
+  }
+
+  test_constExpr_pushReference_enum_field() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+final vValue = E.a;
+final vValues = E.values;
+final vIndex = E.a.index;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @8
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant c @14
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static final vValue @23
+        type: E
+      static final vValues @43
+        type: List<E>
+      static final vIndex @69
+        type: int
+    accessors
+      synthetic static get vValue @-1
+        returnType: E
+      synthetic static get vValues @-1
+        returnType: List<E>
+      synthetic static get vIndex @-1
+        returnType: int
+''');
+  }
+
+  test_constExpr_pushReference_enum_method() async {
+    var library = await buildLibrary('''
+enum E {a}
+final vToString = E.a.toString();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @8
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static final vToString @17
+        type: String
+    accessors
+      synthetic static get vToString @-1
+        returnType: String
+''');
+  }
+
+  test_constExpr_pushReference_field_simpleIdentifier() async {
+    var library = await buildLibrary('''
+class C {
+  static const a = b;
+  static const b = null;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const a @25
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                token: b @29
+                staticElement: self::@class::C::@getter::b
+                staticType: dynamic
+          static const b @47
+            type: dynamic
+            constantInitializer
+              NullLiteral
+                literal: null @51
+                staticType: Null
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @-1
+            returnType: dynamic
+          synthetic static get b @-1
+            returnType: dynamic
+''');
+  }
+
+  test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
+    var library = await buildLibrary('''
+class C {
+  static const a = m;
+  static m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const a @25
+            type: dynamic Function()
+            constantInitializer
+              SimpleIdentifier
+                token: m @29
+                staticElement: self::@class::C::@method::m
+                staticType: dynamic Function()
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @-1
+            returnType: dynamic Function()
+        methods
+          static m @41
+            returnType: dynamic
+''');
+  }
+
+  test_defaultValue_eliminateTypeParameters() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const X({List<T> a = const []});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract X @21
+            parameters
+              optionalNamed a @32
+                type: List<T>
+                constantInitializer
+                  ListLiteral
+                    constKeyword: const @36
+                    leftBracket: [ @42
+                    rightBracket: ] @43
+                    staticType: List<Never>
+            returnType: dynamic
+''');
+  }
+
+  test_defaultValue_eliminateTypeParameters_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class A<T> {
+  const X({List<T> a = const []});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract X @21
+            parameters
+              optionalNamed a @32
+                type: List<T*>*
+                constantInitializer
+                  ListLiteral
+                    constKeyword: const @36
+                    leftBracket: [ @42
+                    rightBracket: ] @43
+                    staticType: List<Null*>*
+            returnType: dynamic
+''');
+  }
+
+  test_defaultValue_genericFunction() async {
+    var library = await buildLibrary('''
+typedef void F<T>(T v);
+
+void defaultF<T>(T v) {}
+
+class X {
+  final F f;
+  const X({this.f: defaultF});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class X @57
+        fields
+          final f @71
+            type: void Function(dynamic)
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+        constructors
+          const @82
+            parameters
+              optionalNamed final this.f @90
+                type: void Function(dynamic)
+                  alias: self::@typeAlias::F
+                    typeArguments
+                      dynamic
+                constantInitializer
+                  FunctionReference
+                    function: SimpleIdentifier
+                      token: defaultF @93
+                      staticElement: self::@function::defaultF
+                      staticType: void Function<T>(T)
+                    staticType: void Function(dynamic)
+                    typeArgumentTypes
+                      dynamic
+                field: self::@class::X::@field::f
+        accessors
+          synthetic get f @-1
+            returnType: void Function(dynamic)
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          contravariant T @15
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional v @20
+              type: T
+          returnType: void
+    functions
+      defaultF @30
+        typeParameters
+          covariant T @39
+        parameters
+          requiredPositional v @44
+            type: T
+        returnType: void
+''');
+  }
+
+  test_defaultValue_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  void foo({a: const A<Function()>()}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        constructors
+          synthetic @-1
+        methods
+          foo @45
+            parameters
+              optionalNamed a @50
+                type: dynamic
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @53
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: A @59
+                          staticElement: self::@class::A
+                          staticType: null
+                        typeArguments: TypeArgumentList
+                          leftBracket: < @60
+                          arguments
+                            GenericFunctionType
+                              functionKeyword: Function @61
+                              parameters: FormalParameterList
+                                leftParenthesis: ( @69
+                                rightParenthesis: ) @70
+                              declaredElement: GenericFunctionTypeElement
+                                parameters
+                                returnType: dynamic
+                                type: dynamic Function()
+                              type: dynamic Function()
+                          rightBracket: > @71
+                        type: A<dynamic Function()>
+                      staticElement: ConstructorMember
+                        base: self::@class::A::@constructor::•
+                        substitution: {T: dynamic Function()}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @72
+                      rightParenthesis: ) @73
+                    staticType: A<dynamic Function()>
+            returnType: void
+''');
+  }
+
+  test_defaultValue_inFunctionTypedFormalParameter() async {
+    var library = await buildLibrary('''
+void f( g({a: 0 is int}) ) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional g @8
+            type: dynamic Function({dynamic a})
+            parameters
+              optionalNamed a @11
+                type: dynamic
+                constantInitializer
+                  IsExpression
+                    expression: IntegerLiteral
+                      literal: 0 @14
+                      staticType: int
+                    isOperator: is @16
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: int @19
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                      type: int
+                    staticType: bool
+        returnType: void
+''');
+  }
+
+  test_defaultValue_methodMember_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+void f([Comparator<T> compare = Comparable.compare]) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          optionalPositional compare @22
+            type: int* Function(dynamic, dynamic)*
+              alias: dart:core::@typeAlias::Comparator
+                typeArguments
+                  dynamic
+            constantInitializer
+              PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: Comparable @32
+                  staticElement: dart:core::@class::Comparable
+                  staticType: null
+                period: . @42
+                identifier: SimpleIdentifier
+                  token: compare @43
+                  staticElement: MethodMember
+                    base: dart:core::@class::Comparable::@method::compare
+                    isLegacy: true
+                  staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
+                staticElement: MethodMember
+                  base: dart:core::@class::Comparable::@method::compare
+                  isLegacy: true
+                staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
+        returnType: void
+''');
+  }
+
+  test_defaultValue_refersToExtension_method_inside() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static void f() {}
+  static void g([Object p = f]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @44
+            returnType: void
+          static g @65
+            parameters
+              optionalPositional p @75
+                type: Object
+                constantInitializer
+                  SimpleIdentifier
+                    token: f @79
+                    staticElement: self::@extension::E::@method::f
+                    staticType: void Function()
+            returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass() async {
+    var library = await buildLibrary('''
+class B<T1, T2> {
+  const B();
+}
+class C {
+  void foo([B<int, double> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T1 @8
+            defaultType: dynamic
+          covariant T2 @12
+            defaultType: dynamic
+        constructors
+          const @26
+      class C @39
+        constructors
+          synthetic @-1
+        methods
+          foo @50
+            parameters
+              optionalPositional b @70
+                type: B<int, double>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @74
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @80
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<int, double>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T1: int, T2: double}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @81
+                      rightParenthesis: ) @82
+                    staticType: B<int, double>
+            returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C<T> {
+  const C([B<T> b = const B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          const @49
+            parameters
+              optionalPositional b @57
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @61
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @67
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Never>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @68
+                      rightParenthesis: ) @69
+                    staticType: B<Never>
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor2() async {
+    var library = await buildLibrary('''
+abstract class A<T> {}
+class B<T> implements A<T> {
+  const B();
+}
+class C<T> implements A<Iterable<T>> {
+  const C([A<T> a = const B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant T @17
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @29
+        typeParameters
+          covariant T @31
+            defaultType: dynamic
+        interfaces
+          A<T>
+        constructors
+          const @60
+      class C @73
+        typeParameters
+          covariant T @75
+            defaultType: dynamic
+        interfaces
+          A<Iterable<T>>
+        constructors
+          const @114
+            parameters
+              optionalPositional a @122
+                type: A<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @126
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @132
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Never>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @133
+                      rightParenthesis: ) @134
+                    staticType: B<Never>
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor2_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+abstract class A<T> {}
+class B<T> implements A<T> {
+  const B();
+}
+class C<T> implements A<Iterable<T>> {
+  const C([A<T> a = const B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant T @17
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @29
+        typeParameters
+          covariant T @31
+            defaultType: dynamic
+        interfaces
+          A<T*>*
+        constructors
+          const @60
+      class C @73
+        typeParameters
+          covariant T @75
+            defaultType: dynamic
+        interfaces
+          A<Iterable<T*>*>*
+        constructors
+          const @114
+            parameters
+              optionalPositional a @122
+                type: A<T*>*
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @126
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @132
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Null*>*
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Null*}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @133
+                      rightParenthesis: ) @134
+                    staticType: B<Null*>*
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C<T> {
+  const C([B<T> b = const B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          const @49
+            parameters
+              optionalPositional b @57
+                type: B<T*>*
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @61
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @67
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Null*>*
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Null*}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @68
+                      rightParenthesis: ) @69
+                    staticType: B<Null*>*
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_functionG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+void foo<T>([B<T> b = const B()]) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    functions
+      foo @33
+        typeParameters
+          covariant T @37
+        parameters
+          optionalPositional b @46
+            type: B<T>
+            constantInitializer
+              InstanceCreationExpression
+                keyword: const @50
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: B @56
+                      staticElement: self::@class::B
+                      staticType: null
+                    type: B<Never>
+                  staticElement: ConstructorMember
+                    base: self::@class::B::@constructor::•
+                    substitution: {T: Never}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @57
+                  rightParenthesis: ) @58
+                staticType: B<Never>
+        returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C {
+  void foo<T>([B<T> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        constructors
+          synthetic @-1
+        methods
+          foo @45
+            typeParameters
+              covariant T @49
+            parameters
+              optionalPositional b @58
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @62
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @68
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Never>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @69
+                      rightParenthesis: ) @70
+                    staticType: B<Never>
+            returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodG_classG() async {
+    var library = await buildLibrary('''
+class B<T1, T2> {
+  const B();
+}
+class C<E1> {
+  void foo<E2>([B<E1, E2> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T1 @8
+            defaultType: dynamic
+          covariant T2 @12
+            defaultType: dynamic
+        constructors
+          const @26
+      class C @39
+        typeParameters
+          covariant E1 @41
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          foo @54
+            typeParameters
+              covariant E2 @58
+            parameters
+              optionalPositional b @73
+                type: B<E1, E2>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @77
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @83
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Never, Never>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T1: Never, T2: Never}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @84
+                      rightParenthesis: ) @85
+                    staticType: B<Never, Never>
+            returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodNG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C<T> {
+  void foo([B<T> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          foo @48
+            parameters
+              optionalPositional b @58
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    keyword: const @62
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: B @68
+                          staticElement: self::@class::B
+                          staticType: null
+                        type: B<Never>
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @69
+                      rightParenthesis: ) @70
+                    staticType: B<Never>
+            returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_class() async {
+    var library = await buildLibrary(r'''
+class A {}
+class A {
+  var x;
+}
+class A {
+  var y = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class A @17
+        fields
+          x @27
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+      class A @38
+        fields
+          y @48
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get y @-1
+            returnType: int
+          synthetic set y @-1
+            parameters
+              requiredPositional _y @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_classTypeAlias() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B {}
+class X = A with M;
+class X = B with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class alias X @28
+        supertype: A
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+      class alias X @48
+        supertype: B
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::B::@constructor::•
+            superConstructor: self::@class::B::@constructor::•
+    mixins
+      mixin M @68
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_duplicateDeclaration_enum() async {
+    var library = await buildLibrary(r'''
+enum E {a, b}
+enum E {c, d, e}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @8
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+      enum E @19
+        supertype: Enum
+        fields
+          static const enumConstant c @22
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant d @25
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant e @28
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                  SimpleIdentifier
+                    token: d @-1
+                    staticElement: self::@enum::E::@getter::d
+                    staticType: E
+                  SimpleIdentifier
+                    token: e @-1
+                    staticElement: self::@enum::E::@getter::e
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get d @-1
+            returnType: E
+          synthetic static get e @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_duplicateDeclaration_extension() async {
+    var library = await buildLibrary(r'''
+class A {}
+extension E on A {}
+extension E on A {
+  static var x;
+}
+extension E on A {
+  static var y = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+      E @41
+        extendedType: A
+        fields
+          static x @63
+            type: dynamic
+        accessors
+          synthetic static get x @-1
+            returnType: dynamic
+          synthetic static set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+      E @78
+        extendedType: A
+        fields
+          static y @100
+            type: int
+        accessors
+          synthetic static get y @-1
+            returnType: int
+          synthetic static set y @-1
+            parameters
+              requiredPositional _y @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_function() async {
+    var library = await buildLibrary(r'''
+void f() {}
+void f(int a) {}
+void f([int b, double c]) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
+      f @17
+        parameters
+          requiredPositional a @23
+            type: int
+        returnType: void
+      f @34
+        parameters
+          optionalPositional b @41
+            type: int
+          optionalPositional c @51
+            type: double
+        returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_functionTypeAlias() async {
+    var library = await buildLibrary(r'''
+typedef void F();
+typedef void F(int a);
+typedef void F([int b, double c]);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      functionTypeAliasBased F @31
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @37
+              type: int
+          returnType: void
+      functionTypeAliasBased F @54
+        aliasedType: void Function([int, double])
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            optionalPositional b @61
+              type: int
+            optionalPositional c @71
+              type: double
+          returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_mixin() async {
+    var library = await buildLibrary(r'''
+mixin A {}
+mixin A {
+  var x;
+}
+mixin A {
+  var y = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin A @6
+        superclassConstraints
+          Object
+      mixin A @17
+        superclassConstraints
+          Object
+        fields
+          x @27
+            type: dynamic
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+      mixin A @38
+        superclassConstraints
+          Object
+        fields
+          y @48
+            type: int
+        accessors
+          synthetic get y @-1
+            returnType: int
+          synthetic set y @-1
+            parameters
+              requiredPositional _y @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+bool x;
+var x;
+var x = 1;
+var x = 2.3;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @5
+        type: bool
+      static x @12
+        type: dynamic
+      static x @19
+        type: int
+      static x @30
+        type: double
+    accessors
+      synthetic static get x @-1
+        returnType: bool
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: bool
+        returnType: void
+      synthetic static get x @-1
+        returnType: dynamic
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: dynamic
+        returnType: void
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+      synthetic static get x @-1
+        returnType: double
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: double
+        returnType: void
+''');
+  }
+
+  test_enum_constant_inference() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  int(1), string('2');
+  const E(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @7
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          static const enumConstant int @14
+            type: E<int>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<int>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: int}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @18
+                      staticType: int
+                  rightParenthesis: ) @0
+                staticType: E<int>
+          static const enumConstant string @22
+            type: E<String>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<String>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: String}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleStringLiteral
+                      literal: '2' @29
+                  rightParenthesis: ) @0
+                staticType: E<String>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: int @-1
+                    staticElement: self::@enum::E::@getter::int
+                    staticType: E<int>
+                  SimpleIdentifier
+                    token: string @-1
+                    staticElement: self::@enum::E::@getter::string
+                    staticType: E<String>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          const @43
+            parameters
+              requiredPositional a @47
+                type: T
+        accessors
+          synthetic static get int @-1
+            returnType: E<int>
+          synthetic static get string @-1
+            returnType: E<String>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  /// Test that a constant named `_name` renames the synthetic `name` field.
+  test_enum_constant_name() async {
+    var library = await buildLibrary(r'''
+enum E {
+  _name;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant _name @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: _name @-1
+                    staticElement: self::@enum::E::@getter::_name
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get _name @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constant_typeArguments() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v<double>(42);
+  const E(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @7
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          static const enumConstant v @14
+            type: E<double>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @15
+                      arguments
+                        NamedType
+                          name: SimpleIdentifier
+                            token: double @16
+                            staticElement: dart:core::@class::double
+                            staticType: null
+                          type: double
+                      rightBracket: > @22
+                    type: E<double>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: double}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @24
+                      staticType: double
+                  rightParenthesis: ) @0
+                staticType: E<double>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<double>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          const @37
+            parameters
+              requiredPositional a @41
+                type: T
+        accessors
+          synthetic static get v @-1
+            returnType: E<double>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_constant_underscore() async {
+    var library = await buildLibrary('''
+enum E {
+  _
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant _ @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: _ @-1
+                    staticElement: self::@enum::E::@getter::_
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get _ @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_factory_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  factory E.named() => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          factory named @26
+            periodOffset: 25
+            nameEnd: 31
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_factory_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  factory E() => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          factory @24
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_fieldFormal_functionTyped_withReturnType() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  const E(int this.x(double a));
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final x @22
+            type: dynamic
+        constructors
+          const @33
+            parameters
+              requiredPositional final this.x @44
+                type: int Function(double)
+                parameters
+                  requiredPositional a @53
+                    type: double
+                field: self::@enum::E::@field::x
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_fieldFormal_multiple_matching_fields() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  final int x;
+  final String x;
+  const E(this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final x @26
+            type: int
+          final x @44
+            type: String
+        constructors
+          const @55
+            parameters
+              requiredPositional final this.x @62
+                type: int
+                field: self::@enum::E::@field::x
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get x @-1
+            returnType: int
+          synthetic get x @-1
+            returnType: String
+''');
+  }
+
+  test_enum_constructor_fieldFormal_no_matching_field() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  const E(this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          const @22
+            parameters
+              requiredPositional final this.x @29
+                type: dynamic
+                field: <null>
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_fieldFormal_typed_typed() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  final num x;
+  const E(int this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final x @26
+            type: num
+        constructors
+          const @37
+            parameters
+              requiredPositional final this.x @48
+                type: int
+                field: self::@enum::E::@field::x
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get x @-1
+            returnType: num
+''');
+  }
+
+  test_enum_constructor_fieldFormal_untyped_typed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  E(int this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final x @22
+            type: dynamic
+        constructors
+          @27
+            parameters
+              requiredPositional final this.x @38
+                type: int
+                field: self::@enum::E::@field::x
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_fieldFormal_untyped_untyped() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  E(this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final x @22
+            type: dynamic
+        constructors
+          @27
+            parameters
+              requiredPositional final this.x @34
+                type: dynamic
+                field: self::@enum::E::@field::x
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_generative_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v.named(42);
+  const E.named(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  period: . @0
+                  name: SimpleIdentifier
+                    token: named @-1
+                    staticElement: self::@enum::E::@constructor::named
+                    staticType: null
+                  staticElement: self::@enum::E::@constructor::named
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @19
+                      staticType: int
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          const named @34
+            periodOffset: 33
+            nameEnd: 39
+            parameters
+              requiredPositional a @44
+                type: int
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_generative_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v(42);
+  const E(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @13
+                      staticType: int
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          const @26
+            parameters
+              requiredPositional a @32
+                type: int
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_initializer() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v;
+  final int x;
+  const E(T? a) : assert(a is T), x = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @7
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          static const enumConstant v @14
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+          final x @29
+            type: int
+        constructors
+          const @40
+            parameters
+              requiredPositional a @45
+                type: T?
+            constantInitializers
+              AssertInitializer
+                assertKeyword: assert @50
+                leftParenthesis: ( @56
+                condition: IsExpression
+                  expression: SimpleIdentifier
+                    token: a @57
+                    staticElement: a@45
+                    staticType: T?
+                  isOperator: is @59
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: T @62
+                      staticElement: T@7
+                      staticType: null
+                    type: T
+                  staticType: bool
+                rightParenthesis: ) @63
+              ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @66
+                  staticElement: self::@enum::E::@field::x
+                  staticType: null
+                equals: = @68
+                expression: IntegerLiteral
+                  literal: 0 @70
+                  staticType: int
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+          synthetic get x @-1
+            returnType: int
+''');
+  }
+
+  test_enum_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+enum E { v }''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @65
+        documentationComment: /**\n * Docs\n */
+        supertype: Enum
+        fields
+          static const enumConstant v @69
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_field() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final foo = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          final foo @22
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @28
+                staticType: int
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic get foo @-1
+            returnType: int
+''');
+  }
+
+  test_enum_getter() async {
+    var library = await buildLibrary(r'''
+enum E{
+  v;
+  int get foo => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @10
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          get foo @23
+            returnType: int
+''');
+  }
+
+  test_enum_interfaces() async {
+    var library = await buildLibrary(r'''
+class I {}
+enum E implements I {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class I @6
+        constructors
+          synthetic @-1
+    enums
+      enum E @16
+        supertype: Enum
+        interfaces
+          I
+        fields
+          static const enumConstant v @35
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_interfaces_generic() async {
+    var library = await buildLibrary(r'''
+class I<T> {}
+enum E<U> implements I<U> {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class I @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    enums
+      enum E @19
+        typeParameters
+          covariant U @21
+            defaultType: dynamic
+        supertype: Enum
+        interfaces
+          I<U>
+        fields
+          static const enumConstant v @44
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {U: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_interfaces_unresolved() async {
+    var library = await buildLibrary('''
+class X {}
+class Z {}
+enum E implements X, Y, Z {
+  v
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class X @6
+        constructors
+          synthetic @-1
+      class Z @17
+        constructors
+          synthetic @-1
+    enums
+      enum E @27
+        supertype: Enum
+        interfaces
+          X
+          Z
+        fields
+          static const enumConstant v @52
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_method() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v;
+  int foo<U>(T t, U u) => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @7
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          static const enumConstant v @14
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+        methods
+          foo @23
+            typeParameters
+              covariant U @27
+            parameters
+              requiredPositional t @32
+                type: T
+              requiredPositional u @37
+                type: U
+            returnType: int
+''');
+  }
+
+  test_enum_method_toString() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  String toString() => 'E';
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+        methods
+          toString @23
+            returnType: String
+''');
+  }
+
+  test_enum_mixins() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+enum E with M {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @16
+        supertype: Enum
+        mixins
+          M
+        fields
+          static const enumConstant v @29
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_enum_mixins_inference() async {
+    var library = await buildLibrary(r'''
+mixin M1<T> {}
+mixin M2<T> on M1<T> {}
+enum E with M1<int>, M2 {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @44
+        supertype: Enum
+        mixins
+          M1<int>
+          M2<int>
+        fields
+          static const enumConstant v @67
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    mixins
+      mixin M1 @6
+        typeParameters
+          covariant T @9
+            defaultType: dynamic
+        superclassConstraints
+          Object
+      mixin M2 @21
+        typeParameters
+          covariant T @24
+            defaultType: dynamic
+        superclassConstraints
+          M1<T>
+''');
+  }
+
+  test_enum_setter() async {
+    var library = await buildLibrary(r'''
+enum E{
+  v;
+  set foo(int _) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @10
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+          set foo @19
+            parameters
+              requiredPositional _ @27
+                type: int
+            returnType: void
+''');
+  }
+
+  test_enum_typeParameters() async {
+    var library = await buildLibrary('''
+enum E<T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @7
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          static const enumConstant v @14
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_bound() async {
+    var library = await buildLibrary('''
+enum E<T extends num, U extends T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      notSimplyBounded enum E @5
+        typeParameters
+          covariant T @7
+            bound: num
+            defaultType: num
+          covariant U @22
+            bound: T
+            defaultType: num
+        supertype: Enum
+        fields
+          static const enumConstant v @39
+            type: E<num, num>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<num, num>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: num, U: num}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<num, num>
+          synthetic static const values @-1
+            type: List<E<num, num>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<num, num>
+                rightBracket: ] @0
+                staticType: List<E<num, num>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<num, num>
+          synthetic static get values @-1
+            returnType: List<E<num, num>>
+''');
+  }
+
+  test_enum_typeParameters_cycle_1of1() async {
+    var library = await buildLibrary('''
+enum E<T extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      notSimplyBounded enum E @5
+        typeParameters
+          covariant T @7
+            bound: dynamic
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_cycle_2of3() async {
+    var library = await buildLibrary(r'''
+enum E<T extends V, U extends num, V extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      notSimplyBounded enum E @5
+        typeParameters
+          covariant T @7
+            bound: dynamic
+            defaultType: dynamic
+          covariant U @20
+            bound: num
+            defaultType: num
+          covariant V @35
+            bound: dynamic
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic, num, dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic, num, dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic, num, dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_defaultType_cycle_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+enum E<T extends void Function(E)> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      notSimplyBounded enum E @5
+        typeParameters
+          covariant T @7
+            bound: void Function(E<dynamic>)
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('''
+enum E<in T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('''
+enum E<out T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('''
+enum E<inout T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          invariant T @13
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('''
+enum E<inout T, in U, out V> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        typeParameters
+          invariant T @13
+            defaultType: dynamic
+          contravariant U @19
+            defaultType: dynamic
+          covariant V @26
+            defaultType: dynamic
+        supertype: Enum
+        fields
+          synthetic static const values @-1
+            type: List<E<dynamic, dynamic, dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<E<dynamic, dynamic, dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get values @-1
+            returnType: List<E<dynamic, dynamic, dynamic>>
+''');
+  }
+
+  test_enum_value_documented() async {
+    var library = await buildLibrary('''
+enum E {
+  /**
+   * aaa
+   */
+  a,
+  /// bbb
+  b
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @32
+            documentationComment: /**\n   * aaa\n   */
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @47
+            documentationComment: /// bbb
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enum_value_documented_withMetadata() async {
+    var library = await buildLibrary('''
+enum E {
+  /**
+   * aaa
+   */
+  @annotation
+  a,
+  /// bbb
+  @annotation
+  b,
+}
+
+const int annotation = 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @46
+            documentationComment: /**\n   * aaa\n   */
+            metadata
+              Annotation
+                atSign: @ @32
+                name: SimpleIdentifier
+                  token: annotation @33
+                  staticElement: self::@getter::annotation
+                  staticType: null
+                element: self::@getter::annotation
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @75
+            documentationComment: /// bbb
+            metadata
+              Annotation
+                atSign: @ @61
+                name: SimpleIdentifier
+                  token: annotation @62
+                  staticElement: self::@getter::annotation
+                  staticType: null
+                element: self::@getter::annotation
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static const annotation @91
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @104
+            staticType: int
+    accessors
+      synthetic static get annotation @-1
+        returnType: int
+''');
+  }
+
+  test_enum_values() async {
+    var library = await buildLibrary('enum E { v1, v2 }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v1 @9
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant v2 @13
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v1 @-1
+                    staticElement: self::@enum::E::@getter::v1
+                    staticType: E
+                  SimpleIdentifier
+                    token: v2 @-1
+                    staticElement: self::@enum::E::@getter::v2
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v1 @-1
+            returnType: E
+          synthetic static get v2 @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_enums() async {
+    var library = await buildLibrary('enum E1 { v1 } enum E2 { v2 }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E1 @5
+        supertype: Enum
+        fields
+          static const enumConstant v1 @10
+            type: E1
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E1 @-1
+                      staticElement: self::@enum::E1
+                      staticType: null
+                    type: E1
+                  staticElement: self::@enum::E1::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E1
+          synthetic static const values @-1
+            type: List<E1>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v1 @-1
+                    staticElement: self::@enum::E1::@getter::v1
+                    staticType: E1
+                rightBracket: ] @0
+                staticType: List<E1>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v1 @-1
+            returnType: E1
+          synthetic static get values @-1
+            returnType: List<E1>
+      enum E2 @20
+        supertype: Enum
+        fields
+          static const enumConstant v2 @25
+            type: E2
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E2 @-1
+                      staticElement: self::@enum::E2
+                      staticType: null
+                    type: E2
+                  staticElement: self::@enum::E2::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E2
+          synthetic static const values @-1
+            type: List<E2>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v2 @-1
+                    staticElement: self::@enum::E2::@getter::v2
+                    staticType: E2
+                rightBracket: ] @0
+                staticType: List<E2>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v2 @-1
+            returnType: E2
+          synthetic static get values @-1
+            returnType: List<E2>
+''');
+  }
+
+  test_error_extendsEnum() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+
+class M {}
+
+class A extends E {
+  foo() {}
+}
+
+class B implements E, M {
+  foo() {}
+}
+
+class C extends Object with E, M {
+  foo() {}
+}
+
+class D = Object with M, E;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class M @24
+        constructors
+          synthetic @-1
+      class A @36
+        constructors
+          synthetic @-1
+        methods
+          foo @52
+            returnType: dynamic
+      class B @70
+        interfaces
+          M
+        constructors
+          synthetic @-1
+        methods
+          foo @92
+            returnType: dynamic
+      class C @110
+        supertype: Object
+        mixins
+          M
+        constructors
+          synthetic @-1
+        methods
+          foo @141
+            returnType: dynamic
+      class alias D @159
+        supertype: Object
+        mixins
+          M
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @8
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant c @14
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_executable_parameter_type_typedef() async {
+    var library = await buildLibrary(r'''
+typedef F(int p);
+main(F f) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @14
+              type: int
+          returnType: dynamic
+    functions
+      main @18
+        parameters
+          requiredPositional f @25
+            type: dynamic Function(int)
+              alias: self::@typeAlias::F
+        returnType: dynamic
+''');
+  }
+
+  test_export_class() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    C: package:test/a.dart;C
+''',
+        withExportScope: true);
+  }
+
+  test_export_class_type_alias() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C = _D with _E;
+class _D {}
+class _E {}
+''');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    C: package:test/a.dart;C
+''',
+        withExportScope: true);
+  }
+
+  test_export_configurations_useDefault() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/foo.dart
+  definingUnit
+  exportScope
+    A: package:test/foo.dart;A
+''',
+        withExportScope: true);
+    expect(library.exports[0].exportedLibrary!.source.shortName, 'foo.dart');
+  }
+
+  test_export_configurations_useFirst() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/foo_io.dart
+  definingUnit
+  exportScope
+    A: package:test/foo_io.dart;A
+''',
+        withExportScope: true);
+    expect(library.exports[0].exportedLibrary!.source.shortName, 'foo_io.dart');
+  }
+
+  test_export_configurations_useSecond() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/foo_html.dart
+  definingUnit
+  exportScope
+    A: package:test/foo_html.dart;A
+''',
+        withExportScope: true);
+    ExportElement export = library.exports[0];
+    expect(export.exportedLibrary!.source.shortName, 'foo_html.dart');
+  }
+
+  test_export_function() async {
+    addSource('$testPackageLibPath/a.dart', 'f() {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    f: package:test/a.dart;f
+''',
+        withExportScope: true);
+  }
+
+  test_export_getter() async {
+    addSource('$testPackageLibPath/a.dart', 'get f() => null;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_export_hide() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' hide A, C;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+      combinators
+        hide: A, C
+  definingUnit
+  exportScope
+    B: package:test/a.dart;B
+    D: package:test/a.dart;D
+''',
+        withExportScope: true);
+  }
+
+  test_export_multiple_combinators() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' hide A show C;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+      combinators
+        hide: A
+        show: C
+  definingUnit
+  exportScope
+    C: package:test/a.dart;C
+''',
+        withExportScope: true);
+  }
+
+  test_export_setter() async {
+    addSource('$testPackageLibPath/a.dart', 'void set f(value) {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    f=: package:test/a.dart;f=
+''',
+        withExportScope: true);
+  }
+
+  test_export_show() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' show A, C;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+      combinators
+        show: A, C
+  definingUnit
+  exportScope
+    A: package:test/a.dart;A
+    C: package:test/a.dart;C
+''',
+        withExportScope: true);
+  }
+
+  test_export_show_getter_setter() async {
+    addSource('$testPackageLibPath/a.dart', '''
+get f => null;
+void set f(value) {}
+''');
+    var library = await buildLibrary('export "a.dart" show f;');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+      combinators
+        show: f
+  definingUnit
+  exportScope
+    f: package:test/a.dart;f?
+    f=: package:test/a.dart;f=
+''',
+        withExportScope: true);
+  }
+
+  test_export_typedef() async {
+    addSource('$testPackageLibPath/a.dart', 'typedef F();');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    F: package:test/a.dart;F
+''',
+        withExportScope: true);
+  }
+
+  test_export_uri() async {
+    var library = await buildLibrary('''
+export 'foo.dart';
+''');
+    expect(library.exports[0].uri, 'foo.dart');
+  }
+
+  test_export_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'var x;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    x: package:test/a.dart;x?
+    x=: package:test/a.dart;x=
+''',
+        withExportScope: true);
+  }
+
+  test_export_variable_const() async {
+    addSource('$testPackageLibPath/a.dart', 'const x = 0;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    x: package:test/a.dart;x?
+''',
+        withExportScope: true);
+  }
+
+  test_export_variable_final() async {
+    addSource('$testPackageLibPath/a.dart', 'final x = 0;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+  exportScope
+    x: package:test/a.dart;x?
+''',
+        withExportScope: true);
+  }
+
+  test_exportImport_configurations_useDefault() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo.dart');
+  }
+
+  test_exportImport_configurations_useFirst() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'true',
+      'dart.library.html': 'false',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_exportImport_configurations_useSecond() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_exports() async {
+    addSource('$testPackageLibPath/a.dart', 'library a;');
+    addSource('$testPackageLibPath/b.dart', 'library b;');
+    var library = await buildLibrary('export "a.dart"; export "b.dart";');
+    checkElementText(
+        library,
+        r'''
+library
+  exports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+  exportScope
+''',
+        withExportScope: true);
+  }
+
+  test_expr_invalid_typeParameter_asPrefix() async {
+    var library = await buildLibrary('''
+class C<T> {
+  final f = T.k;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final f @21
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @-1
+            returnType: dynamic
+''');
+  }
+
+  test_extension_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// aaa
+/// bbbb
+/// cc
+extension E on int {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @34
+        documentationComment: /// aaa\n/// bbbb\n/// cc
+        extendedType: int
+''');
+  }
+
+  test_extension_field_inferredType_const() async {
+    var library = await buildLibrary('''
+extension E on int {
+  static const x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @10
+        extendedType: int
+        fields
+          static const x @36
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @40
+                staticType: int
+        accessors
+          synthetic static get x @-1
+            returnType: int
+''');
+  }
+
+  test_function_async() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Future f() async {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    functions
+      f @28 async
+        returnType: Future<dynamic>
+''');
+  }
+
+  test_function_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Stream f() async* {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    functions
+      f @28 async*
+        returnType: Stream<dynamic>
+''');
+  }
+
+  test_function_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+f() {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @60
+        documentationComment: /**\n * Docs\n */
+        returnType: dynamic
+''');
+  }
+
+  test_function_entry_point() async {
+    var library = await buildLibrary('main() {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        returnType: dynamic
+''');
+  }
+
+  test_function_entry_point_in_export() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_function_entry_point_in_export_hidden() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
+    var library = await buildLibrary('export "a.dart" hide main;');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+      combinators
+        hide: main
+  definingUnit
+''');
+  }
+
+  test_function_entry_point_in_part() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib; main() {}');
+    var library = await buildLibrary('library my.lib; part "a.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      functions
+        main @16
+          returnType: dynamic
+''');
+  }
+
+  test_function_external() async {
+    var library = await buildLibrary('external f();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      external f @9
+        returnType: dynamic
+''');
+  }
+
+  test_function_hasImplicitReturnType_false() async {
+    var library = await buildLibrary('''
+int f() => 0;
+''');
+    var f = library.definingCompilationUnit.functions.single;
+    expect(f.hasImplicitReturnType, isFalse);
+  }
+
+  test_function_hasImplicitReturnType_true() async {
+    var library = await buildLibrary('''
+f() => 0;
+''');
+    var f = library.definingCompilationUnit.functions.single;
+    expect(f.hasImplicitReturnType, isTrue);
+  }
+
+  test_function_parameter_const() async {
+    var library = await buildLibrary('''
+void f(const x) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional x @13
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal() async {
+    var library = await buildLibrary('''
+void f(int this.a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional final this.a @16
+            type: int
+            field: <null>
+        returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal_default() async {
+    var library = await buildLibrary('''
+void f({int this.a: 42}) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          optionalNamed final this.a @17
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @20
+                staticType: int
+            field: <null>
+        returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal_functionTyped() async {
+    var library = await buildLibrary('''
+void f(int this.a(int b)) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional final this.a @16
+            type: int Function(int)
+            parameters
+              requiredPositional b @22
+                type: int
+            field: <null>
+        returnType: void
+''');
+  }
+
+  test_function_parameter_final() async {
+    var library = await buildLibrary('f(final x) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional final x @8
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_named() async {
+    var library = await buildLibrary('f({x}) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          optionalNamed x @3
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_positional() async {
+    var library = await buildLibrary('f([x]) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          optionalPositional x @3
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_required() async {
+    var library = await buildLibrary('f(x) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional x @2
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_parameters() async {
+    var library = await buildLibrary('f(g(x, y)) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @2
+            type: dynamic Function(dynamic, dynamic)
+            parameters
+              requiredPositional x @4
+                type: dynamic
+              requiredPositional y @7
+                type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_return_type() async {
+    var library = await buildLibrary('f(int g()) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @6
+            type: int Function()
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_return_type_void() async {
+    var library = await buildLibrary('f(void g()) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @7
+            type: void Function()
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameter_type() async {
+    var library = await buildLibrary('f(int i) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional i @6
+            type: int
+        returnType: dynamic
+''');
+  }
+
+  test_function_parameters() async {
+    var library = await buildLibrary('f(x, y) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional x @2
+            type: dynamic
+          requiredPositional y @5
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_function_return_type() async {
+    var library = await buildLibrary('int f() => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @4
+        returnType: int
+''');
+  }
+
+  test_function_return_type_implicit() async {
+    var library = await buildLibrary('f() => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+''');
+  }
+
+  test_function_return_type_void() async {
+    var library = await buildLibrary('void f() {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
+''');
+  }
+
+  test_function_type_parameter() async {
+    var library = await buildLibrary('T f<T, U>(U u) => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @2
+        typeParameters
+          covariant T @4
+          covariant U @7
+        parameters
+          requiredPositional u @12
+            type: U
+        returnType: T
+''');
+  }
+
+  test_function_type_parameter_with_function_typed_parameter() async {
+    var library = await buildLibrary('void f<T, U>(T x(U u)) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional x @15
+            type: T Function(U)
+            parameters
+              requiredPositional u @19
+                type: U
+        returnType: void
+''');
+  }
+
+  test_function_typed_parameter_implicit() async {
+    var library = await buildLibrary('f(g()) => null;');
+    expect(
+        library
+            .definingCompilationUnit.functions[0].parameters[0].hasImplicitType,
+        isFalse);
+  }
+
+  test_functions() async {
+    var library = await buildLibrary('f() {} g() {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+      g @7
+        returnType: dynamic
+''');
+  }
+
+  test_functionTypeAlias_enclosingElements() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(int a);
+''');
+    var unit = library.definingCompilationUnit;
+
+    var F = unit.typeAliases[0];
+    expect(F.name, 'F');
+
+    var T = F.typeParameters[0];
+    expect(T.name, 'T');
+    expect(T.enclosingElement, same(F));
+
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    expect(function.enclosingElement, same(F));
+
+    var a = function.parameters[0];
+    expect(a.name, 'a');
+    expect(a.enclosingElement, same(function));
+  }
+
+  test_functionTypeAlias_type_element() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>();
+F<int> a;
+''');
+    var unit = library.definingCompilationUnit;
+    var type = unit.topLevelVariables[0].type as FunctionType;
+
+    expect(type.alias!.element, same(unit.typeAliases[0]));
+    _assertTypeStrings(type.alias!.typeArguments, ['int']);
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          contravariant T @15
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @20
+              type: T
+          returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef void F1<T>(T a);
+typedef F1<T> F2<T>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @13
+        typeParameters
+          contravariant T @16
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @21
+              type: T
+          returnType: void
+      functionTypeAliasBased F2 @39
+        typeParameters
+          contravariant T @42
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant3() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> F2<T>();
+typedef void F1<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F2 @14
+        typeParameters
+          contravariant T @17
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+      functionTypeAliasBased F1 @36
+        typeParameters
+          contravariant T @39
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @44
+              type: T
+          returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef List<T> F<T>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @16
+        typeParameters
+          covariant T @18
+            defaultType: dynamic
+        aliasedType: List<T> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<T>
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant3() async {
+    var library = await buildLibrary(r'''
+typedef T F1<T>();
+typedef F1<T> F2<T>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @10
+        typeParameters
+          covariant T @13
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      functionTypeAliasBased F2 @33
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        aliasedType: T Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T Function()
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant4() async {
+    var library = await buildLibrary(r'''
+typedef void F1<T>(T a);
+typedef void F2<T>(F1<T> a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @13
+        typeParameters
+          contravariant T @16
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @21
+              type: T
+          returnType: void
+      functionTypeAliasBased F2 @38
+        typeParameters
+          covariant T @41
+            defaultType: dynamic
+        aliasedType: void Function(void Function(T))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @50
+              type: void Function(T)
+                alias: self::@typeAlias::F1
+                  typeArguments
+                    T
+          returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_invariant() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          invariant T @12
+            defaultType: dynamic
+        aliasedType: T Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @17
+              type: T
+          returnType: T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_invariant2() async {
+    var library = await buildLibrary(r'''
+typedef T F1<T>();
+typedef F1<T> F2<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @10
+        typeParameters
+          covariant T @13
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      functionTypeAliasBased F2 @33
+        typeParameters
+          invariant T @36
+            defaultType: dynamic
+        aliasedType: T Function() Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @41
+              type: T
+          returnType: T Function()
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_unrelated() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(int a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @22
+              type: int
+          returnType: void
+''');
+  }
+
+  test_futureOr() async {
+    var library = await buildLibrary('import "dart:async"; FutureOr<int> x;');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static x @35
+        type: FutureOr<int>
+    accessors
+      synthetic static get x @-1
+        returnType: FutureOr<int>
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: FutureOr<int>
+        returnType: void
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(1));
+    _assertTypeStr(variables[0].type, 'FutureOr<int>');
+  }
+
+  test_futureOr_const() async {
+    var library =
+        await buildLibrary('import "dart:async"; const x = FutureOr;');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static const x @27
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            token: FutureOr @31
+            staticElement: dart:async::@class::FutureOr
+            staticType: Type
+    accessors
+      synthetic static get x @-1
+        returnType: Type
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(1));
+    var x = variables[0] as ConstTopLevelVariableElementImpl;
+    _assertTypeStr(x.type, 'Type');
+    expect(x.constantInitializer.toString(), 'FutureOr');
+  }
+
+  test_futureOr_inferred() async {
+    var library = await buildLibrary('''
+import "dart:async";
+FutureOr<int> f() => null;
+var x = f();
+var y = x.then((z) => z.asDouble());
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static x @52
+        type: FutureOr<int>
+      static y @65
+        type: dynamic
+    accessors
+      synthetic static get x @-1
+        returnType: FutureOr<int>
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: FutureOr<int>
+        returnType: void
+      synthetic static get y @-1
+        returnType: dynamic
+      synthetic static set y @-1
+        parameters
+          requiredPositional _y @-1
+            type: dynamic
+        returnType: void
+    functions
+      f @35
+        returnType: FutureOr<int>
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(2));
+    var x = variables[0];
+    expect(x.name, 'x');
+    var y = variables[1];
+    expect(y.name, 'y');
+    _assertTypeStr(x.type, 'FutureOr<int>');
+    _assertTypeStr(y.type, 'dynamic');
+  }
+
+  test_generic_function_type_nullability_none() async {
+    var library = await buildLibrary('''
+void Function() f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @16
+        type: void Function()
+    accessors
+      synthetic static get f @-1
+        returnType: void Function()
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: void Function()
+        returnType: void
+''');
+  }
+
+  test_generic_function_type_nullability_question() async {
+    var library = await buildLibrary('''
+void Function()? f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @17
+        type: void Function()?
+    accessors
+      synthetic static get f @-1
+        returnType: void Function()?
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: void Function()?
+        returnType: void
+''');
+  }
+
+  test_generic_function_type_nullability_star() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+void Function() f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @16
+        type: void Function()*
+    accessors
+      synthetic static get f @-1
+        returnType: void Function()*
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: void Function()*
+        returnType: void
+''');
+  }
+
+  test_generic_gClass_gMethodStatic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  static void m<V, W>(V v, W w) {
+    void f<X, Y>(V v, W w, X x, Y y) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          static m @30
+            typeParameters
+              covariant V @32
+              covariant W @35
+            parameters
+              requiredPositional v @40
+                type: V
+              requiredPositional w @45
+                type: W
+            returnType: void
+''');
+  }
+
+  test_genericFunction_asFunctionReturnType() async {
+    var library = await buildLibrary(r'''
+int Function(int a, String b) f() => null;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @30
+        returnType: int Function(int, String)
+''');
+  }
+
+  test_genericFunction_asFunctionTypedParameterReturnType() async {
+    var library = await buildLibrary(r'''
+void f(int Function(int a, String b) p(num c)) => null;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional p @37
+            type: int Function(int, String) Function(num)
+            parameters
+              requiredPositional c @43
+                type: num
+        returnType: void
+''');
+  }
+
+  test_genericFunction_asGenericFunctionReturnType() async {
+    var library = await buildLibrary(r'''
+typedef F = void Function(String a) Function(int b);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function(String) Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional b @49
+              type: int
+          returnType: void Function(String)
+''');
+  }
+
+  test_genericFunction_asMethodReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  int Function(int a, String b) m() => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @42
+            returnType: int Function(int, String)
+''');
+  }
+
+  test_genericFunction_asParameterType() async {
+    var library = await buildLibrary(r'''
+void f(int Function(int a, String b) p) => null;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional p @37
+            type: int Function(int, String)
+        returnType: void
+''');
+  }
+
+  test_genericFunction_asTopLevelVariableType() async {
+    var library = await buildLibrary(r'''
+int Function(int a, String b) v;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @30
+        type: int Function(int, String)
+    accessors
+      synthetic static get v @-1
+        returnType: int Function(int, String)
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int Function(int, String)
+        returnType: void
+''');
+  }
+
+  test_genericFunction_asTypeArgument_ofAnnotation_class() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+@A<int Function(String a)>()
+class B {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @64
+        metadata
+          Annotation
+            atSign: @ @29
+            name: SimpleIdentifier
+              token: A @30
+              staticElement: self::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @31
+              arguments
+                GenericFunctionType
+                  returnType: NamedType
+                    name: SimpleIdentifier
+                      token: int @32
+                      staticElement: dart:core::@class::int
+                      staticType: null
+                    type: int
+                  functionKeyword: Function @36
+                  parameters: FormalParameterList
+                    leftParenthesis: ( @44
+                    parameter: SimpleFormalParameter
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: String @45
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      identifier: SimpleIdentifier
+                        token: a @52
+                        staticElement: a@52
+                        staticType: null
+                      declaredElement: a@52
+                      declaredElementType: String
+                    rightParenthesis: ) @53
+                  declaredElement: GenericFunctionTypeElement
+                    parameters
+                      a
+                        kind: required positional
+                        type: String
+                    returnType: int
+                    type: int Function(String)
+                  type: int Function(String)
+              rightBracket: > @54
+            arguments: ArgumentList
+              leftParenthesis: ( @55
+              rightParenthesis: ) @56
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int Function(String)}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_genericFunction_asTypeArgument_ofAnnotation_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+@A<int Function(String a)>()
+var v = 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static v @62
+        metadata
+          Annotation
+            atSign: @ @29
+            name: SimpleIdentifier
+              token: A @30
+              staticElement: self::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @31
+              arguments
+                GenericFunctionType
+                  returnType: NamedType
+                    name: SimpleIdentifier
+                      token: int @32
+                      staticElement: dart:core::@class::int
+                      staticType: null
+                    type: int
+                  functionKeyword: Function @36
+                  parameters: FormalParameterList
+                    leftParenthesis: ( @44
+                    parameter: SimpleFormalParameter
+                      type: NamedType
+                        name: SimpleIdentifier
+                          token: String @45
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      identifier: SimpleIdentifier
+                        token: a @52
+                        staticElement: a@52
+                        staticType: null
+                      declaredElement: a@52
+                      declaredElementType: String
+                    rightParenthesis: ) @53
+                  declaredElement: GenericFunctionTypeElement
+                    parameters
+                      a
+                        kind: required positional
+                        type: String
+                    returnType: int
+                    type: int Function(String)
+                  type: int Function(String)
+              rightBracket: > @54
+            arguments: ArgumentList
+              leftParenthesis: ( @55
+              rightParenthesis: ) @56
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int Function(String)}
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_optionalNamed() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function({int? a})>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function({int? a})>
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @39
+                  staticElement: self::@class::A
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @40
+                  arguments
+                    GenericFunctionType
+                      returnType: NamedType
+                        name: SimpleIdentifier
+                          token: String @41
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      functionKeyword: Function @48
+                      parameters: FormalParameterList
+                        leftParenthesis: ( @56
+                        leftDelimiter: { @57
+                        parameter: DefaultFormalParameter
+                          parameter: SimpleFormalParameter
+                            type: NamedType
+                              name: SimpleIdentifier
+                                token: int @58
+                                staticElement: dart:core::@class::int
+                                staticType: null
+                              question: ? @61
+                              type: int?
+                            identifier: SimpleIdentifier
+                              token: a @63
+                              staticElement: a@63
+                              staticType: null
+                            declaredElement: a@63
+                            declaredElementType: int?
+                          declaredElement: a@63
+                          declaredElementType: int?
+                        rightDelimiter: } @64
+                        rightParenthesis: ) @65
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: optional named
+                            type: int?
+                        returnType: String
+                        type: String Function({int? a})
+                      type: String Function({int? a})
+                  rightBracket: > @66
+                type: A<String Function({int? a})>
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function({int? a})}
+            argumentList: ArgumentList
+              leftParenthesis: ( @67
+              rightParenthesis: ) @68
+            staticType: A<String Function({int? a})>
+    accessors
+      synthetic static get v @-1
+        returnType: A<String Function({int? a})>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_optionalPositional() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function([int? a])>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function([int?])>
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @39
+                  staticElement: self::@class::A
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @40
+                  arguments
+                    GenericFunctionType
+                      returnType: NamedType
+                        name: SimpleIdentifier
+                          token: String @41
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      functionKeyword: Function @48
+                      parameters: FormalParameterList
+                        leftParenthesis: ( @56
+                        leftDelimiter: [ @57
+                        parameter: DefaultFormalParameter
+                          parameter: SimpleFormalParameter
+                            type: NamedType
+                              name: SimpleIdentifier
+                                token: int @58
+                                staticElement: dart:core::@class::int
+                                staticType: null
+                              question: ? @61
+                              type: int?
+                            identifier: SimpleIdentifier
+                              token: a @63
+                              staticElement: a@63
+                              staticType: null
+                            declaredElement: a@63
+                            declaredElementType: int?
+                          declaredElement: a@63
+                          declaredElementType: int?
+                        rightDelimiter: ] @64
+                        rightParenthesis: ) @65
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: optional positional
+                            type: int?
+                        returnType: String
+                        type: String Function([int?])
+                      type: String Function([int?])
+                  rightBracket: > @66
+                type: A<String Function([int?])>
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function([int?])}
+            argumentList: ArgumentList
+              leftParenthesis: ( @67
+              rightParenthesis: ) @68
+            staticType: A<String Function([int?])>
+    accessors
+      synthetic static get v @-1
+        returnType: A<String Function([int?])>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_requiredNamed() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function({required int a})>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function({required int a})>
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @39
+                  staticElement: self::@class::A
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @40
+                  arguments
+                    GenericFunctionType
+                      returnType: NamedType
+                        name: SimpleIdentifier
+                          token: String @41
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      functionKeyword: Function @48
+                      parameters: FormalParameterList
+                        leftParenthesis: ( @56
+                        leftDelimiter: { @57
+                        parameter: DefaultFormalParameter
+                          parameter: SimpleFormalParameter
+                            requiredKeyword: required @58
+                            type: NamedType
+                              name: SimpleIdentifier
+                                token: int @67
+                                staticElement: dart:core::@class::int
+                                staticType: null
+                              type: int
+                            identifier: SimpleIdentifier
+                              token: a @71
+                              staticElement: a@71
+                              staticType: null
+                            declaredElement: a@71
+                            declaredElementType: int
+                          declaredElement: a@71
+                          declaredElementType: int
+                        rightDelimiter: } @72
+                        rightParenthesis: ) @73
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: required named
+                            type: int
+                        returnType: String
+                        type: String Function({required int a})
+                      type: String Function({required int a})
+                  rightBracket: > @74
+                type: A<String Function({required int a})>
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function({required int a})}
+            argumentList: ArgumentList
+              leftParenthesis: ( @75
+              rightParenthesis: ) @76
+            staticType: A<String Function({required int a})>
+    accessors
+      synthetic static get v @-1
+        returnType: A<String Function({required int a})>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_requiredPositional() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function(int a)>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function(int)>
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @39
+                  staticElement: self::@class::A
+                  staticType: null
+                typeArguments: TypeArgumentList
+                  leftBracket: < @40
+                  arguments
+                    GenericFunctionType
+                      returnType: NamedType
+                        name: SimpleIdentifier
+                          token: String @41
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                        type: String
+                      functionKeyword: Function @48
+                      parameters: FormalParameterList
+                        leftParenthesis: ( @56
+                        parameter: SimpleFormalParameter
+                          type: NamedType
+                            name: SimpleIdentifier
+                              token: int @57
+                              staticElement: dart:core::@class::int
+                              staticType: null
+                            type: int
+                          identifier: SimpleIdentifier
+                            token: a @61
+                            staticElement: a@61
+                            staticType: null
+                          declaredElement: a@61
+                          declaredElementType: int
+                        rightParenthesis: ) @62
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: required positional
+                            type: int
+                        returnType: String
+                        type: String Function(int)
+                      type: String Function(int)
+                  rightBracket: > @63
+                type: A<String Function(int)>
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function(int)}
+            argumentList: ArgumentList
+              leftParenthesis: ( @64
+              rightParenthesis: ) @65
+            staticType: A<String Function(int)>
+    accessors
+      synthetic static get v @-1
+        returnType: A<String Function(int)>
+''');
+  }
+
+  test_genericFunction_boundOf_typeParameter_ofMixin() async {
+    var library = await buildLibrary(r'''
+mixin B<X extends void Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin B @6
+        typeParameters
+          covariant X @8
+            bound: void Function()
+            defaultType: void Function()
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_genericFunction_typeArgument_ofSuperclass_ofClassAlias() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M {}
+class B = A<void Function()> with M;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class alias B @31
+        supertype: A<void Function()>
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: void Function()}
+    mixins
+      mixin M @20
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_genericFunction_typeParameter_asTypedefArgument() async {
+    var library = await buildLibrary(r'''
+typedef F1 = Function<V1>(F2<V1>);
+typedef F2<V2> = V2 Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        aliasedType: dynamic Function<V1>(V1 Function())
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant V1 @22
+          parameters
+            requiredPositional @-1
+              type: V1 Function()
+                alias: self::@typeAlias::F2
+                  typeArguments
+                    V1
+          returnType: dynamic
+      F2 @43
+        typeParameters
+          covariant V2 @46
+            defaultType: dynamic
+        aliasedType: V2 Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: V2
+''');
+  }
+
+  test_genericTypeAlias_enclosingElements() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function<U>(int a);
+''');
+    var unit = library.definingCompilationUnit;
+
+    var F = unit.typeAliases[0];
+    expect(F.name, 'F');
+
+    var T = F.typeParameters[0];
+    expect(T.name, 'T');
+    expect(T.enclosingElement, same(F));
+
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    expect(function.enclosingElement, same(F));
+
+    var U = function.typeParameters[0];
+    expect(U.name, 'U');
+    expect(U.enclosingElement, same(function));
+
+    var a = function.parameters[0];
+    expect(a.name, 'a');
+    expect(a.enclosingElement, same(function));
+  }
+
+  test_genericTypeAlias_recursive() async {
+    var library = await buildLibrary('''
+typedef F<X extends F> = Function(F);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated X @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: dynamic Function(dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_getter_async() async {
+    var library = await buildLibrary(r'''
+Future<int> get foo async => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Future<int>
+    accessors
+      static get foo @16 async
+        returnType: Future<int>
+''');
+  }
+
+  test_getter_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Stream<int> get foo async* {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Stream<int>
+    accessors
+      static get foo @37 async*
+        returnType: Stream<int>
+''');
+  }
+
+  test_getter_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+get x => null;''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: dynamic
+    accessors
+      static get x @64
+        documentationComment: /**\n * Docs\n */
+        returnType: dynamic
+''');
+  }
+
+  test_getter_external() async {
+    var library = await buildLibrary('external int get x;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static external get x @17
+        returnType: int
+''');
+  }
+
+  test_getter_inferred_type_nonStatic_implicit_return() async {
+    var library = await buildLibrary(
+        'class C extends D { get f => null; } abstract class D { int get f; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          get f @24
+            returnType: int
+      abstract class D @52
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get f @64
+            returnType: int
+''');
+  }
+
+  test_getter_syncStar() async {
+    var library = await buildLibrary(r'''
+Iterator<int> get foo sync* {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Iterator<int>
+    accessors
+      static get foo @18 sync*
+        returnType: Iterator<int>
+''');
+  }
+
+  test_getters() async {
+    var library = await buildLibrary('int get x => null; get y => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+      synthetic static y @-1
+        type: dynamic
+    accessors
+      static get x @8
+        returnType: int
+      static get y @23
+        returnType: dynamic
+''');
+  }
+
+  test_implicitCallTearoff() async {
+    var library = await buildLibrary(r'''
+class C {
+  void call() {}
+}
+
+class D {
+  const D(C c) : this.named(c);
+
+  const D.named(void Function() f);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          call @17
+            returnType: void
+      class D @36
+        constructors
+          const @48
+            parameters
+              requiredPositional c @52
+                type: C
+            constantInitializers
+              RedirectingConstructorInvocation
+                thisKeyword: this @57
+                period: . @61
+                constructorName: SimpleIdentifier
+                  token: named @62
+                  staticElement: self::@class::D::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @67
+                  arguments
+                    ImplicitCallReference
+                      expression: SimpleIdentifier
+                        token: c @68
+                        staticElement: c@52
+                        staticType: C
+                      staticElement: self::@class::C::@method::call
+                      staticType: void Function()
+                  rightParenthesis: ) @69
+                staticElement: self::@class::D::@constructor::named
+            redirectedConstructor: self::@class::D::@constructor::named
+          const named @83
+            periodOffset: 82
+            nameEnd: 88
+            parameters
+              requiredPositional f @105
+                type: void Function()
+''');
+  }
+
+  test_implicitConstructor_named_const() async {
+    var library = await buildLibrary('''
+class C {
+  final Object x;
+  const C.named(this.x);
+}
+const x = C.named(42);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @25
+            type: Object
+        constructors
+          const named @38
+            periodOffset: 37
+            nameEnd: 43
+            parameters
+              requiredPositional final this.x @49
+                type: Object
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: Object
+    topLevelVariables
+      static const x @61
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @65
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C
+              period: . @66
+              name: SimpleIdentifier
+                token: named @67
+                staticElement: self::@class::C::@constructor::named
+                staticType: null
+              staticElement: self::@class::C::@constructor::named
+            argumentList: ArgumentList
+              leftParenthesis: ( @72
+              arguments
+                IntegerLiteral
+                  literal: 42 @73
+                  staticType: int
+              rightParenthesis: ) @75
+            staticType: C
+    accessors
+      synthetic static get x @-1
+        returnType: C
+''');
+  }
+
+  test_implicitTopLevelVariable_getterFirst() async {
+    var library =
+        await buildLibrary('int get x => 0; void set x(int value) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static get x @8
+        returnType: int
+      static set x @25
+        parameters
+          requiredPositional value @31
+            type: int
+        returnType: void
+''');
+  }
+
+  test_implicitTopLevelVariable_setterFirst() async {
+    var library =
+        await buildLibrary('void set x(int value) {} int get x => 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      static get x @33
+        returnType: int
+''');
+  }
+
+  test_import_configurations_useDefault() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo.dart');
+  }
+
+  test_import_configurations_useFirst() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo_io.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_import_configurations_useFirst_eqTrue() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io == 'true') 'foo_io.dart'
+  if (dart.library.html == 'true') 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo_io.dart
+  definingUnit
+    classes
+      class B @124
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_import_configurations_useSecond() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo_html.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_import_configurations_useSecond_eqTrue() async {
+    declaredVariables = DeclaredVariables.fromMap({
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    });
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io == 'true') 'foo_io.dart'
+  if (dart.library.html == 'true') 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo_html.dart
+  definingUnit
+    classes
+      class B @124
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
+''');
+    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_import_dartCore_explicit() async {
+    var library = await buildLibrary('''
+import 'dart:core';
+import 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:core
+    dart:math
+  definingUnit
+''');
+  }
+
+  test_import_dartCore_implicit() async {
+    var library = await buildLibrary('''
+import 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:math
+  definingUnit
+''');
+  }
+
+  test_import_deferred() async {
+    addSource('$testPackageLibPath/a.dart', 'f() {}');
+    var library = await buildLibrary('''
+import 'a.dart' deferred as p;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart deferred as p @28
+  definingUnit
+''');
+  }
+
+  test_import_export() async {
+    var library = await buildLibrary('''
+import 'dart:async' as i1;
+export 'dart:math';
+import 'dart:async' as i2;
+export 'dart:math';
+import 'dart:async' as i3;
+export 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as i1 @23
+    dart:async as i2 @70
+    dart:async as i3 @117
+  exports
+    dart:math
+    dart:math
+    dart:math
+  definingUnit
+''');
+  }
+
+  test_import_hide() async {
+    var library = await buildLibrary('''
+import 'dart:async' hide Stream, Completer; Future f;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+      combinators
+        hide: Stream, Completer
+  definingUnit
+    topLevelVariables
+      static f @51
+        type: Future<dynamic>
+    accessors
+      synthetic static get f @-1
+        returnType: Future<dynamic>
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: Future<dynamic>
+        returnType: void
+''');
+  }
+
+  test_import_invalidUri_metadata() async {
+    var library = await buildLibrary('''
+@foo
+import 'ht:';
+''');
+    checkElementText(library, r'''
+library
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: foo @1
+        staticElement: <null>
+        staticType: null
+      element: <null>
+  imports
+    <unresolved>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: foo @1
+            staticElement: <null>
+            staticType: null
+          element: <null>
+  definingUnit
+''');
+  }
+
+  test_import_multiple_combinators() async {
+    var library = await buildLibrary('''
+import "dart:async" hide Stream show Future;
+Future f;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+      combinators
+        hide: Stream
+        show: Future
+  definingUnit
+    topLevelVariables
+      static f @52
+        type: Future<dynamic>
+    accessors
+      synthetic static get f @-1
+        returnType: Future<dynamic>
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: Future<dynamic>
+        returnType: void
+''');
+  }
+
+  test_import_prefixed() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
+    var library = await buildLibrary('import "a.dart" as a; a.C c;');
+
+    expect(library.imports[0].prefix!.nameOffset, 19);
+    expect(library.imports[0].prefix!.nameLength, 1);
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as a @19
+  definingUnit
+    topLevelVariables
+      static c @26
+        type: C
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_import_self() async {
+    var library = await buildLibrary('''
+import 'test.dart' as p;
+class C {}
+class D extends p.C {} // Prevent "unused import" warning
+''');
+    expect(library.imports, hasLength(2));
+    expect(library.imports[0].importedLibrary!.location, library.location);
+    expect(library.imports[1].importedLibrary!.isDartCore, true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/test.dart as p @22
+  definingUnit
+    classes
+      class C @31
+        constructors
+          synthetic @-1
+      class D @42
+        supertype: C
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
+''');
+  }
+
+  test_import_show() async {
+    var library = await buildLibrary('''
+import "dart:async" show Future, Stream;
+Future f;
+Stream s;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+      combinators
+        show: Future, Stream
+  definingUnit
+    topLevelVariables
+      static f @48
+        type: Future<dynamic>
+      static s @58
+        type: Stream<dynamic>
+    accessors
+      synthetic static get f @-1
+        returnType: Future<dynamic>
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: Future<dynamic>
+        returnType: void
+      synthetic static get s @-1
+        returnType: Stream<dynamic>
+      synthetic static set s @-1
+        parameters
+          requiredPositional _s @-1
+            type: Stream<dynamic>
+        returnType: void
+''');
+  }
+
+  test_import_show_offsetEnd() async {
+    var library = await buildLibrary('''
+import "dart:math" show e, pi;
+''');
+    var import = library.imports[0];
+    var combinator = import.combinators[0] as ShowElementCombinator;
+    expect(combinator.offset, 19);
+    expect(combinator.end, 29);
+  }
+
+  test_import_uri() async {
+    var library = await buildLibrary('''
+import 'foo.dart';
+''');
+    expect(library.imports[0].uri, 'foo.dart');
+  }
+
+  test_imports() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
+    addSource('$testPackageLibPath/b.dart', 'library b; class D {}');
+    var library =
+        await buildLibrary('import "a.dart"; import "b.dart"; C c; D d;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+    topLevelVariables
+      static c @36
+        type: C
+      static d @41
+        type: D
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get d @-1
+        returnType: D
+      synthetic static set d @-1
+        parameters
+          requiredPositional _d @-1
+            type: D
+        returnType: void
+''');
+  }
+
+  test_infer_generic_typedef_complex() async {
+    var library = await buildLibrary('''
+typedef F<T> = D<T,U> Function<U>();
+class C<V> {
+  const C(F<V> f);
+}
+class D<T,U> {}
+D<int,U> f<U>() => null;
+const x = const C(f);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @43
+        typeParameters
+          covariant V @45
+            defaultType: dynamic
+        constructors
+          const @58
+            parameters
+              requiredPositional f @65
+                type: D<V, U> Function<U>()
+                  alias: self::@typeAlias::F
+                    typeArguments
+                      V
+      class D @77
+        typeParameters
+          covariant T @79
+            defaultType: dynamic
+          covariant U @81
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: D<T, U> Function<U>()
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant U @31
+          returnType: D<T, U>
+    topLevelVariables
+      static const x @118
+        type: C<int>
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @122
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @128
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C<int>
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {V: int}
+            argumentList: ArgumentList
+              leftParenthesis: ( @129
+              arguments
+                SimpleIdentifier
+                  token: f @130
+                  staticElement: self::@function::f
+                  staticType: D<int, U> Function<U>()
+              rightParenthesis: ) @131
+            staticType: C<int>
+    accessors
+      synthetic static get x @-1
+        returnType: C<int>
+    functions
+      f @96
+        typeParameters
+          covariant U @98
+        returnType: D<int, U>
+''');
+  }
+
+  test_infer_generic_typedef_simple() async {
+    var library = await buildLibrary('''
+typedef F = D<T> Function<T>();
+class C {
+  const C(F f);
+}
+class D<T> {}
+D<T> f<T>() => null;
+const x = const C(f);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @38
+        constructors
+          const @50
+            parameters
+              requiredPositional f @54
+                type: D<T> Function<T>()
+                  alias: self::@typeAlias::F
+      class D @66
+        typeParameters
+          covariant T @68
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        aliasedType: D<T> Function<T>()
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @26
+          returnType: D<T>
+    topLevelVariables
+      static const x @101
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            keyword: const @105
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: C @111
+                  staticElement: self::@class::C
+                  staticType: null
+                type: C
+              staticElement: self::@class::C::@constructor::•
+            argumentList: ArgumentList
+              leftParenthesis: ( @112
+              arguments
+                SimpleIdentifier
+                  token: f @113
+                  staticElement: self::@function::f
+                  staticType: D<T> Function<T>()
+              rightParenthesis: ) @114
+            staticType: C
+    accessors
+      synthetic static get x @-1
+        returnType: C
+    functions
+      f @79
+        typeParameters
+          covariant T @81
+        returnType: D<T>
+''');
+  }
+
+  test_infer_instanceCreation_fromArguments() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {}
+
+class S<T extends A> {
+  S(T _);
+}
+
+var s = new S(new B());
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @18
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+      class S @40
+        typeParameters
+          covariant T @42
+            bound: A
+            defaultType: A
+        constructors
+          @59
+            parameters
+              requiredPositional _ @63
+                type: T
+    topLevelVariables
+      static s @74
+        type: S<B>
+    accessors
+      synthetic static get s @-1
+        returnType: S<B>
+      synthetic static set s @-1
+        parameters
+          requiredPositional _s @-1
+            type: S<B>
+        returnType: void
+''');
+  }
+
+  test_infer_property_set() async {
+    var library = await buildLibrary('''
+class A {
+  B b;
+}
+class B {
+  C get c => null;
+  void set c(C value) {}
+}
+class C {}
+class D extends C {}
+var a = new A();
+var x = a.b.c ??= new D();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          b @14
+            type: B
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @-1
+            returnType: B
+          synthetic set b @-1
+            parameters
+              requiredPositional _b @-1
+                type: B
+            returnType: void
+      class B @25
+        fields
+          synthetic c @-1
+            type: C
+        constructors
+          synthetic @-1
+        accessors
+          get c @37
+            returnType: C
+          set c @59
+            parameters
+              requiredPositional value @63
+                type: C
+            returnType: void
+      class C @81
+        constructors
+          synthetic @-1
+      class D @92
+        supertype: C
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
+    topLevelVariables
+      static a @111
+        type: A
+      static x @128
+        type: C
+    accessors
+      synthetic static get a @-1
+        returnType: A
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: A
+        returnType: void
+      synthetic static get x @-1
+        returnType: C
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_inference_issue_32394() async {
+    // Test the type inference involved in dartbug.com/32394
+    var library = await buildLibrary('''
+var x = y.map((a) => a.toString());
+var y = [3];
+var z = x.toList();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: Iterable<String>
+      static y @40
+        type: List<int>
+      static z @53
+        type: List<String>
+    accessors
+      synthetic static get x @-1
+        returnType: Iterable<String>
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: Iterable<String>
+        returnType: void
+      synthetic static get y @-1
+        returnType: List<int>
+      synthetic static set y @-1
+        parameters
+          requiredPositional _y @-1
+            type: List<int>
+        returnType: void
+      synthetic static get z @-1
+        returnType: List<String>
+      synthetic static set z @-1
+        parameters
+          requiredPositional _z @-1
+            type: List<String>
+        returnType: void
+''');
+  }
+
+  test_inference_map() async {
+    var library = await buildLibrary('''
+class C {
+  int p;
+}
+var x = <C>[];
+var y = x.map((c) => c.p);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          p @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get p @-1
+            returnType: int
+          synthetic set p @-1
+            parameters
+              requiredPositional _p @-1
+                type: int
+            returnType: void
+    topLevelVariables
+      static x @25
+        type: List<C>
+      static y @40
+        type: Iterable<int>
+    accessors
+      synthetic static get x @-1
+        returnType: List<C>
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: List<C>
+        returnType: void
+      synthetic static get y @-1
+        returnType: Iterable<int>
+      synthetic static set y @-1
+        parameters
+          requiredPositional _y @-1
+            type: Iterable<int>
+        returnType: void
+''');
+  }
+
+  test_inferred_function_type_for_variable_in_generic_function() async {
+    // In the code below, `x` has an inferred type of `() => int`, with 2
+    // (unused) type parameters from the enclosing top level function.
+    var library = await buildLibrary('''
+f<U, V>() {
+  var x = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant U @2
+          covariant V @5
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_constructor() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  final x;
+  C() : x = (() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          final x @24
+            type: dynamic
+        constructors
+          @29
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_getter() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  get x => () => () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @22
+            returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_in_generic_method() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 3 (unused) type parameters from the enclosing class
+    // and method.
+    var library = await buildLibrary('''
+class C<T> {
+  f<U, V>() {
+    print(() => () => 0);
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @15
+            typeParameters
+              covariant U @17
+              covariant V @20
+            returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_setter() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  void set x(value) {
+    print(() => () => 0);
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @27
+            parameters
+              requiredPositional value @29
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_inferred_function_type_in_generic_closure() async {
+    // In the code below, `<U, V>() => () => 0` has an inferred return type of
+    // `() => int`, with 3 (unused) type parameters.
+    var library = await buildLibrary('''
+f<T>() {
+  print(/*<U, V>*/() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant T @2
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_generic_function_type_in_generic_closure() async {
+    // In the code below, `<U, V>() => <W, X, Y, Z>() => 0` has an inferred
+    // return type of `() => int`, with 7 (unused) type parameters.
+    var library = await buildLibrary('''
+f<T>() {
+  print(/*<U, V>*/() => /*<W, X, Y, Z>*/() => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant T @2
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_type_functionExpressionInvocation_oppositeOrder() async {
+    var library = await buildLibrary('''
+class A {
+  static final foo = bar(1.2);
+  static final bar = baz();
+
+  static int Function(double) baz() => (throw 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static final foo @25
+            type: int
+          static final bar @56
+            type: int Function(double)
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get foo @-1
+            returnType: int
+          synthetic static get bar @-1
+            returnType: int Function(double)
+        methods
+          static baz @100
+            returnType: int Function(double)
+''');
+  }
+
+  test_inferred_type_initializer_cycle() async {
+    var library = await buildLibrary(r'''
+var a = b + 1;
+var b = c + 2;
+var c = a + 3;
+var d = 4;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static b @19
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static c @34
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static d @49
+        type: int
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: dynamic
+        returnType: void
+      synthetic static get b @-1
+        returnType: dynamic
+      synthetic static set b @-1
+        parameters
+          requiredPositional _b @-1
+            type: dynamic
+        returnType: void
+      synthetic static get c @-1
+        returnType: dynamic
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: dynamic
+        returnType: void
+      synthetic static get d @-1
+        returnType: int
+      synthetic static set d @-1
+        parameters
+          requiredPositional _d @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_inferred_type_is_typedef() async {
+    var library = await buildLibrary('typedef int F(String s);'
+        ' class C extends D { var v; }'
+        ' abstract class D { F get v; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @31
+        supertype: D
+        fields
+          v @49
+            type: int Function(String)
+              alias: self::@typeAlias::F
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          synthetic get v @-1
+            returnType: int Function(String)
+              alias: self::@typeAlias::F
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int Function(String)
+                  alias: self::@typeAlias::F
+            returnType: void
+      abstract class D @69
+        fields
+          synthetic v @-1
+            type: int Function(String)
+              alias: self::@typeAlias::F
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @79
+            returnType: int Function(String)
+              alias: self::@typeAlias::F
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function(String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional s @21
+              type: String
+          returnType: int
+''');
+  }
+
+  test_inferred_type_nullability_class_ref_none() async {
+    addSource('$testPackageLibPath/a.dart', 'int f() => 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_class_ref_question() async {
+    addSource('$testPackageLibPath/a.dart', 'int? f() => 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int?
+    accessors
+      synthetic static get x @-1
+        returnType: int?
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int?
+        returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_function_type_none() async {
+    addSource('$testPackageLibPath/a.dart', 'void Function() f() => () {};');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: void Function()
+    accessors
+      synthetic static get x @-1
+        returnType: void Function()
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: void Function()
+        returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_function_type_question() async {
+    addSource('$testPackageLibPath/a.dart', 'void Function()? f() => () {};');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: void Function()?
+    accessors
+      synthetic static get x @-1
+        returnType: void Function()?
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: void Function()?
+        returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_bound_type_param() async {
+    var library = await buildLibrary('''
+class C<T> extends D<int, T> {
+  var v;
+}
+abstract class D<U, V> {
+  Map<V, U> get v;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        supertype: D<int, T>
+        fields
+          v @37
+            type: Map<T, int>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {U: int, V: T}
+        accessors
+          synthetic get v @-1
+            returnType: Map<T, int>
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: Map<T, int>
+            returnType: void
+      abstract class D @57
+        typeParameters
+          covariant U @59
+            defaultType: dynamic
+          covariant V @62
+            defaultType: dynamic
+        fields
+          synthetic v @-1
+            type: Map<V, U>
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @83
+            returnType: Map<V, U>
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_param_of_typedef() async {
+    var library = await buildLibrary('''
+typedef void F(int g(String s));
+h(F f) => null;
+var v = h((y) {});
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function(int Function(String))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @19
+              type: int Function(String)
+              parameters
+                requiredPositional s @28
+                  type: String
+          returnType: void
+    topLevelVariables
+      static v @53
+        type: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: dynamic
+        returnType: void
+    functions
+      h @33
+        parameters
+          requiredPositional f @37
+            type: void Function(int Function(String))
+              alias: self::@typeAlias::F
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_parameter_type_generic_class() async {
+    var library = await buildLibrary('''
+class C<T, U> extends D<U, int> {
+  void f(int x, g) {}
+}
+abstract class D<V, W> {
+  void f(int x, W g(V s));
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        supertype: D<U, int>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {V: U, W: int}
+        methods
+          f @41
+            parameters
+              requiredPositional x @47
+                type: int
+              requiredPositional g @50
+                type: int Function(U)
+            returnType: void
+      abstract class D @73
+        typeParameters
+          covariant V @75
+            defaultType: dynamic
+          covariant W @78
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract f @90
+            parameters
+              requiredPositional x @96
+                type: int
+              requiredPositional g @101
+                type: W Function(V)
+                parameters
+                  requiredPositional s @105
+                    type: V
+            returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_parameter_type_other_lib() async {
+    addSource('$testPackageLibPath/a.dart', '''
+import 'b.dart';
+abstract class D extends E {}
+''');
+    addSource('$testPackageLibPath/b.dart', '''
+abstract class E {
+  void f(int x, int g(String s));
+}
+''');
+    var library = await buildLibrary('''
+import 'a.dart';
+class C extends D {
+  void f(int x, g) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class C @23
+        supertype: D
+        constructors
+          synthetic @-1
+            superConstructor: package:test/a.dart::@class::D::@constructor::•
+        methods
+          f @44
+            parameters
+              requiredPositional x @50
+                type: int
+              requiredPositional g @53
+                type: int Function(String)
+            returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_method_function_typed_parameter_type() async {
+    var library = await buildLibrary('class C extends D { void f(int x, g) {} }'
+        ' abstract class D { void f(int x, int g(String s)); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        methods
+          f @25
+            parameters
+              requiredPositional x @31
+                type: int
+              requiredPositional g @34
+                type: int Function(String)
+            returnType: void
+      abstract class D @57
+        constructors
+          synthetic @-1
+        methods
+          abstract f @66
+            parameters
+              requiredPositional x @72
+                type: int
+              requiredPositional g @79
+                type: int Function(String)
+                parameters
+                  requiredPositional s @88
+                    type: String
+            returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_nested_function_typed_param() async {
+    var library = await buildLibrary('''
+f(void g(int x, void h())) => null;
+var v = f((x, y) {});
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @40
+        type: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: dynamic
+        returnType: void
+    functions
+      f @0
+        parameters
+          requiredPositional g @7
+            type: void Function(int, void Function())
+            parameters
+              requiredPositional x @13
+                type: int
+              requiredPositional h @21
+                type: void Function()
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_nested_function_typed_param_named() async {
+    var library = await buildLibrary('''
+f({void g(int x, void h())}) => null;
+var v = f(g: (x, y) {});
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @42
+        type: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: dynamic
+        returnType: void
+    functions
+      f @0
+        parameters
+          optionalNamed g @8
+            type: void Function(int, void Function())
+            parameters
+              requiredPositional x @14
+                type: int
+              requiredPositional h @22
+                type: void Function()
+        returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_setter_function_typed_parameter_type() async {
+    var library = await buildLibrary('class C extends D { void set f(g) {} }'
+        ' abstract class D { void set f(int g(String s)); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int Function(String)
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::D::@constructor::•
+        accessors
+          set f @29
+            parameters
+              requiredPositional g @31
+                type: int Function(String)
+            returnType: void
+      abstract class D @54
+        fields
+          synthetic f @-1
+            type: int Function(String)
+        constructors
+          synthetic @-1
+        accessors
+          abstract set f @67
+            parameters
+              requiredPositional g @73
+                type: int Function(String)
+                parameters
+                  requiredPositional s @82
+                    type: String
+            returnType: void
+''');
+  }
+
+  test_inferredType_definedInSdkLibraryPart() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+import 'dart:async';
+class A {
+  m(Stream p) {}
+}
+''');
+    LibraryElement library = await buildLibrary(r'''
+import 'a.dart';
+class B extends A {
+  m(p) {}
+}
+  ''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class B @23
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: package:test/a.dart::@class::A::@constructor::•
+        methods
+          m @39
+            parameters
+              requiredPositional p @41
+                type: Stream<dynamic>
+            returnType: dynamic
+''');
+    ClassElement b = library.definingCompilationUnit.classes[0];
+    ParameterElement p = b.methods[0].parameters[0];
+    // This test should verify that we correctly record inferred types,
+    // when the type is defined in a part of an SDK library. So, test that
+    // the type is actually in a part.
+    Element streamElement = p.type.element!;
+    if (streamElement is ClassElement) {
+      expect(streamElement.source, isNot(streamElement.library.source));
+    }
+  }
+
+  test_inferredType_implicitCreation() async {
+    var library = await buildLibrary(r'''
+class A {
+  A();
+  A.named();
+}
+var a1 = A();
+var a2 = A.named();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
+    topLevelVariables
+      static a1 @36
+        type: A
+      static a2 @50
+        type: A
+    accessors
+      synthetic static get a1 @-1
+        returnType: A
+      synthetic static set a1 @-1
+        parameters
+          requiredPositional _a1 @-1
+            type: A
+        returnType: void
+      synthetic static get a2 @-1
+        returnType: A
+      synthetic static set a2 @-1
+        parameters
+          requiredPositional _a2 @-1
+            type: A
+        returnType: void
+''');
+  }
+
+  test_inferredType_implicitCreation_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A {
+  A();
+  A.named();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+var a1 = foo.A();
+var a2 = foo.A.named();
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    topLevelVariables
+      static a1 @30
+        type: A
+      static a2 @48
+        type: A
+    accessors
+      synthetic static get a1 @-1
+        returnType: A
+      synthetic static set a1 @-1
+        parameters
+          requiredPositional _a1 @-1
+            type: A
+        returnType: void
+      synthetic static get a2 @-1
+        returnType: A
+      synthetic static set a2 @-1
+        parameters
+          requiredPositional _a2 @-1
+            type: A
+        returnType: void
+''');
+  }
+
+  test_inferredType_usesSyntheticFunctionType_functionTypedParam() async {
+    // AnalysisContext does not set the enclosing element for the synthetic
+    // FunctionElement created for the [f, g] type argument.
+    var library = await buildLibrary('''
+int f(int x(String y)) => null;
+String g(int x(String y)) => null;
+var v = [f, g];
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @71
+        type: List<Object Function(int Function(String))>
+    accessors
+      synthetic static get v @-1
+        returnType: List<Object Function(int Function(String))>
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: List<Object Function(int Function(String))>
+        returnType: void
+    functions
+      f @4
+        parameters
+          requiredPositional x @10
+            type: int Function(String)
+            parameters
+              requiredPositional y @19
+                type: String
+        returnType: int
+      g @39
+        parameters
+          requiredPositional x @45
+            type: int Function(String)
+            parameters
+              requiredPositional y @54
+                type: String
+        returnType: String
+''');
+  }
+
+  test_inheritance_errors() async {
+    var library = await buildLibrary('''
+abstract class A {
+  int m();
+}
+
+abstract class B {
+  String m();
+}
+
+abstract class C implements A, B {}
+
+abstract class D extends C {
+  var f;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        constructors
+          synthetic @-1
+        methods
+          abstract m @25
+            returnType: int
+      abstract class B @48
+        constructors
+          synthetic @-1
+        methods
+          abstract m @61
+            returnType: String
+      abstract class C @84
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+      abstract class D @121
+        supertype: C
+        fields
+          f @141
+            type: dynamic
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::C::@constructor::•
+        accessors
+          synthetic get f @-1
+            returnType: dynamic
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure() async {
+    var library = await buildLibrary('var v = () => 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int Function()
+    accessors
+      synthetic static get v @-1
+        returnType: int Function()
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int Function()
+        returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_dynamic() async {
+    var library = await buildLibrary('var v = (f) async => await f;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: Future<dynamic> Function(dynamic)
+    accessors
+      synthetic static get v @-1
+        returnType: Future<dynamic> Function(dynamic)
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: Future<dynamic> Function(dynamic)
+        returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future3_int() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future<Future<Future<int>>> f) async => await f;
+''');
+    // The analyzer type system over-flattens - see dartbug.com/31887
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<int> Function(Future<Future<Future<int>>>)
+    accessors
+      synthetic static get v @-1
+        returnType: Future<int> Function(Future<Future<Future<int>>>)
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: Future<int> Function(Future<Future<Future<int>>>)
+        returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future_int() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future<int> f) async => await f;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<int> Function(Future<int>)
+    accessors
+      synthetic static get v @-1
+        returnType: Future<int> Function(Future<int>)
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: Future<int> Function(Future<int>)
+        returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future_noArg() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future f) async => await f;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<dynamic> Function(Future<dynamic>)
+    accessors
+      synthetic static get v @-1
+        returnType: Future<dynamic> Function(Future<dynamic>)
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: Future<dynamic> Function(Future<dynamic>)
+        returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_field() async {
+    var library = await buildLibrary('''
+class C {
+  var v = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @16
+            type: int Function()
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @-1
+            returnType: int Function()
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int Function()
+            returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_local() async {
+    var library = await buildLibrary('''
+void f() {
+  int u = 0;
+  var v = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
+''');
+  }
+
+  test_instanceInference_operator_equal_legacy_from_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    addSource('$testPackageLibPath/legacy.dart', r'''
+// @dart = 2.7
+class LegacyDefault {
+  bool operator==(other) => false;
+}
+class LegacyObject {
+  bool operator==(Object other) => false;
+}
+class LegacyInt {
+  bool operator==(int other) => false;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'legacy.dart';
+class X1 extends LegacyDefault  {
+  bool operator==(other) => false;
+}
+class X2 extends LegacyObject {
+  bool operator==(other) => false;
+}
+class X3 extends LegacyInt {
+  bool operator==(other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/legacy.dart
+  definingUnit
+    classes
+      class X1 @28
+        supertype: LegacyDefault*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyDefault::@constructor::•
+        methods
+          == @71
+            parameters
+              requiredPositional other @74
+                type: dynamic
+            returnType: bool*
+      class X2 @99
+        supertype: LegacyObject*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyObject::@constructor::•
+        methods
+          == @140
+            parameters
+              requiredPositional other @143
+                type: Object*
+            returnType: bool*
+      class X3 @168
+        supertype: LegacyInt*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyInt::@constructor::•
+        methods
+          == @206
+            parameters
+              requiredPositional other @209
+                type: int*
+            returnType: bool*
+''');
+  }
+
+  test_instanceInference_operator_equal_legacy_from_legacy_nullSafe() async {
+    addSource('$testPackageLibPath/legacy.dart', r'''
+// @dart = 2.7
+class LegacyDefault {
+  bool operator==(other) => false;
+}
+class LegacyObject {
+  bool operator==(Object other) => false;
+}
+class LegacyInt {
+  bool operator==(int other) => false;
+}
+''');
+    addSource('$testPackageLibPath/nullSafe.dart', r'''
+class NullSafeDefault {
+  bool operator==(other) => false;
+}
+class NullSafeObject {
+  bool operator==(Object other) => false;
+}
+class NullSafeInt {
+  bool operator==(int other) => false;
+}
+''');
+    var library = await buildLibrary(r'''
+// @dart = 2.7
+import 'legacy.dart';
+import 'nullSafe.dart';
+class X1 extends LegacyDefault implements NullSafeDefault {
+  bool operator==(other) => false;
+}
+class X2 extends LegacyObject implements NullSafeObject {
+  bool operator==(other) => false;
+}
+class X3 extends LegacyInt implements NullSafeInt {
+  bool operator==(other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/legacy.dart
+    package:test/nullSafe.dart
+  definingUnit
+    classes
+      class X1 @67
+        supertype: LegacyDefault*
+        interfaces
+          NullSafeDefault*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyDefault::@constructor::•
+        methods
+          == @136
+            parameters
+              requiredPositional other @139
+                type: dynamic
+            returnType: bool*
+      class X2 @164
+        supertype: LegacyObject*
+        interfaces
+          NullSafeObject*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyObject::@constructor::•
+        methods
+          == @231
+            parameters
+              requiredPositional other @234
+                type: Object*
+            returnType: bool*
+      class X3 @259
+        supertype: LegacyInt*
+        interfaces
+          NullSafeInt*
+        constructors
+          synthetic @-1
+            superConstructor: package:test/legacy.dart::@class::LegacyInt::@constructor::•
+        methods
+          == @320
+            parameters
+              requiredPositional other @323
+                type: int*
+            returnType: bool*
+''');
+  }
+
+  test_instanceInference_operator_equal_nullSafe_from_nullSafe() async {
+    addSource('$testPackageLibPath/nullSafe.dart', r'''
+class NullSafeDefault {
+  bool operator==(other) => false;
+}
+class NullSafeObject {
+  bool operator==(Object other) => false;
+}
+class NullSafeInt {
+  bool operator==(int other) => false;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'nullSafe.dart';
+class X1 extends NullSafeDefault {
+  bool operator==(other) => false;
+}
+class X2 extends NullSafeObject {
+  bool operator==(other) => false;
+}
+class X3 extends NullSafeInt {
+  bool operator==(other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/nullSafe.dart
+  definingUnit
+    classes
+      class X1 @30
+        supertype: NullSafeDefault
+        constructors
+          synthetic @-1
+            superConstructor: package:test/nullSafe.dart::@class::NullSafeDefault::@constructor::•
+        methods
+          == @74
+            parameters
+              requiredPositional other @77
+                type: Object
+            returnType: bool
+      class X2 @102
+        supertype: NullSafeObject
+        constructors
+          synthetic @-1
+            superConstructor: package:test/nullSafe.dart::@class::NullSafeObject::@constructor::•
+        methods
+          == @145
+            parameters
+              requiredPositional other @148
+                type: Object
+            returnType: bool
+      class X3 @173
+        supertype: NullSafeInt
+        constructors
+          synthetic @-1
+            superConstructor: package:test/nullSafe.dart::@class::NullSafeInt::@constructor::•
+        methods
+          == @213
+            parameters
+              requiredPositional other @216
+                type: int
+            returnType: bool
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
+    var library = await buildLibrary('''
+class C<S extends num, T extends C<S, T>> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant S @8
+            bound: num
+            defaultType: num
+          covariant T @23
+            bound: C<S, T>
+            defaultType: C<num, dynamic>
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @47
+        type: C<num, C<num, dynamic>>
+    accessors
+      synthetic static get c @-1
+        returnType: C<num, C<num, dynamic>>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<num, C<num, dynamic>>
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToItself() async {
+    var library = await buildLibrary('''
+class C<T extends C<T>> {}
+C c;
+var c2 = new C();
+class B {
+  var c3 = new C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+      class B @56
+        fields
+          c3 @66
+            type: C<C<Object?>>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get c3 @-1
+            returnType: C<C<Object?>>
+          synthetic set c3 @-1
+            parameters
+              requiredPositional _c3 @-1
+                type: C<C<Object?>>
+            returnType: void
+    topLevelVariables
+      static c @29
+        type: C<C<dynamic>>
+      static c2 @36
+        type: C<C<Object?>>
+    accessors
+      synthetic static get c @-1
+        returnType: C<C<dynamic>>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<C<dynamic>>
+        returnType: void
+      synthetic static get c2 @-1
+        returnType: C<C<Object?>>
+      synthetic static set c2 @-1
+        parameters
+          requiredPositional _c2 @-1
+            type: C<C<Object?>>
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToItself_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class C<T extends C<T>> {}
+C c;
+var c2 = new C();
+class B {
+  var c3 = new C();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T*>*
+            defaultType: C<dynamic>*
+        constructors
+          synthetic @-1
+      class B @56
+        fields
+          c3 @66
+            type: C<C<dynamic>*>*
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get c3 @-1
+            returnType: C<C<dynamic>*>*
+          synthetic set c3 @-1
+            parameters
+              requiredPositional _c3 @-1
+                type: C<C<dynamic>*>*
+            returnType: void
+    topLevelVariables
+      static c @29
+        type: C<C<dynamic>*>*
+      static c2 @36
+        type: C<C<dynamic>*>*
+    accessors
+      synthetic static get c @-1
+        returnType: C<C<dynamic>*>*
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<C<dynamic>*>*
+        returnType: void
+      synthetic static get c2 @-1
+        returnType: C<C<dynamic>*>*
+      synthetic static set c2 @-1
+        parameters
+          requiredPositional _c2 @-1
+            type: C<C<dynamic>*>*
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToLaterTypeArgument() async {
+    var library = await buildLibrary('''
+class C<T extends C<T, U>, U extends num> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T, U>
+            defaultType: C<dynamic, num>
+          covariant U @27
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @47
+        type: C<C<dynamic, num>, num>
+    accessors
+      synthetic static get c @-1
+        returnType: C<C<dynamic, num>, num>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<C<dynamic, num>, num>
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_functionTypeAlias_reexported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class O {}
+typedef T F<T extends O>(T p);
+''');
+    addSource('$testPackageLibPath/b.dart', r'''
+export 'a.dart' show F;
+''');
+    var library = await buildLibrary('''
+import 'b.dart';
+class C {
+  F f() => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/b.dart
+  definingUnit
+    classes
+      class C @23
+        constructors
+          synthetic @-1
+        methods
+          f @31
+            returnType: O Function(O)
+              alias: package:test/a.dart::@typeAlias::F
+                typeArguments
+                  O
+''');
+  }
+
+  test_instantiateToBounds_functionTypeAlias_simple() async {
+    var library = await buildLibrary('''
+typedef F<T extends num>(T p);
+F f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant T @10
+            bound: num
+            defaultType: num
+        aliasedType: dynamic Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @27
+              type: T
+          returnType: dynamic
+    topLevelVariables
+      static f @33
+        type: dynamic Function(num)
+          alias: self::@typeAlias::F
+            typeArguments
+              num
+    accessors
+      synthetic static get f @-1
+        returnType: dynamic Function(num)
+          alias: self::@typeAlias::F
+            typeArguments
+              num
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function(num)
+              alias: self::@typeAlias::F
+                typeArguments
+                  num
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_genericFunctionAsBound() async {
+    var library = await buildLibrary('''
+class A<T> {}
+class B<T extends int Function(), U extends A<T>> {}
+B b;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      notSimplyBounded class B @20
+        typeParameters
+          covariant T @22
+            bound: int Function()
+            defaultType: int Function()
+          covariant U @48
+            bound: A<T>
+            defaultType: A<int Function()>
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static b @69
+        type: B<int Function(), A<int Function()>>
+    accessors
+      synthetic static get b @-1
+        returnType: B<int Function(), A<int Function()>>
+      synthetic static set b @-1
+        parameters
+          requiredPositional _b @-1
+            type: B<int Function(), A<int Function()>>
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_genericTypeAlias_simple() async {
+    var library = await buildLibrary('''
+typedef F<T extends num> = S Function<S>(T p);
+F f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            bound: num
+            defaultType: num
+        aliasedType: S Function<S>(T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant S @38
+          parameters
+            requiredPositional p @43
+              type: T
+          returnType: S
+    topLevelVariables
+      static f @49
+        type: S Function<S>(num)
+          alias: self::@typeAlias::F
+            typeArguments
+              num
+    accessors
+      synthetic static get f @-1
+        returnType: S Function<S>(num)
+          alias: self::@typeAlias::F
+            typeArguments
+              num
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: S Function<S>(num)
+              alias: self::@typeAlias::F
+                typeArguments
+                  num
+        returnType: void
+''');
+  }
+
+  test_instantiateToBounds_issue38498() async {
+    var library = await buildLibrary('''
+class A<R extends B> {
+  final values = <B>[];
+}
+class B<T extends num> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant R @8
+            bound: B<num>
+            defaultType: B<num>
+        fields
+          final values @31
+            type: List<B<num>>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get values @-1
+            returnType: List<B<num>>
+      class B @55
+        typeParameters
+          covariant T @57
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_instantiateToBounds_simple() async {
+    var library = await buildLibrary('''
+class C<T extends num> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @28
+        type: C<num>
+    accessors
+      synthetic static get c @-1
+        returnType: C<num>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<num>
+        returnType: void
+''');
+  }
+
+  test_invalid_annotation_prefixed_constructor() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart" as a;
+@a.A.named
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as a @19
+  definingUnit
+    classes
+      class C @39
+        metadata
+          Annotation
+            atSign: @ @22
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: a @23
+                staticElement: self::@prefix::a
+                staticType: null
+              period: . @24
+              identifier: SimpleIdentifier
+                token: A @25
+                staticElement: package:test/a.dart::@class::A
+                staticType: null
+              staticElement: package:test/a.dart::@class::A
+              staticType: null
+            period: . @26
+            constructorName: SimpleIdentifier
+              token: named @27
+              staticElement: package:test/a.dart::@class::A::@constructor::named
+              staticType: null
+            element: package:test/a.dart::@class::A::@constructor::named
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_invalid_annotation_unprefixed_constructor() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+@A.named
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class C @32
+        metadata
+          Annotation
+            atSign: @ @17
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: A @18
+                staticElement: package:test/a.dart::@class::A
+                staticType: null
+              period: . @19
+              identifier: SimpleIdentifier
+                token: named @20
+                staticElement: package:test/a.dart::@class::A::@constructor::named
+                staticType: null
+              staticElement: package:test/a.dart::@class::A::@constructor::named
+              staticType: null
+            element: package:test/a.dart::@class::A::@constructor::named
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_invalid_importPrefix_asTypeArgument() async {
+    var library = await buildLibrary('''
+import 'dart:async' as ppp;
+class C {
+  List<ppp> v;
+}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as ppp @23
+  definingUnit
+    classes
+      class C @34
+        fields
+          v @50
+            type: List<dynamic>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @-1
+            returnType: List<dynamic>
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: List<dynamic>
+            returnType: void
+''');
+  }
+
+  test_invalid_nameConflict_imported() async {
+    addSource('$testPackageLibPath/a.dart', 'V() {}');
+    addSource('$testPackageLibPath/b.dart', 'V() {}');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+foo([p = V]) {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+    functions
+      foo @34
+        parameters
+          optionalPositional p @39
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                token: V @43
+                staticElement: <null>
+                staticType: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_invalid_nameConflict_imported_exported() async {
+    addSource('$testPackageLibPath/a.dart', 'V() {}');
+    addSource('$testPackageLibPath/b.dart', 'V() {}');
+    addSource('$testPackageLibPath/c.dart', r'''
+export 'a.dart';
+export 'b.dart';
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+foo([p = V]) {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/c.dart
+  definingUnit
+    functions
+      foo @17
+        parameters
+          optionalPositional p @22
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                token: V @26
+                staticElement: package:test/a.dart::@function::V
+                staticType: dynamic Function()
+        returnType: dynamic
+''');
+  }
+
+  test_invalid_nameConflict_local() async {
+    var library = await buildLibrary('''
+foo([p = V]) {}
+V() {}
+var V;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static V @27
+        type: dynamic
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+      synthetic static set V @-1
+        parameters
+          requiredPositional _V @-1
+            type: dynamic
+        returnType: void
+    functions
+      foo @0
+        parameters
+          optionalPositional p @5
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                token: V @9
+                staticElement: self::@getter::V
+                staticType: dynamic
+        returnType: dynamic
+      V @16
+        returnType: dynamic
+''');
+  }
+
+  test_invalid_setterParameter_fieldFormalParameter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo;
+  void set bar(this.foo) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          foo @16
+            type: int
+          synthetic bar @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+          set bar @32
+            parameters
+              requiredPositional final this.foo @41
+                type: dynamic
+                field: <null>
+            returnType: void
+''');
+  }
+
+  test_invalid_setterParameter_fieldFormalParameter_self() async {
+    var library = await buildLibrary('''
+class C {
+  set x(this.x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @16
+            parameters
+              requiredPositional final this.x @23
+                type: dynamic
+                field: <null>
+            returnType: void
+''');
+  }
+
+  test_invalidUris() async {
+    var library = await buildLibrary(r'''
+import ':[invaliduri]';
+import ':[invaliduri]:foo.dart';
+import 'a1.dart';
+import ':[invaliduri]';
+import ':[invaliduri]:foo.dart';
+
+export ':[invaliduri]';
+export ':[invaliduri]:foo.dart';
+export 'a2.dart';
+export ':[invaliduri]';
+export ':[invaliduri]:foo.dart';
+
+part ':[invaliduri]';
+part 'a3.dart';
+part ':[invaliduri]';
+''');
+    checkElementText(library, r'''
+library
+  imports
+    <unresolved>
+    <unresolved>
+    package:test/a1.dart
+    <unresolved>
+    <unresolved>
+  exports
+    <unresolved>
+    <unresolved>
+    package:test/a2.dart
+    <unresolved>
+    <unresolved>
+  definingUnit
+  parts
+    a3.dart
+''');
+  }
+
+  test_library() async {
+    var library = await buildLibrary('');
+    checkElementText(library, r'''
+library
+  definingUnit
+''');
+  }
+
+  test_library_documented_lines() async {
+    var library = await buildLibrary('''
+/// aaa
+/// bbb
+library test;
+''');
+    checkElementText(library, r'''
+library
+  name: test
+  nameOffset: 24
+  documentationComment: /// aaa\n/// bbb
+  definingUnit
+''');
+  }
+
+  test_library_documented_stars() async {
+    var library = await buildLibrary('''
+/**
+ * aaa
+ * bbb
+ */
+library test;''');
+    checkElementText(library, r'''
+library
+  name: test
+  nameOffset: 30
+  documentationComment: /**\n * aaa\n * bbb\n */
+  definingUnit
+''');
+  }
+
+  test_library_name_with_spaces() async {
+    var library = await buildLibrary('library foo . bar ;');
+    checkElementText(library, r'''
+library
+  name: foo.bar
+  nameOffset: 8
+  definingUnit
+''');
+  }
+
+  test_library_named() async {
+    var library = await buildLibrary('library foo.bar;');
+    checkElementText(library, r'''
+library
+  name: foo.bar
+  nameOffset: 8
+  definingUnit
+''');
+  }
+
+  test_localFunctions() async {
+    var library = await buildLibrary(r'''
+f() {
+  f1() {}
+  {
+    f2() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+''');
+  }
+
+  test_localFunctions_inConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  C() {
+    f() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+''');
+  }
+
+  test_localFunctions_inMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  m() {
+    f() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @12
+            returnType: dynamic
+''');
+  }
+
+  test_localFunctions_inTopLevelGetter() async {
+    var library = await buildLibrary(r'''
+get g {
+  f() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static g @-1
+        type: dynamic
+    accessors
+      static get g @4
+        returnType: dynamic
+''');
+  }
+
+  test_localLabels_inConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  C() {
+    aaa: while (true) {}
+    bbb: switch (42) {
+      ccc: case 0:
+        break;
+    }
+  }
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+''');
+  }
+
+  test_localLabels_inMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  m() {
+    aaa: while (true) {}
+    bbb: switch (42) {
+      ccc: case 0:
+        break;
+    }
+  }
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @12
+            returnType: dynamic
+''');
+  }
+
+  test_localLabels_inTopLevelFunction() async {
+    var library = await buildLibrary(r'''
+main() {
+  aaa: while (true) {}
+  bbb: switch (42) {
+    ccc: case 0:
+      break;
+  }
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        returnType: dynamic
+''');
+  }
+
+  test_main_class() async {
+    var library = await buildLibrary('class main {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class main @6
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_main_class_alias() async {
+    var library =
+        await buildLibrary('class main = C with D; class C {} class D {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias main @6
+        supertype: C
+        mixins
+          D
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::C::@constructor::•
+            superConstructor: self::@class::C::@constructor::•
+      class C @29
+        constructors
+          synthetic @-1
+      class D @40
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_main_class_alias_via_export() async {
+    addSource('$testPackageLibPath/a.dart',
+        'class main = C with D; class C {} class D {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_main_class_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'class main {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_main_getter() async {
+    var library = await buildLibrary('get main => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static main @-1
+        type: dynamic
+    accessors
+      static get main @4
+        returnType: dynamic
+''');
+  }
+
+  test_main_getter_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'get main => null;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_main_typedef() async {
+    var library = await buildLibrary('typedef main();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased main @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''');
+  }
+
+  test_main_typedef_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'typedef main();');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_main_variable() async {
+    var library = await buildLibrary('var main;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static main @4
+        type: dynamic
+    accessors
+      synthetic static get main @-1
+        returnType: dynamic
+      synthetic static set main @-1
+        parameters
+          requiredPositional _main @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_main_variable_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'var main;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  exports
+    package:test/a.dart
+  definingUnit
+''');
+  }
+
+  test_metadata_class_field_first() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+class C {
+  @a
+  int x = 0;
+}
+''');
+    // Check metadata without asking any other properties.
+    var x = _elementOfDefiningUnit(library, ['@class', 'C', '@field', 'x'])
+        as FieldElement;
+    expect(x.metadata, hasLength(1));
+    // Check details.
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @19
+        fields
+          x @34
+            metadata
+              Annotation
+                atSign: @ @25
+                name: SimpleIdentifier
+                  token: a @26
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_class_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+class C<@foo T> {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @27
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @29
+                name: SimpleIdentifier
+                  token: foo @30
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        fields
+          static const foo @54
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @60
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get foo @-1
+            returnType: int
+        methods
+          bar @77
+            metadata
+              Annotation
+                atSign: @ @65
+                name: SimpleIdentifier
+                  token: foo @66
+                  staticElement: self::@class::C::@getter::foo
+                  staticType: null
+                element: self::@class::C::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_classDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+class C {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @44
+        metadata
+          Annotation
+            atSign: @ @32
+            name: SimpleIdentifier
+              token: a @33
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: b @36
+              staticElement: self::@getter::b
+              staticType: null
+            element: self::@getter::b
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @26
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get b @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_classTypeAlias() async {
+    var library = await buildLibrary(
+        'const a = null; @a class C = D with E; class D {} class E {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @25
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @45
+        constructors
+          synthetic @-1
+      class E @56
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_constructor_call_named() async {
+    var library = await buildLibrary('''
+class A {
+  const A.named(int _);
+}
+@A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            parameters
+              requiredPositional _ @30
+                type: int
+      class C @54
+        metadata
+          Annotation
+            atSign: @ @36
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: A @37
+                staticElement: self::@class::A
+                staticType: null
+              period: . @38
+              identifier: SimpleIdentifier
+                token: named @39
+                staticElement: self::@class::A::@constructor::named
+                staticType: null
+              staticElement: self::@class::A::@constructor::named
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @44
+              arguments
+                IntegerLiteral
+                  literal: 0 @45
+                  staticType: int
+              rightParenthesis: ) @46
+            element: self::@class::A::@constructor::named
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_inference() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named(T _);
+}
+
+@A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+            parameters
+              requiredPositional _ @31
+                type: T
+      class C @56
+        metadata
+          Annotation
+            atSign: @ @38
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: A @39
+                staticElement: self::@class::A
+                staticType: null
+              period: . @40
+              identifier: SimpleIdentifier
+                token: named @41
+                staticElement: ConstructorMember
+                  base: self::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @46
+              arguments
+                IntegerLiteral
+                  literal: 0 @47
+                  staticType: int
+              rightParenthesis: ) @48
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_typeArguments() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named();
+}
+
+@A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+      class C @57
+        metadata
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: A @36
+              staticElement: self::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @37
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @38
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @41
+            period: . @42
+            constructorName: SimpleIdentifier
+              token: named @43
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_typeArguments_disabledGenericMetadata() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named();
+}
+
+@A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+      class C @57
+        metadata
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: A @36
+              staticElement: self::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @37
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @38
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @41
+            period: . @42
+            constructorName: SimpleIdentifier
+              token: named @43
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A {
+  const A.named(int _);
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+@foo.A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @48
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            period: . @32
+            constructorName: SimpleIdentifier
+              token: named @33
+              staticElement: package:test/foo.dart::@class::A::@constructor::named
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @38
+              arguments
+                IntegerLiteral
+                  literal: 0 @39
+                  staticType: int
+              rightParenthesis: ) @40
+            element: package:test/foo.dart::@class::A::@constructor::named
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed_generic_inference() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A.named(T _);
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @48
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            period: . @32
+            constructorName: SimpleIdentifier
+              token: named @33
+              staticElement: ConstructorMember
+                base: package:test/foo.dart::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @38
+              arguments
+                IntegerLiteral
+                  literal: 0 @39
+                  staticType: int
+              rightParenthesis: ) @40
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::named
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @52
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @32
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @33
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @36
+            period: . @37
+            constructorName: SimpleIdentifier
+              token: named @38
+              staticElement: ConstructorMember
+                base: package:test/foo.dart::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @43
+              rightParenthesis: ) @44
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::named
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_named_synthetic_ofClassAlias_generic() async {
+    var library = await buildLibrary('''
+class A {
+  const A.named();
+}
+
+mixin B {}
+
+class C<T> = A with B;
+
+@C.named()
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+      class alias C @50
+        typeParameters
+          covariant T @52
+            defaultType: dynamic
+        supertype: A
+        mixins
+          B
+        constructors
+          synthetic const named @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                period: . @0
+                constructorName: SimpleIdentifier
+                  token: named @-1
+                  staticElement: self::@class::A::@constructor::named
+                  staticType: null
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::named
+            superConstructor: self::@class::A::@constructor::named
+      class D @85
+        metadata
+          Annotation
+            atSign: @ @68
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @69
+                staticElement: self::@class::C
+                staticType: null
+              period: . @70
+              identifier: SimpleIdentifier
+                token: named @71
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {T: dynamic}
+                staticType: null
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {T: dynamic}
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @76
+              rightParenthesis: ) @77
+            element: ConstructorMember
+              base: self::@class::C::@constructor::named
+              substitution: {T: dynamic}
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @38
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_metadata_constructor_call_unnamed() async {
+    var library = await buildLibrary('''
+class A {
+  const A(int _);
+}
+@A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @24
+                type: int
+      class C @42
+        metadata
+          Annotation
+            atSign: @ @30
+            name: SimpleIdentifier
+              token: A @31
+              staticElement: self::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @32
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              rightParenthesis: ) @34
+            element: self::@class::A::@constructor::•
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_generic_inference() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A(T _);
+}
+
+@A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+            parameters
+              requiredPositional _ @25
+                type: T
+      class C @44
+        metadata
+          Annotation
+            atSign: @ @32
+            name: SimpleIdentifier
+              token: A @33
+              staticElement: self::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @34
+              arguments
+                IntegerLiteral
+                  literal: 0 @35
+                  staticType: int
+              rightParenthesis: ) @36
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_generic_typeArguments() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+
+@A<int>()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @45
+        metadata
+          Annotation
+            atSign: @ @29
+            name: SimpleIdentifier
+              token: A @30
+              staticElement: self::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @31
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @32
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @35
+            arguments: ArgumentList
+              leftParenthesis: ( @36
+              rightParenthesis: ) @37
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', 'class A { const A(_); }');
+    var library =
+        await buildLibrary('import "foo.dart" as foo; @foo.A(0) class C {}');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @42
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @32
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              rightParenthesis: ) @34
+            element: package:test/foo.dart::@class::A::@constructor::•
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A(T _);
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @42
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @32
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              rightParenthesis: ) @34
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::•
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A();
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A<int>()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @46
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: A @31
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              leftBracket: < @32
+              arguments
+                NamedType
+                  name: SimpleIdentifier
+                    token: int @33
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                  type: int
+              rightBracket: > @36
+            arguments: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::•
+              substitution: {T: int}
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_synthetic_ofClassAlias_generic() async {
+    var library = await buildLibrary('''
+class A {
+  const A();
+}
+
+mixin B {}
+
+class C<T> = A with B;
+
+@C()
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+      class alias C @44
+        typeParameters
+          covariant T @46
+            defaultType: dynamic
+        supertype: A
+        mixins
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+      class D @73
+        metadata
+          Annotation
+            atSign: @ @62
+            name: SimpleIdentifier
+              token: C @63
+              staticElement: self::@class::C
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @64
+              rightParenthesis: ) @65
+            element: ConstructorMember
+              base: self::@class::C::@constructor::•
+              substitution: {T: dynamic}
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @32
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_metadata_constructor_call_with_args() async {
+    var library =
+        await buildLibrary('class A { const A(x); } @A(null) class C {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @16
+            parameters
+              requiredPositional x @18
+                type: dynamic
+      class C @39
+        metadata
+          Annotation
+            atSign: @ @24
+            name: SimpleIdentifier
+              token: A @25
+              staticElement: self::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @26
+              arguments
+                NullLiteral
+                  literal: null @27
+                  staticType: Null
+              rightParenthesis: ) @31
+            element: self::@class::A::@constructor::•
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_constructorDeclaration_named() async {
+    var library =
+        await buildLibrary('const a = null; class C { @a C.named(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        constructors
+          named @31
+            metadata
+              Annotation
+                atSign: @ @26
+                name: SimpleIdentifier
+                  token: a @27
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            periodOffset: 30
+            nameEnd: 36
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_constructorDeclaration_unnamed() async {
+    var library = await buildLibrary('const a = null; class C { @a C(); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        constructors
+          @29
+            metadata
+              Annotation
+                atSign: @ @26
+                name: SimpleIdentifier
+                  token: a @27
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_enum_constant() async {
+    var library = await buildLibrary('const a = 42; enum E { @a v }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @19
+        supertype: Enum
+        fields
+          static const enumConstant v @26
+            metadata
+              Annotation
+                atSign: @ @23
+                name: SimpleIdentifier
+                  token: a @24
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_enum_constant_instanceCreation() async {
+    var library = await buildLibrary('''
+class A {
+  final dynamic value;
+  const A(this.value);
+}
+
+enum E {
+  @A(100) a,
+  b,
+  @A(300) c,
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final value @26
+            type: dynamic
+        constructors
+          const @41
+            parameters
+              requiredPositional final this.value @48
+                type: dynamic
+                field: self::@class::A::@field::value
+        accessors
+          synthetic get value @-1
+            returnType: dynamic
+    enums
+      enum E @64
+        supertype: Enum
+        fields
+          static const enumConstant a @78
+            metadata
+              Annotation
+                atSign: @ @70
+                name: SimpleIdentifier
+                  token: A @71
+                  staticElement: self::@class::A
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @72
+                  arguments
+                    IntegerLiteral
+                      literal: 100 @73
+                      staticType: int
+                  rightParenthesis: ) @76
+                element: self::@class::A::@constructor::•
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @83
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant c @96
+            metadata
+              Annotation
+                atSign: @ @88
+                name: SimpleIdentifier
+                  token: A @89
+                  staticElement: self::@class::A
+                  staticType: null
+                arguments: ArgumentList
+                  leftParenthesis: ( @90
+                  arguments
+                    IntegerLiteral
+                      literal: 300 @91
+                      staticType: int
+                  rightParenthesis: ) @94
+                element: self::@class::A::@constructor::•
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_metadata_enum_constant_self() async {
+    var library = await buildLibrary(r'''
+enum E {
+  @v
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @16
+            metadata
+              Annotation
+                atSign: @ @11
+                name: SimpleIdentifier
+                  token: v @12
+                  staticElement: self::@enum::E::@getter::v
+                  staticType: null
+                element: self::@enum::E::@getter::v
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_metadata_enum_constructor() async {
+    var library = await buildLibrary(r'''
+const a = 42;
+enum E {
+  v;
+  @a
+  const E();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @19
+        supertype: Enum
+        fields
+          static const enumConstant v @25
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          const @41
+            metadata
+              Annotation
+                atSign: @ @30
+                name: SimpleIdentifier
+                  token: a @31
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_enum_method() async {
+    var library = await buildLibrary(r'''
+const a = 42;
+enum E {
+  v;
+  @a
+  void foo() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @19
+        supertype: Enum
+        fields
+          static const enumConstant v @25
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+        methods
+          foo @40
+            metadata
+              Annotation
+                atSign: @ @30
+                name: SimpleIdentifier
+                  token: a @31
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_enum_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+enum E<@foo T> {
+  v;
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @26
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @33
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        supertype: Enum
+        fields
+          static const enumConstant v @40
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+          static const foo @58
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @64
+                staticType: int
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+          synthetic static get foo @-1
+            returnType: int
+        methods
+          bar @81
+            metadata
+              Annotation
+                atSign: @ @69
+                name: SimpleIdentifier
+                  token: foo @70
+                  staticElement: self::@enum::E::@getter::foo
+                  staticType: null
+                element: self::@enum::E::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_enum_typeParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+enum E<@a T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @19
+        typeParameters
+          covariant T @24
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @21
+                name: SimpleIdentifier
+                  token: a @22
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        supertype: Enum
+        fields
+          static const enumConstant v @31
+            type: E<dynamic>
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E<dynamic>
+                  staticElement: ConstructorMember
+                    base: self::@enum::E::@constructor::•
+                    substitution: {T: dynamic}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E<dynamic>
+          synthetic static const values @-1
+            type: List<E<dynamic>>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E<dynamic>
+                rightBracket: ] @0
+                staticType: List<E<dynamic>>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E<dynamic>
+          synthetic static get values @-1
+            returnType: List<E<dynamic>>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_enumDeclaration() async {
+    var library = await buildLibrary('const a = 42; @a enum E { v }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @22
+        metadata
+          Annotation
+            atSign: @ @14
+            name: SimpleIdentifier
+              token: a @15
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        supertype: Enum
+        fields
+          static const enumConstant v @26
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_exportDirective() async {
+    addSource('$testPackageLibPath/foo.dart', '');
+    var library = await buildLibrary('@a export "foo.dart"; const a = null;');
+    checkElementText(library, r'''
+library
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: self::@getter::a
+        staticType: null
+      element: self::@getter::a
+  exports
+    package:test/foo.dart
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: self::@getter::a
+            staticType: null
+          element: self::@getter::a
+  definingUnit
+    topLevelVariables
+      static const a @28
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @32
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_extension_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+extension E<@foo T> on int {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @31
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @38
+            metadata
+              Annotation
+                atSign: @ @33
+                name: SimpleIdentifier
+                  token: foo @34
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        extendedType: int
+        fields
+          static const foo @65
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @71
+                staticType: int
+        accessors
+          synthetic static get foo @-1
+            returnType: int
+        methods
+          bar @88
+            metadata
+              Annotation
+                atSign: @ @76
+                name: SimpleIdentifier
+                  token: foo @77
+                  staticElement: self::@extension::E::@getter::foo
+                  staticType: null
+                element: self::@extension::E::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_extensionDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+class A {}
+@a
+@Object()
+extension E on A {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+    extensions
+      E @50
+        metadata
+          Annotation
+            atSign: @ @27
+            name: SimpleIdentifier
+              token: a @28
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+          Annotation
+            atSign: @ @30
+            name: SimpleIdentifier
+              token: Object @31
+              staticElement: dart:core::@class::Object
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            element: dart:core::@class::Object::@constructor::•
+        extendedType: A
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldDeclaration() async {
+    var library = await buildLibrary('const a = null; class C { @a int x; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @33
+            metadata
+              Annotation
+                atSign: @ @26
+                name: SimpleIdentifier
+                  token: a @27
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @-1
+            returnType: int
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: int
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldFormalParameter() async {
+    var library = await buildLibrary('''
+const a = null;
+class C {
+  var x;
+  C(@a this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @32
+            type: dynamic
+        constructors
+          @37
+            parameters
+              requiredPositional final this.x @47
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign: @ @39
+                    name: SimpleIdentifier
+                      token: a @40
+                      staticElement: self::@getter::a
+                      staticType: null
+                    element: self::@getter::a
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldFormalParameter_withDefault() async {
+    var library = await buildLibrary(
+        'const a = null; class C { var x; C([@a this.x = null]); }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @30
+            type: dynamic
+        constructors
+          @33
+            parameters
+              optionalPositional final this.x @44
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign: @ @36
+                    name: SimpleIdentifier
+                      token: a @37
+                      staticElement: self::@getter::a
+                      staticType: null
+                    element: self::@getter::a
+                constantInitializer
+                  NullLiteral
+                    literal: null @48
+                    staticType: Null
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_function() async {
+    var library = await buildLibrary('''
+const a = null;
+@a
+f() {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @19
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_getter() async {
+    var library = await buildLibrary('const a = null; @a get f => null;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      synthetic static f @-1
+        type: dynamic
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      static get f @23
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_setter() async {
+    var library = await buildLibrary('const a = null; @a set f(value) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      synthetic static f @-1
+        type: dynamic
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      static set f @23
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        parameters
+          requiredPositional value @25
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_metadata_functionTypeAlias() async {
+    var library = await buildLibrary('const a = null; @a typedef F();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @27
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_functionTypedFormalParameter() async {
+    var library = await buildLibrary('const a = null; f(@a g()) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          requiredPositional g @21
+            type: dynamic Function()
+            metadata
+              Annotation
+                atSign: @ @18
+                name: SimpleIdentifier
+                  token: a @19
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_functionTypedFormalParameter_withDefault() async {
+    var library = await buildLibrary('const a = null; f([@a g() = null]) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          optionalPositional g @22
+            type: dynamic Function()
+            metadata
+              Annotation
+                atSign: @ @19
+                name: SimpleIdentifier
+                  token: a @20
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            constantInitializer
+              NullLiteral
+                literal: null @28
+                staticType: null
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_genericTypeAlias() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+typedef F = void Function();''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @46
+        metadata
+          Annotation
+            atSign: @ @32
+            name: SimpleIdentifier
+              token: a @33
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: b @36
+              staticElement: self::@getter::b
+              staticType: null
+            element: self::@getter::b
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @26
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get b @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_importDirective() async {
+    var library = await buildLibrary('''
+@a
+import "dart:math";
+const a = 0;
+''');
+    checkElementText(library, r'''
+library
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: self::@getter::a
+        staticType: null
+      element: self::@getter::a
+  imports
+    dart:math
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: self::@getter::a
+            staticType: null
+          element: self::@getter::a
+  definingUnit
+    topLevelVariables
+      static const a @29
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @33
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_importDirective_hasShow() async {
+    var library = await buildLibrary(r'''
+@a
+import "dart:math" show Random;
+
+const a = 0;
+''');
+    checkElementText(library, r'''
+library
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: self::@getter::a
+        staticType: null
+      element: self::@getter::a
+  imports
+    dart:math
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: self::@getter::a
+            staticType: null
+          element: self::@getter::a
+      combinators
+        show: Random
+  definingUnit
+    topLevelVariables
+      static const a @42
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @46
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_inAliasedElement_formalParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function(@a int first)
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional first @47
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @40
+                  name: SimpleIdentifier
+                    token: a @41
+                    staticElement: self::@getter::a
+                    staticType: null
+                  element: self::@getter::a
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_inAliasedElement_formalParameter2() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function(int foo(@a int bar))
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function(int Function(int))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional foo @44
+              type: int Function(int)
+              parameters
+                requiredPositional bar @55
+                  type: int
+                  metadata
+                    Annotation
+                      atSign: @ @48
+                      name: SimpleIdentifier
+                        token: a @49
+                        staticElement: self::@getter::a
+                        staticType: null
+                      element: self::@getter::a
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_inAliasedElement_typeParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function<@a T>(int first)
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function<T>(int)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @43
+              metadata
+                Annotation
+                  atSign: @ @40
+                  name: SimpleIdentifier
+                    token: a @41
+                    staticElement: self::@getter::a
+                    staticType: null
+                  element: self::@getter::a
+          parameters
+            requiredPositional first @50
+              type: int
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_invalid_classDeclaration() async {
+    var library = await buildLibrary('f(_) {} @f(42) class C {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @21
+        metadata
+          Annotation
+            atSign: @ @8
+            name: SimpleIdentifier
+              token: f @9
+              staticElement: self::@function::f
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @10
+              arguments
+                IntegerLiteral
+                  literal: 42 @11
+                  staticType: int
+              rightParenthesis: ) @13
+            element: self::@function::f
+        constructors
+          synthetic @-1
+    functions
+      f @0
+        parameters
+          requiredPositional _ @2
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_libraryDirective() async {
+    var library = await buildLibrary('@a library L; const a = null;');
+    checkElementText(library, r'''
+library
+  name: L
+  nameOffset: 11
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: self::@getter::a
+        staticType: null
+      element: self::@getter::a
+  definingUnit
+    topLevelVariables
+      static const a @20
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @24
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_getter() async {
+    var library =
+        await buildLibrary('const a = null; class C { @a get m => null; }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          synthetic m @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get m @33
+            metadata
+              Annotation
+                atSign: @ @26
+                name: SimpleIdentifier
+                  token: a @27
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_method() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+class C {
+  @a
+  @b
+  m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @38
+        constructors
+          synthetic @-1
+        methods
+          m @54
+            metadata
+              Annotation
+                atSign: @ @44
+                name: SimpleIdentifier
+                  token: a @45
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+              Annotation
+                atSign: @ @49
+                name: SimpleIdentifier
+                  token: b @50
+                  staticElement: self::@getter::b
+                  staticType: null
+                element: self::@getter::b
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @26
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get b @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_method_mixin() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+mixin M {
+  @a
+  @b
+  m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @38
+        superclassConstraints
+          Object
+        methods
+          m @54
+            metadata
+              Annotation
+                atSign: @ @44
+                name: SimpleIdentifier
+                  token: a @45
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+              Annotation
+                atSign: @ @49
+                name: SimpleIdentifier
+                  token: b @50
+                  staticElement: self::@getter::b
+                  staticType: null
+                element: self::@getter::b
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @26
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get b @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_setter() async {
+    var library = await buildLibrary('''
+const a = null;
+class C {
+  @a
+  set m(value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          synthetic m @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set m @37
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: a @29
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            parameters
+              requiredPositional value @39
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_mixin_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+mixin M<@foo T> {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @27
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @29
+                name: SimpleIdentifier
+                  token: foo @30
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        superclassConstraints
+          Object
+        fields
+          static const foo @54
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @60
+                staticType: int
+        accessors
+          synthetic static get foo @-1
+            returnType: int
+        methods
+          bar @77
+            metadata
+              Annotation
+                atSign: @ @65
+                name: SimpleIdentifier
+                  token: foo @66
+                  staticElement: self::@mixin::M::@getter::foo
+                  staticType: null
+                element: self::@mixin::M::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_mixinDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+mixin M {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @44
+        metadata
+          Annotation
+            atSign: @ @32
+            name: SimpleIdentifier
+              token: a @33
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: b @36
+              staticElement: self::@getter::b
+              staticType: null
+            element: self::@getter::b
+        superclassConstraints
+          Object
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @26
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get b @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_offsets_onClass() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+class A<@foo T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @29
+                name: SimpleIdentifier
+                  token: foo @30
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassConstructor() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  A(@foo int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          @35
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            parameters
+              requiredPositional a @46
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @37
+                    name: SimpleIdentifier
+                      token: foo @38
+                      staticElement: self::@getter::foo
+                      staticType: null
+                    element: self::@getter::foo
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassGetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  int get getter => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          synthetic getter @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get getter @43
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            returnType: int
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassMethod() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  void method<@foo T>(@foo int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+        methods
+          method @40
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            typeParameters
+              covariant T @52
+                metadata
+                  Annotation
+                    atSign: @ @47
+                    name: SimpleIdentifier
+                      token: foo @48
+                      staticElement: self::@getter::foo
+                      staticType: null
+                    element: self::@getter::foo
+            parameters
+              requiredPositional a @64
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @55
+                    name: SimpleIdentifier
+                      token: foo @56
+                      staticElement: self::@getter::foo
+                      staticType: null
+                    element: self::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassSetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  set setter(@foo int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          synthetic setter @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set setter @39
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            parameters
+              requiredPositional a @55
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @46
+                    name: SimpleIdentifier
+                      token: foo @47
+                      staticElement: self::@getter::foo
+                      staticType: null
+                    element: self::@getter::foo
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassTypeAlias() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {}
+mixin M {}
+
+@foo
+class B<@foo T> = A with M;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+      class alias B @50
+        metadata
+          Annotation
+            atSign: @ @39
+            name: SimpleIdentifier
+              token: foo @40
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @57
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @52
+                name: SimpleIdentifier
+                  token: foo @53
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        supertype: A
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: self::@class::A::@constructor::•
+    mixins
+      mixin M @33
+        superclassConstraints
+          Object
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onEnum() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+enum E {
+  @foo e1,
+  e2,
+  @foo e3,
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @26
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        supertype: Enum
+        fields
+          static const enumConstant e1 @37
+            metadata
+              Annotation
+                atSign: @ @32
+                name: SimpleIdentifier
+                  token: foo @33
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant e2 @43
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant e3 @54
+            metadata
+              Annotation
+                atSign: @ @49
+                name: SimpleIdentifier
+                  token: foo @50
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: e1 @-1
+                    staticElement: self::@enum::E::@getter::e1
+                    staticType: E
+                  SimpleIdentifier
+                    token: e2 @-1
+                    staticElement: self::@enum::E::@getter::e2
+                    staticType: E
+                  SimpleIdentifier
+                    token: e3 @-1
+                    staticElement: self::@enum::E::@getter::e3
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get e1 @-1
+            returnType: E
+          synthetic static get e2 @-1
+            returnType: E
+          synthetic static get e3 @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onExtension() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+extension E<@foo T> on List<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @31
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @38
+            metadata
+              Annotation
+                atSign: @ @33
+                name: SimpleIdentifier
+                  token: foo @34
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        extendedType: List<T>
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onFieldDeclaration() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  static isStatic = 1;
+
+  @foo
+  static const isStaticConst = 2;
+
+  @foo
+  var isInstance = 3;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          static isStatic @42
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            type: int
+          static const isStaticConst @79
+            metadata
+              Annotation
+                atSign: @ @59
+                name: SimpleIdentifier
+                  token: foo @60
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @95
+                staticType: int
+          isInstance @112
+            metadata
+              Annotation
+                atSign: @ @101
+                name: SimpleIdentifier
+                  token: foo @102
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get isStatic @-1
+            returnType: int
+          synthetic static set isStatic @-1
+            parameters
+              requiredPositional _isStatic @-1
+                type: int
+            returnType: void
+          synthetic static get isStaticConst @-1
+            returnType: int
+          synthetic get isInstance @-1
+            returnType: int
+          synthetic set isInstance @-1
+            parameters
+              requiredPositional _isInstance @-1
+                type: int
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onLibrary() async {
+    var library = await buildLibrary('''
+/// Some documentation.
+@foo
+library my.lib;
+
+const foo = 0;
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 37
+  documentationComment: /// Some documentation.
+  metadata
+    Annotation
+      atSign: @ @24
+      name: SimpleIdentifier
+        token: foo @25
+        staticElement: self::@getter::foo
+        staticType: null
+      element: self::@getter::foo
+  definingUnit
+    topLevelVariables
+      static const foo @52
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @58
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onMixin() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+mixin A<@foo T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin A @27
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @29
+                name: SimpleIdentifier
+                  token: foo @30
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        superclassConstraints
+          Object
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onTypeAlias_classic() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+typedef void F<@foo T>(@foo int a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @34
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          unrelated T @41
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @36
+                name: SimpleIdentifier
+                  token: foo @37
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @53
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @44
+                  name: SimpleIdentifier
+                    token: foo @45
+                    staticElement: self::@getter::foo
+                    staticType: null
+                  element: self::@getter::foo
+          returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onTypeAlias_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+typedef A<@foo T> = void Function<@foo U>(@foo int a);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @29
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          unrelated T @36
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @31
+                name: SimpleIdentifier
+                  token: foo @32
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        aliasedType: void Function<U>(int)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant U @60
+              metadata
+                Annotation
+                  atSign: @ @55
+                  name: SimpleIdentifier
+                    token: foo @56
+                    staticElement: self::@getter::foo
+                    staticType: null
+                  element: self::@getter::foo
+          parameters
+            requiredPositional a @72
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @63
+                  name: SimpleIdentifier
+                    token: foo @64
+                    staticElement: self::@getter::foo
+                    staticType: null
+                  element: self::@getter::foo
+          returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onUnit() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+''');
+
+    addSource('$testPackageLibPath/b.dart', '''
+part of my.lib;
+''');
+
+    var library = await buildLibrary('''
+library my.lib;
+
+@foo
+part 'a.dart';
+
+@foo
+part 'b.dart';
+
+const foo = 0;
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static const foo @65
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @71
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+  parts
+    a.dart
+      metadata
+        Annotation
+          atSign: @ @17
+          name: SimpleIdentifier
+            token: foo @18
+            staticElement: self::@getter::foo
+            staticType: null
+          element: self::@getter::foo
+    b.dart
+      metadata
+        Annotation
+          atSign: @ @38
+          name: SimpleIdentifier
+            token: foo @39
+            staticElement: self::@getter::foo
+            staticType: null
+          element: self::@getter::foo
+''');
+  }
+
+  test_metadata_offsets_onUnitFunction() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+void f<@foo T>({@foo int? a = 42}) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+    functions
+      f @26
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        typeParameters
+          covariant T @33
+            metadata
+              Annotation
+                atSign: @ @28
+                name: SimpleIdentifier
+                  token: foo @29
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        parameters
+          optionalNamed a @47
+            type: int?
+            metadata
+              Annotation
+                atSign: @ @37
+                name: SimpleIdentifier
+                  token: foo @38
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @51
+                staticType: int
+        returnType: void
+''');
+  }
+
+  test_metadata_offsets_onUnitGetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+int get getter => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      synthetic static getter @-1
+        type: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+      static get getter @29
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        returnType: int
+''');
+  }
+
+  test_metadata_offsets_onUnitSetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+set setter(@foo int a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      synthetic static setter @-1
+        type: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+      static set setter @25
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        parameters
+          requiredPositional a @41
+            type: int
+            metadata
+              Annotation
+                atSign: @ @32
+                name: SimpleIdentifier
+                  token: foo @33
+                  staticElement: self::@getter::foo
+                  staticType: null
+                element: self::@getter::foo
+        returnType: void
+''');
+  }
+
+  test_metadata_offsets_onUnitVariable() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+var isNotConst = 1;
+
+@foo
+const isConst = 2;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      static isNotConst @25
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: foo @17
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        type: int
+      static const isConst @53
+        metadata
+          Annotation
+            atSign: @ @42
+            name: SimpleIdentifier
+              token: foo @43
+              staticElement: self::@getter::foo
+              staticType: null
+            element: self::@getter::foo
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 2 @63
+            staticType: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+      synthetic static get isNotConst @-1
+        returnType: int
+      synthetic static set isNotConst @-1
+        parameters
+          requiredPositional _isNotConst @-1
+            type: int
+        returnType: void
+      synthetic static get isConst @-1
+        returnType: int
+''');
+  }
+
+  test_metadata_partDirective() async {
+    addSource('$testPackageLibPath/foo.dart', 'part of L;');
+    var library = await buildLibrary('''
+library L;
+@a
+part 'foo.dart';
+const a = null;''');
+    checkElementText(library, r'''
+library
+  name: L
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static const a @37
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @41
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+  parts
+    foo.dart
+      metadata
+        Annotation
+          atSign: @ @11
+          name: SimpleIdentifier
+            token: a @12
+            staticElement: self::@getter::a
+            staticType: null
+          element: self::@getter::a
+''');
+  }
+
+  test_metadata_partDirective2() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+''');
+    addSource('$testPackageLibPath/b.dart', r'''
+part of 'test.dart';
+''');
+    var library = await buildLibrary('''
+part 'a.dart';
+part 'b.dart';
+''');
+
+    // The difference with the test above is that we ask the part first.
+    // There was a bug that we were not loading library directives.
+    expect(library.parts[0].metadata, isEmpty);
+  }
+
+  test_metadata_prefixed_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'const b = null;');
+    var library = await buildLibrary('import "a.dart" as a; @a.b class C {}');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as a @19
+  definingUnit
+    classes
+      class C @33
+        metadata
+          Annotation
+            atSign: @ @22
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: a @23
+                staticElement: self::@prefix::a
+                staticType: null
+              period: . @24
+              identifier: SimpleIdentifier
+                token: b @25
+                staticElement: package:test/a.dart::@getter::b
+                staticType: null
+              staticElement: package:test/a.dart::@getter::b
+              staticType: null
+            element: package:test/a.dart::@getter::b
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_simpleFormalParameter() async {
+    var library = await buildLibrary('const a = null; f(@a x) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          requiredPositional x @21
+            type: dynamic
+            metadata
+              Annotation
+                atSign: @ @18
+                name: SimpleIdentifier
+                  token: a @19
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_simpleFormalParameter_method() async {
+    var library = await buildLibrary('''
+const a = null;
+
+class C {
+  m(@a x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @23
+        constructors
+          synthetic @-1
+        methods
+          m @29
+            parameters
+              requiredPositional x @34
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign: @ @31
+                    name: SimpleIdentifier
+                      token: a @32
+                      staticElement: self::@getter::a
+                      staticType: null
+                    element: self::@getter::a
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_simpleFormalParameter_unit_setter() async {
+    var library = await buildLibrary('''
+const a = null;
+
+set foo(@a int x) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      synthetic static foo @-1
+        type: int
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      static set foo @21
+        parameters
+          requiredPositional x @32
+            type: int
+            metadata
+              Annotation
+                atSign: @ @25
+                name: SimpleIdentifier
+                  token: a @26
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        returnType: void
+''');
+  }
+
+  test_metadata_simpleFormalParameter_withDefault() async {
+    var library = await buildLibrary('const a = null; f([@a x = null]) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          optionalPositional x @22
+            type: dynamic
+            metadata
+              Annotation
+                atSign: @ @19
+                name: SimpleIdentifier
+                  token: a @20
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+            constantInitializer
+              NullLiteral
+                literal: null @26
+                staticType: Null
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_superFormalParameter() async {
+    var library = await buildLibrary('''
+const a = null;
+
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B(@a super.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @23
+        constructors
+          @29
+            parameters
+              requiredPositional x @35
+                type: int
+      class B @48
+        supertype: A
+        constructors
+          @64
+            parameters
+              requiredPositional final super.x @75
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @66
+                    name: SimpleIdentifier
+                      token: a @67
+                      staticElement: self::@getter::a
+                      staticType: null
+                    element: self::@getter::a
+                superConstructorParameter: x@35
+            superConstructor: self::@class::A::@constructor::•
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_topLevelVariableDeclaration() async {
+    var library = await buildLibrary('const a = null; @a int v;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+      static v @23
+        metadata
+          Annotation
+            atSign: @ @16
+            name: SimpleIdentifier
+              token: a @17
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        type: int
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_metadata_typeParameter_ofClass() async {
+    var library = await buildLibrary('const a = null; class C<@a T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @22
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @24
+                name: SimpleIdentifier
+                  token: a @25
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofClassTypeAlias() async {
+    var library = await buildLibrary('''
+const a = null;
+class C<@a T> = D with E;
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class alias C @22
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @24
+                name: SimpleIdentifier
+                  token: a @25
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+            superConstructor: self::@class::D::@constructor::•
+      class D @48
+        constructors
+          synthetic @-1
+      class E @59
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofFunction() async {
+    var library = await buildLibrary('const a = null; f<@a T>() {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+    functions
+      f @16
+        typeParameters
+          covariant T @21
+            metadata
+              Annotation
+                atSign: @ @18
+                name: SimpleIdentifier
+                  token: a @19
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofTypedef() async {
+    var library = await buildLibrary('const a = null; typedef F<@a T>();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @24
+        typeParameters
+          unrelated T @29
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign: @ @26
+                name: SimpleIdentifier
+                  token: a @27
+                  staticElement: self::@getter::a
+                  staticType: null
+                element: self::@getter::a
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @10
+            staticType: Null
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+''');
+  }
+
+  test_metadata_unit_topLevelVariable_first() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+@a
+int x = 0;
+''');
+    // Check metadata without asking any other properties.
+    var x = _elementOfDefiningUnit(library, ['@variable', 'x'])
+        as TopLevelVariableElement;
+    expect(x.metadata, hasLength(1));
+    // Check details.
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static x @20
+        metadata
+          Annotation
+            atSign: @ @13
+            name: SimpleIdentifier
+              token: a @14
+              staticElement: self::@getter::a
+              staticType: null
+            element: self::@getter::a
+        type: int
+    accessors
+      synthetic static get a @-1
+        returnType: int
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_metadata_value_class_staticField() async {
+    var library = await buildLibrary('''
+class A {
+  static const x = 0;
+}
+@A.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static const x @25
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @29
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @-1
+            returnType: int
+      class C @45
+        metadata
+          Annotation
+            atSign: @ @34
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: A @35
+                staticElement: self::@class::A
+                staticType: null
+              period: . @36
+              identifier: SimpleIdentifier
+                token: x @37
+                staticElement: self::@class::A::@getter::x
+                staticType: null
+              staticElement: self::@class::A::@getter::x
+              staticType: null
+            element: self::@class::A::@getter::x
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_metadata_value_enum_constant() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+@E.b
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @28
+        metadata
+          Annotation
+            atSign: @ @17
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: E @18
+                staticElement: self::@enum::E
+                staticType: null
+              period: . @19
+              identifier: SimpleIdentifier
+                token: b @20
+                staticElement: self::@enum::E::@getter::b
+                staticType: null
+              staticElement: self::@enum::E::@getter::b
+              staticType: null
+            element: self::@enum::E::@getter::b
+        constructors
+          synthetic @-1
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @8
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant b @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          static const enumConstant c @14
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                  SimpleIdentifier
+                    token: c @-1
+                    staticElement: self::@enum::E::@getter::c
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+''');
+  }
+
+  test_metadata_value_extension_staticField() async {
+    var library = await buildLibrary('''
+extension E on int {
+  static const x = 0;
+}
+@E.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @56
+        metadata
+          Annotation
+            atSign: @ @45
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: E @46
+                staticElement: self::@extension::E
+                staticType: null
+              period: . @47
+              identifier: SimpleIdentifier
+                token: x @48
+                staticElement: self::@extension::E::@getter::x
+                staticType: null
+              staticElement: self::@extension::E::@getter::x
+              staticType: null
+            element: self::@extension::E::@getter::x
+        constructors
+          synthetic @-1
+    extensions
+      E @10
+        extendedType: int
+        fields
+          static const x @36
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @40
+                staticType: int
+        accessors
+          synthetic static get x @-1
+            returnType: int
+''');
+  }
+
+  test_metadata_value_prefix_extension_staticField() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+extension E on int {
+  static const x = 0;
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+@foo.E.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @41
+        metadata
+          Annotation
+            atSign: @ @26
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @27
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @30
+              identifier: SimpleIdentifier
+                token: E @31
+                staticElement: package:test/foo.dart::@extension::E
+                staticType: null
+              staticElement: package:test/foo.dart::@extension::E
+              staticType: null
+            period: . @32
+            constructorName: SimpleIdentifier
+              token: x @33
+              staticElement: package:test/foo.dart::@extension::E::@getter::x
+              staticType: null
+            element: package:test/foo.dart::@extension::E::@getter::x
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_methodInvocation_implicitCall() async {
+    var library = await buildLibrary(r'''
+class A {
+  double call() => 0.0;
+}
+class B {
+  A a;
+}
+var c = new B().a();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          call @19
+            returnType: double
+      class B @42
+        fields
+          a @50
+            type: A
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @-1
+            returnType: A
+          synthetic set a @-1
+            parameters
+              requiredPositional _a @-1
+                type: A
+            returnType: void
+    topLevelVariables
+      static c @59
+        type: double
+    accessors
+      synthetic static get c @-1
+        returnType: double
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: double
+        returnType: void
+''');
+  }
+
+  test_mixin() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B {}
+class C {}
+class D {}
+
+mixin M<T extends num, U> on A, B implements C, D {
+  T f;
+  U get g => 0;
+  set s(int v) {}
+  int m(double v) => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class C @28
+        constructors
+          synthetic @-1
+      class D @39
+        constructors
+          synthetic @-1
+    mixins
+      mixin M @51
+        typeParameters
+          covariant T @53
+            bound: num
+            defaultType: num
+          covariant U @68
+            defaultType: dynamic
+        superclassConstraints
+          A
+          B
+        interfaces
+          C
+          D
+        fields
+          f @101
+            type: T
+          synthetic g @-1
+            type: U
+          synthetic s @-1
+            type: int
+        accessors
+          synthetic get f @-1
+            returnType: T
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: T
+            returnType: void
+          get g @112
+            returnType: U
+          set s @126
+            parameters
+              requiredPositional v @132
+                type: int
+            returnType: void
+        methods
+          m @144
+            parameters
+              requiredPositional v @153
+                type: double
+            returnType: int
+''');
+  }
+
+  test_mixin_field_inferredType_final() async {
+    var library = await buildLibrary('''
+mixin M {
+  final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        fields
+          final x @18
+            type: int
+        accessors
+          synthetic get x @-1
+            returnType: int
+''');
+  }
+
+  test_mixin_first() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+''');
+
+    // We intentionally ask `mixins` directly, to check that we can ask them
+    // separately, without asking classes.
+    var mixins = library.definingCompilationUnit.mixins;
+    expect(mixins, hasLength(1));
+    expect(mixins[0].name, 'M');
+  }
+
+  test_mixin_implicitObjectSuperclassConstraint() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_mixin_inference_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M<U> on A<U> {}
+class B extends A<int> with M {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        supertype: A<int*>*
+        mixins
+          M<int*>*
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int*}
+    mixins
+      mixin M @20
+        typeParameters
+          covariant U @22
+            defaultType: dynamic
+        superclassConstraints
+          A<U*>*
+''');
+  }
+
+  test_mixin_inference_nullSafety() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M<U> on A<U> {}
+class B extends A<int> with M {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        supertype: A<int>
+        mixins
+          M<int>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+    mixins
+      mixin M @20
+        typeParameters
+          covariant U @22
+            defaultType: dynamic
+        superclassConstraints
+          A<U>
+''');
+  }
+
+  test_mixin_inference_nullSafety2() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A<T> {}
+
+mixin B<T> on A<T> {}
+mixin C<T> on A<T> {}
+''');
+    var library = await buildLibrary(r'''
+// @dart=2.8
+import 'a.dart';
+
+class D extends A<int> with B<int>, C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class D @37
+        supertype: A<int*>*
+        mixins
+          B<int*>*
+          C<int*>*
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: package:test/a.dart::@class::A::@constructor::•
+              substitution: {T: int*}
+''');
+  }
+
+  test_mixin_inference_nullSafety_mixed_inOrder() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A<T> {}
+mixin M<U> on A<U> {}
+''');
+    var library = await buildLibrary(r'''
+// @dart = 2.8
+import 'a.dart';
+class B extends A<int> with M {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class B @38
+        supertype: A<int*>*
+        mixins
+          M<int*>*
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: package:test/a.dart::@class::A::@constructor::•
+              substitution: {T: int*}
+''');
+  }
+
+  @FailingTest(reason: 'Out-of-order inference is not specified yet')
+  test_mixin_inference_nullSafety_mixed_outOfOrder() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+// @dart = 2.8
+class A<T> {}
+mixin M<U> on A<U> {}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+class B extends A<int> with M {}
+''');
+    checkElementText(library, r'''
+import 'a.dart';
+class B extends A<int> with M<int> {
+  synthetic B();
+}
+''');
+  }
+
+  test_mixin_method_namedAsConstraint() async {
+    var library = await buildLibrary(r'''
+class A {}
+mixin B on A {
+  void A() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @17
+        superclassConstraints
+          A
+        methods
+          A @33
+            returnType: void
+''');
+  }
+
+  test_mixin_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('mixin M<in T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('mixin M<out T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('mixin M<inout T> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('mixin M<inout T, in U, out V> {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+          contravariant U @20
+            defaultType: dynamic
+          covariant V @27
+            defaultType: dynamic
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_nameConflict_exportedAndLocal() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/c.dart', '''
+export 'a.dart';
+class C {}
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/c.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @-1
+        returnType: C
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_nameConflict_exportedAndLocal_exported() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/c.dart', '''
+export 'a.dart';
+class C {}
+''');
+    addSource('$testPackageLibPath/d.dart', 'export "c.dart";');
+    var library = await buildLibrary('''
+import 'd.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/d.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @-1
+        returnType: C
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_nameConflict_exportedAndParted() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', '''
+part of lib;
+class C {}
+''');
+    addSource('$testPackageLibPath/c.dart', '''
+library lib;
+export 'a.dart';
+part 'b.dart';
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/c.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @-1
+        returnType: C
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
+    if (resourceProvider.pathContext.separator != '/') {
+      return;
+    }
+
+    addSource('$testPackageLibPath/a.dart', 'class A {}');
+    addSource('$testPackageLibPath/b.dart', 'export "/a.dart";');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+A v = null;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+    topLevelVariables
+      static v @36
+        type: A
+    accessors
+      synthetic static get v @-1
+        returnType: A
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: A
+        returnType: void
+''');
+  }
+
+  test_nameOffset_class_constructor() async {
+    var library = await buildLibrary(r'''
+class A {
+  A();
+  A.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
+''');
+  }
+
+  test_nameOffset_class_constructor_parameter() async {
+    var library = await buildLibrary(r'''
+class A {
+  A(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+''');
+  }
+
+  test_nameOffset_class_field() async {
+    var library = await buildLibrary(r'''
+class A {
+  int foo = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          foo @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_nameOffset_class_getter() async {
+    var library = await buildLibrary(r'''
+class A {
+  int get foo => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get foo @20
+            returnType: int
+''');
+  }
+
+  test_nameOffset_class_method() async {
+    var library = await buildLibrary(r'''
+class A {
+  void foo<T>(int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          foo @17
+            typeParameters
+              covariant T @21
+            parameters
+              requiredPositional a @28
+                type: int
+            returnType: void
+''');
+  }
+
+  test_nameOffset_class_setter() async {
+    var library = await buildLibrary(r'''
+class A {
+  set foo(int x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set foo @16
+            parameters
+              requiredPositional x @24
+                type: int
+            returnType: void
+''');
+  }
+
+  test_nameOffset_class_typeParameter() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_nameOffset_extension_typeParameter() async {
+    var library = await buildLibrary(r'''
+extension E<T> on int {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @10
+        typeParameters
+          covariant T @12
+        extendedType: int
+''');
+  }
+
+  test_nameOffset_function_functionTypedFormal_parameter() async {
+    var library = await buildLibrary(r'''
+void f(void f<U>(int a)) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional f @12
+            type: void Function<U>(int)
+            typeParameters
+              covariant U @14
+            parameters
+              requiredPositional a @21
+                type: int
+        returnType: void
+''');
+  }
+
+  test_nameOffset_function_functionTypedFormal_parameter2() async {
+    var library = await buildLibrary(r'''
+void f({required void f<U>(int a)}) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredNamed f @22
+            type: void Function<U>(int)
+            typeParameters
+              covariant U @24
+            parameters
+              requiredPositional a @31
+                type: int
+        returnType: void
+''');
+  }
+
+  test_nameOffset_function_typeParameter() async {
+    var library = await buildLibrary(r'''
+void f<T>() {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+        returnType: void
+''');
+  }
+
+  test_nameOffset_functionTypeAlias_typeParameter() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_nameOffset_genericTypeAlias_typeParameter() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_nameOffset_mixin_typeParameter() async {
+    var library = await buildLibrary(r'''
+mixin M<T> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_nameOffset_unit_getter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: int
+    accessors
+      static get foo @8
+        returnType: int
+''');
+  }
+
+  test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  void g<V, W>() {
+    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          g @23
+            typeParameters
+              covariant V @25
+              covariant W @28
+            returnType: void
+''');
+  }
+
+  test_nested_generic_functions_in_generic_class_with_local_variables() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  void g<V, W>() {
+    void h<X, Y>() {
+      T t;
+      U u;
+      V v;
+      W w;
+      X x;
+      Y y;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          g @23
+            typeParameters
+              covariant V @25
+              covariant W @28
+            returnType: void
+''');
+  }
+
+  test_nested_generic_functions_with_function_typed_param() async {
+    var library = await buildLibrary('''
+void f<T, U>() {
+  void g<V, W>() {
+    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        returnType: void
+''');
+  }
+
+  test_nested_generic_functions_with_local_variables() async {
+    var library = await buildLibrary('''
+void f<T, U>() {
+  void g<V, W>() {
+    void h<X, Y>() {
+      T t;
+      U u;
+      V v;
+      W w;
+      X x;
+      Y y;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        returnType: void
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_functionType_returnType() async {
+    var library = await buildLibrary('''
+typedef F = G Function();
+typedef G = F Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      notSimplyBounded G @34
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_functionType_returnType_viaInterfaceType() async {
+    var library = await buildLibrary('''
+typedef F = List<F> Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: List<dynamic> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<dynamic>
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef F<T extends F> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_simple_no_bounds() async {
+    var library = await buildLibrary('''
+typedef F<T> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_simple_non_generic() async {
+    var library = await buildLibrary('''
+typedef F = void Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_new_typedef_nonFunction_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef F<T extends F> = List<int>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<int>
+''');
+  }
+
+  test_new_typedef_nonFunction_notSimplyBounded_viaInterfaceType() async {
+    var library = await buildLibrary('''
+typedef F = List<F>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: List<dynamic>
+''');
+  }
+
+  test_nonSynthetic_class_field() async {
+    var library = await buildLibrary(r'''
+class C {
+  int foo = 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          foo @16
+            type: int
+            nonSynthetic: self::@class::C::@field::foo
+        constructors
+          synthetic @-1
+            nonSynthetic: self::@class::C
+        accessors
+          synthetic get foo @-1
+            returnType: int
+            nonSynthetic: self::@class::C::@field::foo
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+                nonSynthetic: self::@class::C::@field::foo
+            returnType: void
+            nonSynthetic: self::@class::C::@field::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_class_getter() async {
+    var library = await buildLibrary(r'''
+class C {
+  int get foo => 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@class::C::@getter::foo
+        constructors
+          synthetic @-1
+            nonSynthetic: self::@class::C
+        accessors
+          get foo @20
+            returnType: int
+            nonSynthetic: self::@class::C::@getter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_class_setter() async {
+    var library = await buildLibrary(r'''
+class C {
+  set foo(int value) {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@class::C::@setter::foo
+        constructors
+          synthetic @-1
+            nonSynthetic: self::@class::C
+        accessors
+          set foo @16
+            parameters
+              requiredPositional value @24
+                type: int
+                nonSynthetic: value@24
+            returnType: void
+            nonSynthetic: self::@class::C::@setter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_enum() async {
+    var library = await buildLibrary(r'''
+enum E {
+  a, b
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant a @11
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+            nonSynthetic: self::@enum::E::@field::a
+          static const enumConstant b @14
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+            nonSynthetic: self::@enum::E::@field::b
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: a @-1
+                    staticElement: self::@enum::E::@getter::a
+                    staticType: E
+                  SimpleIdentifier
+                    token: b @-1
+                    staticElement: self::@enum::E::@getter::b
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+            nonSynthetic: self::@enum::E
+        constructors
+          synthetic const @-1
+            nonSynthetic: self::@enum::E
+        accessors
+          synthetic static get a @-1
+            returnType: E
+            nonSynthetic: self::@enum::E::@field::a
+          synthetic static get b @-1
+            returnType: E
+            nonSynthetic: self::@enum::E::@field::b
+          synthetic static get values @-1
+            returnType: List<E>
+            nonSynthetic: self::@enum::E
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_extension_getter() async {
+    var library = await buildLibrary(r'''
+extension E on int {
+  int get foo => 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    extensions
+      E @10
+        extendedType: int
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@extension::E::@getter::foo
+        accessors
+          get foo @31
+            returnType: int
+            nonSynthetic: self::@extension::E::@getter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_extension_setter() async {
+    var library = await buildLibrary(r'''
+extension E on int {
+  set foo(int value) {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    extensions
+      E @10
+        extendedType: int
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@extension::E::@setter::foo
+        accessors
+          set foo @27
+            parameters
+              requiredPositional value @35
+                type: int
+                nonSynthetic: value@35
+            returnType: void
+            nonSynthetic: self::@extension::E::@setter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_mixin_field() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  int foo = 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        fields
+          foo @16
+            type: int
+            nonSynthetic: self::@mixin::M::@field::foo
+        accessors
+          synthetic get foo @-1
+            returnType: int
+            nonSynthetic: self::@mixin::M::@field::foo
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+                nonSynthetic: self::@mixin::M::@field::foo
+            returnType: void
+            nonSynthetic: self::@mixin::M::@field::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_mixin_getter() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  int get foo => 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@mixin::M::@getter::foo
+        accessors
+          get foo @20
+            returnType: int
+            nonSynthetic: self::@mixin::M::@getter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_mixin_setter() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  set foo(int value) {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        fields
+          synthetic foo @-1
+            type: int
+            nonSynthetic: self::@mixin::M::@setter::foo
+        accessors
+          set foo @16
+            parameters
+              requiredPositional value @24
+                type: int
+                nonSynthetic: value@24
+            returnType: void
+            nonSynthetic: self::@mixin::M::@setter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_unit_getter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: int
+        nonSynthetic: self::@getter::foo
+    accessors
+      static get foo @8
+        returnType: int
+        nonSynthetic: self::@getter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_unit_getterSetter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+set foo(int value) {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: int
+        nonSynthetic: self::@getter::foo
+    accessors
+      static get foo @8
+        returnType: int
+        nonSynthetic: self::@getter::foo
+      static set foo @22
+        parameters
+          requiredPositional value @30
+            type: int
+            nonSynthetic: value@30
+        returnType: void
+        nonSynthetic: self::@setter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_unit_setter() async {
+    var library = await buildLibrary(r'''
+set foo(int value) {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: int
+        nonSynthetic: self::@setter::foo
+    accessors
+      static set foo @4
+        parameters
+          requiredPositional value @12
+            type: int
+            nonSynthetic: value@12
+        returnType: void
+        nonSynthetic: self::@setter::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_nonSynthetic_unit_variable() async {
+    var library = await buildLibrary(r'''
+int foo = 0;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      static foo @4
+        type: int
+        nonSynthetic: self::@variable::foo
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+        nonSynthetic: self::@variable::foo
+      synthetic static set foo @-1
+        parameters
+          requiredPositional _foo @-1
+            type: int
+            nonSynthetic: self::@variable::foo
+        returnType: void
+        nonSynthetic: self::@variable::foo
+''',
+        withNonSynthetic: true);
+  }
+
+  test_parameter() async {
+    var library = await buildLibrary('void main(int p) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @5
+        parameters
+          requiredPositional p @14
+            type: int
+        returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_named() async {
+    var library = await buildLibrary('''
+class A {
+  void m({covariant A a}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalNamed covariant a @32
+                type: A
+            returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_positional() async {
+    var library = await buildLibrary('''
+class A {
+  void m([covariant A a]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalPositional covariant a @32
+                type: A
+            returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_required() async {
+    var library = await buildLibrary('''
+class A {
+  void m(covariant A a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional covariant a @31
+                type: A
+            returnType: void
+''');
+  }
+
+  test_parameter_covariant_inherited() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  void f(covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(T t) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            parameters
+              requiredPositional covariant t @34
+                type: T
+            returnType: void
+      class B @48
+        typeParameters
+          covariant T @50
+            defaultType: dynamic
+        supertype: A<T>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: T}
+        methods
+          f @75
+            parameters
+              requiredPositional covariant t @79
+                type: T
+            returnType: void
+''');
+  }
+
+  test_parameter_covariant_inherited_named() async {
+    var library = await buildLibrary('''
+class A {
+  void m({covariant A a}) {}
+}
+class B extends A {
+  void m({B a}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalNamed covariant a @32
+                type: A
+            returnType: void
+      class B @47
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+        methods
+          m @68
+            parameters
+              optionalNamed covariant a @73
+                type: B
+            returnType: void
+''');
+  }
+
+  test_parameter_parameters() async {
+    var library = await buildLibrary('class C { f(g(x, y)) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @12
+                type: dynamic Function(dynamic, dynamic)
+                parameters
+                  requiredPositional x @14
+                    type: dynamic
+                  requiredPositional y @17
+                    type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_parameter_parameters_in_generic_class() async {
+    var library = await buildLibrary('class C<A, B> { f(A g(B x)) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant A @8
+            defaultType: dynamic
+          covariant B @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @16
+            parameters
+              requiredPositional g @20
+                type: A Function(B)
+                parameters
+                  requiredPositional x @24
+                    type: B
+            returnType: dynamic
+''');
+  }
+
+  test_parameter_return_type() async {
+    var library = await buildLibrary('class C { f(int g()) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @16
+                type: int Function()
+            returnType: dynamic
+''');
+  }
+
+  test_parameter_return_type_void() async {
+    var library = await buildLibrary('class C { f(void g()) {} }');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @17
+                type: void Function()
+            returnType: dynamic
+''');
+  }
+
+  test_parameter_typeParameters() async {
+    var library = await buildLibrary(r'''
+void f(T a<T, U>(U u)) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional a @9
+            type: T Function<T, U>(U)
+            typeParameters
+              covariant T @11
+              covariant U @14
+            parameters
+              requiredPositional u @19
+                type: U
+        returnType: void
+''');
+  }
+
+  test_parameterTypeNotInferred_constructor() async {
+    // Strong mode doesn't do type inference on constructor parameters, so it's
+    // ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  C.positional([x = 1]);
+  C.named({x: 1});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          positional @14
+            periodOffset: 13
+            nameEnd: 24
+            parameters
+              optionalPositional x @26
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @30
+                    staticType: int
+          named @39
+            periodOffset: 38
+            nameEnd: 44
+            parameters
+              optionalNamed x @46
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @49
+                    staticType: int
+''');
+  }
+
+  test_parameterTypeNotInferred_initializingFormal() async {
+    // Strong mode doesn't do type inference on initializing formals, so it's
+    // ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  var x;
+  C.positional([this.x = 1]);
+  C.named({this.x: 1});
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          positional @23
+            periodOffset: 22
+            nameEnd: 33
+            parameters
+              optionalPositional final this.x @40
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @44
+                    staticType: int
+                field: self::@class::C::@field::x
+          named @53
+            periodOffset: 52
+            nameEnd: 58
+            parameters
+              optionalNamed final this.x @65
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @68
+                    staticType: int
+                field: self::@class::C::@field::x
+        accessors
+          synthetic get x @-1
+            returnType: dynamic
+          synthetic set x @-1
+            parameters
+              requiredPositional _x @-1
+                type: dynamic
+            returnType: void
+''');
+  }
+
+  test_parameterTypeNotInferred_staticMethod() async {
+    // Strong mode doesn't do type inference on parameters of static methods,
+    // so it's ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  static void positional([x = 1]) {}
+  static void named({x: 1}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static positional @24
+            parameters
+              optionalPositional x @36
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @40
+                    staticType: int
+            returnType: void
+          static named @61
+            parameters
+              optionalNamed x @68
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @71
+                    staticType: int
+            returnType: void
+''');
+  }
+
+  test_parameterTypeNotInferred_topLevelFunction() async {
+    // Strong mode doesn't do type inference on parameters of top level
+    // functions, so it's ok that we don't store inferred type info for them in
+    // summaries.
+    var library = await buildLibrary('''
+void positional([x = 1]) {}
+void named({x: 1}) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      positional @5
+        parameters
+          optionalPositional x @17
+            type: dynamic
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @21
+                staticType: int
+        returnType: void
+      named @33
+        parameters
+          optionalNamed x @40
+            type: dynamic
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @43
+                staticType: int
+        returnType: void
+''');
+  }
+
+  test_part_emptyUri() async {
+    var library = await buildLibrary(r'''
+part '';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @15
+        constructors
+          synthetic @-1
+  parts
+
+      classes
+        class B @15
+          constructors
+            synthetic @-1
+''');
+  }
+
+  test_part_uri() async {
+    var library = await buildLibrary('''
+part 'foo.dart';
+''');
+    expect(library.parts[0].uri, 'foo.dart');
+  }
+
+  test_parts() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib;');
+    addSource('$testPackageLibPath/b.dart', 'part of my.lib;');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+    b.dart
+''');
+  }
+
+  test_parts_invalidUri() async {
+    addSource('$testPackageLibPath/foo/bar.dart', 'part of my.lib;');
+    var library = await buildLibrary('library my.lib; part "foo/";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    foo/
+''');
+  }
+
+  test_parts_invalidUri_nullStringValue() async {
+    addSource('$testPackageLibPath/foo/bar.dart', 'part of my.lib;');
+    var library = await buildLibrary(r'''
+library my.lib;
+part "${foo}/bar.dart";
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+''');
+  }
+
+  test_propagated_type_refers_to_closure() async {
+    var library = await buildLibrary('''
+void f() {
+  var x = () => 0;
+  var y = x;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
+''');
+  }
+
+  test_setter_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+void set x(value) {}''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: dynamic
+    accessors
+      static set x @69
+        documentationComment: /**\n * Docs\n */
+        parameters
+          requiredPositional value @71
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_setter_external() async {
+    var library = await buildLibrary('external void set x(int value);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static external set x @18
+        parameters
+          requiredPositional value @24
+            type: int
+        returnType: void
+''');
+  }
+
+  test_setter_inferred_type_top_level_implicit_return() async {
+    var library = await buildLibrary('set f(int value) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static f @-1
+        type: int
+    accessors
+      static set f @4
+        parameters
+          requiredPositional value @10
+            type: int
+        returnType: void
+''');
+  }
+
+  test_setters() async {
+    var library =
+        await buildLibrary('void set x(int value) {} set y(value) {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+      synthetic static y @-1
+        type: dynamic
+    accessors
+      static set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      static set y @29
+        parameters
+          requiredPositional value @31
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_genericClosure() async {
+    var library = await buildLibrary('''
+final v = f() ? <T>(T t) => 0 : <T>(T t) => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function<T>(T)
+    accessors
+      synthetic static get v @-1
+        returnType: int Function<T>(T)
+    functions
+      f @52
+        returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_genericClosure_inGenericFunction() async {
+    var library = await buildLibrary('''
+void f<T, U>(bool b) {
+  final v = b ? <V>(T t, U u, V v) => 0 : <V>(T t, U u, V v) => 1;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional b @18
+            type: bool
+        returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_inGenericClass() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  var v = f() ? (T t, U u) => 0 : (T t, U u) => 1;
+}
+bool f() => false;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        fields
+          v @22
+            type: int Function(T, U)
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @-1
+            returnType: int Function(T, U)
+          synthetic set v @-1
+            parameters
+              requiredPositional _v @-1
+                type: int Function(T, U)
+            returnType: void
+    functions
+      f @74
+        returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_inGenericFunction() async {
+    var library = await buildLibrary('''
+void f<T, U>(bool b) {
+  var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional b @18
+            type: bool
+        returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_noArguments() async {
+    var library = await buildLibrary('''
+final v = f() ? () => 0 : () => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function()
+    accessors
+      synthetic static get v @-1
+        returnType: int Function()
+    functions
+      f @40
+        returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_withArguments() async {
+    var library = await buildLibrary('''
+final v = f() ? (int x, String y) => 0 : (int x, String y) => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function(int, String)
+    accessors
+      synthetic static get v @-1
+        returnType: int Function(int, String)
+    functions
+      f @70
+        returnType: bool
+''');
+  }
+
+  test_top_level_variable_external() async {
+    var library = await buildLibrary('''
+external int i;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static i @13
+        type: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+      synthetic static set i @-1
+        parameters
+          requiredPositional _i @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_dynamic_dynamic() async {
+    var library = await buildLibrary('Map<dynamic, dynamic> m;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static m @22
+        type: Map<dynamic, dynamic>
+    accessors
+      synthetic static get m @-1
+        returnType: Map<dynamic, dynamic>
+      synthetic static set m @-1
+        parameters
+          requiredPositional _m @-1
+            type: Map<dynamic, dynamic>
+        returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_dynamic_int() async {
+    var library = await buildLibrary('Map<dynamic, int> m;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static m @18
+        type: Map<dynamic, int>
+    accessors
+      synthetic static get m @-1
+        returnType: Map<dynamic, int>
+      synthetic static set m @-1
+        parameters
+          requiredPositional _m @-1
+            type: Map<dynamic, int>
+        returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_String_dynamic() async {
+    var library = await buildLibrary('Map<String, dynamic> m;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static m @21
+        type: Map<String, dynamic>
+    accessors
+      synthetic static get m @-1
+        returnType: Map<String, dynamic>
+      synthetic static set m @-1
+        parameters
+          requiredPositional _m @-1
+            type: Map<String, dynamic>
+        returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_String_int() async {
+    var library = await buildLibrary('Map<String, int> m;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static m @17
+        type: Map<String, int>
+    accessors
+      synthetic static get m @-1
+        returnType: Map<String, int>
+      synthetic static set m @-1
+        parameters
+          requiredPositional _m @-1
+            type: Map<String, int>
+        returnType: void
+''');
+  }
+
+  test_type_arguments_implicit() async {
+    var library = await buildLibrary('Map m;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static m @4
+        type: Map<dynamic, dynamic>
+    accessors
+      synthetic static get m @-1
+        returnType: Map<dynamic, dynamic>
+      synthetic static set m @-1
+        parameters
+          requiredPositional _m @-1
+            type: Map<dynamic, dynamic>
+        returnType: void
+''');
+  }
+
+  test_type_dynamic() async {
+    var library = await buildLibrary('dynamic d;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static d @8
+        type: dynamic
+    accessors
+      synthetic static get d @-1
+        returnType: dynamic
+      synthetic static set d @-1
+        parameters
+          requiredPositional _d @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_type_inference_assignmentExpression_references_onTopLevelVariable() async {
+    var library = await buildLibrary('''
+var a = () {
+  b += 0;
+  return 0;
+};
+var b = 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: int Function()
+      static b @42
+        type: int
+    accessors
+      synthetic static get a @-1
+        returnType: int Function()
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: int Function()
+        returnType: void
+      synthetic static get b @-1
+        returnType: int
+      synthetic static set b @-1
+        parameters
+          requiredPositional _b @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_type_inference_based_on_loadLibrary() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary('''
+import 'a.dart' deferred as a;
+var x = a.loadLibrary;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart deferred as a @28
+  definingUnit
+    topLevelVariables
+      static x @35
+        type: Future<dynamic> Function()
+    accessors
+      synthetic static get x @-1
+        returnType: Future<dynamic> Function()
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: Future<dynamic> Function()
+        returnType: void
+''');
+  }
+
+  test_type_inference_classField_fromNullSafe_toLegacy() async {
+    addSource('$testPackageLibPath/a.dart', '''
+class E {
+  static final a = 0;
+}
+''');
+    var library = await buildLibrary('''
+// @dart = 2.9
+import 'a.dart';
+final v = E.a;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static final v @38
+        type: int*
+    accessors
+      synthetic static get v @-1
+        returnType: int*
+''');
+  }
+
+  test_type_inference_closure_with_function_typed_parameter() async {
+    var library = await buildLibrary('''
+var x = (int f(String x)) => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int Function(String))
+    accessors
+      synthetic static get x @-1
+        returnType: int Function(int Function(String))
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int Function(int Function(String))
+        returnType: void
+''');
+  }
+
+  test_type_inference_closure_with_function_typed_parameter_new() async {
+    var library = await buildLibrary('''
+var x = (int Function(String) f) => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int Function(String))
+    accessors
+      synthetic static get x @-1
+        returnType: int Function(int Function(String))
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int Function(int Function(String))
+        returnType: void
+''');
+  }
+
+  test_type_inference_depends_on_exported_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource('$testPackageLibPath/b.dart', 'var x = 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var y = x;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static y @21
+        type: int
+    accessors
+      synthetic static get y @-1
+        returnType: int
+      synthetic static set y @-1
+        parameters
+          requiredPositional _y @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_type_inference_field_depends_onFieldFormal() async {
+    var library = await buildLibrary('''
+class A<T> {
+  T value;
+
+  A(this.value);
+}
+
+class B {
+  var a = new A('');
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          value @17
+            type: T
+        constructors
+          @27
+            parameters
+              requiredPositional final this.value @34
+                type: T
+                field: self::@class::A::@field::value
+        accessors
+          synthetic get value @-1
+            returnType: T
+          synthetic set value @-1
+            parameters
+              requiredPositional _value @-1
+                type: T
+            returnType: void
+      class B @51
+        fields
+          a @61
+            type: A<String>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @-1
+            returnType: A<String>
+          synthetic set a @-1
+            parameters
+              requiredPositional _a @-1
+                type: A<String>
+            returnType: void
+''');
+  }
+
+  test_type_inference_field_depends_onFieldFormal_withMixinApp() async {
+    var library = await buildLibrary('''
+class A<T> {
+  T value;
+
+  A(this.value);
+}
+
+class B<T> = A<T> with M;
+
+class C {
+  var a = new B(42);
+}
+
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          value @17
+            type: T
+        constructors
+          @27
+            parameters
+              requiredPositional final this.value @34
+                type: T
+                field: self::@class::A::@field::value
+        accessors
+          synthetic get value @-1
+            returnType: T
+          synthetic set value @-1
+            parameters
+              requiredPositional _value @-1
+                type: T
+            returnType: void
+      class alias B @51
+        typeParameters
+          covariant T @53
+            defaultType: dynamic
+        supertype: A<T>
+        mixins
+          M
+        constructors
+          synthetic @-1
+            parameters
+              requiredPositional final value @-1
+                type: T
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  arguments
+                    SimpleIdentifier
+                      token: value @-1
+                      staticElement: value@-1
+                      staticType: T
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: T}
+      class C @78
+        fields
+          a @88
+            type: B<int>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @-1
+            returnType: B<int>
+          synthetic set a @-1
+            parameters
+              requiredPositional _a @-1
+                type: B<int>
+            returnType: void
+    mixins
+      mixin M @112
+        superclassConstraints
+          Object
+''');
+  }
+
+  test_type_inference_fieldFormal_depends_onField() async {
+    var library = await buildLibrary('''
+class A<T> {
+  var f = 0;
+  A(this.f);
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          f @19
+            type: int
+        constructors
+          @28
+            parameters
+              requiredPositional final this.f @35
+                type: int
+                field: self::@class::A::@field::f
+        accessors
+          synthetic get f @-1
+            returnType: int
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: int
+            returnType: void
+''');
+  }
+
+  test_type_inference_instanceCreation_notGeneric() async {
+    var library = await buildLibrary('''
+class A {
+  A(_);
+}
+var a = A(() => b);
+var b = A(() => a);
+''');
+    // There is no cycle with `a` and `b`, because `A` is not generic,
+    // so the type of `new A(...)` does not depend on its arguments.
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional _ @14
+                type: dynamic
+    topLevelVariables
+      static a @24
+        type: A
+      static b @44
+        type: A
+    accessors
+      synthetic static get a @-1
+        returnType: A
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: A
+        returnType: void
+      synthetic static get b @-1
+        returnType: A
+      synthetic static set b @-1
+        parameters
+          requiredPositional _b @-1
+            type: A
+        returnType: void
+''');
+  }
+
+  test_type_inference_multiplyDefinedElement() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', 'class C {}');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+var v = C;
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+    topLevelVariables
+      static v @38
+        type: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_type_inference_nested_function() async {
+    var library = await buildLibrary('''
+var x = (t) => (u) => t + u;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic Function(dynamic) Function(dynamic)
+    accessors
+      synthetic static get x @-1
+        returnType: dynamic Function(dynamic) Function(dynamic)
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: dynamic Function(dynamic) Function(dynamic)
+        returnType: void
+''');
+  }
+
+  test_type_inference_nested_function_with_parameter_types() async {
+    var library = await buildLibrary('''
+var x = (int t) => (int u) => t + u;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int) Function(int)
+    accessors
+      synthetic static get x @-1
+        returnType: int Function(int) Function(int)
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int Function(int) Function(int)
+        returnType: void
+''');
+  }
+
+  test_type_inference_of_closure_with_default_value() async {
+    var library = await buildLibrary('''
+var x = ([y: 0]) => y;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic Function([dynamic])
+    accessors
+      synthetic static get x @-1
+        returnType: dynamic Function([dynamic])
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: dynamic Function([dynamic])
+        returnType: void
+''');
+  }
+
+  test_type_inference_topVariable_depends_onFieldFormal() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {}
+
+class C<T extends A> {
+  final T f;
+  const C(this.f);
+}
+
+final b = B();
+final c = C(b);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @18
+        supertype: A
+        constructors
+          synthetic @-1
+            superConstructor: self::@class::A::@constructor::•
+      class C @40
+        typeParameters
+          covariant T @42
+            bound: A
+            defaultType: A
+        fields
+          final f @67
+            type: T
+        constructors
+          const @78
+            parameters
+              requiredPositional final this.f @85
+                type: T
+                field: self::@class::C::@field::f
+        accessors
+          synthetic get f @-1
+            returnType: T
+    topLevelVariables
+      static final b @98
+        type: B
+      static final c @113
+        type: C<B>
+    accessors
+      synthetic static get b @-1
+        returnType: B
+      synthetic static get c @-1
+        returnType: C<B>
+''');
+  }
+
+  test_type_inference_using_extension_getter() async {
+    var library = await buildLibrary('''
+extension on String {
+  int get foo => 0;
+}
+var v = 'a'.foo;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      @-1
+        extendedType: String
+        fields
+          synthetic foo @-1
+            type: int
+        accessors
+          get foo @32
+            returnType: int
+    topLevelVariables
+      static v @48
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_type_invalid_topLevelVariableElement_asType() async {
+    var library = await buildLibrary('''
+class C<T extends V> {}
+typedef V F(V p);
+V f(V p) {}
+V V2 = null;
+int V = 0;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased F @34
+        aliasedType: dynamic Function(dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @38
+              type: dynamic
+          returnType: dynamic
+    topLevelVariables
+      static V2 @56
+        type: dynamic
+      static V @71
+        type: int
+    accessors
+      synthetic static get V2 @-1
+        returnType: dynamic
+      synthetic static set V2 @-1
+        parameters
+          requiredPositional _V2 @-1
+            type: dynamic
+        returnType: void
+      synthetic static get V @-1
+        returnType: int
+      synthetic static set V @-1
+        parameters
+          requiredPositional _V @-1
+            type: int
+        returnType: void
+    functions
+      f @44
+        parameters
+          requiredPositional p @48
+            type: dynamic
+        returnType: dynamic
+''');
+  }
+
+  test_type_invalid_topLevelVariableElement_asTypeArgument() async {
+    var library = await buildLibrary('''
+var V;
+static List<V> V2;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static V @4
+        type: dynamic
+      static V2 @22
+        type: List<dynamic>
+    accessors
+      synthetic static get V @-1
+        returnType: dynamic
+      synthetic static set V @-1
+        parameters
+          requiredPositional _V @-1
+            type: dynamic
+        returnType: void
+      synthetic static get V2 @-1
+        returnType: List<dynamic>
+      synthetic static set V2 @-1
+        parameters
+          requiredPositional _V2 @-1
+            type: List<dynamic>
+        returnType: void
+''');
+  }
+
+  test_type_invalid_typeParameter_asPrefix() async {
+    var library = await buildLibrary('''
+class C<T> {
+  m(T.K p) {}
+}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @15
+            parameters
+              requiredPositional p @21
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_type_invalid_unresolvedPrefix() async {
+    var library = await buildLibrary('''
+p.C v;
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: dynamic
+    accessors
+      synthetic static get v @-1
+        returnType: dynamic
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_type_never_disableNnbd() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('Never d;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static d @6
+        type: Null*
+    accessors
+      synthetic static get d @-1
+        returnType: Null*
+      synthetic static set d @-1
+        parameters
+          requiredPositional _d @-1
+            type: Null*
+        returnType: void
+''');
+  }
+
+  test_type_never_enableNnbd() async {
+    var library = await buildLibrary('Never d;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static d @6
+        type: Never
+    accessors
+      synthetic static get d @-1
+        returnType: Never
+      synthetic static set d @-1
+        parameters
+          requiredPositional _d @-1
+            type: Never
+        returnType: void
+''');
+  }
+
+  test_type_param_ref_nullability_none() async {
+    var library = await buildLibrary('''
+class C<T> {
+  T t;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @17
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @-1
+            returnType: T
+          synthetic set t @-1
+            parameters
+              requiredPositional _t @-1
+                type: T
+            returnType: void
+''');
+  }
+
+  test_type_param_ref_nullability_question() async {
+    var library = await buildLibrary('''
+class C<T> {
+  T? t;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @18
+            type: T?
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @-1
+            returnType: T?
+          synthetic set t @-1
+            parameters
+              requiredPositional _t @-1
+                type: T?
+            returnType: void
+''');
+  }
+
+  test_type_param_ref_nullability_star() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('''
+class C<T> {
+  T t;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @17
+            type: T*
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @-1
+            returnType: T*
+          synthetic set t @-1
+            parameters
+              requiredPositional _t @-1
+                type: T*
+            returnType: void
+''');
+  }
+
+  test_type_reference_lib_to_lib() async {
+    var library = await buildLibrary('''
+class C {}
+enum E { v }
+typedef F();
+C c;
+E e;
+F f;''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    enums
+      enum E @16
+        supertype: Enum
+        fields
+          static const enumConstant v @20
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    typeAliases
+      functionTypeAliasBased F @32
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static c @39
+        type: C
+      static e @44
+        type: E
+      static f @49
+        type: dynamic Function()
+          alias: self::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: self::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: self::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_lib_to_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library =
+        await buildLibrary('library l; part "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static c @28
+        type: C
+      static e @33
+        type: E
+      static f @38
+        type: dynamic Function()
+          alias: self::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: self::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: self::@typeAlias::F
+        returnType: void
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              type: E
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: E @-1
+                        staticElement: self::@enum::E
+                        staticType: null
+                      type: E
+                    staticElement: self::@enum::E::@constructor::•
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: self::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+          accessors
+            synthetic static get v @-1
+              returnType: E
+            synthetic static get values @-1
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_type_reference_part_to_lib() async {
+    addSource('$testPackageLibPath/a.dart', 'part of l; C c; E e; F f;');
+    var library = await buildLibrary(
+        'library l; part "a.dart"; class C {} enum E { v } typedef F();');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+    classes
+      class C @32
+        constructors
+          synthetic @-1
+    enums
+      enum E @42
+        supertype: Enum
+        fields
+          static const enumConstant v @46
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    typeAliases
+      functionTypeAliasBased F @58
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+  parts
+    a.dart
+      topLevelVariables
+        static c @13
+          type: C
+        static e @18
+          type: E
+        static f @23
+          type: dynamic Function()
+            alias: self::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          returnType: C
+        synthetic static set c @-1
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          returnType: E
+        synthetic static set e @-1
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          returnType: dynamic Function()
+            alias: self::@typeAlias::F
+        synthetic static set f @-1
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: self::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_part_to_other_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    addSource('$testPackageLibPath/b.dart', 'part of l; C c; E e; F f;');
+    var library =
+        await buildLibrary('library l; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              type: E
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: E @-1
+                        staticElement: self::@enum::E
+                        staticType: null
+                      type: E
+                    staticElement: self::@enum::E::@constructor::•
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: self::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+          accessors
+            synthetic static get v @-1
+              returnType: E
+            synthetic static get values @-1
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+    b.dart
+      topLevelVariables
+        static c @13
+          type: C
+        static e @18
+          type: E
+        static f @23
+          type: dynamic Function()
+            alias: self::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          returnType: C
+        synthetic static set c @-1
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          returnType: E
+        synthetic static set e @-1
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          returnType: dynamic Function()
+            alias: self::@typeAlias::F
+        synthetic static set f @-1
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: self::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_part_to_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
+    var library = await buildLibrary('library l; part "a.dart";');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              type: E
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: SimpleIdentifier
+                        token: E @-1
+                        staticElement: self::@enum::E
+                        staticType: null
+                      type: E
+                    staticElement: self::@enum::E::@constructor::•
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: self::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+          accessors
+            synthetic static get v @-1
+              returnType: E
+            synthetic static get values @-1
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static c @50
+          type: C
+        static e @55
+          type: E
+        static f @60
+          type: dynamic Function()
+            alias: self::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          returnType: C
+        synthetic static set c @-1
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          returnType: E
+        synthetic static set e @-1
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          returnType: dynamic Function()
+            alias: self::@typeAlias::F
+        synthetic static set f @-1
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: self::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_class() async {
+    var library = await buildLibrary('class C {} C c;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_class_with_type_arguments() async {
+    var library = await buildLibrary('class C<T, U> {} C<int, String> c;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @32
+        type: C<int, String>
+    accessors
+      synthetic static get c @-1
+        returnType: C<int, String>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<int, String>
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_class_with_type_arguments_implicit() async {
+    var library = await buildLibrary('class C<T, U> {} C c;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @19
+        type: C<dynamic, dynamic>
+    accessors
+      synthetic static get c @-1
+        returnType: C<dynamic, dynamic>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<dynamic, dynamic>
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_enum() async {
+    var library = await buildLibrary('enum E { v } E e;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        supertype: Enum
+        fields
+          static const enumConstant v @9
+            type: E
+            constantInitializer
+              InstanceCreationExpression
+                constructorName: ConstructorName
+                  type: NamedType
+                    name: SimpleIdentifier
+                      token: E @-1
+                      staticElement: self::@enum::E
+                      staticType: null
+                    type: E
+                  staticElement: self::@enum::E::@constructor::•
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticType: E
+          synthetic static const values @-1
+            type: List<E>
+            constantInitializer
+              ListLiteral
+                leftBracket: [ @0
+                elements
+                  SimpleIdentifier
+                    token: v @-1
+                    staticElement: self::@enum::E::@getter::v
+                    staticType: E
+                rightBracket: ] @0
+                staticType: List<E>
+        constructors
+          synthetic const @-1
+        accessors
+          synthetic static get v @-1
+            returnType: E
+          synthetic static get values @-1
+            returnType: List<E>
+    topLevelVariables
+      static e @15
+        type: E
+    accessors
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource(
+        '$testPackageLibPath/b.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          alias: package:test/b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/b.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/b.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_export() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource('$testPackageLibPath/b.dart', 'export "c.dart";');
+    addSource(
+        '$testPackageLibPath/c.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          alias: package:test/c.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/c.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/c.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_export_in_subdirs() async {
+    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
+    addSource('$testPackageLibPath/a/b/b.dart', 'export "../c/c.dart";');
+    addSource('$testPackageLibPath/a/c/c.dart',
+        'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a/a.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          alias: package:test/a/c/c.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a/c/c.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a/c/c.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_in_subdirs() async {
+    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
+    addSource('$testPackageLibPath/a/b/b.dart',
+        'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a/a.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          alias: package:test/a/b/b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a/b/b.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a/b/b.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part() async {
+    addSource('$testPackageLibPath/a.dart', 'library l; part "b.dart";');
+    addSource('$testPackageLibPath/b.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part2() async {
+    addSource('$testPackageLibPath/a.dart',
+        'library l; part "p1.dart"; part "p2.dart";');
+    addSource('$testPackageLibPath/p1.dart', 'part of l; class C1 {}');
+    addSource('$testPackageLibPath/p2.dart', 'part of l; class C2 {}');
+    var library = await buildLibrary('import "a.dart"; C1 c1; C2 c2;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c1 @20
+        type: C1
+      static c2 @27
+        type: C2
+    accessors
+      synthetic static get c1 @-1
+        returnType: C1
+      synthetic static set c1 @-1
+        parameters
+          requiredPositional _c1 @-1
+            type: C1
+        returnType: void
+      synthetic static get c2 @-1
+        returnType: C2
+      synthetic static set c2 @-1
+        parameters
+          requiredPositional _c2 @-1
+            type: C2
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part_in_subdir() async {
+    addSource('$testPackageLibPath/a/b.dart', 'library l; part "c.dart";');
+    addSource('$testPackageLibPath/a/c.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/b.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a/b.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          alias: package:test/a/b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a/b.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a/b.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_import_relative() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @-1
+        returnType: C
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C
+        returnType: void
+      synthetic static get e @-1
+        returnType: E
+      synthetic static set e @-1
+        parameters
+          requiredPositional _e @-1
+            type: E
+        returnType: void
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: package:test/a.dart::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: package:test/a.dart::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef() async {
+    var library = await buildLibrary('typedef F(); F f;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static f @15
+        type: dynamic Function()
+          alias: self::@typeAlias::F
+    accessors
+      synthetic static get f @-1
+        returnType: dynamic Function()
+          alias: self::@typeAlias::F
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function()
+              alias: self::@typeAlias::F
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef_with_type_arguments() async {
+    var library =
+        await buildLibrary('typedef U F<T, U>(T t); F<int, String> f;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @20
+              type: T
+          returnType: U
+    topLevelVariables
+      static f @39
+        type: String Function(int)
+          alias: self::@typeAlias::F
+            typeArguments
+              int
+              String
+    accessors
+      synthetic static get f @-1
+        returnType: String Function(int)
+          alias: self::@typeAlias::F
+            typeArguments
+              int
+              String
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: String Function(int)
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
+                  String
+        returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef_with_type_arguments_implicit() async {
+    var library = await buildLibrary('typedef U F<T, U>(T t); F f;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @20
+              type: T
+          returnType: U
+    topLevelVariables
+      static f @26
+        type: dynamic Function(dynamic)
+          alias: self::@typeAlias::F
+            typeArguments
+              dynamic
+              dynamic
+    accessors
+      synthetic static get f @-1
+        returnType: dynamic Function(dynamic)
+          alias: self::@typeAlias::F
+            typeArguments
+              dynamic
+              dynamic
+      synthetic static set f @-1
+        parameters
+          requiredPositional _f @-1
+            type: dynamic Function(dynamic)
+              alias: self::@typeAlias::F
+                typeArguments
+                  dynamic
+                  dynamic
+        returnType: void
+''');
+  }
+
+  test_type_unresolved() async {
+    var library = await buildLibrary('C c;', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static c @2
+        type: dynamic
+    accessors
+      synthetic static get c @-1
+        returnType: dynamic
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_type_unresolved_prefixed() async {
+    var library = await buildLibrary('import "dart:core" as core; core.C c;',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    dart:core as core @22
+  definingUnit
+    topLevelVariables
+      static c @35
+        type: dynamic
+    accessors
+      synthetic static get c @-1
+        returnType: dynamic
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_typeAlias_parameter_typeParameters() async {
+    var library = await buildLibrary(r'''
+typedef void F(T a<T, U>(U u));
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function(T Function<T, U>(U))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @17
+              type: T Function<T, U>(U)
+              typeParameters
+                covariant T @19
+                covariant U @22
+              parameters
+                requiredPositional u @27
+                  type: U
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function(T);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = void Function(T);
+typedef F2<T> = F1<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      F2 @42
+        typeParameters
+          contravariant T @45
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = T Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = List<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: List<T> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<T>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant3() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = T Function();
+typedef F2<T> = F1<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      F2 @38
+        typeParameters
+          covariant T @41
+            defaultType: dynamic
+        aliasedType: T Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T Function()
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant4() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = void Function(T);
+typedef F2<T> = void Function(F1<T>);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      F2 @42
+        typeParameters
+          covariant T @45
+            defaultType: dynamic
+        aliasedType: void Function(void Function(T))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: void Function(T)
+                alias: self::@typeAlias::F1
+                  typeArguments
+                    T
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invalid() async {
+    var library = await buildLibrary(r'''
+class A {}
+typedef F<T> = void Function(A<int>);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    typeAliases
+      F @19
+        typeParameters
+          unrelated T @21
+            defaultType: dynamic
+        aliasedType: void Function(A)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: A
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invalid2() async {
+    var library = await buildLibrary(r'''
+typedef F = void Function();
+typedef G<T> = void Function(F<int>);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      G @37
+        typeParameters
+          unrelated T @39
+            defaultType: dynamic
+        aliasedType: void Function(void Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: void Function()
+                alias: self::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = T Function(T);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          invariant T @10
+            defaultType: dynamic
+        aliasedType: T Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invariant2() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = T Function();
+typedef F2<T> = F1<T> Function(T);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      F2 @38
+        typeParameters
+          invariant T @41
+            defaultType: dynamic
+        aliasedType: T Function() Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: T Function()
+            alias: self::@typeAlias::F1
+              typeArguments
+                T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_unrelated() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function(int);
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = List<void Function(T)>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: List<void Function(T)>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = void Function(T);
+typedef B<T> = List<A<T>>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      B @41
+        typeParameters
+          contravariant T @43
+            defaultType: dynamic
+        aliasedType: List<void Function(T)>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_covariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = List<T>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: List<T>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = Map<int, T>;
+typedef B<T> = List<A<T>>;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: Map<int, T>
+      B @36
+        typeParameters
+          covariant T @38
+            defaultType: dynamic
+        aliasedType: List<Map<int, T>>
+''');
+  }
+
+  test_typedef_function_generic() async {
+    var library = await buildLibrary(
+        'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: int Function<S>(List<S>, num Function<A>(A), T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant S @28
+          parameters
+            requiredPositional list @39
+              type: List<S>
+            requiredPositional @-1
+              type: num Function<A>(A)
+            requiredPositional @-1
+              type: T
+          returnType: int
+''');
+  }
+
+  test_typedef_function_generic_asFieldType() async {
+    var library = await buildLibrary(r'''
+typedef Foo<S> = S Function<T>(T x);
+class A {
+  Foo<int> f;
+}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @43
+        fields
+          f @58
+            type: int Function<T>(T)
+              alias: self::@typeAlias::Foo
+                typeArguments
+                  int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @-1
+            returnType: int Function<T>(T)
+              alias: self::@typeAlias::Foo
+                typeArguments
+                  int
+          synthetic set f @-1
+            parameters
+              requiredPositional _f @-1
+                type: int Function<T>(T)
+                  alias: self::@typeAlias::Foo
+                    typeArguments
+                      int
+            returnType: void
+    typeAliases
+      Foo @8
+        typeParameters
+          covariant S @12
+            defaultType: dynamic
+        aliasedType: S Function<T>(T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @28
+          parameters
+            requiredPositional x @33
+              type: T
+          returnType: S
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_included() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = void Function(C c);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @38
+        typeParameters
+          covariant T @40
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional c @28
+              type: C<C<dynamic>>
+          returnType: void
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_omitted() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = void Function(C);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @36
+        typeParameters
+          covariant T @38
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: C<C<dynamic>>
+          returnType: void
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_return_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = C Function();
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @32
+        typeParameters
+          covariant T @34
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: C<C<dynamic>> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: C<C<dynamic>>
+''');
+  }
+
+  test_typedef_function_typeParameters_f_bound_simple() async {
+    var library =
+        await buildLibrary('typedef F<T extends U, U> = U Function(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          contravariant T @10
+            bound: U
+            defaultType: Never
+          covariant U @23
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @41
+              type: T
+          returnType: U
+''');
+  }
+
+  test_typedef_function_typeParameters_f_bound_simple_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library =
+        await buildLibrary('typedef F<T extends U, U> = U Function(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          contravariant T @10
+            bound: U*
+            defaultType: Null*
+          covariant U @23
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @41
+              type: T*
+          returnType: U*
+''');
+  }
+
+  test_typedef_legacy_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+typedef F();''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @68
+        documentationComment: /**\n * Docs\n */
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_dependency_via_param_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef void F(C c);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @27
+        typeParameters
+          covariant T @29
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional c @17
+              type: C<C<dynamic>>
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_dependency_via_return_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef C F();
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @21
+        typeParameters
+          covariant T @23
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        aliasedType: C<C<dynamic>> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: C<C<dynamic>>
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef void F<T extends F>();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_simple_because_non_generic() async {
+    var library = await buildLibrary('''
+typedef void F();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_simple_no_bounds() async {
+    var library = await buildLibrary('typedef void F<T>();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_parameter_hasImplicitType() async {
+    var library = await buildLibrary(r'''
+typedef void F(int a, b, [int c, d]);
+''');
+    var F = library.definingCompilationUnit.typeAliases.single;
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    // TODO(scheglov) Use better textual presentation with all information.
+    expect(function.parameters[0].hasImplicitType, false);
+    expect(function.parameters[1].hasImplicitType, true);
+    expect(function.parameters[2].hasImplicitType, false);
+    expect(function.parameters[3].hasImplicitType, true);
+  }
+
+  test_typedef_legacy_parameter_parameters() async {
+    var library = await buildLibrary('typedef F(g(x, y));');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(dynamic Function(dynamic, dynamic))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @10
+              type: dynamic Function(dynamic, dynamic)
+              parameters
+                requiredPositional x @12
+                  type: dynamic
+                requiredPositional y @15
+                  type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_parameters_in_generic_class() async {
+    var library = await buildLibrary('typedef F<A, B>(A g(B x));');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant A @10
+            defaultType: dynamic
+          covariant B @13
+            defaultType: dynamic
+        aliasedType: dynamic Function(A Function(B))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @18
+              type: A Function(B)
+              parameters
+                requiredPositional x @22
+                  type: B
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_return_type() async {
+    var library = await buildLibrary('typedef F(int g());');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @14
+              type: int Function()
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_type() async {
+    var library = await buildLibrary('typedef F(int i);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional i @14
+              type: int
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_type_generic() async {
+    var library = await buildLibrary('typedef F<T>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: dynamic Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @15
+              type: T
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameters() async {
+    var library = await buildLibrary('typedef F(x, y);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(dynamic, dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional x @10
+              type: dynamic
+            requiredPositional y @13
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameters_named() async {
+    var library = await buildLibrary('typedef F({y, z, x});');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function({dynamic x, dynamic y, dynamic z})
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            optionalNamed y @11
+              type: dynamic
+            optionalNamed z @14
+              type: dynamic
+            optionalNamed x @17
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_return_type() async {
+    var library = await buildLibrary('typedef int F();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: int
+''');
+  }
+
+  test_typedef_legacy_return_type_generic() async {
+    var library = await buildLibrary('typedef T F<T>();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+''');
+  }
+
+  test_typedef_legacy_return_type_implicit() async {
+    var library = await buildLibrary('typedef F();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_return_type_void() async {
+    var library = await buildLibrary('typedef void F();');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters() async {
+    var library = await buildLibrary('typedef U F<T, U>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @20
+              type: T
+          returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound() async {
+    var library = await buildLibrary(
+        'typedef U F<T extends Object, U extends D>(T t); class D {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class D @55
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            bound: Object
+            defaultType: Object
+          covariant U @30
+            bound: D
+            defaultType: D
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @45
+              type: T
+          returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound_recursive() async {
+    var library = await buildLibrary('typedef void F<T extends F>();');
+    // Typedefs cannot reference themselves.
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound_recursive2() async {
+    var library = await buildLibrary('typedef void F<T extends List<F>>();');
+    // Typedefs cannot reference themselves.
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: List<dynamic>
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_complex() async {
+    var library = await buildLibrary('typedef U F<T extends List<U>, U>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: List<U>
+            defaultType: List<Never>
+          covariant U @31
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @36
+              type: T
+          returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_complex_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('typedef U F<T extends List<U>, U>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: List<U*>*
+            defaultType: List<Null*>*
+          covariant U @31
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @36
+              type: T*
+          returnType: U*
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_simple() async {
+    var library = await buildLibrary('typedef U F<T extends U, U>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: U
+            defaultType: Never
+          covariant U @25
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @30
+              type: T
+          returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_simple_legacy() async {
+    featureSet = FeatureSets.language_2_9;
+    var library = await buildLibrary('typedef U F<T extends U, U>(T t);');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: U*
+            defaultType: Null*
+          covariant U @25
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @30
+              type: T*
+          returnType: U*
+''');
+  }
+
+  @FailingTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type dynamic is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_dynamic() async {
+    var library = await buildLibrary(r'''
+typedef A = dynamic;
+void f(A a) {}
+''');
+
+    checkElementText(library, r'''
+typedef A = dynamic;
+void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_functionType() async {
+    var library = await buildLibrary(r'''
+typedef A1 = void Function();
+typedef A2<R> = R Function();
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A1 @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      A2 @38
+        typeParameters
+          covariant R @41
+            defaultType: dynamic
+        aliasedType: R Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: R
+    functions
+      f1 @65
+        parameters
+          requiredPositional a @71
+            type: void Function()
+              alias: self::@typeAlias::A1
+        returnType: void
+      f2 @82
+        parameters
+          requiredPositional a @93
+            type: int Function()
+              alias: self::@typeAlias::A2
+                typeArguments
+                  int
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_interfaceType() async {
+    var library = await buildLibrary(r'''
+typedef A1 = List<int>;
+typedef A2<T, U> = Map<T, U>;
+void f1(A1 a) {}
+void f2(A2<int, String> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A1 @8
+        aliasedType: List<int>
+      A2 @32
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        aliasedType: Map<T, U>
+    functions
+      f1 @59
+        parameters
+          requiredPositional a @65
+            type: List<int>
+              alias: self::@typeAlias::A1
+        returnType: void
+      f2 @76
+        parameters
+          requiredPositional a @95
+            type: Map<int, String>
+              alias: self::@typeAlias::A2
+                typeArguments
+                  int
+                  String
+        returnType: void
+''');
+  }
+
+  @FailingTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type Never is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_never() async {
+    var library = await buildLibrary(r'''
+typedef A1 = Never;
+typedef A2<T> = Never?;
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+    checkElementText(library, r'''
+typedef A1 = Never;
+typedef A2<T> = Never?;
+void f1(Never<aliasElement: self::@typeAlias::A1> a) {}
+void f2(Never?<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_typeParameterType() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T;
+void f<U>(A<U> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+    functions
+      f @23
+        typeParameters
+          covariant U @25
+        parameters
+          requiredPositional a @33
+            type: U
+              alias: self::@typeAlias::A
+                typeArguments
+                  U
+        returnType: void
+''');
+  }
+
+  @FailingTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type void is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_void() async {
+    var library = await buildLibrary(r'''
+typedef A = void;
+void f(A a) {}
+''');
+
+    checkElementText(library, r'''
+typedef A = void;
+void f(void<aliasElement: self::@typeAlias::A> a) {}
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<int, T>;
+class A<T, U> {}
+class B implements X<String> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @49
+        interfaces
+          A<int, String>
+            alias: self::@typeAlias::X
+              typeArguments
+                String
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<int, T>
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_question() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<T>?;
+class A<T> {}
+class B {}
+class C {}
+class D implements B, X<int>, C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @28
+        typeParameters
+          covariant T @30
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        constructors
+          synthetic @-1
+      class C @53
+        constructors
+          synthetic @-1
+      class D @64
+        interfaces
+          B
+          C
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<T>?
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<T?>;
+class A<T> {}
+class B {}
+class C {}
+class D implements B, X<int>, C {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @28
+        typeParameters
+          covariant T @30
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        constructors
+          synthetic @-1
+      class C @53
+        constructors
+          synthetic @-1
+      class D @64
+        interfaces
+          B
+          A<int?>
+            alias: self::@typeAlias::X
+              typeArguments
+                int
+          C
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<T?>
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A implements X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A implements X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_typeParameterType() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = T;
+class A {}
+class B {}
+class C<U> implements A, X<U>, B {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+      class B @35
+        constructors
+          synthetic @-1
+      class C @46
+        typeParameters
+          covariant U @48
+            defaultType: dynamic
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_void() async {
+    var library = await buildLibrary(r'''
+typedef X = void;
+class A {}
+class B {}
+class C implements A, X, B {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+      class B @35
+        constructors
+          synthetic @-1
+      class C @46
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: void
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_none() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>;
+class A<T> {}
+class B with X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @26
+        typeParameters
+          covariant T @28
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @40
+        supertype: Object
+        mixins
+          A<int>
+            alias: self::@typeAlias::X
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_question() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>?;
+class A<T> {}
+mixin M1 {}
+mixin M2 {}
+class B with M1, X, M2 {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @65
+        supertype: Object
+        mixins
+          M1
+          M2
+        constructors
+          synthetic @-1
+    mixins
+      mixin M1 @41
+        superclassConstraints
+          Object
+      mixin M2 @53
+        superclassConstraints
+          Object
+    typeAliases
+      X @8
+        aliasedType: A<int>?
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int?>;
+class A<T> {}
+mixin M1 {}
+mixin M2 {}
+class B with M1, X, M2 {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @65
+        supertype: Object
+        mixins
+          M1
+          A<int?>
+            alias: self::@typeAlias::X
+          M2
+        constructors
+          synthetic @-1
+    mixins
+      mixin M1 @41
+        superclassConstraints
+          Object
+      mixin M2 @53
+        superclassConstraints
+          Object
+    typeAliases
+      X @8
+        aliasedType: A<int?>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_none() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>;
+class A<T> {}
+class B extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @26
+        typeParameters
+          covariant T @28
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @40
+        supertype: A<int>
+          alias: self::@typeAlias::X
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+    typeAliases
+      X @8
+        aliasedType: A<int>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_none_viaTypeParameter() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = T;
+class A<T> {}
+class B extends X<A<int>> {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        typeParameters
+          covariant T @26
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @38
+        supertype: A<int>
+          alias: self::@typeAlias::X
+            typeArguments
+              A<int>
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_question() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>?;
+class A<T> {}
+class D extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class D @41
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>?
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int?>;
+class A<T> {}
+class D extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class D @41
+        supertype: A<int?>
+          alias: self::@typeAlias::X
+        constructors
+          synthetic @-1
+            superConstructor: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int?}
+    typeAliases
+      X @8
+        aliasedType: A<int?>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_using_dynamic() async {
+    var library = await buildLibrary(r'''
+typedef A = dynamic;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: dynamic
+    functions
+      f @26
+        parameters
+          requiredPositional a @30
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_disabled() async {
+    featureSet = FeatureSets.language_2_12;
+    var library = await buildLibrary(r'''
+typedef A = int;
+void f(A a) {}
+''');
+
+    var alias = library.definingCompilationUnit.typeAliases[0];
+    _assertTypeStr(alias.aliasedType, 'dynamic Function()');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: dynamic Function()
+    functions
+      f @22
+        parameters
+          requiredPositional a @26
+            type: dynamic Function()
+              alias: self::@typeAlias::A
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_noTypeParameters() async {
+    var library = await buildLibrary(r'''
+typedef A = int;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: int
+    functions
+      f @22
+        parameters
+          requiredPositional a @26
+            type: int
+              alias: self::@typeAlias::A
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_noTypeParameters_legacy() async {
+    newFile2('/a.dart', r'''
+typedef A = List<int>;
+''');
+    var library = await buildLibrary(r'''
+// @dart = 2.9
+import 'a.dart';
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    functions
+      f @37
+        parameters
+          requiredPositional a @41
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
+    var library = await buildLibrary(r'''
+typedef A = int?;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: int?
+    functions
+      f @23
+        parameters
+          requiredPositional a @27
+            type: int?
+              alias: self::@typeAlias::A
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_withTypeParameters() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = Map<int, T>;
+void f(A<String> a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: Map<int, T>
+    functions
+      f @33
+        parameters
+          requiredPositional a @45
+            type: Map<int, String>
+              alias: self::@typeAlias::A
+                typeArguments
+                  String
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef A = Never;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: Never
+    functions
+      f @24
+        parameters
+          requiredPositional a @28
+            type: Never
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_Never_question() async {
+    var library = await buildLibrary(r'''
+typedef A = Never?;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: Never?
+    functions
+      f @25
+        parameters
+          requiredPositional a @29
+            type: Never?
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_typeParameter_none() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T;
+void f1(A a) {}
+void f2(A<int> a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+    functions
+      f1 @23
+        parameters
+          requiredPositional a @28
+            type: dynamic
+        returnType: void
+      f2 @39
+        parameters
+          requiredPositional a @49
+            type: int
+              alias: self::@typeAlias::A
+                typeArguments
+                  int
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_typeParameter_question() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T?;
+void f1(A a) {}
+void f2(A<int> a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T?
+    functions
+      f1 @24
+        parameters
+          requiredPositional a @29
+            type: dynamic
+        returnType: void
+      f2 @40
+        parameters
+          requiredPositional a @50
+            type: int?
+              alias: self::@typeAlias::A
+                typeArguments
+                  int
+        returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_void() async {
+    var library = await buildLibrary(r'''
+typedef A = void;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: void
+    functions
+      f @23
+        parameters
+          requiredPositional a @27
+            type: void
+        returnType: void
+''');
+  }
+
+  test_typedefs() async {
+    var library = await buildLibrary('f() {} g() {}');
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+      g @7
+        returnType: dynamic
+''');
+  }
+
+  test_unit_implicitVariable_getterFirst() async {
+    var library = await buildLibrary('''
+int get x => 0;
+void set x(int value) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static get x @8
+        returnType: int
+      static set x @25
+        parameters
+          requiredPositional value @31
+            type: int
+        returnType: void
+''');
+  }
+
+  test_unit_implicitVariable_setterFirst() async {
+    var library = await buildLibrary('''
+void set x(int value) {}
+int get x => 0;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      static get x @33
+        returnType: int
+''');
+  }
+
+  test_unit_variable_final_withSetter() async {
+    var library = await buildLibrary(r'''
+final int foo = 0;
+set foo(int newValue) {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final foo @10
+        type: int
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+      static set foo @23
+        parameters
+          requiredPositional newValue @31
+            type: int
+        returnType: void
+''');
+  }
+
+  test_unresolved_annotation_instanceCreation_argument_super() async {
+    var library = await buildLibrary('''
+class A {
+  const A(_);
+}
+
+@A(super)
+class C {}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @20
+                type: dynamic
+      class C @43
+        metadata
+          Annotation
+            atSign: @ @27
+            name: SimpleIdentifier
+              token: A @28
+              staticElement: self::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @29
+              arguments
+                SuperExpression
+                  superKeyword: super @30
+                  staticType: dynamic
+              rightParenthesis: ) @35
+            element: self::@class::A::@constructor::•
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_instanceCreation_argument_this() async {
+    var library = await buildLibrary('''
+class A {
+  const A(_);
+}
+
+@A(this)
+class C {}
+''', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @20
+                type: dynamic
+      class C @42
+        metadata
+          Annotation
+            atSign: @ @27
+            name: SimpleIdentifier
+              token: A @28
+              staticElement: self::@class::A
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @29
+              arguments
+                ThisExpression
+                  thisKeyword: this @30
+                  staticType: dynamic
+              rightParenthesis: ) @34
+            element: self::@class::A::@constructor::•
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_namedConstructorCall_noClass() async {
+    var library =
+        await buildLibrary('@foo.bar() class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @17
+        metadata
+          Annotation
+            atSign: @ @0
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              period: . @4
+              identifier: SimpleIdentifier
+                token: bar @5
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @8
+              rightParenthesis: ) @9
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_namedConstructorCall_noConstructor() async {
+    var library =
+        await buildLibrary('@String.foo() class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @20
+        metadata
+          Annotation
+            atSign: @ @0
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: String @1
+                staticElement: dart:core::@class::String
+                staticType: null
+              period: . @7
+              identifier: SimpleIdentifier
+                token: foo @8
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @11
+              rightParenthesis: ) @12
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
+    var library = await buildLibrary('@foo.bar class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @15
+        metadata
+          Annotation
+            atSign: @ @0
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              period: . @4
+              identifier: SimpleIdentifier
+                token: bar @5
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.bar class C {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @43
+        metadata
+          Annotation
+            atSign: @ @28
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @29
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @32
+              identifier: SimpleIdentifier
+                token: bar @33
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() async {
+    var library =
+        await buildLibrary('@foo.bar.baz() class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @21
+        metadata
+          Annotation
+            atSign: @ @0
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              period: . @4
+              identifier: SimpleIdentifier
+                token: bar @5
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            period: . @8
+            constructorName: SimpleIdentifier
+              token: baz @9
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @12
+              rightParenthesis: ) @13
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_noClass() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.bar.baz() class C {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @49
+        metadata
+          Annotation
+            atSign: @ @28
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @29
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @32
+              identifier: SimpleIdentifier
+                token: bar @33
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            period: . @36
+            constructorName: SimpleIdentifier
+              token: baz @37
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @40
+              rightParenthesis: ) @41
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.Future.bar() class C {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @52
+        metadata
+          Annotation
+            atSign: @ @28
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @29
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @32
+              identifier: SimpleIdentifier
+                token: Future @33
+                staticElement: dart:async::@class::Future
+                staticType: null
+              staticElement: dart:async::@class::Future
+              staticType: null
+            period: . @39
+            constructorName: SimpleIdentifier
+              token: bar @40
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @43
+              rightParenthesis: ) @44
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() async {
+    var library =
+        await buildLibrary('@foo.bar() class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @17
+        metadata
+          Annotation
+            atSign: @ @0
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              period: . @4
+              identifier: SimpleIdentifier
+                token: bar @5
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @8
+              rightParenthesis: ) @9
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.bar() class C {}',
+        allowErrors: true);
+    checkElementText(library, r'''
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @45
+        metadata
+          Annotation
+            atSign: @ @28
+            name: PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: foo @29
+                staticElement: self::@prefix::foo
+                staticType: null
+              period: . @32
+              identifier: SimpleIdentifier
+                token: bar @33
+                staticElement: <null>
+                staticType: null
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @36
+              rightParenthesis: ) @37
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_simpleIdentifier() async {
+    var library = await buildLibrary('@foo class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @11
+        metadata
+          Annotation
+            atSign: @ @0
+            name: SimpleIdentifier
+              token: foo @1
+              staticElement: <null>
+              staticType: null
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_simpleIdentifier_multiplyDefined() async {
+    addSource('$testPackageLibPath/a.dart', 'const v = 0;');
+    addSource('$testPackageLibPath/b.dart', 'const v = 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+
+@v
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+    package:test/b.dart
+  definingUnit
+    classes
+      class C @44
+        metadata
+          Annotation
+            atSign: @ @35
+            name: SimpleIdentifier
+              token: v @36
+              staticElement: <null>
+              staticType: null
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_annotation_unnamedConstructorCall_noClass() async {
+    var library = await buildLibrary('@foo() class C {}', allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @13
+        metadata
+          Annotation
+            atSign: @ @0
+            name: SimpleIdentifier
+              token: foo @1
+              staticElement: <null>
+              staticType: null
+            arguments: ArgumentList
+              leftParenthesis: ( @4
+              rightParenthesis: ) @5
+            element: <null>
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_unresolved_export() async {
+    var library = await buildLibrary("export 'foo.dart';", allowErrors: true);
+    checkElementText(library, r'''
+library
+  exports
+    package:test/foo.dart
+  definingUnit
+''');
+  }
+
+  test_unresolved_import() async {
+    var library = await buildLibrary("import 'foo.dart';", allowErrors: true);
+    var importedLibrary = library.imports[0].importedLibrary!;
+    expect(importedLibrary.loadLibraryFunction, isNotNull);
+    expect(importedLibrary.publicNamespace, isNotNull);
+    expect(importedLibrary.exportNamespace, isNotNull);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart
+  definingUnit
+''');
+  }
+
+  test_unresolved_part() async {
+    var library = await buildLibrary("part 'foo.dart';", allowErrors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+  parts
+    foo.dart
+''');
+  }
+
+  test_unused_type_parameter() async {
+    var library = await buildLibrary('''
+class C<T> {
+  void f() {}
+}
+C<int> c;
+var v = c.f;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            returnType: void
+    topLevelVariables
+      static c @36
+        type: C<int>
+      static v @43
+        type: void Function()
+    accessors
+      synthetic static get c @-1
+        returnType: C<int>
+      synthetic static set c @-1
+        parameters
+          requiredPositional _c @-1
+            type: C<int>
+        returnType: void
+      synthetic static get v @-1
+        returnType: void Function()
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: void Function()
+        returnType: void
+''');
+  }
+
+  test_variable() async {
+    var library = await buildLibrary('int x = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_const() async {
+    var library = await buildLibrary('const int i = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const i @10
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+''');
+  }
+
+  test_variable_const_late() async {
+    var library = await buildLibrary('late const int i = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late const i @15
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @19
+            staticType: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+''');
+  }
+
+  test_variable_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+var x;''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @64
+        documentationComment: /**\n * Docs\n */
+        type: dynamic
+    accessors
+      synthetic static get x @-1
+        returnType: dynamic
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_variable_final() async {
+    var library = await buildLibrary('final int x = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final x @10
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+''');
+  }
+
+  test_variable_getterInLib_setterInPart() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+void set x(int _) {}
+''');
+    var library = await buildLibrary('''
+library my.lib;
+part 'a.dart';
+int get x => 42;''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static get x @39
+        returnType: int
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_getterInPart_setterInLib() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+int get x => 42;
+''');
+    var library = await buildLibrary('''
+library my.lib;
+part 'a.dart';
+void set x(int _) {}
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      static set x @40
+        parameters
+          requiredPositional _ @46
+            type: int
+        returnType: void
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static get x @24
+          returnType: int
+''');
+  }
+
+  test_variable_getterInPart_setterInPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib; int get x => 42;');
+    addSource(
+        '$testPackageLibPath/b.dart', 'part of my.lib; void set x(int _) {}');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static get x @24
+          returnType: int
+    b.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_implicit() async {
+    var library = await buildLibrary('int get x => 0;');
+
+    // We intentionally don't check the text, because we want to test
+    // requesting individual elements, not all accessors/variables at once.
+    var getter = _elementOfDefiningUnit(library, ['@getter', 'x'])
+        as PropertyAccessorElementImpl;
+    var variable = getter.variable as TopLevelVariableElementImpl;
+    expect(variable, isNotNull);
+    expect(variable.isFinal, isFalse);
+    expect(variable.getter, same(getter));
+    _assertTypeStr(variable.type, 'int');
+    expect(variable, same(_elementOfDefiningUnit(library, ['@variable', 'x'])));
+  }
+
+  test_variable_implicit_type() async {
+    var library = await buildLibrary('var x;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic
+    accessors
+      synthetic static get x @-1
+        returnType: dynamic
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_variable_inferred_type_implicit_initialized() async {
+    var library = await buildLibrary('var v = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_initializer() async {
+    var library = await buildLibrary('int v = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_initializer_final() async {
+    var library = await buildLibrary('final int v = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final v @10
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_variable_initializer_final_untyped() async {
+    var library = await buildLibrary('final v = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+''');
+  }
+
+  test_variable_initializer_staticMethod_ofExtension() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static int f() => 0;
+}
+var x = E.f();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @43
+            returnType: int
+    topLevelVariables
+      static x @59
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_initializer_untyped() async {
+    var library = await buildLibrary('var v = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @-1
+        returnType: int
+      synthetic static set v @-1
+        parameters
+          requiredPositional _v @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_late() async {
+    var library = await buildLibrary('late int x = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late x @9
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_late_final() async {
+    var library = await buildLibrary('late final int x;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late final x @15
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+      synthetic static set x @-1
+        parameters
+          requiredPositional _x @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variable_late_final_initialized() async {
+    var library = await buildLibrary('late final int x = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late final x @15
+        type: int
+    accessors
+      synthetic static get x @-1
+        returnType: int
+''');
+  }
+
+  test_variable_propagatedType_const_noDep() async {
+    var library = await buildLibrary('const i = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const i @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+''');
+  }
+
+  test_variable_propagatedType_final_dep_inLib() async {
+    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
+    var library = await buildLibrary('import "a.dart"; final b = a / 2;');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static final b @23
+        type: double
+    accessors
+      synthetic static get b @-1
+        returnType: double
+''');
+  }
+
+  test_variable_propagatedType_final_dep_inPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
+    var library =
+        await buildLibrary('library lib; part "a.dart"; final b = a / 2;');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static final b @34
+        type: double
+    accessors
+      synthetic static get b @-1
+        returnType: double
+  parts
+    a.dart
+      topLevelVariables
+        static final a @19
+          type: int
+      accessors
+        synthetic static get a @-1
+          returnType: int
+''');
+  }
+
+  test_variable_propagatedType_final_noDep() async {
+    var library = await buildLibrary('final i = 0;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final i @6
+        type: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+''');
+  }
+
+  test_variable_propagatedType_implicit_dep() async {
+    // The propagated type is defined in a library that is not imported.
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', 'import "a.dart"; C f() => null;');
+    var library = await buildLibrary('import "b.dart"; final x = f();');
+    checkElementText(library, r'''
+library
+  imports
+    package:test/b.dart
+  definingUnit
+    topLevelVariables
+      static final x @23
+        type: C
+    accessors
+      synthetic static get x @-1
+        returnType: C
+''');
+  }
+
+  test_variable_setterInPart_getterInPart() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'part of my.lib; void set x(int _) {}');
+    addSource('$testPackageLibPath/b.dart', 'part of my.lib; int get x => 42;');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+    b.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        static get x @24
+          returnType: int
+''');
+  }
+
+  test_variable_type_inferred_Never() async {
+    var library = await buildLibrary(r'''
+var a = throw 42;
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: Never
+    accessors
+      synthetic static get a @-1
+        returnType: Never
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: Never
+        returnType: void
+''');
+  }
+
+  test_variable_type_inferred_noInitializer() async {
+    var library = await buildLibrary(r'''
+var a;
+''');
+
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: dynamic
+    accessors
+      synthetic static get a @-1
+        returnType: dynamic
+      synthetic static set a @-1
+        parameters
+          requiredPositional _a @-1
+            type: dynamic
+        returnType: void
+''');
+  }
+
+  test_variable_type_inferred_nonNullify() async {
+    addSource('$testPackageLibPath/a.dart', '''
+// @dart = 2.7
+var a = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+var b = a;
+''');
+
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static b @21
+        type: int
+    accessors
+      synthetic static get b @-1
+        returnType: int
+      synthetic static set b @-1
+        parameters
+          requiredPositional _b @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  test_variableInitializer_contextType_after_astRewrite() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+const A<int> a = A();
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const a @41
+        type: A<int>
+        constantInitializer
+          InstanceCreationExpression
+            constructorName: ConstructorName
+              type: NamedType
+                name: SimpleIdentifier
+                  token: A @45
+                  staticElement: self::@class::A
+                  staticType: null
+                type: A<int>
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: int}
+            argumentList: ArgumentList
+              leftParenthesis: ( @46
+              rightParenthesis: ) @47
+            staticType: A<int>
+    accessors
+      synthetic static get a @-1
+        returnType: A<int>
+''');
+  }
+
+  test_variables() async {
+    var library = await buildLibrary('int i; int j;');
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static i @4
+        type: int
+      static j @11
+        type: int
+    accessors
+      synthetic static get i @-1
+        returnType: int
+      synthetic static set i @-1
+        parameters
+          requiredPositional _i @-1
+            type: int
+        returnType: void
+      synthetic static get j @-1
+        returnType: int
+      synthetic static set j @-1
+        parameters
+          requiredPositional _j @-1
+            type: int
+        returnType: void
+''');
+  }
+
+  void _assertTypeStr(DartType type, String expected) {
+    var typeStr = type.getDisplayString(withNullability: true);
+    expect(typeStr, expected);
+  }
+
+  void _assertTypeStrings(List<DartType> types, List<String> expected) {
+    var typeStringList = types.map((e) {
+      return e.getDisplayString(withNullability: true);
+    }).toList();
+    expect(typeStringList, expected);
+  }
+
+  Element _elementOfDefiningUnit(
+      LibraryElementImpl library, List<String> names) {
+    var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
+    var reference = unit.reference!;
+    for (var name in names) {
+      reference = reference.getChild(name);
+    }
+
+    var element = reference.element;
+    if (element != null) {
+      return element;
+    }
+
+    var elementFactory = library.linkedData!.elementFactory;
+    return elementFactory.elementOfReference(reference)!;
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
new file mode 100644
index 0000000..be36b5a
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -0,0 +1,75 @@
+// 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:test_reflective_loader/test_reflective_loader.dart';
+
+import 'element_text.dart';
+import 'elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MacroElementsKeepLinkingTest);
+    defineReflectiveTests(MacroElementsFromBytesTest);
+  });
+}
+
+@reflectiveTest
+class MacroElementsFromBytesTest extends MacroElementsTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class MacroElementsKeepLinkingTest extends MacroElementsTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+class MacroElementsTest extends ElementsBaseTest {
+  @override
+  bool get keepLinkingLibraries => false;
+
+  test_class_macro() async {
+    var library = await buildLibrary(r'''
+macro class A {}
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      macro class A @12
+        constructors
+          synthetic @-1
+''');
+  }
+
+  test_classAlias_macro() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+macro class A = Object with M;
+''');
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      macro class alias A @23
+        supertype: Object
+        mixins
+          M
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                superKeyword: super @0
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/repository_macro_kernel_builder.dart b/pkg/analyzer/test/src/summary/repository_macro_kernel_builder.dart
new file mode 100644
index 0000000..615a927
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/repository_macro_kernel_builder.dart
@@ -0,0 +1,209 @@
+// 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.
+
+// ignore: deprecated_member_use
+import 'dart:cli' as cli;
+import 'dart:convert';
+import 'dart:io' as io;
+import 'dart:typed_data';
+
+import 'package:_fe_analyzer_shared/src/macros/bootstrap.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/summary2/macro.dart';
+import 'package:analyzer/src/util/uri.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:front_end/src/api_prototype/compiler_options.dart' as fe;
+import 'package:front_end/src/api_prototype/file_system.dart' as fe;
+import 'package:front_end/src/fasta/kernel/utils.dart' as fe;
+import 'package:kernel/target/targets.dart' as fe;
+import 'package:path/path.dart' as package_path;
+import 'package:vm/kernel_front_end.dart' as fe;
+import 'package:vm/target/vm.dart' as fe;
+
+final Uri _platformDillUri = Uri.parse('org-dartlang-sdk://vm.dill');
+
+/// Implementation of [MacroKernelBuilder] that can run in Dart SDK repository.
+///
+/// This is a temporary implementation, to be replaced with a more stable
+/// approach, e.g. a `dart:` API for compilation, shipping `front_end`
+/// with SDK, etc.
+class DartRepositoryMacroKernelBuilder implements MacroKernelBuilder {
+  final Uint8List platformDillBytes;
+
+  DartRepositoryMacroKernelBuilder(this.platformDillBytes);
+
+  @override
+  Uint8List build({
+    required MacroFileSystem fileSystem,
+    required List<MacroLibrary> libraries,
+  }) {
+    var options = fe.CompilerOptions()
+      ..sdkSummary = _platformDillUri
+      ..target = fe.VmTarget(fe.TargetFlags(enableNullSafety: true));
+
+    var macroMainContent = bootstrapMacroIsolate(
+      {
+        for (var library in libraries)
+          library.uri.toString(): {
+            for (var c in library.classes) c.name: c.constructors
+          },
+      },
+      SerializationMode.byteDataClient,
+    );
+
+    var macroMainBytes = utf8.encode(macroMainContent) as Uint8List;
+    var macroMainPath = '${libraries.first.path}.macro';
+    var macroMainUri = fileSystem.pathContext.toUri(macroMainPath);
+
+    options.fileSystem = _FileSystem(
+      fileSystem,
+      platformDillBytes,
+      macroMainUri,
+      macroMainBytes,
+    );
+
+    // TODO(scheglov) For now we convert async into sync.
+    // ignore: deprecated_member_use
+    var compilationResults = cli.waitFor(
+      fe.compileToKernel(
+        macroMainUri,
+        options,
+        environmentDefines: {},
+      ),
+    );
+
+    return fe.serializeComponent(
+      compilationResults.component!,
+      filter: (library) {
+        return !library.importUri.isScheme('dart');
+      },
+      includeSources: false,
+    );
+  }
+}
+
+/// Environment for compiling macros to kernels, expecting that we run
+/// a test in the Dart SDK repository.
+///
+/// Just like [DartRepositoryMacroKernelBuilder], this is a temporary
+/// implementation.
+class MacrosEnvironment {
+  static late final instance = MacrosEnvironment._();
+
+  final _resourceProvider = MemoryResourceProvider(context: package_path.posix);
+  late final Uint8List platformDillBytes;
+
+  MacrosEnvironment._() {
+    var physical = PhysicalResourceProvider.INSTANCE;
+
+    var packageRoot = physical.pathContext.normalize(package_root.packageRoot);
+    physical
+        .getFolder(packageRoot)
+        .getChildAssumingFolder('_fe_analyzer_shared/lib/src/macros')
+        .copyTo(
+          packageSharedFolder.getChildAssumingFolder('lib/src'),
+        );
+
+    platformDillBytes = physical
+        .getFile(io.Platform.resolvedExecutable)
+        .parent
+        .parent
+        .getChildAssumingFolder('lib')
+        .getChildAssumingFolder('_internal')
+        .getChildAssumingFile('vm_platform_strong.dill')
+        .readAsBytesSync();
+  }
+
+  Folder get packageSharedFolder {
+    return _resourceProvider.getFolder('/packages/_fe_analyzer_shared');
+  }
+}
+
+class _BytesFileSystemEntity implements fe.FileSystemEntity {
+  @override
+  final Uri uri;
+
+  final Uint8List bytes;
+
+  _BytesFileSystemEntity(this.uri, this.bytes);
+
+  @override
+  Future<bool> exists() async => true;
+
+  @override
+  Future<bool> existsAsyncIfPossible() => exists();
+
+  @override
+  Future<List<int>> readAsBytes() async => bytes;
+
+  @override
+  Future<List<int>> readAsBytesAsyncIfPossible() => readAsBytes();
+
+  @override
+  Future<String> readAsString() async {
+    var bytes = await readAsBytes();
+    return utf8.decode(bytes);
+  }
+}
+
+class _FileSystem implements fe.FileSystem {
+  final MacroFileSystem fileSystem;
+  final Uint8List platformDillBytes;
+  final Uri macroMainUri;
+  final Uint8List macroMainBytes;
+
+  _FileSystem(
+    this.fileSystem,
+    this.platformDillBytes,
+    this.macroMainUri,
+    this.macroMainBytes,
+  );
+
+  @override
+  fe.FileSystemEntity entityForUri(Uri uri) {
+    if (uri == _platformDillUri) {
+      return _BytesFileSystemEntity(uri, platformDillBytes);
+    } else if (uri == macroMainUri) {
+      return _BytesFileSystemEntity(uri, macroMainBytes);
+    } else if (uri.isScheme('file')) {
+      var path = fileUriToNormalizedPath(fileSystem.pathContext, uri);
+      return _FileSystemEntity(
+        uri,
+        fileSystem.getFile(path),
+      );
+    } else {
+      throw fe.FileSystemException(uri, 'Only supports file: URIs');
+    }
+  }
+}
+
+class _FileSystemEntity implements fe.FileSystemEntity {
+  @override
+  final Uri uri;
+
+  final MacroFileEntry file;
+
+  _FileSystemEntity(this.uri, this.file);
+
+  @override
+  Future<bool> exists() async => file.exists;
+
+  @override
+  Future<bool> existsAsyncIfPossible() => exists();
+
+  @override
+  Future<List<int>> readAsBytes() async {
+    var string = await readAsString();
+    return utf8.encode(string);
+  }
+
+  @override
+  Future<List<int>> readAsBytesAsyncIfPossible() => readAsBytes();
+
+  @override
+  Future<String> readAsString() async => file.content;
+}
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 317d7c5..3888c85 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -15,15 +15,6 @@
 import 'package:analyzer/src/summary2/reference.dart';
 import 'package:test/test.dart';
 
-/// Used in [ResolvedAstPrinter] to print lines of code that corresponding
-/// to a subtree of AST. This help to make the bulky presentation of AST a
-/// bit more understandable.
-abstract class CodeLinesProvider {
-  /// If the [offset] corresponds to a new, never requested before line,
-  /// return this line, otherwise return `null`.
-  String nextLine(int offset);
-}
-
 /// Prints AST as a tree, with properties and children.
 class ResolvedAstPrinter extends ThrowingAstVisitor<void> {
   /// The URI of the library that contains the AST being printed.
@@ -32,8 +23,7 @@
   /// The target sink to print AST.
   final StringSink _sink;
 
-  /// The optional provider for code lines, might be `null`.
-  final CodeLinesProvider? _codeLinesProvider;
+  final bool skipArgumentList;
 
   /// If `true`, linking of [EnumConstantDeclaration] will be checked
   /// TODO(scheglov) Remove after https://github.com/dart-lang/sdk/issues/48380
@@ -51,20 +41,18 @@
     required String? selfUriStr,
     required StringSink sink,
     required String indent,
-    CodeLinesProvider? codeLinesProvider,
+    this.skipArgumentList = false,
     this.withCheckingLinking = false,
     bool withOffsets = false,
     bool withResolution = true,
   })  : _selfUriStr = selfUriStr,
         _sink = sink,
-        _codeLinesProvider = codeLinesProvider,
         _withOffsets = withOffsets,
         _withResolution = withResolution,
         _indent = indent;
 
   @override
   void visitAdjacentStrings(AdjacentStrings node) {
-    _writeNextCodeLine(node);
     _writeln('AdjacentStrings');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -75,7 +63,6 @@
 
   @override
   void visitAnnotation(Annotation node) {
-    _writeNextCodeLine(node);
     _writeln('Annotation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -85,7 +72,6 @@
 
   @override
   void visitArgumentList(ArgumentList node) {
-    _writeNextCodeLine(node);
     _writeln('ArgumentList');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -94,7 +80,6 @@
 
   @override
   void visitAsExpression(AsExpression node) {
-    _writeNextCodeLine(node);
     _writeln('AsExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -104,7 +89,6 @@
 
   @override
   void visitAssertInitializer(AssertInitializer node) {
-    _writeNextCodeLine(node);
     _writeln('AssertInitializer');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -113,7 +97,6 @@
 
   @override
   void visitAssertStatement(AssertStatement node) {
-    _writeNextCodeLine(node);
     _writeln('AssertStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -122,7 +105,6 @@
 
   @override
   void visitAssignmentExpression(AssignmentExpression node) {
-    _writeNextCodeLine(node);
     _writeln('AssignmentExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -137,7 +119,6 @@
 
   @override
   void visitAwaitExpression(AwaitExpression node) {
-    _writeNextCodeLine(node);
     _writeln('AwaitExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -147,7 +128,6 @@
 
   @override
   void visitBinaryExpression(BinaryExpression node) {
-    _writeNextCodeLine(node);
     _writeln('BinaryExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -159,7 +139,6 @@
 
   @override
   void visitBlock(Block node) {
-    _writeNextCodeLine(node);
     _writeln('Block');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -168,7 +147,6 @@
 
   @override
   void visitBlockFunctionBody(BlockFunctionBody node) {
-    _writeNextCodeLine(node);
     _writeln('BlockFunctionBody');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -177,7 +155,6 @@
 
   @override
   void visitBooleanLiteral(BooleanLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('BooleanLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -187,7 +164,6 @@
 
   @override
   void visitBreakStatement(BreakStatement node) {
-    _writeNextCodeLine(node);
     _writeln('BreakStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -196,7 +172,6 @@
 
   @override
   void visitCascadeExpression(CascadeExpression node) {
-    _writeNextCodeLine(node);
     _writeln('CascadeExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -206,7 +181,6 @@
 
   @override
   void visitCatchClause(CatchClause node) {
-    _writeNextCodeLine(node);
     _writeln('CatchClause');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -215,7 +189,6 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('ClassDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -226,8 +199,18 @@
   }
 
   @override
+  void visitClassTypeAlias(ClassTypeAlias node) {
+    _writeln('ClassTypeAlias');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
+    });
+  }
+
+  @override
   void visitComment(Comment node) {
-    _writeNextCodeLine(node);
     _writeln('Comment');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -236,7 +219,6 @@
 
   @override
   void visitCompilationUnit(CompilationUnit node) {
-    _writeNextCodeLine(node);
     _writeln('CompilationUnit');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -245,7 +227,6 @@
 
   @override
   void visitConditionalExpression(ConditionalExpression node) {
-    _writeNextCodeLine(node);
     _writeln('ConditionalExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -255,7 +236,6 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('ConstructorDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -267,7 +247,6 @@
 
   @override
   void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
-    _writeNextCodeLine(node);
     _writeln('ConstructorFieldInitializer');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -276,7 +255,6 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    _writeNextCodeLine(node);
     _writeln('ConstructorName');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -304,7 +282,6 @@
 
   @override
   void visitContinueStatement(ContinueStatement node) {
-    _writeNextCodeLine(node);
     _writeln('ContinueStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -313,7 +290,6 @@
 
   @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
-    _writeNextCodeLine(node);
     _writeln('DeclaredIdentifier');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -325,7 +301,6 @@
 
   @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
-    _writeNextCodeLine(node);
     _writeln('DefaultFormalParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -338,7 +313,6 @@
 
   @override
   void visitDoStatement(DoStatement node) {
-    _writeNextCodeLine(node);
     _writeln('DoStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -347,7 +321,6 @@
 
   @override
   void visitDoubleLiteral(DoubleLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('DoubleLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -357,7 +330,6 @@
 
   @override
   void visitEmptyFunctionBody(EmptyFunctionBody node) {
-    _writeNextCodeLine(node);
     _writeln('EmptyFunctionBody');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -378,7 +350,6 @@
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     _checkChildrenEntitiesLinking(node);
-    _writeNextCodeLine(node);
     _writeln('EnumConstantDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -390,7 +361,6 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('EnumDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -402,7 +372,6 @@
 
   @override
   void visitExportDirective(ExportDirective node) {
-    _writeNextCodeLine(node);
     _writeln('ExportDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -417,7 +386,6 @@
 
   @override
   void visitExpressionFunctionBody(ExpressionFunctionBody node) {
-    _writeNextCodeLine(node);
     _writeln('ExpressionFunctionBody');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -426,7 +394,6 @@
 
   @override
   void visitExpressionStatement(ExpressionStatement node) {
-    _writeNextCodeLine(node);
     _writeln('ExpressionStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -435,7 +402,6 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    _writeNextCodeLine(node);
     _writeln('ExtendsClause');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -444,7 +410,6 @@
 
   @override
   void visitExtensionOverride(ExtensionOverride node) {
-    _writeNextCodeLine(node);
     _writeln('ExtensionOverride');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -456,7 +421,6 @@
 
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('FieldDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -468,7 +432,6 @@
 
   @override
   void visitFieldFormalParameter(FieldFormalParameter node) {
-    _writeNextCodeLine(node);
     _writeln('FieldFormalParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -481,7 +444,6 @@
 
   @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('ForEachPartsWithDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -490,7 +452,6 @@
 
   @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
-    _writeNextCodeLine(node);
     _writeln('ForEachPartsWithIdentifier');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -499,7 +460,6 @@
 
   @override
   void visitFormalParameterList(FormalParameterList node) {
-    _writeNextCodeLine(node);
     _writeln('FormalParameterList');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -508,7 +468,6 @@
 
   @override
   void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
-    _writeNextCodeLine(node);
     _writeln('ForPartsWithDeclarations');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -517,7 +476,6 @@
 
   @override
   void visitForPartsWithExpression(ForPartsWithExpression node) {
-    _writeNextCodeLine(node);
     _writeln('ForPartsWithExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -526,7 +484,6 @@
 
   @override
   void visitForStatement(ForStatement node) {
-    _writeNextCodeLine(node);
     _writeln('ForStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -535,7 +492,6 @@
 
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -548,7 +504,6 @@
 
   @override
   void visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionDeclarationStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -557,7 +512,6 @@
 
   @override
   void visitFunctionExpression(FunctionExpression node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -570,7 +524,6 @@
 
   @override
   void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionExpressionInvocation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -593,7 +546,6 @@
 
   @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionTypeAlias');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -605,7 +557,6 @@
 
   @override
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
-    _writeNextCodeLine(node);
     _writeln('FunctionTypedFormalParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -618,7 +569,6 @@
 
   @override
   void visitGenericFunctionType(covariant GenericFunctionTypeImpl node) {
-    _writeNextCodeLine(node);
     _writeln('GenericFunctionType');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -634,7 +584,6 @@
 
   @override
   void visitGenericTypeAlias(GenericTypeAlias node) {
-    _writeNextCodeLine(node);
     _writeln('GenericTypeAlias');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -646,7 +595,6 @@
 
   @override
   void visitHideCombinator(HideCombinator node) {
-    _writeNextCodeLine(node);
     _writeln('HideCombinator');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -663,7 +611,6 @@
 
   @override
   void visitIfStatement(IfStatement node) {
-    _writeNextCodeLine(node);
     _writeln('IfStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -672,7 +619,6 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    _writeNextCodeLine(node);
     _writeln('ImplementsClause');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -692,7 +638,6 @@
 
   @override
   void visitImportDirective(ImportDirective node) {
-    _writeNextCodeLine(node);
     _writeln('ImportDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -707,7 +652,6 @@
 
   @override
   void visitIndexExpression(IndexExpression node) {
-    _writeNextCodeLine(node);
     _writeln('IndexExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -718,7 +662,6 @@
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    _writeNextCodeLine(node);
     _writeln('InstanceCreationExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -728,7 +671,6 @@
 
   @override
   void visitIntegerLiteral(IntegerLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('IntegerLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -738,7 +680,6 @@
 
   @override
   void visitInterpolationExpression(InterpolationExpression node) {
-    _writeNextCodeLine(node);
     _writeln('InterpolationExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -747,7 +688,6 @@
 
   @override
   void visitInterpolationString(InterpolationString node) {
-    _writeNextCodeLine(node);
     _writeln('InterpolationString');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -756,7 +696,6 @@
 
   @override
   void visitIsExpression(IsExpression node) {
-    _writeNextCodeLine(node);
     _writeln('IsExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -766,7 +705,6 @@
 
   @override
   void visitLabel(Label node) {
-    _writeNextCodeLine(node);
     _writeln('Label');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -775,7 +713,6 @@
 
   @override
   void visitLibraryDirective(LibraryDirective node) {
-    _writeNextCodeLine(node);
     _writeln('LibraryDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -785,7 +722,6 @@
 
   @override
   void visitLibraryIdentifier(LibraryIdentifier node) {
-    _writeNextCodeLine(node);
     _writeln('LibraryIdentifier');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -796,7 +732,6 @@
 
   @override
   void visitListLiteral(ListLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('ListLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -806,7 +741,6 @@
 
   @override
   void visitMapLiteralEntry(MapLiteralEntry node) {
-    _writeNextCodeLine(node);
     _writeln('SetOrMapLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -815,7 +749,6 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('MethodDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -828,7 +761,6 @@
 
   @override
   void visitMethodInvocation(MethodInvocation node) {
-    _writeNextCodeLine(node);
     _writeln('MethodInvocation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -840,7 +772,6 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('MixinDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -852,7 +783,6 @@
 
   @override
   void visitNamedExpression(NamedExpression node) {
-    _writeNextCodeLine(node);
     _writeln('NamedExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -861,7 +791,6 @@
 
   @override
   void visitNamedType(NamedType node) {
-    _writeNextCodeLine(node);
     _writeln('NamedType');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -871,7 +800,6 @@
 
   @override
   void visitNullLiteral(NullLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('NullLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -881,7 +809,6 @@
 
   @override
   void visitOnClause(OnClause node) {
-    _writeNextCodeLine(node);
     _writeln('OnClause');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -890,7 +817,6 @@
 
   @override
   void visitParenthesizedExpression(ParenthesizedExpression node) {
-    _writeNextCodeLine(node);
     _writeln('ParenthesizedExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -900,7 +826,6 @@
 
   @override
   void visitPartDirective(PartDirective node) {
-    _writeNextCodeLine(node);
     _writeln('PartDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -913,7 +838,6 @@
 
   @override
   void visitPartOfDirective(PartOfDirective node) {
-    _writeNextCodeLine(node);
     _writeln('PartOfDirective');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -923,7 +847,6 @@
 
   @override
   void visitPostfixExpression(PostfixExpression node) {
-    _writeNextCodeLine(node);
     _writeln('PostfixExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -940,7 +863,6 @@
 
   @override
   void visitPrefixedIdentifier(PrefixedIdentifier node) {
-    _writeNextCodeLine(node);
     _writeln('PrefixedIdentifier');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -951,7 +873,6 @@
 
   @override
   void visitPrefixExpression(PrefixExpression node) {
-    _writeNextCodeLine(node);
     _writeln('PrefixExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -968,7 +889,6 @@
 
   @override
   void visitPropertyAccess(PropertyAccess node) {
-    _writeNextCodeLine(node);
     _writeln('PropertyAccess');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -980,7 +900,6 @@
   void visitRedirectingConstructorInvocation(
     RedirectingConstructorInvocation node,
   ) {
-    _writeNextCodeLine(node);
     _writeln('RedirectingConstructorInvocation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -990,7 +909,6 @@
 
   @override
   void visitReturnStatement(ReturnStatement node) {
-    _writeNextCodeLine(node);
     _writeln('ReturnStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -999,7 +917,6 @@
 
   @override
   void visitSetOrMapLiteral(SetOrMapLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('SetOrMapLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1010,7 +927,6 @@
 
   @override
   void visitShowCombinator(ShowCombinator node) {
-    _writeNextCodeLine(node);
     _writeln('ShowCombinator');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1019,7 +935,6 @@
 
   @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
-    _writeNextCodeLine(node);
     _writeln('SimpleFormalParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1032,7 +947,6 @@
 
   @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
-    _writeNextCodeLine(node);
     _writeln('SimpleIdentifier');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1047,7 +961,6 @@
 
   @override
   void visitSimpleStringLiteral(SimpleStringLiteral node) {
-    _writeNextCodeLine(node);
     _writeln('SimpleStringLiteral');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1064,7 +977,6 @@
 
   @override
   void visitStringInterpolation(StringInterpolation node) {
-    _writeNextCodeLine(node);
     _writeln('StringInterpolation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1075,7 +987,6 @@
 
   @override
   void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    _writeNextCodeLine(node);
     _writeln('SuperConstructorInvocation');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1085,7 +996,6 @@
 
   @override
   void visitSuperExpression(SuperExpression node) {
-    _writeNextCodeLine(node);
     _writeln('SuperExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1098,7 +1008,6 @@
     if (withCheckingLinking) {
       _checkChildrenEntitiesLinking(node);
     }
-    _writeNextCodeLine(node);
     _writeln('SuperFormalParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1111,7 +1020,6 @@
 
   @override
   void visitSwitchCase(SwitchCase node) {
-    _writeNextCodeLine(node);
     _writeln('SwitchCase');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1120,7 +1028,6 @@
 
   @override
   void visitSwitchDefault(SwitchDefault node) {
-    _writeNextCodeLine(node);
     _writeln('SwitchDefault');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1129,7 +1036,6 @@
 
   @override
   void visitSwitchStatement(SwitchStatement node) {
-    _writeNextCodeLine(node);
     _writeln('SwitchStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1146,7 +1052,6 @@
 
   @override
   void visitThisExpression(ThisExpression node) {
-    _writeNextCodeLine(node);
     _writeln('ThisExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1156,7 +1061,6 @@
 
   @override
   void visitThrowExpression(ThrowExpression node) {
-    _writeNextCodeLine(node);
     _writeln('ThrowExpression');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1166,7 +1070,6 @@
 
   @override
   void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('TopLevelVariableDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1178,7 +1081,6 @@
 
   @override
   void visitTryStatement(TryStatement node) {
-    _writeNextCodeLine(node);
     _writeln('TryStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1187,7 +1089,6 @@
 
   @override
   void visitTypeArgumentList(TypeArgumentList node) {
-    _writeNextCodeLine(node);
     _writeln('TypeArgumentList');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1205,7 +1106,6 @@
 
   @override
   void visitTypeParameter(TypeParameter node) {
-    _writeNextCodeLine(node);
     _writeln('TypeParameter');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1217,7 +1117,6 @@
 
   @override
   void visitTypeParameterList(TypeParameterList node) {
-    _writeNextCodeLine(node);
     _writeln('TypeParameterList');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1226,7 +1125,6 @@
 
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
-    _writeNextCodeLine(node);
     _writeln('VariableDeclaration');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1238,7 +1136,6 @@
 
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
-    _writeNextCodeLine(node);
     _writeln('VariableDeclarationList');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1247,7 +1144,6 @@
 
   @override
   void visitVariableDeclarationStatement(VariableDeclarationStatement node) {
-    _writeNextCodeLine(node);
     _writeln('VariableDeclarationStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1256,7 +1152,6 @@
 
   @override
   void visitWhileStatement(WhileStatement node) {
-    _writeNextCodeLine(node);
     _writeln('WhileStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1265,7 +1160,6 @@
 
   @override
   void visitWithClause(WithClause node) {
-    _writeNextCodeLine(node);
     _writeln('WithClause');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1274,7 +1168,6 @@
 
   @override
   void visitYieldStatement(YieldStatement node) {
-    _writeNextCodeLine(node);
     _writeln('YieldStatement');
     _withIndent(() {
       _writeNamedChildEntities(node);
@@ -1285,6 +1178,40 @@
     _writeElement(name, element);
   }
 
+  void writeType(DartType? type, {String? name}) {
+    _sink.write(_indent);
+
+    if (name != null) {
+      _sink.write('$name: ');
+    }
+
+    if (type != null) {
+      var typeStr = _typeStr(type);
+      _writeln(typeStr);
+
+      var alias = type.alias;
+      if (alias != null) {
+        _withIndent(() {
+          _writeElement('alias', alias.element);
+          _withIndent(() {
+            _writeTypeList('typeArguments', alias.typeArguments);
+          });
+        });
+      }
+    } else {
+      _writeln('null');
+    }
+  }
+
+  void writeTypeList(String name, List<DartType>? types) {
+    if (types != null && types.isNotEmpty) {
+      _writelnWithIndent(name);
+      _withIndent(() {
+        types.forEach(writeType);
+      });
+    }
+  }
+
   /// Check that children entities of the [node] link to each other.
   void _checkChildrenEntitiesLinking(AstNode node) {
     Token? lastEnd;
@@ -1323,7 +1250,7 @@
     if (name.isEmpty) {
       name = '•';
     }
-    return _referenceToString(parent) + '::$name';
+    return '${_referenceToString(parent)}::$name';
   }
 
   String _substitutionMapStr(Map<TypeParameterElement, DartType> map) {
@@ -1333,9 +1260,8 @@
     return '{$entriesStr}';
   }
 
-  /// TODO(scheglov) Make [type] non-nullable?
-  String? _typeStr(DartType? type) {
-    return type?.getDisplayString(withNullability: true);
+  String _typeStr(DartType type) {
+    return type.getDisplayString(withNullability: true);
   }
 
   void _withIndent(void Function() f) {
@@ -1419,7 +1345,10 @@
       if (value is Token) {
         _writeToken(entity.name, value);
       } else if (value is AstNode) {
-        _writeNode(entity.name, value);
+        if (value is ArgumentList && skipArgumentList) {
+        } else {
+          _writeNode(entity.name, value);
+        }
       } else if (value is List<Token>) {
         _writeTokenList(entity.name, value);
       } else if (value is List<AstNode>) {
@@ -1430,15 +1359,6 @@
     }
   }
 
-  void _writeNextCodeLine(AstNode node) {
-    var nextCodeLine = _codeLinesProvider?.nextLine(node.offset);
-    if (nextCodeLine != null) {
-      nextCodeLine = nextCodeLine.trim();
-      _sink.writeln('// $nextCodeLine');
-      _sink.write(_indent);
-    }
-  }
-
   void _writeNode(String name, AstNode? node) {
     if (node != null) {
       _sink.write(_indent);
@@ -1535,20 +1455,13 @@
 
   void _writeType(String name, DartType? type) {
     if (_withResolution) {
-      var typeStr = _typeStr(type);
-      _writelnWithIndent('$name: $typeStr');
+      writeType(type, name: name);
     }
   }
 
   void _writeTypeList(String name, List<DartType>? types) {
-    if (types != null && types.isNotEmpty) {
-      _writelnWithIndent(name);
-      _withIndent(() {
-        for (var type in types) {
-          var typeStr = _typeStr(type);
-          _writelnWithIndent('$typeStr');
-        }
-      });
+    if (_withResolution) {
+      writeTypeList(name, types);
     }
   }
 
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
deleted file mode 100644
index 60ab80c..0000000
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ /dev/null
@@ -1,296 +0,0 @@
-// 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.
-
-import 'dart:typed_data';
-
-import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/context/context.dart';
-import 'package:analyzer/src/dart/analysis/session.dart';
-import 'package:analyzer/src/dart/element/class_hierarchy.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:analyzer/src/summary2/bundle_reader.dart';
-import 'package:analyzer/src/summary2/informative_data.dart';
-import 'package:analyzer/src/summary2/link.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/reference.dart';
-import 'package:analyzer/src/util/uri.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../../util/feature_sets.dart';
-import 'element_text.dart';
-import 'resynthesize_common.dart';
-import 'test_strategies.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ResynthesizeAstKeepLinkingTest);
-    defineReflectiveTests(ResynthesizeAstFromBytesTest);
-    // defineReflectiveTests(ApplyCheckElementTextReplacements);
-  });
-}
-
-@reflectiveTest
-class ApplyCheckElementTextReplacements {
-  test_applyReplacements() {
-    applyCheckElementTextReplacements();
-  }
-}
-
-@reflectiveTest
-abstract class ResynthesizeAst2Test extends AbstractResynthesizeTest
-    with ResynthesizeTestCases {
-  /// The shared SDK bundle, computed once and shared among test invocations.
-  static _SdkBundle? _sdkBundle;
-
-  /// We need to test both cases - when we keep linking libraries (happens for
-  /// new or invalidated libraries), and when we load libraries from bytes
-  /// (happens internally in Blaze or when we have cached summaries).
-  bool get keepLinkingLibraries;
-
-  _SdkBundle get sdkBundle {
-    if (_sdkBundle != null) {
-      return _sdkBundle!;
-    }
-
-    var featureSet = FeatureSet.latestLanguageVersion();
-    var inputLibraries = <LinkInputLibrary>[];
-    for (var sdkLibrary in sdk.sdkLibraries) {
-      var source = sourceFactory.resolveUri(null, sdkLibrary.shortName)!;
-      var text = getFile(source.fullName).readAsStringSync();
-      var unit = parseText(source, text, featureSet);
-
-      var inputUnits = <LinkInputUnit>[];
-      _addLibraryUnits(source, unit, inputUnits, featureSet);
-      inputLibraries.add(
-        LinkInputLibrary(
-          source: source,
-          units: inputUnits,
-        ),
-      );
-    }
-
-    var elementFactory = LinkedElementFactory(
-      AnalysisContextImpl(
-        SynchronousSession(
-          AnalysisOptionsImpl(),
-          declaredVariables,
-        ),
-        sourceFactory,
-      ),
-      _AnalysisSessionForLinking(),
-      Reference.root(),
-    );
-
-    var sdkLinkResult = link(elementFactory, inputLibraries);
-
-    return _sdkBundle = _SdkBundle(
-      resolutionBytes: sdkLinkResult.resolutionBytes,
-    );
-  }
-
-  @override
-  Future<LibraryElementImpl> checkLibrary(String text,
-      {bool allowErrors = false, bool dumpSummaries = false}) async {
-    var source = addTestSource(text);
-
-    var inputLibraries = <LinkInputLibrary>[];
-    _addNonDartLibraries({}, inputLibraries, source);
-
-    var unitsInformativeBytes = <Uri, Uint8List>{};
-    for (var inputLibrary in inputLibraries) {
-      for (var inputUnit in inputLibrary.units) {
-        var informativeBytes = writeUnitInformative(inputUnit.unit);
-        unitsInformativeBytes[inputUnit.uri] = informativeBytes;
-      }
-    }
-
-    var analysisContext = AnalysisContextImpl(
-      SynchronousSession(
-        AnalysisOptionsImpl()..contextFeatures = featureSet,
-        declaredVariables,
-      ),
-      sourceFactory,
-    );
-
-    var elementFactory = LinkedElementFactory(
-      analysisContext,
-      _AnalysisSessionForLinking(),
-      Reference.root(),
-    );
-    elementFactory.addBundle(
-      BundleReader(
-        elementFactory: elementFactory,
-        unitsInformativeBytes: {},
-        resolutionBytes: sdkBundle.resolutionBytes,
-      ),
-    );
-
-    var linkResult = link(elementFactory, inputLibraries);
-
-    if (!keepLinkingLibraries) {
-      elementFactory.removeBundle(
-        inputLibraries.map((e) => e.uriStr).toSet(),
-      );
-      elementFactory.addBundle(
-        BundleReader(
-          elementFactory: elementFactory,
-          unitsInformativeBytes: unitsInformativeBytes,
-          resolutionBytes: linkResult.resolutionBytes,
-        ),
-      );
-    }
-
-    return elementFactory.libraryOfUri2('${source.uri}');
-  }
-
-  void setUp() {
-    featureSet = FeatureSets.latestWithExperiments;
-  }
-
-  void _addLibraryUnits(
-    Source definingSource,
-    CompilationUnit definingUnit,
-    List<LinkInputUnit> units,
-    FeatureSet featureSet,
-  ) {
-    units.add(
-      LinkInputUnit(
-        partDirectiveIndex: null,
-        source: definingSource,
-        isSynthetic: false,
-        unit: definingUnit,
-      ),
-    );
-
-    var partDirectiveIndex = -1;
-    for (var directive in definingUnit.directives) {
-      if (directive is PartDirective) {
-        ++partDirectiveIndex;
-        var relativeUriStr = directive.uri.stringValue;
-
-        var partSource = sourceFactory.resolveUri(
-          definingSource,
-          relativeUriStr,
-        );
-
-        if (partSource != null) {
-          var text = _readSafely(partSource.fullName);
-          var unit = parseText(partSource, text, featureSet);
-          units.add(
-            LinkInputUnit(
-              partDirectiveIndex: partDirectiveIndex,
-              partUriStr: relativeUriStr,
-              source: partSource,
-              isSynthetic: false,
-              unit: unit,
-            ),
-          );
-        }
-      }
-    }
-  }
-
-  void _addNonDartLibraries(
-    Set<Source> addedLibraries,
-    List<LinkInputLibrary> libraries,
-    Source source,
-  ) {
-    if (source.uri.isScheme('dart') || !addedLibraries.add(source)) {
-      return;
-    }
-
-    var text = _readSafely(source.fullName);
-    var unit = parseText(source, text, featureSet);
-
-    var units = <LinkInputUnit>[];
-    _addLibraryUnits(source, unit, units, featureSet);
-    libraries.add(
-      LinkInputLibrary(
-        source: source,
-        units: units,
-      ),
-    );
-
-    void addRelativeUriStr(StringLiteral uriNode) {
-      var relativeUriStr = uriNode.stringValue;
-      if (relativeUriStr == null) {
-        return;
-      }
-
-      Uri relativeUri;
-      try {
-        relativeUri = Uri.parse(relativeUriStr);
-      } on FormatException {
-        return;
-      }
-
-      var absoluteUri = resolveRelativeUri(source.uri, relativeUri);
-      var rewrittenUri = rewriteToCanonicalUri(sourceFactory, absoluteUri);
-      if (rewrittenUri == null) {
-        return;
-      }
-
-      var uriSource = sourceFactory.forUri2(rewrittenUri);
-      if (uriSource == null) {
-        return;
-      }
-
-      _addNonDartLibraries(addedLibraries, libraries, uriSource);
-    }
-
-    for (var directive in unit.directives) {
-      if (directive is NamespaceDirective) {
-        addRelativeUriStr(directive.uri);
-        for (var configuration in directive.configurations) {
-          addRelativeUriStr(configuration.uri);
-        }
-      }
-    }
-  }
-
-  String _readSafely(String path) {
-    try {
-      var file = resourceProvider.getFile(path);
-      return file.readAsStringSync();
-    } catch (_) {
-      return '';
-    }
-  }
-}
-
-@reflectiveTest
-class ResynthesizeAstFromBytesTest extends ResynthesizeAst2Test {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ResynthesizeAstKeepLinkingTest extends ResynthesizeAst2Test {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-class _AnalysisSessionForLinking implements AnalysisSessionImpl {
-  @override
-  final ClassHierarchy classHierarchy = ClassHierarchy();
-
-  @override
-  InheritanceManager3 inheritanceManager = InheritanceManager3();
-
-  @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-class _SdkBundle {
-  final Uint8List resolutionBytes;
-
-  _SdkBundle({
-    required this.resolutionBytes,
-  });
-}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
deleted file mode 100644
index 26542c5..0000000
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ /dev/null
@@ -1,37841 +0,0 @@
-// Copyright (c) 2015, 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:analyzer/dart/analysis/declared_variables.dart';
-import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/sdk/sdk.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/source/package_map_resolver.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
-import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../../util/feature_sets.dart';
-import 'element_text.dart';
-
-/// Abstract base class for resynthesizing and comparing elements.
-///
-/// The return type separator: →
-abstract class AbstractResynthesizeTest with ResourceProviderMixin {
-  /// The set of features enabled in this test.
-  late FeatureSet featureSet;
-
-  DeclaredVariables declaredVariables = DeclaredVariables();
-  late final SourceFactory sourceFactory;
-  late final FolderBasedDartSdk sdk;
-
-  late String testFile;
-  late Source testSource;
-  Set<Source> otherLibrarySources = <Source>{};
-
-  AbstractResynthesizeTest() {
-    var sdkRoot = newFolder('/sdk');
-    createMockSdk(
-      resourceProvider: resourceProvider,
-      root: sdkRoot,
-    );
-    sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
-
-    sourceFactory = SourceFactory(
-      [
-        DartUriResolver(sdk),
-        PackageMapUriResolver(resourceProvider, {
-          'test': [
-            getFolder('/home/test/lib'),
-          ],
-        }),
-        ResourceUriResolver(resourceProvider),
-      ],
-    );
-
-    testFile = convertPath('/test.dart');
-  }
-
-  void addLibrary(String uri) {
-    var source = sourceFactory.forUri(uri)!;
-    otherLibrarySources.add(source);
-  }
-
-  Source addLibrarySource(String filePath, String contents) {
-    var source = addSource(filePath, contents);
-    otherLibrarySources.add(source);
-    return source;
-  }
-
-  Source addSource(String path, String contents) {
-    var file = newFile(path, content: contents);
-    var uri = sourceFactory.pathToUri(file.path)!;
-    return sourceFactory.forUri2(uri)!;
-  }
-
-  Source addTestSource(String code, [Uri? uri]) {
-    testSource = addSource(testFile, code);
-    return testSource;
-  }
-
-  Future<LibraryElementImpl> checkLibrary(String text,
-      {bool allowErrors = false});
-}
-
-/// Mixin containing test cases exercising summary resynthesis.  Intended to be
-/// applied to a class implementing [AbstractResynthesizeTest].
-mixin ResynthesizeTestCases on AbstractResynthesizeTest {
-  test_class_abstract() async {
-    var library = await checkLibrary('abstract class C {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_constructor_const() async {
-    var library = await checkLibrary('class C { const C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @16
-''');
-  }
-
-  test_class_constructor_const_external() async {
-    var library = await checkLibrary('class C { external const C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          external const @25
-''');
-  }
-
-  test_class_constructor_documented() async {
-    var library = await checkLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  C();
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @34
-            documentationComment: /**\n   * Docs\n   */
-''');
-  }
-
-  test_class_constructor_explicit_named() async {
-    var library = await checkLibrary('class C { C.foo(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          foo @12
-            periodOffset: 11
-            nameEnd: 15
-''');
-  }
-
-  test_class_constructor_explicit_type_params() async {
-    var library = await checkLibrary('class C<T, U> { C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          @16
-''');
-  }
-
-  test_class_constructor_explicit_unnamed() async {
-    var library = await checkLibrary('class C { C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @10
-''');
-  }
-
-  test_class_constructor_external() async {
-    var library = await checkLibrary('class C { external C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          external @19
-''');
-  }
-
-  test_class_constructor_factory() async {
-    var library = await checkLibrary('class C { factory C() => throw 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          factory @18
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_dynamic() async {
-    var library =
-        await checkLibrary('class C { dynamic x; C(dynamic this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @18
-            type: dynamic
-        constructors
-          @21
-            parameters
-              requiredPositional final this.x @36
-                type: dynamic
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_typed() async {
-    var library = await checkLibrary('class C { dynamic x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @18
-            type: dynamic
-        constructors
-          @21
-            parameters
-              requiredPositional final this.x @32
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_untyped() async {
-    var library = await checkLibrary('class C { dynamic x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @18
-            type: dynamic
-        constructors
-          @21
-            parameters
-              requiredPositional final this.x @28
-                type: dynamic
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_noReturnType() async {
-    var library = await checkLibrary(r'''
-class C {
-  var x;
-  C(this.x(double b));
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @16
-            type: dynamic
-        constructors
-          @21
-            parameters
-              requiredPositional final this.x @28
-                type: dynamic Function(double)
-                parameters
-                  requiredPositional b @37
-                    type: double
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_withReturnType() async {
-    var library = await checkLibrary(r'''
-class C {
-  var x;
-  C(int this.x(double b));
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @16
-            type: dynamic
-        constructors
-          @21
-            parameters
-              requiredPositional final this.x @32
-                type: int Function(double)
-                parameters
-                  requiredPositional b @41
-                    type: double
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_withReturnType_generic() async {
-    var library = await checkLibrary(r'''
-class C {
-  Function() f;
-  C(List<U> this.f<T, U>(T t));
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          f @23
-            type: dynamic Function()
-        constructors
-          @28
-            parameters
-              requiredPositional final this.f @43
-                type: List<U> Function<T, U>(T)
-                typeParameters
-                  covariant T @45
-                  covariant U @48
-                parameters
-                  requiredPositional t @53
-                    type: T
-                field: self::@class::C::@field::f
-        accessors
-          synthetic get f @-1
-            returnType: dynamic Function()
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: dynamic Function()
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_multiple_matching_fields() async {
-    // This is a compile-time error but it should still analyze consistently.
-    var library = await checkLibrary('class C { C(this.x); int x; String x; }',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @25
-            type: int
-          x @35
-            type: String
-        constructors
-          @10
-            parameters
-              requiredPositional final this.x @17
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-          synthetic get x @-1
-            returnType: String
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: String
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_no_matching_field() async {
-    // This is a compile-time error but it should still analyze consistently.
-    var library =
-        await checkLibrary('class C { C(this.x); }', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @10
-            parameters
-              requiredPositional final this.x @17
-                type: dynamic
-                field: <null>
-''');
-  }
-
-  test_class_constructor_field_formal_typed_dynamic() async {
-    var library = await checkLibrary('class C { num x; C(dynamic this.x); }',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: num
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @32
-                type: dynamic
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: num
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: num
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_typed_typed() async {
-    var library = await checkLibrary('class C { num x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: num
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @28
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: num
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: num
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_typed_untyped() async {
-    var library = await checkLibrary('class C { num x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: num
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @24
-                type: num
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: num
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: num
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_dynamic() async {
-    var library = await checkLibrary('class C { var x; C(dynamic this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: dynamic
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @32
-                type: dynamic
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_typed() async {
-    var library = await checkLibrary('class C { var x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: dynamic
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @28
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_untyped() async {
-    var library = await checkLibrary('class C { var x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: dynamic
-        constructors
-          @17
-            parameters
-              requiredPositional final this.x @24
-                type: dynamic
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_named_noDefault() async {
-    var library = await checkLibrary('class C { int x; C({this.x}); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          @17
-            parameters
-              optionalNamed final this.x @25
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_named_withDefault() async {
-    var library = await checkLibrary('class C { int x; C({this.x: 42}); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          @17
-            parameters
-              optionalNamed final this.x @25
-                type: int
-                constantInitializer
-                  IntegerLiteral
-                    literal: 42 @28
-                    staticType: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_optional_noDefault() async {
-    var library = await checkLibrary('class C { int x; C([this.x]); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          @17
-            parameters
-              optionalPositional final this.x @25
-                type: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_optional_withDefault() async {
-    var library = await checkLibrary('class C { int x; C([this.x = 42]); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          @17
-            parameters
-              optionalPositional final this.x @25
-                type: int
-                constantInitializer
-                  IntegerLiteral
-                    literal: 42 @29
-                    staticType: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_constructor_implicit_type_params() async {
-    var library = await checkLibrary('class C<T, U> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_constructor_initializers_assertInvocation() async {
-    var library = await checkLibrary('''
-class C {
-  const C(int x) : assert(x >= 42);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-            parameters
-              requiredPositional x @24
-                type: int
-            constantInitializers
-              AssertInitializer
-                assertKeyword: assert @29
-                leftParenthesis: ( @35
-                condition: BinaryExpression
-                  leftOperand: SimpleIdentifier
-                    token: x @36
-                    staticElement: x@24
-                    staticType: int
-                  operator: >= @38
-                  rightOperand: IntegerLiteral
-                    literal: 42 @41
-                    staticType: int
-                  staticElement: dart:core::@class::num::@method::>=
-                  staticInvokeType: bool Function(num)
-                  staticType: bool
-                rightParenthesis: ) @43
-''');
-  }
-
-  test_class_constructor_initializers_assertInvocation_message() async {
-    var library = await checkLibrary('''
-class C {
-  const C(int x) : assert(x >= 42, 'foo');
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-            parameters
-              requiredPositional x @24
-                type: int
-            constantInitializers
-              AssertInitializer
-                assertKeyword: assert @29
-                leftParenthesis: ( @35
-                condition: BinaryExpression
-                  leftOperand: SimpleIdentifier
-                    token: x @36
-                    staticElement: x@24
-                    staticType: int
-                  operator: >= @38
-                  rightOperand: IntegerLiteral
-                    literal: 42 @41
-                    staticType: int
-                  staticElement: dart:core::@class::num::@method::>=
-                  staticInvokeType: bool Function(num)
-                  staticType: bool
-                comma: , @43
-                message: SimpleStringLiteral
-                  literal: 'foo' @45
-                rightParenthesis: ) @50
-''');
-  }
-
-  test_class_constructor_initializers_field() async {
-    var library = await checkLibrary('''
-class C {
-  final x;
-  const C() : x = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @35
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                equals: = @37
-                expression: IntegerLiteral
-                  literal: 42 @39
-                  staticType: int
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_class_constructor_initializers_field_notConst() async {
-    var library = await checkLibrary('''
-class C {
-  final x;
-  const C() : x = foo();
-}
-int foo() => 42;
-''', allowErrors: true);
-    // It is OK to keep non-constant initializers.
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @35
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                equals: = @37
-                expression: MethodInvocation
-                  methodName: SimpleIdentifier
-                    token: foo @39
-                    staticElement: self::@function::foo
-                    staticType: int Function()
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @42
-                    rightParenthesis: ) @43
-                  staticInvokeType: int Function()
-                  staticType: int
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-    functions
-      foo @52
-        returnType: int
-''');
-  }
-
-  test_class_constructor_initializers_field_optionalPositionalParameter() async {
-    var library = await checkLibrary('''
-class A {
-  final int _f;
-  const A([int f = 0]) : _f = f;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          final _f @22
-            type: int
-        constructors
-          const @34
-            parameters
-              optionalPositional f @41
-                type: int
-                constantInitializer
-                  IntegerLiteral
-                    literal: 0 @45
-                    staticType: int
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: _f @51
-                  staticElement: self::@class::A::@field::_f
-                  staticType: null
-                equals: = @54
-                expression: SimpleIdentifier
-                  token: f @56
-                  staticElement: self::@class::A::@constructor::•::@parameter::f
-                  staticType: int
-        accessors
-          synthetic get _f @-1
-            returnType: int
-''');
-  }
-
-  test_class_constructor_initializers_field_withParameter() async {
-    var library = await checkLibrary('''
-class C {
-  final x;
-  const C(int p) : x = 1 + p;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            parameters
-              requiredPositional p @35
-                type: int
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @40
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                equals: = @42
-                expression: BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @44
-                    staticType: int
-                  operator: + @46
-                  rightOperand: SimpleIdentifier
-                    token: p @48
-                    staticElement: p@35
-                    staticType: int
-                  staticElement: dart:core::@class::num::@method::+
-                  staticInvokeType: num Function(num)
-                  staticType: int
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_class_constructor_initializers_genericFunctionType() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  const B(dynamic x);
-  const B.f()
-   : this(A<Function()>());
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class B @34
-        constructors
-          const @46
-            parameters
-              requiredPositional x @56
-                type: dynamic
-          const f @70
-            periodOffset: 69
-            nameEnd: 71
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @79
-                argumentList: ArgumentList
-                  leftParenthesis: ( @83
-                  arguments
-                    InstanceCreationExpression
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: SimpleIdentifier
-                            token: A @84
-                            staticElement: self::@class::A
-                            staticType: null
-                          typeArguments: TypeArgumentList
-                            leftBracket: < @85
-                            arguments
-                              GenericFunctionType
-                                functionKeyword: Function @86
-                                parameters: FormalParameterList
-                                  leftParenthesis: ( @94
-                                  rightParenthesis: ) @95
-                                declaredElement: GenericFunctionTypeElement
-                                  parameters
-                                  returnType: dynamic
-                                  type: dynamic Function()
-                                type: dynamic Function()
-                            rightBracket: > @96
-                          type: A<dynamic Function()>
-                        staticElement: ConstructorMember
-                          base: self::@class::A::@constructor::•
-                          substitution: {T: dynamic Function()}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @97
-                        rightParenthesis: ) @98
-                      staticType: A<dynamic Function()>
-                  rightParenthesis: ) @99
-                staticElement: self::@class::B::@constructor::•
-            redirectedConstructor: self::@class::B::@constructor::•
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_argumentContextType() async {
-    var library = await checkLibrary('''
-class A {
-  const A(List<String> values);
-}
-class B extends A {
-  const B() : super(const []);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional values @33
-                type: List<String>
-      class B @50
-        supertype: A
-        constructors
-          const @72
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @78
-                argumentList: ArgumentList
-                  leftParenthesis: ( @83
-                  arguments
-                    ListLiteral
-                      constKeyword: const @84
-                      leftBracket: [ @90
-                      rightBracket: ] @91
-                      staticType: List<String>
-                  rightParenthesis: ) @92
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_named() async {
-    var library = await checkLibrary('''
-class A {
-  const A.aaa(int p);
-}
-class C extends A {
-  const C() : super.aaa(42);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const aaa @20
-            periodOffset: 19
-            nameEnd: 23
-            parameters
-              requiredPositional p @28
-                type: int
-      class C @40
-        supertype: A
-        constructors
-          const @62
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @68
-                period: . @73
-                constructorName: SimpleIdentifier
-                  token: aaa @74
-                  staticElement: self::@class::A::@constructor::aaa
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @77
-                  arguments
-                    IntegerLiteral
-                      literal: 42 @78
-                      staticType: int
-                  rightParenthesis: ) @80
-                staticElement: self::@class::A::@constructor::aaa
-            superConstructor: self::@class::A::@constructor::aaa
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_named_underscore() async {
-    var library = await checkLibrary('''
-class A {
-  const A._();
-}
-class B extends A {
-  const B() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const _ @20
-            periodOffset: 19
-            nameEnd: 21
-      class B @33
-        supertype: A
-        constructors
-          const @55
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @61
-                period: . @66
-                constructorName: SimpleIdentifier
-                  token: _ @67
-                  staticElement: self::@class::A::@constructor::_
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @68
-                  rightParenthesis: ) @69
-                staticElement: self::@class::A::@constructor::_
-            superConstructor: self::@class::A::@constructor::_
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_namedExpression() async {
-    var library = await checkLibrary('''
-class A {
-  const A.aaa(a, {int b});
-}
-class C extends A {
-  const C() : super.aaa(1, b: 2);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const aaa @20
-            periodOffset: 19
-            nameEnd: 23
-            parameters
-              requiredPositional a @24
-                type: dynamic
-              optionalNamed b @32
-                type: int
-      class C @45
-        supertype: A
-        constructors
-          const @67
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @73
-                period: . @78
-                constructorName: SimpleIdentifier
-                  token: aaa @79
-                  staticElement: self::@class::A::@constructor::aaa
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @82
-                  arguments
-                    IntegerLiteral
-                      literal: 1 @83
-                      staticType: int
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: b @86
-                          staticElement: self::@class::A::@constructor::aaa::@parameter::b
-                          staticType: null
-                        colon: : @87
-                      expression: IntegerLiteral
-                        literal: 2 @89
-                        staticType: int
-                  rightParenthesis: ) @90
-                staticElement: self::@class::A::@constructor::aaa
-            superConstructor: self::@class::A::@constructor::aaa
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_unnamed() async {
-    var library = await checkLibrary('''
-class A {
-  const A(int p);
-}
-class C extends A {
-  const C.ccc() : super(42);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional p @24
-                type: int
-      class C @36
-        supertype: A
-        constructors
-          const ccc @60
-            periodOffset: 59
-            nameEnd: 63
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @68
-                argumentList: ArgumentList
-                  leftParenthesis: ( @73
-                  arguments
-                    IntegerLiteral
-                      literal: 42 @74
-                      staticType: int
-                  rightParenthesis: ) @76
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_argumentContextType() async {
-    var library = await checkLibrary('''
-class A {
-  const A(List<String> values);
-  const A.empty() : this(const []);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional values @33
-                type: List<String>
-          const empty @52
-            periodOffset: 51
-            nameEnd: 57
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @62
-                argumentList: ArgumentList
-                  leftParenthesis: ( @66
-                  arguments
-                    ListLiteral
-                      constKeyword: const @67
-                      leftBracket: [ @73
-                      rightBracket: ] @74
-                      staticType: List<String>
-                  rightParenthesis: ) @75
-                staticElement: self::@class::A::@constructor::•
-            redirectedConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_named() async {
-    var library = await checkLibrary('''
-class C {
-  const C() : this.named(1, 'bbb');
-  const C.named(int a, String b);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @24
-                period: . @28
-                constructorName: SimpleIdentifier
-                  token: named @29
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @34
-                  arguments
-                    IntegerLiteral
-                      literal: 1 @35
-                      staticType: int
-                    SimpleStringLiteral
-                      literal: 'bbb' @38
-                  rightParenthesis: ) @43
-                staticElement: self::@class::C::@constructor::named
-            redirectedConstructor: self::@class::C::@constructor::named
-          const named @56
-            periodOffset: 55
-            nameEnd: 61
-            parameters
-              requiredPositional a @66
-                type: int
-              requiredPositional b @76
-                type: String
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_namedExpression() async {
-    var library = await checkLibrary('''
-class C {
-  const C() : this.named(1, b: 2);
-  const C.named(a, {int b});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @24
-                period: . @28
-                constructorName: SimpleIdentifier
-                  token: named @29
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @34
-                  arguments
-                    IntegerLiteral
-                      literal: 1 @35
-                      staticType: int
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: b @38
-                          staticElement: self::@class::C::@constructor::named::@parameter::b
-                          staticType: null
-                        colon: : @39
-                      expression: IntegerLiteral
-                        literal: 2 @41
-                        staticType: int
-                  rightParenthesis: ) @42
-                staticElement: self::@class::C::@constructor::named
-            redirectedConstructor: self::@class::C::@constructor::named
-          const named @55
-            periodOffset: 54
-            nameEnd: 60
-            parameters
-              requiredPositional a @61
-                type: dynamic
-              optionalNamed b @69
-                type: int
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_unnamed() async {
-    var library = await checkLibrary('''
-class C {
-  const C.named() : this(1, 'bbb');
-  const C(int a, String b);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const named @20
-            periodOffset: 19
-            nameEnd: 25
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @30
-                argumentList: ArgumentList
-                  leftParenthesis: ( @34
-                  arguments
-                    IntegerLiteral
-                      literal: 1 @35
-                      staticType: int
-                    SimpleStringLiteral
-                      literal: 'bbb' @38
-                  rightParenthesis: ) @43
-                staticElement: self::@class::C::@constructor::•
-            redirectedConstructor: self::@class::C::@constructor::•
-          const @54
-            parameters
-              requiredPositional a @60
-                type: int
-              requiredPositional b @70
-                type: String
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_function() async {
-    var library = await checkLibrary('''
-class A {
-  A(Object? a);
-}
-
-class B extends A {
-  B(int super.a<T extends num>(T d)?);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @22
-                type: Object?
-      class B @35
-        supertype: A
-        constructors
-          @51
-            parameters
-              requiredPositional final super.a @63
-                type: int Function<T extends num>(T)?
-                typeParameters
-                  covariant T @65
-                    bound: num
-                parameters
-                  requiredPositional d @82
-                    type: T
-                superConstructorParameter: a@22
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_interface() async {
-    var library = await checkLibrary('''
-class A {
-  A(num a);
-}
-
-class B extends A {
-  B(int super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @18
-                type: num
-      class B @31
-        supertype: A
-        constructors
-          @47
-            parameters
-              requiredPositional final super.a @59
-                type: int
-                superConstructorParameter: a@18
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_interface_nullable() async {
-    var library = await checkLibrary('''
-class A {
-  A(num? a);
-}
-
-class B extends A {
-  B(int? super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @19
-                type: num?
-      class B @32
-        supertype: A
-        constructors
-          @48
-            parameters
-              requiredPositional final super.a @61
-                type: int?
-                superConstructorParameter: a@19
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_invalid_topFunction() async {
-    var library = await checkLibrary('''
-void f(super.a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional final super.a @13
-            type: dynamic
-            superConstructorParameter: <null>
-        returnType: void
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed() async {
-    var library = await checkLibrary('''
-class A {
-  A({required int a, required double b});
-}
-
-class B extends A {
-  B({String o1, super.a, String o2, super.b}) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredNamed a @28
-                type: int
-              requiredNamed b @47
-                type: double
-      class B @61
-        supertype: A
-        constructors
-          @77
-            parameters
-              optionalNamed o1 @87
-                type: String
-              optionalNamed final super.a @97
-                type: int
-                superConstructorParameter: self::@class::A::@constructor::•::@parameter::a
-              optionalNamed o2 @107
-                type: String
-              optionalNamed final super.b @117
-                type: double
-                superConstructorParameter: self::@class::A::@constructor::•::@parameter::b
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed_unresolved() async {
-    var library = await checkLibrary('''
-class A {
-  A({required int a});
-}
-
-class B extends A {
-  B({super.b});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredNamed a @28
-                type: int
-      class B @42
-        supertype: A
-        constructors
-          @58
-            parameters
-              optionalNamed final super.b @67
-                type: dynamic
-                superConstructorParameter: <null>
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed_unresolved2() async {
-    var library = await checkLibrary('''
-class A {
-  A(int a);
-}
-
-class B extends A {
-  B({super.a});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @18
-                type: int
-      class B @31
-        supertype: A
-        constructors
-          @47
-            parameters
-              optionalNamed final super.a @56
-                type: dynamic
-                superConstructorParameter: <null>
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalPositional() async {
-    var library = await checkLibrary('''
-class A {
-  A(int a, double b);
-}
-
-class B extends A {
-  B([String o1, super.a, String o2, super.b]) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @18
-                type: int
-              requiredPositional b @28
-                type: double
-      class B @41
-        supertype: A
-        constructors
-          @57
-            parameters
-              optionalPositional o1 @67
-                type: String
-              optionalPositional final super.a @77
-                type: int
-                superConstructorParameter: a@18
-              optionalPositional o2 @87
-                type: String
-              optionalPositional final super.b @97
-                type: double
-                superConstructorParameter: b@28
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredNamed() async {
-    var library = await checkLibrary('''
-class A {
-  A({required int a, required double b});
-}
-
-class B extends A {
-  B({
-    required String o1,
-    required super.a,
-    required String o2,
-    required super.b,
-  }) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredNamed a @28
-                type: int
-              requiredNamed b @47
-                type: double
-      class B @61
-        supertype: A
-        constructors
-          @77
-            parameters
-              requiredNamed o1 @101
-                type: String
-              requiredNamed final super.a @124
-                type: int
-                superConstructorParameter: self::@class::A::@constructor::•::@parameter::a
-              requiredNamed o2 @147
-                type: String
-              requiredNamed final super.b @170
-                type: double
-                superConstructorParameter: self::@class::A::@constructor::•::@parameter::b
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional() async {
-    var library = await checkLibrary('''
-class A {
-  A(int a, double b);
-}
-
-class B extends A {
-  B(String o1, super.a, String o2, super.b) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @18
-                type: int
-              requiredPositional b @28
-                type: double
-      class B @41
-        supertype: A
-        constructors
-          @57
-            parameters
-              requiredPositional o1 @66
-                type: String
-              requiredPositional final super.a @76
-                type: int
-                superConstructorParameter: a@18
-              requiredPositional o2 @86
-                type: String
-              requiredPositional final super.b @96
-                type: double
-                superConstructorParameter: b@28
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_unresolved() async {
-    var library = await checkLibrary('''
-class A {}
-
-class B extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @18
-        supertype: A
-        constructors
-          @34
-            parameters
-              requiredPositional final super.a @42
-                type: dynamic
-                superConstructorParameter: <null>
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_unresolved2() async {
-    var library = await checkLibrary('''
-class A {
-  A({required int a})
-}
-
-class B extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredNamed a @28
-                type: int
-      class B @41
-        supertype: A
-        constructors
-          @57
-            parameters
-              requiredPositional final super.a @65
-                type: dynamic
-                superConstructorParameter: <null>
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_params() async {
-    var library = await checkLibrary('class C { C(x, int y); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @10
-            parameters
-              requiredPositional x @12
-                type: dynamic
-              requiredPositional y @19
-                type: int
-''');
-  }
-
-  test_class_constructor_redirected_factory_named() async {
-    var library = await checkLibrary('''
-class C {
-  factory C() = D.named;
-  C._();
-}
-class D extends C {
-  D.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          factory @20
-            redirectedConstructor: self::@class::D::@constructor::named
-          _ @39
-            periodOffset: 38
-            nameEnd: 40
-      class D @52
-        supertype: C
-        constructors
-          named @70
-            periodOffset: 69
-            nameEnd: 75
-            superConstructor: self::@class::C::@constructor::_
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_generic() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          factory @26
-            redirectedConstructor: ConstructorMember
-              base: self::@class::D::@constructor::named
-              substitution: {T: U, U: T}
-          _ @51
-            periodOffset: 50
-            nameEnd: 52
-      class D @64
-        typeParameters
-          covariant T @66
-            defaultType: dynamic
-          covariant U @69
-            defaultType: dynamic
-        supertype: C<U, T>
-        constructors
-          named @94
-            periodOffset: 93
-            nameEnd: 99
-            superConstructor: ConstructorMember
-              base: self::@class::C::@constructor::_
-              substitution: {T: U, U: T}
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_generic_viaTypeAlias() async {
-    var library = await checkLibrary('''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = A<U, T>.named;
-  B._();
-}
-class C<T, U> extends A<U, T> {
-  C.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @33
-        typeParameters
-          covariant T @35
-            defaultType: dynamic
-          covariant U @38
-            defaultType: dynamic
-        constructors
-          factory @53
-            redirectedConstructor: ConstructorMember
-              base: self::@class::C::@constructor::named
-              substitution: {T: U, U: T}
-          _ @78
-            periodOffset: 77
-            nameEnd: 79
-      class C @91
-        typeParameters
-          covariant T @93
-            defaultType: dynamic
-          covariant U @96
-            defaultType: dynamic
-        supertype: C<U, T>
-          aliasElement: self::@typeAlias::A
-          aliasArguments
-            U
-            T
-        constructors
-          named @121
-            periodOffset: 120
-            nameEnd: 126
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-          covariant U @13
-            defaultType: dynamic
-        aliasedType: C<T, U>
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_imported() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D.named() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = D.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class C @25
-        constructors
-          factory @39
-            redirectedConstructor: foo.dart::@class::D::@constructor::named
-          _ @58
-            periodOffset: 57
-            nameEnd: 59
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_imported_generic() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class C @25
-        typeParameters
-          covariant T @27
-            defaultType: dynamic
-          covariant U @30
-            defaultType: dynamic
-        constructors
-          factory @45
-            redirectedConstructor: ConstructorMember
-              base: foo.dart::@class::D::@constructor::named
-              substitution: {T: U, U: T}
-          _ @70
-            periodOffset: 69
-            nameEnd: 71
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_prefixed() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D.named() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.D.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    classes
-      class C @32
-        constructors
-          factory @46
-            redirectedConstructor: foo.dart::@class::D::@constructor::named
-          _ @69
-            periodOffset: 68
-            nameEnd: 70
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_prefixed_generic() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = foo.D<U, T>.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    classes
-      class C @32
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-          covariant U @37
-            defaultType: dynamic
-        constructors
-          factory @52
-            redirectedConstructor: ConstructorMember
-              base: foo.dart::@class::D::@constructor::named
-              substitution: {T: U, U: T}
-          _ @81
-            periodOffset: 80
-            nameEnd: 82
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_unresolved_class() async {
-    var library = await checkLibrary('''
-class C<E> {
-  factory C() = D.named<E>;
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant E @8
-            defaultType: dynamic
-        constructors
-          factory @23
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_unresolved_constructor() async {
-    var library = await checkLibrary('''
-class D {}
-class C<E> {
-  factory C() = D.named<E>;
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class D @6
-        constructors
-          synthetic @-1
-      class C @17
-        typeParameters
-          covariant E @19
-            defaultType: dynamic
-        constructors
-          factory @34
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed() async {
-    var library = await checkLibrary('''
-class C {
-  factory C() = D;
-  C._();
-}
-class D extends C {
-  D() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          factory @20
-            redirectedConstructor: self::@class::D::@constructor::•
-          _ @33
-            periodOffset: 32
-            nameEnd: 34
-      class D @46
-        supertype: C
-        constructors
-          @62
-            superConstructor: self::@class::C::@constructor::_
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_generic() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          factory @26
-            redirectedConstructor: ConstructorMember
-              base: self::@class::D::@constructor::•
-              substitution: {T: U, U: T}
-          _ @45
-            periodOffset: 44
-            nameEnd: 46
-      class D @58
-        typeParameters
-          covariant T @60
-            defaultType: dynamic
-          covariant U @63
-            defaultType: dynamic
-        supertype: C<U, T>
-        constructors
-          @86
-            superConstructor: ConstructorMember
-              base: self::@class::C::@constructor::_
-              substitution: {T: U, U: T}
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
-    var library = await checkLibrary('''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = A<U, T>;
-  B_();
-}
-class C<T, U> extends B<U, T> {
-  C() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @33
-        typeParameters
-          covariant T @35
-            defaultType: dynamic
-          covariant U @38
-            defaultType: dynamic
-        constructors
-          factory @53
-            redirectedConstructor: ConstructorMember
-              base: self::@class::C::@constructor::•
-              substitution: {T: U, U: T}
-        methods
-          abstract B_ @70
-            returnType: dynamic
-      class C @84
-        typeParameters
-          covariant T @86
-            defaultType: dynamic
-          covariant U @89
-            defaultType: dynamic
-        supertype: B<U, T>
-        constructors
-          @112
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-          covariant U @13
-            defaultType: dynamic
-        aliasedType: C<T, U>
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = D;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class C @25
-        constructors
-          factory @39
-            redirectedConstructor: foo.dart::@class::D::@constructor::•
-          _ @52
-            periodOffset: 51
-            nameEnd: 53
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported_generic() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class C @25
-        typeParameters
-          covariant T @27
-            defaultType: dynamic
-          covariant U @30
-            defaultType: dynamic
-        constructors
-          factory @45
-            redirectedConstructor: ConstructorMember
-              base: foo.dart::@class::D::@constructor::•
-              substitution: {T: U, U: T}
-          _ @64
-            periodOffset: 63
-            nameEnd: 65
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-typedef A = B;
-class B extends C {
-  B() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = A;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class C @25
-        constructors
-          factory @39
-            redirectedConstructor: foo.dart::@class::B::@constructor::•
-          _ @52
-            periodOffset: 51
-            nameEnd: 53
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.D;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    classes
-      class C @32
-        constructors
-          factory @46
-            redirectedConstructor: foo.dart::@class::D::@constructor::•
-          _ @63
-            periodOffset: 62
-            nameEnd: 64
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed_generic() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = foo.D<U, T>;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    classes
-      class C @32
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-          covariant U @37
-            defaultType: dynamic
-        constructors
-          factory @52
-            redirectedConstructor: ConstructorMember
-              base: foo.dart::@class::D::@constructor::•
-              substitution: {T: U, U: T}
-          _ @75
-            periodOffset: 74
-            nameEnd: 76
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
-    addLibrarySource('/foo.dart', '''
-import 'test.dart';
-typedef A = B;
-class B extends C {
-  B() : super._();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.A;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    classes
-      class C @32
-        constructors
-          factory @46
-            redirectedConstructor: foo.dart::@class::B::@constructor::•
-          _ @63
-            periodOffset: 62
-            nameEnd: 64
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_unresolved() async {
-    var library = await checkLibrary('''
-class C<E> {
-  factory C() = D<E>;
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant E @8
-            defaultType: dynamic
-        constructors
-          factory @23
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_viaTypeAlias() async {
-    var library = await checkLibrary('''
-typedef A = C;
-class B {
-  factory B() = A;
-  B._();
-}
-class C extends B {
-  C() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @21
-        constructors
-          factory @35
-            redirectedConstructor: self::@class::C::@constructor::•
-          _ @48
-            periodOffset: 47
-            nameEnd: 49
-      class C @61
-        supertype: B
-        constructors
-          @77
-            superConstructor: self::@class::B::@constructor::_
-    typeAliases
-      A @8
-        aliasedType: C
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named() async {
-    var library = await checkLibrary('''
-class C {
-  const C.named();
-  const C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const named @20
-            periodOffset: 19
-            nameEnd: 25
-          const @37
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @43
-                period: . @47
-                constructorName: SimpleIdentifier
-                  token: named @48
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @53
-                  rightParenthesis: ) @54
-                staticElement: self::@class::C::@constructor::named
-            redirectedConstructor: self::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named_generic() async {
-    var library = await checkLibrary('''
-class C<T> {
-  const C.named();
-  const C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const named @23
-            periodOffset: 22
-            nameEnd: 28
-          const @40
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @46
-                period: . @50
-                constructorName: SimpleIdentifier
-                  token: named @51
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @56
-                  rightParenthesis: ) @57
-                staticElement: self::@class::C::@constructor::named
-            redirectedConstructor: self::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named_notConst() async {
-    var library = await checkLibrary('''
-class C {
-  C.named();
-  C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          named @14
-            periodOffset: 13
-            nameEnd: 19
-          @25
-            redirectedConstructor: self::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed() async {
-    var library = await checkLibrary('''
-class C {
-  const C();
-  const C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-          const named @33
-            periodOffset: 32
-            nameEnd: 38
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @43
-                argumentList: ArgumentList
-                  leftParenthesis: ( @47
-                  rightParenthesis: ) @48
-                staticElement: self::@class::C::@constructor::•
-            redirectedConstructor: self::@class::C::@constructor::•
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed_generic() async {
-    var library = await checkLibrary('''
-class C<T> {
-  const C();
-  const C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-          const named @36
-            periodOffset: 35
-            nameEnd: 41
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @46
-                argumentList: ArgumentList
-                  leftParenthesis: ( @50
-                  rightParenthesis: ) @51
-                staticElement: self::@class::C::@constructor::•
-            redirectedConstructor: self::@class::C::@constructor::•
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed_notConst() async {
-    var library = await checkLibrary('''
-class C {
-  C();
-  C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @12
-          named @21
-            periodOffset: 20
-            nameEnd: 26
-            redirectedConstructor: self::@class::C::@constructor::•
-''');
-  }
-
-  test_class_constructor_superConstructor_generic_named() async {
-    var library = await checkLibrary('''
-class A<T> {
-  A.named(T a);
-}
-class B extends A<int> {
-  B() : super.named(0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          named @17
-            periodOffset: 16
-            nameEnd: 22
-            parameters
-              requiredPositional a @25
-                type: T
-      class B @37
-        supertype: A<int>
-        constructors
-          @58
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::named
-              substitution: {T: int}
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_named() async {
-    var library = await checkLibrary('''
-class A {
-  A.named();
-}
-class B extends A {
-  B() : super.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          named @14
-            periodOffset: 13
-            nameEnd: 19
-      class B @31
-        supertype: A
-        constructors
-          @47
-            superConstructor: self::@class::A::@constructor::named
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
-    var library = await checkLibrary('''
-class A {}
-class B extends A {
-  B() : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        supertype: A
-        constructors
-          @33
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
-    var library = await checkLibrary('''
-class A {}
-class B extends A {
-  B();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        supertype: A
-        constructors
-          @33
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
-    var library = await checkLibrary('''
-class A {}
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-''');
-  }
-
-  test_class_constructor_unnamed_implicit() async {
-    var library = await checkLibrary('class C {}');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-            displayName: C
-''',
-        withDisplayName: true);
-  }
-
-  test_class_constructor_withCycles_const() async {
-    var library = await checkLibrary('''
-class C {
-  final x;
-  const C() : x = const D();
-}
-class D {
-  final x;
-  const D() : x = const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @35
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                equals: = @37
-                expression: InstanceCreationExpression
-                  keyword: const @39
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: D @45
-                        staticElement: self::@class::D
-                        staticType: null
-                      type: D
-                    staticElement: self::@class::D::@constructor::•
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @46
-                    rightParenthesis: ) @47
-                  staticType: D
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-      class D @58
-        fields
-          final x @70
-            type: dynamic
-        constructors
-          const @81
-            constantInitializers
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @87
-                  staticElement: self::@class::D::@field::x
-                  staticType: null
-                equals: = @89
-                expression: InstanceCreationExpression
-                  keyword: const @91
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: C @97
-                        staticElement: self::@class::C
-                        staticType: null
-                      type: C
-                    staticElement: self::@class::C::@constructor::•
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @98
-                    rightParenthesis: ) @99
-                  staticType: C
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_class_constructor_withCycles_nonConst() async {
-    var library = await checkLibrary('''
-class C {
-  final x;
-  C() : x = new D();
-}
-class D {
-  final x;
-  D() : x = new C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          @23
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-      class D @50
-        fields
-          final x @62
-            type: dynamic
-        constructors
-          @67
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_class_constructors_named() async {
-    var library = await checkLibrary('''
-class C {
-  C.foo();
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          foo @14
-            displayName: C.foo
-            periodOffset: 13
-            nameEnd: 17
-''',
-        withDisplayName: true);
-  }
-
-  test_class_constructors_unnamed() async {
-    var library = await checkLibrary('''
-class C {
-  C();
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @12
-            displayName: C
-''',
-        withDisplayName: true);
-  }
-
-  test_class_constructors_unnamed_new() async {
-    var library = await checkLibrary('''
-class C {
-  C.new();
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @14
-            displayName: C
-            periodOffset: 13
-            nameEnd: 17
-''',
-        withDisplayName: true);
-  }
-
-  test_class_documented() async {
-    var library = await checkLibrary('''
-/**
- * Docs
- */
-class C {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        documentationComment: /**\n * Docs\n */
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_mix() async {
-    var library = await checkLibrary('''
-/**
- * aaa
- */
-/**
- * bbb
- */
-class A {}
-
-/**
- * aaa
- */
-/// bbb
-/// ccc
-class B {}
-
-/// aaa
-/// bbb
-/**
- * ccc
- */
-class C {}
-
-/// aaa
-/// bbb
-/**
- * ccc
- */
-/// ddd
-class D {}
-
-/**
- * aaa
- */
-// bbb
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @36
-        documentationComment: /**\n * bbb\n */
-        constructors
-          synthetic @-1
-      class B @79
-        documentationComment: /// bbb\n/// ccc
-        constructors
-          synthetic @-1
-      class C @122
-        documentationComment: /**\n * ccc\n */
-        constructors
-          synthetic @-1
-      class D @173
-        documentationComment: /// ddd
-        constructors
-          synthetic @-1
-      class E @207
-        documentationComment: /**\n * aaa\n */
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_tripleSlash() async {
-    var library = await checkLibrary('''
-/// first
-/// second
-/// third
-class C {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @37
-        documentationComment: /// first\n/// second\n/// third
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_with_references() async {
-    var library = await checkLibrary('''
-/**
- * Docs referring to [D] and [E]
- */
-class C {}
-
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @47
-        documentationComment: /**\n * Docs referring to [D] and [E]\n */
-        constructors
-          synthetic @-1
-      class D @59
-        constructors
-          synthetic @-1
-      class E @70
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_with_windows_line_endings() async {
-    var library = await checkLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @25
-        documentationComment: /**\n * Docs\n */
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_withLeadingNotDocumentation() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-class C {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @66
-        documentationComment: /**\n * Docs\n */
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_documented_withMetadata() async {
-    var library = await checkLibrary('''
-/// Comment 1
-/// Comment 2
-@Annotation()
-class BeforeMeta {}
-
-/// Comment 1
-/// Comment 2
-@Annotation.named()
-class BeforeMetaNamed {}
-
-@Annotation()
-/// Comment 1
-/// Comment 2
-class AfterMeta {}
-
-/// Comment 1
-@Annotation()
-/// Comment 2
-class AroundMeta {}
-
-/// Doc comment.
-@Annotation()
-// Not doc comment.
-class DocBeforeMetaNotDocAfter {}
-
-class Annotation {
-  const Annotation();
-  const Annotation.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class BeforeMeta @48
-        documentationComment: /// Comment 1\n/// Comment 2
-        metadata
-          Annotation
-            atSign: @ @28
-            name: SimpleIdentifier
-              token: Annotation @29
-              staticElement: self::@class::Annotation
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @39
-              rightParenthesis: ) @40
-            element: self::@class::Annotation::@constructor::•
-        constructors
-          synthetic @-1
-      class BeforeMetaNamed @117
-        documentationComment: /// Comment 1\n/// Comment 2
-        metadata
-          Annotation
-            atSign: @ @91
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: Annotation @92
-                staticElement: self::@class::Annotation
-                staticType: null
-              period: . @102
-              identifier: SimpleIdentifier
-                token: named @103
-                staticElement: self::@class::Annotation::@constructor::named
-                staticType: null
-              staticElement: self::@class::Annotation::@constructor::named
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @108
-              rightParenthesis: ) @109
-            element: self::@class::Annotation::@constructor::named
-        constructors
-          synthetic @-1
-      class AfterMeta @185
-        documentationComment: /// Comment 1\n/// Comment 2
-        metadata
-          Annotation
-            atSign: @ @137
-            name: SimpleIdentifier
-              token: Annotation @138
-              staticElement: self::@class::Annotation
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @148
-              rightParenthesis: ) @149
-            element: self::@class::Annotation::@constructor::•
-        constructors
-          synthetic @-1
-      class AroundMeta @247
-        documentationComment: /// Comment 2
-        metadata
-          Annotation
-            atSign: @ @213
-            name: SimpleIdentifier
-              token: Annotation @214
-              staticElement: self::@class::Annotation
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @224
-              rightParenthesis: ) @225
-            element: self::@class::Annotation::@constructor::•
-        constructors
-          synthetic @-1
-      class DocBeforeMetaNotDocAfter @319
-        documentationComment: /// Doc comment.
-        metadata
-          Annotation
-            atSign: @ @279
-            name: SimpleIdentifier
-              token: Annotation @280
-              staticElement: self::@class::Annotation
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @290
-              rightParenthesis: ) @291
-            element: self::@class::Annotation::@constructor::•
-        constructors
-          synthetic @-1
-      class Annotation @354
-        constructors
-          const @375
-          const named @408
-            periodOffset: 407
-            nameEnd: 413
-''');
-  }
-
-  test_class_field_abstract() async {
-    var library = await checkLibrary('''
-abstract class C {
-  abstract int i;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        fields
-          abstract i @34
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic abstract get i @-1
-            returnType: int
-          synthetic abstract set i @-1
-            parameters
-              requiredPositional _i @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_const() async {
-    var library = await checkLibrary('class C { static const int i = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const i @27
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @31
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get i @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_const_late() async {
-    var library =
-        await checkLibrary('class C { static late const int i = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static late const i @32
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @36
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get i @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_covariant() async {
-    var library = await checkLibrary('''
-class C {
-  covariant int x;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          covariant x @26
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional covariant _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_documented() async {
-    var library = await checkLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  var x;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @38
-            documentationComment: /**\n   * Docs\n   */
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_field_external() async {
-    var library = await checkLibrary('''
-abstract class C {
-  external int i;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        fields
-          external i @34
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get i @-1
-            returnType: int
-          synthetic set i @-1
-            parameters
-              requiredPositional _i @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_final_hasInitializer_hasConstConstructor() async {
-    var library = await checkLibrary('''
-class C {
-  final x = 42;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @22
-                staticType: int
-        constructors
-          const @34
-        accessors
-          synthetic get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_final_hasInitializer_hasConstConstructor_genericFunctionType() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  final f = const A<int Function(double a)>();
-  const B();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class B @34
-        fields
-          final f @46
-            type: A<int Function(double)>
-            constantInitializer
-              InstanceCreationExpression
-                keyword: const @50
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: A @56
-                      staticElement: self::@class::A
-                      staticType: null
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @57
-                      arguments
-                        GenericFunctionType
-                          returnType: NamedType
-                            name: SimpleIdentifier
-                              token: int @58
-                              staticElement: dart:core::@class::int
-                              staticType: null
-                            type: int
-                          functionKeyword: Function @62
-                          parameters: FormalParameterList
-                            leftParenthesis: ( @70
-                            parameter: SimpleFormalParameter
-                              type: NamedType
-                                name: SimpleIdentifier
-                                  token: double @71
-                                  staticElement: dart:core::@class::double
-                                  staticType: null
-                                type: double
-                              identifier: SimpleIdentifier
-                                token: a @78
-                                staticElement: a@78
-                                staticType: null
-                              declaredElement: a@78
-                              declaredElementType: double
-                            rightParenthesis: ) @79
-                          declaredElement: GenericFunctionTypeElement
-                            parameters
-                              a
-                                kind: required positional
-                                type: double
-                            returnType: int
-                            type: int Function(double)
-                          type: int Function(double)
-                      rightBracket: > @80
-                    type: A<int Function(double)>
-                  staticElement: ConstructorMember
-                    base: self::@class::A::@constructor::•
-                    substitution: {T: int Function(double)}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @81
-                  rightParenthesis: ) @82
-                staticType: A<int Function(double)>
-        constructors
-          const @93
-        accessors
-          synthetic get f @-1
-            returnType: A<int Function(double)>
-''');
-  }
-
-  test_class_field_final_hasInitializer_noConstConstructor() async {
-    var library = await checkLibrary('''
-class C {
-  final x = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_final_withSetter() async {
-    var library = await checkLibrary(r'''
-class A {
-  final int foo;
-  A(this.foo);
-  set foo(int newValue) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          final foo @22
-            type: int
-        constructors
-          @29
-            parameters
-              requiredPositional final this.foo @36
-                type: int
-                field: self::@class::A::@field::foo
-        accessors
-          synthetic get foo @-1
-            returnType: int
-          set foo @48
-            parameters
-              requiredPositional newValue @56
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_formal_param_inferred_type_implicit() async {
-    var library = await checkLibrary('class C extends D { var v; C(this.v); }'
-        ' abstract class D { int get v; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        fields
-          v @24
-            type: int
-        constructors
-          @27
-            parameters
-              requiredPositional final this.v @34
-                type: int
-                field: self::@class::C::@field::v
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          synthetic get v @-1
-            returnType: int
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int
-            returnType: void
-      abstract class D @55
-        fields
-          synthetic v @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract get v @67
-            returnType: int
-''');
-  }
-
-  test_class_field_implicit_type() async {
-    var library = await checkLibrary('class C { var x; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_field_implicit_type_late() async {
-    var library = await checkLibrary('class C { late var x; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          late x @19
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_explicit_initialized() async {
-    var library = await checkLibrary('class C { num v = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          v @14
-            type: num
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get v @-1
-            returnType: num
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: num
-            returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_implicit_initialized() async {
-    var library = await checkLibrary('class C { var v = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          v @14
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get v @-1
-            returnType: int
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_implicit_uninitialized() async {
-    var library = await checkLibrary(
-        'class C extends D { var v; } abstract class D { int get v; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        fields
-          v @24
-            type: int
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          synthetic get v @-1
-            returnType: int
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int
-            returnType: void
-      abstract class D @44
-        fields
-          synthetic v @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract get v @56
-            returnType: int
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_inherited_resolveInitializer() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-abstract class A {
-  const A();
-  List<int> get f;
-}
-class B extends A {
-  const B();
-  final f = [a];
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class A @28
-        fields
-          synthetic f @-1
-            type: List<int>
-        constructors
-          const @40
-        accessors
-          abstract get f @61
-            returnType: List<int>
-      class B @72
-        supertype: A
-        fields
-          final f @107
-            type: List<int>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @111
-                elements
-                  SimpleIdentifier
-                    token: a @112
-                    staticElement: self::@getter::a
-                    staticType: int
-                rightBracket: ] @113
-                staticType: List<int>
-        constructors
-          const @94
-            superConstructor: self::@class::A::@constructor::•
-        accessors
-          synthetic get f @-1
-            returnType: List<int>
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_class_field_inferred_type_static_implicit_initialized() async {
-    var library = await checkLibrary('class C { static var v = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static v @21
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get v @-1
-            returnType: int
-          synthetic static set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_inheritedContextType_double() async {
-    var library = await checkLibrary('''
-abstract class A {
-  const A();
-  double get foo;
-}
-class B extends A {
-  const B();
-  final foo = 2;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class A @15
-        fields
-          synthetic foo @-1
-            type: double
-        constructors
-          const @27
-        accessors
-          abstract get foo @45
-            returnType: double
-      class B @58
-        supertype: A
-        fields
-          final foo @93
-            type: double
-            constantInitializer
-              IntegerLiteral
-                literal: 2 @99
-                staticType: double
-        constructors
-          const @80
-            superConstructor: self::@class::A::@constructor::•
-        accessors
-          synthetic get foo @-1
-            returnType: double
-''');
-  }
-
-  test_class_field_propagatedType_const_noDep() async {
-    var library = await checkLibrary('''
-class C {
-  static const x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const x @25
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @29
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_dep_inLib() async {
-    addLibrarySource('/a.dart', 'final a = 1;');
-    var library = await checkLibrary('''
-import "a.dart";
-class C {
-  final b = a / 2;
-}''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class C @23
-        fields
-          final b @35
-            type: double
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get b @-1
-            returnType: double
-''');
-  }
-
-  test_class_field_propagatedType_final_dep_inPart() async {
-    addSource('/a.dart', 'part of lib; final a = 1;');
-    var library = await checkLibrary('''
-library lib;
-part "a.dart";
-class C {
-  final b = a / 2;
-}''');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  definingUnit
-    classes
-      class C @34
-        fields
-          final b @46
-            type: double
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get b @-1
-            returnType: double
-  parts
-    a.dart
-      topLevelVariables
-        static final a @19
-          type: int
-      accessors
-        synthetic static get a @-1
-          returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_noDep_instance() async {
-    var library = await checkLibrary('''
-class C {
-  final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_noDep_static() async {
-    var library = await checkLibrary('''
-class C {
-  static final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static final x @25
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_static() async {
-    var library = await checkLibrary('class C { static int i; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static i @21
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get i @-1
-            returnType: int
-          synthetic static set i @-1
-            parameters
-              requiredPositional _i @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_static_final_hasConstConstructor() async {
-    var library = await checkLibrary('''
-class C {
-  static final f = 0;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static final f @25
-            type: int
-        constructors
-          const @40
-        accessors
-          synthetic static get f @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_static_final_untyped() async {
-    var library = await checkLibrary('class C { static final x = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static final x @23
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get x @-1
-            returnType: int
-''');
-  }
-
-  test_class_field_static_late() async {
-    var library = await checkLibrary('class C { static late int i; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static late i @26
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get i @-1
-            returnType: int
-          synthetic static set i @-1
-            parameters
-              requiredPositional _i @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_type_inferred_Never() async {
-    var library = await checkLibrary(r'''
-class C {
-  var a = throw 42;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          a @16
-            type: Never
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get a @-1
-            returnType: Never
-          synthetic set a @-1
-            parameters
-              requiredPositional _a @-1
-                type: Never
-            returnType: void
-''');
-  }
-
-  test_class_field_type_inferred_nonNullify() async {
-    addSource('/a.dart', '''
-// @dart = 2.7
-var a = 0;
-''');
-
-    var library = await checkLibrary(r'''
-import 'a.dart';
-class C {
-  var b = a;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class C @23
-        fields
-          b @33
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get b @-1
-            returnType: int
-          synthetic set b @-1
-            parameters
-              requiredPositional _b @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_typed() async {
-    var library = await checkLibrary('class C { int x = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_field_untyped() async {
-    var library = await checkLibrary('class C { var x = 0; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @14
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_fields() async {
-    var library = await checkLibrary('class C { int i; int j; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          i @14
-            type: int
-          j @21
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get i @-1
-            returnType: int
-          synthetic set i @-1
-            parameters
-              requiredPositional _i @-1
-                type: int
-            returnType: void
-          synthetic get j @-1
-            returnType: int
-          synthetic set j @-1
-            parameters
-              requiredPositional _j @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_fields_late() async {
-    var library = await checkLibrary('''
-class C {
-  late int foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          late foo @21
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get foo @-1
-            returnType: int
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_fields_late_final() async {
-    var library = await checkLibrary('''
-class C {
-  late final int foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          late final foo @27
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get foo @-1
-            returnType: int
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_fields_late_final_initialized() async {
-    var library = await checkLibrary('''
-class C {
-  late final int foo = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          late final foo @27
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get foo @-1
-            returnType: int
-''');
-  }
-
-  test_class_fields_late_inference_usingSuper_methodInvocation() async {
-    var library = await checkLibrary('''
-class A {
-  int foo() => 0;
-}
-
-class B extends A {
-  late var f = super.foo();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          foo @16
-            returnType: int
-      class B @37
-        supertype: A
-        fields
-          late f @62
-            type: int
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-        accessors
-          synthetic get f @-1
-            returnType: int
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_fields_late_inference_usingSuper_propertyAccess() async {
-    var library = await checkLibrary('''
-class A {
-  int get foo => 0;
-}
-
-class B extends A {
-  late var f = super.foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          synthetic foo @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          get foo @20
-            returnType: int
-      class B @39
-        supertype: A
-        fields
-          late f @64
-            type: int
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-        accessors
-          synthetic get f @-1
-            returnType: int
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_getter_abstract() async {
-    var library = await checkLibrary('abstract class C { int get x; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract get x @27
-            returnType: int
-''');
-  }
-
-  test_class_getter_external() async {
-    var library = await checkLibrary('class C { external int get x; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          external get x @27
-            returnType: int
-''');
-  }
-
-  test_class_getter_implicit_return_type() async {
-    var library = await checkLibrary('class C { get x => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          get x @14
-            returnType: dynamic
-''');
-  }
-
-  test_class_getter_native() async {
-    var library = await checkLibrary('''
-class C {
-  int get x() native;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          external get x @20
-            returnType: int
-''');
-  }
-
-  test_class_getter_static() async {
-    var library = await checkLibrary('class C { static int get x => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic static x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          static get x @25
-            returnType: int
-''');
-  }
-
-  test_class_getters() async {
-    var library =
-        await checkLibrary('class C { int get x => null; get y => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-          synthetic y @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          get x @18
-            returnType: int
-          get y @33
-            returnType: dynamic
-''');
-  }
-
-  test_class_implicitField_getterFirst() async {
-    var library = await checkLibrary('''
-class C {
-  int get x => 0;
-  void set x(int value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          get x @20
-            returnType: int
-          set x @39
-            parameters
-              requiredPositional value @45
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_implicitField_setterFirst() async {
-    var library = await checkLibrary('''
-class C {
-  void set x(int value) {}
-  int get x => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          set x @21
-            parameters
-              requiredPositional value @27
-                type: int
-            returnType: void
-          get x @47
-            returnType: int
-''');
-  }
-
-  test_class_interfaces() async {
-    var library = await checkLibrary('''
-class C implements D, E {}
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        interfaces
-          D
-          E
-        constructors
-          synthetic @-1
-      class D @33
-        constructors
-          synthetic @-1
-      class E @44
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_interfaces_Function() async {
-    var library = await checkLibrary('''
-class A {}
-class B {}
-class C implements A, Function, B {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        constructors
-          synthetic @-1
-      class C @28
-        interfaces
-          A
-          B
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_interfaces_unresolved() async {
-    var library = await checkLibrary(
-        'class C implements X, Y, Z {} class X {} class Z {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        interfaces
-          X
-          Z
-        constructors
-          synthetic @-1
-      class X @36
-        constructors
-          synthetic @-1
-      class Z @47
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_method_abstract() async {
-    var library = await checkLibrary('abstract class C { f(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        constructors
-          synthetic @-1
-        methods
-          abstract f @19
-            returnType: dynamic
-''');
-  }
-
-  test_class_method_async() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-class C {
-  Future f() async {}
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    classes
-      class C @27
-        constructors
-          synthetic @-1
-        methods
-          f @40 async
-            returnType: Future<dynamic>
-''');
-  }
-
-  test_class_method_asyncStar() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-class C {
-  Stream f() async* {}
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    classes
-      class C @27
-        constructors
-          synthetic @-1
-        methods
-          f @40 async*
-            returnType: Stream<dynamic>
-''');
-  }
-
-  test_class_method_documented() async {
-    var library = await checkLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  f() {}
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @34
-            documentationComment: /**\n   * Docs\n   */
-            returnType: dynamic
-''');
-  }
-
-  test_class_method_external() async {
-    var library = await checkLibrary('class C { external f(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          external f @19
-            returnType: dynamic
-''');
-  }
-
-  test_class_method_hasImplicitReturnType_false() async {
-    var library = await checkLibrary('''
-class C {
-  int m() => 0;
-}
-''');
-    var c = library.definingCompilationUnit.classes.single;
-    var m = c.methods.single;
-    expect(m.hasImplicitReturnType, isFalse);
-  }
-
-  test_class_method_hasImplicitReturnType_true() async {
-    var library = await checkLibrary('''
-class C {
-  m() => 0;
-}
-''');
-    var c = library.definingCompilationUnit.classes.single;
-    var m = c.methods.single;
-    expect(m.hasImplicitReturnType, isTrue);
-  }
-
-  test_class_method_inferred_type_nonStatic_implicit_param() async {
-    var library = await checkLibrary('class C extends D { void f(value) {} }'
-        ' abstract class D { void f(int value); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        methods
-          f @25
-            parameters
-              requiredPositional value @27
-                type: int
-            returnType: void
-      abstract class D @54
-        constructors
-          synthetic @-1
-        methods
-          abstract f @63
-            parameters
-              requiredPositional value @69
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_method_inferred_type_nonStatic_implicit_return() async {
-    var library = await checkLibrary('''
-class C extends D {
-  f() => null;
-}
-abstract class D {
-  int f();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        methods
-          f @22
-            returnType: int
-      abstract class D @52
-        constructors
-          synthetic @-1
-        methods
-          abstract f @62
-            returnType: int
-''');
-  }
-
-  test_class_method_namedAsSupertype() async {
-    var library = await checkLibrary(r'''
-class A {}
-class B extends A {
-  void A() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-        methods
-          A @38
-            returnType: void
-''');
-  }
-
-  test_class_method_native() async {
-    var library = await checkLibrary('''
-class C {
-  int m() native;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          external m @16
-            returnType: int
-''');
-  }
-
-  test_class_method_params() async {
-    var library = await checkLibrary('class C { f(x, y) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @10
-            parameters
-              requiredPositional x @12
-                type: dynamic
-              requiredPositional y @15
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_class_method_static() async {
-    var library = await checkLibrary('class C { static f() {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          static f @17
-            returnType: dynamic
-''');
-  }
-
-  test_class_method_syncStar() async {
-    var library = await checkLibrary(r'''
-class C {
-  Iterable<int> f() sync* {
-    yield 42;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @26 sync*
-            returnType: Iterable<int>
-''');
-  }
-
-  test_class_method_type_parameter() async {
-    var library = await checkLibrary('class C { T f<T, U>(U u) => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @12
-            typeParameters
-              covariant T @14
-              covariant U @17
-            parameters
-              requiredPositional u @22
-                type: U
-            returnType: T
-''');
-  }
-
-  test_class_method_type_parameter_in_generic_class() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  V f<V, W>(T t, U u, W w) => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          f @20
-            typeParameters
-              covariant V @22
-              covariant W @25
-            parameters
-              requiredPositional t @30
-                type: T
-              requiredPositional u @35
-                type: U
-              requiredPositional w @40
-                type: W
-            returnType: V
-''');
-  }
-
-  test_class_method_type_parameter_with_function_typed_parameter() async {
-    var library = await checkLibrary('class C { void f<T, U>(T x(U u)) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @15
-            typeParameters
-              covariant T @17
-              covariant U @20
-            parameters
-              requiredPositional x @25
-                type: T Function(U)
-                parameters
-                  requiredPositional u @29
-                    type: U
-            returnType: void
-''');
-  }
-
-  test_class_methods() async {
-    var library = await checkLibrary('class C { f() {} g() {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @10
-            returnType: dynamic
-          g @17
-            returnType: dynamic
-''');
-  }
-
-  test_class_mixins() async {
-    var library = await checkLibrary('''
-class C extends D with E, F, G {}
-class D {}
-class E {}
-class F {}
-class G {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        mixins
-          E
-          F
-          G
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-      class D @40
-        constructors
-          synthetic @-1
-      class E @51
-        constructors
-          synthetic @-1
-      class F @62
-        constructors
-          synthetic @-1
-      class G @73
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_mixins_generic() async {
-    var library = await checkLibrary('''
-class Z extends A with B<int>, C<double> {}
-class A {}
-class B<B1> {}
-class C<C1> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class Z @6
-        supertype: A
-        mixins
-          B<int>
-          C<double>
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-      class A @50
-        constructors
-          synthetic @-1
-      class B @61
-        typeParameters
-          covariant B1 @63
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class C @76
-        typeParameters
-          covariant C1 @78
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_mixins_unresolved() async {
-    var library = await checkLibrary(
-        'class C extends Object with X, Y, Z {} class X {} class Z {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: Object
-        mixins
-          X
-          Z
-        constructors
-          synthetic @-1
-      class X @45
-        constructors
-          synthetic @-1
-      class Z @56
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_circularity_via_typedef() async {
-    // C's type parameter T is not simply bounded because its bound, F, expands
-    // to `dynamic F(C)`, which refers to C.
-    var library = await checkLibrary('''
-class C<T extends F> {}
-typedef F(C value);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: dynamic
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @32
-        aliasedType: dynamic Function(C<dynamic>)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional value @36
-              type: C<dynamic>
-          returnType: dynamic
-''');
-  }
-
-  test_class_notSimplyBounded_circularity_with_type_params() async {
-    // C's type parameter T is simply bounded because even though it refers to
-    // C, it specifies a bound.
-    var library = await checkLibrary('''
-class C<T extends C<dynamic>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: C<dynamic>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_class() async {
-    var library = await checkLibrary('''
-class C<T extends D> {}
-class D<T extends C> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: D<dynamic>
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      notSimplyBounded class D @30
-        typeParameters
-          covariant T @32
-            bound: C<dynamic>
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_typedef_functionType() async {
-    var library = await checkLibrary('''
-typedef C<T extends D> = void Function();
-typedef D<T extends C> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded C @8
-        typeParameters
-          unrelated T @10
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-      notSimplyBounded D @50
-        typeParameters
-          unrelated T @52
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
-    var library = await checkLibrary('''
-typedef C<T extends D> = List<T>;
-typedef D<T extends C> = List<T>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded C @8
-        typeParameters
-          covariant T @10
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: List<T>
-      notSimplyBounded D @42
-        typeParameters
-          covariant T @44
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: List<T>
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_reference_to_cycle() async {
-    var library = await checkLibrary('''
-class C<T extends D> {}
-class D<T extends D> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: D<dynamic>
-            defaultType: D<dynamic>
-        constructors
-          synthetic @-1
-      notSimplyBounded class D @30
-        typeParameters
-          covariant T @32
-            bound: D<dynamic>
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_use_of_parameter() async {
-    var library = await checkLibrary('''
-class C<T extends D<T>> {}
-class D<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: D<T>
-            defaultType: D<dynamic>
-        constructors
-          synthetic @-1
-      class D @33
-        typeParameters
-          covariant T @35
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_dependency_with_type_params() async {
-    // C's type parameter T is simply bounded because even though it refers to
-    // non-simply-bounded type D, it specifies a bound.
-    var library = await checkLibrary('''
-class C<T extends D<dynamic>> {}
-class D<T extends D<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: D<dynamic>
-            defaultType: D<dynamic>
-        constructors
-          synthetic @-1
-      notSimplyBounded class D @39
-        typeParameters
-          covariant T @41
-            bound: D<T>
-            defaultType: D<dynamic>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type() async {
-    var library = await checkLibrary('''
-class C<T extends void Function(T)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: void Function(T)
-            defaultType: void Function(Never)
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class C<T extends void Function(T)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: void Function(T*)*
-            defaultType: void Function(Null*)*
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_complex_via_return_type() async {
-    var library = await checkLibrary('''
-class C<T extends T Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: T Function()
-            defaultType: dynamic Function()
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_simple() async {
-    var library = await checkLibrary('''
-class C<T extends void Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: void Function()
-            defaultType: void Function()
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_refers_to_circular_typedef() async {
-    // C's type parameter T has a bound of F, which is a circular typedef.  This
-    // is illegal in Dart, but we need to make sure it doesn't lead to a crash
-    // or infinite loop.
-    var library = await checkLibrary('''
-class C<T extends F> {}
-typedef F(G value);
-typedef G(F value);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: dynamic
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @32
-        aliasedType: dynamic Function(dynamic)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional value @36
-              type: dynamic
-          returnType: dynamic
-      functionTypeAliasBased notSimplyBounded G @52
-        aliasedType: dynamic Function(dynamic)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional value @56
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_class_notSimplyBounded_self() async {
-    var library = await checkLibrary('''
-class C<T extends C> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: C<dynamic>
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_simple_because_non_generic() async {
-    // If no type parameters are specified, then the class is simply bounded, so
-    // there is no reason to assign it a slot.
-    var library = await checkLibrary('''
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_simple_by_lack_of_cycles() async {
-    var library = await checkLibrary('''
-class C<T extends D> {}
-class D<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: D<dynamic>
-            defaultType: D<dynamic>
-        constructors
-          synthetic @-1
-      class D @30
-        typeParameters
-          covariant T @32
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_notSimplyBounded_simple_by_syntax() async {
-    // If no bounds are specified, then the class is simply bounded by syntax
-    // alone, so there is no reason to assign it a slot.
-    var library = await checkLibrary('''
-class C<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_operator() async {
-    var library =
-        await checkLibrary('class C { C operator+(C other) => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          + @20
-            parameters
-              requiredPositional other @24
-                type: C
-            returnType: C
-''');
-  }
-
-  test_class_operator_equal() async {
-    var library = await checkLibrary('''
-class C {
-  bool operator==(Object other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          == @25
-            parameters
-              requiredPositional other @35
-                type: Object
-            returnType: bool
-''');
-  }
-
-  test_class_operator_external() async {
-    var library =
-        await checkLibrary('class C { external C operator+(C other); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          external + @29
-            parameters
-              requiredPositional other @33
-                type: C
-            returnType: C
-''');
-  }
-
-  test_class_operator_greater_equal() async {
-    var library = await checkLibrary('''
-class C {
-  bool operator>=(C other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          >= @25
-            parameters
-              requiredPositional other @30
-                type: C
-            returnType: bool
-''');
-  }
-
-  test_class_operator_index() async {
-    var library =
-        await checkLibrary('class C { bool operator[](int i) => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          [] @23
-            parameters
-              requiredPositional i @30
-                type: int
-            returnType: bool
-''');
-  }
-
-  test_class_operator_index_set() async {
-    var library = await checkLibrary('''
-class C {
-  void operator[]=(int i, bool v) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          []= @25
-            parameters
-              requiredPositional i @33
-                type: int
-              requiredPositional v @41
-                type: bool
-            returnType: void
-''');
-  }
-
-  test_class_operator_less_equal() async {
-    var library = await checkLibrary('''
-class C {
-  bool operator<=(C other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          <= @25
-            parameters
-              requiredPositional other @30
-                type: C
-            returnType: bool
-''');
-  }
-
-  test_class_ref_nullability_none() async {
-    var library = await checkLibrary('''
-class C {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @13
-        type: C
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_class_ref_nullability_question() async {
-    var library = await checkLibrary('''
-class C {}
-C? c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @14
-        type: C?
-    accessors
-      synthetic static get c @-1
-        returnType: C?
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C?
-        returnType: void
-''');
-  }
-
-  test_class_ref_nullability_star() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class C {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @13
-        type: C*
-    accessors
-      synthetic static get c @-1
-        returnType: C*
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C*
-        returnType: void
-''');
-  }
-
-  test_class_setter_abstract() async {
-    var library =
-        await checkLibrary('abstract class C { void set x(int value); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class C @15
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract set x @28
-            parameters
-              requiredPositional value @34
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_covariant() async {
-    var library =
-        await checkLibrary('class C { void set x(covariant int value); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract set x @19
-            parameters
-              requiredPositional covariant value @35
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_external() async {
-    var library =
-        await checkLibrary('class C { external void set x(int value); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          external set x @28
-            parameters
-              requiredPositional value @34
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_implicit_param_type() async {
-    var library = await checkLibrary('class C { void set x(value) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @19
-            parameters
-              requiredPositional value @21
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_setter_implicit_return_type() async {
-    var library = await checkLibrary('class C { set x(int value) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          set x @14
-            parameters
-              requiredPositional value @20
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_conflictingInheritance() async {
-    var library = await checkLibrary('''
-class A {
-  int t;
-}
-class B extends A {
-  double t;
-}
-class C extends A implements B {
-}
-class D extends C {
-  void set t(p) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          t @16
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get t @-1
-            returnType: int
-          synthetic set t @-1
-            parameters
-              requiredPositional _t @-1
-                type: int
-            returnType: void
-      class B @27
-        supertype: A
-        fields
-          t @50
-            type: double
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-        accessors
-          synthetic get t @-1
-            returnType: double
-          synthetic set t @-1
-            parameters
-              requiredPositional _t @-1
-                type: double
-            returnType: void
-      class C @61
-        supertype: A
-        interfaces
-          B
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-      class D @96
-        supertype: C
-        fields
-          synthetic t @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::C::@constructor::•
-        accessors
-          set t @121
-            parameters
-              requiredPositional p @123
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_nonStatic_implicit_param() async {
-    var library =
-        await checkLibrary('class C extends D { void set f(value) {} }'
-            ' abstract class D { void set f(int value); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        fields
-          synthetic f @-1
-            type: int
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          set f @29
-            parameters
-              requiredPositional value @31
-                type: int
-            returnType: void
-      abstract class D @58
-        fields
-          synthetic f @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract set f @71
-            parameters
-              requiredPositional value @77
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_static_implicit_return() async {
-    var library = await checkLibrary('''
-class C {
-  static set f(int value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic static f @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          static set f @23
-            parameters
-              requiredPositional value @29
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_invalid_named_parameter() async {
-    var library = await checkLibrary('class C { void set x({a}) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @19
-            parameters
-              optionalNamed a @22
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_setter_invalid_no_parameter() async {
-    var library = await checkLibrary('class C { void set x() {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @19
-            returnType: void
-''');
-  }
-
-  test_class_setter_invalid_optional_parameter() async {
-    var library = await checkLibrary('class C { void set x([a]) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @19
-            parameters
-              optionalPositional a @22
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_setter_invalid_too_many_parameters() async {
-    var library = await checkLibrary('class C { void set x(a, b) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @19
-            parameters
-              requiredPositional a @21
-                type: dynamic
-              requiredPositional b @24
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_setter_native() async {
-    var library = await checkLibrary('''
-class C {
-  void set x(int value) native;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          external set x @21
-            parameters
-              requiredPositional value @27
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setter_static() async {
-    var library =
-        await checkLibrary('class C { static void set x(int value) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic static x @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          static set x @26
-            parameters
-              requiredPositional value @32
-                type: int
-            returnType: void
-''');
-  }
-
-  test_class_setters() async {
-    var library = await checkLibrary('''
-class C {
-  void set x(int value) {}
-  set y(value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: int
-          synthetic y @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @21
-            parameters
-              requiredPositional value @27
-                type: int
-            returnType: void
-          set y @43
-            parameters
-              requiredPositional value @45
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_class_supertype() async {
-    var library = await checkLibrary('''
-class C extends D {}
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-      class D @27
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_supertype_typeArguments() async {
-    var library = await checkLibrary('''
-class C extends D<int, double> {}
-class D<T1, T2> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D<int, double>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::D::@constructor::•
-              substitution: {T1: int, T2: double}
-      class D @40
-        typeParameters
-          covariant T1 @42
-            defaultType: dynamic
-          covariant T2 @46
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_supertype_typeArguments_self() async {
-    var library = await checkLibrary('''
-class A<T> {}
-class B extends A<B> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @20
-        supertype: A<B>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: B}
-''');
-  }
-
-  test_class_supertype_unresolved() async {
-    var library = await checkLibrary('class C extends D {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters() async {
-    var library = await checkLibrary('class C<T, U> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_bound() async {
-    var library = await checkLibrary('''
-class C<T extends Object, U extends D> {}
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: Object
-            defaultType: Object
-          covariant U @26
-            bound: D
-            defaultType: D
-        constructors
-          synthetic @-1
-      class D @48
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_cycle_1of1() async {
-    var library = await checkLibrary('class C<T extends T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: dynamic
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_cycle_2of3() async {
-    var library = await checkLibrary(r'''
-class C<T extends V, U, V extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: dynamic
-            defaultType: dynamic
-          covariant U @21
-            defaultType: dynamic
-          covariant V @24
-            bound: dynamic
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_cycle_genericFunctionType() async {
-    var library = await checkLibrary(r'''
-class A<T extends void Function(A)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant T @8
-            bound: void Function(A<dynamic>)
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
-    var library = await checkLibrary(r'''
-class C<T extends void Function<U extends C>()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: void Function<U extends C<dynamic>>()
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary(r'''
-typedef F<X> = void Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @40
-        typeParameters
-          covariant X @42
-            bound: void Function(X*)*
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X*
-            defaultType: void Function(Null*)*
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                Null*
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          contravariant X @10
-            defaultType: dynamic
-        aliasedType: void Function(X*)*
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: X*
-          returnType: void
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_nullSafe() async {
-    var library = await checkLibrary(r'''
-typedef F<X> = void Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @40
-        typeParameters
-          covariant X @42
-            bound: void Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
-            defaultType: void Function(Never)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                Never
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          contravariant X @10
-            defaultType: dynamic
-        aliasedType: void Function(X)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: X
-          returnType: void
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_covariant_nullSafe() async {
-    var library = await checkLibrary(r'''
-typedef F<X> = X Function();
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @36
-        typeParameters
-          covariant X @38
-            bound: X Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
-            defaultType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          covariant X @10
-            defaultType: dynamic
-        aliasedType: X Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: X
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_invariant_legacy() async {
-    var library = await checkLibrary(r'''
-typedef F<X> = X Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @37
-        typeParameters
-          covariant X @39
-            bound: X Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
-            defaultType: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          invariant X @10
-            defaultType: dynamic
-        aliasedType: X Function(X)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: X
-          returnType: X
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_invariant_nullSafe() async {
-    var library = await checkLibrary(r'''
-typedef F<X> = X Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @37
-        typeParameters
-          covariant X @39
-            bound: X Function(X)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                X
-            defaultType: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          invariant X @10
-            defaultType: dynamic
-        aliasedType: X Function(X)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: X
-          returnType: X
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_both_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary(r'''
-class A<X extends X Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: X* Function(X*)*
-            defaultType: dynamic Function(Null*)*
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_both_nullSafe() async {
-    var library = await checkLibrary(r'''
-class A<X extends X Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: X Function(X)
-            defaultType: dynamic Function(Never)
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_contravariant_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary(r'''
-class A<X extends void Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: void Function(X*)*
-            defaultType: void Function(Null*)*
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_contravariant_nullSafe() async {
-    var library = await checkLibrary(r'''
-class A<X extends void Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: void Function(X)
-            defaultType: void Function(Never)
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
-    var library = await checkLibrary(r'''
-class A<X extends X Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: X Function()
-            defaultType: dynamic Function()
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_covariant_nullSafe() async {
-    var library = await checkLibrary(r'''
-class A<X extends X Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class A @6
-        typeParameters
-          covariant X @8
-            bound: X Function()
-            defaultType: dynamic Function()
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
-    var library = await checkLibrary(r'''
-typedef A<X> = List<void Function(X)>;
-
-class B<X extends A<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class B @46
-        typeParameters
-          covariant X @48
-            bound: List<void Function(X)>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                X
-            defaultType: List<void Function(Never)>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                Never
-        constructors
-          synthetic @-1
-    typeAliases
-      A @8
-        typeParameters
-          contravariant X @10
-            defaultType: dynamic
-        aliasedType: List<void Function(X)>
-''');
-  }
-
-  test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
-    var library = await checkLibrary(r'''
-typedef A<X> = Map<X, int>;
-
-class B<X extends A<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class B @35
-        typeParameters
-          covariant X @37
-            bound: Map<X, int>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                X
-            defaultType: Map<dynamic, int>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      A @8
-        typeParameters
-          covariant X @10
-            defaultType: dynamic
-        aliasedType: Map<X, int>
-''');
-  }
-
-  test_class_typeParameters_f_bound_complex() async {
-    var library = await checkLibrary('class C<T extends List<U>, U> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: List<U>
-            defaultType: List<dynamic>
-          covariant U @27
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_f_bound_simple() async {
-    var library = await checkLibrary('class C<T extends U, U> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: U
-            defaultType: dynamic
-          covariant U @21
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_variance_contravariant() async {
-    var library = await checkLibrary('class C<in T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          contravariant T @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_variance_covariant() async {
-    var library = await checkLibrary('class C<out T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @12
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_variance_invariant() async {
-    var library = await checkLibrary('class C<inout T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          invariant T @14
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_class_typeParameters_variance_multiple() async {
-    var library = await checkLibrary('class C<inout T, in U, out V> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          invariant T @14
-            defaultType: dynamic
-          contravariant U @20
-            defaultType: dynamic
-          covariant V @27
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias() async {
-    var library = await checkLibrary('''
-class C = D with E, F, G;
-class D {}
-class E {}
-class F {}
-class G {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @6
-        supertype: D
-        mixins
-          E
-          F
-          G
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @32
-        constructors
-          synthetic @-1
-      class E @43
-        constructors
-          synthetic @-1
-      class F @54
-        constructors
-          synthetic @-1
-      class G @65
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_abstract() async {
-    var library = await checkLibrary('''
-abstract class C = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class alias C @15
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @35
-        constructors
-          synthetic @-1
-      class E @46
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_documented() async {
-    var library = await checkLibrary('''
-/**
- * Docs
- */
-class C = D with E;
-
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @22
-        documentationComment: /**\n * Docs\n */
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @43
-        constructors
-          synthetic @-1
-      class E @54
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_documented_tripleSlash() async {
-    var library = await checkLibrary('''
-/// aaa
-/// b
-/// cc
-class C = D with E;
-
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @27
-        documentationComment: /// aaa\n/// b\n/// cc
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @48
-        constructors
-          synthetic @-1
-      class E @59
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_documented_withLeadingNonDocumentation() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-class C = D with E;
-
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @66
-        documentationComment: /**\n * Docs\n */
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @87
-        constructors
-          synthetic @-1
-      class E @98
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_generic() async {
-    var library = await checkLibrary('''
-class Z = A with B<int>, C<double>;
-class A {}
-class B<B1> {}
-class C<C1> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias Z @6
-        supertype: A
-        mixins
-          B<int>
-          C<double>
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-      class A @42
-        constructors
-          synthetic @-1
-      class B @53
-        typeParameters
-          covariant B1 @55
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class C @68
-        typeParameters
-          covariant C1 @70
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_notSimplyBounded_self() async {
-    var library = await checkLibrary('''
-class C<T extends C> = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class alias C @6
-        typeParameters
-          covariant T @8
-            bound: C<dynamic>
-            defaultType: dynamic
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @39
-        constructors
-          synthetic @-1
-      class E @50
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_notSimplyBounded_simple_no_type_parameter_bound() async {
-    // If no bounds are specified, then the class is simply bounded by syntax
-    // alone, so there is no reason to assign it a slot.
-    var library = await checkLibrary('''
-class C<T> = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @29
-        constructors
-          synthetic @-1
-      class E @40
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_notSimplyBounded_simple_non_generic() async {
-    // If no type parameters are specified, then the class is simply bounded, so
-    // there is no reason to assign it a slot.
-    var library = await checkLibrary('''
-class C = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @6
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @26
-        constructors
-          synthetic @-1
-      class E @37
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_classAlias_with_const_constructors() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', r'''
-class Base {
-  const Base._priv();
-  const Base();
-  const Base.named();
-}
-''');
-    var library = await checkLibrary('''
-import "a.dart";
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart
-  definingUnit
-    classes
-      class M @23
-        constructors
-          synthetic @-1
-      class alias MixinApp @34
-        supertype: Base
-        mixins
-          M
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::•
-            superConstructor: package:test/a.dart::@class::Base::@constructor::•
-          synthetic const named @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: named @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::named
-            superConstructor: package:test/a.dart::@class::Base::@constructor::named
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', r'''
-class Base {
-  bool x = true;
-  Base._priv();
-  Base();
-  Base.noArgs();
-  Base.requiredArg(x);
-  Base.positionalArg([bool x = true]);
-  Base.positionalArg2([this.x = true]);
-  Base.namedArg({int x = 42});
-  Base.namedArg2({this.x = true});
-  factory Base.fact() => Base();
-  factory Base.fact2() = Base.noArgs;
-}
-''');
-    var library = await checkLibrary('''
-import "a.dart";
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart
-  definingUnit
-    classes
-      class M @23
-        constructors
-          synthetic @-1
-      class alias MixinApp @34
-        supertype: Base
-        mixins
-          M
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::•
-            superConstructor: package:test/a.dart::@class::Base::@constructor::•
-          synthetic noArgs @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: noArgs @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
-            superConstructor: package:test/a.dart::@class::Base::@constructor::noArgs
-          synthetic requiredArg @-1
-            parameters
-              requiredPositional x @-1
-                type: dynamic
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: requiredArg @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: x @-1
-                      staticElement: x@-1
-                      staticType: dynamic
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
-            superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
-          synthetic positionalArg @-1
-            parameters
-              optionalPositional x @-1
-                type: bool
-                constantInitializer
-                  BooleanLiteral
-                    literal: true @127
-                    staticType: bool
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: positionalArg @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: x @-1
-                      staticElement: x@-1
-                      staticType: bool
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
-            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
-          synthetic positionalArg2 @-1
-            parameters
-              optionalPositional final x @-1
-                type: bool
-                constantInitializer
-                  BooleanLiteral
-                    literal: true @167
-                    staticType: bool
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: positionalArg2 @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: x @-1
-                      staticElement: x@-1
-                      staticType: bool
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
-            superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
-          synthetic namedArg @-1
-            parameters
-              optionalNamed x @-1
-                type: int
-                constantInitializer
-                  IntegerLiteral
-                    literal: 42 @200
-                    staticType: int
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: namedArg @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: x @-1
-                      staticElement: x@-1
-                      staticType: int
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
-            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
-          synthetic namedArg2 @-1
-            parameters
-              optionalNamed final x @-1
-                type: bool
-                constantInitializer
-                  BooleanLiteral
-                    literal: true @233
-                    staticType: bool
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: namedArg2 @-1
-                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: x @-1
-                      staticElement: x@-1
-                      staticType: bool
-                  rightParenthesis: ) @0
-                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
-            superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg2
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors_type_substitution() async {
-    var library = await checkLibrary('''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class Base @6
-        typeParameters
-          covariant T @11
-            defaultType: dynamic
-        constructors
-          ctor @23
-            periodOffset: 22
-            nameEnd: 27
-            parameters
-              requiredPositional t @30
-                type: T
-              requiredPositional l @41
-                type: List<T>
-      class M @53
-        constructors
-          synthetic @-1
-      class alias MixinApp @64
-        supertype: Base<dynamic>
-        mixins
-          M
-        constructors
-          synthetic ctor @-1
-            parameters
-              requiredPositional t @-1
-                type: dynamic
-              requiredPositional l @-1
-                type: List<dynamic>
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: ctor @-1
-                  staticElement: self::@class::Base::@constructor::ctor
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: t @-1
-                      staticElement: t@-1
-                      staticType: dynamic
-                    SimpleIdentifier
-                      token: l @-1
-                      staticElement: l@-1
-                      staticType: List<dynamic>
-                  rightParenthesis: ) @0
-                staticElement: self::@class::Base::@constructor::ctor
-            superConstructor: ConstructorMember
-              base: self::@class::Base::@constructor::ctor
-              substitution: {T: dynamic}
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors_type_substitution_complex() async {
-    var library = await checkLibrary('''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {}
-class MixinApp<U> = Base<List<U>> with M;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class Base @6
-        typeParameters
-          covariant T @11
-            defaultType: dynamic
-        constructors
-          ctor @23
-            periodOffset: 22
-            nameEnd: 27
-            parameters
-              requiredPositional t @30
-                type: T
-              requiredPositional l @41
-                type: List<T>
-      class M @53
-        constructors
-          synthetic @-1
-      class alias MixinApp @64
-        typeParameters
-          covariant U @73
-            defaultType: dynamic
-        supertype: Base<List<U>>
-        mixins
-          M
-        constructors
-          synthetic ctor @-1
-            parameters
-              requiredPositional t @-1
-                type: List<U>
-              requiredPositional l @-1
-                type: List<List<U>>
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: ctor @-1
-                  staticElement: self::@class::Base::@constructor::ctor
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: t @-1
-                      staticElement: t@-1
-                      staticType: List<U>
-                    SimpleIdentifier
-                      token: l @-1
-                      staticElement: l@-1
-                      staticType: List<List<U>>
-                  rightParenthesis: ) @0
-                staticElement: self::@class::Base::@constructor::ctor
-            superConstructor: ConstructorMember
-              base: self::@class::Base::@constructor::ctor
-              substitution: {T: List<U>}
-''');
-  }
-
-  test_classAlias_with_mixin_members() async {
-    var library = await checkLibrary('''
-class C = D with E;
-class D {}
-class E {
-  int get a => null;
-  void set b(int i) {}
-  void f() {}
-  int x;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @6
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @26
-        constructors
-          synthetic @-1
-      class E @37
-        fields
-          x @105
-            type: int
-          synthetic a @-1
-            type: int
-          synthetic b @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-          get a @51
-            returnType: int
-          set b @73
-            parameters
-              requiredPositional i @79
-                type: int
-            returnType: void
-        methods
-          f @92
-            returnType: void
-''');
-  }
-
-  test_classes() async {
-    var library = await checkLibrary('class C {} class D {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-      class D @17
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_closure_executable_with_return_type_from_closure() async {
-    var library = await checkLibrary('''
-f() {
-  print(() {});
-  print(() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        returnType: dynamic
-''');
-  }
-
-  test_closure_generic() async {
-    var library = await checkLibrary(r'''
-final f = <U, V>(U x, V y) => y;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final f @6
-        type: V Function<U, V>(U, V)
-    accessors
-      synthetic static get f @-1
-        returnType: V Function<U, V>(U, V)
-''');
-  }
-
-  test_closure_in_variable_declaration_in_part() async {
-    addSource('/a.dart', 'part of lib; final f = (int i) => i.toDouble();');
-    var library = await checkLibrary('''
-library lib;
-part "a.dart";
-''');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      topLevelVariables
-        static final f @19
-          type: double Function(int)
-      accessors
-        synthetic static get f @-1
-          returnType: double Function(int)
-''');
-  }
-
-  test_codeRange_class() async {
-    var library = await checkLibrary('''
-class Raw {}
-
-/// Comment 1.
-/// Comment 2.
-class HasDocComment {}
-
-@Object()
-class HasAnnotation {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-class AnnotationThenComment {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-class CommentThenAnnotation {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-class CommentAroundAnnotation {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class Raw @6
-        codeOffset: 0
-        codeLength: 12
-        constructors
-          synthetic @-1
-      class HasDocComment @50
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 14
-        codeLength: 52
-        constructors
-          synthetic @-1
-      class HasAnnotation @84
-        metadata
-          Annotation
-            atSign: @ @68
-            name: SimpleIdentifier
-              token: Object @69
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @75
-              rightParenthesis: ) @76
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 68
-        codeLength: 32
-        constructors
-          synthetic @-1
-      class AnnotationThenComment @148
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @102
-            name: SimpleIdentifier
-              token: Object @103
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @109
-              rightParenthesis: ) @110
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 102
-        codeLength: 70
-        constructors
-          synthetic @-1
-      class CommentThenAnnotation @220
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @204
-            name: SimpleIdentifier
-              token: Object @205
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @211
-              rightParenthesis: ) @212
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 174
-        codeLength: 70
-        constructors
-          synthetic @-1
-      class CommentAroundAnnotation @292
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @261
-            name: SimpleIdentifier
-              token: Object @262
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @268
-              rightParenthesis: ) @269
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 261
-        codeLength: 57
-        constructors
-          synthetic @-1
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_class_namedMixin() async {
-    var library = await checkLibrary('''
-class A {}
-
-class B {}
-
-class Raw = Object with A, B;
-
-/// Comment 1.
-/// Comment 2.
-class HasDocComment = Object with A, B;
-
-@Object()
-class HasAnnotation = Object with A, B;
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-class AnnotationThenComment = Object with A, B;
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-class CommentThenAnnotation = Object with A, B;
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-class CommentAroundAnnotation = Object with A, B;
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class A @6
-        codeOffset: 0
-        codeLength: 10
-        constructors
-          synthetic @-1
-      class B @18
-        codeOffset: 12
-        codeLength: 10
-        constructors
-          synthetic @-1
-      class alias Raw @30
-        codeOffset: 24
-        codeLength: 29
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-      class alias HasDocComment @91
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 55
-        codeLength: 69
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-      class alias HasAnnotation @142
-        metadata
-          Annotation
-            atSign: @ @126
-            name: SimpleIdentifier
-              token: Object @127
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @133
-              rightParenthesis: ) @134
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 126
-        codeLength: 49
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-      class alias AnnotationThenComment @223
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @177
-            name: SimpleIdentifier
-              token: Object @178
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @184
-              rightParenthesis: ) @185
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 177
-        codeLength: 87
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-      class alias CommentThenAnnotation @312
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @296
-            name: SimpleIdentifier
-              token: Object @297
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @303
-              rightParenthesis: ) @304
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 266
-        codeLength: 87
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-      class alias CommentAroundAnnotation @401
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @370
-            name: SimpleIdentifier
-              token: Object @371
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @377
-              rightParenthesis: ) @378
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 370
-        codeLength: 74
-        supertype: Object
-        mixins
-          A
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_constructor() async {
-    var library = await checkLibrary('''
-class C {
-  C();
-
-  C.raw() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  C.hasDocComment() {}
-
-  @Object()
-  C.hasAnnotation() {}
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  C.annotationThenComment() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  C.commentThenAnnotation() {}
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  C.commentAroundAnnotation() {}
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        codeOffset: 0
-        codeLength: 362
-        constructors
-          @12
-            codeOffset: 12
-            codeLength: 4
-          raw @22
-            codeOffset: 20
-            codeLength: 10
-            periodOffset: 21
-            nameEnd: 25
-          hasDocComment @70
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            codeOffset: 34
-            codeLength: 54
-            periodOffset: 69
-            nameEnd: 83
-          hasAnnotation @106
-            metadata
-              Annotation
-                atSign: @ @92
-                name: SimpleIdentifier
-                  token: Object @93
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @99
-                  rightParenthesis: ) @100
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 92
-            codeLength: 32
-            periodOffset: 105
-            nameEnd: 119
-          annotationThenComment @176
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @128
-                name: SimpleIdentifier
-                  token: Object @129
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @135
-                  rightParenthesis: ) @136
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 128
-            codeLength: 74
-            periodOffset: 175
-            nameEnd: 197
-          commentThenAnnotation @254
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @240
-                name: SimpleIdentifier
-                  token: Object @241
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @247
-                  rightParenthesis: ) @248
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 206
-            codeLength: 74
-            periodOffset: 253
-            nameEnd: 275
-          commentAroundAnnotation @332
-            documentationComment: /// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @301
-                name: SimpleIdentifier
-                  token: Object @302
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @308
-                  rightParenthesis: ) @309
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 301
-            codeLength: 59
-            periodOffset: 331
-            nameEnd: 355
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_constructor_factory() async {
-    var library = await checkLibrary('''
-class C {
-  factory C() => throw 0;
-
-  factory C.raw() => throw 0;
-
-  /// Comment 1.
-  /// Comment 2.
-  factory C.hasDocComment() => throw 0;
-
-  @Object()
-  factory C.hasAnnotation() => throw 0;
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  factory C.annotationThenComment() => throw 0;
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  factory C.commentThenAnnotation() => throw 0;
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  factory C.commentAroundAnnotation() => throw 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        codeOffset: 0
-        codeLength: 483
-        constructors
-          factory @20
-            codeOffset: 12
-            codeLength: 23
-          factory raw @49
-            codeOffset: 39
-            codeLength: 27
-            periodOffset: 48
-            nameEnd: 52
-          factory hasDocComment @114
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            codeOffset: 70
-            codeLength: 71
-            periodOffset: 113
-            nameEnd: 127
-          factory hasAnnotation @167
-            metadata
-              Annotation
-                atSign: @ @145
-                name: SimpleIdentifier
-                  token: Object @146
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @152
-                  rightParenthesis: ) @153
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 145
-            codeLength: 49
-            periodOffset: 166
-            nameEnd: 180
-          factory annotationThenComment @254
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @198
-                name: SimpleIdentifier
-                  token: Object @199
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @205
-                  rightParenthesis: ) @206
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 198
-            codeLength: 91
-            periodOffset: 253
-            nameEnd: 275
-          factory commentThenAnnotation @349
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @327
-                name: SimpleIdentifier
-                  token: Object @328
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @334
-                  rightParenthesis: ) @335
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 293
-            codeLength: 91
-            periodOffset: 348
-            nameEnd: 370
-          factory commentAroundAnnotation @444
-            documentationComment: /// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @405
-                name: SimpleIdentifier
-                  token: Object @406
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @412
-                  rightParenthesis: ) @413
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 405
-            codeLength: 76
-            periodOffset: 443
-            nameEnd: 467
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_enum() async {
-    var library = await checkLibrary('''
-enum E {
-  aaa, bbb, ccc
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        codeOffset: 0
-        codeLength: 26
-        supertype: Enum
-        fields
-          static const enumConstant aaa @11
-            codeOffset: 11
-            codeLength: 3
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant bbb @16
-            codeOffset: 16
-            codeLength: 3
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant ccc @21
-            codeOffset: 21
-            codeLength: 3
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: aaa @-1
-                    staticElement: self::@enum::E::@getter::aaa
-                    staticType: E
-                  SimpleIdentifier
-                    token: bbb @-1
-                    staticElement: self::@enum::E::@getter::bbb
-                    staticType: E
-                  SimpleIdentifier
-                    token: ccc @-1
-                    staticElement: self::@enum::E::@getter::ccc
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get aaa @-1
-            returnType: E
-          synthetic static get bbb @-1
-            returnType: E
-          synthetic static get ccc @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_extensions() async {
-    var library = await checkLibrary('''
-class A {}
-
-extension Raw on A {}
-
-/// Comment 1.
-/// Comment 2.
-extension HasDocComment on A {}
-
-@Object()
-extension HasAnnotation on A {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-extension AnnotationThenComment on A {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-extension CommentThenAnnotation on A {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-extension CommentAroundAnnotation on A {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class A @6
-        codeOffset: 0
-        codeLength: 10
-        constructors
-          synthetic @-1
-    extensions
-      Raw @22
-        codeOffset: 12
-        codeLength: 21
-        extendedType: A
-      HasDocComment @75
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 35
-        codeLength: 61
-        extendedType: A
-      HasAnnotation @118
-        metadata
-          Annotation
-            atSign: @ @98
-            name: SimpleIdentifier
-              token: Object @99
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @105
-              rightParenthesis: ) @106
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 98
-        codeLength: 41
-        extendedType: A
-      AnnotationThenComment @191
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @141
-            name: SimpleIdentifier
-              token: Object @142
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @148
-              rightParenthesis: ) @149
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 141
-        codeLength: 79
-        extendedType: A
-      CommentThenAnnotation @272
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @252
-            name: SimpleIdentifier
-              token: Object @253
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @259
-              rightParenthesis: ) @260
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 222
-        codeLength: 79
-        extendedType: A
-      CommentAroundAnnotation @353
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @318
-            name: SimpleIdentifier
-              token: Object @319
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @325
-              rightParenthesis: ) @326
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 318
-        codeLength: 66
-        extendedType: A
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_field() async {
-    var library = await checkLibrary('''
-class C {
-  int withInit = 1;
-
-  int withoutInit;
-
-  int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        codeOffset: 0
-        codeLength: 115
-        fields
-          withInit @16
-            codeOffset: 12
-            codeLength: 16
-            type: int
-          withoutInit @37
-            codeOffset: 33
-            codeLength: 15
-            type: int
-          multiWithInit @57
-            codeOffset: 53
-            codeLength: 21
-            type: int
-          multiWithoutInit @76
-            codeOffset: 76
-            codeLength: 16
-            type: int
-          multiWithInit2 @94
-            codeOffset: 94
-            codeLength: 18
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get withInit @-1
-            returnType: int
-          synthetic set withInit @-1
-            parameters
-              requiredPositional _withInit @-1
-                type: int
-            returnType: void
-          synthetic get withoutInit @-1
-            returnType: int
-          synthetic set withoutInit @-1
-            parameters
-              requiredPositional _withoutInit @-1
-                type: int
-            returnType: void
-          synthetic get multiWithInit @-1
-            returnType: int
-          synthetic set multiWithInit @-1
-            parameters
-              requiredPositional _multiWithInit @-1
-                type: int
-            returnType: void
-          synthetic get multiWithoutInit @-1
-            returnType: int
-          synthetic set multiWithoutInit @-1
-            parameters
-              requiredPositional _multiWithoutInit @-1
-                type: int
-            returnType: void
-          synthetic get multiWithInit2 @-1
-            returnType: int
-          synthetic set multiWithInit2 @-1
-            parameters
-              requiredPositional _multiWithInit2 @-1
-                type: int
-            returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_field_annotations() async {
-    var library = await checkLibrary('''
-class C {
-  /// Comment 1.
-  /// Comment 2.
-  int hasDocComment, hasDocComment2;
-
-  @Object()
-  int hasAnnotation, hasAnnotation2;
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  int annotationThenComment, annotationThenComment2;
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int commentThenAnnotation, commentThenAnnotation2;
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  int commentAroundAnnotation, commentAroundAnnotation2;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        codeOffset: 0
-        codeLength: 436
-        fields
-          hasDocComment @50
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            codeOffset: 12
-            codeLength: 51
-            type: int
-          hasDocComment2 @65
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            codeOffset: 65
-            codeLength: 14
-            type: int
-          hasAnnotation @100
-            metadata
-              Annotation
-                atSign: @ @84
-                name: SimpleIdentifier
-                  token: Object @85
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @91
-                  rightParenthesis: ) @92
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 84
-            codeLength: 29
-            type: int
-          hasAnnotation2 @115
-            metadata
-              Annotation
-                atSign: @ @84
-                name: SimpleIdentifier
-                  token: Object @85
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @91
-                  rightParenthesis: ) @92
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 115
-            codeLength: 14
-            type: int
-          annotationThenComment @184
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @134
-                name: SimpleIdentifier
-                  token: Object @135
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @141
-                  rightParenthesis: ) @142
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 134
-            codeLength: 71
-            type: int
-          annotationThenComment2 @207
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @134
-                name: SimpleIdentifier
-                  token: Object @135
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @141
-                  rightParenthesis: ) @142
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 207
-            codeLength: 22
-            type: int
-          commentThenAnnotation @284
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @268
-                name: SimpleIdentifier
-                  token: Object @269
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @275
-                  rightParenthesis: ) @276
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 234
-            codeLength: 71
-            type: int
-          commentThenAnnotation2 @307
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @268
-                name: SimpleIdentifier
-                  token: Object @269
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @275
-                  rightParenthesis: ) @276
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 307
-            codeLength: 22
-            type: int
-          commentAroundAnnotation @384
-            documentationComment: /// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @351
-                name: SimpleIdentifier
-                  token: Object @352
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @358
-                  rightParenthesis: ) @359
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 351
-            codeLength: 56
-            type: int
-          commentAroundAnnotation2 @409
-            documentationComment: /// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @351
-                name: SimpleIdentifier
-                  token: Object @352
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @358
-                  rightParenthesis: ) @359
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 409
-            codeLength: 24
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get hasDocComment @-1
-            returnType: int
-          synthetic set hasDocComment @-1
-            parameters
-              requiredPositional _hasDocComment @-1
-                type: int
-            returnType: void
-          synthetic get hasDocComment2 @-1
-            returnType: int
-          synthetic set hasDocComment2 @-1
-            parameters
-              requiredPositional _hasDocComment2 @-1
-                type: int
-            returnType: void
-          synthetic get hasAnnotation @-1
-            returnType: int
-          synthetic set hasAnnotation @-1
-            parameters
-              requiredPositional _hasAnnotation @-1
-                type: int
-            returnType: void
-          synthetic get hasAnnotation2 @-1
-            returnType: int
-          synthetic set hasAnnotation2 @-1
-            parameters
-              requiredPositional _hasAnnotation2 @-1
-                type: int
-            returnType: void
-          synthetic get annotationThenComment @-1
-            returnType: int
-          synthetic set annotationThenComment @-1
-            parameters
-              requiredPositional _annotationThenComment @-1
-                type: int
-            returnType: void
-          synthetic get annotationThenComment2 @-1
-            returnType: int
-          synthetic set annotationThenComment2 @-1
-            parameters
-              requiredPositional _annotationThenComment2 @-1
-                type: int
-            returnType: void
-          synthetic get commentThenAnnotation @-1
-            returnType: int
-          synthetic set commentThenAnnotation @-1
-            parameters
-              requiredPositional _commentThenAnnotation @-1
-                type: int
-            returnType: void
-          synthetic get commentThenAnnotation2 @-1
-            returnType: int
-          synthetic set commentThenAnnotation2 @-1
-            parameters
-              requiredPositional _commentThenAnnotation2 @-1
-                type: int
-            returnType: void
-          synthetic get commentAroundAnnotation @-1
-            returnType: int
-          synthetic set commentAroundAnnotation @-1
-            parameters
-              requiredPositional _commentAroundAnnotation @-1
-                type: int
-            returnType: void
-          synthetic get commentAroundAnnotation2 @-1
-            returnType: int
-          synthetic set commentAroundAnnotation2 @-1
-            parameters
-              requiredPositional _commentAroundAnnotation2 @-1
-                type: int
-            returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_function() async {
-    var library = await checkLibrary('''
-void raw() {}
-
-/// Comment 1.
-/// Comment 2.
-void hasDocComment() {}
-
-@Object()
-void hasAnnotation() {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-void annotationThenComment() {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-void commentThenAnnotation() {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-void commentAroundAnnotation() {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    functions
-      raw @5
-        codeOffset: 0
-        codeLength: 13
-        returnType: void
-      hasDocComment @50
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 15
-        codeLength: 53
-        returnType: void
-      hasAnnotation @85
-        metadata
-          Annotation
-            atSign: @ @70
-            name: SimpleIdentifier
-              token: Object @71
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @77
-              rightParenthesis: ) @78
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 70
-        codeLength: 33
-        returnType: void
-      annotationThenComment @150
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @105
-            name: SimpleIdentifier
-              token: Object @106
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @112
-              rightParenthesis: ) @113
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 105
-        codeLength: 71
-        returnType: void
-      commentThenAnnotation @223
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @208
-            name: SimpleIdentifier
-              token: Object @209
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @215
-              rightParenthesis: ) @216
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 178
-        codeLength: 71
-        returnType: void
-      commentAroundAnnotation @296
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @266
-            name: SimpleIdentifier
-              token: Object @267
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @273
-              rightParenthesis: ) @274
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 266
-        codeLength: 58
-        returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_functionTypeAlias() async {
-    var library = await checkLibrary('''
-typedef Raw();
-
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment();
-
-@Object()
-typedef HasAnnotation();
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-typedef AnnotationThenComment();
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation();
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-typedef CommentAroundAnnotation();
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased Raw @8
-        codeOffset: 0
-        codeLength: 14
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      functionTypeAliasBased HasDocComment @54
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 16
-        codeLength: 54
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      functionTypeAliasBased HasAnnotation @90
-        metadata
-          Annotation
-            atSign: @ @72
-            name: SimpleIdentifier
-              token: Object @73
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @79
-              rightParenthesis: ) @80
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 72
-        codeLength: 34
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      functionTypeAliasBased AnnotationThenComment @156
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @108
-            name: SimpleIdentifier
-              token: Object @109
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @115
-              rightParenthesis: ) @116
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 108
-        codeLength: 72
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      functionTypeAliasBased CommentThenAnnotation @230
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @212
-            name: SimpleIdentifier
-              token: Object @213
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @219
-              rightParenthesis: ) @220
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 182
-        codeLength: 72
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      functionTypeAliasBased CommentAroundAnnotation @304
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @271
-            name: SimpleIdentifier
-              token: Object @272
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @278
-              rightParenthesis: ) @279
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 271
-        codeLength: 59
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_genericTypeAlias() async {
-    var library = await checkLibrary('''
-typedef Raw = Function();
-
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment = Function();
-
-@Object()
-typedef HasAnnotation = Function();
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-typedef AnnotationThenComment = Function();
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation = Function();
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-typedef CommentAroundAnnotation = Function();
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    typeAliases
-      Raw @8
-        codeOffset: 0
-        codeLength: 25
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      HasDocComment @65
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 27
-        codeLength: 65
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      HasAnnotation @112
-        metadata
-          Annotation
-            atSign: @ @94
-            name: SimpleIdentifier
-              token: Object @95
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @101
-              rightParenthesis: ) @102
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 94
-        codeLength: 45
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      AnnotationThenComment @189
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @141
-            name: SimpleIdentifier
-              token: Object @142
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @148
-              rightParenthesis: ) @149
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 141
-        codeLength: 83
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      CommentThenAnnotation @274
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @256
-            name: SimpleIdentifier
-              token: Object @257
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @263
-              rightParenthesis: ) @264
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 226
-        codeLength: 83
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      CommentAroundAnnotation @359
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @326
-            name: SimpleIdentifier
-              token: Object @327
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @333
-              rightParenthesis: ) @334
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 326
-        codeLength: 70
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_method() async {
-    var library = await checkLibrary('''
-class C {
-  void raw() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  void hasDocComment() {}
-
-  @Object()
-  void hasAnnotation() {}
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  void annotationThenComment() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  void commentThenAnnotation() {}
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  void commentAroundAnnotation() {}
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        codeOffset: 0
-        codeLength: 372
-        constructors
-          synthetic @-1
-        methods
-          raw @17
-            codeOffset: 12
-            codeLength: 13
-            returnType: void
-          hasDocComment @68
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            codeOffset: 29
-            codeLength: 57
-            returnType: void
-          hasAnnotation @107
-            metadata
-              Annotation
-                atSign: @ @90
-                name: SimpleIdentifier
-                  token: Object @91
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @97
-                  rightParenthesis: ) @98
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 90
-            codeLength: 35
-            returnType: void
-          annotationThenComment @180
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @129
-                name: SimpleIdentifier
-                  token: Object @130
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @136
-                  rightParenthesis: ) @137
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 129
-            codeLength: 77
-            returnType: void
-          commentThenAnnotation @261
-            documentationComment: /// Comment 1.\n/// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @244
-                name: SimpleIdentifier
-                  token: Object @245
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @251
-                  rightParenthesis: ) @252
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 210
-            codeLength: 77
-            returnType: void
-          commentAroundAnnotation @342
-            documentationComment: /// Comment 2.
-            metadata
-              Annotation
-                atSign: @ @308
-                name: SimpleIdentifier
-                  token: Object @309
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @315
-                  rightParenthesis: ) @316
-                element: dart:core::@class::Object::@constructor::•
-            codeOffset: 308
-            codeLength: 62
-            returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_parameter() async {
-    var library = await checkLibrary('''
-main({int a = 1, int b, int c = 2}) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      main @0
-        parameters
-          optionalNamed a @10
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @14
-                staticType: int
-          optionalNamed b @21
-            type: int
-          optionalNamed c @28
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 2 @32
-                staticType: int
-        returnType: dynamic
-''');
-  }
-
-  test_codeRange_parameter_annotations() async {
-    var library = await checkLibrary('''
-main(@Object() int a, int b, @Object() int c) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      main @0
-        parameters
-          requiredPositional a @19
-            type: int
-            metadata
-              Annotation
-                atSign: @ @5
-                name: SimpleIdentifier
-                  token: Object @6
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @12
-                  rightParenthesis: ) @13
-                element: dart:core::@class::Object::@constructor::•
-          requiredPositional b @26
-            type: int
-          requiredPositional c @43
-            type: int
-            metadata
-              Annotation
-                atSign: @ @29
-                name: SimpleIdentifier
-                  token: Object @30
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @36
-                  rightParenthesis: ) @37
-                element: dart:core::@class::Object::@constructor::•
-        returnType: dynamic
-''');
-  }
-
-  test_codeRange_topLevelVariable() async {
-    var library = await checkLibrary('''
-int withInit = 1 + 2 * 3;
-
-int withoutInit;
-
-int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      static withInit @4
-        codeOffset: 0
-        codeLength: 24
-        type: int
-      static withoutInit @31
-        codeOffset: 27
-        codeLength: 15
-        type: int
-      static multiWithInit @49
-        codeOffset: 45
-        codeLength: 21
-        type: int
-      static multiWithoutInit @68
-        codeOffset: 68
-        codeLength: 16
-        type: int
-      static multiWithInit2 @86
-        codeOffset: 86
-        codeLength: 18
-        type: int
-    accessors
-      synthetic static get withInit @-1
-        returnType: int
-      synthetic static set withInit @-1
-        parameters
-          requiredPositional _withInit @-1
-            type: int
-        returnType: void
-      synthetic static get withoutInit @-1
-        returnType: int
-      synthetic static set withoutInit @-1
-        parameters
-          requiredPositional _withoutInit @-1
-            type: int
-        returnType: void
-      synthetic static get multiWithInit @-1
-        returnType: int
-      synthetic static set multiWithInit @-1
-        parameters
-          requiredPositional _multiWithInit @-1
-            type: int
-        returnType: void
-      synthetic static get multiWithoutInit @-1
-        returnType: int
-      synthetic static set multiWithoutInit @-1
-        parameters
-          requiredPositional _multiWithoutInit @-1
-            type: int
-        returnType: void
-      synthetic static get multiWithInit2 @-1
-        returnType: int
-      synthetic static set multiWithInit2 @-1
-        parameters
-          requiredPositional _multiWithInit2 @-1
-            type: int
-        returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_topLevelVariable_annotations() async {
-    var library = await checkLibrary('''
-/// Comment 1.
-/// Comment 2.
-int hasDocComment, hasDocComment2;
-
-@Object()
-int hasAnnotation, hasAnnotation2;
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-int annotationThenComment, annotationThenComment2;
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-int commentThenAnnotation, commentThenAnnotation2;
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-int commentAroundAnnotation, commentAroundAnnotation2;
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      static hasDocComment @34
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 0
-        codeLength: 47
-        type: int
-      static hasDocComment2 @49
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        codeOffset: 49
-        codeLength: 14
-        type: int
-      static hasAnnotation @80
-        metadata
-          Annotation
-            atSign: @ @66
-            name: SimpleIdentifier
-              token: Object @67
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @73
-              rightParenthesis: ) @74
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 66
-        codeLength: 27
-        type: int
-      static hasAnnotation2 @95
-        metadata
-          Annotation
-            atSign: @ @66
-            name: SimpleIdentifier
-              token: Object @67
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @73
-              rightParenthesis: ) @74
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 95
-        codeLength: 14
-        type: int
-      static annotationThenComment @156
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @112
-            name: SimpleIdentifier
-              token: Object @113
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @119
-              rightParenthesis: ) @120
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 112
-        codeLength: 65
-        type: int
-      static annotationThenComment2 @179
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @112
-            name: SimpleIdentifier
-              token: Object @113
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @119
-              rightParenthesis: ) @120
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 179
-        codeLength: 22
-        type: int
-      static commentThenAnnotation @248
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @234
-            name: SimpleIdentifier
-              token: Object @235
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @241
-              rightParenthesis: ) @242
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 204
-        codeLength: 65
-        type: int
-      static commentThenAnnotation2 @271
-        documentationComment: /// Comment 1.\n/// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @234
-            name: SimpleIdentifier
-              token: Object @235
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @241
-              rightParenthesis: ) @242
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 271
-        codeLength: 22
-        type: int
-      static commentAroundAnnotation @340
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @311
-            name: SimpleIdentifier
-              token: Object @312
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @318
-              rightParenthesis: ) @319
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 311
-        codeLength: 52
-        type: int
-      static commentAroundAnnotation2 @365
-        documentationComment: /// Comment 2.
-        metadata
-          Annotation
-            atSign: @ @311
-            name: SimpleIdentifier
-              token: Object @312
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @318
-              rightParenthesis: ) @319
-            element: dart:core::@class::Object::@constructor::•
-        codeOffset: 365
-        codeLength: 24
-        type: int
-    accessors
-      synthetic static get hasDocComment @-1
-        returnType: int
-      synthetic static set hasDocComment @-1
-        parameters
-          requiredPositional _hasDocComment @-1
-            type: int
-        returnType: void
-      synthetic static get hasDocComment2 @-1
-        returnType: int
-      synthetic static set hasDocComment2 @-1
-        parameters
-          requiredPositional _hasDocComment2 @-1
-            type: int
-        returnType: void
-      synthetic static get hasAnnotation @-1
-        returnType: int
-      synthetic static set hasAnnotation @-1
-        parameters
-          requiredPositional _hasAnnotation @-1
-            type: int
-        returnType: void
-      synthetic static get hasAnnotation2 @-1
-        returnType: int
-      synthetic static set hasAnnotation2 @-1
-        parameters
-          requiredPositional _hasAnnotation2 @-1
-            type: int
-        returnType: void
-      synthetic static get annotationThenComment @-1
-        returnType: int
-      synthetic static set annotationThenComment @-1
-        parameters
-          requiredPositional _annotationThenComment @-1
-            type: int
-        returnType: void
-      synthetic static get annotationThenComment2 @-1
-        returnType: int
-      synthetic static set annotationThenComment2 @-1
-        parameters
-          requiredPositional _annotationThenComment2 @-1
-            type: int
-        returnType: void
-      synthetic static get commentThenAnnotation @-1
-        returnType: int
-      synthetic static set commentThenAnnotation @-1
-        parameters
-          requiredPositional _commentThenAnnotation @-1
-            type: int
-        returnType: void
-      synthetic static get commentThenAnnotation2 @-1
-        returnType: int
-      synthetic static set commentThenAnnotation2 @-1
-        parameters
-          requiredPositional _commentThenAnnotation2 @-1
-            type: int
-        returnType: void
-      synthetic static get commentAroundAnnotation @-1
-        returnType: int
-      synthetic static set commentAroundAnnotation @-1
-        parameters
-          requiredPositional _commentAroundAnnotation @-1
-            type: int
-        returnType: void
-      synthetic static get commentAroundAnnotation2 @-1
-        returnType: int
-      synthetic static set commentAroundAnnotation2 @-1
-        parameters
-          requiredPositional _commentAroundAnnotation2 @-1
-            type: int
-        returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_codeRange_type_parameter() async {
-    var library = await checkLibrary('''
-class A<T> {}
-void f<U extends num> {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class A @6
-        codeOffset: 0
-        codeLength: 13
-        typeParameters
-          covariant T @8
-            codeOffset: 8
-            codeLength: 1
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    functions
-      f @19
-        codeOffset: 14
-        codeLength: 24
-        typeParameters
-          covariant U @21
-            codeOffset: 21
-            codeLength: 13
-            bound: num
-        returnType: void
-''',
-        withCodeRanges: true);
-  }
-
-  test_compilationUnit_nnbd_disabled_via_dart_directive() async {
-    var library = await checkLibrary('''
-// @dart=2.2
-''');
-    expect(library.isNonNullableByDefault, isFalse);
-  }
-
-  test_compilationUnit_nnbd_disabled_via_feature_set() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('');
-    expect(library.isNonNullableByDefault, isFalse);
-  }
-
-  test_compilationUnit_nnbd_enabled() async {
-    var library = await checkLibrary('');
-    expect(library.isNonNullableByDefault, isTrue);
-  }
-
-  test_const_asExpression() async {
-    var library = await checkLibrary('''
-const num a = 0;
-const b = a as int;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @10
-        type: num
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @14
-            staticType: int
-      static const b @23
-        type: int
-        constantInitializer
-          AsExpression
-            expression: SimpleIdentifier
-              token: a @27
-              staticElement: self::@getter::a
-              staticType: num
-            asOperator: as @29
-            type: NamedType
-              name: SimpleIdentifier
-                token: int @32
-                staticElement: dart:core::@class::int
-                staticType: null
-              type: int
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: num
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_assignmentExpression() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-const b = (a += 1);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static const b @19
-        type: int
-        constantInitializer
-          ParenthesizedExpression
-            leftParenthesis: ( @23
-            expression: AssignmentExpression
-              leftHandSide: SimpleIdentifier
-                token: a @24
-                staticElement: <null>
-                staticType: null
-              operator: += @26
-              rightHandSide: IntegerLiteral
-                literal: 1 @29
-                staticType: int
-              readElement: self::@getter::a
-              readType: int
-              writeElement: self::@getter::a
-              writeType: dynamic
-              staticElement: dart:core::@class::num::@method::+
-              staticType: int
-            rightParenthesis: ) @30
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_cascadeExpression() async {
-    var library = await checkLibrary(r'''
-const a = 0..isEven..abs();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          CascadeExpression
-            target: IntegerLiteral
-              literal: 0 @10
-              staticType: int
-            cascadeSections
-              PropertyAccess
-                operator: .. @11
-                propertyName: SimpleIdentifier
-                  token: isEven @13
-                  staticElement: dart:core::@class::int::@getter::isEven
-                  staticType: bool
-                staticType: bool
-              MethodInvocation
-                operator: .. @19
-                methodName: SimpleIdentifier
-                  token: abs @21
-                  staticElement: dart:core::@class::int::@method::abs
-                  staticType: int Function()
-                argumentList: ArgumentList
-                  leftParenthesis: ( @24
-                  rightParenthesis: ) @25
-                staticInvokeType: int Function()
-                staticType: int
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_const_classField() async {
-    var library = await checkLibrary(r'''
-class C {
-  static const int f1 = 1;
-  static const int f2 = C.f1, f3 = C.f2;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const f1 @29
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @34
-                staticType: int
-          static const f2 @56
-            type: int
-            constantInitializer
-              PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: C @61
-                  staticElement: self::@class::C
-                  staticType: null
-                period: . @62
-                identifier: SimpleIdentifier
-                  token: f1 @63
-                  staticElement: self::@class::C::@getter::f1
-                  staticType: int
-                staticElement: self::@class::C::@getter::f1
-                staticType: int
-          static const f3 @67
-            type: int
-            constantInitializer
-              PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: C @72
-                  staticElement: self::@class::C
-                  staticType: null
-                period: . @73
-                identifier: SimpleIdentifier
-                  token: f2 @74
-                  staticElement: self::@class::C::@getter::f2
-                  staticType: int
-                staticElement: self::@class::C::@getter::f2
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get f1 @-1
-            returnType: int
-          synthetic static get f2 @-1
-            returnType: int
-          synthetic static get f3 @-1
-            returnType: int
-''');
-  }
-
-  test_const_constructor_inferred_args() async {
-    var library = await checkLibrary('''
-class C<T> {
-  final T t;
-  const C(this.t);
-  const C.named(this.t);
-}
-const Object x = const C(0);
-const Object y = const C.named(0);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          final t @23
-            type: T
-        constructors
-          const @34
-            parameters
-              requiredPositional final this.t @41
-                type: T
-                field: self::@class::C::@field::t
-          const named @55
-            periodOffset: 54
-            nameEnd: 60
-            parameters
-              requiredPositional final this.t @66
-                type: T
-                field: self::@class::C::@field::t
-        accessors
-          synthetic get t @-1
-            returnType: T
-    topLevelVariables
-      static const x @85
-        type: Object
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @89
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @95
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C<int>
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {T: int}
-            argumentList: ArgumentList
-              leftParenthesis: ( @96
-              arguments
-                IntegerLiteral
-                  literal: 0 @97
-                  staticType: int
-              rightParenthesis: ) @98
-            staticType: C<int>
-      static const y @114
-        type: Object
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @118
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @124
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C<int>
-              period: . @125
-              name: SimpleIdentifier
-                token: named @126
-                staticElement: ConstructorMember
-                  base: self::@class::C::@constructor::named
-                  substitution: {T: dynamic}
-                staticType: null
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::named
-                substitution: {T: int}
-            argumentList: ArgumentList
-              leftParenthesis: ( @131
-              arguments
-                IntegerLiteral
-                  literal: 0 @132
-                  staticType: int
-              rightParenthesis: ) @133
-            staticType: C<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-      synthetic static get y @-1
-        returnType: Object
-''');
-    var x = library.definingCompilationUnit.topLevelVariables[0]
-        as TopLevelVariableElementImpl;
-    var xExpr = x.constantInitializer as InstanceCreationExpression;
-    var xType = xExpr.constructorName.staticElement!.returnType;
-    _assertTypeStr(
-      xType,
-      'C<int>',
-    );
-    var y = library.definingCompilationUnit.topLevelVariables[0]
-        as TopLevelVariableElementImpl;
-    var yExpr = y.constantInitializer as InstanceCreationExpression;
-    var yType = yExpr.constructorName.staticElement!.returnType;
-    _assertTypeStr(yType, 'C<int>');
-  }
-
-  test_const_constructorReference() async {
-    var library = await checkLibrary(r'''
-class A {
-  A.named();
-}
-const v = A.named;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          named @14
-            periodOffset: 13
-            nameEnd: 19
-    topLevelVariables
-      static const v @31
-        type: A Function()
-        constantInitializer
-          ConstructorReference
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @35
-                  staticElement: self::@class::A
-                  staticType: null
-                type: null
-              period: . @36
-              name: SimpleIdentifier
-                token: named @37
-                staticElement: self::@class::A::@constructor::named
-                staticType: null
-              staticElement: self::@class::A::@constructor::named
-            staticType: A Function()
-    accessors
-      synthetic static get v @-1
-        returnType: A Function()
-''');
-  }
-
-  test_const_finalField_hasConstConstructor() async {
-    var library = await checkLibrary(r'''
-class C {
-  final int f = 42;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final f @22
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @26
-                staticType: int
-        constructors
-          const @38
-        accessors
-          synthetic get f @-1
-            returnType: int
-''');
-  }
-
-  test_const_functionExpression_typeArgumentTypes() async {
-    var library = await checkLibrary('''
-void f<T>(T a) {}
-
-const void Function(int) v = f;
-''');
-    checkElementText(library, '''
-library
-  definingUnit
-    topLevelVariables
-      static const v @44
-        type: void Function(int)
-        constantInitializer
-          FunctionReference
-            function: SimpleIdentifier
-              token: f @48
-              staticElement: self::@function::f
-              staticType: void Function<T>(T)
-            staticType: void Function(int)
-            typeArgumentTypes
-              int
-    accessors
-      synthetic static get v @-1
-        returnType: void Function(int)
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-        parameters
-          requiredPositional a @12
-            type: T
-        returnType: void
-''');
-  }
-
-  test_const_functionReference() async {
-    var library = await checkLibrary(r'''
-void f<T>(T a) {}
-const v = f<int>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @24
-        type: void Function(int)
-        constantInitializer
-          FunctionReference
-            function: SimpleIdentifier
-              token: f @28
-              staticElement: self::@function::f
-              staticType: void Function<T>(T)
-            typeArguments: TypeArgumentList
-              leftBracket: < @29
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @30
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @33
-            staticType: void Function(int)
-            typeArgumentTypes
-              int
-    accessors
-      synthetic static get v @-1
-        returnType: void Function(int)
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-        parameters
-          requiredPositional a @12
-            type: T
-        returnType: void
-''');
-  }
-
-  test_const_indexExpression() async {
-    var library = await checkLibrary(r'''
-const a = [0];
-const b = 0;
-const c = a[b];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: List<int>
-        constantInitializer
-          ListLiteral
-            leftBracket: [ @10
-            elements
-              IntegerLiteral
-                literal: 0 @11
-                staticType: int
-            rightBracket: ] @12
-            staticType: List<int>
-      static const b @21
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @25
-            staticType: int
-      static const c @34
-        type: int
-        constantInitializer
-          IndexExpression
-            target: SimpleIdentifier
-              token: a @38
-              staticElement: self::@getter::a
-              staticType: List<int>
-            leftBracket: [ @39
-            index: SimpleIdentifier
-              token: b @40
-              staticElement: self::@getter::b
-              staticType: int
-            rightBracket: ] @41
-            staticElement: MethodMember
-              base: dart:core::@class::List::@method::[]
-              substitution: {E: int}
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: List<int>
-      synthetic static get b @-1
-        returnType: int
-      synthetic static get c @-1
-        returnType: int
-''');
-  }
-
-  test_const_inference_downward_list() async {
-    var library = await checkLibrary('''
-class P<T> {
-  const P();
-}
-
-class P1<T> extends P<T> {
-  const P1();
-}
-
-class P2<T> extends P<T> {
-  const P2();
-}
-
-const List<P> values = [
-  P1(),
-  P2<int>(),
-];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class P @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class P1 @35
-        typeParameters
-          covariant T @38
-            defaultType: dynamic
-        supertype: P<T>
-        constructors
-          const @64
-            superConstructor: ConstructorMember
-              base: self::@class::P::@constructor::•
-              substitution: {T: T}
-      class P2 @79
-        typeParameters
-          covariant T @82
-            defaultType: dynamic
-        supertype: P<T>
-        constructors
-          const @108
-            superConstructor: ConstructorMember
-              base: self::@class::P::@constructor::•
-              substitution: {T: T}
-    topLevelVariables
-      static const values @131
-        type: List<P<dynamic>>
-        constantInitializer
-          ListLiteral
-            leftBracket: [ @140
-            elements
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: P1 @144
-                      staticElement: self::@class::P1
-                      staticType: null
-                    type: P1<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@class::P1::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @146
-                  rightParenthesis: ) @147
-                staticType: P1<dynamic>
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: P2 @152
-                      staticElement: self::@class::P2
-                      staticType: null
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @154
-                      arguments
-                        NamedType
-                          name: SimpleIdentifier
-                            token: int @155
-                            staticElement: dart:core::@class::int
-                            staticType: null
-                          type: int
-                      rightBracket: > @158
-                    type: P2<int>
-                  staticElement: ConstructorMember
-                    base: self::@class::P2::@constructor::•
-                    substitution: {T: int}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @159
-                  rightParenthesis: ) @160
-                staticType: P2<int>
-            rightBracket: ] @163
-            staticType: List<P<dynamic>>
-    accessors
-      synthetic static get values @-1
-        returnType: List<P<dynamic>>
-''');
-  }
-
-  test_const_invalid_field_const() async {
-    var library = await checkLibrary(r'''
-class C {
-  static const f = 1 + foo();
-}
-int foo() => 42;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const f @25
-            type: int
-            constantInitializer
-              BinaryExpression
-                leftOperand: IntegerLiteral
-                  literal: 1 @29
-                  staticType: int
-                operator: + @31
-                rightOperand: MethodInvocation
-                  methodName: SimpleIdentifier
-                    token: foo @33
-                    staticElement: self::@function::foo
-                    staticType: int Function()
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @36
-                    rightParenthesis: ) @37
-                  staticInvokeType: int Function()
-                  staticType: int
-                staticElement: dart:core::@class::num::@method::+
-                staticInvokeType: num Function(num)
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get f @-1
-            returnType: int
-    functions
-      foo @46
-        returnType: int
-''');
-  }
-
-  test_const_invalid_field_final() async {
-    var library = await checkLibrary(r'''
-class C {
-  final f = 1 + foo();
-}
-int foo() => 42;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final f @18
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: int
-    functions
-      foo @39
-        returnType: int
-''');
-  }
-
-  test_const_invalid_functionExpression() async {
-    var library = await checkLibrary('''
-const v = () { return 0; };
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: int Function()
-        constantInitializer
-          FunctionExpression
-            parameters: FormalParameterList
-              leftParenthesis: ( @10
-              rightParenthesis: ) @0
-            body: BlockFunctionBody
-              block: Block
-                leftBracket: { @0
-                rightBracket: } @25
-            declaredElement: <null>
-            staticType: null
-    accessors
-      synthetic static get v @-1
-        returnType: int Function()
-''');
-  }
-
-  test_const_invalid_functionExpression_nested() async {
-    var library = await checkLibrary('''
-const v = () { return 0; } + 2;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: dynamic
-        constantInitializer
-          BinaryExpression
-            leftOperand: FunctionExpression
-              parameters: FormalParameterList
-                leftParenthesis: ( @10
-                rightParenthesis: ) @0
-              body: BlockFunctionBody
-                block: Block
-                  leftBracket: { @0
-                  rightBracket: } @25
-              declaredElement: <null>
-              staticType: null
-            operator: + @27
-            rightOperand: IntegerLiteral
-              literal: 2 @29
-              staticType: int
-            staticElement: <null>
-            staticInvokeType: null
-            staticType: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-''');
-  }
-
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
-  test_const_invalid_intLiteral() async {
-    var library = await checkLibrary(r'''
-const int x = 0x;
-''', allowErrors: true);
-    checkElementText(library, r'''
-const int x = 0;
-''');
-  }
-
-  test_const_invalid_topLevel() async {
-    var library = await checkLibrary(r'''
-const v = 1 + foo();
-int foo() => 42;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @10
-              staticType: int
-            operator: + @12
-            rightOperand: MethodInvocation
-              methodName: SimpleIdentifier
-                token: foo @14
-                staticElement: self::@function::foo
-                staticType: int Function()
-              argumentList: ArgumentList
-                leftParenthesis: ( @17
-                rightParenthesis: ) @18
-              staticInvokeType: int Function()
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-    functions
-      foo @25
-        returnType: int
-''');
-  }
-
-  test_const_invalid_typeMismatch() async {
-    var library = await checkLibrary(r'''
-const int a = 0;
-const bool b = a + 5;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @10
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @14
-            staticType: int
-      static const b @28
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: SimpleIdentifier
-              token: a @32
-              staticElement: self::@getter::a
-              staticType: int
-            operator: + @34
-            rightOperand: IntegerLiteral
-              literal: 5 @36
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: bool
-''');
-  }
-
-  test_const_invokeConstructor_generic_named() async {
-    var library = await checkLibrary(r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-const V = const C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant K @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        constructors
-          const named @26
-            periodOffset: 25
-            nameEnd: 31
-            parameters
-              requiredPositional k @34
-                type: K
-              requiredPositional v @39
-                type: V
-    topLevelVariables
-      static const V @51
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @55
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @61
-                  staticElement: self::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @62
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @63
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @68
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @74
-                type: C<int, String>
-              period: . @75
-              name: SimpleIdentifier
-                token: named @76
-                staticElement: ConstructorMember
-                  base: self::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @81
-              arguments
-                IntegerLiteral
-                  literal: 1 @82
-                  staticType: int
-                SimpleStringLiteral
-                  literal: '222' @85
-              rightParenthesis: ) @90
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_named_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = const C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @27
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @33
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @34
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @35
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @40
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @46
-                type: C<int, String>
-              period: . @47
-              name: SimpleIdentifier
-                token: named @48
-                staticElement: ConstructorMember
-                  base: a.dart::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @53
-              arguments
-                IntegerLiteral
-                  literal: 1 @54
-                  staticType: int
-                SimpleStringLiteral
-                  literal: '222' @57
-              rightParenthesis: ) @62
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_named_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @41
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @42
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @47
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @53
-                type: C<int, String>
-              period: . @54
-              name: SimpleIdentifier
-                token: named @55
-                staticElement: ConstructorMember
-                  base: a.dart::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @60
-              arguments
-                IntegerLiteral
-                  literal: 1 @61
-                  staticType: int
-                SimpleStringLiteral
-                  literal: '222' @64
-              rightParenthesis: ) @69
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_noTypeArguments() async {
-    var library = await checkLibrary(r'''
-class C<K, V> {
-  const C();
-}
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant K @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        constructors
-          const @24
-    topLevelVariables
-      static const V @37
-        type: C<dynamic, dynamic>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @41
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @47
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C<dynamic, dynamic>
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {K: dynamic, V: dynamic}
-            argumentList: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
-            staticType: C<dynamic, dynamic>
-    accessors
-      synthetic static get V @-1
-        returnType: C<dynamic, dynamic>
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed() async {
-    var library = await checkLibrary(r'''
-class C<K, V> {
-  const C();
-}
-const V = const C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant K @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        constructors
-          const @24
-    topLevelVariables
-      static const V @37
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @41
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @47
-                  staticElement: self::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @48
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @49
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @54
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @60
-                type: C<int, String>
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @61
-              rightParenthesis: ) @62
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C<K, V> {
-  const C();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = const C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @27
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @33
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @34
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @35
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @40
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @46
-                type: C<int, String>
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::•
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C<K, V> {
-  const C();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: C<int, String>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @41
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        token: int @42
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        token: String @47
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                      type: String
-                  rightBracket: > @53
-                type: C<int, String>
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::•
-                substitution: {K: int, V: String}
-            argumentList: ArgumentList
-              leftParenthesis: ( @54
-              rightParenthesis: ) @55
-            staticType: C<int, String>
-    accessors
-      synthetic static get V @-1
-        returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_named() async {
-    var library = await checkLibrary(r'''
-class C {
-  const C.named(bool a, int b, int c, {String d, double e});
-}
-const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const named @20
-            periodOffset: 19
-            nameEnd: 25
-            parameters
-              requiredPositional a @31
-                type: bool
-              requiredPositional b @38
-                type: int
-              requiredPositional c @45
-                type: int
-              optionalNamed d @56
-                type: String
-              optionalNamed e @66
-                type: double
-    topLevelVariables
-      static const V @79
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @83
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @89
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C
-              period: . @90
-              name: SimpleIdentifier
-                token: named @91
-                staticElement: self::@class::C::@constructor::named
-                staticType: null
-              staticElement: self::@class::C::@constructor::named
-            argumentList: ArgumentList
-              leftParenthesis: ( @96
-              arguments
-                BooleanLiteral
-                  literal: true @97
-                  staticType: bool
-                IntegerLiteral
-                  literal: 1 @103
-                  staticType: int
-                IntegerLiteral
-                  literal: 2 @106
-                  staticType: int
-                NamedExpression
-                  name: Label
-                    label: SimpleIdentifier
-                      token: d @109
-                      staticElement: self::@class::C::@constructor::named::@parameter::d
-                      staticType: null
-                    colon: : @110
-                  expression: SimpleStringLiteral
-                    literal: 'ccc' @112
-                NamedExpression
-                  name: Label
-                    label: SimpleIdentifier
-                      token: e @119
-                      staticElement: self::@class::C::@constructor::named::@parameter::e
-                      staticType: null
-                    colon: : @120
-                  expression: DoubleLiteral
-                    literal: 3.4 @122
-                    staticType: double
-              rightParenthesis: ) @125
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  const C.named();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = const C.named();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @27
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @33
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C
-              period: . @34
-              name: SimpleIdentifier
-                token: named @35
-                staticElement: a.dart::@class::C::@constructor::named
-                staticType: null
-              staticElement: a.dart::@class::C::@constructor::named
-            argumentList: ArgumentList
-              leftParenthesis: ( @40
-              rightParenthesis: ) @41
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  const C.named();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C
-              period: . @41
-              name: SimpleIdentifier
-                token: named @42
-                staticElement: a.dart::@class::C::@constructor::named
-                staticType: null
-              staticElement: a.dart::@class::C::@constructor::named
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved() async {
-    var library = await checkLibrary(r'''
-class C {}
-const V = const C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const V @17
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @21
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @27
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C
-              period: . @28
-              name: SimpleIdentifier
-                token: named @29
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @34
-              rightParenthesis: ) @35
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved2() async {
-    var library = await checkLibrary(r'''
-const V = const C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @6
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @10
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: C @16
-                    staticElement: <null>
-                    staticType: null
-                  period: . @17
-                  identifier: SimpleIdentifier
-                    token: named @18
-                    staticElement: <null>
-                    staticType: null
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @23
-              rightParenthesis: ) @24
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved3() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C
-              period: . @41
-              name: SimpleIdentifier
-                token: named @42
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved4() async {
-    addLibrarySource('/a.dart', '');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: <null>
-                    staticType: null
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              period: . @41
-              name: SimpleIdentifier
-                token: named @42
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved5() async {
-    var library = await checkLibrary(r'''
-const V = const p.C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @6
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @10
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @16
-                    staticElement: <null>
-                    staticType: null
-                  period: . @17
-                  identifier: SimpleIdentifier
-                    token: C @18
-                    staticElement: <null>
-                    staticType: null
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              period: . @19
-              name: SimpleIdentifier
-                token: named @20
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @25
-              rightParenthesis: ) @26
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved6() async {
-    var library = await checkLibrary(r'''
-class C<T> {}
-const V = const C.named();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const V @20
-        type: C<dynamic>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @24
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @30
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C<dynamic>
-              period: . @31
-              name: SimpleIdentifier
-                token: named @32
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @37
-              rightParenthesis: ) @38
-            staticType: C<dynamic>
-    accessors
-      synthetic static get V @-1
-        returnType: C<dynamic>
-''');
-  }
-
-  test_const_invokeConstructor_unnamed() async {
-    var library = await checkLibrary(r'''
-class C {
-  const C();
-}
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const @18
-    topLevelVariables
-      static const V @31
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @35
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @41
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C
-              staticElement: self::@class::C::@constructor::•
-            argumentList: ArgumentList
-              leftParenthesis: ( @42
-              rightParenthesis: ) @43
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  const C();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @27
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @33
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C
-              staticElement: a.dart::@class::C::@constructor::•
-            argumentList: ArgumentList
-              leftParenthesis: ( @34
-              rightParenthesis: ) @35
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  const C();
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C
-              staticElement: a.dart::@class::C::@constructor::•
-            argumentList: ArgumentList
-              leftParenthesis: ( @41
-              rightParenthesis: ) @42
-            staticType: C
-    accessors
-      synthetic static get V @-1
-        returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved() async {
-    var library = await checkLibrary(r'''
-const V = const C();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @6
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @10
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @16
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @17
-              rightParenthesis: ) @18
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved2() async {
-    addLibrarySource('/a.dart', '');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @32
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @38
-                    staticElement: self::@prefix::p
-                    staticType: null
-                  period: . @39
-                  identifier: SimpleIdentifier
-                    token: C @40
-                    staticElement: <null>
-                    staticType: null
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @41
-              rightParenthesis: ) @42
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved3() async {
-    var library = await checkLibrary(r'''
-const V = const p.C();
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @6
-        type: dynamic
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @10
-            constructorName: ConstructorName
-              type: NamedType
-                name: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @16
-                    staticElement: <null>
-                    staticType: null
-                  period: . @17
-                  identifier: SimpleIdentifier
-                    token: C @18
-                    staticElement: <null>
-                    staticType: null
-                  staticElement: <null>
-                  staticType: null
-                type: dynamic
-              staticElement: <null>
-            argumentList: ArgumentList
-              leftParenthesis: ( @19
-              rightParenthesis: ) @20
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_isExpression() async {
-    var library = await checkLibrary('''
-const a = 0;
-const b = a is int;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static const b @19
-        type: bool
-        constantInitializer
-          IsExpression
-            expression: SimpleIdentifier
-              token: a @23
-              staticElement: self::@getter::a
-              staticType: int
-            isOperator: is @25
-            type: NamedType
-              name: SimpleIdentifier
-                token: int @28
-                staticElement: dart:core::@class::int
-                staticType: null
-              type: int
-            staticType: bool
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: bool
-''');
-  }
-
-  test_const_length_ofClassConstField() async {
-    var library = await checkLibrary(r'''
-class C {
-  static const String F = '';
-}
-const int v = C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const F @32
-            type: String
-            constantInitializer
-              SimpleStringLiteral
-                literal: '' @36
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get F @-1
-            returnType: String
-    topLevelVariables
-      static const v @52
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @56
-                staticElement: self::@class::C
-                staticType: null
-              period: . @57
-              identifier: SimpleIdentifier
-                token: F @58
-                staticElement: self::@class::C::@getter::F
-                staticType: String
-              staticElement: self::@class::C::@getter::F
-              staticType: String
-            operator: . @59
-            propertyName: SimpleIdentifier
-              token: length @60
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofClassConstField_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static const String F = '';
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const int v = C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const v @27
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @31
-                staticElement: a.dart::@class::C
-                staticType: null
-              period: . @32
-              identifier: SimpleIdentifier
-                token: F @33
-                staticElement: a.dart::@class::C::@getter::F
-                staticType: String
-              staticElement: a.dart::@class::C::@getter::F
-              staticType: String
-            operator: . @34
-            propertyName: SimpleIdentifier
-              token: length @35
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofClassConstField_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static const String F = '';
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const int v = p.C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const v @32
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @36
-                  staticElement: self::@prefix::p
-                  staticType: null
-                period: . @37
-                identifier: SimpleIdentifier
-                  token: C @38
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                staticElement: a.dart::@class::C
-                staticType: null
-              operator: . @39
-              propertyName: SimpleIdentifier
-                token: F @40
-                staticElement: a.dart::@class::C::@getter::F
-                staticType: String
-              staticType: String
-            operator: . @41
-            propertyName: SimpleIdentifier
-              token: length @42
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofStringLiteral() async {
-    var library = await checkLibrary(r'''
-const v = 'abc'.length;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: SimpleStringLiteral
-              literal: 'abc' @10
-            operator: . @15
-            propertyName: SimpleIdentifier
-              token: length @16
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable() async {
-    var library = await checkLibrary(r'''
-const String S = 'abc';
-const v = S.length;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const S @13
-        type: String
-        constantInitializer
-          SimpleStringLiteral
-            literal: 'abc' @17
-      static const v @30
-        type: int
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: S @34
-              staticElement: self::@getter::S
-              staticType: String
-            period: . @35
-            identifier: SimpleIdentifier
-              token: length @36
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticElement: dart:core::@class::String::@getter::length
-            staticType: int
-    accessors
-      synthetic static get S @-1
-        returnType: String
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable_imported() async {
-    addLibrarySource('/a.dart', r'''
-const String S = 'abc';
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const v = S.length;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const v @23
-        type: int
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: S @27
-              staticElement: a.dart::@getter::S
-              staticType: String
-            period: . @28
-            identifier: SimpleIdentifier
-              token: length @29
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticElement: dart:core::@class::String::@getter::length
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-const String S = 'abc';
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const v = p.S.length;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const v @28
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @32
-                staticElement: self::@prefix::p
-                staticType: null
-              period: . @33
-              identifier: SimpleIdentifier
-                token: S @34
-                staticElement: a.dart::@getter::S
-                staticType: String
-              staticElement: a.dart::@getter::S
-              staticType: String
-            operator: . @35
-            propertyName: SimpleIdentifier
-              token: length @36
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_const_length_staticMethod() async {
-    var library = await checkLibrary(r'''
-class C {
-  static int length() => 42;
-}
-const v = C.length;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          static length @23
-            returnType: int
-    topLevelVariables
-      static const v @47
-        type: int Function()
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @51
-              staticElement: self::@class::C
-              staticType: null
-            period: . @52
-            identifier: SimpleIdentifier
-              token: length @53
-              staticElement: self::@class::C::@method::length
-              staticType: int Function()
-            staticElement: self::@class::C::@method::length
-            staticType: int Function()
-    accessors
-      synthetic static get v @-1
-        returnType: int Function()
-''');
-  }
-
-  test_const_list_if() async {
-    var library = await checkLibrary('''
-const Object x = const <int>[if (true) 1];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          ListLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: [ @28
-            elements
-              IfElement
-                ifKeyword: if @29
-                leftParenthesis: ( @32
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                rightParenthesis: ) @37
-                thenElement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-            rightBracket: ] @40
-            staticType: List<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_list_if_else() async {
-    var library = await checkLibrary('''
-const Object x = const <int>[if (true) 1 else 2];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          ListLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: [ @28
-            elements
-              IfElement
-                ifKeyword: if @29
-                leftParenthesis: ( @32
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                rightParenthesis: ) @37
-                thenElement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-                elseKeyword: else @41
-                elseElement: IntegerLiteral
-                  literal: 2 @46
-                  staticType: int
-            rightBracket: ] @47
-            staticType: List<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_list_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await checkLibrary('''
-const Object x = const [1];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          ListLiteral
-            constKeyword: const @17
-            leftBracket: [ @23
-            elements
-              IntegerLiteral
-                literal: 1 @24
-                staticType: int
-            rightBracket: ] @25
-            staticType: List<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_list_spread() async {
-    var library = await checkLibrary('''
-const Object x = const <int>[...<int>[1]];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          ListLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: [ @28
-            elements
-              SpreadElement
-                spreadOperator: ... @29
-                expression: ListLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @32
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @33
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @36
-                  leftBracket: [ @37
-                  elements
-                    IntegerLiteral
-                      literal: 1 @38
-                      staticType: int
-                  rightBracket: ] @39
-                  staticType: List<int>
-            rightBracket: ] @40
-            staticType: List<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_list_spread_null_aware() async {
-    var library = await checkLibrary('''
-const Object x = const <int>[...?<int>[1]];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          ListLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: [ @28
-            elements
-              SpreadElement
-                spreadOperator: ...? @29
-                expression: ListLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @33
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @34
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @37
-                  leftBracket: [ @38
-                  elements
-                    IntegerLiteral
-                      literal: 1 @39
-                      staticType: int
-                  rightBracket: ] @40
-                  staticType: List<int>
-            rightBracket: ] @41
-            staticType: List<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_map_if() async {
-    var library = await checkLibrary('''
-const Object x = const <int, int>{if (true) 1: 2};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @29
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @32
-            leftBracket: { @33
-            elements
-              IfElement
-                ifKeyword: if @34
-                leftParenthesis: ( @37
-                condition: BooleanLiteral
-                  literal: true @38
-                  staticType: bool
-                rightParenthesis: ) @42
-                thenElement: SetOrMapLiteral
-                  key: IntegerLiteral
-                    literal: 1 @44
-                    staticType: int
-                  separator: : @45
-                  value: IntegerLiteral
-                    literal: 2 @47
-                    staticType: int
-            rightBracket: } @48
-            isMap: true
-            staticType: Map<int, int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_map_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await checkLibrary('''
-const Object x = const {1: 1.0};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            leftBracket: { @23
-            elements
-              SetOrMapLiteral
-                key: IntegerLiteral
-                  literal: 1 @24
-                  staticType: int
-                separator: : @25
-                value: DoubleLiteral
-                  literal: 1.0 @27
-                  staticType: double
-            rightBracket: } @30
-            isMap: true
-            staticType: Map<int, double>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_map_spread() async {
-    var library = await checkLibrary('''
-const Object x = const <int, int>{...<int, int>{1: 2}};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @29
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @32
-            leftBracket: { @33
-            elements
-              SpreadElement
-                spreadOperator: ... @34
-                expression: SetOrMapLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @37
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @38
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @43
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @46
-                  leftBracket: { @47
-                  elements
-                    SetOrMapLiteral
-                      key: IntegerLiteral
-                        literal: 1 @48
-                        staticType: int
-                      separator: : @49
-                      value: IntegerLiteral
-                        literal: 2 @51
-                        staticType: int
-                  rightBracket: } @52
-                  isMap: true
-                  staticType: Map<int, int>
-            rightBracket: } @53
-            isMap: true
-            staticType: Map<int, int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_map_spread_null_aware() async {
-    var library = await checkLibrary('''
-const Object x = const <int, int>{...?<int, int>{1: 2}};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @29
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @32
-            leftBracket: { @33
-            elements
-              SpreadElement
-                spreadOperator: ...? @34
-                expression: SetOrMapLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @38
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @39
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @44
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @47
-                  leftBracket: { @48
-                  elements
-                    SetOrMapLiteral
-                      key: IntegerLiteral
-                        literal: 1 @49
-                        staticType: int
-                      separator: : @50
-                      value: IntegerLiteral
-                        literal: 2 @52
-                        staticType: int
-                  rightBracket: } @53
-                  isMap: true
-                  staticType: Map<int, int>
-            rightBracket: } @54
-            isMap: true
-            staticType: Map<int, int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_methodInvocation() async {
-    var library = await checkLibrary(r'''
-T f<T>(T a) => a;
-const b = f<int>(0);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const b @24
-        type: int
-        constantInitializer
-          MethodInvocation
-            methodName: SimpleIdentifier
-              token: f @28
-              staticElement: self::@function::f
-              staticType: T Function<T>(T)
-            typeArguments: TypeArgumentList
-              leftBracket: < @29
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @30
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @33
-            argumentList: ArgumentList
-              leftParenthesis: ( @34
-              arguments
-                IntegerLiteral
-                  literal: 0 @35
-                  staticType: int
-              rightParenthesis: ) @36
-            staticInvokeType: int Function(int)
-            staticType: int
-            typeArgumentTypes
-              int
-    accessors
-      synthetic static get b @-1
-        returnType: int
-    functions
-      f @2
-        typeParameters
-          covariant T @4
-        parameters
-          requiredPositional a @9
-            type: T
-        returnType: T
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
-    var library = await checkLibrary(r'''
-class C {
-  final x;
-  const C({this.x: foo});
-}
-int foo() => 42;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            parameters
-              optionalNamed final this.x @37
-                type: dynamic
-                constantInitializer
-                  SimpleIdentifier
-                    token: foo @40
-                    staticElement: self::@function::foo
-                    staticType: int Function()
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-    functions
-      foo @53
-        returnType: int
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_named() async {
-    var library = await checkLibrary(r'''
-class C {
-  final x;
-  const C({this.x: 1 + 2});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            parameters
-              optionalNamed final this.x @37
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @40
-                      staticType: int
-                    operator: + @42
-                    rightOperand: IntegerLiteral
-                      literal: 2 @44
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_positional() async {
-    var library = await checkLibrary(r'''
-class C {
-  final x;
-  const C([this.x = 1 + 2]);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @18
-            type: dynamic
-        constructors
-          const @29
-            parameters
-              optionalPositional final this.x @37
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @41
-                      staticType: int
-                    operator: + @43
-                    rightOperand: IntegerLiteral
-                      literal: 2 @45
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_const_parameterDefaultValue_normal() async {
-    var library = await checkLibrary(r'''
-class C {
-  const C.positional([p = 1 + 2]);
-  const C.named({p: 1 + 2});
-  void methodPositional([p = 1 + 2]) {}
-  void methodPositionalWithoutDefault([p]) {}
-  void methodNamed({p: 1 + 2}) {}
-  void methodNamedWithoutDefault({p}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          const positional @20
-            periodOffset: 19
-            nameEnd: 30
-            parameters
-              optionalPositional p @32
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @36
-                      staticType: int
-                    operator: + @38
-                    rightOperand: IntegerLiteral
-                      literal: 2 @40
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-          const named @55
-            periodOffset: 54
-            nameEnd: 60
-            parameters
-              optionalNamed p @62
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @65
-                      staticType: int
-                    operator: + @67
-                    rightOperand: IntegerLiteral
-                      literal: 2 @69
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-        methods
-          methodPositional @81
-            parameters
-              optionalPositional p @99
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @103
-                      staticType: int
-                    operator: + @105
-                    rightOperand: IntegerLiteral
-                      literal: 2 @107
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-            returnType: void
-          methodPositionalWithoutDefault @121
-            parameters
-              optionalPositional p @153
-                type: dynamic
-            returnType: void
-          methodNamed @167
-            parameters
-              optionalNamed p @180
-                type: dynamic
-                constantInitializer
-                  BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @183
-                      staticType: int
-                    operator: + @185
-                    rightOperand: IntegerLiteral
-                      literal: 2 @187
-                      staticType: int
-                    staticElement: dart:core::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-            returnType: void
-          methodNamedWithoutDefault @201
-            parameters
-              optionalNamed p @228
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_const_postfixExpression_increment() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-const b = a++;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static const b @19
-        type: int
-        constantInitializer
-          PostfixExpression
-            operand: SimpleIdentifier
-              token: a @23
-              staticElement: <null>
-              staticType: null
-            operator: ++ @24
-            readElement: self::@getter::a
-            readType: int
-            writeElement: self::@getter::a
-            writeType: dynamic
-            staticElement: dart:core::@class::num::@method::+
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_postfixExpression_nullCheck() async {
-    var library = await checkLibrary(r'''
-const int? a = 0;
-const b = a!;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @11
-        type: int?
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @15
-            staticType: int
-      static const b @24
-        type: int
-        constantInitializer
-          PostfixExpression
-            operand: SimpleIdentifier
-              token: a @28
-              staticElement: self::@getter::a
-              staticType: int?
-            operator: ! @29
-            staticElement: <null>
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int?
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_prefixExpression_class_unaryMinus() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-const b = -a;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static const b @19
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: - @23
-            operand: SimpleIdentifier
-              token: a @24
-              staticElement: self::@getter::a
-              staticType: int
-            staticElement: dart:core::@class::int::@method::unary-
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_prefixExpression_extension_unaryMinus() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', r'''
-extension E on Object {
-  int operator -() => 0;
-}
-const a = const Object();
-''');
-    var library = await checkLibrary('''
-import 'a.dart';
-const b = -a;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart
-  definingUnit
-    topLevelVariables
-      static const b @23
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: - @27
-            operand: SimpleIdentifier
-              token: a @28
-              staticElement: package:test/a.dart::@getter::a
-              staticType: Object
-            staticElement: package:test/a.dart::@extension::E::@method::unary-
-            staticType: int
-    accessors
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_prefixExpression_increment() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-const b = ++a;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static const b @19
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: ++ @23
-            operand: SimpleIdentifier
-              token: a @25
-              staticElement: <null>
-              staticType: null
-            readElement: self::@getter::a
-            readType: int
-            writeElement: self::@getter::a
-            writeType: dynamic
-            staticElement: dart:core::@class::num::@method::+
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get b @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_staticField() async {
-    var library = await checkLibrary(r'''
-class C {
-  static const int F = 42;
-}
-const V = C.F;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const F @29
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @33
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get F @-1
-            returnType: int
-    topLevelVariables
-      static const V @45
-        type: int
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @49
-              staticElement: self::@class::C
-              staticType: null
-            period: . @50
-            identifier: SimpleIdentifier
-              token: F @51
-              staticElement: self::@class::C::@getter::F
-              staticType: int
-            staticElement: self::@class::C::@getter::F
-            staticType: int
-    accessors
-      synthetic static get V @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_staticField_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static const int F = 42;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = C.F;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: int
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @27
-              staticElement: a.dart::@class::C
-              staticType: null
-            period: . @28
-            identifier: SimpleIdentifier
-              token: F @29
-              staticElement: a.dart::@class::C::@getter::F
-              staticType: int
-            staticElement: a.dart::@class::C::@getter::F
-            staticType: int
-    accessors
-      synthetic static get V @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_staticField_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static const int F = 42;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = p.C.F;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @32
-                staticElement: self::@prefix::p
-                staticType: null
-              period: . @33
-              identifier: SimpleIdentifier
-                token: C @34
-                staticElement: a.dart::@class::C
-                staticType: null
-              staticElement: a.dart::@class::C
-              staticType: null
-            operator: . @35
-            propertyName: SimpleIdentifier
-              token: F @36
-              staticElement: a.dart::@class::C::@getter::F
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get V @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_staticMethod() async {
-    var library = await checkLibrary(r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-const V = C.m;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          static m @23
-            parameters
-              requiredPositional a @29
-                type: int
-              requiredPositional b @39
-                type: String
-            returnType: int
-    topLevelVariables
-      static const V @57
-        type: int Function(int, String)
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @61
-              staticElement: self::@class::C
-              staticType: null
-            period: . @62
-            identifier: SimpleIdentifier
-              token: m @63
-              staticElement: self::@class::C::@method::m
-              staticType: int Function(int, String)
-            staticElement: self::@class::C::@method::m
-            staticType: int Function(int, String)
-    accessors
-      synthetic static get V @-1
-        returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = C.m;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: int Function(int, String)
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @27
-              staticElement: a.dart::@class::C
-              staticType: null
-            period: . @28
-            identifier: SimpleIdentifier
-              token: m @29
-              staticElement: a.dart::@class::C::@method::m
-              staticType: int Function(int, String)
-            staticElement: a.dart::@class::C::@method::m
-            staticType: int Function(int, String)
-    accessors
-      synthetic static get V @-1
-        returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = p.C.m;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: int Function(int, String)
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @32
-                staticElement: self::@prefix::p
-                staticType: null
-              period: . @33
-              identifier: SimpleIdentifier
-                token: C @34
-                staticElement: a.dart::@class::C
-                staticType: null
-              staticElement: a.dart::@class::C
-              staticType: null
-            operator: . @35
-            propertyName: SimpleIdentifier
-              token: m @36
-              staticElement: a.dart::@class::C::@method::m
-              staticType: int Function(int, String)
-            staticType: int Function(int, String)
-    accessors
-      synthetic static get V @-1
-        returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_ofExtension() async {
-    var library = await checkLibrary('''
-class A {}
-extension E on A {
-  static void f() {}
-}
-const x = E.f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    extensions
-      E @21
-        extendedType: A
-        methods
-          static f @44
-            returnType: void
-    topLevelVariables
-      static const x @59
-        type: void Function()
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: E @63
-              staticElement: self::@extension::E
-              staticType: null
-            period: . @64
-            identifier: SimpleIdentifier
-              token: f @65
-              staticElement: self::@extension::E::@method::f
-              staticType: void Function()
-            staticElement: self::@extension::E::@method::f
-            staticType: void Function()
-    accessors
-      synthetic static get x @-1
-        returnType: void Function()
-''');
-  }
-
-  test_const_reference_topLevelFunction() async {
-    var library = await checkLibrary(r'''
-foo() {}
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @15
-        type: dynamic Function()
-        constantInitializer
-          SimpleIdentifier
-            token: foo @19
-            staticElement: self::@function::foo
-            staticType: dynamic Function()
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic Function()
-    functions
-      foo @0
-        returnType: dynamic
-''');
-  }
-
-  test_const_reference_topLevelFunction_generic() async {
-    var library = await checkLibrary(r'''
-R foo<P, R>(P p) {}
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @26
-        type: R Function<P, R>(P)
-        constantInitializer
-          SimpleIdentifier
-            token: foo @30
-            staticElement: self::@function::foo
-            staticType: R Function<P, R>(P)
-    accessors
-      synthetic static get V @-1
-        returnType: R Function<P, R>(P)
-    functions
-      foo @2
-        typeParameters
-          covariant P @6
-          covariant R @9
-        parameters
-          requiredPositional p @14
-            type: P
-        returnType: R
-''');
-  }
-
-  test_const_reference_topLevelFunction_imported() async {
-    addLibrarySource('/a.dart', r'''
-foo() {}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const V @23
-        type: dynamic Function()
-        constantInitializer
-          SimpleIdentifier
-            token: foo @27
-            staticElement: a.dart::@function::foo
-            staticType: dynamic Function()
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic Function()
-''');
-  }
-
-  test_const_reference_topLevelFunction_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-foo() {}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const V = p.foo;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const V @28
-        type: dynamic Function()
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: p @32
-              staticElement: self::@prefix::p
-              staticType: null
-            period: . @33
-            identifier: SimpleIdentifier
-              token: foo @34
-              staticElement: a.dart::@function::foo
-              staticType: dynamic Function()
-            staticElement: a.dart::@function::foo
-            staticType: dynamic Function()
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic Function()
-''');
-  }
-
-  test_const_reference_topLevelVariable() async {
-    var library = await checkLibrary(r'''
-const A = 1;
-const B = A + 2;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const A @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 1 @10
-            staticType: int
-      static const B @19
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: SimpleIdentifier
-              token: A @23
-              staticElement: self::@getter::A
-              staticType: int
-            operator: + @25
-            rightOperand: IntegerLiteral
-              literal: 2 @27
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-    accessors
-      synthetic static get A @-1
-        returnType: int
-      synthetic static get B @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_topLevelVariable_imported() async {
-    addLibrarySource('/a.dart', r'''
-const A = 1;
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const B = A + 2;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const B @23
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: SimpleIdentifier
-              token: A @27
-              staticElement: a.dart::@getter::A
-              staticType: int
-            operator: + @29
-            rightOperand: IntegerLiteral
-              literal: 2 @31
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-    accessors
-      synthetic static get B @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_topLevelVariable_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-const A = 1;
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const B = p.A + 2;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const B @28
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @32
-                staticElement: self::@prefix::p
-                staticType: null
-              period: . @33
-              identifier: SimpleIdentifier
-                token: A @34
-                staticElement: a.dart::@getter::A
-                staticType: int
-              staticElement: a.dart::@getter::A
-              staticType: int
-            operator: + @36
-            rightOperand: IntegerLiteral
-              literal: 2 @38
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-    accessors
-      synthetic static get B @-1
-        returnType: int
-''');
-  }
-
-  test_const_reference_type() async {
-    var library = await checkLibrary(r'''
-class C {}
-class D<T> {}
-enum E {a, b, c}
-typedef F(int a, String b);
-const vDynamic = dynamic;
-const vNull = Null;
-const vObject = Object;
-const vClass = C;
-const vGenericClass = D;
-const vEnum = E;
-const vFunctionTypeAlias = F;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-      class D @17
-        typeParameters
-          covariant T @19
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    enums
-      enum E @30
-        supertype: Enum
-        fields
-          static const enumConstant a @33
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @36
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant c @39
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    typeAliases
-      functionTypeAliasBased F @50
-        aliasedType: dynamic Function(int, String)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @56
-              type: int
-            requiredPositional b @66
-              type: String
-          returnType: dynamic
-    topLevelVariables
-      static const vDynamic @76
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: dynamic @87
-            staticElement: dynamic@-1
-            staticType: Type
-      static const vNull @102
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: Null @110
-            staticElement: dart:core::@class::Null
-            staticType: Type
-      static const vObject @122
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: Object @132
-            staticElement: dart:core::@class::Object
-            staticType: Type
-      static const vClass @146
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: C @155
-            staticElement: self::@class::C
-            staticType: Type
-      static const vGenericClass @164
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: D @180
-            staticElement: self::@class::D
-            staticType: Type
-      static const vEnum @189
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: E @197
-            staticElement: self::@enum::E
-            staticType: Type
-      static const vFunctionTypeAlias @206
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: F @227
-            staticElement: self::@typeAlias::F
-            staticType: Type
-    accessors
-      synthetic static get vDynamic @-1
-        returnType: Type
-      synthetic static get vNull @-1
-        returnType: Type
-      synthetic static get vObject @-1
-        returnType: Type
-      synthetic static get vClass @-1
-        returnType: Type
-      synthetic static get vGenericClass @-1
-        returnType: Type
-      synthetic static get vEnum @-1
-        returnType: Type
-      synthetic static get vFunctionTypeAlias @-1
-        returnType: Type
-''');
-  }
-
-  test_const_reference_type_functionType() async {
-    var library = await checkLibrary(r'''
-typedef F();
-class C {
-  final f = <F>[];
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @19
-        fields
-          final f @31
-            type: List<dynamic Function()>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: List<dynamic Function()>
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''');
-  }
-
-  test_const_reference_type_imported() async {
-    addLibrarySource('/a.dart', r'''
-class C {}
-enum E {a, b, c}
-typedef F(int a, String b);
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const vClass = C;
-const vEnum = E;
-const vFunctionTypeAlias = F;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const vClass @23
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: C @32
-            staticElement: a.dart::@class::C
-            staticType: Type
-      static const vEnum @41
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: E @49
-            staticElement: a.dart::@enum::E
-            staticType: Type
-      static const vFunctionTypeAlias @58
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: F @79
-            staticElement: a.dart::@typeAlias::F
-            staticType: Type
-    accessors
-      synthetic static get vClass @-1
-        returnType: Type
-      synthetic static get vEnum @-1
-        returnType: Type
-      synthetic static get vFunctionTypeAlias @-1
-        returnType: Type
-''');
-  }
-
-  test_const_reference_type_imported_withPrefix() async {
-    addLibrarySource('/a.dart', r'''
-class C {}
-enum E {a, b, c}
-typedef F(int a, String b);
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const vClass = p.C;
-const vEnum = p.E;
-const vFunctionTypeAlias = p.F;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const vClass @28
-        type: Type
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: p @37
-              staticElement: self::@prefix::p
-              staticType: null
-            period: . @38
-            identifier: SimpleIdentifier
-              token: C @39
-              staticElement: a.dart::@class::C
-              staticType: Type
-            staticElement: a.dart::@class::C
-            staticType: Type
-      static const vEnum @48
-        type: Type
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: p @56
-              staticElement: self::@prefix::p
-              staticType: null
-            period: . @57
-            identifier: SimpleIdentifier
-              token: E @58
-              staticElement: a.dart::@enum::E
-              staticType: Type
-            staticElement: a.dart::@enum::E
-            staticType: Type
-      static const vFunctionTypeAlias @67
-        type: Type
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: p @88
-              staticElement: self::@prefix::p
-              staticType: null
-            period: . @89
-            identifier: SimpleIdentifier
-              token: F @90
-              staticElement: a.dart::@typeAlias::F
-              staticType: Type
-            staticElement: a.dart::@typeAlias::F
-            staticType: Type
-    accessors
-      synthetic static get vClass @-1
-        returnType: Type
-      synthetic static get vEnum @-1
-        returnType: Type
-      synthetic static get vFunctionTypeAlias @-1
-        returnType: Type
-''');
-  }
-
-  test_const_reference_type_typeParameter() async {
-    var library = await checkLibrary(r'''
-class C<T> {
-  final f = <T>[];
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          final f @21
-            type: List<T>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: List<T>
-''');
-  }
-
-  test_const_reference_unresolved_prefix0() async {
-    var library = await checkLibrary(r'''
-const V = foo;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const V @6
-        type: dynamic
-        constantInitializer
-          SimpleIdentifier
-            token: foo @10
-            staticElement: <null>
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_reference_unresolved_prefix1() async {
-    var library = await checkLibrary(r'''
-class C {}
-const V = C.foo;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const V @17
-        type: dynamic
-        constantInitializer
-          PrefixedIdentifier
-            prefix: SimpleIdentifier
-              token: C @21
-              staticElement: self::@class::C
-              staticType: null
-            period: . @22
-            identifier: SimpleIdentifier
-              token: foo @23
-              staticElement: <null>
-              staticType: dynamic
-            staticElement: <null>
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_reference_unresolved_prefix2() async {
-    addLibrarySource('/foo.dart', '''
-class C {}
-''');
-    var library = await checkLibrary(r'''
-import 'foo.dart' as p;
-const V = p.C.foo;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as p @21
-  definingUnit
-    topLevelVariables
-      static const V @30
-        type: dynamic
-        constantInitializer
-          PropertyAccess
-            target: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @34
-                staticElement: self::@prefix::p
-                staticType: null
-              period: . @35
-              identifier: SimpleIdentifier
-                token: C @36
-                staticElement: foo.dart::@class::C
-                staticType: null
-              staticElement: foo.dart::@class::C
-              staticType: null
-            operator: . @37
-            propertyName: SimpleIdentifier
-              token: foo @38
-              staticElement: <null>
-              staticType: dynamic
-            staticType: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_set_if() async {
-    var library = await checkLibrary('''
-const Object x = const <int>{if (true) 1};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: { @28
-            elements
-              IfElement
-                ifKeyword: if @29
-                leftParenthesis: ( @32
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                rightParenthesis: ) @37
-                thenElement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-            rightBracket: } @40
-            isMap: false
-            staticType: Set<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_set_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await checkLibrary('''
-const Object x = const {1};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            leftBracket: { @23
-            elements
-              IntegerLiteral
-                literal: 1 @24
-                staticType: int
-            rightBracket: } @25
-            isMap: false
-            staticType: Set<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_set_spread() async {
-    var library = await checkLibrary('''
-const Object x = const <int>{...<int>{1}};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: { @28
-            elements
-              SpreadElement
-                spreadOperator: ... @29
-                expression: SetOrMapLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @32
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @33
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @36
-                  leftBracket: { @37
-                  elements
-                    IntegerLiteral
-                      literal: 1 @38
-                      staticType: int
-                  rightBracket: } @39
-                  isMap: false
-                  staticType: Set<int>
-            rightBracket: } @40
-            isMap: false
-            staticType: Set<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_set_spread_null_aware() async {
-    var library = await checkLibrary('''
-const Object x = const <int>{...?<int>{1}};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const x @13
-        type: Object
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @17
-            typeArguments: TypeArgumentList
-              leftBracket: < @23
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @24
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @27
-            leftBracket: { @28
-            elements
-              SpreadElement
-                spreadOperator: ...? @29
-                expression: SetOrMapLiteral
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @33
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @34
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                    rightBracket: > @37
-                  leftBracket: { @38
-                  elements
-                    IntegerLiteral
-                      literal: 1 @39
-                      staticType: int
-                  rightBracket: } @40
-                  isMap: false
-                  staticType: Set<int>
-            rightBracket: } @41
-            isMap: false
-            staticType: Set<int>
-    accessors
-      synthetic static get x @-1
-        returnType: Object
-''');
-  }
-
-  test_const_topLevel_binary() async {
-    var library = await checkLibrary(r'''
-const vEqual = 1 == 2;
-const vAnd = true && false;
-const vOr = false || true;
-const vBitXor = 1 ^ 2;
-const vBitAnd = 1 & 2;
-const vBitOr = 1 | 2;
-const vBitShiftLeft = 1 << 2;
-const vBitShiftRight = 1 >> 2;
-const vAdd = 1 + 2;
-const vSubtract = 1 - 2;
-const vMiltiply = 1 * 2;
-const vDivide = 1 / 2;
-const vFloorDivide = 1 ~/ 2;
-const vModulo = 1 % 2;
-const vGreater = 1 > 2;
-const vGreaterEqual = 1 >= 2;
-const vLess = 1 < 2;
-const vLessEqual = 1 <= 2;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vEqual @6
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @15
-              staticType: int
-            operator: == @17
-            rightOperand: IntegerLiteral
-              literal: 2 @20
-              staticType: int
-            staticElement: dart:core::@class::num::@method::==
-            staticInvokeType: bool Function(Object)
-            staticType: bool
-      static const vAnd @29
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: BooleanLiteral
-              literal: true @36
-              staticType: bool
-            operator: && @41
-            rightOperand: BooleanLiteral
-              literal: false @44
-              staticType: bool
-            staticElement: <null>
-            staticInvokeType: null
-            staticType: bool
-      static const vOr @57
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: BooleanLiteral
-              literal: false @63
-              staticType: bool
-            operator: || @69
-            rightOperand: BooleanLiteral
-              literal: true @72
-              staticType: bool
-            staticElement: <null>
-            staticInvokeType: null
-            staticType: bool
-      static const vBitXor @84
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @94
-              staticType: int
-            operator: ^ @96
-            rightOperand: IntegerLiteral
-              literal: 2 @98
-              staticType: int
-            staticElement: dart:core::@class::int::@method::^
-            staticInvokeType: int Function(int)
-            staticType: int
-      static const vBitAnd @107
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @117
-              staticType: int
-            operator: & @119
-            rightOperand: IntegerLiteral
-              literal: 2 @121
-              staticType: int
-            staticElement: dart:core::@class::int::@method::&
-            staticInvokeType: int Function(int)
-            staticType: int
-      static const vBitOr @130
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @139
-              staticType: int
-            operator: | @141
-            rightOperand: IntegerLiteral
-              literal: 2 @143
-              staticType: int
-            staticElement: dart:core::@class::int::@method::|
-            staticInvokeType: int Function(int)
-            staticType: int
-      static const vBitShiftLeft @152
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @168
-              staticType: int
-            operator: << @170
-            rightOperand: IntegerLiteral
-              literal: 2 @173
-              staticType: int
-            staticElement: dart:core::@class::int::@method::<<
-            staticInvokeType: int Function(int)
-            staticType: int
-      static const vBitShiftRight @182
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @199
-              staticType: int
-            operator: >> @201
-            rightOperand: IntegerLiteral
-              literal: 2 @204
-              staticType: int
-            staticElement: dart:core::@class::int::@method::>>
-            staticInvokeType: int Function(int)
-            staticType: int
-      static const vAdd @213
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @220
-              staticType: int
-            operator: + @222
-            rightOperand: IntegerLiteral
-              literal: 2 @224
-              staticType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticInvokeType: num Function(num)
-            staticType: int
-      static const vSubtract @233
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @245
-              staticType: int
-            operator: - @247
-            rightOperand: IntegerLiteral
-              literal: 2 @249
-              staticType: int
-            staticElement: dart:core::@class::num::@method::-
-            staticInvokeType: num Function(num)
-            staticType: int
-      static const vMiltiply @258
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @270
-              staticType: int
-            operator: * @272
-            rightOperand: IntegerLiteral
-              literal: 2 @274
-              staticType: int
-            staticElement: dart:core::@class::num::@method::*
-            staticInvokeType: num Function(num)
-            staticType: int
-      static const vDivide @283
-        type: double
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @293
-              staticType: int
-            operator: / @295
-            rightOperand: IntegerLiteral
-              literal: 2 @297
-              staticType: int
-            staticElement: dart:core::@class::num::@method::/
-            staticInvokeType: double Function(num)
-            staticType: double
-      static const vFloorDivide @306
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @321
-              staticType: int
-            operator: ~/ @323
-            rightOperand: IntegerLiteral
-              literal: 2 @326
-              staticType: int
-            staticElement: dart:core::@class::num::@method::~/
-            staticInvokeType: int Function(num)
-            staticType: int
-      static const vModulo @335
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @345
-              staticType: int
-            operator: % @347
-            rightOperand: IntegerLiteral
-              literal: 2 @349
-              staticType: int
-            staticElement: dart:core::@class::num::@method::%
-            staticInvokeType: num Function(num)
-            staticType: int
-      static const vGreater @358
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @369
-              staticType: int
-            operator: > @371
-            rightOperand: IntegerLiteral
-              literal: 2 @373
-              staticType: int
-            staticElement: dart:core::@class::num::@method::>
-            staticInvokeType: bool Function(num)
-            staticType: bool
-      static const vGreaterEqual @382
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @398
-              staticType: int
-            operator: >= @400
-            rightOperand: IntegerLiteral
-              literal: 2 @403
-              staticType: int
-            staticElement: dart:core::@class::num::@method::>=
-            staticInvokeType: bool Function(num)
-            staticType: bool
-      static const vLess @412
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @420
-              staticType: int
-            operator: < @422
-            rightOperand: IntegerLiteral
-              literal: 2 @424
-              staticType: int
-            staticElement: dart:core::@class::num::@method::<
-            staticInvokeType: bool Function(num)
-            staticType: bool
-      static const vLessEqual @433
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @446
-              staticType: int
-            operator: <= @448
-            rightOperand: IntegerLiteral
-              literal: 2 @451
-              staticType: int
-            staticElement: dart:core::@class::num::@method::<=
-            staticInvokeType: bool Function(num)
-            staticType: bool
-    accessors
-      synthetic static get vEqual @-1
-        returnType: bool
-      synthetic static get vAnd @-1
-        returnType: bool
-      synthetic static get vOr @-1
-        returnType: bool
-      synthetic static get vBitXor @-1
-        returnType: int
-      synthetic static get vBitAnd @-1
-        returnType: int
-      synthetic static get vBitOr @-1
-        returnType: int
-      synthetic static get vBitShiftLeft @-1
-        returnType: int
-      synthetic static get vBitShiftRight @-1
-        returnType: int
-      synthetic static get vAdd @-1
-        returnType: int
-      synthetic static get vSubtract @-1
-        returnType: int
-      synthetic static get vMiltiply @-1
-        returnType: int
-      synthetic static get vDivide @-1
-        returnType: double
-      synthetic static get vFloorDivide @-1
-        returnType: int
-      synthetic static get vModulo @-1
-        returnType: int
-      synthetic static get vGreater @-1
-        returnType: bool
-      synthetic static get vGreaterEqual @-1
-        returnType: bool
-      synthetic static get vLess @-1
-        returnType: bool
-      synthetic static get vLessEqual @-1
-        returnType: bool
-''');
-  }
-
-  test_const_topLevel_conditional() async {
-    var library = await checkLibrary(r'''
-const vConditional = (1 == 2) ? 11 : 22;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vConditional @6
-        type: int
-        constantInitializer
-          ConditionalExpression
-            condition: ParenthesizedExpression
-              leftParenthesis: ( @21
-              expression: BinaryExpression
-                leftOperand: IntegerLiteral
-                  literal: 1 @22
-                  staticType: int
-                operator: == @24
-                rightOperand: IntegerLiteral
-                  literal: 2 @27
-                  staticType: int
-                staticElement: dart:core::@class::num::@method::==
-                staticInvokeType: bool Function(Object)
-                staticType: bool
-              rightParenthesis: ) @28
-              staticType: bool
-            question: ? @30
-            thenExpression: IntegerLiteral
-              literal: 11 @32
-              staticType: int
-            colon: : @35
-            elseExpression: IntegerLiteral
-              literal: 22 @37
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get vConditional @-1
-        returnType: int
-''');
-  }
-
-  test_const_topLevel_identical() async {
-    var library = await checkLibrary(r'''
-const vIdentical = (1 == 2) ? 11 : 22;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vIdentical @6
-        type: int
-        constantInitializer
-          ConditionalExpression
-            condition: ParenthesizedExpression
-              leftParenthesis: ( @19
-              expression: BinaryExpression
-                leftOperand: IntegerLiteral
-                  literal: 1 @20
-                  staticType: int
-                operator: == @22
-                rightOperand: IntegerLiteral
-                  literal: 2 @25
-                  staticType: int
-                staticElement: dart:core::@class::num::@method::==
-                staticInvokeType: bool Function(Object)
-                staticType: bool
-              rightParenthesis: ) @26
-              staticType: bool
-            question: ? @28
-            thenExpression: IntegerLiteral
-              literal: 11 @30
-              staticType: int
-            colon: : @33
-            elseExpression: IntegerLiteral
-              literal: 22 @35
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get vIdentical @-1
-        returnType: int
-''');
-  }
-
-  test_const_topLevel_ifNull() async {
-    var library = await checkLibrary(r'''
-const vIfNull = 1 ?? 2.0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vIfNull @6
-        type: num
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @16
-              staticType: int
-            operator: ?? @18
-            rightOperand: DoubleLiteral
-              literal: 2.0 @21
-              staticType: double
-            staticElement: <null>
-            staticInvokeType: null
-            staticType: num
-    accessors
-      synthetic static get vIfNull @-1
-        returnType: num
-''');
-  }
-
-  test_const_topLevel_literal() async {
-    var library = await checkLibrary(r'''
-const vNull = null;
-const vBoolFalse = false;
-const vBoolTrue = true;
-const vIntPositive = 1;
-const vIntNegative = -2;
-const vIntLong1 = 0x7FFFFFFFFFFFFFFF;
-const vIntLong2 = 0xFFFFFFFFFFFFFFFF;
-const vIntLong3 = 0x8000000000000000;
-const vDouble = 2.3;
-const vString = 'abc';
-const vStringConcat = 'aaa' 'bbb';
-const vStringInterpolation = 'aaa ${true} ${42} bbb';
-const vSymbol = #aaa.bbb.ccc;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vNull @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @14
-            staticType: Null
-      static const vBoolFalse @26
-        type: bool
-        constantInitializer
-          BooleanLiteral
-            literal: false @39
-            staticType: bool
-      static const vBoolTrue @52
-        type: bool
-        constantInitializer
-          BooleanLiteral
-            literal: true @64
-            staticType: bool
-      static const vIntPositive @76
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 1 @91
-            staticType: int
-      static const vIntNegative @100
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: - @115
-            operand: IntegerLiteral
-              literal: 2 @116
-              staticType: int
-            staticElement: dart:core::@class::int::@method::unary-
-            staticType: int
-      static const vIntLong1 @125
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0x7FFFFFFFFFFFFFFF @137
-            staticType: int
-      static const vIntLong2 @163
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0xFFFFFFFFFFFFFFFF @175
-            staticType: int
-      static const vIntLong3 @201
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0x8000000000000000 @213
-            staticType: int
-      static const vDouble @239
-        type: double
-        constantInitializer
-          DoubleLiteral
-            literal: 2.3 @249
-            staticType: double
-      static const vString @260
-        type: String
-        constantInitializer
-          SimpleStringLiteral
-            literal: 'abc' @270
-      static const vStringConcat @283
-        type: String
-        constantInitializer
-          AdjacentStrings
-            strings
-              SimpleStringLiteral
-                literal: 'aaa' @299
-              SimpleStringLiteral
-                literal: 'bbb' @305
-            staticType: String
-            stringValue: aaabbb
-      static const vStringInterpolation @318
-        type: String
-        constantInitializer
-          StringInterpolation
-            elements
-              InterpolationString
-                contents: 'aaa  @341
-              InterpolationExpression
-                leftBracket: ${ @346
-                expression: BooleanLiteral
-                  literal: true @348
-                  staticType: bool
-                rightBracket: } @352
-              InterpolationString
-                contents:   @353
-              InterpolationExpression
-                leftBracket: ${ @354
-                expression: IntegerLiteral
-                  literal: 42 @356
-                  staticType: int
-                rightBracket: } @358
-              InterpolationString
-                contents:  bbb' @359
-            staticType: String
-            stringValue: null
-      static const vSymbol @372
-        type: Symbol
-        constantInitializer
-          SymbolLiteral
-            poundSign: # @382
-            components
-              components: aaa
-                offset: 383
-              components: bbb
-                offset: 387
-              components: ccc
-                offset: 391
-    accessors
-      synthetic static get vNull @-1
-        returnType: dynamic
-      synthetic static get vBoolFalse @-1
-        returnType: bool
-      synthetic static get vBoolTrue @-1
-        returnType: bool
-      synthetic static get vIntPositive @-1
-        returnType: int
-      synthetic static get vIntNegative @-1
-        returnType: int
-      synthetic static get vIntLong1 @-1
-        returnType: int
-      synthetic static get vIntLong2 @-1
-        returnType: int
-      synthetic static get vIntLong3 @-1
-        returnType: int
-      synthetic static get vDouble @-1
-        returnType: double
-      synthetic static get vString @-1
-        returnType: String
-      synthetic static get vStringConcat @-1
-        returnType: String
-      synthetic static get vStringInterpolation @-1
-        returnType: String
-      synthetic static get vSymbol @-1
-        returnType: Symbol
-''');
-  }
-
-  test_const_topLevel_methodInvocation_questionPeriod() async {
-    var library = await checkLibrary(r'''
-const int? a = 0;
-const b = a?.toString();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @11
-        type: int?
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @15
-            staticType: int
-      static const b @24
-        type: String?
-        constantInitializer
-          MethodInvocation
-            target: SimpleIdentifier
-              token: a @28
-              staticElement: self::@getter::a
-              staticType: int?
-            operator: ?. @29
-            methodName: SimpleIdentifier
-              token: toString @31
-              staticElement: dart:core::@class::int::@method::toString
-              staticType: String Function()
-            argumentList: ArgumentList
-              leftParenthesis: ( @39
-              rightParenthesis: ) @40
-            staticInvokeType: String Function()
-            staticType: String?
-    accessors
-      synthetic static get a @-1
-        returnType: int?
-      synthetic static get b @-1
-        returnType: String?
-''');
-  }
-
-  test_const_topLevel_methodInvocation_questionPeriodPeriod() async {
-    var library = await checkLibrary(r'''
-const int? a = 0;
-const b = a?..toString();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @11
-        type: int?
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @15
-            staticType: int
-      static const b @24
-        type: int?
-        constantInitializer
-          CascadeExpression
-            target: SimpleIdentifier
-              token: a @28
-              staticElement: self::@getter::a
-              staticType: int?
-            cascadeSections
-              MethodInvocation
-                operator: ?.. @29
-                methodName: SimpleIdentifier
-                  token: toString @32
-                  staticElement: dart:core::@class::int::@method::toString
-                  staticType: String Function()
-                argumentList: ArgumentList
-                  leftParenthesis: ( @40
-                  rightParenthesis: ) @41
-                staticInvokeType: String Function()
-                staticType: String
-            staticType: int?
-    accessors
-      synthetic static get a @-1
-        returnType: int?
-      synthetic static get b @-1
-        returnType: int?
-''');
-  }
-
-  test_const_topLevel_nullSafe_nullAware_propertyAccess() async {
-    var library = await checkLibrary(r'''
-const String? a = '';
-
-const List<int?> b = [
-  a?.length,
-];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @14
-        type: String?
-        constantInitializer
-          SimpleStringLiteral
-            literal: '' @18
-      static const b @40
-        type: List<int?>
-        constantInitializer
-          ListLiteral
-            leftBracket: [ @44
-            elements
-              PropertyAccess
-                target: SimpleIdentifier
-                  token: a @48
-                  staticElement: self::@getter::a
-                  staticType: String?
-                operator: ?. @49
-                propertyName: SimpleIdentifier
-                  token: length @51
-                  staticElement: dart:core::@class::String::@getter::length
-                  staticType: int
-                staticType: int?
-            rightBracket: ] @59
-            staticType: List<int?>
-    accessors
-      synthetic static get a @-1
-        returnType: String?
-      synthetic static get b @-1
-        returnType: List<int?>
-''');
-  }
-
-  test_const_topLevel_parenthesis() async {
-    var library = await checkLibrary(r'''
-const int v1 = (1 + 2) * 3;
-const int v2 = -(1 + 2);
-const int v3 = ('aaa' + 'bbb').length;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v1 @10
-        type: int
-        constantInitializer
-          BinaryExpression
-            leftOperand: ParenthesizedExpression
-              leftParenthesis: ( @15
-              expression: BinaryExpression
-                leftOperand: IntegerLiteral
-                  literal: 1 @16
-                  staticType: int
-                operator: + @18
-                rightOperand: IntegerLiteral
-                  literal: 2 @20
-                  staticType: int
-                staticElement: dart:core::@class::num::@method::+
-                staticInvokeType: num Function(num)
-                staticType: int
-              rightParenthesis: ) @21
-              staticType: int
-            operator: * @23
-            rightOperand: IntegerLiteral
-              literal: 3 @25
-              staticType: int
-            staticElement: dart:core::@class::num::@method::*
-            staticInvokeType: num Function(num)
-            staticType: int
-      static const v2 @38
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: - @43
-            operand: ParenthesizedExpression
-              leftParenthesis: ( @44
-              expression: BinaryExpression
-                leftOperand: IntegerLiteral
-                  literal: 1 @45
-                  staticType: int
-                operator: + @47
-                rightOperand: IntegerLiteral
-                  literal: 2 @49
-                  staticType: int
-                staticElement: dart:core::@class::num::@method::+
-                staticInvokeType: num Function(num)
-                staticType: int
-              rightParenthesis: ) @50
-              staticType: int
-            staticElement: dart:core::@class::int::@method::unary-
-            staticType: int
-      static const v3 @63
-        type: int
-        constantInitializer
-          PropertyAccess
-            target: ParenthesizedExpression
-              leftParenthesis: ( @68
-              expression: BinaryExpression
-                leftOperand: SimpleStringLiteral
-                  literal: 'aaa' @69
-                operator: + @75
-                rightOperand: SimpleStringLiteral
-                  literal: 'bbb' @77
-                staticElement: dart:core::@class::String::@method::+
-                staticInvokeType: String Function(String)
-                staticType: String
-              rightParenthesis: ) @82
-              staticType: String
-            operator: . @83
-            propertyName: SimpleIdentifier
-              token: length @84
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-            staticType: int
-    accessors
-      synthetic static get v1 @-1
-        returnType: int
-      synthetic static get v2 @-1
-        returnType: int
-      synthetic static get v3 @-1
-        returnType: int
-''');
-  }
-
-  test_const_topLevel_prefix() async {
-    var library = await checkLibrary(r'''
-const vNotEqual = 1 != 2;
-const vNot = !true;
-const vNegate = -1;
-const vComplement = ~1;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vNotEqual @6
-        type: bool
-        constantInitializer
-          BinaryExpression
-            leftOperand: IntegerLiteral
-              literal: 1 @18
-              staticType: int
-            operator: != @20
-            rightOperand: IntegerLiteral
-              literal: 2 @23
-              staticType: int
-            staticElement: dart:core::@class::num::@method::==
-            staticInvokeType: bool Function(Object)
-            staticType: bool
-      static const vNot @32
-        type: bool
-        constantInitializer
-          PrefixExpression
-            operator: ! @39
-            operand: BooleanLiteral
-              literal: true @40
-              staticType: bool
-            staticElement: <null>
-            staticType: bool
-      static const vNegate @52
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: - @62
-            operand: IntegerLiteral
-              literal: 1 @63
-              staticType: int
-            staticElement: dart:core::@class::int::@method::unary-
-            staticType: int
-      static const vComplement @72
-        type: int
-        constantInitializer
-          PrefixExpression
-            operator: ~ @86
-            operand: IntegerLiteral
-              literal: 1 @87
-              staticType: int
-            staticElement: dart:core::@class::int::@method::~
-            staticType: int
-    accessors
-      synthetic static get vNotEqual @-1
-        returnType: bool
-      synthetic static get vNot @-1
-        returnType: bool
-      synthetic static get vNegate @-1
-        returnType: int
-      synthetic static get vComplement @-1
-        returnType: int
-''');
-  }
-
-  test_const_topLevel_super() async {
-    var library = await checkLibrary(r'''
-const vSuper = super;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vSuper @6
-        type: dynamic
-        constantInitializer
-          SuperExpression
-            superKeyword: super @15
-            staticType: dynamic
-    accessors
-      synthetic static get vSuper @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_topLevel_this() async {
-    var library = await checkLibrary(r'''
-const vThis = this;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vThis @6
-        type: dynamic
-        constantInitializer
-          ThisExpression
-            thisKeyword: this @14
-            staticType: dynamic
-    accessors
-      synthetic static get vThis @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_topLevel_throw() async {
-    var library = await checkLibrary(r'''
-const c = throw 42;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const c @6
-        type: Never
-        constantInitializer
-          ThrowExpression
-            throwKeyword: throw @10
-            expression: IntegerLiteral
-              literal: 42 @16
-              staticType: int
-            staticType: Never
-    accessors
-      synthetic static get c @-1
-        returnType: Never
-''');
-  }
-
-  test_const_topLevel_throw_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary(r'''
-const c = throw 42;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const c @6
-        type: dynamic
-        constantInitializer
-          ThrowExpression
-            throwKeyword: throw @10
-            expression: IntegerLiteral
-              literal: 42 @16
-              staticType: int*
-            staticType: Never*
-    accessors
-      synthetic static get c @-1
-        returnType: dynamic
-''');
-  }
-
-  test_const_topLevel_typedList() async {
-    var library = await checkLibrary(r'''
-const vNull = const <Null>[];
-const vDynamic = const <dynamic>[1, 2, 3];
-const vInterfaceNoTypeParameters = const <int>[1, 2, 3];
-const vInterfaceNoTypeArguments = const <List>[];
-const vInterfaceWithTypeArguments = const <List<String>>[];
-const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vNull @6
-        type: List<Null>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @14
-            typeArguments: TypeArgumentList
-              leftBracket: < @20
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: Null @21
-                    staticElement: dart:core::@class::Null
-                    staticType: null
-                  type: Null
-              rightBracket: > @25
-            leftBracket: [ @26
-            rightBracket: ] @27
-            staticType: List<Null>
-      static const vDynamic @36
-        type: List<dynamic>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @47
-            typeArguments: TypeArgumentList
-              leftBracket: < @53
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: dynamic @54
-                    staticElement: dynamic@-1
-                    staticType: null
-                  type: dynamic
-              rightBracket: > @61
-            leftBracket: [ @62
-            elements
-              IntegerLiteral
-                literal: 1 @63
-                staticType: int
-              IntegerLiteral
-                literal: 2 @66
-                staticType: int
-              IntegerLiteral
-                literal: 3 @69
-                staticType: int
-            rightBracket: ] @70
-            staticType: List<dynamic>
-      static const vInterfaceNoTypeParameters @79
-        type: List<int>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @108
-            typeArguments: TypeArgumentList
-              leftBracket: < @114
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @115
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @118
-            leftBracket: [ @119
-            elements
-              IntegerLiteral
-                literal: 1 @120
-                staticType: int
-              IntegerLiteral
-                literal: 2 @123
-                staticType: int
-              IntegerLiteral
-                literal: 3 @126
-                staticType: int
-            rightBracket: ] @127
-            staticType: List<int>
-      static const vInterfaceNoTypeArguments @136
-        type: List<List<dynamic>>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @164
-            typeArguments: TypeArgumentList
-              leftBracket: < @170
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: List @171
-                    staticElement: dart:core::@class::List
-                    staticType: null
-                  type: List<dynamic>
-              rightBracket: > @175
-            leftBracket: [ @176
-            rightBracket: ] @177
-            staticType: List<List<dynamic>>
-      static const vInterfaceWithTypeArguments @186
-        type: List<List<String>>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @216
-            typeArguments: TypeArgumentList
-              leftBracket: < @222
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: List @223
-                    staticElement: dart:core::@class::List
-                    staticType: null
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @227
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: String @228
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                    rightBracket: > @234
-                  type: List<String>
-              rightBracket: > @235
-            leftBracket: [ @236
-            rightBracket: ] @237
-            staticType: List<List<String>>
-      static const vInterfaceWithTypeArguments2 @246
-        type: List<Map<int, List<String>>>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @277
-            typeArguments: TypeArgumentList
-              leftBracket: < @283
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: Map @284
-                    staticElement: dart:core::@class::Map
-                    staticType: null
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @287
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: int @288
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                        type: int
-                      NamedType
-                        name: SimpleIdentifier
-                          token: List @293
-                          staticElement: dart:core::@class::List
-                          staticType: null
-                        typeArguments: TypeArgumentList
-                          leftBracket: < @297
-                          arguments
-                            NamedType
-                              name: SimpleIdentifier
-                                token: String @298
-                                staticElement: dart:core::@class::String
-                                staticType: null
-                              type: String
-                          rightBracket: > @304
-                        type: List<String>
-                    rightBracket: > @305
-                  type: Map<int, List<String>>
-              rightBracket: > @306
-            leftBracket: [ @307
-            rightBracket: ] @308
-            staticType: List<Map<int, List<String>>>
-    accessors
-      synthetic static get vNull @-1
-        returnType: List<Null>
-      synthetic static get vDynamic @-1
-        returnType: List<dynamic>
-      synthetic static get vInterfaceNoTypeParameters @-1
-        returnType: List<int>
-      synthetic static get vInterfaceNoTypeArguments @-1
-        returnType: List<List<dynamic>>
-      synthetic static get vInterfaceWithTypeArguments @-1
-        returnType: List<List<String>>
-      synthetic static get vInterfaceWithTypeArguments2 @-1
-        returnType: List<Map<int, List<String>>>
-''');
-  }
-
-  test_const_topLevel_typedList_imported() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-const v = const <C>[];
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static const v @23
-        type: List<C>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @27
-            typeArguments: TypeArgumentList
-              leftBracket: < @33
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: C @34
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  type: C
-              rightBracket: > @35
-            leftBracket: [ @36
-            rightBracket: ] @37
-            staticType: List<C>
-    accessors
-      synthetic static get v @-1
-        returnType: List<C>
-''');
-  }
-
-  test_const_topLevel_typedList_importedWithPrefix() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    var library = await checkLibrary(r'''
-import 'a.dart' as p;
-const v = const <p.C>[];
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as p @19
-  definingUnit
-    topLevelVariables
-      static const v @28
-        type: List<C>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @32
-            typeArguments: TypeArgumentList
-              leftBracket: < @38
-              arguments
-                NamedType
-                  name: PrefixedIdentifier
-                    prefix: SimpleIdentifier
-                      token: p @39
-                      staticElement: self::@prefix::p
-                      staticType: null
-                    period: . @40
-                    identifier: SimpleIdentifier
-                      token: C @41
-                      staticElement: a.dart::@class::C
-                      staticType: null
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                  type: C
-              rightBracket: > @42
-            leftBracket: [ @43
-            rightBracket: ] @44
-            staticType: List<C>
-    accessors
-      synthetic static get v @-1
-        returnType: List<C>
-''');
-  }
-
-  test_const_topLevel_typedList_typedefArgument() async {
-    var library = await checkLibrary(r'''
-typedef int F(String id);
-const v = const <F>[];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @12
-        aliasedType: int Function(String)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional id @21
-              type: String
-          returnType: int
-    topLevelVariables
-      static const v @32
-        type: List<int Function(String)>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @36
-            typeArguments: TypeArgumentList
-              leftBracket: < @42
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: F @43
-                    staticElement: self::@typeAlias::F
-                    staticType: null
-                  type: int Function(String)
-              rightBracket: > @44
-            leftBracket: [ @45
-            rightBracket: ] @46
-            staticType: List<int Function(String)>
-    accessors
-      synthetic static get v @-1
-        returnType: List<int Function(String)>
-''');
-  }
-
-  test_const_topLevel_typedMap() async {
-    var library = await checkLibrary(r'''
-const vDynamic1 = const <dynamic, int>{};
-const vDynamic2 = const <int, dynamic>{};
-const vInterface = const <int, String>{};
-const vInterfaceWithTypeArguments = const <int, List<String>>{};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vDynamic1 @6
-        type: Map<dynamic, int>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @18
-            typeArguments: TypeArgumentList
-              leftBracket: < @24
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: dynamic @25
-                    staticElement: dynamic@-1
-                    staticType: null
-                  type: dynamic
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @34
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @37
-            leftBracket: { @38
-            rightBracket: } @39
-            isMap: true
-            staticType: Map<dynamic, int>
-      static const vDynamic2 @48
-        type: Map<int, dynamic>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @60
-            typeArguments: TypeArgumentList
-              leftBracket: < @66
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @67
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: dynamic @72
-                    staticElement: dynamic@-1
-                    staticType: null
-                  type: dynamic
-              rightBracket: > @79
-            leftBracket: { @80
-            rightBracket: } @81
-            isMap: true
-            staticType: Map<int, dynamic>
-      static const vInterface @90
-        type: Map<int, String>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @103
-            typeArguments: TypeArgumentList
-              leftBracket: < @109
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @110
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: String @115
-                    staticElement: dart:core::@class::String
-                    staticType: null
-                  type: String
-              rightBracket: > @121
-            leftBracket: { @122
-            rightBracket: } @123
-            isMap: true
-            staticType: Map<int, String>
-      static const vInterfaceWithTypeArguments @132
-        type: Map<int, List<String>>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @162
-            typeArguments: TypeArgumentList
-              leftBracket: < @168
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @169
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    token: List @174
-                    staticElement: dart:core::@class::List
-                    staticType: null
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @178
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: String @179
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                    rightBracket: > @185
-                  type: List<String>
-              rightBracket: > @186
-            leftBracket: { @187
-            rightBracket: } @188
-            isMap: true
-            staticType: Map<int, List<String>>
-    accessors
-      synthetic static get vDynamic1 @-1
-        returnType: Map<dynamic, int>
-      synthetic static get vDynamic2 @-1
-        returnType: Map<int, dynamic>
-      synthetic static get vInterface @-1
-        returnType: Map<int, String>
-      synthetic static get vInterfaceWithTypeArguments @-1
-        returnType: Map<int, List<String>>
-''');
-  }
-
-  test_const_topLevel_typedSet() async {
-    var library = await checkLibrary(r'''
-const vDynamic1 = const <dynamic>{};
-const vInterface = const <int>{};
-const vInterfaceWithTypeArguments = const <List<String>>{};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const vDynamic1 @6
-        type: Set<dynamic>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @18
-            typeArguments: TypeArgumentList
-              leftBracket: < @24
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: dynamic @25
-                    staticElement: dynamic@-1
-                    staticType: null
-                  type: dynamic
-              rightBracket: > @32
-            leftBracket: { @33
-            rightBracket: } @34
-            isMap: false
-            staticType: Set<dynamic>
-      static const vInterface @43
-        type: Set<int>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @56
-            typeArguments: TypeArgumentList
-              leftBracket: < @62
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @63
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @66
-            leftBracket: { @67
-            rightBracket: } @68
-            isMap: false
-            staticType: Set<int>
-      static const vInterfaceWithTypeArguments @77
-        type: Set<List<String>>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @107
-            typeArguments: TypeArgumentList
-              leftBracket: < @113
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: List @114
-                    staticElement: dart:core::@class::List
-                    staticType: null
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @118
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          token: String @119
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                    rightBracket: > @125
-                  type: List<String>
-              rightBracket: > @126
-            leftBracket: { @127
-            rightBracket: } @128
-            isMap: false
-            staticType: Set<List<String>>
-    accessors
-      synthetic static get vDynamic1 @-1
-        returnType: Set<dynamic>
-      synthetic static get vInterface @-1
-        returnType: Set<int>
-      synthetic static get vInterfaceWithTypeArguments @-1
-        returnType: Set<List<String>>
-''');
-  }
-
-  test_const_topLevel_untypedList() async {
-    var library = await checkLibrary(r'''
-const v = const [1, 2, 3];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: List<int>
-        constantInitializer
-          ListLiteral
-            constKeyword: const @10
-            leftBracket: [ @16
-            elements
-              IntegerLiteral
-                literal: 1 @17
-                staticType: int
-              IntegerLiteral
-                literal: 2 @20
-                staticType: int
-              IntegerLiteral
-                literal: 3 @23
-                staticType: int
-            rightBracket: ] @24
-            staticType: List<int>
-    accessors
-      synthetic static get v @-1
-        returnType: List<int>
-''');
-  }
-
-  test_const_topLevel_untypedMap() async {
-    var library = await checkLibrary(r'''
-const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: Map<int, String>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @10
-            leftBracket: { @16
-            elements
-              SetOrMapLiteral
-                key: IntegerLiteral
-                  literal: 0 @17
-                  staticType: int
-                separator: : @18
-                value: SimpleStringLiteral
-                  literal: 'aaa' @20
-              SetOrMapLiteral
-                key: IntegerLiteral
-                  literal: 1 @27
-                  staticType: int
-                separator: : @28
-                value: SimpleStringLiteral
-                  literal: 'bbb' @30
-              SetOrMapLiteral
-                key: IntegerLiteral
-                  literal: 2 @37
-                  staticType: int
-                separator: : @38
-                value: SimpleStringLiteral
-                  literal: 'ccc' @40
-            rightBracket: } @45
-            isMap: true
-            staticType: Map<int, String>
-    accessors
-      synthetic static get v @-1
-        returnType: Map<int, String>
-''');
-  }
-
-  test_const_topLevel_untypedSet() async {
-    var library = await checkLibrary(r'''
-const v = const {0, 1, 2};
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: Set<int>
-        constantInitializer
-          SetOrMapLiteral
-            constKeyword: const @10
-            leftBracket: { @16
-            elements
-              IntegerLiteral
-                literal: 0 @17
-                staticType: int
-              IntegerLiteral
-                literal: 1 @20
-                staticType: int
-              IntegerLiteral
-                literal: 2 @23
-                staticType: int
-            rightBracket: } @24
-            isMap: false
-            staticType: Set<int>
-    accessors
-      synthetic static get v @-1
-        returnType: Set<int>
-''');
-  }
-
-  test_const_typeLiteral() async {
-    var library = await checkLibrary(r'''
-const v = List<int>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const v @6
-        type: Type
-        constantInitializer
-          TypeLiteral
-            type: NamedType
-              name: SimpleIdentifier
-                token: List @10
-                staticElement: dart:core::@class::List
-                staticType: List<int>
-              typeArguments: TypeArgumentList
-                leftBracket: < @14
-                arguments
-                  NamedType
-                    name: SimpleIdentifier
-                      token: int @15
-                      staticElement: dart:core::@class::int
-                      staticType: null
-                    type: int
-                rightBracket: > @18
-              type: List<int>
-            staticType: Type
-    accessors
-      synthetic static get v @-1
-        returnType: Type
-''');
-  }
-
-  test_constExpr_pushReference_enum_field() async {
-    var library = await checkLibrary('''
-enum E {a, b, c}
-final vValue = E.a;
-final vValues = E.values;
-final vIndex = E.a.index;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @8
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant c @14
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static final vValue @23
-        type: E
-      static final vValues @43
-        type: List<E>
-      static final vIndex @69
-        type: int
-    accessors
-      synthetic static get vValue @-1
-        returnType: E
-      synthetic static get vValues @-1
-        returnType: List<E>
-      synthetic static get vIndex @-1
-        returnType: int
-''');
-  }
-
-  test_constExpr_pushReference_enum_method() async {
-    var library = await checkLibrary('''
-enum E {a}
-final vToString = E.a.toString();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @8
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static final vToString @17
-        type: String
-    accessors
-      synthetic static get vToString @-1
-        returnType: String
-''');
-  }
-
-  test_constExpr_pushReference_field_simpleIdentifier() async {
-    var library = await checkLibrary('''
-class C {
-  static const a = b;
-  static const b = null;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const a @25
-            type: dynamic
-            constantInitializer
-              SimpleIdentifier
-                token: b @29
-                staticElement: self::@class::C::@getter::b
-                staticType: dynamic
-          static const b @47
-            type: dynamic
-            constantInitializer
-              NullLiteral
-                literal: null @51
-                staticType: Null
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get a @-1
-            returnType: dynamic
-          synthetic static get b @-1
-            returnType: dynamic
-''');
-  }
-
-  test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
-    var library = await checkLibrary('''
-class C {
-  static const a = m;
-  static m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          static const a @25
-            type: dynamic Function()
-            constantInitializer
-              SimpleIdentifier
-                token: m @29
-                staticElement: self::@class::C::@method::m
-                staticType: dynamic Function()
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get a @-1
-            returnType: dynamic Function()
-        methods
-          static m @41
-            returnType: dynamic
-''');
-  }
-
-  test_defaultValue_eliminateTypeParameters() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const X({List<T> a = const []});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          abstract X @21
-            parameters
-              optionalNamed a @32
-                type: List<T>
-                constantInitializer
-                  ListLiteral
-                    constKeyword: const @36
-                    leftBracket: [ @42
-                    rightBracket: ] @43
-                    staticType: List<Never>
-            returnType: dynamic
-''');
-  }
-
-  test_defaultValue_eliminateTypeParameters_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class A<T> {
-  const X({List<T> a = const []});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          abstract X @21
-            parameters
-              optionalNamed a @32
-                type: List<T*>*
-                constantInitializer
-                  ListLiteral
-                    constKeyword: const @36
-                    leftBracket: [ @42
-                    rightBracket: ] @43
-                    staticType: List<Null*>*
-            returnType: dynamic
-''');
-  }
-
-  test_defaultValue_genericFunction() async {
-    var library = await checkLibrary('''
-typedef void F<T>(T v);
-
-void defaultF<T>(T v) {}
-
-class X {
-  final F f;
-  const X({this.f: defaultF});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class X @57
-        fields
-          final f @71
-            type: void Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-        constructors
-          const @82
-            parameters
-              optionalNamed final this.f @90
-                type: void Function(dynamic)
-                  aliasElement: self::@typeAlias::F
-                  aliasArguments
-                    dynamic
-                constantInitializer
-                  FunctionReference
-                    function: SimpleIdentifier
-                      token: defaultF @93
-                      staticElement: self::@function::defaultF
-                      staticType: void Function<T>(T)
-                    staticType: void Function(dynamic)
-                    typeArgumentTypes
-                      dynamic
-                field: self::@class::X::@field::f
-        accessors
-          synthetic get f @-1
-            returnType: void Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-    typeAliases
-      functionTypeAliasBased F @13
-        typeParameters
-          contravariant T @15
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional v @20
-              type: T
-          returnType: void
-    functions
-      defaultF @30
-        typeParameters
-          covariant T @39
-        parameters
-          requiredPositional v @44
-            type: T
-        returnType: void
-''');
-  }
-
-  test_defaultValue_genericFunctionType() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  void foo({a: const A<Function()>()}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class B @34
-        constructors
-          synthetic @-1
-        methods
-          foo @45
-            parameters
-              optionalNamed a @50
-                type: dynamic
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @53
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: A @59
-                          staticElement: self::@class::A
-                          staticType: null
-                        typeArguments: TypeArgumentList
-                          leftBracket: < @60
-                          arguments
-                            GenericFunctionType
-                              functionKeyword: Function @61
-                              parameters: FormalParameterList
-                                leftParenthesis: ( @69
-                                rightParenthesis: ) @70
-                              declaredElement: GenericFunctionTypeElement
-                                parameters
-                                returnType: dynamic
-                                type: dynamic Function()
-                              type: dynamic Function()
-                          rightBracket: > @71
-                        type: A<dynamic Function()>
-                      staticElement: ConstructorMember
-                        base: self::@class::A::@constructor::•
-                        substitution: {T: dynamic Function()}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @72
-                      rightParenthesis: ) @73
-                    staticType: A<dynamic Function()>
-            returnType: void
-''');
-  }
-
-  test_defaultValue_inFunctionTypedFormalParameter() async {
-    var library = await checkLibrary('''
-void f( g({a: 0 is int}) ) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional g @8
-            type: dynamic Function({dynamic a})
-            parameters
-              optionalNamed a @11
-                type: dynamic
-                constantInitializer
-                  IsExpression
-                    expression: IntegerLiteral
-                      literal: 0 @14
-                      staticType: int
-                    isOperator: is @16
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: int @19
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                      type: int
-                    staticType: bool
-        returnType: void
-''');
-  }
-
-  test_defaultValue_methodMember_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-void f([Comparator<T> compare = Comparable.compare]) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          optionalPositional compare @22
-            type: int* Function(dynamic, dynamic)*
-              aliasElement: dart:core::@typeAlias::Comparator
-              aliasArguments
-                dynamic
-            constantInitializer
-              PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: Comparable @32
-                  staticElement: dart:core::@class::Comparable
-                  staticType: null
-                period: . @42
-                identifier: SimpleIdentifier
-                  token: compare @43
-                  staticElement: MethodMember
-                    base: dart:core::@class::Comparable::@method::compare
-                    isLegacy: true
-                  staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
-                staticElement: MethodMember
-                  base: dart:core::@class::Comparable::@method::compare
-                  isLegacy: true
-                staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
-        returnType: void
-''');
-  }
-
-  test_defaultValue_refersToExtension_method_inside() async {
-    var library = await checkLibrary('''
-class A {}
-extension E on A {
-  static void f() {}
-  static void g([Object p = f]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    extensions
-      E @21
-        extendedType: A
-        methods
-          static f @44
-            returnType: void
-          static g @65
-            parameters
-              optionalPositional p @75
-                type: Object
-                constantInitializer
-                  SimpleIdentifier
-                    token: f @79
-                    staticElement: self::@extension::E::@method::f
-                    staticType: void Function()
-            returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass() async {
-    var library = await checkLibrary('''
-class B<T1, T2> {
-  const B();
-}
-class C {
-  void foo([B<int, double> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T1 @8
-            defaultType: dynamic
-          covariant T2 @12
-            defaultType: dynamic
-        constructors
-          const @26
-      class C @39
-        constructors
-          synthetic @-1
-        methods
-          foo @50
-            parameters
-              optionalPositional b @70
-                type: B<int, double>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @74
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @80
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<int, double>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T1: int, T2: double}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @81
-                      rightParenthesis: ) @82
-                    staticType: B<int, double>
-            returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor() async {
-    var library = await checkLibrary('''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T> b = const B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class C @34
-        typeParameters
-          covariant T @36
-            defaultType: dynamic
-        constructors
-          const @49
-            parameters
-              optionalPositional b @57
-                type: B<T>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @61
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @67
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Never>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Never}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @68
-                      rightParenthesis: ) @69
-                    staticType: B<Never>
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor2() async {
-    var library = await checkLibrary('''
-abstract class A<T> {}
-class B<T> implements A<T> {
-  const B();
-}
-class C<T> implements A<Iterable<T>> {
-  const C([A<T> a = const B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class A @15
-        typeParameters
-          covariant T @17
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @29
-        typeParameters
-          covariant T @31
-            defaultType: dynamic
-        interfaces
-          A<T>
-        constructors
-          const @60
-      class C @73
-        typeParameters
-          covariant T @75
-            defaultType: dynamic
-        interfaces
-          A<Iterable<T>>
-        constructors
-          const @114
-            parameters
-              optionalPositional a @122
-                type: A<T>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @126
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @132
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Never>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Never}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @133
-                      rightParenthesis: ) @134
-                    staticType: B<Never>
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor2_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-abstract class A<T> {}
-class B<T> implements A<T> {
-  const B();
-}
-class C<T> implements A<Iterable<T>> {
-  const C([A<T> a = const B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class A @15
-        typeParameters
-          covariant T @17
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @29
-        typeParameters
-          covariant T @31
-            defaultType: dynamic
-        interfaces
-          A<T*>*
-        constructors
-          const @60
-      class C @73
-        typeParameters
-          covariant T @75
-            defaultType: dynamic
-        interfaces
-          A<Iterable<T*>*>*
-        constructors
-          const @114
-            parameters
-              optionalPositional a @122
-                type: A<T*>*
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @126
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @132
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Null*>*
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Null*}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @133
-                      rightParenthesis: ) @134
-                    staticType: B<Null*>*
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T> b = const B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class C @34
-        typeParameters
-          covariant T @36
-            defaultType: dynamic
-        constructors
-          const @49
-            parameters
-              optionalPositional b @57
-                type: B<T*>*
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @61
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @67
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Null*>*
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Null*}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @68
-                      rightParenthesis: ) @69
-                    staticType: B<Null*>*
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_functionG() async {
-    var library = await checkLibrary('''
-class B<T> {
-  const B();
-}
-void foo<T>([B<T> b = const B()]) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    functions
-      foo @33
-        typeParameters
-          covariant T @37
-        parameters
-          optionalPositional b @46
-            type: B<T>
-            constantInitializer
-              InstanceCreationExpression
-                keyword: const @50
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: B @56
-                      staticElement: self::@class::B
-                      staticType: null
-                    type: B<Never>
-                  staticElement: ConstructorMember
-                    base: self::@class::B::@constructor::•
-                    substitution: {T: Never}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @57
-                  rightParenthesis: ) @58
-                staticType: B<Never>
-        returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodG() async {
-    var library = await checkLibrary('''
-class B<T> {
-  const B();
-}
-class C {
-  void foo<T>([B<T> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class C @34
-        constructors
-          synthetic @-1
-        methods
-          foo @45
-            typeParameters
-              covariant T @49
-            parameters
-              optionalPositional b @58
-                type: B<T>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @62
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @68
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Never>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Never}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @69
-                      rightParenthesis: ) @70
-                    staticType: B<Never>
-            returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodG_classG() async {
-    var library = await checkLibrary('''
-class B<T1, T2> {
-  const B();
-}
-class C<E1> {
-  void foo<E2>([B<E1, E2> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T1 @8
-            defaultType: dynamic
-          covariant T2 @12
-            defaultType: dynamic
-        constructors
-          const @26
-      class C @39
-        typeParameters
-          covariant E1 @41
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          foo @54
-            typeParameters
-              covariant E2 @58
-            parameters
-              optionalPositional b @73
-                type: B<E1, E2>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @77
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @83
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Never, Never>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T1: Never, T2: Never}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @84
-                      rightParenthesis: ) @85
-                    staticType: B<Never, Never>
-            returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodNG() async {
-    var library = await checkLibrary('''
-class B<T> {
-  const B();
-}
-class C<T> {
-  void foo([B<T> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class C @34
-        typeParameters
-          covariant T @36
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          foo @48
-            parameters
-              optionalPositional b @58
-                type: B<T>
-                constantInitializer
-                  InstanceCreationExpression
-                    keyword: const @62
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: B @68
-                          staticElement: self::@class::B
-                          staticType: null
-                        type: B<Never>
-                      staticElement: ConstructorMember
-                        base: self::@class::B::@constructor::•
-                        substitution: {T: Never}
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @69
-                      rightParenthesis: ) @70
-                    staticType: B<Never>
-            returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_class() async {
-    var library = await checkLibrary(r'''
-class A {}
-class A {
-  var x;
-}
-class A {
-  var y = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class A @17
-        fields
-          x @27
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-      class A @38
-        fields
-          y @48
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get y @-1
-            returnType: int
-          synthetic set y @-1
-            parameters
-              requiredPositional _y @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_classTypeAlias() async {
-    var library = await checkLibrary(r'''
-class A {}
-class B {}
-class X = A with M;
-class X = B with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        constructors
-          synthetic @-1
-      class alias X @28
-        supertype: A
-        mixins
-          M
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-      class alias X @48
-        supertype: B
-        mixins
-          M
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::B::@constructor::•
-            superConstructor: self::@class::B::@constructor::•
-    mixins
-      mixin M @68
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_duplicateDeclaration_enum() async {
-    var library = await checkLibrary(r'''
-enum E {a, b}
-enum E {c, d, e}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @8
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-      enum E @19
-        supertype: Enum
-        fields
-          static const enumConstant c @22
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant d @25
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant e @28
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                  SimpleIdentifier
-                    token: d @-1
-                    staticElement: self::@enum::E::@getter::d
-                    staticType: E
-                  SimpleIdentifier
-                    token: e @-1
-                    staticElement: self::@enum::E::@getter::e
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get d @-1
-            returnType: E
-          synthetic static get e @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_duplicateDeclaration_extension() async {
-    var library = await checkLibrary(r'''
-class A {}
-extension E on A {}
-extension E on A {
-  static var x;
-}
-extension E on A {
-  static var y = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    extensions
-      E @21
-        extendedType: A
-      E @41
-        extendedType: A
-        fields
-          static x @63
-            type: dynamic
-        accessors
-          synthetic static get x @-1
-            returnType: dynamic
-          synthetic static set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-      E @78
-        extendedType: A
-        fields
-          static y @100
-            type: int
-        accessors
-          synthetic static get y @-1
-            returnType: int
-          synthetic static set y @-1
-            parameters
-              requiredPositional _y @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_function() async {
-    var library = await checkLibrary(r'''
-void f() {}
-void f(int a) {}
-void f([int b, double c]) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        returnType: void
-      f @17
-        parameters
-          requiredPositional a @23
-            type: int
-        returnType: void
-      f @34
-        parameters
-          optionalPositional b @41
-            type: int
-          optionalPositional c @51
-            type: double
-        returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_functionTypeAlias() async {
-    var library = await checkLibrary(r'''
-typedef void F();
-typedef void F(int a);
-typedef void F([int b, double c]);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-      functionTypeAliasBased F @31
-        aliasedType: void Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @37
-              type: int
-          returnType: void
-      functionTypeAliasBased F @54
-        aliasedType: void Function([int, double])
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            optionalPositional b @61
-              type: int
-            optionalPositional c @71
-              type: double
-          returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_mixin() async {
-    var library = await checkLibrary(r'''
-mixin A {}
-mixin A {
-  var x;
-}
-mixin A {
-  var y = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin A @6
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-      mixin A @17
-        superclassConstraints
-          Object
-        fields
-          x @27
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-      mixin A @38
-        superclassConstraints
-          Object
-        fields
-          y @48
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get y @-1
-            returnType: int
-          synthetic set y @-1
-            parameters
-              requiredPositional _y @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_topLevelVariable() async {
-    var library = await checkLibrary(r'''
-bool x;
-var x;
-var x = 1;
-var x = 2.3;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @5
-        type: bool
-      static x @12
-        type: dynamic
-      static x @19
-        type: int
-      static x @30
-        type: double
-    accessors
-      synthetic static get x @-1
-        returnType: bool
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: bool
-        returnType: void
-      synthetic static get x @-1
-        returnType: dynamic
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: dynamic
-        returnType: void
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-      synthetic static get x @-1
-        returnType: double
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: double
-        returnType: void
-''');
-  }
-
-  test_enum_constant_inference() async {
-    var library = await checkLibrary(r'''
-enum E<T> {
-  int(1), string('2');
-  const E(T a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @7
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          static const enumConstant int @14
-            type: E<int>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<int>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: int}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    IntegerLiteral
-                      literal: 1 @18
-                      staticType: int
-                  rightParenthesis: ) @0
-                staticType: E<int>
-          static const enumConstant string @22
-            type: E<String>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<String>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: String}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleStringLiteral
-                      literal: '2' @29
-                  rightParenthesis: ) @0
-                staticType: E<String>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: int @-1
-                    staticElement: self::@enum::E::@getter::int
-                    staticType: E<int>
-                  SimpleIdentifier
-                    token: string @-1
-                    staticElement: self::@enum::E::@getter::string
-                    staticType: E<String>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          const @43
-            parameters
-              requiredPositional a @47
-                type: T
-        accessors
-          synthetic static get int @-1
-            returnType: E<int>
-          synthetic static get string @-1
-            returnType: E<String>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  /// Test that a constant named `_name` renames the synthetic `name` field.
-  test_enum_constant_name() async {
-    var library = await checkLibrary(r'''
-enum E {
-  _name;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant _name @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: _name @-1
-                    staticElement: self::@enum::E::@getter::_name
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get _name @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constant_typeArguments() async {
-    var library = await checkLibrary(r'''
-enum E<T> {
-  v<double>(42);
-  const E(T a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @7
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          static const enumConstant v @14
-            type: E<double>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @15
-                      arguments
-                        NamedType
-                          name: SimpleIdentifier
-                            token: double @16
-                            staticElement: dart:core::@class::double
-                            staticType: null
-                          type: double
-                      rightBracket: > @22
-                    type: E<double>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: double}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    IntegerLiteral
-                      literal: 42 @24
-                      staticType: double
-                  rightParenthesis: ) @0
-                staticType: E<double>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<double>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          const @37
-            parameters
-              requiredPositional a @41
-                type: T
-        accessors
-          synthetic static get v @-1
-            returnType: E<double>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_constant_underscore() async {
-    var library = await checkLibrary('''
-enum E {
-  _
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant _ @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: _ @-1
-                    staticElement: self::@enum::E::@getter::_
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get _ @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_factory_named() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  factory E.named() => v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          factory named @26
-            periodOffset: 25
-            nameEnd: 31
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_factory_unnamed() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  factory E() => v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          factory @24
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_fieldFormal_functionTyped_withReturnType() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  final x;
-  const E(int this.x(double a));
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final x @22
-            type: dynamic
-        constructors
-          const @33
-            parameters
-              requiredPositional final this.x @44
-                type: int Function(double)
-                parameters
-                  requiredPositional a @53
-                    type: double
-                field: self::@enum::E::@field::x
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_fieldFormal_multiple_matching_fields() async {
-    var library = await checkLibrary('''
-enum E {
-  v;
-  final int x;
-  final String x;
-  const E(this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final x @26
-            type: int
-          final x @44
-            type: String
-        constructors
-          const @55
-            parameters
-              requiredPositional final this.x @62
-                type: int
-                field: self::@enum::E::@field::x
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get x @-1
-            returnType: int
-          synthetic get x @-1
-            returnType: String
-''');
-  }
-
-  test_enum_constructor_fieldFormal_no_matching_field() async {
-    var library = await checkLibrary('''
-enum E {
-  v;
-  const E(this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          const @22
-            parameters
-              requiredPositional final this.x @29
-                type: dynamic
-                field: <null>
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_fieldFormal_typed_typed() async {
-    var library = await checkLibrary('''
-enum E {
-  v;
-  final num x;
-  const E(int this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final x @26
-            type: num
-        constructors
-          const @37
-            parameters
-              requiredPositional final this.x @48
-                type: int
-                field: self::@enum::E::@field::x
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get x @-1
-            returnType: num
-''');
-  }
-
-  test_enum_constructor_fieldFormal_untyped_typed() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  final x;
-  E(int this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final x @22
-            type: dynamic
-        constructors
-          @27
-            parameters
-              requiredPositional final this.x @38
-                type: int
-                field: self::@enum::E::@field::x
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_fieldFormal_untyped_untyped() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  final x;
-  E(this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final x @22
-            type: dynamic
-        constructors
-          @27
-            parameters
-              requiredPositional final this.x @34
-                type: dynamic
-                field: self::@enum::E::@field::x
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_generative_named() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v.named(42);
-  const E.named(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  period: . @0
-                  name: SimpleIdentifier
-                    token: named @-1
-                    staticElement: self::@enum::E::@constructor::named
-                    staticType: null
-                  staticElement: self::@enum::E::@constructor::named
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    IntegerLiteral
-                      literal: 42 @19
-                      staticType: int
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          const named @34
-            periodOffset: 33
-            nameEnd: 39
-            parameters
-              requiredPositional a @44
-                type: int
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_generative_unnamed() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v(42);
-  const E(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    IntegerLiteral
-                      literal: 42 @13
-                      staticType: int
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          const @26
-            parameters
-              requiredPositional a @32
-                type: int
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_initializer() async {
-    var library = await checkLibrary(r'''
-enum E<T> {
-  v;
-  final int x;
-  const E(T? a) : assert(a is T), x = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @7
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          static const enumConstant v @14
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-          final x @29
-            type: int
-        constructors
-          const @40
-            parameters
-              requiredPositional a @45
-                type: T?
-            constantInitializers
-              AssertInitializer
-                assertKeyword: assert @50
-                leftParenthesis: ( @56
-                condition: IsExpression
-                  expression: SimpleIdentifier
-                    token: a @57
-                    staticElement: a@45
-                    staticType: T?
-                  isOperator: is @59
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: T @62
-                      staticElement: T@7
-                      staticType: null
-                    type: T
-                  staticType: bool
-                rightParenthesis: ) @63
-              ConstructorFieldInitializer
-                fieldName: SimpleIdentifier
-                  token: x @66
-                  staticElement: self::@enum::E::@field::x
-                  staticType: null
-                equals: = @68
-                expression: IntegerLiteral
-                  literal: 0 @70
-                  staticType: int
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-          synthetic get x @-1
-            returnType: int
-''');
-  }
-
-  test_enum_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-enum E { v }''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @65
-        documentationComment: /**\n * Docs\n */
-        supertype: Enum
-        fields
-          static const enumConstant v @69
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_field() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  final foo = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          final foo @22
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @28
-                staticType: int
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          synthetic get foo @-1
-            returnType: int
-''');
-  }
-
-  test_enum_getter() async {
-    var library = await checkLibrary(r'''
-enum E{
-  v;
-  int get foo => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @10
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          synthetic foo @-1
-            type: int
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          get foo @23
-            returnType: int
-''');
-  }
-
-  test_enum_interfaces() async {
-    var library = await checkLibrary(r'''
-class I {}
-enum E implements I {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class I @6
-        constructors
-          synthetic @-1
-    enums
-      enum E @16
-        supertype: Enum
-        interfaces
-          I
-        fields
-          static const enumConstant v @35
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_interfaces_generic() async {
-    var library = await checkLibrary(r'''
-class I<T> {}
-enum E<U> implements I<U> {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class I @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    enums
-      enum E @19
-        typeParameters
-          covariant U @21
-            defaultType: dynamic
-        supertype: Enum
-        interfaces
-          I<U>
-        fields
-          static const enumConstant v @44
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {U: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_interfaces_unresolved() async {
-    var library = await checkLibrary('''
-class X {}
-class Z {}
-enum E implements X, Y, Z {
-  v
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class X @6
-        constructors
-          synthetic @-1
-      class Z @17
-        constructors
-          synthetic @-1
-    enums
-      enum E @27
-        supertype: Enum
-        interfaces
-          X
-          Z
-        fields
-          static const enumConstant v @52
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_method() async {
-    var library = await checkLibrary(r'''
-enum E<T> {
-  v;
-  int foo<U>(T t, U u) => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @7
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          static const enumConstant v @14
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-        methods
-          foo @23
-            typeParameters
-              covariant U @27
-            parameters
-              requiredPositional t @32
-                type: T
-              requiredPositional u @37
-                type: U
-            returnType: int
-''');
-  }
-
-  test_enum_method_toString() async {
-    var library = await checkLibrary(r'''
-enum E {
-  v;
-  String toString() => 'E';
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-        methods
-          toString @23
-            returnType: String
-''');
-  }
-
-  test_enum_mixins() async {
-    var library = await checkLibrary(r'''
-mixin M {}
-enum E with M {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @16
-        supertype: Enum
-        mixins
-          M
-        fields
-          static const enumConstant v @29
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_enum_mixins_inference() async {
-    var library = await checkLibrary(r'''
-mixin M1<T> {}
-mixin M2<T> on M1<T> {}
-enum E with M1<int>, M2 {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @44
-        supertype: Enum
-        mixins
-          M1<int>
-          M2<int>
-        fields
-          static const enumConstant v @67
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    mixins
-      mixin M1 @6
-        typeParameters
-          covariant T @9
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-      mixin M2 @21
-        typeParameters
-          covariant T @24
-            defaultType: dynamic
-        superclassConstraints
-          M1<T>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_enum_setter() async {
-    var library = await checkLibrary(r'''
-enum E{
-  v;
-  set foo(int _) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @10
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-          synthetic foo @-1
-            type: int
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-          set foo @19
-            parameters
-              requiredPositional _ @27
-                type: int
-            returnType: void
-''');
-  }
-
-  test_enum_typeParameters() async {
-    var library = await checkLibrary('''
-enum E<T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @7
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          static const enumConstant v @14
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_bound() async {
-    var library = await checkLibrary('''
-enum E<T extends num, U extends T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      notSimplyBounded enum E @5
-        typeParameters
-          covariant T @7
-            bound: num
-            defaultType: num
-          covariant U @22
-            bound: T
-            defaultType: num
-        supertype: Enum
-        fields
-          static const enumConstant v @39
-            type: E<num, num>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<num, num>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: num, U: num}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<num, num>
-          synthetic static const values @-1
-            type: List<E<num, num>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<num, num>
-                rightBracket: ] @0
-                staticType: List<E<num, num>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<num, num>
-          synthetic static get values @-1
-            returnType: List<E<num, num>>
-''');
-  }
-
-  test_enum_typeParameters_cycle_1of1() async {
-    var library = await checkLibrary('''
-enum E<T extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      notSimplyBounded enum E @5
-        typeParameters
-          covariant T @7
-            bound: dynamic
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_cycle_2of3() async {
-    var library = await checkLibrary(r'''
-enum E<T extends V, U extends num, V extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      notSimplyBounded enum E @5
-        typeParameters
-          covariant T @7
-            bound: dynamic
-            defaultType: dynamic
-          covariant U @20
-            bound: num
-            defaultType: num
-          covariant V @35
-            bound: dynamic
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic, num, dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic, num, dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic, num, dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_defaultType_cycle_genericFunctionType() async {
-    var library = await checkLibrary(r'''
-enum E<T extends void Function(E)> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      notSimplyBounded enum E @5
-        typeParameters
-          covariant T @7
-            bound: void Function(E<dynamic>)
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_contravariant() async {
-    var library = await checkLibrary('''
-enum E<in T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_covariant() async {
-    var library = await checkLibrary('''
-enum E<out T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          covariant T @11
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_invariant() async {
-    var library = await checkLibrary('''
-enum E<inout T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          invariant T @13
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_multiple() async {
-    var library = await checkLibrary('''
-enum E<inout T, in U, out V> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        typeParameters
-          invariant T @13
-            defaultType: dynamic
-          contravariant U @19
-            defaultType: dynamic
-          covariant V @26
-            defaultType: dynamic
-        supertype: Enum
-        fields
-          synthetic static const values @-1
-            type: List<E<dynamic, dynamic, dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic, dynamic, dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get values @-1
-            returnType: List<E<dynamic, dynamic, dynamic>>
-''');
-  }
-
-  test_enum_value_documented() async {
-    var library = await checkLibrary('''
-enum E {
-  /**
-   * aaa
-   */
-  a,
-  /// bbb
-  b
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @32
-            documentationComment: /**\n   * aaa\n   */
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @47
-            documentationComment: /// bbb
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enum_value_documented_withMetadata() async {
-    var library = await checkLibrary('''
-enum E {
-  /**
-   * aaa
-   */
-  @annotation
-  a,
-  /// bbb
-  @annotation
-  b,
-}
-
-const int annotation = 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @46
-            documentationComment: /**\n   * aaa\n   */
-            metadata
-              Annotation
-                atSign: @ @32
-                name: SimpleIdentifier
-                  token: annotation @33
-                  staticElement: self::@getter::annotation
-                  staticType: null
-                element: self::@getter::annotation
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @75
-            documentationComment: /// bbb
-            metadata
-              Annotation
-                atSign: @ @61
-                name: SimpleIdentifier
-                  token: annotation @62
-                  staticElement: self::@getter::annotation
-                  staticType: null
-                element: self::@getter::annotation
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static const annotation @91
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @104
-            staticType: int
-    accessors
-      synthetic static get annotation @-1
-        returnType: int
-''');
-  }
-
-  test_enum_values() async {
-    var library = await checkLibrary('enum E { v1, v2 }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v1 @9
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant v2 @13
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v1 @-1
-                    staticElement: self::@enum::E::@getter::v1
-                    staticType: E
-                  SimpleIdentifier
-                    token: v2 @-1
-                    staticElement: self::@enum::E::@getter::v2
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v1 @-1
-            returnType: E
-          synthetic static get v2 @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_enums() async {
-    var library = await checkLibrary('enum E1 { v1 } enum E2 { v2 }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E1 @5
-        supertype: Enum
-        fields
-          static const enumConstant v1 @10
-            type: E1
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E1 @-1
-                      staticElement: self::@enum::E1
-                      staticType: null
-                    type: E1
-                  staticElement: self::@enum::E1::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E1
-          synthetic static const values @-1
-            type: List<E1>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v1 @-1
-                    staticElement: self::@enum::E1::@getter::v1
-                    staticType: E1
-                rightBracket: ] @0
-                staticType: List<E1>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v1 @-1
-            returnType: E1
-          synthetic static get values @-1
-            returnType: List<E1>
-      enum E2 @20
-        supertype: Enum
-        fields
-          static const enumConstant v2 @25
-            type: E2
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E2 @-1
-                      staticElement: self::@enum::E2
-                      staticType: null
-                    type: E2
-                  staticElement: self::@enum::E2::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E2
-          synthetic static const values @-1
-            type: List<E2>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v2 @-1
-                    staticElement: self::@enum::E2::@getter::v2
-                    staticType: E2
-                rightBracket: ] @0
-                staticType: List<E2>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v2 @-1
-            returnType: E2
-          synthetic static get values @-1
-            returnType: List<E2>
-''');
-  }
-
-  test_error_extendsEnum() async {
-    var library = await checkLibrary('''
-enum E {a, b, c}
-
-class M {}
-
-class A extends E {
-  foo() {}
-}
-
-class B implements E, M {
-  foo() {}
-}
-
-class C extends Object with E, M {
-  foo() {}
-}
-
-class D = Object with M, E;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class M @24
-        constructors
-          synthetic @-1
-      class A @36
-        constructors
-          synthetic @-1
-        methods
-          foo @52
-            returnType: dynamic
-      class B @70
-        interfaces
-          M
-        constructors
-          synthetic @-1
-        methods
-          foo @92
-            returnType: dynamic
-      class C @110
-        supertype: Object
-        mixins
-          M
-        constructors
-          synthetic @-1
-        methods
-          foo @141
-            returnType: dynamic
-      class alias D @159
-        supertype: Object
-        mixins
-          M
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: dart:core::@class::Object::@constructor::•
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @8
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant c @14
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_executable_parameter_type_typedef() async {
-    var library = await checkLibrary(r'''
-typedef F(int p);
-main(F f) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional p @14
-              type: int
-          returnType: dynamic
-    functions
-      main @18
-        parameters
-          requiredPositional f @25
-            type: dynamic Function(int)
-              aliasElement: self::@typeAlias::F
-        returnType: dynamic
-''');
-  }
-
-  test_export_class() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    C: a.dart;C
-''',
-        withExportScope: true);
-  }
-
-  test_export_class_type_alias() async {
-    addLibrarySource('/a.dart', r'''
-class C = _D with _E;
-class _D {}
-class _E {}
-''');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    C: a.dart;C
-''',
-        withExportScope: true);
-  }
-
-  test_export_configurations_useDefault() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    foo.dart
-  definingUnit
-  exportScope
-    A: foo.dart;A
-''',
-        withExportScope: true);
-    expect(library.exports[0].exportedLibrary!.source.shortName, 'foo.dart');
-  }
-
-  test_export_configurations_useFirst() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    foo_io.dart
-  definingUnit
-  exportScope
-    A: foo_io.dart;A
-''',
-        withExportScope: true);
-    expect(library.exports[0].exportedLibrary!.source.shortName, 'foo_io.dart');
-  }
-
-  test_export_configurations_useSecond() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    foo_html.dart
-  definingUnit
-  exportScope
-    A: foo_html.dart;A
-''',
-        withExportScope: true);
-    ExportElement export = library.exports[0];
-    expect(export.exportedLibrary!.source.shortName, 'foo_html.dart');
-  }
-
-  test_export_function() async {
-    addLibrarySource('/a.dart', 'f() {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    f: a.dart;f
-''',
-        withExportScope: true);
-  }
-
-  test_export_getter() async {
-    addLibrarySource('/a.dart', 'get f() => null;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_export_hide() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" hide Stream, Future;');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    dart:async
-      combinators
-        hide: Stream, Future
-  definingUnit
-  exportScope
-    Completer: dart:async;Completer
-    FutureOr: dart:async;FutureOr
-    StreamIterator: dart:async;dart:async/stream.dart;StreamIterator
-    StreamSubscription: dart:async;dart:async/stream.dart;StreamSubscription
-    StreamTransformer: dart:async;dart:async/stream.dart;StreamTransformer
-    Timer: dart:async;Timer
-''',
-        withExportScope: true);
-  }
-
-  test_export_multiple_combinators() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" hide Stream show Future;');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    dart:async
-      combinators
-        hide: Stream
-        show: Future
-  definingUnit
-  exportScope
-    Future: dart:async;Future
-''',
-        withExportScope: true);
-  }
-
-  test_export_setter() async {
-    addLibrarySource('/a.dart', 'void set f(value) {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    f=: a.dart;f=
-''',
-        withExportScope: true);
-  }
-
-  test_export_show() async {
-    addLibrary('dart:async');
-    var library =
-        await checkLibrary('export "dart:async" show Future, Stream;');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    dart:async
-      combinators
-        show: Future, Stream
-  definingUnit
-  exportScope
-    Future: dart:async;Future
-    Stream: dart:async;dart:async/stream.dart;Stream
-''',
-        withExportScope: true);
-  }
-
-  test_export_show_getter_setter() async {
-    addLibrarySource('/a.dart', '''
-get f => null;
-void set f(value) {}
-''');
-    var library = await checkLibrary('export "a.dart" show f;');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-      combinators
-        show: f
-  definingUnit
-  exportScope
-    f: a.dart;f?
-    f=: a.dart;f=
-''',
-        withExportScope: true);
-  }
-
-  test_export_typedef() async {
-    addLibrarySource('/a.dart', 'typedef F();');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    F: a.dart;F
-''',
-        withExportScope: true);
-  }
-
-  test_export_uri() async {
-    var library = await checkLibrary('''
-export 'foo.dart';
-''');
-    expect(library.exports[0].uri, 'foo.dart');
-  }
-
-  test_export_variable() async {
-    addLibrarySource('/a.dart', 'var x;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    x: a.dart;x?
-    x=: a.dart;x=
-''',
-        withExportScope: true);
-  }
-
-  test_export_variable_const() async {
-    addLibrarySource('/a.dart', 'const x = 0;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    x: a.dart;x?
-''',
-        withExportScope: true);
-  }
-
-  test_export_variable_final() async {
-    addLibrarySource('/a.dart', 'final x = 0;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-  definingUnit
-  exportScope
-    x: a.dart;x?
-''',
-        withExportScope: true);
-  }
-
-  test_exportImport_configurations_useDefault() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    addLibrarySource('/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await checkLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    bar.dart
-  definingUnit
-    classes
-      class B @25
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo.dart');
-  }
-
-  test_exportImport_configurations_useFirst() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'true',
-      'dart.library.html': 'false',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    addLibrarySource('/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await checkLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    bar.dart
-  definingUnit
-    classes
-      class B @25
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_io.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_exportImport_configurations_useSecond() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    addLibrarySource('/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await checkLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    bar.dart
-  definingUnit
-    classes
-      class B @25
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_html.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_exports() async {
-    addLibrarySource('/a.dart', 'library a;');
-    addLibrarySource('/b.dart', 'library b;');
-    var library = await checkLibrary('export "a.dart"; export "b.dart";');
-    checkElementText(
-        library,
-        r'''
-library
-  exports
-    a.dart
-    b.dart
-  definingUnit
-  exportScope
-''',
-        withExportScope: true);
-  }
-
-  test_expr_invalid_typeParameter_asPrefix() async {
-    var library = await checkLibrary('''
-class C<T> {
-  final f = T.k;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          final f @21
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: dynamic
-''');
-  }
-
-  test_extension_documented_tripleSlash() async {
-    var library = await checkLibrary('''
-/// aaa
-/// bbbb
-/// cc
-extension E on int {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      E @34
-        documentationComment: /// aaa\n/// bbbb\n/// cc
-        extendedType: int
-''');
-  }
-
-  test_extension_field_inferredType_const() async {
-    var library = await checkLibrary('''
-extension E on int {
-  static const x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      E @10
-        extendedType: int
-        fields
-          static const x @36
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @40
-                staticType: int
-        accessors
-          synthetic static get x @-1
-            returnType: int
-''');
-  }
-
-  test_function_async() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-Future f() async {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    functions
-      f @28 async
-        returnType: Future<dynamic>
-''');
-  }
-
-  test_function_asyncStar() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-Stream f() async* {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    functions
-      f @28 async*
-        returnType: Stream<dynamic>
-''');
-  }
-
-  test_function_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-f() {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @60
-        documentationComment: /**\n * Docs\n */
-        returnType: dynamic
-''');
-  }
-
-  test_function_entry_point() async {
-    var library = await checkLibrary('main() {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      main @0
-        returnType: dynamic
-''');
-  }
-
-  test_function_entry_point_in_export() async {
-    addLibrarySource('/a.dart', 'library a; main() {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_function_entry_point_in_export_hidden() async {
-    addLibrarySource('/a.dart', 'library a; main() {}');
-    var library = await checkLibrary('export "a.dart" hide main;');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-      combinators
-        hide: main
-  definingUnit
-''');
-  }
-
-  test_function_entry_point_in_part() async {
-    addSource('/a.dart', 'part of my.lib; main() {}');
-    var library = await checkLibrary('library my.lib; part "a.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      functions
-        main @16
-          returnType: dynamic
-''');
-  }
-
-  test_function_external() async {
-    var library = await checkLibrary('external f();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      external f @9
-        returnType: dynamic
-''');
-  }
-
-  test_function_hasImplicitReturnType_false() async {
-    var library = await checkLibrary('''
-int f() => 0;
-''');
-    var f = library.definingCompilationUnit.functions.single;
-    expect(f.hasImplicitReturnType, isFalse);
-  }
-
-  test_function_hasImplicitReturnType_true() async {
-    var library = await checkLibrary('''
-f() => 0;
-''');
-    var f = library.definingCompilationUnit.functions.single;
-    expect(f.hasImplicitReturnType, isTrue);
-  }
-
-  test_function_parameter_const() async {
-    var library = await checkLibrary('''
-void f(const x) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional x @13
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal() async {
-    var library = await checkLibrary('''
-void f(int this.a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional final this.a @16
-            type: int
-            field: <null>
-        returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal_default() async {
-    var library = await checkLibrary('''
-void f({int this.a: 42}) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          optionalNamed final this.a @17
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @20
-                staticType: int
-            field: <null>
-        returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal_functionTyped() async {
-    var library = await checkLibrary('''
-void f(int this.a(int b)) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional final this.a @16
-            type: int Function(int)
-            parameters
-              requiredPositional b @22
-                type: int
-            field: <null>
-        returnType: void
-''');
-  }
-
-  test_function_parameter_final() async {
-    var library = await checkLibrary('f(final x) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional final x @8
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_named() async {
-    var library = await checkLibrary('f({x}) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          optionalNamed x @3
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_positional() async {
-    var library = await checkLibrary('f([x]) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          optionalPositional x @3
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_required() async {
-    var library = await checkLibrary('f(x) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional x @2
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_parameters() async {
-    var library = await checkLibrary('f(g(x, y)) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional g @2
-            type: dynamic Function(dynamic, dynamic)
-            parameters
-              requiredPositional x @4
-                type: dynamic
-              requiredPositional y @7
-                type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_return_type() async {
-    var library = await checkLibrary('f(int g()) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional g @6
-            type: int Function()
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_return_type_void() async {
-    var library = await checkLibrary('f(void g()) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional g @7
-            type: void Function()
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameter_type() async {
-    var library = await checkLibrary('f(int i) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional i @6
-            type: int
-        returnType: dynamic
-''');
-  }
-
-  test_function_parameters() async {
-    var library = await checkLibrary('f(x, y) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        parameters
-          requiredPositional x @2
-            type: dynamic
-          requiredPositional y @5
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_function_return_type() async {
-    var library = await checkLibrary('int f() => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @4
-        returnType: int
-''');
-  }
-
-  test_function_return_type_implicit() async {
-    var library = await checkLibrary('f() => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        returnType: dynamic
-''');
-  }
-
-  test_function_return_type_void() async {
-    var library = await checkLibrary('void f() {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        returnType: void
-''');
-  }
-
-  test_function_type_parameter() async {
-    var library = await checkLibrary('T f<T, U>(U u) => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @2
-        typeParameters
-          covariant T @4
-          covariant U @7
-        parameters
-          requiredPositional u @12
-            type: U
-        returnType: T
-''');
-  }
-
-  test_function_type_parameter_with_function_typed_parameter() async {
-    var library = await checkLibrary('void f<T, U>(T x(U u)) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-          covariant U @10
-        parameters
-          requiredPositional x @15
-            type: T Function(U)
-            parameters
-              requiredPositional u @19
-                type: U
-        returnType: void
-''');
-  }
-
-  test_function_typed_parameter_implicit() async {
-    var library = await checkLibrary('f(g()) => null;');
-    expect(
-        library
-            .definingCompilationUnit.functions[0].parameters[0].hasImplicitType,
-        isFalse);
-  }
-
-  test_functions() async {
-    var library = await checkLibrary('f() {} g() {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        returnType: dynamic
-      g @7
-        returnType: dynamic
-''');
-  }
-
-  test_functionTypeAlias_enclosingElements() async {
-    var library = await checkLibrary(r'''
-typedef void F<T>(int a);
-''');
-    var unit = library.definingCompilationUnit;
-
-    var F = unit.typeAliases[0];
-    expect(F.name, 'F');
-
-    var T = F.typeParameters[0];
-    expect(T.name, 'T');
-    expect(T.enclosingElement, same(F));
-
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement, same(F));
-
-    var a = function.parameters[0];
-    expect(a.name, 'a');
-    expect(a.enclosingElement, same(function));
-  }
-
-  test_functionTypeAlias_type_element() async {
-    var library = await checkLibrary(r'''
-typedef T F<T>();
-F<int> a;
-''');
-    var unit = library.definingCompilationUnit;
-    var type = unit.topLevelVariables[0].type as FunctionType;
-
-    expect(type.alias!.element, same(unit.typeAliases[0]));
-    _assertTypeStrings(type.alias!.typeArguments, ['int']);
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant() async {
-    var library = await checkLibrary(r'''
-typedef void F<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        typeParameters
-          contravariant T @15
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @20
-              type: T
-          returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant2() async {
-    var library = await checkLibrary(r'''
-typedef void F1<T>(T a);
-typedef F1<T> F2<T>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F1 @13
-        typeParameters
-          contravariant T @16
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @21
-              type: T
-          returnType: void
-      functionTypeAliasBased F2 @39
-        typeParameters
-          contravariant T @42
-            defaultType: dynamic
-        aliasedType: void Function(T) Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant3() async {
-    var library = await checkLibrary(r'''
-typedef F1<T> F2<T>();
-typedef void F1<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F2 @14
-        typeParameters
-          contravariant T @17
-            defaultType: dynamic
-        aliasedType: void Function(T) Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-      functionTypeAliasBased F1 @36
-        typeParameters
-          contravariant T @39
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @44
-              type: T
-          returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant() async {
-    var library = await checkLibrary(r'''
-typedef T F<T>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          covariant T @12
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant2() async {
-    var library = await checkLibrary(r'''
-typedef List<T> F<T>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @16
-        typeParameters
-          covariant T @18
-            defaultType: dynamic
-        aliasedType: List<T> Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: List<T>
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant3() async {
-    var library = await checkLibrary(r'''
-typedef T F1<T>();
-typedef F1<T> F2<T>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F1 @10
-        typeParameters
-          covariant T @13
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-      functionTypeAliasBased F2 @33
-        typeParameters
-          covariant T @36
-            defaultType: dynamic
-        aliasedType: T Function() Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant4() async {
-    var library = await checkLibrary(r'''
-typedef void F1<T>(T a);
-typedef void F2<T>(F1<T> a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F1 @13
-        typeParameters
-          contravariant T @16
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @21
-              type: T
-          returnType: void
-      functionTypeAliasBased F2 @38
-        typeParameters
-          covariant T @41
-            defaultType: dynamic
-        aliasedType: void Function(void Function(T))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @50
-              type: void Function(T)
-                aliasElement: self::@typeAlias::F1
-                aliasArguments
-                  T
-          returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_invariant() async {
-    var library = await checkLibrary(r'''
-typedef T F<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          invariant T @12
-            defaultType: dynamic
-        aliasedType: T Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @17
-              type: T
-          returnType: T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_invariant2() async {
-    var library = await checkLibrary(r'''
-typedef T F1<T>();
-typedef F1<T> F2<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F1 @10
-        typeParameters
-          covariant T @13
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-      functionTypeAliasBased F2 @33
-        typeParameters
-          invariant T @36
-            defaultType: dynamic
-        aliasedType: T Function() Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @41
-              type: T
-          returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_unrelated() async {
-    var library = await checkLibrary(r'''
-typedef void F<T>(int a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        typeParameters
-          unrelated T @15
-            defaultType: dynamic
-        aliasedType: void Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @22
-              type: int
-          returnType: void
-''');
-  }
-
-  test_futureOr() async {
-    var library = await checkLibrary('import "dart:async"; FutureOr<int> x;');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static x @35
-        type: FutureOr<int>
-    accessors
-      synthetic static get x @-1
-        returnType: FutureOr<int>
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: FutureOr<int>
-        returnType: void
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(1));
-    _assertTypeStr(variables[0].type, 'FutureOr<int>');
-  }
-
-  test_futureOr_const() async {
-    var library =
-        await checkLibrary('import "dart:async"; const x = FutureOr;');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static const x @27
-        type: Type
-        constantInitializer
-          SimpleIdentifier
-            token: FutureOr @31
-            staticElement: dart:async::@class::FutureOr
-            staticType: Type
-    accessors
-      synthetic static get x @-1
-        returnType: Type
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(1));
-    var x = variables[0] as ConstTopLevelVariableElementImpl;
-    _assertTypeStr(x.type, 'Type');
-    expect(x.constantInitializer.toString(), 'FutureOr');
-  }
-
-  test_futureOr_inferred() async {
-    var library = await checkLibrary('''
-import "dart:async";
-FutureOr<int> f() => null;
-var x = f();
-var y = x.then((z) => z.asDouble());
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static x @52
-        type: FutureOr<int>
-      static y @65
-        type: dynamic
-    accessors
-      synthetic static get x @-1
-        returnType: FutureOr<int>
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: FutureOr<int>
-        returnType: void
-      synthetic static get y @-1
-        returnType: dynamic
-      synthetic static set y @-1
-        parameters
-          requiredPositional _y @-1
-            type: dynamic
-        returnType: void
-    functions
-      f @35
-        returnType: FutureOr<int>
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(2));
-    var x = variables[0];
-    expect(x.name, 'x');
-    var y = variables[1];
-    expect(y.name, 'y');
-    _assertTypeStr(x.type, 'FutureOr<int>');
-    _assertTypeStr(y.type, 'dynamic');
-  }
-
-  test_generic_function_type_nullability_none() async {
-    var library = await checkLibrary('''
-void Function() f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static f @16
-        type: void Function()
-    accessors
-      synthetic static get f @-1
-        returnType: void Function()
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: void Function()
-        returnType: void
-''');
-  }
-
-  test_generic_function_type_nullability_question() async {
-    var library = await checkLibrary('''
-void Function()? f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static f @17
-        type: void Function()?
-    accessors
-      synthetic static get f @-1
-        returnType: void Function()?
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: void Function()?
-        returnType: void
-''');
-  }
-
-  test_generic_function_type_nullability_star() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-void Function() f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static f @16
-        type: void Function()*
-    accessors
-      synthetic static get f @-1
-        returnType: void Function()*
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: void Function()*
-        returnType: void
-''');
-  }
-
-  test_generic_gClass_gMethodStatic() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  static void m<V, W>(V v, W w) {
-    void f<X, Y>(V v, W w, X x, Y y) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          static m @30
-            typeParameters
-              covariant V @32
-              covariant W @35
-            parameters
-              requiredPositional v @40
-                type: V
-              requiredPositional w @45
-                type: W
-            returnType: void
-''');
-  }
-
-  test_genericFunction_asFunctionReturnType() async {
-    var library = await checkLibrary(r'''
-int Function(int a, String b) f() => null;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @30
-        returnType: int Function(int, String)
-''');
-  }
-
-  test_genericFunction_asFunctionTypedParameterReturnType() async {
-    var library = await checkLibrary(r'''
-void f(int Function(int a, String b) p(num c)) => null;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional p @37
-            type: int Function(int, String) Function(num)
-            parameters
-              requiredPositional c @43
-                type: num
-        returnType: void
-''');
-  }
-
-  test_genericFunction_asGenericFunctionReturnType() async {
-    var library = await checkLibrary(r'''
-typedef F = void Function(String a) Function(int b);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        aliasedType: void Function(String) Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional b @49
-              type: int
-          returnType: void Function(String)
-''');
-  }
-
-  test_genericFunction_asMethodReturnType() async {
-    var library = await checkLibrary(r'''
-class C {
-  int Function(int a, String b) m() => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          m @42
-            returnType: int Function(int, String)
-''');
-  }
-
-  test_genericFunction_asParameterType() async {
-    var library = await checkLibrary(r'''
-void f(int Function(int a, String b) p) => null;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional p @37
-            type: int Function(int, String)
-        returnType: void
-''');
-  }
-
-  test_genericFunction_asTopLevelVariableType() async {
-    var library = await checkLibrary(r'''
-int Function(int a, String b) v;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @30
-        type: int Function(int, String)
-    accessors
-      synthetic static get v @-1
-        returnType: int Function(int, String)
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int Function(int, String)
-        returnType: void
-''');
-  }
-
-  test_genericFunction_asTypeArgument_ofAnnotation_class() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-@A<int Function(String a)>()
-class B {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class B @64
-        metadata
-          Annotation
-            atSign: @ @29
-            name: SimpleIdentifier
-              token: A @30
-              staticElement: self::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @31
-              arguments
-                GenericFunctionType
-                  returnType: NamedType
-                    name: SimpleIdentifier
-                      token: int @32
-                      staticElement: dart:core::@class::int
-                      staticType: null
-                    type: int
-                  functionKeyword: Function @36
-                  parameters: FormalParameterList
-                    leftParenthesis: ( @44
-                    parameter: SimpleFormalParameter
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: String @45
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      identifier: SimpleIdentifier
-                        token: a @52
-                        staticElement: a@52
-                        staticType: null
-                      declaredElement: a@52
-                      declaredElementType: String
-                    rightParenthesis: ) @53
-                  declaredElement: GenericFunctionTypeElement
-                    parameters
-                      a
-                        kind: required positional
-                        type: String
-                    returnType: int
-                    type: int Function(String)
-                  type: int Function(String)
-              rightBracket: > @54
-            arguments: ArgumentList
-              leftParenthesis: ( @55
-              rightParenthesis: ) @56
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int Function(String)}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_genericFunction_asTypeArgument_ofAnnotation_topLevelVariable() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-@A<int Function(String a)>()
-var v = 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static v @62
-        metadata
-          Annotation
-            atSign: @ @29
-            name: SimpleIdentifier
-              token: A @30
-              staticElement: self::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @31
-              arguments
-                GenericFunctionType
-                  returnType: NamedType
-                    name: SimpleIdentifier
-                      token: int @32
-                      staticElement: dart:core::@class::int
-                      staticType: null
-                    type: int
-                  functionKeyword: Function @36
-                  parameters: FormalParameterList
-                    leftParenthesis: ( @44
-                    parameter: SimpleFormalParameter
-                      type: NamedType
-                        name: SimpleIdentifier
-                          token: String @45
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      identifier: SimpleIdentifier
-                        token: a @52
-                        staticElement: a@52
-                        staticType: null
-                      declaredElement: a@52
-                      declaredElementType: String
-                    rightParenthesis: ) @53
-                  declaredElement: GenericFunctionTypeElement
-                    parameters
-                      a
-                        kind: required positional
-                        type: String
-                    returnType: int
-                    type: int Function(String)
-                  type: int Function(String)
-              rightBracket: > @54
-            arguments: ArgumentList
-              leftParenthesis: ( @55
-              rightParenthesis: ) @56
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int Function(String)}
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_optionalNamed() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function({int? a})>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static const v @35
-        type: A<String Function({int? a})>
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @39
-                  staticElement: self::@class::A
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @40
-                  arguments
-                    GenericFunctionType
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          token: String @41
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        leftDelimiter: { @57
-                        parameter: DefaultFormalParameter
-                          parameter: SimpleFormalParameter
-                            type: NamedType
-                              name: SimpleIdentifier
-                                token: int @58
-                                staticElement: dart:core::@class::int
-                                staticType: null
-                              question: ? @61
-                              type: int?
-                            identifier: SimpleIdentifier
-                              token: a @63
-                              staticElement: a@63
-                              staticType: null
-                            declaredElement: a@63
-                            declaredElementType: int?
-                          declaredElement: a@63
-                          declaredElementType: int?
-                        rightDelimiter: } @64
-                        rightParenthesis: ) @65
-                      declaredElement: GenericFunctionTypeElement
-                        parameters
-                          a
-                            kind: optional named
-                            type: int?
-                        returnType: String
-                        type: String Function({int? a})
-                      type: String Function({int? a})
-                  rightBracket: > @66
-                type: A<String Function({int? a})>
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function({int? a})}
-            argumentList: ArgumentList
-              leftParenthesis: ( @67
-              rightParenthesis: ) @68
-            staticType: A<String Function({int? a})>
-    accessors
-      synthetic static get v @-1
-        returnType: A<String Function({int? a})>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_optionalPositional() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function([int? a])>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static const v @35
-        type: A<String Function([int?])>
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @39
-                  staticElement: self::@class::A
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @40
-                  arguments
-                    GenericFunctionType
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          token: String @41
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        leftDelimiter: [ @57
-                        parameter: DefaultFormalParameter
-                          parameter: SimpleFormalParameter
-                            type: NamedType
-                              name: SimpleIdentifier
-                                token: int @58
-                                staticElement: dart:core::@class::int
-                                staticType: null
-                              question: ? @61
-                              type: int?
-                            identifier: SimpleIdentifier
-                              token: a @63
-                              staticElement: a@63
-                              staticType: null
-                            declaredElement: a@63
-                            declaredElementType: int?
-                          declaredElement: a@63
-                          declaredElementType: int?
-                        rightDelimiter: ] @64
-                        rightParenthesis: ) @65
-                      declaredElement: GenericFunctionTypeElement
-                        parameters
-                          a
-                            kind: optional positional
-                            type: int?
-                        returnType: String
-                        type: String Function([int?])
-                      type: String Function([int?])
-                  rightBracket: > @66
-                type: A<String Function([int?])>
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function([int?])}
-            argumentList: ArgumentList
-              leftParenthesis: ( @67
-              rightParenthesis: ) @68
-            staticType: A<String Function([int?])>
-    accessors
-      synthetic static get v @-1
-        returnType: A<String Function([int?])>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_requiredNamed() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function({required int a})>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static const v @35
-        type: A<String Function({required int a})>
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @39
-                  staticElement: self::@class::A
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @40
-                  arguments
-                    GenericFunctionType
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          token: String @41
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        leftDelimiter: { @57
-                        parameter: DefaultFormalParameter
-                          parameter: SimpleFormalParameter
-                            requiredKeyword: required @58
-                            type: NamedType
-                              name: SimpleIdentifier
-                                token: int @67
-                                staticElement: dart:core::@class::int
-                                staticType: null
-                              type: int
-                            identifier: SimpleIdentifier
-                              token: a @71
-                              staticElement: a@71
-                              staticType: null
-                            declaredElement: a@71
-                            declaredElementType: int
-                          declaredElement: a@71
-                          declaredElementType: int
-                        rightDelimiter: } @72
-                        rightParenthesis: ) @73
-                      declaredElement: GenericFunctionTypeElement
-                        parameters
-                          a
-                            kind: required named
-                            type: int
-                        returnType: String
-                        type: String Function({required int a})
-                      type: String Function({required int a})
-                  rightBracket: > @74
-                type: A<String Function({required int a})>
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function({required int a})}
-            argumentList: ArgumentList
-              leftParenthesis: ( @75
-              rightParenthesis: ) @76
-            staticType: A<String Function({required int a})>
-    accessors
-      synthetic static get v @-1
-        returnType: A<String Function({required int a})>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_requiredPositional() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function(int a)>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static const v @35
-        type: A<String Function(int)>
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @39
-                  staticElement: self::@class::A
-                  staticType: null
-                typeArguments: TypeArgumentList
-                  leftBracket: < @40
-                  arguments
-                    GenericFunctionType
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          token: String @41
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                        type: String
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        parameter: SimpleFormalParameter
-                          type: NamedType
-                            name: SimpleIdentifier
-                              token: int @57
-                              staticElement: dart:core::@class::int
-                              staticType: null
-                            type: int
-                          identifier: SimpleIdentifier
-                            token: a @61
-                            staticElement: a@61
-                            staticType: null
-                          declaredElement: a@61
-                          declaredElementType: int
-                        rightParenthesis: ) @62
-                      declaredElement: GenericFunctionTypeElement
-                        parameters
-                          a
-                            kind: required positional
-                            type: int
-                        returnType: String
-                        type: String Function(int)
-                      type: String Function(int)
-                  rightBracket: > @63
-                type: A<String Function(int)>
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function(int)}
-            argumentList: ArgumentList
-              leftParenthesis: ( @64
-              rightParenthesis: ) @65
-            staticType: A<String Function(int)>
-    accessors
-      synthetic static get v @-1
-        returnType: A<String Function(int)>
-''');
-  }
-
-  test_genericFunction_boundOf_typeParameter_ofMixin() async {
-    var library = await checkLibrary(r'''
-mixin B<X extends void Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin B @6
-        typeParameters
-          covariant X @8
-            bound: void Function()
-            defaultType: void Function()
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_genericFunction_typeArgument_ofSuperclass_ofClassAlias() async {
-    var library = await checkLibrary(r'''
-class A<T> {}
-mixin M {}
-class B = A<void Function()> with M;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class alias B @31
-        supertype: A<void Function()>
-        mixins
-          M
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: void Function()}
-    mixins
-      mixin M @20
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_genericFunction_typeParameter_asTypedefArgument() async {
-    var library = await checkLibrary(r'''
-typedef F1 = Function<V1>(F2<V1>);
-typedef F2<V2> = V2 Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F1 @8
-        aliasedType: dynamic Function<V1>(V1 Function())
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant V1 @22
-          parameters
-            requiredPositional @-1
-              type: V1 Function()
-                aliasElement: self::@typeAlias::F2
-                aliasArguments
-                  V1
-          returnType: dynamic
-      F2 @43
-        typeParameters
-          covariant V2 @46
-            defaultType: dynamic
-        aliasedType: V2 Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: V2
-''');
-  }
-
-  test_genericTypeAlias_enclosingElements() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = void Function<U>(int a);
-''');
-    var unit = library.definingCompilationUnit;
-
-    var F = unit.typeAliases[0];
-    expect(F.name, 'F');
-
-    var T = F.typeParameters[0];
-    expect(T.name, 'T');
-    expect(T.enclosingElement, same(F));
-
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement, same(F));
-
-    var U = function.typeParameters[0];
-    expect(U.name, 'U');
-    expect(U.enclosingElement, same(function));
-
-    var a = function.parameters[0];
-    expect(a.name, 'a');
-    expect(a.enclosingElement, same(function));
-  }
-
-  test_genericTypeAlias_recursive() async {
-    var library = await checkLibrary('''
-typedef F<X extends F> = Function(F);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        typeParameters
-          unrelated X @10
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: dynamic Function(dynamic)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_getter_async() async {
-    var library = await checkLibrary(r'''
-Future<int> get foo async => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: Future<int>
-    accessors
-      static get foo @16 async
-        returnType: Future<int>
-''');
-  }
-
-  test_getter_asyncStar() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-Stream<int> get foo async* {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: Stream<int>
-    accessors
-      static get foo @37 async*
-        returnType: Stream<int>
-''');
-  }
-
-  test_getter_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-get x => null;''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: dynamic
-    accessors
-      static get x @64
-        documentationComment: /**\n * Docs\n */
-        returnType: dynamic
-''');
-  }
-
-  test_getter_external() async {
-    var library = await checkLibrary('external int get x;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static external get x @17
-        returnType: int
-''');
-  }
-
-  test_getter_inferred_type_nonStatic_implicit_return() async {
-    var library = await checkLibrary(
-        'class C extends D { get f => null; } abstract class D { int get f; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        fields
-          synthetic f @-1
-            type: int
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          get f @24
-            returnType: int
-      abstract class D @52
-        fields
-          synthetic f @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          abstract get f @64
-            returnType: int
-''');
-  }
-
-  test_getter_syncStar() async {
-    var library = await checkLibrary(r'''
-Iterator<int> get foo sync* {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: Iterator<int>
-    accessors
-      static get foo @18 sync*
-        returnType: Iterator<int>
-''');
-  }
-
-  test_getters() async {
-    var library = await checkLibrary('int get x => null; get y => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-      synthetic static y @-1
-        type: dynamic
-    accessors
-      static get x @8
-        returnType: int
-      static get y @23
-        returnType: dynamic
-''');
-  }
-
-  test_implicitCallTearoff() async {
-    var library = await checkLibrary(r'''
-class C {
-  void call() {}
-}
-
-class D {
-  const D(C c) : this.named(c);
-
-  const D.named(void Function() f);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          call @17
-            returnType: void
-      class D @36
-        constructors
-          const @48
-            parameters
-              requiredPositional c @52
-                type: C
-            constantInitializers
-              RedirectingConstructorInvocation
-                thisKeyword: this @57
-                period: . @61
-                constructorName: SimpleIdentifier
-                  token: named @62
-                  staticElement: self::@class::D::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @67
-                  arguments
-                    ImplicitCallReference
-                      expression: SimpleIdentifier
-                        token: c @68
-                        staticElement: c@52
-                        staticType: C
-                      staticElement: self::@class::C::@method::call
-                      staticType: void Function()
-                  rightParenthesis: ) @69
-                staticElement: self::@class::D::@constructor::named
-            redirectedConstructor: self::@class::D::@constructor::named
-          const named @83
-            periodOffset: 82
-            nameEnd: 88
-            parameters
-              requiredPositional f @105
-                type: void Function()
-''');
-  }
-
-  test_implicitConstructor_named_const() async {
-    var library = await checkLibrary('''
-class C {
-  final Object x;
-  const C.named(this.x);
-}
-const x = C.named(42);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          final x @25
-            type: Object
-        constructors
-          const named @38
-            periodOffset: 37
-            nameEnd: 43
-            parameters
-              requiredPositional final this.x @49
-                type: Object
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: Object
-    topLevelVariables
-      static const x @61
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @65
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C
-              period: . @66
-              name: SimpleIdentifier
-                token: named @67
-                staticElement: self::@class::C::@constructor::named
-                staticType: null
-              staticElement: self::@class::C::@constructor::named
-            argumentList: ArgumentList
-              leftParenthesis: ( @72
-              arguments
-                IntegerLiteral
-                  literal: 42 @73
-                  staticType: int
-              rightParenthesis: ) @75
-            staticType: C
-    accessors
-      synthetic static get x @-1
-        returnType: C
-''');
-  }
-
-  test_implicitTopLevelVariable_getterFirst() async {
-    var library =
-        await checkLibrary('int get x => 0; void set x(int value) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static get x @8
-        returnType: int
-      static set x @25
-        parameters
-          requiredPositional value @31
-            type: int
-        returnType: void
-''');
-  }
-
-  test_implicitTopLevelVariable_setterFirst() async {
-    var library =
-        await checkLibrary('void set x(int value) {} int get x => 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static set x @9
-        parameters
-          requiredPositional value @15
-            type: int
-        returnType: void
-      static get x @33
-        returnType: int
-''');
-  }
-
-  test_import_configurations_useDefault() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-    classes
-      class B @104
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo.dart');
-  }
-
-  test_import_configurations_useFirst() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo_io.dart
-  definingUnit
-    classes
-      class B @104
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_io.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_import_configurations_useFirst_eqTrue() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io == 'true') 'foo_io.dart'
-  if (dart.library.html == 'true') 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo_io.dart
-  definingUnit
-    classes
-      class B @124
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_io.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_import_configurations_useSecond() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo_html.dart
-  definingUnit
-    classes
-      class B @104
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_html.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_import_configurations_useSecond_eqTrue() async {
-    declaredVariables = DeclaredVariables.fromMap({
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    });
-    addLibrarySource('/foo.dart', 'class A {}');
-    addLibrarySource('/foo_io.dart', 'class A {}');
-    addLibrarySource('/foo_html.dart', 'class A {}');
-    var library = await checkLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io == 'true') 'foo_io.dart'
-  if (dart.library.html == 'true') 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo_html.dart
-  definingUnit
-    classes
-      class B @124
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: foo_html.dart::@class::A::@constructor::•
-''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_import_dartCore_explicit() async {
-    var library = await checkLibrary('''
-import 'dart:core';
-import 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:core
-    dart:math
-  definingUnit
-''');
-  }
-
-  test_import_dartCore_implicit() async {
-    var library = await checkLibrary('''
-import 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:math
-  definingUnit
-''');
-  }
-
-  test_import_deferred() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', 'f() {}');
-    var library = await checkLibrary('''
-import 'a.dart' deferred as p;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart deferred as p @28
-  definingUnit
-''');
-  }
-
-  test_import_export() async {
-    addLibrary('dart:async');
-    var library = await checkLibrary('''
-import 'dart:async' as i1;
-export 'dart:math';
-import 'dart:async' as i2;
-export 'dart:math';
-import 'dart:async' as i3;
-export 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as i1 @23
-    dart:async as i2 @70
-    dart:async as i3 @117
-  exports
-    dart:math
-    dart:math
-    dart:math
-  definingUnit
-''');
-  }
-
-  test_import_hide() async {
-    addLibrary('dart:async');
-    var library = await checkLibrary('''
-import 'dart:async' hide Stream, Completer; Future f;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-      combinators
-        hide: Stream, Completer
-  definingUnit
-    topLevelVariables
-      static f @51
-        type: Future<dynamic>
-    accessors
-      synthetic static get f @-1
-        returnType: Future<dynamic>
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: Future<dynamic>
-        returnType: void
-''');
-  }
-
-  test_import_invalidUri_metadata() async {
-    var library = await checkLibrary('''
-@foo
-import 'ht:';
-''');
-    checkElementText(library, r'''
-library
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: foo @1
-        staticElement: <null>
-        staticType: null
-      element: <null>
-  imports
-    <unresolved>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: foo @1
-            staticElement: <null>
-            staticType: null
-          element: <null>
-  definingUnit
-''');
-  }
-
-  test_import_multiple_combinators() async {
-    addLibrary('dart:async');
-    var library = await checkLibrary('''
-import "dart:async" hide Stream show Future;
-Future f;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-      combinators
-        hide: Stream
-        show: Future
-  definingUnit
-    topLevelVariables
-      static f @52
-        type: Future<dynamic>
-    accessors
-      synthetic static get f @-1
-        returnType: Future<dynamic>
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: Future<dynamic>
-        returnType: void
-''');
-  }
-
-  test_import_prefixed() async {
-    addLibrarySource('/a.dart', 'library a; class C {}');
-    var library = await checkLibrary('import "a.dart" as a; a.C c;');
-
-    expect(library.imports[0].prefix!.nameOffset, 19);
-    expect(library.imports[0].prefix!.nameLength, 1);
-
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as a @19
-  definingUnit
-    topLevelVariables
-      static c @26
-        type: C
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_import_self() async {
-    var library = await checkLibrary('''
-import 'test.dart' as p;
-class C {}
-class D extends p.C {} // Prevent "unused import" warning
-''');
-    expect(library.imports, hasLength(2));
-    expect(library.imports[0].importedLibrary!.location, library.location);
-    expect(library.imports[1].importedLibrary!.isDartCore, true);
-    checkElementText(library, r'''
-library
-  imports
-    test.dart as p @22
-  definingUnit
-    classes
-      class C @31
-        constructors
-          synthetic @-1
-      class D @42
-        supertype: C
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::C::@constructor::•
-''');
-  }
-
-  test_import_short_absolute() async {
-    testFile = '/my/project/bin/test.dart';
-    // Note: "/a.dart" resolves differently on Windows vs. Posix.
-    var destinationPath = convertPath('/a.dart');
-    addLibrarySource(destinationPath, 'class C {}');
-    var library = await checkLibrary('import "/a.dart"; C c;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @20
-        type: C
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_import_show() async {
-    addLibrary('dart:async');
-    var library = await checkLibrary('''
-import "dart:async" show Future, Stream;
-Future f;
-Stream s;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-      combinators
-        show: Future, Stream
-  definingUnit
-    topLevelVariables
-      static f @48
-        type: Future<dynamic>
-      static s @58
-        type: Stream<dynamic>
-    accessors
-      synthetic static get f @-1
-        returnType: Future<dynamic>
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: Future<dynamic>
-        returnType: void
-      synthetic static get s @-1
-        returnType: Stream<dynamic>
-      synthetic static set s @-1
-        parameters
-          requiredPositional _s @-1
-            type: Stream<dynamic>
-        returnType: void
-''');
-  }
-
-  test_import_show_offsetEnd() async {
-    var library = await checkLibrary('''
-import "dart:math" show e, pi;
-''');
-    var import = library.imports[0];
-    var combinator = import.combinators[0] as ShowElementCombinator;
-    expect(combinator.offset, 19);
-    expect(combinator.end, 29);
-  }
-
-  test_import_uri() async {
-    var library = await checkLibrary('''
-import 'foo.dart';
-''');
-    expect(library.imports[0].uri, 'foo.dart');
-  }
-
-  test_imports() async {
-    addLibrarySource('/a.dart', 'library a; class C {}');
-    addLibrarySource('/b.dart', 'library b; class D {}');
-    var library =
-        await checkLibrary('import "a.dart"; import "b.dart"; C c; D d;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-    b.dart
-  definingUnit
-    topLevelVariables
-      static c @36
-        type: C
-      static d @41
-        type: D
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get d @-1
-        returnType: D
-      synthetic static set d @-1
-        parameters
-          requiredPositional _d @-1
-            type: D
-        returnType: void
-''');
-  }
-
-  test_infer_generic_typedef_complex() async {
-    var library = await checkLibrary('''
-typedef F<T> = D<T,U> Function<U>();
-class C<V> {
-  const C(F<V> f);
-}
-class D<T,U> {}
-D<int,U> f<U>() => null;
-const x = const C(f);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @43
-        typeParameters
-          covariant V @45
-            defaultType: dynamic
-        constructors
-          const @58
-            parameters
-              requiredPositional f @65
-                type: D<V, U> Function<U>()
-                  aliasElement: self::@typeAlias::F
-                  aliasArguments
-                    V
-      class D @77
-        typeParameters
-          covariant T @79
-            defaultType: dynamic
-          covariant U @81
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: D<T, U> Function<U>()
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant U @31
-          returnType: D<T, U>
-    topLevelVariables
-      static const x @118
-        type: C<int>
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @122
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @128
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C<int>
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {V: int}
-            argumentList: ArgumentList
-              leftParenthesis: ( @129
-              arguments
-                SimpleIdentifier
-                  token: f @130
-                  staticElement: self::@function::f
-                  staticType: D<int, U> Function<U>()
-              rightParenthesis: ) @131
-            staticType: C<int>
-    accessors
-      synthetic static get x @-1
-        returnType: C<int>
-    functions
-      f @96
-        typeParameters
-          covariant U @98
-        returnType: D<int, U>
-''');
-  }
-
-  test_infer_generic_typedef_simple() async {
-    var library = await checkLibrary('''
-typedef F = D<T> Function<T>();
-class C {
-  const C(F f);
-}
-class D<T> {}
-D<T> f<T>() => null;
-const x = const C(f);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @38
-        constructors
-          const @50
-            parameters
-              requiredPositional f @54
-                type: D<T> Function<T>()
-                  aliasElement: self::@typeAlias::F
-      class D @66
-        typeParameters
-          covariant T @68
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      F @8
-        aliasedType: D<T> Function<T>()
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant T @26
-          returnType: D<T>
-    topLevelVariables
-      static const x @101
-        type: C
-        constantInitializer
-          InstanceCreationExpression
-            keyword: const @105
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: C @111
-                  staticElement: self::@class::C
-                  staticType: null
-                type: C
-              staticElement: self::@class::C::@constructor::•
-            argumentList: ArgumentList
-              leftParenthesis: ( @112
-              arguments
-                SimpleIdentifier
-                  token: f @113
-                  staticElement: self::@function::f
-                  staticType: D<T> Function<T>()
-              rightParenthesis: ) @114
-            staticType: C
-    accessors
-      synthetic static get x @-1
-        returnType: C
-    functions
-      f @79
-        typeParameters
-          covariant T @81
-        returnType: D<T>
-''');
-  }
-
-  test_infer_instanceCreation_fromArguments() async {
-    var library = await checkLibrary('''
-class A {}
-
-class B extends A {}
-
-class S<T extends A> {
-  S(T _);
-}
-
-var s = new S(new B());
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @18
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-      class S @40
-        typeParameters
-          covariant T @42
-            bound: A
-            defaultType: A
-        constructors
-          @59
-            parameters
-              requiredPositional _ @63
-                type: T
-    topLevelVariables
-      static s @74
-        type: S<B>
-    accessors
-      synthetic static get s @-1
-        returnType: S<B>
-      synthetic static set s @-1
-        parameters
-          requiredPositional _s @-1
-            type: S<B>
-        returnType: void
-''');
-  }
-
-  test_infer_property_set() async {
-    var library = await checkLibrary('''
-class A {
-  B b;
-}
-class B {
-  C get c => null;
-  void set c(C value) {}
-}
-class C {}
-class D extends C {}
-var a = new A();
-var x = a.b.c ??= new D();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          b @14
-            type: B
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get b @-1
-            returnType: B
-          synthetic set b @-1
-            parameters
-              requiredPositional _b @-1
-                type: B
-            returnType: void
-      class B @25
-        fields
-          synthetic c @-1
-            type: C
-        constructors
-          synthetic @-1
-        accessors
-          get c @37
-            returnType: C
-          set c @59
-            parameters
-              requiredPositional value @63
-                type: C
-            returnType: void
-      class C @81
-        constructors
-          synthetic @-1
-      class D @92
-        supertype: C
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::C::@constructor::•
-    topLevelVariables
-      static a @111
-        type: A
-      static x @128
-        type: C
-    accessors
-      synthetic static get a @-1
-        returnType: A
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: A
-        returnType: void
-      synthetic static get x @-1
-        returnType: C
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_inference_issue_32394() async {
-    // Test the type inference involved in dartbug.com/32394
-    var library = await checkLibrary('''
-var x = y.map((a) => a.toString());
-var y = [3];
-var z = x.toList();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: Iterable<String>
-      static y @40
-        type: List<int>
-      static z @53
-        type: List<String>
-    accessors
-      synthetic static get x @-1
-        returnType: Iterable<String>
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: Iterable<String>
-        returnType: void
-      synthetic static get y @-1
-        returnType: List<int>
-      synthetic static set y @-1
-        parameters
-          requiredPositional _y @-1
-            type: List<int>
-        returnType: void
-      synthetic static get z @-1
-        returnType: List<String>
-      synthetic static set z @-1
-        parameters
-          requiredPositional _z @-1
-            type: List<String>
-        returnType: void
-''');
-  }
-
-  test_inference_map() async {
-    var library = await checkLibrary('''
-class C {
-  int p;
-}
-var x = <C>[];
-var y = x.map((c) => c.p);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          p @16
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get p @-1
-            returnType: int
-          synthetic set p @-1
-            parameters
-              requiredPositional _p @-1
-                type: int
-            returnType: void
-    topLevelVariables
-      static x @25
-        type: List<C>
-      static y @40
-        type: Iterable<int>
-    accessors
-      synthetic static get x @-1
-        returnType: List<C>
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: List<C>
-        returnType: void
-      synthetic static get y @-1
-        returnType: Iterable<int>
-      synthetic static set y @-1
-        parameters
-          requiredPositional _y @-1
-            type: Iterable<int>
-        returnType: void
-''');
-  }
-
-  test_inferred_function_type_for_variable_in_generic_function() async {
-    // In the code below, `x` has an inferred type of `() => int`, with 2
-    // (unused) type parameters from the enclosing top level function.
-    var library = await checkLibrary('''
-f<U, V>() {
-  var x = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        typeParameters
-          covariant U @2
-          covariant V @5
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_constructor() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await checkLibrary('''
-class C<U, V> {
-  final x;
-  C() : x = (() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant U @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        fields
-          final x @24
-            type: dynamic
-        constructors
-          @29
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_getter() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await checkLibrary('''
-class C<U, V> {
-  get x => () => () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant U @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          get x @22
-            returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_in_generic_method() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 3 (unused) type parameters from the enclosing class
-    // and method.
-    var library = await checkLibrary('''
-class C<T> {
-  f<U, V>() {
-    print(() => () => 0);
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          f @15
-            typeParameters
-              covariant U @17
-              covariant V @20
-            returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_setter() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await checkLibrary('''
-class C<U, V> {
-  void set x(value) {
-    print(() => () => 0);
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant U @8
-            defaultType: dynamic
-          covariant V @11
-            defaultType: dynamic
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @27
-            parameters
-              requiredPositional value @29
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_inferred_function_type_in_generic_closure() async {
-    // In the code below, `<U, V>() => () => 0` has an inferred return type of
-    // `() => int`, with 3 (unused) type parameters.
-    var library = await checkLibrary('''
-f<T>() {
-  print(/*<U, V>*/() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        typeParameters
-          covariant T @2
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_generic_function_type_in_generic_closure() async {
-    // In the code below, `<U, V>() => <W, X, Y, Z>() => 0` has an inferred
-    // return type of `() => int`, with 7 (unused) type parameters.
-    var library = await checkLibrary('''
-f<T>() {
-  print(/*<U, V>*/() => /*<W, X, Y, Z>*/() => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        typeParameters
-          covariant T @2
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_type_functionExpressionInvocation_oppositeOrder() async {
-    var library = await checkLibrary('''
-class A {
-  static final foo = bar(1.2);
-  static final bar = baz();
-
-  static int Function(double) baz() => (throw 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          static final foo @25
-            type: int
-          static final bar @56
-            type: int Function(double)
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get foo @-1
-            returnType: int
-          synthetic static get bar @-1
-            returnType: int Function(double)
-        methods
-          static baz @100
-            returnType: int Function(double)
-''');
-  }
-
-  test_inferred_type_initializer_cycle() async {
-    var library = await checkLibrary(r'''
-var a = b + 1;
-var b = c + 2;
-var c = a + 3;
-var d = 4;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static a @4
-        typeInferenceError: dependencyCycle
-        type: dynamic
-      static b @19
-        typeInferenceError: dependencyCycle
-        type: dynamic
-      static c @34
-        typeInferenceError: dependencyCycle
-        type: dynamic
-      static d @49
-        type: int
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: dynamic
-        returnType: void
-      synthetic static get b @-1
-        returnType: dynamic
-      synthetic static set b @-1
-        parameters
-          requiredPositional _b @-1
-            type: dynamic
-        returnType: void
-      synthetic static get c @-1
-        returnType: dynamic
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: dynamic
-        returnType: void
-      synthetic static get d @-1
-        returnType: int
-      synthetic static set d @-1
-        parameters
-          requiredPositional _d @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_inferred_type_is_typedef() async {
-    var library = await checkLibrary('typedef int F(String s);'
-        ' class C extends D { var v; }'
-        ' abstract class D { F get v; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @31
-        supertype: D
-        fields
-          v @49
-            type: int Function(String)
-              aliasElement: self::@typeAlias::F
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          synthetic get v @-1
-            returnType: int Function(String)
-              aliasElement: self::@typeAlias::F
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int Function(String)
-                  aliasElement: self::@typeAlias::F
-            returnType: void
-      abstract class D @69
-        fields
-          synthetic v @-1
-            type: int Function(String)
-              aliasElement: self::@typeAlias::F
-        constructors
-          synthetic @-1
-        accessors
-          abstract get v @79
-            returnType: int Function(String)
-              aliasElement: self::@typeAlias::F
-    typeAliases
-      functionTypeAliasBased F @12
-        aliasedType: int Function(String)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional s @21
-              type: String
-          returnType: int
-''');
-  }
-
-  test_inferred_type_nullability_class_ref_none() async {
-    addSource('/a.dart', 'int f() => 0;');
-    var library = await checkLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static x @21
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_class_ref_question() async {
-    addSource('/a.dart', 'int? f() => 0;');
-    var library = await checkLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static x @21
-        type: int?
-    accessors
-      synthetic static get x @-1
-        returnType: int?
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int?
-        returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_function_type_none() async {
-    addSource('/a.dart', 'void Function() f() => () {};');
-    var library = await checkLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static x @21
-        type: void Function()
-    accessors
-      synthetic static get x @-1
-        returnType: void Function()
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: void Function()
-        returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_function_type_question() async {
-    addSource('/a.dart', 'void Function()? f() => () {};');
-    var library = await checkLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static x @21
-        type: void Function()?
-    accessors
-      synthetic static get x @-1
-        returnType: void Function()?
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: void Function()?
-        returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_bound_type_param() async {
-    var library = await checkLibrary('''
-class C<T> extends D<int, T> {
-  var v;
-}
-abstract class D<U, V> {
-  Map<V, U> get v;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        supertype: D<int, T>
-        fields
-          v @37
-            type: Map<T, int>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::D::@constructor::•
-              substitution: {U: int, V: T}
-        accessors
-          synthetic get v @-1
-            returnType: Map<T, int>
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: Map<T, int>
-            returnType: void
-      abstract class D @57
-        typeParameters
-          covariant U @59
-            defaultType: dynamic
-          covariant V @62
-            defaultType: dynamic
-        fields
-          synthetic v @-1
-            type: Map<V, U>
-        constructors
-          synthetic @-1
-        accessors
-          abstract get v @83
-            returnType: Map<V, U>
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_param_of_typedef() async {
-    var library = await checkLibrary('''
-typedef void F(int g(String s));
-h(F f) => null;
-var v = h((y) {});
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        aliasedType: void Function(int Function(String))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional g @19
-              type: int Function(String)
-              parameters
-                requiredPositional s @28
-                  type: String
-          returnType: void
-    topLevelVariables
-      static v @53
-        type: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: dynamic
-        returnType: void
-    functions
-      h @33
-        parameters
-          requiredPositional f @37
-            type: void Function(int Function(String))
-              aliasElement: self::@typeAlias::F
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_parameter_type_generic_class() async {
-    var library = await checkLibrary('''
-class C<T, U> extends D<U, int> {
-  void f(int x, g) {}
-}
-abstract class D<V, W> {
-  void f(int x, W g(V s));
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        supertype: D<U, int>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::D::@constructor::•
-              substitution: {V: U, W: int}
-        methods
-          f @41
-            parameters
-              requiredPositional x @47
-                type: int
-              requiredPositional g @50
-                type: int Function(U)
-            returnType: void
-      abstract class D @73
-        typeParameters
-          covariant V @75
-            defaultType: dynamic
-          covariant W @78
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          abstract f @90
-            parameters
-              requiredPositional x @96
-                type: int
-              requiredPositional g @101
-                type: W Function(V)
-                parameters
-                  requiredPositional s @105
-                    type: V
-            returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_parameter_type_other_lib() async {
-    addLibrarySource('/a.dart', '''
-import 'b.dart';
-abstract class D extends E {}
-''');
-    addLibrarySource('/b.dart', '''
-abstract class E {
-  void f(int x, int g(String s));
-}
-''');
-    var library = await checkLibrary('''
-import 'a.dart';
-class C extends D {
-  void f(int x, g) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class C @23
-        supertype: D
-        constructors
-          synthetic @-1
-            superConstructor: a.dart::@class::D::@constructor::•
-        methods
-          f @44
-            parameters
-              requiredPositional x @50
-                type: int
-              requiredPositional g @53
-                type: int Function(String)
-            returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_method_function_typed_parameter_type() async {
-    var library = await checkLibrary('class C extends D { void f(int x, g) {} }'
-        ' abstract class D { void f(int x, int g(String s)); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        methods
-          f @25
-            parameters
-              requiredPositional x @31
-                type: int
-              requiredPositional g @34
-                type: int Function(String)
-            returnType: void
-      abstract class D @57
-        constructors
-          synthetic @-1
-        methods
-          abstract f @66
-            parameters
-              requiredPositional x @72
-                type: int
-              requiredPositional g @79
-                type: int Function(String)
-                parameters
-                  requiredPositional s @88
-                    type: String
-            returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_nested_function_typed_param() async {
-    var library = await checkLibrary('''
-f(void g(int x, void h())) => null;
-var v = f((x, y) {});
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @40
-        type: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: dynamic
-        returnType: void
-    functions
-      f @0
-        parameters
-          requiredPositional g @7
-            type: void Function(int, void Function())
-            parameters
-              requiredPositional x @13
-                type: int
-              requiredPositional h @21
-                type: void Function()
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_nested_function_typed_param_named() async {
-    var library = await checkLibrary('''
-f({void g(int x, void h())}) => null;
-var v = f(g: (x, y) {});
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @42
-        type: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: dynamic
-        returnType: void
-    functions
-      f @0
-        parameters
-          optionalNamed g @8
-            type: void Function(int, void Function())
-            parameters
-              requiredPositional x @14
-                type: int
-              requiredPositional h @22
-                type: void Function()
-        returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_setter_function_typed_parameter_type() async {
-    var library = await checkLibrary('class C extends D { void set f(g) {} }'
-        ' abstract class D { void set f(int g(String s)); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        supertype: D
-        fields
-          synthetic f @-1
-            type: int Function(String)
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::D::@constructor::•
-        accessors
-          set f @29
-            parameters
-              requiredPositional g @31
-                type: int Function(String)
-            returnType: void
-      abstract class D @54
-        fields
-          synthetic f @-1
-            type: int Function(String)
-        constructors
-          synthetic @-1
-        accessors
-          abstract set f @67
-            parameters
-              requiredPositional g @73
-                type: int Function(String)
-                parameters
-                  requiredPositional s @82
-                    type: String
-            returnType: void
-''');
-  }
-
-  test_inferredType_definedInSdkLibraryPart() async {
-    addSource('/a.dart', r'''
-import 'dart:async';
-class A {
-  m(Stream p) {}
-}
-''');
-    LibraryElement library = await checkLibrary(r'''
-import 'a.dart';
-class B extends A {
-  m(p) {}
-}
-  ''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class B @23
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: a.dart::@class::A::@constructor::•
-        methods
-          m @39
-            parameters
-              requiredPositional p @41
-                type: Stream<dynamic>
-            returnType: dynamic
-''');
-    ClassElement b = library.definingCompilationUnit.classes[0];
-    ParameterElement p = b.methods[0].parameters[0];
-    // This test should verify that we correctly record inferred types,
-    // when the type is defined in a part of an SDK library. So, test that
-    // the type is actually in a part.
-    Element streamElement = p.type.element!;
-    if (streamElement is ClassElement) {
-      expect(streamElement.source, isNot(streamElement.library.source));
-    }
-  }
-
-  test_inferredType_implicitCreation() async {
-    var library = await checkLibrary(r'''
-class A {
-  A();
-  A.named();
-}
-var a1 = A();
-var a2 = A.named();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-          named @21
-            periodOffset: 20
-            nameEnd: 26
-    topLevelVariables
-      static a1 @36
-        type: A
-      static a2 @50
-        type: A
-    accessors
-      synthetic static get a1 @-1
-        returnType: A
-      synthetic static set a1 @-1
-        parameters
-          requiredPositional _a1 @-1
-            type: A
-        returnType: void
-      synthetic static get a2 @-1
-        returnType: A
-      synthetic static set a2 @-1
-        parameters
-          requiredPositional _a2 @-1
-            type: A
-        returnType: void
-''');
-  }
-
-  test_inferredType_implicitCreation_prefixed() async {
-    addLibrarySource('/foo.dart', '''
-class A {
-  A();
-  A.named();
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-var a1 = foo.A();
-var a2 = foo.A.named();
-''');
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart as foo @21
-  definingUnit
-    topLevelVariables
-      static a1 @30
-        type: A
-      static a2 @48
-        type: A
-    accessors
-      synthetic static get a1 @-1
-        returnType: A
-      synthetic static set a1 @-1
-        parameters
-          requiredPositional _a1 @-1
-            type: A
-        returnType: void
-      synthetic static get a2 @-1
-        returnType: A
-      synthetic static set a2 @-1
-        parameters
-          requiredPositional _a2 @-1
-            type: A
-        returnType: void
-''');
-  }
-
-  test_inferredType_usesSyntheticFunctionType_functionTypedParam() async {
-    // AnalysisContext does not set the enclosing element for the synthetic
-    // FunctionElement created for the [f, g] type argument.
-    var library = await checkLibrary('''
-int f(int x(String y)) => null;
-String g(int x(String y)) => null;
-var v = [f, g];
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @71
-        type: List<Object Function(int Function(String))>
-    accessors
-      synthetic static get v @-1
-        returnType: List<Object Function(int Function(String))>
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: List<Object Function(int Function(String))>
-        returnType: void
-    functions
-      f @4
-        parameters
-          requiredPositional x @10
-            type: int Function(String)
-            parameters
-              requiredPositional y @19
-                type: String
-        returnType: int
-      g @39
-        parameters
-          requiredPositional x @45
-            type: int Function(String)
-            parameters
-              requiredPositional y @54
-                type: String
-        returnType: String
-''');
-  }
-
-  test_inheritance_errors() async {
-    var library = await checkLibrary('''
-abstract class A {
-  int m();
-}
-
-abstract class B {
-  String m();
-}
-
-abstract class C implements A, B {}
-
-abstract class D extends C {
-  var f;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      abstract class A @15
-        constructors
-          synthetic @-1
-        methods
-          abstract m @25
-            returnType: int
-      abstract class B @48
-        constructors
-          synthetic @-1
-        methods
-          abstract m @61
-            returnType: String
-      abstract class C @84
-        interfaces
-          A
-          B
-        constructors
-          synthetic @-1
-      abstract class D @121
-        supertype: C
-        fields
-          f @141
-            type: dynamic
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::C::@constructor::•
-        accessors
-          synthetic get f @-1
-            returnType: dynamic
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure() async {
-    var library = await checkLibrary('var v = () => 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: int Function()
-    accessors
-      synthetic static get v @-1
-        returnType: int Function()
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int Function()
-        returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_dynamic() async {
-    var library = await checkLibrary('var v = (f) async => await f;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: Future<dynamic> Function(dynamic)
-    accessors
-      synthetic static get v @-1
-        returnType: Future<dynamic> Function(dynamic)
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: Future<dynamic> Function(dynamic)
-        returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future3_int() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-var v = (Future<Future<Future<int>>> f) async => await f;
-''');
-    // The analyzer type system over-flattens - see dartbug.com/31887
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static v @25
-        type: Future<int> Function(Future<Future<Future<int>>>)
-    accessors
-      synthetic static get v @-1
-        returnType: Future<int> Function(Future<Future<Future<int>>>)
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: Future<int> Function(Future<Future<Future<int>>>)
-        returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future_int() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-var v = (Future<int> f) async => await f;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static v @25
-        type: Future<int> Function(Future<int>)
-    accessors
-      synthetic static get v @-1
-        returnType: Future<int> Function(Future<int>)
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: Future<int> Function(Future<int>)
-        returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future_noArg() async {
-    var library = await checkLibrary(r'''
-import 'dart:async';
-var v = (Future f) async => await f;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async
-  definingUnit
-    topLevelVariables
-      static v @25
-        type: Future<dynamic> Function(Future<dynamic>)
-    accessors
-      synthetic static get v @-1
-        returnType: Future<dynamic> Function(Future<dynamic>)
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: Future<dynamic> Function(Future<dynamic>)
-        returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_field() async {
-    var library = await checkLibrary('''
-class C {
-  var v = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          v @16
-            type: int Function()
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get v @-1
-            returnType: int Function()
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int Function()
-            returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_local() async {
-    var library = await checkLibrary('''
-void f() {
-  int u = 0;
-  var v = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        returnType: void
-''');
-  }
-
-  test_instanceInference_operator_equal_legacy_from_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    addLibrarySource('/legacy.dart', r'''
-// @dart = 2.7
-class LegacyDefault {
-  bool operator==(other) => false;
-}
-class LegacyObject {
-  bool operator==(Object other) => false;
-}
-class LegacyInt {
-  bool operator==(int other) => false;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'legacy.dart';
-class X1 extends LegacyDefault  {
-  bool operator==(other) => false;
-}
-class X2 extends LegacyObject {
-  bool operator==(other) => false;
-}
-class X3 extends LegacyInt {
-  bool operator==(other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    legacy.dart
-  definingUnit
-    classes
-      class X1 @28
-        supertype: LegacyDefault*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyDefault::@constructor::•
-        methods
-          == @71
-            parameters
-              requiredPositional other @74
-                type: dynamic
-            returnType: bool*
-      class X2 @99
-        supertype: LegacyObject*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyObject::@constructor::•
-        methods
-          == @140
-            parameters
-              requiredPositional other @143
-                type: Object*
-            returnType: bool*
-      class X3 @168
-        supertype: LegacyInt*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyInt::@constructor::•
-        methods
-          == @206
-            parameters
-              requiredPositional other @209
-                type: int*
-            returnType: bool*
-''');
-  }
-
-  test_instanceInference_operator_equal_legacy_from_legacy_nullSafe() async {
-    addLibrarySource('/legacy.dart', r'''
-// @dart = 2.7
-class LegacyDefault {
-  bool operator==(other) => false;
-}
-class LegacyObject {
-  bool operator==(Object other) => false;
-}
-class LegacyInt {
-  bool operator==(int other) => false;
-}
-''');
-    addLibrarySource('/nullSafe.dart', r'''
-class NullSafeDefault {
-  bool operator==(other) => false;
-}
-class NullSafeObject {
-  bool operator==(Object other) => false;
-}
-class NullSafeInt {
-  bool operator==(int other) => false;
-}
-''');
-    var library = await checkLibrary(r'''
-// @dart = 2.7
-import 'legacy.dart';
-import 'nullSafe.dart';
-class X1 extends LegacyDefault implements NullSafeDefault {
-  bool operator==(other) => false;
-}
-class X2 extends LegacyObject implements NullSafeObject {
-  bool operator==(other) => false;
-}
-class X3 extends LegacyInt implements NullSafeInt {
-  bool operator==(other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    legacy.dart
-    nullSafe.dart
-  definingUnit
-    classes
-      class X1 @67
-        supertype: LegacyDefault*
-        interfaces
-          NullSafeDefault*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyDefault::@constructor::•
-        methods
-          == @136
-            parameters
-              requiredPositional other @139
-                type: dynamic
-            returnType: bool*
-      class X2 @164
-        supertype: LegacyObject*
-        interfaces
-          NullSafeObject*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyObject::@constructor::•
-        methods
-          == @231
-            parameters
-              requiredPositional other @234
-                type: Object*
-            returnType: bool*
-      class X3 @259
-        supertype: LegacyInt*
-        interfaces
-          NullSafeInt*
-        constructors
-          synthetic @-1
-            superConstructor: legacy.dart::@class::LegacyInt::@constructor::•
-        methods
-          == @320
-            parameters
-              requiredPositional other @323
-                type: int*
-            returnType: bool*
-''');
-  }
-
-  test_instanceInference_operator_equal_nullSafe_from_nullSafe() async {
-    addLibrarySource('/nullSafe.dart', r'''
-class NullSafeDefault {
-  bool operator==(other) => false;
-}
-class NullSafeObject {
-  bool operator==(Object other) => false;
-}
-class NullSafeInt {
-  bool operator==(int other) => false;
-}
-''');
-    var library = await checkLibrary(r'''
-import 'nullSafe.dart';
-class X1 extends NullSafeDefault {
-  bool operator==(other) => false;
-}
-class X2 extends NullSafeObject {
-  bool operator==(other) => false;
-}
-class X3 extends NullSafeInt {
-  bool operator==(other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    nullSafe.dart
-  definingUnit
-    classes
-      class X1 @30
-        supertype: NullSafeDefault
-        constructors
-          synthetic @-1
-            superConstructor: nullSafe.dart::@class::NullSafeDefault::@constructor::•
-        methods
-          == @74
-            parameters
-              requiredPositional other @77
-                type: Object
-            returnType: bool
-      class X2 @102
-        supertype: NullSafeObject
-        constructors
-          synthetic @-1
-            superConstructor: nullSafe.dart::@class::NullSafeObject::@constructor::•
-        methods
-          == @145
-            parameters
-              requiredPositional other @148
-                type: Object
-            returnType: bool
-      class X3 @173
-        supertype: NullSafeInt
-        constructors
-          synthetic @-1
-            superConstructor: nullSafe.dart::@class::NullSafeInt::@constructor::•
-        methods
-          == @213
-            parameters
-              requiredPositional other @216
-                type: int
-            returnType: bool
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
-    var library = await checkLibrary('''
-class C<S extends num, T extends C<S, T>> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant S @8
-            bound: num
-            defaultType: num
-          covariant T @23
-            bound: C<S, T>
-            defaultType: C<num, dynamic>
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @47
-        type: C<num, C<num, dynamic>>
-    accessors
-      synthetic static get c @-1
-        returnType: C<num, C<num, dynamic>>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<num, C<num, dynamic>>
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToItself() async {
-    var library = await checkLibrary('''
-class C<T extends C<T>> {}
-C c;
-var c2 = new C();
-class B {
-  var c3 = new C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-      class B @56
-        fields
-          c3 @66
-            type: C<C<Object?>>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get c3 @-1
-            returnType: C<C<Object?>>
-          synthetic set c3 @-1
-            parameters
-              requiredPositional _c3 @-1
-                type: C<C<Object?>>
-            returnType: void
-    topLevelVariables
-      static c @29
-        type: C<C<dynamic>>
-      static c2 @36
-        type: C<C<Object?>>
-    accessors
-      synthetic static get c @-1
-        returnType: C<C<dynamic>>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<C<dynamic>>
-        returnType: void
-      synthetic static get c2 @-1
-        returnType: C<C<Object?>>
-      synthetic static set c2 @-1
-        parameters
-          requiredPositional _c2 @-1
-            type: C<C<Object?>>
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToItself_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class C<T extends C<T>> {}
-C c;
-var c2 = new C();
-class B {
-  var c3 = new C();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: C<T*>*
-            defaultType: C<dynamic>*
-        constructors
-          synthetic @-1
-      class B @56
-        fields
-          c3 @66
-            type: C<C<dynamic>*>*
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get c3 @-1
-            returnType: C<C<dynamic>*>*
-          synthetic set c3 @-1
-            parameters
-              requiredPositional _c3 @-1
-                type: C<C<dynamic>*>*
-            returnType: void
-    topLevelVariables
-      static c @29
-        type: C<C<dynamic>*>*
-      static c2 @36
-        type: C<C<dynamic>*>*
-    accessors
-      synthetic static get c @-1
-        returnType: C<C<dynamic>*>*
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<C<dynamic>*>*
-        returnType: void
-      synthetic static get c2 @-1
-        returnType: C<C<dynamic>*>*
-      synthetic static set c2 @-1
-        parameters
-          requiredPositional _c2 @-1
-            type: C<C<dynamic>*>*
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToLaterTypeArgument() async {
-    var library = await checkLibrary('''
-class C<T extends C<T, U>, U extends num> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @6
-        typeParameters
-          covariant T @8
-            bound: C<T, U>
-            defaultType: C<dynamic, num>
-          covariant U @27
-            bound: num
-            defaultType: num
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @47
-        type: C<C<dynamic, num>, num>
-    accessors
-      synthetic static get c @-1
-        returnType: C<C<dynamic, num>, num>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<C<dynamic, num>, num>
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_functionTypeAlias_reexported() async {
-    addLibrarySource('/a.dart', r'''
-class O {}
-typedef T F<T extends O>(T p);
-''');
-    addLibrarySource('/b.dart', r'''
-export 'a.dart' show F;
-''');
-    var library = await checkLibrary('''
-import 'b.dart';
-class C {
-  F f() => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    b.dart
-  definingUnit
-    classes
-      class C @23
-        constructors
-          synthetic @-1
-        methods
-          f @31
-            returnType: O Function(O)
-              aliasElement: a.dart::@typeAlias::F
-              aliasArguments
-                O
-''');
-  }
-
-  test_instantiateToBounds_functionTypeAlias_simple() async {
-    var library = await checkLibrary('''
-typedef F<T extends num>(T p);
-F f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        typeParameters
-          contravariant T @10
-            bound: num
-            defaultType: num
-        aliasedType: dynamic Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional p @27
-              type: T
-          returnType: dynamic
-    topLevelVariables
-      static f @33
-        type: dynamic Function(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
-    accessors
-      synthetic static get f @-1
-        returnType: dynamic Function(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function(num)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                num
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_genericFunctionAsBound() async {
-    var library = await checkLibrary('''
-class A<T> {}
-class B<T extends int Function(), U extends A<T>> {}
-B b;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      notSimplyBounded class B @20
-        typeParameters
-          covariant T @22
-            bound: int Function()
-            defaultType: int Function()
-          covariant U @48
-            bound: A<T>
-            defaultType: A<int Function()>
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static b @69
-        type: B<int Function(), A<int Function()>>
-    accessors
-      synthetic static get b @-1
-        returnType: B<int Function(), A<int Function()>>
-      synthetic static set b @-1
-        parameters
-          requiredPositional _b @-1
-            type: B<int Function(), A<int Function()>>
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_genericTypeAlias_simple() async {
-    var library = await checkLibrary('''
-typedef F<T extends num> = S Function<S>(T p);
-F f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          contravariant T @10
-            bound: num
-            defaultType: num
-        aliasedType: S Function<S>(T)
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant S @38
-          parameters
-            requiredPositional p @43
-              type: T
-          returnType: S
-    topLevelVariables
-      static f @49
-        type: S Function<S>(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
-    accessors
-      synthetic static get f @-1
-        returnType: S Function<S>(num)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            num
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: S Function<S>(num)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                num
-        returnType: void
-''');
-  }
-
-  test_instantiateToBounds_issue38498() async {
-    var library = await checkLibrary('''
-class A<R extends B> {
-  final values = <B>[];
-}
-class B<T extends num> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant R @8
-            bound: B<num>
-            defaultType: B<num>
-        fields
-          final values @31
-            type: List<B<num>>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get values @-1
-            returnType: List<B<num>>
-      class B @55
-        typeParameters
-          covariant T @57
-            bound: num
-            defaultType: num
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_instantiateToBounds_simple() async {
-    var library = await checkLibrary('''
-class C<T extends num> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: num
-            defaultType: num
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @28
-        type: C<num>
-    accessors
-      synthetic static get c @-1
-        returnType: C<num>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<num>
-        returnType: void
-''');
-  }
-
-  test_invalid_annotation_prefixed_constructor() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', r'''
-class A {
-  const A.named();
-}
-''');
-    var library = await checkLibrary('''
-import "a.dart" as a;
-@a.A.named
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart as a @19
-  definingUnit
-    classes
-      class C @39
-        metadata
-          Annotation
-            atSign: @ @22
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: a @23
-                staticElement: self::@prefix::a
-                staticType: null
-              period: . @24
-              identifier: SimpleIdentifier
-                token: A @25
-                staticElement: package:test/a.dart::@class::A
-                staticType: null
-              staticElement: package:test/a.dart::@class::A
-              staticType: null
-            period: . @26
-            constructorName: SimpleIdentifier
-              token: named @27
-              staticElement: package:test/a.dart::@class::A::@constructor::named
-              staticType: null
-            element: package:test/a.dart::@class::A::@constructor::named
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_invalid_annotation_unprefixed_constructor() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', r'''
-class A {
-  const A.named();
-}
-''');
-    var library = await checkLibrary('''
-import "a.dart";
-@A.named
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart
-  definingUnit
-    classes
-      class C @32
-        metadata
-          Annotation
-            atSign: @ @17
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: A @18
-                staticElement: package:test/a.dart::@class::A
-                staticType: null
-              period: . @19
-              identifier: SimpleIdentifier
-                token: named @20
-                staticElement: package:test/a.dart::@class::A::@constructor::named
-                staticType: null
-              staticElement: package:test/a.dart::@class::A::@constructor::named
-              staticType: null
-            element: package:test/a.dart::@class::A::@constructor::named
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_invalid_importPrefix_asTypeArgument() async {
-    var library = await checkLibrary('''
-import 'dart:async' as ppp;
-class C {
-  List<ppp> v;
-}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as ppp @23
-  definingUnit
-    classes
-      class C @34
-        fields
-          v @50
-            type: List<dynamic>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get v @-1
-            returnType: List<dynamic>
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: List<dynamic>
-            returnType: void
-''');
-  }
-
-  test_invalid_nameConflict_imported() async {
-    addLibrarySource('/a.dart', 'V() {}');
-    addLibrarySource('/b.dart', 'V() {}');
-    var library = await checkLibrary('''
-import 'a.dart';
-import 'b.dart';
-foo([p = V]) {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-    b.dart
-  definingUnit
-    functions
-      foo @34
-        parameters
-          optionalPositional p @39
-            type: dynamic
-            constantInitializer
-              SimpleIdentifier
-                token: V @43
-                staticElement: <null>
-                staticType: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_invalid_nameConflict_imported_exported() async {
-    addLibrarySource('/a.dart', 'V() {}');
-    addLibrarySource('/b.dart', 'V() {}');
-    addLibrarySource('/c.dart', r'''
-export 'a.dart';
-export 'b.dart';
-''');
-    var library = await checkLibrary('''
-import 'c.dart';
-foo([p = V]) {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    c.dart
-  definingUnit
-    functions
-      foo @17
-        parameters
-          optionalPositional p @22
-            type: dynamic
-            constantInitializer
-              SimpleIdentifier
-                token: V @26
-                staticElement: a.dart::@function::V
-                staticType: dynamic Function()
-        returnType: dynamic
-''');
-  }
-
-  test_invalid_nameConflict_local() async {
-    var library = await checkLibrary('''
-foo([p = V]) {}
-V() {}
-var V;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static V @27
-        type: dynamic
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-      synthetic static set V @-1
-        parameters
-          requiredPositional _V @-1
-            type: dynamic
-        returnType: void
-    functions
-      foo @0
-        parameters
-          optionalPositional p @5
-            type: dynamic
-            constantInitializer
-              SimpleIdentifier
-                token: V @9
-                staticElement: self::@getter::V
-                staticType: dynamic
-        returnType: dynamic
-      V @16
-        returnType: dynamic
-''');
-  }
-
-  test_invalid_setterParameter_fieldFormalParameter() async {
-    var library = await checkLibrary('''
-class C {
-  int foo;
-  void set bar(this.foo) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          foo @16
-            type: int
-          synthetic bar @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get foo @-1
-            returnType: int
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-            returnType: void
-          set bar @32
-            parameters
-              requiredPositional final this.foo @41
-                type: dynamic
-                field: <null>
-            returnType: void
-''');
-  }
-
-  test_invalid_setterParameter_fieldFormalParameter_self() async {
-    var library = await checkLibrary('''
-class C {
-  set x(this.x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic x @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set x @16
-            parameters
-              requiredPositional final this.x @23
-                type: dynamic
-                field: <null>
-            returnType: void
-''');
-  }
-
-  test_invalidUris() async {
-    var library = await checkLibrary(r'''
-import ':[invaliduri]';
-import ':[invaliduri]:foo.dart';
-import 'a1.dart';
-import ':[invaliduri]';
-import ':[invaliduri]:foo.dart';
-
-export ':[invaliduri]';
-export ':[invaliduri]:foo.dart';
-export 'a2.dart';
-export ':[invaliduri]';
-export ':[invaliduri]:foo.dart';
-
-part ':[invaliduri]';
-part 'a3.dart';
-part ':[invaliduri]';
-''');
-    checkElementText(library, r'''
-library
-  imports
-    <unresolved>
-    <unresolved>
-    a1.dart
-    <unresolved>
-    <unresolved>
-  exports
-    <unresolved>
-    <unresolved>
-    a2.dart
-    <unresolved>
-    <unresolved>
-  definingUnit
-  parts
-    a3.dart
-''');
-  }
-
-  test_library() async {
-    var library = await checkLibrary('');
-    checkElementText(library, r'''
-library
-  definingUnit
-''');
-  }
-
-  test_library_documented_lines() async {
-    var library = await checkLibrary('''
-/// aaa
-/// bbb
-library test;
-''');
-    checkElementText(library, r'''
-library
-  name: test
-  nameOffset: 24
-  documentationComment: /// aaa\n/// bbb
-  definingUnit
-''');
-  }
-
-  test_library_documented_stars() async {
-    var library = await checkLibrary('''
-/**
- * aaa
- * bbb
- */
-library test;''');
-    checkElementText(library, r'''
-library
-  name: test
-  nameOffset: 30
-  documentationComment: /**\n * aaa\n * bbb\n */
-  definingUnit
-''');
-  }
-
-  test_library_name_with_spaces() async {
-    var library = await checkLibrary('library foo . bar ;');
-    checkElementText(library, r'''
-library
-  name: foo.bar
-  nameOffset: 8
-  definingUnit
-''');
-  }
-
-  test_library_named() async {
-    var library = await checkLibrary('library foo.bar;');
-    checkElementText(library, r'''
-library
-  name: foo.bar
-  nameOffset: 8
-  definingUnit
-''');
-  }
-
-  test_localFunctions() async {
-    var library = await checkLibrary(r'''
-f() {
-  f1() {}
-  {
-    f2() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        returnType: dynamic
-''');
-  }
-
-  test_localFunctions_inConstructor() async {
-    var library = await checkLibrary(r'''
-class C {
-  C() {
-    f() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @12
-''');
-  }
-
-  test_localFunctions_inMethod() async {
-    var library = await checkLibrary(r'''
-class C {
-  m() {
-    f() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          m @12
-            returnType: dynamic
-''');
-  }
-
-  test_localFunctions_inTopLevelGetter() async {
-    var library = await checkLibrary(r'''
-get g {
-  f() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static g @-1
-        type: dynamic
-    accessors
-      static get g @4
-        returnType: dynamic
-''');
-  }
-
-  test_localLabels_inConstructor() async {
-    var library = await checkLibrary(r'''
-class C {
-  C() {
-    aaa: while (true) {}
-    bbb: switch (42) {
-      ccc: case 0:
-        break;
-    }
-  }
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          @12
-''');
-  }
-
-  test_localLabels_inMethod() async {
-    var library = await checkLibrary(r'''
-class C {
-  m() {
-    aaa: while (true) {}
-    bbb: switch (42) {
-      ccc: case 0:
-        break;
-    }
-  }
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          m @12
-            returnType: dynamic
-''');
-  }
-
-  test_localLabels_inTopLevelFunction() async {
-    var library = await checkLibrary(r'''
-main() {
-  aaa: while (true) {}
-  bbb: switch (42) {
-    ccc: case 0:
-      break;
-  }
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      main @0
-        returnType: dynamic
-''');
-  }
-
-  test_main_class() async {
-    var library = await checkLibrary('class main {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class main @6
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_main_class_alias() async {
-    var library =
-        await checkLibrary('class main = C with D; class C {} class D {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias main @6
-        supertype: C
-        mixins
-          D
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::C::@constructor::•
-            superConstructor: self::@class::C::@constructor::•
-      class C @29
-        constructors
-          synthetic @-1
-      class D @40
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_main_class_alias_via_export() async {
-    addLibrarySource('/a.dart', 'class main = C with D; class C {} class D {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_main_class_via_export() async {
-    addLibrarySource('/a.dart', 'class main {}');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_main_getter() async {
-    var library = await checkLibrary('get main => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static main @-1
-        type: dynamic
-    accessors
-      static get main @4
-        returnType: dynamic
-''');
-  }
-
-  test_main_getter_via_export() async {
-    addLibrarySource('/a.dart', 'get main => null;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_main_typedef() async {
-    var library = await checkLibrary('typedef main();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased main @8
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''');
-  }
-
-  test_main_typedef_via_export() async {
-    addLibrarySource('/a.dart', 'typedef main();');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_main_variable() async {
-    var library = await checkLibrary('var main;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static main @4
-        type: dynamic
-    accessors
-      synthetic static get main @-1
-        returnType: dynamic
-      synthetic static set main @-1
-        parameters
-          requiredPositional _main @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_main_variable_via_export() async {
-    addLibrarySource('/a.dart', 'var main;');
-    var library = await checkLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  exports
-    a.dart
-  definingUnit
-''');
-  }
-
-  test_metadata_class_field_first() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-class C {
-  @a
-  int x = 0;
-}
-''');
-    // Check metadata without asking any other properties.
-    var x = _elementOfDefiningUnit(library, ['@class', 'C', '@field', 'x'])
-        as FieldElement;
-    expect(x.metadata, hasLength(1));
-    // Check details.
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @19
-        fields
-          x @34
-            metadata
-              Annotation
-                atSign: @ @25
-                name: SimpleIdentifier
-                  token: a @26
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_class_scope() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-class C<@foo T> {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @27
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @29
-                name: SimpleIdentifier
-                  token: foo @30
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        fields
-          static const foo @54
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @60
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get foo @-1
-            returnType: int
-        methods
-          bar @77
-            metadata
-              Annotation
-                atSign: @ @65
-                name: SimpleIdentifier
-                  token: foo @66
-                  staticElement: self::@class::C::@getter::foo
-                  staticType: null
-                element: self::@class::C::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_classDeclaration() async {
-    var library = await checkLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-class C {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @44
-        metadata
-          Annotation
-            atSign: @ @32
-            name: SimpleIdentifier
-              token: a @33
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: b @36
-              staticElement: self::@getter::b
-              staticType: null
-            element: self::@getter::b
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static const b @22
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @26
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get b @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_classTypeAlias() async {
-    var library = await checkLibrary(
-        'const a = null; @a class C = D with E; class D {} class E {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @25
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @45
-        constructors
-          synthetic @-1
-      class E @56
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_constructor_call_named() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-class A {
-  const A.named(int _);
-}
-@A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const named @20
-            periodOffset: 19
-            nameEnd: 25
-            parameters
-              requiredPositional _ @30
-                type: int
-      class C @54
-        metadata
-          Annotation
-            atSign: @ @36
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: A @37
-                staticElement: self::@class::A
-                staticType: null
-              period: . @38
-              identifier: SimpleIdentifier
-                token: named @39
-                staticElement: self::@class::A::@constructor::named
-                staticType: null
-              staticElement: self::@class::A::@constructor::named
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @44
-              arguments
-                IntegerLiteral
-                  literal: 0 @45
-                  staticType: int
-              rightParenthesis: ) @46
-            element: self::@class::A::@constructor::named
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_inference() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A.named(T _);
-}
-
-@A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const named @23
-            periodOffset: 22
-            nameEnd: 28
-            parameters
-              requiredPositional _ @31
-                type: T
-      class C @56
-        metadata
-          Annotation
-            atSign: @ @38
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: A @39
-                staticElement: self::@class::A
-                staticType: null
-              period: . @40
-              identifier: SimpleIdentifier
-                token: named @41
-                staticElement: ConstructorMember
-                  base: self::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::named
-                substitution: {T: int}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @46
-              arguments
-                IntegerLiteral
-                  literal: 0 @47
-                  staticType: int
-              rightParenthesis: ) @48
-            element: ConstructorMember
-              base: self::@class::A::@constructor::named
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_typeArguments() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A.named();
-}
-
-@A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const named @23
-            periodOffset: 22
-            nameEnd: 28
-      class C @57
-        metadata
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: A @36
-              staticElement: self::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @37
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @38
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @41
-            period: . @42
-            constructorName: SimpleIdentifier
-              token: named @43
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::named
-                substitution: {T: int}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
-            element: ConstructorMember
-              base: self::@class::A::@constructor::named
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_typeArguments_disabledGenericMetadata() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A.named();
-}
-
-@A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const named @23
-            periodOffset: 22
-            nameEnd: 28
-      class C @57
-        metadata
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: A @36
-              staticElement: self::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @37
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @38
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @41
-            period: . @42
-            constructorName: SimpleIdentifier
-              token: named @43
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::named
-                substitution: {T: int}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
-            element: ConstructorMember
-              base: self::@class::A::@constructor::named
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/foo.dart', '''
-class A {
-  const A.named(int _);
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-@foo.A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @48
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            period: . @32
-            constructorName: SimpleIdentifier
-              token: named @33
-              staticElement: package:test/foo.dart::@class::A::@constructor::named
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @38
-              arguments
-                IntegerLiteral
-                  literal: 0 @39
-                  staticType: int
-              rightParenthesis: ) @40
-            element: package:test/foo.dart::@class::A::@constructor::named
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed_generic_inference() async {
-    addLibrarySource('/home/test/lib/foo.dart', '''
-class A<T> {
-  const A.named(T _);
-}
-''');
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-import "foo.dart" as foo;
-@foo.A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @48
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            period: . @32
-            constructorName: SimpleIdentifier
-              token: named @33
-              staticElement: ConstructorMember
-                base: package:test/foo.dart::@class::A::@constructor::named
-                substitution: {T: int}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @38
-              arguments
-                IntegerLiteral
-                  literal: 0 @39
-                  staticType: int
-              rightParenthesis: ) @40
-            element: ConstructorMember
-              base: package:test/foo.dart::@class::A::@constructor::named
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
-    addLibrarySource('/home/test/lib/foo.dart', '''
-class A<T> {
-  const A.named();
-}
-''');
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-import "foo.dart" as foo;
-@foo.A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @52
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @32
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @33
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @36
-            period: . @37
-            constructorName: SimpleIdentifier
-              token: named @38
-              staticElement: ConstructorMember
-                base: package:test/foo.dart::@class::A::@constructor::named
-                substitution: {T: int}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @43
-              rightParenthesis: ) @44
-            element: ConstructorMember
-              base: package:test/foo.dart::@class::A::@constructor::named
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_named_synthetic_ofClassAlias_generic() async {
-    var library = await checkLibrary('''
-class A {
-  const A.named();
-}
-
-mixin B {}
-
-class C<T> = A with B;
-
-@C.named()
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const named @20
-            periodOffset: 19
-            nameEnd: 25
-      class alias C @50
-        typeParameters
-          covariant T @52
-            defaultType: dynamic
-        supertype: A
-        mixins
-          B
-        constructors
-          synthetic const named @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                period: . @0
-                constructorName: SimpleIdentifier
-                  token: named @-1
-                  staticElement: self::@class::A::@constructor::named
-                  staticType: null
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::named
-            superConstructor: self::@class::A::@constructor::named
-      class D @85
-        metadata
-          Annotation
-            atSign: @ @68
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @69
-                staticElement: self::@class::C
-                staticType: null
-              period: . @70
-              identifier: SimpleIdentifier
-                token: named @71
-                staticElement: ConstructorMember
-                  base: self::@class::C::@constructor::named
-                  substitution: {T: dynamic}
-                staticType: null
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::named
-                substitution: {T: dynamic}
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @76
-              rightParenthesis: ) @77
-            element: ConstructorMember
-              base: self::@class::C::@constructor::named
-              substitution: {T: dynamic}
-        constructors
-          synthetic @-1
-    mixins
-      mixin B @38
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-class A {
-  const A(int _);
-}
-@A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional _ @24
-                type: int
-      class C @42
-        metadata
-          Annotation
-            atSign: @ @30
-            name: SimpleIdentifier
-              token: A @31
-              staticElement: self::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @32
-              arguments
-                IntegerLiteral
-                  literal: 0 @33
-                  staticType: int
-              rightParenthesis: ) @34
-            element: self::@class::A::@constructor::•
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_generic_inference() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A(T _);
-}
-
-@A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-            parameters
-              requiredPositional _ @25
-                type: T
-      class C @44
-        metadata
-          Annotation
-            atSign: @ @32
-            name: SimpleIdentifier
-              token: A @33
-              staticElement: self::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @34
-              arguments
-                IntegerLiteral
-                  literal: 0 @35
-                  staticType: int
-              rightParenthesis: ) @36
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_generic_typeArguments() async {
-    var library = await checkLibrary('''
-class A<T> {
-  const A();
-}
-
-@A<int>()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-      class C @45
-        metadata
-          Annotation
-            atSign: @ @29
-            name: SimpleIdentifier
-              token: A @30
-              staticElement: self::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @31
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @32
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @35
-            arguments: ArgumentList
-              leftParenthesis: ( @36
-              rightParenthesis: ) @37
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/foo.dart', 'class A { const A(_); }');
-    var library =
-        await checkLibrary('import "foo.dart" as foo; @foo.A(0) class C {}');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @42
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @32
-              arguments
-                IntegerLiteral
-                  literal: 0 @33
-                  staticType: int
-              rightParenthesis: ) @34
-            element: package:test/foo.dart::@class::A::@constructor::•
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
-    addLibrarySource('/home/test/lib/foo.dart', '''
-class A<T> {
-  const A(T _);
-}
-''');
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-import "foo.dart" as foo;
-@foo.A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @42
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @32
-              arguments
-                IntegerLiteral
-                  literal: 0 @33
-                  staticType: int
-              rightParenthesis: ) @34
-            element: ConstructorMember
-              base: package:test/foo.dart::@class::A::@constructor::•
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
-    addLibrarySource('/home/test/lib/foo.dart', '''
-class A<T> {
-  const A();
-}
-''');
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-import "foo.dart" as foo;
-@foo.A<int>()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @46
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: A @31
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              leftBracket: < @32
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    token: int @33
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                  type: int
-              rightBracket: > @36
-            arguments: ArgumentList
-              leftParenthesis: ( @37
-              rightParenthesis: ) @38
-            element: ConstructorMember
-              base: package:test/foo.dart::@class::A::@constructor::•
-              substitution: {T: int}
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_synthetic_ofClassAlias_generic() async {
-    var library = await checkLibrary('''
-class A {
-  const A();
-}
-
-mixin B {}
-
-class C<T> = A with B;
-
-@C()
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-      class alias C @44
-        typeParameters
-          covariant T @46
-            defaultType: dynamic
-        supertype: A
-        mixins
-          B
-        constructors
-          synthetic const @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-      class D @73
-        metadata
-          Annotation
-            atSign: @ @62
-            name: SimpleIdentifier
-              token: C @63
-              staticElement: self::@class::C
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @64
-              rightParenthesis: ) @65
-            element: ConstructorMember
-              base: self::@class::C::@constructor::•
-              substitution: {T: dynamic}
-        constructors
-          synthetic @-1
-    mixins
-      mixin B @32
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructor_call_with_args() async {
-    var library =
-        await checkLibrary('class A { const A(x); } @A(null) class C {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @16
-            parameters
-              requiredPositional x @18
-                type: dynamic
-      class C @39
-        metadata
-          Annotation
-            atSign: @ @24
-            name: SimpleIdentifier
-              token: A @25
-              staticElement: self::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @26
-              arguments
-                NullLiteral
-                  literal: null @27
-                  staticType: Null
-              rightParenthesis: ) @31
-            element: self::@class::A::@constructor::•
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_constructorDeclaration_named() async {
-    var library =
-        await checkLibrary('const a = null; class C { @a C.named(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        constructors
-          named @31
-            metadata
-              Annotation
-                atSign: @ @26
-                name: SimpleIdentifier
-                  token: a @27
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            periodOffset: 30
-            nameEnd: 36
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_constructorDeclaration_unnamed() async {
-    var library = await checkLibrary('const a = null; class C { @a C(); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        constructors
-          @29
-            metadata
-              Annotation
-                atSign: @ @26
-                name: SimpleIdentifier
-                  token: a @27
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_enum_constant() async {
-    var library = await checkLibrary('const a = 42; enum E { @a v }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @19
-        supertype: Enum
-        fields
-          static const enumConstant v @26
-            metadata
-              Annotation
-                atSign: @ @23
-                name: SimpleIdentifier
-                  token: a @24
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_enum_constant_instanceCreation() async {
-    var library = await checkLibrary('''
-class A {
-  final dynamic value;
-  const A(this.value);
-}
-
-enum E {
-  @A(100) a,
-  b,
-  @A(300) c,
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          final value @26
-            type: dynamic
-        constructors
-          const @41
-            parameters
-              requiredPositional final this.value @48
-                type: dynamic
-                field: self::@class::A::@field::value
-        accessors
-          synthetic get value @-1
-            returnType: dynamic
-    enums
-      enum E @64
-        supertype: Enum
-        fields
-          static const enumConstant a @78
-            metadata
-              Annotation
-                atSign: @ @70
-                name: SimpleIdentifier
-                  token: A @71
-                  staticElement: self::@class::A
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @72
-                  arguments
-                    IntegerLiteral
-                      literal: 100 @73
-                      staticType: int
-                  rightParenthesis: ) @76
-                element: self::@class::A::@constructor::•
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @83
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant c @96
-            metadata
-              Annotation
-                atSign: @ @88
-                name: SimpleIdentifier
-                  token: A @89
-                  staticElement: self::@class::A
-                  staticType: null
-                arguments: ArgumentList
-                  leftParenthesis: ( @90
-                  arguments
-                    IntegerLiteral
-                      literal: 300 @91
-                      staticType: int
-                  rightParenthesis: ) @94
-                element: self::@class::A::@constructor::•
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_metadata_enum_constant_self() async {
-    var library = await checkLibrary(r'''
-enum E {
-  @v
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @16
-            metadata
-              Annotation
-                atSign: @ @11
-                name: SimpleIdentifier
-                  token: v @12
-                  staticElement: self::@enum::E::@getter::v
-                  staticType: null
-                element: self::@enum::E::@getter::v
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_metadata_enum_constructor() async {
-    var library = await checkLibrary(r'''
-const a = 42;
-enum E {
-  v;
-  @a
-  const E();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @19
-        supertype: Enum
-        fields
-          static const enumConstant v @25
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          const @41
-            metadata
-              Annotation
-                atSign: @ @30
-                name: SimpleIdentifier
-                  token: a @31
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_enum_method() async {
-    var library = await checkLibrary(r'''
-const a = 42;
-enum E {
-  v;
-  @a
-  void foo() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @19
-        supertype: Enum
-        fields
-          static const enumConstant v @25
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-        methods
-          foo @40
-            metadata
-              Annotation
-                atSign: @ @30
-                name: SimpleIdentifier
-                  token: a @31
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_enum_scope() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-enum E<@foo T> {
-  v;
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @26
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @33
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        supertype: Enum
-        fields
-          static const enumConstant v @40
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-          static const foo @58
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @64
-                staticType: int
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-          synthetic static get foo @-1
-            returnType: int
-        methods
-          bar @81
-            metadata
-              Annotation
-                atSign: @ @69
-                name: SimpleIdentifier
-                  token: foo @70
-                  staticElement: self::@enum::E::@getter::foo
-                  staticType: null
-                element: self::@enum::E::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_enum_typeParameter() async {
-    var library = await checkLibrary('''
-const a = 42;
-enum E<@a T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @19
-        typeParameters
-          covariant T @24
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @21
-                name: SimpleIdentifier
-                  token: a @22
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        supertype: Enum
-        fields
-          static const enumConstant v @31
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E<dynamic>
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_enumDeclaration() async {
-    var library = await checkLibrary('const a = 42; @a enum E { v }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @22
-        metadata
-          Annotation
-            atSign: @ @14
-            name: SimpleIdentifier
-              token: a @15
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        supertype: Enum
-        fields
-          static const enumConstant v @26
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_exportDirective() async {
-    addLibrarySource('/foo.dart', '');
-    var library = await checkLibrary('@a export "foo.dart"; const a = null;');
-    checkElementText(library, r'''
-library
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: self::@getter::a
-        staticType: null
-      element: self::@getter::a
-  exports
-    foo.dart
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: self::@getter::a
-            staticType: null
-          element: self::@getter::a
-  definingUnit
-    topLevelVariables
-      static const a @28
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @32
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_extension_scope() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-extension E<@foo T> on int {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      E @31
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @38
-            metadata
-              Annotation
-                atSign: @ @33
-                name: SimpleIdentifier
-                  token: foo @34
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        extendedType: int
-        fields
-          static const foo @65
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @71
-                staticType: int
-        accessors
-          synthetic static get foo @-1
-            returnType: int
-        methods
-          bar @88
-            metadata
-              Annotation
-                atSign: @ @76
-                name: SimpleIdentifier
-                  token: foo @77
-                  staticElement: self::@extension::E::@getter::foo
-                  staticType: null
-                element: self::@extension::E::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_extensionDeclaration() async {
-    var library = await checkLibrary(r'''
-const a = null;
-class A {}
-@a
-@Object()
-extension E on A {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        constructors
-          synthetic @-1
-    extensions
-      E @50
-        metadata
-          Annotation
-            atSign: @ @27
-            name: SimpleIdentifier
-              token: a @28
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-          Annotation
-            atSign: @ @30
-            name: SimpleIdentifier
-              token: Object @31
-              staticElement: dart:core::@class::Object
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @37
-              rightParenthesis: ) @38
-            element: dart:core::@class::Object::@constructor::•
-        extendedType: A
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldDeclaration() async {
-    var library = await checkLibrary('const a = null; class C { @a int x; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        fields
-          x @33
-            metadata
-              Annotation
-                atSign: @ @26
-                name: SimpleIdentifier
-                  token: a @27
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: int
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldFormalParameter() async {
-    var library = await checkLibrary('''
-const a = null;
-class C {
-  var x;
-  C(@a this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        fields
-          x @32
-            type: dynamic
-        constructors
-          @37
-            parameters
-              requiredPositional final this.x @47
-                type: dynamic
-                metadata
-                  Annotation
-                    atSign: @ @39
-                    name: SimpleIdentifier
-                      token: a @40
-                      staticElement: self::@getter::a
-                      staticType: null
-                    element: self::@getter::a
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldFormalParameter_withDefault() async {
-    var library = await checkLibrary(
-        'const a = null; class C { var x; C([@a this.x = null]); }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        fields
-          x @30
-            type: dynamic
-        constructors
-          @33
-            parameters
-              optionalPositional final this.x @44
-                type: dynamic
-                metadata
-                  Annotation
-                    atSign: @ @36
-                    name: SimpleIdentifier
-                      token: a @37
-                      staticElement: self::@getter::a
-                      staticType: null
-                    element: self::@getter::a
-                constantInitializer
-                  NullLiteral
-                    literal: null @48
-                    staticType: Null
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_function() async {
-    var library = await checkLibrary('''
-const a = null;
-@a
-f() {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @19
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_getter() async {
-    var library = await checkLibrary('const a = null; @a get f => null;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      synthetic static f @-1
-        type: dynamic
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      static get f @23
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_setter() async {
-    var library = await checkLibrary('const a = null; @a set f(value) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      synthetic static f @-1
-        type: dynamic
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      static set f @23
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        parameters
-          requiredPositional value @25
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_metadata_functionTypeAlias() async {
-    var library = await checkLibrary('const a = null; @a typedef F();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @27
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_functionTypedFormalParameter() async {
-    var library = await checkLibrary('const a = null; f(@a g()) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @16
-        parameters
-          requiredPositional g @21
-            type: dynamic Function()
-            metadata
-              Annotation
-                atSign: @ @18
-                name: SimpleIdentifier
-                  token: a @19
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_functionTypedFormalParameter_withDefault() async {
-    var library = await checkLibrary('const a = null; f([@a g() = null]) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @16
-        parameters
-          optionalPositional g @22
-            type: dynamic Function()
-            metadata
-              Annotation
-                atSign: @ @19
-                name: SimpleIdentifier
-                  token: a @20
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            constantInitializer
-              NullLiteral
-                literal: null @28
-                staticType: null
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_genericTypeAlias() async {
-    var library = await checkLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-typedef F = void Function();''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @46
-        metadata
-          Annotation
-            atSign: @ @32
-            name: SimpleIdentifier
-              token: a @33
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: b @36
-              staticElement: self::@getter::b
-              staticType: null
-            element: self::@getter::b
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static const b @22
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @26
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get b @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_importDirective() async {
-    var library = await checkLibrary('''
-@a
-import "dart:math";
-const a = 0;
-''');
-    checkElementText(library, r'''
-library
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: self::@getter::a
-        staticType: null
-      element: self::@getter::a
-  imports
-    dart:math
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: self::@getter::a
-            staticType: null
-          element: self::@getter::a
-  definingUnit
-    topLevelVariables
-      static const a @29
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @33
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_importDirective_hasShow() async {
-    var library = await checkLibrary(r'''
-@a
-import "dart:math" show Random;
-
-const a = 0;
-''');
-    checkElementText(library, r'''
-library
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: self::@getter::a
-        staticType: null
-      element: self::@getter::a
-  imports
-    dart:math
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: self::@getter::a
-            staticType: null
-          element: self::@getter::a
-      combinators
-        show: Random
-  definingUnit
-    topLevelVariables
-      static const a @42
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @46
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_formalParameter() async {
-    var library = await checkLibrary('''
-const a = 42;
-typedef F = void Function(@a int first)
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @22
-        aliasedType: void Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional first @47
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @40
-                  name: SimpleIdentifier
-                    token: a @41
-                    staticElement: self::@getter::a
-                    staticType: null
-                  element: self::@getter::a
-          returnType: void
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_formalParameter2() async {
-    var library = await checkLibrary('''
-const a = 42;
-typedef F = void Function(int foo(@a int bar))
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @22
-        aliasedType: void Function(int Function(int))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional foo @44
-              type: int Function(int)
-              parameters
-                requiredPositional bar @55
-                  type: int
-                  metadata
-                    Annotation
-                      atSign: @ @48
-                      name: SimpleIdentifier
-                        token: a @49
-                        staticElement: self::@getter::a
-                        staticType: null
-                      element: self::@getter::a
-          returnType: void
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_typeParameter() async {
-    var library = await checkLibrary('''
-const a = 42;
-typedef F = void Function<@a T>(int first)
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @22
-        aliasedType: void Function<T>(int)
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant T @43
-              metadata
-                Annotation
-                  atSign: @ @40
-                  name: SimpleIdentifier
-                    token: a @41
-                    staticElement: self::@getter::a
-                    staticType: null
-                  element: self::@getter::a
-          parameters
-            requiredPositional first @50
-              type: int
-          returnType: void
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_invalid_classDeclaration() async {
-    var library = await checkLibrary('f(_) {} @f(42) class C {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @21
-        metadata
-          Annotation
-            atSign: @ @8
-            name: SimpleIdentifier
-              token: f @9
-              staticElement: self::@function::f
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @10
-              arguments
-                IntegerLiteral
-                  literal: 42 @11
-                  staticType: int
-              rightParenthesis: ) @13
-            element: self::@function::f
-        constructors
-          synthetic @-1
-    functions
-      f @0
-        parameters
-          requiredPositional _ @2
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_libraryDirective() async {
-    var library = await checkLibrary('@a library L; const a = null;');
-    checkElementText(library, r'''
-library
-  name: L
-  nameOffset: 11
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: self::@getter::a
-        staticType: null
-      element: self::@getter::a
-  definingUnit
-    topLevelVariables
-      static const a @20
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @24
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_getter() async {
-    var library =
-        await checkLibrary('const a = null; class C { @a get m => null; }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        fields
-          synthetic m @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          get m @33
-            metadata
-              Annotation
-                atSign: @ @26
-                name: SimpleIdentifier
-                  token: a @27
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_method() async {
-    var library = await checkLibrary(r'''
-const a = null;
-const b = null;
-class C {
-  @a
-  @b
-  m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @38
-        constructors
-          synthetic @-1
-        methods
-          m @54
-            metadata
-              Annotation
-                atSign: @ @44
-                name: SimpleIdentifier
-                  token: a @45
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-              Annotation
-                atSign: @ @49
-                name: SimpleIdentifier
-                  token: b @50
-                  staticElement: self::@getter::b
-                  staticType: null
-                element: self::@getter::b
-            returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static const b @22
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @26
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get b @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_method_mixin() async {
-    var library = await checkLibrary(r'''
-const a = null;
-const b = null;
-mixin M {
-  @a
-  @b
-  m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @38
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-        methods
-          m @54
-            metadata
-              Annotation
-                atSign: @ @44
-                name: SimpleIdentifier
-                  token: a @45
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-              Annotation
-                atSign: @ @49
-                name: SimpleIdentifier
-                  token: b @50
-                  staticElement: self::@getter::b
-                  staticType: null
-                element: self::@getter::b
-            returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static const b @22
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @26
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get b @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_setter() async {
-    var library = await checkLibrary('''
-const a = null;
-class C {
-  @a
-  set m(value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        fields
-          synthetic m @-1
-            type: dynamic
-        constructors
-          synthetic @-1
-        accessors
-          set m @37
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: a @29
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            parameters
-              requiredPositional value @39
-                type: dynamic
-            returnType: void
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_mixin_scope() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-mixin M<@foo T> {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @27
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @29
-                name: SimpleIdentifier
-                  token: foo @30
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        superclassConstraints
-          Object
-        fields
-          static const foo @54
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @60
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get foo @-1
-            returnType: int
-        methods
-          bar @77
-            metadata
-              Annotation
-                atSign: @ @65
-                name: SimpleIdentifier
-                  token: foo @66
-                  staticElement: self::@mixin::M::@getter::foo
-                  staticType: null
-                element: self::@mixin::M::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_mixinDeclaration() async {
-    var library = await checkLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-mixin M {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @44
-        metadata
-          Annotation
-            atSign: @ @32
-            name: SimpleIdentifier
-              token: a @33
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: b @36
-              staticElement: self::@getter::b
-              staticType: null
-            element: self::@getter::b
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static const b @22
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @26
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get b @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_offsets_onClass() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-class A<@foo T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @27
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @29
-                name: SimpleIdentifier
-                  token: foo @30
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassConstructor() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  A(@foo int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        constructors
-          @35
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            parameters
-              requiredPositional a @46
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @37
-                    name: SimpleIdentifier
-                      token: foo @38
-                      staticElement: self::@getter::foo
-                      staticType: null
-                    element: self::@getter::foo
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassGetter() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  int get getter => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        fields
-          synthetic getter @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          get getter @43
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            returnType: int
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassMethod() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  void method<@foo T>(@foo int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        constructors
-          synthetic @-1
-        methods
-          method @40
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            typeParameters
-              covariant T @52
-                metadata
-                  Annotation
-                    atSign: @ @47
-                    name: SimpleIdentifier
-                      token: foo @48
-                      staticElement: self::@getter::foo
-                      staticType: null
-                    element: self::@getter::foo
-            parameters
-              requiredPositional a @64
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @55
-                    name: SimpleIdentifier
-                      token: foo @56
-                      staticElement: self::@getter::foo
-                      staticType: null
-                    element: self::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassSetter() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  set setter(@foo int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        fields
-          synthetic setter @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          set setter @39
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            parameters
-              requiredPositional a @55
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @46
-                    name: SimpleIdentifier
-                      token: foo @47
-                      staticElement: self::@getter::foo
-                      staticType: null
-                    element: self::@getter::foo
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassTypeAlias() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {}
-mixin M {}
-
-@foo
-class B<@foo T> = A with M;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        constructors
-          synthetic @-1
-      class alias B @50
-        metadata
-          Annotation
-            atSign: @ @39
-            name: SimpleIdentifier
-              token: foo @40
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @57
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @52
-                name: SimpleIdentifier
-                  token: foo @53
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        supertype: A
-        mixins
-          M
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: self::@class::A::@constructor::•
-    mixins
-      mixin M @33
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onEnum() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-enum E {
-  @foo e1,
-  e2,
-  @foo e3,
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @26
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        supertype: Enum
-        fields
-          static const enumConstant e1 @37
-            metadata
-              Annotation
-                atSign: @ @32
-                name: SimpleIdentifier
-                  token: foo @33
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant e2 @43
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant e3 @54
-            metadata
-              Annotation
-                atSign: @ @49
-                name: SimpleIdentifier
-                  token: foo @50
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: e1 @-1
-                    staticElement: self::@enum::E::@getter::e1
-                    staticType: E
-                  SimpleIdentifier
-                    token: e2 @-1
-                    staticElement: self::@enum::E::@getter::e2
-                    staticType: E
-                  SimpleIdentifier
-                    token: e3 @-1
-                    staticElement: self::@enum::E::@getter::e3
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get e1 @-1
-            returnType: E
-          synthetic static get e2 @-1
-            returnType: E
-          synthetic static get e3 @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onExtension() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-extension E<@foo T> on List<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      E @31
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @38
-            metadata
-              Annotation
-                atSign: @ @33
-                name: SimpleIdentifier
-                  token: foo @34
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        extendedType: List<T>
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onFieldDeclaration() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  static isStatic = 1;
-
-  @foo
-  static const isStaticConst = 2;
-
-  @foo
-  var isInstance = 3;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @22
-        fields
-          static isStatic @42
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            type: int
-          static const isStaticConst @79
-            metadata
-              Annotation
-                atSign: @ @59
-                name: SimpleIdentifier
-                  token: foo @60
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 2 @95
-                staticType: int
-          isInstance @112
-            metadata
-              Annotation
-                atSign: @ @101
-                name: SimpleIdentifier
-                  token: foo @102
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get isStatic @-1
-            returnType: int
-          synthetic static set isStatic @-1
-            parameters
-              requiredPositional _isStatic @-1
-                type: int
-            returnType: void
-          synthetic static get isStaticConst @-1
-            returnType: int
-          synthetic get isInstance @-1
-            returnType: int
-          synthetic set isInstance @-1
-            parameters
-              requiredPositional _isInstance @-1
-                type: int
-            returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onLibrary() async {
-    var library = await checkLibrary('''
-/// Some documentation.
-@foo
-library my.lib;
-
-const foo = 0;
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 37
-  documentationComment: /// Some documentation.
-  metadata
-    Annotation
-      atSign: @ @24
-      name: SimpleIdentifier
-        token: foo @25
-        staticElement: self::@getter::foo
-        staticType: null
-      element: self::@getter::foo
-  definingUnit
-    topLevelVariables
-      static const foo @52
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @58
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onMixin() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-mixin A<@foo T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin A @27
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @29
-                name: SimpleIdentifier
-                  token: foo @30
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onTypeAlias_classic() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-typedef void F<@foo T>(@foo int a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @34
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          unrelated T @41
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @36
-                name: SimpleIdentifier
-                  token: foo @37
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        aliasedType: void Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @53
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @44
-                  name: SimpleIdentifier
-                    token: foo @45
-                    staticElement: self::@getter::foo
-                    staticType: null
-                  element: self::@getter::foo
-          returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onTypeAlias_genericFunctionType() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-typedef A<@foo T> = void Function<@foo U>(@foo int a);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @29
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          unrelated T @36
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @31
-                name: SimpleIdentifier
-                  token: foo @32
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        aliasedType: void Function<U>(int)
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant U @60
-              metadata
-                Annotation
-                  atSign: @ @55
-                  name: SimpleIdentifier
-                    token: foo @56
-                    staticElement: self::@getter::foo
-                    staticType: null
-                  element: self::@getter::foo
-          parameters
-            requiredPositional a @72
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @63
-                  name: SimpleIdentifier
-                    token: foo @64
-                    staticElement: self::@getter::foo
-                    staticType: null
-                  element: self::@getter::foo
-          returnType: void
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onUnit() async {
-    addSource('/a.dart', '''
-part of my.lib;
-''');
-
-    addSource('/b.dart', '''
-part of my.lib;
-''');
-
-    var library = await checkLibrary('''
-library my.lib;
-
-@foo
-part 'a.dart';
-
-@foo
-part 'b.dart';
-
-const foo = 0;
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      static const foo @65
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @71
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-  parts
-    a.dart
-      metadata
-        Annotation
-          atSign: @ @17
-          name: SimpleIdentifier
-            token: foo @18
-            staticElement: self::@getter::foo
-            staticType: null
-          element: self::@getter::foo
-    b.dart
-      metadata
-        Annotation
-          atSign: @ @38
-          name: SimpleIdentifier
-            token: foo @39
-            staticElement: self::@getter::foo
-            staticType: null
-          element: self::@getter::foo
-''');
-  }
-
-  test_metadata_offsets_onUnitFunction() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-void f<@foo T>({@foo int? a = 42}) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-    functions
-      f @26
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        typeParameters
-          covariant T @33
-            metadata
-              Annotation
-                atSign: @ @28
-                name: SimpleIdentifier
-                  token: foo @29
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        parameters
-          optionalNamed a @47
-            type: int?
-            metadata
-              Annotation
-                atSign: @ @37
-                name: SimpleIdentifier
-                  token: foo @38
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-            constantInitializer
-              IntegerLiteral
-                literal: 42 @51
-                staticType: int
-        returnType: void
-''');
-  }
-
-  test_metadata_offsets_onUnitGetter() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-int get getter => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-      synthetic static getter @-1
-        type: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-      static get getter @29
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        returnType: int
-''');
-  }
-
-  test_metadata_offsets_onUnitSetter() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-set setter(@foo int a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-      synthetic static setter @-1
-        type: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-      static set setter @25
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        parameters
-          requiredPositional a @41
-            type: int
-            metadata
-              Annotation
-                atSign: @ @32
-                name: SimpleIdentifier
-                  token: foo @33
-                  staticElement: self::@getter::foo
-                  staticType: null
-                element: self::@getter::foo
-        returnType: void
-''');
-  }
-
-  test_metadata_offsets_onUnitVariable() async {
-    var library = await checkLibrary(r'''
-const foo = 0;
-
-@foo
-var isNotConst = 1;
-
-@foo
-const isConst = 2;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const foo @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @12
-            staticType: int
-      static isNotConst @25
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: foo @17
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        type: int
-      static const isConst @53
-        metadata
-          Annotation
-            atSign: @ @42
-            name: SimpleIdentifier
-              token: foo @43
-              staticElement: self::@getter::foo
-              staticType: null
-            element: self::@getter::foo
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 2 @63
-            staticType: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-      synthetic static get isNotConst @-1
-        returnType: int
-      synthetic static set isNotConst @-1
-        parameters
-          requiredPositional _isNotConst @-1
-            type: int
-        returnType: void
-      synthetic static get isConst @-1
-        returnType: int
-''');
-  }
-
-  test_metadata_partDirective() async {
-    addSource('/foo.dart', 'part of L;');
-    var library = await checkLibrary('''
-library L;
-@a
-part 'foo.dart';
-const a = null;''');
-    checkElementText(library, r'''
-library
-  name: L
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      static const a @37
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @41
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-  parts
-    foo.dart
-      metadata
-        Annotation
-          atSign: @ @11
-          name: SimpleIdentifier
-            token: a @12
-            staticElement: self::@getter::a
-            staticType: null
-          element: self::@getter::a
-''');
-  }
-
-  test_metadata_partDirective2() async {
-    addSource('/a.dart', r'''
-part of 'test.dart';
-''');
-    addSource('/b.dart', r'''
-part of 'test.dart';
-''');
-    var library = await checkLibrary('''
-part 'a.dart';
-part 'b.dart';
-''');
-
-    // The difference with the test above is that we ask the part first.
-    // There was a bug that we were not loading library directives.
-    expect(library.parts[0].metadata, isEmpty);
-  }
-
-  test_metadata_prefixed_variable() async {
-    addLibrarySource('/a.dart', 'const b = null;');
-    var library = await checkLibrary('import "a.dart" as a; @a.b class C {}');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart as a @19
-  definingUnit
-    classes
-      class C @33
-        metadata
-          Annotation
-            atSign: @ @22
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: a @23
-                staticElement: self::@prefix::a
-                staticType: null
-              period: . @24
-              identifier: SimpleIdentifier
-                token: b @25
-                staticElement: a.dart::@getter::b
-                staticType: null
-              staticElement: a.dart::@getter::b
-              staticType: null
-            element: a.dart::@getter::b
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_simpleFormalParameter() async {
-    var library = await checkLibrary('const a = null; f(@a x) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @16
-        parameters
-          requiredPositional x @21
-            type: dynamic
-            metadata
-              Annotation
-                atSign: @ @18
-                name: SimpleIdentifier
-                  token: a @19
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_simpleFormalParameter_method() async {
-    var library = await checkLibrary('''
-const a = null;
-
-class C {
-  m(@a x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @23
-        constructors
-          synthetic @-1
-        methods
-          m @29
-            parameters
-              requiredPositional x @34
-                type: dynamic
-                metadata
-                  Annotation
-                    atSign: @ @31
-                    name: SimpleIdentifier
-                      token: a @32
-                      staticElement: self::@getter::a
-                      staticType: null
-                    element: self::@getter::a
-            returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_simpleFormalParameter_unit_setter() async {
-    var library = await checkLibrary('''
-const a = null;
-
-set foo(@a int x) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      synthetic static foo @-1
-        type: int
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      static set foo @21
-        parameters
-          requiredPositional x @32
-            type: int
-            metadata
-              Annotation
-                atSign: @ @25
-                name: SimpleIdentifier
-                  token: a @26
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        returnType: void
-''');
-  }
-
-  test_metadata_simpleFormalParameter_withDefault() async {
-    var library = await checkLibrary('const a = null; f([@a x = null]) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @16
-        parameters
-          optionalPositional x @22
-            type: dynamic
-            metadata
-              Annotation
-                atSign: @ @19
-                name: SimpleIdentifier
-                  token: a @20
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-            constantInitializer
-              NullLiteral
-                literal: null @26
-                staticType: Null
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_superFormalParameter() async {
-    var library = await checkLibrary('''
-const a = null;
-
-class A {
-  A(int x);
-}
-
-class B extends A {
-  B(@a super.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @23
-        constructors
-          @29
-            parameters
-              requiredPositional x @35
-                type: int
-      class B @48
-        supertype: A
-        constructors
-          @64
-            parameters
-              requiredPositional final super.x @75
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @66
-                    name: SimpleIdentifier
-                      token: a @67
-                      staticElement: self::@getter::a
-                      staticType: null
-                    element: self::@getter::a
-                superConstructorParameter: x@35
-            superConstructor: self::@class::A::@constructor::•
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_topLevelVariableDeclaration() async {
-    var library = await checkLibrary('const a = null; @a int v;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-      static v @23
-        metadata
-          Annotation
-            atSign: @ @16
-            name: SimpleIdentifier
-              token: a @17
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        type: int
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_metadata_typeParameter_ofClass() async {
-    var library = await checkLibrary('const a = null; class C<@a T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @22
-        typeParameters
-          covariant T @27
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @24
-                name: SimpleIdentifier
-                  token: a @25
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofClassTypeAlias() async {
-    var library = await checkLibrary('''
-const a = null;
-class C<@a T> = D with E;
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class alias C @22
-        typeParameters
-          covariant T @27
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @24
-                name: SimpleIdentifier
-                  token: a @25
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        supertype: D
-        mixins
-          E
-        constructors
-          synthetic @-1
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticElement: self::@class::D::@constructor::•
-            superConstructor: self::@class::D::@constructor::•
-      class D @48
-        constructors
-          synthetic @-1
-      class E @59
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofFunction() async {
-    var library = await checkLibrary('const a = null; f<@a T>() {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-    functions
-      f @16
-        typeParameters
-          covariant T @21
-            metadata
-              Annotation
-                atSign: @ @18
-                name: SimpleIdentifier
-                  token: a @19
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofTypedef() async {
-    var library = await checkLibrary('const a = null; typedef F<@a T>();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @24
-        typeParameters
-          unrelated T @29
-            defaultType: dynamic
-            metadata
-              Annotation
-                atSign: @ @26
-                name: SimpleIdentifier
-                  token: a @27
-                  staticElement: self::@getter::a
-                  staticType: null
-                element: self::@getter::a
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-    topLevelVariables
-      static const a @6
-        type: dynamic
-        constantInitializer
-          NullLiteral
-            literal: null @10
-            staticType: Null
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-''');
-  }
-
-  test_metadata_unit_topLevelVariable_first() async {
-    var library = await checkLibrary(r'''
-const a = 0;
-@a
-int x = 0;
-''');
-    // Check metadata without asking any other properties.
-    var x = _elementOfDefiningUnit(library, ['@variable', 'x'])
-        as TopLevelVariableElement;
-    expect(x.metadata, hasLength(1));
-    // Check details.
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-      static x @20
-        metadata
-          Annotation
-            atSign: @ @13
-            name: SimpleIdentifier
-              token: a @14
-              staticElement: self::@getter::a
-              staticType: null
-            element: self::@getter::a
-        type: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_metadata_value_class_staticField() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-class A {
-  static const x = 0;
-}
-@A.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          static const x @25
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @29
-                staticType: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic static get x @-1
-            returnType: int
-      class C @45
-        metadata
-          Annotation
-            atSign: @ @34
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: A @35
-                staticElement: self::@class::A
-                staticType: null
-              period: . @36
-              identifier: SimpleIdentifier
-                token: x @37
-                staticElement: self::@class::A::@getter::x
-                staticType: null
-              staticElement: self::@class::A::@getter::x
-              staticType: null
-            element: self::@class::A::@getter::x
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_metadata_value_enum_constant() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-enum E {a, b, c}
-@E.b
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @28
-        metadata
-          Annotation
-            atSign: @ @17
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: E @18
-                staticElement: self::@enum::E
-                staticType: null
-              period: . @19
-              identifier: SimpleIdentifier
-                token: b @20
-                staticElement: self::@enum::E::@getter::b
-                staticType: null
-              staticElement: self::@enum::E::@getter::b
-              staticType: null
-            element: self::@enum::E::@getter::b
-        constructors
-          synthetic @-1
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @8
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant b @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          static const enumConstant c @14
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                  SimpleIdentifier
-                    token: c @-1
-                    staticElement: self::@enum::E::@getter::c
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get a @-1
-            returnType: E
-          synthetic static get b @-1
-            returnType: E
-          synthetic static get c @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-''');
-  }
-
-  test_metadata_value_extension_staticField() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    var library = await checkLibrary('''
-extension E on int {
-  static const x = 0;
-}
-@E.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @56
-        metadata
-          Annotation
-            atSign: @ @45
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: E @46
-                staticElement: self::@extension::E
-                staticType: null
-              period: . @47
-              identifier: SimpleIdentifier
-                token: x @48
-                staticElement: self::@extension::E::@getter::x
-                staticType: null
-              staticElement: self::@extension::E::@getter::x
-              staticType: null
-            element: self::@extension::E::@getter::x
-        constructors
-          synthetic @-1
-    extensions
-      E @10
-        extendedType: int
-        fields
-          static const x @36
-            type: int
-            constantInitializer
-              IntegerLiteral
-                literal: 0 @40
-                staticType: int
-        accessors
-          synthetic static get x @-1
-            returnType: int
-''');
-  }
-
-  test_metadata_value_prefix_extension_staticField() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/foo.dart', '''
-extension E on int {
-  static const x = 0;
-}
-''');
-    var library = await checkLibrary('''
-import 'foo.dart' as foo;
-@foo.E.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/foo.dart as foo @21
-  definingUnit
-    classes
-      class C @41
-        metadata
-          Annotation
-            atSign: @ @26
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @27
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @30
-              identifier: SimpleIdentifier
-                token: E @31
-                staticElement: package:test/foo.dart::@extension::E
-                staticType: null
-              staticElement: package:test/foo.dart::@extension::E
-              staticType: null
-            period: . @32
-            constructorName: SimpleIdentifier
-              token: x @33
-              staticElement: package:test/foo.dart::@extension::E::@getter::x
-              staticType: null
-            element: package:test/foo.dart::@extension::E::@getter::x
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_methodInvocation_implicitCall() async {
-    var library = await checkLibrary(r'''
-class A {
-  double call() => 0.0;
-}
-class B {
-  A a;
-}
-var c = new B().a();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          call @19
-            returnType: double
-      class B @42
-        fields
-          a @50
-            type: A
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get a @-1
-            returnType: A
-          synthetic set a @-1
-            parameters
-              requiredPositional _a @-1
-                type: A
-            returnType: void
-    topLevelVariables
-      static c @59
-        type: double
-    accessors
-      synthetic static get c @-1
-        returnType: double
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: double
-        returnType: void
-''');
-  }
-
-  test_mixin() async {
-    var library = await checkLibrary(r'''
-class A {}
-class B {}
-class C {}
-class D {}
-
-mixin M<T extends num, U> on A, B implements C, D {
-  T f;
-  U get g => 0;
-  set s(int v) {}
-  int m(double v) => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @17
-        constructors
-          synthetic @-1
-      class C @28
-        constructors
-          synthetic @-1
-      class D @39
-        constructors
-          synthetic @-1
-    mixins
-      mixin M @51
-        typeParameters
-          covariant T @53
-            bound: num
-            defaultType: num
-          covariant U @68
-            defaultType: dynamic
-        superclassConstraints
-          A
-          B
-        interfaces
-          C
-          D
-        fields
-          f @101
-            type: T
-          synthetic g @-1
-            type: U
-          synthetic s @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: T
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: T
-            returnType: void
-          get g @112
-            returnType: U
-          set s @126
-            parameters
-              requiredPositional v @132
-                type: int
-            returnType: void
-        methods
-          m @144
-            parameters
-              requiredPositional v @153
-                type: double
-            returnType: int
-''');
-  }
-
-  test_mixin_field_inferredType_final() async {
-    var library = await checkLibrary('''
-mixin M {
-  final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        fields
-          final x @18
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get x @-1
-            returnType: int
-''');
-  }
-
-  test_mixin_first() async {
-    var library = await checkLibrary(r'''
-mixin M {}
-''');
-
-    // We intentionally ask `mixins` directly, to check that we can ask them
-    // separately, without asking classes.
-    var mixins = library.definingCompilationUnit.mixins;
-    expect(mixins, hasLength(1));
-    expect(mixins[0].name, 'M');
-  }
-
-  test_mixin_implicitObjectSuperclassConstraint() async {
-    var library = await checkLibrary(r'''
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_inference_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary(r'''
-class A<T> {}
-mixin M<U> on A<U> {}
-class B extends A<int> with M {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @42
-        supertype: A<int*>*
-        mixins
-          M<int*>*
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int*}
-    mixins
-      mixin M @20
-        typeParameters
-          covariant U @22
-            defaultType: dynamic
-        superclassConstraints
-          A<U*>*
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_inference_nullSafety() async {
-    var library = await checkLibrary(r'''
-class A<T> {}
-mixin M<U> on A<U> {}
-class B extends A<int> with M {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @42
-        supertype: A<int>
-        mixins
-          M<int>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
-    mixins
-      mixin M @20
-        typeParameters
-          covariant U @22
-            defaultType: dynamic
-        superclassConstraints
-          A<U>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_inference_nullSafety2() async {
-    addLibrarySource('/a.dart', r'''
-class A<T> {}
-
-mixin B<T> on A<T> {}
-mixin C<T> on A<T> {}
-''');
-    var library = await checkLibrary(r'''
-// @dart=2.8
-import 'a.dart';
-
-class D extends A<int> with B<int>, C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class D @37
-        supertype: A<int*>*
-        mixins
-          B<int*>*
-          C<int*>*
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: a.dart::@class::A::@constructor::•
-              substitution: {T: int*}
-''');
-  }
-
-  test_mixin_inference_nullSafety_mixed_inOrder() async {
-    addLibrarySource('/a.dart', r'''
-class A<T> {}
-mixin M<U> on A<U> {}
-''');
-    var library = await checkLibrary(r'''
-// @dart = 2.8
-import 'a.dart';
-class B extends A<int> with M {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    classes
-      class B @38
-        supertype: A<int*>*
-        mixins
-          M<int*>*
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: a.dart::@class::A::@constructor::•
-              substitution: {T: int*}
-''');
-  }
-
-  @FailingTest(reason: 'Out-of-order inference is not specified yet')
-  test_mixin_inference_nullSafety_mixed_outOfOrder() async {
-    addLibrarySource('/a.dart', r'''
-// @dart = 2.8
-class A<T> {}
-mixin M<U> on A<U> {}
-''');
-    var library = await checkLibrary(r'''
-import 'a.dart';
-
-class B extends A<int> with M {}
-''');
-    checkElementText(library, r'''
-import 'a.dart';
-class B extends A<int> with M<int> {
-  synthetic B();
-}
-''');
-  }
-
-  test_mixin_method_namedAsConstraint() async {
-    var library = await checkLibrary(r'''
-class A {}
-mixin B on A {
-  void A() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    mixins
-      mixin B @17
-        superclassConstraints
-          A
-        constructors
-          synthetic @-1
-        methods
-          A @33
-            returnType: void
-''');
-  }
-
-  test_mixin_typeParameters_variance_contravariant() async {
-    var library = await checkLibrary('mixin M<in T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        typeParameters
-          contravariant T @11
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_typeParameters_variance_covariant() async {
-    var library = await checkLibrary('mixin M<out T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        typeParameters
-          covariant T @12
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_typeParameters_variance_invariant() async {
-    var library = await checkLibrary('mixin M<inout T> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        typeParameters
-          invariant T @14
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_mixin_typeParameters_variance_multiple() async {
-    var library = await checkLibrary('mixin M<inout T, in U, out V> {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        typeParameters
-          invariant T @14
-            defaultType: dynamic
-          contravariant U @20
-            defaultType: dynamic
-          covariant V @27
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_nameConflict_exportedAndLocal() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    addLibrarySource('/c.dart', '''
-export 'a.dart';
-class C {}
-''');
-    var library = await checkLibrary('''
-import 'c.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    c.dart
-  definingUnit
-    topLevelVariables
-      static v @19
-        type: C
-    accessors
-      synthetic static get v @-1
-        returnType: C
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_nameConflict_exportedAndLocal_exported() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    addLibrarySource('/c.dart', '''
-export 'a.dart';
-class C {}
-''');
-    addLibrarySource('/d.dart', 'export "c.dart";');
-    var library = await checkLibrary('''
-import 'd.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    d.dart
-  definingUnit
-    topLevelVariables
-      static v @19
-        type: C
-    accessors
-      synthetic static get v @-1
-        returnType: C
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_nameConflict_exportedAndParted() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    addLibrarySource('/b.dart', '''
-part of lib;
-class C {}
-''');
-    addLibrarySource('/c.dart', '''
-library lib;
-export 'a.dart';
-part 'b.dart';
-''');
-    var library = await checkLibrary('''
-import 'c.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    c.dart
-  definingUnit
-    topLevelVariables
-      static v @19
-        type: C
-    accessors
-      synthetic static get v @-1
-        returnType: C
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
-    if (resourceProvider.pathContext.separator != '/') {
-      return;
-    }
-
-    addLibrarySource('/a.dart', 'class A {}');
-    addLibrarySource('/b.dart', 'export "/a.dart";');
-    var library = await checkLibrary('''
-import 'a.dart';
-import 'b.dart';
-A v = null;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-    b.dart
-  definingUnit
-    topLevelVariables
-      static v @36
-        type: A
-    accessors
-      synthetic static get v @-1
-        returnType: A
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: A
-        returnType: void
-''');
-  }
-
-  test_nameOffset_class_constructor() async {
-    var library = await checkLibrary(r'''
-class A {
-  A();
-  A.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-          named @21
-            periodOffset: 20
-            nameEnd: 26
-''');
-  }
-
-  test_nameOffset_class_constructor_parameter() async {
-    var library = await checkLibrary(r'''
-class A {
-  A(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional a @18
-                type: int
-''');
-  }
-
-  test_nameOffset_class_field() async {
-    var library = await checkLibrary(r'''
-class A {
-  int foo = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          foo @16
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get foo @-1
-            returnType: int
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_nameOffset_class_getter() async {
-    var library = await checkLibrary(r'''
-class A {
-  int get foo => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          synthetic foo @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          get foo @20
-            returnType: int
-''');
-  }
-
-  test_nameOffset_class_method() async {
-    var library = await checkLibrary(r'''
-class A {
-  void foo<T>(int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          foo @17
-            typeParameters
-              covariant T @21
-            parameters
-              requiredPositional a @28
-                type: int
-            returnType: void
-''');
-  }
-
-  test_nameOffset_class_setter() async {
-    var library = await checkLibrary(r'''
-class A {
-  set foo(int x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        fields
-          synthetic foo @-1
-            type: int
-        constructors
-          synthetic @-1
-        accessors
-          set foo @16
-            parameters
-              requiredPositional x @24
-                type: int
-            returnType: void
-''');
-  }
-
-  test_nameOffset_class_typeParameter() async {
-    var library = await checkLibrary(r'''
-class A<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_nameOffset_extension_typeParameter() async {
-    var library = await checkLibrary(r'''
-extension E<T> on int {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      E @10
-        typeParameters
-          covariant T @12
-        extendedType: int
-''');
-  }
-
-  test_nameOffset_function_functionTypedFormal_parameter() async {
-    var library = await checkLibrary(r'''
-void f(void f<U>(int a)) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional f @12
-            type: void Function<U>(int)
-            typeParameters
-              covariant U @14
-            parameters
-              requiredPositional a @21
-                type: int
-        returnType: void
-''');
-  }
-
-  test_nameOffset_function_functionTypedFormal_parameter2() async {
-    var library = await checkLibrary(r'''
-void f({required void f<U>(int a)}) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredNamed f @22
-            type: void Function<U>(int)
-            typeParameters
-              covariant U @24
-            parameters
-              requiredPositional a @31
-                type: int
-        returnType: void
-''');
-  }
-
-  test_nameOffset_function_typeParameter() async {
-    var library = await checkLibrary(r'''
-void f<T>() {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-        returnType: void
-''');
-  }
-
-  test_nameOffset_functionTypeAlias_typeParameter() async {
-    var library = await checkLibrary(r'''
-typedef void F<T>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        typeParameters
-          unrelated T @15
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_nameOffset_genericTypeAlias_typeParameter() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          unrelated T @10
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_nameOffset_mixin_typeParameter() async {
-    var library = await checkLibrary(r'''
-mixin M<T> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_nameOffset_unit_getter() async {
-    var library = await checkLibrary(r'''
-int get foo => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: int
-    accessors
-      static get foo @8
-        returnType: int
-''');
-  }
-
-  test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  void g<V, W>() {
-    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          g @23
-            typeParameters
-              covariant V @25
-              covariant W @28
-            returnType: void
-''');
-  }
-
-  test_nested_generic_functions_in_generic_class_with_local_variables() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  void g<V, W>() {
-    void h<X, Y>() {
-      T t;
-      U u;
-      V v;
-      W w;
-      X x;
-      Y y;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          g @23
-            typeParameters
-              covariant V @25
-              covariant W @28
-            returnType: void
-''');
-  }
-
-  test_nested_generic_functions_with_function_typed_param() async {
-    var library = await checkLibrary('''
-void f<T, U>() {
-  void g<V, W>() {
-    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-          covariant U @10
-        returnType: void
-''');
-  }
-
-  test_nested_generic_functions_with_local_variables() async {
-    var library = await checkLibrary('''
-void f<T, U>() {
-  void g<V, W>() {
-    void h<X, Y>() {
-      T t;
-      U u;
-      V v;
-      W w;
-      X x;
-      Y y;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-          covariant U @10
-        returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_functionType_returnType() async {
-    var library = await checkLibrary('''
-typedef F = G Function();
-typedef G = F Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-      notSimplyBounded G @34
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_functionType_returnType_viaInterfaceType() async {
-    var library = await checkLibrary('''
-typedef F = List<F> Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: List<dynamic> Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: List<dynamic>
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_self() async {
-    var library = await checkLibrary('''
-typedef F<T extends F> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        typeParameters
-          unrelated T @10
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_simple_no_bounds() async {
-    var library = await checkLibrary('''
-typedef F<T> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          unrelated T @10
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_simple_non_generic() async {
-    var library = await checkLibrary('''
-typedef F = void Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_new_typedef_nonFunction_notSimplyBounded_self() async {
-    var library = await checkLibrary('''
-typedef F<T extends F> = List<int>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        typeParameters
-          unrelated T @10
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: List<int>
-''');
-  }
-
-  test_new_typedef_nonFunction_notSimplyBounded_viaInterfaceType() async {
-    var library = await checkLibrary('''
-typedef F = List<F>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: List<dynamic>
-''');
-  }
-
-  test_nonSynthetic_class_field() async {
-    var library = await checkLibrary(r'''
-class C {
-  int foo = 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          foo @16
-            type: int
-            nonSynthetic: self::@class::C::@field::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@class::C
-        accessors
-          synthetic get foo @-1
-            returnType: int
-            nonSynthetic: self::@class::C::@field::foo
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-                nonSynthetic: self::@class::C::@field::foo
-            returnType: void
-            nonSynthetic: self::@class::C::@field::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_class_getter() async {
-    var library = await checkLibrary(r'''
-class C {
-  int get foo => 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@class::C::@getter::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@class::C
-        accessors
-          get foo @20
-            returnType: int
-            nonSynthetic: self::@class::C::@getter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_class_setter() async {
-    var library = await checkLibrary(r'''
-class C {
-  set foo(int value) {}
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@class::C::@setter::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@class::C
-        accessors
-          set foo @16
-            parameters
-              requiredPositional value @24
-                type: int
-                nonSynthetic: value@24
-            returnType: void
-            nonSynthetic: self::@class::C::@setter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_enum() async {
-    var library = await checkLibrary(r'''
-enum E {
-  a, b
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant a @11
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-            nonSynthetic: self::@enum::E::@field::a
-          static const enumConstant b @14
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-            nonSynthetic: self::@enum::E::@field::b
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: a @-1
-                    staticElement: self::@enum::E::@getter::a
-                    staticType: E
-                  SimpleIdentifier
-                    token: b @-1
-                    staticElement: self::@enum::E::@getter::b
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-            nonSynthetic: self::@enum::E
-        constructors
-          synthetic const @-1
-            nonSynthetic: self::@enum::E
-        accessors
-          synthetic static get a @-1
-            returnType: E
-            nonSynthetic: self::@enum::E::@field::a
-          synthetic static get b @-1
-            returnType: E
-            nonSynthetic: self::@enum::E::@field::b
-          synthetic static get values @-1
-            returnType: List<E>
-            nonSynthetic: self::@enum::E
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_extension_getter() async {
-    var library = await checkLibrary(r'''
-extension E on int {
-  int get foo => 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    extensions
-      E @10
-        extendedType: int
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@extension::E::@getter::foo
-        accessors
-          get foo @31
-            returnType: int
-            nonSynthetic: self::@extension::E::@getter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_extension_setter() async {
-    var library = await checkLibrary(r'''
-extension E on int {
-  set foo(int value) {}
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    extensions
-      E @10
-        extendedType: int
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@extension::E::@setter::foo
-        accessors
-          set foo @27
-            parameters
-              requiredPositional value @35
-                type: int
-                nonSynthetic: value@35
-            returnType: void
-            nonSynthetic: self::@extension::E::@setter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_mixin_field() async {
-    var library = await checkLibrary(r'''
-mixin M {
-  int foo = 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        fields
-          foo @16
-            type: int
-            nonSynthetic: self::@mixin::M::@field::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@mixin::M
-        accessors
-          synthetic get foo @-1
-            returnType: int
-            nonSynthetic: self::@mixin::M::@field::foo
-          synthetic set foo @-1
-            parameters
-              requiredPositional _foo @-1
-                type: int
-                nonSynthetic: self::@mixin::M::@field::foo
-            returnType: void
-            nonSynthetic: self::@mixin::M::@field::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_mixin_getter() async {
-    var library = await checkLibrary(r'''
-mixin M {
-  int get foo => 0;
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@mixin::M::@getter::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@mixin::M
-        accessors
-          get foo @20
-            returnType: int
-            nonSynthetic: self::@mixin::M::@getter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_mixin_setter() async {
-    var library = await checkLibrary(r'''
-mixin M {
-  set foo(int value) {}
-}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    mixins
-      mixin M @6
-        superclassConstraints
-          Object
-        fields
-          synthetic foo @-1
-            type: int
-            nonSynthetic: self::@mixin::M::@setter::foo
-        constructors
-          synthetic @-1
-            nonSynthetic: self::@mixin::M
-        accessors
-          set foo @16
-            parameters
-              requiredPositional value @24
-                type: int
-                nonSynthetic: value@24
-            returnType: void
-            nonSynthetic: self::@mixin::M::@setter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_unit_getter() async {
-    var library = await checkLibrary(r'''
-int get foo => 0;
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: int
-        nonSynthetic: self::@getter::foo
-    accessors
-      static get foo @8
-        returnType: int
-        nonSynthetic: self::@getter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_unit_getterSetter() async {
-    var library = await checkLibrary(r'''
-int get foo => 0;
-set foo(int value) {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: int
-        nonSynthetic: self::@getter::foo
-    accessors
-      static get foo @8
-        returnType: int
-        nonSynthetic: self::@getter::foo
-      static set foo @22
-        parameters
-          requiredPositional value @30
-            type: int
-            nonSynthetic: value@30
-        returnType: void
-        nonSynthetic: self::@setter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_unit_setter() async {
-    var library = await checkLibrary(r'''
-set foo(int value) {}
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static foo @-1
-        type: int
-        nonSynthetic: self::@setter::foo
-    accessors
-      static set foo @4
-        parameters
-          requiredPositional value @12
-            type: int
-            nonSynthetic: value@12
-        returnType: void
-        nonSynthetic: self::@setter::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_nonSynthetic_unit_variable() async {
-    var library = await checkLibrary(r'''
-int foo = 0;
-''');
-    checkElementText(
-        library,
-        r'''
-library
-  definingUnit
-    topLevelVariables
-      static foo @4
-        type: int
-        nonSynthetic: self::@variable::foo
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-        nonSynthetic: self::@variable::foo
-      synthetic static set foo @-1
-        parameters
-          requiredPositional _foo @-1
-            type: int
-            nonSynthetic: self::@variable::foo
-        returnType: void
-        nonSynthetic: self::@variable::foo
-''',
-        withNonSynthetic: true);
-  }
-
-  test_parameter() async {
-    var library = await checkLibrary('void main(int p) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      main @5
-        parameters
-          requiredPositional p @14
-            type: int
-        returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_named() async {
-    var library = await checkLibrary('''
-class A {
-  void m({covariant A a}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          m @17
-            parameters
-              optionalNamed covariant a @32
-                type: A
-            returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_positional() async {
-    var library = await checkLibrary('''
-class A {
-  void m([covariant A a]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          m @17
-            parameters
-              optionalPositional covariant a @32
-                type: A
-            returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_required() async {
-    var library = await checkLibrary('''
-class A {
-  void m(covariant A a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          m @17
-            parameters
-              requiredPositional covariant a @31
-                type: A
-            returnType: void
-''');
-  }
-
-  test_parameter_covariant_inherited() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  void f(covariant T t) {}
-}
-class B<T> extends A<T> {
-  void f(T t) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          f @20
-            parameters
-              requiredPositional covariant t @34
-                type: T
-            returnType: void
-      class B @48
-        typeParameters
-          covariant T @50
-            defaultType: dynamic
-        supertype: A<T>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: T}
-        methods
-          f @75
-            parameters
-              requiredPositional covariant t @79
-                type: T
-            returnType: void
-''');
-  }
-
-  test_parameter_covariant_inherited_named() async {
-    var library = await checkLibrary('''
-class A {
-  void m({covariant A a}) {}
-}
-class B extends A {
-  void m({B a}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-        methods
-          m @17
-            parameters
-              optionalNamed covariant a @32
-                type: A
-            returnType: void
-      class B @47
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-        methods
-          m @68
-            parameters
-              optionalNamed covariant a @73
-                type: B
-            returnType: void
-''');
-  }
-
-  test_parameter_parameters() async {
-    var library = await checkLibrary('class C { f(g(x, y)) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @10
-            parameters
-              requiredPositional g @12
-                type: dynamic Function(dynamic, dynamic)
-                parameters
-                  requiredPositional x @14
-                    type: dynamic
-                  requiredPositional y @17
-                    type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_parameter_parameters_in_generic_class() async {
-    var library = await checkLibrary('class C<A, B> { f(A g(B x)) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant A @8
-            defaultType: dynamic
-          covariant B @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          f @16
-            parameters
-              requiredPositional g @20
-                type: A Function(B)
-                parameters
-                  requiredPositional x @24
-                    type: B
-            returnType: dynamic
-''');
-  }
-
-  test_parameter_return_type() async {
-    var library = await checkLibrary('class C { f(int g()) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @10
-            parameters
-              requiredPositional g @16
-                type: int Function()
-            returnType: dynamic
-''');
-  }
-
-  test_parameter_return_type_void() async {
-    var library = await checkLibrary('class C { f(void g()) {} }');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          f @10
-            parameters
-              requiredPositional g @17
-                type: void Function()
-            returnType: dynamic
-''');
-  }
-
-  test_parameter_typeParameters() async {
-    var library = await checkLibrary(r'''
-void f(T a<T, U>(U u)) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        parameters
-          requiredPositional a @9
-            type: T Function<T, U>(U)
-            typeParameters
-              covariant T @11
-              covariant U @14
-            parameters
-              requiredPositional u @19
-                type: U
-        returnType: void
-''');
-  }
-
-  test_parameterTypeNotInferred_constructor() async {
-    // Strong mode doesn't do type inference on constructor parameters, so it's
-    // ok that we don't store inferred type info for them in summaries.
-    var library = await checkLibrary('''
-class C {
-  C.positional([x = 1]);
-  C.named({x: 1});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          positional @14
-            periodOffset: 13
-            nameEnd: 24
-            parameters
-              optionalPositional x @26
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @30
-                    staticType: int
-          named @39
-            periodOffset: 38
-            nameEnd: 44
-            parameters
-              optionalNamed x @46
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @49
-                    staticType: int
-''');
-  }
-
-  test_parameterTypeNotInferred_initializingFormal() async {
-    // Strong mode doesn't do type inference on initializing formals, so it's
-    // ok that we don't store inferred type info for them in summaries.
-    var library = await checkLibrary('''
-class C {
-  var x;
-  C.positional([this.x = 1]);
-  C.named({this.x: 1});
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        fields
-          x @16
-            type: dynamic
-        constructors
-          positional @23
-            periodOffset: 22
-            nameEnd: 33
-            parameters
-              optionalPositional final this.x @40
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @44
-                    staticType: int
-                field: self::@class::C::@field::x
-          named @53
-            periodOffset: 52
-            nameEnd: 58
-            parameters
-              optionalNamed final this.x @65
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @68
-                    staticType: int
-                field: self::@class::C::@field::x
-        accessors
-          synthetic get x @-1
-            returnType: dynamic
-          synthetic set x @-1
-            parameters
-              requiredPositional _x @-1
-                type: dynamic
-            returnType: void
-''');
-  }
-
-  test_parameterTypeNotInferred_staticMethod() async {
-    // Strong mode doesn't do type inference on parameters of static methods,
-    // so it's ok that we don't store inferred type info for them in summaries.
-    var library = await checkLibrary('''
-class C {
-  static void positional([x = 1]) {}
-  static void named({x: 1}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-        methods
-          static positional @24
-            parameters
-              optionalPositional x @36
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @40
-                    staticType: int
-            returnType: void
-          static named @61
-            parameters
-              optionalNamed x @68
-                type: dynamic
-                constantInitializer
-                  IntegerLiteral
-                    literal: 1 @71
-                    staticType: int
-            returnType: void
-''');
-  }
-
-  test_parameterTypeNotInferred_topLevelFunction() async {
-    // Strong mode doesn't do type inference on parameters of top level
-    // functions, so it's ok that we don't store inferred type info for them in
-    // summaries.
-    var library = await checkLibrary('''
-void positional([x = 1]) {}
-void named({x: 1}) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      positional @5
-        parameters
-          optionalPositional x @17
-            type: dynamic
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @21
-                staticType: int
-        returnType: void
-      named @33
-        parameters
-          optionalNamed x @40
-            type: dynamic
-            constantInitializer
-              IntegerLiteral
-                literal: 1 @43
-                staticType: int
-        returnType: void
-''');
-  }
-
-  test_part_emptyUri() async {
-    var library = await checkLibrary(r'''
-part '';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class B @15
-        constructors
-          synthetic @-1
-  parts
-
-      classes
-        class B @15
-          constructors
-            synthetic @-1
-''');
-  }
-
-  test_part_uri() async {
-    var library = await checkLibrary('''
-part 'foo.dart';
-''');
-    expect(library.parts[0].uri, 'foo.dart');
-  }
-
-  test_parts() async {
-    addSource('/a.dart', 'part of my.lib;');
-    addSource('/b.dart', 'part of my.lib;');
-    var library =
-        await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-    b.dart
-''');
-  }
-
-  test_parts_invalidUri() async {
-    addSource('/foo/bar.dart', 'part of my.lib;');
-    var library = await checkLibrary('library my.lib; part "foo/";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-  parts
-    foo/
-''');
-  }
-
-  test_parts_invalidUri_nullStringValue() async {
-    addSource('/foo/bar.dart', 'part of my.lib;');
-    var library = await checkLibrary(r'''
-library my.lib;
-part "${foo}/bar.dart";
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-''');
-  }
-
-  test_propagated_type_refers_to_closure() async {
-    var library = await checkLibrary('''
-void f() {
-  var x = () => 0;
-  var y = x;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        returnType: void
-''');
-  }
-
-  test_setter_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-void set x(value) {}''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: dynamic
-    accessors
-      static set x @69
-        documentationComment: /**\n * Docs\n */
-        parameters
-          requiredPositional value @71
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_setter_external() async {
-    var library = await checkLibrary('external void set x(int value);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static external set x @18
-        parameters
-          requiredPositional value @24
-            type: int
-        returnType: void
-''');
-  }
-
-  test_setter_inferred_type_top_level_implicit_return() async {
-    var library = await checkLibrary('set f(int value) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static f @-1
-        type: int
-    accessors
-      static set f @4
-        parameters
-          requiredPositional value @10
-            type: int
-        returnType: void
-''');
-  }
-
-  test_setters() async {
-    var library =
-        await checkLibrary('void set x(int value) {} set y(value) {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-      synthetic static y @-1
-        type: dynamic
-    accessors
-      static set x @9
-        parameters
-          requiredPositional value @15
-            type: int
-        returnType: void
-      static set y @29
-        parameters
-          requiredPositional value @31
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_syntheticFunctionType_genericClosure() async {
-    var library = await checkLibrary('''
-final v = f() ? <T>(T t) => 0 : <T>(T t) => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final v @6
-        type: int Function<T>(T)
-    accessors
-      synthetic static get v @-1
-        returnType: int Function<T>(T)
-    functions
-      f @52
-        returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_genericClosure_inGenericFunction() async {
-    var library = await checkLibrary('''
-void f<T, U>(bool b) {
-  final v = b ? <V>(T t, U u, V v) => 0 : <V>(T t, U u, V v) => 1;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-          covariant U @10
-        parameters
-          requiredPositional b @18
-            type: bool
-        returnType: void
-''');
-  }
-
-  test_syntheticFunctionType_inGenericClass() async {
-    var library = await checkLibrary('''
-class C<T, U> {
-  var v = f() ? (T t, U u) => 0 : (T t, U u) => 1;
-}
-bool f() => false;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        fields
-          v @22
-            type: int Function(T, U)
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get v @-1
-            returnType: int Function(T, U)
-          synthetic set v @-1
-            parameters
-              requiredPositional _v @-1
-                type: int Function(T, U)
-            returnType: void
-    functions
-      f @74
-        returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_inGenericFunction() async {
-    var library = await checkLibrary('''
-void f<T, U>(bool b) {
-  var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @5
-        typeParameters
-          covariant T @7
-          covariant U @10
-        parameters
-          requiredPositional b @18
-            type: bool
-        returnType: void
-''');
-  }
-
-  test_syntheticFunctionType_noArguments() async {
-    var library = await checkLibrary('''
-final v = f() ? () => 0 : () => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final v @6
-        type: int Function()
-    accessors
-      synthetic static get v @-1
-        returnType: int Function()
-    functions
-      f @40
-        returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_withArguments() async {
-    var library = await checkLibrary('''
-final v = f() ? (int x, String y) => 0 : (int x, String y) => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final v @6
-        type: int Function(int, String)
-    accessors
-      synthetic static get v @-1
-        returnType: int Function(int, String)
-    functions
-      f @70
-        returnType: bool
-''');
-  }
-
-  test_top_level_variable_external() async {
-    var library = await checkLibrary('''
-external int i;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static i @13
-        type: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-      synthetic static set i @-1
-        parameters
-          requiredPositional _i @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_dynamic_dynamic() async {
-    var library = await checkLibrary('Map<dynamic, dynamic> m;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static m @22
-        type: Map<dynamic, dynamic>
-    accessors
-      synthetic static get m @-1
-        returnType: Map<dynamic, dynamic>
-      synthetic static set m @-1
-        parameters
-          requiredPositional _m @-1
-            type: Map<dynamic, dynamic>
-        returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_dynamic_int() async {
-    var library = await checkLibrary('Map<dynamic, int> m;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static m @18
-        type: Map<dynamic, int>
-    accessors
-      synthetic static get m @-1
-        returnType: Map<dynamic, int>
-      synthetic static set m @-1
-        parameters
-          requiredPositional _m @-1
-            type: Map<dynamic, int>
-        returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_String_dynamic() async {
-    var library = await checkLibrary('Map<String, dynamic> m;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static m @21
-        type: Map<String, dynamic>
-    accessors
-      synthetic static get m @-1
-        returnType: Map<String, dynamic>
-      synthetic static set m @-1
-        parameters
-          requiredPositional _m @-1
-            type: Map<String, dynamic>
-        returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_String_int() async {
-    var library = await checkLibrary('Map<String, int> m;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static m @17
-        type: Map<String, int>
-    accessors
-      synthetic static get m @-1
-        returnType: Map<String, int>
-      synthetic static set m @-1
-        parameters
-          requiredPositional _m @-1
-            type: Map<String, int>
-        returnType: void
-''');
-  }
-
-  test_type_arguments_implicit() async {
-    var library = await checkLibrary('Map m;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static m @4
-        type: Map<dynamic, dynamic>
-    accessors
-      synthetic static get m @-1
-        returnType: Map<dynamic, dynamic>
-      synthetic static set m @-1
-        parameters
-          requiredPositional _m @-1
-            type: Map<dynamic, dynamic>
-        returnType: void
-''');
-  }
-
-  test_type_dynamic() async {
-    var library = await checkLibrary('dynamic d;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static d @8
-        type: dynamic
-    accessors
-      synthetic static get d @-1
-        returnType: dynamic
-      synthetic static set d @-1
-        parameters
-          requiredPositional _d @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_type_inference_assignmentExpression_references_onTopLevelVariable() async {
-    var library = await checkLibrary('''
-var a = () {
-  b += 0;
-  return 0;
-};
-var b = 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static a @4
-        type: int Function()
-      static b @42
-        type: int
-    accessors
-      synthetic static get a @-1
-        returnType: int Function()
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: int Function()
-        returnType: void
-      synthetic static get b @-1
-        returnType: int
-      synthetic static set b @-1
-        parameters
-          requiredPositional _b @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_type_inference_based_on_loadLibrary() async {
-    addLibrarySource('/a.dart', '');
-    var library = await checkLibrary('''
-import 'a.dart' deferred as a;
-var x = a.loadLibrary;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart deferred as a @28
-  definingUnit
-    topLevelVariables
-      static x @35
-        type: Future<dynamic> Function()
-    accessors
-      synthetic static get x @-1
-        returnType: Future<dynamic> Function()
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: Future<dynamic> Function()
-        returnType: void
-''');
-  }
-
-  test_type_inference_classField_fromNullSafe_toLegacy() async {
-    testFile = convertPath('/home/test/lib/test.dart');
-    addLibrarySource('/home/test/lib/a.dart', '''
-class E {
-  static final a = 0;
-}
-''');
-    var library = await checkLibrary('''
-// @dart = 2.9
-import 'a.dart';
-final v = E.a;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    package:test/a.dart
-  definingUnit
-    topLevelVariables
-      static final v @38
-        type: int*
-    accessors
-      synthetic static get v @-1
-        returnType: int*
-''');
-  }
-
-  test_type_inference_closure_with_function_typed_parameter() async {
-    var library = await checkLibrary('''
-var x = (int f(String x)) => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: int Function(int Function(String))
-    accessors
-      synthetic static get x @-1
-        returnType: int Function(int Function(String))
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int Function(int Function(String))
-        returnType: void
-''');
-  }
-
-  test_type_inference_closure_with_function_typed_parameter_new() async {
-    var library = await checkLibrary('''
-var x = (int Function(String) f) => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: int Function(int Function(String))
-    accessors
-      synthetic static get x @-1
-        returnType: int Function(int Function(String))
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int Function(int Function(String))
-        returnType: void
-''');
-  }
-
-  test_type_inference_depends_on_exported_variable() async {
-    addLibrarySource('/a.dart', 'export "b.dart";');
-    addLibrarySource('/b.dart', 'var x = 0;');
-    var library = await checkLibrary('''
-import 'a.dart';
-var y = x;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static y @21
-        type: int
-    accessors
-      synthetic static get y @-1
-        returnType: int
-      synthetic static set y @-1
-        parameters
-          requiredPositional _y @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_type_inference_field_depends_onFieldFormal() async {
-    var library = await checkLibrary('''
-class A<T> {
-  T value;
-
-  A(this.value);
-}
-
-class B {
-  var a = new A('');
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          value @17
-            type: T
-        constructors
-          @27
-            parameters
-              requiredPositional final this.value @34
-                type: T
-                field: self::@class::A::@field::value
-        accessors
-          synthetic get value @-1
-            returnType: T
-          synthetic set value @-1
-            parameters
-              requiredPositional _value @-1
-                type: T
-            returnType: void
-      class B @51
-        fields
-          a @61
-            type: A<String>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get a @-1
-            returnType: A<String>
-          synthetic set a @-1
-            parameters
-              requiredPositional _a @-1
-                type: A<String>
-            returnType: void
-''');
-  }
-
-  test_type_inference_field_depends_onFieldFormal_withMixinApp() async {
-    var library = await checkLibrary('''
-class A<T> {
-  T value;
-
-  A(this.value);
-}
-
-class B<T> = A<T> with M;
-
-class C {
-  var a = new B(42);
-}
-
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          value @17
-            type: T
-        constructors
-          @27
-            parameters
-              requiredPositional final this.value @34
-                type: T
-                field: self::@class::A::@field::value
-        accessors
-          synthetic get value @-1
-            returnType: T
-          synthetic set value @-1
-            parameters
-              requiredPositional _value @-1
-                type: T
-            returnType: void
-      class alias B @51
-        typeParameters
-          covariant T @53
-            defaultType: dynamic
-        supertype: A<T>
-        mixins
-          M
-        constructors
-          synthetic @-1
-            parameters
-              requiredPositional final value @-1
-                type: T
-            constantInitializers
-              SuperConstructorInvocation
-                superKeyword: super @0
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  arguments
-                    SimpleIdentifier
-                      token: value @-1
-                      staticElement: value@-1
-                      staticType: T
-                  rightParenthesis: ) @0
-                staticElement: self::@class::A::@constructor::•
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: T}
-      class C @78
-        fields
-          a @88
-            type: B<int>
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get a @-1
-            returnType: B<int>
-          synthetic set a @-1
-            parameters
-              requiredPositional _a @-1
-                type: B<int>
-            returnType: void
-    mixins
-      mixin M @112
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_type_inference_fieldFormal_depends_onField() async {
-    var library = await checkLibrary('''
-class A<T> {
-  var f = 0;
-  A(this.f);
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          f @19
-            type: int
-        constructors
-          @28
-            parameters
-              requiredPositional final this.f @35
-                type: int
-                field: self::@class::A::@field::f
-        accessors
-          synthetic get f @-1
-            returnType: int
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: int
-            returnType: void
-''');
-  }
-
-  test_type_inference_instanceCreation_notGeneric() async {
-    var library = await checkLibrary('''
-class A {
-  A(_);
-}
-var a = A(() => b);
-var b = A(() => a);
-''');
-    // There is no cycle with `a` and `b`, because `A` is not generic,
-    // so the type of `new A(...)` does not depend on its arguments.
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          @12
-            parameters
-              requiredPositional _ @14
-                type: dynamic
-    topLevelVariables
-      static a @24
-        type: A
-      static b @44
-        type: A
-    accessors
-      synthetic static get a @-1
-        returnType: A
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: A
-        returnType: void
-      synthetic static get b @-1
-        returnType: A
-      synthetic static set b @-1
-        parameters
-          requiredPositional _b @-1
-            type: A
-        returnType: void
-''');
-  }
-
-  test_type_inference_multiplyDefinedElement() async {
-    addLibrarySource('/a.dart', 'class C {}');
-    addLibrarySource('/b.dart', 'class C {}');
-    var library = await checkLibrary('''
-import 'a.dart';
-import 'b.dart';
-var v = C;
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-    b.dart
-  definingUnit
-    topLevelVariables
-      static v @38
-        type: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_type_inference_nested_function() async {
-    var library = await checkLibrary('''
-var x = (t) => (u) => t + u;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: dynamic Function(dynamic) Function(dynamic)
-    accessors
-      synthetic static get x @-1
-        returnType: dynamic Function(dynamic) Function(dynamic)
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: dynamic Function(dynamic) Function(dynamic)
-        returnType: void
-''');
-  }
-
-  test_type_inference_nested_function_with_parameter_types() async {
-    var library = await checkLibrary('''
-var x = (int t) => (int u) => t + u;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: int Function(int) Function(int)
-    accessors
-      synthetic static get x @-1
-        returnType: int Function(int) Function(int)
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int Function(int) Function(int)
-        returnType: void
-''');
-  }
-
-  test_type_inference_of_closure_with_default_value() async {
-    var library = await checkLibrary('''
-var x = ([y: 0]) => y;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: dynamic Function([dynamic])
-    accessors
-      synthetic static get x @-1
-        returnType: dynamic Function([dynamic])
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: dynamic Function([dynamic])
-        returnType: void
-''');
-  }
-
-  test_type_inference_topVariable_depends_onFieldFormal() async {
-    var library = await checkLibrary('''
-class A {}
-
-class B extends A {}
-
-class C<T extends A> {
-  final T f;
-  const C(this.f);
-}
-
-final b = B();
-final c = C(b);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-      class B @18
-        supertype: A
-        constructors
-          synthetic @-1
-            superConstructor: self::@class::A::@constructor::•
-      class C @40
-        typeParameters
-          covariant T @42
-            bound: A
-            defaultType: A
-        fields
-          final f @67
-            type: T
-        constructors
-          const @78
-            parameters
-              requiredPositional final this.f @85
-                type: T
-                field: self::@class::C::@field::f
-        accessors
-          synthetic get f @-1
-            returnType: T
-    topLevelVariables
-      static final b @98
-        type: B
-      static final c @113
-        type: C<B>
-    accessors
-      synthetic static get b @-1
-        returnType: B
-      synthetic static get c @-1
-        returnType: C<B>
-''');
-  }
-
-  test_type_inference_using_extension_getter() async {
-    var library = await checkLibrary('''
-extension on String {
-  int get foo => 0;
-}
-var v = 'a'.foo;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    extensions
-      @-1
-        extendedType: String
-        fields
-          synthetic foo @-1
-            type: int
-        accessors
-          get foo @32
-            returnType: int
-    topLevelVariables
-      static v @48
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_type_invalid_topLevelVariableElement_asType() async {
-    var library = await checkLibrary('''
-class C<T extends V> {}
-typedef V F(V p);
-V f(V p) {}
-V V2 = null;
-int V = 0;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            bound: dynamic
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased F @34
-        aliasedType: dynamic Function(dynamic)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional p @38
-              type: dynamic
-          returnType: dynamic
-    topLevelVariables
-      static V2 @56
-        type: dynamic
-      static V @71
-        type: int
-    accessors
-      synthetic static get V2 @-1
-        returnType: dynamic
-      synthetic static set V2 @-1
-        parameters
-          requiredPositional _V2 @-1
-            type: dynamic
-        returnType: void
-      synthetic static get V @-1
-        returnType: int
-      synthetic static set V @-1
-        parameters
-          requiredPositional _V @-1
-            type: int
-        returnType: void
-    functions
-      f @44
-        parameters
-          requiredPositional p @48
-            type: dynamic
-        returnType: dynamic
-''');
-  }
-
-  test_type_invalid_topLevelVariableElement_asTypeArgument() async {
-    var library = await checkLibrary('''
-var V;
-static List<V> V2;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static V @4
-        type: dynamic
-      static V2 @22
-        type: List<dynamic>
-    accessors
-      synthetic static get V @-1
-        returnType: dynamic
-      synthetic static set V @-1
-        parameters
-          requiredPositional _V @-1
-            type: dynamic
-        returnType: void
-      synthetic static get V2 @-1
-        returnType: List<dynamic>
-      synthetic static set V2 @-1
-        parameters
-          requiredPositional _V2 @-1
-            type: List<dynamic>
-        returnType: void
-''');
-  }
-
-  test_type_invalid_typeParameter_asPrefix() async {
-    var library = await checkLibrary('''
-class C<T> {
-  m(T.K p) {}
-}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          m @15
-            parameters
-              requiredPositional p @21
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_type_invalid_unresolvedPrefix() async {
-    var library = await checkLibrary('''
-p.C v;
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: dynamic
-    accessors
-      synthetic static get v @-1
-        returnType: dynamic
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_type_never_disableNnbd() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('Never d;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static d @6
-        type: Null*
-    accessors
-      synthetic static get d @-1
-        returnType: Null*
-      synthetic static set d @-1
-        parameters
-          requiredPositional _d @-1
-            type: Null*
-        returnType: void
-''');
-  }
-
-  test_type_never_enableNnbd() async {
-    var library = await checkLibrary('Never d;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static d @6
-        type: Never
-    accessors
-      synthetic static get d @-1
-        returnType: Never
-      synthetic static set d @-1
-        parameters
-          requiredPositional _d @-1
-            type: Never
-        returnType: void
-''');
-  }
-
-  test_type_param_ref_nullability_none() async {
-    var library = await checkLibrary('''
-class C<T> {
-  T t;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          t @17
-            type: T
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get t @-1
-            returnType: T
-          synthetic set t @-1
-            parameters
-              requiredPositional _t @-1
-                type: T
-            returnType: void
-''');
-  }
-
-  test_type_param_ref_nullability_question() async {
-    var library = await checkLibrary('''
-class C<T> {
-  T? t;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          t @18
-            type: T?
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get t @-1
-            returnType: T?
-          synthetic set t @-1
-            parameters
-              requiredPositional _t @-1
-                type: T?
-            returnType: void
-''');
-  }
-
-  test_type_param_ref_nullability_star() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('''
-class C<T> {
-  T t;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        fields
-          t @17
-            type: T*
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get t @-1
-            returnType: T*
-          synthetic set t @-1
-            parameters
-              requiredPositional _t @-1
-                type: T*
-            returnType: void
-''');
-  }
-
-  test_type_reference_lib_to_lib() async {
-    var library = await checkLibrary('''
-class C {}
-enum E { v }
-typedef F();
-C c;
-E e;
-F f;''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    enums
-      enum E @16
-        supertype: Enum
-        fields
-          static const enumConstant v @20
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    typeAliases
-      functionTypeAliasBased F @32
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-    topLevelVariables
-      static c @39
-        type: C
-      static e @44
-        type: E
-      static f @49
-        type: dynamic Function()
-          aliasElement: self::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_lib_to_part() async {
-    addSource('/a.dart', 'part of l; class C {} enum E { v } typedef F();');
-    var library =
-        await checkLibrary('library l; part "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      static c @28
-        type: C
-      static e @33
-        type: E
-      static f @38
-        type: dynamic Function()
-          aliasElement: self::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-        returnType: void
-  parts
-    a.dart
-      classes
-        class C @17
-          constructors
-            synthetic @-1
-      enums
-        enum E @27
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              type: E
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: E @-1
-                        staticElement: self::@enum::E
-                        staticType: null
-                      type: E
-                    staticElement: self::@enum::E::@constructor::•
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: self::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-          accessors
-            synthetic static get v @-1
-              returnType: E
-            synthetic static get values @-1
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_type_reference_part_to_lib() async {
-    addSource('/a.dart', 'part of l; C c; E e; F f;');
-    var library = await checkLibrary(
-        'library l; part "a.dart"; class C {} enum E { v } typedef F();');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  definingUnit
-    classes
-      class C @32
-        constructors
-          synthetic @-1
-    enums
-      enum E @42
-        supertype: Enum
-        fields
-          static const enumConstant v @46
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    typeAliases
-      functionTypeAliasBased F @58
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-  parts
-    a.dart
-      topLevelVariables
-        static c @13
-          type: C
-        static e @18
-          type: E
-        static f @23
-          type: dynamic Function()
-            aliasElement: self::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          returnType: C
-        synthetic static set c @-1
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          returnType: E
-        synthetic static set e @-1
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
-        synthetic static set f @-1
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                aliasElement: self::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_part_to_other_part() async {
-    addSource('/a.dart', 'part of l; class C {} enum E { v } typedef F();');
-    addSource('/b.dart', 'part of l; C c; E e; F f;');
-    var library =
-        await checkLibrary('library l; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      classes
-        class C @17
-          constructors
-            synthetic @-1
-      enums
-        enum E @27
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              type: E
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: E @-1
-                        staticElement: self::@enum::E
-                        staticType: null
-                      type: E
-                    staticElement: self::@enum::E::@constructor::•
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: self::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-          accessors
-            synthetic static get v @-1
-              returnType: E
-            synthetic static get values @-1
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-    b.dart
-      topLevelVariables
-        static c @13
-          type: C
-        static e @18
-          type: E
-        static f @23
-          type: dynamic Function()
-            aliasElement: self::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          returnType: C
-        synthetic static set c @-1
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          returnType: E
-        synthetic static set e @-1
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
-        synthetic static set f @-1
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                aliasElement: self::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_part_to_part() async {
-    addSource('/a.dart',
-        'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
-    var library = await checkLibrary('library l; part "a.dart";');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      classes
-        class C @17
-          constructors
-            synthetic @-1
-      enums
-        enum E @27
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              type: E
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: SimpleIdentifier
-                        token: E @-1
-                        staticElement: self::@enum::E
-                        staticType: null
-                      type: E
-                    staticElement: self::@enum::E::@constructor::•
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: self::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-          accessors
-            synthetic static get v @-1
-              returnType: E
-            synthetic static get values @-1
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static c @50
-          type: C
-        static e @55
-          type: E
-        static f @60
-          type: dynamic Function()
-            aliasElement: self::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          returnType: C
-        synthetic static set c @-1
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          returnType: E
-        synthetic static set e @-1
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          returnType: dynamic Function()
-            aliasElement: self::@typeAlias::F
-        synthetic static set f @-1
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                aliasElement: self::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_class() async {
-    var library = await checkLibrary('class C {} C c;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @13
-        type: C
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_class_with_type_arguments() async {
-    var library = await checkLibrary('class C<T, U> {} C<int, String> c;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @32
-        type: C<int, String>
-    accessors
-      synthetic static get c @-1
-        returnType: C<int, String>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<int, String>
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_class_with_type_arguments_implicit() async {
-    var library = await checkLibrary('class C<T, U> {} C c;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-          covariant U @11
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-    topLevelVariables
-      static c @19
-        type: C<dynamic, dynamic>
-    accessors
-      synthetic static get c @-1
-        returnType: C<dynamic, dynamic>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<dynamic, dynamic>
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_enum() async {
-    var library = await checkLibrary('enum E { v } E e;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    enums
-      enum E @5
-        supertype: Enum
-        fields
-          static const enumConstant v @9
-            type: E
-            constantInitializer
-              InstanceCreationExpression
-                constructorName: ConstructorName
-                  type: NamedType
-                    name: SimpleIdentifier
-                      token: E @-1
-                      staticElement: self::@enum::E
-                      staticType: null
-                    type: E
-                  staticElement: self::@enum::E::@constructor::•
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                staticType: E
-          synthetic static const values @-1
-            type: List<E>
-            constantInitializer
-              ListLiteral
-                leftBracket: [ @0
-                elements
-                  SimpleIdentifier
-                    token: v @-1
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E
-                rightBracket: ] @0
-                staticType: List<E>
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E
-          synthetic static get values @-1
-            returnType: List<E>
-    topLevelVariables
-      static e @15
-        type: E
-    accessors
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import() async {
-    addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @19
-        type: C
-      static e @24
-        type: E
-      static f @29
-        type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export() async {
-    addLibrarySource('/a.dart', 'export "b.dart";');
-    addLibrarySource('/b.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @19
-        type: C
-      static e @24
-        type: E
-      static f @29
-        type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_export() async {
-    addLibrarySource('/a.dart', 'export "b.dart";');
-    addLibrarySource('/b.dart', 'export "c.dart";');
-    addLibrarySource('/c.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @19
-        type: C
-      static e @24
-        type: E
-      static f @29
-        type: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: c.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_export_in_subdirs() async {
-    addLibrarySource('/a/a.dart', 'export "b/b.dart";');
-    addLibrarySource('/a/b/b.dart', 'export "../c/c.dart";');
-    addLibrarySource('/a/c/c.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @21
-        type: C
-      static e @26
-        type: E
-      static f @31
-        type: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: c.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: c.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_in_subdirs() async {
-    addLibrarySource('/a/a.dart', 'export "b/b.dart";');
-    addLibrarySource('/a/b/b.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @21
-        type: C
-      static e @26
-        type: E
-      static f @31
-        type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part() async {
-    addLibrarySource('/a.dart', 'library l; part "b.dart";');
-    addSource('/b.dart', 'part of l; class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @19
-        type: C
-      static e @24
-        type: E
-      static f @29
-        type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part2() async {
-    addLibrarySource('/a.dart', 'library l; part "p1.dart"; part "p2.dart";');
-    addSource('/p1.dart', 'part of l; class C1 {}');
-    addSource('/p2.dart', 'part of l; class C2 {}');
-    var library = await checkLibrary('import "a.dart"; C1 c1; C2 c2;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c1 @20
-        type: C1
-      static c2 @27
-        type: C2
-    accessors
-      synthetic static get c1 @-1
-        returnType: C1
-      synthetic static set c1 @-1
-        parameters
-          requiredPositional _c1 @-1
-            type: C1
-        returnType: void
-      synthetic static get c2 @-1
-        returnType: C2
-      synthetic static set c2 @-1
-        parameters
-          requiredPositional _c2 @-1
-            type: C2
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part_in_subdir() async {
-    addLibrarySource('/a/b.dart', 'library l; part "c.dart";');
-    addSource('/a/c.dart', 'part of l; class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a/b.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    b.dart
-  definingUnit
-    topLevelVariables
-      static c @21
-        type: C
-      static e @26
-        type: E
-      static f @31
-        type: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: b.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: b.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_import_relative() async {
-    addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
-    var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static c @19
-        type: C
-      static e @24
-        type: E
-      static f @29
-        type: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-    accessors
-      synthetic static get c @-1
-        returnType: C
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C
-        returnType: void
-      synthetic static get e @-1
-        returnType: E
-      synthetic static set e @-1
-        parameters
-          requiredPositional _e @-1
-            type: E
-        returnType: void
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: a.dart::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: a.dart::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef() async {
-    var library = await checkLibrary('typedef F(); F f;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-    topLevelVariables
-      static f @15
-        type: dynamic Function()
-          aliasElement: self::@typeAlias::F
-    accessors
-      synthetic static get f @-1
-        returnType: dynamic Function()
-          aliasElement: self::@typeAlias::F
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef_with_type_arguments() async {
-    var library =
-        await checkLibrary('typedef U F<T, U>(T t); F<int, String> f;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          contravariant T @12
-            defaultType: dynamic
-          covariant U @15
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @20
-              type: T
-          returnType: U
-    topLevelVariables
-      static f @39
-        type: String Function(int)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            int
-            String
-    accessors
-      synthetic static get f @-1
-        returnType: String Function(int)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            int
-            String
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: String Function(int)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
-                String
-        returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef_with_type_arguments_implicit() async {
-    var library = await checkLibrary('typedef U F<T, U>(T t); F f;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          contravariant T @12
-            defaultType: dynamic
-          covariant U @15
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @20
-              type: T
-          returnType: U
-    topLevelVariables
-      static f @26
-        type: dynamic Function(dynamic)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            dynamic
-            dynamic
-    accessors
-      synthetic static get f @-1
-        returnType: dynamic Function(dynamic)
-          aliasElement: self::@typeAlias::F
-          aliasArguments
-            dynamic
-            dynamic
-      synthetic static set f @-1
-        parameters
-          requiredPositional _f @-1
-            type: dynamic Function(dynamic)
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                dynamic
-                dynamic
-        returnType: void
-''');
-  }
-
-  test_type_unresolved() async {
-    var library = await checkLibrary('C c;', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static c @2
-        type: dynamic
-    accessors
-      synthetic static get c @-1
-        returnType: dynamic
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_type_unresolved_prefixed() async {
-    var library = await checkLibrary('import "dart:core" as core; core.C c;',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    dart:core as core @22
-  definingUnit
-    topLevelVariables
-      static c @35
-        type: dynamic
-    accessors
-      synthetic static get c @-1
-        returnType: dynamic
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_typeAlias_parameter_typeParameters() async {
-    var library = await checkLibrary(r'''
-typedef void F(T a<T, U>(U u));
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        aliasedType: void Function(T Function<T, U>(U))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional a @17
-              type: T Function<T, U>(U)
-              typeParameters
-                covariant T @19
-                covariant U @22
-              parameters
-                requiredPositional u @27
-                  type: U
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_contravariant() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = void Function(T);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_contravariant2() async {
-    var library = await checkLibrary(r'''
-typedef F1<T> = void Function(T);
-typedef F2<T> = F1<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F1 @8
-        typeParameters
-          contravariant T @11
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: void
-      F2 @42
-        typeParameters
-          contravariant T @45
-            defaultType: dynamic
-        aliasedType: void Function(T) Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void Function(T)
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = T Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant2() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = List<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: List<T> Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: List<T>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant3() async {
-    var library = await checkLibrary(r'''
-typedef F1<T> = T Function();
-typedef F2<T> = F1<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F1 @8
-        typeParameters
-          covariant T @11
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-      F2 @38
-        typeParameters
-          covariant T @41
-            defaultType: dynamic
-        aliasedType: T Function() Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant4() async {
-    var library = await checkLibrary(r'''
-typedef F1<T> = void Function(T);
-typedef F2<T> = void Function(F1<T>);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F1 @8
-        typeParameters
-          contravariant T @11
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: void
-      F2 @42
-        typeParameters
-          covariant T @45
-            defaultType: dynamic
-        aliasedType: void Function(void Function(T))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: void Function(T)
-                aliasElement: self::@typeAlias::F1
-                aliasArguments
-                  T
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invalid() async {
-    var library = await checkLibrary(r'''
-class A {}
-typedef F<T> = void Function(A<int>);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    typeAliases
-      F @19
-        typeParameters
-          unrelated T @21
-            defaultType: dynamic
-        aliasedType: void Function(A)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: A
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invalid2() async {
-    var library = await checkLibrary(r'''
-typedef F = void Function();
-typedef G<T> = void Function(F<int>);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-      G @37
-        typeParameters
-          unrelated T @39
-            defaultType: dynamic
-        aliasedType: void Function(void Function())
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: void Function()
-                aliasElement: self::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invariant() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = T Function(T);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          invariant T @10
-            defaultType: dynamic
-        aliasedType: T Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invariant2() async {
-    var library = await checkLibrary(r'''
-typedef F1<T> = T Function();
-typedef F2<T> = F1<T> Function(T);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F1 @8
-        typeParameters
-          covariant T @11
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-      F2 @38
-        typeParameters
-          invariant T @41
-            defaultType: dynamic
-        aliasedType: T Function() Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: T Function()
-            aliasElement: self::@typeAlias::F1
-            aliasArguments
-              T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_unrelated() async {
-    var library = await checkLibrary(r'''
-typedef F<T> = void Function(int);
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          unrelated T @10
-            defaultType: dynamic
-        aliasedType: void Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_contravariant() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = List<void Function(T)>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        aliasedType: List<void Function(T)>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_contravariant2() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = void Function(T);
-typedef B<T> = List<A<T>>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        aliasedType: void Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: T
-          returnType: void
-      B @41
-        typeParameters
-          contravariant T @43
-            defaultType: dynamic
-        aliasedType: List<void Function(T)>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_covariant() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = List<T>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: List<T>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_covariant2() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = Map<int, T>;
-typedef B<T> = List<A<T>>;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: Map<int, T>
-      B @36
-        typeParameters
-          covariant T @38
-            defaultType: dynamic
-        aliasedType: List<Map<int, T>>
-''');
-  }
-
-  test_typedef_function_generic() async {
-    var library = await checkLibrary(
-        'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      F @8
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        aliasedType: int Function<S>(List<S>, num Function<A>(A), T)
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant S @28
-          parameters
-            requiredPositional list @39
-              type: List<S>
-            requiredPositional @-1
-              type: num Function<A>(A)
-            requiredPositional @-1
-              type: T
-          returnType: int
-''');
-  }
-
-  test_typedef_function_generic_asFieldType() async {
-    var library = await checkLibrary(r'''
-typedef Foo<S> = S Function<T>(T x);
-class A {
-  Foo<int> f;
-}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @43
-        fields
-          f @58
-            type: int Function<T>(T)
-              aliasElement: self::@typeAlias::Foo
-              aliasArguments
-                int
-        constructors
-          synthetic @-1
-        accessors
-          synthetic get f @-1
-            returnType: int Function<T>(T)
-              aliasElement: self::@typeAlias::Foo
-              aliasArguments
-                int
-          synthetic set f @-1
-            parameters
-              requiredPositional _f @-1
-                type: int Function<T>(T)
-                  aliasElement: self::@typeAlias::Foo
-                  aliasArguments
-                    int
-            returnType: void
-    typeAliases
-      Foo @8
-        typeParameters
-          covariant S @12
-            defaultType: dynamic
-        aliasedType: S Function<T>(T)
-        aliasedElement: GenericFunctionTypeElement
-          typeParameters
-            covariant T @28
-          parameters
-            requiredPositional x @33
-              type: T
-          returnType: S
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_included() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await checkLibrary('''
-typedef F = void Function(C c);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @38
-        typeParameters
-          covariant T @40
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: void Function(C<C<dynamic>>)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional c @28
-              type: C<C<dynamic>>
-          returnType: void
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_omitted() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await checkLibrary('''
-typedef F = void Function(C);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @36
-        typeParameters
-          covariant T @38
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: void Function(C<C<dynamic>>)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional @-1
-              type: C<C<dynamic>>
-          returnType: void
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_return_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await checkLibrary('''
-typedef F = C Function();
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @32
-        typeParameters
-          covariant T @34
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-    typeAliases
-      notSimplyBounded F @8
-        aliasedType: C<C<dynamic>> Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: C<C<dynamic>>
-''');
-  }
-
-  test_typedef_function_typeParameters_f_bound_simple() async {
-    var library =
-        await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        typeParameters
-          contravariant T @10
-            bound: U
-            defaultType: Never
-          covariant U @23
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @41
-              type: T
-          returnType: U
-''');
-  }
-
-  test_typedef_function_typeParameters_f_bound_simple_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library =
-        await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      notSimplyBounded F @8
-        typeParameters
-          contravariant T @10
-            bound: U*
-            defaultType: Null*
-          covariant U @23
-            defaultType: dynamic
-        aliasedType: U* Function(T*)*
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @41
-              type: T*
-          returnType: U*
-''');
-  }
-
-  test_typedef_legacy_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-typedef F();''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @68
-        documentationComment: /**\n * Docs\n */
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_dependency_via_param_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await checkLibrary('''
-typedef void F(C c);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @27
-        typeParameters
-          covariant T @29
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @13
-        aliasedType: void Function(C<C<dynamic>>)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional c @17
-              type: C<C<dynamic>>
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_dependency_via_return_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await checkLibrary('''
-typedef C F();
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      notSimplyBounded class C @21
-        typeParameters
-          covariant T @23
-            bound: C<T>
-            defaultType: C<dynamic>
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @10
-        aliasedType: C<C<dynamic>> Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: C<C<dynamic>>
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_self() async {
-    var library = await checkLibrary('''
-typedef void F<T extends F>();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @13
-        typeParameters
-          unrelated T @15
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_simple_because_non_generic() async {
-    var library = await checkLibrary('''
-typedef void F();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_simple_no_bounds() async {
-    var library = await checkLibrary('typedef void F<T>();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        typeParameters
-          unrelated T @15
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_parameter_hasImplicitType() async {
-    var library = await checkLibrary(r'''
-typedef void F(int a, b, [int c, d]);
-''');
-    var F = library.definingCompilationUnit.typeAliases.single;
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    // TODO(scheglov) Use better textual presentation with all information.
-    expect(function.parameters[0].hasImplicitType, false);
-    expect(function.parameters[1].hasImplicitType, true);
-    expect(function.parameters[2].hasImplicitType, false);
-    expect(function.parameters[3].hasImplicitType, true);
-  }
-
-  test_typedef_legacy_parameter_parameters() async {
-    var library = await checkLibrary('typedef F(g(x, y));');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function(dynamic Function(dynamic, dynamic))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional g @10
-              type: dynamic Function(dynamic, dynamic)
-              parameters
-                requiredPositional x @12
-                  type: dynamic
-                requiredPositional y @15
-                  type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_parameters_in_generic_class() async {
-    var library = await checkLibrary('typedef F<A, B>(A g(B x));');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        typeParameters
-          contravariant A @10
-            defaultType: dynamic
-          covariant B @13
-            defaultType: dynamic
-        aliasedType: dynamic Function(A Function(B))
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional g @18
-              type: A Function(B)
-              parameters
-                requiredPositional x @22
-                  type: B
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_return_type() async {
-    var library = await checkLibrary('typedef F(int g());');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function(int Function())
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional g @14
-              type: int Function()
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_type() async {
-    var library = await checkLibrary('typedef F(int i);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function(int)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional i @14
-              type: int
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_type_generic() async {
-    var library = await checkLibrary('typedef F<T>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        typeParameters
-          contravariant T @10
-            defaultType: dynamic
-        aliasedType: dynamic Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @15
-              type: T
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameters() async {
-    var library = await checkLibrary('typedef F(x, y);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function(dynamic, dynamic)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional x @10
-              type: dynamic
-            requiredPositional y @13
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameters_named() async {
-    var library = await checkLibrary('typedef F({y, z, x});');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function({dynamic x, dynamic y, dynamic z})
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            optionalNamed y @11
-              type: dynamic
-            optionalNamed z @14
-              type: dynamic
-            optionalNamed x @17
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_return_type() async {
-    var library = await checkLibrary('typedef int F();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @12
-        aliasedType: int Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: int
-''');
-  }
-
-  test_typedef_legacy_return_type_generic() async {
-    var library = await checkLibrary('typedef T F<T>();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          covariant T @12
-            defaultType: dynamic
-        aliasedType: T Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: T
-''');
-  }
-
-  test_typedef_legacy_return_type_implicit() async {
-    var library = await checkLibrary('typedef F();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @8
-        aliasedType: dynamic Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_return_type_void() async {
-    var library = await checkLibrary('typedef void F();');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @13
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters() async {
-    var library = await checkLibrary('typedef U F<T, U>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          contravariant T @12
-            defaultType: dynamic
-          covariant U @15
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @20
-              type: T
-          returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound() async {
-    var library = await checkLibrary(
-        'typedef U F<T extends Object, U extends D>(T t); class D {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class D @55
-        constructors
-          synthetic @-1
-    typeAliases
-      functionTypeAliasBased F @10
-        typeParameters
-          contravariant T @12
-            bound: Object
-            defaultType: Object
-          covariant U @30
-            bound: D
-            defaultType: D
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @45
-              type: T
-          returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound_recursive() async {
-    var library = await checkLibrary('typedef void F<T extends F>();');
-    // Typedefs cannot reference themselves.
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @13
-        typeParameters
-          unrelated T @15
-            bound: dynamic
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound_recursive2() async {
-    var library = await checkLibrary('typedef void F<T extends List<F>>();');
-    // Typedefs cannot reference themselves.
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @13
-        typeParameters
-          unrelated T @15
-            bound: List<dynamic>
-            defaultType: dynamic
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_complex() async {
-    var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @10
-        typeParameters
-          contravariant T @12
-            bound: List<U>
-            defaultType: List<Never>
-          covariant U @31
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @36
-              type: T
-          returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_complex_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @10
-        typeParameters
-          contravariant T @12
-            bound: List<U*>*
-            defaultType: List<Null*>*
-          covariant U @31
-            defaultType: dynamic
-        aliasedType: U* Function(T*)*
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @36
-              type: T*
-          returnType: U*
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_simple() async {
-    var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @10
-        typeParameters
-          contravariant T @12
-            bound: U
-            defaultType: Never
-          covariant U @25
-            defaultType: dynamic
-        aliasedType: U Function(T)
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @30
-              type: T
-          returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_simple_legacy() async {
-    featureSet = FeatureSets.language_2_9;
-    var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      functionTypeAliasBased notSimplyBounded F @10
-        typeParameters
-          contravariant T @12
-            bound: U*
-            defaultType: Null*
-          covariant U @25
-            defaultType: dynamic
-        aliasedType: U* Function(T*)*
-        aliasedElement: GenericFunctionTypeElement
-          parameters
-            requiredPositional t @30
-              type: T*
-          returnType: U*
-''');
-  }
-
-  @FailingTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type dynamic is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_dynamic() async {
-    var library = await checkLibrary(r'''
-typedef A = dynamic;
-void f(A a) {}
-''');
-
-    checkElementText(library, r'''
-typedef A = dynamic;
-void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_functionType() async {
-    var library = await checkLibrary(r'''
-typedef A1 = void Function();
-typedef A2<R> = R Function();
-void f1(A1 a) {}
-void f2(A2<int> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A1 @8
-        aliasedType: void Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: void
-      A2 @38
-        typeParameters
-          covariant R @41
-            defaultType: dynamic
-        aliasedType: R Function()
-        aliasedElement: GenericFunctionTypeElement
-          returnType: R
-    functions
-      f1 @65
-        parameters
-          requiredPositional a @71
-            type: void Function()
-              aliasElement: self::@typeAlias::A1
-        returnType: void
-      f2 @82
-        parameters
-          requiredPositional a @93
-            type: int Function()
-              aliasElement: self::@typeAlias::A2
-              aliasArguments
-                int
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_interfaceType() async {
-    var library = await checkLibrary(r'''
-typedef A1 = List<int>;
-typedef A2<T, U> = Map<T, U>;
-void f1(A1 a) {}
-void f2(A2<int, String> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A1 @8
-        aliasedType: List<int>
-      A2 @32
-        typeParameters
-          covariant T @35
-            defaultType: dynamic
-          covariant U @38
-            defaultType: dynamic
-        aliasedType: Map<T, U>
-    functions
-      f1 @59
-        parameters
-          requiredPositional a @65
-            type: List<int>
-              aliasElement: self::@typeAlias::A1
-        returnType: void
-      f2 @76
-        parameters
-          requiredPositional a @95
-            type: Map<int, String>
-              aliasElement: self::@typeAlias::A2
-              aliasArguments
-                int
-                String
-        returnType: void
-''');
-  }
-
-  @FailingTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type Never is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_never() async {
-    var library = await checkLibrary(r'''
-typedef A1 = Never;
-typedef A2<T> = Never?;
-void f1(A1 a) {}
-void f2(A2<int> a) {}
-''');
-
-    checkElementText(library, r'''
-typedef A1 = Never;
-typedef A2<T> = Never?;
-void f1(Never<aliasElement: self::@typeAlias::A1> a) {}
-void f2(Never?<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_typeParameterType() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = T;
-void f<U>(A<U> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T
-    functions
-      f @23
-        typeParameters
-          covariant U @25
-        parameters
-          requiredPositional a @33
-            type: U
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                U
-        returnType: void
-''');
-  }
-
-  @FailingTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type void is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_void() async {
-    var library = await checkLibrary(r'''
-typedef A = void;
-void f(A a) {}
-''');
-
-    checkElementText(library, r'''
-typedef A = void;
-void f(void<aliasElement: self::@typeAlias::A> a) {}
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
-    var library = await checkLibrary(r'''
-typedef X<T> = A<int, T>;
-class A<T, U> {}
-class B implements X<String> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @32
-        typeParameters
-          covariant T @34
-            defaultType: dynamic
-          covariant U @37
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @49
-        interfaces
-          A<int, String>
-            aliasElement: self::@typeAlias::X
-            aliasArguments
-              String
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: A<int, T>
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_question() async {
-    var library = await checkLibrary(r'''
-typedef X<T> = A<T>?;
-class A<T> {}
-class B {}
-class C {}
-class D implements B, X<int>, C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @28
-        typeParameters
-          covariant T @30
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @42
-        constructors
-          synthetic @-1
-      class C @53
-        constructors
-          synthetic @-1
-      class D @64
-        interfaces
-          B
-          C
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: A<T>?
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_question2() async {
-    var library = await checkLibrary(r'''
-typedef X<T> = A<T?>;
-class A<T> {}
-class B {}
-class C {}
-class D implements B, X<int>, C {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @28
-        typeParameters
-          covariant T @30
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @42
-        constructors
-          synthetic @-1
-      class C @53
-        constructors
-          synthetic @-1
-      class D @64
-        interfaces
-          B
-          A<int?>
-            aliasElement: self::@typeAlias::X
-            aliasArguments
-              int
-          C
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: A<T?>
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_Never_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Never;
-class A implements X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @25
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_Null_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Null;
-class A implements X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_typeParameterType() async {
-    var library = await checkLibrary(r'''
-typedef X<T> = T;
-class A {}
-class B {}
-class C<U> implements A, X<U>, B {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        constructors
-          synthetic @-1
-      class B @35
-        constructors
-          synthetic @-1
-      class C @46
-        typeParameters
-          covariant U @48
-            defaultType: dynamic
-        interfaces
-          A
-          B
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_void() async {
-    var library = await checkLibrary(r'''
-typedef X = void;
-class A {}
-class B {}
-class C implements A, X, B {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        constructors
-          synthetic @-1
-      class B @35
-        constructors
-          synthetic @-1
-      class C @46
-        interfaces
-          A
-          B
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: void
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_none() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int>;
-class A<T> {}
-class B with X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @26
-        typeParameters
-          covariant T @28
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @40
-        supertype: Object
-        mixins
-          A<int>
-            aliasElement: self::@typeAlias::X
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: A<int>
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_question() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int>?;
-class A<T> {}
-mixin M1 {}
-mixin M2 {}
-class B with M1, X, M2 {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @27
-        typeParameters
-          covariant T @29
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @65
-        supertype: Object
-        mixins
-          M1
-          M2
-        constructors
-          synthetic @-1
-    mixins
-      mixin M1 @41
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-      mixin M2 @53
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: A<int>?
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_question2() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int?>;
-class A<T> {}
-mixin M1 {}
-mixin M2 {}
-class B with M1, X, M2 {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @27
-        typeParameters
-          covariant T @29
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @65
-        supertype: Object
-        mixins
-          M1
-          A<int?>
-            aliasElement: self::@typeAlias::X
-          M2
-        constructors
-          synthetic @-1
-    mixins
-      mixin M1 @41
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-      mixin M2 @53
-        superclassConstraints
-          Object
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: A<int?>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_Never_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Never;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @25
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_none() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int>;
-class A<T> {}
-class B extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @26
-        typeParameters
-          covariant T @28
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @40
-        supertype: A<int>
-          aliasElement: self::@typeAlias::X
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
-    typeAliases
-      X @8
-        aliasedType: A<int>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_none_viaTypeParameter() async {
-    var library = await checkLibrary(r'''
-typedef X<T> = T;
-class A<T> {}
-class B extends X<A<int>> {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        typeParameters
-          covariant T @26
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class B @38
-        supertype: A<int>
-          aliasElement: self::@typeAlias::X
-          aliasArguments
-            A<int>
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
-    typeAliases
-      X @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_Null_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Null;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_question() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int>?;
-class A<T> {}
-class D extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @27
-        typeParameters
-          covariant T @29
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class D @41
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: A<int>?
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_question2() async {
-    var library = await checkLibrary(r'''
-typedef X = A<int?>;
-class A<T> {}
-class D extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @27
-        typeParameters
-          covariant T @29
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-      class D @41
-        supertype: A<int?>
-          aliasElement: self::@typeAlias::X
-        constructors
-          synthetic @-1
-            superConstructor: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int?}
-    typeAliases
-      X @8
-        aliasedType: A<int?>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_Never_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Never;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @25
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_Null_none() async {
-    var library = await checkLibrary(r'''
-typedef X = Null;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @24
-        constructors
-          synthetic @-1
-    typeAliases
-      X @8
-        aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_using_dynamic() async {
-    var library = await checkLibrary(r'''
-typedef A = dynamic;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: dynamic
-    functions
-      f @26
-        parameters
-          requiredPositional a @30
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_disabled() async {
-    featureSet = FeatureSets.language_2_12;
-    var library = await checkLibrary(r'''
-typedef A = int;
-void f(A a) {}
-''');
-
-    var alias = library.definingCompilationUnit.typeAliases[0];
-    _assertTypeStr(alias.aliasedType, 'dynamic Function()');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: dynamic Function()
-    functions
-      f @22
-        parameters
-          requiredPositional a @26
-            type: dynamic Function()
-              aliasElement: self::@typeAlias::A
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_noTypeParameters() async {
-    var library = await checkLibrary(r'''
-typedef A = int;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: int
-    functions
-      f @22
-        parameters
-          requiredPositional a @26
-            type: int
-              aliasElement: self::@typeAlias::A
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_noTypeParameters_legacy() async {
-    newFile('/a.dart', content: r'''
-typedef A = List<int>;
-''');
-    var library = await checkLibrary(r'''
-// @dart = 2.9
-import 'a.dart';
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    functions
-      f @37
-        parameters
-          requiredPositional a @41
-            type: List<int*>*
-              aliasElement: a.dart::@typeAlias::A
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
-    var library = await checkLibrary(r'''
-typedef A = int?;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: int?
-    functions
-      f @23
-        parameters
-          requiredPositional a @27
-            type: int?
-              aliasElement: self::@typeAlias::A
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_withTypeParameters() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = Map<int, T>;
-void f(A<String> a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: Map<int, T>
-    functions
-      f @33
-        parameters
-          requiredPositional a @45
-            type: Map<int, String>
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                String
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_Never_none() async {
-    var library = await checkLibrary(r'''
-typedef A = Never;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: Never
-    functions
-      f @24
-        parameters
-          requiredPositional a @28
-            type: Never
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_Never_question() async {
-    var library = await checkLibrary(r'''
-typedef A = Never?;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: Never?
-    functions
-      f @25
-        parameters
-          requiredPositional a @29
-            type: Never?
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_typeParameter_none() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = T;
-void f1(A a) {}
-void f2(A<int> a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T
-    functions
-      f1 @23
-        parameters
-          requiredPositional a @28
-            type: dynamic
-        returnType: void
-      f2 @39
-        parameters
-          requiredPositional a @49
-            type: int
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                int
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_typeParameter_question() async {
-    var library = await checkLibrary(r'''
-typedef A<T> = T?;
-void f1(A a) {}
-void f2(A<int> a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        typeParameters
-          covariant T @10
-            defaultType: dynamic
-        aliasedType: T?
-    functions
-      f1 @24
-        parameters
-          requiredPositional a @29
-            type: dynamic
-        returnType: void
-      f2 @40
-        parameters
-          requiredPositional a @50
-            type: int?
-              aliasElement: self::@typeAlias::A
-              aliasArguments
-                int
-        returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_void() async {
-    var library = await checkLibrary(r'''
-typedef A = void;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    typeAliases
-      A @8
-        aliasedType: void
-    functions
-      f @23
-        parameters
-          requiredPositional a @27
-            type: void
-        returnType: void
-''');
-  }
-
-  test_typedefs() async {
-    var library = await checkLibrary('f() {} g() {}');
-    checkElementText(library, r'''
-library
-  definingUnit
-    functions
-      f @0
-        returnType: dynamic
-      g @7
-        returnType: dynamic
-''');
-  }
-
-  test_unit_implicitVariable_getterFirst() async {
-    var library = await checkLibrary('''
-int get x => 0;
-void set x(int value) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static get x @8
-        returnType: int
-      static set x @25
-        parameters
-          requiredPositional value @31
-            type: int
-        returnType: void
-''');
-  }
-
-  test_unit_implicitVariable_setterFirst() async {
-    var library = await checkLibrary('''
-void set x(int value) {}
-int get x => 0;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static set x @9
-        parameters
-          requiredPositional value @15
-            type: int
-        returnType: void
-      static get x @33
-        returnType: int
-''');
-  }
-
-  test_unit_variable_final_withSetter() async {
-    var library = await checkLibrary(r'''
-final int foo = 0;
-set foo(int newValue) {}
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final foo @10
-        type: int
-    accessors
-      synthetic static get foo @-1
-        returnType: int
-      static set foo @23
-        parameters
-          requiredPositional newValue @31
-            type: int
-        returnType: void
-''');
-  }
-
-  test_unresolved_annotation_instanceCreation_argument_super() async {
-    var library = await checkLibrary('''
-class A {
-  const A(_);
-}
-
-@A(super)
-class C {}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional _ @20
-                type: dynamic
-      class C @43
-        metadata
-          Annotation
-            atSign: @ @27
-            name: SimpleIdentifier
-              token: A @28
-              staticElement: self::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @29
-              arguments
-                SuperExpression
-                  superKeyword: super @30
-                  staticType: dynamic
-              rightParenthesis: ) @35
-            element: self::@class::A::@constructor::•
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_instanceCreation_argument_this() async {
-    var library = await checkLibrary('''
-class A {
-  const A(_);
-}
-
-@A(this)
-class C {}
-''', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          const @18
-            parameters
-              requiredPositional _ @20
-                type: dynamic
-      class C @42
-        metadata
-          Annotation
-            atSign: @ @27
-            name: SimpleIdentifier
-              token: A @28
-              staticElement: self::@class::A
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @29
-              arguments
-                ThisExpression
-                  thisKeyword: this @30
-                  staticType: dynamic
-              rightParenthesis: ) @34
-            element: self::@class::A::@constructor::•
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_namedConstructorCall_noClass() async {
-    var library =
-        await checkLibrary('@foo.bar() class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @17
-        metadata
-          Annotation
-            atSign: @ @0
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              period: . @4
-              identifier: SimpleIdentifier
-                token: bar @5
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @8
-              rightParenthesis: ) @9
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_namedConstructorCall_noConstructor() async {
-    var library =
-        await checkLibrary('@String.foo() class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @20
-        metadata
-          Annotation
-            atSign: @ @0
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: String @1
-                staticElement: dart:core::@class::String
-                staticType: null
-              period: . @7
-              identifier: SimpleIdentifier
-                token: foo @8
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @11
-              rightParenthesis: ) @12
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
-    var library = await checkLibrary('@foo.bar class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @15
-        metadata
-          Annotation
-            atSign: @ @0
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              period: . @4
-              identifier: SimpleIdentifier
-                token: bar @5
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
-    var library = await checkLibrary(
-        'import "dart:async" as foo; @foo.bar class C {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as foo @23
-  definingUnit
-    classes
-      class C @43
-        metadata
-          Annotation
-            atSign: @ @28
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @29
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @32
-              identifier: SimpleIdentifier
-                token: bar @33
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() async {
-    var library =
-        await checkLibrary('@foo.bar.baz() class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @21
-        metadata
-          Annotation
-            atSign: @ @0
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              period: . @4
-              identifier: SimpleIdentifier
-                token: bar @5
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            period: . @8
-            constructorName: SimpleIdentifier
-              token: baz @9
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @12
-              rightParenthesis: ) @13
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_noClass() async {
-    var library = await checkLibrary(
-        'import "dart:async" as foo; @foo.bar.baz() class C {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as foo @23
-  definingUnit
-    classes
-      class C @49
-        metadata
-          Annotation
-            atSign: @ @28
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @29
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @32
-              identifier: SimpleIdentifier
-                token: bar @33
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            period: . @36
-            constructorName: SimpleIdentifier
-              token: baz @37
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @40
-              rightParenthesis: ) @41
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() async {
-    var library = await checkLibrary(
-        'import "dart:async" as foo; @foo.Future.bar() class C {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as foo @23
-  definingUnit
-    classes
-      class C @52
-        metadata
-          Annotation
-            atSign: @ @28
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @29
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @32
-              identifier: SimpleIdentifier
-                token: Future @33
-                staticElement: dart:async::@class::Future
-                staticType: null
-              staticElement: dart:async::@class::Future
-              staticType: null
-            period: . @39
-            constructorName: SimpleIdentifier
-              token: bar @40
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @43
-              rightParenthesis: ) @44
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() async {
-    var library =
-        await checkLibrary('@foo.bar() class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @17
-        metadata
-          Annotation
-            atSign: @ @0
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              period: . @4
-              identifier: SimpleIdentifier
-                token: bar @5
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @8
-              rightParenthesis: ) @9
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() async {
-    var library = await checkLibrary(
-        'import "dart:async" as foo; @foo.bar() class C {}',
-        allowErrors: true);
-    checkElementText(library, r'''
-library
-  imports
-    dart:async as foo @23
-  definingUnit
-    classes
-      class C @45
-        metadata
-          Annotation
-            atSign: @ @28
-            name: PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: foo @29
-                staticElement: self::@prefix::foo
-                staticType: null
-              period: . @32
-              identifier: SimpleIdentifier
-                token: bar @33
-                staticElement: <null>
-                staticType: null
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @36
-              rightParenthesis: ) @37
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_simpleIdentifier() async {
-    var library = await checkLibrary('@foo class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @11
-        metadata
-          Annotation
-            atSign: @ @0
-            name: SimpleIdentifier
-              token: foo @1
-              staticElement: <null>
-              staticType: null
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_simpleIdentifier_multiplyDefined() async {
-    addLibrarySource('/a.dart', 'const v = 0;');
-    addLibrarySource('/b.dart', 'const v = 0;');
-    var library = await checkLibrary('''
-import 'a.dart';
-import 'b.dart';
-
-@v
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-    b.dart
-  definingUnit
-    classes
-      class C @44
-        metadata
-          Annotation
-            atSign: @ @35
-            name: SimpleIdentifier
-              token: v @36
-              staticElement: <null>
-              staticType: null
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_annotation_unnamedConstructorCall_noClass() async {
-    var library = await checkLibrary('@foo() class C {}', allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @13
-        metadata
-          Annotation
-            atSign: @ @0
-            name: SimpleIdentifier
-              token: foo @1
-              staticElement: <null>
-              staticType: null
-            arguments: ArgumentList
-              leftParenthesis: ( @4
-              rightParenthesis: ) @5
-            element: <null>
-        constructors
-          synthetic @-1
-''');
-  }
-
-  test_unresolved_export() async {
-    var library = await checkLibrary("export 'foo.dart';", allowErrors: true);
-    checkElementText(library, r'''
-library
-  exports
-    foo.dart
-  definingUnit
-''');
-  }
-
-  test_unresolved_import() async {
-    var library = await checkLibrary("import 'foo.dart';", allowErrors: true);
-    var importedLibrary = library.imports[0].importedLibrary!;
-    expect(importedLibrary.loadLibraryFunction, isNotNull);
-    expect(importedLibrary.publicNamespace, isNotNull);
-    expect(importedLibrary.exportNamespace, isNotNull);
-    checkElementText(library, r'''
-library
-  imports
-    foo.dart
-  definingUnit
-''');
-  }
-
-  test_unresolved_part() async {
-    var library = await checkLibrary("part 'foo.dart';", allowErrors: true);
-    checkElementText(library, r'''
-library
-  definingUnit
-  parts
-    foo.dart
-''');
-  }
-
-  test_unused_type_parameter() async {
-    var library = await checkLibrary('''
-class C<T> {
-  void f() {}
-}
-C<int> c;
-var v = c.f;
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class C @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          synthetic @-1
-        methods
-          f @20
-            returnType: void
-    topLevelVariables
-      static c @36
-        type: C<int>
-      static v @43
-        type: void Function()
-    accessors
-      synthetic static get c @-1
-        returnType: C<int>
-      synthetic static set c @-1
-        parameters
-          requiredPositional _c @-1
-            type: C<int>
-        returnType: void
-      synthetic static get v @-1
-        returnType: void Function()
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: void Function()
-        returnType: void
-''');
-  }
-
-  test_variable() async {
-    var library = await checkLibrary('int x = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_const() async {
-    var library = await checkLibrary('const int i = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const i @10
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @14
-            staticType: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-''');
-  }
-
-  test_variable_const_late() async {
-    var library = await checkLibrary('late const int i = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static late const i @15
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @19
-            staticType: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-''');
-  }
-
-  test_variable_documented() async {
-    var library = await checkLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-var x;''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @64
-        documentationComment: /**\n * Docs\n */
-        type: dynamic
-    accessors
-      synthetic static get x @-1
-        returnType: dynamic
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_variable_final() async {
-    var library = await checkLibrary('final int x = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final x @10
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-''');
-  }
-
-  test_variable_getterInLib_setterInPart() async {
-    addSource('/a.dart', '''
-part of my.lib;
-void set x(int _) {}
-''');
-    var library = await checkLibrary('''
-library my.lib;
-part 'a.dart';
-int get x => 42;''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static get x @39
-        returnType: int
-  parts
-    a.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static set x @25
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_getterInPart_setterInLib() async {
-    addSource('/a.dart', '''
-part of my.lib;
-int get x => 42;
-''');
-    var library = await checkLibrary('''
-library my.lib;
-part 'a.dart';
-void set x(int _) {}
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      synthetic static x @-1
-        type: int
-    accessors
-      static set x @40
-        parameters
-          requiredPositional _ @46
-            type: int
-        returnType: void
-  parts
-    a.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static get x @24
-          returnType: int
-''');
-  }
-
-  test_variable_getterInPart_setterInPart() async {
-    addSource('/a.dart', 'part of my.lib; int get x => 42;');
-    addSource('/b.dart', 'part of my.lib; void set x(int _) {}');
-    var library =
-        await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static get x @24
-          returnType: int
-    b.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static set x @25
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_implicit() async {
-    var library = await checkLibrary('int get x => 0;');
-
-    // We intentionally don't check the text, because we want to test
-    // requesting individual elements, not all accessors/variables at once.
-    var getter = _elementOfDefiningUnit(library, ['@getter', 'x'])
-        as PropertyAccessorElementImpl;
-    var variable = getter.variable as TopLevelVariableElementImpl;
-    expect(variable, isNotNull);
-    expect(variable.isFinal, isFalse);
-    expect(variable.getter, same(getter));
-    _assertTypeStr(variable.type, 'int');
-    expect(variable, same(_elementOfDefiningUnit(library, ['@variable', 'x'])));
-  }
-
-  test_variable_implicit_type() async {
-    var library = await checkLibrary('var x;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static x @4
-        type: dynamic
-    accessors
-      synthetic static get x @-1
-        returnType: dynamic
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_variable_inferred_type_implicit_initialized() async {
-    var library = await checkLibrary('var v = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_initializer() async {
-    var library = await checkLibrary('int v = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_initializer_final() async {
-    var library = await checkLibrary('final int v = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final v @10
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_variable_initializer_final_untyped() async {
-    var library = await checkLibrary('final v = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final v @6
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-''');
-  }
-
-  test_variable_initializer_staticMethod_ofExtension() async {
-    var library = await checkLibrary('''
-class A {}
-extension E on A {
-  static int f() => 0;
-}
-var x = E.f();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        constructors
-          synthetic @-1
-    extensions
-      E @21
-        extendedType: A
-        methods
-          static f @43
-            returnType: int
-    topLevelVariables
-      static x @59
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_initializer_untyped() async {
-    var library = await checkLibrary('var v = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static v @4
-        type: int
-    accessors
-      synthetic static get v @-1
-        returnType: int
-      synthetic static set v @-1
-        parameters
-          requiredPositional _v @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_late() async {
-    var library = await checkLibrary('late int x = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static late x @9
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_late_final() async {
-    var library = await checkLibrary('late final int x;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static late final x @15
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-      synthetic static set x @-1
-        parameters
-          requiredPositional _x @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variable_late_final_initialized() async {
-    var library = await checkLibrary('late final int x = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static late final x @15
-        type: int
-    accessors
-      synthetic static get x @-1
-        returnType: int
-''');
-  }
-
-  test_variable_propagatedType_const_noDep() async {
-    var library = await checkLibrary('const i = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static const i @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 0 @10
-            staticType: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-''');
-  }
-
-  test_variable_propagatedType_final_dep_inLib() async {
-    addLibrarySource('/a.dart', 'final a = 1;');
-    var library = await checkLibrary('import "a.dart"; final b = a / 2;');
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static final b @23
-        type: double
-    accessors
-      synthetic static get b @-1
-        returnType: double
-''');
-  }
-
-  test_variable_propagatedType_final_dep_inPart() async {
-    addSource('/a.dart', 'part of lib; final a = 1;');
-    var library =
-        await checkLibrary('library lib; part "a.dart"; final b = a / 2;');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  definingUnit
-    topLevelVariables
-      static final b @34
-        type: double
-    accessors
-      synthetic static get b @-1
-        returnType: double
-  parts
-    a.dart
-      topLevelVariables
-        static final a @19
-          type: int
-      accessors
-        synthetic static get a @-1
-          returnType: int
-''');
-  }
-
-  test_variable_propagatedType_final_noDep() async {
-    var library = await checkLibrary('final i = 0;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static final i @6
-        type: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-''');
-  }
-
-  test_variable_propagatedType_implicit_dep() async {
-    // The propagated type is defined in a library that is not imported.
-    addLibrarySource('/a.dart', 'class C {}');
-    addLibrarySource('/b.dart', 'import "a.dart"; C f() => null;');
-    var library = await checkLibrary('import "b.dart"; final x = f();');
-    checkElementText(library, r'''
-library
-  imports
-    b.dart
-  definingUnit
-    topLevelVariables
-      static final x @23
-        type: C
-    accessors
-      synthetic static get x @-1
-        returnType: C
-''');
-  }
-
-  test_variable_setterInPart_getterInPart() async {
-    addSource('/a.dart', 'part of my.lib; void set x(int _) {}');
-    addSource('/b.dart', 'part of my.lib; int get x => 42;');
-    var library =
-        await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  definingUnit
-  parts
-    a.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static set x @25
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-    b.dart
-      topLevelVariables
-        synthetic static x @-1
-          type: int
-      accessors
-        static get x @24
-          returnType: int
-''');
-  }
-
-  test_variable_type_inferred_Never() async {
-    var library = await checkLibrary(r'''
-var a = throw 42;
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static a @4
-        type: Never
-    accessors
-      synthetic static get a @-1
-        returnType: Never
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: Never
-        returnType: void
-''');
-  }
-
-  test_variable_type_inferred_noInitializer() async {
-    var library = await checkLibrary(r'''
-var a;
-''');
-
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static a @4
-        type: dynamic
-    accessors
-      synthetic static get a @-1
-        returnType: dynamic
-      synthetic static set a @-1
-        parameters
-          requiredPositional _a @-1
-            type: dynamic
-        returnType: void
-''');
-  }
-
-  test_variable_type_inferred_nonNullify() async {
-    addSource('/a.dart', '''
-// @dart = 2.7
-var a = 0;
-''');
-
-    var library = await checkLibrary(r'''
-import 'a.dart';
-var b = a;
-''');
-
-    checkElementText(library, r'''
-library
-  imports
-    a.dart
-  definingUnit
-    topLevelVariables
-      static b @21
-        type: int
-    accessors
-      synthetic static get b @-1
-        returnType: int
-      synthetic static set b @-1
-        parameters
-          requiredPositional _b @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  test_variableInitializer_contextType_after_astRewrite() async {
-    var library = await checkLibrary(r'''
-class A<T> {
-  const A();
-}
-const A<int> a = A();
-''');
-    checkElementText(library, r'''
-library
-  definingUnit
-    classes
-      class A @6
-        typeParameters
-          covariant T @8
-            defaultType: dynamic
-        constructors
-          const @21
-    topLevelVariables
-      static const a @41
-        type: A<int>
-        constantInitializer
-          InstanceCreationExpression
-            constructorName: ConstructorName
-              type: NamedType
-                name: SimpleIdentifier
-                  token: A @45
-                  staticElement: self::@class::A
-                  staticType: null
-                type: A<int>
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: int}
-            argumentList: ArgumentList
-              leftParenthesis: ( @46
-              rightParenthesis: ) @47
-            staticType: A<int>
-    accessors
-      synthetic static get a @-1
-        returnType: A<int>
-''');
-  }
-
-  test_variables() async {
-    var library = await checkLibrary('int i; int j;');
-    checkElementText(library, r'''
-library
-  definingUnit
-    topLevelVariables
-      static i @4
-        type: int
-      static j @11
-        type: int
-    accessors
-      synthetic static get i @-1
-        returnType: int
-      synthetic static set i @-1
-        parameters
-          requiredPositional _i @-1
-            type: int
-        returnType: void
-      synthetic static get j @-1
-        returnType: int
-      synthetic static set j @-1
-        parameters
-          requiredPositional _j @-1
-            type: int
-        returnType: void
-''');
-  }
-
-  void _assertTypeStr(DartType type, String expected) {
-    var typeStr = type.getDisplayString(withNullability: true);
-    expect(typeStr, expected);
-  }
-
-  void _assertTypeStrings(List<DartType> types, List<String> expected) {
-    var typeStringList = types.map((e) {
-      return e.getDisplayString(withNullability: true);
-    }).toList();
-    expect(typeStringList, expected);
-  }
-
-  Element _elementOfDefiningUnit(
-      LibraryElementImpl library, List<String> names) {
-    var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
-    var reference = unit.reference!;
-    names.forEach((name) => reference = reference.getChild(name));
-
-    var element = reference.element;
-    if (element != null) {
-      return element;
-    }
-
-    var elementFactory = library.linkedData!.elementFactory;
-    return elementFactory.elementOfReference(reference)!;
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/test_all.dart b/pkg/analyzer/test/src/summary/test_all.dart
index 3c8974e..41786a1 100644
--- a/pkg/analyzer/test/src/summary/test_all.dart
+++ b/pkg/analyzer/test/src/summary/test_all.dart
@@ -5,19 +5,19 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'api_signature_test.dart' as api_signature;
-import 'dependency_walker_test.dart' as dependency_walker;
+import 'elements_test.dart' as elements;
 import 'flat_buffers_test.dart' as flat_buffers;
 import 'in_summary_source_test.dart' as in_summary_source;
-import 'resynthesize_ast2_test.dart' as resynthesize_ast2;
+import 'macro_test.dart' as macro;
 import 'top_level_inference_test.dart' as top_level_inference;
 
 main() {
   defineReflectiveSuite(() {
     api_signature.main();
-    dependency_walker.main();
+    elements.main();
     flat_buffers.main();
     in_summary_source.main();
-    resynthesize_ast2.main();
+    macro.main();
     top_level_inference.main();
   }, name: 'summary');
 }
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index 3974511..d78fbd0 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -1246,7 +1246,7 @@
   }
 
   test_initializer_extractProperty_explicitlyTyped_differentLibraryCycle() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   int f = 0;
 }
@@ -1314,7 +1314,7 @@
   }
 
   test_initializer_extractProperty_explicitlyTyped_sameLibraryCycle() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'test.dart'; // just do make it part of the library cycle
 class C {
   int f = 0;
@@ -1344,7 +1344,7 @@
   }
 
   test_initializer_extractProperty_implicitlyTyped_differentLibraryCycle() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 class C {
   var f = 0;
 }
@@ -1412,7 +1412,7 @@
   }
 
   test_initializer_extractProperty_implicitlyTyped_sameLibraryCycle() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
+    newFile2('$testPackageLibPath/a.dart', r'''
 import 'test.dart'; // just do make it part of the library cycle
 class C {
   var f = 0;
@@ -4689,9 +4689,9 @@
         fields
           synthetic x @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                T
+              alias: self::@typeAlias::F
+                typeArguments
+                  T
           synthetic y @-1
             type: List<dynamic Function()>
         constructors
@@ -4699,9 +4699,9 @@
         accessors
           get x @41
             returnType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                T
+              alias: self::@typeAlias::F
+                typeArguments
+                  T
           get y @69
             returnType: List<dynamic Function()>
       class B @89
@@ -4709,9 +4709,9 @@
         fields
           synthetic x @-1
             type: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
           synthetic y @-1
             type: List<dynamic Function()>
         constructors
@@ -4722,9 +4722,9 @@
         accessors
           get x @114
             returnType: dynamic Function()
-              aliasElement: self::@typeAlias::F
-              aliasArguments
-                int
+              alias: self::@typeAlias::F
+                typeArguments
+                  int
           get y @131
             returnType: List<dynamic Function()>
     typeAliases
@@ -5979,7 +5979,7 @@
   }
 
   test_method_OK_single_private_linkThroughOtherLibraryOfCycle() async {
-    newFile('$testPackageLibPath/other.dart', content: r'''
+    newFile2('$testPackageLibPath/other.dart', r'''
 import 'test.dart';
 class B extends A2 {}
 ''');
@@ -6163,7 +6163,7 @@
   }
 
   Future<LibraryElement> _encodeDecodeLibrary(String text) async {
-    newFile(testFilePath, content: text);
+    newFile2(testFilePath, text);
 
     var path = convertPath(testFilePath);
     var analysisSession = contextFor(path).currentSession;
diff --git a/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart b/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart
index f6afa71..cbdca46 100644
--- a/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart
+++ b/pkg/analyzer/test/src/summary2/ast_text_printer_test.dart
@@ -25,7 +25,7 @@
   code = code.replaceAll('\r\n', '\n');
   code = code.replaceAll('\r', '\n');
 
-  var path = base.newFile('/home/test/lib/test.dart', content: code).path;
+  var path = base.newFile2('/home/test/lib/test.dart', code).path;
 
   ParseResult parseResult;
   try {
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index fe27110..bf13737 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -43,7 +43,7 @@
   YamlMap parseOptions(String source) =>
       optionsProvider.getOptionsFromString(source);
 
-  test_configure_cannotIgnore() {
+  test_analyzer_cannotIgnore() {
     configureContext('''
 analyzer:
   cannot-ignore:
@@ -55,7 +55,7 @@
     expect(unignorableNames, unorderedEquals(['ONE_ERROR_CODE', 'ANOTHER']));
   }
 
-  test_configure_cannotIgnore_severity() {
+  test_analyzer_cannotIgnore_severity() {
     configureContext('''
 analyzer:
   cannot-ignore:
@@ -67,7 +67,7 @@
     expect(unignorableNames.length, greaterThan(500));
   }
 
-  test_configure_cannotIgnore_severity_withProcessor() {
+  test_analyzer_cannotIgnore_severity_withProcessor() {
     configureContext('''
 analyzer:
   errors:
@@ -80,7 +80,7 @@
     expect(unignorableNames, contains('UNUSED_IMPORT'));
   }
 
-  test_configure_chromeos_checks() {
+  test_analyzer_chromeos_checks() {
     configureContext('''
 analyzer:
   optional-checks:
@@ -89,7 +89,7 @@
     expect(true, analysisOptions.chromeOsManifestChecks);
   }
 
-  test_configure_chromeos_checks_map() {
+  test_analyzer_chromeos_checks_map() {
     configureContext('''
 analyzer:
   optional-checks:
@@ -98,7 +98,7 @@
     expect(true, analysisOptions.chromeOsManifestChecks);
   }
 
-  test_configure_error_processors() {
+  test_analyzer_errors_processors() {
     configureContext('''
 analyzer:
   errors:
@@ -106,7 +106,7 @@
     unused_local_variable: error
 ''');
 
-    List<ErrorProcessor> processors = analysisOptions.errorProcessors;
+    var processors = analysisOptions.errorProcessors;
     expect(processors, hasLength(2));
 
     var unused_local =
@@ -129,7 +129,7 @@
     expect(unusedLocal.severity, ErrorSeverity.ERROR);
   }
 
-  test_configure_excludes() {
+  test_analyzer_exclude() {
     configureContext('''
 analyzer:
   exclude:
@@ -137,11 +137,11 @@
     - 'test/**'
 ''');
 
-    List<String> excludes = analysisOptions.excludePatterns;
+    var excludes = analysisOptions.excludePatterns;
     expect(excludes, unorderedEquals(['foo/bar.dart', 'test/**']));
   }
 
-  test_configure_excludes_withNonStrings() {
+  test_analyzer_exclude_withNonStrings() {
     configureContext('''
 analyzer:
   exclude:
@@ -150,11 +150,11 @@
     - a: b
 ''');
 
-    List<String> excludes = analysisOptions.excludePatterns;
+    var excludes = analysisOptions.excludePatterns;
     expect(excludes, unorderedEquals(['foo/bar.dart', 'test/**']));
   }
 
-  test_configure_plugins_list() {
+  test_analyzer_plugins_list() {
     configureContext('''
 analyzer:
   plugins:
@@ -162,11 +162,11 @@
     - intl
 ''');
 
-    List<String> names = analysisOptions.enabledPluginNames;
+    var names = analysisOptions.enabledPluginNames;
     expect(names, ['angular2', 'intl']);
   }
 
-  test_configure_plugins_map() {
+  test_analyzer_plugins_map() {
     configureContext('''
 analyzer:
   plugins:
@@ -174,20 +174,36 @@
       enabled: true
 ''');
 
-    List<String> names = analysisOptions.enabledPluginNames;
+    var names = analysisOptions.enabledPluginNames;
     expect(names, ['angular2']);
   }
 
-  test_configure_plugins_string() {
+  test_analyzer_plugins_string() {
     configureContext('''
 analyzer:
   plugins:
     angular2
 ''');
 
-    List<String> names = analysisOptions.enabledPluginNames;
+    var names = analysisOptions.enabledPluginNames;
     expect(names, ['angular2']);
   }
+
+  test_codeStyle_format_false() {
+    configureContext('''
+code-style:
+  format: false
+''');
+    expect(analysisOptions.codeStyleOptions.useFormatter, false);
+  }
+
+  test_codeStyle_format_true() {
+    configureContext('''
+code-style:
+  format: true
+''');
+    expect(analysisOptions.codeStyleOptions.useFormatter, true);
+  }
 }
 
 @reflectiveTest
@@ -213,7 +229,7 @@
         String name = declarationMirror.simpleName.toString();
         //TODO(danrubel): find a better way to extract the text from the symbol
         assert(name.startsWith('Symbol("') && name.endsWith('")'));
-        return errorType.toString() + '.' + name.substring(8, name.length - 2);
+        return '$errorType.${name.substring(8, name.length - 2)}';
       }).where((String name) {
         return name == name.toUpperCase();
       }).toList();
@@ -529,6 +545,47 @@
 ''', [AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT]);
   }
 
+  test_codeStyle_format_false() {
+    validate('''
+code-style:
+  format: false
+''', []);
+  }
+
+  test_codeStyle_format_invalid() {
+    validate('''
+code-style:
+  format: 80
+''', [AnalysisOptionsWarningCode.UNSUPPORTED_VALUE]);
+  }
+
+  test_codeStyle_format_true() {
+    validate('''
+code-style:
+  format: true
+''', []);
+  }
+
+  test_codeStyle_unsupported_list() {
+    validate('''
+code-style:
+  - format
+''', [AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT]);
+  }
+
+  test_codeStyle_unsupported_scalar() {
+    validate('''
+code-style: format
+''', [AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT]);
+  }
+
+  test_codeStyle_unsupportedOption() {
+    validate('''
+code-style:
+  not_supported: true
+''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES]);
+  }
+
   test_linter_supported_rules() {
     Registry.ruleRegistry.register(TestRule());
     validate('''
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 0b8f745..db57448 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -248,7 +248,7 @@
   }
 
   test_conversionAndDynamicInvoke() async {
-    newFile('$testPackageLibPath/helper.dart', content: r'''
+    newFile2('$testPackageLibPath/helper.dart', r'''
 dynamic toString = (int x) => x + 42;
 dynamic hashCode = "hello";
 ''');
@@ -2787,7 +2787,7 @@
   }
 
   test_privateOverride() async {
-    newFile('$testPackageLibPath/helper.dart', content: r'''
+    newFile2('$testPackageLibPath/helper.dart', r'''
 import 'test.dart' as main;
 
 class Base {
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index 279763f..e04aa1c 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -2579,11 +2579,11 @@
   }
 
   test_inferConstsTransitively() async {
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 const b1 = 2;
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 import 'b.dart';
 const a1 = m2;
@@ -2740,7 +2740,7 @@
   }
 
   test_inferFromVariablesInCycleLibsWhenFlagIsOn() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 var x = 2; // ok to infer
 ''');
@@ -2759,7 +2759,7 @@
   }
 
   test_inferFromVariablesInCycleLibsWhenFlagIsOn2() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 class A { static var x = 2; }
 ''');
@@ -2778,7 +2778,7 @@
   }
 
   test_inferFromVariablesInNonCycleImportsWithFlag() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 var x = 2;
 ''');
 
@@ -2797,7 +2797,7 @@
   }
 
   test_inferFromVariablesInNonCycleImportsWithFlag2() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 class A { static var x = 2; }
 ''');
 
@@ -3352,11 +3352,11 @@
   }
 
   test_inferStaticsTransitively() async {
-    newFile('$testPackageLibPath/b.dart', content: '''
+    newFile2('$testPackageLibPath/b.dart', '''
 final b1 = 2;
 ''');
 
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 import 'b.dart';
 final a1 = m2;
@@ -3396,7 +3396,7 @@
   }
 
   test_inferStaticsTransitively3() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 const a1 = 3;
 const a2 = 4;
 class A {
@@ -3426,7 +3426,7 @@
   }
 
   test_inferStaticsWithMethodInvocations() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 m3(String a, String b, [a1,a2]) {}
 ''');
 
@@ -3566,7 +3566,7 @@
   }
 
   test_inferTypeRegardlessOfDeclarationOrderOrCycles() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 
 class B extends A { }
@@ -3694,7 +3694,7 @@
 
   test_inferTypesOnGenericInstantiationsInLibraryCycle() async {
     // Note: this is a regression test for bug #48.
-    newFile('$testPackageLibPath/a.dart', content: '''
+    newFile2('$testPackageLibPath/a.dart', '''
 import 'test.dart';
 abstract class I<E> {
   A<E> m(a, String f(v, int e));
diff --git a/pkg/analyzer/test/src/workspace/basic_test.dart b/pkg/analyzer/test/src/workspace/basic_test.dart
index 2d08778..c239300 100644
--- a/pkg/analyzer/test/src/workspace/basic_test.dart
+++ b/pkg/analyzer/test/src/workspace/basic_test.dart
@@ -32,7 +32,7 @@
   }
 
   void test_contains_differentWorkspace() {
-    newFile('/workspace2/project/lib/file.dart');
+    newFile2('/workspace2/project/lib/file.dart', '');
 
     var package = findPackage('/workspace/project/lib/code.dart')!;
     expect(
@@ -42,7 +42,7 @@
   }
 
   void test_contains_sameWorkspace() {
-    newFile('/workspace/project/lib/file2.dart');
+    newFile2('/workspace/project/lib/file2.dart', '');
 
     var package = findPackage('/workspace/project/lib/code.dart')!;
     expect(
@@ -60,7 +60,7 @@
   }
 
   void test_findPackageFor_includedFile() {
-    newFile('/workspace/project/lib/file.dart');
+    newFile2('/workspace/project/lib/file.dart', '');
 
     var package = findPackage('/workspace/project/lib/file.dart')!;
     expect(package, isNotNull);
@@ -69,7 +69,7 @@
   }
 
   void test_findPackageFor_unrelatedFile() {
-    newFile('/workspace/project/lib/file.dart');
+    newFile2('/workspace/project/lib/file.dart', '');
 
     var package = findPackage('/workspace2/project/lib/file.dart');
     expect(package, isNull);
diff --git a/pkg/analyzer/test/src/workspace/bazel_test.dart b/pkg/analyzer/test/src/workspace/bazel_test.dart
index bdfa730..7c01cc1 100644
--- a/pkg/analyzer/test/src/workspace/bazel_test.dart
+++ b/pkg/analyzer/test/src/workspace/bazel_test.dart
@@ -27,14 +27,14 @@
   late final BazelFileUriResolver resolver;
 
   void setUp() {
-    newFile('/workspace/WORKSPACE');
+    newFile2('/workspace/WORKSPACE', '');
     newFolder('/workspace/bazel-genfiles');
     workspace =
         BazelWorkspace.find(resourceProvider, convertPath('/workspace'))!;
     resolver = BazelFileUriResolver(workspace);
-    newFile('/workspace/test.dart');
-    newFile('/workspace/bazel-bin/gen1.dart');
-    newFile('/workspace/bazel-genfiles/gen2.dart');
+    newFile2('/workspace/test.dart', '');
+    newFile2('/workspace/bazel-bin/gen1.dart', '');
+    newFile2('/workspace/bazel-genfiles/gen2.dart', '');
     expect(workspace.isBazel, isTrue);
   }
 
@@ -560,7 +560,7 @@
       if (path.endsWith('/')) {
         newFolder(path.substring(0, path.length - 1));
       } else {
-        newFile(path);
+        newFile2(path, '');
       }
     }
     workspace =
@@ -635,10 +635,10 @@
 
   void test_contains_samePackage() {
     _setUpPackage();
-    final targetFile = newFile('/ws/some/code/lib/code2.dart');
-    final targetFile2 = newFile('/ws/some/code/lib/src/code3.dart');
-    final targetBinFile = newFile('/ws/some/code/bin/code.dart');
-    final targetTestFile = newFile('/ws/some/code/test/code_test.dart');
+    final targetFile = newFile2('/ws/some/code/lib/code2.dart', '');
+    final targetFile2 = newFile2('/ws/some/code/lib/src/code3.dart', '');
+    final targetBinFile = newFile2('/ws/some/code/bin/code.dart', '');
+    final targetTestFile = newFile2('/ws/some/code/test/code_test.dart', '');
 
     expect(package!.contains(_testSource(targetFile.path)), isTrue);
     expect(package!.contains(_testSource(targetFile2.path)), isTrue);
@@ -648,8 +648,8 @@
 
   void test_contains_samePackage_summarySource() {
     _setUpPackage();
-    newFile('/ws/some/code/lib/code2.dart');
-    newFile('/ws/some/code/lib/src/code3.dart');
+    newFile2('/ws/some/code/lib/code2.dart', '');
+    newFile2('/ws/some/code/lib/src/code3.dart', '');
     final file2Source = _inSummarySource('package:some.code/code2.dart');
     final file3Source = _inSummarySource('package:some.code/src/code2.dart');
 
@@ -659,8 +659,8 @@
 
   void test_contains_subPackage() {
     _setUpPackage();
-    newFile('/ws/some/code/testing/BUILD');
-    newFile('/ws/some/code/testing/lib/testing.dart');
+    newFile2('/ws/some/code/testing/BUILD', '');
+    newFile2('/ws/some/code/testing/lib/testing.dart', '');
 
     expect(
       package!.contains(
@@ -701,8 +701,8 @@
   void test_findPackageFor_inBlazeOut_notPackage() {
     var path =
         convertPath('/ws/blaze-out/k8-opt/bin/news/lib/news_base.pb.dart');
-    newFile('/ws/news/BUILD', content: '');
-    newFile(path, content: '');
+    newFile2('/ws/news/BUILD', '');
+    newFile2(path, '');
     workspace = BazelWorkspace.find(resourceProvider, path)!;
 
     var package = workspace.findPackageFor(path);
@@ -718,7 +718,7 @@
       resourceProvider,
       convertPath('/ws/some/code'),
     )!;
-    final targetFile = newFile('/ws/some/code/lib/code.dart');
+    final targetFile = newFile2('/ws/some/code/lib/code.dart', '');
 
     package = workspace.findPackageFor(targetFile.path);
     expect(package, isNull);
@@ -811,7 +811,7 @@
       if (path.endsWith('/')) {
         newFolder(path.substring(0, path.length - 1));
       } else {
-        newFile(path);
+        newFile2(path, '');
       }
     }
   }
@@ -1055,7 +1055,7 @@
 
   void test_find_null_symlinkPrefix() {
     String prefix = BazelWorkspace.defaultSymlinkPrefix;
-    newFile('/workspace/WORKSPACE');
+    newFile2('/workspace/WORKSPACE', '');
     var workspace = BazelWorkspace.find(
         resourceProvider, convertPath('/workspace/my/module'))!;
     expect(workspace.root, convertPath('/workspace'));
@@ -1126,7 +1126,7 @@
       if (path.endsWith('/')) {
         newFolder(path.substring(0, path.length - 1));
       } else {
-        newFile(path);
+        newFile2(path, '');
       }
     }
   }
diff --git a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
index 84faee8..23817f4 100644
--- a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
+++ b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
@@ -280,7 +280,7 @@
       if (path.endsWith('/')) {
         newFolder(path.substring(0, path.length - 1));
       } else {
-        newFile(path);
+        newFile2(path, '');
       }
     }
   }
diff --git a/pkg/analyzer/test/src/workspace/gn_test.dart b/pkg/analyzer/test/src/workspace/gn_test.dart
index 1672d60..4b041cb 100644
--- a/pkg/analyzer/test/src/workspace/gn_test.dart
+++ b/pkg/analyzer/test/src/workspace/gn_test.dart
@@ -20,8 +20,8 @@
 class GnWorkspacePackageTest with ResourceProviderMixin {
   void test_contains_differentPackageInWorkspace() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    var targetFile = newFile('/ws/some/code/lib/code.dart');
+    newFile2('/ws/some/code/BUILD.gn', '');
+    var targetFile = newFile2('/ws/some/code/lib/code.dart', '');
 
     var package = workspace.findPackageFor(targetFile.path)!;
     // A file that is _not_ in this package is not required to have a BUILD.gn
@@ -34,8 +34,8 @@
 
   void test_contains_differentWorkspace() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    var targetFile = newFile('/ws/some/code/lib/code.dart');
+    newFile2('/ws/some/code/BUILD.gn', '');
+    var targetFile = newFile2('/ws/some/code/lib/code.dart', '');
 
     var package = workspace.findPackageFor(targetFile.path)!;
     expect(package.contains(TestSource(convertPath('/ws2/some/file.dart'))),
@@ -44,12 +44,12 @@
 
   void test_contains_samePackage() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    var targetFile = newFile('/ws/some/code/lib/code.dart');
-    var targetFile2 = newFile('/ws/some/code/lib/code2.dart');
-    var targetFile3 = newFile('/ws/some/code/lib/src/code3.dart');
-    var targetBinFile = newFile('/ws/some/code/bin/code.dart');
-    var targetTestFile = newFile('/ws/some/code/test/code_test.dart');
+    newFile2('/ws/some/code/BUILD.gn', '');
+    var targetFile = newFile2('/ws/some/code/lib/code.dart', '');
+    var targetFile2 = newFile2('/ws/some/code/lib/code2.dart', '');
+    var targetFile3 = newFile2('/ws/some/code/lib/src/code3.dart', '');
+    var targetBinFile = newFile2('/ws/some/code/bin/code.dart', '');
+    var targetTestFile = newFile2('/ws/some/code/test/code_test.dart', '');
 
     var package = workspace.findPackageFor(targetFile.path)!;
     expect(package.contains(TestSource(targetFile2.path)), isTrue);
@@ -60,10 +60,10 @@
 
   void test_contains_subPackage() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    newFile('/ws/some/code/lib/code.dart');
-    newFile('/ws/some/code/testing/BUILD.gn');
-    newFile('/ws/some/code/testing/lib/testing.dart');
+    newFile2('/ws/some/code/BUILD.gn', '');
+    newFile2('/ws/some/code/lib/code.dart', '');
+    newFile2('/ws/some/code/testing/BUILD.gn', '');
+    newFile2('/ws/some/code/testing/lib/testing.dart', '');
 
     var package =
         workspace.findPackageFor(convertPath('/ws/some/code/lib/code.dart'))!;
@@ -75,8 +75,8 @@
 
   void test_findPackageFor_buildFileExists() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    var targetFile = newFile('/ws/some/code/lib/code.dart');
+    newFile2('/ws/some/code/BUILD.gn', '');
+    var targetFile = newFile2('/ws/some/code/lib/code.dart', '');
 
     var package = workspace.findPackageFor(targetFile.path)!;
     expect(package.root, convertPath('/ws/some/code'));
@@ -85,7 +85,7 @@
 
   void test_findPackageFor_missingBuildFile() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/lib/code.dart');
+    newFile2('/ws/some/code/lib/code.dart', '');
 
     var package =
         workspace.findPackageFor(convertPath('/ws/some/code/lib/code.dart'));
@@ -94,8 +94,8 @@
 
   void test_packagesAvailableTo() {
     GnWorkspace workspace = _buildStandardGnWorkspace();
-    newFile('/ws/some/code/BUILD.gn');
-    var libraryPath = newFile('/ws/some/code/lib/code.dart').path;
+    newFile2('/ws/some/code/BUILD.gn', '');
+    var libraryPath = newFile2('/ws/some/code/lib/code.dart', '').path;
     var package = workspace.findPackageFor(libraryPath)!;
     var packageMap = package.packagesAvailableTo(libraryPath);
     expect(packageMap.keys, unorderedEquals(['p1', 'workspace']));
@@ -104,10 +104,10 @@
   GnWorkspace _buildStandardGnWorkspace() {
     newFolder('/ws/.jiri_root');
     String buildDir = convertPath('out/debug-x87_128');
-    newFile('/ws/.fx-build-dir', content: '$buildDir\n');
-    newFile(
+    newFile2('/ws/.fx-build-dir', '$buildDir\n');
+    newFile2(
         '/ws/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -160,9 +160,11 @@
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
     String buildDir = convertPath('out/debug-x87_128');
-    newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
-    newFile(
-        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json');
+    newFile2('/workspace/.fx-build-dir', '$buildDir\n');
+    newFile2(
+      '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+      '',
+    );
     var workspace = GnWorkspace.find(
         resourceProvider, convertPath('/workspace/some/code'))!;
     expect(workspace.root, convertPath('/workspace'));
@@ -173,12 +175,12 @@
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
     String buildDir = convertPath('out/debug-x87_128');
-    newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
+    newFile2('/workspace/.fx-build-dir', '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -202,12 +204,12 @@
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
     String buildDir = convertPath('/workspace/out/debug-x87_128');
-    newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
+    newFile2('/workspace/.fx-build-dir', '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -232,9 +234,9 @@
     newPubspecYamlFile('/workspace/some/code', '');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -257,12 +259,12 @@
     newFolder('/workspace/.jiri_root');
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
-    newFile('/workspace/.fx-build-dir', content: '');
+    newFile2('/workspace/.fx-build-dir', '');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -286,12 +288,12 @@
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
     String buildDir = convertPath('out/release-y22_256');
-    newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
+    newFile2('/workspace/.fx-build-dir', '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -305,9 +307,9 @@
     String otherPackageLocation = convertPath('/workspace/here/too');
     Uri otherPackageUri =
         resourceProvider.pathContext.toUri(otherPackageLocation);
-    newFile(
+    newFile2(
         '/workspace/out/release-y22_256/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -331,12 +333,12 @@
     newFolder('/workspace/some/code');
     newPubspecYamlFile('/workspace/some/code', '');
     String buildDir = convertPath('out/debug-x87_128');
-    newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
+    newFile2('/workspace/.fx-build-dir', '$buildDir\n');
     String packageOneLocation = convertPath('/workspace/this/is/the/package');
     Uri packageOneUri = resourceProvider.pathContext.toUri(packageOneLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
@@ -350,9 +352,9 @@
     String packageTwoLocation =
         convertPath('/workspace/this/is/the/other/package');
     Uri packageTwoUri = resourceProvider.pathContext.toUri(packageTwoLocation);
-    newFile(
+    newFile2(
         '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_test_package_config.json',
-        content: '''{
+        '''{
   "configVersion": 2,
   "packages": [
     {
diff --git a/pkg/analyzer/test/src/workspace/package_build_test.dart b/pkg/analyzer/test/src/workspace/package_build_test.dart
index f262445..5300110 100644
--- a/pkg/analyzer/test/src/workspace/package_build_test.dart
+++ b/pkg/analyzer/test/src/workspace/package_build_test.dart
@@ -58,8 +58,8 @@
       convertPath('/workspace'),
     )!;
     resolver = PackageBuildFileUriResolver(workspace);
-    newFile('/workspace/test.dart');
-    newFile('/workspace/.dart_tool/build/generated/project/gen.dart');
+    newFile2('/workspace/test.dart', '');
+    newFile2('/workspace/.dart_tool/build/generated/project/gen.dart', '');
     expect(workspace.isBazel, isFalse);
   }
 
@@ -134,7 +134,7 @@
   Uri addPackageSource(String path, String uriStr, {bool create = true}) {
     Uri uri = Uri.parse(uriStr);
     final file = create
-        ? newFile(path)
+        ? newFile2(path, '')
         : resourceProvider.getResource(convertPath(path)) as File;
     packageUriResolver.add(uri, file);
     return uri;
@@ -199,7 +199,7 @@
       if (path.endsWith('/')) {
         newFolder(path.substring(0, path.length - 1));
       } else {
-        newFile(path);
+        newFile2(path, '');
       }
     }
     workspace = PackageBuildWorkspace.find(
@@ -283,10 +283,10 @@
 
   test_contains_fileUri_generated() {
     var myGeneratedPath = '$myPackageGeneratedPath/my/test/a.dart';
-    newFile(myGeneratedPath, content: '');
+    newFile2(myGeneratedPath, '');
 
     var fooGeneratedPath = '$myPackageGeneratedPath/foo/test/a.dart';
-    newFile(fooGeneratedPath, content: '');
+    newFile2(fooGeneratedPath, '');
 
     expect(
       myPackage.contains(
@@ -401,8 +401,8 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final libFile =
-        newFile('/workspace/.dart_tool/build/generated/project/lib/file.dart');
+    final libFile = newFile2(
+        '/workspace/.dart_tool/build/generated/project/lib/file.dart', '');
     expect(
         workspace.builtFile(convertPath('lib/file.dart'), 'project'), libFile);
   }
@@ -414,7 +414,7 @@
         _createWorkspace('/workspace', ['project', 'foo']);
 
     final libFile =
-        newFile('/workspace/.dart_tool/build/generated/foo/lib/file.dart');
+        newFile2('/workspace/.dart_tool/build/generated/foo/lib/file.dart', '');
     expect(workspace.builtFile(convertPath('lib/file.dart'), 'foo'), libFile);
   }
 
@@ -427,7 +427,7 @@
         _createWorkspace('/workspace', ['project', 'foo']);
 
     // Create a generated file in package:bar.
-    newFile('/workspace/.dart_tool/build/generated/bar/lib/file.dart');
+    newFile2('/workspace/.dart_tool/build/generated/bar/lib/file.dart', '');
 
     // Bar not in packages, file should not be returned.
     expect(workspace.builtFile('lib/file.dart', 'bar'), isNull);
@@ -576,7 +576,7 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final binFile = newFile('/workspace/bin/file.dart');
+    final binFile = newFile2('/workspace/bin/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/bin/file.dart')), binFile);
   }
@@ -587,8 +587,8 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final binFile =
-        newFile('/workspace/.dart_tool/build/generated/project/bin/file.dart');
+    final binFile = newFile2(
+        '/workspace/.dart_tool/build/generated/project/bin/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/bin/file.dart')), binFile);
   }
@@ -599,8 +599,8 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final libFile =
-        newFile('/workspace/.dart_tool/build/generated/project/lib/file.dart');
+    final libFile = newFile2(
+        '/workspace/.dart_tool/build/generated/project/lib/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/lib/file.dart')), libFile);
   }
@@ -611,7 +611,7 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final testFile = newFile('/workspace/test/file.dart');
+    final testFile = newFile2('/workspace/test/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/test/file.dart')), testFile);
   }
@@ -622,8 +622,8 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final testFile =
-        newFile('/workspace/.dart_tool/build/generated/project/test/file.dart');
+    final testFile = newFile2(
+        '/workspace/.dart_tool/build/generated/project/test/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/test/file.dart')), testFile);
   }
@@ -634,7 +634,7 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final webFile = newFile('/workspace/web/file.dart');
+    final webFile = newFile2('/workspace/web/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/web/file.dart')), webFile);
   }
@@ -645,8 +645,8 @@
     PackageBuildWorkspace workspace =
         _createWorkspace('/workspace', ['project']);
 
-    final webFile =
-        newFile('/workspace/.dart_tool/build/generated/project/web/file.dart');
+    final webFile = newFile2(
+        '/workspace/.dart_tool/build/generated/project/web/file.dart', '');
     expect(
         workspace.findFile(convertPath('/workspace/web/file.dart')), webFile);
   }
diff --git a/pkg/analyzer/test/src/workspace/pub_test.dart b/pkg/analyzer/test/src/workspace/pub_test.dart
index 5f68d58..b9ccd89 100644
--- a/pkg/analyzer/test/src/workspace/pub_test.dart
+++ b/pkg/analyzer/test/src/workspace/pub_test.dart
@@ -32,7 +32,7 @@
   }
 
   void test_contains_differentWorkspace() {
-    newFile('/workspace2/project/lib/file.dart');
+    newFile2('/workspace2/project/lib/file.dart', '');
 
     var package = findPackage('/workspace/project/lib/code.dart')!;
     expect(
@@ -42,7 +42,7 @@
   }
 
   void test_contains_sameWorkspace() {
-    newFile('/workspace/project/lib/file2.dart');
+    newFile2('/workspace/project/lib/file2.dart', '');
 
     var package = findPackage('/workspace/project/lib/code.dart')!;
     expect(
@@ -60,7 +60,7 @@
   }
 
   void test_findPackageFor_includedFile() {
-    newFile('/workspace/project/lib/file.dart');
+    newFile2('/workspace/project/lib/file.dart', '');
 
     var package = findPackage('/workspace/project/lib/file.dart')!;
     expect(package.root, convertPath('/workspace'));
@@ -68,7 +68,7 @@
   }
 
   void test_findPackageFor_unrelatedFile() {
-    newFile('/workspace/project/lib/file.dart');
+    newFile2('/workspace/project/lib/file.dart', '');
 
     var package = findPackage('/workspace2/project/lib/file.dart');
     expect(package, isNull);
diff --git a/pkg/analyzer/test/util/feature_sets.dart b/pkg/analyzer/test/util/feature_sets.dart
index 85a4cd9..53627ba 100644
--- a/pkg/analyzer/test/util/feature_sets.dart
+++ b/pkg/analyzer/test/util/feature_sets.dart
@@ -37,8 +37,9 @@
   static final FeatureSet latestWithExperiments = FeatureSet.fromEnableFlags2(
     sdkLanguageVersion: ExperimentStatus.currentVersion,
     flags: [
-      EnableString.constructor_tearoffs,
       EnableString.enhanced_enums,
+      EnableString.macros,
+      EnableString.named_arguments_anywhere,
       EnableString.super_parameters,
     ],
   );
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index e56d8b6..f72877b 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -443,14 +443,14 @@
         packageConfigBuilder.add(name: packageName, rootPath: packageRootPath);
 
         String pathInLib = uri.pathSegments.skip(1).join('/');
-        newFile(
+        newFile2(
           '$packageRootPath/lib/$pathInLib',
-          content: auxiliaryFiles[uriStr]!,
+          auxiliaryFiles[uriStr]!,
         );
       } else {
-        newFile(
+        newFile2(
           '$testPackageRootPath/$uriStr',
-          content: auxiliaryFiles[uriStr]!,
+          auxiliaryFiles[uriStr]!,
         );
       }
     }
diff --git a/pkg/analyzer/test/verify_tests_test.dart b/pkg/analyzer/test/verify_tests_test.dart
index e401e59..cd6a480 100644
--- a/pkg/analyzer/test/verify_tests_test.dart
+++ b/pkg/analyzer/test/verify_tests_test.dart
@@ -17,8 +17,7 @@
 }
 
 class _VerifyTests extends VerifyTests {
-  _VerifyTests(String testDirPath, {List<String>? excludedPaths})
-      : super(testDirPath, excludedPaths: excludedPaths);
+  _VerifyTests(String testDirPath) : super(testDirPath);
 
   @override
   bool isExpensive(Resource resource) =>
diff --git a/pkg/analyzer/tool/analysis_driver/inspect_exception.dart b/pkg/analyzer/tool/analysis_driver/inspect_exception.dart
index 2dc63cc..4eda86e 100644
--- a/pkg/analyzer/tool/analysis_driver/inspect_exception.dart
+++ b/pkg/analyzer/tool/analysis_driver/inspect_exception.dart
@@ -36,7 +36,7 @@
   print('');
   print('');
 
-  context.files.forEach((file) {
+  for (var file in context.files) {
     print("=" * 40);
     print('${file.path}');
     print("-" * 40);
@@ -44,5 +44,5 @@
     print('');
     print('');
     print('');
-  });
+  }
 }
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 94268b2..c3070d3 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -1992,6 +1992,93 @@
 var l = const [0];
 {% endprettify %}
 
+### compound_implements_finalizable
+
+_The class '{0}' can't implement Finalizable._
+
+#### Description
+
+The analyzer produces this diagnostic when a subclass of either `Struct`
+or `Union` implements `Finalizable`.
+
+For more information about FFI, see [C interop using dart:ffi][].
+
+#### Example
+
+The following code produces this diagnostic because the class `S`
+implements `Finalizable`:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+class [!S!] extends Struct implements Finalizable {
+  external Pointer notEmpty;
+}
+{% endprettify %}
+
+#### Common fixes
+
+Try removing the implements clause from the class:
+
+{% prettify dart tag=pre+code %}
+import 'dart:ffi';
+
+class S extends Struct {
+  external Pointer notEmpty;
+}
+{% endprettify %}
+
+### concrete_class_has_enum_superinterface
+
+_Concrete classes can't have 'Enum' as a superinterface._
+
+#### Description
+
+The analyzer produces this diagnostic when a concrete class indirectly has
+the class `Enum` as a superinterface.
+
+#### Example
+
+The following code produces this diagnostic because the concrete class `B`
+has `Enum` as a superinterface as a result of implementing `A`:
+
+{% prettify dart tag=pre+code %}
+abstract class A implements Enum {}
+
+class [!B!] implements A {}
+{% endprettify %}
+
+#### Common fixes
+
+If the implemented class isn't the class you intend to implement, then
+change it:
+
+{% prettify dart tag=pre+code %}
+abstract class A implements Enum {}
+
+class B implements C {}
+
+class C {}
+{% endprettify %}
+
+If the implemented class can be changed to not implement `Enum`, then do
+so:
+
+{% prettify dart tag=pre+code %}
+abstract class A {}
+
+class B implements A {}
+{% endprettify %}
+
+If the implemented class can't be changed to not implement `Enum`, then
+remove it from the `implements` clause:
+
+{% prettify dart tag=pre+code %}
+abstract class A implements Enum {}
+
+class B {}
+{% endprettify %}
+
 ### concrete_class_with_abstract_member
 
 _'{0}' must have a method body because '{1}' isn't abstract._
@@ -4237,6 +4324,152 @@
 }
 {% endprettify %}
 
+### enum_constant_with_non_const_constructor
+
+_The invoked constructor isn't a 'const' constructor._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum constant is being
+created using either a factory constructor or a generative constructor
+that isn't marked as being `const`.
+
+#### Example
+
+The following code produces this diagnostic because the enum constant `e`
+is being initialized by a factory constructor:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  [!e!]();
+
+  factory E() => e;
+}
+{% endprettify %}
+
+#### Common fixes
+
+Use a generative constructor marked as `const`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e._();
+
+  factory E() => e;
+
+  const E._();
+}
+{% endprettify %}
+
+### enum_mixin_with_instance_variable
+
+_Mixins applied to enums can't have instance variables._
+
+#### Description
+
+The analyzer produces this diagnostic when a mixin that's applied to an
+enum declares one or more instance variables. This isn't allowed because
+the enum constants are constant, and there isn't any way for the
+constructor in the enum to initialize any of the mixin's fields.
+
+#### Example
+
+The following code produces this diagnostic because the mixin `M` defines
+the instance field `x`:
+
+{% prettify dart tag=pre+code %}
+mixin M {
+  int x = 0;
+}
+
+enum E with [!M!] {
+  a
+}
+{% endprettify %}
+
+#### Common fixes
+
+If you need to apply the mixin, then change all instance fields into
+getter and setter pairs and implement them in the enum if necessary:
+
+{% prettify dart tag=pre+code %}
+mixin M {
+  int get x => 0;
+}
+
+enum E with M {
+  a
+}
+{% endprettify %}
+
+If you don't need to apply the mixin, then remove it:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  a
+}
+{% endprettify %}
+
+### enum_with_abstract_member
+
+_'{0}' must have a method body because '{1}' is an enum._
+
+#### Description
+
+The analyzer produces this diagnostic when a member of an enum is found
+that doesn't have a concrete implementation. Enums aren't allowed to
+contain abstract members.
+
+#### Example
+
+The following code produces this diagnostic because `m` is an abstract
+method and `E` is an enum:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  [!void m();!]
+}
+{% endprettify %}
+
+#### Common fixes
+
+Provide an implementation for the member:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  void m() {}
+}
+{% endprettify %}
+
+### enum_with_name_values
+
+_The name 'values' is not a valid name for an enum._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum is declared to have the
+name `values`. This isn't allowed because the enum has an implicit static
+field named `values`, and the two would collide.
+
+#### Example
+
+The following code produces this diagnostic because there's an enum
+declaration that has the name `values`:
+
+{% prettify dart tag=pre+code %}
+enum [!values!] {
+  c
+}
+{% endprettify %}
+
+#### Common fixes
+
+Rename the enum to something other than `values`.
+
 ### equal_elements_in_const_set
 
 _Two elements in a constant set literal can't be equal._
@@ -6281,6 +6514,122 @@
 int f() => 0;
 {% endprettify %}
 
+### illegal_concrete_enum_member
+
+_A concrete instance member named '{0}' can't be declared in a class that
+implements 'Enum'._
+
+_A concrete instance member named '{0}' can't be inherited from '{1}' in a class
+that implements 'Enum'._
+
+#### Description
+
+The analyzer produces this diagnostic when either an enum declaration, a
+class that implements `Enum`, or a mixin with a superclass constraint of
+`Enum`, declares or inherits a concrete instance member named either
+`index`, `hashCode`, or `==`.
+
+#### Examples
+
+The following code produces this diagnostic because the enum `E` declares
+an instance getter named `index`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  v;
+
+  int get [!index!] => 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `C`, which
+implements `Enum`, declares an instance field named `hashCode`:
+
+{% prettify dart tag=pre+code %}
+abstract class C implements Enum {
+  int [!hashCode!] = 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `C`, which
+indirectly implements `Enum` through the class `A`, declares an instance
+getter named `hashCode`:
+
+{% prettify dart tag=pre+code %}
+abstract class A implements Enum {}
+
+abstract class C implements A {
+  int get [!hashCode!] => 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the mixin `M`, which
+has `Enum` in the `on` clause, declares an explicit operator named `==`:
+
+{% prettify dart tag=pre+code %}
+mixin M on Enum {
+  bool operator [!==!](Object? other) => false;
+}
+{% endprettify %}
+
+#### Common fixes
+
+Rename the conflicting member:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  v;
+
+  int get getIndex => 0;
+}
+{% endprettify %}
+
+### illegal_enum_values
+
+_An instance member named 'values' can't be declared in a class that implements
+'Enum'._
+
+_An instance member named 'values' can't be inherited from '{0}' in a class that
+implements 'Enum'._
+
+#### Description
+
+The analyzer produces this diagnostic when either a class that implements
+`Enum` or a mixin with a superclass constraint of `Enum` has an instance
+member named `values`.
+
+#### Examples
+
+The following code produces this diagnostic because the class `C`, which
+implements `Enum`, declares an instance field named `values`:
+
+{% prettify dart tag=pre+code %}
+abstract class C implements Enum {
+  int get [!values!] => 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the class `B`, which
+implements `Enum`, inherits an instance method named `values` from `A`:
+
+{% prettify dart tag=pre+code %}
+abstract class A {
+  int values() => 0;
+}
+
+abstract class [!B!] extends A implements Enum {}
+{% endprettify %}
+
+#### Common fixes
+
+Change the name of the conflicting member:
+
+{% prettify dart tag=pre+code %}
+abstract class C implements Enum {
+  int get value => 0;
+}
+{% endprettify %}
+
 ### illegal_sync_generator_return_type
 
 _Functions marked 'sync*' must have a return type that is a supertype of
@@ -6420,6 +6769,90 @@
 class B implements A {}
 {% endprettify %}
 
+### implicit_super_initializer_missing_arguments
+
+_The implicitly invoked unnamed constructor from '{0}' has required parameters._
+
+#### Description
+
+The analyzer produces this diagnostic when a constructor implicitly
+invokes the unnamed constructor from the superclass, the unnamed
+constructor of the superclass has a required parameter, and there's no
+super parameter corresponding to the required parameter.
+
+#### Examples
+
+The following code produces this diagnostic because the unnamed
+constructor in the class `B` implicitly invokes the unnamed constructor in
+the class `A`, but the constructor in `A` has a required positional
+parameter named `x`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  [!B!]();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the unnamed
+constructor in the class `B` implicitly invokes the unnamed constructor in
+the class `A`, but the constructor in `A` has a required named parameter
+named `x`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({required int x});
+}
+
+class B extends A {
+  [!B!]();
+}
+{% endprettify %}
+
+#### Common fixes
+
+If you can add a parameter to the constructor in the subclass, then add a
+super parameter corresponding to the required parameter in the superclass'
+constructor. The new parameter can either be required:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({required int x});
+}
+
+class B extends A {
+  B({required super.x});
+}
+{% endprettify %}
+
+or it can be optional:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({required int x});
+}
+
+class B extends A {
+  B({super.x = 0});
+}
+{% endprettify %}
+
+If you can't add a parameter to the constructor in the subclass, then add
+an explicit super constructor invocation with the required argument:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(0);
+}
+{% endprettify %}
+
 ### implicit_this_reference_in_initializer
 
 _The instance member '{0}' can't be accessed in an initializer._
@@ -8364,6 +8797,62 @@
 }
 {% endprettify %}
 
+### invalid_reference_to_generative_enum_constructor
+
+_Generative enum constructors can only be used as targets of redirection._
+
+#### Description
+
+The analyzer produces this diagnostic when a generative constructor
+defined on an enum is used anywhere other than to create one of the enum
+constants or as the target of a redirection from another constructor in
+the same enum.
+
+#### Example
+
+The following code produces this diagnostic because the constructor for
+`E` is being used to create an instance in the function `f`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  a(0);
+
+  const E(int x);
+}
+
+E f() => const [!E!](2); 
+{% endprettify %}
+
+#### Common fixes
+
+If there's an enum constant with the same value, or if you add such a
+constant, then reference the constant directly:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  a(0), b(2);
+
+  const E(int x);
+}
+
+E f() => E.b; 
+{% endprettify %}
+
+If you need to use a constructor invocation, then use a factory
+constructor:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  a(0);
+
+  const E(int x);
+
+  factory E.c(int x) => a;
+}
+
+E f() => E.c(2);
+{% endprettify %}
+
 ### invalid_reference_to_this
 
 _Invalid reference to 'this' expression._
@@ -8455,6 +8944,90 @@
 }
 {% endprettify %}
 
+### invalid_super_formal_parameter_location
+
+_Super parameters can only be used in non-redirecting generative constructors._
+
+#### Description
+
+The analyzer produces this diagnostic when a super parameter is used
+anywhere other than a non-redirecting generative constructor.
+
+#### Examples
+
+The following code produces this diagnostic because the super parameter
+`x` is in a redirecting generative constructor:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B.b([!super!].x) : this._();
+  B._() : super(0);
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the super parameter
+`x` isn't in a generative constructor:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class C extends A {
+  factory C.c([!super!].x) => C._();
+  C._() : super(0);
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the super parameter
+`x` is in a method:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class D extends A {
+  D() : super(0);
+
+  void m([!super!].x) {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the function containing the super parameter can be changed to be a
+non-redirecting generative constructor, then do so:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B.b(super.x);
+}
+{% endprettify %}
+
+If the function containing the super parameter can't be changed to be a
+non-redirecting generative constructor, then remove the `super`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class D extends A {
+  D() : super(0);
+
+  void m(int x) {}
+}
+{% endprettify %}
+
 ### invalid_type_argument_in_const_literal
 
 _Constant list literals can't include a type parameter as a type argument, such
@@ -11531,6 +12104,83 @@
 void f() => const C();
 {% endprettify %}
 
+### non_const_generative_enum_constructor
+
+_Generative enum constructors must be 'const'._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum declaration contains a
+generative constructor that isn't marked as `const`.
+
+#### Example
+
+The following code produces this diagnostic because the constructor in `E`
+isn't marked as being `const`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  [!E!]();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Add the `const` keyword before the constructor:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  const E();
+}
+{% endprettify %}
+
+### non_final_field_in_enum
+
+_Enums can only declare final fields._
+
+#### Description
+
+The analyzer produces this diagnostic when an instance field in an enum
+isn't marked as `final`.
+
+#### Example
+
+The following code produces this diagnostic because the field `f` isn't a
+final field:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c;
+
+  int [!f!] = 0;
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the field must be defined for the enum, then mark the field as being
+`final`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c;
+
+  final int f = 0;
+}
+{% endprettify %}
+
+If the field can be removed, then remove it:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c
+}
+{% endprettify %}
+
 ### non_generative_constructor
 
 _The generative constructor '{0}' is expected, but a factory was found._
@@ -13231,6 +13881,70 @@
 
 If the path is wrong, then replace it with the correct path.
 
+### positional_super_formal_parameter_with_positional_argument
+
+_Positional super parameters can't be used when the super constructor invocation
+has a positional argument._
+
+#### Description
+
+The analyzer produces this diagnostic when some, but not all, of the
+positional parameters provided to the constructor of the superclass are
+using a super parameter.
+
+Positional super parameters are associated with positional parameters in
+the super constructor by their index. That is, the first super parameter
+is associated with the first positional parameter in the super
+constructor, the second with the second, and so on. The same is true for
+positional arguments. Having both positional super parameters and
+positional arguments means that there are two values associated with the
+same parameter in the superclass's constructor, and hence isn't allowed.
+
+#### Example
+
+The following code produces this diagnostic because the constructor
+`B.new` is using a super parameter to pass one of the required positional
+parameters to the super constructor in `A`, but is explicitly passing the
+other in the super constructor invocation:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x, int y);
+}
+
+class B extends A {
+  B(int x, super.[!y!]) : super(x);
+}
+{% endprettify %}
+
+#### Common fixes
+
+If all the positional parameters can be super parameters, then convert the
+normal positional parameters to be super parameters:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x, int y);
+}
+
+class B extends A {
+  B(super.x, super.y);
+}
+{% endprettify %}
+
+If some positional parameters can't be super parameters, then convert the
+super parameters to be normal parameters:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x, int y);
+}
+
+class B extends A {
+  B(int x, int y) : super(x, y);
+}
+{% endprettify %}
+
 ### prefix_collides_with_top_level_member
 
 _The name '{0}' is already used as an import prefix and can't be used to name a
@@ -15561,6 +16275,220 @@
 class C extends Object {}
 {% endprettify %}
 
+### super_formal_parameter_type_is_not_subtype_of_associated
+
+_The type '{0}' of this parameter isn't a subtype of the type '{1}' of the
+associated super constructor parameter._
+
+#### Description
+
+The analyzer produces this diagnostic when the type of a super parameter
+isn't a subtype of the corresponding parameter from the super constructor.
+
+#### Example
+
+The following code produces this diagnostic because the type of the super
+parameter `x` in the constructor for `B` isn't a subtype of the parameter
+`x` in the constructor for `A`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(num x);
+}
+
+class B extends A {
+  B(String super.[!x!]);
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the type of the super parameter can be the same as the parameter from
+the super constructor, then remove the type annotation from the super
+parameter (if the type is implicit, it is inferred from the type in the
+super constructor):
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(num x);
+}
+
+class B extends A {
+  B(super.x);
+}
+{% endprettify %}
+
+If the type of the super parameter can be a subtype of the corresponding
+parameter's type, then change the type of the super parameter:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(num x);
+}
+
+class B extends A {
+  B(int super.x);
+}
+{% endprettify %}
+
+If the type of the super parameter can't be changed, then use a normal
+parameter instead of a super parameter:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(num x);
+}
+
+class B extends A {
+  B(String x) : super(x.length);
+}
+{% endprettify %}
+
+### super_formal_parameter_without_associated_named
+
+_No associated named super constructor parameter._
+
+#### Description
+
+The analyzer produces this diagnostic when there's a named super parameter
+in a constructor and the implicitly or explicitly invoked super
+constructor doesn't have a named parameter with the same name.
+
+Named super parameters are associated by name with named parameters in the
+super constructor.
+
+#### Example
+
+The following code produces this diagnostic because the constructor in `A`
+doesn't have a parameter named `y`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({int? x});
+}
+
+class B extends A {
+  B({super.[!y!]});
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the super parameter should be associated with an existing parameter
+from the super constructor, then change the name to match the name of the
+corresponding parameter:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({int? x});
+}
+
+class B extends A {
+  B({super.x});
+}
+{% endprettify %}
+
+If the super parameter should be associated with a parameter that hasn't
+yet been added to the super constructor, then add it:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({int? x, int? y});
+}
+
+class B extends A {
+  B({super.y});
+}
+{% endprettify %}
+
+If the super parameter doesn't correspond to a named parameter from the
+super constructor, then change it to be a normal parameter:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({int? x});
+}
+
+class B extends A {
+  B({int? y});
+}
+{% endprettify %}
+
+### super_formal_parameter_without_associated_positional
+
+_No associated positional super constructor parameter._
+
+#### Description
+
+The analyzer produces this diagnostic when there's a positional super
+parameter in a constructor and the implicitly or explicitly invoked super
+constructor doesn't have a positional parameter at the corresponding
+index.
+
+Positional super parameters are associated with positional parameters in
+the super constructor by their index. That is, the first super parameter
+is associated with the first positional parameter in the super
+constructor, the second with the second, and so on.
+
+#### Examples
+
+The following code produces this diagnostic because the constructor in `B`
+has a positional super parameter, but there's no positional parameter in
+the super constructor in `A`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A({int? x});
+}
+
+class B extends A {
+  B(super.[!x!]);
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the constructor in `B`
+has two positional super parameters, but there's only one positional
+parameter in the super constructor in `A`, which means that there's no
+corresponding parameter for `y`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B(super.x, super.[!y!]);
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the super constructor should have a positional parameter corresponding
+to the super parameter, then update the super constructor appropriately:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x, int y);
+}
+
+class B extends A {
+  B(super.x, super.y);
+}
+{% endprettify %}
+
+If the super constructor is correct, or can't be changed, then convert the
+super parameter into a normal parameter:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B(super.x, int y);
+}
+{% endprettify %}
+
 ### super_invocation_not_last
 
 <a id="invalid_super_invocation" aria-hidden="true"></a>_(Previously known as `invalid_super_invocation`)_
@@ -15603,6 +16531,40 @@
 }
 {% endprettify %}
 
+### super_in_enum_constructor
+
+_The enum constructor can't have a 'super' initializer._
+
+#### Description
+
+The analyzer produces this diagnostic when the initializer list in a
+constructor in an enum contains an invocation of a super constructor.
+
+#### Example
+
+The following code produces this diagnostic because the constructor in
+the enum `E` has a super constructor invocation in the initializer list:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  const E() : [!super!]();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Remove the super constructor invocation:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e;
+
+  const E();
+}
+{% endprettify %}
+
 ### super_in_extension
 
 _The 'super' keyword can't be used in an extension because an extension doesn't
@@ -16544,6 +17506,95 @@
 var e = E.b;
 {% endprettify %}
 
+### undefined_enum_constructor
+
+_The enum doesn't have a constructor named '{0}'._
+
+_The enum doesn't have an unnamed constructor._
+
+#### Description
+
+The analyzer produces this diagnostic when the constructor invoked to
+initialize an enum constant doesn't exist.
+
+#### Examples
+
+The following code produces this diagnostic because the enum constant `c`
+is being initialized by the unnamed constructor, but there's no unnamed
+constructor defined in `E`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  [!c!]();
+
+  const E.x();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the enum constant `c`
+is being initialized by the constructor named `x`, but there's no
+constructor named `x` defined in `E`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c.[!x!]();
+
+  const E.y();
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the enum constant is being initialized by the unnamed constructor and
+one of the named constructors should have been used, then add the name of
+the constructor:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c.x();
+
+  const E.x();
+}
+{% endprettify %}
+
+If the enum constant is being initialized by the unnamed constructor and
+none of the named constructors are appropriate, then define the unnamed
+constructor:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c();
+
+  const E();
+}
+{% endprettify %}
+
+If the enum constant is being initialized by a named constructor and one
+of the existing constructors should have been used, then change the name
+of the constructor being invoked (or remove it if the unnamed constructor
+should be used):
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c.y();
+
+  const E();
+  const E.y();
+}
+{% endprettify %}
+
+If the enum constant is being initialized by a named constructor and none
+of the existing constructors should have been used, then define a
+constructor with the name that was used:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  c.x();
+
+  const E.x();
+}
+{% endprettify %}
+
 ### undefined_extension_getter
 
 _The getter '{0}' isn't defined for the extension '{1}'._
@@ -18283,6 +19334,43 @@
 Either rewrite the code so that the expression has a value or rewrite the
 code so that it doesn't depend on the value.
 
+### values_declaration_in_enum
+
+_A member named 'values' can't be declared in an enum._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum declaration defines a
+member named `values`, whether the member is an enum constant, an instance
+member, or a static member.
+
+Any such member conflicts with the implicit declaration of the static
+getter named `values` that returns a list containing all the enum
+constants.
+
+#### Example
+
+The following code produces this diagnostic because the enum `E` defines
+an instance member named `values`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  v;
+  void [!values!]() {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+Change the name of the conflicting member:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  v;
+  void getValues() {}
+}
+{% endprettify %}
+
 ### variable_type_mismatch
 
 _A value of type '{0}' can't be assigned to a const variable of type '{1}'._
@@ -18486,6 +19574,50 @@
 C f() => C.named();
 {% endprettify %}
 
+### wrong_number_of_type_arguments_enum
+
+_The enum is declared with {0} type parameters, but {1} type arguments were
+given._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum constant in an enum
+that has type parameters is instantiated and type arguments are provided,
+but the number of type arguments isn't the same as the number of type
+parameters.
+
+#### Example
+
+The following code produces this diagnostic because the enum constant `c`
+provides one type argument even though the enum `E` is declared to have
+two type parameters:
+
+{% prettify dart tag=pre+code %}
+enum E<T, U> {
+  c[!<int>!]()
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the number of type parameters is correct, then change the number of
+type arguments to match the number of type parameters:
+
+{% prettify dart tag=pre+code %}
+enum E<T, U> {
+  c<int, String>()
+}
+{% endprettify %}
+
+If the number of type arguments is correct, then change the number of type
+parameters to match the number of type arguments:
+
+{% prettify dart tag=pre+code %}
+enum E<T> {
+  c<int>()
+}
+{% endprettify %}
+
 ### wrong_number_of_type_arguments_extension
 
 _The extension '{0}' is declared with {1} type parameters, but {2} type
diff --git a/pkg/analyzer/tool/messages/error_code_info.dart b/pkg/analyzer/tool/messages/error_code_info.dart
index 038257d..d64f3b7 100644
--- a/pkg/analyzer/tool/messages/error_code_info.dart
+++ b/pkg/analyzer/tool/messages/error_code_info.dart
@@ -474,18 +474,15 @@
     var maxWidth = 80 - 8 /* indentation */ - 2 /* quotes */ - 1 /* comma */;
     final placeholderToIndexMap = computePlaceholderToIndexMap();
     var messageAsCode = convertTemplate(placeholderToIndexMap, problemMessage);
-    out.writeln(_splitText(messageAsCode,
-                maxWidth: maxWidth, firstLineWidth: maxWidth + 4)
-            .map(json.encode)
-            .join('\n') +
-        ',');
+    var messageLines = _splitText(messageAsCode,
+        maxWidth: maxWidth, firstLineWidth: maxWidth + 4);
+    out.writeln('${messageLines.map(json.encode).join('\n')},');
     final correctionMessage = this.correctionMessage;
     if (correctionMessage is String) {
       out.write('correctionMessage: ');
       var code = convertTemplate(placeholderToIndexMap, correctionMessage);
-      out.writeln(
-          _splitText(code, maxWidth: maxWidth).map(json.encode).join('\n') +
-              ',');
+      var codeLines = _splitText(code, maxWidth: maxWidth);
+      out.writeln('${codeLines.map(json.encode).join('\n')},');
     }
     if (hasPublishedDocs) {
       out.writeln('hasPublishedDocs:true,');
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index da7a3af..1445cb9 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/util/sdk.dart';
 
-void main(List<String> args) {
+Future<void> main(List<String> args) async {
   String command;
   String outFilePath;
   String? sdkPath;
@@ -39,7 +39,7 @@
   // Handle commands.
   //
   if (command == 'build' || command == 'build-strong') {
-    _buildSummary(sdkPath, outFilePath);
+    await _buildSummary(sdkPath, outFilePath);
   } else {
     _printUsage();
     return;
@@ -49,10 +49,10 @@
 /// The name of the SDK summaries builder application.
 const BINARY_NAME = "build_sdk_summaries";
 
-void _buildSummary(String sdkPath, String outPath) {
+Future<void> _buildSummary(String sdkPath, String outPath) async {
   print('Generating summary.');
   Stopwatch sw = Stopwatch()..start();
-  List<int> bytes = buildSdkSummary(
+  List<int> bytes = await buildSdkSummary2(
     resourceProvider: PhysicalResourceProvider.INSTANCE,
     sdkPath: sdkPath,
   );
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 981e0cf..46ace57 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -118,7 +118,7 @@
 
   /// Return the nullable [encodedType] of the [type].
   String encodedType2(idl_model.FieldType type) {
-    return encodedType(type) + '?';
+    return '${encodedType(type)}?';
   }
 
   /// Add the prefix `idl.` to a type name, unless that type name is the name of
@@ -186,7 +186,7 @@
   _BuilderGenerator(idl_model.Idl idl, StringBuffer outBuffer, this.cls)
       : super(idl, outBuffer);
 
-  String get builderName => name + 'Builder';
+  String get builderName => '${name}Builder';
 
   String get name => cls.name;
 
@@ -279,7 +279,7 @@
       // Write objects and remember Offset(s).
       for (idl_model.FieldDeclaration field in cls.fields) {
         idl_model.FieldType fieldType = field.type;
-        String offsetName = 'offset_' + field.name;
+        String offsetName = 'offset_${field.name}';
         if (fieldType.isList ||
             fieldType.typeName == 'String' ||
             _idl.classes.containsKey(fieldType.typeName)) {
@@ -290,7 +290,7 @@
       for (idl_model.FieldDeclaration field in cls.fields) {
         idl_model.FieldType fieldType = field.type;
         String valueName = field.name;
-        String offsetName = 'offset_' + field.name;
+        String offsetName = 'offset_${field.name}';
         String? condition;
         String? writeCode;
         if (fieldType.isList) {
@@ -337,11 +337,11 @@
       for (idl_model.FieldDeclaration field in cls.fields) {
         int index = field.id;
         idl_model.FieldType fieldType = field.type;
-        String valueName = '_' + field.name;
+        String valueName = '_${field.name}';
         if (fieldType.isList ||
             fieldType.typeName == 'String' ||
             _idl.classes.containsKey(fieldType.typeName)) {
-          String offsetName = 'offset_' + field.name;
+          String offsetName = 'offset_${field.name}';
           out('if ($offsetName != null) {');
           outWithIndent('fbBuilder.addOffset($index, $offsetName);');
           out('}');
@@ -790,7 +790,7 @@
         Token token = comment.tokens.first;
         return token.lexeme.split('\n').map((String line) {
           line = line.trimLeft();
-          if (line.startsWith('*')) line = ' ' + line;
+          if (line.startsWith('*')) line = ' $line';
           return line;
         }).join('\n');
       } else if (comment.tokens
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index a68a79a..ec11a1e 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -145,7 +145,7 @@
 
   @override
   String toCode() {
-    return '[' + elements.map((e) => e.toCode()).join(', ') + ']';
+    return '[${elements.map((e) => e.toCode()).join(', ')}]';
   }
 }
 
diff --git a/pkg/analyzer/tool/summary/stats.dart b/pkg/analyzer/tool/summary/stats.dart
index d03b7db..a9c094e 100644
--- a/pkg/analyzer/tool/summary/stats.dart
+++ b/pkg/analyzer/tool/summary/stats.dart
@@ -76,11 +76,11 @@
       if (value is SummaryClass) {
         record(value);
       } else if (value is List) {
-        value.forEach((element) {
+        for (var element in value) {
           if (element is SummaryClass) {
             record(element);
           }
-        });
+        }
       }
     });
   }
diff --git a/pkg/analyzer_cli/analysis_options.yaml b/pkg/analyzer_cli/analysis_options.yaml
index 8d202f9..2747e0f 100644
--- a/pkg/analyzer_cli/analysis_options.yaml
+++ b/pkg/analyzer_cli/analysis_options.yaml
@@ -9,11 +9,27 @@
 
 linter:
   rules:
+    always_declare_return_types: true
+    avoid_empty_else: true
+    avoid_relative_lib_imports: true
+    avoid_shadowing_type_parameters: true
+    avoid_types_as_parameter_names: true
     avoid_unused_constructor_parameters: true
+    camel_case_extensions: true
+    curly_braces_in_flow_control_structures: true
     depend_on_referenced_packages: true
     directives_ordering: true
+    empty_catches: true
 
     # We import heavily from package:analyzer/src.
     implementation_imports: false
     # This rule does not work well with package:test_reflective_loader.
+    no_duplicate_case_values: true
     non_constant_identifier_names: false
+    omit_local_variable_types: true
+    prefer_is_empty: true
+    prefer_is_not_empty: true
+    prefer_iterable_whereType: true
+    prefer_single_quotes: true
+    unawaited_futures: true
+    unrelated_type_equality_checks: true
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index fff1252..7e40fff 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -148,7 +148,7 @@
 
     // Print errors and performance numbers.
     if (printMode == 1) {
-      formatter.formatErrors(errorsResults);
+      await formatter.formatErrors(errorsResults);
     } else if (printMode == 2) {
       _printColdPerf();
     }
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index de1d3c0..6a25363 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -39,10 +39,10 @@
 import 'package:yaml/yaml.dart';
 
 /// Shared IO sink for standard error reporting.
-late StringSink errorSink = io.stderr;
+StringSink errorSink = io.stderr;
 
 /// Shared IO sink for standard out reporting.
-late StringSink outSink = io.stdout;
+StringSink outSink = io.stdout;
 
 /// Test this option map to see if it specifies lint rules.
 bool containsLintRuleEntry(YamlMap options) {
@@ -125,7 +125,7 @@
       final stopwatch = Stopwatch()..start();
 
       for (var i = 0; i < 3; i++) {
-        buildSdkSummary(
+        await buildSdkSummary2(
           resourceProvider: PhysicalResourceProvider.INSTANCE,
           sdkPath: options.dartSdkPath!,
         );
@@ -248,7 +248,7 @@
             analysisDriver.sourceFactory,
             analysisDriver.currentSession.analysisContext.contextRoot.root.path,
           );
-          formatter.formatErrors([
+          await formatter.formatErrors([
             ErrorsResultImpl(analysisDriver.currentSession, path,
                 pathContext.toUri(path), lineInfo, false, errors)
           ]);
@@ -304,7 +304,7 @@
                 allResult = allResult.max(severity);
               }
               var lineInfo = LineInfo.fromContent(content);
-              formatter.formatErrors([
+              await formatter.formatErrors([
                 ErrorsResultImpl(analysisDriver.currentSession, path,
                     pathContext.toUri(path), lineInfo, false, errors)
               ]);
@@ -320,7 +320,7 @@
             var lineInfo = LineInfo.fromContent(content);
             var errors = validator.validate(
                 content, analysisDriver.analysisOptions.chromeOsManifestChecks);
-            formatter.formatErrors([
+            await formatter.formatErrors([
               ErrorsResultImpl(analysisDriver.currentSession, path,
                   pathContext.toUri(path), lineInfo, false, errors)
             ]);
@@ -523,14 +523,14 @@
     }
 
     // Exclude patterns are relative to the directory with the options file.
-    return PathFilter(contextRoot.root.path, optionsFile.parent2.path,
+    return PathFilter(contextRoot.root.path, optionsFile.parent.path,
         analysisContext!.analysisOptions.excludePatterns);
   }
 
   void configureForPath(String path) {
     var folder = _resourceProvider.getFolder(path);
     if (!folder.exists) {
-      folder = _resourceProvider.getFile(path).parent2;
+      folder = _resourceProvider.getFile(path).parent;
     }
 
     // In batch mode we are given separate file paths to analyze.
diff --git a/pkg/analyzer_cli/lib/src/error_formatter.dart b/pkg/analyzer_cli/lib/src/error_formatter.dart
index 51c7002..ceec735 100644
--- a/pkg/analyzer_cli/lib/src/error_formatter.dart
+++ b/pkg/analyzer_cli/lib/src/error_formatter.dart
@@ -20,7 +20,7 @@
   'hint': 1,
 };
 
-String _pluralize(String word, int count) => count == 1 ? word : word + 's';
+String _pluralize(String word, int count) => count == 1 ? word : '${word}s';
 
 /// Given an absolute path, return a relative path if the file is contained in
 /// the current directory; return the original path otherwise.
@@ -189,10 +189,10 @@
   /// Call to write any batched up errors from [formatErrors].
   void flush();
 
-  void formatError(
+  Future<void> formatError(
       Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error);
 
-  void formatErrors(List<ErrorsResult> results) {
+  Future<void> formatErrors(List<ErrorsResult> results) async {
     stats.unfilteredCount += results.length;
 
     var errors = <AnalysisError>[];
@@ -207,7 +207,7 @@
     }
 
     for (var error in errors) {
-      formatError(errorToLine, error);
+      await formatError(errorToLine, error);
     }
   }
 
@@ -276,8 +276,8 @@
   }
 
   @override
-  void formatError(
-      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) {
+  Future<void> formatError(
+      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) async {
     var source = error.source;
     var result = errorToLine[error]!;
     var location = result.lineInfo.getLocation(error.offset);
@@ -308,6 +308,7 @@
     }
     var contextMessages = <ContextMessage>[];
     for (var message in error.contextMessages) {
+      // TODO(scheglov) We should add `LineInfo` to `DiagnosticMessage`.
       var session = result.session.analysisContext;
       if (session is DriverBasedAnalysisContext) {
         var fileResult = session.driver.getFileSync(message.filePath);
@@ -348,13 +349,13 @@
   void flush() {}
 
   @override
-  void formatError(
-      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) {
+  Future<void> formatError(
+      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) async {
     throw UnsupportedError('Cannot format a single error');
   }
 
   @override
-  void formatErrors(List<ErrorsResult> results) {
+  Future<void> formatErrors(List<ErrorsResult> results) async {
     Map<String, dynamic> range(
             Map<String, dynamic> start, Map<String, dynamic> end) =>
         {
@@ -435,8 +436,8 @@
   void flush() {}
 
   @override
-  void formatError(
-      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) {
+  Future<void> formatError(
+      Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) async {
     // Ensure we don't over-report (#36062).
     if (!_seenErrors.add(error)) {
       return;
diff --git a/pkg/analyzer_cli/test/analysis_options_test.dart b/pkg/analyzer_cli/test/analysis_options_test.dart
index 72e1bb4..7733959 100644
--- a/pkg/analyzer_cli/test/analysis_options_test.dart
+++ b/pkg/analyzer_cli/test/analysis_options_test.dart
@@ -18,10 +18,10 @@
 
 @reflectiveTest
 class OptionsTest {
-  final _Runner runner = _Runner.setUp();
+  final _Runner _runner = _Runner.setUp();
 
   void tearDown() {
-    runner.tearDown();
+    _runner.tearDown();
   }
 
   Future<void> test_options() async {
@@ -33,15 +33,15 @@
       var expectedPath = path.join(tempDirPath, 'somepkgs', 'flutter', 'lib',
           'analysis_options_user.yaml');
       expect(FileSystemEntity.isFileSync(expectedPath), isTrue);
-      await runner.run2([
+      await _runner.run2([
         '--packages',
         path.join(tempDirPath, 'packagelist'),
         path.join(tempDirPath, 'lib', 'main.dart')
       ]);
-      expect(runner.stdout, contains('The parameter \'child\' is required'));
+      expect(_runner.stdout, contains('The parameter \'child\' is required'));
       // Should be a warning as specified in analysis_options_user.yaml
       // not a hint
-      expect(runner.stdout, contains('1 warning found'));
+      expect(_runner.stdout, contains('1 warning found'));
     });
   }
 }
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index de57da2..c26a9e6 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -440,8 +440,8 @@
     // Should have the lint in the project with lint rules enabled.
     expect(
         bulletToDash(outSink),
-        contains(path.join('linter_project', 'test_file.dart') +
-            ':7:7 - camel_case_types'));
+        contains(
+            '${path.join('linter_project', 'test_file.dart')}:7:7 - camel_case_types'));
     // Should be just one lint in total.
     expect(outSink.toString(), contains('1 lint found.'));
   }
@@ -464,7 +464,7 @@
     ]);
     expect(processorFor(missing_return).severity, ErrorSeverity.ERROR);
     expect(bulletToDash(outSink),
-        contains("error - The body might complete normally"));
+        contains('error - The body might complete normally'));
     expect(outSink.toString(), contains('1 error and 1 warning found.'));
   }
 
diff --git a/pkg/analyzer_cli/test/mocks.dart b/pkg/analyzer_cli/test/mocks.dart
index a8b487a..3de1eb3 100644
--- a/pkg/analyzer_cli/test/mocks.dart
+++ b/pkg/analyzer_cli/test/mocks.dart
@@ -116,7 +116,7 @@
   }
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
 
 class MockLineInfo implements LineInfo {
@@ -163,5 +163,5 @@
   MockSource(this.fullName, this.uri);
 
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analyzer_cli/test/reporter_test.dart b/pkg/analyzer_cli/test/reporter_test.dart
index cffb0ff..54a2964 100644
--- a/pkg/analyzer_cli/test/reporter_test.dart
+++ b/pkg/analyzer_cli/test/reporter_test.dart
@@ -44,27 +44,27 @@
         reporter = HumanErrorFormatter(out, options, stats);
       });
 
-      test('error', () {
+      test('error', () async {
         var error = mockResult(ErrorType.SYNTACTIC_ERROR, ErrorSeverity.ERROR);
-        reporter.formatErrors([error]);
+        await reporter.formatErrors([error]);
         reporter.flush();
 
         expect(out.toString().trim(),
             'error • MSG • /foo/bar/baz.dart:3:3 • mock_code');
       });
 
-      test('hint', () {
+      test('hint', () async {
         var error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
-        reporter.formatErrors([error]);
+        await reporter.formatErrors([error]);
         reporter.flush();
 
         expect(out.toString().trim(),
             'hint • MSG • /foo/bar/baz.dart:3:3 • mock_code');
       });
 
-      test('stats', () {
+      test('stats', () async {
         var error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
-        reporter.formatErrors([error]);
+        await reporter.formatErrors([error]);
         reporter.flush();
         stats.print(out);
         expect(
@@ -79,9 +79,9 @@
         reporter = JsonErrorFormatter(out, options, stats);
       });
 
-      test('error', () {
+      test('error', () async {
         var error = mockResult(ErrorType.SYNTACTIC_ERROR, ErrorSeverity.ERROR);
-        reporter.formatErrors([error]);
+        await reporter.formatErrors([error]);
         reporter.flush();
 
         expect(
@@ -108,11 +108,11 @@
   var source = MockSource(path, package_path.toUri(path));
   var error = MockAnalysisError(source, code, 20, 'MSG');
 
-  return ErrorsResultImpl(_MockAnslysisSession(), source.fullName,
+  return ErrorsResultImpl(_MockAnalysisSession(), source.fullName,
       Uri.file('/'), lineInfo, false, [error]);
 }
 
-class _MockAnslysisSession implements AnalysisSession {
+class _MockAnalysisSession implements AnalysisSession {
   @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analyzer_plugin/doc/api.html b/pkg/analyzer_plugin/doc/api.html
index 0c0d3d7..442a175 100644
--- a/pkg/analyzer_plugin/doc/api.html
+++ b/pkg/analyzer_plugin/doc/api.html
@@ -1149,6 +1149,37 @@
           The type of the options parameter being suggested. This field is
           omitted if the parameterName field is omitted.
         </p>
+      </dd><dt class="field"><b>libraryUri: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          This field  is omitted if <tt>getSuggestions</tt> was used rather
+          than <tt>getSuggestions2</tt>.
+        </p>
+        <p>
+          This field  is omitted if this suggestion corresponds to a locally
+          declared element.
+        </p>
+        <p>
+          If this suggestion corresponds to an already imported element,
+          then this field is the URI of a library that provides this element,
+          not the URI of the library where the element is declared.
+        </p>
+        <p>
+          If this suggestion corresponds to an element from a not yet
+          imported library, this field is the URI of a library that could be
+          imported to make this suggestion  accessible in the file where
+          completion was requested, such as <tt>package:foo/bar.dart</tt> or
+          <tt>file:///home/me/workspace/foo/test/bar_test.dart</tt>.
+        </p>
+      </dd><dt class="field"><b>isNotImported: bool<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          True if the suggestion is for an element from a not yet imported
+          library. This field is omitted if the element is declared locally,
+          or is from library is already imported, so that the suggestion can
+          be inserted as is, or if <tt>getSuggestions</tt> was used rather
+          than <tt>getSuggestions2</tt>.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionSuggestionKind">CompletionSuggestionKind: String</a></dt><dd>
     <p>
       An enumeration of the kinds of elements that can be included in a
@@ -1507,6 +1538,13 @@
       the user edit the variable name after the operation, all occurrences of
       the name could be edited simultaneously.
     </p>
+    <p>
+      Edit groups may have a length of 0 and function as tabstops where there
+      is no default text, for example, an edit that inserts an <tt>if</tt>
+      statement might provide an empty group between parens where a condition
+      should be typed. For this reason, it's also valid for a group to contain
+      only a single position that is not linked to others.
+    </p>
     
   <dl><dt class="field"><b>positions: List&lt;<a href="#type_Position">Position</a>&gt;</b></dt><dd>
         
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index 32fe3b2..85dd6d6 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -504,6 +504,8 @@
 ///   "hasNamedParameters": optional bool
 ///   "parameterName": optional String
 ///   "parameterType": optional String
+///   "libraryUri": optional String
+///   "isNotImported": optional bool
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index be0b7fc..dca43e9 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -349,6 +349,12 @@
   /// The buffer in which the content of the edit is being composed.
   final StringBuffer _buffer = StringBuffer();
 
+  /// Whether the builder is currently writing an edit group.
+  ///
+  /// This flag is set internally when writing an edit group to prevent
+  /// nested/overlapping edit groups from being produced.
+  bool _isWritingEditGroup = false;
+
   /// Initialize a newly created builder to build a source edit.
   EditBuilderImpl(this.fileEditBuilder, this.offset, this.length) {
     _eol = fileEditBuilder.changeBuilder.eol;
@@ -363,9 +369,16 @@
       void Function(LinkedEditBuilder builder) buildLinkedEdit) {
     var builder = createLinkedEditBuilder();
     var start = offset + _buffer.length;
+    // If we're already writing an edit group we must not produce others nested
+    // inside, so just call the callback without capturing the group.
+    if (_isWritingEditGroup) {
+      return buildLinkedEdit(builder);
+    }
     try {
+      _isWritingEditGroup = true;
       buildLinkedEdit(builder);
     } finally {
+      _isWritingEditGroup = false;
       var end = offset + _buffer.length;
       var length = end - start;
       if (length != 0) {
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 575cd5b..eb3d905 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart' as analyzer;
 import 'package:analyzer/error/error.dart' as analyzer;
-import 'package:analyzer/exception/exception.dart' as analyzer;
 import 'package:analyzer/source/error_processor.dart' as analyzer;
 import 'package:analyzer/src/generated/engine.dart' as analyzer;
 import 'package:analyzer/src/generated/source.dart' as analyzer;
@@ -188,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);
@@ -386,27 +385,18 @@
   plugin.Location? _locationForArgs(
       analyzer.CompilationUnitElement? unitElement,
       analyzer.SourceRange range) {
-    var startLine = 0;
-    var startColumn = 0;
-    var endLine = 0;
-    var endColumn = 0;
-
     if (unitElement == null) {
       return null;
     }
-    try {
-      var lineInfo = unitElement.lineInfo;
-      if (lineInfo != null) {
-        var offsetLocation = lineInfo.getLocation(range.offset);
-        startLine = offsetLocation.lineNumber;
-        startColumn = offsetLocation.columnNumber;
-        var endLocation = lineInfo.getLocation(range.offset + range.length);
-        endLine = endLocation.lineNumber;
-        endColumn = endLocation.columnNumber;
-      }
-    } on analyzer.AnalysisException {
-      // Ignore exceptions
-    }
+
+    var lineInfo = unitElement.lineInfo;
+    var offsetLocation = lineInfo.getLocation(range.offset);
+    var endLocation = lineInfo.getLocation(range.offset + range.length);
+    var startLine = offsetLocation.lineNumber;
+    var startColumn = offsetLocation.columnNumber;
+    var endLine = endLocation.lineNumber;
+    var endColumn = endLocation.columnNumber;
+
     return plugin.Location(unitElement.source.fullName, range.offset,
         range.length, startLine, startColumn,
         endLine: endLine, endColumn: endColumn);
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 803d099..56ec6a3 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -208,9 +208,11 @@
           var parentPath =
               _computeParentWithExamplesAPI(node, resourceProvider);
           if (parentPath != null) {
+            var start = token.offset + startIndex;
+            var end = token.offset + endIndex;
             computer.collector.addRegion(
-                token.offset + startIndex,
-                token.offset + endIndex,
+                start,
+                end - start,
                 protocol.ElementKind.LIBRARY,
                 protocol.Location(
                     resourceProvider.pathContext.join(parentPath, pathSnippet),
@@ -497,14 +499,14 @@
     if (!file.exists) {
       return null;
     }
-    var parent = file.parent2;
-    while (parent != parent.parent2) {
+    var parent = file.parent;
+    while (parent != parent.parent) {
       var examplesFolder = parent.getChildAssumingFolder('examples');
       if (examplesFolder.exists &&
           examplesFolder.getChildAssumingFolder('api').exists) {
         return parent.path;
       }
-      parent = parent.parent2;
+      parent = parent.parent;
     }
     return null;
   }
diff --git a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
index 8fd6bff..52dbfbd 100644
--- a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
+++ b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
@@ -443,7 +443,7 @@
         .listen((String line) {
       lastCommunicationTime = currentElapseTime;
       var trimmedLine = line.trim();
-      if (trimmedLine.startsWith('Observatory listening on ')) {
+      if (trimmedLine.startsWith('The Dart VM service is listening on ')) {
         return;
       }
       _recordStdio('RECV: $trimmedLine');
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index cfa4524..9639648 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -138,6 +138,8 @@
 ///   "hasNamedParameters": optional bool
 ///   "parameterName": optional String
 ///   "parameterType": optional String
+///   "libraryUri": optional String
+///   "isNotImported": optional bool
 /// }
 final Matcher isCompletionSuggestion =
     LazyMatcher(() => MatchesJsonObject('CompletionSuggestion', {
diff --git a/pkg/analyzer_plugin/test/plugin/assist_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/assist_mixin_test.dart
index 4a5899e..924e293 100644
--- a/pkg/analyzer_plugin/test/plugin/assist_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/assist_mixin_test.dart
@@ -30,7 +30,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/completion_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/completion_mixin_test.dart
index 35ecf19..73d620a 100644
--- a/pkg/analyzer_plugin/test/plugin/completion_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/completion_mixin_test.dart
@@ -30,7 +30,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1, content: 'int foo = bar;');
+    newFile2(filePath1, 'int foo = bar;');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
index edb6601..192d701 100644
--- a/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
@@ -34,7 +34,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/folding_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/folding_mixin_test.dart
index ef7d1cd0..795ec0f 100644
--- a/pkg/analyzer_plugin/test/plugin/folding_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/folding_mixin_test.dart
@@ -33,7 +33,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/highlights_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/highlights_mixin_test.dart
index bbf3d1a..45a1964 100644
--- a/pkg/analyzer_plugin/test/plugin/highlights_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/highlights_mixin_test.dart
@@ -33,7 +33,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/kythe_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/kythe_mixin_test.dart
index c1df465..743cf17 100644
--- a/pkg/analyzer_plugin/test/plugin/kythe_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/kythe_mixin_test.dart
@@ -30,7 +30,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/navigation_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/navigation_mixin_test.dart
index 3c29dfb..9934550 100644
--- a/pkg/analyzer_plugin/test/plugin/navigation_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/navigation_mixin_test.dart
@@ -33,7 +33,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/occurrences_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/occurrences_mixin_test.dart
index 319e1bd..88f4153 100644
--- a/pkg/analyzer_plugin/test/plugin/occurrences_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/occurrences_mixin_test.dart
@@ -33,7 +33,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/outline_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/outline_mixin_test.dart
index 5844fde..5d2933c 100644
--- a/pkg/analyzer_plugin/test/plugin/outline_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/outline_mixin_test.dart
@@ -33,7 +33,7 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/plugin/plugin_test.dart b/pkg/analyzer_plugin/test/plugin/plugin_test.dart
index 18d77ba..edbddc7 100644
--- a/pkg/analyzer_plugin/test/plugin/plugin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/plugin_test.dart
@@ -33,12 +33,12 @@
   void setUp() {
     packagePath1 = convertPath('/package1');
     filePath1 = join(packagePath1, 'lib', 'test.dart');
-    newFile(filePath1);
+    newFile2(filePath1, '');
     contextRoot1 = ContextRoot(packagePath1, <String>[]);
 
     packagePath2 = convertPath('/package2');
     filePath2 = join(packagePath2, 'lib', 'test.dart');
-    newFile(filePath2);
+    newFile2(filePath2, '');
     contextRoot2 = ContextRoot(packagePath2, <String>[]);
 
     channel = MockChannel();
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index ae38afa..fd6eb9b 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -38,7 +38,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', isRequiredNamed: true);
@@ -69,7 +69,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', isCovariant: true, isRequiredNamed: true);
@@ -88,7 +88,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', isRequiredNamed: true);
@@ -110,7 +110,7 @@
 ''';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', isRequiredNamed: true);
@@ -137,7 +137,7 @@
     addSource(path, 'class A {}');
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', interfaces: [typeA]);
@@ -152,7 +152,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', isAbstract: true);
@@ -166,7 +166,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', membersWriter: () {
@@ -183,7 +183,7 @@
     addSource(path, 'class A {}');
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', mixins: [typeA]);
@@ -200,7 +200,7 @@
     DartType typeA = await _getType(path, 'A');
     DartType typeB = await _getType(path, 'B');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', mixins: [typeB], superclass: typeA);
@@ -215,7 +215,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C', nameGroupName: 'name');
@@ -236,7 +236,7 @@
     addSource(path, 'class B {}');
     DartType typeB = await _getType(path, 'B');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeClassDeclaration('C',
@@ -257,7 +257,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, 'class C {}');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(9, (builder) {
         builder.writeConstructorDeclaration('A', bodyWriter: () {
@@ -278,7 +278,7 @@
 }
 ''');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(42, (builder) {
         builder.writeConstructorDeclaration('A', fieldNames: ['a', 'bb']);
@@ -292,7 +292,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, 'class C {}');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(9, (builder) {
         builder.writeConstructorDeclaration('A', initializerWriter: () {
@@ -308,7 +308,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, 'class C {}');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(9, (builder) {
         builder.writeConstructorDeclaration('A', parameterWriter: () {
@@ -325,7 +325,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', initializerWriter: () {
@@ -342,7 +342,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isConst: true);
@@ -357,7 +357,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isConst: true, isFinal: true);
@@ -373,7 +373,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isConst: true, type: typeA);
@@ -388,7 +388,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isFinal: true);
@@ -404,7 +404,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isFinal: true, type: typeA);
@@ -419,7 +419,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', isStatic: true);
@@ -434,7 +434,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', nameGroupName: 'name');
@@ -458,7 +458,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeFieldDeclaration('f', type: typeA, typeGroupName: 'type');
@@ -482,7 +482,7 @@
     var content = '';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeFunctionDeclaration('fib', bodyWriter: () {
@@ -500,7 +500,7 @@
     var content = '';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeFunctionDeclaration('fib', nameGroupName: 'name');
@@ -522,7 +522,7 @@
     var content = '';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeFunctionDeclaration('fib', parameterWriter: () {
@@ -542,7 +542,7 @@
 
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeFunctionDeclaration('fib',
@@ -564,7 +564,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeGetterDeclaration('g', bodyWriter: () {
@@ -581,7 +581,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeGetterDeclaration('g', isStatic: true);
@@ -596,7 +596,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeGetterDeclaration('g', nameGroupName: 'name');
@@ -620,7 +620,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeGetterDeclaration('g',
@@ -646,7 +646,7 @@
 import 'foo.dart';
 ''');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeImportedName([
@@ -665,7 +665,7 @@
 import 'bar.dart';
 ''');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeImportedName([
@@ -683,7 +683,7 @@
     var content = '';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeImportedName([
@@ -709,7 +709,7 @@
     var content = 'test';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addReplacement(SourceRange(0, 4), (builder) {
         builder.writeImportedName([
@@ -739,7 +739,7 @@
     addSource(path, content);
     await resolveFile(path);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration('foo', initializerWriter: () {
@@ -760,7 +760,7 @@
     addSource(path, content);
     await resolveFile(path);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration('foo', nameGroupName: 'name');
@@ -786,7 +786,7 @@
     addSource(path, content);
     await resolveFile(path);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration('foo', isConst: true);
@@ -806,7 +806,7 @@
     addSource(path, content);
     await resolveFile(path);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration('foo', isFinal: true);
@@ -828,7 +828,7 @@
 
     var A = unit.declarations[1] as ClassDeclaration;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration(
@@ -859,7 +859,7 @@
 
     var A = unit.declarations[1] as ClassDeclaration;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration(
@@ -895,7 +895,7 @@
 
     var A = unit.declarations[1] as ClassDeclaration;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(11, (builder) {
         builder.writeLocalVariableDeclaration(
@@ -924,7 +924,7 @@
     addSource(path, 'class A {}');
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeMixinDeclaration('M', interfaces: [typeA]);
@@ -942,7 +942,7 @@
     DartType typeA = await _getType(path, 'A');
     DartType typeB = await _getType(path, 'B');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeMixinDeclaration('M',
@@ -958,7 +958,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeMixinDeclaration('M', membersWriter: () {
@@ -974,7 +974,7 @@
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeMixinDeclaration('M', nameGroupName: 'name');
@@ -995,7 +995,7 @@
     addSource(path, 'class A {}');
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeMixinDeclaration('M', superclassConstraints: [typeA]);
@@ -1010,7 +1010,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a');
@@ -1025,7 +1025,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', isCovariant: true);
@@ -1041,7 +1041,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameter('a', type: typeA);
@@ -1068,7 +1068,7 @@
     var invocation = statement.expression as MethodInvocation;
     var argument = invocation.argumentList.arguments[0];
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(2, (builder) {
         builder.writeParameterMatchingArgument(argument, 0, <String>{});
@@ -1088,7 +1088,7 @@
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameters(elements!);
@@ -1108,7 +1108,7 @@
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameters(elements!);
@@ -1128,7 +1128,7 @@
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameters(elements!);
@@ -1147,7 +1147,7 @@
     var parameters = f.functionExpression.parameters;
     var elements = parameters?.parameters.map((p) => p.declaredElement!);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParameters(elements!, requiredTypes: true);
@@ -1170,7 +1170,7 @@
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParametersMatchingArguments(invocation.argumentList);
@@ -1196,7 +1196,7 @@
     var statement = body.block.statements[0] as ExpressionStatement;
     var invocation = statement.expression as MethodInvocation;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeParametersMatchingArguments(invocation.argumentList);
@@ -1223,7 +1223,7 @@
     var aElement = await _getClassElement(aPath, 'A');
     var fooElement = aElement.methods[0];
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeReference(fooElement);
@@ -1245,7 +1245,7 @@
 
     var aElement = await _getTopLevelAccessorElement(aPath, 'a');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeReference(aElement);
@@ -1267,7 +1267,7 @@
 
     var aElement = await _getTopLevelAccessorElement(aPath, 'a');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeReference(aElement);
@@ -1287,7 +1287,7 @@
 
     var aElement = await _getTopLevelAccessorElement(aPath, 'a');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeReference(aElement);
@@ -1309,7 +1309,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeSetterDeclaration('s', bodyWriter: () {
@@ -1326,7 +1326,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeSetterDeclaration('s', isStatic: true);
@@ -1341,7 +1341,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeSetterDeclaration('s', nameGroupName: 'name');
@@ -1365,7 +1365,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeSetterDeclaration('s',
@@ -1390,7 +1390,7 @@
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         var typeProvider = unit.declaredElement!.library.typeProvider;
@@ -1432,7 +1432,7 @@
     var typeA = await _getType(path, 'A');
     var typeBofA = await _getType(path, 'B', typeArguments: [typeA]);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(typeBofA);
@@ -1448,7 +1448,7 @@
     addSource(path, content);
     DartType typeC = await _getType(path, 'C');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(typeC, groupName: 'type');
@@ -1469,7 +1469,7 @@
     addSource(path, content);
     DartType typeC = await _getType(path, 'C');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(typeC,
@@ -1504,7 +1504,7 @@
       nullabilitySuffix: NullabilitySuffix.star,
     );
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length, (builder) {
         // "T" cannot be written, because we are outside of "A".
@@ -1528,7 +1528,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(null);
@@ -1563,7 +1563,7 @@
       return '_prefix${nextPrefixIndex++}';
     }
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(0, (builder) {
         builder.writeType(a1.instantiate(
@@ -1610,7 +1610,7 @@
     addSource(path, content);
     var unit = (await resolveFile(path)).unit;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         var typeProvider = unit.declaredElement!.library.typeProvider;
@@ -1627,7 +1627,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(typeA, required: true);
@@ -1642,7 +1642,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(null, required: true);
@@ -1658,7 +1658,7 @@
     addSource(path, content);
     DartType typeA = await _getType(path, 'A');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(typeA);
@@ -1682,7 +1682,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeTypes([]);
@@ -1699,7 +1699,7 @@
     DartType typeA = await _getType(path, 'A');
     DartType typeB = await _getType(path, 'B');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeTypes([typeA, typeB]);
@@ -1714,7 +1714,7 @@
     var content = 'class A {}';
     addSource(path, content);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeTypes(null);
@@ -1731,7 +1731,7 @@
     DartType typeA = await _getType(path, 'A');
     DartType typeB = await _getType(path, 'B');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeTypes([typeA, typeB], prefix: 'implements ');
@@ -1748,7 +1748,7 @@
 
     var f = await _getTopLevelAccessorElement(path, 'v');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 1, (builder) {
         builder.writeType(f.returnType);
@@ -1793,7 +1793,7 @@
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.convertFunctionFromSyncToAsync(body, resolvedUnit.typeProvider);
     });
@@ -1810,7 +1810,7 @@
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var body = findNode.functionBody('{}');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.convertFunctionFromSyncToAsync(body, resolvedUnit.typeProvider);
     });
@@ -1837,9 +1837,9 @@
 }
 ''';
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: initialCode);
+    newFile2(path, initialCode);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(34, (builder) {
         builder.writeln('  3 +  4;');
@@ -1889,9 +1889,9 @@
 }
 ''';
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: initialCode);
+    newFile2(path, initialCode);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.format(SourceRange(37, 39));
     });
@@ -1918,9 +1918,9 @@
   Future<void> test_multipleEdits_concurrently() async {
     var initialCode = '00';
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: initialCode);
+    newFile2(path, initialCode);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     var future = Future.wait([
       builder.addDartFileEdit(path, (builder) {
         builder.addSimpleInsertion(0, '11');
@@ -1936,9 +1936,9 @@
   Future<void> test_multipleEdits_sequentially() async {
     var initialCode = '00';
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: initialCode);
+    newFile2(path, initialCode);
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addSimpleInsertion(0, '11');
     });
@@ -1959,7 +1959,7 @@
     var findNode = FindNode(resolvedUnit.content, resolvedUnit.unit);
     var type = findNode.typeAnnotation('String');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.replaceTypeWithFuture(type, resolvedUnit.typeProvider);
     });
@@ -2474,7 +2474,7 @@
   }) async {
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, initialCode);
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       for (var i = 0; i < uriList.length; ++i) {
         var uri = Uri.parse(uriList[i]);
@@ -3049,7 +3049,7 @@
 
     var displayBuffer = displayText != null ? StringBuffer() : null;
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       builder.addInsertion(content.length - 2, (builder) {
         builder.writeOverride(
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/dart_change_builder_mixin.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/dart_change_builder_mixin.dart
index 9bff4bb..10af9f1 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/dart_change_builder_mixin.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/dart_change_builder_mixin.dart
@@ -28,5 +28,7 @@
   }
 
   /// Return a newly created Dart change builder.
-  ChangeBuilder newBuilder() => ChangeBuilder(session: session);
+  Future<ChangeBuilder> newBuilder() async {
+    return ChangeBuilder(session: await session);
+  }
 }
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/import_library_element_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/import_library_element_test.dart
index cd2eefa..351257e 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/import_library_element_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/dart/import_library_element_test.dart
@@ -44,7 +44,7 @@
   }
 
   Future<void> test_withoutPrefix() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
+    newFile2('/home/test/lib/a.dart', 'class A {}');
 
     await _assertImportLibraryElement(
       initialCode: r'''
@@ -56,8 +56,8 @@
   }
 
   Future<void> test_withoutPrefix_exported() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', 'class A {}');
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 ''');
     await _assertImportLibraryElement(
@@ -70,7 +70,7 @@
   }
 
   Future<void> test_withoutPrefix_hasInvalidImport() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
+    newFile2('/home/test/lib/a.dart', 'class A {}');
 
     await _assertImportLibraryElement(
       initialCode: r'''
@@ -83,10 +83,10 @@
   }
 
   Future<void> test_withoutPrefix_referencedNames_sameElements() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 
 class B {}
@@ -104,8 +104,8 @@
   }
 
   Future<void> test_withoutPrefix_twoImports_sameElement() async {
-    newFile('/home/test/lib/a.dart', content: 'class C {}');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', 'class C {}');
+    newFile2('/home/test/lib/b.dart', r'''
 export 'package:test/a.dart';
 ''');
 
@@ -129,7 +129,7 @@
   }
 
   Future<void> test_withPrefix() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
+    newFile2('/home/test/lib/a.dart', 'class A {}');
 
     await _assertImportLibraryElement(
       initialCode: r'''
@@ -142,8 +142,8 @@
   }
 
   Future<void> test_withPrefix_twoImports_sameElement() async {
-    newFile('/home/test/lib/a.dart', content: 'class C {}');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', 'class C {}');
+    newFile2('/home/test/lib/b.dart', r'''
 export 'package:test/a.dart';
 ''');
 
@@ -172,10 +172,10 @@
 @reflectiveTest
 class ImportLibraryElement_newImport_withoutPrefix_Test extends _Base {
   Future<void> test_constructorName_name() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 int foo;
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 class B {
   B.foo();
 }
@@ -202,8 +202,8 @@
   }
 
   Future<void> test_exported() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', 'class A {}');
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 ''');
     await _assertImportLibraryElement(
@@ -217,8 +217,8 @@
   }
 
   Future<void> test_exported_differentUri() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', 'class A {}');
+    newFile2('/home/test/lib/b.dart', r'''
 export 'a.dart';
 ''');
     await _assertImportLibraryElement(
@@ -235,10 +235,10 @@
   }
 
   Future<void> test_methodInvocation_name() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 int foo;
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 class B {
   static void foo() {}
 }
@@ -265,11 +265,11 @@
   }
 
   Future<void> test_noConflict_otherImport_hide() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 ''');
-    newFile('/home/test/lib/b.dart', content: 'class B {}');
+    newFile2('/home/test/lib/b.dart', 'class B {}');
     await _assertImportLibraryElement(
       initialCode: r'''
 import 'package:test/a.dart' hide B;
@@ -284,11 +284,11 @@
   }
 
   Future<void> test_noConflict_otherImport_show() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 class B {}
 ''');
-    newFile('/home/test/lib/b.dart', content: 'class B {}');
+    newFile2('/home/test/lib/b.dart', 'class B {}');
     await _assertImportLibraryElement(
       initialCode: r'''
 import 'package:test/a.dart' show A;
@@ -303,7 +303,7 @@
   }
 
   Future<void> test_noShadow_syntacticScope_localVariable() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 var foo = 0;
 ''');
     await _assertImportLibraryElement(
@@ -335,7 +335,7 @@
   }
 
   Future<void> test_noShadow_syntacticScope_typeParameter() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 class A {}
 ''');
     await _assertImportLibraryElement(
@@ -357,10 +357,10 @@
   }
 
   Future<void> test_prefixedIdentifier_identifier() async {
-    newFile('/home/test/lib/a.dart', content: r'''
+    newFile2('/home/test/lib/a.dart', r'''
 int foo;
 ''');
-    newFile('/home/test/lib/b.dart', content: r'''
+    newFile2('/home/test/lib/b.dart', r'''
 class B {
   static int foo;
 }
@@ -387,7 +387,7 @@
   }
 
   Future<void> test_thisName_notShadowed_localVariable_otherFunction() async {
-    newFile('/home/test/lib/a.dart', content: 'int foo = 0;');
+    newFile2('/home/test/lib/a.dart', 'int foo = 0;');
     await _assertImportLibraryElement(
       initialCode: r'''
 void f() {
@@ -415,8 +415,8 @@
   }
 
   Future<void> test_unrelated() async {
-    newFile('/home/test/lib/a.dart', content: 'class A {}');
-    newFile('/home/test/lib/b.dart', content: 'class B {}');
+    newFile2('/home/test/lib/a.dart', 'class A {}');
+    newFile2('/home/test/lib/b.dart', 'class B {}');
     await _assertImportLibraryElement(
       initialCode: r'''
 import 'package:test/a.dart';
@@ -466,15 +466,15 @@
     }
 
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: initialCode);
+    newFile2(path, initialCode);
 
     var requestedResult =
-        await session.getLibraryByUri(uriStr) as LibraryElementResult;
+        await (await session).getLibraryByUri(uriStr) as LibraryElementResult;
     var requestedLibrary = requestedResult.element;
     var requestedElement = requestedLibrary.exportNamespace.get(name);
     expect(requestedElement, isNotNull, reason: '`$name` in $uriStr');
 
-    var builder = newBuilder();
+    var builder = await newBuilder();
     await builder.addDartFileEdit(path, (builder) {
       var uri = Uri.parse(uriStr);
       var result = builder.importLibraryElement(uri);
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 742f070..62e8adf 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -951,7 +951,7 @@
     content = content.substring(0, offset) + content.substring(offset! + 1);
 
     var path = convertPath('/home/test/lib/test.dart');
-    newFile(path, content: content);
+    newFile2(path, content);
 
     var result = await resolveFile(path);
     findElement = FindElement(result.unit);
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 426644f..9dffef5 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -46,7 +46,7 @@
 
   Folder get sdkRoot => newFolder('/sdk');
 
-  AnalysisSession get session => contextFor(testPackageRootPath).currentSession;
+  Future<AnalysisSession> get session async => sessionFor(testPackageRootPath);
 
   /// The file system-specific `analysis_options.yaml` path.
   String get testPackageAnalysisOptionsPath =>
@@ -63,7 +63,7 @@
   String get workspaceRootPath => convertPath('/home');
 
   void addSource(String path, String content) {
-    newFile(path, content: content);
+    newFile2(path, content);
   }
 
   AnalysisContext contextFor(String path) {
@@ -85,23 +85,29 @@
       }
     }
 
-    newFile(testPackageAnalysisOptionsPath, content: buffer.toString());
+    newFile2(testPackageAnalysisOptionsPath, buffer.toString());
   }
 
   @override
-  File newFile(String path, {String content = ''}) {
+  File newFile2(String path, String content) {
     if (_analysisContextCollection != null && !path.endsWith('.dart')) {
       throw StateError('Only dart files can be changed after analysis.');
     }
 
-    return super.newFile(path, content: content);
+    return super.newFile2(path, content);
   }
 
   Future<ResolvedUnitResult> resolveFile(String path) async {
-    var session = contextFor(path).currentSession;
+    var session = await sessionFor(path);
     return await session.getResolvedUnit(path) as ResolvedUnitResult;
   }
 
+  Future<AnalysisSession> sessionFor(String path) async {
+    var analysisContext = contextFor(path);
+    await analysisContext.applyPendingFileChanges();
+    return analysisContext.currentSession;
+  }
+
   void setUp() {
     createMockSdk(
       resourceProvider: resourceProvider,
@@ -117,7 +123,7 @@
   }
 
   void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr: toUriStr));
+    newFile2(path, config.toContent(toUriStr: toUriStr));
   }
 
   void writeTestPackageConfig({
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index ab3e77a..b1e4ddf 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -653,7 +653,7 @@
   @override
   void setUp() {
     super.setUp();
-    source = newFile('/foo/bar.dart').createSource();
+    source = newFile2('/foo/bar.dart', '').createSource();
     testFile = convertPath('$testPackageRootPath/lib/test.dart');
   }
 }
diff --git a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
index 327ebfe..2af7bb7 100644
--- a/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/completion/type_member_contributor_test.dart
@@ -1084,8 +1084,7 @@
   }
 
   Future<void> test_Block_unimported() async {
-    newFile('$workspaceRootPath/myBar/bar.dart',
-        content: 'class Foo2 { Foo2() { } }');
+    newFile2('$workspaceRootPath/myBar/bar.dart', 'class Foo2 { Foo2() { } }');
     addSource(
         '/proj/testAB.dart', 'import "package:myBar/bar.dart"; class Foo { }');
     addTestSource('class C {foo(){F^}}');
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index 9a3d257..ca100b9 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -380,7 +380,7 @@
           omitted if the parameterName field is omitted.
         </p>
       </field>
-      <field name="libraryUri" experimental="true" optional="true">
+      <field name="libraryUri" optional="true">
         <ref>String</ref>
         <p>
           This field  is omitted if <tt>getSuggestions</tt> was used rather
@@ -403,7 +403,7 @@
           <tt>file:///home/me/workspace/foo/test/bar_test.dart</tt>.
         </p>
       </field>
-      <field name="isNotImported" optional="true" experimental="true">
+      <field name="isNotImported" optional="true">
         <ref>bool</ref>
         <p>
           True if the suggestion is for an element from a not yet imported
@@ -1008,6 +1008,13 @@
       the user edit the variable name after the operation, all occurrences of
       the name could be edited simultaneously.
     </p>
+    <p>
+      Edit groups may have a length of 0 and function as tabstops where there
+      is no default text, for example, an edit that inserts an <tt>if</tt>
+      statement might provide an empty group between parens where a condition
+      should be typed. For this reason, it's also valid for a group to contain
+      only a single position that is not linked to others.
+    </p>
     <object>
       <field name="positions">
         <list>
diff --git a/pkg/analyzer_utilities/lib/verify_tests.dart b/pkg/analyzer_utilities/lib/verify_tests.dart
index de1bf43..bdbf86d 100644
--- a/pkg/analyzer_utilities/lib/verify_tests.dart
+++ b/pkg/analyzer_utilities/lib/verify_tests.dart
@@ -87,7 +87,7 @@
       }
     }
     var relativePath = path.relative(directory.path, from: testDirPath);
-    test(relativePath, () {
+    test(relativePath, () async {
       if (testFileNames.isEmpty) {
         return;
       }
diff --git a/pkg/async_helper/lib/async_helper.dart b/pkg/async_helper/lib/async_helper.dart
index d4d536f..6dd1b87 100644
--- a/pkg/async_helper/lib/async_helper.dart
+++ b/pkg/async_helper/lib/async_helper.dart
@@ -105,31 +105,38 @@
 /// failed test expectation, that error cannot be caught and accepted.
 Future<T> asyncExpectThrows<T extends Object>(Future<void> result,
     [String reason = ""]) {
-  // Handle null being passed in from legacy code while also avoiding producing
-  // an unnecessary null check warning here.
-  if ((reason as dynamic) == null) reason = "";
-
-  var type = "";
-  if (T != dynamic && T != Object) type = "<$T>";
-  var header = "asyncExpectThrows$type(${reason}):";
-
-  if ((result as dynamic) == null) {
-    Expect.testError("$header result Future must not be null.");
+  // Delay computing the header text until the test has failed.
+  // The header computation uses complicated language features,
+  // and language tests should avoid doing complicated things
+  // until after the actual test has had a chance to succeed.
+  String header() {
+    // Handle null being passed in from legacy code
+    // while also avoiding producing an unnecessary null check warning here.
+    if ((reason as dynamic) == null) reason = "";
+    // Only include the type in he message if it's not a top-type.
+    var type = Object() is! T ? "<$T>" : "";
+    return "asyncExpectThrows$type($reason):";
   }
+
+  // Unsound null-safety check.
+  if ((result as dynamic) == null) {
+    Expect.testError("${header()} result Future must not be null.");
+  }
+
   // TODO(rnystrom): It might useful to validate that T is not bound to
   // ExpectException since that won't work.
 
   asyncStart();
   return result.then<T>((_) {
-    throw ExpectException("$header Did not throw.");
+    throw ExpectException("${header()} Did not throw.");
   }, onError: (error, stack) {
-    // A test failure doesn't count as throwing.
+    // A test failure doesn't count as throwing. Rethrow it.
     if (error is ExpectException) throw error;
 
     if (error is! T) {
       // Throws something unexpected.
       throw ExpectException(
-          "$header Unexpected '${Error.safeToString(error)}'\n$stack");
+          "${header()} Unexpected '${Error.safeToString(error)}'\n$stack");
     }
 
     asyncEnd();
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index b9ade95..a57731b 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -247,7 +247,6 @@
   return compiler.run().then((bool success) {
     return new CompilationResult(compiler,
         isSuccess: success,
-        kernelInitializedCompilerState:
-            compiler.kernelLoader.initializedCompilerState);
+        kernelInitializedCompilerState: compiler.initializedCompilerState);
   });
 }
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index af806f9..e5e807e 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -16,11 +16,11 @@
 abstract class ClosureData {
   /// Deserializes a [ClosureData] object from [source].
   factory ClosureData.readFromDataSource(
-          JsToElementMap elementMap, DataSource source) =
+          JsToElementMap elementMap, DataSourceReader source) =
       ClosureDataImpl.readFromDataSource;
 
   /// Serializes this [ClosureData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Look up information about the variables that have been mutated and are
   /// used inside the scope of [node].
@@ -66,7 +66,7 @@
   const ScopeInfo();
 
   /// Deserializes a [ScopeInfo] object from [source].
-  factory ScopeInfo.readFromDataSource(DataSource source) {
+  factory ScopeInfo.readFromDataSource(DataSourceReader source) {
     ScopeInfoKind kind = source.readEnum(ScopeInfoKind.values);
     switch (kind) {
       case ScopeInfoKind.scopeInfo:
@@ -82,7 +82,7 @@
   }
 
   /// Serializes this [ScopeInfo] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     throw UnsupportedError('${runtimeType}.writeToDataSink');
   }
 
@@ -126,7 +126,7 @@
   const CapturedScope();
 
   /// Deserializes a [CapturedScope] object from [source].
-  factory CapturedScope.readFromDataSource(DataSource source) {
+  factory CapturedScope.readFromDataSource(DataSourceReader source) {
     ScopeInfoKind kind = source.readEnum(ScopeInfoKind.values);
     switch (kind) {
       case ScopeInfoKind.scopeInfo:
@@ -173,7 +173,7 @@
   const CapturedLoopScope();
 
   /// Deserializes a [CapturedLoopScope] object from [source].
-  factory CapturedLoopScope.readFromDataSource(DataSource source) {
+  factory CapturedLoopScope.readFromDataSource(DataSourceReader source) {
     ScopeInfoKind kind = source.readEnum(ScopeInfoKind.values);
     switch (kind) {
       case ScopeInfoKind.scopeInfo:
@@ -241,7 +241,8 @@
   const ClosureRepresentationInfo();
 
   /// Deserializes a [ClosureRepresentationInfo] object from [source].
-  factory ClosureRepresentationInfo.readFromDataSource(DataSource source) {
+  factory ClosureRepresentationInfo.readFromDataSource(
+      DataSourceReader source) {
     ScopeInfoKind kind = source.readEnum(ScopeInfoKind.values);
     switch (kind) {
       case ScopeInfoKind.scopeInfo:
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 55ad35e..6a7da07 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -112,6 +112,7 @@
   static const String reportAllMetrics = '--report-all-metrics';
 
   static const String dillDependencies = '--dill-dependencies';
+  static const String sources = '--sources';
   static const String readData = '--read-data';
   static const String writeData = '--write-data';
   static const String noClosedWorldInData = '--no-closed-world-in-data';
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 16d9ed1..527f2fa 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -40,10 +40,10 @@
 class CodegenImpact extends WorldImpact {
   const CodegenImpact();
 
-  factory CodegenImpact.readFromDataSource(DataSource source) =
+  factory CodegenImpact.readFromDataSource(DataSourceReader source) =
       _CodegenImpact.readFromDataSource;
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     throw UnsupportedError('CodegenImpact.writeToDataSink');
   }
 
@@ -105,7 +105,7 @@
       this._oneShotInterceptors)
       : super.internal(dynamicUses, staticUses, typeUses, constantUses);
 
-  factory _CodegenImpact.readFromDataSource(DataSource source) {
+  factory _CodegenImpact.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberEntity member = source.readMember();
     Set<DynamicUse> dynamicUses = source
@@ -165,7 +165,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMember(member);
     sink.writeList(dynamicUses, (DynamicUse use) => use.writeToDataSink(sink),
@@ -502,7 +502,7 @@
   /// deserialization are collected in [modularNames] and [modularExpressions]
   /// to avoid the need for visiting the [code] node post deserialization.
   factory CodegenResult.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       List<ModularName> modularNames,
       List<ModularExpression> modularExpressions) {
     source.begin(tag);
@@ -517,7 +517,7 @@
   /// The [modularNames] and [modularExpressions] fields are not directly
   /// serializes because these are embedded in the [code] node and collected
   /// through this during deserialization.
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeJsNodeOrNull(code);
     impact.writeToDataSink(sink);
@@ -635,7 +635,7 @@
 
   ModularName(this.kind, {this.data, this.set});
 
-  factory ModularName.readFromDataSource(DataSource source) {
+  factory ModularName.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ModularNameKind kind = source.readEnum(ModularNameKind.values);
     Object data;
@@ -678,7 +678,7 @@
     return ModularName(kind, data: data, set: set);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeEnum(kind);
     switch (kind) {
@@ -884,7 +884,7 @@
 
   ModularExpression(this.kind, this.data);
 
-  factory ModularExpression.readFromDataSource(DataSource source) {
+  factory ModularExpression.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ModularExpressionKind kind = source.readEnum(ModularExpressionKind.values);
     Object data;
@@ -900,7 +900,7 @@
     return ModularExpression(kind, data);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeEnum(kind);
     switch (kind) {
@@ -1107,13 +1107,13 @@
   static const String deferredHolderExpression = 'js-deferredHolderExpression';
 }
 
-/// Visitor that serializes a [js.Node] into a [DataSink].
+/// Visitor that serializes a [js.Node] into a [DataSinkWriter].
 class JsNodeSerializer implements js.NodeVisitor<void> {
-  final DataSink sink;
+  final DataSinkWriter sink;
 
   JsNodeSerializer._(this.sink);
 
-  static void writeToDataSink(DataSink sink, js.Node node) {
+  static void writeToDataSink(DataSinkWriter sink, js.Node node) {
     sink.begin(JsNodeTags.tag);
     JsNodeSerializer serializer = JsNodeSerializer._(sink);
     serializer.visit(node);
@@ -1394,7 +1394,7 @@
   @override
   void visitArrowFunction(js.ArrowFunction node) {
     sink.writeEnum(JsNodeKind.arrowFunction);
-    sink.begin(JsNodeTags.function);
+    sink.begin(JsNodeTags.arrowFunction);
     visitList(node.params);
     visit(node.body);
     sink.writeEnum(node.asyncModifier);
@@ -1775,19 +1775,19 @@
   }
 }
 
-/// Helper class that deserializes a [js.Node] from [DataSource].
+/// Helper class that deserializes a [js.Node] from [DataSourceReader].
 ///
 /// Deserialized [ModularName]s and [ModularExpression]s are collected in the
 /// [modularNames] and [modularExpressions] lists.
 class JsNodeDeserializer {
-  final DataSource source;
+  final DataSourceReader source;
   final List<ModularName> modularNames;
   final List<ModularExpression> modularExpressions;
 
   JsNodeDeserializer._(this.source, this.modularNames, this.modularExpressions);
 
   static js.Node readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       List<ModularName> modularNames,
       List<ModularExpression> modularExpressions) {
     source.begin(JsNodeTags.tag);
@@ -1929,7 +1929,7 @@
       case JsNodeKind.arrowFunction:
         source.begin(JsNodeTags.arrowFunction);
         List<js.Parameter> params = readList();
-        js.Block body = read();
+        js.Node body = read();
         js.AsyncModifier asyncModifier =
             source.readEnum(js.AsyncModifier.values);
         node = js.ArrowFunction(params, body, asyncModifier: asyncModifier);
@@ -2229,24 +2229,24 @@
       this.closedWorld, this.modularNames, this.modularExpressions);
 
   @override
-  AbstractValue readAbstractValue(DataSource source) {
+  AbstractValue readAbstractValue(DataSourceReader source) {
     return closedWorld.abstractValueDomain
         .readAbstractValueFromDataSource(source);
   }
 
   @override
-  js.Node readJsNode(DataSource source) {
+  js.Node readJsNode(DataSourceReader source) {
     return JsNodeDeserializer.readFromDataSource(
         source, modularNames, modularExpressions);
   }
 
   @override
-  OutputUnit readOutputUnitReference(DataSource source) {
+  OutputUnit readOutputUnitReference(DataSourceReader source) {
     return closedWorld.outputUnitData.outputUnits[source.readInt()];
   }
 
   @override
-  TypeRecipe readTypeRecipe(DataSource source) {
+  TypeRecipe readTypeRecipe(DataSourceReader source) {
     return TypeRecipe.readFromDataSource(source);
   }
 }
@@ -2257,22 +2257,22 @@
   CodegenWriterImpl(this.closedWorld);
 
   @override
-  void writeAbstractValue(DataSink sink, AbstractValue value) {
+  void writeAbstractValue(DataSinkWriter sink, AbstractValue value) {
     closedWorld.abstractValueDomain.writeAbstractValueToDataSink(sink, value);
   }
 
   @override
-  void writeJsNode(DataSink sink, js.Node node) {
+  void writeJsNode(DataSinkWriter sink, js.Node node) {
     JsNodeSerializer.writeToDataSink(sink, node);
   }
 
   @override
-  void writeOutputUnitReference(DataSink sink, OutputUnit value) {
+  void writeOutputUnitReference(DataSinkWriter sink, OutputUnit value) {
     sink.writeInt(closedWorld.outputUnitData.outputUnits.indexOf(value));
   }
 
   @override
-  void writeTypeRecipe(DataSink sink, TypeRecipe recipe) {
+  void writeTypeRecipe(DataSinkWriter sink, TypeRecipe recipe) {
     recipe.writeToDataSink(sink);
   }
 }
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index d1ddb50..62f3328 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -7,6 +7,7 @@
 import 'dart:async' show Future;
 import 'dart:convert' show jsonEncode;
 
+import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
 import 'package:kernel/ast.dart' as ir;
 
 import '../compiler.dart' as api;
@@ -22,11 +23,10 @@
 import 'deferred_load/program_split_constraints/nodes.dart' as psc
     show ConstraintData;
 import 'deferred_load/program_split_constraints/parser.dart' as psc show Parser;
-import 'diagnostics/code_location.dart';
-import 'diagnostics/messages.dart' show Message, MessageTemplate;
+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;
@@ -35,7 +35,6 @@
 import 'inferrer/typemasks/masks.dart' show TypeMaskStrategy;
 import 'inferrer/types.dart'
     show GlobalTypeInferenceResults, GlobalTypeInferenceTask;
-import 'io/source_information.dart' show SourceInformation;
 import 'ir/modular.dart';
 import 'js_backend/backend.dart' show CodegenInputs;
 import 'js_backend/enqueuer.dart';
@@ -46,22 +45,20 @@
 import 'kernel/front_end_adapter.dart' show CompilerFileSystem;
 import 'kernel/kernel_strategy.dart';
 import 'kernel/kernel_world.dart';
-import 'kernel/loader.dart' show KernelLoaderTask, KernelResult;
 import 'null_compiler_output.dart' show NullCompilerOutput;
 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';
-import 'ssa/nodes.dart' show HInstruction;
 import 'universe/selector.dart' show Selector;
 import 'universe/codegen_world_builder.dart';
 import 'universe/resolution_world_builder.dart';
 import 'universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl;
 import 'world.dart' show JClosedWorld;
 
-typedef MakeReporterFunction = CompilerDiagnosticReporter Function(
-    Compiler compiler, CompilerOptions options);
-
 /// Implementation of the compiler using  a [api.CompilerInput] for supplying
 /// the sources.
 class Compiler {
@@ -71,7 +68,7 @@
 
   KernelFrontendStrategy frontendStrategy;
   JsBackendStrategy backendStrategy;
-  CompilerDiagnosticReporter _reporter;
+  DiagnosticReporter _reporter;
   Map<Entity, WorldImpact> _impactCache;
   GenericTask userHandlerTask;
   GenericTask userProviderTask;
@@ -81,22 +78,22 @@
 
   // 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;
 
   api.CompilerOutput get outputProvider => _outputProvider;
 
-  final List<CodeLocation> _userCodeLocations = <CodeLocation>[];
-
   ir.Component componentForTesting;
   JClosedWorld backendClosedWorldForTesting;
   DataSourceIndices closedWorldIndicesForTesting;
   ResolutionEnqueuer resolutionEnqueuerForTesting;
   CodegenEnqueuer codegenEnqueuerForTesting;
 
+  ir.Component untrimmedComponentForDumpInfo;
+
   DiagnosticReporter get reporter => _reporter;
   Map<Entity, WorldImpact> get impactCache => _impactCache;
 
@@ -105,7 +102,9 @@
   Entity get currentElement => _reporter.currentElement;
 
   List<CompilerTask> tasks;
-  KernelLoaderTask kernelLoader;
+  GenericTask loadKernelTask;
+  fe.InitializedCompilerState initializedCompilerState;
+  bool forceSerializationForTesting = false;
   GlobalTypeInferenceTask globalInference;
   CodegenWorldBuilder _codegenWorldBuilder;
 
@@ -118,8 +117,6 @@
   DumpInfoTask dumpInfoTask;
   SerializationTask serializationTask;
 
-  bool get hasCrashed => _reporter.hasCrashed;
-
   Progress progress = const Progress();
 
   static const int PHASE_SCANNING = 0;
@@ -138,8 +135,7 @@
   // Callback function used for testing codegen enqueuing.
   void Function() onCodegenQueueEmptyForTesting;
 
-  Compiler(this.provider, this._outputProvider, this.handler, this.options,
-      {MakeReporterFunction makeReporter})
+  Compiler(this.provider, this._outputProvider, this.handler, this.options)
       // NOTE: allocating measurer is done upfront to ensure the wallclock is
       // started before other computations.
       : measurer = Measurer(enableTaskMeasurements: options.verbose),
@@ -160,11 +156,7 @@
     CompilerTask kernelFrontEndTask;
     selfTask = GenericTask('self', measurer);
     _outputProvider = _CompilerOutput(this, outputProvider);
-    if (makeReporter != null) {
-      _reporter = makeReporter(this, options);
-    } else {
-      _reporter = CompilerDiagnosticReporter(this);
-    }
+    _reporter = DiagnosticReporter(this);
     kernelFrontEndTask = GenericTask('Front end', measurer);
     frontendStrategy = KernelFrontendStrategy(
         kernelFrontEndTask, options, reporter, environment);
@@ -179,7 +171,7 @@
       // [enqueueTask] is created earlier because it contains the resolution
       // world objects needed by other tasks.
       enqueueTask = GenericTask('Enqueue', measurer),
-      kernelLoader = KernelLoaderTask(options, provider, reporter, measurer),
+      loadKernelTask = GenericTask('kernel loader', measurer),
       kernelFrontEndTask,
       globalInference = GlobalTypeInferenceTask(this),
       deferredLoadTask = frontendStrategy.createDeferredLoadTask(this),
@@ -191,6 +183,8 @@
       userHandlerTask = GenericTask('Diagnostic handler', measurer),
       userProviderTask = GenericTask('Input provider', measurer)
     ];
+
+    initializedCompilerState = options.kernelInitializedCompilerState;
   }
 
   /// Creates the backend strategy.
@@ -246,28 +240,18 @@
         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.
-  void dumpUnusedLibraries(KernelResult result) {
-    var usedUris = result.libraries.toSet();
+  void dumpUnusedLibraries(ir.Component component, List<Uri> libraries) {
+    var usedUris = libraries.toSet();
     bool isUnused(ir.Library l) => !usedUris.contains(l.importUri);
     String libraryString(ir.Library library) {
       return '${library.importUri}(${library.fileUri})';
     }
 
     var unusedLibraries =
-        result.component.libraries.where(isUnused).map(libraryString).toList();
+        component.libraries.where(isUnused).map(libraryString).toList();
     unusedLibraries.sort();
     var jsonLibraries = jsonEncode(unusedLibraries);
     outputProvider.createOutputSink(options.outputUri.pathSegments.last,
@@ -277,10 +261,31 @@
     reporter.reportInfo(
         reporter.createMessage(NO_LOCATION_SPANNABLE, MessageKind.GENERIC, {
       'text': "${unusedLibraries.length} unused libraries out of "
-          "${result.component.libraries.length}. Dumping to JSON."
+          "${component.libraries.length}. Dumping to JSON."
     }));
   }
 
+  /// Trims a component down to only the provided library uris.
+  ir.Component trimComponent(
+      ir.Component component, List<Uri> librariesToInclude) {
+    var irLibraryMap = <Uri, ir.Library>{};
+    var irLibraries = <ir.Library>[];
+    for (var library in component.libraries) {
+      irLibraryMap[library.importUri] = library;
+    }
+    for (var library in librariesToInclude) {
+      irLibraries.add(irLibraryMap[library]);
+    }
+    var mainMethod = component.mainMethodName;
+    var componentMode = component.mode;
+    final trimmedComponent = ir.Component(
+        libraries: irLibraries,
+        uriToSource: component.uriToSource,
+        nameRoot: component.root);
+    trimmedComponent.setMainMethodAndMode(mainMethod, true, componentMode);
+    return trimmedComponent;
+  }
+
   Future runInternal() async {
     clearState();
     var compilationTarget = options.compilationTarget;
@@ -296,113 +301,9 @@
       programSplitConstraintsData = constraintParser.read(programSplitJson);
     }
 
-    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 {
-      KernelResult result = await kernelLoader.load();
-      reporter.log("Kernel load complete");
-      if (result == null) return;
-      if (compilationFailed) {
-        return;
-      }
-      if (retainDataForTesting) {
-        componentForTesting = result.component;
-      }
-
-      frontendStrategy.registerLoadedLibraries(result);
-
-      if (options.modularMode) {
-        await runModularAnalysis(result);
-      } else {
-        List<ModuleData> data;
-        if (options.hasModularAnalysisInputs) {
-          data =
-              await serializationTask.deserializeModuleData(result.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.
-        if (options.fromDill) {
-          if (options.dumpUnusedLibraries) {
-            dumpUnusedLibraries(result);
-          }
-          if (options.entryUri != null) {
-            result.trimComponent();
-          }
-        }
-        if (options.cfeOnly) {
-          await serializationTask.serializeComponent(result.component);
-        } else {
-          await compileFromKernel(result.rootLibraryUri, result.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 selfTask.measureSubtask("compileFromKernel", () async {
+      await runSequentialPhases();
+    });
   }
 
   /// Clear the internal compiler state to prevent memory leaks when invoking
@@ -421,7 +322,13 @@
     }
   }
 
-  JClosedWorld computeClosedWorld(Uri rootLibraryUri, Iterable<Uri> libraries) {
+  JClosedWorld computeClosedWorld(
+      ir.Component component,
+      List<ModuleData> moduleData,
+      Uri rootLibraryUri,
+      Iterable<Uri> libraries) {
+    frontendStrategy.registerLoadedLibraries(component, libraries);
+    frontendStrategy.registerModuleData(moduleData);
     ResolutionEnqueuer resolutionEnqueuer = frontendStrategy
         .createResolutionEnqueuer(enqueueTask, this)
       ..onEmptyForTesting = onResolutionQueueEmptyForTesting;
@@ -471,21 +378,78 @@
     return closedWorld;
   }
 
-  void runModularAnalysis(KernelResult result) {
-    _userCodeLocations
-        .addAll(result.moduleLibraries.map((module) => CodeLocation(module)));
-    selfTask.measureSubtask('runModularAnalysis', () {
-      var included = result.moduleLibraries.toSet();
-      var elementMap = frontendStrategy.elementMap;
-      var moduleData = computeModuleData(result.component, included, options,
-          reporter, environment, elementMap);
-      if (compilationFailed) return;
-      serializationTask.testModuleSerialization(moduleData, result.component);
-      serializationTask.serializeModuleData(
-          moduleData, result.component, included);
-    });
+  Future<load_kernel.Output> loadKernel() async {
+    final input = load_kernel.Input(options, provider, reporter,
+        initializedCompilerState, forceSerializationForTesting);
+    load_kernel.Output output =
+        await loadKernelTask.measure(() async => load_kernel.run(input));
+    reporter.log("Kernel load complete");
+    return output;
   }
 
+  Future<load_kernel.Output> produceKernel() async {
+    if (options.readClosedWorldUri == null) {
+      load_kernel.Output output = await loadKernel();
+      if (output == null || compilationFailed) return null;
+      ir.Component component = output.component;
+      if (retainDataForTesting) {
+        componentForTesting = component;
+      }
+      if (options.features.newDumpInfo.isEnabled && options.dumpInfo) {
+        untrimmedComponentForDumpInfo = component;
+      }
+      if (options.cfeOnly) {
+        if (options.fromDill) {
+          List<Uri> libraries = output.libraries;
+          if (options.dumpUnusedLibraries) {
+            dumpUnusedLibraries(component, libraries);
+          }
+          if (options.entryUri != null) {
+            component = trimComponent(component, libraries);
+          }
+        }
+        await serializationTask.serializeComponent(component);
+      }
+      return output.withNewComponent(component);
+    } else {
+      ir.Component component =
+          await serializationTask.deserializeComponentAndUpdateOptions();
+      return load_kernel.Output(component, null, null, null, null);
+    }
+  }
+
+  bool shouldStopAfterLoadKernel(load_kernel.Output output) =>
+      output == null || compilationFailed || options.cfeOnly;
+
+  Future<ModuleData> runModularAnalysis(
+      load_kernel.Output output, Set<Uri> moduleLibraries) async {
+    ir.Component component = output.component;
+    List<Uri> libraries = output.libraries;
+    final input = modular_analysis.Input(
+        options, reporter, environment, component, libraries, moduleLibraries);
+    return await selfTask.measureSubtask(
+        'runModularAnalysis', () async => modular_analysis.run(input));
+  }
+
+  Future<List<ModuleData>> produceModuleData(load_kernel.Output output) async {
+    ir.Component component = output.component;
+    if (options.modularMode) {
+      Set<Uri> moduleLibraries = output.moduleLibraries.toSet();
+      ModuleData moduleData = await runModularAnalysis(output, moduleLibraries);
+      if (options.writeModularAnalysisUri != null && !compilationFailed) {
+        serializationTask.testModuleSerialization(moduleData, component);
+        serializationTask.serializeModuleData(
+            moduleData, component, moduleLibraries);
+      }
+      return [moduleData];
+    } else {
+      return await serializationTask.deserializeModuleData(component);
+    }
+  }
+
+  bool get shouldStopAfterModularAnalysis =>
+      compilationFailed || options.writeModularAnalysisUri != null;
+
   GlobalTypeInferenceResults performGlobalTypeInference(
       JClosedWorld closedWorld) {
     FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction;
@@ -498,7 +462,7 @@
         mainFunction, closedWorld, globalLocalsMap, inferredDataBuilder);
   }
 
-  void runCodegenEnqueuer(CodegenResults codegenResults) {
+  int runCodegenEnqueuer(CodegenResults codegenResults) {
     GlobalTypeInferenceResults globalInferenceResults =
         codegenResults.globalTypeInferenceResults;
     JClosedWorld closedWorld = globalInferenceResults.closedWorld;
@@ -515,6 +479,7 @@
     }
     _codegenWorldBuilder = codegenEnqueuer.worldBuilder;
 
+    reporter.log('Compiling methods');
     FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction;
     processQueue(closedWorld.elementEnvironment, codegenEnqueuer, mainFunction,
         onProgress: showCodegenProgress);
@@ -527,14 +492,10 @@
     int programSize = backendStrategy.assembleProgram(closedWorld,
         globalInferenceResults.inferredData, codegenInputs, codegenWorld);
 
-    if (options.dumpInfo) {
-      dumpInfoTask.reportSize(programSize);
-      dumpInfoTask.dumpInfo(closedWorld, globalInferenceResults);
-    }
-
     backendStrategy.onCodegenEnd(codegenInputs);
 
     checkQueue(codegenEnqueuer);
+    return programSize;
   }
 
   GlobalTypeInferenceResults globalTypeInferenceResultsTestMode(
@@ -565,33 +526,146 @@
         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;
-
-      if (retainDataForTesting) {
-        backendClosedWorldForTesting = closedWorld;
-      }
-
+  Future<ClosedWorldAndIndices> produceClosedWorld(
+      load_kernel.Output output, List<ModuleData> moduleData) async {
+    ir.Component component = output.component;
+    ClosedWorldAndIndices closedWorldAndIndices;
+    if (options.readClosedWorldUri == null) {
+      Uri rootLibraryUri = output.rootLibraryUri;
+      Iterable<Uri> libraries = output.libraries;
+      JsClosedWorld closedWorld =
+          computeClosedWorld(component, moduleData, rootLibraryUri, libraries);
+      closedWorldAndIndices = ClosedWorldAndIndices(closedWorld, null);
       if (options.writeClosedWorldUri != null) {
         serializationTask.serializeComponent(
             closedWorld.elementMap.programEnv.mainComponent);
         serializationTask.serializeClosedWorld(closedWorld);
-        return;
       }
-      if (stopAfterClosedWorld || options.stopAfterProgramSplit) return;
-      GlobalTypeInferenceResults globalInferenceResults =
-          performGlobalTypeInference(closedWorld);
-      if (options.testMode) {
-        globalInferenceResults =
-            globalTypeInferenceResultsTestMode(globalInferenceResults);
+    } else {
+      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 {
+    // Load kernel.
+    load_kernel.Output output = await produceKernel();
+    if (shouldStopAfterLoadKernel(output)) return;
+
+    // Run modular analysis. This may be null if modular analysis was not
+    // requested for this pipeline.
+    List<ModuleData> moduleData;
+    if (options.modularMode || options.hasModularAnalysisInputs) {
+      moduleData = await produceModuleData(output);
+    }
+    if (shouldStopAfterModularAnalysis) return;
+
+    // Compute closed world.
+    ClosedWorldAndIndices closedWorldAndIndices =
+        await produceClosedWorld(output, moduleData);
+    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.
+    int programSize = runCodegenEnqueuer(codegenResults);
+
+    // Dump Info.
+    if (options.dumpInfo) {
+      runDumpInfo(codegenResults, programSize);
+    }
+  }
+
+  void runDumpInfo(CodegenResults codegenResults, int programSize) {
+    GlobalTypeInferenceResults globalTypeInferenceResults =
+        codegenResults.globalTypeInferenceResults;
+    JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
+
+    dumpInfoTask.reportSize(programSize);
+    if (options.features.newDumpInfo.isEnabled) {
+      assert(untrimmedComponentForDumpInfo != null);
+      dumpInfoTask.dumpInfoNew(untrimmedComponentForDumpInfo, closedWorld,
+          globalTypeInferenceResults);
+    } else {
+      dumpInfoTask.dumpInfo(closedWorld, globalTypeInferenceResults);
+    }
   }
 
   /// Perform the steps needed to fully end the resolution phase.
@@ -736,38 +810,9 @@
     }
   }
 
-  /// Helper for determining whether the current element is declared within
-  /// 'user code'.
-  ///
-  /// See [inUserCode] for what defines 'user code'.
-  bool currentlyInUserCode() {
-    return inUserCode(currentElement);
-  }
-
   /// Helper for determining whether [element] is declared within 'user code'.
-  ///
-  /// What constitutes 'user code' is defined by the URI(s) provided by the
-  /// entry point(s) of compilation or analysis:
-  ///
-  /// If an entrypoint URI uses the 'package' scheme then every library from
-  /// that same package is considered to be in user code. For instance, if
-  /// an entry point URI is 'package:foo/bar.dart' then every library whose
-  /// canonical URI starts with 'package:foo/' is in user code.
-  ///
-  /// If an entrypoint URI uses another scheme than 'package' then every library
-  /// with that scheme is in user code. For instance, an entry point URI is
-  /// 'file:///foo.dart' then every library whose canonical URI scheme is
-  /// 'file' is in user code.
-  ///
-  /// If [assumeInUserCode] is `true`, [element] is assumed to be in user code
-  /// if no entrypoints have been set.
-  bool inUserCode(Entity element, {bool assumeInUserCode = false}) {
-    if (element == null) return assumeInUserCode;
-    Uri libraryUri = _uriFromElement(element);
-    if (libraryUri == null) return false;
-    if (_userCodeLocations.isEmpty && assumeInUserCode) return true;
-    return _userCodeLocations.any(
-        (CodeLocation codeLocation) => codeLocation.inSameLocation(libraryUri));
+  bool inUserCode(Entity element) {
+    return element == null || _uriFromElement(element) != null;
   }
 
   /// Return a canonical URI for the source of [element].
@@ -906,293 +951,6 @@
   }
 }
 
-/// Information about suppressed warnings and hints for a given library.
-class SuppressionInfo {
-  int warnings = 0;
-  int hints = 0;
-}
-
-class CompilerDiagnosticReporter extends DiagnosticReporter {
-  final Compiler compiler;
-  @override
-  CompilerOptions get options => compiler.options;
-
-  Entity _currentElement;
-  bool hasCrashed = false;
-
-  /// `true` if the last diagnostic was filtered, in which case the
-  /// accompanying info message should be filtered as well.
-  bool lastDiagnosticWasFiltered = false;
-
-  /// Map containing information about the warnings and hints that have been
-  /// suppressed for each library.
-  Map<Uri, SuppressionInfo> suppressedWarnings = <Uri, SuppressionInfo>{};
-
-  CompilerDiagnosticReporter(this.compiler);
-
-  Entity get currentElement => _currentElement;
-
-  @override
-  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
-      [Map<String, String> arguments = const {}]) {
-    SourceSpan span = spanFromSpannable(spannable);
-    MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
-    Message message = template.message(arguments, options);
-    return DiagnosticMessage(span, spannable, message);
-  }
-
-  @override
-  void reportError(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
-  }
-
-  @override
-  void reportWarning(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
-  }
-
-  @override
-  void reportHint(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
-  }
-
-  @override
-  void reportInfo(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reportDiagnosticInternal(message, infos, api.Diagnostic.INFO);
-  }
-
-  void reportDiagnosticInternal(DiagnosticMessage message,
-      List<DiagnosticMessage> infos, api.Diagnostic kind) {
-    if (!options.showAllPackageWarnings &&
-        message.spannable != NO_LOCATION_SPANNABLE) {
-      switch (kind) {
-        case api.Diagnostic.WARNING:
-        case api.Diagnostic.HINT:
-          Entity element = elementFromSpannable(message.spannable);
-          if (!compiler.inUserCode(element, assumeInUserCode: true)) {
-            Uri uri = compiler.getCanonicalUri(element);
-            if (options.showPackageWarningsFor(uri)) {
-              reportDiagnostic(message, infos, kind);
-              return;
-            }
-            SuppressionInfo info =
-                suppressedWarnings.putIfAbsent(uri, () => SuppressionInfo());
-            if (kind == api.Diagnostic.WARNING) {
-              info.warnings++;
-            } else {
-              info.hints++;
-            }
-            lastDiagnosticWasFiltered = true;
-            return;
-          }
-          break;
-        case api.Diagnostic.INFO:
-          if (lastDiagnosticWasFiltered) {
-            return;
-          }
-          break;
-      }
-    }
-    lastDiagnosticWasFiltered = false;
-    reportDiagnostic(message, infos, kind);
-  }
-
-  void reportDiagnostic(DiagnosticMessage message,
-      List<DiagnosticMessage> infos, api.Diagnostic kind) {
-    compiler.reportDiagnostic(message, infos, kind);
-    if (kind == api.Diagnostic.ERROR ||
-        kind == api.Diagnostic.CRASH ||
-        (options.fatalWarnings && kind == api.Diagnostic.WARNING)) {
-      compiler.fatalDiagnosticReported(message, infos, kind);
-    }
-  }
-
-  @override
-  bool get hasReportedError => compiler.compilationFailed;
-
-  /// Perform an operation, [f], returning the return value from [f].  If an
-  /// error occurs then report it as having occurred during compilation of
-  /// [element].  Can be nested.
-  @override
-  withCurrentElement(Entity element, f()) {
-    Entity old = currentElement;
-    _currentElement = element;
-    try {
-      return f();
-    } on SpannableAssertionFailure catch (ex) {
-      if (!hasCrashed) {
-        reportAssertionFailure(ex);
-        pleaseReportCrash();
-      }
-      hasCrashed = true;
-      rethrow;
-    } on StackOverflowError {
-      // We cannot report anything useful in this case, because we
-      // do not have enough stack space.
-      rethrow;
-    } catch (ex) {
-      if (hasCrashed) rethrow;
-      try {
-        unhandledExceptionOnElement(element);
-      } catch (doubleFault) {
-        // Ignoring exceptions in exception handling.
-      }
-      rethrow;
-    } finally {
-      _currentElement = old;
-    }
-  }
-
-  void reportAssertionFailure(SpannableAssertionFailure ex) {
-    String message =
-        (ex.message != null) ? tryToString(ex.message) : tryToString(ex);
-    reportDiagnosticInternal(
-        createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
-        const <DiagnosticMessage>[],
-        api.Diagnostic.CRASH);
-  }
-
-  /// Using [frontendStrategy] to compute a [SourceSpan] from spannable using
-  /// the [currentElement] as context.
-  SourceSpan _spanFromStrategy(Spannable spannable) {
-    SourceSpan span;
-    if (compiler.phase == Compiler.PHASE_COMPILING) {
-      span =
-          compiler.backendStrategy.spanFromSpannable(spannable, currentElement);
-    } else {
-      span = compiler.frontendStrategy
-          .spanFromSpannable(spannable, currentElement);
-    }
-    if (span != null) return span;
-    throw 'No error location.';
-  }
-
-  @override
-  SourceSpan spanFromSpannable(Spannable spannable) {
-    if (spannable == CURRENT_ELEMENT_SPANNABLE) {
-      spannable = currentElement;
-    } else if (spannable == NO_LOCATION_SPANNABLE) {
-      if (currentElement == null) return null;
-      spannable = currentElement;
-    }
-    if (spannable is SourceSpan) {
-      return spannable;
-    } else if (spannable is HInstruction) {
-      Entity element = spannable.sourceElement;
-      if (element == null) element = currentElement;
-      SourceInformation position = spannable.sourceInformation;
-      if (position != null) return position.sourceSpan;
-      return _spanFromStrategy(element);
-    } else {
-      return _spanFromStrategy(spannable);
-    }
-  }
-
-  @override
-  internalError(Spannable spannable, reason) {
-    String message = tryToString(reason);
-    reportDiagnosticInternal(
-        createMessage(spannable, MessageKind.GENERIC, {'text': message}),
-        const <DiagnosticMessage>[],
-        api.Diagnostic.CRASH);
-    throw 'Internal Error: $message';
-  }
-
-  void unhandledExceptionOnElement(Entity element) {
-    if (hasCrashed) return;
-    hasCrashed = true;
-    reportDiagnostic(createMessage(element, MessageKind.COMPILER_CRASHED),
-        const <DiagnosticMessage>[], api.Diagnostic.CRASH);
-    pleaseReportCrash();
-  }
-
-  void pleaseReportCrash() {
-    print(MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
-        .message({'buildId': compiler.options.buildId}, options));
-  }
-
-  /// Finds the approximate [Element] for [node]. [currentElement] is used as
-  /// the default value.
-  Entity elementFromSpannable(Spannable node) {
-    Entity element;
-    if (node is Entity) {
-      element = node;
-    } else if (node is HInstruction) {
-      element = node.sourceElement;
-    }
-    return element ?? currentElement;
-  }
-
-  @override
-  void log(message) {
-    Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
-        .message({'text': '$message'}, options);
-    reportDiagnostic(DiagnosticMessage(null, null, msg),
-        const <DiagnosticMessage>[], api.Diagnostic.VERBOSE_INFO);
-  }
-
-  String tryToString(object) {
-    try {
-      return object.toString();
-    } catch (_) {
-      return '<exception in toString()>';
-    }
-  }
-
-  onError(Uri uri, error, StackTrace stackTrace) {
-    try {
-      if (!hasCrashed) {
-        hasCrashed = true;
-        if (error is SpannableAssertionFailure) {
-          reportAssertionFailure(error);
-        } else {
-          reportDiagnostic(
-              createMessage(
-                  SourceSpan(uri, 0, 0), MessageKind.COMPILER_CRASHED),
-              const <DiagnosticMessage>[],
-              api.Diagnostic.CRASH);
-        }
-        pleaseReportCrash();
-      }
-    } catch (doubleFault) {
-      // Ignoring exceptions in exception handling.
-    }
-    return Future.error(error, stackTrace);
-  }
-
-  @override
-  void onCrashInUserCode(String message, exception, stackTrace) {
-    hasCrashed = true;
-    print('$message: ${tryToString(exception)}');
-    print(tryToString(stackTrace));
-  }
-
-  void reportSuppressedMessagesSummary() {
-    if (!options.showAllPackageWarnings && !options.suppressWarnings) {
-      suppressedWarnings.forEach((Uri uri, SuppressionInfo info) {
-        MessageKind kind = MessageKind.HIDDEN_WARNINGS_HINTS;
-        if (info.warnings == 0) {
-          kind = MessageKind.HIDDEN_HINTS;
-        } else if (info.hints == 0) {
-          kind = MessageKind.HIDDEN_WARNINGS;
-        }
-        MessageTemplate template = MessageTemplate.TEMPLATES[kind];
-        Message message = template.message({
-          'warnings': info.warnings.toString(),
-          'hints': info.hints.toString(),
-          'uri': uri.toString(),
-        }, options);
-        reportDiagnostic(DiagnosticMessage(null, null, message),
-            const <DiagnosticMessage>[], api.Diagnostic.HINT);
-      });
-    }
-  }
-}
-
 class _TimingData {
   final String description;
   final int milliseconds;
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 11c2d38..3c936c66 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -133,6 +133,7 @@
   bool showWarnings;
   bool showHints;
   bool enableColors;
+  List<Uri> sources;
   int optimizationLevel = null;
   Uri platformBinaries;
   Map<String, String> environment = Map<String, String>();
@@ -170,14 +171,15 @@
 
   void setOutput(Iterator<String> arguments) {
     outputSpecified = true;
+    String option = arguments.current;
     String path;
-    if (arguments.current == '-o') {
+    if (option == '-o' || option == '--out' || option == '--output') {
       if (!arguments.moveNext()) {
-        helpAndFail('Error: Missing file after -o option.');
+        helpAndFail("Missing file after '$option' option.");
       }
       path = arguments.current;
     } else {
-      path = extractParameter(arguments.current);
+      path = extractParameter(option);
     }
     out = Uri.base.resolve(fe.nativeToUriPath(path));
   }
@@ -185,7 +187,7 @@
   void setOptimizationLevel(String argument) {
     int value = int.tryParse(extractParameter(argument));
     if (value == null || value < 0 || value > 4) {
-      helpAndFail("Error: Unsupported optimization level '$argument', "
+      helpAndFail("Unsupported optimization level '$argument', "
           "supported levels are: 0, 1, 2, 3, 4");
       return;
     }
@@ -289,11 +291,12 @@
         Uri.base.resolve(extractPath(argument, isDirectory: true));
   }
 
-  void setUriList(String flag, String argument) {
+  List<Uri> setUriList(String flag, String argument) {
     String list = extractParameter(argument);
-    String uriList = list.splitMapJoin(',',
-        onMatch: (_) => ',', onNonMatch: (p) => '${fe.nativeToUri(p)}');
+    List<Uri> uris = list.split(',').map(fe.nativeToUri).toList();
+    String uriList = uris.map((uri) => '$uri').join(',');
     options.add('${flag}=${uriList}');
+    return uris;
   }
 
   void setModularAnalysisInputs(String argument) {
@@ -361,6 +364,10 @@
     setUriList(Flags.dillDependencies, argument);
   }
 
+  void setSources(String argument) {
+    sources = setUriList(Flags.sources, argument);
+  }
+
   void setCfeOnly(String argument) {
     if (writeStrategy == WriteStrategy.toModularAnalysis) {
       fail("Cannot use ${Flags.cfeOnly} "
@@ -468,14 +475,14 @@
       passThrough(argument);
       return;
     }
-    helpAndFail("Error: Unsupported dump-info format '$argument', "
+    helpAndFail("Unsupported dump-info format '$argument', "
         "supported formats are: json or binary");
   }
 
   String nullSafetyMode = null;
   void setNullSafetyMode(String argument) {
     if (nullSafetyMode != null && nullSafetyMode != argument) {
-      helpAndFail("Error: cannot specify both $nullSafetyMode and $argument.");
+      helpAndFail("Cannot specify both $nullSafetyMode and $argument.");
     }
     nullSafetyMode = argument;
     passThrough(argument);
@@ -547,6 +554,7 @@
     OptionHandler('--library-root=.+', ignoreOption),
     OptionHandler('--libraries-spec=.+', setLibrarySpecificationUri),
     OptionHandler('${Flags.dillDependencies}=.+', setDillDependencies),
+    OptionHandler('${Flags.sources}=.+', setSources),
     OptionHandler('${Flags.readModularAnalysis}=.+', setModularAnalysisInputs),
     OptionHandler(
         '${Flags.writeModularAnalysis}|${Flags.writeModularAnalysis}=.+',
@@ -566,7 +574,8 @@
     OptionHandler('${Flags.codegenShards}=.+', setCodegenShards),
     OptionHandler(Flags.cfeOnly, setCfeOnly),
     OptionHandler(Flags.debugGlobalInference, passThrough),
-    OptionHandler('--out=.+|-o.*', setOutput, multipleArguments: true),
+    OptionHandler('--output(?:=.+)?|--out(?:=.+)?|-o.*', setOutput,
+        multipleArguments: true),
     OptionHandler('-O.*', setOptimizationLevel),
     OptionHandler(Flags.allowMockCompilation, ignoreOption),
     OptionHandler(Flags.fastStartup, ignoreOption),
@@ -761,7 +770,10 @@
     helpAndExit(wantHelp, wantVersion, diagnosticHandler.verbose);
   }
 
-  if (arguments.isEmpty && entryUri == null && inputDillUri == null) {
+  if (arguments.isEmpty &&
+      entryUri == null &&
+      inputDillUri == null &&
+      sources == null) {
     helpAndFail('No Dart file specified.');
   }
 
@@ -787,8 +799,11 @@
   }
 
   // Make [scriptName] a relative path..
-  String scriptName =
-      fe.relativizeUri(Uri.base, inputDillUri ?? entryUri, Platform.isWindows);
+  String scriptName = sources == null
+      ? fe.relativizeUri(Uri.base, inputDillUri ?? entryUri, Platform.isWindows)
+      : sources
+          .map((uri) => fe.relativizeUri(Uri.base, uri, Platform.isWindows))
+          .join(',');
 
   switch (writeStrategy) {
     case WriteStrategy.toJs:
@@ -1158,7 +1173,7 @@
   -h, /h, /?, --help
     Print this usage information (add -v for information about all options).
 
-  -o <file name>, --out=<file name>
+  -o <file name>, --output=<file name>
     Write the output to <file name>.
 
   -m, --minify
@@ -1527,6 +1542,7 @@
   fromCodegenAndData,
   fromCodegenAndClosedWorldAndData,
 }
+
 enum WriteStrategy {
   toKernel,
   toModularAnalysis,
diff --git a/pkg/compiler/lib/src/deferred_load/output_unit.dart b/pkg/compiler/lib/src/deferred_load/output_unit.dart
index 17daef0..bd27d06 100644
--- a/pkg/compiler/lib/src/deferred_load/output_unit.dart
+++ b/pkg/compiler/lib/src/deferred_load/output_unit.dart
@@ -156,7 +156,7 @@
   }
 
   /// Deserializes an [OutputUnitData] object from [source].
-  factory OutputUnitData.readFromDataSource(DataSource source) {
+  factory OutputUnitData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     bool isProgramSplit = source.readBool();
     List<OutputUnit> outputUnits = source.readList(() {
@@ -205,7 +205,7 @@
   }
 
   /// Serializes this [OutputUnitData] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeBool(isProgramSplit);
     Map<OutputUnit, int> outputUnitIndices = {};
diff --git a/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
index 2428f3e..1bd334f 100644
--- a/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
+++ b/pkg/compiler/lib/src/deferred_load/program_split_constraints/builder.dart
@@ -150,9 +150,8 @@
     Map<ImportEntity, Set<ImportEntity>> singletonTransitions = {};
     Map<Constraint, SetTransition> setTransitions = {};
     Map<Constraint, Set<ImportEntity>> processed = {};
-    Queue<_WorkItem> queue = Queue.from(nodeToConstraintMap.values
-        .where((node) => node.successors.isEmpty)
-        .map((node) => _WorkItem(node)));
+    Queue<_WorkItem> queue =
+        Queue.from(nodeToConstraintMap.values.map((node) => _WorkItem(node)));
     while (queue.isNotEmpty) {
       var item = queue.removeFirst();
       var constraint = item.child;
diff --git a/pkg/compiler/lib/src/diagnostics/code_location.dart b/pkg/compiler/lib/src/diagnostics/code_location.dart
deleted file mode 100644
index 515f359..0000000
--- a/pkg/compiler/lib/src/diagnostics/code_location.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2012, 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.
-
-library dart2js.diagnostics.code_location;
-
-import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
-
-/// [CodeLocation] divides uris into different classes.
-///
-/// These are used to group uris from user code, platform libraries and
-/// packages.
-abstract class CodeLocation {
-  /// Returns `true` if [uri] is in this code location.
-  bool inSameLocation(Uri uri);
-
-  /// Returns the uri of this location relative to [baseUri].
-  String relativize(Uri baseUri);
-
-  factory CodeLocation(Uri uri) {
-    if (uri.isScheme('package')) {
-      int slashPos = uri.path.indexOf('/');
-      if (slashPos != -1) {
-        String packageName = uri.path.substring(0, slashPos);
-        return PackageLocation(packageName);
-      } else {
-        return UriLocation(uri);
-      }
-    } else {
-      return SchemeLocation(uri);
-    }
-  }
-}
-
-/// A code location defined by the scheme of the uri.
-///
-/// Used for non-package uris, such as 'dart', 'file', and 'http'.
-class SchemeLocation implements CodeLocation {
-  final Uri uri;
-
-  SchemeLocation(this.uri);
-
-  @override
-  bool inSameLocation(Uri uri) {
-    return this.uri.isScheme(uri.scheme);
-  }
-
-  @override
-  String relativize(Uri baseUri) {
-    return fe.relativizeUri(baseUri, uri, false);
-  }
-}
-
-/// A code location defined by the package name.
-///
-/// Used for package uris, separated by their `package names`, that is, the
-/// 'foo' of 'package:foo/bar.dart'.
-class PackageLocation implements CodeLocation {
-  final String packageName;
-
-  PackageLocation(this.packageName);
-
-  @override
-  bool inSameLocation(Uri uri) {
-    return uri.isScheme('package') && uri.path.startsWith('$packageName/');
-  }
-
-  @override
-  String relativize(Uri baseUri) => 'package:$packageName';
-}
-
-/// A code location defined by the whole uri.
-///
-/// Used for package uris with no package name. For instance 'package:foo.dart'.
-class UriLocation implements CodeLocation {
-  final Uri uri;
-
-  UriLocation(this.uri);
-
-  @override
-  bool inSameLocation(Uri uri) => this.uri == uri;
-
-  @override
-  String relativize(Uri baseUri) {
-    return fe.relativizeUri(baseUri, uri, false);
-  }
-}
-
-/// A code location that contains any uri.
-class AnyLocation implements CodeLocation {
-  const AnyLocation();
-
-  @override
-  bool inSameLocation(Uri uri) => true;
-
-  @override
-  String relativize(Uri baseUri) => '$baseUri';
-}
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index c425106..5fab3db 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -4,72 +4,313 @@
 
 library dart2js.diagnostic_listener;
 
+import '../../compiler.dart' as api;
+import '../compiler.dart' show Compiler;
 import '../elements/entities.dart';
-import '../options.dart' show DiagnosticOptions;
+import '../io/source_information.dart';
+import '../options.dart';
+import '../ssa/nodes.dart' show HInstruction;
 import 'messages.dart';
 import 'source_span.dart' show SourceSpan;
-import 'spannable.dart' show Spannable;
+import 'spannable.dart';
 
-// TODO(johnniwinther): Rename and cleanup this interface. Add severity enum.
-abstract class DiagnosticReporter {
-  DiagnosticOptions get options;
+class DiagnosticReporter {
+  final Compiler _compiler;
 
-  // TODO(karlklose): rename log to something like reportInfo.
-  void log(message);
+  CompilerOptions get options => _compiler.options;
 
-  internalError(Spannable spannable, message);
+  Entity _currentElement;
+  bool _hasCrashed = false;
 
-  /// Creates a [SourceSpan] for [node] in scope of the current element.
-  ///
-  /// If [node] is a [Node] we assert in checked mode that the corresponding
-  /// tokens can be found within the tokens of the current element.
-  SourceSpan spanFromSpannable(Spannable node);
+  /// `true` if the last diagnostic was filtered, in which case the
+  /// accompanying info message should be filtered as well.
+  bool _lastDiagnosticWasFiltered = false;
+
+  /// Map containing information about the warnings and hints that have been
+  /// suppressed for each library.
+  final Map<Uri, SuppressionInfo> _suppressedWarnings = {};
+
+  DiagnosticReporter(this._compiler);
+
+  Entity get currentElement => _currentElement;
+
+  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
+      [Map<String, String> arguments = const {}]) {
+    SourceSpan span = spanFromSpannable(spannable);
+    MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
+    Message message = template.message(arguments, options);
+    return DiagnosticMessage(span, spannable, message);
+  }
+
+  void reportError(DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    _reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
+  }
 
   void reportErrorMessage(Spannable spannable, MessageKind messageKind,
       [Map<String, String> arguments = const {}]) {
     reportError(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportError(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+  void reportWarning(DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    _reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
+  }
 
   void reportWarningMessage(Spannable spannable, MessageKind messageKind,
       [Map<String, String> arguments = const {}]) {
     reportWarning(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportWarning(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+  void reportHint(DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    _reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
+  }
 
   void reportHintMessage(Spannable spannable, MessageKind messageKind,
       [Map<String, String> arguments = const {}]) {
     reportHint(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportHint(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+  void reportInfo(DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    _reportDiagnosticInternal(message, infos, api.Diagnostic.INFO);
+  }
 
   void reportInfoMessage(Spannable node, MessageKind errorCode,
       [Map<String, String> arguments = const {}]) {
     reportInfo(createMessage(node, errorCode, arguments));
   }
 
-  void reportInfo(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+  void _reportDiagnosticInternal(DiagnosticMessage message,
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
+    if (!options.showAllPackageWarnings &&
+        message.spannable != NO_LOCATION_SPANNABLE) {
+      switch (kind) {
+        case api.Diagnostic.WARNING:
+        case api.Diagnostic.HINT:
+          Entity element = _elementFromSpannable(message.spannable);
+          if (!_compiler.inUserCode(element)) {
+            Uri uri = _compiler.getCanonicalUri(element);
+            if (options.showPackageWarningsFor(uri)) {
+              _reportDiagnostic(message, infos, kind);
+              return;
+            }
+            SuppressionInfo info =
+                _suppressedWarnings.putIfAbsent(uri, () => SuppressionInfo());
+            if (kind == api.Diagnostic.WARNING) {
+              info.warnings++;
+            } else {
+              info.hints++;
+            }
+            _lastDiagnosticWasFiltered = true;
+            return;
+          }
+          break;
+        case api.Diagnostic.INFO:
+          if (_lastDiagnosticWasFiltered) {
+            return;
+          }
+          break;
+      }
+    }
+    _lastDiagnosticWasFiltered = false;
+    _reportDiagnostic(message, infos, kind);
+  }
 
-  /// Set current element of this reporter to [element]. This is used for
-  /// creating [SourceSpan] in [spanFromSpannable].
-  withCurrentElement(Entity element, f());
-
-  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
-      [Map<String, String> arguments = const {}]);
+  void _reportDiagnostic(DiagnosticMessage message,
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
+    _compiler.reportDiagnostic(message, infos, kind);
+    if (kind == api.Diagnostic.ERROR ||
+        kind == api.Diagnostic.CRASH ||
+        (options.fatalWarnings && kind == api.Diagnostic.WARNING)) {
+      _compiler.fatalDiagnosticReported(message, infos, kind);
+    }
+  }
 
   /// Returns `true` if a crash, an error or a fatal warning has been reported.
-  bool get hasReportedError;
+  bool get hasReportedError => _compiler.compilationFailed;
+
+  /// Set current element of this reporter to [element]. This is used for
+  /// creating [SourceSpan] in [spanFromSpannable]. That is,
+  /// [withCurrentElement] performs an operation, [f], returning the return
+  /// value from [f].  If an error occurs then report it as having occurred
+  /// during compilation of [element].  Can be nested.
+  dynamic withCurrentElement(Entity element, dynamic f()) {
+    Entity old = currentElement;
+    _currentElement = element;
+    try {
+      return f();
+    } on SpannableAssertionFailure catch (ex) {
+      if (!_hasCrashed) {
+        _reportAssertionFailure(ex);
+        _pleaseReportCrash();
+      }
+      _hasCrashed = true;
+      rethrow;
+    } on StackOverflowError {
+      // We cannot report anything useful in this case, because we
+      // do not have enough stack space.
+      rethrow;
+    } catch (ex) {
+      if (_hasCrashed) rethrow;
+      try {
+        _unhandledExceptionOnElement(element);
+      } catch (doubleFault) {
+        // Ignoring exceptions in exception handling.
+      }
+      rethrow;
+    } finally {
+      _currentElement = old;
+    }
+  }
+
+  void _reportAssertionFailure(SpannableAssertionFailure ex) {
+    String message =
+        (ex.message != null) ? tryToString(ex.message) : tryToString(ex);
+    _reportDiagnosticInternal(
+        createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
+        const <DiagnosticMessage>[],
+        api.Diagnostic.CRASH);
+  }
+
+  /// Using [frontendStrategy] to compute a [SourceSpan] from spannable using
+  /// the [currentElement] as context.
+  SourceSpan _spanFromStrategy(Spannable spannable) {
+    SourceSpan span;
+    if (_compiler.phase == Compiler.PHASE_COMPILING) {
+      span = _compiler.backendStrategy
+          .spanFromSpannable(spannable, currentElement);
+    } else {
+      span = _compiler.frontendStrategy
+          .spanFromSpannable(spannable, currentElement);
+    }
+    if (span != null) return span;
+    throw 'No error location.';
+  }
+
+  /// Creates a [SourceSpan] for [node] in scope of the current element.
+  ///
+  /// If [node] is a [Node] we assert in checked mode that the corresponding
+  /// tokens can be found within the tokens of the current element.
+  SourceSpan spanFromSpannable(Spannable spannable) {
+    if (spannable == CURRENT_ELEMENT_SPANNABLE) {
+      spannable = currentElement;
+    } else if (spannable == NO_LOCATION_SPANNABLE) {
+      if (currentElement == null) return null;
+      spannable = currentElement;
+    }
+    if (spannable is SourceSpan) {
+      return spannable;
+    } else if (spannable is HInstruction) {
+      Entity element = spannable.sourceElement;
+      if (element == null) element = currentElement;
+      SourceInformation position = spannable.sourceInformation;
+      if (position != null) return position.sourceSpan;
+      return _spanFromStrategy(element);
+    } else {
+      return _spanFromStrategy(spannable);
+    }
+  }
+
+  dynamic internalError(Spannable spannable, reason) {
+    String message = tryToString(reason);
+    _reportDiagnosticInternal(
+        createMessage(spannable, MessageKind.GENERIC, {'text': message}),
+        const <DiagnosticMessage>[],
+        api.Diagnostic.CRASH);
+    throw 'Internal Error: $message';
+  }
+
+  void _unhandledExceptionOnElement(Entity element) {
+    if (_hasCrashed) return;
+    _hasCrashed = true;
+    _reportDiagnostic(createMessage(element, MessageKind.COMPILER_CRASHED),
+        const <DiagnosticMessage>[], api.Diagnostic.CRASH);
+    _pleaseReportCrash();
+  }
+
+  void _pleaseReportCrash() {
+    print(MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
+        .message({'buildId': _compiler.options.buildId}, options));
+  }
+
+  /// Finds the approximate [Element] for [node]. [currentElement] is used as
+  /// the default value.
+  Entity _elementFromSpannable(Spannable node) {
+    Entity element;
+    if (node is Entity) {
+      element = node;
+    } else if (node is HInstruction) {
+      element = node.sourceElement;
+    }
+    return element ?? currentElement;
+  }
+
+  void log(message) {
+    Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
+        .message({'text': '$message'}, options);
+    _reportDiagnostic(DiagnosticMessage(null, null, msg),
+        const <DiagnosticMessage>[], api.Diagnostic.VERBOSE_INFO);
+  }
+
+  String tryToString(object) {
+    try {
+      return object.toString();
+    } catch (_) {
+      return '<exception in toString()>';
+    }
+  }
+
+  Future onError(Uri uri, error, StackTrace stackTrace) {
+    try {
+      if (!_hasCrashed) {
+        _hasCrashed = true;
+        if (error is SpannableAssertionFailure) {
+          _reportAssertionFailure(error);
+        } else {
+          _reportDiagnostic(
+              createMessage(
+                  SourceSpan(uri, 0, 0), MessageKind.COMPILER_CRASHED),
+              const <DiagnosticMessage>[],
+              api.Diagnostic.CRASH);
+        }
+        _pleaseReportCrash();
+      }
+    } catch (doubleFault) {
+      // Ignoring exceptions in exception handling.
+    }
+    return Future.error(error, stackTrace);
+  }
 
   /// Called when an [exception] is thrown from user-provided code, like from
   /// the input provider or diagnostics handler.
-  void onCrashInUserCode(String message, exception, stackTrace) {}
+  void onCrashInUserCode(String message, exception, stackTrace) {
+    _hasCrashed = true;
+    print('$message: ${tryToString(exception)}');
+    print(tryToString(stackTrace));
+  }
+
+  void reportSuppressedMessagesSummary() {
+    if (!options.showAllPackageWarnings && !options.suppressWarnings) {
+      _suppressedWarnings.forEach((Uri uri, SuppressionInfo info) {
+        MessageKind kind = MessageKind.HIDDEN_WARNINGS_HINTS;
+        if (info.warnings == 0) {
+          kind = MessageKind.HIDDEN_HINTS;
+        } else if (info.hints == 0) {
+          kind = MessageKind.HIDDEN_WARNINGS;
+        }
+        MessageTemplate template = MessageTemplate.TEMPLATES[kind];
+        Message message = template.message({
+          'warnings': info.warnings.toString(),
+          'hints': info.hints.toString(),
+          'uri': uri.toString(),
+        }, options);
+        _reportDiagnostic(DiagnosticMessage(null, null, message),
+            const <DiagnosticMessage>[], api.Diagnostic.HINT);
+      });
+    }
+  }
 }
 
 class DiagnosticMessage {
@@ -79,3 +320,9 @@
 
   DiagnosticMessage(this.sourceSpan, this.spannable, this.message);
 }
+
+/// Information about suppressed warnings and hints for a given library.
+class SuppressionInfo {
+  int warnings = 0;
+  int hints = 0;
+}
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index 06b64b7..77d8144 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -10,6 +10,7 @@
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/json_info_codec.dart';
 import 'package:dart2js_info/binary_serialization.dart' as dump_info;
+import 'package:kernel/ast.dart' as ir;
 
 import '../compiler.dart';
 import 'common.dart';
@@ -26,7 +27,6 @@
 import 'js/js.dart' as jsAst;
 import 'js_model/js_strategy.dart';
 import 'js_backend/field_analysis.dart';
-import 'universe/codegen_world_builder.dart';
 import 'universe/world_impact.dart' show WorldImpact, WorldImpactVisitorImpl;
 import 'util/sink_adapter.dart';
 import 'world.dart' show JClosedWorld;
@@ -38,7 +38,6 @@
   final DumpInfoTask dumpInfoTask;
 
   JElementEnvironment get environment => closedWorld.elementEnvironment;
-  CodegenWorldBuilder get codegenWorldBuilder => compiler.codegenWorldBuilder;
 
   final AllInfo result = AllInfo();
   final Map<Entity, Info> _entityToInfo = <Entity, Info>{};
@@ -409,6 +408,384 @@
   }
 }
 
+class KernelInfoCollector {
+  final ir.Component component;
+  final Compiler compiler;
+  final JClosedWorld closedWorld;
+  final GlobalTypeInferenceResults _globalInferenceResults;
+  final DumpInfoTask dumpInfoTask;
+
+  JElementEnvironment get environment => closedWorld.elementEnvironment;
+
+  final AllInfo result = AllInfo();
+  final Map<Entity, Info> _entityToInfo = <Entity, Info>{};
+  final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{};
+  final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {};
+
+  KernelInfoCollector(this.component, this.compiler, this.dumpInfoTask,
+      this.closedWorld, this._globalInferenceResults);
+
+  void run() {
+    dumpInfoTask._constantToNode.forEach((constant, node) {
+      // TODO(sigmund): add dependencies on other constants
+      var span = dumpInfoTask._nodeData[node];
+      var info = ConstantInfo(
+          size: span.end - span.start,
+          code: [span],
+          outputUnit: _unitInfoForConstant(constant));
+      _constantToInfo[constant] = info;
+      result.constants.add(info);
+    });
+    environment.libraries.forEach(visitLibrary);
+  }
+
+  /// Whether to emit information about [entity].
+  ///
+  /// By default we emit information for any entity that contributes to the
+  /// output size. Either because it is a function being emitted or inlined,
+  /// or because it is an entity that holds dependencies to other entities.
+  bool shouldKeep(Entity entity) {
+    return dumpInfoTask.impacts.containsKey(entity) ||
+        dumpInfoTask.inlineCount.containsKey(entity);
+  }
+
+  LibraryInfo visitLibrary(LibraryEntity lib) {
+    String libname = environment.getLibraryName(lib);
+    if (libname.isEmpty) {
+      libname = '<unnamed>';
+    }
+    int size = dumpInfoTask.sizeOf(lib);
+    LibraryInfo info = LibraryInfo(libname, lib.canonicalUri, null, size);
+    _entityToInfo[lib] = info;
+
+    environment.forEachLibraryMember(lib, (MemberEntity member) {
+      if (member.isFunction || member.isGetter || member.isSetter) {
+        FunctionInfo functionInfo = visitFunction(member);
+        if (functionInfo != null) {
+          info.topLevelFunctions.add(functionInfo);
+          functionInfo.parent = info;
+        }
+      } else if (member.isField) {
+        FieldInfo fieldInfo = visitField(member);
+        if (fieldInfo != null) {
+          info.topLevelVariables.add(fieldInfo);
+          fieldInfo.parent = info;
+        }
+      }
+    });
+
+    environment.forEachClass(lib, (ClassEntity clazz) {
+      ClassTypeInfo classTypeInfo = visitClassType(clazz);
+      if (classTypeInfo != null) {
+        info.classTypes.add(classTypeInfo);
+        classTypeInfo.parent = info;
+      }
+
+      ClassInfo classInfo = visitClass(clazz);
+      if (classInfo != null) {
+        info.classes.add(classInfo);
+        classInfo.parent = info;
+      }
+    });
+
+    if (info.isEmpty && !shouldKeep(lib)) return null;
+    result.libraries.add(info);
+    return info;
+  }
+
+  GlobalTypeInferenceMemberResult _resultOfMember(MemberEntity e) =>
+      _globalInferenceResults.resultOfMember(e);
+
+  AbstractValue _resultOfParameter(Local e) =>
+      _globalInferenceResults.resultOfParameter(e);
+
+  FieldInfo visitField(FieldEntity field, {ClassEntity containingClass}) {
+    AbstractValue inferredType = _resultOfMember(field).type;
+    // If a field has an empty inferred type it is never used.
+    if (inferredType == null ||
+        closedWorld.abstractValueDomain
+            .isEmpty(inferredType)
+            .isDefinitelyTrue) {
+      return null;
+    }
+
+    int size = dumpInfoTask.sizeOf(field);
+    List<CodeSpan> code = dumpInfoTask.codeOf(field);
+
+    // TODO(het): Why doesn't `size` account for the code size already?
+    if (code != null) size += code.length;
+
+    FieldInfo info = FieldInfo(
+        name: field.name,
+        type: '${environment.getFieldType(field)}',
+        inferredType: '$inferredType',
+        code: code,
+        outputUnit: _unitInfoForMember(field),
+        isConst: field.isConst);
+    _entityToInfo[field] = info;
+    FieldAnalysisData fieldData = closedWorld.fieldAnalysis.getFieldData(field);
+    if (fieldData.initialValue != null) {
+      info.initializer = _constantToInfo[fieldData.initialValue];
+    }
+
+    if (compiler.options.experimentCallInstrumentation) {
+      // We use field.hashCode because it is globally unique and it is
+      // available while we are doing codegen.
+      info.coverageId = '${field.hashCode}';
+    }
+
+    int closureSize = _addClosureInfo(info, field);
+    info.size = size + closureSize;
+
+    result.fields.add(info);
+    return info;
+  }
+
+  ClassTypeInfo visitClassType(ClassEntity clazz) {
+    // Omit class type if it is not needed.
+    ClassTypeInfo classTypeInfo = ClassTypeInfo(
+        name: clazz.name, outputUnit: _unitInfoForClassType(clazz));
+
+    // TODO(joshualitt): Get accurate size information for class types.
+    classTypeInfo.size = 0;
+
+    bool isNeeded =
+        compiler.backendStrategy.emitterTask.neededClassTypes.contains(clazz);
+    if (!isNeeded) {
+      return null;
+    }
+
+    result.classTypes.add(classTypeInfo);
+    return classTypeInfo;
+  }
+
+  ClassInfo visitClass(ClassEntity clazz) {
+    // Omit class if it is not needed.
+    ClassInfo classInfo = ClassInfo(
+        name: clazz.name,
+        isAbstract: clazz.isAbstract,
+        outputUnit: _unitInfoForClass(clazz));
+    _entityToInfo[clazz] = classInfo;
+
+    int size = dumpInfoTask.sizeOf(clazz);
+    environment.forEachLocalClassMember(clazz, (member) {
+      if (member.isFunction || member.isGetter || member.isSetter) {
+        FunctionInfo functionInfo = visitFunction(member);
+        if (functionInfo != null) {
+          classInfo.functions.add(functionInfo);
+          functionInfo.parent = classInfo;
+          for (var closureInfo in functionInfo.closures) {
+            size += closureInfo.size;
+          }
+        }
+      } else if (member.isField) {
+        FieldInfo fieldInfo = visitField(member, containingClass: clazz);
+        if (fieldInfo != null) {
+          classInfo.fields.add(fieldInfo);
+          fieldInfo.parent = classInfo;
+          for (var closureInfo in fieldInfo.closures) {
+            size += closureInfo.size;
+          }
+        }
+      } else {
+        throw StateError('Class member not a function or field');
+      }
+    });
+    environment.forEachConstructor(clazz, (constructor) {
+      FunctionInfo functionInfo = visitFunction(constructor);
+      if (functionInfo != null) {
+        classInfo.functions.add(functionInfo);
+        functionInfo.parent = classInfo;
+        for (var closureInfo in functionInfo.closures) {
+          size += closureInfo.size;
+        }
+      }
+    });
+
+    classInfo.size = size;
+
+    if (!compiler.backendStrategy.emitterTask.neededClasses.contains(clazz) &&
+        classInfo.fields.isEmpty &&
+        classInfo.functions.isEmpty) {
+      return null;
+    }
+
+    result.classes.add(classInfo);
+    return classInfo;
+  }
+
+  ClosureInfo visitClosureClass(ClassEntity element) {
+    ClosureInfo closureInfo = ClosureInfo(
+        name: element.name,
+        outputUnit: _unitInfoForClass(element),
+        size: dumpInfoTask.sizeOf(element));
+    _entityToInfo[element] = closureInfo;
+
+    FunctionEntity callMethod = closedWorld.elementEnvironment
+        .lookupClassMember(element, Identifiers.call);
+
+    FunctionInfo functionInfo = visitFunction(callMethod);
+    if (functionInfo == null) return null;
+    closureInfo.function = functionInfo;
+    functionInfo.parent = closureInfo;
+
+    result.closures.add(closureInfo);
+    return closureInfo;
+  }
+
+  FunctionInfo visitFunction(FunctionEntity function) {
+    int size = dumpInfoTask.sizeOf(function);
+    // TODO(sigmund): consider adding a small info to represent unreachable
+    // code here.
+    if (size == 0 && !shouldKeep(function)) return null;
+
+    // TODO(het): use 'toString' instead of 'text'? It will add '=' for setters
+    String name = function.memberName.text;
+    int kind;
+    if (function.isStatic || function.isTopLevel) {
+      kind = FunctionInfo.TOP_LEVEL_FUNCTION_KIND;
+    } else if (function.enclosingClass != null) {
+      kind = FunctionInfo.METHOD_FUNCTION_KIND;
+    }
+
+    if (function.isConstructor) {
+      name = name == ""
+          ? "${function.enclosingClass.name}"
+          : "${function.enclosingClass.name}.${function.name}";
+      kind = FunctionInfo.CONSTRUCTOR_FUNCTION_KIND;
+    }
+
+    assert(kind != null);
+
+    FunctionModifiers modifiers = FunctionModifiers(
+      isStatic: function.isStatic,
+      isConst: function.isConst,
+      isFactory: function.isConstructor
+          ? (function as ConstructorEntity).isFactoryConstructor
+          : false,
+      isExternal: function.isExternal,
+    );
+    List<CodeSpan> code = dumpInfoTask.codeOf(function);
+
+    List<ParameterInfo> parameters = <ParameterInfo>[];
+    List<String> inferredParameterTypes = <String>[];
+
+    closedWorld.elementEnvironment.forEachParameterAsLocal(
+        _globalInferenceResults.globalLocalsMap, function, (parameter) {
+      inferredParameterTypes.add('${_resultOfParameter(parameter)}');
+    });
+    int parameterIndex = 0;
+    closedWorld.elementEnvironment.forEachParameter(function, (type, name, _) {
+      // Synthesized parameters have no name. This can happen on parameters of
+      // setters derived from lowering late fields.
+      parameters.add(ParameterInfo(name ?? '#t${parameterIndex}',
+          inferredParameterTypes[parameterIndex++], '$type'));
+    });
+
+    var functionType = environment.getFunctionType(function);
+    String returnType = '${functionType.returnType}';
+
+    String inferredReturnType = '${_resultOfMember(function).returnType}';
+    String sideEffects =
+        '${_globalInferenceResults.inferredData.getSideEffectsOfElement(function)}';
+
+    int inlinedCount = dumpInfoTask.inlineCount[function];
+    if (inlinedCount == null) inlinedCount = 0;
+
+    FunctionInfo info = FunctionInfo(
+        name: name,
+        functionKind: kind,
+        modifiers: modifiers,
+        returnType: returnType,
+        inferredReturnType: inferredReturnType,
+        parameters: parameters,
+        sideEffects: sideEffects,
+        inlinedCount: inlinedCount,
+        code: code,
+        type: functionType.toString(),
+        outputUnit: _unitInfoForMember(function));
+    _entityToInfo[function] = info;
+
+    int closureSize = _addClosureInfo(info, function);
+    size += closureSize;
+
+    if (compiler.options.experimentCallInstrumentation) {
+      // We use function.hashCode because it is globally unique and it is
+      // available while we are doing codegen.
+      info.coverageId = '${function.hashCode}';
+    }
+
+    info.size = size;
+
+    result.functions.add(info);
+    return info;
+  }
+
+  /// Adds closure information to [info], using all nested closures in [member].
+  ///
+  /// Returns the total size of the nested closures, to add to the info size.
+  int _addClosureInfo(Info info, MemberEntity member) {
+    assert(info is FunctionInfo || info is FieldInfo);
+    int size = 0;
+    List<ClosureInfo> nestedClosures = <ClosureInfo>[];
+    environment.forEachNestedClosure(member, (closure) {
+      ClosureInfo closureInfo = visitClosureClass(closure.enclosingClass);
+      if (closureInfo != null) {
+        closureInfo.parent = info;
+        nestedClosures.add(closureInfo);
+        size += closureInfo.size;
+      }
+    });
+    if (info is FunctionInfo) info.closures = nestedClosures;
+    if (info is FieldInfo) info.closures = nestedClosures;
+
+    return size;
+  }
+
+  OutputUnitInfo _infoFromOutputUnit(OutputUnit outputUnit) {
+    return _outputToInfo.putIfAbsent(outputUnit, () {
+      // Dump-info currently only works with the full emitter. If another
+      // emitter is used it will fail here.
+      JsBackendStrategy backendStrategy = compiler.backendStrategy;
+      assert(outputUnit.name != null || outputUnit.isMainOutput);
+      var filename = outputUnit.isMainOutput
+          ? compiler.options.outputUri.pathSegments.last
+          : deferredPartFileName(compiler.options, outputUnit.name);
+      OutputUnitInfo info = OutputUnitInfo(filename, outputUnit.name,
+          backendStrategy.emitterTask.emitter.generatedSize(outputUnit));
+      info.imports
+          .addAll(closedWorld.outputUnitData.getImportNames(outputUnit));
+      result.outputUnits.add(info);
+      return info;
+    });
+  }
+
+  OutputUnitInfo _unitInfoForMember(MemberEntity entity) {
+    return _infoFromOutputUnit(
+        closedWorld.outputUnitData.outputUnitForMember(entity));
+  }
+
+  OutputUnitInfo _unitInfoForClass(ClassEntity entity) {
+    return _infoFromOutputUnit(
+        closedWorld.outputUnitData.outputUnitForClass(entity, allowNull: true));
+  }
+
+  OutputUnitInfo _unitInfoForClassType(ClassEntity entity) {
+    return _infoFromOutputUnit(closedWorld.outputUnitData
+        .outputUnitForClassType(entity, allowNull: true));
+  }
+
+  OutputUnitInfo _unitInfoForConstant(ConstantValue constant) {
+    OutputUnit outputUnit =
+        closedWorld.outputUnitData.outputUnitForConstant(constant);
+    if (outputUnit == null) {
+      assert(constant is InterceptorConstantValue);
+      return null;
+    }
+    return _infoFromOutputUnit(outputUnit);
+  }
+}
+
 class Selection {
   final Entity selectedEntity;
   final Object receiverConstraint;
@@ -436,8 +813,6 @@
   @override
   String get name => "Dump Info";
 
-  ElementInfoCollector infoCollector;
-
   /// The size of the generated output.
   int _programSize;
 
@@ -580,11 +955,27 @@
   void dumpInfo(JClosedWorld closedWorld,
       GlobalTypeInferenceResults globalInferenceResults) {
     measure(() {
-      infoCollector = ElementInfoCollector(
+      ElementInfoCollector elementInfoCollector = ElementInfoCollector(
           compiler, this, closedWorld, globalInferenceResults)
         ..run();
 
-      var allInfo = buildDumpInfoData(closedWorld);
+      var allInfo = buildDumpInfoData(closedWorld, elementInfoCollector);
+      if (useBinaryFormat) {
+        dumpInfoBinary(allInfo);
+      } else {
+        dumpInfoJson(allInfo);
+      }
+    });
+  }
+
+  void dumpInfoNew(ir.Component component, JClosedWorld closedWorld,
+      GlobalTypeInferenceResults globalInferenceResults) {
+    measure(() {
+      KernelInfoCollector kernelInfoCollector = KernelInfoCollector(
+          component, compiler, this, closedWorld, globalInferenceResults)
+        ..run();
+
+      var allInfo = buildDumpInfoDataNew(closedWorld, kernelInfoCollector);
       if (useBinaryFormat) {
         dumpInfoBinary(allInfo);
       } else {
@@ -624,7 +1015,84 @@
     });
   }
 
-  AllInfo buildDumpInfoData(JClosedWorld closedWorld) {
+  AllInfo buildDumpInfoData(
+      JClosedWorld closedWorld, ElementInfoCollector infoCollector) {
+    Stopwatch stopwatch = Stopwatch();
+    stopwatch.start();
+
+    AllInfo result = infoCollector.result;
+
+    // Recursively build links to function uses
+    Iterable<Entity> functionEntities =
+        infoCollector._entityToInfo.keys.where((k) => k is FunctionEntity);
+    for (FunctionEntity entity in functionEntities) {
+      FunctionInfo info = infoCollector._entityToInfo[entity];
+      Iterable<Selection> uses = getRetaining(entity, closedWorld);
+      // Don't bother recording an empty list of dependencies.
+      for (Selection selection in uses) {
+        // Don't register dart2js builtin functions that are not recorded.
+        Info useInfo = infoCollector._entityToInfo[selection.selectedEntity];
+        if (useInfo == null) continue;
+        info.uses.add(
+            DependencyInfo(useInfo, selection.receiverConstraint?.toString()));
+      }
+    }
+
+    // Recursively build links to field uses
+    Iterable<Entity> fieldEntity =
+        infoCollector._entityToInfo.keys.where((k) => k is FieldEntity);
+    for (FieldEntity entity in fieldEntity) {
+      FieldInfo info = infoCollector._entityToInfo[entity];
+      Iterable<Selection> uses = getRetaining(entity, closedWorld);
+      // Don't bother recording an empty list of dependencies.
+      for (Selection selection in uses) {
+        Info useInfo = infoCollector._entityToInfo[selection.selectedEntity];
+        if (useInfo == null) continue;
+        info.uses.add(
+            DependencyInfo(useInfo, selection.receiverConstraint?.toString()));
+      }
+    }
+
+    // Track dependencies that come from inlining.
+    for (Entity entity in inlineMap.keys) {
+      CodeInfo outerInfo = infoCollector._entityToInfo[entity];
+      if (outerInfo == null) continue;
+      for (Entity inlined in inlineMap[entity]) {
+        Info inlinedInfo = infoCollector._entityToInfo[inlined];
+        if (inlinedInfo == null) continue;
+        outerInfo.uses.add(DependencyInfo(inlinedInfo, 'inlined'));
+      }
+    }
+
+    var fragmentsToLoad =
+        compiler.backendStrategy.emitterTask.emitter.finalizedFragmentsToLoad;
+    var fragmentMerger =
+        compiler.backendStrategy.emitterTask.emitter.fragmentMerger;
+    result.deferredFiles = fragmentMerger.computeDeferredMap(fragmentsToLoad);
+    stopwatch.stop();
+
+    result.program = ProgramInfo(
+        entrypoint: infoCollector
+            ._entityToInfo[closedWorld.elementEnvironment.mainFunction],
+        size: _programSize,
+        dart2jsVersion:
+            compiler.options.hasBuildId ? compiler.options.buildId : null,
+        compilationMoment: DateTime.now(),
+        compilationDuration: compiler.measurer.elapsedWallClock,
+        toJsonDuration: Duration(milliseconds: stopwatch.elapsedMilliseconds),
+        dumpInfoDuration: Duration(milliseconds: this.timing),
+        noSuchMethodEnabled: closedWorld.backendUsage.isNoSuchMethodUsed,
+        isRuntimeTypeUsed: closedWorld.backendUsage.isRuntimeTypeUsed,
+        isIsolateInUse: false,
+        isFunctionApplyUsed: closedWorld.backendUsage.isFunctionApplyUsed,
+        isMirrorsUsed: closedWorld.backendUsage.isMirrorsUsed,
+        minified: compiler.options.enableMinification);
+
+    return result;
+  }
+
+  AllInfo buildDumpInfoDataNew(
+      JClosedWorld closedWorld, KernelInfoCollector infoCollector) {
     Stopwatch stopwatch = Stopwatch();
     stopwatch.start();
 
diff --git a/pkg/compiler/lib/src/elements/entities.dart b/pkg/compiler/lib/src/elements/entities.dart
index a9f5514..f8d96a3 100644
--- a/pkg/compiler/lib/src/elements/entities.dart
+++ b/pkg/compiler/lib/src/elements/entities.dart
@@ -350,7 +350,7 @@
   }
 
   /// Deserializes a [ParameterStructure] object from [source].
-  factory ParameterStructure.readFromDataSource(DataSource source) {
+  factory ParameterStructure.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     int requiredPositionalParameters = source.readInt();
     int positionalParameters = source.readInt();
@@ -368,7 +368,7 @@
   }
 
   /// Serializes this [ParameterStructure] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(requiredPositionalParameters);
     sink.writeInt(positionalParameters);
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index c93c535..a0d63a9 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -24,7 +24,7 @@
 /// implemented directly but other entity systems, for instance based directly
 /// on kernel ir without the need for [Element].
 
-extension on DataSource {
+extension on DataSourceReader {
   List<DartType> _readDartTypes(
       List<FunctionTypeVariable> functionTypeVariables) {
     int count = readInt();
@@ -36,7 +36,7 @@
   }
 }
 
-extension on DataSink {
+extension on DataSinkWriter {
   void _writeDartTypes(
       List<DartType> types, List<FunctionTypeVariable> functionTypeVariables) {
     writeInt(types.length);
@@ -49,8 +49,8 @@
 abstract class DartType {
   const DartType();
 
-  factory DartType.readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory DartType.readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     DartTypeKind kind = source.readEnum(DartTypeKind.values);
     switch (kind) {
       case DartTypeKind.none:
@@ -86,7 +86,7 @@
   }
 
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables);
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables);
 
   /// Returns the base type if this is a [LegacyType] or [NullableType] and
   /// returns this type otherwise.
@@ -204,8 +204,8 @@
 
   const LegacyType._(this.baseType);
 
-  factory LegacyType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory LegacyType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     DartType baseType =
         DartType.readFromDataSource(source, functionTypeVariables);
     return LegacyType._(baseType);
@@ -213,7 +213,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.legacyType);
     baseType.writeToDataSink(sink, functionTypeVariables);
   }
@@ -259,8 +259,8 @@
 
   const NullableType._(this.baseType);
 
-  factory NullableType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory NullableType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     DartType baseType =
         DartType.readFromDataSource(source, functionTypeVariables);
     return NullableType._(baseType);
@@ -268,7 +268,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.nullableType);
     baseType.writeToDataSink(sink, functionTypeVariables);
   }
@@ -321,8 +321,8 @@
     return InterfaceType._allocate(element, typeArguments);
   }
 
-  factory InterfaceType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory InterfaceType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     ClassEntity element = source.readClass();
     List<DartType> typeArguments = source._readDartTypes(functionTypeVariables);
     return InterfaceType._(element, typeArguments);
@@ -330,7 +330,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.interfaceType);
     sink.writeClass(element);
     sink._writeDartTypes(typeArguments, functionTypeVariables);
@@ -393,15 +393,15 @@
 
   const TypeVariableType._(this.element);
 
-  factory TypeVariableType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory TypeVariableType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     TypeVariableEntity element = source.readTypeVariable();
     return TypeVariableType._(element);
   }
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.typeVariable);
     sink.writeTypeVariable(element);
   }
@@ -449,8 +449,8 @@
 
   FunctionTypeVariable._(this.index);
 
-  factory FunctionTypeVariable._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory FunctionTypeVariable._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     int index = source.readInt();
     assert(0 <= index && index < functionTypeVariables.length);
     return functionTypeVariables[index];
@@ -458,7 +458,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     int index = functionTypeVariables.indexOf(this);
     if (index == -1) {
       // TODO(johnniwinther): Avoid free variables.
@@ -498,14 +498,14 @@
 class NeverType extends DartType {
   const NeverType._();
 
-  factory NeverType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory NeverType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     return const NeverType._();
   }
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.neverType);
   }
 
@@ -526,13 +526,13 @@
 class VoidType extends DartType {
   const VoidType._();
 
-  factory VoidType._readFromDataSource(DataSource source,
+  factory VoidType._readFromDataSource(DataSourceReader source,
           List<FunctionTypeVariable> functionTypeVariables) =>
       const VoidType._();
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.voidType);
   }
 
@@ -553,13 +553,13 @@
 class DynamicType extends DartType {
   const DynamicType._();
 
-  factory DynamicType._readFromDataSource(DataSource source,
+  factory DynamicType._readFromDataSource(DataSourceReader source,
           List<FunctionTypeVariable> functionTypeVariables) =>
       const DynamicType._();
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.dynamicType);
   }
 
@@ -580,13 +580,13 @@
 class ErasedType extends DartType {
   const ErasedType._();
 
-  factory ErasedType._readFromDataSource(DataSource source,
+  factory ErasedType._readFromDataSource(DataSourceReader source,
           List<FunctionTypeVariable> functionTypeVariables) =>
       const ErasedType._();
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.erasedType);
   }
 
@@ -618,13 +618,13 @@
 class AnyType extends DartType {
   const AnyType._();
 
-  factory AnyType._readFromDataSource(DataSource source,
+  factory AnyType._readFromDataSource(DataSourceReader source,
           List<FunctionTypeVariable> functionTypeVariables) =>
       const AnyType._();
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.anyType);
   }
 
@@ -706,8 +706,8 @@
         typeVariables);
   }
 
-  factory FunctionType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory FunctionType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     int typeVariableCount = source.readInt();
     List<FunctionTypeVariable> typeVariables =
         List<FunctionTypeVariable>.generate(
@@ -745,7 +745,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.functionType);
     functionTypeVariables = List<FunctionTypeVariable>.of(functionTypeVariables)
       ..addAll(typeVariables);
@@ -851,8 +851,8 @@
 
   const FutureOrType._(this.typeArgument);
 
-  factory FutureOrType._readFromDataSource(
-      DataSource source, List<FunctionTypeVariable> functionTypeVariables) {
+  factory FutureOrType._readFromDataSource(DataSourceReader source,
+      List<FunctionTypeVariable> functionTypeVariables) {
     DartType typeArgument =
         DartType.readFromDataSource(source, functionTypeVariables);
     return FutureOrType._(typeArgument);
@@ -860,7 +860,7 @@
 
   @override
   void writeToDataSink(
-      DataSink sink, List<FunctionTypeVariable> functionTypeVariables) {
+      DataSinkWriter sink, List<FunctionTypeVariable> functionTypeVariables) {
     sink.writeEnum(DartTypeKind.futureOr);
     typeArgument.writeToDataSink(sink, functionTypeVariables);
   }
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/inferrer/abstract_value_domain.dart b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
index 582d331..e6d05b1 100644
--- a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
@@ -632,8 +632,8 @@
   String getCompactText(AbstractValue value);
 
   /// Deserializes an [AbstractValue] for this domain from [source].
-  AbstractValue readAbstractValueFromDataSource(DataSource source);
+  AbstractValue readAbstractValueFromDataSource(DataSourceReader source);
 
   /// Serializes this [value] for this domain to [sink].
-  void writeAbstractValueToDataSink(DataSink sink, AbstractValue value);
+  void writeAbstractValueToDataSink(DataSinkWriter sink, AbstractValue value);
 }
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 937f1c0..aa490af 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -1977,7 +1977,33 @@
     _state.markInitializationAsIndefinite();
     visit(node.body);
     LocalState stateAfterBody = _state;
-    _state = stateBefore.mergeFlow(_inferrer, stateAfterBody);
+    // If the try block contains a throw, then `stateAfterBody.aborts` will be
+    // true. The catch needs to be aware of the results of inference from the
+    // try block since we may get there via the abortive control flow:
+    //
+    // dynamic x = "bad";
+    // try {
+    //   ...
+    //   x = 0;
+    //   throw ...;
+    // } catch (_) {
+    //   print(x + 42); <-- x may be 0 here.
+    // }
+    //
+    // Note that this will also cause us to ignore aborts due to breaks,
+    // returns, and continues. Since these control flow constructs will not jump
+    // to a catch block, this may cause some types flowing into the catch block
+    // to be wider than necessary:
+    //
+    // dynamic x = "bad";
+    // try {
+    //   x = 0;
+    //   return;
+    // } catch (_) {
+    //   print(x + 42); <-- x cannot be 0 here.
+    // }
+    _state =
+        stateBefore.mergeFlow(_inferrer, stateAfterBody, ignoreAborts: true);
     for (ir.Catch catchBlock in node.catches) {
       LocalState stateBeforeCatch = _state;
       _state = LocalState.childPath(stateBeforeCatch);
@@ -1995,7 +2021,20 @@
     _state.markInitializationAsIndefinite();
     visit(node.body);
     LocalState stateAfterBody = _state;
-    _state = stateBefore.mergeFlow(_inferrer, stateAfterBody);
+    // Even if the try block contains abortive control flow, the finally block
+    // needs to be aware of the results of inference from the try block since we
+    // still reach the finally after abortive control flow:
+    //
+    // dynamic x = "bad";
+    // try {
+    //   ...
+    //   x = 0;
+    //   return;
+    // } finally {
+    //   print(x + 42); <-- x may be 0 here.
+    // }
+    _state =
+        stateBefore.mergeFlow(_inferrer, stateAfterBody, ignoreAborts: true);
     visit(node.finalizer);
     return null;
   }
@@ -2387,11 +2426,12 @@
     }
   }
 
-  LocalState mergeFlow(InferrerEngine inferrer, LocalState other) {
+  LocalState mergeFlow(InferrerEngine inferrer, LocalState other,
+      {bool ignoreAborts: false}) {
     seenReturnOrThrow = false;
     seenBreakOrContinue = false;
 
-    if (other.aborts) {
+    if (!ignoreAborts && other.aborts) {
       return this;
     }
     LocalsHandler locals = _locals.mergeFlow(inferrer, other._locals);
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index c56d855..3d9dd84 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -1354,7 +1354,7 @@
 
   /// Deserializes a [GlobalTypeInferenceElementData] object from [source].
   factory KernelGlobalTypeInferenceElementData.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     return source.inMemberContext(context, () {
@@ -1381,7 +1381,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     sink.inMemberContext(context, () {
       sink.begin(tag);
diff --git a/pkg/compiler/lib/src/inferrer/locals_handler.dart b/pkg/compiler/lib/src/inferrer/locals_handler.dart
index ed565ca..06fb529 100644
--- a/pkg/compiler/lib/src/inferrer/locals_handler.dart
+++ b/pkg/compiler/lib/src/inferrer/locals_handler.dart
@@ -221,7 +221,7 @@
     assert(elseScope != null);
 
     // Quick bailout check. If [isThisExposed] or [isIndefinite] is true, we
-    // know the code following won'TypeInformation do anything.
+    // know the code following won't do anything.
     if (isThisExposed) return this;
     if (isIndefinite) return this;
 
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
index b4f6789..6314434 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
@@ -74,14 +74,14 @@
   //TODO(coam)
   @override
   void writeAbstractValueToDataSink(
-      DataSink sink, covariant PowersetValue value) {
+      DataSinkWriter sink, covariant PowersetValue value) {
     _abstractValueDomain.writeAbstractValueToDataSink(
         sink, value._abstractValue);
   }
 
   //TODO(coam)
   @override
-  AbstractValue readAbstractValueFromDataSource(DataSource source) {
+  AbstractValue readAbstractValueFromDataSource(DataSourceReader source) {
     int powersetBits = _powersetBitsDomain.powersetTop;
     AbstractValue abstractValue =
         _abstractValueDomain.readAbstractValueFromDataSource(source);
diff --git a/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart b/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
index 7e21d25..35c2641 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/wrapped.dart
@@ -58,13 +58,13 @@
 
   @override
   void writeAbstractValueToDataSink(
-      DataSink sink, covariant WrappedAbstractValue value) {
+      DataSinkWriter sink, covariant WrappedAbstractValue value) {
     _abstractValueDomain.writeAbstractValueToDataSink(
         sink, value._abstractValue);
   }
 
   @override
-  AbstractValue readAbstractValueFromDataSource(DataSource source) =>
+  AbstractValue readAbstractValueFromDataSource(DataSourceReader source) =>
       WrappedAbstractValue(
           _abstractValueDomain.readAbstractValueFromDataSource(source));
 
diff --git a/pkg/compiler/lib/src/inferrer/trivial.dart b/pkg/compiler/lib/src/inferrer/trivial.dart
index 6ba231b..c81c91f 100644
--- a/pkg/compiler/lib/src/inferrer/trivial.dart
+++ b/pkg/compiler/lib/src/inferrer/trivial.dart
@@ -31,10 +31,10 @@
   AbstractValue get dynamicType => const TrivialAbstractValue();
 
   @override
-  void writeAbstractValueToDataSink(DataSink sink, AbstractValue value) {}
+  void writeAbstractValueToDataSink(DataSinkWriter sink, AbstractValue value) {}
 
   @override
-  AbstractValue readAbstractValueFromDataSource(DataSource source) =>
+  AbstractValue readAbstractValueFromDataSource(DataSourceReader source) =>
       const TrivialAbstractValue();
 
   @override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
index ab14e11..a001c78 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
@@ -32,7 +32,7 @@
 
   /// Deserializes a [ContainerTypeMask] object from [source].
   factory ContainerTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     TypeMask forwardTo = TypeMask.readFromDataSource(source, domain);
     ir.TreeNode allocationNode = source.readTreeNodeOrNull();
@@ -46,7 +46,7 @@
 
   /// Serializes this [ContainerTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.container);
     sink.begin(tag);
     forwardTo.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
index 00eece2..20adc15 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
@@ -29,7 +29,7 @@
 
   /// Deserializes a [DictionaryTypeMask] object from [source].
   factory DictionaryTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     TypeMask forwardTo = TypeMask.readFromDataSource(source, domain);
     ir.TreeNode allocationNode = source.readTreeNodeOrNull();
@@ -45,7 +45,7 @@
 
   /// Serializes this [DictionaryTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.dictionary);
     sink.begin(tag);
     forwardTo.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
index 321a8d7..d42d4bd 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
@@ -123,7 +123,7 @@
 
   /// Deserializes a [FlatTypeMask] object from [source].
   factory FlatTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     ClassEntity base = source.readClassOrNull();
     int flags = source.readInt();
@@ -133,7 +133,7 @@
 
   /// Serializes this [FlatTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.flat);
     sink.begin(tag);
     sink.writeClassOrNull(base);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
index 035fa9d..7232e60 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
@@ -32,7 +32,7 @@
 
   /// Deserializes a [MapTypeMask] object from [source].
   factory MapTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     TypeMask forwardTo = TypeMask.readFromDataSource(source, domain);
     ir.TreeNode allocationNode = source.readTreeNodeOrNull();
@@ -46,7 +46,7 @@
 
   /// Serializes this [MapTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.map);
     sink.begin(tag);
     forwardTo.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index c6e534b..9de70a3 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -974,13 +974,14 @@
   }
 
   @override
-  TypeMask readAbstractValueFromDataSource(DataSource source) {
+  TypeMask readAbstractValueFromDataSource(DataSourceReader source) {
     return source
         .readCached<TypeMask>(() => TypeMask.readFromDataSource(source, this));
   }
 
   @override
-  void writeAbstractValueToDataSink(DataSink sink, covariant TypeMask value) {
+  void writeAbstractValueToDataSink(
+      DataSinkWriter sink, covariant TypeMask value) {
     sink.writeCached<TypeMask>(
         value, (TypeMask value) => value.writeToDataSink(sink));
   }
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
index bfa9098..ab01cc4 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
@@ -29,7 +29,7 @@
 
   /// Deserializes a [SetTypeMask] object from [source].
   factory SetTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     TypeMask forwardTo = TypeMask.readFromDataSource(source, domain);
     ir.TreeNode allocationNode = source.readTreeNodeOrNull();
@@ -42,7 +42,7 @@
 
   /// Serializes this [SetTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.set);
     sink.begin(tag);
     forwardTo.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index 4702bdf..7f8af43 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -242,7 +242,8 @@
   }
 
   /// Deserializes a [TypeMask] object from [source].
-  factory TypeMask.readFromDataSource(DataSource source, CommonMasks domain) {
+  factory TypeMask.readFromDataSource(
+      DataSourceReader source, CommonMasks domain) {
     TypeMaskKind kind = source.readEnum(TypeMaskKind.values);
     switch (kind) {
       case TypeMaskKind.flat:
@@ -264,7 +265,7 @@
   }
 
   /// Serializes this [TypeMask] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// If [mask] is forwarding, returns the first non-forwarding [TypeMask] in
   /// [mask]'s forwarding chain.
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
index 3a647ea..c9abe7d 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
@@ -39,7 +39,7 @@
 
   /// Deserializes a [UnionTypeMask] object from [source].
   factory UnionTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     List<FlatTypeMask> disjointMasks =
         source.readList(() => TypeMask.readFromDataSource(source, domain));
@@ -52,7 +52,7 @@
 
   /// Serializes this [UnionTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.union);
     sink.begin(tag);
     sink.writeList(
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
index 62b6747..61b43de 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
@@ -17,7 +17,7 @@
 
   /// Deserializes a [ValueTypeMask] object from [source].
   factory ValueTypeMask.readFromDataSource(
-      DataSource source, CommonMasks domain) {
+      DataSourceReader source, CommonMasks domain) {
     source.begin(tag);
     TypeMask forwardTo = TypeMask.readFromDataSource(source, domain);
     ConstantValue constant = source.readConstant();
@@ -27,7 +27,7 @@
 
   /// Serializes this [ValueTypeMask] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(TypeMaskKind.value);
     sink.begin(tag);
     forwardTo.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/inferrer/types.dart b/pkg/compiler/lib/src/inferrer/types.dart
index c72c1f5..bd2c38d 100644
--- a/pkg/compiler/lib/src/inferrer/types.dart
+++ b/pkg/compiler/lib/src/inferrer/types.dart
@@ -34,12 +34,14 @@
 /// based queries (the runtime value could be anything).
 abstract class GlobalTypeInferenceMemberResult {
   /// Deserializes a [GlobalTypeInferenceMemberResult] object from [source].
-  factory GlobalTypeInferenceMemberResult.readFromDataSource(DataSource source,
-          ir.Member context, AbstractValueDomain abstractValueDomain) =
+  factory GlobalTypeInferenceMemberResult.readFromDataSource(
+          DataSourceReader source,
+          ir.Member context,
+          AbstractValueDomain abstractValueDomain) =
       GlobalTypeInferenceMemberResultImpl.readFromDataSource;
 
   /// Serializes this [GlobalTypeInferenceMemberResult] to [sink].
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain);
 
   /// The inferred type when this result belongs to a field, null otherwise.
@@ -73,12 +75,14 @@
 /// a single element.
 abstract class GlobalTypeInferenceElementData {
   /// Deserializes a [GlobalTypeInferenceElementData] object from [source].
-  factory GlobalTypeInferenceElementData.readFromDataSource(DataSource source,
-          ir.Member context, AbstractValueDomain abstractValueDomain) =
+  factory GlobalTypeInferenceElementData.readFromDataSource(
+          DataSourceReader source,
+          ir.Member context,
+          AbstractValueDomain abstractValueDomain) =
       KernelGlobalTypeInferenceElementData.readFromDataSource;
 
   /// Serializes this [GlobalTypeInferenceElementData] to [sink].
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain);
 
   /// Compresses the inner representation by removing [AbstractValue] mappings
@@ -110,7 +114,7 @@
 abstract class GlobalTypeInferenceResults {
   /// Deserializes a [GlobalTypeInferenceResults] object from [source].
   factory GlobalTypeInferenceResults.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       JsToElementMap elementMap,
       JClosedWorld closedWorld,
       GlobalLocalsMap globalLocalsMap,
@@ -124,7 +128,7 @@
   }
 
   /// Serializes this [GlobalTypeInferenceResults] to [sink].
-  void writeToDataSink(DataSink sink, JsToElementMap elementMap);
+  void writeToDataSink(DataSinkWriter sink, JsToElementMap elementMap);
 
   JClosedWorld get closedWorld;
 
@@ -239,7 +243,7 @@
         _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
 
   factory GlobalTypeInferenceResultsImpl.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       JsToElementMap elementMap,
       JClosedWorld closedWorld,
       GlobalLocalsMap globalLocalsMap,
@@ -275,7 +279,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink, JsToElementMap elementMap) {
+  void writeToDataSink(DataSinkWriter sink, JsToElementMap elementMap) {
     sink.writeBool(false); // Is _not_ trivial.
     sink.begin(tag);
     sink.writeMemberMap(
@@ -436,7 +440,7 @@
       {this.throwsAlways, this.isCalledOnce});
 
   factory GlobalTypeInferenceMemberResultImpl.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     source.begin(tag);
@@ -456,7 +460,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     sink.begin(tag);
     sink.writeValueOrNull(_data, (GlobalTypeInferenceElementData data) {
@@ -497,7 +501,7 @@
         _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
 
   @override
-  void writeToDataSink(DataSink sink, JsToElementMap elementMap) {
+  void writeToDataSink(DataSinkWriter sink, JsToElementMap elementMap) {
     sink.writeBool(true); // Is trivial.
   }
 
@@ -557,7 +561,7 @@
   bool get isCalledOnce => false;
 
   @override
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     throw UnsupportedError(
         "TrivialGlobalTypeInferenceMemberResult.writeToDataSink");
@@ -598,7 +602,7 @@
   bool get isCalledOnce => false;
 
   @override
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     throw UnsupportedError(
         "DeadFieldGlobalTypeInferenceResult.writeToDataSink");
@@ -639,7 +643,7 @@
   bool get isCalledOnce => false;
 
   @override
-  void writeToDataSink(DataSink sink, ir.Member context,
+  void writeToDataSink(DataSinkWriter sink, ir.Member context,
       AbstractValueDomain abstractValueDomain) {
     throw UnsupportedError(
         "DeadFieldGlobalTypeInferenceResult.writeToDataSink");
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index b3195a7..5844712 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -33,7 +33,8 @@
   PositionSourceInformation(
       this.startPosition, this.innerPosition, this.inliningContext);
 
-  factory PositionSourceInformation.readFromDataSource(DataSource source) {
+  factory PositionSourceInformation.readFromDataSource(
+      DataSourceReader source) {
     source.begin(tag);
     SourceLocation startPosition = source.readCached<SourceLocation>(
         () => SourceLocation.readFromDataSource(source));
@@ -47,7 +48,7 @@
         startPosition, innerPosition, inliningContext);
   }
 
-  void writeToDataSinkInternal(DataSink sink) {
+  void writeToDataSinkInternal(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeCached(
         startPosition,
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index d31486b..9098af0 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -18,7 +18,7 @@
 abstract class SourceInformation extends JavaScriptNodeSourceInformation {
   const SourceInformation();
 
-  static SourceInformation readFromDataSource(DataSource source) {
+  static SourceInformation readFromDataSource(DataSourceReader source) {
     int hasSourceInformation = source.readInt();
     if (hasSourceInformation == 0) {
       return null;
@@ -31,7 +31,7 @@
   }
 
   static void writeToDataSink(
-      DataSink sink, SourceInformation sourceInformation) {
+      DataSinkWriter sink, SourceInformation sourceInformation) {
     if (sourceInformation == null) {
       sink.writeInt(0);
     } else if (sourceInformation is SourceMappedMarker) {
@@ -82,7 +82,7 @@
 
   FrameContext(this.callInformation, this.inlinedMethodName);
 
-  factory FrameContext.readFromDataSource(DataSource source) {
+  factory FrameContext.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     SourceInformation callInformation = source.readCached<SourceInformation>(
         () => SourceInformation.readFromDataSource(source));
@@ -91,7 +91,7 @@
     return FrameContext(callInformation, inlinedMethodName);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeCached<SourceInformation>(
         callInformation,
@@ -273,7 +273,7 @@
   /// The name associated with this source location, if any.
   String get sourceName;
 
-  static SourceLocation readFromDataSource(DataSource source) {
+  static SourceLocation readFromDataSource(DataSourceReader source) {
     int hasSourceLocation = source.readInt();
     if (hasSourceLocation == 0) {
       return null;
@@ -292,7 +292,8 @@
     }
   }
 
-  static void writeToDataSink(DataSink sink, SourceLocation sourceLocation) {
+  static void writeToDataSink(
+      DataSinkWriter sink, SourceLocation sourceLocation) {
     if (sourceLocation == null) {
       sink.writeInt(0);
     } else if (sourceLocation is NoSourceLocationMarker) {
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index c72bbde..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';
 
@@ -699,7 +200,7 @@
   ImpactBuilderData(this.node, this.impactData, this.typeMapsForTesting,
       this.cachedStaticTypes);
 
-  factory ImpactBuilderData.fromDataSource(DataSource source) {
+  factory ImpactBuilderData.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     var node = source.readMemberNode();
     var data = ImpactData.fromDataSource(source);
@@ -708,7 +209,7 @@
     return ImpactBuilderData(node, data, const {}, cache);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(node);
     impactData.toDataSink(sink);
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index 34f94bd..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);
@@ -530,7 +1014,7 @@
 
   ImpactData();
 
-  ImpactData.fromDataSource(DataSource source) {
+  ImpactData.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     _superInitializers = source.readList(
         () => _SuperInitializer.fromDataSource(source),
@@ -628,7 +1112,7 @@
     source.end(tag);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
 
     sink.writeList(
@@ -1065,7 +1549,7 @@
         typeArguments, positionalArguments, namedArguments);
   }
 
-  factory _CallStructure.fromDataSource(DataSource source) {
+  factory _CallStructure.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     List<ir.DartType> typeArguments = source.readDartTypeNodes();
     int positionalArguments = source.readInt();
@@ -1075,7 +1559,7 @@
         typeArguments, positionalArguments, namedArguments);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNodes(typeArguments);
     sink.writeInt(positionalArguments);
@@ -1093,7 +1577,7 @@
 
   _SuperInitializer(this.source, this.target, this.callStructure);
 
-  factory _SuperInitializer.fromDataSource(DataSource source) {
+  factory _SuperInitializer.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Constructor sourceConstructor = source.readMemberNode();
     ir.Constructor targetConstructor = source.readMemberNode();
@@ -1103,7 +1587,7 @@
         sourceConstructor, targetConstructor, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(source);
     sink.writeMemberNode(target);
@@ -1120,7 +1604,7 @@
 
   _SuperInvocation(this.target, this.callStructure);
 
-  factory _SuperInvocation.fromDataSource(DataSource source) {
+  factory _SuperInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member member = source.readMemberNode();
     _CallStructure callStructure = _CallStructure.fromDataSource(source);
@@ -1128,7 +1612,7 @@
     return _SuperInvocation(member, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(target);
     callStructure.toDataSink(sink);
@@ -1145,7 +1629,7 @@
 
   _InstanceAccess(this.receiverType, this.classRelation, this.target);
 
-  factory _InstanceAccess.fromDataSource(DataSource source) {
+  factory _InstanceAccess.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
@@ -1154,7 +1638,7 @@
     return _InstanceAccess(receiverType, classRelation, target);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(receiverType);
     sink.writeEnum(classRelation);
@@ -1172,7 +1656,7 @@
 
   _DynamicAccess(this.receiverType, this.classRelation, this.name);
 
-  factory _DynamicAccess.fromDataSource(DataSource source) {
+  factory _DynamicAccess.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
@@ -1181,7 +1665,7 @@
     return _DynamicAccess(receiverType, classRelation, name);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(receiverType);
     sink.writeEnum(classRelation);
@@ -1198,7 +1682,7 @@
 
   _FunctionInvocation(this.receiverType, this.callStructure);
 
-  factory _FunctionInvocation.fromDataSource(DataSource source) {
+  factory _FunctionInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
     _CallStructure callStructure = _CallStructure.fromDataSource(source);
@@ -1206,7 +1690,7 @@
     return _FunctionInvocation(receiverType, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(receiverType);
     callStructure.toDataSink(sink);
@@ -1225,7 +1709,7 @@
   _InstanceInvocation(
       this.receiverType, this.classRelation, this.target, this.callStructure);
 
-  factory _InstanceInvocation.fromDataSource(DataSource source) {
+  factory _InstanceInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
@@ -1236,7 +1720,7 @@
         receiverType, classRelation, target, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(receiverType);
     sink.writeEnum(classRelation);
@@ -1257,7 +1741,7 @@
   _DynamicInvocation(
       this.receiverType, this.classRelation, this.name, this.callStructure);
 
-  factory _DynamicInvocation.fromDataSource(DataSource source) {
+  factory _DynamicInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType receiverType = source.readDartTypeNode();
     ClassRelation classRelation = source.readEnum(ClassRelation.values);
@@ -1267,7 +1751,7 @@
     return _DynamicInvocation(receiverType, classRelation, name, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(receiverType);
     sink.writeEnum(classRelation);
@@ -1285,7 +1769,7 @@
 
   _LocalFunctionInvocation(this.localFunction, this.callStructure);
 
-  factory _LocalFunctionInvocation.fromDataSource(DataSource source) {
+  factory _LocalFunctionInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.FunctionDeclaration localFunction = source.readTreeNode();
     _CallStructure callStructure = _CallStructure.fromDataSource(source);
@@ -1293,7 +1777,7 @@
     return _LocalFunctionInvocation(localFunction, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeTreeNode(localFunction);
     callStructure.toDataSink(sink);
@@ -1310,7 +1794,7 @@
 
   _StaticInvocation(this.target, this.callStructure, this.import);
 
-  factory _StaticInvocation.fromDataSource(DataSource source) {
+  factory _StaticInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Procedure target = source.readMemberNode();
     _CallStructure callStructure = _CallStructure.fromDataSource(source);
@@ -1319,7 +1803,7 @@
     return _StaticInvocation(target, callStructure, import);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(target);
     callStructure.toDataSink(sink);
@@ -1341,7 +1825,7 @@
       this.constructor, this.type, this.callStructure, this.import,
       {this.isConst});
 
-  factory _ConstructorInvocation.fromDataSource(DataSource source) {
+  factory _ConstructorInvocation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member constructor = source.readMemberNode();
     ir.InterfaceType type = source.readDartTypeNode();
@@ -1353,7 +1837,7 @@
         isConst: isConst);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(constructor);
     sink.writeDartTypeNode(type);
@@ -1393,7 +1877,7 @@
 
   _TypeUse(this.type, this.kind);
 
-  factory _TypeUse.fromDataSource(DataSource source) {
+  factory _TypeUse.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType type = source.readDartTypeNode();
     _TypeUseKind kind = source.readEnum(_TypeUseKind.values);
@@ -1401,7 +1885,7 @@
     return _TypeUse(type, kind);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(type);
     sink.writeEnum(kind);
@@ -1428,7 +1912,7 @@
 
   _RedirectingInitializer(this.constructor, this.callStructure);
 
-  factory _RedirectingInitializer.fromDataSource(DataSource source) {
+  factory _RedirectingInitializer.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Constructor constructor = source.readMemberNode();
     _CallStructure callStructure = _CallStructure.fromDataSource(source);
@@ -1436,7 +1920,7 @@
     return _RedirectingInitializer(constructor, callStructure);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(constructor);
     callStructure.toDataSink(sink);
@@ -1452,7 +1936,7 @@
 
   _TypeLiteral(this.type, this.import);
 
-  factory _TypeLiteral.fromDataSource(DataSource source) {
+  factory _TypeLiteral.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType type = source.readDartTypeNode();
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
@@ -1460,7 +1944,7 @@
     return _TypeLiteral(type, import);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(type);
     sink.writeLibraryDependencyNodeOrNull(import);
@@ -1476,7 +1960,7 @@
 
   _GenericInstantiation(this.expressionType, this.typeArguments);
 
-  factory _GenericInstantiation.fromDataSource(DataSource source) {
+  factory _GenericInstantiation.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.FunctionType expressionType = source.readDartTypeNode();
     List<ir.DartType> typeArguments = source.readDartTypeNodes();
@@ -1484,7 +1968,7 @@
     return _GenericInstantiation(expressionType, typeArguments);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(expressionType);
     sink.writeDartTypeNodes(typeArguments);
@@ -1500,7 +1984,7 @@
 
   _StaticAccess(this.target, this.import);
 
-  factory _StaticAccess.fromDataSource(DataSource source) {
+  factory _StaticAccess.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member target = source.readMemberNode();
     ir.LibraryDependency import = source.readLibraryDependencyNodeOrNull();
@@ -1508,7 +1992,7 @@
     return _StaticAccess(target, import);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNode(target);
     sink.writeLibraryDependencyNodeOrNull(import);
@@ -1526,7 +2010,7 @@
 
   _MapLiteral(this.keyType, this.valueType, {this.isConst, this.isEmpty});
 
-  factory _MapLiteral.fromDataSource(DataSource source) {
+  factory _MapLiteral.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType keyType = source.readDartTypeNode();
     ir.DartType valueType = source.readDartTypeNode();
@@ -1536,7 +2020,7 @@
     return _MapLiteral(keyType, valueType, isConst: isConst, isEmpty: isEmpty);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(keyType);
     sink.writeDartTypeNode(valueType);
@@ -1555,7 +2039,7 @@
 
   _ContainerLiteral(this.elementType, {this.isConst, this.isEmpty});
 
-  factory _ContainerLiteral.fromDataSource(DataSource source) {
+  factory _ContainerLiteral.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.DartType elementType = source.readDartTypeNode();
     bool isConst = source.readBool();
@@ -1564,7 +2048,7 @@
     return _ContainerLiteral(elementType, isConst: isConst, isEmpty: isEmpty);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartTypeNode(elementType);
     sink.writeBool(isConst);
@@ -1585,7 +2069,7 @@
 
   _RuntimeTypeUse(this.node, this.kind, this.receiverType, this.argumentType);
 
-  factory _RuntimeTypeUse.fromDataSource(DataSource source) {
+  factory _RuntimeTypeUse.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.TreeNode node = source.readTreeNode();
     RuntimeTypeUseKind kind = source.readEnum(RuntimeTypeUseKind.values);
@@ -1595,7 +2079,7 @@
     return _RuntimeTypeUse(node, kind, receiverType, argumentType);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeTreeNode(node);
     sink.writeEnum(kind);
diff --git a/pkg/compiler/lib/src/ir/modular.dart b/pkg/compiler/lib/src/ir/modular.dart
index c143853..24afe70 100644
--- a/pkg/compiler/lib/src/ir/modular.dart
+++ b/pkg/compiler/lib/src/ir/modular.dart
@@ -12,8 +12,6 @@
 import '../diagnostics/diagnostic_listener.dart';
 import '../diagnostics/messages.dart';
 import '../diagnostics/source_span.dart';
-import '../kernel/element_map.dart';
-import '../environment.dart';
 import '../ir/impact_data.dart';
 import '../ir/static_type.dart';
 import '../js_backend/annotations.dart';
@@ -56,7 +54,7 @@
 
   ModuleData(this.impactData);
 
-  factory ModuleData.fromDataSource(DataSource source) {
+  factory ModuleData.fromDataSource(DataSourceReader source) {
     source.begin(tag);
     var impactData = source
         .readMemberNodeMap(() => ImpactBuilderData.fromDataSource(source));
@@ -64,7 +62,7 @@
     return ModuleData(impactData);
   }
 
-  void toDataSink(DataSink sink) {
+  void toDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberNodeMap<ImpactBuilderData>(
         impactData, (e) => e.toDataSink(sink));
@@ -92,40 +90,6 @@
   return ModularMemberData(scopeModel, impactBuilderData);
 }
 
-ModuleData computeModuleData(
-    ir.Component component,
-    Set<Uri> includedLibraries,
-    CompilerOptions options,
-    DiagnosticReporter reporter,
-    Environment environment,
-    KernelToElementMap elementMap) {
-  var classHierarchy = elementMap.classHierarchy;
-  var typeEnvironment = elementMap.typeEnvironment;
-  var constantEvaluator = elementMap.constantEvaluator;
-  var result = <ir.Member, ImpactBuilderData>{};
-  void computeForMember(ir.Member member) {
-    var scopeModel = ScopeModel.from(member, constantEvaluator);
-    var annotations = processMemberAnnotations(
-        options, reporter, member, computePragmaAnnotationDataFromIr(member));
-    result[member] = computeModularMemberData(member,
-            options: options,
-            typeEnvironment: typeEnvironment,
-            classHierarchy: classHierarchy,
-            scopeModel: scopeModel,
-            annotations: annotations)
-        .impactBuilderData;
-  }
-
-  for (var library in component.libraries) {
-    if (!includedLibraries.contains(library.importUri)) continue;
-    library.members.forEach(computeForMember);
-    for (var cls in library.classes) {
-      cls.members.forEach(computeForMember);
-    }
-  }
-  return ModuleData(result);
-}
-
 void reportLocatedMessage(DiagnosticReporter reporter,
     ir.LocatedMessage message, List<ir.LocatedMessage> context) {
   DiagnosticMessage diagnosticMessage =
diff --git a/pkg/compiler/lib/src/ir/static_type_cache.dart b/pkg/compiler/lib/src/ir/static_type_cache.dart
index 59f2d66..f389c80 100644
--- a/pkg/compiler/lib/src/ir/static_type_cache.dart
+++ b/pkg/compiler/lib/src/ir/static_type_cache.dart
@@ -16,7 +16,7 @@
       [this._expressionTypes = const {}, this._forInIteratorTypes]);
 
   factory StaticTypeCache.readFromDataSource(
-      DataSource source, ir.Member context) {
+      DataSourceReader source, ir.Member context) {
     return source.inMemberContext(context, () {
       source.begin(tag);
       Map<ir.Expression, ir.DartType> expressionTypes =
@@ -28,7 +28,7 @@
     });
   }
 
-  void writeToDataSink(DataSink sink, ir.Member context) {
+  void writeToDataSink(DataSinkWriter sink, ir.Member context) {
     sink.inMemberContext(context, () {
       sink.begin(tag);
       sink.writeTreeNodeMapInContext(_expressionTypes, sink.writeDartTypeNode);
diff --git a/pkg/compiler/lib/src/ir/visitors.dart b/pkg/compiler/lib/src/ir/visitors.dart
index 8e014ab..b3d182c2 100644
--- a/pkg/compiler/lib/src/ir/visitors.dart
+++ b/pkg/compiler/lib/src/ir/visitors.dart
@@ -45,7 +45,6 @@
   final IrToElementMap elementMap;
   final Map<ir.TypeParameter, DartType> currentFunctionTypeParameters =
       <ir.TypeParameter, DartType>{};
-  bool topLevel = true;
 
   DartTypeConverter(this.elementMap);
 
@@ -62,14 +61,7 @@
     }
   }
 
-  DartType convert(ir.DartType type) {
-    topLevel = true;
-    return type.accept(this);
-  }
-
-  /// Visit a inner type.
   DartType visitType(ir.DartType type) {
-    topLevel = false;
     return type.accept(this);
   }
 
@@ -77,7 +69,6 @@
       visitInterfaceType(node.asInterfaceType).withoutNullability;
 
   List<DartType> visitTypes(List<ir.DartType> types) {
-    topLevel = false;
     return List.generate(
         types.length, (int index) => types[index].accept(this));
   }
diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index cf4c049..6994be7 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.dart
@@ -256,11 +256,11 @@
 abstract class AnnotationsData {
   /// Deserializes a [AnnotationsData] object from [source].
   factory AnnotationsData.readFromDataSource(
-          CompilerOptions options, DataSource source) =
+          CompilerOptions options, DataSourceReader source) =
       AnnotationsDataImpl.readFromDataSource;
 
   /// Serializes this [AnnotationsData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Returns `true` if [member] has an `@pragma('dart2js:assumeDynamic')`
   /// annotation.
@@ -356,7 +356,7 @@
             options.defaultIndexBoundsCheckPolicy;
 
   factory AnnotationsDataImpl.readFromDataSource(
-      CompilerOptions options, DataSource source) {
+      CompilerOptions options, DataSourceReader source) {
     source.begin(tag);
     Map<MemberEntity, EnumSet<PragmaAnnotation>> pragmaAnnotations =
         source.readMemberMap(
@@ -366,7 +366,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberMap(pragmaAnnotations,
         (MemberEntity member, EnumSet<PragmaAnnotation> set) {
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 3c01756..ce19532 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -256,31 +256,14 @@
   }
 }
 
-/// Interface for resources only used during code generation.
-abstract class CodegenInputs {
-  CheckedModeHelpers get checkedModeHelpers;
-  RuntimeTypesSubstitutions get rtiSubstitutions;
-  RecipeEncoder get rtiRecipeEncoder;
-  Tracer get tracer;
-  FixedNames get fixedNames;
-}
-
-class CodegenInputsImpl implements CodegenInputs {
-  @override
+/// Holds resources only used during code generation.
+class CodegenInputs {
   final CheckedModeHelpers checkedModeHelpers = CheckedModeHelpers();
-
-  @override
   final RuntimeTypesSubstitutions rtiSubstitutions;
-
-  @override
   final RecipeEncoder rtiRecipeEncoder;
-
-  @override
   final Tracer tracer;
-
-  @override
   final FixedNames fixedNames;
 
-  CodegenInputsImpl(this.rtiSubstitutions, this.rtiRecipeEncoder, this.tracer,
+  CodegenInputs(this.rtiSubstitutions, this.rtiRecipeEncoder, this.tracer,
       this.fixedNames);
 }
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 08f17ce..600075d 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -15,11 +15,11 @@
 
 abstract class BackendUsage {
   /// Deserializes a [BackendUsage] object from [source].
-  factory BackendUsage.readFromDataSource(DataSource source) =
+  factory BackendUsage.readFromDataSource(DataSourceReader source) =
       BackendUsageImpl.readFromDataSource;
 
   /// Serializes this [BackendUsage] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   bool needToInitializeIsolateAffinityTag;
   bool needToInitializeDispatchProperty;
@@ -356,7 +356,7 @@
         this._helperClassesUsed = helperClassesUsed,
         this._runtimeTypeUses = runtimeTypeUses;
 
-  factory BackendUsageImpl.readFromDataSource(DataSource source) {
+  factory BackendUsageImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Set<FunctionEntity> globalFunctionDependencies =
         source.readMembers<FunctionEntity>().toSet();
@@ -396,7 +396,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMembers(_globalFunctionDependencies);
     sink.writeClasses(_globalClassDependencies);
diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index 30bf295..22329a2 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -56,7 +56,7 @@
         DeferredHolderExpressionKind.globalObjectForStaticState, null);
   }
 
-  factory DeferredHolderExpression.readFromDataSource(DataSource source) {
+  factory DeferredHolderExpression.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     var kind = source.readEnum(DeferredHolderExpressionKind.values);
     Object data;
@@ -79,7 +79,7 @@
     return DeferredHolderExpression(kind, data);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeEnum(kind);
     switch (kind) {
@@ -606,19 +606,9 @@
     final holderCode =
         declareHolders(resourceName, nonStaticStateHolders(resource));
 
-    // Set names if necessary on deferred holders list.
-    js.Expression deferredHoldersList = js.ArrayInitializer(holderCode
-        .activeHolders
-        .map((holder) => js.js("#", holder.localName(resourceName)))
-        .toList(growable: false));
-    js.Statement setNames = js.js.statement(
-        'hunkHelpers.setFunctionNamesIfNecessary(#deferredHoldersList)',
-        {'deferredHoldersList': deferredHoldersList});
-
     // Update holder assignments.
     List<js.Statement> updateHolderAssignments = [
       if (holderCode.allHolders.isNotEmpty) holderCode.statement,
-      setNames
     ];
     for (var holder in holderCode.allHolders) {
       var holderName = holder.localName(resourceName);
diff --git a/pkg/compiler/lib/src/js_backend/field_analysis.dart b/pkg/compiler/lib/src/js_backend/field_analysis.dart
index 0f3326c..96c5bf9 100644
--- a/pkg/compiler/lib/src/js_backend/field_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/field_analysis.dart
@@ -252,7 +252,7 @@
 
   /// Deserializes a [JFieldAnalysis] object from [source].
   factory JFieldAnalysis.readFromDataSource(
-      DataSource source, CompilerOptions options) {
+      DataSourceReader source, CompilerOptions options) {
     source.begin(tag);
     Map<FieldEntity, FieldAnalysisData> fieldData = source.readMemberMap(
         (MemberEntity member) => FieldAnalysisData.fromDataSource(source));
@@ -261,7 +261,7 @@
   }
 
   /// Serializes this [JFieldAnalysis] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberMap(
         _fieldData,
@@ -602,7 +602,7 @@
       this.eagerCreationIndex = null,
       this.eagerFieldDependenciesForTesting = null});
 
-  factory FieldAnalysisData.fromDataSource(DataSource source) {
+  factory FieldAnalysisData.fromDataSource(DataSourceReader source) {
     source.begin(tag);
 
     ConstantValue initialValue = source.readConstantOrNull();
@@ -624,7 +624,7 @@
         eagerFieldDependenciesForTesting: eagerFieldDependencies);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeConstantOrNull(initialValue);
     sink.writeBool(isInitializedInAllocator);
diff --git a/pkg/compiler/lib/src/js_backend/inferred_data.dart b/pkg/compiler/lib/src/js_backend/inferred_data.dart
index 3dc454a..bf12d8c 100644
--- a/pkg/compiler/lib/src/js_backend/inferred_data.dart
+++ b/pkg/compiler/lib/src/js_backend/inferred_data.dart
@@ -16,7 +16,7 @@
 abstract class InferredData {
   /// Deserializes a [InferredData] object from [source].
   factory InferredData.readFromDataSource(
-      DataSource source, JClosedWorld closedWorld) {
+      DataSourceReader source, JClosedWorld closedWorld) {
     bool isTrivial = source.readBool();
     if (isTrivial) {
       return TrivialInferredData();
@@ -26,7 +26,7 @@
   }
 
   /// Serializes this [InferredData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Returns the side effects of executing [element].
   SideEffects getSideEffectsOfElement(FunctionEntity element);
@@ -100,7 +100,7 @@
       this._functionsThatMightBePassedToApply);
 
   factory InferredDataImpl.readFromDataSource(
-      DataSource source, JClosedWorld closedWorld) {
+      DataSourceReader source, JClosedWorld closedWorld) {
     source.begin(tag);
     Set<MemberEntity> functionsCalledInLoop = source.readMembers().toSet();
     Map<FunctionEntity, SideEffects> sideEffects = source.readMemberMap(
@@ -122,7 +122,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeBool(false); // Is _not_ trivial.
     sink.begin(tag);
     sink.writeMembers(_functionsCalledInLoop);
@@ -302,7 +302,7 @@
   final SideEffects _allSideEffects = SideEffects();
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeBool(true); // Is trivial.
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index 0300e2d..36052c1 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -21,12 +21,12 @@
 abstract class InterceptorData {
   /// Deserializes a [InterceptorData] object from [source].
   factory InterceptorData.readFromDataSource(
-      DataSource source,
+      DataSourceReader source,
       NativeData nativeData,
       CommonElements commonElements) = InterceptorDataImpl.readFromDataSource;
 
   /// Serializes this [InterceptorData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Returns `true` if [cls] is an intercepted class.
   bool isInterceptedClass(ClassEntity element);
@@ -110,8 +110,8 @@
       this.interceptedClasses,
       this.classesMixedIntoInterceptedClasses);
 
-  factory InterceptorDataImpl.readFromDataSource(
-      DataSource source, NativeData nativeData, CommonElements commonElements) {
+  factory InterceptorDataImpl.readFromDataSource(DataSourceReader source,
+      NativeData nativeData, CommonElements commonElements) {
     source.begin(tag);
     int interceptedMembersCount = source.readInt();
     Map<String, Set<MemberEntity>> interceptedMembers = {};
@@ -129,7 +129,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(interceptedMembers.length);
     interceptedMembers.forEach((String name, Set<MemberEntity> members) {
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 00ee207..6bbf4ea 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -200,7 +200,7 @@
 
   /// Deserializes a [NativeBasicData] object from [source].
   factory NativeBasicData.readFromDataSource(
-      DataSource source, ElementEnvironment elementEnvironment) {
+      DataSourceReader source, ElementEnvironment elementEnvironment) {
     source.begin(tag);
     bool isAllowInteropUsed = source.readBool();
     Map<ClassEntity, NativeClassTag> nativeClassTagInfo =
@@ -228,7 +228,7 @@
   }
 
   /// Serializes this [NativeBasicData] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeBool(isAllowInteropUsed);
     sink.writeClassMap(_nativeClassTagInfo, (NativeClassTag tag) {
@@ -484,7 +484,7 @@
 
   /// Deserializes a [NativeData] object from [source].
   factory NativeData.readFromDataSource(
-      DataSource source, ElementEnvironment elementEnvironment) {
+      DataSourceReader source, ElementEnvironment elementEnvironment) {
     source.begin(tag);
     NativeBasicData nativeBasicData =
         NativeBasicData.readFromDataSource(source, elementEnvironment);
@@ -506,7 +506,7 @@
 
   /// Serializes this [NativeData] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     _nativeBasicData.writeToDataSink(sink);
 
diff --git a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
index 8c957ec..f9c2749 100644
--- a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
+++ b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
@@ -190,7 +190,7 @@
       this._throwingImpls, this._otherImpls, this._forwardingSyntaxImpls);
 
   /// Deserializes a [NoSuchMethodData] object from [source].
-  factory NoSuchMethodData.readFromDataSource(DataSource source) {
+  factory NoSuchMethodData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Set<FunctionEntity> throwingImpls =
         source.readMembers<FunctionEntity>().toSet();
@@ -209,7 +209,7 @@
   }
 
   /// Serializes this [NoSuchMethodData] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMembers(_throwingImpls);
     sink.writeMembers(_otherImpls);
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index 2606826..c53fa5f 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -25,22 +25,11 @@
 abstract class RtiNode {
   Entity get entity;
   Set<RtiNode> _dependencies;
-  int _testState = 0;
-  int _literalState = 0;
+  bool _hasTest = false;
 
   Iterable<RtiNode> get dependencies => _dependencies ?? const [];
 
-  bool get hasDirectTest => _testState & 1 != 0;
-  bool get hasIndirectTest => _testState & 2 != 0;
-
-  bool get hasTest => _testState != 0;
-
-  bool get hasDirectLiteral => _literalState & 1 != 0;
-  bool get hasIndirectLiteral => _literalState & 2 != 0;
-
-  bool get hasLiteral => _literalState != 0;
-
-  bool get hasUse => hasTest || hasLiteral;
+  bool get hasTest => _hasTest;
 
   /// Register that if [entity] needs type arguments then so does `node.entity`.
   bool addDependency(RtiNode node) {
@@ -53,52 +42,13 @@
     return _dependencies.add(node);
   }
 
-  void markTest({bool direct}) {
-    setTestState(direct ? 1 : 2);
-  }
-
-  void markDirectTest() {
-    setTestState(1);
-  }
-
-  void markIndirectTest() {
-    setTestState(2);
-  }
-
-  void setTestState(int value) {
-    if (_testState != value) {
-      if (_testState == 0) {
-        _testState |= value;
-        if (_dependencies != null) {
-          for (RtiNode node in _dependencies) {
-            node.markIndirectTest();
-          }
+  void markTest() {
+    if (!hasTest) {
+      _hasTest = true;
+      if (_dependencies != null) {
+        for (RtiNode node in _dependencies) {
+          node.markTest();
         }
-      } else {
-        _testState = value;
-      }
-    }
-  }
-
-  void markDirectLiteral() {
-    setLiteralState(1);
-  }
-
-  void markIndirectLiteral() {
-    setLiteralState(2);
-  }
-
-  void setLiteralState(int value) {
-    if (_literalState != value) {
-      if (_literalState == 0) {
-        _literalState |= value;
-        if (_dependencies != null) {
-          for (RtiNode node in _dependencies) {
-            node.markIndirectLiteral();
-          }
-        }
-      } else {
-        _literalState = value;
       }
     }
   }
@@ -223,9 +173,6 @@
       : explicitIsChecks = _world.isChecks.toSet() {
     _setupDependencies();
     _propagateTests();
-    if (forRtiNeeds) {
-      _propagateLiterals();
-    }
     _collectResults();
   }
 
@@ -249,18 +196,6 @@
   Iterable<ClassEntity> get classTestsForTesting =>
       _classes.values.where((n) => n.hasTest).map((n) => n.cls).toSet();
 
-  /// Classes that explicitly use their type variables in is-tests.
-  ///
-  /// For instance `A` in:
-  ///
-  ///     class A<T> {
-  ///       m(o) => o is T;
-  ///     }
-  ///     main() => new A<int>().m(0);
-  ///
-  Iterable<ClassEntity> get directClassTestsForTesting =>
-      _classes.values.where((n) => n.hasDirectTest).map((n) => n.cls).toSet();
-
   /// Methods that explicitly or implicitly use their type variables in
   /// is-tests.
   ///
@@ -273,18 +208,6 @@
   Iterable<Entity> get methodTestsForTesting =>
       _methods.values.where((n) => n.hasTest).map((n) => n.function).toSet();
 
-  /// Methods that explicitly use their type variables in is-tests.
-  ///
-  /// For instance `m` in:
-  ///
-  ///     m<T>(o) => o is T;
-  ///     main() => m<int>(0);
-  ///
-  Iterable<Entity> get directMethodTestsForTesting => _methods.values
-      .where((n) => n.hasDirectTest)
-      .map((n) => n.function)
-      .toSet();
-
   /// The entities that need type arguments at runtime if the 'key entity' needs
   /// type arguments.
   ///
@@ -546,23 +469,23 @@
   }
 
   void _propagateTests() {
-    void processTypeVariableType(TypeVariableType type, {bool direct = true}) {
+    void processTypeVariableType(TypeVariableType type) {
       TypeVariableEntity variable = type.element;
       if (variable.typeDeclaration is ClassEntity) {
-        _getClassNode(variable.typeDeclaration).markTest(direct: direct);
+        _getClassNode(variable.typeDeclaration).markTest();
       } else {
-        _getMethodNode(variable.typeDeclaration).markTest(direct: direct);
+        _getMethodNode(variable.typeDeclaration).markTest();
       }
     }
 
-    void processType(DartType type, {bool direct = true}) {
+    void processType(DartType type) {
       var typeWithoutNullability = type.withoutNullability;
       if (typeWithoutNullability is FutureOrType) {
-        _getClassNode(_commonElements.futureClass).markIndirectTest();
-        processType(typeWithoutNullability.typeArgument, direct: false);
+        _getClassNode(_commonElements.futureClass).markTest();
+        processType(typeWithoutNullability.typeArgument);
       } else {
         typeWithoutNullability.forEachTypeVariable((TypeVariableType type) {
-          processTypeVariableType(type, direct: direct);
+          processTypeVariableType(type);
         });
       }
     }
@@ -570,40 +493,14 @@
     _world.isChecks.forEach(processType);
   }
 
-  void _propagateLiterals() {
-    _world.typeVariableTypeLiterals
-        .forEach((TypeVariableType typeVariableType) {
-      TypeVariableEntity variable = typeVariableType.element;
-      if (variable.typeDeclaration is ClassEntity) {
-        _getClassNode(variable.typeDeclaration).markDirectLiteral();
-      } else {
-        _getMethodNode(variable.typeDeclaration).markDirectLiteral();
-      }
-    });
-  }
-
   String dump({bool verbose = false}) {
     StringBuffer sb = StringBuffer();
 
     void addNode(RtiNode node) {
-      if (node.hasUse || node.dependencies.isNotEmpty || verbose) {
+      if (node.hasTest || node.dependencies.isNotEmpty || verbose) {
         sb.write(' $node');
-        String comma = '';
-        if (node._testState & 1 != 0) {
-          sb.write(' direct test');
-          comma = ',';
-        }
-        if (node._testState & 2 != 0) {
-          sb.write('$comma indirect test');
-          comma = ',';
-        }
-        if (node._literalState & 1 != 0) {
-          sb.write('$comma direct literal');
-          comma = ',';
-        }
-        if (node._literalState & 2 != 0) {
-          sb.write('$comma indirect literal');
-          comma = ',';
+        if (node.hasTest) {
+          sb.write(' test');
         }
         if (node.dependencies.isNotEmpty || verbose) {
           sb.writeln(':');
@@ -763,7 +660,7 @@
 abstract class RuntimeTypesNeed {
   /// Deserializes a [RuntimeTypesNeed] object from [source].
   factory RuntimeTypesNeed.readFromDataSource(
-      DataSource source, ElementEnvironment elementEnvironment) {
+      DataSourceReader source, ElementEnvironment elementEnvironment) {
     bool isTrivial = source.readBool();
     if (isTrivial) {
       return TrivialRuntimeTypesNeed(elementEnvironment);
@@ -772,7 +669,7 @@
   }
 
   /// Serializes this [RuntimeTypesNeed] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Returns `true` if [cls] needs type arguments at runtime.
   ///
@@ -845,7 +742,7 @@
   const TrivialRuntimeTypesNeed(this._elementEnvironment);
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeBool(true); // Is trivial.
   }
 
@@ -900,7 +797,7 @@
       this.instantiationsNeedingTypeArguments);
 
   factory RuntimeTypesNeedImpl.readFromDataSource(
-      DataSource source, ElementEnvironment elementEnvironment) {
+      DataSourceReader source, ElementEnvironment elementEnvironment) {
     source.begin(tag);
     Set<ClassEntity> classesNeedingTypeArguments =
         source.readClasses<ClassEntity>().toSet();
@@ -925,7 +822,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeBool(false); // Is _not_ trivial.
     sink.begin(tag);
     sink.writeClasses(classesNeedingTypeArguments);
diff --git a/pkg/compiler/lib/src/js_backend/string_reference.dart b/pkg/compiler/lib/src/js_backend/string_reference.dart
index 19aba0e..06d7370 100644
--- a/pkg/compiler/lib/src/js_backend/string_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/string_reference.dart
@@ -101,14 +101,14 @@
   StringReference(this.constant) : sourceInformation = null;
   StringReference._(this.constant, this._value, this.sourceInformation);
 
-  factory StringReference.readFromDataSource(DataSource source) {
+  factory StringReference.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     StringConstantValue constant = source.readConstant() as StringConstantValue;
     source.end(tag);
     return StringReference(constant);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeConstant(constant);
     sink.end(tag);
diff --git a/pkg/compiler/lib/src/js_backend/type_reference.dart b/pkg/compiler/lib/src/js_backend/type_reference.dart
index d796de1..b603532 100644
--- a/pkg/compiler/lib/src/js_backend/type_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/type_reference.dart
@@ -117,7 +117,7 @@
   TypeReference(this.typeRecipe) : sourceInformation = null;
   TypeReference._(this.typeRecipe, this._value, this.sourceInformation);
 
-  factory TypeReference.readFromDataSource(DataSource source) {
+  factory TypeReference.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     TypeRecipe recipe = source.readTypeRecipe();
     bool forLazyInitializer = source.readBool();
@@ -125,7 +125,7 @@
     return TypeReference(recipe)..forLazyInitializer = forLazyInitializer;
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeTypeRecipe(typeRecipe);
     sink.writeBool(forLazyInitializer);
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index f470a14..adb19b0 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -73,24 +73,6 @@
 // copying properties) on platforms where we know it works well (Chrome / d8).
 var supportsDirectProtoAccess = #directAccessTestExpression;
 
-// Sets the name property of functions, if the JS engine doesn't set the name
-// itself.
-// As of 2018 only IE11 doesn't set the name.
-function setFunctionNamesIfNecessary(holders) {
-  function t(){};
-  if (typeof t.name == "string") return;
-
-  for (var i = 0; i < holders.length; i++) {
-    var holder = holders[i];
-    var keys = Object.keys(holder);
-    for (var j = 0; j < keys.length; j++) {
-      var key = keys[j];
-      var f = holder[key];
-      if (typeof f == "function") f.name = key;
-    }
-  }
-}
-
 // Makes [cls] inherit from [sup].
 // On Chrome, Firefox and recent IEs this happens by updating the internal
 // proto-property of the classes 'prototype' field.
@@ -420,7 +402,6 @@
     lazyOld: lazyOld,
     updateHolder: updateHolder,
     convertToFastObject: convertToFastObject,
-    setFunctionNamesIfNecessary: setFunctionNamesIfNecessary,
     updateTypes: updateTypes,
     setOrUpdateInterceptorsByTag: setOrUpdateInterceptorsByTag,
     setOrUpdateLeafTags: setOrUpdateLeafTags,
@@ -444,9 +425,6 @@
 // Creates the holders.
 #holders;
 
-// If the name is not set on the functions, do it now.
-hunkHelpers.setFunctionNamesIfNecessary(holders);
-
 // TODO(floitsch): we should build this object as a literal.
 var #staticStateDeclaration = {};
 
diff --git a/pkg/compiler/lib/src/js_model/closure.dart b/pkg/compiler/lib/src/js_model/closure.dart
index 7aa5677..62b1101 100644
--- a/pkg/compiler/lib/src/js_model/closure.dart
+++ b/pkg/compiler/lib/src/js_model/closure.dart
@@ -51,7 +51,7 @@
 
   /// Deserializes a [ClosureData] object from [source].
   factory ClosureDataImpl.readFromDataSource(
-      JsToElementMap elementMap, DataSource source) {
+      JsToElementMap elementMap, DataSourceReader source) {
     source.begin(tag);
     // TODO(johnniwinther): Support shared [ScopeInfo].
     Map<MemberEntity, ScopeInfo> scopeMap = source.readMemberMap(
@@ -78,7 +78,7 @@
 
   /// Serializes this [ClosureData] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMemberMap(_scopeMap,
         (MemberEntity member, ScopeInfo info) => info.writeToDataSink(sink));
@@ -507,7 +507,7 @@
     return _boxedVariablesCache.containsKey(variable);
   }
 
-  factory JsScopeInfo.readFromDataSource(DataSource source) {
+  factory JsScopeInfo.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Iterable<ir.VariableDeclaration> localsUsedInTryOrSync =
         source.readTreeNodes<ir.VariableDeclaration>();
@@ -522,7 +522,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ScopeInfoKind.scopeInfo);
     sink.begin(tag);
     sink.writeTreeNodes(_localsUsedInTryOrSync);
@@ -556,7 +556,7 @@
   @override
   bool get requiresContextBox => _boxedVariables.isNotEmpty;
 
-  factory JsCapturedScope.readFromDataSource(DataSource source) {
+  factory JsCapturedScope.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Iterable<ir.VariableDeclaration> localsUsedInTryOrSync =
         source.readTreeNodes<ir.VariableDeclaration>();
@@ -571,7 +571,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ScopeInfoKind.capturedScope);
     sink.begin(tag);
     sink.writeTreeNodes(_localsUsedInTryOrSync);
@@ -608,7 +608,7 @@
   @override
   bool get hasBoxedLoopVariables => _boxedLoopVariables.isNotEmpty;
 
-  factory JsCapturedLoopScope.readFromDataSource(DataSource source) {
+  factory JsCapturedLoopScope.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Iterable<ir.VariableDeclaration> localsUsedInTryOrSync =
         source.readTreeNodes<ir.VariableDeclaration>();
@@ -625,7 +625,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ScopeInfoKind.capturedLoopScope);
     sink.begin(tag);
     sink.writeTreeNodes(_localsUsedInTryOrSync);
@@ -705,7 +705,7 @@
         _localToFieldMap = {},
         super.from(boxedVariables, info, enclosingClass);
 
-  factory JsClosureClassInfo.readFromDataSource(DataSource source) {
+  factory JsClosureClassInfo.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Iterable<ir.VariableDeclaration> localsUsedInTryOrSync =
         source.readTreeNodes<ir.VariableDeclaration>();
@@ -743,7 +743,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ScopeInfoKind.closureRepresentationInfo);
     sink.begin(tag);
     sink.writeTreeNodes(_localsUsedInTryOrSync);
@@ -855,7 +855,7 @@
   JClosureClass(JLibrary library, String name)
       : super(library, name, isAbstract: false);
 
-  factory JClosureClass.readFromDataSource(DataSource source) {
+  factory JClosureClass.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JLibrary library = source.readLibrary();
     String name = source.readString();
@@ -864,7 +864,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassKind.closure);
     sink.begin(tag);
     sink.writeLibrary(library);
@@ -926,7 +926,7 @@
       : super(library, enclosingClass, memberName,
             isAssignable: isAssignable, isConst: isConst, isStatic: false);
 
-  factory JClosureField.readFromDataSource(DataSource source) {
+  factory JClosureField.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JClass cls = source.readClass();
     String name = source.readString();
@@ -940,7 +940,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.closureField);
     sink.begin(tag);
     sink.writeClass(enclosingClass);
@@ -975,7 +975,7 @@
   RecordClassData(
       this.definition, this.thisType, this.supertype, this.orderedTypeSet);
 
-  factory RecordClassData.readFromDataSource(DataSource source) {
+  factory RecordClassData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ClassDefinition definition = ClassDefinition.readFromDataSource(source);
     InterfaceType thisType = source.readDartType();
@@ -986,7 +986,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassDataKind.record);
     sink.begin(tag);
     definition.writeToDataSink(sink);
@@ -1036,7 +1036,7 @@
   JRecord(LibraryEntity library, String name)
       : super(library, name, isAbstract: false);
 
-  factory JRecord.readFromDataSource(DataSource source) {
+  factory JRecord.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JLibrary library = source.readLibrary();
     String name = source.readString();
@@ -1045,7 +1045,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassKind.record);
     sink.begin(tag);
     sink.writeLibrary(library);
@@ -1075,7 +1075,7 @@
             Name(name, box.container.library),
             isStatic: false, isAssignable: true, isConst: isConst);
 
-  factory JRecordField.readFromDataSource(DataSource source) {
+  factory JRecordField.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     String name = source.readString();
     JClass enclosingClass = source.readClass();
@@ -1085,7 +1085,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.recordField);
     sink.begin(tag);
     sink.writeString(name);
@@ -1118,7 +1118,7 @@
       InterfaceType supertype, OrderedTypeSet orderedTypeSet)
       : super(definition, thisType, supertype, orderedTypeSet);
 
-  factory ClosureClassData.readFromDataSource(DataSource source) {
+  factory ClosureClassData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ClassDefinition definition = ClassDefinition.readFromDataSource(source);
     InterfaceType thisType = source.readDartType();
@@ -1131,7 +1131,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassDataKind.closure);
     sink.begin(tag);
     definition.writeToDataSink(sink);
@@ -1153,7 +1153,7 @@
 
   ClosureClassDefinition(this.location);
 
-  factory ClosureClassDefinition.readFromDataSource(DataSource source) {
+  factory ClosureClassDefinition.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     SourceSpan location = source.readSourceSpan();
     source.end(tag);
@@ -1161,7 +1161,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ClassKind.closure);
     sink.begin(tag);
     sink.writeSourceSpan(location);
@@ -1221,7 +1221,7 @@
       this.classTypeVariableAccess)
       : super(definition, memberThisType);
 
-  factory ClosureFunctionData.readFromDataSource(DataSource source) {
+  factory ClosureFunctionData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ClosureMemberDefinition definition =
         MemberDefinition.readFromDataSource(source);
@@ -1236,7 +1236,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.closureFunction);
     sink.begin(tag);
     definition.writeToDataSink(sink);
@@ -1275,7 +1275,7 @@
   ClosureFieldData(MemberDefinition definition, InterfaceType memberThisType)
       : super(definition, memberThisType);
 
-  factory ClosureFieldData.readFromDataSource(DataSource source) {
+  factory ClosureFieldData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     InterfaceType memberThisType = source.readDartType(allowNull: true);
@@ -1284,7 +1284,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.closureField);
     sink.begin(tag);
     definition.writeToDataSink(sink);
@@ -1341,7 +1341,7 @@
             kind == MemberKind.closureCall || kind == MemberKind.closureField);
 
   factory ClosureMemberDefinition.readFromDataSource(
-      DataSource source, MemberKind kind) {
+      DataSourceReader source, MemberKind kind) {
     source.begin(tag);
     SourceSpan location = source.readSourceSpan();
     ir.TreeNode node = source.readTreeNode();
@@ -1350,7 +1350,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(kind);
     sink.begin(tag);
     sink.writeSourceSpan(location);
@@ -1372,7 +1372,8 @@
 
   RecordContainerDefinition(this.location);
 
-  factory RecordContainerDefinition.readFromDataSource(DataSource source) {
+  factory RecordContainerDefinition.readFromDataSource(
+      DataSourceReader source) {
     source.begin(tag);
     SourceSpan location = source.readSourceSpan();
     source.end(tag);
@@ -1380,7 +1381,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(ClassKind.record);
     sink.begin(tag);
     sink.writeSourceSpan(location);
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index e87d834..985d77f 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -269,7 +269,7 @@
   JumpTarget getJumpTargetForWhile(ir.WhileStatement node);
 
   /// Serializes this [KernelToLocalsMap] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 }
 
 /// Returns the [ir.FunctionNode] that defines [member] or `null` if [member]
@@ -338,7 +338,7 @@
   SourceSpan get location;
 
   /// Deserializes a [MemberDefinition] object from [source].
-  factory MemberDefinition.readFromDataSource(DataSource source) {
+  factory MemberDefinition.readFromDataSource(DataSourceReader source) {
     MemberKind kind = source.readEnum(MemberKind.values);
     switch (kind) {
       case MemberKind.regular:
@@ -356,7 +356,7 @@
   }
 
   /// Serializes this [MemberDefinition] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 }
 
 enum ClassKind {
@@ -378,7 +378,7 @@
 
   RegularMemberDefinition(this.node);
 
-  factory RegularMemberDefinition.readFromDataSource(DataSource source) {
+  factory RegularMemberDefinition.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     source.end(tag);
@@ -386,7 +386,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(MemberKind.regular);
     sink.begin(tag);
     sink.writeMemberNode(node);
@@ -418,7 +418,7 @@
   SpecialMemberDefinition(this.node, this.kind);
 
   factory SpecialMemberDefinition.readFromDataSource(
-      DataSource source, MemberKind kind) {
+      DataSourceReader source, MemberKind kind) {
     source.begin(tag);
     ir.TreeNode node = source.readTreeNode();
     source.end(tag);
@@ -426,7 +426,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(kind);
     sink.begin(tag);
     sink.writeTreeNode(node);
@@ -454,7 +454,7 @@
   SourceSpan get location;
 
   /// Deserializes a [ClassDefinition] object from [source].
-  factory ClassDefinition.readFromDataSource(DataSource source) {
+  factory ClassDefinition.readFromDataSource(DataSourceReader source) {
     ClassKind kind = source.readEnum(ClassKind.values);
     switch (kind) {
       case ClassKind.regular:
@@ -468,7 +468,7 @@
   }
 
   /// Serializes this [ClassDefinition] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 }
 
 /// A class directly defined by its [ir.Class] node.
@@ -482,7 +482,7 @@
 
   RegularClassDefinition(this.node);
 
-  factory RegularClassDefinition.readFromDataSource(DataSource source) {
+  factory RegularClassDefinition.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Class node = source.readClassNode();
     source.end(tag);
@@ -490,7 +490,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(kind);
     sink.begin(tag);
     sink.writeClassNode(node);
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index aac7e7e..5b30ba7 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -293,7 +293,7 @@
   }
 
   JsKernelToElementMap.readFromDataSource(this.options, this.reporter,
-      this._environment, ir.Component component, DataSource source) {
+      this._environment, ir.Component component, DataSourceReader source) {
     _elementEnvironment = JsElementEnvironment(this);
     _typeConverter = DartTypeConverter(this);
     _types = KernelDartTypes(this, options);
@@ -430,7 +430,7 @@
   }
 
   /// Serializes this [JsToElementMap] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
 
     // Serialize the entities before serializing the data.
@@ -847,7 +847,7 @@
   FieldEntity getField(ir.Field node) => getFieldInternal(node);
 
   @override
-  DartType getDartType(ir.DartType type) => _typeConverter.convert(type);
+  DartType getDartType(ir.DartType type) => _typeConverter.visitType(type);
 
   @override
   TypeVariableType getTypeVariableType(ir.TypeParameterType type) =>
@@ -864,7 +864,7 @@
 
   @override
   InterfaceType getInterfaceType(ir.InterfaceType type) =>
-      _typeConverter.convert(type).withoutNullability;
+      _typeConverter.visitType(type).withoutNullability;
 
   @override
   FunctionType getFunctionType(ir.FunctionNode node) {
@@ -2629,7 +2629,7 @@
 
   @override
   IndexedMember readMemberFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     int index = source.readInt();
     if (index == 0) {
       return _readLateMemberFromDataSource(source, entityLookup);
@@ -2639,7 +2639,7 @@
   }
 
   IndexedMember _readLateMemberFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     LateMemberKind kind = source.readEnum(LateMemberKind.values);
     switch (kind) {
       case LateMemberKind.constructorBody:
@@ -2664,7 +2664,7 @@
   ClosedEntityWriter(this._earlyMemberIndexLimit);
 
   @override
-  void writeMemberToDataSink(DataSink sink, IndexedMember value) {
+  void writeMemberToDataSink(DataSinkWriter sink, IndexedMember value) {
     if (value.memberIndex >= _earlyMemberIndexLimit) {
       sink.writeInt(0);
       _writeLateMemberToDataSink(sink, value);
@@ -2673,7 +2673,7 @@
     }
   }
 
-  void _writeLateMemberToDataSink(DataSink sink, IndexedMember value) {
+  void _writeLateMemberToDataSink(DataSinkWriter sink, IndexedMember value) {
     if (value is JConstructorBody) {
       sink.writeEnum(LateMemberKind.constructorBody);
       sink.writeMember(value.constructor);
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 62b7315..01c50f9 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -30,7 +30,7 @@
   JLibrary(this.name, this.canonicalUri, this.isNonNullableByDefault);
 
   /// Deserializes a [JLibrary] object from [source].
-  factory JLibrary.readFromDataSource(DataSource source) {
+  factory JLibrary.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     String name = source.readString();
     Uri canonicalUri = source.readUri();
@@ -40,7 +40,7 @@
   }
 
   /// Serializes this [JLibrary] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeString(name);
     sink.writeUri(canonicalUri);
@@ -71,7 +71,7 @@
   JClass(this.library, this.name, {this.isAbstract});
 
   /// Deserializes a [JClass] object from [source].
-  factory JClass.readFromDataSource(DataSource source) {
+  factory JClass.readFromDataSource(DataSourceReader source) {
     JClassKind kind = source.readEnum(JClassKind.values);
     switch (kind) {
       case JClassKind.node:
@@ -90,7 +90,7 @@
   }
 
   /// Serializes this [JClass] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassKind.node);
     sink.begin(tag);
     sink.writeLibrary(library);
@@ -135,7 +135,7 @@
       : _isStatic = isStatic;
 
   /// Deserializes a [JMember] object from [source].
-  factory JMember.readFromDataSource(DataSource source) {
+  factory JMember.readFromDataSource(DataSourceReader source) {
     JMemberKind kind = source.readEnum(JMemberKind.values);
     switch (kind) {
       case JMemberKind.generativeConstructor:
@@ -167,7 +167,7 @@
   }
 
   /// Serializes this [JMember] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   @override
   String get name => _name.text;
@@ -272,7 +272,7 @@
       : super(enclosingClass, name, parameterStructure,
             isExternal: isExternal, isConst: isConst);
 
-  factory JGenerativeConstructor.readFromDataSource(DataSource source) {
+  factory JGenerativeConstructor.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JClass enclosingClass = source.readClass();
     String name = source.readString();
@@ -287,7 +287,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.generativeConstructor);
     sink.begin(tag);
     sink.writeClass(enclosingClass);
@@ -319,7 +319,7 @@
       : super(enclosingClass, name, parameterStructure,
             isExternal: isExternal, isConst: isConst);
 
-  factory JFactoryConstructor.readFromDataSource(DataSource source) {
+  factory JFactoryConstructor.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JClass enclosingClass = source.readClass();
     String name = source.readString();
@@ -337,7 +337,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.factoryConstructor);
     sink.begin(tag);
     sink.writeClass(enclosingClass);
@@ -369,7 +369,7 @@
             constructor.memberName, parameterStructure, AsyncMarker.SYNC,
             isStatic: false, isExternal: false);
 
-  factory JConstructorBody.readFromDataSource(DataSource source) {
+  factory JConstructorBody.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JConstructor constructor = source.readMember();
     ParameterStructure parameterStructure =
@@ -379,7 +379,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.constructorBody);
     sink.begin(tag);
     sink.writeMember(constructor);
@@ -405,7 +405,7 @@
       : super(library, enclosingClass, name, parameterStructure, asyncMarker,
             isStatic: isStatic, isExternal: isExternal);
 
-  factory JMethod.readFromDataSource(DataSource source) {
+  factory JMethod.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberContextKind kind = source.readEnum(MemberContextKind.values);
     JLibrary library;
@@ -433,7 +433,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.method);
     sink.begin(tag);
     if (enclosingClass != null) {
@@ -475,7 +475,7 @@
             function.parameterStructure, function.asyncMarker,
             isStatic: function.isStatic, isExternal: false);
 
-  factory JGeneratorBody.readFromDataSource(DataSource source) {
+  factory JGeneratorBody.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JFunction function = source.readMember();
     DartType elementType = source.readDartType();
@@ -484,7 +484,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.generatorBody);
     sink.begin(tag);
     sink.writeMember(function);
@@ -511,7 +511,7 @@
             asyncMarker,
             isStatic: isStatic, isExternal: isExternal);
 
-  factory JGetter.readFromDataSource(DataSource source) {
+  factory JGetter.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberContextKind kind = source.readEnum(MemberContextKind.values);
     JLibrary library;
@@ -536,7 +536,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.getter);
     sink.begin(tag);
     if (enclosingClass != null) {
@@ -575,7 +575,7 @@
             AsyncMarker.SYNC,
             isStatic: isStatic, isExternal: isExternal);
 
-  factory JSetter.readFromDataSource(DataSource source) {
+  factory JSetter.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberContextKind kind = source.readEnum(MemberContextKind.values);
     JLibrary library;
@@ -599,7 +599,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.setter);
     sink.begin(tag);
     if (enclosingClass != null) {
@@ -640,7 +640,7 @@
       {bool isStatic, this.isAssignable, this.isConst})
       : super(library, enclosingClass, name, isStatic: isStatic);
 
-  factory JField.readFromDataSource(DataSource source) {
+  factory JField.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberContextKind kind = source.readEnum(MemberContextKind.values);
     JLibrary library;
@@ -664,7 +664,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.field);
     sink.begin(tag);
     if (enclosingClass != null) {
@@ -699,7 +699,7 @@
             parameterStructure, asyncMarker,
             isStatic: false, isExternal: false, isAbstract: false);
 
-  factory JClosureCallMethod.readFromDataSource(DataSource source) {
+  factory JClosureCallMethod.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JClass enclosingClass = source.readClass();
     ParameterStructure parameterStructure =
@@ -710,7 +710,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.closureCallMethod);
     sink.begin(tag);
     sink.writeClass(enclosingClass);
@@ -735,7 +735,7 @@
             ParameterStructure.zeroArguments, AsyncMarker.SYNC,
             isStatic: false, isExternal: false, isAbstract: false);
 
-  factory JSignatureMethod.readFromDataSource(DataSource source) {
+  factory JSignatureMethod.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JClass cls = source.readClass();
     source.end(tag);
@@ -743,7 +743,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberKind.signatureMethod);
     sink.begin(tag);
     sink.writeClass(enclosingClass);
@@ -772,7 +772,7 @@
   JTypeVariable(this.typeDeclaration, this.name, this.index);
 
   /// Deserializes a [JTypeVariable] object from [source].
-  factory JTypeVariable.readFromDataSource(DataSource source) {
+  factory JTypeVariable.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     JTypeVariableKind kind = source.readEnum(JTypeVariableKind.values);
     Entity typeDeclaration;
@@ -797,7 +797,7 @@
   }
 
   /// Serializes this [JTypeVariable] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     if (typeDeclaration is IndexedClass) {
       IndexedClass cls = typeDeclaration;
diff --git a/pkg/compiler/lib/src/js_model/env.dart b/pkg/compiler/lib/src/js_model/env.dart
index c0bcc93..a60b310 100644
--- a/pkg/compiler/lib/src/js_model/env.dart
+++ b/pkg/compiler/lib/src/js_model/env.dart
@@ -67,7 +67,7 @@
   JLibraryEnv(this.library, this._memberMap, this._setterMap);
 
   /// Deserializes a [JLibraryEnv] object from [source].
-  factory JLibraryEnv.readFromDataSource(DataSource source) {
+  factory JLibraryEnv.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Library library = source.readLibraryNode();
     Map<String, ir.Member> memberMap =
@@ -79,7 +79,7 @@
   }
 
   /// Serializes this [JLibraryEnv] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeLibraryNode(library);
     sink.writeStringMap(_memberMap, sink.writeMemberNode);
@@ -130,7 +130,7 @@
 
   JLibraryData(this.library, this.imports);
 
-  factory JLibraryData.readFromDataSource(DataSource source) {
+  factory JLibraryData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Library library = source.readLibraryNode();
     int importCount = source.readInt();
@@ -147,7 +147,7 @@
     return JLibraryData(library, imports);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeLibraryNode(library);
     if (imports == null) {
@@ -174,7 +174,7 @@
 /// Member data for a class.
 abstract class JClassEnv {
   /// Deserializes a [JClassEnv] object from [source].
-  factory JClassEnv.readFromDataSource(DataSource source) {
+  factory JClassEnv.readFromDataSource(DataSourceReader source) {
     JClassEnvKind kind = source.readEnum(JClassEnvKind.values);
     switch (kind) {
       case JClassEnvKind.node:
@@ -188,7 +188,7 @@
   }
 
   /// Serializes this [JClassEnv] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// The [ir.Class] that defined the class, if any.
   ir.Class get cls;
@@ -244,7 +244,7 @@
   JClassEnvImpl(this.cls, this._constructorMap, this._memberMap,
       this._setterMap, this._members, this.isMixinApplicationWithMembers);
 
-  factory JClassEnvImpl.readFromDataSource(DataSource source) {
+  factory JClassEnvImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Class cls = source.readClassNode();
     Map<String, ir.Member> constructorMap =
@@ -261,7 +261,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassEnvKind.node);
     sink.begin(tag);
     sink.writeClassNode(cls);
@@ -324,7 +324,7 @@
 
   RecordEnv(this._memberMap);
 
-  factory RecordEnv.readFromDataSource(DataSource source) {
+  factory RecordEnv.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Map<String, IndexedMember> _memberMap =
         source.readStringMap(() => source.readMember());
@@ -333,7 +333,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassEnvKind.record);
     sink.begin(tag);
     sink.writeStringMap(
@@ -386,7 +386,7 @@
 
   ClosureClassEnv(Map<String, MemberEntity> memberMap) : super(memberMap);
 
-  factory ClosureClassEnv.readFromDataSource(DataSource source) {
+  factory ClosureClassEnv.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Map<String, IndexedMember> _memberMap =
         source.readStringMap(() => source.readMember());
@@ -395,7 +395,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassEnvKind.closure);
     sink.begin(tag);
     sink.writeStringMap(
@@ -419,7 +419,7 @@
 
 abstract class JClassData {
   /// Deserializes a [JClassData] object from [source].
-  factory JClassData.readFromDataSource(DataSource source) {
+  factory JClassData.readFromDataSource(DataSourceReader source) {
     JClassDataKind kind = source.readEnum(JClassDataKind.values);
     switch (kind) {
       case JClassDataKind.node:
@@ -433,7 +433,7 @@
   }
 
   /// Serializes this [JClassData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   ClassDefinition get definition;
 
@@ -485,7 +485,7 @@
 
   JClassDataImpl(this.cls, this.definition);
 
-  factory JClassDataImpl.readFromDataSource(DataSource source) {
+  factory JClassDataImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Class cls = source.readClassNode();
     ClassDefinition definition = ClassDefinition.readFromDataSource(source);
@@ -494,7 +494,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JClassDataKind.node);
     sink.begin(tag);
     sink.writeClassNode(cls);
@@ -538,7 +538,7 @@
   JMemberData();
 
   /// Deserializes a [JMemberData] object from [source].
-  factory JMemberData.readFromDataSource(DataSource source) {
+  factory JMemberData.readFromDataSource(DataSourceReader source) {
     JMemberDataKind kind = source.readEnum(JMemberDataKind.values);
     switch (kind) {
       case JMemberDataKind.function:
@@ -562,7 +562,7 @@
   }
 
   /// Serializes this [JMemberData] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 }
 
 abstract class JMemberDataImpl implements JMemberData {
@@ -689,7 +689,7 @@
       MemberDefinition definition, StaticTypeCache staticTypes)
       : super(node, definition, staticTypes);
 
-  factory FunctionDataImpl.readFromDataSource(DataSource source) {
+  factory FunctionDataImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     ir.FunctionNode functionNode;
@@ -709,7 +709,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.function);
     sink.begin(tag);
     sink.writeMemberNode(node);
@@ -748,7 +748,7 @@
   SignatureFunctionData(this.definition, this.memberThisType,
       this.typeParameters, this.classTypeVariableAccess);
 
-  factory SignatureFunctionData.readFromDataSource(DataSource source) {
+  factory SignatureFunctionData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberDefinition definition = MemberDefinition.readFromDataSource(source);
     InterfaceType memberThisType = source.readDartType(allowNull: true);
@@ -761,7 +761,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.signature);
     sink.begin(tag);
     definition.writeToDataSink(sink);
@@ -851,7 +851,8 @@
   GeneratorBodyFunctionData(FunctionData baseData, this.definition)
       : super(baseData);
 
-  factory GeneratorBodyFunctionData.readFromDataSource(DataSource source) {
+  factory GeneratorBodyFunctionData.readFromDataSource(
+      DataSourceReader source) {
     source.begin(tag);
     // TODO(johnniwinther): Share the original base data on deserialization.
     FunctionData baseData = JMemberData.readFromDataSource(source);
@@ -861,7 +862,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.generatorBody);
     sink.begin(tag);
     baseData.writeToDataSink(sink);
@@ -887,7 +888,7 @@
       MemberDefinition definition, StaticTypeCache staticTypes)
       : super(node, functionNode, definition, staticTypes);
 
-  factory JConstructorDataImpl.readFromDataSource(DataSource source) {
+  factory JConstructorDataImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     ir.FunctionNode functionNode;
@@ -907,7 +908,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.constructor);
     sink.begin(tag);
     sink.writeMemberNode(node);
@@ -931,7 +932,7 @@
       MemberDefinition definition, StaticTypeCache staticTypes)
       : super(node, functionNode, definition, staticTypes);
 
-  factory ConstructorBodyDataImpl.readFromDataSource(DataSource source) {
+  factory ConstructorBodyDataImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     ir.FunctionNode functionNode;
@@ -951,7 +952,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.constructorBody);
     sink.begin(tag);
     sink.writeMemberNode(node);
@@ -982,7 +983,7 @@
       ir.Field node, MemberDefinition definition, StaticTypeCache staticTypes)
       : super(node, definition, staticTypes);
 
-  factory JFieldDataImpl.readFromDataSource(DataSource source) {
+  factory JFieldDataImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.Member node = source.readMemberNode();
     MemberDefinition definition = MemberDefinition.readFromDataSource(source);
@@ -993,7 +994,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.writeEnum(JMemberDataKind.field);
     sink.begin(tag);
     sink.writeMemberNode(node);
@@ -1028,14 +1029,14 @@
 
   JTypeVariableData(this.node);
 
-  factory JTypeVariableData.readFromDataSource(DataSource source) {
+  factory JTypeVariableData.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ir.TypeParameter node = source.readTypeParameterNode();
     source.end(tag);
     return JTypeVariableData(node);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeTypeParameterNode(node);
     sink.end(tag);
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index e262869..534f422 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -213,8 +213,8 @@
     RecipeEncoder rtiRecipeEncoder = RecipeEncoderImpl(closedWorld,
         rtiSubstitutions, closedWorld.nativeData, closedWorld.commonElements);
 
-    CodegenInputs codegen = CodegenInputsImpl(
-        rtiSubstitutions, rtiRecipeEncoder, tracer, fixedNames);
+    CodegenInputs codegen =
+        CodegenInputs(rtiSubstitutions, rtiRecipeEncoder, tracer, fixedNames);
 
     functionCompiler.initialize(globalTypeInferenceResults, codegen);
     return codegen;
@@ -318,10 +318,12 @@
     if (_compiler.options.testMode) {
       bool useDataKinds = true;
       List<Object> data = [];
-      DataSink sink = ObjectSink(data, useDataKinds: useDataKinds);
+      DataSinkWriter sink =
+          DataSinkWriter(ObjectDataSink(data), useDataKinds: useDataKinds);
       sink.registerCodegenWriter(CodegenWriterImpl(closedWorld));
       result.writeToDataSink(sink);
-      DataSource source = ObjectSource(data, useDataKinds: useDataKinds);
+      DataSourceReader source =
+          DataSourceReader(ObjectDataSource(data), useDataKinds: useDataKinds);
       List<ModularName> modularNames = [];
       List<ModularExpression> modularExpression = [];
       source.registerCodegenReader(
@@ -388,7 +390,7 @@
   }
 
   /// Prepare [source] to deserialize modular code generation data.
-  void prepareCodegenReader(DataSource source) {
+  void prepareCodegenReader(DataSourceReader source) {
     source.registerEntityReader(ClosedEntityReader(_elementMap));
     source.registerEntityLookup(ClosedEntityLookup(_elementMap));
     source.registerComponentLookup(
diff --git a/pkg/compiler/lib/src/js_model/js_world.dart b/pkg/compiler/lib/src/js_model/js_world.dart
index 1c45fd2..e6803aa 100644
--- a/pkg/compiler/lib/src/js_model/js_world.dart
+++ b/pkg/compiler/lib/src/js_model/js_world.dart
@@ -126,7 +126,7 @@
       Environment environment,
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
-      DataSource source) {
+      DataSourceReader source) {
     source.begin(tag);
 
     JsKernelToElementMap elementMap = JsKernelToElementMap.readFromDataSource(
@@ -198,7 +198,7 @@
   }
 
   /// Serializes this [JsClosedWorld] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     elementMap.writeToDataSink(sink);
     classHierarchy.writeToDataSink(sink);
diff --git a/pkg/compiler/lib/src/js_model/locals.dart b/pkg/compiler/lib/src/js_model/locals.dart
index 6f88356..ff38486 100644
--- a/pkg/compiler/lib/src/js_model/locals.dart
+++ b/pkg/compiler/lib/src/js_model/locals.dart
@@ -38,7 +38,7 @@
   /// Deserializes a [GlobalLocalsMap] object from [source].
   factory GlobalLocalsMap.readFromDataSource(
       MemberEntity Function(MemberEntity) localMapKeyLookup,
-      DataSource source) {
+      DataSourceReader source) {
     source.begin(tag);
     Map<MemberEntity, KernelToLocalsMap> _localsMaps = {};
     int mapCount = source.readInt();
@@ -55,7 +55,7 @@
   }
 
   /// Serializes this [GlobalLocalsMap] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     // [KernelToLocalsMap]s are shared between members and their nested
     // closures, so we reverse [_localsMaps] to ensure that [KernelToLocalsMap]s
@@ -107,7 +107,7 @@
   KernelToLocalsMapImpl(this._currentMember);
 
   /// Deserializes a [KernelToLocalsMapImpl] object from [source].
-  KernelToLocalsMapImpl.readFromDataSource(DataSource source) {
+  KernelToLocalsMapImpl.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     _currentMember = source.readMember();
     int localsCount = source.readInt();
@@ -143,7 +143,7 @@
 
   /// Serializes this [KernelToLocalsMapImpl] to [sink].
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMember(currentMember);
     sink.writeInt(_locals.size);
@@ -475,7 +475,7 @@
       this.isContinueTarget = false});
 
   /// Deserializes a [JJumpTarget] object from [source].
-  factory JJumpTarget.readFromDataSource(DataSource source) {
+  factory JJumpTarget.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberEntity memberContext = source.readMember();
     int nestingLevel = source.readInt();
@@ -501,7 +501,7 @@
   }
 
   /// Serializes this [JJumpTarget] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeMember(memberContext);
     sink.writeInt(nestingLevel);
diff --git a/pkg/compiler/lib/src/js_model/type_recipe.dart b/pkg/compiler/lib/src/js_model/type_recipe.dart
index 161e6cc..590ef0a 100644
--- a/pkg/compiler/lib/src/js_model/type_recipe.dart
+++ b/pkg/compiler/lib/src/js_model/type_recipe.dart
@@ -147,7 +147,7 @@
 
   int _computeHashCode();
 
-  factory TypeRecipe.readFromDataSource(DataSource source) {
+  factory TypeRecipe.readFromDataSource(DataSourceReader source) {
     TypeRecipe recipe;
     source.begin(tag);
     _TypeRecipeKind kind = source.readEnum(_TypeRecipeKind.values);
@@ -166,7 +166,7 @@
     return recipe;
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeEnum(_kind);
     _writeToDataSink(sink);
@@ -174,7 +174,7 @@
   }
 
   _TypeRecipeKind get _kind;
-  void _writeToDataSink(DataSink sink);
+  void _writeToDataSink(DataSinkWriter sink);
 
   /// Returns `true` is [recipeB] evaluated in an environment described by
   /// [structureB] gives the same type as [recipeA] evaluated in environment
@@ -203,7 +203,7 @@
 
   TypeExpressionRecipe(this.type);
 
-  static TypeExpressionRecipe _readFromDataSource(DataSource source) {
+  static TypeExpressionRecipe _readFromDataSource(DataSourceReader source) {
     return TypeExpressionRecipe(source.readDartType());
   }
 
@@ -211,7 +211,7 @@
   _TypeRecipeKind get _kind => _TypeRecipeKind.expression;
 
   @override
-  void _writeToDataSink(DataSink sink) {
+  void _writeToDataSink(DataSinkWriter sink) {
     sink.writeDartType(type);
   }
 
@@ -237,7 +237,8 @@
 
   SingletonTypeEnvironmentRecipe(this.type);
 
-  static SingletonTypeEnvironmentRecipe _readFromDataSource(DataSource source) {
+  static SingletonTypeEnvironmentRecipe _readFromDataSource(
+      DataSourceReader source) {
     return SingletonTypeEnvironmentRecipe(source.readDartType());
   }
 
@@ -245,7 +246,7 @@
   _TypeRecipeKind get _kind => _TypeRecipeKind.singletonEnvironment;
 
   @override
-  void _writeToDataSink(DataSink sink) {
+  void _writeToDataSink(DataSinkWriter sink) {
     sink.writeDartType(type);
   }
 
@@ -277,7 +278,8 @@
 
   FullTypeEnvironmentRecipe({this.classType, this.types = const []});
 
-  static FullTypeEnvironmentRecipe _readFromDataSource(DataSource source) {
+  static FullTypeEnvironmentRecipe _readFromDataSource(
+      DataSourceReader source) {
     InterfaceType classType =
         source.readDartType(allowNull: true) as InterfaceType;
     List<DartType> types = source.readDartTypes(emptyAsNull: true) ?? const [];
@@ -288,7 +290,7 @@
   _TypeRecipeKind get _kind => _TypeRecipeKind.fullEnvironment;
 
   @override
-  void _writeToDataSink(DataSink sink) {
+  void _writeToDataSink(DataSinkWriter sink) {
     sink.writeDartType(classType, allowNull: true);
     sink.writeDartTypes(types, allowNull: false);
   }
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index c6e7a5e..b25e1c4 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -70,8 +70,10 @@
   final String name;
 
   final CompilerOptions? options;
+  final bool canPerformGlobalTransforms;
 
-  Dart2jsTarget(this.name, this.flags, {this.options});
+  Dart2jsTarget(this.name, this.flags,
+      {this.options, this.canPerformGlobalTransforms = true});
 
   @override
   bool get enableNoSuchMethodForwarders => true;
@@ -157,8 +159,10 @@
     }
     lowering.transformLibraries(libraries, coreTypes, hierarchy, options);
     logger?.call("Lowering transformations performed");
-    transformMixins.transformLibraries(libraries);
-    logger?.call("Mixin transformations performed");
+    if (canPerformGlobalTransforms) {
+      transformMixins.transformLibraries(libraries);
+      logger?.call("Mixin transformations performed");
+    }
   }
 
   @override
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 403ff04..4bfe3529 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -29,16 +29,13 @@
 import '../ir/impact_data.dart';
 import '../ir/static_type.dart';
 import '../ir/static_type_cache.dart';
-import '../ir/scope.dart';
 import '../ir/types.dart';
 import '../ir/visitors.dart';
 import '../ir/util.dart';
 import '../js/js.dart' as js;
-import '../js_backend/annotations.dart';
 import '../js_backend/namer.dart';
 import '../js_backend/native_data.dart';
 import '../js_model/locals.dart';
-import '../kernel/kernel_strategy.dart';
 import '../kernel/dart2js_target.dart';
 import '../native/behavior.dart';
 import '../options.dart';
@@ -58,6 +55,9 @@
   @override
   final DiagnosticReporter reporter;
   final Environment _environment;
+  final NativeBasicDataBuilder nativeBasicDataBuilder =
+      NativeBasicDataBuilder();
+  NativeBasicData _nativeBasicData;
   KCommonElements _commonElements;
   KernelElementEnvironment _elementEnvironment;
   DartTypeConverter _typeConverter;
@@ -101,12 +101,10 @@
   final Map<ir.TreeNode, Local> localFunctionMap = {};
 
   BehaviorBuilder _nativeBehaviorBuilder;
-  final KernelFrontendStrategy _frontendStrategy;
 
   Map<KMember, Map<ir.Expression, TypeMap>> typeMapsForTesting;
 
-  KernelToElementMap(
-      this.reporter, this._environment, this._frontendStrategy, this.options) {
+  KernelToElementMap(this.reporter, this._environment, this.options) {
     _elementEnvironment = KernelElementEnvironment(this);
     _typeConverter = DartTypeConverter(this);
     _types = KernelDartTypes(this, options);
@@ -505,7 +503,7 @@
 
   /// Returns the [DartType] corresponding to [type].
   @override
-  DartType getDartType(ir.DartType type) => _typeConverter.convert(type);
+  DartType getDartType(ir.DartType type) => _typeConverter.visitType(type);
 
   /// Returns the [TypeVariableType] corresponding to [type].
   TypeVariableType getTypeVariableType(ir.TypeParameterType type) =>
@@ -521,7 +519,7 @@
 
   /// Returns the [InterfaceType] corresponding to [type].
   InterfaceType getInterfaceType(ir.InterfaceType type) =>
-      _typeConverter.convert(type).withoutNullability;
+      _typeConverter.visitType(type).withoutNullability;
 
   /// Returns the [FunctionType] of the [node].
   @override
@@ -1422,7 +1420,16 @@
   }
 
   /// NativeBasicData is need for computation of the default super class.
-  NativeBasicData get nativeBasicData => _frontendStrategy.nativeBasicData;
+  NativeBasicData get nativeBasicData {
+    if (_nativeBasicData == null) {
+      _nativeBasicData = nativeBasicDataBuilder.close(elementEnvironment);
+      assert(
+          _nativeBasicData != null,
+          failedAt(NO_LOCATION_SPANNABLE,
+              "NativeBasicData has not been computed yet."));
+    }
+    return _nativeBasicData;
+  }
 
   /// Adds libraries in [component] to the set of libraries.
   ///
@@ -1436,49 +1443,27 @@
       _nativeBehaviorBuilder ??= BehaviorBuilder(elementEnvironment,
           commonElements, nativeBasicData, reporter, options);
 
-  ResolutionImpact computeWorldImpact(KMember member,
-      VariableScopeModel variableScopeModel, Set<PragmaAnnotation> annotations,
-      {ImpactBuilderData impactBuilderData}) {
+  ResolutionImpact computeWorldImpact(
+      KMember member, ImpactBuilderData impactBuilderData) {
     KMemberData memberData = members.getData(member);
     ir.Member node = memberData.node;
 
-    if (impactBuilderData != null) {
-      if (impactBuilderData.typeMapsForTesting != null) {
-        typeMapsForTesting ??= {};
-        typeMapsForTesting[member] = impactBuilderData.typeMapsForTesting;
-      }
-      ImpactData impactData = impactBuilderData.impactData;
-      memberData.staticTypes = impactBuilderData.cachedStaticTypes;
-      KernelImpactConverter converter = KernelImpactConverter(
-          this,
-          member,
-          reporter,
-          options,
-          _constantValuefier,
-          // TODO(johnniwinther): Pull the static type context from the cached
-          // static types.
-          ir.StaticTypeContext(node, typeEnvironment));
-      return converter.convert(impactData);
-    } else {
-      StaticTypeCacheImpl staticTypeCache = StaticTypeCacheImpl();
-      KernelImpactBuilder builder = KernelImpactBuilder(
-          this,
-          member,
-          reporter,
-          options,
-          ir.StaticTypeContext(node, typeEnvironment, cache: staticTypeCache),
-          staticTypeCache,
-          variableScopeModel,
-          annotations,
-          _constantValuefier);
-      if (retainDataForTesting) {
-        typeMapsForTesting ??= {};
-        typeMapsForTesting[member] = builder.typeMapsForTesting = {};
-      }
-      node.accept(builder);
-      memberData.staticTypes = builder.getStaticTypeCache();
-      return builder.impactBuilder;
+    if (impactBuilderData.typeMapsForTesting != null) {
+      typeMapsForTesting ??= {};
+      typeMapsForTesting[member] = impactBuilderData.typeMapsForTesting;
     }
+    ImpactData impactData = impactBuilderData.impactData;
+    memberData.staticTypes = impactBuilderData.cachedStaticTypes;
+    KernelImpactConverter converter = KernelImpactConverter(
+        this,
+        member,
+        reporter,
+        options,
+        _constantValuefier,
+        // TODO(johnniwinther): Pull the static type context from the cached
+        // static types.
+        ir.StaticTypeContext(node, typeEnvironment));
+    return converter.convert(impactData);
   }
 
   StaticTypeCache getCachedStaticTypes(KMember member) {
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index 2d4c60f..7b863ab 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -16,11 +16,9 @@
 import '../ir/impact.dart';
 import '../ir/impact_data.dart';
 import '../ir/runtime_type_analysis.dart';
-import '../ir/scope.dart';
 import '../ir/static_type.dart';
 import '../ir/util.dart';
 import '../ir/visitors.dart';
-import '../js_backend/annotations.dart';
 import '../js_backend/native_data.dart';
 import '../native/behavior.dart';
 import '../options.dart';
@@ -32,68 +30,15 @@
 import '../universe/world_builder.dart';
 import 'element_map.dart';
 
-/// Visitor that computes the world impact of a member.
-class KernelImpactBuilder extends ImpactBuilderBase
-    with KernelImpactRegistryMixin {
-  @override
+/// [ImpactRegistry] that converts kernel based impact data to world impact
+/// object based on the K model.
+class KernelImpactConverter implements ImpactRegistry {
   final ResolutionWorldImpactBuilder impactBuilder;
-  @override
   final KernelToElementMap elementMap;
-  @override
   final DiagnosticReporter reporter;
-  @override
   final CompilerOptions _options;
-  @override
   final MemberEntity currentMember;
-  final Set<PragmaAnnotation> _annotations;
-  @override
   final ConstantValuefier _constantValuefier;
-
-  KernelImpactBuilder(
-      this.elementMap,
-      this.currentMember,
-      this.reporter,
-      this._options,
-      ir.StaticTypeContext staticTypeContext,
-      StaticTypeCacheImpl staticTypeCache,
-      VariableScopeModel variableScopeModel,
-      this._annotations,
-      this._constantValuefier)
-      : this.impactBuilder = ResolutionWorldImpactBuilder(
-            elementMap.commonElements.dartTypes, currentMember),
-        super(staticTypeContext, staticTypeCache, elementMap.classHierarchy,
-            variableScopeModel);
-
-  @override
-  CommonElements get commonElements => elementMap.commonElements;
-
-  @override
-  NativeBasicData get _nativeBasicData => elementMap.nativeBasicData;
-
-  @override
-  bool get useAsserts => _options.enableUserAssertions;
-
-  @override
-  bool get inferEffectivelyFinalVariableTypes =>
-      !_annotations.contains(PragmaAnnotation.disableFinal);
-}
-
-/// Converts a [ImpactData] object based on kernel to the corresponding
-/// [ResolutionImpact] based on the K model.
-class KernelImpactConverter extends KernelImpactRegistryMixin {
-  @override
-  final ResolutionWorldImpactBuilder impactBuilder;
-  @override
-  final KernelToElementMap elementMap;
-  @override
-  final DiagnosticReporter reporter;
-  @override
-  final CompilerOptions _options;
-  @override
-  final MemberEntity currentMember;
-  @override
-  final ConstantValuefier _constantValuefier;
-  @override
   final ir.StaticTypeContext staticTypeContext;
 
   KernelImpactConverter(this.elementMap, this.currentMember, this.reporter,
@@ -101,37 +46,13 @@
       : this.impactBuilder = ResolutionWorldImpactBuilder(
             elementMap.commonElements.dartTypes, currentMember);
 
-  @override
   ir.TypeEnvironment get typeEnvironment => elementMap.typeEnvironment;
 
-  @override
   CommonElements get commonElements => elementMap.commonElements;
 
-  @override
   NativeBasicData get _nativeBasicData => elementMap.nativeBasicData;
 
-  /// Converts a [ImpactData] object based on kernel to the corresponding
-  /// [ResolutionImpact] based on the K model.
-  ResolutionImpact convert(ImpactData impactData) {
-    impactData.apply(this);
-    return impactBuilder;
-  }
-}
-
-/// [ImpactRegistry] that converts kernel based impact data to world impact
-/// object based on the K model.
-abstract class KernelImpactRegistryMixin implements ImpactRegistry {
-  CompilerOptions get _options;
-  DiagnosticReporter get reporter;
-  KernelToElementMap get elementMap;
-  MemberEntity get currentMember;
-  ResolutionWorldImpactBuilder get impactBuilder;
-  ir.TypeEnvironment get typeEnvironment;
-  CommonElements get commonElements;
   DartTypes get dartTypes => commonElements.dartTypes;
-  NativeBasicData get _nativeBasicData;
-  ConstantValuefier get _constantValuefier;
-  ir.StaticTypeContext get staticTypeContext;
 
   String typeToString(DartType type) =>
       type.toStructuredText(dartTypes, _options);
@@ -871,4 +792,11 @@
       }
     }
   }
+
+  /// Converts a [ImpactData] object based on kernel to the corresponding
+  /// [ResolutionImpact] based on the K model.
+  ResolutionImpact convert(ImpactData impactData) {
+    impactData.apply(this);
+    return impactBuilder;
+  }
 }
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index f1a2641..d45d1bd 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -38,21 +38,19 @@
 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';
 import '../universe/world_impact.dart';
 import '../util/enumset.dart';
 import 'element_map.dart';
-import 'loader.dart';
+import 'element_map_impl.dart';
 import 'native_basic_data.dart';
 
 /// Front end strategy that loads '.dill' files and builds a resolved element
 /// model from kernel IR nodes.
 class KernelFrontendStrategy {
-  final NativeBasicDataBuilder nativeBasicDataBuilder =
-      NativeBasicDataBuilder();
-  NativeBasicData _nativeBasicData;
   final CompilerOptions _options;
   final CompilerTask _compilerTask;
   KernelToElementMap _elementMap;
@@ -84,7 +82,7 @@
   KernelFrontendStrategy(this._compilerTask, this._options,
       DiagnosticReporter reporter, env.Environment environment) {
     assert(_compilerTask != null);
-    _elementMap = KernelToElementMap(reporter, environment, this, _options);
+    _elementMap = KernelToElementMap(reporter, environment, _options);
     _modularStrategy = KernelModularStrategy(_compilerTask, _elementMap);
     _backendUsageBuilder = BackendUsageBuilderImpl(this);
     noSuchMethodRegistry =
@@ -135,6 +133,7 @@
       CompilerTask task, Compiler compiler) {
     RuntimeTypesNeedBuilder rtiNeedBuilder = _createRuntimeTypesNeedBuilder();
     BackendImpacts impacts = BackendImpacts(commonElements, compiler.options);
+    final nativeBasicData = _elementMap.nativeBasicData;
     _nativeResolutionEnqueuer = NativeResolutionEnqueuer(
         compiler.options,
         elementEnvironment,
@@ -217,25 +216,14 @@
         annotationsData);
   }
 
-  NativeBasicData get nativeBasicData {
-    if (_nativeBasicData == null) {
-      _nativeBasicData = nativeBasicDataBuilder.close(elementEnvironment);
-      assert(
-          _nativeBasicData != null,
-          failedAt(NO_LOCATION_SPANNABLE,
-              "NativeBasicData has not been computed yet."));
-    }
-    return _nativeBasicData;
-  }
-
   /// Registers a set of loaded libraries with this strategy.
-  void registerLoadedLibraries(KernelResult kernelResult) {
-    _elementMap.addComponent(kernelResult.component);
+  void registerLoadedLibraries(ir.Component component, List<Uri> libraries) {
+    _elementMap.addComponent(component);
     _irAnnotationData = processAnnotations(
-        ModularCore(kernelResult.component, _elementMap.constantEvaluator));
+        ModularCore(component, _elementMap.constantEvaluator));
     _annotationProcessor = KernelAnnotationProcessor(
-        elementMap, nativeBasicDataBuilder, _irAnnotationData);
-    for (Uri uri in kernelResult.libraries) {
+        elementMap, elementMap.nativeBasicDataBuilder, _irAnnotationData);
+    for (Uri uri in libraries) {
       LibraryEntity library = elementEnvironment.lookupLibrary(uri);
       if (maybeEnableNative(library.canonicalUri)) {
         _annotationProcessor.extractNativeAnnotations(library);
@@ -395,12 +383,8 @@
       }
       ImpactBuilderData impactBuilderData = modularMemberData.impactBuilderData;
       return _compilerTask.measureSubtask('worldImpact', () {
-        ResolutionImpact impact = _elementMap.computeWorldImpact(
-            element,
-            scopeModel.variableScopeModel,
-            Set<PragmaAnnotation>.from(
-                annotations.iterable(PragmaAnnotation.values)),
-            impactBuilderData: impactBuilderData);
+        ResolutionImpact impact =
+            _elementMap.computeWorldImpact(element, impactBuilderData);
         WorldImpact worldImpact =
             _impactTransformer.transformResolutionImpact(impact);
         if (_impactCache != null) {
@@ -415,11 +399,6 @@
   String toString() => 'KernelWorkItem($element)';
 }
 
-/// If `true` kernel impacts are computed as [ImpactData] directly on kernel
-/// and converted to the K model afterwards. This is a pre-step to modularizing
-/// the world impact computation.
-bool useImpactDataForTesting = false;
-
 class KernelModularStrategy extends ModularStrategy {
   final CompilerTask _compilerTask;
   final KernelToElementMap _elementMap;
@@ -436,19 +415,14 @@
       ir.Member node, EnumSet<PragmaAnnotation> annotations) {
     ScopeModel scopeModel = _compilerTask.measureSubtask(
         'closures', () => ScopeModel.from(node, _elementMap.constantEvaluator));
-    if (useImpactDataForTesting) {
-      return _compilerTask.measureSubtask('worldImpact', () {
-        return computeModularMemberData(node,
-            options: _elementMap.options,
-            typeEnvironment: _elementMap.typeEnvironment,
-            classHierarchy: _elementMap.classHierarchy,
-            scopeModel: scopeModel,
-            annotations: annotations);
-      });
-    } else {
-      ImpactBuilderData impactBuilderData;
-      return ModularMemberData(scopeModel, impactBuilderData);
-    }
+    return _compilerTask.measureSubtask('worldImpact', () {
+      return computeModularMemberData(node,
+          options: _elementMap.options,
+          typeEnvironment: _elementMap.typeEnvironment,
+          classHierarchy: _elementMap.classHierarchy,
+          scopeModel: scopeModel,
+          annotations: annotations);
+    });
   }
 }
 
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
deleted file mode 100644
index 8e7520e..0000000
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ /dev/null
@@ -1,330 +0,0 @@
-// Copyright (c) 2012, 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.
-
-library dart2js.library_loader;
-
-import 'dart:async';
-
-import 'package:front_end/src/fasta/kernel/utils.dart';
-import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
-
-import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
-import 'package:kernel/kernel.dart' hide LibraryDependency, Combinator;
-import 'package:kernel/target/targets.dart' hide DiagnosticReporter;
-
-import '../../compiler.dart' as api;
-import '../commandline_options.dart' show Flags;
-import '../common/tasks.dart' show CompilerTask, Measurer;
-import '../common.dart';
-import '../options.dart';
-
-import 'front_end_adapter.dart';
-import 'dart2js_target.dart' show Dart2jsTarget;
-
-/// A task that produces the kernel IR representation of the application.
-///
-/// It supports loading both .dart source files or pre-compiled .dill files.
-/// When given .dart source files, it invokes the common front-end (CFE)
-/// to produce the corresponding kernel IR representation.
-class KernelLoaderTask extends CompilerTask {
-  final DiagnosticReporter _reporter;
-
-  final api.CompilerInput _compilerInput;
-
-  final CompilerOptions _options;
-
-  /// Shared state between compilations.
-  fe.InitializedCompilerState initializedCompilerState;
-
-  // TODO(johnniwinther): Remove this when #34942 is fixed.
-  /// Force in-memory serialization/deserialization of the loaded component.
-  ///
-  /// This is used for testing.
-  bool forceSerialization = false;
-
-  KernelLoaderTask(
-      this._options, this._compilerInput, this._reporter, Measurer measurer)
-      : initializedCompilerState = _options.kernelInitializedCompilerState,
-        super(measurer);
-
-  @override
-  String get name => 'kernel loader';
-
-  static Library _findEntryLibrary(Component component, Uri entryUri) {
-    var entryLibrary = component.libraries
-        .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
-    if (entryLibrary == null) {
-      throw ArgumentError('Entry uri $entryUri not found in dill.');
-    }
-    return entryLibrary;
-  }
-
-  static ir.Reference _findMainMethod(Library entryLibrary) {
-    var mainMethod = entryLibrary.procedures
-        .firstWhere((p) => p.name.text == 'main', orElse: () => null);
-
-    // In some cases, a main method is defined in another file, and then
-    // exported. In these cases, we search for the main method in
-    // [additionalExports].
-    ir.Reference mainMethodReference;
-    if (mainMethod == null) {
-      mainMethodReference = entryLibrary.additionalExports.firstWhere(
-          (p) => p.canonicalName.name == 'main',
-          orElse: () => null);
-    } else {
-      mainMethodReference = mainMethod.reference;
-    }
-    if (mainMethodReference == null) {
-      throw ArgumentError(
-          'Entry uri ${entryLibrary.fileUri} has no main method.');
-    }
-    return mainMethodReference;
-  }
-
-  /// Loads an entire Kernel [Component] from a file on disk.
-  Future<KernelResult> load() {
-    return measure(() async {
-      String targetName =
-          _options.compileForServer ? "dart2js_server" : "dart2js";
-
-      // We defer selecting the platform until we've resolved the null safety
-      // mode.
-      String getPlatformFilename() {
-        String unsoundMarker = _options.useLegacySubtyping ? "_unsound" : "";
-        return "${targetName}_platform$unsoundMarker.dill";
-      }
-
-      // If we are passed an [entryUri] and building from dill, then we lookup
-      // the [entryLibrary] in the built component.
-      Library entryLibrary;
-      var resolvedUri = _options.compilationTarget;
-      ir.Component component;
-      List<Uri> moduleLibraries = const [];
-
-      void inferNullSafetyMode(bool isSound) {
-        if (_options.nullSafetyMode == NullSafetyMode.unspecified) {
-          _options.nullSafetyMode =
-              isSound ? NullSafetyMode.sound : NullSafetyMode.unsound;
-        }
-      }
-
-      void validateNullSafetyMode() {
-        assert(_options.nullSafetyMode != NullSafetyMode.unspecified);
-      }
-
-      if (_options.fromDill) {
-        component = ir.Component();
-        Future<void> read(Uri uri) async {
-          api.Input input = await _compilerInput.readFromUri(uri,
-              inputKind: api.InputKind.binary);
-          BinaryBuilder(input.data).readComponent(component);
-        }
-
-        await read(resolvedUri);
-
-        if (_options.modularMode) {
-          moduleLibraries =
-              component.libraries.map((lib) => lib.importUri).toList();
-        }
-
-        var isStrongDill =
-            component.mode == ir.NonNullableByDefaultCompiledMode.Strong;
-        var incompatibleNullSafetyMode =
-            isStrongDill ? NullSafetyMode.unsound : NullSafetyMode.sound;
-        if (_options.nullSafetyMode == incompatibleNullSafetyMode) {
-          var dillMode = isStrongDill ? 'sound' : 'unsound';
-          var option =
-              isStrongDill ? Flags.noSoundNullSafety : Flags.soundNullSafety;
-          throw ArgumentError("$resolvedUri was compiled with $dillMode null "
-              "safety and is incompatible with the '$option' option");
-        }
-        inferNullSafetyMode(isStrongDill);
-        validateNullSafetyMode();
-
-        // Modular compiles do not include the platform on the input dill
-        // either.
-        if (_options.platformBinaries != null) {
-          var platformUri =
-              _options.platformBinaries.resolve(getPlatformFilename());
-          // Modular analysis can be run on the sdk by providing directly the
-          // path to the platform.dill file. In that case, we do not load the
-          // platform file implicitly.
-          // TODO(joshualitt): Change how we detect this case so it is less
-          // brittle.
-          if (platformUri != resolvedUri) await read(platformUri);
-        }
-
-        // Concatenate dills.
-        if (_options.dillDependencies != null) {
-          for (Uri dependency in _options.dillDependencies) {
-            await read(dependency);
-          }
-        }
-
-        if (_options.entryUri != null) {
-          entryLibrary = _findEntryLibrary(component, _options.entryUri);
-          var mainMethod = _findMainMethod(entryLibrary);
-          component.setMainMethodAndMode(mainMethod, true, component.mode);
-        }
-      } else {
-        bool verbose = false;
-        Target target =
-            Dart2jsTarget(targetName, TargetFlags(), options: _options);
-        fe.FileSystem fileSystem = CompilerFileSystem(_compilerInput);
-        fe.Verbosity verbosity = _options.verbosity;
-        fe.DiagnosticMessageHandler onDiagnostic =
-            (fe.DiagnosticMessage message) {
-          if (fe.Verbosity.shouldPrint(verbosity, message)) {
-            reportFrontEndMessage(_reporter, message);
-          }
-        };
-        fe.CompilerOptions options = fe.CompilerOptions()
-          ..target = target
-          ..librariesSpecificationUri = _options.librariesSpecificationUri
-          ..packagesFileUri = _options.packageConfig
-          ..explicitExperimentalFlags = _options.explicitExperimentalFlags
-          ..verbose = verbose
-          ..fileSystem = fileSystem
-          ..onDiagnostic = onDiagnostic
-          ..verbosity = verbosity;
-        bool isLegacy =
-            await fe.uriUsesLegacyLanguageVersion(resolvedUri, options);
-        inferNullSafetyMode(!isLegacy);
-
-        List<Uri> dependencies = [];
-        if (_options.platformBinaries != null) {
-          dependencies
-              .add(_options.platformBinaries.resolve(getPlatformFilename()));
-        }
-        if (_options.dillDependencies != null) {
-          dependencies.addAll(_options.dillDependencies);
-        }
-
-        initializedCompilerState = fe.initializeCompiler(
-            initializedCompilerState,
-            target,
-            _options.librariesSpecificationUri,
-            dependencies,
-            _options.packageConfig,
-            explicitExperimentalFlags: _options.explicitExperimentalFlags,
-            nnbdMode: _options.useLegacySubtyping
-                ? fe.NnbdMode.Weak
-                : fe.NnbdMode.Strong,
-            invocationModes: _options.cfeInvocationModes,
-            verbosity: verbosity);
-        component = await fe.compile(initializedCompilerState, verbose,
-            fileSystem, onDiagnostic, resolvedUri);
-        if (component == null) return null;
-        validateNullSafetyMode();
-      }
-
-      if (forceSerialization) {
-        // TODO(johnniwinther): Remove this when #34942 is fixed.
-        List<int> data = serializeComponent(component);
-        component = ir.Component();
-        BinaryBuilder(data).readComponent(component);
-      }
-      return _toResult(entryLibrary, component, moduleLibraries);
-    });
-  }
-
-  KernelResult _toResult(
-      Library entryLibrary, ir.Component component, List<Uri> moduleLibraries) {
-    Uri rootLibraryUri = null;
-    Iterable<ir.Library> libraries = component.libraries;
-    if (!_options.modularMode) {
-      // For non-modular builds we should always have a [mainMethod] at this
-      // point.
-      if (component.mainMethod == null) {
-        // TODO(sigmund): move this so that we use the same error template
-        // from the CFE.
-        _reporter.reportError(_reporter.createMessage(NO_LOCATION_SPANNABLE,
-            MessageKind.GENERIC, {'text': "No 'main' method found."}));
-      }
-
-      // If we are building from dill and are passed an [entryUri], then we use
-      // that to find the appropriate [entryLibrary]. Otherwise, we fallback to
-      // the [enclosingLibrary] of the [mainMethod].
-      // NOTE: Under some circumstances, the [entryLibrary] exports the
-      // [mainMethod] from another library, and thus the [enclosingLibrary] of
-      // the [mainMethod] may not be the same as the [entryLibrary].
-      var root = entryLibrary ?? component.mainMethod.enclosingLibrary;
-      rootLibraryUri = root.importUri;
-
-      // Filter unreachable libraries: [Component] was built by linking in the
-      // entire SDK libraries, not all of them are used. We include anything
-      // that is reachable from `main`. Note that all internal libraries that
-      // the compiler relies on are reachable from `dart:core`.
-      var seen = Set<Library>();
-      search(ir.Library current) {
-        if (!seen.add(current)) return;
-        for (ir.LibraryDependency dep in current.dependencies) {
-          search(dep.targetLibrary);
-        }
-      }
-
-      search(root);
-
-      // Libraries dependencies do not show implicit imports to `dart:core`.
-      var dartCore = component.libraries.firstWhere((lib) {
-        return lib.importUri.isScheme('dart') && lib.importUri.path == 'core';
-      });
-      search(dartCore);
-
-      libraries = libraries.where(seen.contains);
-    }
-    return KernelResult(component, rootLibraryUri,
-        libraries.map((lib) => lib.importUri).toList(), moduleLibraries);
-  }
-}
-
-/// Result of invoking the CFE to produce the kernel IR.
-class KernelResult {
-  ir.Component component;
-
-  /// The [Uri] of the root library containing main.
-  /// Note: rootLibraryUri will be null for some modules, for example in the
-  /// case of dependent libraries processed modularly.
-  final Uri rootLibraryUri;
-
-  /// Returns the [Uri]s of all libraries that have been loaded that are
-  /// reachable from the [rootLibraryUri].
-  ///
-  /// Note that [component] may contain some libraries that are excluded here.
-  final Iterable<Uri> libraries;
-
-  /// When running only dart2js modular analysis, returns the [Uri]s for
-  /// libraries loaded in the input module.
-  ///
-  /// This excludes other libraries reachable from them that were loaded as
-  /// dependencies. The result of [moduleLibraries] is always a subset of
-  /// [libraries].
-  final Iterable<Uri> moduleLibraries;
-
-  KernelResult(this.component, this.rootLibraryUri, this.libraries,
-      this.moduleLibraries);
-
-  void trimComponent() {
-    var irLibraryMap = <Uri, Library>{};
-    var irLibraries = <Library>[];
-    for (var library in component.libraries) {
-      irLibraryMap[library.importUri] = library;
-    }
-    for (var library in libraries) {
-      irLibraries.add(irLibraryMap[library]);
-    }
-    var mainMethod = component.mainMethodName;
-    var componentMode = component.mode;
-    component = ir.Component(
-        libraries: irLibraries,
-        uriToSource: component.uriToSource,
-        nameRoot: component.root);
-    component.setMainMethodAndMode(mainMethod, true, componentMode);
-  }
-
-  @override
-  String toString() =>
-      'root=$rootLibraryUri,libraries=$libraries,module=$moduleLibraries';
-}
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index f8f41cb..cf696e9 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -195,7 +195,7 @@
   NativeBehavior.internal(this.sideEffects);
 
   /// Deserializes a [NativeBehavior] object from [source].
-  factory NativeBehavior.readFromDataSource(DataSource source) {
+  factory NativeBehavior.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
 
     List<Object> readTypes() {
@@ -233,7 +233,7 @@
   }
 
   /// Serializes this [NativeBehavior] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
 
     void writeTypes(List<Object> types) {
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 3f926b2..554f833 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -81,6 +81,10 @@
   /// Whether to emit JavaScript encoded as UTF-8.
   FeatureOption writeUtf8 = FeatureOption('utf8');
 
+  /// Experimental instrumentation to add tree shaking information to
+  /// dump-info's output.
+  FeatureOption newDumpInfo = FeatureOption('new-dump-info');
+
   /// [FeatureOption]s which are shipped and cannot be toggled.
   late final List<FeatureOption> shipped = [
     newHolders,
@@ -93,9 +97,7 @@
   ];
 
   /// [FeatureOption]s which default to disabled.
-  late final List<FeatureOption> canary = [
-    writeUtf8,
-  ];
+  late final List<FeatureOption> canary = [writeUtf8, newDumpInfo];
 
   /// Forces canary feature on. This must run after [Option].parse.
   void forceCanary() {
@@ -169,10 +171,9 @@
   Uri? get compilationTarget => inputDillUri ?? entryUri;
 
   bool get fromDill {
+    if (sources != null) return false;
     var targetPath = compilationTarget!.path;
-    return targetPath.endsWith('.dill') ||
-        targetPath.endsWith('.gdill') ||
-        targetPath.endsWith('.mdill');
+    return targetPath.endsWith('.dill');
   }
 
   /// Location of the package configuration file.
@@ -191,6 +192,9 @@
   /// files for linking.
   List<Uri>? dillDependencies;
 
+  /// A list of sources to compile, only used for modular analysis.
+  List<Uri>? sources;
+
   Uri? writeModularAnalysisUri;
 
   /// Helper to determine if compiler is being run just for modular analysis.
@@ -676,6 +680,7 @@
       ..showInternalProgress = _hasOption(options, Flags.progress)
       ..dillDependencies =
           _extractUriListOption(options, '${Flags.dillDependencies}')
+      ..sources = _extractUriListOption(options, '${Flags.sources}')
       ..readProgramSplit =
           _extractUriOption(options, '${Flags.readProgramSplit}=')
       ..writeModularAnalysisUri =
diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart
index dc2b669..34232db 100644
--- a/pkg/compiler/lib/src/ordered_typeset.dart
+++ b/pkg/compiler/lib/src/ordered_typeset.dart
@@ -38,7 +38,7 @@
   OrderedTypeSet.internal(this._levels, this.types);
 
   /// Deserializes a [OrderedTypeSet] object from [source].
-  factory OrderedTypeSet.readFromDataSource(DataSource source) {
+  factory OrderedTypeSet.readFromDataSource(DataSourceReader source) {
     // TODO(johnniwinther): Make the deserialized type sets share their
     // internal links like the original type sets do?
     source.begin(tag);
@@ -63,7 +63,7 @@
   }
 
   /// Serializes this [OrderedTypeSet] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     List<InterfaceType> typeList = types.toList();
     sink.writeInt(typeList.length);
diff --git a/pkg/compiler/lib/src/phase/load_kernel.dart b/pkg/compiler/lib/src/phase/load_kernel.dart
new file mode 100644
index 0000000..e16d5fb
--- /dev/null
+++ b/pkg/compiler/lib/src/phase/load_kernel.dart
@@ -0,0 +1,377 @@
+// 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:front_end/src/fasta/kernel/utils.dart';
+import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
+
+import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
+import 'package:kernel/kernel.dart' hide LibraryDependency, Combinator;
+import 'package:kernel/target/targets.dart' hide DiagnosticReporter;
+
+import '../../compiler.dart' as api;
+import '../commandline_options.dart';
+import '../common.dart';
+import '../kernel/front_end_adapter.dart';
+import '../kernel/dart2js_target.dart' show Dart2jsTarget;
+import '../kernel/transformations/clone_mixin_methods_with_super.dart'
+    as transformMixins show transformLibraries;
+import '../options.dart';
+
+class Input {
+  final CompilerOptions options;
+  final api.CompilerInput compilerInput;
+  final DiagnosticReporter reporter;
+
+  /// Shared state between compilations. Only used when loading from source.
+  final fe.InitializedCompilerState initializedCompilerState;
+
+  // TODO(johnniwinther): Remove this when #34942 is fixed.
+  /// Force in-memory serialization/deserialization of the loaded component.
+  ///
+  /// This is used for testing.
+  final bool forceSerialization;
+
+  Input(this.options, this.compilerInput, this.reporter,
+      this.initializedCompilerState, this.forceSerialization);
+}
+
+/// Result of invoking the CFE to produce the kernel IR.
+class Output {
+  final ir.Component component;
+
+  /// The [Uri] of the root library containing main.
+  /// Note: rootLibraryUri will be null for some modules, for example in the
+  /// case of dependent libraries processed modularly.
+  final Uri rootLibraryUri;
+
+  /// Returns the [Uri]s of all libraries that have been loaded that are
+  /// reachable from the [rootLibraryUri].
+  ///
+  /// Note that [component] may contain some libraries that are excluded here.
+  final List<Uri> libraries;
+
+  /// When running only dart2js modular analysis, returns the [Uri]s for
+  /// libraries loaded in the input module.
+  ///
+  /// This excludes other libraries reachable from them that were loaded as
+  /// dependencies. The result of [moduleLibraries] is always a subset of
+  /// [libraries].
+  final List<Uri> moduleLibraries;
+
+  final fe.InitializedCompilerState initializedCompilerState;
+
+  Output withNewComponent(ir.Component component) => Output(component,
+      rootLibraryUri, libraries, moduleLibraries, initializedCompilerState);
+
+  Output(this.component, this.rootLibraryUri, this.libraries,
+      this.moduleLibraries, this.initializedCompilerState);
+}
+
+Library _findEntryLibrary(Component component, Uri entryUri) {
+  var entryLibrary = component.libraries
+      .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
+  if (entryLibrary == null) {
+    throw ArgumentError('Entry uri $entryUri not found in dill.');
+  }
+  return entryLibrary;
+}
+
+ir.Reference _findMainMethod(Library entryLibrary) {
+  var mainMethod = entryLibrary.procedures
+      .firstWhere((p) => p.name.text == 'main', orElse: () => null);
+
+  // In some cases, a main method is defined in another file, and then
+  // exported. In these cases, we search for the main method in
+  // [additionalExports].
+  ir.Reference mainMethodReference;
+  if (mainMethod == null) {
+    mainMethodReference = entryLibrary.additionalExports
+        .firstWhere((p) => p.canonicalName.name == 'main', orElse: () => null);
+  } else {
+    mainMethodReference = mainMethod.reference;
+  }
+  if (mainMethodReference == null) {
+    throw ArgumentError(
+        'Entry uri ${entryLibrary.fileUri} has no main method.');
+  }
+  return mainMethodReference;
+}
+
+String _getPlatformFilename(CompilerOptions options, String targetName) {
+  String unsoundMarker = options.useLegacySubtyping ? "_unsound" : "";
+  return "${targetName}_platform$unsoundMarker.dill";
+}
+
+void _inferNullSafetyMode(CompilerOptions options, bool isSound) {
+  if (options.nullSafetyMode == NullSafetyMode.unspecified) {
+    options.nullSafetyMode =
+        isSound ? NullSafetyMode.sound : NullSafetyMode.unsound;
+  }
+}
+
+void _validateNullSafetyMode(CompilerOptions options) {
+  assert(options.nullSafetyMode != NullSafetyMode.unspecified);
+}
+
+class _LoadFromKernelResult {
+  final ir.Component component;
+  final Library entryLibrary;
+  final List<Uri> moduleLibraries;
+
+  _LoadFromKernelResult(
+      this.component, this.entryLibrary, this.moduleLibraries);
+}
+
+void _doGlobalTransforms(Component component) {
+  transformMixins.transformLibraries(component.libraries);
+}
+
+Future<_LoadFromKernelResult> _loadFromKernel(CompilerOptions options,
+    api.CompilerInput compilerInput, String targetName) async {
+  Library entryLibrary;
+  var resolvedUri = options.compilationTarget;
+  ir.Component component = ir.Component();
+  List<Uri> moduleLibraries = [];
+
+  Future<void> read(Uri uri) async {
+    api.Input input =
+        await compilerInput.readFromUri(uri, inputKind: api.InputKind.binary);
+    BinaryBuilder(input.data).readComponent(component);
+  }
+
+  await read(resolvedUri);
+
+  if (options.modularMode) {
+    moduleLibraries = component.libraries.map((lib) => lib.importUri).toList();
+  }
+
+  var isStrongDill =
+      component.mode == ir.NonNullableByDefaultCompiledMode.Strong;
+  var incompatibleNullSafetyMode =
+      isStrongDill ? NullSafetyMode.unsound : NullSafetyMode.sound;
+  if (options.nullSafetyMode == incompatibleNullSafetyMode) {
+    var dillMode = isStrongDill ? 'sound' : 'unsound';
+    var option = isStrongDill ? Flags.noSoundNullSafety : Flags.soundNullSafety;
+    throw ArgumentError("$resolvedUri was compiled with $dillMode null "
+        "safety and is incompatible with the '$option' option");
+  }
+  _inferNullSafetyMode(options, isStrongDill);
+  _validateNullSafetyMode(options);
+
+  // Modular compiles do not include the platform on the input dill
+  // either.
+  if (options.platformBinaries != null) {
+    var platformUri = options.platformBinaries
+        .resolve(_getPlatformFilename(options, targetName));
+    // Modular analysis can be run on the sdk by providing directly the
+    // path to the platform.dill file. In that case, we do not load the
+    // platform file implicitly.
+    // TODO(joshualitt): Change how we detect this case so it is less
+    // brittle.
+    if (platformUri != resolvedUri) await read(platformUri);
+  }
+
+  // Concatenate dills.
+  if (options.dillDependencies != null) {
+    for (Uri dependency in options.dillDependencies) {
+      await read(dependency);
+    }
+  }
+
+  if (options.entryUri != null) {
+    entryLibrary = _findEntryLibrary(component, options.entryUri);
+    var mainMethod = _findMainMethod(entryLibrary);
+    component.setMainMethodAndMode(mainMethod, true, component.mode);
+  }
+
+  // We apply global transforms when running phase 0.
+  if (options.cfeOnly) {
+    _doGlobalTransforms(component);
+  }
+  return _LoadFromKernelResult(component, entryLibrary, moduleLibraries);
+}
+
+class _LoadFromSourceResult {
+  final ir.Component component;
+  final fe.InitializedCompilerState initializedCompilerState;
+  final List<Uri> moduleLibraries;
+
+  _LoadFromSourceResult(
+      this.component, this.initializedCompilerState, this.moduleLibraries);
+}
+
+Future<_LoadFromSourceResult> _loadFromSource(
+    CompilerOptions options,
+    api.CompilerInput compilerInput,
+    DiagnosticReporter reporter,
+    fe.InitializedCompilerState initializedCompilerState,
+    String targetName) async {
+  bool verbose = false;
+  Target target = Dart2jsTarget(targetName, TargetFlags(),
+      options: options, canPerformGlobalTransforms: true);
+  fe.FileSystem fileSystem = CompilerFileSystem(compilerInput);
+  fe.Verbosity verbosity = options.verbosity;
+  fe.DiagnosticMessageHandler onDiagnostic = (fe.DiagnosticMessage message) {
+    if (fe.Verbosity.shouldPrint(verbosity, message)) {
+      reportFrontEndMessage(reporter, message);
+    }
+  };
+
+  // If we are passed a list of sources, then we are performing a modular
+  // compile. In this case, we cannot infer null safety from the source files
+  // and must instead rely on the options passed in on the command line.
+  bool isModularCompile = false;
+  List<Uri> sources = [];
+  if (options.sources != null) {
+    isModularCompile = true;
+    sources.addAll(options.sources);
+  } else {
+    fe.CompilerOptions feOptions = fe.CompilerOptions()
+      ..target = target
+      ..librariesSpecificationUri = options.librariesSpecificationUri
+      ..packagesFileUri = options.packageConfig
+      ..explicitExperimentalFlags = options.explicitExperimentalFlags
+      ..verbose = verbose
+      ..fileSystem = fileSystem
+      ..onDiagnostic = onDiagnostic
+      ..verbosity = verbosity;
+    Uri resolvedUri = options.compilationTarget;
+    bool isLegacy =
+        await fe.uriUsesLegacyLanguageVersion(resolvedUri, feOptions);
+    _inferNullSafetyMode(options, !isLegacy);
+    sources.add(options.compilationTarget);
+  }
+
+  // If we are performing a modular compile, we expect the platform binary to be
+  // supplied along with other dill dependencies.
+  List<Uri> dependencies = [];
+  if (options.platformBinaries != null && !isModularCompile) {
+    dependencies.add(options.platformBinaries
+        .resolve(_getPlatformFilename(options, targetName)));
+  }
+  if (options.dillDependencies != null) {
+    dependencies.addAll(options.dillDependencies);
+  }
+
+  initializedCompilerState = fe.initializeCompiler(
+      initializedCompilerState,
+      target,
+      options.librariesSpecificationUri,
+      dependencies,
+      options.packageConfig,
+      explicitExperimentalFlags: options.explicitExperimentalFlags,
+      nnbdMode:
+          options.useLegacySubtyping ? fe.NnbdMode.Weak : fe.NnbdMode.Strong,
+      invocationModes: options.cfeInvocationModes,
+      verbosity: verbosity);
+  ir.Component component = await fe.compile(initializedCompilerState, verbose,
+      fileSystem, onDiagnostic, sources, isModularCompile);
+  _validateNullSafetyMode(options);
+
+  // We have to compute canonical names on the component here to avoid missing
+  // canonical names downstream.
+  if (isModularCompile) {
+    component.computeCanonicalNames();
+  }
+  return _LoadFromSourceResult(
+      component, initializedCompilerState, isModularCompile ? sources : []);
+}
+
+Output _createOutput(
+    CompilerOptions options,
+    DiagnosticReporter reporter,
+    Library entryLibrary,
+    ir.Component component,
+    List<Uri> moduleLibraries,
+    fe.InitializedCompilerState initializedCompilerState) {
+  Uri rootLibraryUri = null;
+  Iterable<ir.Library> libraries = component.libraries;
+  if (!options.modularMode) {
+    // For non-modular builds we should always have a [mainMethod] at this
+    // point.
+    if (component.mainMethod == null) {
+      // TODO(sigmund): move this so that we use the same error template
+      // from the CFE.
+      reporter.reportError(reporter.createMessage(NO_LOCATION_SPANNABLE,
+          MessageKind.GENERIC, {'text': "No 'main' method found."}));
+    }
+
+    // If we are building from dill and are passed an [entryUri], then we use
+    // that to find the appropriate [entryLibrary]. Otherwise, we fallback to
+    // the [enclosingLibrary] of the [mainMethod].
+    // NOTE: Under some circumstances, the [entryLibrary] exports the
+    // [mainMethod] from another library, and thus the [enclosingLibrary] of
+    // the [mainMethod] may not be the same as the [entryLibrary].
+    var root = entryLibrary ?? component.mainMethod.enclosingLibrary;
+    rootLibraryUri = root.importUri;
+
+    // Filter unreachable libraries: [Component] was built by linking in the
+    // entire SDK libraries, not all of them are used. We include anything
+    // that is reachable from `main`. Note that all internal libraries that
+    // the compiler relies on are reachable from `dart:core`.
+    var seen = Set<Library>();
+    search(ir.Library current) {
+      if (!seen.add(current)) return;
+      for (ir.LibraryDependency dep in current.dependencies) {
+        search(dep.targetLibrary);
+      }
+    }
+
+    search(root);
+
+    // Libraries dependencies do not show implicit imports to `dart:core`.
+    var dartCore = component.libraries.firstWhere((lib) {
+      return lib.importUri.isScheme('dart') && lib.importUri.path == 'core';
+    });
+    search(dartCore);
+
+    libraries = libraries.where(seen.contains);
+  }
+  return Output(
+      component,
+      rootLibraryUri,
+      libraries.map((lib) => lib.importUri).toList(),
+      moduleLibraries,
+      initializedCompilerState);
+}
+
+/// Loads an entire Kernel [Component] from a file on disk.
+Future<Output> run(Input input) async {
+  CompilerOptions options = input.options;
+  api.CompilerInput compilerInput = input.compilerInput;
+  DiagnosticReporter reporter = input.reporter;
+
+  String targetName = options.compileForServer ? "dart2js_server" : "dart2js";
+
+  Library entryLibrary;
+  ir.Component component;
+  List<Uri> moduleLibraries = const [];
+  fe.InitializedCompilerState initializedCompilerState =
+      input.initializedCompilerState;
+  if (options.fromDill) {
+    _LoadFromKernelResult result =
+        await _loadFromKernel(options, compilerInput, targetName);
+    component = result.component;
+    entryLibrary = result.entryLibrary;
+    moduleLibraries = result.moduleLibraries;
+  } else {
+    _LoadFromSourceResult result = await _loadFromSource(options, compilerInput,
+        reporter, input.initializedCompilerState, targetName);
+    component = result.component;
+    initializedCompilerState = result.initializedCompilerState;
+    moduleLibraries = result.moduleLibraries;
+  }
+  if (component == null) return null;
+  if (input.forceSerialization) {
+    // TODO(johnniwinther): Remove this when #34942 is fixed.
+    List<int> data = serializeComponent(component);
+    component = ir.Component();
+    BinaryBuilder(data).readComponent(component);
+  }
+  return _createOutput(options, reporter, entryLibrary, component,
+      moduleLibraries, initializedCompilerState);
+}
diff --git a/pkg/compiler/lib/src/phase/modular_analysis.dart b/pkg/compiler/lib/src/phase/modular_analysis.dart
new file mode 100644
index 0000000..d7ba441
--- /dev/null
+++ b/pkg/compiler/lib/src/phase/modular_analysis.dart
@@ -0,0 +1,81 @@
+// 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:kernel/ast.dart' as ir;
+
+import '../common.dart';
+import '../elements/entities.dart';
+import '../environment.dart';
+import '../ir/annotations.dart';
+import '../ir/impact.dart';
+import '../ir/modular.dart';
+import '../ir/scope.dart';
+import '../kernel/dart2js_target.dart';
+import '../kernel/native_basic_data.dart';
+import '../js_backend/annotations.dart';
+import '../kernel/element_map.dart';
+import '../options.dart';
+
+class Input {
+  final CompilerOptions options;
+  final DiagnosticReporter reporter;
+  final Environment environment;
+  final ir.Component component;
+  final List<Uri> libraries;
+  final Set<Uri> moduleLibraries;
+
+  Input(this.options, this.reporter, this.environment, this.component,
+      this.libraries, this.moduleLibraries);
+}
+
+KernelToElementMap _createElementMap(
+    CompilerOptions options,
+    DiagnosticReporter reporter,
+    Environment environment,
+    ir.Component component,
+    List<Uri> libraries) {
+  final elementMap = KernelToElementMap(reporter, environment, options);
+  elementMap.addComponent(component);
+  IrAnnotationData irAnnotationData =
+      processAnnotations(ModularCore(component, elementMap.constantEvaluator));
+  final annotationProcessor = KernelAnnotationProcessor(
+      elementMap, elementMap.nativeBasicDataBuilder, irAnnotationData);
+  for (final uri in libraries) {
+    LibraryEntity library = elementMap.elementEnvironment.lookupLibrary(uri);
+    if (maybeEnableNative(library.canonicalUri)) {
+      annotationProcessor.extractNativeAnnotations(library);
+    }
+    annotationProcessor.extractJsInteropAnnotations(library);
+  }
+  return elementMap;
+}
+
+ModuleData run(Input input) {
+  final options = input.options;
+  final reporter = input.reporter;
+  final elementMap = _createElementMap(
+      options, reporter, input.environment, input.component, input.libraries);
+  final result = <ir.Member, ImpactBuilderData>{};
+  void computeForMember(ir.Member member) {
+    final scopeModel = ScopeModel.from(member, elementMap.constantEvaluator);
+    final annotations = processMemberAnnotations(
+        options, reporter, member, computePragmaAnnotationDataFromIr(member));
+    result[member] = computeModularMemberData(member,
+            options: options,
+            typeEnvironment: elementMap.typeEnvironment,
+            classHierarchy: elementMap.classHierarchy,
+            scopeModel: scopeModel,
+            annotations: annotations)
+        .impactBuilderData;
+  }
+
+  for (final library in input.component.libraries) {
+    if (!input.moduleLibraries.contains(library.importUri)) continue;
+    library.members.forEach(computeForMember);
+    for (final cls in library.classes) {
+      cls.members.forEach(computeForMember);
+    }
+  }
+  return ModuleData(result);
+}
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/lib/src/serialization/abstract_sink.dart b/pkg/compiler/lib/src/serialization/abstract_sink.dart
deleted file mode 100644
index 76d794a..0000000
--- a/pkg/compiler/lib/src/serialization/abstract_sink.dart
+++ /dev/null
@@ -1,649 +0,0 @@
-// Copyright (c) 2018, 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.
-
-part of 'serialization.dart';
-
-/// Base implementation of [DataSink] using [DataSinkMixin] to implement
-/// convenience methods.
-abstract class AbstractDataSink extends DataSinkMixin implements DataSink {
-  /// If `true`, serialization of every data kind is preceded by a [DataKind]
-  /// value.
-  ///
-  /// This is used for debugging data inconsistencies between serialization
-  /// and deserialization.
-  final bool useDataKinds;
-  DataSourceIndices importedIndices;
-
-  /// Visitor used for serializing [ir.DartType]s.
-  DartTypeNodeWriter _dartTypeNodeWriter;
-
-  /// Stack of tags used when [useDataKinds] is `true` to help debugging section
-  /// inconsistencies between serialization and deserialization.
-  List<String> _tags;
-
-  /// Map of [_MemberData] object for serialized kernel member nodes.
-  final Map<ir.Member, _MemberData> _memberData = {};
-
-  IndexedSink<String> _stringIndex;
-  IndexedSink<Uri> _uriIndex;
-  IndexedSink<ir.Member> _memberNodeIndex;
-  IndexedSink<ImportEntity> _importIndex;
-  IndexedSink<ConstantValue> _constantIndex;
-
-  final Map<Type, IndexedSink> _generalCaches = {};
-
-  EntityWriter _entityWriter = const EntityWriter();
-  CodegenWriter _codegenWriter;
-
-  final Map<String, int> tagFrequencyMap;
-
-  ir.Member _currentMemberContext;
-  _MemberData _currentMemberData;
-
-  IndexedSink<T> _createSink<T>() {
-    if (importedIndices == null || !importedIndices.caches.containsKey(T)) {
-      return IndexedSink<T>(this);
-    } else {
-      Map<T, int> cacheCopy = Map.from(importedIndices.caches[T].cache);
-      return IndexedSink<T>(this, cache: cacheCopy);
-    }
-  }
-
-  AbstractDataSink(
-      {this.useDataKinds = false, this.tagFrequencyMap, this.importedIndices}) {
-    _dartTypeNodeWriter = DartTypeNodeWriter(this);
-    _stringIndex = _createSink<String>();
-    _uriIndex = _createSink<Uri>();
-    _memberNodeIndex = _createSink<ir.Member>();
-    _importIndex = _createSink<ImportEntity>();
-    _constantIndex = _createSink<ConstantValue>();
-  }
-
-  @override
-  void begin(String tag) {
-    if (tagFrequencyMap != null) {
-      tagFrequencyMap[tag] ??= 0;
-      tagFrequencyMap[tag]++;
-    }
-    if (useDataKinds) {
-      _tags ??= <String>[];
-      _tags.add(tag);
-      _begin(tag);
-    }
-  }
-
-  @override
-  void end(Object tag) {
-    if (useDataKinds) {
-      _end(tag);
-
-      String existingTag = _tags.removeLast();
-      assert(existingTag == tag,
-          "Unexpected tag end. Expected $existingTag, found $tag.");
-    }
-  }
-
-  @override
-  void inMemberContext(ir.Member context, void f()) {
-    ir.Member oldMemberContext = _currentMemberContext;
-    _MemberData oldMemberData = _currentMemberData;
-    _currentMemberContext = context;
-    _currentMemberData = null;
-    f();
-    _currentMemberData = oldMemberData;
-    _currentMemberContext = oldMemberContext;
-  }
-
-  _MemberData get currentMemberData {
-    assert(_currentMemberContext != null,
-        "DataSink has no current member context.");
-    return _currentMemberData ??= _memberData[_currentMemberContext] ??=
-        _MemberData(_currentMemberContext);
-  }
-
-  @override
-  void writeCached<E>(E value, void f(E value)) {
-    IndexedSink sink = _generalCaches[E] ??= _createSink<E>();
-    sink.write(value, (v) => f(v));
-  }
-
-  @override
-  void writeSourceSpan(SourceSpan value) {
-    _writeDataKind(DataKind.sourceSpan);
-    _writeUri(value.uri);
-    _writeIntInternal(value.begin);
-    _writeIntInternal(value.end);
-  }
-
-  @override
-  void writeDartType(DartType value, {bool allowNull = false}) {
-    _writeDataKind(DataKind.dartType);
-    _writeDartType(value, [], allowNull: allowNull);
-  }
-
-  void _writeDartType(
-      DartType value, List<FunctionTypeVariable> functionTypeVariables,
-      {bool allowNull = false}) {
-    if (value == null) {
-      if (!allowNull) {
-        throw UnsupportedError("Missing DartType is not allowed.");
-      }
-      writeEnum(DartTypeKind.none);
-    } else {
-      value.writeToDataSink(this, functionTypeVariables);
-    }
-  }
-
-  @override
-  void writeDartTypeNode(ir.DartType value, {bool allowNull = false}) {
-    _writeDataKind(DataKind.dartTypeNode);
-    _writeDartTypeNode(value, [], allowNull: allowNull);
-  }
-
-  void _writeDartTypeNode(
-      ir.DartType value, List<ir.TypeParameter> functionTypeVariables,
-      {bool allowNull = false}) {
-    if (value == null) {
-      if (!allowNull) {
-        throw UnsupportedError("Missing ir.DartType node is not allowed.");
-      }
-      writeEnum(DartTypeNodeKind.none);
-    } else {
-      value.accept1(_dartTypeNodeWriter, functionTypeVariables);
-    }
-  }
-
-  @override
-  void writeMemberNode(ir.Member value) {
-    _writeDataKind(DataKind.memberNode);
-    _writeMemberNode(value);
-  }
-
-  void _writeMemberNode(ir.Member value) {
-    _memberNodeIndex.write(value, _writeMemberNodeInternal);
-  }
-
-  void _writeMemberNodeInternal(ir.Member value) {
-    ir.Class cls = value.enclosingClass;
-    if (cls != null) {
-      _writeEnumInternal(MemberContextKind.cls);
-      _writeClassNode(cls);
-      _writeString(_computeMemberName(value));
-    } else {
-      _writeEnumInternal(MemberContextKind.library);
-      _writeLibraryNode(value.enclosingLibrary);
-      _writeString(_computeMemberName(value));
-    }
-  }
-
-  @override
-  void writeClassNode(ir.Class value) {
-    _writeDataKind(DataKind.classNode);
-    _writeClassNode(value);
-  }
-
-  void _writeClassNode(ir.Class value) {
-    _writeLibraryNode(value.enclosingLibrary);
-    _writeString(value.name);
-  }
-
-  @override
-  void writeTypedefNode(ir.Typedef value) {
-    _writeDataKind(DataKind.typedefNode);
-    _writeTypedefNode(value);
-  }
-
-  void _writeTypedefNode(ir.Typedef value) {
-    _writeLibraryNode(value.enclosingLibrary);
-    _writeString(value.name);
-  }
-
-  @override
-  void writeLibraryNode(ir.Library value) {
-    _writeDataKind(DataKind.libraryNode);
-    _writeLibraryNode(value);
-  }
-
-  void _writeLibraryNode(ir.Library value) {
-    _writeUri(value.importUri);
-  }
-
-  @override
-  void writeEnum(dynamic value) {
-    _writeDataKind(DataKind.enumValue);
-    _writeEnumInternal(value);
-  }
-
-  @override
-  void writeBool(bool value) {
-    assert(value != null);
-    _writeDataKind(DataKind.bool);
-    _writeBool(value);
-  }
-
-  void _writeBool(bool value) {
-    _writeIntInternal(value ? 1 : 0);
-  }
-
-  @override
-  void writeUri(Uri value) {
-    assert(value != null);
-    _writeDataKind(DataKind.uri);
-    _writeUri(value);
-  }
-
-  @override
-  void writeString(String value) {
-    assert(value != null);
-    _writeDataKind(DataKind.string);
-    _writeString(value);
-  }
-
-  @override
-  void writeInt(int value) {
-    assert(value != null);
-    assert(value >= 0 && value >> 30 == 0);
-    _writeDataKind(DataKind.uint30);
-    _writeIntInternal(value);
-  }
-
-  @override
-  void writeTreeNode(ir.TreeNode value) {
-    _writeDataKind(DataKind.treeNode);
-    _writeTreeNode(value, null);
-  }
-
-  @override
-  void writeTreeNodeInContext(ir.TreeNode value) {
-    writeTreeNodeInContextInternal(value, currentMemberData);
-  }
-
-  void writeTreeNodeInContextInternal(
-      ir.TreeNode value, _MemberData memberData) {
-    _writeDataKind(DataKind.treeNode);
-    _writeTreeNode(value, memberData);
-  }
-
-  @override
-  void writeTreeNodeOrNullInContext(ir.TreeNode value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeTreeNodeInContextInternal(value, currentMemberData);
-    }
-  }
-
-  @override
-  void writeTreeNodesInContext(Iterable<ir.TreeNode> values,
-      {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ir.TreeNode value in values) {
-        writeTreeNodeInContextInternal(value, currentMemberData);
-      }
-    }
-  }
-
-  @override
-  void writeTreeNodeMapInContext<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ir.TreeNode key, V value) {
-        writeTreeNodeInContextInternal(key, currentMemberData);
-        f(value);
-      });
-    }
-  }
-
-  _MemberData _getMemberData(ir.TreeNode node) {
-    ir.TreeNode member = node;
-    while (member is! ir.Member) {
-      if (member == null) {
-        throw UnsupportedError("No enclosing member of TreeNode "
-            "$node (${node.runtimeType})");
-      }
-      member = member.parent;
-    }
-    _writeMemberNode(member);
-    return _memberData[member] ??= _MemberData(member);
-  }
-
-  void _writeTreeNode(ir.TreeNode value, _MemberData memberData) {
-    if (value is ir.Class) {
-      _writeEnumInternal(_TreeNodeKind.cls);
-      _writeClassNode(value);
-    } else if (value is ir.Member) {
-      _writeEnumInternal(_TreeNodeKind.member);
-      _writeMemberNode(value);
-    } else if (value is ir.VariableDeclaration &&
-        value.parent is ir.FunctionDeclaration) {
-      _writeEnumInternal(_TreeNodeKind.functionDeclarationVariable);
-      _writeTreeNode(value.parent, memberData);
-    } else if (value is ir.FunctionNode) {
-      _writeEnumInternal(_TreeNodeKind.functionNode);
-      _writeFunctionNode(value, memberData);
-    } else if (value is ir.TypeParameter) {
-      _writeEnumInternal(_TreeNodeKind.typeParameter);
-      _writeTypeParameter(value, memberData);
-    } else if (value is ConstantReference) {
-      _writeEnumInternal(_TreeNodeKind.constant);
-      memberData ??= _getMemberData(value.expression);
-      _writeTreeNode(value.expression, memberData);
-      int index =
-          memberData.getIndexByConstant(value.expression, value.constant);
-      _writeIntInternal(index);
-    } else {
-      _writeEnumInternal(_TreeNodeKind.node);
-      memberData ??= _getMemberData(value);
-      int index = memberData.getIndexByTreeNode(value);
-      assert(
-          index != null,
-          "No TreeNode index found for ${value.runtimeType} "
-          "found in ${memberData}.");
-      _writeIntInternal(index);
-    }
-  }
-
-  void _writeFunctionNode(ir.FunctionNode value, _MemberData memberData) {
-    ir.TreeNode parent = value.parent;
-    if (parent is ir.Procedure) {
-      _writeEnumInternal(_FunctionNodeKind.procedure);
-      _writeMemberNode(parent);
-    } else if (parent is ir.Constructor) {
-      _writeEnumInternal(_FunctionNodeKind.constructor);
-      _writeMemberNode(parent);
-    } else if (parent is ir.FunctionExpression) {
-      _writeEnumInternal(_FunctionNodeKind.functionExpression);
-      _writeTreeNode(parent, memberData);
-    } else if (parent is ir.FunctionDeclaration) {
-      _writeEnumInternal(_FunctionNodeKind.functionDeclaration);
-      _writeTreeNode(parent, memberData);
-    } else {
-      throw UnsupportedError(
-          "Unsupported FunctionNode parent ${parent.runtimeType}");
-    }
-  }
-
-  @override
-  void writeTypeParameterNode(ir.TypeParameter value) {
-    _writeDataKind(DataKind.typeParameterNode);
-    _writeTypeParameter(value, null);
-  }
-
-  void _writeTypeParameter(ir.TypeParameter value, _MemberData memberData) {
-    ir.TreeNode parent = value.parent;
-    if (parent is ir.Class) {
-      _writeEnumInternal(_TypeParameterKind.cls);
-      _writeClassNode(parent);
-      _writeIntInternal(parent.typeParameters.indexOf(value));
-    } else if (parent is ir.FunctionNode) {
-      _writeEnumInternal(_TypeParameterKind.functionNode);
-      _writeFunctionNode(parent, memberData);
-      _writeIntInternal(parent.typeParameters.indexOf(value));
-    } else {
-      throw UnsupportedError(
-          "Unsupported TypeParameter parent ${parent.runtimeType}");
-    }
-  }
-
-  void _writeDataKind(DataKind kind) {
-    if (useDataKinds) _writeEnumInternal(kind);
-  }
-
-  @override
-  void writeLibrary(IndexedLibrary value) {
-    _entityWriter.writeLibraryToDataSink(this, value);
-  }
-
-  @override
-  void writeClass(IndexedClass value) {
-    _entityWriter.writeClassToDataSink(this, value);
-  }
-
-  @override
-  void writeMember(IndexedMember value) {
-    _entityWriter.writeMemberToDataSink(this, value);
-  }
-
-  @override
-  void writeTypeVariable(IndexedTypeVariable value) {
-    _entityWriter.writeTypeVariableToDataSink(this, value);
-  }
-
-  @override
-  void writeLocal(Local local) {
-    if (local is JLocal) {
-      writeEnum(LocalKind.jLocal);
-      writeMember(local.memberContext);
-      writeInt(local.localIndex);
-    } else if (local is ThisLocal) {
-      writeEnum(LocalKind.thisLocal);
-      writeClass(local.enclosingClass);
-    } else if (local is BoxLocal) {
-      writeEnum(LocalKind.boxLocal);
-      writeClass(local.container);
-    } else if (local is AnonymousClosureLocal) {
-      writeEnum(LocalKind.anonymousClosureLocal);
-      writeClass(local.closureClass);
-    } else if (local is TypeVariableLocal) {
-      writeEnum(LocalKind.typeVariableLocal);
-      writeTypeVariable(local.typeVariable);
-    } else {
-      throw UnsupportedError("Unsupported local ${local.runtimeType}");
-    }
-  }
-
-  @override
-  void writeConstant(ConstantValue value) {
-    _writeDataKind(DataKind.constant);
-    _writeConstant(value);
-  }
-
-  @override
-  void writeDoubleValue(double value) {
-    _writeDataKind(DataKind.double);
-    _writeDoubleValue(value);
-  }
-
-  void _writeDoubleValue(double value) {
-    ByteData data = ByteData(8);
-    data.setFloat64(0, value);
-    writeInt(data.getUint16(0));
-    writeInt(data.getUint16(2));
-    writeInt(data.getUint16(4));
-    writeInt(data.getUint16(6));
-  }
-
-  @override
-  void writeIntegerValue(int value) {
-    _writeDataKind(DataKind.int);
-    _writeBigInt(BigInt.from(value));
-  }
-
-  void _writeBigInt(BigInt value) {
-    writeString(value.toString());
-  }
-
-  void _writeConstant(ConstantValue value) {
-    _constantIndex.write(value, _writeConstantInternal);
-  }
-
-  void _writeConstantInternal(ConstantValue value) {
-    _writeEnumInternal(value.kind);
-    switch (value.kind) {
-      case ConstantValueKind.BOOL:
-        BoolConstantValue constant = value;
-        writeBool(constant.boolValue);
-        break;
-      case ConstantValueKind.INT:
-        IntConstantValue constant = value;
-        _writeBigInt(constant.intValue);
-        break;
-      case ConstantValueKind.DOUBLE:
-        DoubleConstantValue constant = value;
-        _writeDoubleValue(constant.doubleValue);
-        break;
-      case ConstantValueKind.STRING:
-        StringConstantValue constant = value;
-        writeString(constant.stringValue);
-        break;
-      case ConstantValueKind.NULL:
-        break;
-      case ConstantValueKind.FUNCTION:
-        FunctionConstantValue constant = value;
-        IndexedFunction function = constant.element;
-        writeMember(function);
-        writeDartType(constant.type);
-        break;
-      case ConstantValueKind.LIST:
-        ListConstantValue constant = value;
-        writeDartType(constant.type);
-        writeConstants(constant.entries);
-        break;
-      case ConstantValueKind.SET:
-        constant_system.JavaScriptSetConstant constant = value;
-        writeDartType(constant.type);
-        writeConstant(constant.entries);
-        break;
-      case ConstantValueKind.MAP:
-        constant_system.JavaScriptMapConstant constant = value;
-        writeDartType(constant.type);
-        writeConstant(constant.keyList);
-        writeConstants(constant.values);
-        writeBool(constant.onlyStringKeys);
-        break;
-      case ConstantValueKind.CONSTRUCTED:
-        ConstructedConstantValue constant = value;
-        writeDartType(constant.type);
-        writeMemberMap(constant.fields,
-            (MemberEntity member, ConstantValue value) => writeConstant(value));
-        break;
-      case ConstantValueKind.TYPE:
-        TypeConstantValue constant = value;
-        writeDartType(constant.representedType);
-        writeDartType(constant.type);
-        break;
-      case ConstantValueKind.INSTANTIATION:
-        InstantiationConstantValue constant = value;
-        writeDartTypes(constant.typeArguments);
-        writeConstant(constant.function);
-        break;
-      case ConstantValueKind.NON_CONSTANT:
-        break;
-      case ConstantValueKind.INTERCEPTOR:
-        InterceptorConstantValue constant = value;
-        writeClass(constant.cls);
-        break;
-      case ConstantValueKind.DEFERRED_GLOBAL:
-        DeferredGlobalConstantValue constant = value;
-        writeConstant(constant.referenced);
-        writeOutputUnitReference(constant.unit);
-        break;
-      case ConstantValueKind.DUMMY_INTERCEPTOR:
-        break;
-      case ConstantValueKind.LATE_SENTINEL:
-        break;
-      case ConstantValueKind.UNREACHABLE:
-        break;
-      case ConstantValueKind.JS_NAME:
-        JsNameConstantValue constant = value;
-        writeJsNode(constant.name);
-        break;
-    }
-  }
-
-  void _writeString(String value) {
-    _stringIndex.write(value, _writeStringInternal);
-  }
-
-  void _writeUri(Uri value) {
-    _uriIndex.write(value, _writeUriInternal);
-  }
-
-  @override
-  void writeImport(ImportEntity value) {
-    _writeDataKind(DataKind.import);
-    _writeImport(value);
-  }
-
-  void _writeImport(ImportEntity value) {
-    _importIndex.write(value, _writeImportInternal);
-  }
-
-  void _writeImportInternal(ImportEntity value) {
-    // TODO(johnniwinther): Do we need to serialize non-deferred imports?
-    writeStringOrNull(value.name);
-    _writeUri(value.uri);
-    _writeUri(value.enclosingLibraryUri);
-    _writeBool(value.isDeferred);
-  }
-
-  @override
-  void registerEntityWriter(EntityWriter writer) {
-    assert(writer != null);
-    _entityWriter = writer;
-  }
-
-  @override
-  void registerCodegenWriter(CodegenWriter writer) {
-    assert(writer != null);
-    assert(_codegenWriter == null);
-    _codegenWriter = writer;
-  }
-
-  @override
-  void writeOutputUnitReference(OutputUnit value) {
-    assert(
-        _codegenWriter != null,
-        "Can not serialize an OutputUnit reference "
-        "without a registered codegen writer.");
-    _codegenWriter.writeOutputUnitReference(this, value);
-  }
-
-  @override
-  void writeAbstractValue(AbstractValue value) {
-    assert(_codegenWriter != null,
-        "Can not serialize an AbstractValue without a registered codegen writer.");
-    _codegenWriter.writeAbstractValue(this, value);
-  }
-
-  @override
-  void writeJsNode(js.Node value) {
-    assert(_codegenWriter != null,
-        "Can not serialize a JS node without a registered codegen writer.");
-    _codegenWriter.writeJsNode(this, value);
-  }
-
-  @override
-  void writeTypeRecipe(TypeRecipe value) {
-    assert(_codegenWriter != null,
-        "Can not serialize a TypeRecipe without a registered codegen writer.");
-    _codegenWriter.writeTypeRecipe(this, value);
-  }
-
-  /// Actual serialization of a section begin tag, implemented by subclasses.
-  void _begin(String tag);
-
-  /// Actual serialization of a section end tag, implemented by subclasses.
-  void _end(String tag);
-
-  /// Actual serialization of a URI value, implemented by subclasses.
-  void _writeUriInternal(Uri value);
-
-  /// Actual serialization of a String value, implemented by subclasses.
-  void _writeStringInternal(String value);
-
-  /// Actual serialization of a non-negative integer value, implemented by
-  /// subclasses.
-  void _writeIntInternal(int value);
-
-  /// Actual serialization of an enum value, implemented by subclasses.
-  void _writeEnumInternal(dynamic value);
-}
diff --git a/pkg/compiler/lib/src/serialization/abstract_source.dart b/pkg/compiler/lib/src/serialization/abstract_source.dart
deleted file mode 100644
index 5b45634..0000000
--- a/pkg/compiler/lib/src/serialization/abstract_source.dart
+++ /dev/null
@@ -1,765 +0,0 @@
-// Copyright (c) 2018, 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.
-
-part of 'serialization.dart';
-
-/// Base implementation of [DataSource] using [DataSourceMixin] to implement
-/// convenience methods.
-abstract class AbstractDataSource extends DataSourceMixin
-    implements DataSource {
-  static final List<ir.DartType> emptyListOfDartTypes =
-      List<ir.DartType>.filled(0, null, growable: false);
-
-  final bool useDataKinds;
-  DataSourceIndices importedIndices;
-  EntityReader _entityReader = const EntityReader();
-  ComponentLookup _componentLookup;
-  EntityLookup _entityLookup;
-  LocalLookup _localLookup;
-  CodegenReader _codegenReader;
-
-  IndexedSource<String> _stringIndex;
-  IndexedSource<Uri> _uriIndex;
-  IndexedSource<_MemberData> _memberNodeIndex;
-  IndexedSource<ImportEntity> _importIndex;
-  IndexedSource<ConstantValue> _constantIndex;
-
-  final Map<Type, IndexedSource> _generalCaches = {};
-
-  ir.Member _currentMemberContext;
-  _MemberData _currentMemberData;
-
-  IndexedSource<T> _createSource<T>() {
-    if (importedIndices == null || !importedIndices.caches.containsKey(T)) {
-      return IndexedSource<T>(this);
-    } else {
-      List<T> cacheCopy = importedIndices.caches[T].cacheAsList.toList();
-      return IndexedSource<T>(this, cache: cacheCopy);
-    }
-  }
-
-  AbstractDataSource({this.useDataKinds = false, this.importedIndices}) {
-    _stringIndex = _createSource<String>();
-    _uriIndex = _createSource<Uri>();
-    _memberNodeIndex = _createSource<_MemberData>();
-    _importIndex = _createSource<ImportEntity>();
-    _constantIndex = _createSource<ConstantValue>();
-  }
-
-  @override
-  DataSourceIndices exportIndices() {
-    var indices = DataSourceIndices();
-    indices.caches[String] = DataSourceTypeIndices(_stringIndex.cache);
-    indices.caches[Uri] = DataSourceTypeIndices(_uriIndex.cache);
-    indices.caches[ImportEntity] = DataSourceTypeIndices(_importIndex.cache);
-    // _memberNodeIndex needs two entries depending on if the indices will be
-    // consumed by a [DataSource] or [DataSink].
-    indices.caches[_MemberData] = DataSourceTypeIndices(_memberNodeIndex.cache);
-    indices.caches[ir.Member] = DataSourceTypeIndices<ir.Member, _MemberData>(
-        _memberNodeIndex.cache, (_MemberData data) => data?.node);
-    indices.caches[ConstantValue] = DataSourceTypeIndices(_constantIndex.cache);
-    _generalCaches.forEach((type, indexedSource) {
-      indices.caches[type] = DataSourceTypeIndices(indexedSource.cache);
-    });
-    return indices;
-  }
-
-  @override
-  void begin(String tag) {
-    if (useDataKinds) _begin(tag);
-  }
-
-  @override
-  void end(String tag) {
-    if (useDataKinds) _end(tag);
-  }
-
-  @override
-  void registerComponentLookup(ComponentLookup componentLookup) {
-    assert(_componentLookup == null);
-    _componentLookup = componentLookup;
-  }
-
-  ComponentLookup get componentLookup {
-    assert(_componentLookup != null);
-    return _componentLookup;
-  }
-
-  @override
-  void registerEntityLookup(EntityLookup entityLookup) {
-    assert(_entityLookup == null);
-    _entityLookup = entityLookup;
-  }
-
-  EntityLookup get entityLookup {
-    assert(_entityLookup != null);
-    return _entityLookup;
-  }
-
-  @override
-  void registerLocalLookup(LocalLookup localLookup) {
-    assert(_localLookup == null);
-    _localLookup = localLookup;
-  }
-
-  @override
-  void registerEntityReader(EntityReader reader) {
-    assert(reader != null);
-    _entityReader = reader;
-  }
-
-  LocalLookup get localLookup {
-    assert(_localLookup != null);
-    return _localLookup;
-  }
-
-  @override
-  void registerCodegenReader(CodegenReader reader) {
-    assert(reader != null);
-    assert(_codegenReader == null);
-    _codegenReader = reader;
-  }
-
-  @override
-  void deregisterCodegenReader(CodegenReader reader) {
-    assert(_codegenReader == reader);
-    _codegenReader = null;
-  }
-
-  @override
-  T inMemberContext<T>(ir.Member context, T f()) {
-    ir.Member oldMemberContext = _currentMemberContext;
-    _MemberData oldMemberData = _currentMemberData;
-    _currentMemberContext = context;
-    _currentMemberData = null;
-    T result = f();
-    _currentMemberData = oldMemberData;
-    _currentMemberContext = oldMemberContext;
-    return result;
-  }
-
-  _MemberData get currentMemberData {
-    assert(_currentMemberContext != null,
-        "DataSink has no current member context.");
-    return _currentMemberData ??= _getMemberData(_currentMemberContext);
-  }
-
-  @override
-  E readCached<E>(E f()) {
-    IndexedSource source = _generalCaches[E] ??= _createSource<E>();
-    return source.read(f);
-  }
-
-  @override
-  IndexedLibrary readLibrary() {
-    return _entityReader.readLibraryFromDataSource(this, entityLookup);
-  }
-
-  @override
-  IndexedClass readClass() {
-    return _entityReader.readClassFromDataSource(this, entityLookup);
-  }
-
-  @override
-  IndexedMember readMember() {
-    return _entityReader.readMemberFromDataSource(this, entityLookup);
-  }
-
-  @override
-  IndexedTypeVariable readTypeVariable() {
-    return _entityReader.readTypeVariableFromDataSource(this, entityLookup);
-  }
-
-  List<ir.DartType> _readDartTypeNodes(
-      List<ir.TypeParameter> functionTypeVariables) {
-    int count = readInt();
-    if (count == 0) return emptyListOfDartTypes;
-    List<ir.DartType> types = List<ir.DartType>.filled(count, null);
-    for (int index = 0; index < count; index++) {
-      types[index] = _readDartTypeNode(functionTypeVariables);
-    }
-    return types;
-  }
-
-  @override
-  SourceSpan readSourceSpan() {
-    _checkDataKind(DataKind.sourceSpan);
-    Uri uri = _readUri();
-    int begin = _readIntInternal();
-    int end = _readIntInternal();
-    return SourceSpan(uri, begin, end);
-  }
-
-  @override
-  DartType readDartType({bool allowNull = false}) {
-    _checkDataKind(DataKind.dartType);
-    DartType type = DartType.readFromDataSource(this, []);
-    assert(type != null || allowNull);
-    return type;
-  }
-
-  @override
-  ir.DartType readDartTypeNode({bool allowNull = false}) {
-    _checkDataKind(DataKind.dartTypeNode);
-    ir.DartType type = _readDartTypeNode([]);
-    assert(type != null || allowNull);
-    return type;
-  }
-
-  ir.DartType _readDartTypeNode(List<ir.TypeParameter> functionTypeVariables) {
-    DartTypeNodeKind kind = readEnum(DartTypeNodeKind.values);
-    switch (kind) {
-      case DartTypeNodeKind.none:
-        return null;
-      case DartTypeNodeKind.voidType:
-        return const ir.VoidType();
-      case DartTypeNodeKind.invalidType:
-        return const ir.InvalidType();
-      case DartTypeNodeKind.doesNotComplete:
-        return const DoesNotCompleteType();
-      case DartTypeNodeKind.neverType:
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        return ir.NeverType.fromNullability(nullability);
-      case DartTypeNodeKind.typeParameterType:
-        ir.TypeParameter typeParameter = readTypeParameterNode();
-        ir.Nullability typeParameterTypeNullability =
-            readEnum(ir.Nullability.values);
-        ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
-        return ir.TypeParameterType(
-            typeParameter, typeParameterTypeNullability, promotedBound);
-      case DartTypeNodeKind.functionTypeVariable:
-        int index = readInt();
-        assert(0 <= index && index < functionTypeVariables.length);
-        ir.Nullability typeParameterTypeNullability =
-            readEnum(ir.Nullability.values);
-        ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
-        return ir.TypeParameterType(functionTypeVariables[index],
-            typeParameterTypeNullability, promotedBound);
-      case DartTypeNodeKind.functionType:
-        begin(functionTypeNodeTag);
-        int typeParameterCount = readInt();
-        List<ir.TypeParameter> typeParameters = List<ir.TypeParameter>.generate(
-            typeParameterCount, (int index) => ir.TypeParameter());
-        functionTypeVariables =
-            List<ir.TypeParameter>.from(functionTypeVariables)
-              ..addAll(typeParameters);
-        for (int index = 0; index < typeParameterCount; index++) {
-          typeParameters[index].name = readString();
-          typeParameters[index].bound =
-              _readDartTypeNode(functionTypeVariables);
-          typeParameters[index].defaultType =
-              _readDartTypeNode(functionTypeVariables);
-        }
-        ir.DartType returnType = _readDartTypeNode(functionTypeVariables);
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        int requiredParameterCount = readInt();
-        List<ir.DartType> positionalParameters =
-            _readDartTypeNodes(functionTypeVariables);
-        int namedParameterCount = readInt();
-        List<ir.NamedType> namedParameters =
-            List<ir.NamedType>.filled(namedParameterCount, null);
-        for (int index = 0; index < namedParameterCount; index++) {
-          String name = readString();
-          bool isRequired = readBool();
-          ir.DartType type = _readDartTypeNode(functionTypeVariables);
-          namedParameters[index] =
-              ir.NamedType(name, type, isRequired: isRequired);
-        }
-        ir.TypedefType typedefType = _readDartTypeNode(functionTypeVariables);
-        end(functionTypeNodeTag);
-        return ir.FunctionType(positionalParameters, returnType, nullability,
-            namedParameters: namedParameters,
-            typeParameters: typeParameters,
-            requiredParameterCount: requiredParameterCount,
-            typedefType: typedefType);
-
-      case DartTypeNodeKind.interfaceType:
-        ir.Class cls = readClassNode();
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        List<ir.DartType> typeArguments =
-            _readDartTypeNodes(functionTypeVariables);
-        return ir.InterfaceType(cls, nullability, typeArguments);
-      case DartTypeNodeKind.thisInterfaceType:
-        ir.Class cls = readClassNode();
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        List<ir.DartType> typeArguments =
-            _readDartTypeNodes(functionTypeVariables);
-        return ThisInterfaceType(cls, nullability, typeArguments);
-      case DartTypeNodeKind.exactInterfaceType:
-        ir.Class cls = readClassNode();
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        List<ir.DartType> typeArguments =
-            _readDartTypeNodes(functionTypeVariables);
-        return ExactInterfaceType(cls, nullability, typeArguments);
-      case DartTypeNodeKind.typedef:
-        ir.Typedef typedef = readTypedefNode();
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        List<ir.DartType> typeArguments =
-            _readDartTypeNodes(functionTypeVariables);
-        return ir.TypedefType(typedef, nullability, typeArguments);
-      case DartTypeNodeKind.dynamicType:
-        return const ir.DynamicType();
-      case DartTypeNodeKind.futureOrType:
-        ir.Nullability nullability = readEnum(ir.Nullability.values);
-        ir.DartType typeArgument = _readDartTypeNode(functionTypeVariables);
-        return ir.FutureOrType(typeArgument, nullability);
-      case DartTypeNodeKind.nullType:
-        return const ir.NullType();
-    }
-    throw UnsupportedError("Unexpected DartTypeKind $kind");
-  }
-
-  _MemberData _readMemberData() {
-    return _memberNodeIndex.read(_readMemberDataInternal);
-  }
-
-  _MemberData _readMemberDataInternal() {
-    MemberContextKind kind = _readEnumInternal(MemberContextKind.values);
-    switch (kind) {
-      case MemberContextKind.cls:
-        _ClassData cls = _readClassData();
-        String name = _readString();
-        return cls.lookupMemberDataByName(name);
-      case MemberContextKind.library:
-        _LibraryData library = _readLibraryData();
-        String name = _readString();
-        return library.lookupMemberDataByName(name);
-    }
-    throw UnsupportedError("Unsupported _MemberKind $kind");
-  }
-
-  @override
-  ir.Member readMemberNode() {
-    _checkDataKind(DataKind.memberNode);
-    return _readMemberData().node;
-  }
-
-  _ClassData _readClassData() {
-    _LibraryData library = _readLibraryData();
-    String name = _readString();
-    return library.lookupClassByName(name);
-  }
-
-  @override
-  ir.Class readClassNode() {
-    _checkDataKind(DataKind.classNode);
-    return _readClassData().node;
-  }
-
-  ir.Typedef _readTypedefNode() {
-    _LibraryData library = _readLibraryData();
-    String name = _readString();
-    return library.lookupTypedef(name);
-  }
-
-  @override
-  ir.Typedef readTypedefNode() {
-    _checkDataKind(DataKind.typedefNode);
-    return _readTypedefNode();
-  }
-
-  _LibraryData _readLibraryData() {
-    Uri canonicalUri = _readUri();
-    return componentLookup.getLibraryDataByUri(canonicalUri);
-  }
-
-  @override
-  ir.Library readLibraryNode() {
-    _checkDataKind(DataKind.libraryNode);
-    return _readLibraryData().node;
-  }
-
-  @override
-  E readEnum<E>(List<E> values) {
-    _checkDataKind(DataKind.enumValue);
-    return _readEnumInternal(values);
-  }
-
-  @override
-  Uri readUri() {
-    _checkDataKind(DataKind.uri);
-    return _readUri();
-  }
-
-  Uri _readUri() {
-    return _uriIndex.read(_readUriInternal);
-  }
-
-  @override
-  bool readBool() {
-    _checkDataKind(DataKind.bool);
-    return _readBool();
-  }
-
-  bool _readBool() {
-    int value = _readIntInternal();
-    assert(value == 0 || value == 1);
-    return value == 1;
-  }
-
-  @override
-  String readString() {
-    _checkDataKind(DataKind.string);
-    return _readString();
-  }
-
-  String _readString() {
-    return _stringIndex.read(_readStringInternal);
-  }
-
-  @override
-  int readInt() {
-    _checkDataKind(DataKind.uint30);
-    return _readIntInternal();
-  }
-
-  @override
-  ir.TreeNode readTreeNode() {
-    _checkDataKind(DataKind.treeNode);
-    return _readTreeNode(null);
-  }
-
-  _MemberData _getMemberData(ir.Member node) {
-    _LibraryData libraryData =
-        componentLookup.getLibraryDataByUri(node.enclosingLibrary.importUri);
-    if (node.enclosingClass != null) {
-      _ClassData classData = libraryData.lookupClassByNode(node.enclosingClass);
-      return classData.lookupMemberDataByNode(node);
-    } else {
-      return libraryData.lookupMemberDataByNode(node);
-    }
-  }
-
-  @override
-  ir.TreeNode readTreeNodeInContext() {
-    return readTreeNodeInContextInternal(currentMemberData);
-  }
-
-  ir.TreeNode readTreeNodeInContextInternal(_MemberData memberData) {
-    _checkDataKind(DataKind.treeNode);
-    return _readTreeNode(memberData);
-  }
-
-  @override
-  ir.TreeNode readTreeNodeOrNullInContext() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readTreeNodeInContextInternal(currentMemberData);
-    }
-    return null;
-  }
-
-  @override
-  List<E> readTreeNodesInContext<E extends ir.TreeNode>(
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      ir.TreeNode node = readTreeNodeInContextInternal(currentMemberData);
-      list[i] = node;
-    }
-    return list;
-  }
-
-  @override
-  Map<K, V> readTreeNodeMapInContext<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ir.TreeNode node = readTreeNodeInContextInternal(currentMemberData);
-      V value = f();
-      map[node] = value;
-    }
-    return map;
-  }
-
-  @override
-  ConstantValue readConstant() {
-    _checkDataKind(DataKind.constant);
-    return _readConstant();
-  }
-
-  @override
-  double readDoubleValue() {
-    _checkDataKind(DataKind.double);
-    return _readDoubleValue();
-  }
-
-  double _readDoubleValue() {
-    ByteData data = ByteData(8);
-    data.setUint16(0, readInt());
-    data.setUint16(2, readInt());
-    data.setUint16(4, readInt());
-    data.setUint16(6, readInt());
-    return data.getFloat64(0);
-  }
-
-  @override
-  int readIntegerValue() {
-    _checkDataKind(DataKind.int);
-    return _readBigInt().toInt();
-  }
-
-  BigInt _readBigInt() {
-    return BigInt.parse(readString());
-  }
-
-  ConstantValue _readConstant() {
-    return _constantIndex.read(_readConstantInternal);
-  }
-
-  ConstantValue _readConstantInternal() {
-    ConstantValueKind kind = _readEnumInternal(ConstantValueKind.values);
-    switch (kind) {
-      case ConstantValueKind.BOOL:
-        bool value = readBool();
-        return BoolConstantValue(value);
-      case ConstantValueKind.INT:
-        BigInt value = _readBigInt();
-        return IntConstantValue(value);
-      case ConstantValueKind.DOUBLE:
-        double value = _readDoubleValue();
-        return DoubleConstantValue(value);
-      case ConstantValueKind.STRING:
-        String value = readString();
-        return StringConstantValue(value);
-      case ConstantValueKind.NULL:
-        return const NullConstantValue();
-      case ConstantValueKind.FUNCTION:
-        IndexedFunction function = readMember();
-        DartType type = readDartType();
-        return FunctionConstantValue(function, type);
-      case ConstantValueKind.LIST:
-        DartType type = readDartType();
-        List<ConstantValue> entries = readConstants();
-        return ListConstantValue(type, entries);
-      case ConstantValueKind.SET:
-        DartType type = readDartType();
-        MapConstantValue entries = readConstant();
-        return constant_system.JavaScriptSetConstant(type, entries);
-      case ConstantValueKind.MAP:
-        DartType type = readDartType();
-        ListConstantValue keyList = readConstant();
-        List<ConstantValue> values = readConstants();
-        bool onlyStringKeys = readBool();
-        return constant_system.JavaScriptMapConstant(
-            type, keyList, values, onlyStringKeys);
-      case ConstantValueKind.CONSTRUCTED:
-        InterfaceType type = readDartType();
-        Map<FieldEntity, ConstantValue> fields =
-            readMemberMap<FieldEntity, ConstantValue>(
-                (MemberEntity member) => readConstant());
-        return ConstructedConstantValue(type, fields);
-      case ConstantValueKind.TYPE:
-        DartType representedType = readDartType();
-        DartType type = readDartType();
-        return TypeConstantValue(representedType, type);
-      case ConstantValueKind.INSTANTIATION:
-        List<DartType> typeArguments = readDartTypes();
-        ConstantValue function = readConstant();
-        return InstantiationConstantValue(typeArguments, function);
-      case ConstantValueKind.NON_CONSTANT:
-        return NonConstantValue();
-      case ConstantValueKind.INTERCEPTOR:
-        ClassEntity cls = readClass();
-        return InterceptorConstantValue(cls);
-      case ConstantValueKind.DEFERRED_GLOBAL:
-        ConstantValue constant = readConstant();
-        OutputUnit unit = readOutputUnitReference();
-        return DeferredGlobalConstantValue(constant, unit);
-      case ConstantValueKind.DUMMY_INTERCEPTOR:
-        return DummyInterceptorConstantValue();
-      case ConstantValueKind.LATE_SENTINEL:
-        return LateSentinelConstantValue();
-      case ConstantValueKind.UNREACHABLE:
-        return UnreachableConstantValue();
-      case ConstantValueKind.JS_NAME:
-        js.LiteralString name = readJsNode();
-        return JsNameConstantValue(name);
-    }
-    throw UnsupportedError("Unexpexted constant value kind ${kind}.");
-  }
-
-  ir.TreeNode _readTreeNode(_MemberData memberData) {
-    _TreeNodeKind kind = _readEnumInternal(_TreeNodeKind.values);
-    switch (kind) {
-      case _TreeNodeKind.cls:
-        return _readClassData().node;
-      case _TreeNodeKind.member:
-        return _readMemberData().node;
-      case _TreeNodeKind.functionDeclarationVariable:
-        ir.FunctionDeclaration functionDeclaration = _readTreeNode(memberData);
-        return functionDeclaration.variable;
-      case _TreeNodeKind.functionNode:
-        return _readFunctionNode(memberData);
-      case _TreeNodeKind.typeParameter:
-        return _readTypeParameter(memberData);
-      case _TreeNodeKind.constant:
-        memberData ??= _readMemberData();
-        ir.ConstantExpression expression = _readTreeNode(memberData);
-        ir.Constant constant =
-            memberData.getConstantByIndex(expression, _readIntInternal());
-        return ConstantReference(expression, constant);
-      case _TreeNodeKind.node:
-        memberData ??= _readMemberData();
-        int index = _readIntInternal();
-        ir.TreeNode treeNode = memberData.getTreeNodeByIndex(index);
-        assert(
-            treeNode != null,
-            "No TreeNode found for index $index in "
-            "${memberData.node}.$_errorContext");
-        return treeNode;
-    }
-    throw UnsupportedError("Unexpected _TreeNodeKind $kind");
-  }
-
-  ir.FunctionNode _readFunctionNode(_MemberData memberData) {
-    _FunctionNodeKind kind = _readEnumInternal(_FunctionNodeKind.values);
-    switch (kind) {
-      case _FunctionNodeKind.procedure:
-        ir.Procedure procedure = _readMemberData().node;
-        return procedure.function;
-      case _FunctionNodeKind.constructor:
-        ir.Constructor constructor = _readMemberData().node;
-        return constructor.function;
-      case _FunctionNodeKind.functionExpression:
-        ir.FunctionExpression functionExpression = _readTreeNode(memberData);
-        return functionExpression.function;
-      case _FunctionNodeKind.functionDeclaration:
-        ir.FunctionDeclaration functionDeclaration = _readTreeNode(memberData);
-        return functionDeclaration.function;
-    }
-    throw UnsupportedError("Unexpected _FunctionNodeKind $kind");
-  }
-
-  @override
-  ir.TypeParameter readTypeParameterNode() {
-    _checkDataKind(DataKind.typeParameterNode);
-    return _readTypeParameter(null);
-  }
-
-  ir.TypeParameter _readTypeParameter(_MemberData memberData) {
-    _TypeParameterKind kind = _readEnumInternal(_TypeParameterKind.values);
-    switch (kind) {
-      case _TypeParameterKind.cls:
-        ir.Class cls = _readClassData().node;
-        return cls.typeParameters[_readIntInternal()];
-      case _TypeParameterKind.functionNode:
-        ir.FunctionNode functionNode = _readFunctionNode(memberData);
-        return functionNode.typeParameters[_readIntInternal()];
-    }
-    throw UnsupportedError("Unexpected _TypeParameterKind kind $kind");
-  }
-
-  void _checkDataKind(DataKind expectedKind) {
-    if (!useDataKinds) return;
-    DataKind actualKind = _readEnumInternal(DataKind.values);
-    assert(
-        actualKind == expectedKind,
-        "Invalid data kind. "
-        "Expected $expectedKind, found $actualKind.$_errorContext");
-  }
-
-  @override
-  Local readLocal() {
-    LocalKind kind = readEnum(LocalKind.values);
-    switch (kind) {
-      case LocalKind.jLocal:
-        MemberEntity memberContext = readMember();
-        int localIndex = readInt();
-        return localLookup.getLocalByIndex(memberContext, localIndex);
-      case LocalKind.thisLocal:
-        ClassEntity cls = readClass();
-        return ThisLocal(cls);
-      case LocalKind.boxLocal:
-        ClassEntity cls = readClass();
-        return BoxLocal(cls);
-      case LocalKind.anonymousClosureLocal:
-        ClassEntity cls = readClass();
-        return AnonymousClosureLocal(cls);
-      case LocalKind.typeVariableLocal:
-        TypeVariableEntity typeVariable = readTypeVariable();
-        return TypeVariableLocal(typeVariable);
-    }
-    throw UnsupportedError("Unexpected local kind $kind");
-  }
-
-  @override
-  ImportEntity readImport() {
-    _checkDataKind(DataKind.import);
-    return _readImport();
-  }
-
-  ImportEntity _readImport() {
-    return _importIndex.read(_readImportInternal);
-  }
-
-  ImportEntity _readImportInternal() {
-    String name = readStringOrNull();
-    Uri uri = _readUri();
-    Uri enclosingLibraryUri = _readUri();
-    bool isDeferred = _readBool();
-    return ImportEntity(isDeferred, name, uri, enclosingLibraryUri);
-  }
-
-  @override
-  OutputUnit readOutputUnitReference() {
-    assert(
-        _codegenReader != null,
-        "Can not deserialize an OutputUnit reference "
-        "without a registered codegen reader.");
-    return _codegenReader.readOutputUnitReference(this);
-  }
-
-  @override
-  AbstractValue readAbstractValue() {
-    assert(
-        _codegenReader != null,
-        "Can not deserialize an AbstractValue "
-        "without a registered codegen reader.");
-    return _codegenReader.readAbstractValue(this);
-  }
-
-  @override
-  js.Node readJsNode() {
-    assert(_codegenReader != null,
-        "Can not deserialize a JS node without a registered codegen reader.");
-    return _codegenReader.readJsNode(this);
-  }
-
-  @override
-  TypeRecipe readTypeRecipe() {
-    assert(_codegenReader != null,
-        "Can not deserialize a TypeRecipe without a registered codegen reader.");
-    return _codegenReader.readTypeRecipe(this);
-  }
-
-  /// Actual deserialization of a section begin tag, implemented by subclasses.
-  void _begin(String tag);
-
-  /// Actual deserialization of a section end tag, implemented by subclasses.
-  void _end(String tag);
-
-  /// Actual deserialization of a string value, implemented by subclasses.
-  String _readStringInternal();
-
-  /// Actual deserialization of a non-negative integer value, implemented by
-  /// subclasses.
-  int _readIntInternal();
-
-  /// Actual deserialization of a URI value, implemented by subclasses.
-  Uri _readUriInternal();
-
-  /// Actual deserialization of an enum value in [values], implemented by
-  /// subclasses.
-  E _readEnumInternal<E>(List<E> values);
-
-  /// Returns a string representation of the current state of the data source
-  /// useful for debugging in consistencies between serialization and
-  /// deserialization.
-  String get _errorContext;
-}
diff --git a/pkg/compiler/lib/src/serialization/binary_sink.dart b/pkg/compiler/lib/src/serialization/binary_sink.dart
index 92a4d43..7817a31 100644
--- a/pkg/compiler/lib/src/serialization/binary_sink.dart
+++ b/pkg/compiler/lib/src/serialization/binary_sink.dart
@@ -6,46 +6,37 @@
 
 /// [DataSink] that writes data as a sequence of bytes.
 ///
-/// This data sink works together with [BinarySource].
-class BinarySink extends AbstractDataSink {
+/// This data sink works together with [BinarySourceWriter].
+class BinaryDataSink implements DataSink {
   final Sink<List<int>> sink;
   BufferedSink _bufferedSink;
   int _length = 0;
 
-  BinarySink(this.sink,
-      {bool useDataKinds = false,
-      Map<String, int> tagFrequencyMap,
-      DataSourceIndices importedIndices})
-      : _bufferedSink = BufferedSink(sink),
-        super(
-            useDataKinds: useDataKinds,
-            tagFrequencyMap: tagFrequencyMap,
-            importedIndices: importedIndices);
+  BinaryDataSink(this.sink) : _bufferedSink = BufferedSink(sink);
 
   @override
-  void _begin(String tag) {
-    // TODO(johnniwinther): Support tags in binary serialization?
-  }
+  int get length => _length;
+
   @override
-  void _end(String tag) {
+  void beginTag(String tag) {
     // TODO(johnniwinther): Support tags in binary serialization?
   }
 
   @override
-  void _writeUriInternal(Uri value) {
-    _writeString(value.toString());
+  void endTag(String tag) {
+    // TODO(johnniwinther): Support tags in binary serialization?
   }
 
   @override
-  void _writeStringInternal(String value) {
+  void writeString(String value) {
     List<int> bytes = utf8.encode(value);
-    _writeIntInternal(bytes.length);
+    writeInt(bytes.length);
     _bufferedSink.addBytes(bytes);
     _length += bytes.length;
   }
 
   @override
-  void _writeIntInternal(int value) {
+  void writeInt(int value) {
     assert(value >= 0 && value >> 30 == 0);
     if (value < 0x80) {
       _bufferedSink.addByte(value);
@@ -61,8 +52,8 @@
   }
 
   @override
-  void _writeEnumInternal(dynamic value) {
-    _writeIntInternal(value.index);
+  void writeEnum(dynamic value) {
+    writeInt(value.index);
   }
 
   @override
@@ -71,8 +62,4 @@
     _bufferedSink = null;
     sink.close();
   }
-
-  /// Returns the number of bytes written to this data sink.
-  @override
-  int get length => _length;
 }
diff --git a/pkg/compiler/lib/src/serialization/binary_source.dart b/pkg/compiler/lib/src/serialization/binary_source.dart
index 3844b35..149f362 100644
--- a/pkg/compiler/lib/src/serialization/binary_source.dart
+++ b/pkg/compiler/lib/src/serialization/binary_source.dart
@@ -6,29 +6,26 @@
 
 /// [DataSource] that reads data from a sequence of bytes.
 ///
-/// This data source works together with [BinarySink].
-class BinarySourceImpl extends AbstractDataSource {
+/// This data source works together with [BinaryDataSink].
+class BinaryDataSource implements DataSource {
   int _byteOffset = 0;
   final List<int> _bytes;
   final StringInterner _stringInterner;
 
-  BinarySourceImpl(this._bytes,
-      {bool useDataKinds = false,
-      StringInterner stringInterner,
-      DataSourceIndices importedIndices})
-      : _stringInterner = stringInterner,
-        super(useDataKinds: useDataKinds, importedIndices: importedIndices);
+  BinaryDataSource(this._bytes, {StringInterner stringInterner})
+      : _stringInterner = stringInterner;
 
   @override
-  void _begin(String tag) {}
+  void begin(String tag) {}
+
   @override
-  void _end(String tag) {}
+  void end(String tag) {}
 
   int _readByte() => _bytes[_byteOffset++];
 
   @override
-  String _readStringInternal() {
-    int length = _readIntInternal();
+  String readString() {
+    int length = readInt();
     List<int> bytes = Uint8List(length);
     bytes.setRange(0, bytes.length, _bytes, _byteOffset);
     _byteOffset += bytes.length;
@@ -38,7 +35,7 @@
   }
 
   @override
-  int _readIntInternal() {
+  int readInt() {
     var byte = _readByte();
     if (byte & 0x80 == 0) {
       // 0xxxxxxx
@@ -56,14 +53,8 @@
   }
 
   @override
-  Uri _readUriInternal() {
-    String text = _readString();
-    return Uri.parse(text);
-  }
-
-  @override
-  E _readEnumInternal<E>(List<E> values) {
-    int index = _readIntInternal();
+  E readEnum<E>(List<E> values) {
+    int index = readInt();
     assert(
         0 <= index && index < values.length,
         "Invalid data kind index. "
@@ -72,5 +63,5 @@
   }
 
   @override
-  String get _errorContext => ' Offset $_byteOffset in ${_bytes.length}.';
+  String get errorContext => ' Offset $_byteOffset in ${_bytes.length}.';
 }
diff --git a/pkg/compiler/lib/src/serialization/helpers.dart b/pkg/compiler/lib/src/serialization/helpers.dart
index a0bd6d7..81b2e20 100644
--- a/pkg/compiler/lib/src/serialization/helpers.dart
+++ b/pkg/compiler/lib/src/serialization/helpers.dart
@@ -66,7 +66,7 @@
   functionNode,
 }
 
-/// Class used for encoding tags in [ObjectSink] and [ObjectSource].
+/// Class used for encoding tags in [ObjectDataSink] and [ObjectDataSource].
 class Tag {
   final String value;
 
@@ -126,7 +126,7 @@
 
 class DartTypeNodeWriter
     extends ir.DartTypeVisitor1<void, List<ir.TypeParameter>> {
-  final AbstractDataSink _sink;
+  final DataSinkWriter _sink;
 
   DartTypeNodeWriter(this._sink);
 
@@ -262,7 +262,7 @@
 
 /// Data sink helper that canonicalizes [E] values using indices.
 class IndexedSink<E> {
-  final AbstractDataSink _sink;
+  final DataSink _sink;
   Map<E, int> cache;
 
   IndexedSink(this._sink, {this.cache}) {
@@ -279,24 +279,24 @@
     int index = cache[value];
     if (index == null) {
       index = cache.length;
-      _sink._writeIntInternal(index);
+      _sink.writeInt(index);
       cache[value] = pending; // Increments length to allocate slot.
       writeValue(value);
       cache[value] = index;
     } else if (index == pending) {
       throw ArgumentError("Cyclic dependency on cached value: $value");
     } else {
-      _sink._writeIntInternal(index);
+      _sink.writeInt(index);
     }
   }
 }
 
 /// Data source helper reads canonicalized [E] values through indices.
 class IndexedSource<E> {
-  final AbstractDataSource _source;
+  final DataSource _sourceReader;
   List<E> cache;
 
-  IndexedSource(this._source, {this.cache}) {
+  IndexedSource(this._sourceReader, {this.cache}) {
     // [cache] slot 0 is pre-allocated to `null`.
     this.cache ??= [null];
   }
@@ -306,7 +306,7 @@
   /// If the value hasn't yet been read, [readValue] is called to deserialize
   /// the value itself.
   E read(E readValue()) {
-    int index = _source._readIntInternal();
+    int index = _sourceReader.readInt();
     if (index >= cache.length) {
       assert(index == cache.length);
       cache.add(null); // placeholder.
diff --git a/pkg/compiler/lib/src/serialization/mixins.dart b/pkg/compiler/lib/src/serialization/mixins.dart
deleted file mode 100644
index 8e2bfa3..0000000
--- a/pkg/compiler/lib/src/serialization/mixins.dart
+++ /dev/null
@@ -1,820 +0,0 @@
-// Copyright (c) 2018, 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.
-
-part of 'serialization.dart';
-
-/// Mixin that implements all convenience methods of [DataSource].
-abstract class DataSourceMixin implements DataSource {
-  @override
-  E readValueOrNull<E>(E f()) {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return f();
-    }
-    return null;
-  }
-
-  @override
-  List<E> readList<E>(E f(), {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = f();
-    }
-    return list;
-  }
-
-  @override
-  int readIntOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readInt();
-    }
-    return null;
-  }
-
-  @override
-  String readStringOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readString();
-    }
-    return null;
-  }
-
-  @override
-  List<String> readStrings({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<String> list = List<String>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = readString();
-    }
-    return list;
-  }
-
-  @override
-  List<DartType> readDartTypes({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<DartType> list = List<DartType>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = readDartType();
-    }
-    return list;
-  }
-
-  @override
-  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<ir.TypeParameter> list = List<ir.TypeParameter>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = readTypeParameterNode();
-    }
-    return list;
-  }
-
-  @override
-  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      MemberEntity member = readMember();
-      list[i] = member;
-    }
-    return list;
-  }
-
-  @override
-  List<E> readMemberNodes<E extends ir.Member>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      ir.Member value = readMemberNode();
-      list[i] = value;
-    }
-    return list;
-  }
-
-  @override
-  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      ClassEntity cls = readClass();
-      list[i] = cls;
-    }
-    return list;
-  }
-
-  @override
-  Map<K, V> readLibraryMap<K extends LibraryEntity, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      LibraryEntity library = readLibrary();
-      V value = f();
-      map[library] = value;
-    }
-    return map;
-  }
-
-  @override
-  Map<K, V> readClassMap<K extends ClassEntity, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ClassEntity cls = readClass();
-      V value = f();
-      map[cls] = value;
-    }
-    return map;
-  }
-
-  @override
-  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      MemberEntity member = readMember();
-      V value = f(member);
-      map[member] = value;
-    }
-    return map;
-  }
-
-  @override
-  Map<K, V> readMemberNodeMap<K extends ir.Member, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ir.Member node = readMemberNode();
-      V value = f();
-      map[node] = value;
-    }
-    return map;
-  }
-
-  @override
-  Map<K, V> readTreeNodeMap<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ir.TreeNode node = readTreeNode();
-      V value = f();
-      map[node] = value;
-    }
-    return map;
-  }
-
-  @override
-  Map<K, V> readTypeVariableMap<K extends IndexedTypeVariable, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      IndexedTypeVariable node = readTypeVariable();
-      V value = f();
-      map[node] = value;
-    }
-    return map;
-  }
-
-  @override
-  List<E> readLocals<E extends Local>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      Local local = readLocal();
-      list[i] = local;
-    }
-    return list;
-  }
-
-  @override
-  Map<K, V> readLocalMap<K extends Local, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      Local local = readLocal();
-      V value = f();
-      map[local] = value;
-    }
-    return map;
-  }
-
-  @override
-  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      ir.TreeNode node = readTreeNode();
-      list[i] = node;
-    }
-    return list;
-  }
-
-  @override
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<String, V> map = {};
-    for (int i = 0; i < count; i++) {
-      String key = readString();
-      V value = f();
-      map[key] = value;
-    }
-    return map;
-  }
-
-  @override
-  IndexedClass readClassOrNull() {
-    bool hasClass = readBool();
-    if (hasClass) {
-      return readClass();
-    }
-    return null;
-  }
-
-  @override
-  ir.TreeNode readTreeNodeOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readTreeNode();
-    }
-    return null;
-  }
-
-  @override
-  IndexedMember readMemberOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readMember();
-    }
-    return null;
-  }
-
-  @override
-  Local readLocalOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readLocal();
-    }
-    return null;
-  }
-
-  @override
-  ConstantValue readConstantOrNull() {
-    bool hasClass = readBool();
-    if (hasClass) {
-      return readConstant();
-    }
-    return null;
-  }
-
-  @override
-  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<E> list = List<E>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      ConstantValue value = readConstant();
-      list[i] = value;
-    }
-    return list;
-  }
-
-  @override
-  Map<K, V> readConstantMap<K extends ConstantValue, V>(V f(),
-      {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<K, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ConstantValue key = readConstant();
-      V value = f();
-      map[key] = value;
-    }
-    return map;
-  }
-
-  @override
-  IndexedLibrary readLibraryOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readLibrary();
-    }
-    return null;
-  }
-
-  @override
-  ImportEntity readImportOrNull() {
-    bool hasClass = readBool();
-    if (hasClass) {
-      return readImport();
-    }
-    return null;
-  }
-
-  @override
-  List<ImportEntity> readImports({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<ImportEntity> list = List<ImportEntity>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = readImport();
-    }
-    return list;
-  }
-
-  @override
-  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    Map<ImportEntity, V> map = {};
-    for (int i = 0; i < count; i++) {
-      ImportEntity key = readImport();
-      V value = f();
-      map[key] = value;
-    }
-    return map;
-  }
-
-  @override
-  List<ir.DartType> readDartTypeNodes({bool emptyAsNull = false}) {
-    int count = readInt();
-    if (count == 0 && emptyAsNull) return null;
-    List<ir.DartType> list = List<ir.DartType>.filled(count, null);
-    for (int i = 0; i < count; i++) {
-      list[i] = readDartTypeNode();
-    }
-    return list;
-  }
-
-  @override
-  ir.Name readName() {
-    String text = readString();
-    ir.Library library = readValueOrNull(readLibraryNode);
-    return ir.Name(text, library);
-  }
-
-  @override
-  ir.LibraryDependency readLibraryDependencyNode() {
-    ir.Library library = readLibraryNode();
-    int index = readInt();
-    return library.dependencies[index];
-  }
-
-  @override
-  ir.LibraryDependency readLibraryDependencyNodeOrNull() {
-    return readValueOrNull(readLibraryDependencyNode);
-  }
-
-  @override
-  js.Node readJsNodeOrNull() {
-    bool hasValue = readBool();
-    if (hasValue) {
-      return readJsNode();
-    }
-    return null;
-  }
-}
-
-/// Mixin that implements all convenience methods of [DataSink].
-abstract class DataSinkMixin implements DataSink {
-  @override
-  void writeIntOrNull(int value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeInt(value);
-    }
-  }
-
-  @override
-  void writeStringOrNull(String value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeString(value);
-    }
-  }
-
-  @override
-  void writeClassOrNull(IndexedClass value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeClass(value);
-    }
-  }
-
-  @override
-  void writeLocalOrNull(Local value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeLocal(value);
-    }
-  }
-
-  @override
-  void writeClasses(Iterable<ClassEntity> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (IndexedClass value in values) {
-        writeClass(value);
-      }
-    }
-  }
-
-  @override
-  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ir.TreeNode value in values) {
-        writeTreeNode(value);
-      }
-    }
-  }
-
-  @override
-  void writeStrings(Iterable<String> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (String value in values) {
-        writeString(value);
-      }
-    }
-  }
-
-  @override
-  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ir.Member value in values) {
-        writeMemberNode(value);
-      }
-    }
-  }
-
-  @override
-  void writeDartTypes(Iterable<DartType> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (DartType value in values) {
-        writeDartType(value);
-      }
-    }
-  }
-
-  @override
-  void writeLibraryMap<V>(Map<LibraryEntity, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((LibraryEntity library, V value) {
-        writeLibrary(library);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeClassMap<V>(Map<ClassEntity, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ClassEntity cls, V value) {
-        writeClass(cls);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeMemberMap<V>(
-      Map<MemberEntity, V> map, void f(MemberEntity member, V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((MemberEntity member, V value) {
-        writeMember(member);
-        f(member, value);
-      });
-    }
-  }
-
-  @override
-  void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((String key, V value) {
-        writeString(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeLocals(Iterable<Local> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (Local value in values) {
-        writeLocal(value);
-      }
-    }
-  }
-
-  @override
-  void writeLocalMap<V>(Map<Local, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((Local key, V value) {
-        writeLocal(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeMemberNodeMap<V>(Map<ir.Member, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ir.Member key, V value) {
-        writeMemberNode(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeTreeNodeMap<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ir.TreeNode key, V value) {
-        writeTreeNode(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeTypeVariableMap<V>(Map<IndexedTypeVariable, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((IndexedTypeVariable key, V value) {
-        writeTypeVariable(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      values.forEach(f);
-    }
-  }
-
-  @override
-  void writeTreeNodeOrNull(ir.TreeNode value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeTreeNode(value);
-    }
-  }
-
-  @override
-  void writeValueOrNull<E>(E value, void f(E value)) {
-    writeBool(value != null);
-    if (value != null) {
-      f(value);
-    }
-  }
-
-  @override
-  void writeMemberOrNull(IndexedMember value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeMember(value);
-    }
-  }
-
-  @override
-  void writeMembers(Iterable<MemberEntity> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (IndexedMember value in values) {
-        writeMember(value);
-      }
-    }
-  }
-
-  @override
-  void writeTypeParameterNodes(Iterable<ir.TypeParameter> values,
-      {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ir.TypeParameter value in values) {
-        writeTypeParameterNode(value);
-      }
-    }
-  }
-
-  @override
-  void writeConstantOrNull(ConstantValue value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeConstant(value);
-    }
-  }
-
-  @override
-  void writeConstants(Iterable<ConstantValue> values,
-      {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ConstantValue value in values) {
-        writeConstant(value);
-      }
-    }
-  }
-
-  @override
-  void writeConstantMap<V>(Map<ConstantValue, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ConstantValue key, V value) {
-        writeConstant(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeLibraryOrNull(IndexedLibrary value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeLibrary(value);
-    }
-  }
-
-  @override
-  void writeImportOrNull(ImportEntity value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeImport(value);
-    }
-  }
-
-  @override
-  void writeImports(Iterable<ImportEntity> values, {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ImportEntity value in values) {
-        writeImport(value);
-      }
-    }
-  }
-
-  @override
-  void writeImportMap<V>(Map<ImportEntity, V> map, void f(V value),
-      {bool allowNull = false}) {
-    if (map == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(map.length);
-      map.forEach((ImportEntity key, V value) {
-        writeImport(key);
-        f(value);
-      });
-    }
-  }
-
-  @override
-  void writeDartTypeNodes(Iterable<ir.DartType> values,
-      {bool allowNull = false}) {
-    if (values == null) {
-      assert(allowNull);
-      writeInt(0);
-    } else {
-      writeInt(values.length);
-      for (ir.DartType value in values) {
-        writeDartTypeNode(value);
-      }
-    }
-  }
-
-  @override
-  void writeName(ir.Name value) {
-    writeString(value.text);
-    writeValueOrNull(value.library, writeLibraryNode);
-  }
-
-  @override
-  void writeLibraryDependencyNode(ir.LibraryDependency value) {
-    ir.Library library = value.parent;
-    writeLibraryNode(library);
-    writeInt(library.dependencies.indexOf(value));
-  }
-
-  @override
-  void writeLibraryDependencyNodeOrNull(ir.LibraryDependency value) {
-    writeValueOrNull(value, writeLibraryDependencyNode);
-  }
-
-  @override
-  void writeJsNodeOrNull(js.Node value) {
-    writeBool(value != null);
-    if (value != null) {
-      writeJsNode(value);
-    }
-  }
-}
diff --git a/pkg/compiler/lib/src/serialization/object_sink.dart b/pkg/compiler/lib/src/serialization/object_sink.dart
index bbb91e3..1388dc6 100644
--- a/pkg/compiler/lib/src/serialization/object_sink.dart
+++ b/pkg/compiler/lib/src/serialization/object_sink.dart
@@ -4,52 +4,39 @@
 
 part of 'serialization.dart';
 
-/// [DataSink] that writes to a list of objects, useful for debugging
+/// [DataSinkWriter] that writes to a list of objects, useful for debugging
 /// inconsistencies between serialization and deserialization.
 ///
-/// This data sink works together with [ObjectSource].
-class ObjectSink extends AbstractDataSink {
+/// This data sink writer works together with [ObjectDataSource].
+class ObjectDataSink implements DataSink {
   List<dynamic> _data;
 
-  ObjectSink(this._data,
-      {bool useDataKinds,
-      Map<String, int> tagFrequencyMap,
-      DataSourceIndices importedIndices})
-      : super(
-            useDataKinds: useDataKinds,
-            tagFrequencyMap: tagFrequencyMap,
-            importedIndices: importedIndices);
+  ObjectDataSink(this._data);
 
   @override
-  void _begin(String tag) {
+  void beginTag(String tag) {
     _data.add(Tag('begin:$tag'));
   }
 
   @override
-  void _end(String tag) {
+  void endTag(String tag) {
     _data.add(Tag('end:$tag'));
   }
 
   @override
-  void _writeEnumInternal(dynamic value) {
+  void writeEnum(dynamic value) {
     assert(value != null);
     _data.add(value);
   }
 
   @override
-  void _writeIntInternal(int value) {
+  void writeInt(int value) {
     assert(value != null);
     _data.add(value);
   }
 
   @override
-  void _writeStringInternal(String value) {
-    assert(value != null);
-    _data.add(value);
-  }
-
-  @override
-  void _writeUriInternal(Uri value) {
+  void writeString(String value) {
     assert(value != null);
     _data.add(value);
   }
diff --git a/pkg/compiler/lib/src/serialization/object_source.dart b/pkg/compiler/lib/src/serialization/object_source.dart
index 07e07ad..01b602b 100644
--- a/pkg/compiler/lib/src/serialization/object_source.dart
+++ b/pkg/compiler/lib/src/serialization/object_source.dart
@@ -7,55 +7,50 @@
 /// [DataSource] that read from a list of objects, useful for debugging
 /// inconsistencies between serialization and deserialization.
 ///
-/// This data source works together with [ObjectSink].
-class ObjectSource extends AbstractDataSource {
+/// This data source works together with [ObjectDataSink].
+class ObjectDataSource implements DataSource {
   int _index = 0;
   final List<dynamic> _data;
 
-  ObjectSource(this._data,
-      {bool useDataKinds, DataSourceIndices importedIndices})
-      : super(useDataKinds: useDataKinds, importedIndices: importedIndices);
+  ObjectDataSource(this._data);
 
   T _read<T>() {
     dynamic value = _data[_index++];
-    assert(value is T, "Expected $T value, found $value.$_errorContext");
+    assert(value is T, "Expected $T value, found $value.$errorContext");
     return value;
   }
 
   @override
-  void _begin(String tag) {
+  void begin(String tag) {
     Tag expectedTag = Tag('begin:$tag');
     Tag actualTag = _read();
     assert(
         expectedTag == actualTag,
         "Unexpected begin tag. "
-        "Expected $expectedTag, found $actualTag.$_errorContext");
+        "Expected $expectedTag, found $actualTag.$errorContext");
   }
 
   @override
-  void _end(String tag) {
+  void end(String tag) {
     Tag expectedTag = Tag('end:$tag');
     Tag actualTag = _read();
     assert(
         expectedTag == actualTag,
         "Unexpected end tag. "
-        "Expected $expectedTag, found $actualTag.$_errorContext");
+        "Expected $expectedTag, found $actualTag.$errorContext");
   }
 
   @override
-  String _readStringInternal() => _read();
+  String readString() => _read();
 
   @override
-  E _readEnumInternal<E>(List<E> values) => _read();
+  E readEnum<E>(List<E> values) => _read();
 
   @override
-  Uri _readUriInternal() => _read();
+  int readInt() => _read();
 
   @override
-  int _readIntInternal() => _read();
-
-  @override
-  String get _errorContext {
+  String get errorContext {
     StringBuffer sb = StringBuffer();
     for (int i = _index - 50; i < _index + 10; i++) {
       if (i >= 0 && i < _data.length) {
diff --git a/pkg/compiler/lib/src/serialization/serialization.dart b/pkg/compiler/lib/src/serialization/serialization.dart
index 4fb6654..b7747d9 100644
--- a/pkg/compiler/lib/src/serialization/serialization.dart
+++ b/pkg/compiler/lib/src/serialization/serialization.dart
@@ -22,13 +22,12 @@
 import '../js_model/locals.dart';
 import '../js_model/type_recipe.dart' show TypeRecipe;
 
-part 'abstract_sink.dart';
-part 'abstract_source.dart';
+part 'sink.dart';
+part 'source.dart';
 part 'binary_sink.dart';
 part 'binary_source.dart';
 part 'helpers.dart';
 part 'member_data.dart';
-part 'mixins.dart';
 part 'node_indexer.dart';
 part 'object_sink.dart';
 part 'object_source.dart';
@@ -37,431 +36,8 @@
   String internString(String string);
 }
 
-/// Interface for serialization.
-abstract class DataSink {
-  /// The amount of data written to this data sink.
-  ///
-  /// The units is based on the underlying data structure for this data sink.
-  int get length;
-
-  /// Flushes any pending data and closes this data sink.
-  ///
-  /// The data sink can no longer be written to after closing.
-  void close();
-
-  /// Registers that the section [tag] starts.
-  ///
-  /// This is used for debugging to verify that sections are correctly aligned
-  /// between serialization and deserialization.
-  void begin(String tag);
-
-  /// Registers that the section [tag] ends.
-  ///
-  /// This is used for debugging to verify that sections are correctly aligned
-  /// between serialization and deserialization.
-  void end(String tag);
-
-  /// Writes a reference to [value] to this data sink. If [value] has not yet
-  /// been serialized, [f] is called to serialize the value itself.
-  void writeCached<E>(E value, void f(E value));
-
-  /// Writes the potentially `null` [value] to this data sink. If [value] is
-  /// non-null [f] is called to write the non-null value to the data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readValueOrNull].
-  void writeValueOrNull<E>(E value, void f(E value));
-
-  /// Writes the [values] to this data sink calling [f] to write each value to
-  /// the data sink. If [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readList].
-  void writeList<E>(Iterable<E> values, void f(E value),
-      {bool allowNull = false});
-
-  /// Writes the boolean [value] to this data sink.
-  void writeBool(bool value);
-
-  /// Writes the non-negative 30 bit integer [value] to this data sink.
-  void writeInt(int value);
-
-  /// Writes the potentially `null` non-negative [value] to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readIntOrNull].
-  void writeIntOrNull(int value);
-
-  /// Writes the string [value] to this data sink.
-  void writeString(String value);
-
-  /// Writes the potentially `null` string [value] to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readStringOrNull].
-  void writeStringOrNull(String value);
-
-  /// Writes the string [values] to this data sink. If [allowNull] is `true`,
-  /// [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readStrings].
-  void writeStrings(Iterable<String> values, {bool allowNull = false});
-
-  /// Writes the [map] from string to [V] values to this data sink, calling [f]
-  /// to write each value to the data sink. If [allowNull] is `true`, [map] is
-  /// allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readStringMap].
-  void writeStringMap<V>(Map<String, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes the enum value [value] to this data sink.
-  // TODO(johnniwinther): Change the signature to
-  // `void writeEnum<E extends Enum<E>>(E value);` when an interface for enums
-  // is added to the language.
-  void writeEnum(dynamic value);
-
-  /// Writes the URI [value] to this data sink.
-  void writeUri(Uri value);
-
-  /// Writes a reference to the kernel library node [value] to this data sink.
-  void writeLibraryNode(ir.Library value);
-
-  /// Writes a reference to the kernel class node [value] to this data sink.
-  void writeClassNode(ir.Class value);
-
-  /// Writes a reference to the kernel typedef node [value] to this data sink.
-  void writeTypedefNode(ir.Typedef value);
-
-  /// Writes a reference to the kernel member node [value] to this data sink.
-  void writeMemberNode(ir.Member value);
-
-  /// Writes references to the kernel member node [values] to this data sink.
-  /// If [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readMemberNodes].
-  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull = false});
-
-  /// Writes the [map] from references to kernel member nodes to [V] values to
-  /// this data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readMemberNodeMap].
-  void writeMemberNodeMap<V>(Map<ir.Member, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a kernel name node to this data sink.
-  void writeName(ir.Name value);
-
-  /// Writes a kernel library dependency node [value] to this data sink.
-  void writeLibraryDependencyNode(ir.LibraryDependency value);
-
-  /// Writes a potentially `null` kernel library dependency node [value] to
-  /// this data sink.
-  void writeLibraryDependencyNodeOrNull(ir.LibraryDependency value);
-
-  /// Writes a reference to the kernel tree node [value] to this data sink.
-  void writeTreeNode(ir.TreeNode value);
-
-  /// Writes a reference to the potentially `null` kernel tree node [value]
-  /// to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodeOrNull].
-  void writeTreeNodeOrNull(ir.TreeNode value);
-
-  /// Writes references to the kernel tree node [values] to this data sink.
-  /// If [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodes].
-  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull = false});
-
-  /// Writes the [map] from references to kernel tree nodes to [V] values to
-  /// this data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodeMap].
-  void writeTreeNodeMap<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the kernel tree node [value] in the known [context]
-  /// to this data sink.
-  void writeTreeNodeInContext(ir.TreeNode value);
-
-  /// Writes a reference to the potentially `null` kernel tree node [value] in
-  /// the known [context] to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodeOrNullInContext].
-  void writeTreeNodeOrNullInContext(ir.TreeNode value);
-
-  /// Writes references to the kernel tree node [values] in the known [context]
-  /// to this data sink. If [allowNull] is `true`, [values] is allowed to be
-  /// `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodesInContext].
-  void writeTreeNodesInContext(Iterable<ir.TreeNode> values,
-      {bool allowNull = false});
-
-  /// Writes the [map] from references to kernel tree nodes to [V] values in the
-  /// known [context] to this data sink, calling [f] to write each value to the
-  /// data sink. If [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTreeNodeMapInContext].
-  void writeTreeNodeMapInContext<V>(Map<ir.TreeNode, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the kernel type parameter node [value] to this data
-  /// sink.
-  void writeTypeParameterNode(ir.TypeParameter value);
-
-  /// Writes references to the kernel type parameter node [values] to this data
-  /// sink.
-  /// If [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTypeParameterNodes].
-  void writeTypeParameterNodes(Iterable<ir.TypeParameter> values,
-      {bool allowNull = false});
-
-  /// Writes the type [value] to this data sink. If [allowNull] is `true`,
-  /// [value] is allowed to be `null`.
-  void writeDartType(DartType value, {bool allowNull = false});
-
-  /// Writes the type [values] to this data sink. If [allowNull] is `true`,
-  /// [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readDartTypes].
-  void writeDartTypes(Iterable<DartType> values, {bool allowNull = false});
-
-  /// Writes the kernel type node [value] to this data sink. If [allowNull] is
-  /// `true`, [value] is allowed to be `null`.
-  void writeDartTypeNode(ir.DartType value, {bool allowNull = false});
-
-  /// Writes the kernel type node [values] to this data sink. If [allowNull] is
-  /// `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readDartTypeNodes].
-  void writeDartTypeNodes(Iterable<ir.DartType> values,
-      {bool allowNull = false});
-
-  /// Writes the source span [value] to this data sink.
-  void writeSourceSpan(SourceSpan value);
-
-  /// Writes a reference to the indexed library [value] to this data sink.
-  void writeLibrary(IndexedLibrary value);
-
-  /// Writes a reference to the potentially `null` indexed library [value]
-  /// to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readLibraryOrNull].
-  void writeLibraryOrNull(IndexedLibrary value);
-
-  /// Writes the [map] from references to indexed libraries to [V] values to
-  /// this data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readLibraryMap].
-  void writeLibraryMap<V>(Map<LibraryEntity, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the indexed class [value] to this data sink.
-  void writeClass(IndexedClass value);
-
-  /// Writes a reference to the potentially `null` indexed class [value]
-  /// to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readClassOrNull].
-  void writeClassOrNull(IndexedClass value);
-
-  /// Writes references to the indexed class [values] to this data sink. If
-  /// [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readClasses].
-  void writeClasses(Iterable<ClassEntity> values, {bool allowNull = false});
-
-  /// Writes the [map] from references to indexed classes to [V] values to this
-  /// data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readClassMap].
-  void writeClassMap<V>(Map<ClassEntity, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the indexed member [value] to this data sink.
-  void writeMember(IndexedMember value);
-
-  /// Writes a reference to the potentially `null` indexed member [value]
-  /// to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readMemberOrNull].
-  void writeMemberOrNull(IndexedMember value);
-
-  /// Writes references to the indexed member [values] to this data sink. If
-  /// [allowNull] is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readMembers].
-  void writeMembers(Iterable<MemberEntity> values, {bool allowNull = false});
-
-  /// Writes the [map] from references to indexed members to [V] values to this
-  /// data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readMemberMap].
-  void writeMemberMap<V>(
-      Map<MemberEntity, V> map, void f(MemberEntity member, V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the indexed type variable [value] to this data sink.
-  void writeTypeVariable(IndexedTypeVariable value);
-
-  /// Writes the [map] from references to indexed type variables to [V] values
-  /// to this data sink, calling [f] to write each value to the data sink. If
-  /// [allowNull] is `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readTypeVariableMap].
-  void writeTypeVariableMap<V>(Map<IndexedTypeVariable, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a reference to the local [value] to this data sink.
-  void writeLocal(Local local);
-
-  /// Writes a reference to the potentially `null` local [value]
-  /// to this data sink.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readLocalOrNull].
-  void writeLocalOrNull(Local local);
-
-  /// Writes references to the local [values] to this data sink. If [allowNull]
-  /// is `true`, [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readLocals].
-  void writeLocals(Iterable<Local> values, {bool allowNull = false});
-
-  /// Writes the [map] from references to locals to [V] values to this data
-  /// sink, calling [f] to write each value to the data sink. If [allowNull] is
-  /// `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readLocalMap].
-  void writeLocalMap<V>(Map<Local, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes the constant [value] to this data sink.
-  void writeConstant(ConstantValue value);
-
-  /// Writes the potentially `null` constant [value] to this data sink.
-  void writeConstantOrNull(ConstantValue value);
-
-  /// Writes constant [values] to this data sink. If [allowNull] is `true`,
-  /// [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readConstants].
-  void writeConstants(Iterable<ConstantValue> values, {bool allowNull = false});
-
-  /// Writes the [map] from constant values to [V] values to this data sink,
-  /// calling [f] to write each value to the data sink. If [allowNull] is
-  /// `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readConstantMap].
-  void writeConstantMap<V>(Map<ConstantValue, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes a double value to this data sink.
-  void writeDoubleValue(double value);
-
-  /// Writes an integer of arbitrary value to this data sink.
-  ///
-  /// This is should only when the value is not known to be a non-negative
-  /// 30 bit integer. Otherwise [writeInt] should be used.
-  void writeIntegerValue(int value);
-
-  /// Writes the import [value] to this data sink.
-  void writeImport(ImportEntity value);
-
-  /// Writes the potentially `null` import [value] to this data sink.
-  void writeImportOrNull(ImportEntity value);
-
-  /// Writes import [values] to this data sink. If [allowNull] is `true`,
-  /// [values] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readImports].
-  void writeImports(Iterable<ImportEntity> values, {bool allowNull = false});
-
-  /// Writes the [map] from imports to [V] values to this data sink,
-  /// calling [f] to write each value to the data sink. If [allowNull] is
-  /// `true`, [map] is allowed to be `null`.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSource.readImportMap].
-  void writeImportMap<V>(Map<ImportEntity, V> map, void f(V value),
-      {bool allowNull = false});
-
-  /// Writes an abstract [value] to this data sink.
-  ///
-  /// This feature is only available a [CodegenWriter] has been registered.
-  void writeAbstractValue(AbstractValue value);
-
-  /// Writes a reference to the output unit [value] to this data sink.
-  ///
-  /// This feature is only available a [CodegenWriter] has been registered.
-  void writeOutputUnitReference(OutputUnit value);
-
-  /// Writes a js node [value] to this data sink.
-  ///
-  /// This feature is only available a [CodegenWriter] has been registered.
-  void writeJsNode(js.Node value);
-
-  /// Writes a potentially `null` js node [value] to this data sink.
-  ///
-  /// This feature is only available a [CodegenWriter] has been registered.
-  void writeJsNodeOrNull(js.Node value);
-
-  /// Writes TypeRecipe [value] to this data sink.
-  ///
-  /// This feature is only available a [CodegenWriter] has been registered.
-  void writeTypeRecipe(TypeRecipe value);
-
-  /// Register an [EntityWriter] with this data sink for non-default encoding
-  /// of entity references.
-  void registerEntityWriter(EntityWriter writer);
-
-  /// Register a [CodegenWriter] with this data sink to support serialization
-  /// of codegen only data.
-  void registerCodegenWriter(CodegenWriter writer);
-
-  /// Invoke [f] in the context of [member]. This sets up support for
-  /// serialization of `ir.TreeNode`s using the `writeTreeNode*InContext`
-  /// methods.
-  void inMemberContext(ir.Member member, void f());
-}
-
 /// Data class representing cache information for a given [T] which can be
-/// passed from a [DataSource] to other [DataSource]s and [DataSink]s.
+/// passed from a [DataSourceReader] to other [DataSourceReader]s and [DataSinkWriter]s.
 class DataSourceTypeIndices<E, T> {
   /// Reshapes a [List<T>] to a [Map<E, int>] using [_getValue].
   Map<E, int> _reshape() {
@@ -481,9 +57,9 @@
   Map<E, int> _cache;
 
   /// Though [DataSourceTypeIndices] supports two types of caches. If the
-  /// exported indices are imported into a [DataSource] then the [cacheAsList]
+  /// exported indices are imported into a [DataSourceReader] then the [cacheAsList]
   /// will be used as is. If, however, the exported indices are imported into a
-  /// [DataSink] then we need to reshape the [List<T>] into a [Map<E, int>]
+  /// [DataSinkWriter] then we need to reshape the [List<T>] into a [Map<E, int>]
   /// where [E] is either [T] or some value which can be derived from [T] by
   /// [_getValue].
   DataSourceTypeIndices(this.cacheAsList, [this._getValue]) {
@@ -493,418 +69,11 @@
 }
 
 /// Data class representing the sum of all cache information for a given
-/// [DataSource].
+/// [DataSourceReader].
 class DataSourceIndices {
   final Map<Type, DataSourceTypeIndices> caches = {};
 }
 
-/// Interface for deserialization.
-abstract class DataSource {
-  /// Exports [DataSourceIndices] for use in other [DataSource]s and
-  /// [DataSink]s.
-  DataSourceIndices exportIndices();
-
-  /// Registers that the section [tag] starts.
-  ///
-  /// This is used for debugging to verify that sections are correctly aligned
-  /// between serialization and deserialization.
-  void begin(String tag);
-
-  /// Registers that the section [tag] ends.
-  ///
-  /// This is used for debugging to verify that sections are correctly aligned
-  /// between serialization and deserialization.
-  void end(String tag);
-
-  /// Registers a [ComponentLookup] object with this data source to support
-  /// deserialization of references to kernel nodes.
-  void registerComponentLookup(ComponentLookup componentLookup);
-
-  /// Registers an [EntityLookup] object with this data source to support
-  /// deserialization of references to indexed entities.
-  void registerEntityLookup(EntityLookup entityLookup);
-
-  /// Registers an [EntityReader] with this data source for non-default encoding
-  /// of entity references.
-  void registerEntityReader(EntityReader reader);
-
-  /// Registers a [LocalLookup] object with this data source to support
-  /// deserialization of references to locals.
-  void registerLocalLookup(LocalLookup localLookup);
-
-  /// Registers a [CodegenReader] with this data source to support
-  /// deserialization of codegen only data.
-  void registerCodegenReader(CodegenReader reader);
-
-  /// Unregisters the [CodegenReader] from this data source to remove support
-  /// for deserialization of codegen only data.
-  void deregisterCodegenReader(CodegenReader reader);
-
-  /// Invoke [f] in the context of [member]. This sets up support for
-  /// deserialization of `ir.TreeNode`s using the `readTreeNode*InContext`
-  /// methods.
-  T inMemberContext<T>(ir.Member member, T f());
-
-  /// Reads a reference to an [E] value from this data source. If the value has
-  /// not yet been deserialized, [f] is called to deserialize the value itself.
-  E readCached<E>(E f());
-
-  /// Reads a potentially `null` [E] value from this data source, calling [f] to
-  /// read the non-null value from the data source.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeValueOrNull].
-  E readValueOrNull<E>(E f());
-
-  /// Reads a list of [E] values from this data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeList].
-  List<E> readList<E>(E f(), {bool emptyAsNull = false});
-
-  /// Reads a boolean value from this data source.
-  bool readBool();
-
-  /// Reads a non-negative 30 bit integer value from this data source.
-  int readInt();
-
-  /// Reads a potentially `null` non-negative integer value from this data
-  /// source.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeIntOrNull].
-  int readIntOrNull();
-
-  /// Reads a string value from this data source.
-  String readString();
-
-  /// Reads a potentially `null` string value from this data source.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeStringOrNull].
-  String readStringOrNull();
-
-  /// Reads a list of string values from this data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeStrings].
-  List<String> readStrings({bool emptyAsNull = false});
-
-  /// Reads a map from string values to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeStringMap].
-  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull = false});
-
-  /// Reads an enum value from the list of enum [values] from this data source.
-  ///
-  /// The [values] argument is intended to be the static `.values` field on
-  /// enum classes, for instance:
-  ///
-  ///    enum Foo { bar, baz }
-  ///    ...
-  ///    Foo foo = source.readEnum(Foo.values);
-  ///
-  E readEnum<E>(List<E> values);
-
-  /// Reads a URI value from this data source.
-  Uri readUri();
-
-  /// Reads a reference to a kernel library node from this data source.
-  ir.Library readLibraryNode();
-
-  /// Reads a reference to a kernel class node from this data source.
-  ir.Class readClassNode();
-
-  /// Reads a reference to a kernel class node from this data source.
-  ir.Typedef readTypedefNode();
-
-  /// Reads a reference to a kernel member node from this data source.
-  ir.Member readMemberNode();
-
-  /// Reads a list of references to kernel member nodes from this data source.
-  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeMemberNodes].
-  List<ir.Member> readMemberNodes<E extends ir.Member>(
-      {bool emptyAsNull = false});
-
-  /// Reads a map from kernel member nodes to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeMemberNodeMap].
-  Map<K, V> readMemberNodeMap<K extends ir.Member, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a kernel name node from this data source.
-  ir.Name readName();
-
-  /// Reads a kernel library dependency node from this data source.
-  ir.LibraryDependency readLibraryDependencyNode();
-
-  /// Reads a potentially `null` kernel library dependency node from this data
-  /// source.
-  ir.LibraryDependency readLibraryDependencyNodeOrNull();
-
-  /// Reads a reference to a kernel tree node from this data source.
-  ir.TreeNode readTreeNode();
-
-  /// Reads a reference to a potentially `null` kernel tree node from this data
-  /// source.
-  ir.TreeNode readTreeNodeOrNull();
-
-  /// Reads a list of references to kernel tree nodes from this data source.
-  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTreeNodes].
-  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull = false});
-
-  /// Reads a map from kernel tree nodes to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTreeNodeMap].
-  Map<K, V> readTreeNodeMap<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to a kernel tree node in the known [context] from this
-  /// data source.
-  ir.TreeNode readTreeNodeInContext();
-
-  /// Reads a reference to a potentially `null` kernel tree node in the known
-  /// [context] from this data source.
-  ir.TreeNode readTreeNodeOrNullInContext();
-
-  /// Reads a list of references to kernel tree nodes in the known [context]
-  /// from this data source. If [emptyAsNull] is `true`, `null` is returned
-  /// instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTreeNodesInContext].
-  List<E> readTreeNodesInContext<E extends ir.TreeNode>(
-      {bool emptyAsNull = false});
-
-  /// Reads a map from kernel tree nodes to [V] values in the known [context]
-  /// from this data source, calling [f] to read each value from the data
-  /// source. If [emptyAsNull] is `true`, `null` is returned instead of an empty
-  /// map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTreeNodeMapInContext].
-  Map<K, V> readTreeNodeMapInContext<K extends ir.TreeNode, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to a kernel type parameter node from this data source.
-  ir.TypeParameter readTypeParameterNode();
-
-  /// Reads a list of references to kernel type parameter nodes from this data
-  /// source. If [emptyAsNull] is `true`, `null` is returned instead of an empty
-  /// list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTypeParameterNodes].
-  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull = false});
-
-  /// Reads a type from this data source. If [allowNull], the returned type is
-  /// allowed to be `null`.
-  DartType readDartType({bool allowNull = false});
-
-  /// Reads a list of types from this data source. If [emptyAsNull] is `true`,
-  /// `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeDartTypes].
-  List<DartType> readDartTypes({bool emptyAsNull = false});
-
-  /// Reads a kernel type node from this data source. If [allowNull], the
-  /// returned type is allowed to be `null`.
-  ir.DartType readDartTypeNode({bool allowNull = false});
-
-  /// Reads a list of kernel type nodes from this data source. If [emptyAsNull]
-  /// is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeDartTypeNodes].
-  List<ir.DartType> readDartTypeNodes({bool emptyAsNull = false});
-
-  /// Reads a source span from this data source.
-  SourceSpan readSourceSpan();
-
-  /// Reads a reference to an indexed library from this data source.
-  IndexedLibrary readLibrary();
-
-  /// Reads a reference to a potentially `null` indexed library from this data
-  /// source.
-  IndexedLibrary readLibraryOrNull();
-  Map<K, V> readLibraryMap<K extends LibraryEntity, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to an indexed class from this data source.
-  IndexedClass readClass();
-
-  /// Reads a reference to a potentially `null` indexed class from this data
-  /// source.
-  IndexedClass readClassOrNull();
-
-  /// Reads a list of references to indexed classes from this data source.
-  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeClasses].
-  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull = false});
-
-  /// Reads a map from indexed classes to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeClassMap].
-  Map<K, V> readClassMap<K extends ClassEntity, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to an indexed member from this data source.
-  IndexedMember readMember();
-
-  /// Reads a reference to a potentially `null` indexed member from this data
-  /// source.
-  IndexedMember readMemberOrNull();
-
-  /// Reads a list of references to indexed members from this data source.
-  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeMembers].
-  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull = false});
-
-  /// Reads a map from indexed members to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeMemberMap].
-  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to an indexed type variable from this data source.
-  IndexedTypeVariable readTypeVariable();
-
-  /// Reads a map from indexed type variable to [V] values from this data
-  /// source, calling [f] to read each value from the data source. If
-  /// [emptyAsNull] is `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeTypeVariableMap].
-  Map<K, V> readTypeVariableMap<K extends IndexedTypeVariable, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a reference to a local from this data source.
-  Local readLocal();
-
-  /// Reads a reference to a potentially `null` local from this data source.
-  Local readLocalOrNull();
-
-  /// Reads a list of references to locals from this data source. If
-  /// [emptyAsNull] is `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeLocals].
-  List<E> readLocals<E extends Local>({bool emptyAsNull = false});
-
-  /// Reads a map from locals to [V] values from this data source, calling [f]
-  /// to read each value from the data source. If [emptyAsNull] is `true`,
-  /// `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeLocalMap].
-  Map<K, V> readLocalMap<K extends Local, V>(V f(), {bool emptyAsNull = false});
-
-  /// Reads a constant value from this data source.
-  ConstantValue readConstant();
-
-  /// Reads a potentially `null` constant value from this data source.
-  ConstantValue readConstantOrNull();
-
-  /// Reads a double value from this data source.
-  double readDoubleValue();
-
-  /// Reads an integer of arbitrary value from this data source.
-  ///
-  /// This is should only when the value is not known to be a non-negative
-  /// 30 bit integer. Otherwise [readInt] should be used.
-  int readIntegerValue();
-
-  /// Reads a list of constant values from this data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeConstants].
-  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull = false});
-
-  /// Reads a map from constant values to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeConstantMap].
-  Map<K, V> readConstantMap<K extends ConstantValue, V>(V f(),
-      {bool emptyAsNull = false});
-
-  /// Reads a import from this data source.
-  ImportEntity readImport();
-
-  /// Reads a potentially `null` import from this data source.
-  ImportEntity readImportOrNull();
-
-  /// Reads a list of imports from this data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty list.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeImports].
-  List<ImportEntity> readImports({bool emptyAsNull = false});
-
-  /// Reads a map from imports to [V] values from this data source,
-  /// calling [f] to read each value from the data source. If [emptyAsNull] is
-  /// `true`, `null` is returned instead of an empty map.
-  ///
-  /// This is a convenience method to be used together with
-  /// [DataSink.writeImportMap].
-  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull = false});
-
-  /// Reads an [AbstractValue] from this data source.
-  ///
-  /// This feature is only available a [CodegenReader] has been registered.
-  AbstractValue readAbstractValue();
-
-  /// Reads a reference to an [OutputUnit] from this data source.
-  ///
-  /// This feature is only available a [CodegenReader] has been registered.
-  OutputUnit readOutputUnitReference();
-
-  /// Reads a [js.Node] value from this data source.
-  ///
-  /// This feature is only available a [CodegenReader] has been registered.
-  js.Node readJsNode();
-
-  /// Reads a potentially `null` [js.Node] value from this data source.
-  ///
-  /// This feature is only available a [CodegenReader] has been registered.
-  js.Node readJsNodeOrNull();
-
-  /// Reads a [TypeRecipe] value from this data source.
-  ///
-  /// This feature is only available a [CodegenReader] has been registered.
-  TypeRecipe readTypeRecipe();
-}
-
 /// Interface used for looking up entities by index during deserialization.
 abstract class EntityLookup {
   /// Returns the indexed library corresponding to [index].
@@ -925,22 +94,22 @@
   const EntityReader();
 
   IndexedLibrary readLibraryFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     return entityLookup.getLibraryByIndex(source.readInt());
   }
 
   IndexedClass readClassFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     return entityLookup.getClassByIndex(source.readInt());
   }
 
   IndexedMember readMemberFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     return entityLookup.getMemberByIndex(source.readInt());
   }
 
   IndexedTypeVariable readTypeVariableFromDataSource(
-      DataSource source, EntityLookup entityLookup) {
+      DataSourceReader source, EntityLookup entityLookup) {
     return entityLookup.getTypeVariableByIndex(source.readInt());
   }
 }
@@ -949,19 +118,20 @@
 class EntityWriter {
   const EntityWriter();
 
-  void writeLibraryToDataSink(DataSink sink, IndexedLibrary value) {
+  void writeLibraryToDataSink(DataSinkWriter sink, IndexedLibrary value) {
     sink.writeInt(value.libraryIndex);
   }
 
-  void writeClassToDataSink(DataSink sink, IndexedClass value) {
+  void writeClassToDataSink(DataSinkWriter sink, IndexedClass value) {
     sink.writeInt(value.classIndex);
   }
 
-  void writeMemberToDataSink(DataSink sink, IndexedMember value) {
+  void writeMemberToDataSink(DataSinkWriter sink, IndexedMember value) {
     sink.writeInt(value.memberIndex);
   }
 
-  void writeTypeVariableToDataSink(DataSink sink, IndexedTypeVariable value) {
+  void writeTypeVariableToDataSink(
+      DataSinkWriter sink, IndexedTypeVariable value) {
     sink.writeInt(value.typeVariableIndex);
   }
 }
@@ -973,16 +143,16 @@
 
 /// Interface used for reading codegen only data during deserialization.
 abstract class CodegenReader {
-  AbstractValue readAbstractValue(DataSource source);
-  OutputUnit readOutputUnitReference(DataSource source);
-  js.Node readJsNode(DataSource source);
-  TypeRecipe readTypeRecipe(DataSource source);
+  AbstractValue readAbstractValue(DataSourceReader source);
+  OutputUnit readOutputUnitReference(DataSourceReader source);
+  js.Node readJsNode(DataSourceReader source);
+  TypeRecipe readTypeRecipe(DataSourceReader source);
 }
 
 /// Interface used for writing codegen only data during serialization.
 abstract class CodegenWriter {
-  void writeAbstractValue(DataSink sink, AbstractValue value);
-  void writeOutputUnitReference(DataSink sink, OutputUnit value);
-  void writeJsNode(DataSink sink, js.Node node);
-  void writeTypeRecipe(DataSink sink, TypeRecipe recipe);
+  void writeAbstractValue(DataSinkWriter sink, AbstractValue value);
+  void writeOutputUnitReference(DataSinkWriter sink, OutputUnit value);
+  void writeJsNode(DataSinkWriter sink, js.Node node);
+  void writeTypeRecipe(DataSinkWriter sink, TypeRecipe recipe);
 }
diff --git a/pkg/compiler/lib/src/serialization/sink.dart b/pkg/compiler/lib/src/serialization/sink.dart
new file mode 100644
index 0000000..3158728
--- /dev/null
+++ b/pkg/compiler/lib/src/serialization/sink.dart
@@ -0,0 +1,1266 @@
+// Copyright (c) 2018, 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.
+
+part of 'serialization.dart';
+
+/// Interface handling [DataSinkWriter] low-level data serialization.
+///
+/// Each implementation of [DataSink] should have a corresponding
+/// [DataSource] that deserializes data serialized by that implementation.
+abstract class DataSink {
+  int get length;
+
+  /// Serialization of a non-negative integer value.
+  void writeInt(int value);
+
+  /// Serialization of an enum value.
+  void writeEnum(dynamic value);
+
+  /// Serialization of a String value.
+  void writeString(String value);
+
+  /// Serialization of a section begin tag. May be omitted by some writers.
+  void beginTag(String tag);
+
+  /// Serialization of a section end tag. May be omitted by some writers.
+  void endTag(String tag);
+
+  /// Closes any underlying data sinks.
+  void close();
+}
+
+/// Serialization writer
+///
+/// To be used with [DataSourceReader] to read and write serialized data.
+/// Serialization format is deferred to provided [DataSink].
+class DataSinkWriter {
+  final DataSink _sinkWriter;
+
+  /// If `true`, serialization of every data kind is preceded by a [DataKind]
+  /// value.
+  ///
+  /// This is used for debugging data inconsistencies between serialization
+  /// and deserialization.
+  final bool useDataKinds;
+  DataSourceIndices importedIndices;
+
+  /// Visitor used for serializing [ir.DartType]s.
+  DartTypeNodeWriter _dartTypeNodeWriter;
+
+  /// Stack of tags used when [useDataKinds] is `true` to help debugging section
+  /// inconsistencies between serialization and deserialization.
+  List<String> _tags;
+
+  /// Map of [_MemberData] object for serialized kernel member nodes.
+  final Map<ir.Member, _MemberData> _memberData = {};
+
+  IndexedSink<String> _stringIndex;
+  IndexedSink<Uri> _uriIndex;
+  IndexedSink<ir.Member> _memberNodeIndex;
+  IndexedSink<ImportEntity> _importIndex;
+  IndexedSink<ConstantValue> _constantIndex;
+
+  final Map<Type, IndexedSink> _generalCaches = {};
+
+  EntityWriter _entityWriter = const EntityWriter();
+  CodegenWriter _codegenWriter;
+
+  final Map<String, int> tagFrequencyMap;
+
+  ir.Member _currentMemberContext;
+  _MemberData _currentMemberData;
+
+  IndexedSink<T> _createSink<T>() {
+    if (importedIndices == null || !importedIndices.caches.containsKey(T)) {
+      return IndexedSink<T>(this._sinkWriter);
+    } else {
+      Map<T, int> cacheCopy = Map.from(importedIndices.caches[T].cache);
+      return IndexedSink<T>(this._sinkWriter, cache: cacheCopy);
+    }
+  }
+
+  DataSinkWriter(this._sinkWriter,
+      {this.useDataKinds = false, this.tagFrequencyMap, this.importedIndices}) {
+    _dartTypeNodeWriter = DartTypeNodeWriter(this);
+    _stringIndex = _createSink<String>();
+    _uriIndex = _createSink<Uri>();
+    _memberNodeIndex = _createSink<ir.Member>();
+    _importIndex = _createSink<ImportEntity>();
+    _constantIndex = _createSink<ConstantValue>();
+  }
+
+  /// The amount of data written to this data sink.
+  ///
+  /// The units is based on the underlying data structure for this data sink.
+  int get length => _sinkWriter.length;
+
+  /// Flushes any pending data and closes this data sink.
+  ///
+  /// The data sink can no longer be written to after closing.
+  void close() {
+    _sinkWriter.close();
+  }
+
+  /// Registers that the section [tag] starts.
+  ///
+  /// This is used for debugging to verify that sections are correctly aligned
+  /// between serialization and deserialization.
+  void begin(String tag) {
+    if (tagFrequencyMap != null) {
+      tagFrequencyMap[tag] ??= 0;
+      tagFrequencyMap[tag]++;
+    }
+    if (useDataKinds) {
+      _tags ??= <String>[];
+      _tags.add(tag);
+      _sinkWriter.beginTag(tag);
+    }
+  }
+
+  /// Registers that the section [tag] starts.
+  ///
+  /// This is used for debugging to verify that sections are correctly aligned
+  /// between serialization and deserialization.
+  void end(Object tag) {
+    if (useDataKinds) {
+      _sinkWriter.endTag(tag);
+
+      String existingTag = _tags.removeLast();
+      assert(existingTag == tag,
+          "Unexpected tag end. Expected $existingTag, found $tag.");
+    }
+  }
+
+  /// Writes a reference to [value] to this data sink. If [value] has not yet
+  /// been serialized, [f] is called to serialize the value itself.
+  void writeCached<E>(E value, void f(E value)) {
+    IndexedSink sink = _generalCaches[E] ??= _createSink<E>();
+    sink.write(value, (v) => f(v));
+  }
+
+  /// Writes the potentially `null` [value] to this data sink. If [value] is
+  /// non-null [f] is called to write the non-null value to the data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readValueOrNull].
+  void writeValueOrNull<E>(E value, void f(E value)) {
+    writeBool(value != null);
+    if (value != null) {
+      f(value);
+    }
+  }
+
+  /// Writes the [values] to this data sink calling [f] to write each value to
+  /// the data sink. If [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readList].
+  void writeList<E>(Iterable<E> values, void f(E value),
+      {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      values.forEach(f);
+    }
+  }
+
+  /// Writes the boolean [value] to this data sink.
+  void writeBool(bool value) {
+    assert(value != null);
+    _writeDataKind(DataKind.bool);
+    _writeBool(value);
+  }
+
+  void _writeBool(bool value) {
+    _sinkWriter.writeInt(value ? 1 : 0);
+  }
+
+  /// Writes the non-negative 30 bit integer [value] to this data sink.
+  void writeInt(int value) {
+    assert(value != null);
+    assert(value >= 0 && value >> 30 == 0);
+    _writeDataKind(DataKind.uint30);
+    _sinkWriter.writeInt(value);
+  }
+
+  /// Writes the potentially `null` non-negative [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readIntOrNull].
+  void writeIntOrNull(int value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeInt(value);
+    }
+  }
+
+  /// Writes the string [value] to this data sink.
+  void writeString(String value) {
+    assert(value != null);
+    _writeDataKind(DataKind.string);
+    _writeString(value);
+  }
+
+  void _writeString(String value) {
+    _stringIndex.write(value, _sinkWriter.writeString);
+  }
+
+  /// Writes the potentially `null` string [value] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readStringOrNull].
+  void writeStringOrNull(String value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeString(value);
+    }
+  }
+
+  /// Writes the [map] from string to [V] values to this data sink, calling [f]
+  /// to write each value to the data sink. If [allowNull] is `true`, [map] is
+  /// allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readStringMap].
+  void writeStringMap<V>(Map<String, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((String key, V value) {
+        writeString(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes the string [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readStrings].
+  void writeStrings(Iterable<String> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (String value in values) {
+        writeString(value);
+      }
+    }
+  }
+
+  /// Writes the enum value [value] to this data sink.
+  // TODO(johnniwinther): Change the signature to
+  // `void writeEnum<E extends Enum<E>>(E value);` when an interface for enums
+  // is added to the language.
+  void writeEnum(dynamic value) {
+    _writeDataKind(DataKind.enumValue);
+    _sinkWriter.writeEnum(value);
+  }
+
+  /// Writes the URI [value] to this data sink.
+  void writeUri(Uri value) {
+    assert(value != null);
+    _writeDataKind(DataKind.uri);
+    _writeUri(value);
+  }
+
+  void _writeUri(Uri value) {
+    _uriIndex.write(value, _doWriteUri);
+  }
+
+  void _doWriteUri(Uri value) {
+    _writeString(value.toString());
+  }
+
+  /// Writes a reference to the kernel library node [value] to this data sink.
+  void writeLibraryNode(ir.Library value) {
+    _writeDataKind(DataKind.libraryNode);
+    _writeLibraryNode(value);
+  }
+
+  void _writeLibraryNode(ir.Library value) {
+    _writeUri(value.importUri);
+  }
+
+  /// Writes a reference to the kernel class node [value] to this data sink.
+  void writeClassNode(ir.Class value) {
+    _writeDataKind(DataKind.classNode);
+    _writeClassNode(value);
+  }
+
+  void _writeClassNode(ir.Class value) {
+    _writeLibraryNode(value.enclosingLibrary);
+    _writeString(value.name);
+  }
+
+  /// Writes a reference to the kernel typedef node [value] to this data sink.
+  void writeTypedefNode(ir.Typedef value) {
+    _writeDataKind(DataKind.typedefNode);
+    _writeTypedefNode(value);
+  }
+
+  void _writeTypedefNode(ir.Typedef value) {
+    _writeLibraryNode(value.enclosingLibrary);
+    _writeString(value.name);
+  }
+
+  /// Writes a reference to the kernel member node [value] to this data sink.
+  void writeMemberNode(ir.Member value) {
+    _writeDataKind(DataKind.memberNode);
+    _writeMemberNode(value);
+  }
+
+  void _writeMemberNode(ir.Member value) {
+    _memberNodeIndex.write(value, _writeMemberNodeInternal);
+  }
+
+  void _writeMemberNodeInternal(ir.Member value) {
+    ir.Class cls = value.enclosingClass;
+    if (cls != null) {
+      _sinkWriter.writeEnum(MemberContextKind.cls);
+      _writeClassNode(cls);
+      _writeString(_computeMemberName(value));
+    } else {
+      _sinkWriter.writeEnum(MemberContextKind.library);
+      _writeLibraryNode(value.enclosingLibrary);
+      _writeString(_computeMemberName(value));
+    }
+  }
+
+  /// Writes references to the kernel member node [values] to this data sink.
+  /// If [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readMemberNodes].
+  void writeMemberNodes(Iterable<ir.Member> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ir.Member value in values) {
+        writeMemberNode(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to kernel member nodes to [V] values to
+  /// this data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readMemberNodeMap].
+  void writeMemberNodeMap<V>(Map<ir.Member, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ir.Member key, V value) {
+        writeMemberNode(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a kernel name node to this data sink.
+  void writeName(ir.Name value) {
+    writeString(value.text);
+    writeValueOrNull(value.library, writeLibraryNode);
+  }
+
+  /// Writes a kernel library dependency node [value] to this data sink.
+  void writeLibraryDependencyNode(ir.LibraryDependency value) {
+    ir.Library library = value.parent;
+    writeLibraryNode(library);
+    writeInt(library.dependencies.indexOf(value));
+  }
+
+  /// Writes a potentially `null` kernel library dependency node [value] to
+  /// this data sink.
+  void writeLibraryDependencyNodeOrNull(ir.LibraryDependency value) {
+    writeValueOrNull(value, writeLibraryDependencyNode);
+  }
+
+  /// Writes a reference to the kernel tree node [value] to this data sink.
+  void writeTreeNode(ir.TreeNode value) {
+    _writeDataKind(DataKind.treeNode);
+    _writeTreeNode(value, null);
+  }
+
+  void _writeTreeNode(ir.TreeNode value, _MemberData memberData) {
+    if (value is ir.Class) {
+      _sinkWriter.writeEnum(_TreeNodeKind.cls);
+      _writeClassNode(value);
+    } else if (value is ir.Member) {
+      _sinkWriter.writeEnum(_TreeNodeKind.member);
+      _writeMemberNode(value);
+    } else if (value is ir.VariableDeclaration &&
+        value.parent is ir.FunctionDeclaration) {
+      _sinkWriter.writeEnum(_TreeNodeKind.functionDeclarationVariable);
+      _writeTreeNode(value.parent, memberData);
+    } else if (value is ir.FunctionNode) {
+      _sinkWriter.writeEnum(_TreeNodeKind.functionNode);
+      _writeFunctionNode(value, memberData);
+    } else if (value is ir.TypeParameter) {
+      _sinkWriter.writeEnum(_TreeNodeKind.typeParameter);
+      _writeTypeParameter(value, memberData);
+    } else if (value is ConstantReference) {
+      _sinkWriter.writeEnum(_TreeNodeKind.constant);
+      memberData ??= _getMemberData(value.expression);
+      _writeTreeNode(value.expression, memberData);
+      int index =
+          memberData.getIndexByConstant(value.expression, value.constant);
+      _sinkWriter.writeInt(index);
+    } else {
+      _sinkWriter.writeEnum(_TreeNodeKind.node);
+      memberData ??= _getMemberData(value);
+      int index = memberData.getIndexByTreeNode(value);
+      assert(
+          index != null,
+          "No TreeNode index found for ${value.runtimeType} "
+          "found in ${memberData}.");
+      _sinkWriter.writeInt(index);
+    }
+  }
+
+  /// Writes a reference to the potentially `null` kernel tree node [value]
+  /// to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodeOrNull].
+  void writeTreeNodeOrNull(ir.TreeNode value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeTreeNode(value);
+    }
+  }
+
+  /// Writes references to the kernel tree node [values] to this data sink.
+  /// If [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodes].
+  void writeTreeNodes(Iterable<ir.TreeNode> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ir.TreeNode value in values) {
+        writeTreeNode(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to kernel tree nodes to [V] values to
+  /// this data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodeMap].
+  void writeTreeNodeMap<V>(Map<ir.TreeNode, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ir.TreeNode key, V value) {
+        writeTreeNode(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a reference to the kernel tree node [value] in the known [context]
+  /// to this data sink.
+  void writeTreeNodeInContext(ir.TreeNode value) {
+    writeTreeNodeInContextInternal(value, currentMemberData);
+  }
+
+  void writeTreeNodeInContextInternal(
+      ir.TreeNode value, _MemberData memberData) {
+    _writeDataKind(DataKind.treeNode);
+    _writeTreeNode(value, memberData);
+  }
+
+  /// Writes a reference to the potentially `null` kernel tree node [value] in
+  /// the known [context] to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodeOrNullInContext].
+  void writeTreeNodeOrNullInContext(ir.TreeNode value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeTreeNodeInContextInternal(value, currentMemberData);
+    }
+  }
+
+  /// Writes references to the kernel tree node [values] in the known [context]
+  /// to this data sink. If [allowNull] is `true`, [values] is allowed to be
+  /// `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodesInContext].
+  void writeTreeNodesInContext(Iterable<ir.TreeNode> values,
+      {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ir.TreeNode value in values) {
+        writeTreeNodeInContextInternal(value, currentMemberData);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to kernel tree nodes to [V] values in the
+  /// known [context] to this data sink, calling [f] to write each value to the
+  /// data sink. If [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTreeNodeMapInContext].
+  void writeTreeNodeMapInContext<V>(Map<ir.TreeNode, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ir.TreeNode key, V value) {
+        writeTreeNodeInContextInternal(key, currentMemberData);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a reference to the kernel type parameter node [value] to this data
+  /// sink.
+  void writeTypeParameterNode(ir.TypeParameter value) {
+    _writeDataKind(DataKind.typeParameterNode);
+    _writeTypeParameter(value, null);
+  }
+
+  void _writeTypeParameter(ir.TypeParameter value, _MemberData memberData) {
+    ir.TreeNode parent = value.parent;
+    if (parent is ir.Class) {
+      _sinkWriter.writeEnum(_TypeParameterKind.cls);
+      _writeClassNode(parent);
+      _sinkWriter.writeInt(parent.typeParameters.indexOf(value));
+    } else if (parent is ir.FunctionNode) {
+      _sinkWriter.writeEnum(_TypeParameterKind.functionNode);
+      _writeFunctionNode(parent, memberData);
+      _sinkWriter.writeInt(parent.typeParameters.indexOf(value));
+    } else {
+      throw UnsupportedError(
+          "Unsupported TypeParameter parent ${parent.runtimeType}");
+    }
+  }
+
+  /// Writes references to the kernel type parameter node [values] to this data
+  /// sink.
+  /// If [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTypeParameterNodes].
+  void writeTypeParameterNodes(Iterable<ir.TypeParameter> values,
+      {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ir.TypeParameter value in values) {
+        writeTypeParameterNode(value);
+      }
+    }
+  }
+
+  /// Writes the type [value] to this data sink. If [allowNull] is `true`,
+  /// [value] is allowed to be `null`.
+  void writeDartType(DartType value, {bool allowNull = false}) {
+    _writeDataKind(DataKind.dartType);
+    _writeDartType(value, [], allowNull: allowNull);
+  }
+
+  void _writeDartType(
+      DartType value, List<FunctionTypeVariable> functionTypeVariables,
+      {bool allowNull = false}) {
+    if (value == null) {
+      if (!allowNull) {
+        throw UnsupportedError("Missing DartType is not allowed.");
+      }
+      writeEnum(DartTypeKind.none);
+    } else {
+      value.writeToDataSink(this, functionTypeVariables);
+    }
+  }
+
+  /// Writes the type [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readDartTypes].
+  void writeDartTypes(Iterable<DartType> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (DartType value in values) {
+        writeDartType(value);
+      }
+    }
+  }
+
+  /// Writes the kernel type node [value] to this data sink. If [allowNull] is
+  /// `true`, [value] is allowed to be `null`.
+  void writeDartTypeNode(ir.DartType value, {bool allowNull = false}) {
+    _writeDataKind(DataKind.dartTypeNode);
+    _writeDartTypeNode(value, [], allowNull: allowNull);
+  }
+
+  void _writeDartTypeNode(
+      ir.DartType value, List<ir.TypeParameter> functionTypeVariables,
+      {bool allowNull = false}) {
+    if (value == null) {
+      if (!allowNull) {
+        throw UnsupportedError("Missing ir.DartType node is not allowed.");
+      }
+      writeEnum(DartTypeNodeKind.none);
+    } else {
+      value.accept1(_dartTypeNodeWriter, functionTypeVariables);
+    }
+  }
+
+  /// Writes the kernel type node [values] to this data sink. If [allowNull] is
+  /// `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readDartTypeNodes].
+  void writeDartTypeNodes(Iterable<ir.DartType> values,
+      {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ir.DartType value in values) {
+        writeDartTypeNode(value);
+      }
+    }
+  }
+
+  /// Writes the source span [value] to this data sink.
+  void writeSourceSpan(SourceSpan value) {
+    _writeDataKind(DataKind.sourceSpan);
+    _writeUri(value.uri);
+    _sinkWriter.writeInt(value.begin);
+    _sinkWriter.writeInt(value.end);
+  }
+
+  /// Writes a reference to the indexed library [value] to this data sink.
+  void writeLibrary(IndexedLibrary value) {
+    _entityWriter.writeLibraryToDataSink(this, value);
+  }
+
+  /// Writes a reference to the potentially `null` indexed library [value]
+  /// to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readLibraryOrNull].
+  void writeLibraryOrNull(IndexedLibrary value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeLibrary(value);
+    }
+  }
+
+  /// Writes the [map] from references to indexed libraries to [V] values to
+  /// this data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readLibraryMap].
+  void writeLibraryMap<V>(Map<LibraryEntity, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((LibraryEntity library, V value) {
+        writeLibrary(library);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a reference to the indexed class [value] to this data sink.
+  void writeClass(IndexedClass value) {
+    _entityWriter.writeClassToDataSink(this, value);
+  }
+
+  /// Writes a reference to the potentially `null` indexed class [value]
+  /// to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readClassOrNull].
+  void writeClassOrNull(IndexedClass value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeClass(value);
+    }
+  }
+
+  /// Writes references to the indexed class [values] to this data sink. If
+  /// [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readClasses].
+  void writeClasses(Iterable<ClassEntity> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (IndexedClass value in values) {
+        writeClass(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to indexed classes to [V] values to this
+  /// data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readClassMap].
+  void writeClassMap<V>(Map<ClassEntity, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ClassEntity cls, V value) {
+        writeClass(cls);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a reference to the indexed member [value] to this data sink.
+  void writeMember(IndexedMember value) {
+    _entityWriter.writeMemberToDataSink(this, value);
+  }
+
+  /// Writes a reference to the potentially `null` indexed member [value]
+  /// to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readMemberOrNull].
+  void writeMemberOrNull(IndexedMember value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeMember(value);
+    }
+  }
+
+  /// Writes references to the indexed member [values] to this data sink. If
+  /// [allowNull] is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readMembers].
+  void writeMembers(Iterable<MemberEntity> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (IndexedMember value in values) {
+        writeMember(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to indexed members to [V] values to this
+  /// data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readMemberMap].
+  void writeMemberMap<V>(
+      Map<MemberEntity, V> map, void f(MemberEntity member, V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((MemberEntity member, V value) {
+        writeMember(member);
+        f(member, value);
+      });
+    }
+  }
+
+  /// Writes a reference to the indexed type variable [value] to this data sink.
+  void writeTypeVariable(IndexedTypeVariable value) {
+    _entityWriter.writeTypeVariableToDataSink(this, value);
+  }
+
+  /// Writes the [map] from references to indexed type variables to [V] values
+  /// to this data sink, calling [f] to write each value to the data sink. If
+  /// [allowNull] is `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readTypeVariableMap].
+  void writeTypeVariableMap<V>(Map<IndexedTypeVariable, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((IndexedTypeVariable key, V value) {
+        writeTypeVariable(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a reference to the local [value] to this data sink.
+  void writeLocal(Local local) {
+    if (local is JLocal) {
+      writeEnum(LocalKind.jLocal);
+      writeMember(local.memberContext);
+      writeInt(local.localIndex);
+    } else if (local is ThisLocal) {
+      writeEnum(LocalKind.thisLocal);
+      writeClass(local.enclosingClass);
+    } else if (local is BoxLocal) {
+      writeEnum(LocalKind.boxLocal);
+      writeClass(local.container);
+    } else if (local is AnonymousClosureLocal) {
+      writeEnum(LocalKind.anonymousClosureLocal);
+      writeClass(local.closureClass);
+    } else if (local is TypeVariableLocal) {
+      writeEnum(LocalKind.typeVariableLocal);
+      writeTypeVariable(local.typeVariable);
+    } else {
+      throw UnsupportedError("Unsupported local ${local.runtimeType}");
+    }
+  }
+
+  /// Writes a reference to the potentially `null` local [value]
+  /// to this data sink.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readLocalOrNull].
+  void writeLocalOrNull(Local value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeLocal(value);
+    }
+  }
+
+  /// Writes references to the local [values] to this data sink. If [allowNull]
+  /// is `true`, [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readLocals].
+  void writeLocals(Iterable<Local> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (Local value in values) {
+        writeLocal(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from references to locals to [V] values to this data
+  /// sink, calling [f] to write each value to the data sink. If [allowNull] is
+  /// `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readLocalMap].
+  void writeLocalMap<V>(Map<Local, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((Local key, V value) {
+        writeLocal(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes the constant [value] to this data sink.
+  void writeConstant(ConstantValue value) {
+    _writeDataKind(DataKind.constant);
+    _writeConstant(value);
+  }
+
+  void _writeConstant(ConstantValue value) {
+    _constantIndex.write(value, _writeConstantInternal);
+  }
+
+  void _writeConstantInternal(ConstantValue value) {
+    _sinkWriter.writeEnum(value.kind);
+    switch (value.kind) {
+      case ConstantValueKind.BOOL:
+        BoolConstantValue constant = value;
+        writeBool(constant.boolValue);
+        break;
+      case ConstantValueKind.INT:
+        IntConstantValue constant = value;
+        _writeBigInt(constant.intValue);
+        break;
+      case ConstantValueKind.DOUBLE:
+        DoubleConstantValue constant = value;
+        _writeDoubleValue(constant.doubleValue);
+        break;
+      case ConstantValueKind.STRING:
+        StringConstantValue constant = value;
+        writeString(constant.stringValue);
+        break;
+      case ConstantValueKind.NULL:
+        break;
+      case ConstantValueKind.FUNCTION:
+        FunctionConstantValue constant = value;
+        IndexedFunction function = constant.element;
+        writeMember(function);
+        writeDartType(constant.type);
+        break;
+      case ConstantValueKind.LIST:
+        ListConstantValue constant = value;
+        writeDartType(constant.type);
+        writeConstants(constant.entries);
+        break;
+      case ConstantValueKind.SET:
+        constant_system.JavaScriptSetConstant constant = value;
+        writeDartType(constant.type);
+        writeConstant(constant.entries);
+        break;
+      case ConstantValueKind.MAP:
+        constant_system.JavaScriptMapConstant constant = value;
+        writeDartType(constant.type);
+        writeConstant(constant.keyList);
+        writeConstants(constant.values);
+        writeBool(constant.onlyStringKeys);
+        break;
+      case ConstantValueKind.CONSTRUCTED:
+        ConstructedConstantValue constant = value;
+        writeDartType(constant.type);
+        writeMemberMap(constant.fields,
+            (MemberEntity member, ConstantValue value) => writeConstant(value));
+        break;
+      case ConstantValueKind.TYPE:
+        TypeConstantValue constant = value;
+        writeDartType(constant.representedType);
+        writeDartType(constant.type);
+        break;
+      case ConstantValueKind.INSTANTIATION:
+        InstantiationConstantValue constant = value;
+        writeDartTypes(constant.typeArguments);
+        writeConstant(constant.function);
+        break;
+      case ConstantValueKind.NON_CONSTANT:
+        break;
+      case ConstantValueKind.INTERCEPTOR:
+        InterceptorConstantValue constant = value;
+        writeClass(constant.cls);
+        break;
+      case ConstantValueKind.DEFERRED_GLOBAL:
+        DeferredGlobalConstantValue constant = value;
+        writeConstant(constant.referenced);
+        writeOutputUnitReference(constant.unit);
+        break;
+      case ConstantValueKind.DUMMY_INTERCEPTOR:
+        break;
+      case ConstantValueKind.LATE_SENTINEL:
+        break;
+      case ConstantValueKind.UNREACHABLE:
+        break;
+      case ConstantValueKind.JS_NAME:
+        JsNameConstantValue constant = value;
+        writeJsNode(constant.name);
+        break;
+    }
+  }
+
+  /// Writes the potentially `null` constant [value] to this data sink.
+  void writeConstantOrNull(ConstantValue value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeConstant(value);
+    }
+  }
+
+  /// Writes constant [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readConstants].
+  void writeConstants(Iterable<ConstantValue> values,
+      {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ConstantValue value in values) {
+        writeConstant(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from constant values to [V] values to this data sink,
+  /// calling [f] to write each value to the data sink. If [allowNull] is
+  /// `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readConstantMap].
+  void writeConstantMap<V>(Map<ConstantValue, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ConstantValue key, V value) {
+        writeConstant(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes a double value to this data sink.
+  void writeDoubleValue(double value) {
+    _writeDataKind(DataKind.double);
+    _writeDoubleValue(value);
+  }
+
+  void _writeDoubleValue(double value) {
+    ByteData data = ByteData(8);
+    data.setFloat64(0, value);
+    writeInt(data.getUint16(0));
+    writeInt(data.getUint16(2));
+    writeInt(data.getUint16(4));
+    writeInt(data.getUint16(6));
+  }
+
+  /// Writes an integer of arbitrary value to this data sink.
+  ///
+  /// This is should only when the value is not known to be a non-negative
+  /// 30 bit integer. Otherwise [writeInt] should be used.
+  void writeIntegerValue(int value) {
+    _writeDataKind(DataKind.int);
+    _writeBigInt(BigInt.from(value));
+  }
+
+  void _writeBigInt(BigInt value) {
+    writeString(value.toString());
+  }
+
+  /// Writes the import [value] to this data sink.
+  void writeImport(ImportEntity value) {
+    _writeDataKind(DataKind.import);
+    _writeImport(value);
+  }
+
+  void _writeImport(ImportEntity value) {
+    _importIndex.write(value, _writeImportInternal);
+  }
+
+  void _writeImportInternal(ImportEntity value) {
+    // TODO(johnniwinther): Do we need to serialize non-deferred imports?
+    writeStringOrNull(value.name);
+    _writeUri(value.uri);
+    _writeUri(value.enclosingLibraryUri);
+    _writeBool(value.isDeferred);
+  }
+
+  /// Writes the potentially `null` import [value] to this data sink.
+  void writeImportOrNull(ImportEntity value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeImport(value);
+    }
+  }
+
+  /// Writes import [values] to this data sink. If [allowNull] is `true`,
+  /// [values] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readImports].
+  void writeImports(Iterable<ImportEntity> values, {bool allowNull = false}) {
+    if (values == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(values.length);
+      for (ImportEntity value in values) {
+        writeImport(value);
+      }
+    }
+  }
+
+  /// Writes the [map] from imports to [V] values to this data sink,
+  /// calling [f] to write each value to the data sink. If [allowNull] is
+  /// `true`, [map] is allowed to be `null`.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSourceReader.readImportMap].
+  void writeImportMap<V>(Map<ImportEntity, V> map, void f(V value),
+      {bool allowNull = false}) {
+    if (map == null) {
+      assert(allowNull);
+      writeInt(0);
+    } else {
+      writeInt(map.length);
+      map.forEach((ImportEntity key, V value) {
+        writeImport(key);
+        f(value);
+      });
+    }
+  }
+
+  /// Writes an abstract [value] to this data sink.
+  ///
+  /// This feature is only available a [CodegenWriter] has been registered.
+  void writeAbstractValue(AbstractValue value) {
+    assert(_codegenWriter != null,
+        "Can not serialize an AbstractValue without a registered codegen writer.");
+    _codegenWriter.writeAbstractValue(this, value);
+  }
+
+  /// Writes a reference to the output unit [value] to this data sink.
+  ///
+  /// This feature is only available a [CodegenWriter] has been registered.
+  void writeOutputUnitReference(OutputUnit value) {
+    assert(
+        _codegenWriter != null,
+        "Can not serialize an OutputUnit reference "
+        "without a registered codegen writer.");
+    _codegenWriter.writeOutputUnitReference(this, value);
+  }
+
+  /// Writes a js node [value] to this data sink.
+  ///
+  /// This feature is only available a [CodegenWriter] has been registered.
+  void writeJsNode(js.Node value) {
+    assert(_codegenWriter != null,
+        "Can not serialize a JS node without a registered codegen writer.");
+    _codegenWriter.writeJsNode(this, value);
+  }
+
+  /// Writes a potentially `null` js node [value] to this data sink.
+  ///
+  /// This feature is only available a [CodegenWriter] has been registered.
+  void writeJsNodeOrNull(js.Node value) {
+    writeBool(value != null);
+    if (value != null) {
+      writeJsNode(value);
+    }
+  }
+
+  /// Writes TypeRecipe [value] to this data sink.
+  ///
+  /// This feature is only available a [CodegenWriter] has been registered.
+  void writeTypeRecipe(TypeRecipe value) {
+    assert(_codegenWriter != null,
+        "Can not serialize a TypeRecipe without a registered codegen writer.");
+    _codegenWriter.writeTypeRecipe(this, value);
+  }
+
+  /// Register an [EntityWriter] with this data sink for non-default encoding
+  /// of entity references.
+  void registerEntityWriter(EntityWriter writer) {
+    assert(writer != null);
+    _entityWriter = writer;
+  }
+
+  /// Register a [CodegenWriter] with this data sink to support serialization
+  /// of codegen only data.
+  void registerCodegenWriter(CodegenWriter writer) {
+    assert(writer != null);
+    assert(_codegenWriter == null);
+    _codegenWriter = writer;
+  }
+
+  /// Invoke [f] in the context of [member]. This sets up support for
+  /// serialization of `ir.TreeNode`s using the `writeTreeNode*InContext`
+  /// methods.
+  void inMemberContext(ir.Member context, void f()) {
+    ir.Member oldMemberContext = _currentMemberContext;
+    _MemberData oldMemberData = _currentMemberData;
+    _currentMemberContext = context;
+    _currentMemberData = null;
+    f();
+    _currentMemberData = oldMemberData;
+    _currentMemberContext = oldMemberContext;
+  }
+
+  _MemberData get currentMemberData {
+    assert(_currentMemberContext != null,
+        "DataSink has no current member context.");
+    return _currentMemberData ??= _memberData[_currentMemberContext] ??=
+        _MemberData(_currentMemberContext);
+  }
+
+  _MemberData _getMemberData(ir.TreeNode node) {
+    ir.TreeNode member = node;
+    while (member is! ir.Member) {
+      if (member == null) {
+        throw UnsupportedError("No enclosing member of TreeNode "
+            "$node (${node.runtimeType})");
+      }
+      member = member.parent;
+    }
+    _writeMemberNode(member);
+    return _memberData[member] ??= _MemberData(member);
+  }
+
+  void _writeFunctionNode(ir.FunctionNode value, _MemberData memberData) {
+    ir.TreeNode parent = value.parent;
+    if (parent is ir.Procedure) {
+      _sinkWriter.writeEnum(_FunctionNodeKind.procedure);
+      _writeMemberNode(parent);
+    } else if (parent is ir.Constructor) {
+      _sinkWriter.writeEnum(_FunctionNodeKind.constructor);
+      _writeMemberNode(parent);
+    } else if (parent is ir.FunctionExpression) {
+      _sinkWriter.writeEnum(_FunctionNodeKind.functionExpression);
+      _writeTreeNode(parent, memberData);
+    } else if (parent is ir.FunctionDeclaration) {
+      _sinkWriter.writeEnum(_FunctionNodeKind.functionDeclaration);
+      _writeTreeNode(parent, memberData);
+    } else {
+      throw UnsupportedError(
+          "Unsupported FunctionNode parent ${parent.runtimeType}");
+    }
+  }
+
+  void _writeDataKind(DataKind kind) {
+    if (useDataKinds) _sinkWriter.writeEnum(kind);
+  }
+}
diff --git a/pkg/compiler/lib/src/serialization/source.dart b/pkg/compiler/lib/src/serialization/source.dart
new file mode 100644
index 0000000..b43c1ad
--- /dev/null
+++ b/pkg/compiler/lib/src/serialization/source.dart
@@ -0,0 +1,1336 @@
+// Copyright (c) 2018, 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.
+
+part of 'serialization.dart';
+
+/// Interface handling [DataSourceReader] low-level data deserialization.
+///
+/// Each implementation of [DataSource] should have a corresponding
+/// [DataSink] for which it deserializes data.
+abstract class DataSource {
+  /// Deserialization of a section begin tag.
+  void begin(String tag);
+
+  /// Deserialization of a section end tag.
+  void end(String tag);
+
+  /// Deserialization of a string value.
+  String readString();
+
+  /// Deserialization of a non-negative integer value.
+  int readInt();
+
+  /// Deserialization of an enum value in [values].
+  E readEnum<E>(List<E> values);
+
+  /// Returns a string representation of the current state of the data source
+  /// useful for debugging in consistencies between serialization and
+  /// deserialization.
+  String get errorContext;
+}
+
+/// Deserialization reader
+///
+/// To be used with [DataSinkWriter] to read and write serialized data.
+/// Deserialization format is deferred to provided [DataSource].
+class DataSourceReader {
+  final DataSource _sourceReader;
+
+  static final List<ir.DartType> emptyListOfDartTypes =
+      List<ir.DartType>.filled(0, null, growable: false);
+
+  final bool useDataKinds;
+  DataSourceIndices importedIndices;
+  EntityReader _entityReader = const EntityReader();
+  ComponentLookup _componentLookup;
+  EntityLookup _entityLookup;
+  LocalLookup _localLookup;
+  CodegenReader _codegenReader;
+
+  IndexedSource<String> _stringIndex;
+  IndexedSource<Uri> _uriIndex;
+  IndexedSource<_MemberData> _memberNodeIndex;
+  IndexedSource<ImportEntity> _importIndex;
+  IndexedSource<ConstantValue> _constantIndex;
+
+  final Map<Type, IndexedSource> _generalCaches = {};
+
+  ir.Member _currentMemberContext;
+  _MemberData _currentMemberData;
+
+  IndexedSource<T> _createSource<T>() {
+    if (importedIndices == null || !importedIndices.caches.containsKey(T)) {
+      return IndexedSource<T>(this._sourceReader);
+    } else {
+      List<T> cacheCopy = importedIndices.caches[T].cacheAsList.toList();
+      return IndexedSource<T>(this._sourceReader, cache: cacheCopy);
+    }
+  }
+
+  DataSourceReader(this._sourceReader,
+      {this.useDataKinds = false, this.importedIndices}) {
+    _stringIndex = _createSource<String>();
+    _uriIndex = _createSource<Uri>();
+    _memberNodeIndex = _createSource<_MemberData>();
+    _importIndex = _createSource<ImportEntity>();
+    _constantIndex = _createSource<ConstantValue>();
+  }
+
+  /// Exports [DataSourceIndices] for use in other [DataSourceReader]s and
+  /// [DataSinkWriter]s.
+  DataSourceIndices exportIndices() {
+    var indices = DataSourceIndices();
+    indices.caches[String] = DataSourceTypeIndices(_stringIndex.cache);
+    indices.caches[Uri] = DataSourceTypeIndices(_uriIndex.cache);
+    indices.caches[ImportEntity] = DataSourceTypeIndices(_importIndex.cache);
+    // _memberNodeIndex needs two entries depending on if the indices will be
+    // consumed by a [DataSource] or [DataSink].
+    indices.caches[_MemberData] = DataSourceTypeIndices(_memberNodeIndex.cache);
+    indices.caches[ir.Member] = DataSourceTypeIndices<ir.Member, _MemberData>(
+        _memberNodeIndex.cache, (_MemberData data) => data?.node);
+    indices.caches[ConstantValue] = DataSourceTypeIndices(_constantIndex.cache);
+    _generalCaches.forEach((type, indexedSource) {
+      indices.caches[type] = DataSourceTypeIndices(indexedSource.cache);
+    });
+    return indices;
+  }
+
+  /// Registers that the section [tag] starts.
+  ///
+  /// This is used for debugging to verify that sections are correctly aligned
+  /// between serialization and deserialization.
+  void begin(String tag) {
+    if (useDataKinds) _sourceReader.begin(tag);
+  }
+
+  /// Registers that the section [tag] ends.
+  ///
+  /// This is used for debugging to verify that sections are correctly aligned
+  /// between serialization and deserialization.
+  void end(String tag) {
+    if (useDataKinds) _sourceReader.end(tag);
+  }
+
+  /// Registers a [ComponentLookup] object with this data source to support
+  /// deserialization of references to kernel nodes.
+  void registerComponentLookup(ComponentLookup componentLookup) {
+    assert(_componentLookup == null);
+    _componentLookup = componentLookup;
+  }
+
+  ComponentLookup get componentLookup {
+    assert(_componentLookup != null);
+    return _componentLookup;
+  }
+
+  /// Registers an [EntityLookup] object with this data source to support
+  /// deserialization of references to indexed entities.
+  void registerEntityLookup(EntityLookup entityLookup) {
+    assert(_entityLookup == null);
+    _entityLookup = entityLookup;
+  }
+
+  EntityLookup get entityLookup {
+    assert(_entityLookup != null);
+    return _entityLookup;
+  }
+
+  /// Registers an [EntityReader] with this data source for non-default encoding
+  /// of entity references.
+  void registerEntityReader(EntityReader reader) {
+    assert(reader != null);
+    _entityReader = reader;
+  }
+
+  /// Registers a [LocalLookup] object with this data source to support
+  void registerLocalLookup(LocalLookup localLookup) {
+    assert(_localLookup == null);
+    _localLookup = localLookup;
+  }
+
+  LocalLookup get localLookup {
+    assert(_localLookup != null);
+    return _localLookup;
+  }
+
+  /// Registers a [CodegenReader] with this data source to support
+  /// deserialization of codegen only data.
+  void registerCodegenReader(CodegenReader reader) {
+    assert(reader != null);
+    assert(_codegenReader == null);
+    _codegenReader = reader;
+  }
+
+  /// Unregisters the [CodegenReader] from this data source to remove support
+  /// for deserialization of codegen only data.
+  void deregisterCodegenReader(CodegenReader reader) {
+    assert(_codegenReader == reader);
+    _codegenReader = null;
+  }
+
+  /// Invoke [f] in the context of [member]. This sets up support for
+  /// deserialization of `ir.TreeNode`s using the `readTreeNode*InContext`
+  /// methods.
+  T inMemberContext<T>(ir.Member context, T f()) {
+    ir.Member oldMemberContext = _currentMemberContext;
+    _MemberData oldMemberData = _currentMemberData;
+    _currentMemberContext = context;
+    _currentMemberData = null;
+    T result = f();
+    _currentMemberData = oldMemberData;
+    _currentMemberContext = oldMemberContext;
+    return result;
+  }
+
+  _MemberData get currentMemberData {
+    assert(_currentMemberContext != null,
+        "DataSink has no current member context.");
+    return _currentMemberData ??= _getMemberData(_currentMemberContext);
+  }
+
+  /// Reads a reference to an [E] value from this data source. If the value has
+  /// not yet been deserialized, [f] is called to deserialize the value itself.
+  E readCached<E>(E f()) {
+    IndexedSource source = _generalCaches[E] ??= _createSource<E>();
+    return source.read(f);
+  }
+
+  /// Reads a potentially `null` [E] value from this data source, calling [f] to
+  /// read the non-null value from the data source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeValueOrNull].
+  E readValueOrNull<E>(E f()) {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return f();
+    }
+    return null;
+  }
+
+  /// Reads a list of [E] values from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeList].
+  List<E> readList<E>(E f(), {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = f();
+    }
+    return list;
+  }
+
+  bool readBool() {
+    _checkDataKind(DataKind.bool);
+    return _readBool();
+  }
+
+  /// Reads a boolean value from this data source.
+  bool _readBool() {
+    int value = _sourceReader.readInt();
+    assert(value == 0 || value == 1);
+    return value == 1;
+  }
+
+  /// Reads a non-negative 30 bit integer value from this data source.
+  int readInt() {
+    _checkDataKind(DataKind.uint30);
+    return _sourceReader.readInt();
+  }
+
+  /// Reads a potentially `null` non-negative integer value from this data
+  /// source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeIntOrNull].
+  int readIntOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readInt();
+    }
+    return null;
+  }
+
+  /// Reads a string value from this data source.
+  String readString() {
+    _checkDataKind(DataKind.string);
+    return _readString();
+  }
+
+  String _readString() {
+    return _stringIndex.read(_sourceReader.readString);
+  }
+
+  /// Reads a potentially `null` string value from this data source.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeStringOrNull].
+  String readStringOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readString();
+    }
+    return null;
+  }
+
+  /// Reads a list of string values from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeStrings].
+  List<String> readStrings({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<String> list = List<String>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = readString();
+    }
+    return list;
+  }
+
+  /// Reads a map from string values to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeStringMap].
+  Map<String, V> readStringMap<V>(V f(), {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<String, V> map = {};
+    for (int i = 0; i < count; i++) {
+      String key = readString();
+      V value = f();
+      map[key] = value;
+    }
+    return map;
+  }
+
+  /// Reads an enum value from the list of enum [values] from this data source.
+  ///
+  /// The [values] argument is intended to be the static `.values` field on
+  /// enum classes, for instance:
+  ///
+  ///    enum Foo { bar, baz }
+  ///    ...
+  ///    Foo foo = source.readEnum(Foo.values);
+  ///
+  E readEnum<E>(List<E> values) {
+    _checkDataKind(DataKind.enumValue);
+    return _sourceReader.readEnum(values);
+  }
+
+  /// Reads a URI value from this data source.
+  Uri readUri() {
+    _checkDataKind(DataKind.uri);
+    return _readUri();
+  }
+
+  Uri _readUri() {
+    return _uriIndex.read(_doReadUri);
+  }
+
+  Uri _doReadUri() {
+    return Uri.parse(_readString());
+  }
+
+  /// Reads a reference to a kernel library node from this data source.
+  ir.Library readLibraryNode() {
+    _checkDataKind(DataKind.libraryNode);
+    return _readLibraryData().node;
+  }
+
+  _LibraryData _readLibraryData() {
+    Uri canonicalUri = _readUri();
+    return componentLookup.getLibraryDataByUri(canonicalUri);
+  }
+
+  /// Reads a reference to a kernel class node from this data source.
+  ir.Class readClassNode() {
+    _checkDataKind(DataKind.classNode);
+    return _readClassData().node;
+  }
+
+  _ClassData _readClassData() {
+    _LibraryData library = _readLibraryData();
+    String name = _readString();
+    return library.lookupClassByName(name);
+  }
+
+  /// Reads a reference to a kernel class node from this data source.
+  ir.Typedef readTypedefNode() {
+    _checkDataKind(DataKind.typedefNode);
+    return _readTypedefNode();
+  }
+
+  ir.Typedef _readTypedefNode() {
+    _LibraryData library = _readLibraryData();
+    String name = _readString();
+    return library.lookupTypedef(name);
+  }
+
+  /// Reads a reference to a kernel member node from this data source.
+  ir.Member readMemberNode() {
+    _checkDataKind(DataKind.memberNode);
+    return _readMemberData().node;
+  }
+
+  _MemberData _readMemberData() {
+    return _memberNodeIndex.read(_readMemberDataInternal);
+  }
+
+  _MemberData _readMemberDataInternal() {
+    MemberContextKind kind = _sourceReader.readEnum(MemberContextKind.values);
+    switch (kind) {
+      case MemberContextKind.cls:
+        _ClassData cls = _readClassData();
+        String name = _readString();
+        return cls.lookupMemberDataByName(name);
+      case MemberContextKind.library:
+        _LibraryData library = _readLibraryData();
+        String name = _readString();
+        return library.lookupMemberDataByName(name);
+    }
+    throw UnsupportedError("Unsupported _MemberKind $kind");
+  }
+
+  /// Reads a list of references to kernel member nodes from this data source.
+  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeMemberNodes].
+  List<E> readMemberNodes<E extends ir.Member>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      ir.Member value = readMemberNode();
+      list[i] = value;
+    }
+    return list;
+  }
+
+  /// Reads a map from kernel member nodes to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeMemberNodeMap].
+  Map<K, V> readMemberNodeMap<K extends ir.Member, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ir.Member node = readMemberNode();
+      V value = f();
+      map[node] = value;
+    }
+    return map;
+  }
+
+  /// Reads a kernel name node from this data source.
+  ir.Name readName() {
+    String text = readString();
+    ir.Library library = readValueOrNull(readLibraryNode);
+    return ir.Name(text, library);
+  }
+
+  /// Reads a kernel library dependency node from this data source.
+  ir.LibraryDependency readLibraryDependencyNode() {
+    ir.Library library = readLibraryNode();
+    int index = readInt();
+    return library.dependencies[index];
+  }
+
+  /// Reads a potentially `null` kernel library dependency node from this data
+  /// source.
+  ir.LibraryDependency readLibraryDependencyNodeOrNull() {
+    return readValueOrNull(readLibraryDependencyNode);
+  }
+
+  /// Reads a reference to a kernel tree node from this data source.
+  ir.TreeNode readTreeNode() {
+    _checkDataKind(DataKind.treeNode);
+    return _readTreeNode(null);
+  }
+
+  ir.TreeNode _readTreeNode(_MemberData memberData) {
+    _TreeNodeKind kind = _sourceReader.readEnum(_TreeNodeKind.values);
+    switch (kind) {
+      case _TreeNodeKind.cls:
+        return _readClassData().node;
+      case _TreeNodeKind.member:
+        return _readMemberData().node;
+      case _TreeNodeKind.functionDeclarationVariable:
+        ir.FunctionDeclaration functionDeclaration = _readTreeNode(memberData);
+        return functionDeclaration.variable;
+      case _TreeNodeKind.functionNode:
+        return _readFunctionNode(memberData);
+      case _TreeNodeKind.typeParameter:
+        return _readTypeParameter(memberData);
+      case _TreeNodeKind.constant:
+        memberData ??= _readMemberData();
+        ir.ConstantExpression expression = _readTreeNode(memberData);
+        ir.Constant constant =
+            memberData.getConstantByIndex(expression, _sourceReader.readInt());
+        return ConstantReference(expression, constant);
+      case _TreeNodeKind.node:
+        memberData ??= _readMemberData();
+        int index = _sourceReader.readInt();
+        ir.TreeNode treeNode = memberData.getTreeNodeByIndex(index);
+        assert(
+            treeNode != null,
+            "No TreeNode found for index $index in "
+            "${memberData.node}.${_sourceReader.errorContext}");
+        return treeNode;
+    }
+    throw UnsupportedError("Unexpected _TreeNodeKind $kind");
+  }
+
+  /// Reads a reference to a potentially `null` kernel tree node from this data
+  /// source.
+  ir.TreeNode readTreeNodeOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readTreeNode();
+    }
+    return null;
+  }
+
+  /// Reads a list of references to kernel tree nodes from this data source.
+  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTreeNodes].
+  List<E> readTreeNodes<E extends ir.TreeNode>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      ir.TreeNode node = readTreeNode();
+      list[i] = node;
+    }
+    return list;
+  }
+
+  /// Reads a map from kernel tree nodes to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTreeNodeMap].
+  Map<K, V> readTreeNodeMap<K extends ir.TreeNode, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ir.TreeNode node = readTreeNode();
+      V value = f();
+      map[node] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to a kernel tree node in the known [context] from this
+  /// data source.
+  ir.TreeNode readTreeNodeInContext() {
+    return readTreeNodeInContextInternal(currentMemberData);
+  }
+
+  ir.TreeNode readTreeNodeInContextInternal(_MemberData memberData) {
+    _checkDataKind(DataKind.treeNode);
+    return _readTreeNode(memberData);
+  }
+
+  /// Reads a reference to a potentially `null` kernel tree node in the known
+  /// [context] from this data source.
+  ir.TreeNode readTreeNodeOrNullInContext() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readTreeNodeInContextInternal(currentMemberData);
+    }
+    return null;
+  }
+
+  /// Reads a list of references to kernel tree nodes in the known [context]
+  /// from this data source. If [emptyAsNull] is `true`, `null` is returned
+  /// instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTreeNodesInContext].
+  List<E> readTreeNodesInContext<E extends ir.TreeNode>(
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      ir.TreeNode node = readTreeNodeInContextInternal(currentMemberData);
+      list[i] = node;
+    }
+    return list;
+  }
+
+  /// Reads a map from kernel tree nodes to [V] values in the known [context]
+  /// from this data source, calling [f] to read each value from the data
+  /// source. If [emptyAsNull] is `true`, `null` is returned instead of an empty
+  /// map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTreeNodeMapInContext].
+  Map<K, V> readTreeNodeMapInContext<K extends ir.TreeNode, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ir.TreeNode node = readTreeNodeInContextInternal(currentMemberData);
+      V value = f();
+      map[node] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to a kernel type parameter node from this data source.
+  ir.TypeParameter readTypeParameterNode() {
+    _checkDataKind(DataKind.typeParameterNode);
+    return _readTypeParameter(null);
+  }
+
+  ir.TypeParameter _readTypeParameter(_MemberData memberData) {
+    _TypeParameterKind kind = _sourceReader.readEnum(_TypeParameterKind.values);
+    switch (kind) {
+      case _TypeParameterKind.cls:
+        ir.Class cls = _readClassData().node;
+        return cls.typeParameters[_sourceReader.readInt()];
+      case _TypeParameterKind.functionNode:
+        ir.FunctionNode functionNode = _readFunctionNode(memberData);
+        return functionNode.typeParameters[_sourceReader.readInt()];
+    }
+    throw UnsupportedError("Unexpected _TypeParameterKind kind $kind");
+  }
+
+  /// Reads a list of references to kernel type parameter nodes from this data
+  /// source. If [emptyAsNull] is `true`, `null` is returned instead of an empty
+  /// list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTypeParameterNodes].
+  List<ir.TypeParameter> readTypeParameterNodes({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<ir.TypeParameter> list = List<ir.TypeParameter>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = readTypeParameterNode();
+    }
+    return list;
+  }
+
+  /// Reads a type from this data source. If [allowNull], the returned type is
+  /// allowed to be `null`.
+  DartType readDartType({bool allowNull = false}) {
+    _checkDataKind(DataKind.dartType);
+    DartType type = DartType.readFromDataSource(this, []);
+    assert(type != null || allowNull);
+    return type;
+  }
+
+  /// Reads a list of types from this data source. If [emptyAsNull] is `true`,
+  /// `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeDartTypes].
+  List<DartType> readDartTypes({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<DartType> list = List<DartType>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = readDartType();
+    }
+    return list;
+  }
+
+  /// Reads a kernel type node from this data source. If [allowNull], the
+  /// returned type is allowed to be `null`.
+  ir.DartType readDartTypeNode({bool allowNull = false}) {
+    _checkDataKind(DataKind.dartTypeNode);
+    ir.DartType type = _readDartTypeNode([]);
+    assert(type != null || allowNull);
+    return type;
+  }
+
+  ir.DartType _readDartTypeNode(List<ir.TypeParameter> functionTypeVariables) {
+    DartTypeNodeKind kind = readEnum(DartTypeNodeKind.values);
+    switch (kind) {
+      case DartTypeNodeKind.none:
+        return null;
+      case DartTypeNodeKind.voidType:
+        return const ir.VoidType();
+      case DartTypeNodeKind.invalidType:
+        return const ir.InvalidType();
+      case DartTypeNodeKind.doesNotComplete:
+        return const DoesNotCompleteType();
+      case DartTypeNodeKind.neverType:
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        return ir.NeverType.fromNullability(nullability);
+      case DartTypeNodeKind.typeParameterType:
+        ir.TypeParameter typeParameter = readTypeParameterNode();
+        ir.Nullability typeParameterTypeNullability =
+            readEnum(ir.Nullability.values);
+        ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
+        return ir.TypeParameterType(
+            typeParameter, typeParameterTypeNullability, promotedBound);
+      case DartTypeNodeKind.functionTypeVariable:
+        int index = readInt();
+        assert(0 <= index && index < functionTypeVariables.length);
+        ir.Nullability typeParameterTypeNullability =
+            readEnum(ir.Nullability.values);
+        ir.DartType promotedBound = _readDartTypeNode(functionTypeVariables);
+        return ir.TypeParameterType(functionTypeVariables[index],
+            typeParameterTypeNullability, promotedBound);
+      case DartTypeNodeKind.functionType:
+        begin(functionTypeNodeTag);
+        int typeParameterCount = readInt();
+        List<ir.TypeParameter> typeParameters = List<ir.TypeParameter>.generate(
+            typeParameterCount, (int index) => ir.TypeParameter());
+        functionTypeVariables =
+            List<ir.TypeParameter>.from(functionTypeVariables)
+              ..addAll(typeParameters);
+        for (int index = 0; index < typeParameterCount; index++) {
+          typeParameters[index].name = readString();
+          typeParameters[index].bound =
+              _readDartTypeNode(functionTypeVariables);
+          typeParameters[index].defaultType =
+              _readDartTypeNode(functionTypeVariables);
+        }
+        ir.DartType returnType = _readDartTypeNode(functionTypeVariables);
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        int requiredParameterCount = readInt();
+        List<ir.DartType> positionalParameters =
+            _readDartTypeNodes(functionTypeVariables);
+        int namedParameterCount = readInt();
+        List<ir.NamedType> namedParameters =
+            List<ir.NamedType>.filled(namedParameterCount, null);
+        for (int index = 0; index < namedParameterCount; index++) {
+          String name = readString();
+          bool isRequired = readBool();
+          ir.DartType type = _readDartTypeNode(functionTypeVariables);
+          namedParameters[index] =
+              ir.NamedType(name, type, isRequired: isRequired);
+        }
+        ir.TypedefType typedefType = _readDartTypeNode(functionTypeVariables);
+        end(functionTypeNodeTag);
+        return ir.FunctionType(positionalParameters, returnType, nullability,
+            namedParameters: namedParameters,
+            typeParameters: typeParameters,
+            requiredParameterCount: requiredParameterCount,
+            typedefType: typedefType);
+
+      case DartTypeNodeKind.interfaceType:
+        ir.Class cls = readClassNode();
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        List<ir.DartType> typeArguments =
+            _readDartTypeNodes(functionTypeVariables);
+        return ir.InterfaceType(cls, nullability, typeArguments);
+      case DartTypeNodeKind.thisInterfaceType:
+        ir.Class cls = readClassNode();
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        List<ir.DartType> typeArguments =
+            _readDartTypeNodes(functionTypeVariables);
+        return ThisInterfaceType(cls, nullability, typeArguments);
+      case DartTypeNodeKind.exactInterfaceType:
+        ir.Class cls = readClassNode();
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        List<ir.DartType> typeArguments =
+            _readDartTypeNodes(functionTypeVariables);
+        return ExactInterfaceType(cls, nullability, typeArguments);
+      case DartTypeNodeKind.typedef:
+        ir.Typedef typedef = readTypedefNode();
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        List<ir.DartType> typeArguments =
+            _readDartTypeNodes(functionTypeVariables);
+        return ir.TypedefType(typedef, nullability, typeArguments);
+      case DartTypeNodeKind.dynamicType:
+        return const ir.DynamicType();
+      case DartTypeNodeKind.futureOrType:
+        ir.Nullability nullability = readEnum(ir.Nullability.values);
+        ir.DartType typeArgument = _readDartTypeNode(functionTypeVariables);
+        return ir.FutureOrType(typeArgument, nullability);
+      case DartTypeNodeKind.nullType:
+        return const ir.NullType();
+    }
+    throw UnsupportedError("Unexpected DartTypeKind $kind");
+  }
+
+  /// Reads a list of kernel type nodes from this data source. If [emptyAsNull]
+  /// is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeDartTypeNodes].
+  List<ir.DartType> readDartTypeNodes({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<ir.DartType> list = List<ir.DartType>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = readDartTypeNode();
+    }
+    return list;
+  }
+
+  List<ir.DartType> _readDartTypeNodes(
+      List<ir.TypeParameter> functionTypeVariables) {
+    int count = readInt();
+    if (count == 0) return emptyListOfDartTypes;
+    List<ir.DartType> types = List<ir.DartType>.filled(count, null);
+    for (int index = 0; index < count; index++) {
+      types[index] = _readDartTypeNode(functionTypeVariables);
+    }
+    return types;
+  }
+
+  /// Reads a source span from this data source.
+  SourceSpan readSourceSpan() {
+    _checkDataKind(DataKind.sourceSpan);
+    Uri uri = _readUri();
+    int begin = _sourceReader.readInt();
+    int end = _sourceReader.readInt();
+    return SourceSpan(uri, begin, end);
+  }
+
+  /// Reads a reference to an indexed library from this data source.
+  IndexedLibrary readLibrary() {
+    return _entityReader.readLibraryFromDataSource(this, entityLookup);
+  }
+
+  /// Reads a reference to a potentially `null` indexed library from this data
+  /// source.
+  IndexedLibrary readLibraryOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readLibrary();
+    }
+    return null;
+  }
+
+  /// Reads a library from library entities to [V] values
+  /// from this data source, calling [f] to read each value from the data
+  /// source. If [emptyAsNull] is `true`, `null` is returned instead of an empty
+  /// map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeLibraryMap].
+  Map<K, V> readLibraryMap<K extends LibraryEntity, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      LibraryEntity library = readLibrary();
+      V value = f();
+      map[library] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to an indexed class from this data source.
+  IndexedClass readClass() {
+    return _entityReader.readClassFromDataSource(this, entityLookup);
+  }
+
+  /// Reads a reference to a potentially `null` indexed class from this data
+  /// source.
+  IndexedClass readClassOrNull() {
+    bool hasClass = readBool();
+    if (hasClass) {
+      return readClass();
+    }
+    return null;
+  }
+
+  /// Reads a list of references to indexed classes from this data source.
+  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeClasses].
+  List<E> readClasses<E extends ClassEntity>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      ClassEntity cls = readClass();
+      list[i] = cls;
+    }
+    return list;
+  }
+
+  /// Reads a map from indexed classes to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeClassMap].
+  Map<K, V> readClassMap<K extends ClassEntity, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ClassEntity cls = readClass();
+      V value = f();
+      map[cls] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to an indexed member from this data source.
+  IndexedMember readMember() {
+    return _entityReader.readMemberFromDataSource(this, entityLookup);
+  }
+
+  /// Reads a reference to a potentially `null` indexed member from this data
+  /// source.
+  IndexedMember readMemberOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readMember();
+    }
+    return null;
+  }
+
+  /// Reads a list of references to indexed members from this data source.
+  /// If [emptyAsNull] is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeMembers].
+  List<E> readMembers<E extends MemberEntity>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      MemberEntity member = readMember();
+      list[i] = member;
+    }
+    return list;
+  }
+
+  /// Reads a map from indexed members to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeMemberMap].
+  Map<K, V> readMemberMap<K extends MemberEntity, V>(V f(MemberEntity member),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      MemberEntity member = readMember();
+      V value = f(member);
+      map[member] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to an indexed type variable from this data source.
+  IndexedTypeVariable readTypeVariable() {
+    return _entityReader.readTypeVariableFromDataSource(this, entityLookup);
+  }
+
+  /// Reads a map from indexed type variable to [V] values from this data
+  /// source, calling [f] to read each value from the data source. If
+  /// [emptyAsNull] is `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeTypeVariableMap].
+  Map<K, V> readTypeVariableMap<K extends IndexedTypeVariable, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      IndexedTypeVariable node = readTypeVariable();
+      V value = f();
+      map[node] = value;
+    }
+    return map;
+  }
+
+  /// Reads a reference to a local from this data source.
+  Local readLocal() {
+    LocalKind kind = readEnum(LocalKind.values);
+    switch (kind) {
+      case LocalKind.jLocal:
+        MemberEntity memberContext = readMember();
+        int localIndex = readInt();
+        return localLookup.getLocalByIndex(memberContext, localIndex);
+      case LocalKind.thisLocal:
+        ClassEntity cls = readClass();
+        return ThisLocal(cls);
+      case LocalKind.boxLocal:
+        ClassEntity cls = readClass();
+        return BoxLocal(cls);
+      case LocalKind.anonymousClosureLocal:
+        ClassEntity cls = readClass();
+        return AnonymousClosureLocal(cls);
+      case LocalKind.typeVariableLocal:
+        TypeVariableEntity typeVariable = readTypeVariable();
+        return TypeVariableLocal(typeVariable);
+    }
+    throw UnsupportedError("Unexpected local kind $kind");
+  }
+
+  /// Reads a reference to a potentially `null` local from this data source.
+  Local readLocalOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readLocal();
+    }
+    return null;
+  }
+
+  /// Reads a list of references to locals from this data source. If
+  /// [emptyAsNull] is `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeLocals].
+  List<E> readLocals<E extends Local>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      Local local = readLocal();
+      list[i] = local;
+    }
+    return list;
+  }
+
+  /// Reads a map from locals to [V] values from this data source, calling [f]
+  /// to read each value from the data source. If [emptyAsNull] is `true`,
+  /// `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeLocalMap].
+  Map<K, V> readLocalMap<K extends Local, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      Local local = readLocal();
+      V value = f();
+      map[local] = value;
+    }
+    return map;
+  }
+
+  /// Reads a constant value from this data source.
+  ConstantValue readConstant() {
+    _checkDataKind(DataKind.constant);
+    return _readConstant();
+  }
+
+  ConstantValue _readConstant() {
+    return _constantIndex.read(_readConstantInternal);
+  }
+
+  ConstantValue _readConstantInternal() {
+    ConstantValueKind kind = _sourceReader.readEnum(ConstantValueKind.values);
+    switch (kind) {
+      case ConstantValueKind.BOOL:
+        bool value = readBool();
+        return BoolConstantValue(value);
+      case ConstantValueKind.INT:
+        BigInt value = _readBigInt();
+        return IntConstantValue(value);
+      case ConstantValueKind.DOUBLE:
+        double value = _readDoubleValue();
+        return DoubleConstantValue(value);
+      case ConstantValueKind.STRING:
+        String value = readString();
+        return StringConstantValue(value);
+      case ConstantValueKind.NULL:
+        return const NullConstantValue();
+      case ConstantValueKind.FUNCTION:
+        IndexedFunction function = readMember();
+        DartType type = readDartType();
+        return FunctionConstantValue(function, type);
+      case ConstantValueKind.LIST:
+        DartType type = readDartType();
+        List<ConstantValue> entries = readConstants();
+        return ListConstantValue(type, entries);
+      case ConstantValueKind.SET:
+        DartType type = readDartType();
+        MapConstantValue entries = readConstant();
+        return constant_system.JavaScriptSetConstant(type, entries);
+      case ConstantValueKind.MAP:
+        DartType type = readDartType();
+        ListConstantValue keyList = readConstant();
+        List<ConstantValue> values = readConstants();
+        bool onlyStringKeys = readBool();
+        return constant_system.JavaScriptMapConstant(
+            type, keyList, values, onlyStringKeys);
+      case ConstantValueKind.CONSTRUCTED:
+        InterfaceType type = readDartType();
+        Map<FieldEntity, ConstantValue> fields =
+            readMemberMap<FieldEntity, ConstantValue>(
+                (MemberEntity member) => readConstant());
+        return ConstructedConstantValue(type, fields);
+      case ConstantValueKind.TYPE:
+        DartType representedType = readDartType();
+        DartType type = readDartType();
+        return TypeConstantValue(representedType, type);
+      case ConstantValueKind.INSTANTIATION:
+        List<DartType> typeArguments = readDartTypes();
+        ConstantValue function = readConstant();
+        return InstantiationConstantValue(typeArguments, function);
+      case ConstantValueKind.NON_CONSTANT:
+        return NonConstantValue();
+      case ConstantValueKind.INTERCEPTOR:
+        ClassEntity cls = readClass();
+        return InterceptorConstantValue(cls);
+      case ConstantValueKind.DEFERRED_GLOBAL:
+        ConstantValue constant = readConstant();
+        OutputUnit unit = readOutputUnitReference();
+        return DeferredGlobalConstantValue(constant, unit);
+      case ConstantValueKind.DUMMY_INTERCEPTOR:
+        return DummyInterceptorConstantValue();
+      case ConstantValueKind.LATE_SENTINEL:
+        return LateSentinelConstantValue();
+      case ConstantValueKind.UNREACHABLE:
+        return UnreachableConstantValue();
+      case ConstantValueKind.JS_NAME:
+        js.LiteralString name = readJsNode();
+        return JsNameConstantValue(name);
+    }
+    throw UnsupportedError("Unexpected constant value kind ${kind}.");
+  }
+
+  /// Reads a potentially `null` constant value from this data source.
+  ConstantValue readConstantOrNull() {
+    bool hasClass = readBool();
+    if (hasClass) {
+      return readConstant();
+    }
+    return null;
+  }
+
+  /// Reads a list of constant values from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeConstants].
+  List<E> readConstants<E extends ConstantValue>({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<E> list = List<E>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      ConstantValue value = readConstant();
+      list[i] = value;
+    }
+    return list;
+  }
+
+  /// Reads a map from constant values to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeConstantMap].
+  Map<K, V> readConstantMap<K extends ConstantValue, V>(V f(),
+      {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<K, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ConstantValue key = readConstant();
+      V value = f();
+      map[key] = value;
+    }
+    return map;
+  }
+
+  /// Reads a double value from this data source.
+  double readDoubleValue() {
+    _checkDataKind(DataKind.double);
+    return _readDoubleValue();
+  }
+
+  double _readDoubleValue() {
+    ByteData data = ByteData(8);
+    data.setUint16(0, readInt());
+    data.setUint16(2, readInt());
+    data.setUint16(4, readInt());
+    data.setUint16(6, readInt());
+    return data.getFloat64(0);
+  }
+
+  /// Reads an integer of arbitrary value from this data source.
+  ///
+  /// This is should only when the value is not known to be a non-negative
+  /// 30 bit integer. Otherwise [readInt] should be used.
+  int readIntegerValue() {
+    _checkDataKind(DataKind.int);
+    return _readBigInt().toInt();
+  }
+
+  BigInt _readBigInt() {
+    return BigInt.parse(readString());
+  }
+
+  ImportEntity readImport() {
+    _checkDataKind(DataKind.import);
+    return _readImport();
+  }
+
+  /// Reads a import from this data source.
+  ImportEntity _readImport() {
+    return _importIndex.read(_readImportInternal);
+  }
+
+  ImportEntity _readImportInternal() {
+    String name = readStringOrNull();
+    Uri uri = _readUri();
+    Uri enclosingLibraryUri = _readUri();
+    bool isDeferred = _readBool();
+    return ImportEntity(isDeferred, name, uri, enclosingLibraryUri);
+  }
+
+  /// Reads a potentially `null` import from this data source.
+  ImportEntity readImportOrNull() {
+    bool hasClass = readBool();
+    if (hasClass) {
+      return readImport();
+    }
+    return null;
+  }
+
+  /// Reads a list of imports from this data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty list.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeImports].
+  List<ImportEntity> readImports({bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    List<ImportEntity> list = List<ImportEntity>.filled(count, null);
+    for (int i = 0; i < count; i++) {
+      list[i] = readImport();
+    }
+    return list;
+  }
+
+  /// Reads a map from imports to [V] values from this data source,
+  /// calling [f] to read each value from the data source. If [emptyAsNull] is
+  /// `true`, `null` is returned instead of an empty map.
+  ///
+  /// This is a convenience method to be used together with
+  /// [DataSinkWriter.writeImportMap].
+  Map<ImportEntity, V> readImportMap<V>(V f(), {bool emptyAsNull = false}) {
+    int count = readInt();
+    if (count == 0 && emptyAsNull) return null;
+    Map<ImportEntity, V> map = {};
+    for (int i = 0; i < count; i++) {
+      ImportEntity key = readImport();
+      V value = f();
+      map[key] = value;
+    }
+    return map;
+  }
+
+  /// Reads an [AbstractValue] from this data source.
+  ///
+  /// This feature is only available a [CodegenReader] has been registered.
+  AbstractValue readAbstractValue() {
+    assert(
+        _codegenReader != null,
+        "Can not deserialize an AbstractValue "
+        "without a registered codegen reader.");
+    return _codegenReader.readAbstractValue(this);
+  }
+
+  /// Reads a reference to an [OutputUnit] from this data source.
+  ///
+  /// This feature is only available a [CodegenReader] has been registered.
+  OutputUnit readOutputUnitReference() {
+    assert(
+        _codegenReader != null,
+        "Can not deserialize an OutputUnit reference "
+        "without a registered codegen reader.");
+    return _codegenReader.readOutputUnitReference(this);
+  }
+
+  /// Reads a [js.Node] value from this data source.
+  ///
+  /// This feature is only available a [CodegenReader] has been registered.
+  js.Node readJsNode() {
+    assert(_codegenReader != null,
+        "Can not deserialize a JS node without a registered codegen reader.");
+    return _codegenReader.readJsNode(this);
+  }
+
+  /// Reads a potentially `null` [js.Node] value from this data source.
+  ///
+  /// This feature is only available a [CodegenReader] has been registered.
+  js.Node readJsNodeOrNull() {
+    bool hasValue = readBool();
+    if (hasValue) {
+      return readJsNode();
+    }
+    return null;
+  }
+
+  /// Reads a [TypeRecipe] value from this data source.
+  ///
+  /// This feature is only available a [CodegenReader] has been registered.
+  TypeRecipe readTypeRecipe() {
+    assert(_codegenReader != null,
+        "Can not deserialize a TypeRecipe without a registered codegen reader.");
+    return _codegenReader.readTypeRecipe(this);
+  }
+
+  _MemberData _getMemberData(ir.Member node) {
+    _LibraryData libraryData =
+        componentLookup.getLibraryDataByUri(node.enclosingLibrary.importUri);
+    if (node.enclosingClass != null) {
+      _ClassData classData = libraryData.lookupClassByNode(node.enclosingClass);
+      return classData.lookupMemberDataByNode(node);
+    } else {
+      return libraryData.lookupMemberDataByNode(node);
+    }
+  }
+
+  ir.FunctionNode _readFunctionNode(_MemberData memberData) {
+    _FunctionNodeKind kind = _sourceReader.readEnum(_FunctionNodeKind.values);
+    switch (kind) {
+      case _FunctionNodeKind.procedure:
+        ir.Procedure procedure = _readMemberData().node;
+        return procedure.function;
+      case _FunctionNodeKind.constructor:
+        ir.Constructor constructor = _readMemberData().node;
+        return constructor.function;
+      case _FunctionNodeKind.functionExpression:
+        ir.FunctionExpression functionExpression = _readTreeNode(memberData);
+        return functionExpression.function;
+      case _FunctionNodeKind.functionDeclaration:
+        ir.FunctionDeclaration functionDeclaration = _readTreeNode(memberData);
+        return functionDeclaration.function;
+    }
+    throw UnsupportedError("Unexpected _FunctionNodeKind $kind");
+  }
+
+  void _checkDataKind(DataKind expectedKind) {
+    if (!useDataKinds) return;
+    DataKind actualKind = _sourceReader.readEnum(DataKind.values);
+    assert(
+        actualKind == expectedKind,
+        "Invalid data kind. "
+        "Expected $expectedKind, "
+        "found $actualKind.${_sourceReader.errorContext}");
+  }
+}
diff --git a/pkg/compiler/lib/src/serialization/strategies.dart b/pkg/compiler/lib/src/serialization/strategies.dart
index 65c8824..d73bddd 100644
--- a/pkg/compiler/lib/src/serialization/strategies.dart
+++ b/pkg/compiler/lib/src/serialization/strategies.dart
@@ -73,7 +73,7 @@
   List<int> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
     ByteSink byteSink = ByteSink();
-    DataSink sink = BinarySink(byteSink,
+    DataSinkWriter sink = DataSinkWriter(BinaryDataSink(byteSink),
         useDataKinds: useDataKinds, importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
     return byteSink.builder.takeBytes();
@@ -89,8 +89,8 @@
       JsClosedWorld closedWorld,
       DataSourceIndices indices,
       List<int> globalTypeInferenceResultsData) {
-    DataSource globalTypeInferenceResultsSource = BinarySourceImpl(
-        globalTypeInferenceResultsData,
+    DataSourceReader globalTypeInferenceResultsSource = DataSourceReader(
+        BinaryDataSource(globalTypeInferenceResultsData),
         useDataKinds: useDataKinds,
         importedIndices: indices);
     return deserializeGlobalTypeInferenceResultsFromSource(
@@ -106,7 +106,8 @@
   @override
   List<int> serializeClosedWorld(JsClosedWorld closedWorld) {
     ByteSink byteSink = ByteSink();
-    DataSink sink = BinarySink(byteSink, useDataKinds: useDataKinds);
+    DataSinkWriter sink =
+        DataSinkWriter(BinaryDataSink(byteSink), useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
     return byteSink.builder.takeBytes();
   }
@@ -119,7 +120,8 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<int> data) {
-    DataSource source = BinarySourceImpl(data, useDataKinds: useDataKinds);
+    DataSourceReader source =
+        DataSourceReader(BinaryDataSource(data), useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
@@ -135,8 +137,9 @@
   List<int> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
     Uri uri = Uri.base.resolve('world.data');
-    DataSink sink = BinarySink(
-        BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri)),
+    DataSinkWriter sink = DataSinkWriter(
+        BinaryDataSink(
+            BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri))),
         useDataKinds: useDataKinds,
         importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
@@ -153,8 +156,8 @@
       JsClosedWorld closedWorld,
       DataSourceIndices indices,
       List<int> globalTypeInferenceResultsData) {
-    DataSource globalTypeInferenceResultsSource = BinarySourceImpl(
-        globalTypeInferenceResultsData,
+    DataSourceReader globalTypeInferenceResultsSource = DataSourceReader(
+        BinaryDataSource(globalTypeInferenceResultsData),
         useDataKinds: useDataKinds,
         importedIndices: indices);
     return deserializeGlobalTypeInferenceResultsFromSource(
@@ -170,8 +173,9 @@
   @override
   List<int> serializeClosedWorld(JsClosedWorld closedWorld) {
     Uri uri = Uri.base.resolve('closed_world.data');
-    DataSink sink = BinarySink(
-        BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri)),
+    DataSinkWriter sink = DataSinkWriter(
+        BinaryDataSink(
+            BinaryOutputSinkAdapter(RandomAccessBinaryOutputSink(uri))),
         useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
     return File.fromUri(uri).readAsBytesSync();
@@ -185,7 +189,8 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<int> data) {
-    DataSource source = BinarySourceImpl(data, useDataKinds: useDataKinds);
+    DataSourceReader source =
+        DataSourceReader(BinaryDataSource(data), useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
@@ -202,8 +207,8 @@
   List<Object> serializeGlobalTypeInferenceResults(
       DataSourceIndices indices, GlobalTypeInferenceResults results) {
     List<Object> data = [];
-    DataSink sink =
-        ObjectSink(data, useDataKinds: useDataKinds, importedIndices: indices);
+    DataSinkWriter sink = DataSinkWriter(ObjectDataSink(data),
+        useDataKinds: useDataKinds, importedIndices: indices);
     serializeGlobalTypeInferenceResultsToSink(results, sink);
     return data;
   }
@@ -218,10 +223,8 @@
       JsClosedWorld closedWorld,
       DataSourceIndices indices,
       List<Object> globalTypeInferenceResultsData) {
-    DataSource globalTypeInferenceResultsSource = ObjectSource(
-        globalTypeInferenceResultsData,
-        useDataKinds: useDataKinds,
-        importedIndices: indices);
+    DataSourceReader globalTypeInferenceResultsSource =
+        DataSourceReader(ObjectDataSource(globalTypeInferenceResultsData));
     return deserializeGlobalTypeInferenceResultsFromSource(
         options,
         reporter,
@@ -235,7 +238,8 @@
   @override
   List<Object> serializeClosedWorld(JsClosedWorld closedWorld) {
     List<Object> data = [];
-    DataSink sink = ObjectSink(data, useDataKinds: useDataKinds);
+    DataSinkWriter sink =
+        DataSinkWriter(ObjectDataSink(data), useDataKinds: useDataKinds);
     serializeClosedWorldToSink(closedWorld, sink);
     return data;
   }
@@ -248,7 +252,8 @@
       AbstractValueStrategy abstractValueStrategy,
       ir.Component component,
       List<Object> data) {
-    DataSource source = ObjectSource(data, useDataKinds: useDataKinds);
+    DataSourceReader source =
+        DataSourceReader(ObjectDataSource(data), useDataKinds: useDataKinds);
     var closedWorld = deserializeClosedWorldFromSource(options, reporter,
         environment, abstractValueStrategy, component, source);
     return ClosedWorldAndIndices(closedWorld, source.exportIndices());
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index 15889be..c69d158 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -38,7 +38,7 @@
 }
 
 void serializeGlobalTypeInferenceResultsToSink(
-    GlobalTypeInferenceResults results, DataSink sink) {
+    GlobalTypeInferenceResults results, DataSinkWriter sink) {
   JsClosedWorld closedWorld = results.closedWorld;
   GlobalLocalsMap globalLocalsMap = results.globalLocalsMap;
   InferredData inferredData = results.inferredData;
@@ -55,7 +55,7 @@
     AbstractValueStrategy abstractValueStrategy,
     ir.Component component,
     JsClosedWorld closedWorld,
-    DataSource source) {
+    DataSourceReader source) {
   source.registerComponentLookup(ComponentLookup(component));
   source.registerEntityLookup(ClosedEntityLookup(closedWorld.elementMap));
   GlobalLocalsMap globalLocalsMap = GlobalLocalsMap.readFromDataSource(
@@ -66,7 +66,8 @@
       closedWorld.elementMap, closedWorld, globalLocalsMap, inferredData);
 }
 
-void serializeClosedWorldToSink(JsClosedWorld closedWorld, DataSink sink) {
+void serializeClosedWorldToSink(
+    JsClosedWorld closedWorld, DataSinkWriter sink) {
   closedWorld.writeToDataSink(sink);
   sink.close();
 }
@@ -77,7 +78,7 @@
     Environment environment,
     AbstractValueStrategy abstractValueStrategy,
     ir.Component component,
-    DataSource source) {
+    DataSourceReader source) {
   return JsClosedWorld.readFromDataSource(
       options, reporter, environment, abstractValueStrategy, component, source);
 }
@@ -177,7 +178,8 @@
       _reporter.log('Writing data to ${_options.writeModularAnalysisUri}');
       api.BinaryOutputSink dataOutput =
           _outputProvider.createBinarySink(_options.writeModularAnalysisUri);
-      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
+      DataSinkWriter sink =
+          DataSinkWriter(BinaryDataSink(BinaryOutputSinkAdapter(dataOutput)));
       data.toDataSink(sink);
       sink.close();
     });
@@ -196,11 +198,12 @@
       //   ModuleData.fromDataSource(source);
 
       BytesSink bytes = BytesSink();
-      BinarySink binarySink = BinarySink(bytes, useDataKinds: true);
+      DataSinkWriter binarySink =
+          DataSinkWriter(BinaryDataSink(bytes), useDataKinds: true);
       data.toDataSink(binarySink);
       binarySink.close();
-      var source =
-          BinarySourceImpl(bytes.builder.toBytes(), useDataKinds: true);
+      var source = DataSourceReader(BinaryDataSource(bytes.builder.toBytes()),
+          useDataKinds: true);
       source.registerComponentLookup(ComponentLookup(component));
       ModuleData.fromDataSource(source);
     }
@@ -213,7 +216,8 @@
       for (Uri uri in _options.modularAnalysisInputs) {
         api.Input<List<int>> dataInput =
             await _provider.readFromUri(uri, inputKind: api.InputKind.binary);
-        DataSource source = BinarySourceImpl(dataInput.data);
+        DataSourceReader source =
+            DataSourceReader(BinaryDataSource(dataInput.data));
         source.registerComponentLookup(ComponentLookup(component));
         results.add(ModuleData.fromDataSource(source));
       }
@@ -226,7 +230,8 @@
       _reporter.log('Writing closed world to ${_options.writeClosedWorldUri}');
       api.BinaryOutputSink dataOutput =
           _outputProvider.createBinarySink(_options.writeClosedWorldUri);
-      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput));
+      DataSinkWriter sink =
+          DataSinkWriter(BinaryDataSink(BinaryOutputSinkAdapter(dataOutput)));
       serializeClosedWorldToSink(closedWorld, sink);
     });
   }
@@ -240,8 +245,8 @@
       api.Input<List<int>> dataInput = await _provider.readFromUri(
           _options.readClosedWorldUri,
           inputKind: api.InputKind.binary);
-      DataSource source =
-          BinarySourceImpl(dataInput.data, stringInterner: _stringInterner);
+      DataSourceReader source = DataSourceReader(
+          BinaryDataSource(dataInput.data, stringInterner: _stringInterner));
       var closedWorld = deserializeClosedWorldFromSource(_options, _reporter,
           environment, abstractValueStrategy, component, source);
       return ClosedWorldAndIndices(closedWorld, source.exportIndices());
@@ -258,7 +263,8 @@
       _reporter.log('Writing data to ${_options.writeDataUri}');
       api.BinaryOutputSink dataOutput =
           _outputProvider.createBinarySink(_options.writeDataUri);
-      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput),
+      DataSinkWriter sink = DataSinkWriter(
+          BinaryDataSink(BinaryOutputSinkAdapter(dataOutput)),
           importedIndices: indices);
       serializeGlobalTypeInferenceResultsToSink(results, sink);
     });
@@ -273,8 +279,8 @@
       _reporter.log('Reading data from ${_options.readDataUri}');
       api.Input<List<int>> dataInput = await _provider
           .readFromUri(_options.readDataUri, inputKind: api.InputKind.binary);
-      DataSource source = BinarySourceImpl(dataInput.data,
-          stringInterner: _stringInterner,
+      DataSourceReader source = DataSourceReader(
+          BinaryDataSource(dataInput.data, stringInterner: _stringInterner),
           importedIndices: closedWorldAndIndices.indices);
       return deserializeGlobalTypeInferenceResultsFromSource(
           _options,
@@ -307,7 +313,8 @@
     measureSubtask('serialize codegen', () {
       Uri uri = Uri.parse('${_options.writeCodegenUri}$shard');
       api.BinaryOutputSink dataOutput = _outputProvider.createBinarySink(uri);
-      DataSink sink = BinarySink(BinaryOutputSinkAdapter(dataOutput),
+      DataSinkWriter sink = DataSinkWriter(
+          BinaryDataSink(BinaryOutputSinkAdapter(dataOutput)),
           importedIndices: indices);
       _reporter.log('Writing data to ${uri}');
       sink.registerEntityWriter(entityWriter);
@@ -352,8 +359,9 @@
       api.Input<List<int>> dataInput,
       DataSourceIndices importedIndices,
       Map<MemberEntity, CodegenResult> results) {
-    DataSource source = BinarySourceImpl(dataInput.data,
-        stringInterner: _stringInterner, importedIndices: importedIndices);
+    DataSourceReader source = DataSourceReader(
+        BinaryDataSource(dataInput.data, stringInterner: _stringInterner),
+        importedIndices: importedIndices);
     backendStrategy.prepareCodegenReader(source);
     Map<MemberEntity, CodegenResult> codegenResults =
         source.readMemberMap((MemberEntity member) {
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index 1dc8cdd..0062fc9 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -82,7 +82,7 @@
   }
 
   /// Deserializes a [CallStructure] object from [source].
-  factory CallStructure.readFromDataSource(DataSource source) {
+  factory CallStructure.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     int argumentCount = source.readInt();
     List<String> namedArguments = source.readStrings();
@@ -92,7 +92,7 @@
   }
 
   /// Serializes this [CallStructure] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(argumentCount);
     sink.writeStrings(namedArguments);
diff --git a/pkg/compiler/lib/src/universe/class_hierarchy.dart b/pkg/compiler/lib/src/universe/class_hierarchy.dart
index 24cc4ce..a2e6d01 100644
--- a/pkg/compiler/lib/src/universe/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/universe/class_hierarchy.dart
@@ -15,11 +15,11 @@
 abstract class ClassHierarchy {
   /// Deserializes a [ClassHierarchy] object from [source].
   factory ClassHierarchy.readFromDataSource(
-          DataSource source, CommonElements commonElements) =
+          DataSourceReader source, CommonElements commonElements) =
       ClassHierarchyImpl.readFromDataSource;
 
   /// Serializes this [ClassHierarchy] to [sink].
-  void writeToDataSink(DataSink sink);
+  void writeToDataSink(DataSinkWriter sink);
 
   /// Returns `true` if [cls] is either directly or indirectly instantiated.
   bool isInstantiated(ClassEntity cls);
@@ -170,7 +170,7 @@
       this._commonElements, this._classHierarchyNodes, this._classSets);
 
   factory ClassHierarchyImpl.readFromDataSource(
-      DataSource source, CommonElements commonElements) {
+      DataSourceReader source, CommonElements commonElements) {
     source.begin(tag);
     Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes =
         ClassHierarchyNodesMap();
@@ -192,7 +192,7 @@
   }
 
   @override
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(_classSets.length);
     ClassHierarchyNode node =
diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
index 5dc7629..f7c899d 100644
--- a/pkg/compiler/lib/src/universe/class_set.dart
+++ b/pkg/compiler/lib/src/universe/class_set.dart
@@ -213,7 +213,7 @@
 
   /// Deserializes a [ClassHierarchyNode] object from [source].
   factory ClassHierarchyNode.readFromDataSource(
-      DataSource source, Map<ClassEntity, ClassHierarchyNode> nodeMap) {
+      DataSourceReader source, Map<ClassEntity, ClassHierarchyNode> nodeMap) {
     source.begin(tag);
     IndexedClass cls = source.readClass();
     ClassHierarchyNode parentNode;
@@ -233,7 +233,7 @@
   }
 
   /// Serializes this [ClassHierarchyNode] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeClass(cls);
     sink.writeClassOrNull(parentNode?.cls);
@@ -541,7 +541,7 @@
 
   /// Deserializes a [ClassSet] object from [source].
   factory ClassSet.readFromDataSource(
-      DataSource source, Map<ClassEntity, ClassHierarchyNode> nodeMap) {
+      DataSourceReader source, Map<ClassEntity, ClassHierarchyNode> nodeMap) {
     source.begin(tag);
     ClassHierarchyNode node = nodeMap[source.readClass()];
     List<ClassHierarchyNode> subtypes = source.readList(() {
@@ -557,7 +557,7 @@
   }
 
   /// Serializes this [ClassSet] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeClass(node.cls);
     sink.writeList(_subtypes, (ClassHierarchyNode node) {
diff --git a/pkg/compiler/lib/src/universe/feature.dart b/pkg/compiler/lib/src/universe/feature.dart
index ca27733..8358202 100644
--- a/pkg/compiler/lib/src/universe/feature.dart
+++ b/pkg/compiler/lib/src/universe/feature.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2016, 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.
+
 // TODO(sigmund): rename universe => world
 /// Describes individual features that may be seen in a program. Most features
 /// can be described only by name using the [Feature] enum, some features are
@@ -241,7 +245,7 @@
 
   GenericInstantiation(this.functionType, this.typeArguments);
 
-  factory GenericInstantiation.readFromDataSource(DataSource source) {
+  factory GenericInstantiation.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     DartType functionType = source.readDartType();
     List<DartType> typeArguments = source.readDartTypes();
@@ -249,7 +253,7 @@
     return GenericInstantiation(functionType, typeArguments);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartType(functionType);
     sink.writeDartTypes(typeArguments);
diff --git a/pkg/compiler/lib/src/universe/member_usage.dart b/pkg/compiler/lib/src/universe/member_usage.dart
index 451b6c5..f3fe0b1 100644
--- a/pkg/compiler/lib/src/universe/member_usage.dart
+++ b/pkg/compiler/lib/src/universe/member_usage.dart
@@ -839,7 +839,7 @@
 
   MemberAccess(this.reads, this.writes, this.invokes);
 
-  factory MemberAccess.readFromDataSource(DataSource source) {
+  factory MemberAccess.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     EnumSet<Access> reads = EnumSet.fixed(source.readInt());
     EnumSet<Access> writes = EnumSet.fixed(source.readInt());
@@ -848,7 +848,7 @@
     return MemberAccess(reads, writes, invokes);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(reads.value);
     sink.writeInt(writes.value);
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index dddc39b..8ea7244 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -199,7 +199,7 @@
       CallStructure(0, null, typeArguments));
 
   /// Deserializes a [Selector] object from [source].
-  factory Selector.readFromDataSource(DataSource source) {
+  factory Selector.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     SelectorKind kind = source.readEnum(SelectorKind.values);
     bool isSetter = source.readBool();
@@ -212,7 +212,7 @@
   }
 
   /// Serializes this [Selector] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeEnum(kind);
     sink.writeBool(memberName.isSetter);
diff --git a/pkg/compiler/lib/src/universe/side_effects.dart b/pkg/compiler/lib/src/universe/side_effects.dart
index f4101839..4e8bab0 100644
--- a/pkg/compiler/lib/src/universe/side_effects.dart
+++ b/pkg/compiler/lib/src/universe/side_effects.dart
@@ -43,7 +43,7 @@
   SideEffects.fromFlags(this._flags);
 
   /// Deserializes a [SideEffects] object from [source].
-  factory SideEffects.readFromDataSource(DataSource source) {
+  factory SideEffects.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     int flags = source.readInt();
     source.end(tag);
@@ -51,7 +51,7 @@
   }
 
   /// Serializes this [SideEffects] to [sink].
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeInt(_flags);
     sink.end(tag);
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index bb33b0e..cffa3fc 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -59,7 +59,7 @@
     return DynamicUse(selector, otherReceiverConstraint, _typeArguments);
   }
 
-  factory DynamicUse.readFromDataSource(DataSource source) {
+  factory DynamicUse.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     Selector selector = Selector.readFromDataSource(source);
     bool hasConstraint = source.readBool();
@@ -72,7 +72,7 @@
     return DynamicUse(selector, receiverConstraint, typeArguments);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     selector.writeToDataSink(sink);
     sink.writeBool(receiverConstraint != null);
@@ -215,7 +215,7 @@
     return true;
   }
 
-  factory StaticUse.readFromDataSource(DataSource source) {
+  factory StaticUse.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     MemberEntity element = source.readMember();
     StaticUseKind kind = source.readEnum(StaticUseKind.values);
@@ -234,7 +234,7 @@
         typeArguments: typeArguments);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     assert(element is MemberEntity, "Unsupported entity: $element");
     sink.writeMember(element);
@@ -727,7 +727,7 @@
         this.kind = kind,
         this.hashCode = Hashing.objectsHash(type, kind, deferredImport);
 
-  factory TypeUse.readFromDataSource(DataSource source) {
+  factory TypeUse.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     DartType type = source.readDartType();
     TypeUseKind kind = source.readEnum(TypeUseKind.values);
@@ -736,7 +736,7 @@
     return TypeUse.internal(type, kind, deferredImport);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeDartType(type);
     sink.writeEnum(kind);
@@ -900,14 +900,14 @@
 
   ConstantUse._(this.value);
 
-  factory ConstantUse.readFromDataSource(DataSource source) {
+  factory ConstantUse.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     ConstantValue value = source.readConstant();
     source.end(tag);
     return ConstantUse._(value);
   }
 
-  void writeToDataSink(DataSink sink) {
+  void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeConstant(value);
     sink.end(tag);
diff --git a/pkg/compiler/lib/src/util/sink_adapter.dart b/pkg/compiler/lib/src/util/sink_adapter.dart
index bcb9b33..1b093a4 100644
--- a/pkg/compiler/lib/src/util/sink_adapter.dart
+++ b/pkg/compiler/lib/src/util/sink_adapter.dart
@@ -1,3 +1,7 @@
+// Copyright (c) 2018, 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 '../../compiler.dart' as api;
 
 class BinaryOutputSinkAdapter implements Sink<List<int>> {
diff --git a/pkg/compiler/test/analyses/analysis_helper.dart b/pkg/compiler/test/analyses/analysis_helper.dart
index 763818b..f7a975c 100644
--- a/pkg/compiler/test/analyses/analysis_helper.dart
+++ b/pkg/compiler/test/analyses/analysis_helper.dart
@@ -4,6 +4,7 @@
 
 // @dart = 2.7
 
+import 'dart:collection' show SplayTreeMap;
 import 'dart:convert' as json;
 import 'dart:io';
 
@@ -15,7 +16,7 @@
 import 'package:compiler/src/ir/scope.dart';
 import 'package:compiler/src/ir/static_type.dart';
 import 'package:compiler/src/ir/util.dart';
-import 'package:compiler/src/kernel/loader.dart';
+import 'package:compiler/src/phase/load_kernel.dart' as load_kernel;
 import 'package:expect/expect.dart';
 import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart'
@@ -61,8 +62,15 @@
         packageConfig: packageConfig,
         entryPoint: entryPoint,
         options: options);
-    KernelResult result = await compiler.kernelLoader.load();
-    new DynamicVisitor(compiler.reporter, result.component, allowedListPath,
+    load_kernel.Output result = await load_kernel.run(load_kernel.Input(
+        compiler.options,
+        compiler.provider,
+        compiler.reporter,
+        compiler.initializedCompilerState,
+        false));
+    compiler.frontendStrategy
+        .registerLoadedLibraries(result.component, result.libraries);
+    DynamicVisitor(compiler.reporter, result.component, allowedListPath,
             analyzedUrisFilter)
         .run(verbose: verbose, generate: generate);
   });
@@ -163,10 +171,10 @@
     }
     component.accept(this);
     if (generate && _allowedListPath != null) {
-      Map<String, Map<String, int>> actualJson = {};
+      Map<String, Map<String, int>> actualJson = SplayTreeMap();
       _actualMessages.forEach(
           (String uri, Map<String, List<DiagnosticMessage>> actualMessagesMap) {
-        Map<String, int> map = {};
+        Map<String, int> map = SplayTreeMap();
         actualMessagesMap
             .forEach((String message, List<DiagnosticMessage> actualMessages) {
           map[message] = actualMessages.length;
@@ -174,8 +182,8 @@
         actualJson[uri] = map;
       });
 
-      new File(_allowedListPath).writeAsStringSync(
-          new json.JsonEncoder.withIndent('  ').convert(actualJson));
+      File(_allowedListPath).writeAsStringSync(
+          json.JsonEncoder.withIndent('  ').convert(actualJson));
       return;
     }
 
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 118826f..4d58ce5 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -1,129 +1,121 @@
 {
+  "pkg/compiler/lib/src/constants/constant_system.dart": {
+    "Dynamic invocation of '%'.": 1,
+    "Dynamic invocation of '&'.": 1,
+    "Dynamic invocation of '*'.": 1,
+    "Dynamic invocation of '+'.": 1,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of '/'.": 1,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '<<'.": 1,
+    "Dynamic invocation of '<='.": 1,
+    "Dynamic invocation of '>'.": 1,
+    "Dynamic invocation of '>='.": 1,
+    "Dynamic invocation of '>>'.": 1,
+    "Dynamic invocation of '^'.": 1,
+    "Dynamic invocation of 'codeUnitAt'.": 1,
+    "Dynamic invocation of 'remainder'.": 1,
+    "Dynamic invocation of '|'.": 1,
+    "Dynamic invocation of '~/'.": 1
+  },
   "pkg/compiler/lib/src/dart2js.dart": {
     "Dynamic invocation of 'call'.": 1,
-    "Dynamic invocation of 'resume'.": 1,
-    "Dynamic invocation of 'pause'.": 1
-  },
-  "pkg/compiler/lib/src/util/maplet.dart": {
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic access of 'length'.": 1,
-    "Dynamic invocation of 'containsKey'.": 1,
-    "Dynamic invocation of '[]'.": 11,
-    "Dynamic invocation of '[]='.": 12,
-    "Dynamic invocation of '+'.": 2,
-    "Dynamic invocation of '<'.": 1,
-    "Dynamic invocation of 'remove'.": 1,
-    "Dynamic invocation of '-'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic access of 'keys'.": 1,
-    "Dynamic access of 'iterator'.": 1
-  },
-  "pkg/compiler/lib/src/util/setlet.dart": {
-    "Dynamic access of 'iterator'.": 1,
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic invocation of 'contains'.": 1,
-    "Dynamic invocation of '[]'.": 7,
-    "Dynamic invocation of 'add'.": 1,
-    "Dynamic invocation of '[]='.": 6,
-    "Dynamic invocation of '+'.": 2,
-    "Dynamic invocation of '<'.": 1,
-    "Dynamic invocation of 'lookup'.": 1,
-    "Dynamic invocation of 'remove'.": 1,
-    "Dynamic invocation of '-'.": 2,
-    "Dynamic invocation of 'removeWhere'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic invocation of 'toSet'.": 1,
-    "Dynamic invocation of 'toList'.": 1
+    "Dynamic invocation of 'pause'.": 1,
+    "Dynamic invocation of 'resume'.": 1
   },
   "pkg/compiler/lib/src/deferred_load/deferred_load.dart": {
     "Dynamic access of 'memberContext'.": 1,
     "Dynamic access of 'name'.": 1
   },
+  "pkg/compiler/lib/src/inferrer/locals_handler.dart": {
+    "Dynamic access of 'length'.": 2,
+    "Dynamic access of 'named'.": 2,
+    "Dynamic access of 'positional'.": 2,
+    "Dynamic invocation of '[]'.": 2
+  },
+  "pkg/compiler/lib/src/inferrer/type_graph_nodes.dart": {
+    "Dynamic access of 'type'.": 4,
+    "Dynamic invocation of 'add'.": 1,
+    "Dynamic invocation of 'remove'.": 1
+  },
   "pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart": {
-    "Dynamic access of 'isForwarding'.": 1,
-    "Dynamic access of 'forwardTo'.": 1
-  },
-  "pkg/compiler/lib/src/serialization/binary_sink.dart": {
-    "Dynamic access of 'index'.": 1
-  },
-  "pkg/compiler/lib/src/util/enumset.dart": {
-    "Dynamic access of 'index'.": 4
-  },
-  "pkg/compiler/lib/src/constants/constant_system.dart": {
-    "Dynamic invocation of '&'.": 1,
-    "Dynamic invocation of '|'.": 1,
-    "Dynamic invocation of '^'.": 1,
-    "Dynamic invocation of '<<'.": 1,
-    "Dynamic invocation of '>>'.": 1,
-    "Dynamic invocation of '-'.": 1,
-    "Dynamic invocation of '*'.": 1,
-    "Dynamic invocation of '%'.": 1,
-    "Dynamic invocation of 'remainder'.": 1,
-    "Dynamic invocation of '~/'.": 1,
-    "Dynamic invocation of '/'.": 1,
-    "Dynamic invocation of '+'.": 1,
-    "Dynamic invocation of '<'.": 1,
-    "Dynamic invocation of '<='.": 1,
-    "Dynamic invocation of '>'.": 1,
-    "Dynamic invocation of '>='.": 1,
-    "Dynamic invocation of 'codeUnitAt'.": 1
-  },
-  "pkg/dart2js_info/lib/json_info_codec.dart": {
-    "Dynamic invocation of '[]'.": 12,
-    "Dynamic invocation of 'forEach'.": 2,
-    "Dynamic invocation of 'map'.": 2,
-    "Dynamic invocation of 'compareTo'.": 1
-  },
-  "pkg/dart2js_info/lib/binary_serialization.dart": {
-    "Dynamic invocation of 'cast'.": 1
-  },
-  "pkg/js_ast/lib/src/builder.dart": {
-    "Dynamic invocation of 'call'.": 2
-  },
-  "pkg/js_ast/lib/src/template.dart": {
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'keys'.": 1,
-    "Dynamic invocation of 'where'.": 1,
-    "Dynamic invocation of 'join'.": 1,
-    "Dynamic invocation of 'containsKey'.": 2,
-    "Dynamic invocation of '[]'.": 9,
-    "Dynamic invocation of 'toStatement'.": 3
+    "Dynamic access of 'forwardTo'.": 1,
+    "Dynamic access of 'isForwarding'.": 1
   },
   "pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart": {
     "Dynamic invocation of '[]='.": 1,
     "Dynamic invocation of 'add'.": 1
   },
+  "pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart": {
+    "Dynamic access of 'needsTearOff'.": 1,
+    "Dynamic access of 'superclass'.": 1
+  },
   "pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart": {
     "Dynamic invocation of '[]='.": 1
   },
+  "pkg/compiler/lib/src/serialization/binary_sink.dart": {
+    "Dynamic access of 'index'.": 1
+  },
+  "pkg/compiler/lib/src/ssa/value_range_analyzer.dart": {
+    "Dynamic access of 'isZero'.": 2,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of 'max'.": 1,
+    "Dynamic invocation of 'min'.": 1,
+    "Dynamic invocation of 'unary-'.": 1
+  },
+  "pkg/compiler/lib/src/util/enumset.dart": {
+    "Dynamic access of 'index'.": 4
+  },
+  "pkg/compiler/lib/src/util/maplet.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'iterator'.": 1,
+    "Dynamic access of 'keys'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '-'.": 1,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '[]'.": 11,
+    "Dynamic invocation of '[]='.": 12,
+    "Dynamic invocation of 'containsKey'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic invocation of 'remove'.": 1
+  },
+  "pkg/compiler/lib/src/util/setlet.dart": {
+    "Dynamic access of 'isEmpty'.": 1,
+    "Dynamic access of 'iterator'.": 1,
+    "Dynamic access of 'length'.": 1,
+    "Dynamic invocation of '+'.": 2,
+    "Dynamic invocation of '-'.": 2,
+    "Dynamic invocation of '<'.": 1,
+    "Dynamic invocation of '[]'.": 7,
+    "Dynamic invocation of '[]='.": 6,
+    "Dynamic invocation of 'add'.": 1,
+    "Dynamic invocation of 'contains'.": 1,
+    "Dynamic invocation of 'forEach'.": 1,
+    "Dynamic invocation of 'lookup'.": 1,
+    "Dynamic invocation of 'remove'.": 1,
+    "Dynamic invocation of 'removeWhere'.": 1,
+    "Dynamic invocation of 'toList'.": 1,
+    "Dynamic invocation of 'toSet'.": 1
+  },
+  "pkg/dart2js_info/lib/binary_serialization.dart": {
+    "Dynamic invocation of 'cast'.": 1
+  },
+  "pkg/dart2js_info/lib/json_info_codec.dart": {
+    "Dynamic invocation of '[]'.": 12,
+    "Dynamic invocation of 'compareTo'.": 1,
+    "Dynamic invocation of 'forEach'.": 2,
+    "Dynamic invocation of 'map'.": 2
+  },
+  "pkg/dart2js_info/lib/src/binary/sink.dart": {
+    "Dynamic access of 'index'.": 1
+  },
   "pkg/dart2js_info/lib/src/util.dart": {
     "Dynamic access of 'name'.": 1,
     "Dynamic invocation of '-'.": 1
   },
-  "pkg/dart2js_info/lib/src/binary/sink.dart": {
-    "Dynamic access of 'index'.": 1
-  },
-  "pkg/compiler/lib/src/inferrer/type_graph_nodes.dart": {
-    "Dynamic invocation of 'add'.": 1,
-    "Dynamic invocation of 'remove'.": 1,
-    "Dynamic access of 'type'.": 4
-  },
-  "pkg/compiler/lib/src/inferrer/locals_handler.dart": {
-    "Dynamic access of 'positional'.": 2,
-    "Dynamic access of 'length'.": 2,
-    "Dynamic access of 'named'.": 2,
-    "Dynamic invocation of '[]'.": 2
-  },
-  "pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart": {
-    "Dynamic access of 'superclass'.": 1,
-    "Dynamic access of 'needsTearOff'.": 1
-  },
-  "pkg/compiler/lib/src/ssa/value_range_analyzer.dart": {
-    "Dynamic access of 'isZero'.": 2,
-    "Dynamic invocation of '+'.": 2,
-    "Dynamic invocation of 'unary-'.": 1,
-    "Dynamic invocation of 'min'.": 1,
-    "Dynamic invocation of 'max'.": 1
+  "pkg/js_ast/lib/src/template.dart": {
+    "Dynamic invocation of '[]'.": 9,
+    "Dynamic invocation of 'toStatement'.": 1
   }
-}
+}
\ No newline at end of file
diff --git a/pkg/compiler/test/analyses/static_type_visitor_test.dart b/pkg/compiler/test/analyses/static_type_visitor_test.dart
index 4ec5093..3c504c0 100644
--- a/pkg/compiler/test/analyses/static_type_visitor_test.dart
+++ b/pkg/compiler/test/analyses/static_type_visitor_test.dart
@@ -7,7 +7,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/ir/static_type.dart';
-import 'package:compiler/src/kernel/loader.dart';
+import 'package:compiler/src/phase/load_kernel.dart' as load_kernel;
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
@@ -26,7 +26,12 @@
     Compiler compiler = await compilerFor(
         memorySourceFiles: {'main.dart': source},
         entryPoint: Uri.parse('memory:main.dart'));
-    KernelResult result = await compiler.kernelLoader.load();
+    load_kernel.Output result = await load_kernel.run(load_kernel.Input(
+        compiler.options,
+        compiler.provider,
+        compiler.reporter,
+        compiler.initializedCompilerState,
+        false));
     ir.Component component = result.component;
     StaticTypeVisitor visitor = new Visitor(component);
     component.accept(visitor);
diff --git a/pkg/compiler/test/custom_split/custom_split_test.dart b/pkg/compiler/test/custom_split/custom_split_test.dart
index 7f4c4dc..2e62442 100644
--- a/pkg/compiler/test/custom_split/custom_split_test.dart
+++ b/pkg/compiler/test/custom_split/custom_split_test.dart
@@ -28,6 +28,7 @@
   'fuse_with_or',
   'two_step',
   'two_branch',
+  'just_fuse',
 ];
 
 Map<String, List<String>> createPerTestOptions() {
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/constraints.dart b/pkg/compiler/test/custom_split/data/just_fuse/constraints.dart
new file mode 100644
index 0000000..3b4280a
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/constraints.dart
@@ -0,0 +1,22 @@
+// 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:isolate';
+
+import 'package:compiler/src/deferred_load/program_split_constraints/nodes.dart';
+import '../../constraint_harness.dart';
+
+void main(List<String> args, SendPort sendPort) {
+  waitForImportsAndInvoke(sendPort, processDeferredImports);
+}
+
+List<Node> processDeferredImports(List<String> imports) {
+  var lib1 = 'memory:sdk/tests/web/native/lib1.dart#b1';
+  var lib2 = 'memory:sdk/tests/web/native/lib2.dart#b2';
+  var builder = ProgramSplitBuilder();
+  return [
+    ...imports.map(builder.referenceNode),
+    builder.fuseNode({lib1, lib2}),
+  ];
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/constraints.json b/pkg/compiler/test/custom_split/data/just_fuse/constraints.json
new file mode 100644
index 0000000..81702d9
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/constraints.json
@@ -0,0 +1,29 @@
+[
+  {
+    "type": "reference",
+    "name": "memory:sdk/tests/web/native/lib1.dart#b1",
+    "import": "memory:sdk/tests/web/native/lib1.dart#b1"
+  },
+  {
+    "type": "reference",
+    "name": "memory:sdk/tests/web/native/lib2.dart#b2",
+    "import": "memory:sdk/tests/web/native/lib2.dart#b2"
+  },
+  {
+    "type": "reference",
+    "name": "memory:sdk/tests/web/native/lib3.dart#b3",
+    "import": "memory:sdk/tests/web/native/lib3.dart#b3"
+  },
+  {
+    "type": "reference",
+    "name": "memory:sdk/tests/web/native/lib4.dart#b4",
+    "import": "memory:sdk/tests/web/native/lib4.dart#b4"
+  },
+  {
+    "type": "fuse",
+    "nodes": [
+      "memory:sdk/tests/web/native/lib1.dart#b1",
+      "memory:sdk/tests/web/native/lib2.dart#b2"
+    ]
+  }
+]
\ No newline at end of file
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib1.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib1.dart
new file mode 100644
index 0000000..33e2c05
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib1.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import 'lib_100_0.dart' deferred as b1;
+
+/*member: entryLib1:member_unit=main{}*/
+entryLib1() async {
+  await b1.loadLibrary();
+  b1.g_100_0();
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib2.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib2.dart
new file mode 100644
index 0000000..1ad0cd3
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib2.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import 'lib_010_0.dart' deferred as b2;
+
+/*member: entryLib2:member_unit=main{}*/
+entryLib2() async {
+  await b2.loadLibrary();
+  b2.g_010_0();
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib3.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib3.dart
new file mode 100644
index 0000000..1d2b9d5
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib3.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import 'lib_001_0.dart' deferred as b3;
+
+/*member: entryLib3:member_unit=main{}*/
+entryLib3() async {
+  await b3.loadLibrary();
+  b3.g_001_0();
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib4.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib4.dart
new file mode 100644
index 0000000..1eedd87
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib4.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import 'lib_000_1.dart' deferred as b4;
+
+/*member: entryLib4:member_unit=main{}*/
+entryLib4() async {
+  await b4.loadLibrary();
+  b4.g_000_1();
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/libImport.dart b/pkg/compiler/test/custom_split/data/just_fuse/libImport.dart
new file mode 100644
index 0000000..1f64eba
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/libImport.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import "package:expect/expect.dart";
+
+/*member: v:member_unit=2{b1, b2, b3, b4}*/
+void v(Set<String> u, String name, int bit) {
+  Expect.isTrue(u.add(name));
+  Expect.equals(name[bit], '1');
+}
+
+@pragma('dart2js:noInline')
+/*member: f_100_0:member_unit=1{b1, b2}*/
+f_100_0(Set<String> u, int b) => v(u, '1000', b);
+@pragma('dart2js:noInline')
+/*member: f_100_1:member_unit=3{b1, b2, b4}*/
+f_100_1(Set<String> u, int b) => v(u, '1001', b);
+@pragma('dart2js:noInline')
+/*member: f_101_0:member_unit=4{b1, b2, b3}*/
+f_101_0(Set<String> u, int b) => v(u, '1010', b);
+@pragma('dart2js:noInline')
+/*member: f_101_1:member_unit=2{b1, b2, b3, b4}*/
+f_101_1(Set<String> u, int b) => v(u, '1011', b);
+@pragma('dart2js:noInline')
+/*member: f_110_0:member_unit=1{b1, b2}*/
+f_110_0(Set<String> u, int b) => v(u, '1100', b);
+@pragma('dart2js:noInline')
+/*member: f_110_1:member_unit=3{b1, b2, b4}*/
+f_110_1(Set<String> u, int b) => v(u, '1101', b);
+@pragma('dart2js:noInline')
+/*member: f_111_0:member_unit=4{b1, b2, b3}*/
+f_111_0(Set<String> u, int b) => v(u, '1110', b);
+@pragma('dart2js:noInline')
+/*member: f_111_1:member_unit=2{b1, b2, b3, b4}*/
+f_111_1(Set<String> u, int b) => v(u, '1111', b);
+@pragma('dart2js:noInline')
+/*member: f_010_0:member_unit=1{b1, b2}*/
+f_010_0(Set<String> u, int b) => v(u, '0100', b);
+@pragma('dart2js:noInline')
+/*member: f_010_1:member_unit=3{b1, b2, b4}*/
+f_010_1(Set<String> u, int b) => v(u, '0101', b);
+@pragma('dart2js:noInline')
+/*member: f_011_0:member_unit=4{b1, b2, b3}*/
+f_011_0(Set<String> u, int b) => v(u, '0110', b);
+@pragma('dart2js:noInline')
+/*member: f_011_1:member_unit=2{b1, b2, b3, b4}*/
+f_011_1(Set<String> u, int b) => v(u, '0111', b);
+@pragma('dart2js:noInline')
+/*member: f_001_0:member_unit=5{b3}*/
+f_001_0(Set<String> u, int b) => v(u, '0010', b);
+@pragma('dart2js:noInline')
+/*member: f_001_1:member_unit=6{b3, b4}*/
+f_001_1(Set<String> u, int b) => v(u, '0011', b);
+@pragma('dart2js:noInline')
+/*member: f_000_1:member_unit=7{b4}*/
+f_000_1(Set<String> u, int b) => v(u, '0001', b);
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib_000_1.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib_000_1.dart
new file mode 100644
index 0000000..189dcd0
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib_000_1.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import "package:expect/expect.dart";
+
+import 'libImport.dart';
+
+@pragma('dart2js:noInline')
+/*member: g_000_1:member_unit=7{b4}*/
+g_000_1() {
+  Set<String> uniques = {};
+
+  // f_***_1;
+  f_000_1(uniques, 3);
+  f_001_1(uniques, 3);
+  f_010_1(uniques, 3);
+  f_011_1(uniques, 3);
+  f_100_1(uniques, 3);
+  f_101_1(uniques, 3);
+  f_110_1(uniques, 3);
+  f_111_1(uniques, 3);
+  Expect.equals(8, uniques.length);
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib_001_0.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib_001_0.dart
new file mode 100644
index 0000000..9320c80
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib_001_0.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import "package:expect/expect.dart";
+
+import 'libImport.dart';
+
+@pragma('dart2js:noInline')
+/*member: g_001_0:member_unit=5{b3}*/
+g_001_0() {
+  Set<String> uniques = {};
+
+  // f_**1_*;
+  f_001_0(uniques, 2);
+  f_001_1(uniques, 2);
+  f_011_0(uniques, 2);
+  f_011_1(uniques, 2);
+  f_101_0(uniques, 2);
+  f_101_1(uniques, 2);
+  f_111_0(uniques, 2);
+  f_111_1(uniques, 2);
+  Expect.equals(8, uniques.length);
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib_010_0.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib_010_0.dart
new file mode 100644
index 0000000..b2575c3
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib_010_0.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import "package:expect/expect.dart";
+
+import 'libImport.dart';
+
+@pragma('dart2js:noInline')
+/*member: g_010_0:member_unit=1{b1, b2}*/
+g_010_0() {
+  Set<String> uniques = {};
+
+  // f_*1*_*;
+  f_010_0(uniques, 1);
+  f_010_1(uniques, 1);
+  f_011_0(uniques, 1);
+  f_011_1(uniques, 1);
+  f_110_0(uniques, 1);
+  f_110_1(uniques, 1);
+  f_111_0(uniques, 1);
+  f_111_1(uniques, 1);
+  Expect.equals(8, uniques.length);
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart b/pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart
new file mode 100644
index 0000000..4d8ad55
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/lib_100_0.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import "package:expect/expect.dart";
+
+import 'libImport.dart';
+
+@pragma('dart2js:noInline')
+/*member: g_100_0:member_unit=1{b1, b2}*/
+g_100_0() {
+  Set<String> uniques = {};
+
+  // f_1**_*;
+  f_100_0(uniques, 0);
+  f_100_1(uniques, 0);
+  f_101_0(uniques, 0);
+  f_101_1(uniques, 0);
+  f_110_0(uniques, 0);
+  f_110_1(uniques, 0);
+  f_111_0(uniques, 0);
+  f_111_1(uniques, 0);
+  Expect.equals(8, uniques.length);
+}
diff --git a/pkg/compiler/test/custom_split/data/just_fuse/main.dart b/pkg/compiler/test/custom_split/data/just_fuse/main.dart
new file mode 100644
index 0000000..7cceec0
--- /dev/null
+++ b/pkg/compiler/test/custom_split/data/just_fuse/main.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: 
+ a_pre_fragments=[
+  p1: {units: [7{b4}], usedBy: [], needs: []},
+  p2: {units: [5{b3}], usedBy: [], needs: []},
+  p3: {units: [6{b3, b4}], usedBy: [], needs: []},
+  p4: {units: [1{b1, b2}], usedBy: [], needs: []},
+  p5: {units: [3{b1, b2, b4}], usedBy: [], needs: []},
+  p6: {units: [4{b1, b2, b3}], usedBy: [], needs: []},
+  p7: {units: [2{b1, b2, b3, b4}], usedBy: [], needs: []}],
+ b_finalized_fragments=[
+  f1: [7{b4}],
+  f2: [5{b3}],
+  f3: [6{b3, b4}],
+  f4: [1{b1, b2}],
+  f5: [3{b1, b2, b4}],
+  f6: [4{b1, b2, b3}],
+  f7: [2{b1, b2, b3, b4}]],
+ c_steps=[
+  b1=(f7, f6, f5, f4),
+  b2=(f7, f6, f5, f4),
+  b3=(f7, f6, f3, f2),
+  b4=(f7, f5, f3, f1)]
+*/
+
+// This file was autogenerated by the pkg/compiler/tool/graph_isomorphizer.dart.
+import 'lib1.dart';
+import 'lib2.dart';
+import 'lib3.dart';
+import 'lib4.dart';
+
+/*member: main:member_unit=main{}*/
+main() {
+  entryLib1();
+  entryLib2();
+  entryLib3();
+  entryLib4();
+}
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart b/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
index 18c2288..329c0b3 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/lib1.dart
@@ -24,22 +24,22 @@
 var x = const ConstClass(const ConstClass(1));
 
 /*class: C:
- class_unit=1{lib1},
- type_unit=1{lib1}
+ class_unit=3{lib1},
+ type_unit=3{lib1}
 */
 class C {
-  /*member: C.foo:member_unit=3{lib2}*/
+  /*member: C.foo:member_unit=1{lib2}*/
   static foo() {
-    /*closure_unit=3{lib2}*/ () {}(); // Hack to avoid inlining.
+    /*closure_unit=1{lib2}*/ () {}(); // Hack to avoid inlining.
     return 1;
   }
 
-  /*member: C.:member_unit=1{lib1}*/
+  /*member: C.:member_unit=3{lib1}*/
   C();
 
-  /*member: C.bar:member_unit=1{lib1}*/
+  /*member: C.bar:member_unit=3{lib1}*/
   bar() {
-    /*closure_unit=1{lib1}*/ () {}(); // Hack to avoid inlining.
+    /*closure_unit=3{lib1}*/ () {}(); // Hack to avoid inlining.
     return 1;
   }
 }
@@ -50,79 +50,79 @@
 */
 class C1 {
   /*member: C1.foo:
-   constants=[MapConstant({})=3{lib2}],
-   member_unit=3{lib2}
+   constants=[MapConstant({})=1{lib2}],
+   member_unit=1{lib2}
   */
   static var foo = const {};
   var bar = const {};
 }
 
 /*class: C2:
- class_unit=1{lib1},
- type_unit=1{lib1}
+ class_unit=3{lib1},
+ type_unit=3{lib1}
 */
 class C2 {
-  /*member: C2.foo:member_unit=3{lib2}*/
+  /*member: C2.foo:member_unit=1{lib2}*/
   static var foo = new Map<int, int>.from({1: 2});
 
-  /*member: C2.bar:member_unit=1{lib1}*/
+  /*member: C2.bar:member_unit=3{lib1}*/
   var bar = new Map<int, int>.from({1: 2});
 
-  /*member: C2.:member_unit=1{lib1}*/
+  /*member: C2.:member_unit=3{lib1}*/
   C2();
 }
 
 /*class: C3:
- class_unit=1{lib1},
- type_unit=1{lib1}
+ class_unit=3{lib1},
+ type_unit=3{lib1}
 */
 class C3 {
   /*member: C3.foo:
    constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=2{lib1, lib2}],
-   member_unit=3{lib2}
+   member_unit=1{lib2}
   */
   static final foo = const ConstClass(const ConstClass(1));
 
   /*member: C3.bar:
    constants=[ConstructedConstant(ConstClass(x=ConstructedConstant(ConstClass(x=IntConstant(1)))))=2{lib1, lib2}],
-   member_unit=1{lib1}
+   member_unit=3{lib1}
   */
   final bar = const ConstClass(const ConstClass(1));
 
-  /*member: C3.:member_unit=1{lib1}*/
+  /*member: C3.:member_unit=3{lib1}*/
   C3();
 }
 
 /*class: C4:
- class_unit=1{lib1},
- type_unit=1{lib1}
+ class_unit=3{lib1},
+ type_unit=3{lib1}
 */
 class C4 {
-  /*member: C4.foo:member_unit=3{lib2}*/
+  /*member: C4.foo:member_unit=1{lib2}*/
   static final foo = new Map<ConstClass, ConstClass>.from({x: x});
 
-  /*member: C4.bar:member_unit=1{lib1}*/
+  /*member: C4.bar:member_unit=3{lib1}*/
   final bar = new Map<ConstClass, ConstClass>.from({x: x});
 
-  /*member: C4.:member_unit=1{lib1}*/
+  /*member: C4.:member_unit=3{lib1}*/
   C4();
 }
 
 /*class: C5:
- class_unit=1{lib1},
- type_unit=1{lib1}
+ class_unit=3{lib1},
+ type_unit=3{lib1}
 */
 class C5 {
   static const foo = const [
     const {1: 3}
   ];
 
-  /*member: C5.:member_unit=1{lib1}*/
+  /*member: C5.:member_unit=3{lib1}*/
   C5();
 
-  /*member: C5.bar:member_unit=1{lib1}*/
+  /*member: C5.bar:member_unit=3{lib1}*/
   bar() {
-    /*closure_unit=1{lib1}*/ () {}(); // Hack to avoid inlining.
+    /*closure_unit=3{lib1}*/ () {}(); // Hack to avoid inlining.
     return 1;
   }
 }
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart b/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
index 79c236c..92549e2 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/lib2.dart
@@ -11,9 +11,9 @@
 
 /*member: foo:
  constants=[
-  ListConstant(<Map<int*,int*>*>[MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})])=3{lib2},
-  MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})=3{lib2}],
- member_unit=3{lib2}
+  ListConstant(<Map<int*,int*>*>[MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})])=1{lib2},
+  MapConstant(<int*, int*>{IntConstant(1): IntConstant(3)})=1{lib2}],
+ member_unit=1{lib2}
 */
 foo() {
   Expect.equals(1, C.foo());
diff --git a/pkg/compiler/test/deferred_loading/data/static_separate/main.dart b/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
index 42aa6ee..2d35936 100644
--- a/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
+++ b/pkg/compiler/test/deferred_loading/data/static_separate/main.dart
@@ -4,12 +4,12 @@
 
 /*spec.library: 
  a_pre_fragments=[
-  p1: {units: [1{lib1}], usedBy: [], needs: []},
-  p2: {units: [3{lib2}], usedBy: [], needs: []},
+  p1: {units: [3{lib1}], usedBy: [], needs: []},
+  p2: {units: [1{lib2}], usedBy: [], needs: []},
   p3: {units: [2{lib1, lib2}], usedBy: [], needs: []}],
  b_finalized_fragments=[
-  f1: [1{lib1}],
-  f2: [3{lib2}],
+  f1: [3{lib1}],
+  f2: [1{lib2}],
   f3: [2{lib1, lib2}]],
  c_steps=[
   lib1=(f3, f1),
@@ -18,12 +18,12 @@
 
 /*two-frag|three-frag.library: 
  a_pre_fragments=[
-  p1: {units: [1{lib1}], usedBy: [p3], needs: []},
-  p2: {units: [3{lib2}], usedBy: [p3], needs: []},
+  p1: {units: [3{lib1}], usedBy: [p3], needs: []},
+  p2: {units: [1{lib2}], usedBy: [p3], needs: []},
   p3: {units: [2{lib1, lib2}], usedBy: [], needs: [p1, p2]}],
  b_finalized_fragments=[
-  f1: [1{lib1}],
-  f2: [3{lib2}],
+  f1: [3{lib1}],
+  f2: [1{lib2}],
   f3: [2{lib1, lib2}]],
  c_steps=[
   lib1=(f3, f1),
diff --git a/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart b/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
index 435002d..92c1cb6 100644
--- a/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
+++ b/pkg/compiler/test/deferred_loading/deferred_loading_test_helper.dart
@@ -341,7 +341,7 @@
 /// corresponding to [object] at location [sourceSpan]. We also perform error
 /// checking to ensure that the same [id] isn't added twice.
 void _registerValue<T>(Id id, T value, Object object, SourceSpan sourceSpan,
-    Map<Id, ActualData<T>> actualMap, CompilerDiagnosticReporter reporter) {
+    Map<Id, ActualData<T>> actualMap, DiagnosticReporter reporter) {
   if (actualMap.containsKey(id)) {
     ActualData<T> existingData = actualMap[id];
     reportHere(reporter, sourceSpan,
diff --git a/pkg/compiler/test/end_to_end/data/exit_code_helper.dart b/pkg/compiler/test/end_to_end/data/exit_code_helper.dart
index ab73b3a..4ce6da8 100644
--- a/pkg/compiler/test/end_to_end/data/exit_code_helper.dart
+++ b/pkg/compiler/test/end_to_end/data/exit_code_helper.dart
@@ -1 +1,5 @@
+// Copyright (c) 2013, 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 main() {}
diff --git a/pkg/compiler/test/end_to_end/diagnostic_reporter_helper.dart b/pkg/compiler/test/end_to_end/diagnostic_reporter_helper.dart
deleted file mode 100644
index ba061e2..0000000
--- a/pkg/compiler/test/end_to_end/diagnostic_reporter_helper.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-library dart2js.diagnostic_reporter.helper;
-
-import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
-import 'package:compiler/src/diagnostics/messages.dart';
-import 'package:compiler/src/diagnostics/source_span.dart';
-import 'package:compiler/src/diagnostics/spannable.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/options.dart';
-
-abstract class DiagnosticReporterWrapper extends DiagnosticReporter {
-  DiagnosticReporter get reporter;
-
-  @override
-  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
-      [Map<String, String> arguments = const {}]) {
-    return reporter.createMessage(spannable, messageKind, arguments);
-  }
-
-  @override
-  internalError(Spannable spannable, message) {
-    return reporter.internalError(spannable, message);
-  }
-
-  @override
-  void log(message) {
-    return reporter.log(message);
-  }
-
-  @override
-  DiagnosticOptions get options => reporter.options;
-
-  @override
-  void reportError(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reporter.reportError(message, infos);
-  }
-
-  @override
-  void reportHint(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reporter.reportHint(message, infos);
-  }
-
-  @override
-  void reportInfo(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reporter.reportInfo(message, infos);
-  }
-
-  @override
-  void reportInfoMessage(Spannable node, MessageKind errorCode,
-      [Map<String, String> arguments = const {}]) {
-    // ignore: deprecated_member_use_from_same_package
-    reporter.reportInfoMessage(node, errorCode, arguments);
-  }
-
-  @override
-  void reportWarning(DiagnosticMessage message,
-      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
-    reporter.reportWarning(message, infos);
-  }
-
-  @override
-  SourceSpan spanFromSpannable(Spannable node) {
-    return reporter.spanFromSpannable(node);
-  }
-
-  @override
-  withCurrentElement(Entity element, f()) {
-    return reporter.withCurrentElement(element, f);
-  }
-
-  @override
-  bool get hasReportedError => reporter.hasReportedError;
-}
diff --git a/pkg/compiler/test/end_to_end/dill_loader_test.dart b/pkg/compiler/test/end_to_end/dill_loader_test.dart
index 6e22f60..fe24e88 100644
--- a/pkg/compiler/test/end_to_end/dill_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/dill_loader_test.dart
@@ -10,7 +10,7 @@
 import 'package:compiler/src/elements/entities.dart'
     show LibraryEntity, ClassEntity;
 import 'package:compiler/src/kernel/dart2js_target.dart';
-import 'package:compiler/src/kernel/loader.dart';
+import 'package:compiler/src/phase/load_kernel.dart' as load_kernel;
 import 'package:expect/expect.dart';
 import 'package:front_end/src/api_unstable/dart2js.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
@@ -42,8 +42,14 @@
         memorySourceFiles: {'main.dill': kernelBinary},
         diagnosticHandler: diagnostics,
         outputProvider: output);
-    KernelResult result = await compiler.kernelLoader.load();
-    compiler.frontendStrategy.registerLoadedLibraries(result);
+    load_kernel.Output result = await load_kernel.run(load_kernel.Input(
+        compiler.options,
+        compiler.provider,
+        compiler.reporter,
+        compiler.initializedCompilerState,
+        false));
+    compiler.frontendStrategy
+        .registerLoadedLibraries(result.component, result.libraries);
 
     Expect.equals(0, diagnostics.errors.length);
     Expect.equals(0, diagnostics.warnings.length);
diff --git a/pkg/compiler/test/end_to_end/exit_code_test.dart b/pkg/compiler/test/end_to_end/exit_code_test.dart
index be0974f..b42b5fd 100644
--- a/pkg/compiler/test/end_to_end/exit_code_test.dart
+++ b/pkg/compiler/test/end_to_end/exit_code_test.dart
@@ -28,7 +28,6 @@
 import 'package:compiler/src/options.dart' show CompilerOptions;
 import 'package:compiler/src/universe/world_impact.dart';
 import 'package:compiler/src/world.dart';
-import 'diagnostic_reporter_helper.dart';
 import '../helpers/memory_compiler.dart';
 
 class TestCompiler extends Compiler {
@@ -46,10 +45,8 @@
       String this.testMarker,
       String this.testType,
       Function this.onTest)
-      : reporter = new TestDiagnosticReporter(),
-        super(inputProvider, outputProvider, handler, options) {
-    reporter.compiler = this;
-    reporter.reporter = super.reporter;
+      : super(inputProvider, outputProvider, handler, options) {
+    reporter = new TestDiagnosticReporter(this);
     test('Compiler');
   }
 
@@ -122,10 +119,10 @@
   }
 }
 
-class TestDiagnosticReporter extends DiagnosticReporterWrapper {
+class TestDiagnosticReporter extends DiagnosticReporter {
   TestCompiler compiler;
-  @override
-  DiagnosticReporter reporter;
+
+  TestDiagnosticReporter(this.compiler) : super(compiler);
 
   @override
   withCurrentElement(Entity element, f()) {
diff --git a/pkg/compiler/test/end_to_end/modular_loader_test.dart b/pkg/compiler/test/end_to_end/modular_loader_test.dart
index 00abbf1..33fc298 100644
--- a/pkg/compiler/test/end_to_end/modular_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/modular_loader_test.dart
@@ -10,7 +10,7 @@
 import 'package:compiler/src/elements/entities.dart'
     show LibraryEntity, ClassEntity;
 import 'package:compiler/src/kernel/dart2js_target.dart';
-import 'package:compiler/src/kernel/loader.dart';
+import 'package:compiler/src/phase/load_kernel.dart' as load_kernel;
 import 'package:expect/expect.dart';
 import 'package:front_end/src/api_prototype/front_end.dart';
 import 'package:front_end/src/api_prototype/memory_file_system.dart';
@@ -43,8 +43,14 @@
         memorySourceFiles: {'a.dill': aDill, 'b.dill': bDill, 'c.dill': cDill},
         diagnosticHandler: diagnostics,
         outputProvider: output);
-    KernelResult result = await compiler.kernelLoader.load();
-    compiler.frontendStrategy.registerLoadedLibraries(result);
+    load_kernel.Output result = await load_kernel.run(load_kernel.Input(
+        compiler.options,
+        compiler.provider,
+        compiler.reporter,
+        compiler.initializedCompilerState,
+        false));
+    compiler.frontendStrategy
+        .registerLoadedLibraries(result.component, result.libraries);
 
     Expect.equals(0, diagnostics.errors.length);
     Expect.equals(0, diagnostics.warnings.length);
diff --git a/pkg/compiler/test/end_to_end/no_platform_test.dart b/pkg/compiler/test/end_to_end/no_platform_test.dart
index 00578fc..e786f3f 100644
--- a/pkg/compiler/test/end_to_end/no_platform_test.dart
+++ b/pkg/compiler/test/end_to_end/no_platform_test.dart
@@ -30,7 +30,8 @@
         (fe.DiagnosticMessage message) {
       message.plainTextFormatted.forEach(print);
       Expect.notEquals(fe.Severity.error, message.severity);
-    }, Uri.base.resolve('pkg/compiler/test/end_to_end/data/hello_world.dart'));
+    }, [Uri.base.resolve('pkg/compiler/test/end_to_end/data/hello_world.dart')],
+        false);
     Expect.isNotNull(new ir.CoreTypes(component).futureClass);
   }
 
diff --git a/pkg/compiler/test/end_to_end/trim_component_test.dart b/pkg/compiler/test/end_to_end/trim_component_test.dart
new file mode 100644
index 0000000..3673cbf
--- /dev/null
+++ b/pkg/compiler/test/end_to_end/trim_component_test.dart
@@ -0,0 +1,102 @@
+// 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:expect/expect.dart';
+import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
+import '../helpers/memory_compiler.dart';
+
+const memorySourceFiles = const {
+  'main.dart': '''
+// @dart=2.12
+import 'used.dart';
+
+void main() {
+  foo();
+}
+
+''',
+  'used.dart': '''
+// @dart=2.12
+
+void foo() {
+  print('foo');
+}
+''',
+  'unused.dart': '''
+// @dart=2.12
+
+void unused() {
+  throw 'unused';
+}
+'''
+};
+
+void verifyComponent(
+    ir.Component component, List<String> included, List<String> excluded) {
+  Set<String> uris = {};
+  component.libraries
+      .forEach((library) => uris.add(library.importUri.toString()));
+  for (String include in included) {
+    Expect.isTrue(uris.contains(include));
+  }
+  for (String exclude in excluded) {
+    Expect.isFalse(uris.contains(exclude));
+  }
+}
+
+Future<List<int>> buildDillAndVerify(
+    Map<String, dynamic> memorySourceFiles,
+    List<String> flags,
+    List<String> includedLibraries,
+    List<String> excludedLibraries) async {
+  final dillUri = Uri.parse('out.dill');
+  final collector = OutputCollector();
+  CompilationResult result = await runCompiler(
+      memorySourceFiles: memorySourceFiles,
+      options: flags,
+      outputProvider: collector);
+  Expect.isTrue(result.isSuccess);
+  Expect.isTrue(collector.binaryOutputMap.containsKey(dillUri));
+  List<int> bytes = collector.binaryOutputMap[dillUri].list;
+  Expect.isTrue(bytes.isNotEmpty);
+  ir.Component component = ir.Component();
+  BinaryBuilder(bytes).readComponent(component);
+  verifyComponent(component, includedLibraries, excludedLibraries);
+  return bytes;
+}
+
+void verifyComponentTrim() async {
+  List<String> buildDillFromSourceFlags = [
+    '--cfe-only',
+    '--out=out.dill',
+    '--sources=memory:main.dart,memory:used.dart,memory:unused.dart',
+    '--sound-null-safety',
+  ];
+  List<int> bytes = await buildDillAndVerify(
+      memorySourceFiles,
+      buildDillFromSourceFlags,
+      ['memory:main.dart', 'memory:used.dart', 'memory:unused.dart'],
+      []);
+
+  // The combination of `--cfe-only` + `--entry-uri` should trigger the
+  // component trimming logic.
+  List<String> trimDillFlags = [
+    '--input-dill=memory:main.dill',
+    '--cfe-only',
+    '--out=out.dill',
+    '--entry-uri=main.dart',
+    '--sound-null-safety',
+  ];
+  List<int> newBytes = await buildDillAndVerify(
+      {'main.dill': bytes},
+      trimDillFlags,
+      ['memory:main.dart', 'memory:used.dart'],
+      ['memory:unused.dart']);
+  Expect.isTrue(newBytes.length < bytes.length);
+}
+
+void main() async {
+  await verifyComponentTrim();
+}
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/memory_compiler.dart b/pkg/compiler/test/helpers/memory_compiler.dart
index 7131e00..31866ca 100644
--- a/pkg/compiler/test/helpers/memory_compiler.dart
+++ b/pkg/compiler/test/helpers/memory_compiler.dart
@@ -109,8 +109,8 @@
     beforeRun(compiler);
   }
   bool isSuccess = await compiler.run();
-  fe.InitializedCompilerState compilerState = kernelInitializedCompilerState =
-      compiler.kernelLoader.initializedCompilerState;
+  fe.InitializedCompilerState compilerState =
+      kernelInitializedCompilerState = compiler.initializedCompilerState;
   return new CompilationResult(compiler,
       isSuccess: isSuccess, kernelInitializedCompilerState: compilerState);
 }
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/impact/impact_test.dart b/pkg/compiler/test/impact/impact_test.dart
index c3ff87b..7cec147 100644
--- a/pkg/compiler/test/impact/impact_test.dart
+++ b/pkg/compiler/test/impact/impact_test.dart
@@ -21,15 +21,8 @@
 main(List<String> args) {
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
-    print('Testing direct computation of ResolutionImpact');
-    print('==================================================================');
-    useImpactDataForTesting = false;
-    await checkTests(dataDir, const ImpactDataComputer(),
-        args: args, testedConfigs: allSpecConfigs);
-
     print('Testing computation of ResolutionImpact through ImpactData');
     print('==================================================================');
-    useImpactDataForTesting = true;
     await checkTests(dataDir, const ImpactDataComputer(),
         args: args, testedConfigs: allSpecConfigs);
   });
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/js/js_spec_string_test.dart b/pkg/compiler/test/js/js_spec_string_test.dart
index ad274e5..8ae300c 100644
--- a/pkg/compiler/test/js/js_spec_string_test.dart
+++ b/pkg/compiler/test/js/js_spec_string_test.dart
@@ -18,6 +18,8 @@
 const NULL = 'Null';
 
 class Listener extends DiagnosticReporter {
+  Listener() : super(null);
+
   String errorMessage;
   @override
   internalError(spannable, message) {
diff --git a/pkg/compiler/test/model/enqueuer_test.dart b/pkg/compiler/test/model/enqueuer_test.dart
index d6a2ac6..ac2f0c3 100644
--- a/pkg/compiler/test/model/enqueuer_test.dart
+++ b/pkg/compiler/test/model/enqueuer_test.dart
@@ -254,7 +254,7 @@
 
     Object createConstraint(ClassEntity cls) {
       return new StrongModeConstraint(compiler.frontendStrategy.commonElements,
-          compiler.frontendStrategy.nativeBasicData, cls);
+          compiler.frontendStrategy.elementMap.nativeBasicData, cls);
     }
 
     for (Impact impact in impacts) {
diff --git a/pkg/compiler/test/model/in_user_code_test.dart b/pkg/compiler/test/model/in_user_code_test.dart
deleted file mode 100644
index 81bee9c..0000000
--- a/pkg/compiler/test/model/in_user_code_test.dart
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-// Test that the helper [Compiler.inUserCode] works as intended.
-
-import 'dart:async';
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-import 'package:compiler/src/compiler.dart' show Compiler;
-import '../helpers/memory_compiler.dart';
-
-const SOURCE = const {
-  'main.dart': """
-library main;
-
-import 'dart:async';
-import 'foo.dart';
-import 'pkg/sub/bar.dart';
-import 'package:sub/bar.dart';
-import 'package:sup/boz.dart';
-
-main() {}
-""",
-  'foo.dart': """
-library foo;
-""",
-  'pkg/sub/bar.dart': """
-library sub.bar;
-
-import 'package:sup/boz.dart';
-import 'baz.dart';
-
-main() {}
-""",
-  'pkg/sub/baz.dart': """
-library sub.baz;
-""",
-  'pkg/sup/boz.dart': """
-library sup.boz;
-""",
-  '.packages': """
-sub:pkg/sub/
-sup:pkg/sup/
-"""
-};
-
-Future test(Uri entryPoint, Map<String, bool> expectedResults) async {
-  print("Test: $entryPoint");
-  CompilationResult result = await runCompiler(
-      entryPoint: entryPoint,
-      memorySourceFiles: SOURCE,
-      packageConfig: Uri.parse('memory:.packages'));
-  Compiler compiler = result.compiler;
-  expectedResults.forEach((String uri, bool expectedResult) {
-    dynamic element = compiler.frontendStrategy.elementEnvironment
-        .lookupLibrary(Uri.parse(uri));
-    Expect.isNotNull(element, "Unknown library '$uri'.");
-    Expect.equals(
-        expectedResult,
-        compiler.inUserCode(element),
-        expectedResult
-            ? "Library '$uri' expected to be in user code"
-            : "Library '$uri' not expected to be in user code");
-  });
-}
-
-void main() {
-  asyncTest(runTests);
-}
-
-Future runTests() async {
-  await test(Uri.parse('memory:main.dart'), {
-    'memory:main.dart': true,
-    'memory:foo.dart': true,
-    'memory:pkg/sub/bar.dart': true,
-    'memory:pkg/sub/baz.dart': true,
-    'package:sub/bar.dart': false,
-    'package:sub/baz.dart': false,
-    'package:sup/boz.dart': false,
-    'dart:core': false,
-    'dart:async': false
-  });
-  await test(Uri.parse('package:sub/bar.dart'), {
-    'package:sub/bar.dart': true,
-    'package:sub/baz.dart': true,
-    'package:sup/boz.dart': false,
-    'dart:core': false
-  });
-}
diff --git a/pkg/compiler/test/model/open_world_test.dart b/pkg/compiler/test/model/open_world_test.dart
index d098a5d..fa190d8 100644
--- a/pkg/compiler/test/model/open_world_test.dart
+++ b/pkg/compiler/test/model/open_world_test.dart
@@ -93,7 +93,7 @@
     commonElements = compiler.frontendStrategy.commonElements;
     ElementEnvironment elementEnvironment =
         compiler.frontendStrategy.elementEnvironment;
-    nativeBasicData = compiler.frontendStrategy.nativeBasicData;
+    nativeBasicData = compiler.frontendStrategy.elementMap.nativeBasicData;
     world = compiler.resolutionWorldBuilderForTesting;
 
     ClassEntity findClass(String name) {
diff --git a/pkg/compiler/test/rti/data/async_foreach.dart b/pkg/compiler/test/rti/data/async_foreach.dart
index 1a14bd2..433b5a1 100644
--- a/pkg/compiler/test/rti/data/async_foreach.dart
+++ b/pkg/compiler/test/rti/data/async_foreach.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: Class:direct,explicit=[Class.T*],implicit=[Class.T],needsArgs*/
+/*spec.class: Class:explicit=[Class.T*],implicit=[Class.T],needsArgs,test*/
 /*prod.class: Class:needsArgs*/
 class Class<T> {
   method() {
diff --git a/pkg/compiler/test/rti/data/async_foreach_nonasync.dart b/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
index 0cb5ac1..1e371c6 100644
--- a/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
+++ b/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: Class:direct,explicit=[Class.T*],implicit=[Class.T],needsArgs*/
+/*spec.class: Class:explicit=[Class.T*],implicit=[Class.T],needsArgs,test*/
 class Class<T> {
   method() {
     var list = <T>[];
diff --git a/pkg/compiler/test/rti/data/call_typed_generic.dart b/pkg/compiler/test/rti/data/call_typed_generic.dart
index cc7b472..6900251 100644
--- a/pkg/compiler/test/rti/data/call_typed_generic.dart
+++ b/pkg/compiler/test/rti/data/call_typed_generic.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*spec.class: A:explicit=[A.T*],needsArgs,test*/
 class A<T> {
   call(T t) {}
 }
diff --git a/pkg/compiler/test/rti/data/closure.dart b/pkg/compiler/test/rti/data/closure.dart
index 2e728d0..c4301ee 100644
--- a/pkg/compiler/test/rti/data/closure.dart
+++ b/pkg/compiler/test/rti/data/closure.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*spec.class: A:explicit=[A.T*],needsArgs,test*/
 /*prod.class: A:needsArgs*/
 class A<T> {
   m() {
diff --git a/pkg/compiler/test/rti/data/closure_generic_unneeded.dart b/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
index 6b0ad84..9f8c2d8 100644
--- a/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
+++ b/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*spec.class: A:explicit=[A.T*],needsArgs,test*/
 /*prod.class: A:needsArgs*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/rti/data/closure_unneeded.dart b/pkg/compiler/test/rti/data/closure_unneeded.dart
index 6b0ad84..9f8c2d8 100644
--- a/pkg/compiler/test/rti/data/closure_unneeded.dart
+++ b/pkg/compiler/test/rti/data/closure_unneeded.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*spec.class: A:explicit=[A.T*],needsArgs,test*/
 /*prod.class: A:needsArgs*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/rti/data/dynamic_is.dart b/pkg/compiler/test/rti/data/dynamic_is.dart
index 6c4e5f6..279a58a 100644
--- a/pkg/compiler/test/rti/data/dynamic_is.dart
+++ b/pkg/compiler/test/rti/data/dynamic_is.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 class A {
-  /*member: A.instanceMethod:direct,explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  /*member: A.instanceMethod:explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)],test*/
   instanceMethod<T>(t) => t is T;
 }
 
diff --git a/pkg/compiler/test/rti/data/dynamic_is2.dart b/pkg/compiler/test/rti/data/dynamic_is2.dart
index 213c6bf..4da18d6 100644
--- a/pkg/compiler/test/rti/data/dynamic_is2.dart
+++ b/pkg/compiler/test/rti/data/dynamic_is2.dart
@@ -6,12 +6,12 @@
 
 /*spec.class: A:explicit=[A*]*/
 class A {
-  /*member: A.instanceMethod:deps=[B.instanceMethod],direct,explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  /*member: A.instanceMethod:deps=[B.instanceMethod],explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)],test*/
   instanceMethod<T>(t) => t is T;
 }
 
 class B {
-  /*member: B.instanceMethod:implicit=[instanceMethod.T],indirect,needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)]*/
+  /*member: B.instanceMethod:implicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)],test*/
   instanceMethod<T>(A a, t) => a.instanceMethod<T>(t);
 }
 
diff --git a/pkg/compiler/test/rti/data/dynamic_is_closure.dart b/pkg/compiler/test/rti/data/dynamic_is_closure.dart
index d5e213c..3cee2f0 100644
--- a/pkg/compiler/test/rti/data/dynamic_is_closure.dart
+++ b/pkg/compiler/test/rti/data/dynamic_is_closure.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 class A {
-  /*member: A.instanceMethod:direct,explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  /*member: A.instanceMethod:explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)],test*/
   instanceMethod<T>(t) => t is T;
 }
 
diff --git a/pkg/compiler/test/rti/data/dynamic_is_closure2.dart b/pkg/compiler/test/rti/data/dynamic_is_closure2.dart
index 36482a6..dddff8c 100644
--- a/pkg/compiler/test/rti/data/dynamic_is_closure2.dart
+++ b/pkg/compiler/test/rti/data/dynamic_is_closure2.dart
@@ -5,12 +5,12 @@
 // @dart = 2.7
 
 class A {
-  /*member: A.instanceMethod:deps=[local],direct,explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  /*member: A.instanceMethod:deps=[local],explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)],test*/
   instanceMethod<T>(t) => t is T;
 }
 
 main() {
-  /*implicit=[local.T],indirect,needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+  /*implicit=[local.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)],test*/
   local<T>(t) {
     var a = new A();
     a.instanceMethod<T>(t);
diff --git a/pkg/compiler/test/rti/data/dynamic_tear_off.dart b/pkg/compiler/test/rti/data/dynamic_tear_off.dart
index baae3e9..2e21118 100644
--- a/pkg/compiler/test/rti/data/dynamic_tear_off.dart
+++ b/pkg/compiler/test/rti/data/dynamic_tear_off.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*member: staticMethod:direct,explicit=[staticMethod.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+/*member: staticMethod:explicit=[staticMethod.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)],test*/
 staticMethod<T>(t) => t is T;
 
 main() {
diff --git a/pkg/compiler/test/rti/data/dynamic_tear_off2.dart b/pkg/compiler/test/rti/data/dynamic_tear_off2.dart
index 1db565c..ddf36f7 100644
--- a/pkg/compiler/test/rti/data/dynamic_tear_off2.dart
+++ b/pkg/compiler/test/rti/data/dynamic_tear_off2.dart
@@ -4,11 +4,11 @@
 
 // @dart = 2.7
 
-/*member: staticMethod:deps=[B.instanceMethod],direct,explicit=[staticMethod.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+/*member: staticMethod:deps=[B.instanceMethod],explicit=[staticMethod.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)],test*/
 staticMethod<T>(t) => t is T;
 
 class B {
-  /*member: B.instanceMethod:implicit=[instanceMethod.T],indirect,needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)]*/
+  /*member: B.instanceMethod:implicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=2, types=1)],test*/
   instanceMethod<T>(a, t) => a<T>(t);
 }
 
diff --git a/pkg/compiler/test/rti/data/dynamic_tear_off3.dart b/pkg/compiler/test/rti/data/dynamic_tear_off3.dart
index 8917791..51f06d1 100644
--- a/pkg/compiler/test/rti/data/dynamic_tear_off3.dart
+++ b/pkg/compiler/test/rti/data/dynamic_tear_off3.dart
@@ -6,11 +6,11 @@
 
 /*spec.class: A:explicit=[A*]*/
 class A {
-  /*member: A.instanceMethod:deps=[staticMethod],direct,explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
+  /*member: A.instanceMethod:deps=[staticMethod],explicit=[instanceMethod.T*],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)],test*/
   instanceMethod<T>(t) => t is T;
 }
 
-/*member: staticMethod:implicit=[staticMethod.T],indirect,needsArgs,selectors=[Selector(call, call, arity=2, types=1)]*/
+/*member: staticMethod:implicit=[staticMethod.T],needsArgs,selectors=[Selector(call, call, arity=2, types=1)],test*/
 staticMethod<T>(A a, t) => a.instanceMethod<T>(t);
 
 main() {
diff --git a/pkg/compiler/test/rti/data/dynamic_tear_off4.dart b/pkg/compiler/test/rti/data/dynamic_tear_off4.dart
index 462b94d..5ac2dd1 100644
--- a/pkg/compiler/test/rti/data/dynamic_tear_off4.dart
+++ b/pkg/compiler/test/rti/data/dynamic_tear_off4.dart
@@ -4,10 +4,10 @@
 
 // @dart = 2.7
 
-/*member: staticMethod1:deps=[staticMethod2],direct,explicit=[staticMethod1.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
+/*member: staticMethod1:deps=[staticMethod2],explicit=[staticMethod1.T*],needsArgs,selectors=[Selector(call, call, arity=1, types=1)],test*/
 staticMethod1<T>(t) => t is T;
 
-/*member: staticMethod2:implicit=[staticMethod2.T],indirect,needsArgs,selectors=[Selector(call, call, arity=2, types=1)]*/
+/*member: staticMethod2:implicit=[staticMethod2.T],needsArgs,selectors=[Selector(call, call, arity=2, types=1)],test*/
 staticMethod2<T>(a, t) => a<T>(t);
 
 main() {
diff --git a/pkg/compiler/test/rti/data/explicit_as.dart b/pkg/compiler/test/rti/data/explicit_as.dart
index cbfeda5..e90aad4 100644
--- a/pkg/compiler/test/rti/data/explicit_as.dart
+++ b/pkg/compiler/test/rti/data/explicit_as.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: C:direct,explicit=[C.T*,C<String*>*],needsArgs*/
+/*spec.class: C:explicit=[C.T*,C<String*>*],needsArgs,test*/
 class C<T> {
   T field;
 }
diff --git a/pkg/compiler/test/rti/data/function_subtype_local5.dart b/pkg/compiler/test/rti/data/function_subtype_local5.dart
index bf14939..dd30a14 100644
--- a/pkg/compiler/test/rti/data/function_subtype_local5.dart
+++ b/pkg/compiler/test/rti/data/function_subtype_local5.dart
@@ -17,7 +17,7 @@
 typedef int Boz<T>(T a);
 typedef int Biz<T>(T a, int b);
 
-/*class: C:direct,explicit=[int* Function(C.T*)*,int* Function(C.T*,[String*])*,int* Function(C.T*,int*)*,int* Function(C.T*,{,b:String*})*],needsArgs*/
+/*class: C:explicit=[int* Function(C.T*)*,int* Function(C.T*,[String*])*,int* Function(C.T*,int*)*,int* Function(C.T*,{,b:String*})*],needsArgs,test*/
 class C<T> {
   void test(String nameOfT, bool expectedResult) {
     // TODO(johnniwinther): Optimize local function type signature need.
diff --git a/pkg/compiler/test/rti/data/future_or.dart b/pkg/compiler/test/rti/data/future_or.dart
index 40e625c..afdce83 100644
--- a/pkg/compiler/test/rti/data/future_or.dart
+++ b/pkg/compiler/test/rti/data/future_or.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-/*spec.class: global#Future:implicit=[Future<A*>],indirect,needsArgs*/
+/*spec.class: global#Future:implicit=[Future<A*>],needsArgs,test*/
 
 /*class: A:explicit=[FutureOr<A*>*],implicit=[A,Future<A*>]*/
 class A {}
diff --git a/pkg/compiler/test/rti/data/future_or_future_or.dart b/pkg/compiler/test/rti/data/future_or_future_or.dart
index f2ff8ff..b7bc862 100644
--- a/pkg/compiler/test/rti/data/future_or_future_or.dart
+++ b/pkg/compiler/test/rti/data/future_or_future_or.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-/*spec.class: global#Future:implicit=[Future<A*>,Future<FutureOr<A*>*>],indirect,needsArgs*/
+/*spec.class: global#Future:implicit=[Future<A*>,Future<FutureOr<A*>*>],needsArgs,test*/
 
 /*class: A:explicit=[FutureOr<FutureOr<A*>*>*],implicit=[A,Future<A*>,Future<FutureOr<A*>*>,FutureOr<A*>]*/
 class A {}
diff --git a/pkg/compiler/test/rti/data/future_or_future_or_generic.dart b/pkg/compiler/test/rti/data/future_or_future_or_generic.dart
index 85a79bb..846a4f7 100644
--- a/pkg/compiler/test/rti/data/future_or_future_or_generic.dart
+++ b/pkg/compiler/test/rti/data/future_or_future_or_generic.dart
@@ -6,9 +6,9 @@
 
 import 'dart:async';
 
-/*spec.class: global#Future:deps=[A],implicit=[Future<B<A.T*>*>,Future<C*>],indirect,needsArgs*/
+/*spec.class: global#Future:deps=[A],implicit=[Future<B<A.T*>*>,Future<C*>],needsArgs,test*/
 
-/*class: A:explicit=[FutureOr<B<A.T*>*>*],implicit=[B<A.T*>,Future<B<A.T*>*>],indirect,needsArgs*/
+/*class: A:explicit=[FutureOr<B<A.T*>*>*],implicit=[B<A.T*>,Future<B<A.T*>*>],needsArgs,test*/
 class A<T> {
   m(o) => o is FutureOr<B<T>>;
 }
diff --git a/pkg/compiler/test/rti/data/future_or_generic.dart b/pkg/compiler/test/rti/data/future_or_generic.dart
index 31edda3..b1376f4 100644
--- a/pkg/compiler/test/rti/data/future_or_generic.dart
+++ b/pkg/compiler/test/rti/data/future_or_generic.dart
@@ -6,9 +6,9 @@
 
 import 'dart:async';
 
-/*spec.class: global#Future:deps=[A],implicit=[Future<A.T*>],indirect,needsArgs*/
+/*spec.class: global#Future:deps=[A],implicit=[Future<A.T*>],needsArgs,test*/
 
-/*class: A:explicit=[FutureOr<A.T*>*],implicit=[A.T,Future<A.T*>],indirect,needsArgs*/
+/*class: A:explicit=[FutureOr<A.T*>*],implicit=[A.T,Future<A.T*>],needsArgs,test*/
 class A<T> {
   m(o) => o is FutureOr<T>;
 }
diff --git a/pkg/compiler/test/rti/data/future_or_generic2.dart b/pkg/compiler/test/rti/data/future_or_generic2.dart
index c4d594a..827b8ad 100644
--- a/pkg/compiler/test/rti/data/future_or_generic2.dart
+++ b/pkg/compiler/test/rti/data/future_or_generic2.dart
@@ -6,9 +6,9 @@
 
 import 'dart:async';
 
-/*spec.class: global#Future:deps=[A],implicit=[Future<B<A.T*>*>],indirect,needsArgs*/
+/*spec.class: global#Future:deps=[A],implicit=[Future<B<A.T*>*>],needsArgs,test*/
 
-/*class: A:explicit=[FutureOr<B<A.T*>*>*],implicit=[B<A.T*>,Future<B<A.T*>*>],indirect,needsArgs*/
+/*class: A:explicit=[FutureOr<B<A.T*>*>*],implicit=[B<A.T*>,Future<B<A.T*>*>],needsArgs,test*/
 class A<T> {
   m(o) => o is FutureOr<B<T>>;
 }
diff --git a/pkg/compiler/test/rti/data/generic_class_is.dart b/pkg/compiler/test/rti/data/generic_class_is.dart
index 0268c28..a56334a 100644
--- a/pkg/compiler/test/rti/data/generic_class_is.dart
+++ b/pkg/compiler/test/rti/data/generic_class_is.dart
@@ -7,7 +7,7 @@
 /*class: A:implicit=[A]*/
 class A {}
 
-/*class: B:direct,explicit=[B.T*],needsArgs*/
+/*class: B:explicit=[B.T*],needsArgs,test*/
 class B<T> {
   @pragma('dart2js:noInline')
   method(T t) => t is T;
diff --git a/pkg/compiler/test/rti/data/generic_class_is2.dart b/pkg/compiler/test/rti/data/generic_class_is2.dart
index 2703f47..20864b8 100644
--- a/pkg/compiler/test/rti/data/generic_class_is2.dart
+++ b/pkg/compiler/test/rti/data/generic_class_is2.dart
@@ -12,7 +12,7 @@
 /*spec.class: A1:implicit=[A1]*/
 class A1 implements A<C1> {}
 
-/*class: B:direct,explicit=[B.T*],needsArgs*/
+/*class: B:explicit=[B.T*],needsArgs,test*/
 class B<T> {
   @pragma('dart2js:noInline')
   method(var t) => t is T;
diff --git a/pkg/compiler/test/rti/data/generic_instanceof4.dart b/pkg/compiler/test/rti/data/generic_instanceof4.dart
index bfa2a1f..0bcf276 100644
--- a/pkg/compiler/test/rti/data/generic_instanceof4.dart
+++ b/pkg/compiler/test/rti/data/generic_instanceof4.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*class: A:deps=[B],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[B],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -15,7 +15,7 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*class: B:implicit=[B.T],indirect,needsArgs*/
+/*class: B:implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo() {
diff --git a/pkg/compiler/test/rti/data/generic_instanceof4_unused.dart b/pkg/compiler/test/rti/data/generic_instanceof4_unused.dart
index ee06e93..5b45da2 100644
--- a/pkg/compiler/test/rti/data/generic_instanceof4_unused.dart
+++ b/pkg/compiler/test/rti/data/generic_instanceof4_unused.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*class: A:deps=[B],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[B],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -16,7 +16,7 @@
 // computation of implicit is-tests.
 class BB {}
 
-/*class: B:implicit=[B.T],indirect,needsArgs*/
+/*class: B:implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo() {
diff --git a/pkg/compiler/test/rti/data/generic_method1.dart b/pkg/compiler/test/rti/data/generic_method1.dart
index f0f6f81..11237ef 100644
--- a/pkg/compiler/test/rti/data/generic_method1.dart
+++ b/pkg/compiler/test/rti/data/generic_method1.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*class: A:deps=[method2],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[method2],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -17,11 +17,11 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*member: method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+/*member: method2:deps=[B],implicit=[method2.T],needsArgs,test*/
 @pragma('dart2js:noInline')
 method2<T>() => new A<T>();
 
-/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+/*class: B:deps=[method1],implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo() {
@@ -29,7 +29,7 @@
   }
 }
 
-/*member: method1:implicit=[method1.T],indirect,needsArgs*/
+/*member: method1:implicit=[method1.T],needsArgs,test*/
 @pragma('dart2js:noInline')
 method1<T>() {
   return new B<T>().foo();
diff --git a/pkg/compiler/test/rti/data/generic_method2.dart b/pkg/compiler/test/rti/data/generic_method2.dart
index 9fc5d87..101c7f7 100644
--- a/pkg/compiler/test/rti/data/generic_method2.dart
+++ b/pkg/compiler/test/rti/data/generic_method2.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*class: A:deps=[B],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[B],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -17,7 +17,7 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+/*class: B:deps=[method1],implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo() {
@@ -25,7 +25,7 @@
   }
 }
 
-/*member: method1:implicit=[method1.T],indirect,needsArgs*/
+/*member: method1:implicit=[method1.T],needsArgs,test*/
 @pragma('dart2js:noInline')
 method1<T>() {
   return new B<T>().foo();
diff --git a/pkg/compiler/test/rti/data/generic_method3.dart b/pkg/compiler/test/rti/data/generic_method3.dart
index 2bc69b6..d2e7916 100644
--- a/pkg/compiler/test/rti/data/generic_method3.dart
+++ b/pkg/compiler/test/rti/data/generic_method3.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*class: A:deps=[method2],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[method2],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -17,11 +17,11 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*member: method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+/*member: method2:deps=[B],implicit=[method2.T],needsArgs,test*/
 @pragma('dart2js:noInline')
 method2<T>() => new A<T>();
 
-/*class: B:implicit=[B.T],indirect,needsArgs*/
+/*class: B:implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo() {
diff --git a/pkg/compiler/test/rti/data/generic_method4.dart b/pkg/compiler/test/rti/data/generic_method4.dart
index d1b48b4..7e1c616 100644
--- a/pkg/compiler/test/rti/data/generic_method4.dart
+++ b/pkg/compiler/test/rti/data/generic_method4.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*class: A:deps=[C.method2],direct,explicit=[A.T*],needsArgs*/
+/*class: A:deps=[C.method2],explicit=[A.T*],needsArgs,test*/
 class A<T> {
   @pragma('dart2js:noInline')
   foo(x) {
@@ -17,7 +17,7 @@
 /*class: BB:implicit=[BB]*/
 class BB {}
 
-/*class: B:deps=[C.method1],implicit=[B.T],indirect,needsArgs*/
+/*class: B:deps=[C.method1],implicit=[B.T],needsArgs,test*/
 class B<T> implements BB {
   @pragma('dart2js:noInline')
   foo(c) {
@@ -26,13 +26,13 @@
 }
 
 class C {
-  /*member: C.method1:implicit=[method1.T],indirect,needsArgs,selectors=[Selector(call, method1, arity=0, types=1)]*/
+  /*member: C.method1:implicit=[method1.T],needsArgs,selectors=[Selector(call, method1, arity=0, types=1)],test*/
   @pragma('dart2js:noInline')
   method1<T>() {
     return new B<T>().foo(this);
   }
 
-  /*member: C.method2:deps=[B],implicit=[method2.T],indirect,needsArgs,selectors=[Selector(call, method2, arity=0, types=1)]*/
+  /*member: C.method2:deps=[B],implicit=[method2.T],needsArgs,selectors=[Selector(call, method2, arity=0, types=1)],test*/
   @pragma('dart2js:noInline')
   method2<T>() => new A<T>();
 }
diff --git a/pkg/compiler/test/rti/data/generic_method_is.dart b/pkg/compiler/test/rti/data/generic_method_is.dart
index 246e40b..19036845 100644
--- a/pkg/compiler/test/rti/data/generic_method_is.dart
+++ b/pkg/compiler/test/rti/data/generic_method_is.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*member: method:direct,explicit=[method.T*],needsArgs*/
+/*member: method:explicit=[method.T*],needsArgs,test*/
 method<T>(T t) => t is T;
 
 main() {
diff --git a/pkg/compiler/test/rti/data/generic_method_is2.dart b/pkg/compiler/test/rti/data/generic_method_is2.dart
index 9505896..e67767e 100644
--- a/pkg/compiler/test/rti/data/generic_method_is2.dart
+++ b/pkg/compiler/test/rti/data/generic_method_is2.dart
@@ -47,36 +47,36 @@
 class F3 {}
 
 // Calls to this imply a check of the passed type arguments.
-/*member: topLevelMethod1:direct,explicit=[topLevelMethod1.T*],needsArgs,selectors=[Selector(call, call, arity=2, named=[a1], types=1)]*/
+/*member: topLevelMethod1:explicit=[topLevelMethod1.T*],needsArgs,selectors=[Selector(call, call, arity=2, named=[a1], types=1)],test*/
 bool topLevelMethod1<T>(T t, {a1}) => t is T;
 
 // Calls to this does _not_ imply a check of the passed type arguments.
-/*spec.member: topLevelMethod2:direct,explicit=[topLevelMethod2.T*],needsArgs,selectors=[Selector(call, call, arity=2, named=[a2], types=1)]*/
+/*spec.member: topLevelMethod2:explicit=[topLevelMethod2.T*],needsArgs,selectors=[Selector(call, call, arity=2, named=[a2], types=1)],test*/
 T topLevelMethod2<T>(T t, {a2}) => t;
 
 class Class {
   // Calls to this imply a check of the passed type arguments.
-  /*member: Class.instanceMethod1:direct,explicit=[instanceMethod1.S*],needsArgs,selectors=[Selector(call, call, arity=2, named=[b1], types=1),Selector(call, instanceMethod1, arity=2, named=[b1], types=1)]*/
+  /*member: Class.instanceMethod1:explicit=[instanceMethod1.S*],needsArgs,selectors=[Selector(call, call, arity=2, named=[b1], types=1),Selector(call, instanceMethod1, arity=2, named=[b1], types=1)],test*/
   bool instanceMethod1<S>(S s, {b1}) => s is S;
 
   // Calls to this does _not_ imply a check of the passed type arguments.
-  /*spec.member: Class.instanceMethod2:direct,explicit=[instanceMethod2.S*],needsArgs,selectors=[Selector(call, call, arity=2, named=[b2], types=1),Selector(call, instanceMethod2, arity=2, named=[b2], types=1)]*/
+  /*spec.member: Class.instanceMethod2:explicit=[instanceMethod2.S*],needsArgs,selectors=[Selector(call, call, arity=2, named=[b2], types=1),Selector(call, instanceMethod2, arity=2, named=[b2], types=1)],test*/
   S instanceMethod2<S>(S s, {b2}) => s;
 }
 
 main() {
   // Calls to this imply a check of the passed type arguments.
-  /*direct,explicit=[localFunction1.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c1], types=1)]*/
+  /*explicit=[localFunction1.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c1], types=1)],test*/
   bool localFunction1<U>(U u, {c1}) => u is U;
 
   // Calls to this does _not_ imply a check of the passed type arguments.
-  /*spec.direct,explicit=[localFunction2.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c2], types=1)]*/
+  /*spec.explicit=[localFunction2.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c2], types=1)],test*/
   U localFunction2<U>(U u, {c2}) => u;
 
   // Calls to this does _not_ imply a check of the passed type arguments. A
   // call to the .call function on this will, though, since it has the same
   // signature as [localFunction1] which needs its type arguments.
-  /*spec.direct,explicit=[localFunction3.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c1], types=1)]*/
+  /*spec.explicit=[localFunction3.U*],needsArgs,selectors=[Selector(call, call, arity=2, named=[c1], types=1)],test*/
   localFunction3<U>(U u, {c1}) => u;
 
   var c = new Class();
diff --git a/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart b/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart
index 051894e..17bb4da 100644
--- a/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart
+++ b/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart
@@ -8,9 +8,9 @@
 
 // Test derived from language_2/generic_methods_dynamic_test/05
 
-/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/
+/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs,test*/
 /*prod.class: global#JSArray:deps=[List],needsArgs*/
-/*spec.class: global#List:deps=[C.bar,JSArray.markFixedList],explicit=[List,List<B*>*,List<Object>,List<String>?,List<markFixedList.T>],indirect,needsArgs*/
+/*spec.class: global#List:deps=[C.bar,JSArray.markFixedList],explicit=[List,List<B*>*,List<Object>,List<String>?,List<markFixedList.T>],needsArgs,test*/
 /*prod.class: global#List:deps=[C.bar],explicit=[List<B*>*],needsArgs*/
 
 class A {}
@@ -20,7 +20,7 @@
 class B {}
 
 class C {
-  /*spec.member: C.bar:direct,explicit=[Iterable<bar.T*>*],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
+  /*spec.member: C.bar:explicit=[Iterable<bar.T*>*],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)],test*/
   /*prod.member: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   List<T> bar<T>(Iterable<T> t) => <T>[t.first];
 }
diff --git a/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart b/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart
index 3226063..7c759ee 100644
--- a/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart
+++ b/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart
@@ -8,7 +8,7 @@
 
 // Reduced version of generic_methods_dynamic_05a_strong.
 
-/*spec.class: A:deps=[C.bar],direct,explicit=[A.T*,A<B*>*,A<bar.T*>*],needsArgs*/
+/*spec.class: A:deps=[C.bar],explicit=[A.T*,A<B*>*,A<bar.T*>*],needsArgs,test*/
 /*prod.class: A:deps=[C.bar],explicit=[A<B*>*],needsArgs*/
 class A<T> {
   final T field;
@@ -21,7 +21,7 @@
 class B {}
 
 class C {
-  /*spec.member: C.bar:explicit=[A<bar.T*>*],implicit=[bar.T],indirect,needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
+  /*spec.member: C.bar:explicit=[A<bar.T*>*],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)],test*/
   /*prod.member: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   A<T> bar<T>(A<T> t) => new A<T>(t.field);
 }
diff --git a/pkg/compiler/test/rti/data/implicit_as.dart b/pkg/compiler/test/rti/data/implicit_as.dart
index ddf0046..0c78cd3 100644
--- a/pkg/compiler/test/rti/data/implicit_as.dart
+++ b/pkg/compiler/test/rti/data/implicit_as.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: C:direct,explicit=[C.T*,C<String*>*],needsArgs*/
+/*spec.class: C:explicit=[C.T*,C<String*>*],needsArgs,test*/
 class C<T> {
   T field;
 }
diff --git a/pkg/compiler/test/rti/data/indirect_through_static.dart b/pkg/compiler/test/rti/data/indirect_through_static.dart
index 2b5b0be..9c7ffc5 100644
--- a/pkg/compiler/test/rti/data/indirect_through_static.dart
+++ b/pkg/compiler/test/rti/data/indirect_through_static.dart
@@ -19,7 +19,7 @@
   map['x'] = new C<B>();
 }
 
-/*member: lookup:direct,explicit=[C<lookup.T*>*],needsArgs*/
+/*member: lookup:explicit=[C<lookup.T*>*],needsArgs,test*/
 C<T> lookup<T>(String key) {
   final value = map[key];
   if (value != null && value is C<T>) {
diff --git a/pkg/compiler/test/rti/data/instantiation1.dart b/pkg/compiler/test/rti/data/instantiation1.dart
index 0ea6b96..6033cf6 100644
--- a/pkg/compiler/test/rti/data/instantiation1.dart
+++ b/pkg/compiler/test/rti/data/instantiation1.dart
@@ -4,13 +4,13 @@
 
 // @dart = 2.7
 
-/*spec.member: f:deps=[B],direct,explicit=[f.T*],needsArgs,needsInst=[<B.S*>]*/
+/*spec.member: f:deps=[B],explicit=[f.T*],needsArgs,needsInst=[<B.S*>],test*/
 /*prod.member: f:deps=[B]*/
 int f<T>(T a) => null;
 
 typedef int F<R>(R a);
 
-/*spec.class: B:explicit=[int* Function(B.S*)*],implicit=[B.S],indirect,needsArgs*/
+/*spec.class: B:explicit=[int* Function(B.S*)*],implicit=[B.S],needsArgs,test*/
 /*prod.class: B:needsArgs*/
 class B<S> {
   F<S> c;
diff --git a/pkg/compiler/test/rti/data/instantiation2.dart b/pkg/compiler/test/rti/data/instantiation2.dart
index 934152a..ef67348 100644
--- a/pkg/compiler/test/rti/data/instantiation2.dart
+++ b/pkg/compiler/test/rti/data/instantiation2.dart
@@ -4,13 +4,13 @@
 
 // @dart = 2.7
 
-/*member: f:deps=[B],direct,explicit=[f.T*],needsArgs,needsInst=[<B.S*>]*/
+/*member: f:deps=[B],explicit=[f.T*],needsArgs,needsInst=[<B.S*>],test*/
 bool f<T>(T a) => a is T;
 
 typedef bool F<R>(R a);
 
-/*spec.class: B:explicit=[bool* Function(B.S*)*],implicit=[B.S],indirect,needsArgs*/
-/*prod.class: B:implicit=[B.S],indirect,needsArgs*/
+/*spec.class: B:explicit=[bool* Function(B.S*)*],implicit=[B.S],needsArgs,test*/
+/*prod.class: B:implicit=[B.S],needsArgs,test*/
 class B<S> {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation3.dart b/pkg/compiler/test/rti/data/instantiation3.dart
index 4c13f62..5712524 100644
--- a/pkg/compiler/test/rti/data/instantiation3.dart
+++ b/pkg/compiler/test/rti/data/instantiation3.dart
@@ -4,13 +4,13 @@
 
 // @dart = 2.7
 
-/*spec.member: f:deps=[B],direct,explicit=[f.T*],needsArgs,needsInst=[<B.S*>]*/
+/*spec.member: f:deps=[B],explicit=[f.T*],needsArgs,needsInst=[<B.S*>],test*/
 /*prod.member: f:deps=[B]*/
 int f<T>(T a) => null;
 
 typedef int F<R>(R a);
 
-/*spec.class: B:direct,explicit=[int* Function(B.S*)*],implicit=[B.S],needsArgs*/
+/*spec.class: B:explicit=[int* Function(B.S*)*],implicit=[B.S],needsArgs,test*/
 /*prod.class: B:needsArgs*/
 class B<S> {
   F<S> c;
diff --git a/pkg/compiler/test/rti/data/instantiation4.dart b/pkg/compiler/test/rti/data/instantiation4.dart
index af33f43..9f92b96 100644
--- a/pkg/compiler/test/rti/data/instantiation4.dart
+++ b/pkg/compiler/test/rti/data/instantiation4.dart
@@ -4,13 +4,13 @@
 
 // @dart = 2.7
 
-/*member: f:deps=[B],direct,explicit=[f.T*],needsArgs,needsInst=[<B.S*>]*/
+/*member: f:deps=[B],explicit=[f.T*],needsArgs,needsInst=[<B.S*>],test*/
 bool f<T>(T a) => a is T;
 
 typedef bool F<R>(R a);
 
-/*spec.class: B:direct,explicit=[bool* Function(B.S*)*],implicit=[B.S],needsArgs*/
-/*prod.class: B:implicit=[B.S],indirect,needsArgs*/
+/*spec.class: B:explicit=[bool* Function(B.S*)*],implicit=[B.S],needsArgs,test*/
+/*prod.class: B:implicit=[B.S],needsArgs,test*/
 class B<S> {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation5.dart b/pkg/compiler/test/rti/data/instantiation5.dart
index 3c37996..855d5ab 100644
--- a/pkg/compiler/test/rti/data/instantiation5.dart
+++ b/pkg/compiler/test/rti/data/instantiation5.dart
@@ -4,13 +4,13 @@
 
 // @dart = 2.7
 
-/*spec.member: f:deps=[method],direct,explicit=[f.T*],needsArgs,needsInst=[<method.S*>]*/
+/*spec.member: f:deps=[method],explicit=[f.T*],needsArgs,needsInst=[<method.S*>],test*/
 /*prod.member: f:deps=[method]*/
 int f<T>(T a) => null;
 
 typedef int F<R>(R a);
 
-/*spec.member: method:implicit=[method.S],indirect,needsArgs*/
+/*spec.member: method:implicit=[method.S],needsArgs,test*/
 /*prod.member: method:needsArgs*/
 method<S>() {
   F<S> c;
diff --git a/pkg/compiler/test/rti/data/instantiation6.dart b/pkg/compiler/test/rti/data/instantiation6.dart
index e596af2..d235bca 100644
--- a/pkg/compiler/test/rti/data/instantiation6.dart
+++ b/pkg/compiler/test/rti/data/instantiation6.dart
@@ -4,12 +4,12 @@
 
 // @dart = 2.7
 
-/*member: f:deps=[method],direct,explicit=[f.T*],needsArgs,needsInst=[<method.S*>]*/
+/*member: f:deps=[method],explicit=[f.T*],needsArgs,needsInst=[<method.S*>],test*/
 bool f<T>(T a) => a is T;
 
 typedef bool F<R>(R a);
 
-/*member: method:implicit=[method.S],indirect,needsArgs*/
+/*member: method:implicit=[method.S],needsArgs,test*/
 method<S>() {
   F<S> c;
 
diff --git a/pkg/compiler/test/rti/data/instantiation7.dart b/pkg/compiler/test/rti/data/instantiation7.dart
index 216c83d..5a09574 100644
--- a/pkg/compiler/test/rti/data/instantiation7.dart
+++ b/pkg/compiler/test/rti/data/instantiation7.dart
@@ -4,15 +4,15 @@
 
 // @dart = 2.7
 
-/*spec.member: f1:deps=[method],direct,explicit=[f1.T*],needsArgs,needsInst=[<method.X*>]*/
+/*spec.member: f1:deps=[method],explicit=[f1.T*],needsArgs,needsInst=[<method.X*>],test*/
 /*prod.member: f1:deps=[method]*/
 int f1<T>(T a, T b, T c) => null;
 
-/*spec.member: f2:deps=[method],direct,explicit=[f2.S*,f2.T*],needsArgs,needsInst=[<method.X*,method.Y*>]*/
+/*spec.member: f2:deps=[method],explicit=[f2.S*,f2.T*],needsArgs,needsInst=[<method.X*,method.Y*>],test*/
 /*prod.member: f2:deps=[method]*/
 int f2<T, S>(T a, S b, S c) => null;
 
-/*spec.member: f3:deps=[method],direct,explicit=[f3.S*,f3.T*,f3.U*],needsArgs,needsInst=[<method.X*,method.Y*,method.Z*>]*/
+/*spec.member: f3:deps=[method],explicit=[f3.S*,f3.T*,f3.U*],needsArgs,needsInst=[<method.X*,method.Y*,method.Z*>],test*/
 /*prod.member: f3:deps=[method]*/
 int f3<T, S, U>(T a, S b, U c) => null;
 
@@ -20,7 +20,7 @@
 typedef int F2<R, P>(R a, P b, P c);
 typedef int F3<R, P, Q>(R a, P b, Q c);
 
-/*spec.member: method:implicit=[method.X,method.Y,method.Z],indirect,needsArgs*/
+/*spec.member: method:implicit=[method.X,method.Y,method.Z],needsArgs,test*/
 /*prod.member: method:needsArgs*/
 method<X, Y, Z>() {
   F1<X> c1;
diff --git a/pkg/compiler/test/rti/data/is_type_variable.dart b/pkg/compiler/test/rti/data/is_type_variable.dart
index b188421..96d76ef 100644
--- a/pkg/compiler/test/rti/data/is_type_variable.dart
+++ b/pkg/compiler/test/rti/data/is_type_variable.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*class: A:direct,explicit=[A.T*],needsArgs*/
+/*class: A:explicit=[A.T*],needsArgs,test*/
 class A<T> {
   m(T t) => t is T;
 }
diff --git a/pkg/compiler/test/rti/data/is_type_variable_super.dart b/pkg/compiler/test/rti/data/is_type_variable_super.dart
index 286e73b..65c7bae 100644
--- a/pkg/compiler/test/rti/data/is_type_variable_super.dart
+++ b/pkg/compiler/test/rti/data/is_type_variable_super.dart
@@ -6,7 +6,7 @@
 
 class A<T> {}
 
-/*class: B:direct,explicit=[B.T*],needsArgs*/
+/*class: B:explicit=[B.T*],needsArgs,test*/
 class B<T> extends A<T> {
   m(T t) => t is T;
 }
diff --git a/pkg/compiler/test/rti/data/is_type_variable_super_complex.dart b/pkg/compiler/test/rti/data/is_type_variable_super_complex.dart
index d512bd1..18f00af 100644
--- a/pkg/compiler/test/rti/data/is_type_variable_super_complex.dart
+++ b/pkg/compiler/test/rti/data/is_type_variable_super_complex.dart
@@ -6,7 +6,7 @@
 
 class A<T> {}
 
-/*class: B:direct,explicit=[B.T*],needsArgs*/
+/*class: B:explicit=[B.T*],needsArgs,test*/
 class B<T> extends A<List<T>> {
   m(T t) => t is T;
 }
diff --git a/pkg/compiler/test/rti/data/list_literal.dart b/pkg/compiler/test/rti/data/list_literal.dart
index c4f9b47..c76451d 100644
--- a/pkg/compiler/test/rti/data/list_literal.dart
+++ b/pkg/compiler/test/rti/data/list_literal.dart
@@ -4,11 +4,11 @@
 
 // @dart = 2.7
 
-/*spec.class: global#List:deps=[Class.m,JSArray.markFixedList],explicit=[List,List<Object>,List<String>?,List<markFixedList.T>],indirect,needsArgs*/
-/*prod.class: global#List:deps=[Class.m],indirect,needsArgs*/
+/*spec.class: global#List:deps=[Class.m,JSArray.markFixedList],explicit=[List,List<Object>,List<String>?,List<markFixedList.T>],needsArgs,test*/
+/*prod.class: global#List:deps=[Class.m],needsArgs,test*/
 
-/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/
-/*prod.class: global#JSArray:deps=[List],implicit=[JSArray.E],indirect,needsArgs*/
+/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs,test*/
+/*prod.class: global#JSArray:deps=[List],implicit=[JSArray.E],needsArgs,test*/
 
 main() {
   var c = new Class();
@@ -18,7 +18,7 @@
 }
 
 class Class {
-  /*member: Class.m:implicit=[m.T],indirect,needsArgs,selectors=[Selector(call, m, arity=0, types=1)]*/
+  /*member: Class.m:implicit=[m.T],needsArgs,selectors=[Selector(call, m, arity=0, types=1)],test*/
   m<T>() {
     return <T>[];
   }
diff --git a/pkg/compiler/test/rti/data/list_to_set.dart b/pkg/compiler/test/rti/data/list_to_set.dart
index 63884f8..c73b735 100644
--- a/pkg/compiler/test/rti/data/list_to_set.dart
+++ b/pkg/compiler/test/rti/data/list_to_set.dart
@@ -4,11 +4,11 @@
 
 // @dart = 2.7
 
-/*spec.class: global#List:deps=[Class,JSArray.markFixedList],explicit=[List,List<Object>,List<String>?,List<markFixedList.T>],indirect,needsArgs*/
-/*prod.class: global#List:deps=[Class],indirect,needsArgs*/
+/*spec.class: global#List:deps=[Class,JSArray.markFixedList],explicit=[List,List<Object>,List<String>?,List<markFixedList.T>],needsArgs,test*/
+/*prod.class: global#List:deps=[Class],needsArgs,test*/
 
-/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/
-/*prod.class: global#JSArray:deps=[List],implicit=[JSArray.E],indirect,needsArgs*/
+/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs,test*/
+/*prod.class: global#JSArray:deps=[List],implicit=[JSArray.E],needsArgs,test*/
 
 main() {
   var c = new Class<int>();
@@ -17,7 +17,7 @@
   set is Set<String>;
 }
 
-/*class: Class:implicit=[Class.T],indirect,needsArgs*/
+/*class: Class:implicit=[Class.T],needsArgs,test*/
 class Class<T> {
   m() {
     return <T>[];
diff --git a/pkg/compiler/test/rti/data/local_function_generic.dart b/pkg/compiler/test/rti/data/local_function_generic.dart
index 80892aa..861d030 100644
--- a/pkg/compiler/test/rti/data/local_function_generic.dart
+++ b/pkg/compiler/test/rti/data/local_function_generic.dart
@@ -7,7 +7,7 @@
 import 'package:compiler/src/util/testing.dart';
 
 method1() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsSignature,test*/
   /*prod.needsArgs,needsSignature*/
   T local<T>(T t) => t;
   return local;
diff --git a/pkg/compiler/test/rti/data/local_function_list_literal.dart b/pkg/compiler/test/rti/data/local_function_list_literal.dart
index 3de5b69..0af6116 100644
--- a/pkg/compiler/test/rti/data/local_function_list_literal.dart
+++ b/pkg/compiler/test/rti/data/local_function_list_literal.dart
@@ -6,11 +6,11 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],indirect,needsArgs*/
+/*spec.class: global#JSArray:deps=[ArrayIterator,List],explicit=[JSArray,JSArray.E,JSArray<ArrayIterator.E>],implicit=[JSArray.E],needsArgs,test*/
 /*prod.class: global#JSArray:deps=[List],needsArgs*/
 
 @pragma('dart2js:noInline')
-/*spec.member: method:implicit=[method.T],indirect,needsArgs*/
+/*spec.member: method:implicit=[method.T],needsArgs,test*/
 /*prod.member: method:needsArgs*/
 method<T>() {
   return /*spec.*/ () => <T>[];
diff --git a/pkg/compiler/test/rti/data/local_function_map_literal.dart b/pkg/compiler/test/rti/data/local_function_map_literal.dart
index a0dca5f..7130d69 100644
--- a/pkg/compiler/test/rti/data/local_function_map_literal.dart
+++ b/pkg/compiler/test/rti/data/local_function_map_literal.dart
@@ -6,11 +6,11 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
+/*spec.class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs,test*/
 /*prod.class: global#LinkedHashMap:deps=[Map],needsArgs*/
 
 @pragma('dart2js:noInline')
-/*spec.member: method:implicit=[method.T],indirect,needsArgs*/
+/*spec.member: method:implicit=[method.T],needsArgs,test*/
 /*prod.member: method:needsArgs*/
 method<T>() {
   return /*spec.needsSignature*/ () => <T, int>{};
diff --git a/pkg/compiler/test/rti/data/local_function_signature2.dart b/pkg/compiler/test/rti/data/local_function_signature2.dart
index 06bcb64..1d06d37 100644
--- a/pkg/compiler/test/rti/data/local_function_signature2.dart
+++ b/pkg/compiler/test/rti/data/local_function_signature2.dart
@@ -24,7 +24,7 @@
 }
 
 class Class2 {
-  /*spec.member: Class2.method4:direct,explicit=[method4.T*],needsArgs,selectors=[Selector(call, method4, arity=0, types=1)]*/
+  /*spec.member: Class2.method4:explicit=[method4.T*],needsArgs,selectors=[Selector(call, method4, arity=0, types=1)],test*/
   /*prod.member: Class2.method4:needsArgs,selectors=[Selector(call, method4, arity=0, types=1)]*/
   method4<T>() {
     /*needsSignature*/
@@ -44,14 +44,14 @@
 
 class Class4 {
   /*prod.member: Class4.method6:needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
-  /*spec.member: Class4.method6:direct,explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
+  /*spec.member: Class4.method6:explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)],test*/
   method6<T>() {
     /*needsSignature*/ num local(num n, T t) => null;
     return local;
   }
 }
 
-/*spec.member: method7:direct,explicit=[method7.T*],needsArgs*/
+/*spec.member: method7:explicit=[method7.T*],needsArgs,test*/
 /*prod.member: method7:needsArgs*/
 method7<T>() {
   /*needsSignature*/
@@ -66,7 +66,7 @@
   return local;
 }
 
-/*spec.member: method9:direct,explicit=[method9.T*],needsArgs*/
+/*spec.member: method9:explicit=[method9.T*],needsArgs,test*/
 /*prod.member: method9:needsArgs*/
 method9<T>() {
   /*needsSignature*/ num local(num n, T t) => null;
@@ -74,7 +74,7 @@
 }
 
 method10() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsSignature,test*/
   /*prod.needsArgs,needsSignature*/ num local<T>(T n) => null;
   return local;
 }
@@ -85,7 +85,7 @@
 }
 
 method12() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsSignature,test*/
   /*prod.needsArgs,needsSignature*/ num local<T>(num n, T t) => null;
   return local;
 }
diff --git a/pkg/compiler/test/rti/data/local_function_signatures.dart b/pkg/compiler/test/rti/data/local_function_signatures.dart
index ad97152..cacf62d 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures.dart
@@ -24,7 +24,7 @@
   }
 }
 
-/*spec.class: Class2:direct,explicit=[Class2.T*],needsArgs*/
+/*spec.class: Class2:explicit=[Class2.T*],needsArgs,test*/
 /*prod.class: Class2:needsArgs*/
 class Class2<T> {
   method4() {
@@ -43,7 +43,7 @@
   }
 }
 
-/*spec.class: Class4:direct,explicit=[Class4.T*],needsArgs*/
+/*spec.class: Class4:explicit=[Class4.T*],needsArgs,test*/
 /*prod.class: Class4:needsArgs*/
 class Class4<T> {
   method6() {
diff --git a/pkg/compiler/test/rti/data/local_function_signatures_generic.dart b/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
index fa0d44f..8f651f6 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
@@ -27,7 +27,7 @@
 }
 
 class Class2 {
-  /*spec.member: Class2.method4:direct,explicit=[method4.T*],needsArgs,selectors=[Selector(call, method4, arity=0, types=1)]*/
+  /*spec.member: Class2.method4:explicit=[method4.T*],needsArgs,selectors=[Selector(call, method4, arity=0, types=1)],test*/
   /*prod.member: Class2.method4:needsArgs,selectors=[Selector(call, method4, arity=0, types=1)]*/
   method4<T>() {
     /*needsSignature*/
@@ -47,14 +47,14 @@
 
 class Class4 {
   /*prod.member: Class4.method6:needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
-  /*spec.member: Class4.method6:direct,explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
+  /*spec.member: Class4.method6:explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)],test*/
   method6<T>() {
     /*needsSignature*/ num local(num n, T t) => null;
     return local;
   }
 }
 
-/*spec.member: method7:direct,explicit=[method7.T*],needsArgs*/
+/*spec.member: method7:explicit=[method7.T*],needsArgs,test*/
 /*prod.member: method7:needsArgs*/
 method7<T>() {
   /*needsSignature*/
@@ -69,7 +69,7 @@
   return local;
 }
 
-/*spec.member: method9:direct,explicit=[method9.T*],needsArgs*/
+/*spec.member: method9:explicit=[method9.T*],needsArgs,test*/
 /*prod.member: method9:needsArgs*/
 method9<T>() {
   /*needsSignature*/ num local(num n, T t) => null;
@@ -77,7 +77,7 @@
 }
 
 method10() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature,test*/
   /*prod.needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/
   num local<T>(T n) => null;
   return local;
@@ -90,7 +90,7 @@
 }
 
 method12() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsSignature,test*/
   /*prod.needsArgs,needsSignature*/ num local<T>(num n, T t) => null;
   return local;
 }
@@ -102,7 +102,7 @@
 }
 
 num Function(num) method14() {
-  /*spec.direct,explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/
+  /*spec.explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature,test*/
   /*prod.needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/
   num local<T>(T n) => null;
   return local;
diff --git a/pkg/compiler/test/rti/data/map_literal.dart b/pkg/compiler/test/rti/data/map_literal.dart
index 988f06e..60568fd 100644
--- a/pkg/compiler/test/rti/data/map_literal.dart
+++ b/pkg/compiler/test/rti/data/map_literal.dart
@@ -5,13 +5,13 @@
 // @dart = 2.7
 
 /*prod.class: global#Map:*/
-/*spec.class: global#Map:explicit=[Map,Map<Object?,Object?>],indirect,needsArgs*/
+/*spec.class: global#Map:explicit=[Map,Map<Object?,Object?>],needsArgs,test*/
 
 /*prod.class: global#LinkedHashMap:deps=[Map]*/
-/*spec.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
+/*spec.class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs,test*/
 
 /*prod.class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
-/*spec.class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[JsLinkedHashMap,JsLinkedHashMap.K,JsLinkedHashMap.V,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K],needsArgs*/
+/*spec.class: global#JsLinkedHashMap:deps=[LinkedHashMap],explicit=[JsLinkedHashMap,JsLinkedHashMap.K,JsLinkedHashMap.V,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K],needsArgs,test*/
 
 /*prod.class: global#double:*/
 /*spec.class: global#double:implicit=[double]*/
diff --git a/pkg/compiler/test/rti/data/map_to_set.dart b/pkg/compiler/test/rti/data/map_to_set.dart
index 4c870c3..33c2194 100644
--- a/pkg/compiler/test/rti/data/map_to_set.dart
+++ b/pkg/compiler/test/rti/data/map_to_set.dart
@@ -5,13 +5,13 @@
 // @dart = 2.7
 
 /*prod.class: global#Map:deps=[Class],needsArgs*/
-/*spec.class: global#Map:deps=[Class],explicit=[Map,Map<Object?,Object?>],indirect,needsArgs*/
+/*spec.class: global#Map:deps=[Class],explicit=[Map,Map<Object?,Object?>],needsArgs,test*/
 
 /*prod.class: global#LinkedHashMap:deps=[Map],implicit=[LinkedHashMap.K],needsArgs*/
-/*spec.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
+/*spec.class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs,test*/
 
 /*prod.class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
-/*spec.class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[JsLinkedHashMap,JsLinkedHashMap.K,JsLinkedHashMap.V,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K],needsArgs*/
+/*spec.class: global#JsLinkedHashMap:deps=[LinkedHashMap],explicit=[JsLinkedHashMap,JsLinkedHashMap.K,JsLinkedHashMap.V,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K],needsArgs,test*/
 
 /*prod.class: global#double:*/
 /*spec.class: global#double:implicit=[double]*/
@@ -25,7 +25,7 @@
   set is Set<String>;
 }
 
-/*spec.class: Class:implicit=[Class.S,Class.T],indirect,needsArgs*/
+/*spec.class: Class:implicit=[Class.S,Class.T],needsArgs,test*/
 /*prod.class: Class:needsArgs*/
 class Class<T, S> {
   m() {
diff --git a/pkg/compiler/test/rti/data/method_signatures.dart b/pkg/compiler/test/rti/data/method_signatures.dart
index 93ab6d2..29baa2f 100644
--- a/pkg/compiler/test/rti/data/method_signatures.dart
+++ b/pkg/compiler/test/rti/data/method_signatures.dart
@@ -17,7 +17,7 @@
   Object method3(num n) => null;
 }
 
-/*spec.class: Class2:direct,explicit=[Class2.T*],needsArgs*/
+/*spec.class: Class2:explicit=[Class2.T*],needsArgs,test*/
 class Class2<T> {
   num method4(T n) => null;
 }
@@ -28,7 +28,7 @@
   T method5(num n) => null;
 }
 
-/*spec.class: Class4:direct,explicit=[Class4.T*],needsArgs*/
+/*spec.class: Class4:explicit=[Class4.T*],needsArgs,test*/
 class Class4<T> {
   /*member: Class4.method6:*/
   num method6(num n, T t) => null;
diff --git a/pkg/compiler/test/rti/data/method_signatures_generic.dart b/pkg/compiler/test/rti/data/method_signatures_generic.dart
index 96dd598..8a8f55b 100644
--- a/pkg/compiler/test/rti/data/method_signatures_generic.dart
+++ b/pkg/compiler/test/rti/data/method_signatures_generic.dart
@@ -18,7 +18,7 @@
 }
 
 class Class2 {
-  /*spec.member: Class2.method4:direct,explicit=[method4.T*],needsArgs,needsInst=[<num*>,<num*>]*/
+  /*spec.member: Class2.method4:explicit=[method4.T*],needsArgs,needsInst=[<num*>,<num*>],test*/
   num method4<T>(T n) => null;
 }
 
@@ -28,17 +28,17 @@
 }
 
 class Class4 {
-  /*spec.member: Class4.method6:direct,explicit=[method6.T*],needsArgs*/
+  /*spec.member: Class4.method6:explicit=[method6.T*],needsArgs,test*/
   num method6<T>(num n, T t) => null;
 }
 
-/*spec.member: method7:direct,explicit=[method7.T*],needsArgs,needsInst=[<num*>,<num*>]*/
+/*spec.member: method7:explicit=[method7.T*],needsArgs,needsInst=[<num*>,<num*>],test*/
 num method7<T>(T n) => null;
 
 /*member: method8:*/
 T method8<T>(num n) => null;
 
-/*spec.member: method9:direct,explicit=[method9.T*],needsArgs*/
+/*spec.member: method9:explicit=[method9.T*],needsArgs,test*/
 num method9<T>(num n, T t) => null;
 
 @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/rti/data/private_dynamic.dart b/pkg/compiler/test/rti/data/private_dynamic.dart
index 87f1714..f6fbdb8 100644
--- a/pkg/compiler/test/rti/data/private_dynamic.dart
+++ b/pkg/compiler/test/rti/data/private_dynamic.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 class C {
-  /*member: C._private:direct,explicit=[_private.T*],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
+  /*member: C._private:explicit=[_private.T*],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)],test*/
   _private<T>(t) => t is T;
 }
 
diff --git a/pkg/compiler/test/rti/data/private_dynamic2.dart b/pkg/compiler/test/rti/data/private_dynamic2.dart
index 2126428..723250a 100644
--- a/pkg/compiler/test/rti/data/private_dynamic2.dart
+++ b/pkg/compiler/test/rti/data/private_dynamic2.dart
@@ -5,12 +5,12 @@
 // @dart = 2.7
 
 class C {
-  /*member: C._private:deps=[D._private2],direct,explicit=[_private.T*],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
+  /*member: C._private:deps=[D._private2],explicit=[_private.T*],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)],test*/
   _private<T>(t) => t is T;
 }
 
 class D {
-  /*member: D._private2:implicit=[_private2.T],indirect,needsArgs,selectors=[Selector(call, _private2, arity=2, types=1)]*/
+  /*member: D._private2:implicit=[_private2.T],needsArgs,selectors=[Selector(call, _private2, arity=2, types=1)],test*/
   _private2<T>(c, t) => c._private<T>(t);
 }
 
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart
index a9199b1..00ea501 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart
@@ -17,7 +17,7 @@
   /*needsArgs,needsSignature*/
   T local1b<T>() => null;
 
-  /*spec.direct,explicit=[local2.T*],needsArgs,needsSignature*/
+  /*spec.explicit=[local2.T*],needsArgs,needsSignature,test*/
   /*prod.needsArgs,needsSignature*/
   T local2<T>(T t, String s) => t;
 
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart
index bba535c..83b4387 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart
@@ -8,7 +8,7 @@
 
 String method() => null;
 
-/*spec.class: Class1:direct,explicit=[Class1.T*],needsArgs*/
+/*spec.class: Class1:explicit=[Class1.T*],needsArgs,test*/
 /*prod.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart
index b3477bb..63a7b9e 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart
@@ -6,7 +6,7 @@
 
 import 'package:compiler/src/util/testing.dart';
 
-/*spec.class: Class1:direct,explicit=[Class1.T*],needsArgs*/
+/*spec.class: Class1:explicit=[Class1.T*],needsArgs,test*/
 /*prod.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart
index 8ffc992..804a190 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart
@@ -12,7 +12,7 @@
 /*member: method1b:*/
 T method1b<T>() => null;
 
-/*spec.member: method2:direct,explicit=[method2.T*],needsArgs*/
+/*spec.member: method2:explicit=[method2.T*],needsArgs,test*/
 T method2<T>(T t, String s) => t;
 
 class Class<T> {
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart
index fae683f..4dde28e 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart
@@ -15,7 +15,7 @@
   /*member: Class1.method1b:*/
   T method1b<T>() => null;
 
-  /*spec.member: Class1.method2:direct,explicit=[method2.T*],needsArgs*/
+  /*spec.member: Class1.method2:explicit=[method2.T*],needsArgs,test*/
   T method2<T>(T t, String s) => t;
 }
 
diff --git a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string1.dart b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string1.dart
index f8ee428..92ef961 100644
--- a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string1.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string1.dart
@@ -9,7 +9,7 @@
 /*member: global#instantiate1:needsArgs*/
 
 main() {
-  /*spec.direct,explicit=[id.T*],needsArgs,needsInst=[<int*>],needsSignature*/
+  /*spec.explicit=[id.T*],needsArgs,needsInst=[<int*>],needsSignature,test*/
   T id<T>(T t, String s) => t;
   int Function(int, String s) x = id;
   makeLive("${x.runtimeType}");
diff --git a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string2.dart b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string2.dart
index 09002a4..f45d037 100644
--- a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string2.dart
@@ -8,7 +8,7 @@
 
 /*member: global#instantiate1:needsArgs*/
 
-/*spec.member: id:direct,explicit=[id.T*],needsArgs,needsInst=[<int*>]*/
+/*spec.member: id:explicit=[id.T*],needsArgs,needsInst=[<int*>],test*/
 T id<T>(T t, String s) => t;
 
 main() {
diff --git a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string3.dart b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string3.dart
index 5de5547..ddcced5 100644
--- a/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_instantiate_to_string3.dart
@@ -9,7 +9,7 @@
 /*member: global#instantiate1:needsArgs*/
 
 class Class {
-  /*spec.member: Class.id:direct,explicit=[id.T*],needsArgs,needsInst=[<int*>]*/
+  /*spec.member: Class.id:explicit=[id.T*],needsArgs,needsInst=[<int*>],test*/
   T id<T>(T t, String s) => t;
 }
 
diff --git a/pkg/compiler/test/rti/data/tear_off_generic.dart b/pkg/compiler/test/rti/data/tear_off_generic.dart
index 1aa8d04..f2446f1 100644
--- a/pkg/compiler/test/rti/data/tear_off_generic.dart
+++ b/pkg/compiler/test/rti/data/tear_off_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*spec.class: A:explicit=[A.T*],needsArgs,test*/
 class A<T> {
   void m(T t) {}
 
diff --git a/pkg/compiler/test/rti/data/type_variable_function_type.dart b/pkg/compiler/test/rti/data/type_variable_function_type.dart
index d36e45f..2c31bc6 100644
--- a/pkg/compiler/test/rti/data/type_variable_function_type.dart
+++ b/pkg/compiler/test/rti/data/type_variable_function_type.dart
@@ -10,7 +10,7 @@
 
 typedef T Func<T>();
 
-/*class: Foo:direct,explicit=[Foo.S* Function()*],needsArgs*/
+/*class: Foo:explicit=[Foo.S* Function()*],needsArgs,test*/
 class Foo<S> {
   m(x) => x is Func<S>;
 }
diff --git a/pkg/compiler/test/rti/rti_need_test_helper.dart b/pkg/compiler/test/rti/rti_need_test_helper.dart
index 8973cd7..56b4627 100644
--- a/pkg/compiler/test/rti/rti_need_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_need_test_helper.dart
@@ -46,8 +46,7 @@
   static const String dependencies = 'deps';
   static const String explicitTypeCheck = 'explicit';
   static const String implicitTypeCheck = 'implicit';
-  static const String directTypeArgumentTest = 'direct';
-  static const String indirectTypeArgumentTest = 'indirect';
+  static const String typeArgumentTest = 'test';
   static const String typeLiteral = 'exp';
   static const String selectors = 'selectors';
   static const String instantiationsNeedTypeArguments = 'needsInst';
@@ -109,12 +108,9 @@
         .contains(frontendClass)) {
       features.add(Tags.typeLiteral);
     }
-    if (rtiNeedBuilder.typeVariableTestsForTesting.directClassTestsForTesting
+    if (rtiNeedBuilder.typeVariableTestsForTesting.classTestsForTesting
         .contains(frontendClass)) {
-      features.add(Tags.directTypeArgumentTest);
-    } else if (rtiNeedBuilder.typeVariableTestsForTesting.classTestsForTesting
-        .contains(frontendClass)) {
-      features.add(Tags.indirectTypeArgumentTest);
+      features.add(Tags.typeArgumentTest);
     }
     findChecks(features, Tags.explicitTypeCheck, frontendClass,
         rtiNeedBuilder.typeVariableTestsForTesting.explicitIsChecks);
@@ -139,14 +135,9 @@
 
       void addFrontendData(Entity entity) {
         findDependencies(features, entity);
-        if (rtiNeedBuilder
-            .typeVariableTestsForTesting.directMethodTestsForTesting
+        if (rtiNeedBuilder.typeVariableTestsForTesting.methodTestsForTesting
             .contains(entity)) {
-          features.add(Tags.directTypeArgumentTest);
-        } else if (rtiNeedBuilder
-            .typeVariableTestsForTesting.methodTestsForTesting
-            .contains(entity)) {
-          features.add(Tags.indirectTypeArgumentTest);
+          features.add(Tags.typeArgumentTest);
         }
         findChecks(features, Tags.explicitTypeCheck, entity,
             rtiNeedBuilder.typeVariableTestsForTesting.explicitIsChecks);
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index a29a79c..311d7c8 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,17 @@
   '"toJsonDuration":'
 ];
 
+void generateJavaScriptCode(
+    Compiler compiler, GlobalTypeInferenceResults globalTypeInferenceResults) {
+  final codegenInputs = compiler.initializeCodegen(globalTypeInferenceResults);
+  final codegenResults = OnDemandCodegenResults(globalTypeInferenceResults,
+      codegenInputs, compiler.backendStrategy.functionCompiler);
+  final programSize = compiler.runCodegenEnqueuer(codegenResults);
+  if (compiler.options.dumpInfo) {
+    compiler.runDumpInfo(codegenResults, programSize);
+  }
+}
+
 void finishCompileAndCompare(
     Map<OutputType, Map<String, String>> expectedOutput,
     OutputCollector actualOutputCollector,
@@ -47,7 +59,7 @@
     GlobalTypeInferenceResults newGlobalInferenceResults =
         cloneInferenceResults(
             indices, compiler, globalInferenceResults, strategy);
-    compiler.generateJavaScriptCode(newGlobalInferenceResults);
+    generateJavaScriptCode(compiler, newGlobalInferenceResults);
   }
   var actualOutput = actualOutputCollector.clear();
   Expect.setEquals(
@@ -105,7 +117,7 @@
       options: commonOptions,
       outputProvider: collector,
       beforeRun: (Compiler compiler) {
-        compiler.kernelLoader.forceSerialization = true;
+        compiler.forceSerializationForTesting = true;
       });
   Expect.isTrue(result.isSuccess);
   Map<OutputType, Map<String, String>> expectedOutput = collector.clear();
@@ -119,8 +131,8 @@
       options: commonOptions,
       outputProvider: collector2,
       beforeRun: (Compiler compiler) {
-        compiler.kernelLoader.forceSerialization = true;
-        compiler.stopAfterClosedWorld = true;
+        compiler.forceSerializationForTesting = true;
+        compiler.stopAfterClosedWorldForTesting = true;
       });
   Expect.isTrue(result2.isSuccess);
 
@@ -136,7 +148,7 @@
           ['--out=$dillUri', '${Flags.writeClosedWorld}=$closedWorldUri'],
       outputProvider: collector3a,
       beforeRun: (Compiler compiler) {
-        compiler.kernelLoader.forceSerialization = true;
+        compiler.forceSerializationForTesting = true;
       });
   Expect.isTrue(result3a.isSuccess);
   Expect.isTrue(collector3a.binaryOutputMap.containsKey(dillUri));
@@ -164,8 +176,8 @@
           ],
       outputProvider: collector3b,
       beforeRun: (Compiler compiler) {
-        compiler.kernelLoader.forceSerialization = true;
-        compiler.stopAfterTypeInference = true;
+        compiler.forceSerializationForTesting = true;
+        compiler.stopAfterGlobalTypeInferenceForTesting = true;
       });
   Expect.isTrue(result3b.isSuccess);
 
diff --git a/pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart b/pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart
index 5c8302a..9a5ddf5 100644
--- a/pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart
+++ b/pkg/compiler/test/sourcemaps/stacktrace/extension_method.dart
@@ -1,3 +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.
+
 // @dart = 2.7
 
 class MyClass {
diff --git a/pkg/compiler/tool/modular_test_suite.dart b/pkg/compiler/tool/modular_test_suite.dart
index 7a20a67..5730ad6 100644
--- a/pkg/compiler/tool/modular_test_suite.dart
+++ b/pkg/compiler/tool/modular_test_suite.dart
@@ -21,8 +21,10 @@
         options,
         IOPipeline([
           OutlineDillCompilationStep(),
-          FullDillCompilationStep(),
+          FullDillCompilationStep(onlyOnSdk: true),
+          ModularAnalysisStep(onlyOnSdk: true),
           ModularAnalysisStep(),
+          ConcatenateDillsStep(useModularAnalysis: true),
           ComputeClosedWorldStep(useModularAnalysis: true),
           GlobalAnalysisStep(),
           Dart2jsCodegenStep(codeId0),
diff --git a/pkg/compiler/tool/modular_test_suite_helper.dart b/pkg/compiler/tool/modular_test_suite_helper.dart
index d4ff09e..7398c3d 100644
--- a/pkg/compiler/tool/modular_test_suite_helper.dart
+++ b/pkg/compiler/tool/modular_test_suite_helper.dart
@@ -25,13 +25,14 @@
 String _dart2jsScript;
 String _kernelWorkerScript;
 
-const dillSummaryId = DataId("sdill");
-const dillId = DataId("dill");
-const modularUpdatedDillId = DataId("mdill");
-const modularDataId = DataId("mdata");
+const dillSummaryId = DataId("summary.dill");
+const dillId = DataId("full.dill");
+const fullDillId = DataId("concatenate.dill");
+const modularUpdatedDillId = DataId("modular.dill");
+const modularDataId = DataId("modular.data");
 const closedWorldId = DataId("world");
-const globalUpdatedDillId = DataId("gdill");
-const globalDataId = DataId("gdata");
+const globalUpdatedDillId = DataId("global.dill");
+const globalDataId = DataId("global.data");
 const codeId = ShardsDataId("code", 2);
 const codeId0 = ShardDataId(codeId, 0);
 const codeId1 = ShardDataId(codeId, 1);
@@ -50,10 +51,95 @@
   return '{${fields.join(',')}}';
 }
 
-abstract class CFEStep implements IOModularStep {
+String getRootScheme(Module module) {
+  // We use non file-URI schemes for representeing source locations in a
+  // root-agnostic way. This allows us to refer to file across modules and
+  // across steps without exposing the underlying temporary folders that are
+  // created by the framework. In build systems like bazel this is especially
+  // important because each step may be run on a different machine.
+  //
+  // Files in packages are defined in terms of `package:` URIs, while
+  // non-package URIs are defined using the `dart-dev-app` scheme.
+  return module.isSdk ? 'dart-dev-sdk' : 'dev-dart-app';
+}
+
+String sourceToImportUri(Module module, Uri relativeUri) {
+  if (module.isPackage) {
+    var basePath = module.packageBase.path;
+    var packageRelativePath = basePath == "./"
+        ? relativeUri.path
+        : relativeUri.path.substring(basePath.length);
+    return 'package:${module.name}/$packageRelativePath';
+  } else {
+    return '${getRootScheme(module)}:/$relativeUri';
+  }
+}
+
+List<String> getSources(Module module) {
+  return module.sources.map((uri) => sourceToImportUri(module, uri)).toList();
+}
+
+void writePackageConfig(
+    Module module, Set<Module> transitiveDependencies, Uri root) async {
+  // TODO(joshualitt): Figure out a way to support package configs in
+  // tests/modular.
+  var packageConfig = await loadPackageConfigUri(packageConfigUri);
+
+  // We create both a .packages and package_config.json file which defines
+  // the location of this module if it is a package.  The CFE requires that
+  // if a `package:` URI of a dependency is used in an import, then we need
+  // that package entry in the associated file. However, after it checks that
+  // the definition exists, the CFE will not actually use the resolved URI if
+  // a library for the import URI is already found in one of the provide
+  // .dill files of the dependencies. For that reason, and to ensure that
+  // a step only has access to the files provided in a module, we generate a
+  // config file with invalid folders for other packages.
+  // TODO(sigmund): follow up with the CFE to see if we can remove the need
+  // for these dummy entries..
+  // TODO(joshualitt): Generate just the json file.
+  var packagesJson = [];
+  var packagesContents = StringBuffer();
+  if (module.isPackage) {
+    packagesContents.write('${module.name}:${module.packageBase}\n');
+    packagesJson.add(_packageConfigEntry(
+        module.name, Uri.parse('../${module.packageBase}')));
+  }
+
+  int unusedNum = 0;
+  for (Module dependency in transitiveDependencies) {
+    if (dependency.isPackage) {
+      // rootUri should be ignored for dependent modules, so we pass in a
+      // bogus value.
+      var rootUri = Uri.parse('unused$unusedNum');
+      unusedNum++;
+
+      var dependentPackage = packageConfig[dependency.name];
+      var packageJson = dependentPackage == null
+          ? _packageConfigEntry(dependency.name, rootUri)
+          : _packageConfigEntry(dependentPackage.name, rootUri,
+              version: dependentPackage.languageVersion);
+      packagesJson.add(packageJson);
+      packagesContents.write('${dependency.name}:$rootUri\n');
+    }
+  }
+
+  if (module.isPackage) {
+    await File.fromUri(root.resolve(packageConfigJsonPath))
+        .create(recursive: true);
+    await File.fromUri(root.resolve(packageConfigJsonPath)).writeAsString('{'
+        '  "configVersion": ${packageConfig.version},'
+        '  "packages": [ ${packagesJson.join(',')} ]'
+        '}');
+  }
+
+  await File.fromUri(root.resolve('.packages'))
+      .writeAsString('$packagesContents');
+}
+
+abstract class CFEStep extends IOModularStep {
   final String stepName;
 
-  CFEStep(this.stepName);
+  CFEStep(this.stepName, this.onlyOnSdk);
 
   @override
   bool get needsSources => true;
@@ -62,86 +148,17 @@
   bool get onlyOnMain => false;
 
   @override
+  final bool onlyOnSdk;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print("\nstep: $stepName on $module");
 
-    // TODO(joshualitt): Figure out a way to support package configs in
-    // tests/modular.
-    var packageConfig = await loadPackageConfigUri(packageConfigUri);
-
-    // We use non file-URI schemes for representeing source locations in a
-    // root-agnostic way. This allows us to refer to file across modules and
-    // across steps without exposing the underlying temporary folders that are
-    // created by the framework. In build systems like bazel this is especially
-    // important because each step may be run on a different machine.
-    //
-    // Files in packages are defined in terms of `package:` URIs, while
-    // non-package URIs are defined using the `dart-dev-app` scheme.
-    String rootScheme = module.isSdk ? 'dart-dev-sdk' : 'dev-dart-app';
-    String sourceToImportUri(Uri relativeUri) {
-      if (module.isPackage) {
-        var basePath = module.packageBase.path;
-        var packageRelativePath = basePath == "./"
-            ? relativeUri.path
-            : relativeUri.path.substring(basePath.length);
-        return 'package:${module.name}/$packageRelativePath';
-      } else {
-        return '$rootScheme:/$relativeUri';
-      }
-    }
-
-    // We create both a .packages and package_config.json file which defines
-    // the location of this module if it is a package.  The CFE requires that
-    // if a `package:` URI of a dependency is used in an import, then we need
-    // that package entry in the associated file. However, after it checks that
-    // the definition exists, the CFE will not actually use the resolved URI if
-    // a library for the import URI is already found in one of the provide
-    // .dill files of the dependencies. For that reason, and to ensure that
-    // a step only has access to the files provided in a module, we generate a
-    // config file with invalid folders for other packages.
-    // TODO(sigmund): follow up with the CFE to see if we can remove the need
-    // for these dummy entries..
-    // TODO(joshualitt): Generate just the json file.
-    var packagesJson = [];
-    var packagesContents = StringBuffer();
-    if (module.isPackage) {
-      packagesContents.write('${module.name}:${module.packageBase}\n');
-      packagesJson.add(_packageConfigEntry(
-          module.name, Uri.parse('../${module.packageBase}')));
-    }
-
     Set<Module> transitiveDependencies = computeTransitiveDependencies(module);
-    int unusedNum = 0;
-    for (Module dependency in transitiveDependencies) {
-      if (dependency.isPackage) {
-        // rootUri should be ignored for dependent modules, so we pass in a
-        // bogus value.
-        var rootUri = Uri.parse('unused$unusedNum');
-        unusedNum++;
+    writePackageConfig(module, transitiveDependencies, root);
 
-        var dependentPackage = packageConfig[dependency.name];
-        var packageJson = dependentPackage == null
-            ? _packageConfigEntry(dependency.name, rootUri)
-            : _packageConfigEntry(dependentPackage.name, rootUri,
-                version: dependentPackage.languageVersion);
-        packagesJson.add(packageJson);
-        packagesContents.write('${dependency.name}:$rootUri\n');
-      }
-    }
-
-    if (module.isPackage) {
-      await File.fromUri(root.resolve(packageConfigJsonPath))
-          .create(recursive: true);
-      await File.fromUri(root.resolve(packageConfigJsonPath)).writeAsString('{'
-          '  "configVersion": ${packageConfig.version},'
-          '  "packages": [ ${packagesJson.join(',')} ]'
-          '}');
-    }
-
-    await File.fromUri(root.resolve('.packages'))
-        .writeAsString('$packagesContents');
-
+    String rootScheme = getRootScheme(module);
     List<String> sources;
     List<String> extraArgs = ['--packages-file', '$rootScheme:/.packages'];
     if (module.isSdk) {
@@ -164,7 +181,7 @@
       ];
       assert(transitiveDependencies.isEmpty);
     } else {
-      sources = module.sources.map(sourceToImportUri).toList();
+      sources = getSources(module);
     }
 
     // TODO(joshualitt): Ensure the kernel worker has some way to specify
@@ -227,7 +244,7 @@
   @override
   DataId get outputData => dillSummaryId;
 
-  OutlineDillCompilationStep() : super('outline-dill-compilation');
+  OutlineDillCompilationStep() : super('outline-dill-compilation', false);
 }
 
 // Step that compiles sources in a module to a .dill file.
@@ -254,42 +271,81 @@
   @override
   DataId get outputData => dillId;
 
-  FullDillCompilationStep() : super('full-dill-compilation');
+  FullDillCompilationStep({bool onlyOnSdk = false})
+      : super('full-dill-compilation', onlyOnSdk);
 }
 
-class ModularAnalysisStep implements IOModularStep {
+class ModularAnalysisStep extends IOModularStep {
   @override
-  List<DataId> get resultData => const [modularDataId, modularUpdatedDillId];
+  List<DataId> get resultData => [modularDataId, modularUpdatedDillId];
 
   @override
-  bool get needsSources => false;
+  bool get needsSources => !onlyOnSdk;
 
+  /// The SDK has no dependencies, and for all other modules we only need
+  /// summaries.
   @override
-  List<DataId> get dependencyDataNeeded => const [dillId];
+  List<DataId> get dependencyDataNeeded => [dillSummaryId];
 
+  /// All non SDK modules only need sources for module data.
   @override
-  List<DataId> get moduleDataNeeded => const [dillId];
+  List<DataId> get moduleDataNeeded => onlyOnSdk ? [dillId] : const [];
 
   @override
   bool get onlyOnMain => false;
 
   @override
+  final bool onlyOnSdk;
+
+  @override
+  bool get notOnSdk => !onlyOnSdk;
+
+  // TODO(joshualitt): We currently special case the SDK both because it is not
+  // trivial to build it in the same fashion as other modules, and because it is
+  // a special case in other build environments. Eventually, we should
+  // standardize this a bit more and always build the SDK modularly, if we have
+  // to build it.
+  ModularAnalysisStep({this.onlyOnSdk = false});
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print("\nstep: modular analysis on $module");
     Set<Module> transitiveDependencies = computeTransitiveDependencies(module);
-    Iterable<String> dillDependencies =
-        transitiveDependencies.map((m) => '${toUri(m, dillId)}');
+    List<String> dillDependencies = [];
+    List<String> sources = [];
+    List<String> extraArgs = [];
+    if (!module.isSdk) {
+      writePackageConfig(module, transitiveDependencies, root);
+      String rootScheme = getRootScheme(module);
+      sources = getSources(module);
+      dillDependencies = transitiveDependencies
+          .map((m) => '${toUri(m, dillSummaryId)}')
+          .toList();
+      extraArgs = [
+        '--packages=${root.resolve('.packages')}',
+        '--multi-root=$root',
+        '--multi-root-scheme=$rootScheme',
+      ];
+    }
+
     List<String> args = [
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
+      '--no-sound-null-safety',
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${Flags.inputDill}=${toUri(module, dillId)}',
+      // If we have sources, then we aren't building the SDK, otherwise we
+      // assume we are building the sdk and pass in a full dill.
+      if (sources.isNotEmpty)
+        '${Flags.sources}=${sources.join(',')}'
+      else
+        '${Flags.inputDill}=${toUri(module, dillId)}',
       if (dillDependencies.isNotEmpty)
         '--dill-dependencies=${dillDependencies.join(',')}',
       '--out=${toUri(module, modularUpdatedDillId)}',
       '${Flags.writeModularAnalysis}=${toUri(module, modularDataId)}',
       for (String flag in flags) '--enable-experiment=$flag',
+      ...extraArgs
     ];
     var result =
         await _runProcess(Platform.resolvedExecutable, args, root.toFilePath());
@@ -305,44 +361,36 @@
   }
 }
 
-DataId idForDill({bool useModularAnalysis}) =>
-    useModularAnalysis ? modularUpdatedDillId : dillId;
-
-List<DataId> inputFromAnalysis({bool useModularAnalysis = false}) => [
-      idForDill(useModularAnalysis: useModularAnalysis),
-      if (useModularAnalysis) modularDataId,
-    ];
-
-// Step that invokes the dart2js closed world computation.
-class ComputeClosedWorldStep implements IOModularStep {
+class ConcatenateDillsStep extends IOModularStep {
   final bool useModularAnalysis;
 
-  ComputeClosedWorldStep({this.useModularAnalysis});
+  DataId get idForDill => useModularAnalysis ? modularUpdatedDillId : dillId;
+
+  List<DataId> get dependencies => [idForDill];
 
   @override
-  List<DataId> get resultData => const [closedWorldId, globalUpdatedDillId];
+  List<DataId> get resultData => const [fullDillId];
 
   @override
   bool get needsSources => false;
 
   @override
-  List<DataId> get dependencyDataNeeded =>
-      inputFromAnalysis(useModularAnalysis: useModularAnalysis);
+  List<DataId> get dependencyDataNeeded => dependencies;
 
   @override
-  List<DataId> get moduleDataNeeded =>
-      inputFromAnalysis(useModularAnalysis: useModularAnalysis);
+  List<DataId> get moduleDataNeeded => dependencies;
 
   @override
   bool get onlyOnMain => true;
 
+  ConcatenateDillsStep({this.useModularAnalysis});
+
   @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
-    if (_options.verbose)
-      print("\nstep: dart2js compute closed world on $module");
+    if (_options.verbose) print("\nstep: dart2js concatenate dills on $module");
     Set<Module> transitiveDependencies = computeTransitiveDependencies(module);
-    DataId dillId = idForDill(useModularAnalysis: useModularAnalysis);
+    DataId dillId = idForDill;
     Iterable<String> dillDependencies =
         transitiveDependencies.map((m) => '${toUri(m, dillId)}');
     List<String> dataDependencies = transitiveDependencies
@@ -358,8 +406,66 @@
       '${Flags.inputDill}=${toUri(module, dillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.dillDependencies}=${dillDependencies.join(',')}',
-      if (useModularAnalysis)
-        '${Flags.readModularAnalysis}=${dataDependencies.join(',')}',
+      '${Flags.cfeOnly}',
+      '--out=${toUri(module, fullDillId)}',
+    ];
+    var result =
+        await _runProcess(Platform.resolvedExecutable, args, root.toFilePath());
+
+    _checkExitCode(result, this, module);
+  }
+
+  @override
+  void notifyCached(Module module) {
+    if (_options.verbose)
+      print("\ncached step: dart2js concatenate dills on $module");
+  }
+}
+
+// Step that invokes the dart2js closed world computation.
+class ComputeClosedWorldStep extends IOModularStep {
+  final bool useModularAnalysis;
+
+  ComputeClosedWorldStep({this.useModularAnalysis});
+
+  List<DataId> get dependencies => [
+        fullDillId,
+        if (useModularAnalysis) modularDataId,
+      ];
+
+  @override
+  List<DataId> get resultData => const [closedWorldId, globalUpdatedDillId];
+
+  @override
+  bool get needsSources => false;
+
+  @override
+  List<DataId> get dependencyDataNeeded => dependencies;
+
+  @override
+  List<DataId> get moduleDataNeeded => dependencies;
+
+  @override
+  bool get onlyOnMain => true;
+
+  @override
+  Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
+      List<String> flags) async {
+    if (_options.verbose)
+      print("\nstep: dart2js compute closed world on $module");
+    Set<Module> transitiveDependencies = computeTransitiveDependencies(module);
+    List<String> dataDependencies = transitiveDependencies
+        .map((m) => '${toUri(m, modularDataId)}')
+        .toList();
+    dataDependencies.add('${toUri(module, modularDataId)}');
+    List<String> args = [
+      '--packages=${sdkRoot.toFilePath()}/.packages',
+      _dart2jsScript,
+      // TODO(sigmund): remove this dependency on libraries.json
+      if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, fullDillId)}',
+      for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.writeClosedWorld}=${toUri(module, closedWorldId)}',
       Flags.noClosedWorldInData,
       '--out=${toUri(module, globalUpdatedDillId)}',
@@ -378,7 +484,7 @@
 }
 
 // Step that runs the dart2js modular analysis.
-class GlobalAnalysisStep implements IOModularStep {
+class GlobalAnalysisStep extends IOModularStep {
   @override
   List<DataId> get resultData => const [globalDataId];
 
@@ -428,7 +534,7 @@
 // Step that invokes the dart2js code generation on the main module given the
 // results of the global analysis step and produces one shard of the codegen
 // output.
-class Dart2jsCodegenStep implements IOModularStep {
+class Dart2jsCodegenStep extends IOModularStep {
   final ShardDataId codeId;
 
   Dart2jsCodegenStep(this.codeId);
@@ -480,7 +586,7 @@
 
 // Step that invokes the dart2js codegen enqueuer and emitter on the main module
 // given the results of the global analysis step and codegen shards.
-class Dart2jsEmissionStep implements IOModularStep {
+class Dart2jsEmissionStep extends IOModularStep {
   @override
   List<DataId> get resultData => const [jsId];
 
@@ -532,7 +638,7 @@
 }
 
 /// Step that runs the output of dart2js in d8 and saves the output.
-class RunD8 implements IOModularStep {
+class RunD8 extends IOModularStep {
   @override
   List<DataId> get resultData => const [txtId];
 
diff --git a/pkg/compiler/tool/modular_test_suite_legacy.dart b/pkg/compiler/tool/modular_test_suite_legacy.dart
index 875a64a..f170069 100644
--- a/pkg/compiler/tool/modular_test_suite_legacy.dart
+++ b/pkg/compiler/tool/modular_test_suite_legacy.dart
@@ -22,6 +22,7 @@
         IOPipeline([
           OutlineDillCompilationStep(),
           FullDillCompilationStep(),
+          ConcatenateDillsStep(useModularAnalysis: false),
           ComputeClosedWorldStep(useModularAnalysis: false),
           GlobalAnalysisStep(),
           Dart2jsCodegenStep(codeId0),
diff --git a/pkg/compiler/tool/szcmp b/pkg/compiler/tool/szcmp
new file mode 100755
index 0000000..1b2db57
--- /dev/null
+++ b/pkg/compiler/tool/szcmp
@@ -0,0 +1,82 @@
+#!/bin/bash
+# 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.
+#
+# Usage: szcmp files
+#
+# Compare sizes of files as percentages in a table.  Column header is the
+# baseline (i.e. all sizes in the column are in terms of the file in the column
+# header).
+#
+# Example with dart2js workflow:
+#
+#     $ dart2js  ...  --out=v1/m.js
+#     # change dart2js
+#     $ dart2js  ...  --out=v2/m.js
+#     # change dart2js again
+#     $ dart2js  ...  --out=v3/m.js
+#
+#     $ szcmp v?/m.js
+#                       v1/m.js  v2/m.js  v3/m.js
+#     5793879  v1/m.js        =  -4.499%  +4.461%
+#     6066812  v2/m.js  +4.711%        =  +9.382%
+#     5546433  v3/m.js  -4.271%  -8.577%        =
+#
+# The first column of the matrix is usually the most relevant - `v2` is 4.7%
+# larger than `v1` and `v3` is 4.2% smaller than `v1`. The other columns can be
+# useful for understanding the differential changes. Sizes relative to `v2` are
+# in the next column, e.g. the step from `v2` to `v3` was a reduction of
+# 8.6%. Above-diagonal values show the percentage change in the 'undo'
+# direction. While changing from `v2` to `v3` reduces by 8.6%, reverting that
+# change would be an increase of 9.4%.
+
+wc -c "$@" |
+awk '
+$2 == "total" { next; }
+
+{
+  N++
+  r[N,0] = $1;
+  r[N,1] = $2;
+}
+
+END {
+  r[0,0] = ""  # header col 0
+  r[0,1] = ""  # header col 1
+
+  for (i = 1; i <= N; i++) { #skips "total" line
+    r[0, i+1] = r[i,1]  # name header
+
+    for (j = 1; j <= N; j++) {
+      s1 = r[i,0]
+      s2 = r[j,0];
+      if (s1 == s2) {
+        r[i, j+1] = "="
+      } else {
+        x = sprintf("%.3f%%", (s1 - s2) / s2 * 100)
+        if (s1 > s2) x = "+" x
+        r[i, j+1] = x
+      }
+    }
+  }
+
+  # find column widths
+  for (cc = 0; cc <= N+1; cc++) {
+    w[cc] = 0;
+    for (rr = 0; rr <= N; rr++) {
+      if (length(r[rr,cc]) > w[cc]) w[cc] = length(r[rr,cc])
+    }
+  }
+
+  for (rr = 0; rr <= N; rr++) {
+    line = ""
+    sep = ""
+    for (cc = 0; cc <= N+1; cc++) {
+      line = line sep sprintf("%*s", w[cc], r[rr, cc])
+      sep = "  "
+    }
+    print line
+  }
+}
+'
diff --git a/pkg/dart2js_info/README.md b/pkg/dart2js_info/README.md
index 54f3a7a..1cfc18f 100644
--- a/pkg/dart2js_info/README.md
+++ b/pkg/dart2js_info/README.md
@@ -581,6 +581,7 @@
 ```
 
 Here's an example output snippet:
+
 ```
 Runtime Coverage Summary
 ========================================================================
diff --git a/pkg/dart2js_info/bin/src/debug_info.dart b/pkg/dart2js_info/bin/src/debug_info.dart
index 6199ee4..1de2f7d 100644
--- a/pkg/dart2js_info/bin/src/debug_info.dart
+++ b/pkg/dart2js_info/bin/src/debug_info.dart
@@ -194,7 +194,7 @@
       _debugCode.write(' ' * _indent);
       var endsInNewLine = code.endsWith('\n');
       if (endsInNewLine) code = code.substring(0, code.length - 1);
-      _debugCode.write(code.replaceAll('\n', '\n' + (' ' * _indent)));
+      _debugCode.write(code.replaceAll('\n', '\n${' ' * _indent}'));
       if (endsInNewLine) _debugCode.write(',\n');
       if (isClosureClass) {
         _indent -= 2;
diff --git a/pkg/dart2js_info/bin/src/library_size_split.dart b/pkg/dart2js_info/bin/src/library_size_split.dart
index da6d85d..1721457 100644
--- a/pkg/dart2js_info/bin/src/library_size_split.dart
+++ b/pkg/dart2js_info/bin/src/library_size_split.dart
@@ -138,7 +138,7 @@
 
     _printRow(_Row row) {
       if (row is _Divider) {
-        print(' ' + ('-' * (longest + 18)));
+        print(' ${'-' * (longest + 18)}');
         return;
       }
 
diff --git a/pkg/dart2js_info/lib/src/proto/info.pb.dart b/pkg/dart2js_info/lib/src/proto/info.pb.dart
index 28d20a6..6d56230 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pb.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -37,14 +37,14 @@
     $core.String? targetId,
     $core.String? mask,
   }) {
-    final _result = create();
+    final result = create();
     if (targetId != null) {
-      _result.targetId = targetId;
+      result.targetId = targetId;
     }
     if (mask != null) {
-      _result.mask = mask;
+      result.mask = mask;
     }
-    return _result;
+    return result;
   }
   factory DependencyInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -139,17 +139,17 @@
     $core.Map<$core.String, InfoPB>? allInfos,
     $core.Iterable<LibraryDeferredImportsPB>? deferredImports,
   }) {
-    final _result = create();
+    final result = create();
     if (program != null) {
-      _result.program = program;
+      result.program = program;
     }
     if (allInfos != null) {
-      _result.allInfos.addAll(allInfos);
+      result.allInfos.addAll(allInfos);
     }
     if (deferredImports != null) {
-      _result.deferredImports.addAll(deferredImports);
+      result.deferredImports.addAll(deferredImports);
     }
-    return _result;
+    return result;
   }
   factory AllInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -354,59 +354,59 @@
     ClosureInfoPB? closureInfo,
     ClassTypeInfoPB? classTypeInfo,
   }) {
-    final _result = create();
+    final result = create();
     if (name != null) {
-      _result.name = name;
+      result.name = name;
     }
     if (id != null) {
-      _result.id = id;
+      result.id = id;
     }
     if (serializedId != null) {
-      _result.serializedId = serializedId;
+      result.serializedId = serializedId;
     }
     if (coverageId != null) {
-      _result.coverageId = coverageId;
+      result.coverageId = coverageId;
     }
     if (size != null) {
-      _result.size = size;
+      result.size = size;
     }
     if (parentId != null) {
-      _result.parentId = parentId;
+      result.parentId = parentId;
     }
     if (uses != null) {
-      _result.uses.addAll(uses);
+      result.uses.addAll(uses);
     }
     if (outputUnitId != null) {
-      _result.outputUnitId = outputUnitId;
+      result.outputUnitId = outputUnitId;
     }
     if (libraryInfo != null) {
-      _result.libraryInfo = libraryInfo;
+      result.libraryInfo = libraryInfo;
     }
     if (classInfo != null) {
-      _result.classInfo = classInfo;
+      result.classInfo = classInfo;
     }
     if (functionInfo != null) {
-      _result.functionInfo = functionInfo;
+      result.functionInfo = functionInfo;
     }
     if (fieldInfo != null) {
-      _result.fieldInfo = fieldInfo;
+      result.fieldInfo = fieldInfo;
     }
     if (constantInfo != null) {
-      _result.constantInfo = constantInfo;
+      result.constantInfo = constantInfo;
     }
     if (outputUnitInfo != null) {
-      _result.outputUnitInfo = outputUnitInfo;
+      result.outputUnitInfo = outputUnitInfo;
     }
     if (typedefInfo != null) {
-      _result.typedefInfo = typedefInfo;
+      result.typedefInfo = typedefInfo;
     }
     if (closureInfo != null) {
-      _result.closureInfo = closureInfo;
+      result.closureInfo = closureInfo;
     }
     if (classTypeInfo != null) {
-      _result.classTypeInfo = classTypeInfo;
+      result.classTypeInfo = classTypeInfo;
     }
-    return _result;
+    return result;
   }
   factory InfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -745,47 +745,47 @@
     $core.bool? isMirrorsUsed,
     $core.bool? minified,
   }) {
-    final _result = create();
+    final result = create();
     if (entrypointId != null) {
-      _result.entrypointId = entrypointId;
+      result.entrypointId = entrypointId;
     }
     if (size != null) {
-      _result.size = size;
+      result.size = size;
     }
     if (dart2jsVersion != null) {
-      _result.dart2jsVersion = dart2jsVersion;
+      result.dart2jsVersion = dart2jsVersion;
     }
     if (compilationMoment != null) {
-      _result.compilationMoment = compilationMoment;
+      result.compilationMoment = compilationMoment;
     }
     if (compilationDuration != null) {
-      _result.compilationDuration = compilationDuration;
+      result.compilationDuration = compilationDuration;
     }
     if (toProtoDuration != null) {
-      _result.toProtoDuration = toProtoDuration;
+      result.toProtoDuration = toProtoDuration;
     }
     if (dumpInfoDuration != null) {
-      _result.dumpInfoDuration = dumpInfoDuration;
+      result.dumpInfoDuration = dumpInfoDuration;
     }
     if (noSuchMethodEnabled != null) {
-      _result.noSuchMethodEnabled = noSuchMethodEnabled;
+      result.noSuchMethodEnabled = noSuchMethodEnabled;
     }
     if (isRuntimeTypeUsed != null) {
-      _result.isRuntimeTypeUsed = isRuntimeTypeUsed;
+      result.isRuntimeTypeUsed = isRuntimeTypeUsed;
     }
     if (isIsolateUsed != null) {
-      _result.isIsolateUsed = isIsolateUsed;
+      result.isIsolateUsed = isIsolateUsed;
     }
     if (isFunctionApplyUsed != null) {
-      _result.isFunctionApplyUsed = isFunctionApplyUsed;
+      result.isFunctionApplyUsed = isFunctionApplyUsed;
     }
     if (isMirrorsUsed != null) {
-      _result.isMirrorsUsed = isMirrorsUsed;
+      result.isMirrorsUsed = isMirrorsUsed;
     }
     if (minified != null) {
-      _result.minified = minified;
+      result.minified = minified;
     }
-    return _result;
+    return result;
   }
   factory ProgramInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -998,14 +998,14 @@
     $core.String? uri,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final _result = create();
+    final result = create();
     if (uri != null) {
-      _result.uri = uri;
+      result.uri = uri;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
-    return _result;
+    return result;
   }
   factory LibraryInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1071,11 +1071,11 @@
   factory OutputUnitInfoPB({
     $core.Iterable<$core.String>? imports,
   }) {
-    final _result = create();
+    final result = create();
     if (imports != null) {
-      _result.imports.addAll(imports);
+      result.imports.addAll(imports);
     }
-    return _result;
+    return result;
   }
   factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1135,14 +1135,14 @@
     $core.bool? isAbstract,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final _result = create();
+    final result = create();
     if (isAbstract != null) {
-      _result.isAbstract = isAbstract;
+      result.isAbstract = isAbstract;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
-    return _result;
+    return result;
   }
   factory ClassInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1249,11 +1249,11 @@
   factory ConstantInfoPB({
     $core.String? code,
   }) {
-    final _result = create();
+    final result = create();
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
-    return _result;
+    return result;
   }
   factory ConstantInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1346,26 +1346,26 @@
     $core.bool? isConst,
     $core.String? initializerId,
   }) {
-    final _result = create();
+    final result = create();
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
     if (inferredType != null) {
-      _result.inferredType = inferredType;
+      result.inferredType = inferredType;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
     if (isConst != null) {
-      _result.isConst = isConst;
+      result.isConst = isConst;
     }
     if (initializerId != null) {
-      _result.initializerId = initializerId;
+      result.initializerId = initializerId;
     }
-    return _result;
+    return result;
   }
   factory FieldInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1478,11 +1478,11 @@
   factory TypedefInfoPB({
     $core.String? type,
   }) {
-    final _result = create();
+    final result = create();
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
-    return _result;
+    return result;
   }
   factory TypedefInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1563,20 +1563,20 @@
     $core.bool? isFactory,
     $core.bool? isExternal,
   }) {
-    final _result = create();
+    final result = create();
     if (isStatic != null) {
-      _result.isStatic = isStatic;
+      result.isStatic = isStatic;
     }
     if (isConst != null) {
-      _result.isConst = isConst;
+      result.isConst = isConst;
     }
     if (isFactory != null) {
-      _result.isFactory = isFactory;
+      result.isFactory = isFactory;
     }
     if (isExternal != null) {
-      _result.isExternal = isExternal;
+      result.isExternal = isExternal;
     }
-    return _result;
+    return result;
   }
   factory FunctionModifiersPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1687,17 +1687,17 @@
     $core.String? type,
     $core.String? declaredType,
   }) {
-    final _result = create();
+    final result = create();
     if (name != null) {
-      _result.name = name;
+      result.name = name;
     }
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
     if (declaredType != null) {
-      _result.declaredType = declaredType;
+      result.declaredType = declaredType;
     }
-    return _result;
+    return result;
   }
   factory ParameterInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1830,32 +1830,32 @@
     $core.int? inlinedCount,
     $core.String? code,
   }) {
-    final _result = create();
+    final result = create();
     if (functionModifiers != null) {
-      _result.functionModifiers = functionModifiers;
+      result.functionModifiers = functionModifiers;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
     if (returnType != null) {
-      _result.returnType = returnType;
+      result.returnType = returnType;
     }
     if (inferredReturnType != null) {
-      _result.inferredReturnType = inferredReturnType;
+      result.inferredReturnType = inferredReturnType;
     }
     if (parameters != null) {
-      _result.parameters.addAll(parameters);
+      result.parameters.addAll(parameters);
     }
     if (sideEffects != null) {
-      _result.sideEffects = sideEffects;
+      result.sideEffects = sideEffects;
     }
     if (inlinedCount != null) {
-      _result.inlinedCount = inlinedCount;
+      result.inlinedCount = inlinedCount;
     }
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
-    return _result;
+    return result;
   }
   factory FunctionInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1986,11 +1986,11 @@
   factory ClosureInfoPB({
     $core.String? functionId,
   }) {
-    final _result = create();
+    final result = create();
     if (functionId != null) {
-      _result.functionId = functionId;
+      result.functionId = functionId;
     }
-    return _result;
+    return result;
   }
   factory ClosureInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -2059,14 +2059,14 @@
     $core.String? prefix,
     $core.Iterable<$core.String>? files,
   }) {
-    final _result = create();
+    final result = create();
     if (prefix != null) {
-      _result.prefix = prefix;
+      result.prefix = prefix;
     }
     if (files != null) {
-      _result.files.addAll(files);
+      result.files.addAll(files);
     }
-    return _result;
+    return result;
   }
   factory DeferredImportPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -2146,17 +2146,17 @@
     $core.String? libraryName,
     $core.Iterable<DeferredImportPB>? imports,
   }) {
-    final _result = create();
+    final result = create();
     if (libraryUri != null) {
-      _result.libraryUri = libraryUri;
+      result.libraryUri = libraryUri;
     }
     if (libraryName != null) {
-      _result.libraryName = libraryName;
+      result.libraryName = libraryName;
     }
     if (imports != null) {
-      _result.imports.addAll(imports);
+      result.imports.addAll(imports);
     }
-    return _result;
+    return result;
   }
   factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 67f7ef0..dd79ac1 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -40,7 +40,7 @@
 
       final expectedPrefixes = <InfoKind, String>{};
       for (final kind in InfoKind.values) {
-        expectedPrefixes[kind] = kindToString(kind) + '/';
+        expectedPrefixes[kind] = '${kindToString(kind)}/';
       }
 
       for (final info in proto.allInfos.entries) {
diff --git a/pkg/dart2native/lib/dart2native.dart b/pkg/dart2native/lib/dart2native.dart
index be47b4c..d89c33d 100644
--- a/pkg/dart2native/lib/dart2native.dart
+++ b/pkg/dart2native/lib/dart2native.dart
@@ -5,6 +5,9 @@
 import 'dart:io';
 import 'dart:typed_data';
 
+import 'dart2native_macho.dart' show writeAppendedMachOExecutable;
+import 'dart2native_pe.dart' show writeAppendedPortableExecutable;
+
 // Maximum page size across all supported architectures (arm64 macOS has 16K
 // pages, some arm64 Linux distributions have 64K pages).
 const elfPageSize = 65536;
@@ -14,6 +17,14 @@
 
 Future writeAppendedExecutable(
     String dartaotruntimePath, String payloadPath, String outputPath) async {
+  if (Platform.isMacOS) {
+    return await writeAppendedMachOExecutable(
+        dartaotruntimePath, payloadPath, outputPath);
+  } else if (Platform.isWindows) {
+    return await writeAppendedPortableExecutable(
+        dartaotruntimePath, payloadPath, outputPath);
+  }
+
   final dartaotruntime = File(dartaotruntimePath);
   final int dartaotruntimeLength = dartaotruntime.lengthSync();
 
diff --git a/pkg/dart2native/lib/dart2native_macho.dart b/pkg/dart2native/lib/dart2native_macho.dart
new file mode 100644
index 0000000..eefaf9d
--- /dev/null
+++ b/pkg/dart2native/lib/dart2native_macho.dart
@@ -0,0 +1,337 @@
+// 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:convert';
+import 'dart:io';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:dart2native/macho.dart';
+import 'package:dart2native/macho_parser.dart';
+
+const String kSnapshotSegmentName = "__CUSTOM";
+const String kSnapshotSectionName = "__dart_app_snap";
+const int kMinimumSegmentSize = 0x4000;
+// Since arm64 macOS has 16K pages, which is larger than the 4K pages on x64
+// macOS, we use this larger page size to ensure the MachO file is aligned
+// properly on all architectures.
+const int kSegmentAlignment = 0x4000;
+
+int align(int size, int base) {
+  final int over = size % base;
+  if (over != 0) {
+    return size + (base - over);
+  }
+  return size;
+}
+
+// Utility for aligning parts of MachO headers to the defined sizes.
+int vmSizeAlign(int size) {
+  return align(max(size, kMinimumSegmentSize), kSegmentAlignment);
+}
+
+// Returns value + amount only if the original value is within the bounds
+// defined by [withinStart, withinStart + withinSize).
+Uint32 addIfWithin(
+    Uint32 value, Uint64 amount, Uint64 withinStart, Uint64 withinSize) {
+  final intWithinStart = withinStart.asInt();
+  final intWithinSize = withinSize.asInt();
+
+  if (value >= intWithinStart && value < (intWithinStart + intWithinSize)) {
+    return (value.asUint64() + amount).asUint32();
+  } else {
+    return value;
+  }
+}
+
+// Trims a bytestring that an arbitrary number of null characters on the end of
+// it.
+String trimmedBytestring(Uint8List bytestring) {
+  return String.fromCharCodes(bytestring.takeWhile((value) => value != 0));
+}
+
+// Simplifies casting so we get null values back instead of exceptions.
+T? cast<T>(x) => x is T ? x : null;
+
+// Inserts a segment definition into a MachOFile. This does NOT insert the
+// actual segment into the file. It only inserts the definition of that segment
+// into the MachO header.
+//
+// In addition to simply specifying the definition for the segment, this
+// function also moves the existing __LINKEDIT segment to the end of the header
+// definition as is required by the MachO specification (or at least MacOS's
+// implementation of it). In doing so there are several offsets in the original
+// __LINKEDIT segment that must be updated to point to their new location
+// because the __LINKEDIT segment and sections are now in a different
+// place. This function takes care of those shifts as well.
+//
+// Returns the original, unmodified, __LINKEDIT segment.
+Future<MachOSegmentCommand64> insertSegmentDefinition(MachOFile file,
+    File segment, String segmentName, String sectionName) async {
+  // Load in the data to be inserted.
+  final segmentData = await segment.readAsBytes();
+
+  // Find the existing __LINKEDIT segment
+  final linkedit = cast<MachOSegmentCommand64>(file.commands
+      .where((segment) =>
+          segment.asType() is MachOSegmentCommand64 &&
+          MachOConstants.SEG_LINKEDIT ==
+              trimmedBytestring((segment as MachOSegmentCommand64).segname))
+      .first);
+
+  final linkeditIndex = file.commands.indexWhere((segment) =>
+      segment.asType() is MachOSegmentCommand64 &&
+      MachOConstants.SEG_LINKEDIT ==
+          trimmedBytestring((segment as MachOSegmentCommand64).segname));
+
+  if (linkedit == null) {
+    throw FormatException(
+        "Could not find a __LINKEDIT section in the specified binary.");
+  } else {
+    // Create the new segment.
+    final Uint8List segname = Uint8List(16);
+    segname.setRange(0, segmentName.length, ascii.encode(segmentName));
+    segname.fillRange(segmentName.length, 16, 0);
+
+    final Uint64 vmaddr = linkedit.vmaddr;
+    final Uint64 vmsize = Uint64(vmSizeAlign(segmentData.length));
+    final Uint64 fileoff = linkedit.fileoff;
+    final Uint64 filesize = vmsize;
+    final Int32 maxprot = MachOConstants.VM_PROT_READ;
+    final Int32 initprot = maxprot;
+    final Uint32 nsects = Uint32(1);
+
+    final Uint8List sectname = Uint8List(16);
+    sectname.setRange(0, sectionName.length, ascii.encode(sectionName));
+    sectname.fillRange(sectionName.length, 16, 0);
+
+    final Uint64 addr = vmaddr;
+    final Uint64 size = Uint64(segmentData.length);
+    final Uint32 offset = fileoff.asUint32();
+    final Uint32 flags = MachOConstants.S_REGULAR;
+
+    final Uint32 zero = Uint32(0);
+
+    final loadCommandDefinitionSize = 4 * 2;
+    final sectionDefinitionSize = 16 * 2 + 8 * 2 + 4 * 8;
+    final segmentDefinitionSize = 16 + 8 * 4 + 4 * 4;
+    final commandSize = loadCommandDefinitionSize +
+        segmentDefinitionSize +
+        sectionDefinitionSize;
+
+    final loadCommand =
+        MachOLoadCommand(MachOConstants.LC_SEGMENT_64, Uint32(commandSize));
+
+    final section = MachOSection64(sectname, segname, addr, size, offset, zero,
+        zero, zero, flags, zero, zero, zero);
+
+    final segment = MachOSegmentCommand64(Uint32(commandSize), segname, vmaddr,
+        vmsize, fileoff, filesize, maxprot, initprot, nsects, zero, [section]);
+
+    // Setup the new linkedit command.
+    final shiftedLinkeditVmaddr = linkedit.vmaddr + segment.vmsize;
+    final shiftedLinkeditFileoff = linkedit.fileoff + segment.filesize;
+    final shiftedLinkedit = MachOSegmentCommand64(
+        linkedit.cmdsize,
+        linkedit.segname,
+        shiftedLinkeditVmaddr,
+        linkedit.vmsize,
+        shiftedLinkeditFileoff,
+        linkedit.filesize,
+        linkedit.maxprot,
+        linkedit.initprot,
+        linkedit.nsects,
+        linkedit.flags,
+        linkedit.sections);
+
+    // Shift all of the related commands that need to reference the new file
+    // position of the linkedit segment.
+    for (var i = 0; i < file.commands.length; i++) {
+      final command = file.commands[i];
+
+      final offsetAmount = segment.filesize;
+      final withinStart = linkedit.fileoff;
+      final withinSize = linkedit.filesize;
+
+      // For the specific command that we need to adjust, we need to move the
+      // commands' various offsets forward by the new segment's size in the file
+      // (segment.filesize). However, we need to ensure that when we move the
+      // offset forward, we exclude cases where the offset was originally
+      // outside of the linkedit segment (i.e. offset < linkedit.fileoff or
+      // offset >= linkedit.fileoff + linkedit.filesize). The DRY-ing function
+      // addIfWithin takes care of that repeated logic.
+      if (command is MachODyldInfoCommand) {
+        file.commands[i] = MachODyldInfoCommand(
+            command.cmd,
+            command.cmdsize,
+            addIfWithin(
+                command.rebase_off, offsetAmount, withinStart, withinSize),
+            command.rebase_size,
+            addIfWithin(
+                command.bind_off, offsetAmount, withinStart, withinSize),
+            command.bind_size,
+            addIfWithin(
+                command.weak_bind_off, offsetAmount, withinStart, withinSize),
+            command.weak_bind_size,
+            addIfWithin(
+                command.lazy_bind_off, offsetAmount, withinStart, withinSize),
+            command.lazy_bind_size,
+            addIfWithin(
+                command.export_off, offsetAmount, withinStart, withinSize),
+            command.export_size);
+      } else if (command is MachOSymtabCommand) {
+        file.commands[i] = MachOSymtabCommand(
+            command.cmdsize,
+            addIfWithin(command.symoff, offsetAmount, withinStart, withinSize),
+            command.nsyms,
+            addIfWithin(command.stroff, offsetAmount, withinStart, withinSize),
+            command.strsize);
+      } else if (command is MachODysymtabCommand) {
+        file.commands[i] = MachODysymtabCommand(
+            command.cmdsize,
+            command.ilocalsym,
+            command.nlocalsym,
+            command.iextdefsym,
+            command.nextdefsym,
+            command.iundefsym,
+            command.nundefsym,
+            addIfWithin(command.tocoff, offsetAmount, withinStart, withinSize),
+            command.ntoc,
+            addIfWithin(
+                command.modtaboff, offsetAmount, withinStart, withinSize),
+            command.nmodtab,
+            addIfWithin(
+                command.extrefsymoff, offsetAmount, withinStart, withinSize),
+            command.nextrefsyms,
+            addIfWithin(
+                command.indirectsymoff, offsetAmount, withinStart, withinSize),
+            command.nindirectsyms,
+            addIfWithin(
+                command.extreloff, offsetAmount, withinStart, withinSize),
+            command.nextrel,
+            addIfWithin(
+                command.locreloff, offsetAmount, withinStart, withinSize),
+            command.nlocrel);
+      } else if (command is MachOLinkeditDataCommand) {
+        file.commands[i] = MachOLinkeditDataCommand(
+            command.cmd,
+            command.cmdsize,
+            addIfWithin(command.dataoff, offsetAmount, withinStart, withinSize),
+            command.datasize);
+      }
+    }
+
+    // Now we need to build the new header from these modified pieces.
+    file.header = MachOHeader(
+        file.header!.magic,
+        file.header!.cputype,
+        file.header!.cpusubtype,
+        file.header!.filetype,
+        file.header!.ncmds + Uint32(1),
+        file.header!.sizeofcmds + loadCommand.cmdsize,
+        file.header!.flags,
+        file.header!.reserved);
+
+    file.commands[linkeditIndex] = shiftedLinkedit;
+    file.commands.insert(linkeditIndex, segment);
+  }
+
+  return linkedit;
+}
+
+// Pipe from one file stream into another. We do this in chunks to avoid
+// excessive memory load.
+Future<int> pipeStream(RandomAccessFile from, RandomAccessFile to,
+    {int? numToWrite, int chunkSize = 1 << 30}) async {
+  int numWritten = 0;
+  final int fileLength = from.lengthSync();
+  while (from.positionSync() != fileLength) {
+    final int availableBytes = fileLength - from.positionSync();
+    final int numToRead = numToWrite == null
+        ? min(availableBytes, chunkSize)
+        : min(numToWrite - numWritten, min(availableBytes, chunkSize));
+
+    final buffer = await from.read(numToRead);
+    await to.writeFrom(buffer);
+
+    numWritten += numToRead;
+
+    if (numToWrite != null && numWritten >= numToWrite) {
+      break;
+    }
+  }
+
+  return numWritten;
+}
+
+// Writes an "appended" dart runtime + script snapshot file in a format
+// compatible with MachO executables.
+Future writeAppendedMachOExecutable(
+    String dartaotruntimePath, String payloadPath, String outputPath) async {
+  File originalExecutableFile = File(dartaotruntimePath);
+
+  MachOFile machOFile = MachOFile();
+  await machOFile.loadFromFile(originalExecutableFile);
+
+  // Insert the new segment that contains our snapshot data.
+  File newSegmentFile = File(payloadPath);
+
+  // Note that these two values MUST match the ones in
+  // runtime/bin/snapshot_utils.cc, which looks specifically for the snapshot in
+  // this segment/section.
+  final linkeditCommand = await insertSegmentDefinition(
+      machOFile, newSegmentFile, kSnapshotSegmentName, kSnapshotSectionName);
+
+  // Write out the new executable, with the same contents except the new header.
+  File outputFile = File(outputPath);
+  RandomAccessFile stream = await outputFile.open(mode: FileMode.write);
+
+  // Write the MachO header.
+  machOFile.writeSync(stream);
+  final int headerBytesWritten = stream.positionSync();
+
+  RandomAccessFile newSegmentFileStream = await newSegmentFile.open();
+  RandomAccessFile originalFileStream = await originalExecutableFile.open();
+  await originalFileStream.setPosition(headerBytesWritten);
+
+  // Write the unchanged data from the original file.
+  await pipeStream(originalFileStream, stream,
+      numToWrite: linkeditCommand.fileoff.asInt() - headerBytesWritten);
+
+  // Write the inserted section data, ensuring that the data is padded to the
+  // segment size.
+  await pipeStream(newSegmentFileStream, stream);
+  final int newSegmentLength = newSegmentFileStream.lengthSync();
+  final int alignedSegmentSize = vmSizeAlign(newSegmentLength);
+  await stream.writeFrom(List.filled(alignedSegmentSize - newSegmentLength, 0));
+
+  // Copy the rest of the file from the original to the new one.
+  await pipeStream(originalFileStream, stream);
+
+  await stream.close();
+
+  if (machOFile.hasCodeSignature) {
+    // After writing the modified file, we perform ad-hoc signing (no identity)
+    // similar to the linker (the linker-signed option flag) to ensure that any
+    // LC_CODE_SIGNATURE block has the correct CD hashes. This is necessary for
+    // platforms where signature verification is always on (e.g., OS X on M1).
+    //
+    // We use the `-f` flag to force signature overwriting as the official
+    // Dart binaries (including dartaotruntime) are fully signed.
+    final signingProcess = await Process.run(
+        'codesign', ['-f', '-o', 'linker-signed', '-s', '-', outputPath]);
+    if (signingProcess.exitCode != 0) {
+      print('Subcommand terminated with exit code ${signingProcess.exitCode}.');
+      if (signingProcess.stdout.isNotEmpty) {
+        print('Subcommand stdout:');
+        print(signingProcess.stdout);
+      }
+      if (signingProcess.stderr.isNotEmpty) {
+        print('Subcommand stderr:');
+        print(signingProcess.stderr);
+      }
+      throw 'Could not sign the new executable';
+    }
+  }
+}
diff --git a/pkg/dart2native/lib/dart2native_pe.dart b/pkg/dart2native/lib/dart2native_pe.dart
new file mode 100644
index 0000000..144112f
--- /dev/null
+++ b/pkg/dart2native/lib/dart2native_pe.dart
@@ -0,0 +1,334 @@
+// 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:convert';
+import 'dart:io';
+import 'dart:math';
+import 'dart:typed_data';
+
+int align(int size, int base) {
+  final int over = size % base;
+  if (over != 0) {
+    return size + (base - over);
+  }
+  return size;
+}
+
+class BytesBacked {
+  ByteData data;
+
+  BytesBacked(this.data);
+
+  int get size => data.lengthInBytes;
+
+  Future<void> write(RandomAccessFile output) async {
+    await output.writeFrom(Uint8List.sublistView(data));
+  }
+}
+
+class CoffFileHeader extends BytesBacked {
+  CoffFileHeader._(ByteData data) : super(data);
+
+  static const _fileHeaderSize = 20;
+  static const _sectionCountOffset = 2;
+  static const _optionalHeaderSizeOffset = 16;
+
+  static CoffFileHeader fromTypedData(TypedData source, int offset) {
+    if (source.lengthInBytes < offset + _fileHeaderSize) {
+      throw 'File is truncated within the COFF file header';
+    }
+    final buffer = Uint8List(_fileHeaderSize);
+    buffer.setAll(
+        0, Uint8List.sublistView(source, offset, offset + _fileHeaderSize));
+    return CoffFileHeader._(ByteData.sublistView(buffer));
+  }
+
+  int get sectionCount => data.getUint16(_sectionCountOffset, Endian.little);
+  set sectionCount(int value) =>
+      data.setUint16(_sectionCountOffset, value, Endian.little);
+
+  int get optionalHeaderSize =>
+      data.getUint16(_optionalHeaderSizeOffset, Endian.little);
+}
+
+class CoffOptionalHeader extends BytesBacked {
+  CoffOptionalHeader._(ByteData data) : super(data);
+
+  static const _pe32Magic = 0x10b;
+  static const _pe32PlusMagic = 0x20b;
+
+  static const _magicOffset = 0;
+  static const _sectionAlignmentOffset = 32;
+  static const _fileAlignmentOffset = 36;
+  static const _imageSizeOffset = 56;
+  static const _headersSizeOffset = 60;
+
+  static CoffOptionalHeader fromTypedData(
+      TypedData source, int offset, int size) {
+    if (source.lengthInBytes < offset + size) {
+      throw 'File is truncated within the COFF optional header';
+    }
+    final buffer = Uint8List(size);
+    buffer.setAll(0, Uint8List.sublistView(source, offset, offset + size));
+    final data = ByteData.sublistView(buffer);
+    final magic = data.getUint16(_magicOffset, Endian.little);
+    if (magic != _pe32Magic && magic != _pe32PlusMagic) {
+      throw 'Not a PE32 or PE32+ image file';
+    }
+    return CoffOptionalHeader._(data);
+  }
+
+  // The alignment used for virtual addresses of sections, _not_ file offsets.
+  int get sectionAlignment =>
+      data.getUint32(_sectionAlignmentOffset, Endian.little);
+
+  // The alignment used for file offsets of section data and other contents.
+  int get fileAlignment => data.getUint32(_fileAlignmentOffset, Endian.little);
+
+  int get headersSize => data.getUint32(_headersSizeOffset, Endian.little);
+  set headersSize(int value) =>
+      data.setUint32(_headersSizeOffset, value, Endian.little);
+
+  int get imageSize => data.getUint32(_imageSizeOffset, Endian.little);
+  set imageSize(int value) =>
+      data.setUint32(_imageSizeOffset, value, Endian.little);
+}
+
+class CoffSectionHeader extends BytesBacked {
+  CoffSectionHeader._(ByteData data) : super(data);
+
+  static const _virtualSizeOffset = 8;
+  static const _virtualAddressOffset = 12;
+  static const _fileSizeOffset = 16;
+  static const _fileOffsetOffset = 20;
+  static const _characteristicsOffset = 36;
+
+  static const _discardableFlag = 0x02000000;
+
+  String get name => String.fromCharCodes(Uint8List.sublistView(data, 0, 8));
+  set name(String name) {
+    // Each section header has only eight bytes for the section name.
+    // First reset it to zeroes, then copy over the UTF-8 encoded version.
+    final buffer = Uint8List.sublistView(data, 0, 8);
+    buffer.fillRange(0, 8, 0);
+    buffer.setAll(0, utf8.encode(name));
+  }
+
+  int get virtualAddress =>
+      data.getUint32(_virtualAddressOffset, Endian.little);
+  set virtualAddress(int offset) =>
+      data.setUint32(_virtualAddressOffset, offset, Endian.little);
+
+  int get virtualSize => data.getUint32(_virtualSizeOffset, Endian.little);
+  set virtualSize(int offset) =>
+      data.setUint32(_virtualSizeOffset, offset, Endian.little);
+
+  int get fileOffset => data.getUint32(_fileOffsetOffset, Endian.little);
+  set fileOffset(int offset) =>
+      data.setUint32(_fileOffsetOffset, offset, Endian.little);
+
+  int get fileSize => data.getUint32(_fileSizeOffset, Endian.little);
+  set fileSize(int offset) =>
+      data.setUint32(_fileSizeOffset, offset, Endian.little);
+
+  int get characteristics =>
+      data.getUint32(_characteristicsOffset, Endian.little);
+  set characteristics(int value) =>
+      data.setUint32(_characteristicsOffset, value, Endian.little);
+
+  bool get isDiscardable => characteristics & _discardableFlag != 0;
+  set isDiscardable(bool value) {
+    if (value) {
+      characteristics |= _discardableFlag;
+    } else {
+      characteristics &= ~_discardableFlag;
+    }
+  }
+}
+
+class CoffSectionTable extends BytesBacked {
+  CoffSectionTable._(ByteData data) : super(data);
+
+  static const _entrySize = 40;
+
+  static CoffSectionTable fromTypedData(
+      TypedData source, int offset, int sections) {
+    final size = sections * _entrySize;
+    if (source.lengthInBytes < offset + size) {
+      throw 'File is truncated within the COFF section table';
+    }
+    final buffer = Uint8List(size);
+    buffer.setAll(0, Uint8List.sublistView(source, offset, offset + size));
+    return CoffSectionTable._(ByteData.sublistView(buffer));
+  }
+
+  Iterable<CoffSectionHeader> get entries sync* {
+    for (int i = 0; i < size; i += _entrySize) {
+      yield CoffSectionHeader._(ByteData.sublistView(data, i, i + _entrySize));
+    }
+  }
+
+  int get addressEnd => entries.fold(
+      0, (i, entry) => max(i, entry.virtualAddress + entry.virtualSize));
+  int get offsetEnd =>
+      entries.fold(0, (i, entry) => max(i, entry.fileOffset + entry.fileSize));
+
+  CoffSectionHeader allocateNewSectionHeader() {
+    final newBuffer = Uint8List(size + _entrySize);
+    newBuffer.setAll(0, Uint8List.sublistView(data));
+    data = ByteData.sublistView(newBuffer);
+    return CoffSectionHeader._(
+        ByteData.sublistView(data, size - _entrySize, size));
+  }
+}
+
+class CoffHeaders {
+  final int _coffOffset;
+  final CoffFileHeader fileHeader;
+  final CoffOptionalHeader optionalHeader;
+  final CoffSectionTable sectionTable;
+
+  CoffHeaders._(this._coffOffset, this.fileHeader, this.optionalHeader,
+      this.sectionTable);
+
+  static CoffHeaders fromTypedData(TypedData source, int offset) {
+    final fileHeader = CoffFileHeader.fromTypedData(source, offset);
+    final optionalHeader = CoffOptionalHeader.fromTypedData(
+        source, offset + fileHeader.size, fileHeader.optionalHeaderSize);
+    final sectionTable = CoffSectionTable.fromTypedData(
+        source,
+        offset + fileHeader.size + optionalHeader.size,
+        fileHeader.sectionCount);
+    return CoffHeaders._(offset, fileHeader, optionalHeader, sectionTable);
+  }
+
+  // Keep in sync with kSnapshotSectionName in snapshot_utils.cc.
+  static const _snapshotSectionName = "snapshot";
+
+  int get size => optionalHeader.headersSize;
+
+  void addSnapshotSectionHeader(int length) {
+    final oldHeadersSize = optionalHeader.headersSize;
+    final address =
+        align(sectionTable.addressEnd, optionalHeader.sectionAlignment);
+    final offset = align(sectionTable.offsetEnd, optionalHeader.fileAlignment);
+
+    // Create and fill the new section header entry.
+    final newHeader = sectionTable.allocateNewSectionHeader();
+    newHeader.name = _snapshotSectionName;
+    newHeader.virtualAddress = address;
+    newHeader.virtualSize = length;
+    newHeader.fileOffset = offset;
+    newHeader.fileSize = align(length, optionalHeader.fileAlignment);
+    newHeader.isDiscardable = true;
+    // Leave the rest of the header fields with zero values.
+
+    // Increment the number of sections in the file header.
+    fileHeader.sectionCount += 1;
+
+    // Adjust the header size stored in the optional header, which must be
+    // a multiple of fileAlignment.
+    optionalHeader.headersSize = align(
+        _coffOffset + fileHeader.size + optionalHeader.size + sectionTable.size,
+        optionalHeader.fileAlignment);
+
+    // If the size of the headers changed, we'll need to adjust the section
+    // offsets.
+    final headersSizeDiff = optionalHeader.headersSize - oldHeadersSize;
+    if (headersSizeDiff > 0) {
+      // Safety check that section virtual addresses need not be adjusted, as
+      // that requires rewriting much more of the fields and section contents.
+      // (Generally, the size of the headers is much smaller than the section
+      // alignment and so this is not expected to happen.)
+      if (size ~/ optionalHeader.sectionAlignment !=
+          oldHeadersSize ~/ optionalHeader.sectionAlignment) {
+        throw 'Adding the snapshot would require adjusting virtual addresses';
+      }
+      assert(headersSizeDiff % optionalHeader.fileAlignment == 0);
+      for (final entry in sectionTable.entries) {
+        entry.fileOffset += headersSizeDiff;
+      }
+    }
+
+    // Adjust the image size stored in the optional header, which must be a
+    // multiple of section alignment (as it is the size in memory, not on disk).
+    optionalHeader.imageSize = align(
+        newHeader.virtualAddress + newHeader.virtualSize,
+        optionalHeader.sectionAlignment);
+  }
+
+  Future<void> write(RandomAccessFile output) async {
+    await fileHeader.write(output);
+    await optionalHeader.write(output);
+    await sectionTable.write(output);
+    // Pad to the recorded headers size, which includes the MS-DOS stub.
+    final written = await output.position();
+    await output.writeFrom(Uint8List(size - written));
+  }
+}
+
+class PortableExecutable {
+  final Uint8List source;
+  final CoffHeaders headers;
+  final int sourceFileHeaderOffset;
+  final int sourceSectionContentsOffset;
+
+  PortableExecutable._(this.source, this.headers, this.sourceFileHeaderOffset,
+      this.sourceSectionContentsOffset);
+
+  static const _expectedPESignature = <int>[80, 69, 0, 0];
+  static const _offsetForPEOffset = 0x3c;
+
+  static Future<PortableExecutable> fromFile(File file) async {
+    final source = await file.readAsBytes();
+    final byteData = ByteData.sublistView(source);
+    final peOffset = byteData.getUint32(_offsetForPEOffset, Endian.little);
+    for (int i = 0; i < _expectedPESignature.length; i++) {
+      if (byteData.getUint8(peOffset + i) != _expectedPESignature[i]) {
+        throw 'Not a Portable Executable file';
+      }
+    }
+    final fileHeaderOffset = peOffset + _expectedPESignature.length;
+    final headers = CoffHeaders.fromTypedData(source, fileHeaderOffset);
+    final sectionContentsOffset = headers.size;
+    return PortableExecutable._(
+        source, headers, fileHeaderOffset, sectionContentsOffset);
+  }
+
+  Future<void> _fileAlignSectionEnd(RandomAccessFile output) async {
+    final current = await output.position();
+    final padding =
+        align(current, headers.optionalHeader.fileAlignment) - current;
+    await output.writeFrom(Uint8List(padding));
+  }
+
+  Future<void> appendSnapshotAndWrite(File output, File snapshot) async {
+    final stream = await output.open(mode: FileMode.write);
+    // Write MS-DOS stub.
+    await stream.writeFrom(source, 0, sourceFileHeaderOffset);
+    // Write headers with additional snapshot section.
+    final snapshotBytes = await snapshot.readAsBytes();
+    headers.addSnapshotSectionHeader(snapshotBytes.length);
+    await headers.write(stream);
+    // Write original section contents with alignment padding.
+    await stream.writeFrom(source, sourceSectionContentsOffset);
+    await _fileAlignSectionEnd(stream);
+    // Write snapshot with alignment padding.
+    await stream.writeFrom(snapshotBytes);
+    await _fileAlignSectionEnd(stream);
+    await stream.close();
+  }
+}
+
+// Writes an "appended" dart runtime + script snapshot file in a format
+// compatible with Portable Executable files.
+Future writeAppendedPortableExecutable(
+    String dartaotruntimePath, String payloadPath, String outputPath) async {
+  File originalExecutableFile = File(dartaotruntimePath);
+  File newSegmentFile = File(payloadPath);
+  File outputFile = File(outputPath);
+
+  final pe = await PortableExecutable.fromFile(originalExecutableFile);
+  await pe.appendSnapshotAndWrite(outputFile, newSegmentFile);
+}
diff --git a/pkg/dart2native/lib/macho.dart b/pkg/dart2native/lib/macho.dart
new file mode 100644
index 0000000..7aaccb8
--- /dev/null
+++ b/pkg/dart2native/lib/macho.dart
@@ -0,0 +1,2416 @@
+// 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.
+
+// This file is a reimplementation of the header file mach-o/loader.h, which is
+// part of the Apple system headers. All comments, which detail the format of
+// Mach-O files, have been reproduced from the orginal header.
+
+import 'dart:io';
+import 'dart:typed_data';
+
+// Extensions for writing the custom byte types (defined below) to streams
+// (RandomAccessFile).
+extension ByteWriter on RandomAccessFile {
+  void writeUint32(Uint32 value) {
+    final intValue = value.asInt();
+    for (int i = 0; i < 4; i++) {
+      writeByteSync((intValue >> (8 * i)) & 0xff);
+    }
+  }
+
+  void writeUint64(Uint64 value) {
+    final intValue = value.asInt();
+    for (int i = 0; i < 8; i++) {
+      writeByteSync((intValue >> (8 * i)) & 0xff);
+    }
+  }
+
+  void writeInt32(Int32 value) {
+    final intValue = value.asInt();
+    for (int i = 0; i < 4; i++) {
+      writeByteSync((intValue >> (8 * i)) & 0xff);
+    }
+  }
+}
+
+// The dart ffi library doesn't have definitions for integer operations (among
+// others) on ffi types. Since we use those operations prolifically in handling
+// MachO files, these are here as a convenience to avoid polluting the code with
+// casts and operations.
+abstract class IntLike {
+  final int _data;
+  const IntLike(this._data);
+
+  int asInt() => _data;
+
+  @override
+  String toString() => asInt().toString();
+}
+
+class Uint64 extends IntLike {
+  const Uint64(int data) : super(data);
+
+  Uint64 operator +(Uint64 other) {
+    return Uint64(_data + other._data);
+  }
+
+  Uint32 asUint32() {
+    if (_data < 0 || _data >= (1 << 32)) {
+      throw FormatException(
+          "Attempted to cast a Uint64 to a Uint32, but the value will not fit in "
+          "32bits: $_data");
+    }
+
+    return Uint32(_data);
+  }
+
+  bool operator <(int other) {
+    // All positively encoded integers are less than negatively encoded ones.
+    if (_data < 0 && other > 0) {
+      return false;
+    }
+    if (other < 0) {
+      return true;
+    }
+    return _data < other;
+  }
+
+  bool operator >(int other) {
+    // All negatively encoded integers are greater than positively encoded ones.
+    if (_data < 0 && other > 0) {
+      return true;
+    }
+    if (other < 0) {
+      return false;
+    }
+    return _data > other;
+  }
+
+  bool operator ==(other) {
+    if (other is Uint64) {
+      return _data == other._data;
+    } else {
+      return false;
+    }
+  }
+}
+
+class Int32 extends IntLike {
+  const Int32(int data) : super(data);
+
+  Int32 operator |(Int32 other) {
+    return Int32(_data | other._data);
+  }
+
+  bool operator ==(other) {
+    if (other is Int32) {
+      return _data == other._data;
+    } else {
+      return false;
+    }
+  }
+}
+
+class Uint16 extends IntLike {
+  const Uint16(int data) : super(data);
+}
+
+class Uint32 extends IntLike {
+  const Uint32(int data) : super(data);
+
+  Uint32 operator |(Uint32 other) {
+    return Uint32(_data | other._data);
+  }
+
+  Uint32 operator +(Uint32 other) {
+    return Uint32(_data + other._data);
+  }
+
+  Uint32 operator &(Uint32 other) {
+    return Uint32(_data & other._data);
+  }
+
+  Uint32 operator >>(Uint32 other) {
+    return Uint32(_data >> other._data);
+  }
+
+  bool operator <(int other) {
+    return _data < other;
+  }
+
+  bool operator >(int other) {
+    return _data > other;
+  }
+
+  bool operator >=(int other) {
+    return _data >= other;
+  }
+
+  bool operator ==(other) {
+    if (other is Uint32) {
+      return _data == other._data;
+    } else {
+      return false;
+    }
+  }
+
+  Uint64 asUint64() {
+    return Uint64(_data);
+  }
+}
+
+// A load command is simply a part of the MachO header that indicates there is
+// typed schema that a consumer of the headers can use to understand how to load
+// and run various parts of the file (e.g. where to find the TEXT and DATA
+// sections). Every load command with a known schema in a MachO header should
+// extend this abstract class. This class does not appear in the original MachO
+// definitions, but is useful for the object-oriented nature of this
+// implementation.
+abstract class IMachOLoadCommand<T> {
+  /* type of load command (uint32_t) */
+  final Uint32 cmd;
+  /* total size of command in bytes (uint32_t) */
+  final Uint32 cmdsize;
+
+  IMachOLoadCommand(this.cmd, this.cmdsize);
+  T asType();
+
+  void writeSync(RandomAccessFile stream) {
+    stream.writeUint32(cmd);
+    stream.writeUint32(cmdsize);
+    writeContentsSync(stream);
+  }
+
+  // Subclasses need to implement this serializer, which should NOT
+  // attempt to serialize the cmd and the cmdsize to the stream. That
+  // logic is handled by the parent class automatically.
+  void writeContentsSync(RandomAccessFile stream);
+}
+
+// In cases where it's not necessary to actually deserialize a load command into
+// its schema, we use this catch-all class.
+class MachOGenericLoadCommand
+    extends IMachOLoadCommand<MachOGenericLoadCommand> {
+  final Uint8List contents;
+
+  MachOGenericLoadCommand(cmd, cmdsize, this.contents) : super(cmd, cmdsize);
+
+  @override
+  MachOGenericLoadCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeFromSync(contents);
+  }
+}
+
+// There are two types of headers: 32bit and 64bit. The only difference is that
+// 64bit headers have a reserved field. This class does not appear in the
+// original header definitions, but is useful for the object-oriented nature of
+// this implementation.
+abstract class IMachOHeader {
+  /* mach magic number identifier (uint32_t) */
+  final Uint32 magic;
+  /* cpu specifier (uint32_t) */
+  final Uint32 cputype;
+  /* machine specifier (uint32_t) */
+  final Uint32 cpusubtype;
+  /* type of file (uint32_t) */
+  final Uint32 filetype;
+  /* number of load commands (uint32_t) */
+  final Uint32 ncmds;
+  /* the size of all the load commands (uint32_t) */
+  final Uint32 sizeofcmds;
+  /* flags (uint32_t) */
+  final Uint32 flags;
+
+  /* reserved (uint32_t) */
+  final Uint32 reserved; // Only used in 64bit MachO files
+
+  IMachOHeader(
+    this.magic,
+    this.cputype,
+    this.cpusubtype,
+    this.filetype,
+    this.ncmds,
+    this.sizeofcmds,
+    this.flags,
+    this.reserved,
+  );
+}
+
+/*
+* The 32-bit mach header appears at the very beginning of the object file for
+* 32-bit architectures.
+*/
+class MachOHeader32 extends IMachOHeader {
+  MachOHeader32(
+    Uint32 magic,
+    Uint32 cputype,
+    Uint32 cpusubtype,
+    Uint32 filetype,
+    Uint32 ncmds,
+    Uint32 sizeofcmds,
+    Uint32 flags,
+  ) : super(
+          magic,
+          cputype,
+          cpusubtype,
+          filetype,
+          ncmds,
+          sizeofcmds,
+          flags,
+          Uint32(0),
+        );
+}
+
+/*
+* The 64-bit mach header appears at the very beginning of object files for
+* 64-bit architectures.
+*/
+class MachOHeader extends IMachOHeader {
+  MachOHeader(
+    Uint32 magic,
+    Uint32 cputype,
+    Uint32 cpusubtype,
+    Uint32 filetype,
+    Uint32 ncmds,
+    Uint32 sizeofcmds,
+    Uint32 flags,
+    Uint32 reserved,
+  ) : super(
+          magic,
+          cputype,
+          cpusubtype,
+          filetype,
+          ncmds,
+          sizeofcmds,
+          flags,
+          reserved,
+        );
+}
+
+/*
+* The load commands directly follow the mach_header.  The total size of all
+* of the commands is given by the sizeofcmds field in the mach_header.  All
+* load commands must have as their first two fields cmd and cmdsize.  The cmd
+* field is filled in with a constant for that command type.  Each command type
+* has a structure specifically for it.  The cmdsize field is the size in bytes
+* of the particular load command structure plus anything that follows it that
+* is a part of the load command (i.e. section structures, strings, etc.).  To
+* advance to the next load command the cmdsize can be added to the offset or
+* pointer of the current load command.  The cmdsize for 32-bit architectures
+* MUST be a multiple of 4 bytes and for 64-bit architectures MUST be a multiple
+* of 8 bytes (these are forever the maximum alignment of any load commands).
+* The padded bytes must be zero.  All tables in the object file must also
+* follow these rules so the file can be memory mapped.  Otherwise the pointers
+* to these tables will not work well or at all on some machines.  With all
+* padding zeroed like objects will compare byte for byte.
+*/
+class MachOLoadCommand {
+  /* type of load command (uint32_t) */
+  final Uint32 cmd;
+  /* total size of command in bytes (uint32_t) */
+  final Uint32 cmdsize;
+
+  MachOLoadCommand(this.cmd, this.cmdsize);
+}
+
+/*
+* The segment load command indicates that a part of this file is to be
+* mapped into the task's address space.  The size of this segment in memory,
+* vmsize, maybe equal to or larger than the amount to map from this file,
+* filesize.  The file is mapped starting at fileoff to the beginning of
+* the segment in memory, vmaddr.  The rest of the memory of the segment,
+* if any, is allocated zero fill on demand.  The segment's maximum virtual
+* memory protection and initial virtual memory protection are specified
+* by the maxprot and initprot fields.  If the segment has sections then the
+* section structures directly follow the segment command and their size is
+* reflected in cmdsize.
+*/
+class MachOSegmentCommand extends IMachOLoadCommand<MachOSegmentCommand> {
+  /* For 32Bit Architectures */
+  final Uint8List segname; /* segment name */
+  final Uint32 vmaddr; /* memory address of this segment (uint32_t) */
+  final Uint32 vmsize; /* memory size of this segment (uint32_t) */
+  final Uint32 fileoff; /* file offset of this segment (uint32_t) */
+  final Uint32 filesize; /* amount to map from the file (uint32_t) */
+  final Int32 maxprot; /* maximum VM protection (int32) */
+  final Int32 initprot; /* initial VM protection (int32) */
+  final Uint32 nsects; /* number of sections in segment (uint32_t) */
+  final Uint32 flags; /* flags (uint32_t) */
+
+  MachOSegmentCommand(
+    Uint32 cmdsize,
+    this.segname,
+    this.vmaddr,
+    this.vmsize,
+    this.fileoff,
+    this.filesize,
+    this.maxprot,
+    this.initprot,
+    this.nsects,
+    this.flags,
+  ) : super(MachOConstants.LC_SEGMENT, cmdsize);
+
+  @override
+  MachOSegmentCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeFromSync(segname);
+    stream.writeUint32(vmaddr);
+    stream.writeUint32(vmsize);
+    stream.writeUint32(fileoff);
+    stream.writeUint32(filesize);
+    stream.writeInt32(maxprot);
+    stream.writeInt32(initprot);
+    stream.writeUint32(nsects);
+    stream.writeUint32(flags);
+  }
+}
+
+/*
+* The 64-bit segment load command indicates that a part of this file is to be
+* mapped into a 64-bit task's address space.  If the 64-bit segment has
+* sections then section_64 structures directly follow the 64-bit segment
+* command and their size is reflected in cmdsize.
+*/
+class MachOSegmentCommand64 extends IMachOLoadCommand<MachOSegmentCommand64> {
+  /* For 64Bit Architectures */
+  final Uint8List segname; //[16] /* segment name */
+  final Uint64 vmaddr; /* memory address of this segment (uint64_t) */
+  final Uint64 vmsize; /* memory size of this segment (uint64_t) */
+  final Uint64 fileoff; /* file offset of this segment (uint64_t) */
+  final Uint64 filesize; /* amount to map from the file (uint64_t) */
+  final Int32 maxprot; /* maximum VM protection (int32) */
+  final Int32 initprot; /* initial VM protection (int32) */
+  final Uint32 nsects; /* number of sections in segment (uint32_t) */
+  final Uint32 flags; /* flags (uint32_t) */
+
+  final List<MachOSection64> sections;
+
+  MachOSegmentCommand64(
+    Uint32 cmdsize,
+    this.segname,
+    this.vmaddr,
+    this.vmsize,
+    this.fileoff,
+    this.filesize,
+    this.maxprot,
+    this.initprot,
+    this.nsects,
+    this.flags,
+    this.sections,
+  ) : super(MachOConstants.LC_SEGMENT_64, cmdsize);
+
+  @override
+  MachOSegmentCommand64 asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeFromSync(segname);
+    stream.writeUint64(vmaddr);
+    stream.writeUint64(vmsize);
+    stream.writeUint64(fileoff);
+    stream.writeUint64(filesize);
+    stream.writeInt32(maxprot);
+    stream.writeInt32(initprot);
+    stream.writeUint32(nsects);
+    stream.writeUint32(flags);
+
+    sections.forEach((section) {
+      section.writeContentsSync(stream);
+    });
+  }
+}
+
+/*
+* A segment is made up of zero or more sections.  Non-MH_OBJECT files have
+* all of their segments with the proper sections in each, and padded to the
+* specified segment alignment when produced by the link editor.  The first
+* segment of a MH_EXECUTE and MH_FVMLIB format file contains the mach_header
+* and load commands of the object file before its first section.  The zero
+* fill sections are always last in their segment (in all formats).  This
+* allows the zeroed segment padding to be mapped into memory where zero fill
+* sections might be. The gigabyte zero fill sections, those with the section
+* type S_GB_ZEROFILL, can only be in a segment with sections of this type.
+* These segments are then placed after all other segments.
+*
+* The MH_OBJECT format has all of its sections in one segment for
+* compactness.  There is no padding to a specified segment boundary and the
+* mach_header and load commands are not part of the segment.
+*
+* Sections with the same section name, sectname, going into the same segment,
+* segname, are combined by the link editor.  The resulting section is aligned
+* to the maximum alignment of the combined sections and is the new section's
+* alignment.  The combined sections are aligned to their original alignment in
+* the combined section.  Any padded bytes to get the specified alignment are
+* zeroed.
+*
+* The format of the relocation entries referenced by the reloff and nreloc
+* fields of the section structure for mach object files is described in the
+* header file <reloc.h>.
+*/
+class MachOSection {
+  /* for 32-bit architectures */
+  final Uint8List sectname; /* name of this section */
+  final Uint8List segname; /* segment this section goes in */
+  final Uint32 addr; /* memory address of this section (uint32_t) */
+  final Uint32 size; /* size in bytes of this section (uint32_t) */
+  final Uint32 offset; /* file offset of this section (uint32_t) */
+  final Uint32 align; /* section alignment (power of 2) (uint32_t) */
+  final Uint32 reloff; /* file offset of relocation entries (uint32_t) */
+  final Uint32 nreloc; /* number of relocation entries (uint32_t) */
+  final Uint32 flags; /* flags (section type and attributes)(uint32_t) */
+  final Uint32 reserved1; /* reserved (for offset or index) (uint32_t) */
+  final Uint32 reserved2; /* reserved (for count or sizeof) (uint32_t) */
+
+  MachOSection(
+    this.sectname,
+    this.segname,
+    this.addr,
+    this.size,
+    this.offset,
+    this.align,
+    this.reloff,
+    this.nreloc,
+    this.flags,
+    this.reserved1,
+    this.reserved2,
+  ) {
+    if (segname.length != 16) {
+      throw ArgumentError("segname must be 16 bytes exactly");
+    }
+  }
+}
+
+class MachOSection64 {
+  /* for 64-bit architectures */
+  final Uint8List sectname; //[16] /* name of this section */
+  final Uint8List segname; //[16] /* segment this section goes in */
+  final Uint64 addr; /* memory address of this section (uint64_t) */
+  final Uint64 size; /* size in bytes of this section (uint64_t) */
+  final Uint32 offset; /* file offset of this section (uint32_t) */
+  final Uint32 align; /* section alignment (power of 2) (uint32_t) */
+  final Uint32 reloff; /* file offset of relocation entries (uint32_t) */
+  final Uint32 nreloc; /* number of relocation entries (uint32_t) */
+  final Uint32 flags; /* flags (section type and attributes)(uint32_t) */
+  final Uint32 reserved1; /* reserved (for offset or index) (uint32_t) */
+  final Uint32 reserved2; /* reserved (for count or sizeof) (uint32_t) */
+  final Uint32 reserved3; /* reserved (uint32_t) */
+
+  MachOSection64(
+    this.sectname,
+    this.segname,
+    this.addr,
+    this.size,
+    this.offset,
+    this.align,
+    this.reloff,
+    this.nreloc,
+    this.flags,
+    this.reserved1,
+    this.reserved2,
+    this.reserved3,
+  ) {
+    if (segname.length != 16) {
+      throw ArgumentError("segname must be 16 bytes exactly");
+    }
+  }
+
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeFromSync(sectname);
+    stream.writeFromSync(segname);
+    stream.writeUint64(addr);
+    stream.writeUint64(size);
+    stream.writeUint32(offset);
+    stream.writeUint32(align);
+    stream.writeUint32(reloff);
+    stream.writeUint32(nreloc);
+    stream.writeUint32(flags);
+    stream.writeUint32(reserved1);
+    stream.writeUint32(reserved2);
+    stream.writeUint32(reserved3);
+  }
+}
+
+// This is a stand-in for the lc_str union in the MachO header.
+class MachOStr {
+  final int offset;
+  final Uint8List ptr;
+
+  MachOStr(this.offset, this.ptr);
+  // part of the schema so it doesn't contribute to
+  // the size of this schema.
+
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeInt32(Int32(offset));
+    stream.writeFromSync(ptr);
+  }
+}
+
+/*
+ * Fixed virtual memory shared libraries are identified by two things.  The
+ * target pathname (the name of the library as found for execution), and the
+ * minor version number.  The address of where the headers are loaded is in
+ * header_addr. (THIS IS OBSOLETE and no longer supported).
+ */
+class MachOFvmlib {
+  final MachOStr name; /* library's target pathname */
+  final Uint32 minor_version; /* library's minor version number (uint32_t) */
+  final Uint32 header_addr; /* library's header address (uint32_t) */
+
+  MachOFvmlib(
+    this.name,
+    this.minor_version,
+    this.header_addr,
+  );
+
+  void writeContentsSync(RandomAccessFile stream) {
+    name.writeContentsSync(stream);
+    stream.writeUint32(minor_version);
+    stream.writeUint32(header_addr);
+  }
+}
+
+/*
+ * A fixed virtual shared library (filetype == MH_FVMLIB in the mach header)
+ * contains a fvmlib_command (cmd == LC_IDFVMLIB) to identify the library.
+ * An object that uses a fixed virtual shared library also contains a
+ * fvmlib_command (cmd == LC_LOADFVMLIB) for each library it uses.
+ * (THIS IS OBSOLETE and no longer supported).
+ */
+class MachOFvmlibCommand extends IMachOLoadCommand<MachOFvmlibCommand> {
+  final MachOFvmlib fvmlib; /* the library identification */
+
+  MachOFvmlibCommand(
+    Uint32 cmdsize,
+    this.fvmlib,
+  ) : super(MachOConstants.LC_IDFVMLIB, cmdsize);
+
+  @override
+  MachOFvmlibCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    fvmlib.writeContentsSync(stream);
+  }
+}
+
+/*
+ * Dynamicly linked shared libraries are identified by two things.  The
+ * pathname (the name of the library as found for execution), and the
+ * compatibility version number.  The pathname must match and the compatibility
+ * number in the user of the library must be greater than or equal to the
+ * library being used.  The time stamp is used to record the time a library was
+ * built and copied into user so it can be use to determined if the library used
+ * at runtime is exactly the same as used to built the program.
+ */
+class MachODylib {
+  final MachOStr name; /* library's path name */
+  final Uint32 timestamp; /* library's build time stamp (uint32_t) */
+  final Uint32
+      current_version; /* library's current version number (uint32_t) */
+  final Uint32
+      compatibility_version; /* library's compatibility vers number(uint32_t) */
+
+  MachODylib(
+    this.name,
+    this.timestamp,
+    this.current_version,
+    this.compatibility_version,
+  );
+
+  void writeContentsSync(RandomAccessFile stream) {
+    name.writeContentsSync(stream);
+    stream.writeUint32(timestamp);
+    stream.writeUint32(current_version);
+    stream.writeUint32(compatibility_version);
+  }
+}
+
+/*
+ * A dynamically linked shared library (filetype == MH_DYLIB in the mach header)
+ * contains a dylib_command (cmd == LC_ID_DYLIB) to identify the library.
+ * An object that uses a dynamically linked shared library also contains a
+ * dylib_command (cmd == LC_LOAD_DYLIB, LC_LOAD_WEAK_DYLIB, or
+ * LC_REEXPORT_DYLIB) for each library it uses.
+ */
+class MachODylibCommand extends IMachOLoadCommand<MachODylibCommand> {
+  final MachODylib dylib; /* the library identification */
+
+  MachODylibCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    this.dylib,
+  ) : super(cmd, cmdsize) {
+    if (this.cmd != MachOConstants.LC_ID_DYLIB &&
+        this.cmd != MachOConstants.LC_LOAD_WEAK_DYLIB &&
+        this.cmd != MachOConstants.LC_REEXPORT_DYLIB) {
+      throw ArgumentError(
+          "cmd was not one of LC_ID_DYLIB (${MachOConstants.LC_ID_DYLIB}), "
+          "LC_LOAD_WEAK_DYLIB (${MachOConstants.LC_LOAD_WEAK_DYLIB}), "
+          "LC_REEXPORT_DYLIB (${MachOConstants.LC_REEXPORT_DYLIB}): $cmd");
+    }
+  }
+
+  @override
+  MachODylibCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    dylib.writeContentsSync(stream);
+  }
+}
+
+/*
+ * A dynamically linked shared library may be a subframework of an umbrella
+ * framework.  If so it will be linked with "-umbrella umbrella_name" where
+ * Where "umbrella_name" is the name of the umbrella framework. A subframework
+ * can only be linked against by its umbrella framework or other subframeworks
+ * that are part of the same umbrella framework.  Otherwise the static link
+ * editor produces an error and states to link against the umbrella framework.
+ * The name of the umbrella framework for subframeworks is recorded in the
+ * following structure.
+ */
+class MachOSubFrameworkCommand
+    extends IMachOLoadCommand<MachOSubFrameworkCommand> {
+  final MachOStr umbrella; /* the umbrella framework name */
+
+  MachOSubFrameworkCommand(
+    Uint32 cmdsize,
+    this.umbrella,
+  ) : super(MachOConstants.LC_SUB_FRAMEWORK, cmdsize);
+
+  @override
+  MachOSubFrameworkCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    umbrella.writeContentsSync(stream);
+  }
+}
+
+/*
+ * For dynamically linked shared libraries that are subframework of an umbrella
+ * framework they can allow clients other than the umbrella framework or other
+ * subframeworks in the same umbrella framework.  To do this the subframework
+ * is built with "-allowable_client client_name" and an LC_SUB_CLIENT load
+ * command is created for each -allowable_client flag.  The client_name is
+ * usually a framework name.  It can also be a name used for bundles clients
+ * where the bundle is built with "-client_name client_name".
+ */
+class MachOSubClientCommand extends IMachOLoadCommand<MachOSubClientCommand> {
+  final MachOStr client; /* the client name */
+
+  MachOSubClientCommand(
+    Uint32 cmdsize,
+    this.client,
+  ) : super(MachOConstants.LC_SUB_CLIENT, cmdsize);
+
+  @override
+  MachOSubClientCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    client.writeContentsSync(stream);
+  }
+}
+
+/*
+ * A dynamically linked shared library may be a sub_umbrella of an umbrella
+ * framework.  If so it will be linked with "-sub_umbrella umbrella_name" where
+ * Where "umbrella_name" is the name of the sub_umbrella framework.  When
+ * staticly linking when -twolevel_namespace is in effect a twolevel namespace
+ * umbrella framework will only cause its subframeworks and those frameworks
+ * listed as sub_umbrella frameworks to be implicited linked in.  Any other
+ * dependent dynamic libraries will not be linked it when -twolevel_namespace
+ * is in effect.  The primary library recorded by the static linker when
+ * resolving a symbol in these libraries will be the umbrella framework.
+ * Zero or more sub_umbrella frameworks may be use by an umbrella framework.
+ * The name of a sub_umbrella framework is recorded in the following structure.
+ */
+class MachOSubUmbrellaCommand
+    extends IMachOLoadCommand<MachOSubUmbrellaCommand> {
+  final MachOStr sub_umbrella; /* the sub_umbrella framework name */
+
+  MachOSubUmbrellaCommand(
+    Uint32 cmdsize,
+    this.sub_umbrella,
+  ) : super(
+          MachOConstants.LC_SUB_UMBRELLA,
+          cmdsize,
+        );
+
+  @override
+  MachOSubUmbrellaCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    sub_umbrella.writeContentsSync(stream);
+  }
+}
+
+/*
+ * A dynamically linked shared library may be a sub_library of another shared
+ * library.  If so it will be linked with "-sub_library library_name" where
+ * Where "library_name" is the name of the sub_library shared library.  When
+ * staticly linking when -twolevel_namespace is in effect a twolevel namespace
+ * shared library will only cause its subframeworks and those frameworks
+ * listed as sub_umbrella frameworks and libraries listed as sub_libraries to
+ * be implicited linked in.  Any other dependent dynamic libraries will not be
+ * linked it when -twolevel_namespace is in effect.  The primary library
+ * recorded by the static linker when resolving a symbol in these libraries
+ * will be the umbrella framework (or dynamic library). Zero or more sub_library
+ * shared libraries may be use by an umbrella framework or (or dynamic library).
+ * The name of a sub_library framework is recorded in the following structure.
+ * For example /usr/lib/libobjc_profile.A.dylib would be recorded as "libobjc".
+ */
+class MachOSubLibraryCommand extends IMachOLoadCommand<MachOSubLibraryCommand> {
+  final MachOStr sub_library; /* the sub_library name */
+
+  MachOSubLibraryCommand(
+    Uint32 cmdsize,
+    this.sub_library,
+  ) : super(
+          MachOConstants.LC_SUB_LIBRARY,
+          cmdsize,
+        );
+
+  @override
+  MachOSubLibraryCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    sub_library.writeContentsSync(stream);
+  }
+}
+
+/*
+ * A program (filetype == MH_EXECUTE) that is
+ * prebound to its dynamic libraries has one of these for each library that
+ * the static linker used in prebinding.  It contains a bit vector for the
+ * modules in the library.  The bits indicate which modules are bound (1) and
+ * which are not (0) from the library.  The bit for module 0 is the low bit
+ * of the first byte.  So the bit for the Nth module is:
+ * (linked_modules[N/8] >> N%8) & 1
+ */
+class MachOPreboundDylibCommand
+    extends IMachOLoadCommand<MachOPreboundDylibCommand> {
+  final MachOStr name; /* library's path name */
+  final Uint32 nmodules; /* number of modules in library (uint32_t) */
+  final MachOStr linked_modules; /* bit vector of linked modules */
+
+  MachOPreboundDylibCommand(
+    Uint32 cmdsize,
+    this.name,
+    this.nmodules,
+    this.linked_modules,
+  ) : super(
+          MachOConstants.LC_PREBOUND_DYLIB,
+          cmdsize,
+        );
+
+  @override
+  MachOPreboundDylibCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    name.writeContentsSync(stream);
+    stream.writeUint32(nmodules);
+    linked_modules.writeContentsSync(stream);
+  }
+}
+
+/*
+ * A program that uses a dynamic linker contains a dylinker_command to identify
+ * the name of the dynamic linker (LC_LOAD_DYLINKER).  And a dynamic linker
+ * contains a dylinker_command to identify the dynamic linker (LC_ID_DYLINKER).
+ * A file can have at most one of these.
+ * This struct is also used for the LC_DYLD_ENVIRONMENT load command and
+ * contains string for dyld to treat like environment variable.
+ */
+class MachODylinkerCommand extends IMachOLoadCommand<MachODylinkerCommand> {
+  final MachOStr name; /* dynamic linker's path name */
+
+  MachODylinkerCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    this.name,
+  ) : super(
+          cmd,
+          cmdsize,
+        ) {
+    if (this.cmd != MachOConstants.LC_ID_DYLINKER &&
+        this.cmd != MachOConstants.LC_LOAD_DYLINKER &&
+        this.cmd != MachOConstants.LC_DYLD_ENVIRONMENT) {
+      throw ArgumentError(
+          "cmd was not one of LC_ID_DYLINKER (${MachOConstants.LC_ID_DYLINKER}), "
+          "LC_LOAD_DYLINKER (${MachOConstants.LC_LOAD_DYLINKER}), "
+          "LC_DYLD_ENVIRONMENT (${MachOConstants.LC_DYLD_ENVIRONMENT}): $cmd");
+    }
+  }
+
+  @override
+  MachODylinkerCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    name.writeContentsSync(stream);
+  }
+}
+
+/*
+ * Thread commands contain machine-specific data structures suitable for
+ * use in the thread state primitives.  The machine specific data structures
+ * follow the struct thread_command as follows.
+ * Each flavor of machine specific data structure is preceded by an uint32_t
+ * constant for the flavor of that data structure, an uint32_t that is the
+ * count of uint32_t's of the size of the state data structure and then
+ * the state data structure follows.  This triple may be repeated for many
+ * flavors.  The constants for the flavors, counts and state data structure
+ * definitions are expected to be in the header file <machine/thread_status.h>.
+ * These machine specific data structures sizes must be multiples of
+ * 4 bytes.  The cmdsize reflects the total size of the thread_command
+ * and all of the sizes of the constants for the flavors, counts and state
+ * data structures.
+ *
+ * For executable objects that are unix processes there will be one
+ * thread_command (cmd == LC_UNIXTHREAD) created for it by the link-editor.
+ * This is the same as a LC_THREAD, except that a stack is automatically
+ * created (based on the shell's limit for the stack size).  Command arguments
+ * and environment variables are copied onto that stack.
+ */
+class MachOThreadCommand extends IMachOLoadCommand<MachOThreadCommand> {
+  /* final int flavor		   flavor of thread state (uint32_t) */
+  /* final int count		   count of longs in thread state (uint32_t) */
+  /* struct XXX_thread_state state   thread state for this flavor */
+  /* ... */
+
+  MachOThreadCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    /* final int flavor		   flavor of thread state (uint32_t) */
+    /* final int count		   count of longs in thread state (uint32_t) */
+    /* struct XXX_thread_state state   thread state for this flavor */
+    /* ... */
+  ) : super(
+          cmd,
+          cmdsize,
+        ) {
+    if (this.cmd != MachOConstants.LC_THREAD &&
+        this.cmd != MachOConstants.LC_UNIXTHREAD) {
+      throw ArgumentError(
+          "cmd was not one of LC_THREAD (${MachOConstants.LC_THREAD}), "
+          "LC_UNIXTHREAD (${MachOConstants.LC_UNIXTHREAD}): $cmd");
+    }
+  }
+
+  @override
+  MachOThreadCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {}
+}
+
+/*
+ * The routines command contains the address of the dynamic shared library
+ * initialization routine and an index into the module table for the module
+ * that defines the routine.  Before any modules are used from the library the
+ * dynamic linker fully binds the module that defines the initialization routine
+ * and then calls it.  This gets called before any module initialization
+ * routines (used for C++ static constructors) in the library.
+ */
+class MachORoutinesCommand extends IMachOLoadCommand<MachORoutinesCommand> {
+  final Uint32 init_address; /* address of initialization routine (uint32_t) */
+  final Uint32 init_module; /* index into the module table that (uint32_t) */
+  /*  the init routine is defined in */
+  final Uint32 reserved1; /* (uint32_t) */
+  final Uint32 reserved2; /* (uint32_t) */
+  final Uint32 reserved3; /* (uint32_t) */
+  final Uint32 reserved4; /* (uint32_t) */
+  final Uint32 reserved5; /* (uint32_t) */
+  final Uint32 reserved6; /* (uint32_t) */
+
+  MachORoutinesCommand(
+    Uint32 cmdsize,
+    this.init_address,
+    this.init_module,
+    this.reserved1,
+    this.reserved2,
+    this.reserved3,
+    this.reserved4,
+    this.reserved5,
+    this.reserved6,
+  ) : super(
+          MachOConstants.LC_ROUTINES,
+          cmdsize,
+        );
+
+  @override
+  MachORoutinesCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(init_address);
+    stream.writeUint32(init_module);
+    stream.writeUint32(reserved1);
+    stream.writeUint32(reserved2);
+    stream.writeUint32(reserved3);
+    stream.writeUint32(reserved4);
+    stream.writeUint32(reserved5);
+    stream.writeUint32(reserved6);
+  }
+}
+
+/*
+ * The 64-bit routines command.  Same use as above.
+ */
+class MachORoutinesCommand64 extends IMachOLoadCommand<MachORoutinesCommand64> {
+  final Uint64 init_address; /* address of initialization routine (uint64_t) */
+  final Uint64 init_module; /* index into the module table that (uint64_t) */
+  /*  the init routine is defined in */
+  final Uint64 reserved1; /* (uint64_t) */
+  final Uint64 reserved2; /* (uint64_t) */
+  final Uint64 reserved3; /* (uint64_t) */
+  final Uint64 reserved4; /* (uint64_t) */
+  final Uint64 reserved5; /* (uint64_t) */
+  final Uint64 reserved6; /* (uint64_t) */
+
+  MachORoutinesCommand64(
+    Uint32 cmdsize,
+    this.init_address,
+    this.init_module,
+    this.reserved1,
+    this.reserved2,
+    this.reserved3,
+    this.reserved4,
+    this.reserved5,
+    this.reserved6,
+  ) : super(
+          MachOConstants.LC_ROUTINES_64,
+          cmdsize,
+        );
+
+  @override
+  MachORoutinesCommand64 asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint64(init_address);
+    stream.writeUint64(init_module);
+    stream.writeUint64(reserved1);
+    stream.writeUint64(reserved2);
+    stream.writeUint64(reserved3);
+    stream.writeUint64(reserved4);
+    stream.writeUint64(reserved5);
+    stream.writeUint64(reserved6);
+  }
+}
+
+/*
+ * The symtab_command contains the offsets and sizes of the link-edit 4.3BSD
+ * "stab" style symbol table information as described in the header files
+ * <nlist.h> and <stab.h>.
+ */
+class MachOSymtabCommand extends IMachOLoadCommand<MachOSymtabCommand> {
+  final Uint32 symoff; /* symbol table offset (uint32_t) */
+  final Uint32 nsyms; /* number of symbol table entries (uint32_t) */
+  final Uint32 stroff; /* string table offset (uint32_t) */
+  final Uint32 strsize; /* string table size in bytes (uint32_t) */
+
+  MachOSymtabCommand(
+    Uint32 cmdsize,
+    this.symoff,
+    this.nsyms,
+    this.stroff,
+    this.strsize,
+  ) : super(
+          MachOConstants.LC_SYMTAB,
+          cmdsize,
+        );
+
+  @override
+  MachOSymtabCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(symoff);
+    stream.writeUint32(nsyms);
+    stream.writeUint32(stroff);
+    stream.writeUint32(strsize);
+  }
+}
+
+/*
+ * This is the second set of the symbolic information which is used to support
+ * the data structures for the dynamically link editor.
+ *
+ * The original set of symbolic information in the symtab_command which contains
+ * the symbol and string tables must also be present when this load command is
+ * present.  When this load command is present the symbol table is organized
+ * into three groups of symbols:
+ *	local symbols (static and debugging symbols) - grouped by module
+ *	defined external symbols - grouped by module (sorted by name if not lib)
+ *	undefined external symbols (sorted by name if MH_BINDATLOAD is not set,
+ *	     			    and in order the were seen by the static
+ *				    linker if MH_BINDATLOAD is set)
+ * In this load command there are offsets and counts to each of the three groups
+ * of symbols.
+ *
+ * This load command contains a the offsets and sizes of the following new
+ * symbolic information tables:
+ *	table of contents
+ *	module table
+ *	reference symbol table
+ *	indirect symbol table
+ * The first three tables above (the table of contents, module table and
+ * reference symbol table) are only present if the file is a dynamically linked
+ * shared library.  For executable and object modules, which are files
+ * containing only one module, the information that would be in these three
+ * tables is determined as follows:
+ * 	table of contents - the defined external symbols are sorted by name
+ *	module table - the file contains only one module so everything in the
+ *		       file is part of the module.
+ *	reference symbol table - is the defined and undefined external symbols
+ *
+ * For dynamically linked shared library files this load command also contains
+ * offsets and sizes to the pool of relocation entries for all sections
+ * separated into two groups:
+ *	external relocation entries
+ *	local relocation entries
+ * For executable and object modules the relocation entries continue to hang
+ * off the section structures.
+ */
+class MachODysymtabCommand extends IMachOLoadCommand<MachODysymtabCommand> {
+  /*
+     * The symbols indicated by symoff and nsyms of the LC_SYMTAB load command
+     * are grouped into the following three groups:
+     *    local symbols (further grouped by the module they are from)
+     *    defined external symbols (further grouped by the module they are from)
+     *    undefined symbols
+     *
+     * The local symbols are used only for debugging.  The dynamic binding
+     * process may have to use them to indicate to the debugger the local
+     * symbols for a module that is being bound.
+     *
+     * The last two groups are used by the dynamic binding process to do the
+     * binding (indirectly through the module table and the reference symbol
+     * table when this is a dynamically linked shared library file).
+     */
+  final Uint32 ilocalsym; /* index to local symbols (uint32_t) */
+  final Uint32 nlocalsym; /* number of local symbols (uint32_t) */
+
+  final Uint32 iextdefsym; /* index to externally defined symbols (uint32_t) */
+  final Uint32 nextdefsym; /* number of externally defined symbols (uint32_t) */
+
+  final Uint32 iundefsym; /* index to undefined symbols (uint32_t) */
+  final Uint32 nundefsym; /* number of undefined symbols (uint32_t) */
+
+  /*
+     * For the for the dynamic binding process to find which module a symbol
+     * is defined in the table of contents is used (analogous to the ranlib
+     * structure in an archive) which maps defined external symbols to modules
+     * they are defined in.  This exists only in a dynamically linked shared
+     * library file.  For executable and object modules the defined external
+     * symbols are sorted by name and is use as the table of contents.
+     */
+  final Uint32 tocoff; /* file offset to table of contents (uint32_t) */
+  final Uint32 ntoc; /* number of entries in table of contents (uint32_t) */
+
+  /*
+     * To support dynamic binding of "modules" (whole object files) the symbol
+     * table must reflect the modules that the file was created from.  This is
+     * done by having a module table that has indexes and counts into the merged
+     * tables for each module.  The module structure that these two entries
+     * refer to is described below.  This exists only in a dynamically linked
+     * shared library file.  For executable and object modules the file only
+     * contains one module so everything in the file belongs to the module.
+     */
+  final Uint32 modtaboff; /* file offset to module table (uint32_t) */
+  final Uint32 nmodtab; /* number of module table entries (uint32_t) */
+
+  /*
+     * To support dynamic module binding the module structure for each module
+     * indicates the external references (defined and undefined) each module
+     * makes.  For each module there is an offset and a count into the
+     * reference symbol table for the symbols that the module references.
+     * This exists only in a dynamically linked shared library file.  For
+     * executable and object modules the defined external symbols and the
+     * undefined external symbols indicates the external references.
+     */
+  final Uint32 extrefsymoff; /* offset to referenced symbol table (uint32_t) */
+  final Uint32
+      nextrefsyms; /* number of referenced symbol table entries (uint32_t) */
+
+  /*
+     * The sections that contain "symbol pointers" and "routine stubs" have
+     * indexes and (implied counts based on the size of the section and fixed
+     * size of the entry) into the "indirect symbol" table for each pointer
+     * and stub.  For every section of these two types the index into the
+     * indirect symbol table is stored in the section header in the field
+     * reserved1.  An indirect symbol table entry is simply a 32bit index into
+     * the symbol table to the symbol that the pointer or stub is referring to.
+     * The indirect symbol table is ordered to match the entries in the section.
+     */
+  final Uint32
+      indirectsymoff; /* file offset to the indirect symbol table (uint32_t) */
+  final Uint32
+      nindirectsyms; /* number of indirect symbol table entries (uint32_t) */
+
+  /*
+     * To support relocating an individual module in a library file quickly the
+     * external relocation entries for each module in the library need to be
+     * accessed efficiently.  Since the relocation entries can't be accessed
+     * through the section headers for a library file they are separated into
+     * groups of local and external entries further grouped by module.  In this
+     * case the presents of this load command who's extreloff, nextrel,
+     * locreloff and nlocrel fields are non-zero indicates that the relocation
+     * entries of non-merged sections are not referenced through the section
+     * structures (and the reloff and nreloc fields in the section headers are
+     * set to zero).
+     *
+     * Since the relocation entries are not accessed through the section headers
+     * this requires the r_address field to be something other than a section
+     * offset to identify the item to be relocated.  In this case r_address is
+     * set to the offset from the vmaddr of the first LC_SEGMENT command.
+     * For MH_SPLIT_SEGS images r_address is set to the the offset from the
+     * vmaddr of the first read-write LC_SEGMENT command.
+     *
+     * The relocation entries are grouped by module and the module table
+     * entries have indexes and counts into them for the group of external
+     * relocation entries for that the module.
+     *
+     * For sections that are merged across modules there must not be any
+     * remaining external relocation entries for them (for merged sections
+     * remaining relocation entries must be local).
+     */
+  final Uint32 extreloff; /* offset to external relocation entries (uint32_t) */
+  final Uint32 nextrel; /* number of external relocation entries (uint32_t) */
+
+  /*
+     * All the local relocation entries are grouped together (they are not
+     * grouped by their module since they are only used if the object is moved
+     * from it staticly link edited address).
+     */
+  final Uint32 locreloff; /* offset to local relocation entries (uint32_t) */
+  final Uint32 nlocrel; /* number of local relocation entries (uint32_t) */
+
+  MachODysymtabCommand(
+    Uint32 cmdsize,
+    this.ilocalsym,
+    this.nlocalsym,
+    this.iextdefsym,
+    this.nextdefsym,
+    this.iundefsym,
+    this.nundefsym,
+    this.tocoff,
+    this.ntoc,
+    this.modtaboff,
+    this.nmodtab,
+    this.extrefsymoff,
+    this.nextrefsyms,
+    this.indirectsymoff,
+    this.nindirectsyms,
+    this.extreloff,
+    this.nextrel,
+    this.locreloff,
+    this.nlocrel,
+  ) : super(
+          MachOConstants.LC_DYSYMTAB,
+          cmdsize,
+        );
+
+  @override
+  MachODysymtabCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(ilocalsym);
+    stream.writeUint32(nlocalsym);
+    stream.writeUint32(iextdefsym);
+    stream.writeUint32(nextdefsym);
+    stream.writeUint32(iundefsym);
+    stream.writeUint32(nundefsym);
+    stream.writeUint32(tocoff);
+    stream.writeUint32(ntoc);
+    stream.writeUint32(modtaboff);
+    stream.writeUint32(nmodtab);
+    stream.writeUint32(extrefsymoff);
+    stream.writeUint32(nextrefsyms);
+    stream.writeUint32(indirectsymoff);
+    stream.writeUint32(nindirectsyms);
+    stream.writeUint32(extreloff);
+    stream.writeUint32(nextrel);
+    stream.writeUint32(locreloff);
+    stream.writeUint32(nlocrel);
+  }
+}
+
+/* a table of contents entry */
+class MachODylibTableOfContents {
+  final Uint32
+      symbol_index; /* the defined external symb(uint32_t) ol
+				   (index into the symbol table) */
+  final Uint32
+      module_index; /* index into the module table this symb(uint32_t) ol
+				   is defined in */
+
+  MachODylibTableOfContents(
+    this.symbol_index,
+    this.module_index,
+  );
+}
+
+/* a module table entry */
+class MachODylibModule {
+  final Uint32
+      module_name; /* the module name (index into string table) (uint32_t) */
+
+  final Uint32
+      iextdefsym; /* index into externally defined symbols (uint32_t) */
+  final Uint32 nextdefsym; /* number of externally defined symbols (uint32_t) */
+  final Uint32 irefsym; /* index into reference symbol table (uint32_t) */
+  final Uint32
+      nrefsym; /* number of reference symbol table entries (uint32_t) */
+  final Uint32 ilocalsym; /* index into symbols for local symbols (uint32_t) */
+  final Uint32 nlocalsym; /* number of local symbols (uint32_t) */
+
+  final Uint32 iextrel; /* index into external relocation entries (uint32_t) */
+  final Uint32 nextrel; /* number of external relocation entries (uint32_t) */
+
+  final Uint32
+      iinit_iterm; /* low 16 bits are the index into the in(uint32_t) it
+				   section, high 16 bits are the index into
+			           the term section */
+  final Uint32
+      ninit_nterm; /* low 16 bits are the number of init secti(uint32_t) on
+				   entries, high 16 bits are the number of
+				   term section entries */
+
+  final Uint32 /* for this module address of the start of (uint32_t) */
+      objc_module_info_addr; /*  the (__OBJC,__module_info) section */
+  final Uint32 /* for this module size of (uint32_t) */
+      objc_module_info_size; /*  the (__OBJC,__module_info) section */
+
+  MachODylibModule(
+    this.module_name,
+    this.iextdefsym,
+    this.nextdefsym,
+    this.irefsym,
+    this.nrefsym,
+    this.ilocalsym,
+    this.nlocalsym,
+    this.iextrel,
+    this.nextrel,
+    this.iinit_iterm,
+    this.ninit_nterm,
+    this.objc_module_info_addr,
+    this.objc_module_info_size,
+  );
+}
+
+/* a 64-bit module table entry */
+class MachODylibModule64 {
+  final Uint32
+      module_name; /* the module name (index into string table) (uint32_t) */
+
+  final Uint32
+      iextdefsym; /* index into externally defined symbols (uint32_t) */
+  final Uint32 nextdefsym; /* number of externally defined symbols (uint32_t) */
+  final Uint32 irefsym; /* index into reference symbol table (uint32_t) */
+  final Uint32
+      nrefsym; /* number of reference symbol table entries (uint32_t) */
+  final Uint32 ilocalsym; /* index into symbols for local symbols (uint32_t) */
+  final Uint32 nlocalsym; /* number of local symbols (uint32_t) */
+
+  final Uint32 iextrel; /* index into external relocation entries (uint32_t) */
+  final Uint32 nextrel; /* number of external relocation entries (uint32_t) */
+
+  final Uint32
+      iinit_iterm; /* low 16 bits are the index into the in(uint32_t) it
+				   section, high 16 bits are the index into
+				   the term section */
+  final Uint32
+      ninit_nterm; /* low 16 bits are the number of init secti(uint32_t) on
+				  entries, high 16 bits are the number of
+				  term section entries */
+
+  final Uint32 /* for this module size of (uint32_t) */
+      objc_module_info_size; /*  the (__OBJC,__module_info) section */
+  final Uint64 /* for this module address of the start of (uint64_t) */
+      objc_module_info_addr; /*  the (__OBJC,__module_info) section */
+
+  MachODylibModule64(
+    this.module_name,
+    this.iextdefsym,
+    this.nextdefsym,
+    this.irefsym,
+    this.nrefsym,
+    this.ilocalsym,
+    this.nlocalsym,
+    this.iextrel,
+    this.nextrel,
+    this.iinit_iterm,
+    this.ninit_nterm,
+    this.objc_module_info_size,
+    this.objc_module_info_addr,
+  );
+}
+
+/*
+ * The entries in the reference symbol table are used when loading the module
+ * (both by the static and dynamic link editors) and if the module is unloaded
+ * or replaced.  Therefore all external symbols (defined and undefined) are
+ * listed in the module's reference table.  The flags describe the type of
+ * reference that is being made.  The constants for the flags are defined in
+ * <mach-o/nlist.h> as they are also used for symbol table entries.
+ */
+class MachODylibReference {
+  final Uint32 isym; //:24,		/* index into the symbol table (uint32_t) */
+  final Uint32 flags; //:8;	/* flags to indicate the type of reference */
+
+  MachODylibReference(Uint32 value)
+      : isym = value & Uint32(0xffffff),
+        flags = value >> Uint32(24);
+}
+
+/*
+ * The twolevel_hints_command contains the offset and number of hints in the
+ * two-level namespace lookup hints table.
+ */
+class MachOTwolevelHintsCommand
+    extends IMachOLoadCommand<MachOTwolevelHintsCommand> {
+  final Uint32 offset; /* offset to the hint table (uint32_t) */
+  final Uint32 nhints; /* number of hints in the hint table (uint32_t) */
+
+  MachOTwolevelHintsCommand(
+    Uint32 cmdsize,
+    this.offset,
+    this.nhints,
+  ) : super(
+          MachOConstants.LC_TWOLEVEL_HINTS,
+          cmdsize,
+        );
+
+  @override
+  MachOTwolevelHintsCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(offset);
+    stream.writeUint32(nhints);
+  }
+}
+
+/*
+ * The entries in the two-level namespace lookup hints table are twolevel_hint
+ * structs.  These provide hints to the dynamic link editor where to start
+ * looking for an undefined symbol in a two-level namespace image.  The
+ * isub_image field is an index into the sub-images (sub-frameworks and
+ * sub-umbrellas list) that made up the two-level image that the undefined
+ * symbol was found in when it was built by the static link editor.  If
+ * isub-image is 0 the the symbol is expected to be defined in library and not
+ * in the sub-images.  If isub-image is non-zero it is an index into the array
+ * of sub-images for the umbrella with the first index in the sub-images being
+ * 1. The array of sub-images is the ordered list of sub-images of the umbrella
+ * that would be searched for a symbol that has the umbrella recorded as its
+ * primary library.  The table of contents index is an index into the
+ * library's table of contents.  This is used as the starting point of the
+ * binary search or a directed linear search.
+ */
+class MachOTwolevelHint {
+  final int isub_image; //:8,	/* index into the sub images */
+  final int itoc; //:24;	/* index into the table of contents */
+
+  MachOTwolevelHint(int value)
+      : isub_image = value & 0xff,
+        itoc = value >> 8;
+}
+
+/*
+ * The prebind_cksum_command contains the value of the original check sum for
+ * prebound files or zero.  When a prebound file is first created or modified
+ * for other than updating its prebinding information the value of the check sum
+ * is set to zero.  When the file has it prebinding re-done and if the value of
+ * the check sum is zero the original check sum is calculated and stored in
+ * cksum field of this load command in the output file.  If when the prebinding
+ * is re-done and the cksum field is non-zero it is left unchanged from the
+ * input file.
+ */
+class MachOPrebindCksumCommand
+    extends IMachOLoadCommand<MachOPrebindCksumCommand> {
+  final Uint32 cksum; /* the check sum or zero (uint32_t) */
+
+  MachOPrebindCksumCommand(
+    Uint32 cmdsize,
+    this.cksum,
+  ) : super(
+          MachOConstants.LC_PREBIND_CKSUM,
+          cmdsize,
+        );
+
+  @override
+  MachOPrebindCksumCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(cksum);
+  }
+}
+
+/*
+ * The uuid load command contains a single 128-bit unique random number that
+ * identifies an object produced by the static link editor.
+ */
+class MachOUuidCommand extends IMachOLoadCommand<MachOUuidCommand> {
+  final Uint8List uuid; //[16];	/* the 128-bit uuid */
+
+  MachOUuidCommand(
+    Uint32 cmdsize,
+    this.uuid,
+  ) : super(
+          MachOConstants.LC_UUID,
+          cmdsize,
+        );
+
+  @override
+  MachOUuidCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeFromSync(uuid);
+  }
+}
+
+/*
+ * The rpath_command contains a path which at runtime should be added to
+ * the current run path used to find @rpath prefixed dylibs.
+ */
+class MachORpathCommand extends IMachOLoadCommand<MachORpathCommand> {
+  final MachOStr path; /* path to add to run path */
+
+  MachORpathCommand(
+    Uint32 cmdsize,
+    this.path,
+  ) : super(
+          MachOConstants.LC_RPATH,
+          cmdsize,
+        );
+
+  @override
+  MachORpathCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    path.writeContentsSync(stream);
+  }
+}
+
+/*
+ * The linkedit_data_command contains the offsets and sizes of a blob
+ * of data in the __LINKEDIT segment.
+ */
+class MachOLinkeditDataCommand
+    extends IMachOLoadCommand<MachOLinkeditDataCommand> {
+  final Uint32
+      dataoff; /* file offset of data in __LINKEDIT segment (uint32_t) */
+  final Uint32
+      datasize; /* file size of data in __LINKEDIT segment  (uint32_t) */
+
+  MachOLinkeditDataCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    this.dataoff,
+    this.datasize,
+  ) : super(cmd, cmdsize) {
+    if (this.cmd != MachOConstants.LC_CODE_SIGNATURE &&
+        this.cmd != MachOConstants.LC_SEGMENT_SPLIT_INFO &&
+        this.cmd != MachOConstants.LC_FUNCTION_STARTS &&
+        this.cmd != MachOConstants.LC_DATA_IN_CODE &&
+        this.cmd != MachOConstants.LC_DYLIB_CODE_SIGN_DRS) {
+      throw ArgumentError("cmd was not one of LC_CODE_SIGNATURE "
+          "(${MachOConstants.LC_CODE_SIGNATURE}), LC_SEGMENT_SPLIT_INFO "
+          "(${MachOConstants.LC_SEGMENT_SPLIT_INFO}), LC_FUNCTION_STARTS "
+          "(${MachOConstants.LC_FUNCTION_STARTS}), LC_DATA_IN_CODE "
+          "(${MachOConstants.LC_DATA_IN_CODE}), LC_DYLIB_CODE_SIGN_DRS "
+          "(${MachOConstants.LC_DYLIB_CODE_SIGN_DRS}): $cmd");
+    }
+  }
+
+  @override
+  MachOLinkeditDataCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(dataoff);
+    stream.writeUint32(datasize);
+  }
+}
+
+/*
+ * The encryption_info_command contains the file offset and size of an
+ * of an encrypted segment.
+ */
+class MachOEncryptionInfoCommand
+    extends IMachOLoadCommand<MachOEncryptionInfoCommand> {
+  final Uint32 cryptoff; /* file offset of encrypted range (uint32_t) */
+  final Uint32 cryptsize; /* file size of encrypted range (uint32_t) */
+  final Uint32
+      cryptid; /* which enryption syste(uint32_t) m,
+				   0 means not-encrypted yet */
+
+  MachOEncryptionInfoCommand(
+    Uint32 cmdsize,
+    this.cryptoff,
+    this.cryptsize,
+    this.cryptid,
+  ) : super(
+          MachOConstants.LC_ENCRYPTION_INFO,
+          cmdsize,
+        );
+
+  @override
+  MachOEncryptionInfoCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(cryptoff);
+    stream.writeUint32(cryptsize);
+    stream.writeUint32(cryptid);
+  }
+}
+
+/*
+ * The version_min_command contains the min OS version on which this
+ * binary was built to run.
+ */
+class MachOVersionMinCommand extends IMachOLoadCommand<MachOVersionMinCommand> {
+  final Uint32 version; /* X.Y.Z is encoded in nibbles xxxx.yy.zz (uint32_t) */
+  final Uint32 sdk; /* X.Y.Z is encoded in nibbles xxxx.yy.zz (uint32_t) */
+
+  MachOVersionMinCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    this.version,
+    this.sdk,
+  ) : super(cmd, cmdsize) {
+    if (this.cmd != MachOConstants.LC_VERSION_MIN_MACOSX &&
+        this.cmd != MachOConstants.LC_VERSION_MIN_IPHONEOS) {
+      throw ArgumentError("cmd was not one of: LC_VERSION_MIN_MACOSX "
+          "(${MachOConstants.LC_VERSION_MIN_MACOSX}), LC_VERSION_MIN_IPHONEOS "
+          "(${MachOConstants.LC_VERSION_MIN_IPHONEOS}): $cmd");
+    }
+  }
+
+  @override
+  MachOVersionMinCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(version);
+    stream.writeUint32(sdk);
+  }
+}
+
+/*
+ * The dyld_info_command contains the file offsets and sizes of
+ * the new compressed form of the information dyld needs to
+ * load the image.  This information is used by dyld on Mac OS X
+ * 10.6 and later.  All information pointed to by this command
+ * is encoded using byte streams, so no endian swapping is needed
+ * to interpret it.
+ */
+class MachODyldInfoCommand extends IMachOLoadCommand<MachODyldInfoCommand> {
+  /*
+     * Dyld rebases an image whenever dyld loads it at an address different
+     * from its preferred address.  The rebase information is a stream
+     * of byte sized opcodes whose symbolic names start with REBASE_OPCODE_.
+     * Conceptually the rebase information is a table of tuples:
+     *    <seg-index, seg-offset, type>
+     * The opcodes are a compressed way to encode the table by only
+     * encoding when a column changes.  In addition simple patterns
+     * like "every n'th offset for m times" can be encoded in a few
+     * bytes.
+     */
+  final Uint32 rebase_off; /* file offset to rebase info  (uint32_t) */
+  final Uint32 rebase_size; /* size of rebase info   (uint32_t) */
+
+  /*
+  * Dyld binds an image during the loading process, if the image
+  * requires any pointers to be initialized to symbols in other images.
+  * The bind information is a stream of byte sized
+  * opcodes whose symbolic names start with BIND_OPCODE_.
+  * Conceptually the bind information is a table of tuples:
+  *   <seg-index, seg-offset, type, symbol-library-ordinal, symbol-name, addend>
+  * The opcodes are a compressed way to encode the table by only
+  * encoding when a column changes.  In addition simple patterns
+  * like for runs of pointers initialzed to the same value can be
+  * encoded in a few bytes.
+  */
+  final Uint32 bind_off; /* file offset to binding info   (uint32_t) */
+  final Uint32 bind_size; /* size of binding info  (uint32_t) */
+
+  /*
+     * Some C++ programs require dyld to unique symbols so that all
+     * images in the process use the same copy of some code/data.
+     * This step is done after binding. The content of the weak_bind
+     * info is an opcode stream like the bind_info.  But it is sorted
+     * alphabetically by symbol name.  This enable dyld to walk
+     * all images with weak binding information in order and look
+     * for collisions.  If there are no collisions, dyld does
+     * no updating.  That means that some fixups are also encoded
+     * in the bind_info.  For instance, all calls to "operator new"
+     * are first bound to libstdc++.dylib using the information
+     * in bind_info.  Then if some image overrides operator new
+     * that is detected when the weak_bind information is processed
+     * and the call to operator new is then rebound.
+     */
+  final Uint32
+      weak_bind_off; /* file offset to weak binding info   (uint32_t) */
+  final Uint32 weak_bind_size; /* size of weak binding info  (uint32_t) */
+
+  /*
+     * Some uses of external symbols do not need to be bound immediately.
+     * Instead they can be lazily bound on first use.  The lazy_bind
+     * are contains a stream of BIND opcodes to bind all lazy symbols.
+     * Normal use is that dyld ignores the lazy_bind section when
+     * loading an image.  Instead the static linker arranged for the
+     * lazy pointer to initially point to a helper function which
+     * pushes the offset into the lazy_bind area for the symbol
+     * needing to be bound, then jumps to dyld which simply adds
+     * the offset to lazy_bind_off to get the information on what
+     * to bind.
+     */
+  final Uint32 lazy_bind_off; /* file offset to lazy binding info (uint32_t) */
+  final Uint32 lazy_bind_size; /* size of lazy binding infs (uint32_t) */
+
+  /*
+     * The symbols exported by a dylib are encoded in a trie.  This
+     * is a compact representation that factors out common prefixes.
+     * It also reduces LINKEDIT pages in RAM because it encodes all
+     * information (name, address, flags) in one small, contiguous range.
+     * The export area is a stream of nodes.  The first node sequentially
+     * is the start node for the trie.
+     *
+     * Nodes for a symbol start with a uleb128 that is the length of
+     * the exported symbol information for the string so far.
+     * If there is no exported symbol, the node starts with a zero byte.
+     * If there is exported info, it follows the length.
+	 *
+	 * First is a uleb128 containing flags. Normally, it is followed by
+     * a uleb128 encoded offset which is location of the content named
+     * by the symbol from the mach_header for the image.  If the flags
+     * is EXPORT_SYMBOL_FLAGS_REEXPORT, then following the flags is
+     * a uleb128 encoded library ordinal, then a zero terminated
+     * UTF8 string.  If the string is zero length, then the symbol
+     * is re-export from the specified dylib with the same name.
+	 * If the flags is EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER, then following
+	 * the flags is two uleb128s: the stub offset and the resolver offset.
+	 * The stub is used by non-lazy pointers.  The resolver is used
+	 * by lazy pointers and must be called to get the actual address to use.
+     *
+     * After the optional exported symbol information is a byte of
+     * how many edges (0-255) that this node has leaving it,
+     * followed by each edge.
+     * Each edge is a zero terminated UTF8 of the addition chars
+     * in the symbol, followed by a uleb128 offset for the node that
+     * edge points to.
+     *
+     */
+  final Uint32 export_off; /* file offset to lazy binding info (uint32_t) */
+  final Uint32 export_size; /* size of lazy binding infs (uint32_t) */
+
+  MachODyldInfoCommand(
+    Uint32 cmd,
+    Uint32 cmdsize,
+    this.rebase_off,
+    this.rebase_size,
+    this.bind_off,
+    this.bind_size,
+    this.weak_bind_off,
+    this.weak_bind_size,
+    this.lazy_bind_off,
+    this.lazy_bind_size,
+    this.export_off,
+    this.export_size,
+  ) : super(
+          cmd,
+          cmdsize,
+        ) {
+    if (this.cmd != MachOConstants.LC_DYLD_INFO &&
+        this.cmd != MachOConstants.LC_DYLD_INFO_ONLY) {
+      throw ArgumentError(
+          "cmd was not one of LC_DYLD_INFO (${MachOConstants.LC_DYLD_INFO}), "
+          "LC_DYLD_INFO_ONLY (${MachOConstants.LC_DYLD_INFO_ONLY}): $cmd");
+    }
+  }
+
+  @override
+  MachODyldInfoCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(rebase_off);
+    stream.writeUint32(rebase_size);
+    stream.writeUint32(bind_off);
+    stream.writeUint32(bind_size);
+    stream.writeUint32(weak_bind_off);
+    stream.writeUint32(weak_bind_size);
+    stream.writeUint32(lazy_bind_off);
+    stream.writeUint32(lazy_bind_size);
+    stream.writeUint32(export_off);
+    stream.writeUint32(export_size);
+  }
+}
+
+/*
+ * The symseg_command contains the offset and size of the GNU style
+ * symbol table information as described in the header file <symseg.h>.
+ * The symbol roots of the symbol segments must also be aligned properly
+ * in the file.  So the requirement of keeping the offsets aligned to a
+ * multiple of a 4 bytes translates to the length field of the symbol
+ * roots also being a multiple of a long.  Also the padding must again be
+ * zeroed. (THIS IS OBSOLETE and no longer supported).
+ */
+class MachOSymsegCommand extends IMachOLoadCommand<MachOSymsegCommand> {
+  final Uint32 offset; /* symbol segment offset (uint32_t) */
+  final Uint32 size; /* symbol segment size in bytes (uint32_t) */
+
+  MachOSymsegCommand(
+    Uint32 cmdsize,
+    this.offset,
+    this.size,
+  ) : super(
+          MachOConstants.LC_SYMSEG,
+          cmdsize,
+        );
+
+  @override
+  MachOSymsegCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint32(offset);
+    stream.writeUint32(size);
+  }
+}
+
+/*
+ * The ident_command contains a free format string table following the
+ * ident_command structure.  The strings are null terminated and the size of
+ * the command is padded out with zero bytes to a multiple of 4 bytes/
+ * (THIS IS OBSOLETE and no longer supported).
+ */
+class MachOIdentCommand extends IMachOLoadCommand<MachOIdentCommand> {
+  MachOIdentCommand(
+    Uint32 cmdsize,
+  ) : super(
+          MachOConstants.LC_IDENT,
+          cmdsize,
+        );
+
+  @override
+  MachOIdentCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {}
+}
+
+/*
+ * The fvmfile_command contains a reference to a file to be loaded at the
+ * specified virtual address.  (Presently, this command is reserved for
+ * internal use.  The kernel ignores this command when loading a program into
+ * memory).
+ */
+class MachOFvmfileCommand extends IMachOLoadCommand<MachOFvmfileCommand> {
+  final MachOStr name; /* files pathname */
+  final Uint32 header_addr; /* files virtual address (uint32_t) */
+
+  MachOFvmfileCommand(
+    Uint32 cmdsize,
+    this.name,
+    this.header_addr,
+  ) : super(
+          MachOConstants.LC_FVMFILE,
+          cmdsize,
+        );
+
+  @override
+  MachOFvmfileCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    name.writeContentsSync(stream);
+    stream.writeUint32(header_addr);
+  }
+}
+
+/*
+ * The entry_point_command is a replacement for thread_command.
+ * It is used for main executables to specify the location (file offset)
+ * of main().  If -stack_size was used at link time, the stacksize
+ * field will contain the stack size need for the main thread.
+ */
+class MachOEntryPointCommand extends IMachOLoadCommand<MachOEntryPointCommand> {
+  final Uint64 entryoff; /* file (__TEXT) offset of main (uint64_t)() */
+  final Uint64 stacksize; /* if not zero, initial stack size (uint64_t) */
+
+  MachOEntryPointCommand(
+    Uint32 cmdsize,
+    this.entryoff,
+    this.stacksize,
+  ) : super(
+          MachOConstants.LC_MAIN,
+          cmdsize,
+        );
+
+  @override
+  MachOEntryPointCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint64(entryoff);
+    stream.writeUint64(stacksize);
+  }
+}
+
+/*
+ * The source_version_command is an optional load command containing
+ * the version of the sources used to build the binary.
+ */
+class MachOSourceVersionCommand
+    extends IMachOLoadCommand<MachOSourceVersionCommand> {
+  final Uint64 version; /* A.B.C.D.E packed as a24.b10.c10.d10.e10 (uint64_t) */
+
+  MachOSourceVersionCommand(
+    Uint32 cmdsize,
+    this.version,
+  ) : super(
+          MachOConstants.LC_SOURCE_VERSION,
+          cmdsize,
+        );
+
+  @override
+  MachOSourceVersionCommand asType() => this;
+
+  @override
+  void writeContentsSync(RandomAccessFile stream) {
+    stream.writeUint64(version);
+  }
+}
+
+/*
+ * The LC_DATA_IN_CODE load commands uses a linkedit_data_command
+ * to point to an array of data_in_code_entry entries. Each entry
+ * describes a range of data in a code section.  This load command
+ * is only used in final linked images.
+ */
+class MachODataInCodeEntry {
+  final Uint32 offset; /* from mach_header to start of data range(uint32_t) */
+  final Uint16 length; /* number of bytes in data range (uint16_t) */
+  final Uint16 kind; /* a DICE_KIND_* value  (uint16_t) */
+
+  MachODataInCodeEntry(
+    this.offset,
+    this.length,
+    this.kind,
+  );
+}
+
+/*
+ * Sections of type S_THREAD_LOCAL_VARIABLES contain an array
+ * of tlv_descriptor structures.
+ */
+// class MachOTlvDescriptor {
+// 	void*		(*thunk)(struct tlv_descriptor*);
+// 	unsigned long	key;
+// 	unsigned long	offset;
+
+// 	MachOTlvDescriptor(
+//     void*		(*thunk)(struct tlv_descriptor*);
+// 	unsigned long	key;
+// 	unsigned long	offset;
+// );
+
+// }
+
+class MachOConstants {
+  /* Constant for the magic field of the mach_header (32-bit architectures) */
+  static const Uint32 MH_MAGIC = Uint32(0xfeedface); /* the mach magic number */
+  static const Uint32 MH_CIGAM = Uint32(0xcefaedfe); /* NXSwapInt(MH_MAGIC) */
+
+  /* Constant for the magic field of the mach_header_64 (64-bit architectures) */
+  static const Uint32 MH_MAGIC_64 =
+      Uint32(0xfeedfacf); /* the 64-bit mach magic number */
+  static const Uint32 MH_CIGAM_64 =
+      Uint32(0xcffaedfe); /* NXSwapInt(MH_MAGIC_64) */
+
+  /*
+  * After MacOS X 10.1 when a new load command is added that is required to be
+  * understood by the dynamic linker for the image to execute properly the
+  * LC_REQ_DYLD bit will be or'ed into the load command constant. If the dynamic
+  * linker sees such a load command it it does not understand will issue a
+  * "unknown load command required for execution" error and refuse to use the
+  * image.  Other load commands without this bit that are not understood will
+  * simply be ignored.
+  */
+  static const Uint32 LC_REQ_DYLD = Uint32(0x80000000);
+  // This one is a convenience so we can define other constants in this class as
+  // actual const.
+  static const int _LC_REQ_DYLD = 0x80000000;
+
+  /*; Constants for the cmd field of all load commands, the type */
+  static const Uint32 LC_SEGMENT =
+      Uint32(0x1); /* segment of this file to be mapped */
+  static const Uint32 LC_SYMTAB =
+      Uint32(0x2); /* link-edit stab symbol table info */
+  static const Uint32 LC_SYMSEG =
+      Uint32(0x3); /* link-edit gdb symbol table info (obsolete) */
+  static const Uint32 LC_THREAD = Uint32(0x4); /* thread */
+  static const Uint32 LC_UNIXTHREAD =
+      Uint32(0x5); /* unix thread (includes a stack) */
+  static const Uint32 LC_LOADFVMLIB =
+      Uint32(0x6); /* load a specified fixed VM shared library */
+  static const Uint32 LC_IDFVMLIB =
+      Uint32(0x7); /* fixed VM shared library identification */
+  static const Uint32 LC_IDENT =
+      Uint32(0x8); /* object identification info (obsolete) */
+  static const Uint32 LC_FVMFILE =
+      Uint32(0x9); /* fixed VM file inclusion (internal use) */
+  static const Uint32 LC_PREPAGE =
+      Uint32(0xa); /* prepage command (internal use) */
+  static const Uint32 LC_DYSYMTAB =
+      Uint32(0xb); /* dynamic link-edit symbol table info */
+  static const Uint32 LC_LOAD_DYLIB =
+      Uint32(0xc); /* load a dynamically linked shared library */
+  static const Uint32 LC_ID_DYLIB =
+      Uint32(0xd); /* dynamically linked shared lib ident */
+  static const Uint32 LC_LOAD_DYLINKER =
+      Uint32(0xe); /* load a dynamic linker */
+  static const Uint32 LC_ID_DYLINKER =
+      Uint32(0xf); /* dynamic linker identification */
+  static const Uint32 LC_PREBOUND_DYLIB =
+      Uint32(0x10); /* modules prebound for a dynamically */
+  /*  linked shared library */
+  static const Uint32 LC_ROUTINES = Uint32(0x11); /* image routines */
+  static const Uint32 LC_SUB_FRAMEWORK = Uint32(0x12); /* sub framework */
+  static const Uint32 LC_SUB_UMBRELLA = Uint32(0x13); /* sub umbrella */
+  static const Uint32 LC_SUB_CLIENT = Uint32(0x14); /* sub client */
+  static const Uint32 LC_SUB_LIBRARY = Uint32(0x15); /* sub library */
+  static const Uint32 LC_TWOLEVEL_HINTS =
+      Uint32(0x16); /* two-level namespace lookup hints */
+  static const Uint32 LC_PREBIND_CKSUM = Uint32(0x17); /* prebind checksum */
+
+  /*
+  * load a dynamically linked shared library that is allowed to be missing
+  * (all symbols are weak imported).
+  */
+  static const Uint32 LC_LOAD_WEAK_DYLIB = Uint32(0x18 | _LC_REQ_DYLD);
+
+  static const Uint32 LC_SEGMENT_64 = Uint32(0x19);
+  /* 64-bit segment of this file to be
+	mapped */
+  static const Uint32 LC_ROUTINES_64 = Uint32(0x1a); /* 64-bit image routines */
+  static const Uint32 LC_UUID = Uint32(0x1b); /* the uuid */
+  static const Uint32 LC_RPATH =
+      Uint32(0x1c | _LC_REQ_DYLD); /* runpath additions */
+  static const Uint32 LC_CODE_SIGNATURE =
+      Uint32(0x1d); /* local of code signature */
+  static const Uint32 LC_SEGMENT_SPLIT_INFO =
+      Uint32(0x1e); /* local of info to split segments */
+  static const Uint32 LC_REEXPORT_DYLIB =
+      Uint32(0x1f | _LC_REQ_DYLD); /* load and re-export dylib */
+  static const Uint32 LC_LAZY_LOAD_DYLIB =
+      Uint32(0x20); /* delay load of dylib until first use */
+  static const Uint32 LC_ENCRYPTION_INFO =
+      Uint32(0x21); /* encrypted segment information */
+  static const Uint32 LC_DYLD_INFO =
+      Uint32(0x22); /* compressed dyld information */
+  static const Uint32 LC_DYLD_INFO_ONLY =
+      Uint32(0x22 | _LC_REQ_DYLD); /* compressed dyld information only */
+  static const Uint32 LC_LOAD_UPWARD_DYLIB =
+      Uint32(0x23 | _LC_REQ_DYLD); /* load upward dylib */
+  static const Uint32 LC_VERSION_MIN_MACOSX =
+      Uint32(0x24); /* build for MacOSX min OS version */
+  static const Uint32 LC_VERSION_MIN_IPHONEOS =
+      Uint32(0x25); /* build for iPhoneOS min OS version */
+  static const Uint32 LC_FUNCTION_STARTS =
+      Uint32(0x26); /* compressed table of function start addresses */
+  static const Uint32 LC_DYLD_ENVIRONMENT = Uint32(0x27);
+  /* string for dyld to treat
+	like environment variable */
+  static const Uint32 LC_MAIN =
+      Uint32(0x28 | _LC_REQ_DYLD); /* replacement for LC_UNIXTHREAD */
+  static const Uint32 LC_DATA_IN_CODE =
+      Uint32(0x29); /* table of non-instructions in __text */
+  static const Uint32 LC_SOURCE_VERSION =
+      Uint32(0x2A); /* source version used to build binary */
+  static const Uint32 LC_DYLIB_CODE_SIGN_DRS =
+      Uint32(0x2B); /* Code signing DRs copied from linked dylibs */
+  static const Uint32 LC_BUILD_VERSION =
+      Uint32(0x32); /* Platform min OS version */
+
+  /* Constants for the flags field of the segment_command */
+
+  /* the file contents for this segment is for the high part of the VM space,
+	the low part is zero filled (for stacks in core files) */
+  static const Uint32 SG_HIGHVM = Uint32(0x1);
+  /* this segment is the VM that is allocated by a fixed VM library, for overlap
+	checking in the link editor */
+  static const Uint32 SG_FVMLIB = Uint32(0x2);
+  /* this segment has nothing that was relocated in it and nothing relocated to
+	it, that is it maybe safely replaced without relocation */
+  static const Uint32 SG_NORELOC = Uint32(0x4);
+  /* This segment is protected.  If the segment starts at file offset 0, the
+	first page of the segment is not protected.  All other pages of the segment
+	are protected. */
+  static const Uint32 SG_PROTECTED_VERSION_1 = Uint32(0x8);
+
+/*
+ * The flags field of a section structure is separated into two parts a section
+ * type and section attributes.  The section types are mutually exclusive (it
+ * can only have one type) but the section attributes are not (it may have more
+ * than one attribute).
+ */
+  static const Uint32 SECTION_TYPE = Uint32(0x000000ff); /* 256 section types */
+  static const Uint32 SECTION_ATTRIBUTES =
+      Uint32(0xffffff00); /*  24 section attributes */
+
+/* Constants for the type of a section */
+  static const Uint32 S_REGULAR = Uint32(0x0); /* regular section */
+  static const Uint32 S_ZEROFILL =
+      Uint32(0x1); /* zero fill on demand section */
+  static const Uint32 S_CSTRING_LITERALS =
+      Uint32(0x2); /* section with only literal C strings*/
+  static const Uint32 S_4BYTE_LITERALS =
+      Uint32(0x3); /* section with only 4 byte literals */
+  static const Uint32 S_8BYTE_LITERALS =
+      Uint32(0x4); /* section with only 8 byte literals */
+  static const Uint32 S_LITERAL_POINTERS =
+      Uint32(0x5); /* section with only pointers to */
+  /*  literals */
+/*
+ * For the two types of symbol pointers sections and the symbol stubs section
+ * they have indirect symbol table entries.  For each of the entries in the
+ * section the indirect symbol table entries, in corresponding order in the
+ * indirect symbol table, start at the index stored in the reserved1 field
+ * of the section structure.  Since the indirect symbol table entries
+ * correspond to the entries in the section the number of indirect symbol table
+ * entries is inferred from the size of the section divided by the size of the
+ * entries in the section.  For symbol pointers sections the size of the entries
+ * in the section is 4 bytes and for symbol stubs sections the byte size of the
+ * stubs is stored in the reserved2 field of the section structure.
+ */
+  static const Uint32 S_NON_LAZY_SYMBOL_POINTERS =
+      Uint32(0x6); /* section with only non-lazy
+						   symbol pointers */
+  static const Uint32 S_LAZY_SYMBOL_POINTERS =
+      Uint32(0x7); /* section with only lazy symbol
+ pointers */
+  static const Uint32 S_SYMBOL_STUBS = Uint32(
+      0x8); /* section with only symbol
+ stubs, byte size of stub in
+ the reserved2 field */
+  static const Uint32 S_MOD_INIT_FUNC_POINTERS =
+      Uint32(0x9); /* section with only function
+ pointers for initialization*/
+  static const Uint32 S_MOD_TERM_FUNC_POINTERS =
+      Uint32(0xa); /* section with only function
+ pointers for termination */
+  static const Uint32 S_COALESCED =
+      Uint32(0xb); /* section contains symbols that
+ are to be coalesced */
+  static const Uint32 S_GB_ZEROFILL = Uint32(
+      0xc); /* zero fill on demand section
+ (that can be larger than 4
+ gigabytes) */
+  static const Uint32 S_INTERPOSING = Uint32(
+      0xd); /* section with only pairs of
+ function pointers for
+ interposing */
+  static const Uint32 S_16BYTE_LITERALS =
+      Uint32(0xe); /* section with only 16 byte
+ literals */
+  static const Uint32 S_DTRACE_DOF =
+      Uint32(0xf); /* section contains
+ DTrace Object Format */
+  static const Uint32 S_LAZY_DYLIB_SYMBOL_POINTERS = Uint32(
+      0x10); /* section with only lazy
+ symbol pointers to lazy
+ loaded dylibs */
+  /*
+ * Section types to support thread local variables
+ */
+  static const Uint32 S_THREAD_LOCAL_REGULAR =
+      Uint32(0x11); /* template of initial
+ values for TLVs */
+  static const Uint32 S_THREAD_LOCAL_ZEROFILL =
+      Uint32(0x12); /* template of initial
+ values for TLVs */
+  static const Uint32 S_THREAD_LOCAL_VARIABLES =
+      Uint32(0x13); /* TLV descriptors */
+  static const Uint32 S_THREAD_LOCAL_VARIABLE_POINTERS =
+      Uint32(0x14); /* pointers to TLV
+ descriptors */
+  static const Uint32 S_THREAD_LOCAL_INIT_FUNCTION_POINTERS =
+      Uint32(0x15); /* functions to call
+ to initialize TLV
+ values */
+
+  /*
+ * Constants for the section attributes part of the flags field of a section
+ * structure.
+ */
+  static const Uint32 SECTION_ATTRIBUTES_USR =
+      Uint32(0xff000000); /* User setable attributes */
+  static const Uint32 S_ATTR_PURE_INSTRUCTIONS =
+      Uint32(0x80000000); /* section contains only true
+ machine instructions */
+  static const Uint32 S_ATTR_NO_TOC = Uint32(
+      0x40000000); /* section contains coalesced
+ symbols that are not to be
+ in a ranlib table of
+ contents */
+  static const Uint32 S_ATTR_STRIP_STATIC_SYMS = Uint32(
+      0x20000000); /* ok to strip static symbols
+ in this section in files
+ with the MH_DYLDLINK flag */
+  static const Uint32 S_ATTR_NO_DEAD_STRIP =
+      Uint32(0x10000000); /* no dead stripping */
+  static const Uint32 S_ATTR_LIVE_SUPPORT =
+      Uint32(0x08000000); /* blocks are live if they
+ reference live blocks */
+  static const Uint32 S_ATTR_SELF_MODIFYING_CODE =
+      Uint32(0x04000000); /* Used with i386 code stubs
+ written on by dyld */
+  /*
+ * If a segment contains any sections marked with S_ATTR_DEBUG then all
+ * sections in that segment must have this attribute.  No section other than
+ * a section marked with this attribute may reference the contents of this
+ * section.  A section with this attribute may contain no symbols and must have
+ * a section type S_REGULAR.  The static linker will not copy section contents
+ * from sections with this attribute into its output file.  These sections
+ * generally contain DWARF debugging info.
+ */
+  static const Uint32 S_ATTR_DEBUG = Uint32(0x02000000); /* a debug section */
+  static const Uint32 SECTION_ATTRIBUTES_SYS =
+      Uint32(0x00ffff00); /* system setable attributes */
+  static const Uint32 S_ATTR_SOME_INSTRUCTIONS =
+      Uint32(0x00000400); /* section contains some
+ machine instructions */
+  static const Uint32 S_ATTR_EXT_RELOC =
+      Uint32(0x00000200); /* section has external
+ relocation entries */
+  static const Uint32 S_ATTR_LOC_RELOC =
+      Uint32(0x00000100); /* section has local
+ relocation entries */
+
+  /*
+ * The names of segments and sections in them are mostly meaningless to the
+ * link-editor.  But there are few things to support traditional UNIX
+ * executables that require the link-editor and assembler to use some names
+ * agreed upon by convention.
+ *
+ * The initial protection of the "__TEXT" segment has write protection turned
+ * off (not writeable).
+ *
+ * The link-editor will allocate common symbols at the end of the "__common"
+ * section in the "__DATA" segment.  It will create the section and segment
+ * if needed.
+ */
+
+/* The currently known segment names and the section names in those segments */
+
+  static final String SEG_PAGEZERO =
+      "__PAGEZERO"; /* the pagezero segment which has no */
+  /* protections and catches NULL */
+  /* references for MH_EXECUTE files */
+
+  static final String SEG_TEXT = "__TEXT"; /* the tradition UNIX text segment */
+  static final String SECT_TEXT = "__text"; /* the real text part of the text */
+  /* section no headers, and no padding */
+  static final String SECT_FVMLIB_INIT0 =
+      "__fvmlib_init0"; /* the fvmlib initialization */
+  /*  section */
+  static final String SECT_FVMLIB_INIT1 =
+      "__fvmlib_init1"; /* the section following the */
+  /*  fvmlib initialization */
+  /*  section */
+
+  static final String SEG_DATA = "__DATA"; /* the tradition UNIX data segment */
+  static final String SECT_DATA =
+      "__data"; /* the real initialized data section */
+  /* no padding, no bss overlap */
+  static final String SECT_BSS =
+      "__bss"; /* the real uninitialized data section*/
+  /* no padding */
+  static final String SECT_COMMON =
+      "__common"; /* the section common symbols are */
+  /* allocated in by the link editor */
+
+  static final String SEG_OBJC = "__OBJC"; /* objective-C runtime segment */
+  static final String SECT_OBJC_SYMBOLS = "__symbol_table"; /* symbol table */
+  static final String SECT_OBJC_MODULES =
+      "__module_info"; /* module information */
+  static final String SECT_OBJC_STRINGS = "__selector_strs"; /* string table */
+  static final String SECT_OBJC_REFS = "__selector_refs"; /* string table */
+
+  static final String SEG_ICON = "__ICON"; /* the icon segment */
+  static final String SECT_ICON_HEADER = "__header"; /* the icon headers */
+  static final String SECT_ICON_TIFF = "__tiff"; /* the icons in tiff format */
+
+  static final String SEG_LINKEDIT =
+      "__LINKEDIT"; /* the segment containing all structs */
+  /* created and maintained by the link */
+  /* editor.  Created with -seglinkedit */
+  /* option to ld(1) for MH_EXECUTE and */
+  /* FVMLIB file types only */
+
+  static final String SEG_UNIXSTACK =
+      "__UNIXSTACK"; /* the unix stack segment */
+
+  static final String SEG_IMPORT =
+      "__IMPORT"; /* the segment for the self (dyld) */
+  /* modifing code stubs that has read, */
+  /* write and execute permissions */
+
+  /*
+ * An indirect symbol table entry is simply a 32bit index into the symbol table
+ * to the symbol that the pointer or stub is refering to.  Unless it is for a
+ * non-lazy symbol pointer section for a defined symbol which strip(1) as
+ * removed.  In which case it has the value INDIRECT_SYMBOL_LOCAL.  If the
+ * symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that.
+ */
+  static const Uint32 INDIRECT_SYMBOL_LOCAL = Uint32(0x80000000);
+  static const Uint32 INDIRECT_SYMBOL_ABS = Uint32(0x40000000);
+
+  /*
+ * The following are used to encode rebasing information
+ */
+  static const Uint32 REBASE_TYPE_POINTER = Uint32(1);
+  static const Uint32 REBASE_TYPE_TEXT_ABSOLUTE32 = Uint32(2);
+  static const Uint32 REBASE_TYPE_TEXT_PCREL32 = Uint32(3);
+
+  static const Uint32 REBASE_OPCODE_MASK = Uint32(0xF0);
+  static const Uint32 REBASE_IMMEDIATE_MASK = Uint32(0x0F);
+  static const Uint32 REBASE_OPCODE_DONE = Uint32(0x00);
+  static const Uint32 REBASE_OPCODE_SET_TYPE_IMM = Uint32(0x10);
+  static const Uint32 REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = Uint32(0x20);
+  static const Uint32 REBASE_OPCODE_ADD_ADDR_ULEB = Uint32(0x30);
+  static const Uint32 REBASE_OPCODE_ADD_ADDR_IMM_SCALED = Uint32(0x40);
+  static const Uint32 REBASE_OPCODE_DO_REBASE_IMM_TIMES = Uint32(0x50);
+  static const Uint32 REBASE_OPCODE_DO_REBASE_ULEB_TIMES = Uint32(0x60);
+  static const Uint32 REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB = Uint32(0x70);
+  static const Uint32 REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB =
+      Uint32(0x80);
+
+/*
+ * The following are used to encode binding information
+ */
+  static const Uint32 BIND_TYPE_POINTER = Uint32(1);
+  static const Uint32 BIND_TYPE_TEXT_ABSOLUTE32 = Uint32(2);
+  static const Uint32 BIND_TYPE_TEXT_PCREL32 = Uint32(3);
+
+  static const Uint32 BIND_SPECIAL_DYLIB_SELF = Uint32(0);
+  static const Uint32 BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE = Uint32(-1);
+  static const Uint32 BIND_SPECIAL_DYLIB_FLAT_LOOKUP = Uint32(-2);
+
+  static const Uint32 BIND_SYMBOL_FLAGS_WEAK_IMPORT = Uint32(0x1);
+  static const Uint32 BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION = Uint32(0x8);
+
+  static const Uint32 BIND_OPCODE_MASK = Uint32(0xF0);
+  static const Uint32 BIND_IMMEDIATE_MASK = Uint32(0x0F);
+  static const Uint32 BIND_OPCODE_DONE = Uint32(0x00);
+  static const Uint32 BIND_OPCODE_SET_DYLIB_ORDINAL_IMM = Uint32(0x10);
+  static const Uint32 BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB = Uint32(0x20);
+  static const Uint32 BIND_OPCODE_SET_DYLIB_SPECIAL_IMM = Uint32(0x30);
+  static const Uint32 BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM = Uint32(0x40);
+  static const Uint32 BIND_OPCODE_SET_TYPE_IMM = Uint32(0x50);
+  static const Uint32 BIND_OPCODE_SET_ADDEND_SLEB = Uint32(0x60);
+  static const Uint32 BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB = Uint32(0x70);
+  static const Uint32 BIND_OPCODE_ADD_ADDR_ULEB = Uint32(0x80);
+  static const Uint32 BIND_OPCODE_DO_BIND = Uint32(0x90);
+  static const Uint32 BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB = Uint32(0xA0);
+  static const Uint32 BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED = Uint32(0xB0);
+  static const Uint32 BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB =
+      Uint32(0xC0);
+
+/*
+ * The following are used on the flags byte of a terminal node
+ * in the export information.
+ */
+  static const Uint32 EXPORT_SYMBOL_FLAGS_KIND_MASK = Uint32(0x03);
+  static const Uint32 EXPORT_SYMBOL_FLAGS_KIND_REGULAR = Uint32(0x00);
+  static const Uint32 EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL = Uint32(0x01);
+  static const Uint32 EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION = Uint32(0x04);
+  static const Uint32 EXPORT_SYMBOL_FLAGS_REEXPORT = Uint32(0x08);
+  static const Uint32 EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER = Uint32(0x10);
+
+  static const Uint32 DICE_KIND_DATA =
+      Uint32(0x0001); /* L$start$data$...  label */
+  static const Uint32 DICE_KIND_JUMP_TABLE8 =
+      Uint32(0x0002); /* L$start$jt8$...   label */
+  static const Uint32 DICE_KIND_JUMP_TABLE16 =
+      Uint32(0x0003); /* L$start$jt16$...  label */
+  static const Uint32 DICE_KIND_JUMP_TABLE32 =
+      Uint32(0x0004); /* L$start$jt32$...  label */
+  static const Uint32 DICE_KIND_ABS_JUMP_TABLE32 =
+      Uint32(0x0005); /* L$start$jta32$... label */
+
+/*
+ *	Protection values, defined as bits within the vm_prot_t type
+ */
+
+  static const Int32 VM_PROT_NONE = Int32(0x00);
+  static const Int32 VM_PROT_READ = Int32(0x01); /* read permission */
+  static const Int32 VM_PROT_WRITE = Int32(0x02); /* write permission */
+  static const Int32 VM_PROT_EXECUTE = Int32(0x04); /* execute permission */
+
+/*
+ *	The default protection for newly-created virtual memory
+ */
+
+  static final Int32 VM_PROT_DEFAULT = VM_PROT_READ | VM_PROT_WRITE;
+
+/*
+ *	The maximum privileges possible, for parameter checking.
+ */
+
+  static final Int32 VM_PROT_ALL =
+      VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE;
+
+/*
+ *	An invalid protection value.
+ *	Used only by memory_object_lock_request to indicate no change
+ *	to page locks.  Using -1 here is a bad idea because it
+ *	looks like VM_PROT_ALL and then some.
+ */
+
+  static const Int32 VM_PROT_NO_CHANGE = Int32(0x08);
+
+/*
+ *      When a caller finds that he cannot obtain write permission on a
+ *      mapped entry, the following flag can be used.  The entry will
+ *      be made "needs copy" effectively copying the object (using COW),
+ *      and write permission will be added to the maximum protections
+ *      for the associated entry.
+ */
+
+  static const Int32 VM_PROT_COPY = Int32(0x10);
+
+/*
+ *	Another invalid protection value.
+ *	Used only by memory_object_data_request upon an object
+ *	which has specified a copy_call copy strategy. It is used
+ *	when the kernel wants a page belonging to a copy of the
+ *	object, and is only asking the object as a result of
+ *	following a shadow chain. This solves the race between pages
+ *	being pushed up by the memory manager and the kernel
+ *	walking down the shadow chain.
+ */
+
+  static const Int32 VM_PROT_WANTS_COPY = Int32(0x10);
+}
diff --git a/pkg/dart2native/lib/macho_parser.dart b/pkg/dart2native/lib/macho_parser.dart
new file mode 100644
index 0000000..20deb1d
--- /dev/null
+++ b/pkg/dart2native/lib/macho_parser.dart
@@ -0,0 +1,376 @@
+// 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:io';
+import 'dart:math';
+import 'dart:typed_data';
+
+import './macho.dart';
+
+extension ByteReader on RandomAccessFile {
+  Uint32 readUint32() {
+    Uint8List rawBytes = readSync(4);
+    var byteView = ByteData.view(rawBytes.buffer);
+    return Uint32(byteView.getUint32(0, Endian.little));
+  }
+
+  Uint64 readUint64() {
+    Uint8List rawBytes = readSync(8);
+    var byteView = ByteData.view(rawBytes.buffer);
+    return Uint64(byteView.getUint64(0, Endian.little));
+  }
+
+  Int32 readInt32() {
+    Uint8List rawBytes = readSync(4);
+    var byteView = ByteData.view(rawBytes.buffer);
+    return Int32(byteView.getInt32(0, Endian.little));
+  }
+}
+
+class MachOFile {
+  IMachOHeader? header;
+  // The headerMaxOffset is set during parsing based on the maximum offset for
+  // segment offsets. Assuming the header start at byte 0 (that seems to always
+  // be the case), this number represents the total size of the header, which
+  // often includes a significant amount of zero-padding.
+  int headerMaxOffset = 0;
+  // We keep track on whether a code signature was seen so we can recreate it
+  // in the case that the binary has a CD hash that nededs updating.
+  bool hasCodeSignature = false;
+
+  // This wil contain all of the "load commands" in this MachO file. A load
+  // command is really a typed schema that indicates various parts of the MachO
+  // file (e.g. where to find the TEXT and DATA sections).
+  List<IMachOLoadCommand> commands =
+      List<IMachOLoadCommand>.empty(growable: true);
+
+  MachOFile();
+
+  // Returns the number of bytes read from the file.
+  Future<int> loadFromFile(File file) async {
+    // Ensure the file is long enough to contain the magic bytes.
+    final int fileLength = await file.length();
+    if (fileLength < 4) {
+      throw FormatException(
+          "File was not formatted properly. Length was too short: $fileLength");
+    }
+
+    // Read the first 4 bytes to see what type of MachO file this is.
+    var stream = await file.open();
+    var magic = stream.readUint32();
+
+    bool is64Bit = magic == MachOConstants.MH_MAGIC_64 ||
+        magic == MachOConstants.MH_CIGAM_64;
+
+    await stream.setPosition(0);
+
+    // Set the max header offset to the maximum file size so that when we read
+    // in the header we can correctly set the total header size.
+    headerMaxOffset = (1 << 63) - 1;
+
+    header = await _headerFromStream(stream, is64Bit);
+    if (header == null) {
+      throw FormatException(
+          "Could not parse a MachO header from the file: ${file.path}");
+    } else {
+      commands = await _commandsFromStream(stream, header!);
+    }
+
+    return stream.positionSync();
+  }
+
+  Future<MachOSymtabCommand> parseSymtabFromStream(
+      final Uint32 cmdsize, RandomAccessFile stream) async {
+    final symoff = stream.readUint32();
+    final nsyms = stream.readUint32();
+    final stroff = stream.readUint32();
+    final strsize = stream.readUint32();
+
+    return MachOSymtabCommand(cmdsize, symoff, nsyms, stroff, strsize);
+  }
+
+  Future<MachODysymtabCommand> parseDysymtabFromStream(
+      final Uint32 cmdsize, RandomAccessFile stream) async {
+    final ilocalsym = stream.readUint32();
+    final nlocalsym = stream.readUint32();
+    final iextdefsym = stream.readUint32();
+    final nextdefsym = stream.readUint32();
+    final iundefsym = stream.readUint32();
+    final nundefsym = stream.readUint32();
+    final tocoff = stream.readUint32();
+    final ntoc = stream.readUint32();
+    final modtaboff = stream.readUint32();
+    final nmodtab = stream.readUint32();
+    final extrefsymoff = stream.readUint32();
+    final nextrefsyms = stream.readUint32();
+    final indirectsymoff = stream.readUint32();
+    final nindirectsyms = stream.readUint32();
+    final extreloff = stream.readUint32();
+    final nextrel = stream.readUint32();
+    final locreloff = stream.readUint32();
+    final nlocrel = stream.readUint32();
+
+    return MachODysymtabCommand(
+        cmdsize,
+        ilocalsym,
+        nlocalsym,
+        iextdefsym,
+        nextdefsym,
+        iundefsym,
+        nundefsym,
+        tocoff,
+        ntoc,
+        modtaboff,
+        nmodtab,
+        extrefsymoff,
+        nextrefsyms,
+        indirectsymoff,
+        nindirectsyms,
+        extreloff,
+        nextrel,
+        locreloff,
+        nlocrel);
+  }
+
+  Future<MachOLinkeditDataCommand> parseLinkeditDataCommand(
+      final Uint32 cmd, final Uint32 cmdsize, RandomAccessFile stream) async {
+    final dataoff = stream.readUint32();
+    final datasize = stream.readUint32();
+
+    return MachOLinkeditDataCommand(
+      cmd,
+      cmdsize,
+      dataoff,
+      datasize,
+    );
+  }
+
+  Future<MachODyldInfoCommand> parseDyldInfoFromStream(
+      final Uint32 cmd, final Uint32 cmdsize, RandomAccessFile stream) async {
+    // Note that we're relying on the fact that the mirror returns the list of
+    // fields in the same order they're defined ni the class definition.
+
+    final rebaseOff = stream.readUint32();
+    final rebaseSize = stream.readUint32();
+    final bindOff = stream.readUint32();
+    final bindSize = stream.readUint32();
+    final weakBindOff = stream.readUint32();
+    final weakBindSize = stream.readUint32();
+    final lazyBindOff = stream.readUint32();
+    final lazyBindSize = stream.readUint32();
+    final exportOff = stream.readUint32();
+    final exportSize = stream.readUint32();
+
+    return MachODyldInfoCommand(
+        cmd,
+        cmdsize,
+        rebaseOff,
+        rebaseSize,
+        bindOff,
+        bindSize,
+        weakBindOff,
+        weakBindSize,
+        lazyBindOff,
+        lazyBindSize,
+        exportOff,
+        exportSize);
+  }
+
+  Future<MachOSegmentCommand64> parseSegmentCommand64FromStream(
+      final Uint32 cmdsize, RandomAccessFile stream) async {
+    final Uint8List segname = await stream.read(16);
+    final vmaddr = stream.readUint64();
+    final vmsize = stream.readUint64();
+    final fileoff = stream.readUint64();
+    final filesize = stream.readUint64();
+    final maxprot = stream.readInt32();
+    final initprot = stream.readInt32();
+    final nsects = stream.readUint32();
+    final flags = stream.readUint32();
+
+    if (nsects.asInt() == 0 && filesize.asInt() != 0) {
+      headerMaxOffset = min(headerMaxOffset, fileoff.asInt());
+    }
+
+    final sections = List.filled(nsects.asInt(), 0).map((_) {
+      final Uint8List sectname = stream.readSync(16);
+      final Uint8List segname = stream.readSync(16);
+      final addr = stream.readUint64();
+      final size = stream.readUint64();
+      final offset = stream.readUint32();
+      final align = stream.readUint32();
+      final reloff = stream.readUint32();
+      final nreloc = stream.readUint32();
+      final flags = stream.readUint32();
+      final reserved1 = stream.readUint32();
+      final reserved2 = stream.readUint32();
+      final reserved3 = stream.readUint32();
+
+      final notZerofill =
+          (flags & MachOConstants.S_ZEROFILL) != MachOConstants.S_ZEROFILL;
+      if (offset > 0 && size > 0 && notZerofill) {
+        headerMaxOffset = min(headerMaxOffset, offset.asInt());
+      }
+
+      return MachOSection64(sectname, segname, addr, size, offset, align,
+          reloff, nreloc, flags, reserved1, reserved2, reserved3);
+    }).toList();
+
+    return MachOSegmentCommand64(cmdsize, segname, vmaddr, vmsize, fileoff,
+        filesize, maxprot, initprot, nsects, flags, sections);
+  }
+
+  Future<IMachOHeader> _headerFromStream(
+      RandomAccessFile stream, bool is64Bit) async {
+    final magic = stream.readUint32();
+    final cputype = stream.readUint32();
+    final cpusubtype = stream.readUint32();
+    final filetype = stream.readUint32();
+    final ncmds = stream.readUint32();
+    final sizeofcmds = stream.readUint32();
+    final flags = stream.readUint32();
+
+    if (is64Bit) {
+      final reserved = stream.readUint32();
+      return MachOHeader(magic, cputype, cpusubtype, filetype, ncmds,
+          sizeofcmds, flags, reserved);
+    } else {
+      return MachOHeader32(
+          magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags);
+    }
+  }
+
+  void writeLoadCommandToStream(
+      IMachOLoadCommand command, RandomAccessFile stream) {
+    command.writeSync(stream);
+  }
+
+  void writeSync(RandomAccessFile stream) {
+    // Write the header.
+    stream.writeUint32(header!.magic);
+    stream.writeUint32(header!.cputype);
+    stream.writeUint32(header!.cpusubtype);
+    stream.writeUint32(header!.filetype);
+    stream.writeUint32(header!.ncmds);
+    stream.writeUint32(header!.sizeofcmds);
+    stream.writeUint32(header!.flags);
+
+    if (header is MachOHeader) {
+      stream.writeUint32(header!.reserved);
+    }
+
+    // Write all of the commands.
+    commands.forEach((command) {
+      writeLoadCommandToStream(command, stream);
+    });
+
+    // Pad the header according to the offset.
+    final int paddingAmount = headerMaxOffset - stream.positionSync();
+    if (paddingAmount > 0) {
+      stream.writeFromSync(List.filled(paddingAmount, 0));
+    }
+  }
+
+  Future<List<IMachOLoadCommand>> _commandsFromStream(
+      RandomAccessFile stream, IMachOHeader header) async {
+    final loadCommands = List<MachOLoadCommand>.empty(growable: true);
+    for (int i = 0; i < header.ncmds.asInt(); i++) {
+      final cmd = stream.readUint32();
+      final cmdsize = stream.readUint32();
+
+      // We need to read cmdsize bytes to get to the next command definition,
+      // but the cmdsize does includes the 2 bytes we just read (cmd +
+      // cmdsize) so we need to subtract those.
+      await stream
+          .setPosition((await stream.position()) + cmdsize.asInt() - 2 * 4);
+
+      loadCommands.add(MachOLoadCommand(cmd, cmdsize));
+    }
+
+    // Un-read all the bytes we just read.
+    var loadCommandsOffset = loadCommands
+        .map((command) => command.cmdsize)
+        .reduce((value, element) => value + element);
+    await stream
+        .setPosition((await stream.position()) - loadCommandsOffset.asInt());
+
+    final commands = List<IMachOLoadCommand>.empty(growable: true);
+    for (int i = 0; i < header.ncmds.asInt(); i++) {
+      final cmd = stream.readUint32();
+      final cmdsize = stream.readUint32();
+
+      // TODO(sarietta): Handle all MachO load command types. For now, since
+      // this implementation is exclusively being used to handle generating
+      // MacOS-compatible MachO executables for compiled dart scripts, only the
+      // load commands that are currently implemented are strictly necessary. It
+      // may be useful to handle all cases and pull this functionality out to a
+      // separate MachO library.
+      if (cmd == MachOConstants.LC_SEGMENT_64) {
+        commands.add(await parseSegmentCommand64FromStream(cmdsize, stream));
+      } else if (cmd == MachOConstants.LC_DYLD_INFO_ONLY ||
+          cmd == MachOConstants.LC_DYLD_INFO) {
+        commands.add(await parseDyldInfoFromStream(cmd, cmdsize, stream));
+      } else if (cmd == MachOConstants.LC_SYMTAB) {
+        commands.add(await parseSymtabFromStream(cmdsize, stream));
+      } else if (cmd == MachOConstants.LC_DYSYMTAB) {
+        commands.add(await parseDysymtabFromStream(cmdsize, stream));
+      } else if (cmd == MachOConstants.LC_CODE_SIGNATURE ||
+          cmd == MachOConstants.LC_SEGMENT_SPLIT_INFO ||
+          cmd == MachOConstants.LC_FUNCTION_STARTS ||
+          cmd == MachOConstants.LC_DATA_IN_CODE ||
+          cmd == MachOConstants.LC_DYLIB_CODE_SIGN_DRS) {
+        if (cmd == MachOConstants.LC_CODE_SIGNATURE) {
+          hasCodeSignature = true;
+        }
+        commands.add(await parseLinkeditDataCommand(cmd, cmdsize, stream));
+      } else if (cmd == MachOConstants.LC_SEGMENT ||
+          cmd == MachOConstants.LC_SYMSEG ||
+          cmd == MachOConstants.LC_THREAD ||
+          cmd == MachOConstants.LC_UNIXTHREAD ||
+          cmd == MachOConstants.LC_LOADFVMLIB ||
+          cmd == MachOConstants.LC_IDFVMLIB ||
+          cmd == MachOConstants.LC_IDENT ||
+          cmd == MachOConstants.LC_FVMFILE ||
+          cmd == MachOConstants.LC_PREPAGE ||
+          cmd == MachOConstants.LC_LOAD_DYLIB ||
+          cmd == MachOConstants.LC_ID_DYLIB ||
+          cmd == MachOConstants.LC_LOAD_DYLINKER ||
+          cmd == MachOConstants.LC_ID_DYLINKER ||
+          cmd == MachOConstants.LC_PREBOUND_DYLIB ||
+          cmd == MachOConstants.LC_ROUTINES ||
+          cmd == MachOConstants.LC_SUB_FRAMEWORK ||
+          cmd == MachOConstants.LC_SUB_UMBRELLA ||
+          cmd == MachOConstants.LC_SUB_CLIENT ||
+          cmd == MachOConstants.LC_SUB_LIBRARY ||
+          cmd == MachOConstants.LC_TWOLEVEL_HINTS ||
+          cmd == MachOConstants.LC_PREBIND_CKSUM ||
+          cmd == MachOConstants.LC_LOAD_WEAK_DYLIB ||
+          cmd == MachOConstants.LC_ROUTINES_64 ||
+          cmd == MachOConstants.LC_UUID ||
+          cmd == MachOConstants.LC_RPATH ||
+          cmd == MachOConstants.LC_REEXPORT_DYLIB ||
+          cmd == MachOConstants.LC_LAZY_LOAD_DYLIB ||
+          cmd == MachOConstants.LC_ENCRYPTION_INFO ||
+          cmd == MachOConstants.LC_LOAD_UPWARD_DYLIB ||
+          cmd == MachOConstants.LC_VERSION_MIN_MACOSX ||
+          cmd == MachOConstants.LC_VERSION_MIN_IPHONEOS ||
+          cmd == MachOConstants.LC_DYLD_ENVIRONMENT ||
+          cmd == MachOConstants.LC_MAIN ||
+          cmd == MachOConstants.LC_SOURCE_VERSION ||
+          cmd == MachOConstants.LC_BUILD_VERSION) {
+        // cmdsize includes the size of the contents + cmd + cmdsize
+        final contents = await stream.read(cmdsize.asInt() - 2 * 4);
+        commands.add(MachOGenericLoadCommand(cmd, cmdsize, contents));
+      } else {
+        // cmdsize includes the size of the contents + cmd + cmdsize
+        final contents = await stream.read(cmdsize.asInt() - 2 * 4);
+        commands.add(MachOGenericLoadCommand(cmd, cmdsize, contents));
+        final cmdString = "0x${cmd.asInt().toRadixString(16)}";
+        print("Found unknown MachO load command: $cmdString");
+      }
+    }
+
+    return commands;
+  }
+}
diff --git a/pkg/dart2wasm/bin/run_wasm.js b/pkg/dart2wasm/bin/run_wasm.js
index 7e962a0..593f159 100644
--- a/pkg/dart2wasm/bin/run_wasm.js
+++ b/pkg/dart2wasm/bin/run_wasm.js
@@ -2,16 +2,21 @@
 // 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.
 //
-// Runner V8 script for testing dart2wasm, takes ".wasm" file as argument.
+// Runner V8 script for testing dart2wasm, takes ".wasm" files as arguments.
+//
 // Run as follows:
 //
-// $> d8 --experimental-wasm-gc --wasm-gc-js-interop run_wasm.js -- <file_name>.wasm
+// $> d8 --experimental-wasm-gc --wasm-gc-js-interop run_wasm.js -- <dart_module>.wasm [<ffi_module>.wasm]
+//
+// If an FFI module is specified, it will be instantiated first, and its
+// exports will be supplied as imports to the Dart module under the 'ffi'
+// module name.
 
 function stringFromDartString(string) {
-    var length = inst.exports.$stringLength(string);
+    var length = dartInstance.exports.$stringLength(string);
     var array = new Array(length);
     for (var i = 0; i < length; i++) {
-        array[i] = inst.exports.$stringRead(string, i);
+        array[i] = dartInstance.exports.$stringRead(string, i);
     }
     return String.fromCharCode(...array);
 }
@@ -23,20 +28,53 @@
         range |= string.codePointAt(i);
     }
     if (range < 256) {
-        var dartString = inst.exports.$stringAllocate1(length);
+        var dartString = dartInstance.exports.$stringAllocate1(length);
         for (var i = 0; i < length; i++) {
-            inst.exports.$stringWrite1(dartString, i, string.codePointAt(i));
+            dartInstance.exports.$stringWrite1(dartString, i, string.codePointAt(i));
         }
         return dartString;
     } else {
-        var dartString = inst.exports.$stringAllocate2(length);
+        var dartString = dartInstance.exports.$stringAllocate2(length);
         for (var i = 0; i < length; i++) {
-            inst.exports.$stringWrite2(dartString, i, string.codePointAt(i));
+            dartInstance.exports.$stringWrite2(dartString, i, string.codePointAt(i));
         }
         return dartString;
     }
 }
 
+// Converts a JS array to a Dart List, and also recursively converts the items
+// in the array.
+function arrayToDartList(array, allocator, adder) {
+    var length = array.length;
+    var dartList = dartInstance.exports.$listAllocate();
+    for (var i = 0; i < length; i++) {
+        dartInstance.exports.$listAdd(dartList, array[i]);
+    }
+    return dartList;
+}
+
+// Converts a Dart List to a JS array. Any Dart objects will be converted, but
+// this will be cheap for JSValues.
+function arrayFromDartList(list, reader) {
+    var length = dartInstance.exports.$listLength(list);
+    var array = new Array(length);
+    for (var i = 0; i < length; i++) {
+        array[i] = dartInstance.exports.$listRead(list, i);
+    }
+    return array;
+}
+
+// Recursively converts a JS object into a Dart object.
+function dartify(object) {
+    if (typeof object === "string") {
+        return stringToDartString(object);
+    } else if (object instanceof Array) {
+        return arrayToDartList(object);
+    } else {
+        return object;
+    }
+}
+
 // Imports for printing and event loop
 var dart2wasm = {
     printToConsole: function(string) {
@@ -44,7 +82,7 @@
     },
     scheduleCallback: function(milliseconds, closure) {
         setTimeout(function() {
-            inst.exports.$call0(closure);
+            dartInstance.exports.$call0(closure);
         }, milliseconds);
     },
     getCurrentStackTrace: function() {
@@ -59,18 +97,66 @@
         // stack trace.
         let userStackString = stackString.split('\n').slice(3).join('\n');
         return stringToDartString(userStackString);
+    },
+    arrayFromDartList: arrayFromDartList,
+    arrayToDartList: arrayToDartList,
+    stringFromDartString: stringFromDartString,
+    stringToDartString: stringToDartString,
+    dartify: dartify,
+    newObject: function() {
+        return {};
+    },
+    globalThis: function() {
+        return globalThis;
+    },
+    getProperty: function(object, name) {
+        return object[name];
+    },
+    hasProperty: function(object, name) {
+        return name in object;
+    },
+    setProperty: function(object, name, value) {
+        return object[name] = value;
+    },
+    callMethodVarArgs: function(object, name, args) {
+        return object[name].apply(object, args);
+    },
+    callConstructorVarArgs: function(object, name, args) {
+        // Gets a constructor property at object[name], and apply bind to the
+        // constructor. We pass `null` as the first argument to `bind.apply`
+        // because this is `bind`'s unused context argument(`new` will
+        // explicitly create a new context).
+        var constructor = object[name];
+        var factoryFunction = constructor.bind.apply(constructor, [null, ...args]);
+        return new factoryFunction();
+    },
+    eval: function(string) {
+        eval(string);
     }
 };
 
-// Create a Wasm module from the binary wasm file.
-var bytes = readbuffer(arguments[0]);
-var module = new WebAssembly.Module(bytes);
+function instantiate(filename, imports) {
+    // Create a Wasm module from the binary wasm file.
+    var bytes = readbuffer(filename);
+    var module = new WebAssembly.Module(bytes);
+    return new WebAssembly.Instance(module, imports);
+}
 
-// Instantiate the Wasm module, importing from the global scope.
+// Import from the global scope.
 var importObject = (typeof window !== 'undefined')
     ? window
     : Realm.global(Realm.current());
-var inst = new WebAssembly.Instance(module, importObject);
 
-var result = inst.exports.main();
+// Is an FFI module specified?
+if (arguments.length > 1) {
+    // instantiate FFI module
+    var ffiInstance = instantiate(arguments[1], {});
+    // Make its exports available as imports under the 'ffi' module name
+    importObject.ffi = ffiInstance.exports;
+}
+
+// Instantiate the Dart module, importing from the global scope.
+var dartInstance = instantiate(arguments[0], importObject);
+
+var result = dartInstance.exports.main();
 if (result) console.log(result);
diff --git a/pkg/dart2wasm/dart2wasm.md b/pkg/dart2wasm/dart2wasm.md
index 8dc3203..bfc2d47 100644
--- a/pkg/dart2wasm/dart2wasm.md
+++ b/pkg/dart2wasm/dart2wasm.md
@@ -16,12 +16,12 @@
 | `--`[`no-`]`lazy-constants`             | no      | Instantiate constants lazily.
 | `--`[`no-`]`local-nullability`          | no      | Use non-nullable types for non-nullable locals and temporaries.
 | `--`[`no-`]`name-section`               | yes     | Emit Name Section with function names.
-| `--`[`no-`]`nominal-types`              | no      | Emit experimental nominal types.
+| `--`[`no-`]`nominal-types`              | yes     | Emit nominal types.
 | `--`[`no-`]`parameter-nullability`      | yes     | Use non-nullable types for non-nullable parameters and return values.
 | `--`[`no-`]`polymorphic-specialization` | no      | Do virtual calls by switching on the class ID instead of using `call_indirect`.
 | `--`[`no-`]`print-kernel`               | no      | Print IR for each function before compiling it.
 | `--`[`no-`]`print-wasm`                 | no      | Print Wasm instructions of each compiled function.
-| `--`[`no-`]`runtime-types`              | yes     | Use RTTs for allocations and casts.
+| `--`[`no-`]`runtime-types`              | no      | Use RTTs for allocations and casts.
 | `--`[`no-`]`string-data-segments`       | no      | Use experimental array init from data segment for string constants.
 | `--watch` *offset*                      |         | Print stack trace leading to the byte at offset *offset* in the `.wasm` output file. Can be specified multiple times.
 
diff --git a/pkg/dart2wasm/lib/class_info.dart b/pkg/dart2wasm/lib/class_info.dart
index 54037e0..c94c023 100644
--- a/pkg/dart2wasm/lib/class_info.dart
+++ b/pkg/dart2wasm/lib/class_info.dart
@@ -21,6 +21,8 @@
   static const boxValue = 1;
   static const identityHash = 1;
   static const stringArray = 2;
+  static const hashBaseIndex = 2;
+  static const hashBaseData = 4;
   static const closureContext = 2;
   static const closureFunction = 3;
   static const typedListBaseLength = 2;
@@ -45,6 +47,8 @@
     check(translator.boxedDoubleClass, "value", FieldIndex.boxValue);
     check(translator.oneByteStringClass, "_array", FieldIndex.stringArray);
     check(translator.twoByteStringClass, "_array", FieldIndex.stringArray);
+    check(translator.hashFieldBaseClass, "_index", FieldIndex.hashBaseIndex);
+    check(translator.hashFieldBaseClass, "_data", FieldIndex.hashBaseData);
     check(translator.functionClass, "context", FieldIndex.closureContext);
   }
 }
@@ -311,6 +315,10 @@
   void collect() {
     // Create class info and Wasm structs for all classes.
     initializeTop();
+    // Subclasses of the [_Function] class are generated on the fly as fields
+    // with function types are encountered. Therefore, this class must be early
+    // in the initialization order.
+    initialize(translator.functionClass);
     for (Library library in translator.component.libraries) {
       for (Class cls in library.classes) {
         initialize(cls);
diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart
index 5ae0b2a..6631460 100644
--- a/pkg/dart2wasm/lib/code_generator.dart
+++ b/pkg/dart2wasm/lib/code_generator.dart
@@ -47,8 +47,9 @@
   final Map<VariableDeclaration, w.Local> locals = {};
   w.Local? thisLocal;
   w.Local? preciseThisLocal;
+  w.Local? returnValueLocal;
   final Map<TypeParameter, w.Local> typeLocals = {};
-  final List<Statement> finalizers = [];
+  final List<TryBlockFinalizer> finalizers = [];
   final List<w.Label> tryLabels = [];
   final Map<LabeledStatement, w.Label> labels = {};
   final Map<SwitchCase, w.Label> switchLabels = {};
@@ -235,7 +236,9 @@
       ClassInfo info = translator.classInfo[cls]!;
       thisLocal = paramLocals[0];
       w.RefType thisType = info.nonNullableType;
-      if (translator.needsConversion(paramLocals[0].type, thisType)) {
+      if (translator.needsConversion(paramLocals[0].type, thisType) &&
+          !(cls == translator.ffiPointerClass ||
+              translator.isFfiCompound(cls))) {
         preciseThisLocal = addLocal(thisType);
         b.local_get(paramLocals[0]);
         translator.ref_cast(b, info);
@@ -622,9 +625,39 @@
 
   @override
   void visitTryFinally(TryFinally node) {
-    finalizers.add(node.finalizer);
+    // We lower a [TryFinally] to three nested blocks, and we emit the finalizer
+    // up to three times. Once in a catch, to handle the case where the try
+    // throws. Once outside of the catch, to handle the case where the try does
+    // not throw. Finally, if there is a return within the try block, then we
+    // emit the finalizer one more time along with logic to continue walking up
+    // the stack.
+    w.Label tryFinallyBlock = b.block();
+    w.Label finalizerBlock = b.block();
+    finalizers.add(TryBlockFinalizer(finalizerBlock));
+    w.Label tryBlock = b.try_();
     node.body.accept(this);
-    finalizers.removeLast().accept(this);
+    bool mustHandleReturn = finalizers.removeLast().mustHandleReturn;
+    b.br(tryBlock);
+    b.catch_(translator.exceptionTag);
+    node.finalizer.accept(this);
+    b.rethrow_(tryBlock);
+    b.end(); // end tryBlock.
+    node.finalizer.accept(this);
+    b.br(tryFinallyBlock);
+    b.end(); // end finalizerBlock.
+    if (mustHandleReturn) {
+      node.finalizer.accept(this);
+      if (finalizers.isNotEmpty) {
+        b.br(finalizers.last.label);
+      } else {
+        if (returnValueLocal != null) {
+          b.local_get(returnValueLocal!);
+          translator.convertType(function, returnValueLocal!.type, returnType);
+        }
+        _returnFromFunction();
+      }
+    }
+    b.end(); // end tryFinallyBlock.
   }
 
   @override
@@ -768,6 +801,17 @@
     throw "ForInStatement should have been desugared: $node";
   }
 
+  /// Handle the return from this function, either by jumping to [returnLabel]
+  /// in the case this function was inlined or just inserting a return
+  /// instruction.
+  void _returnFromFunction() {
+    if (returnLabel != null) {
+      b.br(returnLabel!);
+    } else {
+      b.return_();
+    }
+  }
+
   @override
   void visitReturnStatement(ReturnStatement node) {
     Expression? expression = node.expression;
@@ -776,13 +820,22 @@
     } else {
       translator.convertType(function, voidMarker, returnType);
     }
-    for (Statement finalizer in finalizers.reversed) {
-      finalizer.accept(this);
-    }
-    if (returnLabel != null) {
-      b.br(returnLabel!);
+
+    // If we are wrapped in a [TryFinally] node then we have to run finalizers
+    // as the stack unwinds. When we get to the top of the finalizer stack, we
+    // will handle the return using [returnValueLocal] if this function returns
+    // a value.
+    if (finalizers.isNotEmpty) {
+      for (TryBlockFinalizer finalizer in finalizers) {
+        finalizer.mustHandleReturn = true;
+      }
+      if (returnType != voidMarker) {
+        returnValueLocal ??= addLocal(returnType);
+        b.local_set(returnValueLocal!);
+      }
+      b.br(finalizers.last.label);
     } else {
-      b.return_();
+      _returnFromFunction();
     }
   }
 
@@ -937,6 +990,10 @@
   @override
   w.ValueType visitConstructorInvocation(
       ConstructorInvocation node, w.ValueType expectedType) {
+    w.ValueType? intrinsicResult =
+        intrinsifier.generateConstructorIntrinsic(node);
+    if (intrinsicResult != null) return intrinsicResult;
+
     ClassInfo info = translator.classInfo[node.target.enclosingClass]!;
     translator.functions.allocateClass(info.classId);
     w.Local temp = addLocal(info.nonNullableType);
@@ -963,6 +1020,7 @@
       StaticInvocation node, w.ValueType expectedType) {
     w.ValueType? intrinsicResult = intrinsifier.generateStaticIntrinsic(node);
     if (intrinsicResult != null) return intrinsicResult;
+
     _visitArguments(node.arguments, node.targetReference, 0);
     return _call(node.targetReference);
   }
@@ -991,6 +1049,7 @@
       InstanceInvocation node, w.ValueType expectedType) {
     w.ValueType? intrinsicResult = intrinsifier.generateInstanceIntrinsic(node);
     if (intrinsicResult != null) return intrinsicResult;
+
     Procedure target = node.interfaceTarget;
     if (node.kind == InstanceAccessKind.Object) {
       switch (target.name.text) {
@@ -1045,6 +1104,7 @@
   w.ValueType visitEqualsCall(EqualsCall node, w.ValueType expectedType) {
     w.ValueType? intrinsicResult = intrinsifier.generateEqualsIntrinsic(node);
     if (intrinsicResult != null) return intrinsicResult;
+
     Member? singleTarget = translator.singleTarget(node);
     if (singleTarget == translator.coreTypes.objectEquals) {
       // Plain reference comparison
@@ -1121,7 +1181,7 @@
 
   @override
   w.ValueType visitEqualsNull(EqualsNull node, w.ValueType expectedType) {
-    wrap(node.expression, translator.topInfo.nullableType);
+    wrap(node.expression, const w.RefType.any());
     b.ref_is_null();
     return w.NumType.i32;
   }
@@ -1301,6 +1361,7 @@
     w.ValueType? intrinsicResult =
         intrinsifier.generateStaticGetterIntrinsic(node);
     if (intrinsicResult != null) return intrinsicResult;
+
     Member target = node.target;
     if (target is Field) {
       return translator.globals.readGlobal(b, target);
@@ -1442,6 +1503,9 @@
 
   w.ValueType _directGet(
       Member target, Expression receiver, w.ValueType? Function() intrinsify) {
+    w.ValueType? intrinsicResult = intrinsify();
+    if (intrinsicResult != null) return intrinsicResult;
+
     if (target is Field) {
       ClassInfo info = translator.classInfo[target.enclosingClass]!;
       int fieldIndex = translator.fieldIndex[target]!;
@@ -1453,8 +1517,6 @@
     } else {
       // Instance call of getter
       assert(target is Procedure && target.isGetter);
-      w.ValueType? intrinsicResult = intrinsify();
-      if (intrinsicResult != null) return intrinsicResult;
       w.BaseFunction targetFunction =
           translator.functions.getFunction(target.reference);
       wrap(receiver, targetFunction.type.inputs.single);
@@ -1661,8 +1723,20 @@
 
   @override
   w.ValueType visitNullCheck(NullCheck node, w.ValueType expectedType) {
-    // TODO(joshualitt): Check and throw exception
-    return wrap(node.operand, expectedType);
+    w.ValueType operandType =
+        translator.translateType(dartTypeOf(node.operand));
+    w.ValueType nonNullOperandType = operandType.withNullability(false);
+    w.Label nullCheckBlock = b.block(const [], [nonNullOperandType]);
+    wrap(node.operand, operandType);
+
+    // We lower a null check to a br_on_non_null, throwing a [TypeError] in the
+    // null case.
+    b.br_on_non_null(nullCheckBlock);
+    _call(translator.stackTraceCurrent.reference);
+    _call(translator.throwNullCheckError.reference);
+    b.unreachable();
+    b.end();
+    return nonNullOperandType;
   }
 
   void _visitArguments(Arguments node, Reference target, int signatureOffset) {
@@ -2022,3 +2096,10 @@
     return wrap(node.operand, expectedType);
   }
 }
+
+class TryBlockFinalizer {
+  final w.Label label;
+  bool mustHandleReturn = false;
+
+  TryBlockFinalizer(this.label);
+}
diff --git a/pkg/dart2wasm/lib/constants.dart b/pkg/dart2wasm/lib/constants.dart
index 789f070..4440b45 100644
--- a/pkg/dart2wasm/lib/constants.dart
+++ b/pkg/dart2wasm/lib/constants.dart
@@ -2,6 +2,7 @@
 // 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:math';
 import 'dart:typed_data';
 
 import 'package:dart2wasm/class_info.dart';
@@ -578,6 +579,51 @@
   }
 
   @override
+  ConstantInfo? visitMapConstant(MapConstant constant) {
+    Constant keyTypeConstant = TypeLiteralConstant(constant.keyType);
+    ensureConstant(keyTypeConstant);
+    Constant valueTypeConstant = TypeLiteralConstant(constant.valueType);
+    ensureConstant(valueTypeConstant);
+    List<Constant> dataElements =
+        List.generate(constant.entries.length * 2, (i) {
+      ConstantMapEntry entry = constant.entries[i >> 1];
+      return i.isEven ? entry.key : entry.value;
+    });
+    ListConstant dataList = ListConstant(const DynamicType(), dataElements);
+    ensureConstant(dataList);
+
+    ClassInfo info = translator.classInfo[translator.immutableMapClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType type = info.nonNullableType;
+    return createConstant(constant, type, (function, b) {
+      // This computation of the hash mask follows the computations in
+      // [_ImmutableLinkedHashMapMixin._createIndex] and
+      // [_HashBase._indexSizeToHashMask].
+      const int initialIndexSize = 8;
+      final int indexSize = max(dataElements.length, initialIndexSize);
+      final int hashMask = (1 << (31 - (indexSize - 1).bitLength)) - 1;
+
+      w.RefType indexType =
+          info.struct.fields[FieldIndex.hashBaseIndex].type as w.RefType;
+      w.RefType dataType =
+          info.struct.fields[FieldIndex.hashBaseData].type as w.RefType;
+
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.ref_null(indexType.heapType); // _index
+      b.i64_const(hashMask); // _hashMask
+      constants.instantiateConstant(function, b, dataList, dataType); // _data
+      b.i64_const(dataElements.length); // _usedData
+      b.i64_const(0); // _deletedKeys
+      constants.instantiateConstant(
+          function, b, keyTypeConstant, constants.typeInfo.nullableType);
+      constants.instantiateConstant(
+          function, b, valueTypeConstant, constants.typeInfo.nullableType);
+      translator.struct_new(b, info);
+    });
+  }
+
+  @override
   ConstantInfo? visitStaticTearOffConstant(StaticTearOffConstant constant) {
     w.DefinedFunction closureFunction =
         translator.getTearOffFunction(constant.targetReference.asProcedure);
diff --git a/pkg/dart2wasm/lib/constants_backend.dart b/pkg/dart2wasm/lib/constants_backend.dart
index 6871599..17e4bf4 100644
--- a/pkg/dart2wasm/lib/constants_backend.dart
+++ b/pkg/dart2wasm/lib/constants_backend.dart
@@ -7,68 +7,17 @@
 import 'package:kernel/core_types.dart';
 
 class WasmConstantsBackend extends ConstantsBackend {
-  final Class immutableMapClass;
   final Class unmodifiableSetClass;
   final Field unmodifiableSetMap;
 
-  WasmConstantsBackend._(this.immutableMapClass, this.unmodifiableSetMap,
-      this.unmodifiableSetClass);
+  WasmConstantsBackend._(this.unmodifiableSetMap, this.unmodifiableSetClass);
 
   factory WasmConstantsBackend(CoreTypes coreTypes) {
-    final Library coreLibrary = coreTypes.coreLibrary;
-    final Class immutableMapClass = coreLibrary.classes
-        .firstWhere((Class klass) => klass.name == '_ImmutableMap');
     Field unmodifiableSetMap =
         coreTypes.index.getField('dart:collection', '_UnmodifiableSet', '_map');
 
-    return new WasmConstantsBackend._(immutableMapClass, unmodifiableSetMap,
-        unmodifiableSetMap.enclosingClass!);
-  }
-
-  @override
-  Constant lowerMapConstant(MapConstant constant) {
-    // The _ImmutableMap class is implemented via one field pointing to a list
-    // of key/value pairs -- see runtime/lib/immutable_map.dart!
-    final List<Constant> kvListPairs =
-        new List<Constant>.generate(2 * constant.entries.length, (int i) {
-      final int index = i ~/ 2;
-      final ConstantMapEntry entry = constant.entries[index];
-      return i % 2 == 0 ? entry.key : entry.value;
-    });
-    // This is a bit fishy, since we merge the key and the value type by
-    // putting both into the same list.
-    final ListConstant kvListConstant =
-        new ListConstant(const DynamicType(), kvListPairs);
-    assert(immutableMapClass.fields.length == 1);
-    final Field kvPairListField = immutableMapClass.fields[0];
-    return new InstanceConstant(immutableMapClass.reference, <DartType>[
-      constant.keyType,
-      constant.valueType,
-    ], <Reference, Constant>{
-      // We use getterReference as we refer to the field itself.
-      kvPairListField.getterReference: kvListConstant,
-    });
-  }
-
-  @override
-  bool isLoweredMapConstant(Constant constant) {
-    return constant is InstanceConstant &&
-        constant.classNode == immutableMapClass;
-  }
-
-  @override
-  void forEachLoweredMapConstantEntry(
-      Constant constant, void Function(Constant key, Constant value) f) {
-    assert(isLoweredMapConstant(constant));
-    final InstanceConstant instance = constant as InstanceConstant;
-    assert(immutableMapClass.fields.length == 1);
-    final Field kvPairListField = immutableMapClass.fields[0];
-    final ListConstant kvListConstant =
-        instance.fieldValues[kvPairListField.getterReference] as ListConstant;
-    assert(kvListConstant.entries.length % 2 == 0);
-    for (int index = 0; index < kvListConstant.entries.length; index += 2) {
-      f(kvListConstant.entries[index], kvListConstant.entries[index + 1]);
-    }
+    return new WasmConstantsBackend._(
+        unmodifiableSetMap, unmodifiableSetMap.enclosingClass!);
   }
 
   @override
diff --git a/pkg/dart2wasm/lib/dispatch_table.dart b/pkg/dart2wasm/lib/dispatch_table.dart
index 3c6b024..f257241 100644
--- a/pkg/dart2wasm/lib/dispatch_table.dart
+++ b/pkg/dart2wasm/lib/dispatch_table.dart
@@ -125,8 +125,8 @@
     List<w.ValueType> inputs = List.generate(
         inputSets.length,
         (i) => translator.typeForInfo(
-            upperBound(inputSets[i]), inputNullable[i]) as w.ValueType);
-    inputs[0] = translator.ensureBoxed(inputs[0]);
+                upperBound(inputSets[i]), inputNullable[i], ensureBoxed: i == 0)
+            as w.ValueType);
     if (name == '==') {
       // == can't be called with null
       inputs[1] = inputs[1].withNullability(false);
diff --git a/pkg/dart2wasm/lib/intrinsics.dart b/pkg/dart2wasm/lib/intrinsics.dart
index e795d85..0fa9329 100644
--- a/pkg/dart2wasm/lib/intrinsics.dart
+++ b/pkg/dart2wasm/lib/intrinsics.dart
@@ -16,6 +16,11 @@
 /// member in [generateMemberIntrinsic].
 class Intrinsifier {
   final CodeGenerator codeGen;
+
+  // The ABI type sizes are the same for 32-bit Wasm as for 32-bit ARM, so we
+  // can just use an ABI enum index corresponding to a 32-bit ARM platform.
+  static const int abiEnumIndex = 0; // androidArm
+
   static const w.ValueType boolType = w.NumType.i32;
   static const w.ValueType intType = w.NumType.i64;
   static const w.ValueType doubleType = w.NumType.f64;
@@ -145,6 +150,33 @@
       return w.NumType.i64;
     }
 
+    // _HashAbstractImmutableBase._indexNullable
+    if (node.interfaceTarget == translator.immutableMapIndexNullable) {
+      ClassInfo info = translator.classInfo[translator.hashFieldBaseClass]!;
+      codeGen.wrap(node.receiver, info.nullableType);
+      b.struct_get(info.struct, FieldIndex.hashBaseIndex);
+      return info.struct.fields[FieldIndex.hashBaseIndex].type.unpacked;
+    }
+
+    // _Compound._typedDataBase
+    if (node.interfaceTarget.enclosingClass == translator.ffiCompoundClass &&
+        name == '_typedDataBase') {
+      // A compound (subclass of Struct or Union) is represented by its i32
+      // address. The _typedDataBase field contains a Pointer pointing to the
+      // compound, whose representation is the same.
+      codeGen.wrap(node.receiver, w.NumType.i32);
+      return w.NumType.i32;
+    }
+
+    // Pointer.address
+    if (node.interfaceTarget.enclosingClass == translator.ffiPointerClass &&
+        name == 'address') {
+      // A Pointer is represented by its i32 address.
+      codeGen.wrap(node.receiver, w.NumType.i32);
+      b.i64_extend_i32_u();
+      return w.NumType.i64;
+    }
+
     return null;
   }
 
@@ -393,6 +425,31 @@
     if (receiver is ConstantExpression &&
         receiver.constant is ListConstant &&
         name == '[]') {
+      Expression arg = node.arguments.positional.single;
+
+      // If the list is indexed by a constant, or the ABI index, just pick
+      // the element at that constant index.
+      int? constIndex = null;
+      if (arg is IntLiteral) {
+        constIndex = arg.value;
+      } else if (arg is ConstantExpression) {
+        Constant argConst = arg.constant;
+        if (argConst is IntConstant) {
+          constIndex = argConst.value;
+        }
+      } else if (arg is StaticInvocation) {
+        if (arg.target.enclosingLibrary.name == "dart.ffi" &&
+            arg.name.text == "_abi") {
+          constIndex = abiEnumIndex;
+        }
+      }
+      if (constIndex != null) {
+        ListConstant list = receiver.constant as ListConstant;
+        Expression element = ConstantExpression(list.entries[constIndex]);
+        return codeGen.wrap(element, typeOfExp(element));
+      }
+
+      // Access the underlying array directly.
       ClassInfo info = translator.classInfo[translator.listBaseClass]!;
       w.RefType listType = info.nullableType;
       Field arrayField = translator.listBaseClass.fields
@@ -403,7 +460,7 @@
               as w.ArrayType;
       codeGen.wrap(receiver, listType);
       b.struct_get(info.struct, arrayFieldIndex);
-      codeGen.wrap(node.arguments.positional.single, w.NumType.i64);
+      codeGen.wrap(arg, w.NumType.i64);
       b.i32_wrap_i64();
       b.array_get(arrayType);
       return translator.topInfo.nullableType;
@@ -444,6 +501,7 @@
     w.ValueType leftType = typeOfExp(node.left);
     w.ValueType rightType = typeOfExp(node.right);
 
+    // Compare bool or Pointer
     if (leftType == boolType && rightType == boolType) {
       codeGen.wrap(node.left, w.NumType.i32);
       codeGen.wrap(node.right, w.NumType.i32);
@@ -451,6 +509,7 @@
       return w.NumType.i32;
     }
 
+    // Compare int
     if (leftType == intType && rightType == intType) {
       codeGen.wrap(node.left, w.NumType.i64);
       codeGen.wrap(node.right, w.NumType.i64);
@@ -458,6 +517,7 @@
       return w.NumType.i32;
     }
 
+    // Compare double
     if (leftType == doubleType && rightType == doubleType) {
       codeGen.wrap(node.left, w.NumType.f64);
       codeGen.wrap(node.right, w.NumType.f64);
@@ -484,6 +544,14 @@
       return w.NumType.i64;
     }
 
+    // nullptr
+    if (target.enclosingLibrary.name == "dart.ffi" &&
+        target.name.text == "nullptr") {
+      // A Pointer is represented by its i32 address.
+      b.i32_const(0);
+      return w.NumType.i32;
+    }
+
     return null;
   }
 
@@ -534,6 +602,16 @@
           b.i32_wrap_i64();
           b.struct_set(translator.objectInfo.struct, FieldIndex.identityHash);
           return codeGen.voidMarker;
+        case "_throwObjectWithStackTrace":
+          Expression object = node.arguments.positional[0];
+          Expression stackTrace = node.arguments.positional[1];
+          w.ValueType objectType = translator.topInfo.nonNullableType;
+          w.ValueType stackTraceType =
+              translator.stackTraceInfo.nonNullableType;
+          codeGen.wrap(object, objectType);
+          codeGen.wrap(stackTrace, stackTraceType);
+          b.throw_(translator.exceptionTag);
+          return codeGen.voidMarker;
       }
     }
 
@@ -541,10 +619,14 @@
     if (node.target.enclosingLibrary.name == "dart._internal") {
       switch (name) {
         case "unsafeCast":
+        case "unsafeCastOpaque":
           w.ValueType targetType =
               translator.translateType(node.arguments.types.single);
           Expression operand = node.arguments.positional.single;
           return codeGen.wrap(operand, targetType);
+        case "_nativeEffect":
+          // Ignore argument
+          return translator.voidMarker;
         case "allocateOneByteString":
           ClassInfo info = translator.classInfo[translator.oneByteStringClass]!;
           translator.functions.allocateClass(info.classId);
@@ -637,6 +719,123 @@
       }
     }
 
+    // dart:ffi static functions
+    if (node.target.enclosingLibrary.name == "dart.ffi") {
+      // Pointer.fromAddress
+      if (name == "fromAddress") {
+        // A Pointer is represented by its i32 address.
+        codeGen.wrap(node.arguments.positional.single, w.NumType.i64);
+        b.i32_wrap_i64();
+        return w.NumType.i32;
+      }
+
+      // Accesses to Pointer.value, Pointer.value=, Pointer.[], Pointer.[]= and
+      // the members of structs and unions are desugared by the FFI kernel
+      // transformations into calls to memory load and store functions.
+      RegExp loadStoreFunctionNames = RegExp("^_(load|store)"
+          "((Int|Uint)(8|16|32|64)|(Float|Double)(Unaligned)?|Pointer)\$");
+      if (loadStoreFunctionNames.hasMatch(name)) {
+        Expression pointerArg = node.arguments.positional[0];
+        Expression offsetArg = node.arguments.positional[1];
+        codeGen.wrap(pointerArg, w.NumType.i32);
+        int offset;
+        if (offsetArg is IntLiteral) {
+          offset = offsetArg.value;
+        } else if (offsetArg is ConstantExpression &&
+            offsetArg.constant is IntConstant) {
+          offset = (offsetArg.constant as IntConstant).value;
+        } else {
+          codeGen.wrap(offsetArg, w.NumType.i64);
+          b.i32_wrap_i64();
+          b.i32_add();
+          offset = 0;
+        }
+        switch (name) {
+          case "_loadInt8":
+            b.i64_load8_s(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadUint8":
+            b.i64_load8_u(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadInt16":
+            b.i64_load16_s(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadUint16":
+            b.i64_load16_u(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadInt32":
+            b.i64_load32_s(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadUint32":
+            b.i64_load32_u(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadInt64":
+          case "_loadUint64":
+            b.i64_load(translator.ffiMemory, offset);
+            return w.NumType.i64;
+          case "_loadFloat":
+            b.f32_load(translator.ffiMemory, offset);
+            b.f64_promote_f32();
+            return w.NumType.f64;
+          case "_loadFloatUnaligned":
+            b.f32_load(translator.ffiMemory, offset, 0);
+            b.f64_promote_f32();
+            return w.NumType.f64;
+          case "_loadDouble":
+            b.f64_load(translator.ffiMemory, offset);
+            return w.NumType.f64;
+          case "_loadDoubleUnaligned":
+            b.f64_load(translator.ffiMemory, offset, 0);
+            return w.NumType.f64;
+          case "_loadPointer":
+            b.i32_load(translator.ffiMemory, offset);
+            return w.NumType.i32;
+          case "_storeInt8":
+          case "_storeUint8":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.i64);
+            b.i64_store8(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeInt16":
+          case "_storeUint16":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.i64);
+            b.i64_store16(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeInt32":
+          case "_storeUint32":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.i64);
+            b.i64_store32(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeInt64":
+          case "_storeUint64":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.i64);
+            b.i64_store(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeFloat":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.f64);
+            b.f32_demote_f64();
+            b.f32_store(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeFloatUnaligned":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.f64);
+            b.f32_demote_f64();
+            b.f32_store(translator.ffiMemory, offset, 0);
+            return translator.voidMarker;
+          case "_storeDouble":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.f64);
+            b.f64_store(translator.ffiMemory, offset);
+            return translator.voidMarker;
+          case "_storeDoubleUnaligned":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.f64);
+            b.f64_store(translator.ffiMemory, offset, 0);
+            return translator.voidMarker;
+          case "_storePointer":
+            codeGen.wrap(node.arguments.positional[2], w.NumType.i32);
+            b.i32_store(translator.ffiMemory, offset);
+            return translator.voidMarker;
+        }
+      }
+    }
+
     // Wasm(Int|Float|Object)Array constructors
     if (node.target.enclosingClass?.superclass ==
         translator.wasmArrayBaseClass) {
@@ -676,6 +875,21 @@
     return null;
   }
 
+  w.ValueType? generateConstructorIntrinsic(ConstructorInvocation node) {
+    String name = node.name.text;
+
+    // _Compound.#fromTypedDataBase
+    if (name == "#fromTypedDataBase") {
+      // A compound (subclass of Struct or Union) is represented by its i32
+      // address. The argument to the #fromTypedDataBase constructor is a
+      // Pointer, whose representation is the same.
+      codeGen.wrap(node.arguments.positional.single, w.NumType.i32);
+      return w.NumType.i32;
+    }
+
+    return null;
+  }
+
   bool generateMemberIntrinsic(Reference target, w.DefinedFunction function,
       List<w.Local> paramLocals, w.Label? returnLabel) {
     Member member = target.asMember;
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart
index fa68680..cb5310be 100644
--- a/pkg/dart2wasm/lib/target.dart
+++ b/pkg/dart2wasm/lib/target.dart
@@ -11,6 +11,12 @@
 import 'package:kernel/target/targets.dart';
 import 'package:vm/transformations/mixin_full_resolution.dart'
     as transformMixins show transformLibraries;
+import 'package:vm/transformations/ffi/common.dart' as ffiHelper
+    show calculateTransitiveImportsOfDartFfiIfUsed;
+import 'package:vm/transformations/ffi/definitions.dart'
+    as transformFfiDefinitions show transformLibraries;
+import 'package:vm/transformations/ffi/use_sites.dart' as transformFfiUseSites
+    show transformLibraries;
 
 import 'package:dart2wasm/constants_backend.dart';
 import 'package:dart2wasm/transformers.dart' as wasmTrans;
@@ -18,7 +24,7 @@
 class WasmTarget extends Target {
   Class? _growableList;
   Class? _immutableList;
-  Class? _immutableMap;
+  Class? _wasmImmutableLinkedHashMap;
   Class? _unmodifiableSet;
   Class? _compactLinkedCustomHashMap;
   Class? _compactLinkedHashSet;
@@ -35,6 +41,15 @@
   TargetFlags get flags => TargetFlags(enableNullSafety: true);
 
   @override
+  List<String> get extraRequiredLibraries => const <String>[
+        'dart:ffi',
+        'dart:_internal',
+        'dart:typed_data',
+        'dart:nativewrappers',
+        'dart:js_util_wasm',
+      ];
+
+  @override
   List<String> get extraIndexedLibraries => const <String>[
         "dart:collection",
         "dart:typed_data",
@@ -82,6 +97,24 @@
         this, coreTypes, hierarchy, libraries, referenceFromIndex);
     logger?.call("Transformed mixin applications");
 
+    List<Library>? transitiveImportingDartFfi = ffiHelper
+        .calculateTransitiveImportsOfDartFfiIfUsed(component, libraries);
+    if (transitiveImportingDartFfi == null) {
+      logger?.call("Skipped ffi transformation");
+    } else {
+      transformFfiDefinitions.transformLibraries(
+          component,
+          coreTypes,
+          hierarchy,
+          transitiveImportingDartFfi,
+          diagnosticReporter,
+          referenceFromIndex,
+          changedStructureNotifier);
+      transformFfiUseSites.transformLibraries(component, coreTypes, hierarchy,
+          transitiveImportingDartFfi, diagnosticReporter, referenceFromIndex);
+      logger?.call("Transformed ffi annotations");
+    }
+
     wasmTrans.transformLibraries(libraries, coreTypes, hierarchy);
   }
 
@@ -157,8 +190,8 @@
 
   @override
   Class concreteConstMapLiteralClass(CoreTypes coreTypes) {
-    return _immutableMap ??=
-        coreTypes.index.getClass('dart:collection', '_ImmutableMap');
+    return _wasmImmutableLinkedHashMap ??= coreTypes.index
+        .getClass('dart:collection', '_WasmImmutableLinkedHashMap');
   }
 
   @override
diff --git a/pkg/dart2wasm/lib/translator.dart b/pkg/dart2wasm/lib/translator.dart
index 36a4b0d..3bf91b4 100644
--- a/pkg/dart2wasm/lib/translator.dart
+++ b/pkg/dart2wasm/lib/translator.dart
@@ -32,12 +32,12 @@
   bool lazyConstants = false;
   bool localNullability = false;
   bool nameSection = true;
-  bool nominalTypes = false;
+  bool nominalTypes = true;
   bool parameterNullability = true;
   bool polymorphicSpecialization = false;
   bool printKernel = false;
   bool printWasm = false;
-  bool runtimeTypes = true;
+  bool runtimeTypes = false;
   bool stringDataSegments = false;
   List<int>? watchPoints = null;
 
@@ -77,20 +77,27 @@
   late final Class fixedLengthListClass;
   late final Class growableListClass;
   late final Class immutableListClass;
+  late final Class immutableMapClass;
+  late final Class hashFieldBaseClass;
   late final Class stringBaseClass;
   late final Class oneByteStringClass;
   late final Class twoByteStringClass;
   late final Class typeClass;
+  late final Class stackTraceClass;
+  late final Class ffiCompoundClass;
+  late final Class ffiPointerClass;
   late final Class typedListBaseClass;
   late final Class typedListClass;
   late final Class typedListViewClass;
   late final Class byteDataViewClass;
-  late final Class stackTraceClass;
+  late final Class typeErrorClass;
   late final Procedure stackTraceCurrent;
   late final Procedure stringEquals;
   late final Procedure stringInterpolate;
+  late final Procedure throwNullCheckError;
   late final Procedure mapFactory;
   late final Procedure mapPut;
+  late final Procedure immutableMapIndexNullable;
   late final Map<Class, w.StorageType> builtinTypes;
   late final Map<w.ValueType, Class> boxedClasses;
 
@@ -112,7 +119,10 @@
   late final w.Module m;
   late final w.DefinedFunction initFunction;
   late final w.ValueType voidMarker;
+  // Lazily create exception tag if used.
   late final w.Tag exceptionTag = createExceptionTag();
+  // Lazily import FFI memory if used.
+  late final w.Memory ffiMemory = m.importMemory("ffi", "memory", 0);
 
   // Caches for when identical source constructs need a common representation.
   final Map<w.StorageType, w.ArrayType> arrayTypeCache = {};
@@ -135,29 +145,17 @@
     dispatchTable = DispatchTable(this);
     functions = FunctionCollector(this);
 
-    Library coreLibrary =
-        component.libraries.firstWhere((l) => l.name == "dart.core");
-    Class lookupCore(String name) {
-      return coreLibrary.classes.firstWhere((c) => c.name == name);
+    Class Function(String) makeLookup(String libraryName) {
+      Library library =
+          component.libraries.firstWhere((l) => l.name == libraryName);
+      return (name) => library.classes.firstWhere((c) => c.name == name);
     }
 
-    Library collectionLibrary =
-        component.libraries.firstWhere((l) => l.name == "dart.collection");
-    Class lookupCollection(String name) {
-      return collectionLibrary.classes.firstWhere((c) => c.name == name);
-    }
-
-    Library typedDataLibrary =
-        component.libraries.firstWhere((l) => l.name == "dart.typed_data");
-    Class lookupTypedData(String name) {
-      return typedDataLibrary.classes.firstWhere((c) => c.name == name);
-    }
-
-    Library wasmLibrary =
-        component.libraries.firstWhere((l) => l.name == "dart.wasm");
-    Class lookupWasm(String name) {
-      return wasmLibrary.classes.firstWhere((c) => c.name == name);
-    }
+    Class Function(String) lookupCore = makeLookup("dart.core");
+    Class Function(String) lookupCollection = makeLookup("dart.collection");
+    Class Function(String) lookupFfi = makeLookup("dart.ffi");
+    Class Function(String) lookupTypedData = makeLookup("dart.typed_data");
+    Class Function(String) lookupWasm = makeLookup("dart.wasm");
 
     wasmTypesBaseClass = lookupWasm("_WasmBase");
     wasmArrayBaseClass = lookupWasm("_WasmArray");
@@ -172,11 +170,16 @@
     listBaseClass = lookupCore("_ListBase");
     growableListClass = lookupCore("_GrowableList");
     immutableListClass = lookupCore("_ImmutableList");
+    immutableMapClass = lookupCollection("_WasmImmutableLinkedHashMap");
+    hashFieldBaseClass = lookupCollection("_HashFieldBase");
     stringBaseClass = lookupCore("_StringBase");
     oneByteStringClass = lookupCore("_OneByteString");
     twoByteStringClass = lookupCore("_TwoByteString");
     typeClass = lookupCore("_Type");
     stackTraceClass = lookupCore("StackTrace");
+    ffiCompoundClass = lookupFfi("_Compound");
+    ffiPointerClass = lookupFfi("Pointer");
+    typeErrorClass = lookupCore("_TypeError");
     typedListBaseClass = lookupTypedData("_TypedListBase");
     typedListClass = lookupTypedData("_TypedList");
     typedListViewClass = lookupTypedData("_TypedListView");
@@ -187,13 +190,17 @@
         stringBaseClass.procedures.firstWhere((p) => p.name.text == "==");
     stringInterpolate = stringBaseClass.procedures
         .firstWhere((p) => p.name.text == "_interpolate");
+    throwNullCheckError = typeErrorClass.procedures
+        .firstWhere((p) => p.name.text == "_throwNullCheckError");
     mapFactory = lookupCollection("LinkedHashMap").procedures.firstWhere(
         (p) => p.kind == ProcedureKind.Factory && p.name.text == "_default");
     mapPut = lookupCollection("_CompactLinkedCustomHashMap")
-        .superclass! // _HashBase
         .superclass! // _LinkedHashMapMixin<K, V>
         .procedures
         .firstWhere((p) => p.name.text == "[]=");
+    immutableMapIndexNullable = lookupCollection("_HashAbstractImmutableBase")
+        .procedures
+        .firstWhere((p) => p.name.text == "_indexNullable");
     builtinTypes = {
       coreTypes.boolClass: w.NumType.i32,
       coreTypes.intClass: w.NumType.i64,
@@ -210,6 +217,7 @@
       lookupWasm("WasmI64"): w.NumType.i64,
       lookupWasm("WasmF32"): w.NumType.f32,
       lookupWasm("WasmF64"): w.NumType.f64,
+      ffiPointerClass: w.NumType.i32,
     };
     boxedClasses = {
       w.NumType.i32: boxedBoolClass,
@@ -352,9 +360,9 @@
   /// [stackTraceInfo.nonNullableType] to hold a stack trace. This single
   /// exception tag is used to throw and catch all Dart exceptions.
   w.Tag createExceptionTag() {
-    w.FunctionType functionType = m.addFunctionType(
+    w.FunctionType tagType = functionType(
         [topInfo.nonNullableType, stackTraceInfo.nonNullableType], const []);
-    w.Tag tag = m.addTag(functionType);
+    w.Tag tag = m.addTag(tagType);
     return tag;
   }
 
@@ -364,28 +372,39 @@
     throw "Packed types are only allowed in arrays and fields";
   }
 
-  bool isWasmType(Class cls) {
+  bool _hasSuperclass(Class cls, Class superclass) {
     while (cls.superclass != null) {
       cls = cls.superclass!;
-      if (cls == wasmTypesBaseClass) return true;
+      if (cls == superclass) return true;
     }
     return false;
   }
 
-  w.StorageType typeForInfo(ClassInfo info, bool nullable) {
+  bool isWasmType(Class cls) => _hasSuperclass(cls, wasmTypesBaseClass);
+
+  bool isFfiCompound(Class cls) => _hasSuperclass(cls, ffiCompoundClass);
+
+  w.StorageType typeForInfo(ClassInfo info, bool nullable,
+      {bool ensureBoxed = false}) {
     Class? cls = info.cls;
     if (cls != null) {
       w.StorageType? builtin = builtinTypes[cls];
       if (builtin != null) {
-        if (!nullable) return builtin;
+        if (!nullable && (!ensureBoxed || cls == ffiPointerClass)) {
+          return builtin;
+        }
         if (isWasmType(cls)) {
           if (builtin.isPrimitive) throw "Wasm numeric types can't be nullable";
           return (builtin as w.RefType).withNullability(true);
         }
+        if (cls == ffiPointerClass) throw "FFI types can't be nullable";
         Class? boxedClass = boxedClasses[builtin];
         if (boxedClass != null) {
           info = classInfo[boxedClass]!;
         }
+      } else if (isFfiCompound(cls)) {
+        if (nullable) throw "FFI types can't be nullable";
+        return w.NumType.i32;
       }
     }
     return w.RefType.def(info.repr.struct,
@@ -522,13 +541,6 @@
     });
   }
 
-  w.ValueType ensureBoxed(w.ValueType type) {
-    // Box receiver if it's primitive
-    if (type is w.RefType) return type;
-    return w.RefType.def(classInfo[boxedClasses[type]!]!.struct,
-        nullable: false);
-  }
-
   w.ValueType typeForLocal(w.ValueType type) {
     return options.localNullability ? type : type.withNullability(true);
   }
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index d135042..7c823da 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -205,6 +205,7 @@
       _shutdownResponseReceived = true;
       return null;
     }).timeout(timeout, onTimeout: () async {
+      log.stderr('The analysis server timed out while shutting down.');
       await dispose();
     }).then((value) async {
       await dispose();
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 7bcc9c5..10d97e2 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -144,7 +144,7 @@
     await server.analysisFinished;
     analysisFinished = true;
 
-    await server.shutdown(timeout: Duration(milliseconds: 100));
+    await server.shutdown(timeout: Duration(seconds: 1));
 
     progress?.finish(showTiming: true);
 
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 295bc86..9b497f6 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -112,6 +112,12 @@
         allowed: verbosityOption.allowed,
         allowedHelp: verbosityOption.allowedHelp,
       )
+      ..addOption(
+        packagesOption.flag,
+        abbr: packagesOption.abbr,
+        valueHelp: packagesOption.valueHelp,
+        help: packagesOption.help,
+      )
       ..addMultiOption(
         defineOption.flag,
         help: defineOption.help,
@@ -158,12 +164,18 @@
 
     final enabledExperiments = args.enabledExperiments;
     final environmentVars = args['define'] ?? <String, String>{};
+
     // Build arguments.
-    List<String> buildArgs = [];
+    final buildArgs = <String>[];
     buildArgs.add('--snapshot-kind=$formatName');
     buildArgs.add('--snapshot=${path.canonicalize(outputFile)}');
 
-    String? verbosity = args[verbosityOption.flag];
+    final String? packages = args[packagesOption.flag];
+    if (packages != null) {
+      buildArgs.add('--packages=$packages');
+    }
+
+    final String? verbosity = args[verbosityOption.flag];
     buildArgs.add('--verbosity=$verbosity');
 
     if (enabledExperiments.isNotEmpty) {
@@ -226,13 +238,12 @@
       )
       ..addFlag('enable-asserts',
           negatable: false, help: 'Enable assert statements.')
-      ..addOption('packages',
-          abbr: 'p',
-          valueHelp: 'path',
-          help:
-              '''Get package locations from the specified file instead of .packages.
-<path> can be relative or absolute.
-For example: dart compile $commandName --packages=/tmp/pkgs main.dart''')
+      ..addOption(
+        packagesOption.flag,
+        abbr: packagesOption.abbr,
+        valueHelp: packagesOption.valueHelp,
+        help: packagesOption.help,
+      )
       ..addFlag('sound-null-safety',
           help: 'Respect the nullability of types at runtime.',
           defaultsTo: null)
@@ -319,7 +330,9 @@
     allowed: Verbosity.allowedValues,
     allowedHelp: Verbosity.allowedValuesHelp,
   );
+
   late final Option defineOption;
+  late final Option packagesOption;
 
   CompileSubcommandCommand(String name, String description, bool verbose,
       {bool hidden = false})
@@ -331,6 +344,14 @@
 Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
 For example: dart compile $name -Da=1,b=2 main.dart''',
         ),
+        packagesOption = Option(
+            flag: 'packages',
+            abbr: 'p',
+            valueHelp: 'path',
+            help:
+                '''Get package locations from the specified file instead of .packages.
+<path> can be relative or absolute.
+For example: dart compile $name --packages=/tmp/pkgs main.dart'''),
         super(name, description, verbose, hidden: hidden);
 }
 
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index dffebaa..0e78626 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -215,7 +215,7 @@
     for (var originalFile in dartFiles) {
       var filePath = originalFile.path;
       var baseName = path.basename(filePath);
-      var expectFileName = baseName + '.expect';
+      var expectFileName = '$baseName.expect';
       var expectFilePath = path.join(path.dirname(filePath), expectFileName);
       var expectFile = expectFileMap.remove(expectFilePath);
       if (expectFile == null) {
diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart
index 94b0141..39e5ea4 100644
--- a/pkg/dartdev/lib/src/commands/run.dart
+++ b/pkg/dartdev/lib/src/commands/run.dart
@@ -222,6 +222,8 @@
       final bool debugDds = args['debug-dds'];
 
       bool disableServiceAuthCodes = args['disable-service-auth-codes'];
+      final bool enableServicePortFallback =
+          args['enable-service-port-fallback'];
 
       // If the user wants to start a debugging session we need to do some extra
       // work and spawn a Dart Development Service (DDS) instance. DDS is a VM
@@ -237,6 +239,7 @@
           disableServiceAuthCodes,
           launchDevTools,
           debugDds,
+          enableServicePortFallback,
         )) {
           return errorExitCode;
         }
@@ -274,6 +277,7 @@
     bool disableServiceAuthCodes,
     bool enableDevTools,
     bool debugDds,
+    bool enableServicePortFallback,
   ) async {
     final sdkDir = dirname(sdk.dart);
     final fullSdk = sdkDir.endsWith('bin');
@@ -303,6 +307,7 @@
         enableDevTools.toString(),
         devToolsBinaries,
         debugDds.toString(),
+        enableServicePortFallback.toString(),
       ],
       mode: ProcessStartMode.detachedWithStdio,
     );
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index 439bdfd..de1b55e 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -171,8 +171,8 @@
   PackageConfig(this.contents);
 
   List<Map<String, dynamic>?> get packages {
-    List<dynamic> _packages = contents['packages'];
-    return _packages.map<Map<String, dynamic>?>(castStringKeyedMap).toList();
+    List<dynamic> packages = contents['packages'];
+    return packages.map<Map<String, dynamic>?>(castStringKeyedMap).toList();
   }
 
   bool hasDependency(String packageName) =>
diff --git a/pkg/dartdev/lib/src/templates/console.dart b/pkg/dartdev/lib/src/templates/console.dart
index 8dae875..2739575 100644
--- a/pkg/dartdev/lib/src/templates/console.dart
+++ b/pkg/dartdev/lib/src/templates/console.dart
@@ -48,7 +48,7 @@
 #   path: ^1.8.0
 
 dev_dependencies:
-  lints: ^1.0.0
+  lints: ^2.0.0
   test: ^1.16.0
 ''';
 
diff --git a/pkg/dartdev/lib/src/templates/console_simple.dart b/pkg/dartdev/lib/src/templates/console_simple.dart
index 8ab68be..4b2c34f 100644
--- a/pkg/dartdev/lib/src/templates/console_simple.dart
+++ b/pkg/dartdev/lib/src/templates/console_simple.dart
@@ -46,7 +46,7 @@
 #   path: ^1.8.0
 
 dev_dependencies:
-  lints: ^1.0.0
+  lints: ^2.0.0
 ''';
 
 final String _readme = '''
diff --git a/pkg/dartdev/lib/src/templates/package.dart b/pkg/dartdev/lib/src/templates/package.dart
index e92049d..3f6dd0f 100644
--- a/pkg/dartdev/lib/src/templates/package.dart
+++ b/pkg/dartdev/lib/src/templates/package.dart
@@ -65,7 +65,7 @@
 #   path: ^1.8.0
 
 dev_dependencies:
-  lints: ^1.0.0
+  lints: ^2.0.0
   test: ^1.16.0
 ''';
 
diff --git a/pkg/dartdev/lib/src/templates/server_shelf.dart b/pkg/dartdev/lib/src/templates/server_shelf.dart
index 023ffea..1144a53 100644
--- a/pkg/dartdev/lib/src/templates/server_shelf.dart
+++ b/pkg/dartdev/lib/src/templates/server_shelf.dart
@@ -54,7 +54,7 @@
 
 dev_dependencies:
   http: ^0.13.0
-  lints: ^1.0.0
+  lints: ^2.0.0
   test: ^1.15.0
 ''';
 
@@ -136,11 +136,11 @@
   final ip = InternetAddress.anyIPv4;
 
   // Configure a pipeline that logs requests.
-  final _handler = Pipeline().addMiddleware(logRequests()).addHandler(_router);
+  final handler = Pipeline().addMiddleware(logRequests()).addHandler(_router);
 
   // For running in containers, we respect the PORT environment variable.
   final port = int.parse(Platform.environment['PORT'] ?? '8080');
-  final server = await serve(_handler, ip, port);
+  final server = await serve(handler, ip, port);
   print('Server listening on port ${server.port}');
 }
 ''';
@@ -205,19 +205,19 @@
   tearDown(() => p.kill());
 
   test('Root', () async {
-    final response = await get(Uri.parse(host + '/'));
+    final response = await get(Uri.parse('$host/'));
     expect(response.statusCode, 200);
     expect(response.body, 'Hello, World!\n');
   });
 
   test('Echo', () async {
-    final response = await get(Uri.parse(host + '/echo/hello'));
+    final response = await get(Uri.parse('$host/echo/hello'));
     expect(response.statusCode, 200);
     expect(response.body, 'hello\n');
   });
 
   test('404', () async {
-    final response = await get(Uri.parse(host + '/foobar'));
+    final response = await get(Uri.parse('$host/foobar'));
     expect(response.statusCode, 404);
   });
 }
diff --git a/pkg/dartdev/lib/src/templates/web.dart b/pkg/dartdev/lib/src/templates/web.dart
index 19868273..b615754 100644
--- a/pkg/dartdev/lib/src/templates/web.dart
+++ b/pkg/dartdev/lib/src/templates/web.dart
@@ -54,7 +54,7 @@
 dev_dependencies:
   build_runner: ^2.1.4
   build_web_compilers: ^3.2.1
-  lints: ^1.0.0
+  lints: ^2.0.0
 ''';
 
 final String _readme = '''
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index a75b441..2ca1456 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -338,7 +338,7 @@
   });
 
   test('info implicit no --fatal-infos', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}String foo() {}');
     var result = await p.run(['analyze', p.dirPath]);
 
     expect(result.exitCode, 0);
@@ -347,7 +347,7 @@
   });
 
   test('info --fatal-infos', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}String foo() {}');
     var result = await p.run(['analyze', '--fatal-infos', p.dirPath]);
 
     expect(result.exitCode, 1);
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index bac5e34..e5c15b0 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -4,6 +4,8 @@
 
 import 'dart:io';
 
+import 'package:dart2native/macho.dart';
+import 'package:dart2native/macho_parser.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
@@ -21,6 +23,61 @@
 
 void defineCompileTests() {
   final isRunningOnIA32 = Platform.version.contains('ia32');
+
+  if (Platform.isMacOS) {
+    test('Compile exe for MacOS signing', () async {
+      final p = project(mainSrc: '''void main() {}''');
+      final inFile =
+          path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+      final outFile = path.canonicalize(path.join(p.dirPath, 'myexe'));
+
+      var result = await p.run(
+        [
+          'compile',
+          'exe',
+          '-o',
+          outFile,
+          inFile,
+        ],
+      );
+
+      expect(result.stdout, contains(soundNullSafetyMessage));
+      expect(result.stderr, isEmpty);
+      expect(result.exitCode, 0);
+      expect(File(outFile).existsSync(), true,
+          reason: 'File not found: $outFile');
+
+      // Ensure the file contains the __CUSTOM segment.
+      final machOFile = MachOFile();
+      await machOFile.loadFromFile(File(outFile));
+
+      // Throws an exception (and thus the test fails) if the segment doesn't
+      // exist.
+      machOFile.commands.where((segment) {
+        if (segment.asType() is MachOSegmentCommand64) {
+          final segmentName = (segment as MachOSegmentCommand64).segname;
+          final segmentNameTrimmed = String.fromCharCodes(
+              segmentName.takeWhile((value) => value != 0));
+          return segmentNameTrimmed == '__CUSTOM';
+        } else {
+          return false;
+        }
+      }).first;
+
+      // Ensure that the exe can be signed.
+      final codeSigningProcess = await Process.start('codesign', [
+        '-o',
+        'runtime',
+        '-s',
+        '-',
+        outFile,
+      ]);
+
+      final signingResult = await codeSigningProcess.exitCode;
+      expect(signingResult, 0);
+    }, skip: isRunningOnIA32);
+  }
+
   // *** NOTE ***: These tests *must* be run with the `--use-sdk` option
   // as they depend on a fully built SDK to resolve various snapshot files
   // used by compilation.
@@ -153,9 +210,9 @@
       [],
     );
 
-    expect(result.stdout, contains('I love executables'));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
+    expect(result.stdout, contains('I love executables'));
   }, skip: isRunningOnIA32);
 
   test('Compile to executable disabled on IA32', () async {
@@ -220,9 +277,9 @@
       [],
     );
 
-    expect(result.stdout, contains('42'));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
+    expect(result.stdout, contains('42'));
   }, skip: isRunningOnIA32);
 
   test('Compile and run aot snapshot', () async {
@@ -443,9 +500,9 @@
       [],
     );
 
-    expect(result.stdout, contains('sound'));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
+    expect(result.stdout, contains('sound'));
   }, skip: isRunningOnIA32);
 
   test('Compile and run exe with --no-sound-null-safety', () async {
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
index 8aa3d74..1c9946c 100644
--- a/pkg/dartdev/test/commands/help_test.dart
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -18,14 +18,14 @@
   tearDown(() async => await p.dispose());
 
   /// Commands not tested by the following loop.
-  List<String> _commandsNotTested = <String>[
+  List<String> commandsNotTested = <String>[
     'help', // `dart help help` is redundant
     'test', // `dart help test` does not call `test:test --help`.
   ];
   DartdevRunner(['--no-analytics'])
       .commands
       .forEach((String commandKey, Command command) {
-    if (!_commandsNotTested.contains(commandKey)) {
+    if (!commandsNotTested.contains(commandKey)) {
       test('(help $commandKey == $commandKey --help)', () async {
         p = project();
         var result = await p.run(['help', commandKey]);
diff --git a/pkg/dartdev/test/commands/migrate_test.dart b/pkg/dartdev/test/commands/migrate_test.dart
index 24b0614..4ad721e 100644
--- a/pkg/dartdev/test/commands/migrate_test.dart
+++ b/pkg/dartdev/test/commands/migrate_test.dart
@@ -54,7 +54,7 @@
   });
 
   test('directory implicit', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}int get foo => 1;\n');
     var result =
         await p.run(['migrate', '--no-web-preview'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
@@ -63,7 +63,7 @@
   });
 
   test('directory explicit', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}int get foo => 1;\n');
     var result = await p.run(['migrate', '--no-web-preview', p.dirPath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
diff --git a/pkg/dartdev/test/commands/run_test.dart b/pkg/dartdev/test/commands/run_test.dart
index 40978d9..fc8bee9 100644
--- a/pkg/dartdev/test/commands/run_test.dart
+++ b/pkg/dartdev/test/commands/run_test.dart
@@ -14,7 +14,8 @@
 const String soundNullSafetyMessage = 'Info: Compiling with sound null safety';
 const devToolsMessagePrefix =
     'The Dart DevTools debugger and profiler is available at: http://127.0.0.1:';
-const observatoryMessagePrefix = 'Observatory listening on http://127.0.0.1:';
+const dartVMServiceMessagePrefix =
+    'The Dart VM service is listening on http://127.0.0.1:';
 
 void main() {
   group('run', run, timeout: longTimeout);
@@ -214,7 +215,7 @@
     expect(
       result.stdout,
       matches(
-          r'Observatory listening on http:\/\/127.0.0.1:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
+          r'The Dart VM service is listening on http:\/\/127.0.0.1:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -236,7 +237,7 @@
 
     expect(
       result.stdout,
-      contains('Observatory listening on http://127.0.0.1:8181/\n'),
+      contains('The Dart VM service is listening on http://127.0.0.1:8181/\n'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -258,7 +259,7 @@
     expect(
       result.stdout,
       matches(
-          r'Observatory listening on http:\/\/\[::1\]:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
+          r'The Dart VM service is listening on http:\/\/\[::1\]:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -333,6 +334,26 @@
     expect(result.exitCode, 0);
   });
 
+  test('--enable-service-port-fallback', () async {
+    final p = project(mainSrc: '''void main() {}''');
+    final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
+    final result = await p.run(
+      [
+        'run',
+        '--enable-vm-service=${server.port}',
+        '--enable-service-port-fallback',
+        p.relativeFilePath,
+      ],
+    );
+    final regexp = RegExp(
+      r'The Dart VM service is listening on http:\/\/127.0.0.1:(\d*)\/[a-zA-Z0-9_-]+=\/\n.*',
+    );
+    final vmServicePort =
+        int.parse(regexp.firstMatch(result.stdout)!.group(1)!);
+    expect(server.port != vmServicePort, isTrue);
+    await server.close();
+  });
+
   test('without verbose CFE info', () async {
     final p = project(mainSrc: '''void main() {}''');
 
@@ -361,7 +382,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, isNot(contains(devToolsMessagePrefix)));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
 
       test('dart simple', () async {
@@ -372,7 +393,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, isNot(contains(devToolsMessagePrefix)));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
     });
 
@@ -386,7 +407,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, contains(devToolsMessagePrefix));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
 
       test('dart simple', () async {
@@ -397,7 +418,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, contains(devToolsMessagePrefix));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
     });
   });
diff --git a/pkg/dartdev/test/utils_test.dart b/pkg/dartdev/test/utils_test.dart
index 811a0a5..642adbe 100644
--- a/pkg/dartdev/test/utils_test.dart
+++ b/pkg/dartdev/test/utils_test.dart
@@ -57,11 +57,11 @@
   group('castStringKeyedMap', () {
     test('fails', () {
       dynamic contents = json.decode(_packageData);
-      List<dynamic> _packages = contents['packages'];
+      List<dynamic> packages = contents['packages'];
       try {
         // ignore: unused_local_variable
-        List<Map<String, dynamic>> packages =
-            _packages as List<Map<String, dynamic>>;
+        List<Map<String, dynamic>> mappedPackages =
+            packages as List<Map<String, dynamic>>;
         fail('expected implicit cast to fail');
       } on TypeError {
         // TypeError is expected
@@ -70,10 +70,10 @@
 
     test('succeeds', () {
       dynamic contents = json.decode(_packageData);
-      List<dynamic> _packages = contents['packages'];
-      List<Map<String, dynamic>> packages =
-          _packages.map<Map<String, dynamic>>(castStringKeyedMap).toList();
-      expect(packages, isList);
+      List<dynamic> packages = contents['packages'];
+      List<Map<String, dynamic>> mappedPackages =
+          packages.map<Map<String, dynamic>>(castStringKeyedMap).toList();
+      expect(mappedPackages, isList);
     });
   });
 
diff --git a/pkg/dds/bin/dds.dart b/pkg/dds/bin/dds.dart
index 2ae2f5a..7e43c19 100644
--- a/pkg/dds/bin/dds.dart
+++ b/pkg/dds/bin/dds.dart
@@ -18,6 +18,7 @@
 ///   - Start DevTools
 ///   - DevTools build directory
 ///   - Enable logging
+///   - Enable service port fallback
 Future<void> main(List<String> args) async {
   if (args.isEmpty) return;
 
@@ -46,6 +47,7 @@
     devToolsBuildDirectory = Uri.file(args[5]);
   }
   final logRequests = args[6] == 'true';
+  final enableServicePortFallback = args[7] == 'true';
   try {
     // TODO(bkonyi): add retry logic similar to that in vmservice_server.dart
     // See https://github.com/dart-lang/sdk/issues/43192.
@@ -61,6 +63,7 @@
             )
           : null,
       logRequests: logRequests,
+      enableServicePortFallback: enableServicePortFallback,
     );
     stderr.write(json.encode({
       'state': 'started',
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
index 4d8a5e7..7d833ab 100644
--- a/pkg/dds/lib/dds.dart
+++ b/pkg/dds/lib/dds.dart
@@ -37,11 +37,15 @@
   ///
   /// [ipv6] controls whether or not DDS is served via IPv6. IPv4 is enabled by
   /// default.
+  ///
+  /// If [enablesServicePortFallback] is enabled, DDS will attempt to bind to any
+  /// available port if the specified port is unavailable.
   static Future<DartDevelopmentService> startDartDevelopmentService(
     Uri remoteVmServiceUri, {
     Uri? serviceUri,
     bool enableAuthCodes = true,
     bool ipv6 = false,
+    bool enableServicePortFallback = false,
     List<String> cachedUserTags = const [],
     DevToolsConfiguration? devToolsConfiguration,
     bool logRequests = false,
@@ -84,6 +88,7 @@
       ipv6,
       devToolsConfiguration,
       logRequests,
+      enableServicePortFallback,
     );
     await service.startService();
     return service;
diff --git a/pkg/dds/lib/devtools_server.dart b/pkg/dds/lib/devtools_server.dart
index 0a267d6..5841606 100644
--- a/pkg/dds/lib/devtools_server.dart
+++ b/pkg/dds/lib/devtools_server.dart
@@ -276,7 +276,7 @@
     // Ensure browsers don't cache older versions of the app.
     _server.defaultResponseHeaders.add(
       HttpHeaders.cacheControlHeader,
-      'max-age=900',
+      'max-age=0',
     );
 
     // Serve requests in an error zone to prevent failures
@@ -489,11 +489,12 @@
   }
 
   Future<Map<String, dynamic>> launchDevTools(
-      Map<String, dynamic> params,
-      Uri vmServiceUri,
-      String devToolsUrl,
-      bool headlessMode,
-      bool machineMode) async {
+    Map<String, dynamic> params,
+    Uri vmServiceUri,
+    String devToolsUrl,
+    bool headlessMode,
+    bool machineMode,
+  ) async {
     // First see if we have an existing DevTools client open that we can
     // reuse.
     final canReuse =
@@ -508,10 +509,11 @@
           shouldNotify,
         )) {
       _emitLaunchEvent(
-          reused: true,
-          notified: shouldNotify,
-          pid: null,
-          machineMode: machineMode);
+        reused: true,
+        notified: shouldNotify,
+        pid: null,
+        machineMode: machineMode,
+      );
       return {
         'reused': true,
         'notified': shouldNotify,
@@ -582,7 +584,7 @@
 
   bool _tryReuseExistingDevToolsInstance(
     Uri vmServiceUri,
-    String page,
+    String? page,
     bool notifyUser,
   ) {
     // First try to find a client that's already connected to this VM service,
@@ -591,7 +593,9 @@
         clientManager.findExistingConnectedReusableClient(vmServiceUri);
     if (existingClient != null) {
       try {
-        existingClient.showPage(page);
+        if (page != null) {
+          existingClient.showPage(page);
+        }
         if (notifyUser) {
           existingClient.notify();
         }
@@ -617,7 +621,7 @@
 
   String _buildUriToLaunch(
     Map<String, dynamic> uriParams,
-    page,
+    String? page,
     Uri devToolsUri,
   ) {
     final queryStringNameValues = [];
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index 83c9d9d..d095e3b 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -217,7 +217,7 @@
       : restart = obj['restart'],
         name = obj['name'] as String?,
         cwd = obj['cwd'] as String?,
-        env = obj['env'] as Map<String, String>?,
+        env = (obj['env'] as Map<String, Object?>?)?.cast<String, String>(),
         additionalProjectPaths =
             (obj['additionalProjectPaths'] as List?)?.cast<String>(),
         debugSdkLibraries = obj['debugSdkLibraries'] as bool?,
@@ -482,6 +482,10 @@
     isAttach = true;
     _subscribeToOutputStreams = true;
 
+    // When attaching to a process, suppress auto-resuming isolates until the
+    // first time the user resumes anything.
+    _isolateManager.autoResumeStartingIsolates = false;
+
     // Common setup.
     await _prepareForLaunchOrAttach(null);
 
@@ -538,13 +542,11 @@
   /// The URI protocol will be changed to ws/wss but otherwise not normalised.
   /// The caller should handle any other normalisation (such as adding /ws to
   /// the end if required).
-  ///
-  /// If [resumeIfStarting] is true, isolates waiting to start will
-  /// automatically be resumed. This is usually desired in launch requests, but
-  /// not when attaching.
   Future<void> connectDebugger(
     Uri uri, {
-    required bool resumeIfStarting,
+    // TODO(dantup): Remove this after parameter after updating the Flutter
+    //   DAP to not pass it.
+    bool? resumeIfStarting,
   }) async {
     // Start up a DDS instance for this VM.
     if (enableDds) {
@@ -622,7 +624,7 @@
     await debuggerConnected(vmInfo);
 
     await _withErrorHandling(
-      () => _configureExistingIsolates(vmService, vmInfo, resumeIfStarting),
+      () => _configureExistingIsolates(vmService, vmInfo),
     );
 
     _debuggerInitializedCompleter.complete();
@@ -633,7 +635,6 @@
   Future<void> _configureExistingIsolates(
     vm.VmService vmService,
     vm.VM vmInfo,
-    bool resumeIfStarting,
   ) async {
     final existingIsolateRefs = vmInfo.isolates;
     final existingIsolates = existingIsolateRefs != null
@@ -659,12 +660,11 @@
       if (isolate.pauseEvent?.kind?.startsWith('Pause') ?? false) {
         await _isolateManager.handleEvent(
           isolate.pauseEvent!,
-          resumeIfStarting: resumeIfStarting,
         );
       } else if (isolate.runnable == true) {
         // If requested, automatically resume. Otherwise send a Stopped event to
         // inform the client UI the thread is paused.
-        if (resumeIfStarting) {
+        if (_isolateManager.autoResumeStartingIsolates) {
           await _isolateManager.resumeIsolate(isolate);
         } else {
           _isolateManager.sendStoppedOnEntryEvent(thread.threadId);
diff --git a/pkg/dds/lib/src/dap/adapters/dart_cli_adapter.dart b/pkg/dds/lib/src/dap/adapters/dart_cli_adapter.dart
index 06def69..1c8be40 100644
--- a/pkg/dds/lib/src/dap/adapters/dart_cli_adapter.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart_cli_adapter.dart
@@ -94,7 +94,7 @@
     if (debug) {
       vmServiceInfoFile = generateVmServiceInfoFile();
       unawaited(waitForVmServiceInfoFile(logger, vmServiceInfoFile)
-          .then((uri) => connectDebugger(uri, resumeIfStarting: true)));
+          .then((uri) => connectDebugger(uri)));
     }
 
     final vmArgs = <String>[
@@ -191,7 +191,7 @@
         ? Uri.parse(vmServiceUri)
         : await waitForVmServiceInfoFile(logger, File(vmServiceInfoFile!));
 
-    unawaited(connectDebugger(uri, resumeIfStarting: false));
+    unawaited(connectDebugger(uri));
   }
 
   /// Calls the client (via a `runInTerminal` request) to spawn the process so
diff --git a/pkg/dds/lib/src/dap/adapters/dart_test_adapter.dart b/pkg/dds/lib/src/dap/adapters/dart_test_adapter.dart
index 716fcfe..0a2b63c 100644
--- a/pkg/dds/lib/src/dap/adapters/dart_test_adapter.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart_test_adapter.dart
@@ -79,7 +79,7 @@
     if (debug) {
       vmServiceInfoFile = generateVmServiceInfoFile();
       unawaited(waitForVmServiceInfoFile(logger, vmServiceInfoFile)
-          .then((uri) => connectDebugger(uri, resumeIfStarting: true)));
+          .then((uri) => connectDebugger(uri)));
     }
 
     final vmArgs = <String>[
diff --git a/pkg/dds/lib/src/dap/isolate_manager.dart b/pkg/dds/lib/src/dap/isolate_manager.dart
index d13e8fa..df7dd76 100644
--- a/pkg/dds/lib/src/dap/isolate_manager.dart
+++ b/pkg/dds/lib/src/dap/isolate_manager.dart
@@ -56,6 +56,16 @@
   /// [debugExternalPackageLibraries] in one step.
   bool debugExternalPackageLibraries = true;
 
+  /// Whether to automatically resume new isolates after configuring them.
+  ///
+  /// This setting is almost always `true` because isolates are paused only so
+  /// we can configure them (send breakpoints, pause-on-exceptions,
+  /// setLibraryDebuggables) without races. It is set to `false` during the
+  /// initial connection of an `attachRequest` to allow paused isolates to
+  /// remain paused. In this case, it will be automatically re-set to `true` the
+  /// first time the user resumes.
+  bool autoResumeStartingIsolates = true;
+
   /// The root of the Dart SDK containing the VM running the debug adapter.
   late final String sdkRoot;
 
@@ -138,13 +148,7 @@
   ThreadInfo? getThread(int threadId) => _threadsByThreadId[threadId];
 
   /// Handles Isolate and Debug events.
-  ///
-  /// If [resumeIfStarting] is `true`, PauseStart/PausePostStart events will be
-  /// automatically resumed from.
-  Future<void> handleEvent(
-    vm.Event event, {
-    bool resumeIfStarting = true,
-  }) async {
+  Future<void> handleEvent(vm.Event event) async {
     final isolateId = event.isolate?.id!;
 
     final eventKind = event.kind;
@@ -163,7 +167,7 @@
     if (eventKind == vm.EventKind.kIsolateExit) {
       _handleExit(event);
     } else if (eventKind?.startsWith('Pause') ?? false) {
-      await _handlePause(event, resumeIfStarting: resumeIfStarting);
+      await _handlePause(event);
     } else if (eventKind == vm.EventKind.kResume) {
       _handleResumed(event);
     }
@@ -236,6 +240,11 @@
   /// [vm.StepOption.kOver], a [StepOption.kOverAsyncSuspension] step will be
   /// sent instead.
   Future<void> resumeThread(int threadId, [String? resumeType]) async {
+    // The first time a user resumes a thread is our signal that the app is now
+    // "running" and future isolates can be auto-resumed. This only affects
+    // attach, as it's already `true` for launch requests.
+    autoResumeStartingIsolates = true;
+
     final thread = _threadsByThreadId[threadId];
     if (thread == null) {
       throw DebugAdapterException('Thread $threadId was not found');
@@ -408,21 +417,18 @@
   ///
   /// For [vm.EventKind.kPausePostRequest] which occurs after a restart, the
   /// isolate will be re-configured (pause-exception behaviour, debuggable
-  /// libraries, breakpoints) and then (if [resumeIfStarting] is `true`)
-  /// resumed.
+  /// libraries, breakpoints) and then (if [autoResumeStartingIsolates] is
+  /// `true`) resumed.
   ///
-  /// For [vm.EventKind.kPauseStart] and [resumeIfStarting] is `true`, the
-  /// isolate will be resumed.
+  /// For [vm.EventKind.kPauseStart] and [autoResumeStartingIsolates] is `true`,
+  /// the isolate will be resumed.
   ///
   /// For breakpoints with conditions that are not met and for logpoints, the
   /// isolate will be automatically resumed.
   ///
   /// For all other pause types, the isolate will remain paused and a
   /// corresponding "Stopped" event sent to the editor.
-  Future<void> _handlePause(
-    vm.Event event, {
-    bool resumeIfStarting = true,
-  }) async {
+  Future<void> _handlePause(vm.Event event) async {
     final eventKind = event.kind;
     final isolate = event.isolate!;
     final thread = _threadsByIsolateId[isolate.id!];
@@ -439,7 +445,7 @@
     // after a hot restart.
     if (eventKind == vm.EventKind.kPausePostRequest) {
       await _configureIsolate(thread);
-      if (resumeIfStarting) {
+      if (autoResumeStartingIsolates) {
         await resumeThread(thread.threadId);
       }
     } else if (eventKind == vm.EventKind.kPauseStart) {
@@ -449,7 +455,7 @@
         thread.startupHandled = true;
         // If requested, automatically resume. Otherwise send a Stopped event to
         // inform the client UI the thread is paused.
-        if (resumeIfStarting) {
+        if (autoResumeStartingIsolates) {
           await resumeThread(thread.threadId);
         } else {
           sendStoppedOnEntryEvent(thread.threadId);
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
index 000a15b..8de53ff 100644
--- a/pkg/dds/lib/src/dds_impl.dart
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -59,6 +59,7 @@
     this._ipv6,
     this._devToolsConfiguration,
     this.shouldLogRequests,
+    this._enableServicePortFallback,
   ) {
     _clientManager = ClientManager(this);
     _expressionEvaluator = ExpressionEvaluator(this);
@@ -136,7 +137,7 @@
     final host = uri?.host ??
         (_ipv6 ? InternetAddress.loopbackIPv6 : InternetAddress.loopbackIPv4)
             .host;
-    final port = uri?.port ?? 0;
+    var port = uri?.port ?? 0;
     var pipeline = const Pipeline();
     if (shouldLogRequests) {
       pipeline = pipeline.addMiddleware(
@@ -155,16 +156,25 @@
     late String errorMessage;
     final tmpServer = await runZonedGuarded(
       () async {
-        try {
-          return await io.serve(handler, host, port);
-        } on SocketException catch (e) {
-          errorMessage = e.message;
-          if (e.osError != null) {
-            errorMessage += ' (${e.osError!.message})';
+        Future<HttpServer?> startServer() async {
+          try {
+            return await io.serve(handler, host, port);
+          } on SocketException catch (e) {
+            if (_enableServicePortFallback && port != 0) {
+              // Try again, this time with a random port.
+              port = 0;
+              return await startServer();
+            }
+            errorMessage = e.message;
+            if (e.osError != null) {
+              errorMessage += ' (${e.osError!.message})';
+            }
+            errorMessage += ': ${e.address?.host}:${e.port}';
+            return null;
           }
-          errorMessage += ': ${e.address?.host}:${e.port}';
-          return null;
         }
+
+        return await startServer();
       },
       (error, stack) {
         if (shouldLogRequests) {
@@ -387,6 +397,7 @@
   String? get authCode => _authCode;
   String? _authCode;
 
+  final bool _enableServicePortFallback;
   final bool shouldLogRequests;
 
   Uri get remoteVmServiceUri => _remoteVmServiceUri;
diff --git a/pkg/dds/lib/src/devtools/machine_mode_command_handler.dart b/pkg/dds/lib/src/devtools/machine_mode_command_handler.dart
index 5b65d4c..e98f23e 100644
--- a/pkg/dds/lib/src/devtools/machine_mode_command_handler.dart
+++ b/pkg/dds/lib/src/devtools/machine_mode_command_handler.dart
@@ -18,7 +18,7 @@
 class MachineModeCommandHandler {
   static const launchDevToolsService = 'launchDevTools';
   static const copyAndCreateDevToolsFile = 'copyAndCreateDevToolsFile';
-  static const restoreDevToolsFile = 'restoreDevToolsFiles';
+  static const restoreDevToolsFile = 'restoreDevToolsFile';
   static const errorLaunchingBrowserCode = 500;
   static const bool machineMode = true;
 
@@ -67,7 +67,7 @@
     _stdinCommandStream.listen((Map<String, dynamic> json) async {
       // ID can be String, int or null
       final dynamic id = json['id'];
-      final Map<String, dynamic> params = json['params'];
+      final Map<String, dynamic> params = json['params'] ?? <String, dynamic>{};
       final method = json['method'];
       switch (method) {
         case 'vm.register':
@@ -200,7 +200,7 @@
   void _handleDevToolsSurvey(dynamic id, Map<String, dynamic> params) {
     _devToolsUsage ??= DevToolsUsage();
     final String surveyRequest = params['surveyRequest'];
-    final String value = params['value'];
+    final String value = params['value'] ?? '';
 
     switch (surveyRequest) {
       case copyAndCreateDevToolsFile:
@@ -212,8 +212,6 @@
             {
               'id': id,
               'result': {
-                // TODO(bkonyi): fix incorrect spelling of "success" here and
-                // below once we figure out the impact of changing this key.
                 'success': true,
               },
             },
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index cb3837e..68a6e019 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -16,7 +16,7 @@
   browser_launcher: ^1.0.0
   collection: ^1.15.0
   dds_service_extensions: ^1.3.0
-  devtools_shared: ^2.3.0
+  devtools_shared: ^2.11.4
   http_multi_server: ^3.0.0
   json_rpc_2: ^3.0.0
   meta: ^1.1.8
diff --git a/pkg/dds/test/common/test_helper.dart b/pkg/dds/test/common/test_helper.dart
index a9473ea..7325d97 100644
--- a/pkg/dds/test/common/test_helper.dart
+++ b/pkg/dds/test/common/test_helper.dart
@@ -61,3 +61,12 @@
   await service.resume(isolate.id!);
   await completer.future;
 }
+
+/// Returns the resolved URI to the pre-built devtools app.
+///
+/// The method caller is responsible for providing the relative [prefix] that
+/// will resolve to the sdk/ directory (e.g. '../../../').
+Uri devtoolsAppUri({required String prefix}) {
+  const pathFromSdkDirectory = 'third_party/devtools/web';
+  return Platform.script.resolve('$prefix$pathFromSdkDirectory');
+}
diff --git a/pkg/dds/test/dap/arguments_test.dart b/pkg/dds/test/dap/arguments_test.dart
new file mode 100644
index 0000000..d5b0b72
--- /dev/null
+++ b/pkg/dds/test/dap/arguments_test.dart
@@ -0,0 +1,36 @@
+// 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:convert';
+
+import 'package:dds/dap.dart';
+import 'package:test/test.dart';
+
+main() {
+  group('DartLaunchRequestArguments', () {
+    test('handles only required arguments', () async {
+      final json = '{"program":"a"}';
+      final decoded = DartLaunchRequestArguments.fromJson(jsonDecode(json));
+      expect(decoded.program, 'a');
+      final encoded = jsonEncode(decoded.toJson());
+      expect(encoded, json);
+    });
+
+    test('handles env variables map', () async {
+      final json = '{"env":{"a":"b"},"program":"a"}';
+      final decoded = DartLaunchRequestArguments.fromJson(jsonDecode(json));
+      expect(decoded.env!['a'], 'b');
+      final encoded = jsonEncode(decoded.toJson());
+      expect(encoded, json);
+    });
+
+    test('handles additional project paths list', () async {
+      final json = '{"additionalProjectPaths":["a","b"],"program":"a"}';
+      final decoded = DartLaunchRequestArguments.fromJson(jsonDecode(json));
+      expect(decoded.additionalProjectPaths, ['a', 'b']);
+      final encoded = jsonEncode(decoded.toJson());
+      expect(encoded, json);
+    });
+  });
+}
diff --git a/pkg/dds/test/dap/integration/debug_attach_test.dart b/pkg/dds/test/dap/integration/debug_attach_test.dart
index 810a15f..846b3db 100644
--- a/pkg/dds/test/dap/integration/debug_attach_test.dart
+++ b/pkg/dds/test/dap/integration/debug_attach_test.dart
@@ -50,7 +50,7 @@
           // The stdout also contains the Observatory+DevTools banners.
           .where(
             (line) =>
-                !line.startsWith('Observatory listening on') &&
+                !line.startsWith('The Dart VM service is listening on') &&
                 !line.startsWith(
                     'The Dart DevTools debugger and profiler is available at'),
           )
@@ -103,7 +103,7 @@
           // The stdout also contains the Observatory+DevTools banners.
           .where(
             (line) =>
-                !line.startsWith('Observatory listening on') &&
+                !line.startsWith('The Dart VM service is listening on') &&
                 !line.startsWith(
                     'The Dart DevTools debugger and profiler is available at'),
           )
diff --git a/pkg/dds/test/dap/integration/test_support.dart b/pkg/dds/test/dap/integration/test_support.dart
index 7a55bb2..1c0dc21 100644
--- a/pkg/dds/test/dap/integration/test_support.dart
+++ b/pkg/dds/test/dap/integration/test_support.dart
@@ -44,9 +44,10 @@
 /// an authentication token.
 final vmServiceAuthCodePathPattern = RegExp(r'^/[\w_\-=]{5,15}/ws$');
 
-/// A [RegExp] that matches the "Observatory listening on" banner that is sent
+/// A [RegExp] that matches the "The Dart VM service is listening on" banner that is sent
 /// by the VM when not using --write-service-info.
-final vmServiceBannerPattern = RegExp(r'Observatory listening on ([^\s]+)\s');
+final vmServiceBannerPattern =
+    RegExp(r'The Dart VM service is listening on ([^\s]+)\s');
 
 /// The root of the SDK containing the current running VM.
 final sdkRoot = path.dirname(path.dirname(Platform.resolvedExecutable));
diff --git a/pkg/dds/test/devtools_observatory_connection_test.dart b/pkg/dds/test/devtools_observatory_connection_test.dart
index 3dcc6cc..ae3eb38 100644
--- a/pkg/dds/test/devtools_observatory_connection_test.dart
+++ b/pkg/dds/test/devtools_observatory_connection_test.dart
@@ -43,9 +43,7 @@
         remoteVmServiceUri,
         devToolsConfiguration: DevToolsConfiguration(
           enable: true,
-          customBuildDirectoryPath: Platform.script.resolve(
-            '../../../third_party/devtools/web',
-          ),
+          customBuildDirectoryPath: devtoolsAppUri(prefix: '../../../'),
         ),
       );
       expect(dds.isRunning, true);
diff --git a/pkg/dds/test/devtools_server/devtools_server_connection_test.dart b/pkg/dds/test/devtools_server/devtools_server_connection_test.dart
new file mode 100644
index 0000000..5bb42a8
--- /dev/null
+++ b/pkg/dds/test/devtools_server/devtools_server_connection_test.dart
@@ -0,0 +1,103 @@
+// Copyright 2022 The Chromium Authors. 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:devtools_shared/devtools_test_utils.dart';
+import 'package:test/test.dart';
+
+import 'devtools_server_driver.dart';
+
+// Note: this test is broken out from devtools_server_test.dart so that the
+// tests run faster and we do not have to mark them as slow.
+
+late final DevToolsServerTestController testController;
+
+void main() {
+  testController = DevToolsServerTestController();
+
+  setUp(() async {
+    await testController.setUp();
+  });
+
+  tearDown(() async {
+    await testController.tearDown();
+  });
+
+  for (final bool useVmService in [true, false]) {
+    group('Server (${useVmService ? 'VM Service' : 'API'})', () {
+      test(
+          'DevTools connects back to server API and registers that it is connected',
+          () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a request to launch DevTools in a browser.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+        );
+
+        final serverResponse =
+            await testController.waitForClients(requiredConnectionState: true);
+        expect(serverResponse, isNotNull);
+        expect(serverResponse['clients'], hasLength(1));
+        expect(serverResponse['clients'][0]['hasConnection'], isTrue);
+        expect(
+          serverResponse['clients'][0]['vmServiceUri'],
+          testController.appFixture.serviceUri.toString(),
+        );
+      }, timeout: const Timeout.factor(10));
+
+      test('DevTools reports disconnects from a VM', () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a request to launch DevTools in a browser.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+        );
+
+        // Wait for the DevTools to inform server that it's connected.
+        await testController.waitForClients(requiredConnectionState: true);
+
+        // Terminate the VM.
+        await testController.appFixture.teardown();
+
+        // Ensure the client is marked as disconnected.
+        final serverResponse = await testController.waitForClients(
+          requiredConnectionState: false,
+        );
+        expect(serverResponse['clients'], hasLength(1));
+        expect(serverResponse['clients'][0]['hasConnection'], isFalse);
+        expect(serverResponse['clients'][0]['vmServiceUri'], isNull);
+      }, timeout: const Timeout.factor(20));
+
+      test('server removes clients that disconnect from the API', () async {
+        final event = await testController.serverStartedEvent.future;
+
+        // Spawn our own Chrome process so we can terminate it.
+        final devToolsUri =
+            'http://${event['params']['host']}:${event['params']['port']}';
+        final chrome = await Chrome.locate()!.start(url: devToolsUri);
+
+        // Wait for DevTools to inform server that it's connected.
+        await testController.waitForClients();
+
+        // Close the browser, which will disconnect DevTools SSE connection
+        // back to the server.
+        chrome.kill();
+
+        // Await a long delay to wait for the SSE client to close.
+        await delay(duration: const Duration(seconds: 15));
+
+        // Ensure the client is completely removed from the list.
+        await testController.waitForClients(expectNone: true);
+      }, timeout: const Timeout.factor(20));
+    });
+  }
+}
diff --git a/pkg/dds/test/devtools_server/devtools_server_driver.dart b/pkg/dds/test/devtools_server/devtools_server_driver.dart
new file mode 100644
index 0000000..9f56b81
--- /dev/null
+++ b/pkg/dds/test/devtools_server/devtools_server_driver.dart
@@ -0,0 +1,280 @@
+// Copyright 2022 The Chromium Authors. 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 'dart:convert';
+import 'dart:io';
+
+import 'package:dds/devtools_server.dart';
+import 'package:devtools_shared/devtools_test_utils.dart';
+import 'package:vm_service/vm_service.dart';
+
+const verbose = true;
+
+class DevToolsServerDriver {
+  DevToolsServerDriver._(
+    this._process,
+    this._stdin,
+    Stream<String> _stdout,
+    Stream<String> _stderr,
+  )   : stdout = _convertToMapStream(_stdout),
+        stderr = _stderr.map((line) {
+          _trace('<== STDERR $line');
+          return line;
+        });
+
+  final Process _process;
+  final Stream<Map<String, dynamic>?> stdout;
+  final Stream<String> stderr;
+  final StringSink _stdin;
+
+  void write(Map<String, dynamic> request) {
+    final line = jsonEncode(request);
+    _trace('==> $line');
+    _stdin.writeln(line);
+  }
+
+  static Stream<Map<String, dynamic>?> _convertToMapStream(
+    Stream<String> stream,
+  ) {
+    return stream.map((line) {
+      _trace('<== $line');
+      return line;
+    }).map((line) {
+      try {
+        return jsonDecode(line) as Map<String, dynamic>;
+      } catch (e) {
+        return null;
+      }
+    }).where((item) => item != null);
+  }
+
+  static void _trace(String message) {
+    if (verbose) {
+      print(message);
+    }
+  }
+
+  bool kill() => _process.kill();
+
+  static Future<DevToolsServerDriver> create({
+    int port = 0,
+    int? tryPorts,
+    List<String> additionalArgs = const [],
+  }) async {
+    final script =
+        Platform.script.resolveUri(Uri.parse('./serve_devtools.dart'));
+    final args = [
+      script.toFilePath(),
+      '--machine',
+      '--port',
+      '$port',
+      ...additionalArgs,
+    ];
+
+    if (tryPorts != null) {
+      args.addAll(['--try-ports', '$tryPorts']);
+    }
+
+    if (useChromeHeadless && headlessModeIsSupported) {
+      args.add('--headless');
+    }
+    final Process process = await Process.start(
+      Platform.resolvedExecutable,
+      args,
+    );
+
+    return DevToolsServerDriver._(
+      process,
+      process.stdin,
+      process.stdout.transform(utf8.decoder).transform(const LineSplitter()),
+      process.stderr.transform(utf8.decoder).transform(const LineSplitter()),
+    );
+  }
+}
+
+class DevToolsServerTestController {
+  static const defaultDelay = Duration(milliseconds: 500);
+
+  late CliAppFixture appFixture;
+
+  late DevToolsServerDriver server;
+
+  final completers = <String, Completer<Map<String, dynamic>>>{};
+
+  /// A broadcast stream controller for streaming events from the server.
+  late StreamController<Map<String, dynamic>> eventController;
+
+  /// A broadcast stream of events from the server.
+  ///
+  /// Listening for "server.started" events on this stream may be unreliable
+  /// because it may have occurred before the test starts. Use the
+  /// [serverStartedEvent] instead.
+  Stream<Map<String, dynamic>> get events => eventController.stream;
+
+  /// Completer that signals when the server started event has been received.
+  late Completer<Map<String, dynamic>> serverStartedEvent;
+
+  final Map<String, String> registeredServices = {};
+
+  /// A list of PIDs for Chrome instances spawned by tests that should be
+  /// cleaned up.
+  final List<int> browserPids = [];
+
+  late StreamSubscription<String> stderrSub;
+
+  late StreamSubscription<Map<String, dynamic>?> stdoutSub;
+
+  Future<void> setUp() async {
+    serverStartedEvent = Completer<Map<String, dynamic>>();
+    eventController = StreamController<Map<String, dynamic>>.broadcast();
+
+    // Start the command-line server.
+    server = await DevToolsServerDriver.create();
+
+    // Fail tests on any stderr.
+    stderrSub = server.stderr.listen((text) => throw 'STDERR: $text');
+    stdoutSub = server.stdout.listen((map) {
+      if (map!.containsKey('id')) {
+        if (map.containsKey('result')) {
+          completers[map['id']]!.complete(map['result']);
+        } else {
+          completers[map['id']]!.completeError(map['error']);
+        }
+      } else if (map.containsKey('event')) {
+        if (map['event'] == 'server.started') {
+          serverStartedEvent.complete(map);
+        }
+        eventController.add(map);
+      }
+    });
+
+    await serverStartedEvent.future;
+    await startApp();
+  }
+
+  Future<void> tearDown() async {
+    browserPids
+      ..forEach((pid) => Process.killPid(pid, ProcessSignal.sigkill))
+      ..clear();
+    await stdoutSub.cancel();
+    await stderrSub.cancel();
+    server.kill();
+    await appFixture.teardown();
+  }
+
+  Future<Map<String, dynamic>> sendLaunchDevToolsRequest({
+    required bool useVmService,
+    String? page,
+    bool notify = false,
+    bool reuseWindows = false,
+  }) async {
+    final launchEvent =
+        events.where((e) => e['event'] == 'client.launch').first;
+    if (useVmService) {
+      await appFixture.serviceConnection.callMethod(
+        registeredServices[DevToolsServer.launchDevToolsService]!,
+        args: {
+          'reuseWindows': reuseWindows,
+          'page': page,
+          'notify': notify,
+        },
+      );
+    } else {
+      await send(
+        'devTools.launch',
+        {
+          'vmServiceUri': appFixture.serviceUri.toString(),
+          'reuseWindows': reuseWindows,
+          'page': page,
+        },
+      );
+    }
+    final response = await launchEvent;
+    final pid = response['params']['pid'];
+    if (pid != null) {
+      browserPids.add(pid);
+    }
+    return response['params'];
+  }
+
+  Future<void> startApp() async {
+    final appUri = Platform.script
+        .resolveUri(Uri.parse('../fixtures/empty_dart_app.dart'));
+    appFixture = await CliAppFixture.create(appUri.toFilePath());
+
+    // Track services method names as they're registered.
+    appFixture.serviceConnection
+        .onEvent(EventStreams.kService)
+        .where((e) => e.kind == EventKind.kServiceRegistered)
+        .listen((e) => registeredServices[e.service!] = e.method!);
+    await appFixture.serviceConnection.streamListen(EventStreams.kService);
+    await appFixture.onAppStarted;
+  }
+
+  int nextId = 0;
+  Future<Map<String, dynamic>> send(
+    String method, [
+    Map<String, dynamic>? params,
+  ]) {
+    final id = (nextId++).toString();
+    completers[id] = Completer<Map<String, dynamic>>();
+    server.write({'id': id.toString(), 'method': method, 'params': params});
+    return completers[id]!.future;
+  }
+
+  /// Waits for the server's client list to be updated with the expected state,
+  /// and then returns the client list.
+  ///
+  /// It may take time for the servers client list to be updated as the web app
+  /// connects, so this helper just polls and waits for the expected state. If
+  /// the expected state is never found, the test will timeout.
+  Future<Map<String, dynamic>> waitForClients({
+    bool? requiredConnectionState,
+    String? requiredPage,
+    bool expectNone = false,
+    bool useLongTimeout = false,
+    Duration delayDuration = defaultDelay,
+  }) async {
+    late Map<String, dynamic> serverResponse;
+
+    final isOnPage = (client) => client['currentPage'] == requiredPage;
+    final hasConnectionState = (client) => requiredConnectionState ?? false
+        // If we require a connected client, also require a non-null page. This
+        // avoids a race in tests where we may proceed to send messages to a client
+        // that is not fully initialised.
+        ? (client['hasConnection'] && client['currentPage'] != null)
+        : !client['hasConnection'];
+
+    await _waitFor(
+      () async {
+        // Await a short delay to give the client time to connect.
+        await delay();
+
+        serverResponse = await send('client.list');
+        final clients = serverResponse['clients'];
+        return clients is List &&
+            (clients.isEmpty == expectNone) &&
+            (requiredPage == null || clients.any(isOnPage)) &&
+            (requiredConnectionState == null ||
+                clients.any(hasConnectionState));
+      },
+      delayDuration: delayDuration,
+    );
+
+    return serverResponse;
+  }
+
+  Future<void> _waitFor(
+    Future<bool> condition(), {
+    Duration delayDuration = defaultDelay,
+  }) async {
+    while (true) {
+      if (await condition()) {
+        return;
+      }
+      await delay(duration: delayDuration);
+    }
+  }
+}
diff --git a/pkg/dds/test/devtools_server/devtools_server_test.dart b/pkg/dds/test/devtools_server/devtools_server_test.dart
new file mode 100644
index 0000000..2a0ce68
--- /dev/null
+++ b/pkg/dds/test/devtools_server/devtools_server_test.dart
@@ -0,0 +1,369 @@
+// Copyright 2022 The Chromium Authors. 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:convert';
+import 'dart:io';
+
+import 'package:dds/devtools_server.dart';
+import 'package:dds/src/devtools/machine_mode_command_handler.dart';
+import 'package:devtools_shared/devtools_shared.dart';
+import 'package:devtools_shared/devtools_test_utils.dart';
+import 'package:test/test.dart';
+
+import 'devtools_server_driver.dart';
+
+late final DevToolsServerTestController testController;
+
+void main() {
+  testController = DevToolsServerTestController();
+
+  setUp(() async {
+    await testController.setUp();
+  });
+
+  tearDown(() async {
+    await testController.tearDown();
+  });
+
+  test('registers service', () async {
+    final serverResponse = await testController.send(
+      'vm.register',
+      {'uri': testController.appFixture.serviceUri.toString()},
+    );
+    expect(serverResponse['success'], isTrue);
+
+    // Expect the VM service to see the launchDevTools service registered.
+    expect(
+      testController.registeredServices,
+      contains(DevToolsServer.launchDevToolsService),
+    );
+  }, timeout: const Timeout.factor(10));
+
+  test('can bind to next available port', () async {
+    final server1 = await DevToolsServerDriver.create(port: 8855);
+    try {
+      // Wait for the first server to start up and ensure it got the
+      // expected port.
+      final event1 = (await server1.stdout.firstWhere(
+        (map) => map!['event'] == 'server.started',
+      ))!;
+      expect(event1['params']['port'], 8855);
+
+      // Now spawn another requesting the same port and ensure it got the next
+      // port number.
+      final server2 = await DevToolsServerDriver.create(
+        port: 8855,
+        tryPorts: 2,
+      );
+      try {
+        final event2 = (await server2.stdout.firstWhere(
+          (map) => map!['event'] == 'server.started',
+        ))!;
+
+        expect(event2['params']['port'], 8856);
+      } finally {
+        server2.kill();
+      }
+    } finally {
+      server1.kill();
+    }
+  }, timeout: const Timeout.factor(10));
+
+  test('allows embedding without flag', () async {
+    final server = await DevToolsServerDriver.create();
+    final httpClient = HttpClient();
+    late HttpClientResponse resp;
+    try {
+      final startedEvent = (await server.stdout.firstWhere(
+        (map) => map!['event'] == 'server.started',
+      ))!;
+      final host = startedEvent['params']['host'];
+      final port = startedEvent['params']['port'];
+
+      final req = await httpClient.get(host, port, '/');
+      resp = await req.close();
+      expect(resp.headers.value('x-frame-options'), isNull);
+    } finally {
+      httpClient.close();
+      await resp.drain();
+      server.kill();
+    }
+  }, timeout: const Timeout.factor(10));
+
+  test('does not allow embedding with flag', () async {
+    final server = await DevToolsServerDriver.create(
+      additionalArgs: ['--no-allow-embedding'],
+    );
+    final httpClient = HttpClient();
+    late HttpClientResponse resp;
+    try {
+      final startedEvent = (await server.stdout.firstWhere(
+        (map) => map!['event'] == 'server.started',
+      ))!;
+      final host = startedEvent['params']['host'];
+      final port = startedEvent['params']['port'];
+
+      final req = await httpClient.get(host, port, '/');
+      resp = await req.close();
+      expect(resp.headers.value('x-frame-options'), 'SAMEORIGIN');
+    } finally {
+      httpClient.close();
+      await resp.drain();
+      server.kill();
+    }
+  }, timeout: const Timeout.factor(10));
+
+  test('Analytics Survey', () async {
+    var serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': 'copyAndCreateDevToolsFile',
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['success'], isTrue);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiSetActiveSurvey,
+      'value': 'Q3-2019',
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['success'], isTrue);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiIncrementSurveyShownCount,
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+    expect(serverResponse['surveyShownCount'], 1);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiIncrementSurveyShownCount,
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+    expect(serverResponse['surveyShownCount'], 2);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiGetSurveyShownCount,
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+    expect(serverResponse['surveyShownCount'], 2);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiGetSurveyActionTaken,
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+    expect(serverResponse['surveyActionTaken'], isFalse);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': apiSetSurveyActionTaken,
+      'value': json.encode(true),
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['activeSurvey'], 'Q3-2019');
+    expect(serverResponse['surveyActionTaken'], isTrue);
+
+    serverResponse = await testController.send('devTools.survey', {
+      'surveyRequest': MachineModeCommandHandler.restoreDevToolsFile,
+    });
+    expect(serverResponse, isNotNull);
+    expect(serverResponse['success'], isTrue);
+    expect(
+      serverResponse['content'],
+      '{\n'
+      '  \"Q3-2019\": {\n'
+      '    \"surveyActionTaken\": true,\n'
+      '    \"surveyShownCount\": 2\n'
+      '  }\n'
+      '}\n',
+    );
+  }, timeout: const Timeout.factor(10));
+
+  for (final bool useVmService in [true, false]) {
+    group('Server (${useVmService ? 'VM Service' : 'API'})', () {
+      test('can launch on a specific page', () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a request to launch at a certain page.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+          page: 'memory',
+        );
+
+        final serverResponse =
+            await testController.waitForClients(requiredPage: 'memory');
+        expect(serverResponse, isNotNull);
+        expect(serverResponse['clients'], hasLength(1));
+        expect(serverResponse['clients'][0]['hasConnection'], isTrue);
+        expect(
+          serverResponse['clients'][0]['vmServiceUri'],
+          testController.appFixture.serviceUri.toString(),
+        );
+        expect(serverResponse['clients'][0]['currentPage'], 'memory');
+      }, timeout: const Timeout.factor(10));
+
+      test('can switch page', () async {
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Launch on the memory page and wait for the connection.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+          page: 'memory',
+        );
+        await testController.waitForClients(requiredPage: 'memory');
+
+        // Re-launch, allowing reuse and with a different page.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+          reuseWindows: true,
+          page: 'logging',
+        );
+
+        final serverResponse =
+            await testController.waitForClients(requiredPage: 'logging');
+        expect(serverResponse, isNotNull);
+        expect(serverResponse['clients'], hasLength(1));
+        expect(serverResponse['clients'][0]['hasConnection'], isTrue);
+        expect(
+          serverResponse['clients'][0]['vmServiceUri'],
+          testController.appFixture.serviceUri.toString(),
+        );
+        expect(serverResponse['clients'][0]['currentPage'], 'logging');
+      }, timeout: const Timeout.factor(20));
+
+      test('Server reuses DevTools instance if already connected to same VM',
+          () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a request to launch DevTools in a browser.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+        );
+
+        {
+          final serverResponse = await testController.waitForClients(
+            requiredConnectionState: true,
+          );
+          expect(serverResponse['clients'], hasLength(1));
+        }
+
+        // Request again, allowing reuse, and server emits an event saying the
+        // window was reused.
+        final launchResponse = await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+          reuseWindows: true,
+        );
+        expect(launchResponse['reused'], isTrue);
+
+        // Ensure there's still only one connection (eg. we didn't spawn a new one
+        // we reused the existing one).
+        final serverResponse =
+            await testController.waitForClients(requiredConnectionState: true);
+        expect(serverResponse['clients'], hasLength(1));
+      }, timeout: const Timeout.factor(20));
+
+      test('Server does not reuse DevTools instance if embedded', () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Spawn an embedded version of DevTools in a browser.
+        final event = await testController.serverStartedEvent.future;
+        final devToolsUri =
+            'http://${event['params']['host']}:${event['params']['port']}';
+        final launchUrl = '$devToolsUri/?embed=true&page=logging'
+            '&uri=${Uri.encodeQueryComponent(testController.appFixture.serviceUri.toString())}';
+        final chrome = await Chrome.locate()!.start(url: launchUrl);
+        try {
+          {
+            final serverResponse = await testController.waitForClients(
+              requiredConnectionState: true,
+            );
+            expect(serverResponse['clients'], hasLength(1));
+          }
+
+          // Send a request to the server to launch and ensure it did
+          // not reuse the existing connection. Launch it on a different page
+          // so we can easily tell once this one has connected.
+          final launchResponse = await testController.sendLaunchDevToolsRequest(
+            useVmService: useVmService,
+            reuseWindows: true,
+            page: 'memory',
+          );
+          expect(launchResponse['reused'], isFalse);
+
+          // Ensure there's now two connections.
+          final serverResponse = await testController.waitForClients(
+            requiredConnectionState: true,
+            requiredPage: 'memory',
+          );
+          expect(serverResponse['clients'], hasLength(2));
+        } finally {
+          chrome.kill();
+        }
+      }, timeout: const Timeout.factor(20));
+
+      test('Server reuses DevTools instance if not connected to a VM',
+          () async {
+        // Register the VM.
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a request to launch DevTools in a browser.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+        );
+
+        // Wait for the DevTools to inform server that it's connected.
+        await testController.waitForClients(requiredConnectionState: true);
+
+        // Terminate the VM.
+        await testController.appFixture.teardown();
+
+        // Ensure the client is marked as disconnected.
+        await testController.waitForClients(requiredConnectionState: false);
+
+        // Start up a new app.
+        await testController.startApp();
+        await testController.send(
+          'vm.register',
+          {'uri': testController.appFixture.serviceUri.toString()},
+        );
+
+        // Send a new request to launch.
+        await testController.sendLaunchDevToolsRequest(
+          useVmService: useVmService,
+          reuseWindows: true,
+          notify: true,
+        );
+
+        // Ensure we now have a single connected client.
+        final serverResponse =
+            await testController.waitForClients(requiredConnectionState: true);
+        expect(serverResponse['clients'], hasLength(1));
+        expect(serverResponse['clients'][0]['hasConnection'], isTrue);
+        expect(
+          serverResponse['clients'][0]['vmServiceUri'],
+          testController.appFixture.serviceUri.toString(),
+        );
+      }, timeout: const Timeout.factor(20));
+    });
+  }
+}
diff --git a/pkg/dds/test/devtools_server/serve_devtools.dart b/pkg/dds/test/devtools_server/serve_devtools.dart
new file mode 100644
index 0000000..7fbd12c
--- /dev/null
+++ b/pkg/dds/test/devtools_server/serve_devtools.dart
@@ -0,0 +1,18 @@
+// 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:dds/devtools_server.dart';
+
+import '../common/test_helper.dart';
+
+void main(List<String> args) async {
+  unawaited(
+    DevToolsServer().serveDevToolsWithArgs(
+      args,
+      customDevToolsPath: devtoolsAppUri(prefix: '../../../../').toFilePath(),
+    ),
+  );
+}
diff --git a/pkg/dds/test/fixtures/empty_dart_app.dart b/pkg/dds/test/fixtures/empty_dart_app.dart
new file mode 100644
index 0000000..e96e4fe
--- /dev/null
+++ b/pkg/dds/test/fixtures/empty_dart_app.dart
@@ -0,0 +1,16 @@
+// Copyright 2022 The Chromium Authors. 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';
+
+void main() async {
+  print('starting empty app');
+
+  var myVar = 0;
+  while (true) {
+    myVar++;
+    print(myVar);
+    await (Future.delayed(const Duration(seconds: 2)));
+  }
+}
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 06d5941..afca760 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -322,10 +322,10 @@
   /// Compute fresh IDs to avoid
   static int _uniqueId = 0;
 
-  MetaLetVariable(this.displayName) : super(displayName + '@${++_uniqueId}');
+  MetaLetVariable(this.displayName) : super('$displayName@${++_uniqueId}');
 }
 
-class _VariableUseCounter extends BaseVisitor<void> {
+class _VariableUseCounter extends BaseVisitorVoid {
   final counts = <MetaLetVariable, int>{};
   @override
   void visitInterpolatedExpression(InterpolatedExpression node) {
@@ -336,7 +336,7 @@
   }
 }
 
-class _IdentFinder extends BaseVisitor<void> {
+class _IdentFinder extends BaseVisitorVoid {
   final String name;
   bool found = false;
   _IdentFinder(this.name);
diff --git a/pkg/dev_compiler/lib/src/compiler/js_names.dart b/pkg/dev_compiler/lib/src/compiler/js_names.dart
index 186a316..9e95de7 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_names.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_names.dart
@@ -97,7 +97,7 @@
 /// `function` or `instanceof`, and their `name` field controls whether they
 /// refer to the same variable.
 class TemporaryNamer extends LocalNamer {
-  _FunctionScope scope;
+  _FunctionScope _scope;
 
   /// Listener to be notified when a name is selected (rename or not) for an
   /// `Identifier`.
@@ -106,23 +106,23 @@
   final NameListener _nameListener;
 
   TemporaryNamer(Node node, [this._nameListener])
-      : scope = _RenameVisitor.build(node).rootScope;
+      : _scope = _RenameVisitor.build(node).rootScope;
 
   @override
   String getName(Identifier node) {
-    var name = scope.renames[identifierKey(node)] ?? node.name;
+    var name = _scope.renames[identifierKey(node)] ?? node.name;
     _nameListener?.nameSelected(node, name);
     return name;
   }
 
   @override
   void enterScope(Node node) {
-    scope = scope.childScopes[node];
+    _scope = _scope.childScopes[node];
   }
 
   @override
   void leaveScope() {
-    scope = scope.parent;
+    _scope = _scope.parent;
   }
 }
 
diff --git a/pkg/dev_compiler/lib/src/compiler/js_utils.dart b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
index 73aeddc..e072a12 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_utils.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_utils.dart
@@ -33,7 +33,7 @@
   return v.mutated;
 }
 
-class MutationVisitor extends BaseVisitor<void> {
+class MutationVisitor extends BaseVisitorVoid {
   /// Using Identifier names instead of a more precise key may result in
   /// mutations being imprecisely reported when variables shadow each other.
   final mutated = <String>{};
@@ -46,7 +46,7 @@
 }
 
 /// Recursively clears all source information from all visited nodes.
-class SourceInformationClearer extends BaseVisitor<void> {
+class SourceInformationClearer extends BaseVisitorVoid {
   @override
   void visitNode(Node node) {
     node.visitChildren(this);
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 14685a4..9e89dc5 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -490,7 +490,7 @@
 
 /// Creates function name given [moduleName].
 String loadFunctionName(String moduleName) =>
-    'load__' + pathToJSIdentifier(moduleName.replaceAll('.', '_'));
+    'load__${pathToJSIdentifier(moduleName.replaceAll('.', '_'))}';
 
 /// Creates function name identifier given [moduleName].
 Identifier loadFunctionIdentifier(String moduleName) =>
diff --git a/pkg/dev_compiler/lib/src/compiler/module_containers.dart b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
index a669e71..8e954be 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_containers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
@@ -9,7 +9,7 @@
 import '../js_ast/js_ast.dart' show js;
 
 /// Defines how to emit a value of a table
-typedef _EmitValue<K> = js_ast.Expression Function(K, ModuleItemData);
+typedef EmitValue<K> = js_ast.Expression Function(K, ModuleItemData);
 
 /// Represents a top-level property hoisted to a top-level object.
 class ModuleItemData {
@@ -125,7 +125,7 @@
   /// necessary.
   ///
   /// Uses [emitValue] to emit the values in the table.
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue});
+  List<js_ast.Statement> emit({EmitValue<K> emitValue});
 }
 
 /// Associates a [K] with a container-unique JS key and arbitrary JS value.
@@ -184,7 +184,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({EmitValue<K> emitValue}) {
     var containersToProperties = <js_ast.Identifier, List<js_ast.Property>>{};
     moduleItems.forEach((k, v) {
       if (!incrementalMode && _noEmit.contains(k)) return;
@@ -240,7 +240,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({EmitValue<K> emitValue}) {
     var properties = List<js_ast.Expression>.filled(length, null);
 
     // If the entire array holds just one value, generate a short initializer.
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index ee52937..fd2b9c8 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -813,7 +813,7 @@
   return finder.found;
 }
 
-class _IdentifierFinder extends js_ast.BaseVisitor<void> {
+class _IdentifierFinder extends js_ast.BaseVisitorVoid {
   String nameToFind;
   bool found = false;
 
@@ -830,7 +830,7 @@
   }
 }
 
-class YieldFinder extends js_ast.BaseVisitor<void> {
+class YieldFinder extends js_ast.BaseVisitorVoid {
   bool hasYield = false;
   bool hasThis = false;
   bool _nestedFunction = false;
@@ -880,7 +880,7 @@
   return finder.found;
 }
 
-class _ThisOrSuperFinder extends js_ast.BaseVisitor<void> {
+class _ThisOrSuperFinder extends js_ast.BaseVisitorVoid {
   bool found = false;
 
   static final instance = _ThisOrSuperFinder();
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 1621087..5f0c23e 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -2,215 +2,212 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
-// ignore_for_file: always_declare_return_types, prefer_single_quotes
+// ignore_for_file: library_prefixes
 // ignore_for_file: non_constant_identifier_names
-// ignore_for_file: prefer_collection_literals, omit_local_variable_types
-// ignore_for_file: slash_for_doc_comments, unnecessary_new
+// ignore_for_file: omit_local_variable_types
+// ignore_for_file: prefer_single_quotes
 // ignore_for_file: unnecessary_brace_in_string_interps
 
-// Utilities for building JS ASTs at runtime.  Contains a builder class
-// and a parser that parses part of the language.
+/// Utilities for building JS ASTs at runtime. Contains a builder class and a
+/// parser that parses part of the language.
+library js_ast.builder;
 
-part of js_ast;
+import 'characters.dart' as charCodes;
+import 'nodes.dart';
+import 'template.dart';
 
-/**
- * Global template manager.  We should aim to have a fixed number of
- * templates. This implies that we do not use js('xxx') to parse text that is
- * constructed from values that depend on names in the Dart program.
- *
- * TODO(sra): Find the remaining places where js('xxx') used to parse an
- * unbounded number of expression, or institute a cache policy.
- */
+/// Global template manager.
+///
+/// We should aim to have a fixed number of templates. This implies that we do
+/// not use js('xxx') to parse text that is constructed from values that depend
+/// on names in the Dart program.
+// TODO(sra): Find the remaining places where js('xxx') used to parse an
+// unbounded number of expression, or institute a cache policy.
 TemplateManager templateManager = TemplateManager();
 
-/**
-
-[js] is a singleton instance of JsBuilder.  JsBuilder is a set of conveniences
-for constructing JavaScript ASTs.
-
-[string] and [number] are used to create leaf AST nodes:
-
-    var s = js.string('hello');    //  s = new LiteralString('"hello"')
-    var n = js.number(123);        //  n = new LiteralNumber(123)
-
-In the line above `a --> b` means Dart expression `a` evaluates to a JavaScript
-AST that would pretty-print as `b`.
-
-The [call] method constructs an Expression AST.
-
-No argument
-
-    js('window.alert("hello")')  -->  window.alert("hello")
-
-The input text can contain placeholders `#` that are replaced with provided
-arguments.  A single argument can be passed directly:
-
-    js('window.alert(#)', s)   -->  window.alert("hello")
-
-Multiple arguments are passed as a list:
-
-    js('# + #', [s, s])  -->  "hello" + "hello"
-
-The [statement] method constructs a Statement AST, but is otherwise like the
-[call] method.  This constructs a Return AST:
-
-    var ret = js.statement('return #;', n);  -->  return 123;
-
-A placeholder in a Statement context must be followed by a semicolon ';'.  You
-can think of a statement placeholder as being `#;` to explain why the output
-still has one semicolon:
-
-    js.statement('if (happy) #;', ret)
-    -->
-    if (happy)
-      return 123;
-
-If the placeholder is not followed by a semicolon, it is part of an expression.
-Here the placeholder is in the position of the function in a function call:
-
-    var vFoo = new Identifier('foo');
-    js.statement('if (happy) #("Happy!")', vFoo)
-    -->
-    if (happy)
-      foo("Happy!");
-
-Generally, a placeholder in an expression position requires an Expression AST as
-an argument and a placeholder in a statement position requires a Statement AST.
-An expression will be converted to a Statement if needed by creating an
-ExpressionStatement.  A String argument will be converted into a Identifier and
-requires that the string is a JavaScript identifier.
-
-    js('# + 1', vFoo)       -->  foo + 1
-    js('# + 1', 'foo')      -->  foo + 1
-    js('# + 1', 'foo.bar')  -->  assertion failure
-
-Some placeholder positions are _splicing contexts_.  A function argument list is
-a splicing expression context.  A placeholder in a splicing expression context
-can take a single Expression (or String, converted to Identifier) or an
-Iterable of Expressions (and/or Strings).
-
-    // non-splicing argument:
-    js('#(#)', ['say', s])        -->  say("hello")
-    // splicing arguments:
-    js('#(#)', ['say', []])       -->  say()
-    js('#(#)', ['say', [s]])      -->  say("hello")
-    js('#(#)', ['say', [s, n]])   -->  say("hello", 123)
-
-A splicing context can be used to append 'lists' and add extra elements:
-
-    js('foo(#, #, 1)', [ ['a', n], s])       -->  foo(a, 123, "hello", 1)
-    js('foo(#, #, 1)', [ ['a', n], [s, n]])  -->  foo(a, 123, "hello", 123, 1)
-    js('foo(#, #, 1)', [ [], [s, n]])        -->  foo("hello", 123, 1)
-    js('foo(#, #, 1)', [ [], [] ])           -->  foo(1)
-
-The generation of a compile-time optional argument expression can be chosen by
-providing an empty or singleton list.
-
-In addition to Expressions and Statements, there are Parameters, which occur
-only in the parameter list of a function expression or declaration.
-Placeholders in parameter positions behave like placeholders in Expression
-positions, except only Parameter AST nodes are permitted.  String arguments for
-parameter placeholders are converted to Parameter AST nodes.
-
-    var pFoo = new Parameter('foo')
-    js('function(#) { return #; }', [pFoo, vFoo])
-    -->
-    function(foo) { return foo; }
-
-Expressions and Parameters are not compatible with each other's context:
-
-    js('function(#) { return #; }', [vFoo, vFoo]) --> error
-    js('function(#) { return #; }', [pFoo, pFoo]) --> error
-
-The parameter context is a splicing context.  When combined with the
-context-sensitive conversion of Strings, this simplifies the construction of
-trampoline-like functions:
-
-    var args = ['a', 'b'];
-    js('function(#) { return f(this, #); }', [args, args])
-    -->
-    function(a, b) { return f(this, a, b); }
-
-A statement placeholder in a Block is also in a splicing context.  In addition
-to splicing Iterables, statement placeholders in a Block will also splice a
-Block or an EmptyStatement.  This flattens nested blocks and allows blocks to be
-appended.
-
-    var b1 = js.statement('{ 1; 2; }');
-    var sEmpty = new Emptystatement();
-    js.statement('{ #; #; #; #; }', [sEmpty, b1, b1, sEmpty])
-    -->
-    { 1; 2; 1; 2; }
-
-A placeholder in the context of an if-statement condition also accepts a Dart
-bool argument, which selects the then-part or else-part of the if-statement:
-
-    js.statement('if (#) return;', vFoo)   -->  if (foo) return;
-    js.statement('if (#) return;', true)   -->  return;
-    js.statement('if (#) return;', false)  -->  ;   // empty statement
-    var eTrue = new LiteralBool(true);
-    js.statement('if (#) return;', eTrue)  -->  if (true) return;
-
-Combined with block splicing, if-statement condition context placeholders allows
-the creation of templates that select code depending on variables.
-
-    js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', true)
-    --> { 1; 2; 5; }
-
-    js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', false)
-    --> { 1; 3; 4; 5; }
-
-A placeholder following a period in a property access is in a property access
-context.  This is just like an expression context, except String arguments are
-converted to JavaScript property accesses.  In JavaScript, `a.b` is short-hand
-for `a["b"]`:
-
-    js('a[#]', vFoo)  -->  a[foo]
-    js('a[#]', s)     -->  a.hello    (i.e. a["hello"]).
-    js('a[#]', 'x')   -->  a[x]
-
-    js('a.#', vFoo)   -->  a[foo]
-    js('a.#', s)      -->  a.hello    (i.e. a["hello"])
-    js('a.#', 'x')    -->  a.x        (i.e. a["x"])
-
-(Question - should `.#` be restricted to permit only String arguments? The
-template should probably be written with `[]` if non-strings are accepted.)
-
-
-Object initializers allow placeholders in the key property name position:
-
-    js('{#:1, #:2}',  [s, 'bye'])    -->  {hello: 1, bye: 2}
-
-
-What is not implemented:
-
- -  Array initializers and object initializers could support splicing.  In the
-    array case, we would need some way to know if an ArrayInitializer argument
-    should be splice or is intended as a single value.
-
- -  There are no placeholders in definition contexts:
-
-        function #(){}
-        var # = 1;
-
-*/
+/// [js] is a singleton instance of JsBuilder.
+///
+/// JsBuilder is a set of conveniences for constructing JavaScript ASTs.
+///
+/// [string] and [number] are used to create leaf AST nodes:
+///
+///     var s = js.string('hello');    //  s = new LiteralString('"hello"')
+///     var n = js.number(123);        //  n = new LiteralNumber(123)
+///
+/// In the line above `a --> b` means Dart expression `a` evaluates to a
+/// JavaScript AST that would pretty-print as `b`.
+///
+/// The [call] method constructs an Expression AST.
+///
+/// No argument
+///
+///     js('window.alert("hello")')  -->  window.alert("hello")
+///
+/// The input text can contain placeholders `#` that are replaced with provided
+/// arguments. A single argument can be passed directly:
+///
+///     js('window.alert(#)', s)   -->  window.alert("hello")
+///
+/// Multiple arguments are passed as a list:
+///
+///     js('# + #', [s, s])  -->  "hello" + "hello"
+///
+/// The [statement] method constructs a Statement AST, but is otherwise like the
+/// [call] method. This constructs a Return AST:
+///
+///     var ret = js.statement('return #;', n);  -->  return 123;
+///
+/// A placeholder in a Statement context must be followed by a semicolon ';'.
+/// You can think of a statement placeholder as being `#;` to explain why the
+/// output still has one semicolon:
+///
+///     js.statement('if (happy) #;', ret)
+///     -->
+///     if (happy)
+///       return 123;
+///
+/// If the placeholder is not followed by a semicolon, it is part of an
+/// expression. Here the placeholder is in the position of the function in a
+/// function call:
+///
+///     var vFoo = new Identifier('foo');
+///     js.statement('if (happy) #("Happy!")', vFoo)
+///     -->
+///     if (happy)
+///       foo("Happy!");
+///
+/// Generally, a placeholder in an expression position requires an Expression
+/// AST as an argument and a placeholder in a statement position requires a
+/// Statement AST. An expression will be converted to a Statement if needed by
+/// creating an ExpressionStatement. A String argument will be converted into a
+/// Identifier and requires that the string is a JavaScript identifier.
+///
+///     js('# + 1', vFoo)       -->  foo + 1
+///     js('# + 1', 'foo')      -->  foo + 1
+///     js('# + 1', 'foo.bar')  -->  assertion failure
+///
+/// Some placeholder positions are _splicing contexts_. A function argument list
+/// is a splicing expression context. A placeholder in a splicing expression
+/// context can take a single Expression (or String, converted to Identifier) or
+/// an Iterable of Expressions (and/or Strings).
+///
+///     // non-splicing argument:
+///     js('#(#)', ['say', s])        -->  say("hello")
+///     // splicing arguments:
+///     js('#(#)', ['say', []])       -->  say()
+///     js('#(#)', ['say', [s]])      -->  say("hello")
+///     js('#(#)', ['say', [s, n]])   -->  say("hello", 123)
+///
+/// A splicing context can be used to append 'lists' and add extra elements:
+///
+///     js('foo(#, #, 1)', [ ['a', n], s])       -->  foo(a, 123, "hello", 1)
+///     js('foo(#, #, 1)', [ ['a', n], [s, n]])  -->  foo(a, 123, "hello", 123, 1)
+///     js('foo(#, #, 1)', [ [], [s, n]])        -->  foo("hello", 123, 1)
+///     js('foo(#, #, 1)', [ [], [] ])           -->  foo(1)
+///
+/// The generation of a compile-time optional argument expression can be chosen
+/// by providing an empty or singleton list.
+///
+/// In addition to Expressions and Statements, there are Parameters, which occur
+/// only in the parameter list of a function expression or declaration.
+/// Placeholders in parameter positions behave like placeholders in Expression
+/// positions, except only Parameter AST nodes are permitted. String arguments
+/// for parameter placeholders are converted to Parameter AST nodes.
+///
+///     var pFoo = new Parameter('foo')
+///     js('function(#) { return #; }', [pFoo, vFoo])
+///     -->
+///     function(foo) { return foo; }
+///
+/// Expressions and Parameters are not compatible with each other's context:
+///
+///     js('function(#) { return #; }', [vFoo, vFoo]) --> error
+///     js('function(#) { return #; }', [pFoo, pFoo]) --> error
+///
+/// The parameter context is a splicing context. When combined with the
+/// context-sensitive conversion of Strings, this simplifies the construction of
+/// trampoline-like functions:
+///
+///     var args = ['a', 'b'];
+///     js('function(#) { return f(this, #); }', [args, args])
+///     -->
+///     function(a, b) { return f(this, a, b); }
+///
+/// A statement placeholder in a Block is also in a splicing context. In
+/// addition to splicing Iterables, statement placeholders in a Block will also
+/// splice a Block or an EmptyStatement. This flattens nested blocks and allows
+/// blocks to be appended.
+///
+///     var b1 = js.statement('{ 1; 2; }');
+///     var sEmpty = new EmptyStatement();
+///     js.statement('{ #; #; #; #; }', [sEmpty, b1, b1, sEmpty])
+///     -->
+///     { 1; 2; 1; 2; }
+///
+/// A placeholder in the context of an if-statement condition also accepts a
+/// Dart bool argument, which selects the then-part or else-part of the
+/// if-statement:
+///
+///     js.statement('if (#) return;', vFoo)   -->  if (foo) return;
+///     js.statement('if (#) return;', true)   -->  return;
+///     js.statement('if (#) return;', false)  -->  ;   // empty statement
+///     var eTrue = new LiteralBool(true);
+///     js.statement('if (#) return;', eTrue)  -->  if (true) return;
+///
+/// Combined with block splicing, if-statement condition context placeholders
+/// allows the creation of templates that select code depending on variables.
+///
+///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', true)
+///     --> { 1; 2; 5; }
+///
+///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', false)
+///     --> { 1; 3; 4; 5; }
+///
+/// A placeholder following a period in a property access is in a property
+/// access context. This is just like an expression context, except String
+/// arguments are converted to JavaScript property accesses. In JavaScript,
+/// `a.b` is short-hand for `a["b"]`:
+///
+///     js('a[#]', vFoo)  -->  a[foo]
+///     js('a[#]', s)     -->  a.hello    (i.e. a["hello"]).
+///     js('a[#]', 'x')   -->  a[x]
+///
+///     js('a.#', vFoo)   -->  a[foo]
+///     js('a.#', s)      -->  a.hello    (i.e. a["hello"])
+///     js('a.#', 'x')    -->  a.x        (i.e. a["x"])
+///
+/// (Question - should `.#` be restricted to permit only String arguments? The
+/// template should probably be written with `[]` if non-strings are accepted.)
+///
+///
+/// Object initializers allow placeholders in the key property name position:
+///
+///     js('{#:1, #:2}',  [s, 'bye'])    -->  {hello: 1, bye: 2}
+///
+///
+/// What is not implemented:
+///
+///  -  Array initializers and object initializers could support splicing. In
+///     the array case, we would need some way to know if an ArrayInitializer
+///     argument should be splice or is intended as a single value.
+///
+///  -  There are no placeholders in definition contexts:
+///
+///         function #(){}
+///         var # = 1;
 const JsBuilder js = JsBuilder();
 
 class JsBuilder {
   const JsBuilder();
 
-  /**
-   * Parses a bit of JavaScript, and returns an expression.
-   *
-   * See the MiniJsParser class.
-   *
-   * [arguments] can be a single [Node] (e.g. an [Expression] or [Statement]) or
-   * a list of [Node]s, which will be interpolated into the source at the '#'
-   * signs.
-   */
-  Expression call(String source, [arguments]) {
+  /// Parses a bit of JavaScript, and returns an expression.
+  ///
+  /// See the MiniJsParser class.
+  ///
+  /// [arguments] can be a single [Node] (e.g. an [Expression] or [Statement])
+  /// or a list of [Node]s, which will be interpolated into the source at the
+  /// '#' signs.
+  Expression call(String source, [Object? arguments]) {
     Template template = _findExpressionTemplate(source);
     if (arguments == null) return template.instantiate([]) as Expression;
     // We allow a single argument to be given directly.
@@ -218,10 +215,8 @@
     return template.instantiate(arguments) as Expression;
   }
 
-  /**
-   * Parses a JavaScript Statement, otherwise just like [call].
-   */
-  Statement statement(String source, [arguments]) {
+  /// Parses a JavaScript Statement, otherwise just like [call].
+  Statement statement(String source, [Object? arguments]) {
     Template template = _findStatementTemplate(source);
     if (arguments == null) return template.instantiate([]) as Statement;
     // We allow a single argument to be given directly.
@@ -233,12 +228,10 @@
       statement(source, arguments) as Block;
   Fun fun(String source, [arguments]) => call(source, arguments) as Fun;
 
-  /**
-   * Parses JavaScript written in the `JS` foreign instruction.
-   *
-   * The [source] must be a JavaScript expression or a JavaScript throw
-   * statement.
-   */
+  /// Parses JavaScript written in the `JS` foreign instruction.
+  ///
+  /// The [source] must be a JavaScript expression or a JavaScript throw
+  /// statement.
   Template parseForeignJS(String source) {
     // TODO(sra): Parse with extra validation to forbid `#` interpolation in
     // functions, as this leads to unanticipated capture of temporaries that are
@@ -251,7 +244,7 @@
   }
 
   Template _findExpressionTemplate(String source) {
-    Template template = templateManager.lookupExpressionTemplate(source);
+    Template? template = templateManager.lookupExpressionTemplate(source);
     if (template == null) {
       MiniJsParser parser = MiniJsParser(source);
       Expression expression = parser.expression();
@@ -261,7 +254,7 @@
   }
 
   Template _findStatementTemplate(String source) {
-    Template template = templateManager.lookupStatementTemplate(source);
+    Template? template = templateManager.lookupStatementTemplate(source);
     if (template == null) {
       MiniJsParser parser = MiniJsParser(source);
       Statement statement = parser.statement();
@@ -270,34 +263,28 @@
     return template;
   }
 
-  /**
-   * Creates an Expression template without caching the result.
-   */
+  /// Creates an Expression template without caching the result.
   Template uncachedExpressionTemplate(String source) {
     MiniJsParser parser = MiniJsParser(source);
     Expression expression = parser.expression();
     return Template(source, expression, isExpression: true, forceCopy: false);
   }
 
-  /**
-   * Creates a Statement template without caching the result.
-   */
+  /// Creates a Statement template without caching the result.
   Template uncachedStatementTemplate(String source) {
     MiniJsParser parser = MiniJsParser(source);
     Statement statement = parser.statement();
     return Template(source, statement, isExpression: false, forceCopy: false);
   }
 
-  /**
-   * Create an Expression template which has [ast] as the result.  This is used
-   * to wrap a generated AST in a zero-argument Template so it can be passed to
-   * context that expects a template.
-   */
-  Template expressionTemplateYielding(Node ast) {
+  /// Create an Expression template which has [ast] as the result. This is used
+  /// to wrap a generated AST in a zero-argument Template so it can be passed to
+  /// context that expects a template.
+  Template expressionTemplateYielding(Expression ast) {
     return Template.withExpressionResult(ast);
   }
 
-  Template statementTemplateYielding(Node ast) {
+  Template statementTemplateYielding(Statement ast) {
     return Template.withStatementResult(ast);
   }
 
@@ -335,10 +322,10 @@
       return string(value, quote);
     }
 
-    var sb = new StringBuffer();
+    var sb = StringBuffer();
 
     for (int rune in value.runes) {
-      String escape = _irregularEscape(rune, quote);
+      final escape = _irregularEscape(rune, quote);
       if (escape != null) {
         sb.write(escape);
         continue;
@@ -367,7 +354,7 @@
 
   static bool _isUnpairedSurrogate(int code) => (code & 0xFFFFF800) == 0xD800;
 
-  static String _irregularEscape(int code, String quote) {
+  static String? _irregularEscape(int code, String quote) {
     switch (code) {
       case charCodes.$SQ:
         return quote == "'" ? r"\'" : "'";
@@ -408,7 +395,7 @@
   LiteralNumber number(num value) => LiteralNumber('$value');
 
   LiteralNumber uint64(int value) {
-    BigInt uint64Value = new BigInt.from(value).toUnsigned(64);
+    BigInt uint64Value = BigInt.from(value).toUnsigned(64);
     return LiteralNumber('$uint64Value');
   }
 
@@ -468,7 +455,7 @@
 }
 
 /// Mini JavaScript parser for tiny snippets of code that we want to make into
-/// AST nodes.  Handles:
+/// AST nodes. Handles:
 /// * identifiers.
 /// * dot access.
 /// * method calls.
@@ -487,20 +474,16 @@
 /// Literal strings are passed through to the final JS source code unchanged,
 /// including the choice of surrounding quotes, so if you parse
 /// r'var x = "foo\n\"bar\""' you will end up with
-///   var x = "foo\n\"bar\"" in the final program.  \x and \u escapes are not
+///   var x = "foo\n\"bar\"" in the final program. \x and \u escapes are not
 /// allowed in string and regexp literals because the machinery for checking
 /// their correctness is rather involved.
 class MiniJsParser {
-  MiniJsParser(this.src)
-      : lastCategory = NONE,
-        lastToken = null,
-        lastPosition = 0,
-        position = 0 {
+  MiniJsParser(this.src) {
     getToken();
   }
 
   int lastCategory = NONE;
-  String lastToken;
+  String lastToken = '';
   int lastPosition = 0;
   int position = 0;
   bool skippedNewline = false; // skipped newline in last getToken?
@@ -654,7 +637,7 @@
     '/': 5,
     '%': 5
   };
-  static final UNARY_OPERATORS = [
+  static final UNARY_OPERATORS = {
     '++',
     '--',
     '+',
@@ -665,12 +648,12 @@
     'void',
     'delete',
     'await'
-  ].toSet();
+  };
 
   static final ARROW_TOKEN = '=>';
   static final ELLIPSIS_TOKEN = '...';
 
-  static final OPERATORS_THAT_LOOK_LIKE_IDENTIFIERS = [
+  static final OPERATORS_THAT_LOOK_LIKE_IDENTIFIERS = {
     'typeof',
     'void',
     'delete',
@@ -678,7 +661,7 @@
     'instanceof',
     'await',
     'extends'
-  ].toSet();
+  };
 
   static int category(int code) {
     if (code >= CATEGORIES.length) return OTHER;
@@ -736,7 +719,7 @@
 
     if (position == src.length) {
       lastCategory = NONE;
-      lastToken = null;
+      lastToken = '';
       lastPosition = position;
       return;
     }
@@ -801,8 +784,8 @@
         if (lastToken == ARROW_TOKEN) {
           lastCategory = ARROW;
         } else {
-          int binaryPrecendence = BINARY_PRECEDENCE[lastToken];
-          if (binaryPrecendence == null &&
+          int? binaryPrecedence = BINARY_PRECEDENCE[lastToken];
+          if (binaryPrecedence == null &&
               !UNARY_OPERATORS.contains(lastToken)) {
             error("Unknown operator");
           }
@@ -853,12 +836,12 @@
     return false;
   }
 
-  void error(String message) {
+  Never error(String message) {
     throw MiniJsParserError(this, message);
   }
 
   /// Returns either the name for the hole, or its integer position.
-  parseHash() {
+  Object parseHash() {
     String holeName = lastToken;
     if (acceptCategory(ALPHA)) {
       // Named hole. Example: 'function #funName() { ... }'
@@ -917,7 +900,7 @@
         expectCategory(COMMA);
       }
       return ArrayInitializer(values);
-    } else if (last != null && last.startsWith("/")) {
+    } else if (last.startsWith("/")) {
       String regexp = getDelimited(lastPosition);
       getToken();
       String flags = lastToken;
@@ -928,7 +911,6 @@
       return parseInterpolatedExpression();
     } else {
       error("Expected primary expression");
-      return null;
     }
   }
 
@@ -954,13 +936,11 @@
     }
   }
 
-  /**
-   * CoverParenthesizedExpressionAndArrowParameterList[Yield] :
-   *     ( Expression )
-   *     ( )
-   *     ( ... BindingIdentifier )
-   *     ( Expression , ... BindingIdentifier )
-   */
+  /// CoverParenthesizedExpressionAndArrowParameterList[Yield] :
+  ///     ( Expression )
+  ///     ( )
+  ///     ( ... BindingIdentifier )
+  ///     ( Expression , ... BindingIdentifier )
   Expression parseExpressionOrArrowFunction() {
     if (acceptCategory(RPAREN)) {
       expectCategory(ARROW);
@@ -994,10 +974,8 @@
     return expression;
   }
 
-  /**
-   * Converts a parenthesized expression into a list of parameters, issuing an
-   * error if the conversion fails.
-   */
+  /// Converts a parenthesized expression into a list of parameters, issuing an
+  /// error if the conversion fails.
   void _expressionToParameterList(Expression node, List<Parameter> params) {
     if (node is Identifier) {
       params.add(node);
@@ -1071,7 +1049,7 @@
     return Fun(params, block, asyncModifier: asyncModifier);
   }
 
-  /** Parse parameter name or interpolated parameter. */
+  /// Parse parameter name or interpolated parameter.
   Identifier parseParameter() {
     if (acceptCategory(HASH)) {
       var nameOrPosition = parseHash();
@@ -1217,27 +1195,29 @@
 
   Expression parseBinary(int maxPrecedence) {
     Expression lhs = parseUnaryLow();
-    int minPrecedence;
-    String lastSymbol;
-    Expression rhs; // This is null first time around.
+    Expression? rhs; // This is null first time around.
+    late int minPrecedence;
+    late String lastSymbol;
+
     while (true) {
-      String symbol = lastToken;
-      if (lastCategory != SYMBOL ||
-          !BINARY_PRECEDENCE.containsKey(symbol) ||
-          BINARY_PRECEDENCE[symbol] > maxPrecedence) {
-        break;
-      }
+      final symbol = lastToken;
+      if (lastCategory != SYMBOL) break;
+      final symbolPrecedence = BINARY_PRECEDENCE[symbol];
+      if (symbolPrecedence == null) break;
+      if (symbolPrecedence > maxPrecedence) break;
+
       expectCategory(SYMBOL);
-      if (rhs == null || BINARY_PRECEDENCE[symbol] >= minPrecedence) {
+      if (rhs == null || symbolPrecedence >= minPrecedence) {
         if (rhs != null) lhs = Binary(lastSymbol, lhs, rhs);
-        minPrecedence = BINARY_PRECEDENCE[symbol];
+        minPrecedence = symbolPrecedence;
         rhs = parseUnaryLow();
         lastSymbol = symbol;
       } else {
-        Expression higher = parseBinary(BINARY_PRECEDENCE[symbol]);
+        Expression higher = parseBinary(symbolPrecedence);
         rhs = Binary(symbol, rhs, higher);
       }
     }
+
     if (rhs == null) return lhs;
     return Binary(lastSymbol, lhs, rhs);
   }
@@ -1279,9 +1259,9 @@
     return expression;
   }
 
-  /** Parse a variable declaration list, with `var` or `let` [keyword] */
+  /// Parse a variable declaration list, with `var` or `let` [keyword].
   VariableDeclarationList parseVariableDeclarationList(String keyword,
-      [String firstIdentifier]) {
+      [String? firstIdentifier]) {
     var initialization = <VariableInitialization>[];
 
     do {
@@ -1310,7 +1290,6 @@
         return parseBindingPattern();
       default:
         error('Unexpected token $lastToken: ${categoryToString(lastCategory)}');
-        return null;
     }
   }
 
@@ -1332,9 +1311,9 @@
   ArrayBindingPattern parseArrayBindingPattern() {
     var variables = <DestructuredVariable>[];
     do {
-      Identifier name;
-      BindingPattern structure;
-      Expression defaultValue;
+      late Identifier name;
+      BindingPattern? structure;
+      Expression? defaultValue;
 
       var declarator = parseVariableBinding();
       if (declarator is Identifier) {
@@ -1360,8 +1339,8 @@
     var variables = <DestructuredVariable>[];
     do {
       var name = parseIdentifier();
-      BindingPattern structure;
-      Expression defaultValue;
+      BindingPattern? structure;
+      Expression? defaultValue;
 
       if (acceptCategory(COLON)) {
         structure = parseBindingPattern();
@@ -1385,8 +1364,8 @@
     }
   }
 
-  /** Accepts a `var` or `let` keyword. If neither is found, returns null. */
-  String acceptVarLetOrConst() {
+  /// Accepts a `var` or `let` keyword. If neither is found, returns null.
+  String? acceptVarLetOrConst() {
     if (acceptString('var')) return 'var';
     if (acceptString('let')) return 'let';
     if (acceptString('const')) return 'const';
@@ -1523,7 +1502,7 @@
     return Throw(expression);
   }
 
-  Statement parseBreakOrContinue(Statement Function(String) constructor) {
+  Statement parseBreakOrContinue(Statement Function(String?) constructor) {
     var identifier = lastToken;
     if (!skippedNewline && acceptCategory(ALPHA)) {
       expectSemicolon();
@@ -1558,13 +1537,13 @@
     //
     //     for (let variable of Expression) Statement
     //
-    Statement finishFor(Expression init) {
-      Expression condition;
+    Statement finishFor(Expression? init) {
+      Expression? condition;
       if (!acceptCategory(SEMICOLON)) {
         condition = parseExpression();
         expectCategory(SEMICOLON);
       }
-      Expression update;
+      Expression? update;
       if (!acceptCategory(RPAREN)) {
         update = parseExpression();
         expectCategory(RPAREN);
@@ -1622,9 +1601,9 @@
   Statement parseTry() {
     expectCategory(LBRACE);
     Block body = parseBlock();
-    Catch catchPart;
+    Catch? catchPart;
     if (acceptString('catch')) catchPart = parseCatch();
-    Block finallyPart;
+    Block? finallyPart;
     if (acceptString('finally')) {
       expectCategory(LBRACE);
       finallyPart = parseBlock();
@@ -1634,8 +1613,8 @@
     return Try(body, catchPart, finallyPart);
   }
 
-  SwitchCase parseSwitchClause() {
-    Expression expression;
+  SwitchClause parseSwitchClause() {
+    Expression? expression;
     if (acceptString('case')) {
       expression = parseExpression();
       expectCategory(COLON);
@@ -1651,7 +1630,9 @@
         lastToken != 'default') {
       statements.add(parseStatement());
     }
-    return SwitchCase(expression, Block(statements));
+    return expression == null
+        ? Default(Block(statements))
+        : Case(expression, Block(statements));
   }
 
   Statement parseWhile() {
@@ -1678,7 +1659,7 @@
     Expression key = parseExpression();
     expectCategory(RPAREN);
     expectCategory(LBRACE);
-    var clauses = <SwitchCase>[];
+    var clauses = <SwitchClause>[];
     while (lastCategory != RBRACE) {
       clauses.add(parseSwitchClause());
     }
@@ -1698,7 +1679,7 @@
 
   ClassExpression parseClass() {
     Identifier name = parseIdentifier();
-    Expression heritage;
+    Expression? heritage;
     if (acceptString('extends')) {
       heritage = parseConditional();
     }
@@ -1711,23 +1692,21 @@
     return ClassExpression(name, heritage, methods);
   }
 
-  /**
-   * Parses a [Method] or a [Property].
-   *
-   * Most of the complexity is from supporting interpolation. Several forms
-   * are supported:
-   *
-   * - getter/setter names: `get #() { ... }`
-   * - method names: `#() { ... }`
-   * - property names: `#: ...`
-   * - entire methods: `#`
-   */
+  /// Parses a [Method] or a [Property].
+  ///
+  /// Most of the complexity is from supporting interpolation. Several forms are
+  /// supported:
+  ///
+  /// - getter/setter names: `get #() { ... }`
+  /// - method names: `#() { ... }`
+  /// - property names: `#: ...`
+  /// - entire methods: `#`
   Property parseMethodOrProperty({bool onlyMethods = false}) {
     bool isStatic = acceptString('static');
 
     bool isGetter = lastToken == 'get';
     bool isSetter = lastToken == 'set';
-    Expression name;
+    Expression? name;
     if (isGetter || isSetter) {
       var token = lastToken;
       getToken();
@@ -1774,7 +1753,6 @@
       return parseInterpolatedExpression();
     } else {
       error('Expected property name');
-      return null;
     }
   }
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/characters.dart b/pkg/dev_compiler/lib/src/js_ast/characters.dart
index 1ce0d48..e3382c3 100644
--- a/pkg/dev_compiler/lib/src/js_ast/characters.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/characters.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 const int $EOF = 0;
 const int $STX = 2;
 const int $BS = 8;
diff --git a/pkg/dev_compiler/lib/src/js_ast/js_ast.dart b/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
index 373547e..7fc3091 100644
--- a/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
@@ -2,17 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
-// ignore_for_file: directives_ordering
-
 library js_ast;
 
-import 'precedence.dart';
-// ignore: library_prefixes
-import 'characters.dart' as charCodes;
-
-part 'nodes.dart';
-part 'builder.dart';
-part 'printer.dart';
-part 'template.dart';
+export 'builder.dart';
+export 'nodes.dart';
+export 'printer.dart';
+export 'template.dart';
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index 8618c7e..9d29e05 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -2,15 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
+// ignore_for_file: always_declare_return_types
+// ignore_for_file: omit_local_variable_types
+// ignore_for_file: prefer_single_quotes
+// ignore_for_file: unnecessary_this
 
-// ignore_for_file: always_declare_return_types, prefer_final_fields
-// ignore_for_file: always_require_non_null_named_parameters
-// ignore_for_file: omit_local_variable_types, unnecessary_this
-// ignore_for_file: prefer_initializing_formals
-// ignore_for_file: slash_for_doc_comments, prefer_single_quotes
+library js_ast.nodes;
 
-part of js_ast;
+import 'precedence.dart';
+import 'printer.dart';
 
 abstract class NodeVisitor<T> {
   T visitProgram(Program node);
@@ -32,7 +32,8 @@
   T visitTry(Try node);
   T visitCatch(Catch node);
   T visitSwitch(Switch node);
-  T visitSwitchCase(SwitchCase node);
+  T visitCase(Case node);
+  T visitDefault(Default node);
   T visitFunctionDeclaration(FunctionDeclaration node);
   T visitLabeledStatement(LabeledStatement node);
   T visitLiteralStatement(LiteralStatement node);
@@ -84,7 +85,6 @@
   T visitExportDeclaration(ExportDeclaration node);
   T visitExportClause(ExportClause node);
   T visitNameSpecifier(NameSpecifier node);
-  T visitModule(Module node);
 
   T visitComment(Comment node);
   T visitCommentExpression(CommentExpression node);
@@ -103,12 +103,8 @@
   T visitSimpleBindingPattern(SimpleBindingPattern node);
 }
 
-class BaseVisitor<T> implements NodeVisitor<T> {
-  T visitNode(Node node) {
-    node.visitChildren(this);
-    return null;
-  }
-
+abstract class BaseVisitor<T> implements NodeVisitor<T> {
+  T visitNode(Node node);
   @override
   T visitProgram(Program node) => visitNode(node);
 
@@ -158,7 +154,9 @@
   @override
   T visitCatch(Catch node) => visitNode(node);
   @override
-  T visitSwitchCase(SwitchCase node) => visitNode(node);
+  T visitCase(Case node) => visitNode(node);
+  @override
+  T visitDefault(Default node) => visitNode(node);
 
   T visitExpression(Expression node) => visitNode(node);
 
@@ -252,8 +250,6 @@
   T visitExportClause(ExportClause node) => visitNode(node);
   @override
   T visitNameSpecifier(NameSpecifier node) => visitNode(node);
-  @override
-  T visitModule(Module node) => visitNode(node);
 
   T visitInterpolatedNode(InterpolatedNode node) => visitNode(node);
 
@@ -279,11 +275,10 @@
   T visitInterpolatedIdentifier(InterpolatedIdentifier node) =>
       visitInterpolatedNode(node);
 
-  // Ignore comments by default.
   @override
-  T visitComment(Comment node) => null;
+  T visitComment(Comment node);
   @override
-  T visitCommentExpression(CommentExpression node) => null;
+  T visitCommentExpression(CommentExpression node);
 
   @override
   T visitAwait(Await node) => visitExpression(node);
@@ -303,20 +298,35 @@
   T visitSimpleBindingPattern(SimpleBindingPattern node) => visitNode(node);
 }
 
+class BaseVisitorVoid extends BaseVisitor<void> {
+  @override
+  void visitNode(Node node) {
+    node.visitChildren(this);
+  }
+
+  // Ignore comments by default.
+  @override
+  void visitComment(Comment node) {}
+  @override
+  void visitCommentExpression(CommentExpression node) {}
+}
+
 abstract class Node {
   /// Sets the source location of this node. For performance reasons, we allow
   /// setting this after construction.
-  Object sourceInformation;
+  Object? sourceInformation;
 
   T accept<T>(NodeVisitor<T> visitor);
   void visitChildren(NodeVisitor visitor);
 
-  // Shallow clone of node.  Does not clone positions since the only use of this
-  // private method is create a copy with a new position.
+  /// Shallow clone of node.
+  ///
+  /// Does not clone positions since the only use of this private method is
+  /// create a copy with a new position.
   Node _clone();
 
-  // Returns a node equivalent to [this], but with new source position and end
-  // source position.
+  /// Returns a node equivalent to [this], but with new source position and end
+  /// source position.
   Node withSourceInformation(sourceInformation) {
     if (sourceInformation == this.sourceInformation) {
       return this;
@@ -352,8 +362,8 @@
 
 // TODO(jmesserly): rename to Module.
 class Program extends Node {
-  /// Script tag hash-bang, e.g. `#!/usr/bin/env node`
-  final String scriptTag;
+  /// Script tag hash-bang, e.g. `#!/usr/bin/env node`.
+  final String? scriptTag;
 
   /// Top-level statements in the program.
   final List<ModuleItem> body;
@@ -361,7 +371,7 @@
   /// The module's own name.
   ///
   /// This is not used in ES6, but is provided to allow module lowering.
-  final String name;
+  final String? name;
 
   Program(this.body, {this.scriptTag, this.name});
 
@@ -395,7 +405,7 @@
   /// JavaScript syntax error due to a redeclared identifier.
   bool shadows(Set<String> names) => false;
 
-  /// Whether this statement would always `return` if used as a funtion body.
+  /// Whether this statement would always `return` if used as a function body.
   ///
   /// This is only well defined on the outermost block; it cannot be used for a
   /// block inside of a loop (because of `break` and `continue`).
@@ -421,9 +431,8 @@
   /// True to preserve this [Block] for scoping reasons.
   final bool isScope;
 
-  Block(this.statements, {this.isScope = false}) {
-    assert(statements.every((s) => s is Statement));
-  }
+  Block(this.statements, {this.isScope = false});
+
   Block.empty()
       : statements = <Statement>[],
         isScope = false;
@@ -498,13 +507,13 @@
   final Statement otherwise;
 
   If(this.condition, this.then, this.otherwise);
-  If.noElse(this.condition, this.then) : this.otherwise = null;
+  If.noElse(this.condition, this.then) : this.otherwise = EmptyStatement();
 
   @override
   bool get alwaysReturns =>
       hasElse && then.alwaysReturns && otherwise.alwaysReturns;
 
-  bool get hasElse => otherwise != null;
+  bool get hasElse => otherwise is! EmptyStatement;
 
   @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitIf(this);
@@ -513,7 +522,7 @@
   void visitChildren(NodeVisitor visitor) {
     condition.accept(visitor);
     then.accept(visitor);
-    if (otherwise != null) otherwise.accept(visitor);
+    otherwise.accept(visitor);
   }
 
   @override
@@ -526,9 +535,9 @@
 }
 
 class For extends Loop {
-  final Expression init;
-  final Expression condition;
-  final Expression update;
+  final Expression? init;
+  final Expression? condition;
+  final Expression? update;
 
   For(this.init, this.condition, this.update, Statement body) : super(body);
 
@@ -537,9 +546,9 @@
 
   @override
   void visitChildren(NodeVisitor visitor) {
-    if (init != null) init.accept(visitor);
-    if (condition != null) condition.accept(visitor);
-    if (update != null) update.accept(visitor);
+    init?.accept(visitor);
+    condition?.accept(visitor);
+    update?.accept(visitor);
     body.accept(visitor);
   }
 
@@ -628,7 +637,8 @@
 }
 
 class Continue extends Statement {
-  final String targetLabel; // Can be null.
+  /// Name of the label L for `continue L;` or `null` for `continue;`.
+  final String? targetLabel;
 
   Continue(this.targetLabel);
 
@@ -642,7 +652,8 @@
 }
 
 class Break extends Statement {
-  final String targetLabel; // Can be null.
+  /// Name of the label L for `break L;` or `null` for `break;`.
+  final String? targetLabel;
 
   Break(this.targetLabel);
 
@@ -656,7 +667,7 @@
 }
 
 class Return extends Statement {
-  final Expression value; // Can be null.
+  final Expression? value;
 
   Return([this.value]);
 
@@ -671,7 +682,7 @@
 
   @override
   void visitChildren(NodeVisitor visitor) {
-    if (value != null) value.accept(visitor);
+    value?.accept(visitor);
   }
 
   @override
@@ -686,7 +697,7 @@
 
 final _returnFinder = _ReturnFinder();
 
-class _ReturnFinder extends BaseVisitor {
+class _ReturnFinder extends BaseVisitorVoid {
   bool found = false;
   @override
   visitReturn(Return node) {
@@ -718,8 +729,8 @@
 
 class Try extends Statement {
   final Block body;
-  final Catch catchPart; // Can be null if [finallyPart] is non-null.
-  final Block finallyPart; // Can be null if [catchPart] is non-null.
+  final Catch? catchPart; // Can be null if [finallyPart] is non-null.
+  final Block? finallyPart; // Can be null if [catchPart] is non-null.
 
   Try(this.body, this.catchPart, this.finallyPart) {
     assert(catchPart != null || finallyPart != null);
@@ -731,8 +742,8 @@
   @override
   void visitChildren(NodeVisitor visitor) {
     body.accept(visitor);
-    if (catchPart != null) catchPart.accept(visitor);
-    if (finallyPart != null) finallyPart.accept(visitor);
+    catchPart?.accept(visitor);
+    finallyPart?.accept(visitor);
   }
 
   @override
@@ -760,7 +771,7 @@
 
 class Switch extends Statement {
   final Expression key;
-  final List<SwitchCase> cases;
+  final List<SwitchClause> cases;
 
   Switch(this.key, this.cases);
 
@@ -779,26 +790,43 @@
   Switch _clone() => Switch(key, cases);
 }
 
-class SwitchCase extends Node {
-  final Expression expression;
+abstract class SwitchClause extends Node {
   final Block body;
 
-  SwitchCase(this.expression, this.body);
-  SwitchCase.defaultCase(this.body) : expression = null;
+  SwitchClause(this.body);
+}
 
-  bool get isDefault => expression == null;
+class Case extends SwitchClause {
+  final Expression expression;
+
+  Case(this.expression, Block body) : super(body);
 
   @override
-  T accept<T>(NodeVisitor<T> visitor) => visitor.visitSwitchCase(this);
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitCase(this);
 
   @override
   void visitChildren(NodeVisitor visitor) {
-    expression?.accept(visitor);
+    expression.accept(visitor);
     body.accept(visitor);
   }
 
   @override
-  SwitchCase _clone() => SwitchCase(expression, body);
+  Case _clone() => Case(expression, body);
+}
+
+class Default extends SwitchClause {
+  Default(Block body) : super(body);
+
+  @override
+  T accept<T>(NodeVisitor<T> visitor) => visitor.visitDefault(this);
+
+  @override
+  void visitChildren(NodeVisitor visitor) {
+    body.accept(visitor);
+  }
+
+  @override
+  Default _clone() => Default(body);
 }
 
 class FunctionDeclaration extends Statement {
@@ -852,8 +880,8 @@
   LiteralStatement _clone() => LiteralStatement(code);
 }
 
-// Not a real JavaScript node, but represents the yield statement from a dart
-// program translated to JavaScript.
+/// Not a real JavaScript node, but represents the yield statement from a dart
+/// program translated to JavaScript.
 class DartYield extends Statement {
   final Expression expression;
 
@@ -877,11 +905,11 @@
   Expression();
 
   factory Expression.binary(List<Expression> exprs, String op) {
-    Expression comma;
+    Expression? comma;
     for (var node in exprs) {
       comma = (comma == null) ? node : Binary(op, comma, node);
     }
-    return comma;
+    return comma!;
   }
 
   int get precedenceLevel;
@@ -896,7 +924,7 @@
       ExpressionStatement(Yield(this, star: star));
 
   Expression toVoidExpression() => this;
-  Expression toAssignExpression(Expression left, [String op]) =>
+  Expression toAssignExpression(Expression left, [String? op]) =>
       Assignment.compound(left, op, this);
 
   // TODO(jmesserly): make this work for more cases?
@@ -924,16 +952,13 @@
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * [VariableDeclarationList] is a subclass of [Expression] to simplify the
- * AST.
- */
+/// [VariableDeclarationList] is a subclass of [Expression] to simplify the AST.
 class VariableDeclarationList extends Expression {
-  /**
-   * The `var` or `let` or `const` keyword used for this variable declaration
-   * list.
-   */
-  final String keyword;
+  /// The `var` or `let` or `const` keyword used for this variable declaration
+  /// list.
+  ///
+  /// Can be null in the case of non-static field declarations.
+  final String? keyword;
   final List<VariableInitialization> declarations;
 
   VariableDeclarationList(this.keyword, this.declarations);
@@ -970,10 +995,12 @@
 
 class Assignment extends Expression {
   final Expression leftHandSide;
-  final String op; // Null, if the assignment is not compound.
+  final String? op; // `null` if the assignment is not compound.
   final Expression value;
 
   Assignment(this.leftHandSide, this.value) : op = null;
+
+  // If `this.op == null` this will be a non-compound assignment.
   Assignment.compound(this.leftHandSide, this.op, this.value);
 
   @override
@@ -987,7 +1014,7 @@
   @override
   void visitChildren(NodeVisitor visitor) {
     leftHandSide.accept(visitor);
-    if (value != null) value.accept(visitor);
+    value.accept(visitor);
   }
 
   @override
@@ -996,9 +1023,9 @@
 
 class VariableInitialization extends Expression {
   final VariableBinding declaration;
-  final Expression value; // May be null.
+  // The initializing value can be missing, e.g. for `a` in `var a, b=1;`.
+  final Expression? value;
 
-  /// [value] may be null.
   VariableInitialization(this.declaration, this.value);
 
   @override
@@ -1014,7 +1041,7 @@
   @override
   void visitChildren(NodeVisitor visitor) {
     declaration.accept(visitor);
-    if (value != null) value.accept(visitor);
+    value?.accept(visitor);
   }
 }
 
@@ -1030,27 +1057,23 @@
 class DestructuredVariable extends Expression implements Parameter {
   final Identifier name;
 
-  /// The proprety in an object binding pattern, for example:
+  /// The property in an object binding pattern, for example:
   ///
   ///     let key = 'z';
   ///     let {[key]: foo} = {z: 'bar'};
   ///     console.log(foo); // "bar"
   ///
   // TODO(jmesserly): parser does not support this feature.
-  final Expression property;
-
-  final BindingPattern structure;
-  final Expression defaultValue;
+  final Expression? property;
+  final BindingPattern? structure;
+  final Expression? defaultValue;
 
   DestructuredVariable(
-      {this.name, this.property, this.structure, this.defaultValue}) {
-    assert(name != null || structure != null);
-  }
+      {required this.name, this.property, this.structure, this.defaultValue});
 
   @override
   bool shadows(Set<String> names) {
-    return (name?.shadows(names) ?? false) ||
-        (structure?.shadows(names) ?? false);
+    return name.shadows(names) || (structure?.shadows(names) ?? false);
   }
 
   @override
@@ -1058,7 +1081,7 @@
       visitor.visitDestructuredVariable(this);
   @override
   void visitChildren(NodeVisitor visitor) {
-    name?.accept(visitor);
+    name.accept(visitor);
     structure?.accept(visitor);
     defaultValue?.accept(visitor);
   }
@@ -1098,9 +1121,7 @@
 
 class SimpleBindingPattern extends BindingPattern {
   final Identifier name;
-  SimpleBindingPattern(Identifier name)
-      : name = name,
-        super([DestructuredVariable(name: name)]);
+  SimpleBindingPattern(this.name) : super([DestructuredVariable(name: name)]);
 
   @override
   T accept<T>(NodeVisitor<T> visitor) =>
@@ -1334,9 +1355,9 @@
   int get precedenceLevel => UNARY;
 }
 
-// SpreadElement isn't really a prefix expression, as it can only appear in
-// certain places such as ArgumentList and BindingPattern, but we pretend
-// it is for simplicity's sake.
+/// SpreadElement isn't really a prefix expression, as it can only appear in
+/// certain places such as ArgumentList and BindingPattern, but we pretend
+/// it is for simplicity's sake.
 class Spread extends Prefix {
   Spread(Expression operand) : super('...', operand);
 
@@ -1380,7 +1401,7 @@
       throw ArgumentError.value(name, "name", "not a valid identifier");
     }
   }
-  static RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
+  static final RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
 
   @override
   bool shadows(Set<String> names) => names.contains(name);
@@ -1397,7 +1418,7 @@
   void visitChildren(NodeVisitor visitor) {}
 }
 
-// This is an expression for convenience in the AST.
+/// This is an expression for convenience in the AST.
 class RestParameter extends Expression implements Parameter {
   final Identifier parameter;
 
@@ -1432,8 +1453,8 @@
   void visitChildren(NodeVisitor visitor) {}
 }
 
-// `super` is more restricted in the ES6 spec, but for simplicity we accept
-// it anywhere that `this` is accepted.
+/// `super` is more restricted in the ES6 spec, but for simplicity we accept
+/// it anywhere that `this` is accepted.
 class Super extends Expression {
   @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitSuper(this);
@@ -1448,9 +1469,11 @@
 class NamedFunction extends Expression {
   final Identifier name;
   final Fun function;
-  // A heuristic to force extra parens around this function.  V8 and other
-  // engines use this IIFE (immediately invoked function expression) heuristic
-  // to eagerly parse a function.
+
+  /// A heuristic to force extra parens around this function.
+  ///
+  /// V8 and other engines use this IIFE (immediately invoked function
+  /// expression) heuristic to eagerly parse a function.
   final bool immediatelyInvoked;
 
   NamedFunction(this.name, this.function, [this.immediatelyInvoked = false]);
@@ -1483,7 +1506,7 @@
   @override
   final Block body;
 
-  /** Whether this is a JS generator (`function*`) that may contain `yield`. */
+  /// Whether this is a JS generator (`function*`) that may contain `yield`.
   final bool isGenerator;
 
   final AsyncModifier asyncModifier;
@@ -1537,12 +1560,9 @@
   ArrowFun _clone() => ArrowFun(params, body);
 }
 
-/**
- * The Dart sync, sync*, async, and async* modifier.
- * See [DartYield].
- *
- * This is not used for JS functions.
- */
+/// The Dart sync, sync*, async, and async* modifier.
+///
+/// See [DartYield]. This is not used for JS functions.
 class AsyncModifier {
   final bool isAsync;
   final bool isYielding;
@@ -1626,16 +1646,14 @@
 class LiteralString extends Literal {
   final String value;
 
-  /**
-   * Constructs a LiteralString from a string value.
-   *
-   * The constructor does not add the required quotes.  If [value] is not
-   * surrounded by quotes and property escaped, the resulting object is invalid
-   * as a JS value.
-   *
-   * TODO(sra): Introduce variants for known valid strings that don't allocate a
-   * new string just to add quotes.
-   */
+  /// Constructs a LiteralString from a string value.
+  ///
+  /// The constructor does not add the required quotes.  If [value] is not
+  /// surrounded by quotes and property escaped, the resulting object is invalid
+  /// as a JS value.
+  ///
+  /// TODO(sra): Introduce variants for known valid strings that don't allocate
+  /// a new string just to add quotes.
   LiteralString(this.value);
 
   /// Gets the value inside the string without the beginning and end quotes.
@@ -1657,10 +1675,8 @@
   @override
   LiteralNumber _clone() => LiteralNumber(value);
 
-  /**
-   * Use a different precedence level depending on whether the value contains a
-   * dot to ensure we generate `(1).toString()` and `1.0.toString()`.
-   */
+  /// Use a different precedence level depending on whether the value contains a
+  /// dot to ensure we generate `(1).toString()` and `1.0.toString()`.
   @override
   int get precedenceLevel => value.contains('.') ? PRIMARY : UNARY;
 }
@@ -1688,10 +1704,9 @@
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * An empty place in an [ArrayInitializer].
- * For example the list [1, , , 2] would contain two holes.
- */
+/// An empty place in an [ArrayInitializer].
+///
+/// For example the list [1, , , 2] would contain two holes.
 class ArrayHole extends Expression {
   @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayHole(this);
@@ -1710,9 +1725,7 @@
   final List<Property> properties;
   final bool _multiline;
 
-  /**
-   * Constructs a new object-initializer containing the given [properties].
-   */
+  /// Constructs a new object-initializer containing the given [properties].
   ObjectInitializer(this.properties, {bool multiline = false})
       : _multiline = multiline;
 
@@ -1731,11 +1744,11 @@
 
   @override
   int get precedenceLevel => PRIMARY;
-  /**
-   * If set to true, forces a vertical layout when using the [Printer].
-   * Otherwise, layout will be vertical if and only if any [properties]
-   * are [FunctionExpression]s.
-   */
+
+  /// If set to true, forces a vertical layout when using the [Printer].
+  ///
+  /// Otherwise, layout will be vertical if and only if any [properties] are
+  /// [FunctionExpression]s.
   bool get multiline {
     return _multiline || properties.any((p) => p.value is FunctionExpression);
   }
@@ -1762,23 +1775,23 @@
 
 // TODO(jmesserly): parser does not support this yet.
 class TemplateString extends Expression {
-  /**
-   * The parts of this template string: a sequence of [String]s and
-   * [Expression]s. Strings and expressions will alternate, for example:
-   *
-   *     `foo${1 + 2} bar ${'hi'}`
-   *
-   * would be represented by [strings]:
-   *
-   *     ['foo', ' bar ', '']
-   *
-   * and [interpolations]:
-   *
-   *     [new JS.Binary('+', js.number(1), js.number(2)),
-   *      new JS.LiteralString("'hi'")]
-   *
-   * There should be exactly one more string than interpolation expression.
-   */
+  /// The parts of this template string: a sequence of [String]s and
+  /// [Expression]s.
+  ///
+  /// Strings and expressions will alternate, for example:
+  ///
+  ///     `foo${1 + 2} bar ${'hi'}`
+  ///
+  /// would be represented by [strings]:
+  ///
+  ///     ['foo', ' bar ', '']
+  ///
+  /// and [interpolations]:
+  ///
+  ///     [new JS.Binary('+', js.number(1), js.number(2)),
+  ///      new JS.LiteralString("'hi'")]
+  ///
+  /// There should be exactly one more string than interpolation expression.
   final List<String> strings;
   final List<Expression> interpolations;
 
@@ -1828,12 +1841,10 @@
 
 // TODO(jmesserly): parser does not support this yet.
 class Yield extends Expression {
-  final Expression value; // Can be null.
+  final Expression? value;
 
-  /**
-   * Whether this yield expression is a `yield*` that iterates each item in
-   * [value].
-   */
+  /// Whether this yield expression is a `yield*` that iterates each item in
+  /// [value].
   final bool star;
 
   Yield(this.value, {this.star = false});
@@ -1843,7 +1854,7 @@
 
   @override
   void visitChildren(NodeVisitor visitor) {
-    if (value != null) value.accept(visitor);
+    value?.accept(visitor);
   }
 
   @override
@@ -1868,7 +1879,7 @@
 
 class ClassExpression extends Expression {
   final Identifier name;
-  final Expression heritage; // Can be null.
+  final Expression? heritage;
   final List<Method> methods;
 
   ClassExpression(this.name, this.heritage, this.methods);
@@ -1879,7 +1890,7 @@
   @override
   void visitChildren(NodeVisitor visitor) {
     name.accept(visitor);
-    if (heritage != null) heritage.accept(visitor);
+    heritage?.accept(visitor);
     for (Method element in methods) {
       element.accept(visitor);
     }
@@ -2100,13 +2111,13 @@
   bool get allowRename => false;
 }
 
-/**
- * [RegExpLiteral]s, despite being called "Literal", do not inherit from
- * [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
- * are thus not in the same category as numbers or strings.
- */
+/// [RegExpLiteral]s, despite being called "Literal", do not inherit from
+/// [Literal].
+///
+/// Indeed, regular expressions in JavaScript have a side-effect and are thus
+/// not in the same category as numbers or strings.
 class RegExpLiteral extends Expression {
-  /** Contains the pattern and the flags.*/
+  /// Contains the pattern and the flags.
   final String pattern;
 
   RegExpLiteral(this.pattern);
@@ -2122,14 +2133,12 @@
   int get precedenceLevel => PRIMARY;
 }
 
-/**
- * An asynchronous await.
- *
- * Not part of JavaScript. We desugar this expression before outputting.
- * Should only occur in a [Fun] with `asyncModifier` async or asyncStar.
- */
+/// An asynchronous await.
+///
+/// Not part of JavaScript. We desugar this expression before outputting.
+/// Should only occur in a [Fun] with `asyncModifier` async or asyncStar.
 class Await extends Expression {
-  /** The awaited expression. */
+  /// The awaited expression.
   final Expression expression;
 
   Await(this.expression);
@@ -2144,12 +2153,10 @@
   Await _clone() => Await(expression);
 }
 
-/**
- * A comment.
- *
- * Extends [Statement] so we can add comments before statements in
- * [Block] and [Program].
- */
+/// A comment.
+///
+/// Extends [Statement] so we can add comments before statements in [Block] and
+/// [Program].
 class Comment extends Statement {
   final String comment;
 
@@ -2164,12 +2171,10 @@
   void visitChildren(NodeVisitor visitor) {}
 }
 
-/**
- * A comment for expressions.
- *
- * Extends [Expression] so we can add comments before expressions.
- * Has the highest possible precedence, so we don't add parentheses around it.
- */
+/// A comment for expressions.
+///
+/// Extends [Expression] so we can add comments before expressions. Has the
+/// highest possible precedence, so we don't add parentheses around it.
 class CommentExpression extends Expression {
   final String comment;
   final Expression expression;
@@ -2196,33 +2201,29 @@
   void visitChildren(NodeVisitor visitor) {}
 }
 
-/**
- * Represents allowed module items:
- * [Statement], [ImportDeclaration], and [ExportDeclaration].
- */
+/// Represents allowed module items:
+/// [Statement], [ImportDeclaration], and [ExportDeclaration].
 abstract class ModuleItem extends Node {}
 
 class ImportDeclaration extends ModuleItem {
-  final Identifier defaultBinding; // Can be null.
+  final Identifier? defaultBinding;
 
-  // Can be null, a single specifier of `* as name`, or a list.
-  final List<NameSpecifier> namedImports;
+  // Can be `null`, a single specifier of `* as name`, or a list.
+  final List<NameSpecifier>? namedImports;
 
   final LiteralString from;
 
-  ImportDeclaration({this.defaultBinding, this.namedImports, this.from}) {
-    assert(from != null);
-  }
+  ImportDeclaration(
+      {this.defaultBinding, this.namedImports, required this.from});
 
-  /** The `import "name.js"` form of import */
+  /// The `import "name.js"` form of import.
   ImportDeclaration.all(LiteralString module) : this(from: module);
 
-  /** If this import has `* as name` returns the name, otherwise null. */
-  Identifier get importStarAs {
-    if (namedImports != null &&
-        namedImports.length == 1 &&
-        namedImports[0].isStar) {
-      return namedImports[0].asName;
+  /// If this import has `* as name` returns the name, otherwise null.
+  Identifier? get importStarAs {
+    var imports = namedImports;
+    if (imports != null && imports.length == 1 && imports[0].isStar) {
+      return imports[0].asName;
     }
     return null;
   }
@@ -2231,8 +2232,9 @@
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitImportDeclaration(this);
   @override
   void visitChildren(NodeVisitor visitor) {
-    if (namedImports != null) {
-      for (NameSpecifier name in namedImports) {
+    var imports = namedImports;
+    if (imports != null) {
+      for (NameSpecifier name in imports) {
         name.accept(visitor);
       }
     }
@@ -2245,16 +2247,14 @@
 }
 
 class ExportDeclaration extends ModuleItem {
-  /**
-   * Exports a name from this module.
-   *
-   * This can be a [ClassDeclaration] or [FunctionDeclaration].
-   * If [isDefault] is true, it can also be an [Expression].
-   * Otherwise it can be a [VariableDeclarationList] or an [ExportClause].
-   */
+  /// Exports a name from this module.
+  ///
+  /// This can be a [ClassDeclaration] or [FunctionDeclaration].
+  /// If [isDefault] is true, it can also be an [Expression].
+  /// Otherwise it can be a [VariableDeclarationList] or an [ExportClause].
   final Node exported;
 
-  /** True if this is an `export default`. */
+  /// True if this is an `export default`.
   final bool isDefault;
 
   ExportDeclaration(this.exported, {this.isDefault = false}) {
@@ -2269,7 +2269,7 @@
   /// if this is an `export *`.
   ///
   /// This can be useful for lowering to other module formats.
-  List<NameSpecifier> get exportedNames {
+  List<NameSpecifier>? get exportedNames {
     if (isDefault) return [NameSpecifier(Identifier('default'))];
 
     var exported = this.exported;
@@ -2300,15 +2300,15 @@
 
 class ExportClause extends Node {
   final List<NameSpecifier> exports;
-  final LiteralString from; // Can be null.
+  final LiteralString? from;
 
   ExportClause(this.exports, {this.from});
 
-  /** The `export * from 'name.js'` form. */
+  /// The `export * from 'name.js'` form.
   ExportClause.star(LiteralString from)
       : this([NameSpecifier.star()], from: from);
 
-  /** True if this is an `export *`. */
+  /// True if this is an `export *`.
   bool get exportStar => exports.length == 1 && exports[0].isStar;
 
   @override
@@ -2318,22 +2318,22 @@
     for (NameSpecifier name in exports) {
       name.accept(visitor);
     }
-    if (from != null) from.accept(visitor);
+    from?.accept(visitor);
   }
 
   @override
   ExportClause _clone() => ExportClause(exports, from: from);
 }
 
-/** An import or export specifier. */
+/// An import or export specifier.
 class NameSpecifier extends Node {
-  final Identifier name;
-  final Identifier asName; // Can be null.
+  final Identifier? name;
+  final Identifier? asName;
 
   NameSpecifier(this.name, {this.asName});
   NameSpecifier.star() : this(null);
 
-  /** True if this is a `* as someName` specifier. */
+  /// True if this is a `* as someName` specifier.
   bool get isStar => name == null;
 
   @override
@@ -2343,26 +2343,3 @@
   @override
   NameSpecifier _clone() => NameSpecifier(name, asName: asName);
 }
-
-// TODO(jmesserly): should this be related to [Program]?
-class Module extends Node {
-  /// The module's name
-  // TODO(jmesserly): this is not declared in ES6, but is known by the loader.
-  // We use this because some ES5 desugarings require it.
-  final String name;
-
-  final List<ModuleItem> body;
-  Module(this.body, {this.name});
-
-  @override
-  T accept<T>(NodeVisitor<T> visitor) => visitor.visitModule(this);
-  @override
-  void visitChildren(NodeVisitor visitor) {
-    for (ModuleItem item in body) {
-      item.accept(visitor);
-    }
-  }
-
-  @override
-  Module _clone() => Module(body);
-}
diff --git a/pkg/dev_compiler/lib/src/js_ast/precedence.dart b/pkg/dev_compiler/lib/src/js_ast/precedence.dart
index 50f69ed..f149dc2 100644
--- a/pkg/dev_compiler/lib/src/js_ast/precedence.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/precedence.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 const EXPRESSION = 0;
 // TODO(nshahan) No longer used for the spread operator.
 // All precedence levels need to be updated to be more accurate.
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index ff54cdb..7a97ad3 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -2,16 +2,20 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
-// ignore_for_file: always_declare_return_types, prefer_single_quotes
-// ignore_for_file: prefer_collection_literals, omit_local_variable_types
-// ignore_for_file: prefer_final_fields
+// ignore_for_file: always_declare_return_types
+// ignore_for_file: library_prefixes
+// ignore_for_file: omit_local_variable_types
 // ignore_for_file: prefer_initializing_formals
-// ignore_for_file: slash_for_doc_comments, unnecessary_const
+// ignore_for_file: prefer_interpolation_to_compose_strings
+// ignore_for_file: prefer_is_not_empty
+// ignore_for_file: prefer_single_quotes
 // ignore_for_file: use_function_type_syntax_for_parameters
 
-part of js_ast;
+library js_ast.printer;
+
+import 'characters.dart' as charCodes;
+import 'nodes.dart';
+import 'precedence.dart';
 
 class JavaScriptPrintingOptions {
   final bool shouldCompressOutput;
@@ -49,7 +53,7 @@
   /// Callback after printing the last character representing [node].
   void exitNode(Node node) {}
 
-  Printer printer;
+  late Printer printer;
 }
 
 /// A simple implementation of [JavaScriptPrintingContext] suitable for tests.
@@ -82,7 +86,7 @@
   // The current indentation level.
   int _indentLevel = 0;
   // A cache of all indentation strings used so far.
-  List<String> _indentList = <String>[""];
+  final List<String> _indentList = [""];
 
   /// Whether the next call to [indent] should just be a no-op.
   bool _skipNextIndent = false;
@@ -91,7 +95,7 @@
   static final expressionContinuationRegExp = RegExp(r'^[-+([]');
 
   Printer(JavaScriptPrintingOptions options, JavaScriptPrintingContext context,
-      {LocalNamer localNamer})
+      {LocalNamer? localNamer})
       : options = options,
         context = context,
         shouldCompressOutput = options.shouldCompressOutput,
@@ -101,7 +105,7 @@
   }
 
   static LocalNamer determineRenamer(
-      LocalNamer localNamer, JavaScriptPrintingOptions options) {
+      LocalNamer? localNamer, JavaScriptPrintingOptions options) {
     if (localNamer != null) return localNamer;
     return (options.shouldCompressOutput && options.minifyLocalVariables)
         ? MinifyRenamer()
@@ -139,9 +143,9 @@
     if (!shouldCompressOutput) out(" ");
   }
 
-  String lastAddedString;
+  String lastAddedString = '\u0000';
+
   int get lastCharCode {
-    if (lastAddedString == null) return 0;
     assert(lastAddedString.isNotEmpty);
     return lastAddedString.codeUnitAt(lastAddedString.length - 1);
   }
@@ -227,7 +231,7 @@
   }
 
   visitCommaSeparated(List<Expression> nodes, int hasRequiredType,
-      {bool newInForInit, bool newAtStatementBegin}) {
+      {required bool newInForInit, required bool newAtStatementBegin}) {
     for (int i = 0; i < nodes.length; i++) {
       if (i != 0) {
         atStatementBegin = false;
@@ -251,10 +255,11 @@
     visitAll(program.body);
   }
 
-  bool blockBody(Node body, {bool needsSeparation, bool needsNewline}) {
+  bool blockBody(Node body,
+      {required bool needsSeparation, required bool needsNewline}) {
     if (body is Block) {
       spaceOut();
-      blockOut(body, false, needsNewline);
+      blockOut(body, shouldIndent: false, needsNewline: needsNewline);
       return true;
     }
     if (shouldCompressOutput && needsSeparation) {
@@ -281,7 +286,8 @@
     }
   }
 
-  void blockOut(Block node, bool shouldIndent, bool needsNewline) {
+  void blockOut(Block node,
+      {required bool shouldIndent, required bool needsNewline}) {
     if (shouldIndent) indent();
     context.enterNode(node);
     out("{");
@@ -297,7 +303,7 @@
 
   @override
   visitBlock(Block block) {
-    blockOut(block, true, true);
+    blockOut(block, shouldIndent: true, needsNewline: true);
   }
 
   @override
@@ -378,19 +384,19 @@
     spaceOut();
     out("(");
     if (loop.init != null) {
-      visitNestedExpression(loop.init, EXPRESSION,
+      visitNestedExpression(loop.init!, EXPRESSION,
           newInForInit: true, newAtStatementBegin: false);
     }
     out(";");
     if (loop.condition != null) {
       spaceOut();
-      visitNestedExpression(loop.condition, EXPRESSION,
+      visitNestedExpression(loop.condition!, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     out(";");
     if (loop.update != null) {
       spaceOut();
-      visitNestedExpression(loop.update, EXPRESSION,
+      visitNestedExpression(loop.update!, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     out(")");
@@ -482,7 +488,7 @@
     } else {
       outIndent("return");
       pendingSpace = true;
-      visitNestedExpression(node.value, EXPRESSION,
+      visitNestedExpression(node.value!, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     outSemicolonLn();
@@ -515,12 +521,12 @@
     outIndent("try");
     blockBody(node.body, needsSeparation: true, needsNewline: false);
     if (node.catchPart != null) {
-      visit(node.catchPart);
+      visit(node.catchPart!);
     }
     if (node.finallyPart != null) {
       spaceOut();
       out("finally");
-      blockBody(node.finallyPart, needsSeparation: true, needsNewline: true);
+      blockBody(node.finallyPart!, needsSeparation: true, needsNewline: true);
     } else {
       lineOut();
     }
@@ -555,18 +561,26 @@
   }
 
   @override
-  visitSwitchCase(SwitchCase node) {
-    if (node.isDefault) {
-      outIndentLn("default:");
-    } else {
-      outIndent("case");
-      pendingSpace = true;
-      visitNestedExpression(node.expression, EXPRESSION,
-          newInForInit: false, newAtStatementBegin: false);
-      outLn(":");
+  visitCase(Case node) {
+    outIndent("case");
+    pendingSpace = true;
+    visitNestedExpression(node.expression, EXPRESSION,
+        newInForInit: false, newAtStatementBegin: false);
+    outLn(":");
+    if (!node.body.statements.isEmpty) {
+      indentMore();
+      blockOutWithoutBraces(node.body);
+      indentLess();
     }
-    if (node.body.statements.isNotEmpty) {
-      blockOut(node.body, true, true);
+  }
+
+  @override
+  visitDefault(Default node) {
+    outIndentLn("default:");
+    if (!node.body.statements.isEmpty) {
+      indentMore();
+      blockOutWithoutBraces(node.body);
+      indentLess();
     }
   }
 
@@ -576,7 +590,7 @@
     blockBody(node.body, needsSeparation: false, needsNewline: true);
   }
 
-  void functionOut(Fun fun, Identifier name) {
+  void functionOut(Fun fun, Identifier? name) {
     out("function");
     if (fun.isGenerator) out("*");
     if (name != null) {
@@ -587,21 +601,21 @@
     }
     localNamer.enterScope(fun);
     out("(");
-    if (fun.params != null) {
-      visitCommaSeparated(fun.params, PRIMARY,
-          newInForInit: false, newAtStatementBegin: false);
-    }
+
+    visitCommaSeparated(fun.params, PRIMARY,
+        newInForInit: false, newAtStatementBegin: false);
+
     out(")");
     switch (fun.asyncModifier) {
-      case const AsyncModifier.sync():
+      case AsyncModifier.sync():
         break;
-      case const AsyncModifier.async():
+      case AsyncModifier.async():
         out(' async');
         break;
-      case const AsyncModifier.syncStar():
+      case AsyncModifier.syncStar():
         out(' sync*');
         break;
-      case const AsyncModifier.asyncStar():
+      case AsyncModifier.asyncStar():
         out(' async*');
         break;
     }
@@ -620,7 +634,7 @@
   }
 
   visitNestedExpression(Expression node, int requiredPrecedence,
-      {bool newInForInit, bool newAtStatementBegin}) {
+      {required bool newInForInit, required bool newAtStatementBegin}) {
     int nodePrecedence = node.precedenceLevel;
     bool needsParentheses =
         // a - (b + c).
@@ -652,7 +666,7 @@
   visitVariableDeclarationList(VariableDeclarationList list) {
     // Note: keyword can be null for non-static field declarations.
     if (list.keyword != null) {
-      out(list.keyword);
+      out(list.keyword!);
       out(" ");
     }
     visitCommaSeparated(list.declarations, ASSIGNMENT,
@@ -679,16 +693,15 @@
   visitDestructuredVariable(DestructuredVariable node) {
     var name = node.name;
     var property = node.property;
-    if (name != null) {
-      visit(node.name);
-    } else if (property != null) {
+    visit(name);
+    if (property != null) {
       out("[");
-      visit(node.property);
+      visit(property);
       out("]");
     }
     var structure = node.structure;
     if (structure != null) {
-      if (name != null || property != null) {
+      if (property != null) {
         out(":");
         spaceOut();
       }
@@ -713,26 +726,24 @@
   visitAssignment(Assignment assignment) {
     visitNestedExpression(assignment.leftHandSide, LEFT_HAND_SIDE,
         newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
-    if (assignment.value != null) {
-      spaceOut();
-      String op = assignment.op;
-      if (op != null) out(op);
-      out("=");
-      spaceOut();
-      visitNestedExpression(assignment.value, ASSIGNMENT,
-          newInForInit: inForInit, newAtStatementBegin: false);
-    }
+    spaceOut();
+    String? op = assignment.op;
+    if (op != null) out(op);
+    out("=");
+    spaceOut();
+    visitNestedExpression(assignment.value, ASSIGNMENT,
+        newInForInit: inForInit, newAtStatementBegin: false);
   }
 
   @override
-  visitVariableInitialization(VariableInitialization init) {
-    visitNestedExpression(init.declaration, LEFT_HAND_SIDE,
+  visitVariableInitialization(VariableInitialization initialization) {
+    visitNestedExpression(initialization.declaration, LEFT_HAND_SIDE,
         newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
-    if (init.value != null) {
+    if (initialization.value != null) {
       spaceOut();
       out("=");
       spaceOut();
-      visitNestedExpression(init.value, ASSIGNMENT,
+      visitNestedExpression(initialization.value!, ASSIGNMENT,
           newInForInit: inForInit, newAtStatementBegin: false);
     }
   }
@@ -857,6 +868,8 @@
         rightPrecedenceRequirement = UNARY;
         break;
       default:
+        leftPrecedenceRequirement = EXPRESSION;
+        rightPrecedenceRequirement = EXPRESSION;
         context.error("Forgot operator: $op");
     }
 
@@ -915,7 +928,7 @@
     out(yield.star ? "yield*" : "yield");
     if (yield.value == null) return;
     out(" ");
-    visitNestedExpression(yield.value, yield.precedenceLevel,
+    visitNestedExpression(yield.value!, yield.precedenceLevel,
         newInForInit: inForInit, newAtStatementBegin: false);
   }
 
@@ -974,20 +987,21 @@
 
   @override
   visitAccess(PropertyAccess access) {
-    // Normally we can omit parens on the receiver if it is a Call, even though
-    // Call expressions have lower precedence. However this optimization doesn't
-    // work inside New expressions:
-    //
-    //     new obj.foo().bar()
-    //
-    // This will be parsed as:
-    //
-    //     (new obj.foo()).bar()
-    //
-    // Which is incorrect. So we must have parenthesis in this case:
-    //
-    //     new (obj.foo()).bar()
-    //
+    /// Normally we can omit parens on the receiver if it is a Call, even though
+    /// Call expressions have lower precedence.
+    ///
+    /// However this optimization doesn't work inside New expressions:
+    ///
+    ///     new obj.foo().bar()
+    ///
+    /// This will be parsed as:
+    ///
+    ///     (new obj.foo()).bar()
+    ///
+    /// Which is incorrect. So we must have parenthesis in this case:
+    ///
+    ///     new (obj.foo()).bar()
+    ///
     int precedence = inNewTarget ? ACCESS : CALL;
 
     visitNestedExpression(access.receiver, precedence,
@@ -1025,7 +1039,7 @@
     var body = fun.body;
     if (body is Expression) {
       spaceOut();
-      // Object initializers require parenthesis to disambiguate
+      // Object initializers require parentheses to disambiguate
       // AssignmentExpression from FunctionBody. See:
       // https://tc39.github.io/ecma262/#sec-arrow-function-definitions
       var needsParen = fun.body is ObjectInitializer;
@@ -1177,7 +1191,7 @@
     visit(node.name);
     if (node.heritage != null) {
       out(' extends ');
-      visit(node.heritage);
+      visit(node.heritage!);
     }
     spaceOut();
     if (node.methods.isNotEmpty) {
@@ -1215,10 +1229,8 @@
     var fun = node.function;
     localNamer.enterScope(fun);
     out("(");
-    if (fun.params != null) {
-      visitCommaSeparated(fun.params, SPREAD,
-          newInForInit: false, newAtStatementBegin: false);
-    }
+    visitCommaSeparated(fun.params, SPREAD,
+        newInForInit: false, newAtStatementBegin: false);
     out(")");
     // TODO(jmesserly): async modifiers
     if (fun.body.statements.isEmpty) {
@@ -1226,7 +1238,7 @@
       out("{}");
     } else {
       spaceOut();
-      blockOut(fun.body, false, false);
+      blockOut(fun.body, shouldIndent: false, needsNewline: false);
     }
     localNamer.leaveScope();
   }
@@ -1263,13 +1275,15 @@
     indent();
     out('import ');
     if (node.defaultBinding != null) {
-      visit(node.defaultBinding);
+      visit(node.defaultBinding!);
       if (node.namedImports != null) {
         out(',');
         spaceOut();
       }
     }
-    nameSpecifierListOut(node.namedImports, false);
+    if (node.namedImports != null) {
+      nameSpecifierListOut(node.namedImports!, false);
+    }
     fromClauseOut(node.from);
     outSemicolonLn();
   }
@@ -1287,13 +1301,13 @@
   @override
   visitExportClause(ExportClause node) {
     nameSpecifierListOut(node.exports, true);
-    fromClauseOut(node.from);
+    if (node.from != null) {
+      fromClauseOut(node.from!);
+    }
   }
 
   nameSpecifierListOut(List<NameSpecifier> names, bool export) {
-    if (names == null) return;
-
-    if (names.length == 1 && names[0].name.name == '*') {
+    if (names.length == 1 && names[0].name!.name == '*') {
       nameSpecifierOut(names[0], export);
       return;
     }
@@ -1312,11 +1326,9 @@
   }
 
   fromClauseOut(LiteralString from) {
-    if (from != null) {
-      out(' from');
-      spaceOut();
-      out("'${from.valueWithoutQuotes}.js'");
-    }
+    out(' from');
+    spaceOut();
+    out("'${from.valueWithoutQuotes}.js'");
   }
 
   /// This is unused, see [nameSpecifierOut].
@@ -1329,11 +1341,13 @@
     if (node.isStar) {
       out('*');
     } else {
-      var localName = localNamer.getName(node.name);
+      assert(node.name != null);
+      var nodeName = node.name!;
+      var localName = localNamer.getName(nodeName);
       if (node.asName == null) {
         // If our local was renamed, generate an implicit "as".
         // This is a convenience feature so imports and exports can be renamed.
-        var name = node.name.name;
+        var name = nodeName.name;
         if (localName != name) {
           out(export ? localName : name);
           out(' as ');
@@ -1345,16 +1359,11 @@
     }
     if (node.asName != null) {
       out(' as ');
-      visitIdentifier(node.asName);
+      visitIdentifier(node.asName!);
     }
   }
 
   @override
-  visitModule(Module node) {
-    visitAll(node.body);
-  }
-
-  @override
   visitLiteralExpression(LiteralExpression node) {
     out(node.template);
   }
@@ -1433,15 +1442,15 @@
 
 // Collects all the var declarations in the function.  We need to do this in a
 // separate pass because JS vars are lifted to the top of the function.
-class VarCollector extends BaseVisitor {
+class VarCollector extends BaseVisitorVoid {
   bool nested;
   final Set<String> vars;
   final Set<String> params;
 
   VarCollector()
       : nested = false,
-        vars = Set<String>(),
-        params = Set<String>();
+        vars = {},
+        params = {};
 
   void forEachVar(void fn(String v)) => vars.forEach(fn);
   void forEachParam(void fn(String p)) => params.forEach(fn);
@@ -1449,12 +1458,10 @@
   void collectVarsInFunction(FunctionExpression fun) {
     if (!nested) {
       nested = true;
-      if (fun.params != null) {
-        for (var param in fun.params) {
-          // TODO(jmesserly): add ES6 support. Currently not needed because
-          // dart2js does not emit ES6 rest param or destructuring.
-          params.add((param as Identifier).name);
-        }
+      for (var param in fun.params) {
+        // TODO(jmesserly): add ES6 support. Currently not needed because
+        // dart2js does not emit ES6 rest param or destructuring.
+        params.add((param as Identifier).name);
       }
       fun.body.accept(this);
       nested = false;
@@ -1491,7 +1498,7 @@
   @override
   void visitClassExpression(ClassExpression node) {
     // Note that we don't bother collecting the name of the class.
-    if (node.heritage != null) node.heritage.accept(this);
+    node.heritage?.accept(this);
     for (Method method in node.methods) {
       method.accept(this);
     }
@@ -1516,10 +1523,8 @@
   }
 }
 
-/**
- * Returns true, if the given node must be wrapped into braces when used
- * as then-statement in an [If] that has an else branch.
- */
+/// Returns true, if the given node must be wrapped into braces when used
+/// as then-statement in an [If] that has an else branch.
 class DanglingElseVisitor extends BaseVisitor<bool> {
   JavaScriptPrintingContext context;
 
@@ -1531,12 +1536,16 @@
   @override
   bool visitNode(Node node) {
     context.error("Forgot node: $node");
-    return null;
+    return true;
   }
 
   @override
   bool visitBlock(Block node) => false;
   @override
+  bool visitComment(Comment node) => true;
+  @override
+  bool visitCommentExpression(CommentExpression node) => true;
+  @override
   bool visitExpressionStatement(ExpressionStatement node) => false;
   @override
   bool visitEmptyStatement(EmptyStatement node) => false;
@@ -1567,9 +1576,9 @@
   @override
   bool visitTry(Try node) {
     if (node.finallyPart != null) {
-      return node.finallyPart.accept(this);
+      return node.finallyPart!.accept(this);
     } else {
-      return node.catchPart.accept(this);
+      return node.catchPart!.accept(this);
     }
   }
 
@@ -1578,7 +1587,9 @@
   @override
   bool visitSwitch(Switch node) => false;
   @override
-  bool visitSwitchCase(SwitchCase node) => false;
+  bool visitCase(Case node) => false;
+  @override
+  bool visitDefault(Default node) => false;
   @override
   bool visitFunctionDeclaration(FunctionDeclaration node) => false;
   @override
@@ -1618,7 +1629,7 @@
   void enterScope(Node node) {
     var vars = VarCollector();
     node.accept(vars);
-    maps.add(Map<String, String>());
+    maps.add({});
     variableNumberStack.add(variableNumber);
     parameterNumberStack.add(parameterNumber);
     vars.forEachVar(declareVariable);
@@ -1734,7 +1745,7 @@
 
 /// Like [BaseVisitor], but calls [declare] for [Identifier] declarations, and
 /// [visitIdentifier] otherwise.
-abstract class VariableDeclarationVisitor extends BaseVisitor<void> {
+abstract class VariableDeclarationVisitor extends BaseVisitorVoid {
   declare(Identifier node);
 
   @override
@@ -1760,7 +1771,7 @@
   @override
   visitDestructuredVariable(DestructuredVariable node) {
     var name = node.name;
-    if (name is Identifier) _scanVariableBinding(name);
+    _scanVariableBinding(name);
     super.visitDestructuredVariable(node);
   }
 
@@ -1773,7 +1784,7 @@
   @override
   visitVariableInitialization(VariableInitialization node) {
     _scanVariableBinding(node.declaration);
-    if (node.value != null) node.value.accept(this);
+    node.value?.accept(this);
   }
 
   @override
@@ -1797,7 +1808,7 @@
   @override
   visitClassExpression(ClassExpression node) {
     declare(node.name);
-    if (node.heritage != null) node.heritage.accept(this);
+    node.heritage?.accept(this);
     for (Method element in node.methods) {
       element.accept(this);
     }
diff --git a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
index 5862fdb..dcc1675 100644
--- a/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/source_map_printer.dart
@@ -4,7 +4,8 @@
 
 // @dart = 2.9
 
-// ignore_for_file: always_declare_return_types, omit_local_variable_types
+// ignore_for_file: always_declare_return_types
+// ignore_for_file: omit_local_variable_types
 
 import 'package:source_maps/source_maps.dart' hide Printer;
 import 'package:source_span/source_span.dart' show SourceLocation;
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index bcba9f0..22d76d7 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -2,23 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
+// ignore_for_file: always_declare_return_types
+// ignore_for_file: omit_local_variable_types
+// ignore_for_file: prefer_generic_function_type_aliases
+// ignore_for_file: prefer_single_quotes
 
-// ignore_for_file: always_declare_return_types, prefer_collection_literals
-// ignore_for_file: avoid_returning_null_for_void
-// ignore_for_file: prefer_single_quotes, prefer_generic_function_type_aliases
-// ignore_for_file: slash_for_doc_comments, omit_local_variable_types
-// ignore_for_file: unnecessary_this
+library js_ast.template;
 
-part of js_ast;
+import 'nodes.dart';
 
 class TemplateManager {
-  Map<String, Template> expressionTemplates = Map<String, Template>();
-  Map<String, Template> statementTemplates = Map<String, Template>();
+  Map<String, Template> expressionTemplates = {};
+  Map<String, Template> statementTemplates = {};
 
   TemplateManager();
 
-  Template lookupExpressionTemplate(String source) {
+  Template? lookupExpressionTemplate(String source) {
     return expressionTemplates[source];
   }
 
@@ -29,7 +28,7 @@
     return template;
   }
 
-  Template lookupStatementTemplate(String source) {
+  Template? lookupStatementTemplate(String source) {
     return statementTemplates[source];
   }
 
@@ -41,70 +40,77 @@
   }
 }
 
-/**
- * A Template is created with JavaScript AST containing placeholders (interface
- * InterpolatedNode).  The [instantiate] method creates an AST that looks like
- * the original with the placeholders replaced by the arguments to
- * [instantiate].
- */
+/// A Template is created with JavaScript AST containing placeholders (interface
+/// InterpolatedNode).
+///
+/// The [instantiate] method creates an AST that looks like the original with
+/// the placeholders replaced by the arguments to [instantiate].
 class Template {
-  final String source;
+  final String? source;
   final bool isExpression;
   final bool forceCopy;
   final Node ast;
-
-  Instantiator instantiator;
-
+  final Instantiator instantiator;
   int positionalArgumentCount = -1;
 
   // Null, unless there are named holes.
   List<String> holeNames;
-  bool get isPositional => holeNames == null;
+  bool get isPositional => holeNames.isEmpty;
 
-  Template(this.source, this.ast,
-      {this.isExpression = true, this.forceCopy = false}) {
-    _compile();
+  Template._(this.source, this.ast,
+      {required this.instantiator,
+      required this.isExpression,
+      required this.forceCopy,
+      required this.positionalArgumentCount,
+      this.holeNames = const []});
+
+  factory Template(String? source, Node ast,
+      {bool isExpression = true, bool forceCopy = false}) {
+    assert(isExpression ? ast is Expression : ast is Statement);
+
+    final generator = InstantiatorGeneratorVisitor(forceCopy);
+    final instantiator = generator.compile(ast);
+    final positionalArgumentCount = generator.analysis.count;
+    final names = generator.analysis.holeNames;
+    final holeNames = names.toList(growable: false);
+
+    return Template._(source, ast,
+        instantiator: instantiator,
+        isExpression: isExpression,
+        forceCopy: forceCopy,
+        positionalArgumentCount: positionalArgumentCount,
+        holeNames: holeNames);
   }
 
-  Template.withExpressionResult(this.ast)
-      : source = null,
-        isExpression = true,
-        forceCopy = false {
-    assert(ast is Expression);
-    assert(_checkNoPlaceholders());
-    positionalArgumentCount = 0;
-    instantiator = (arguments) => ast;
+  factory Template.withExpressionResult(Expression ast) {
+    assert(_checkNoPlaceholders(ast));
+    return Template._(null, ast,
+        instantiator: (arguments) => ast,
+        isExpression: true,
+        forceCopy: false,
+        positionalArgumentCount: 0);
   }
 
-  Template.withStatementResult(this.ast)
-      : source = null,
-        isExpression = false,
-        forceCopy = false {
-    assert(ast is Statement);
-    assert(_checkNoPlaceholders());
-    positionalArgumentCount = 0;
-    instantiator = (arguments) => ast;
+  factory Template.withStatementResult(Statement ast) {
+    assert(_checkNoPlaceholders(ast));
+    return Template._(null, ast,
+        instantiator: (arguments) => ast,
+        isExpression: true,
+        forceCopy: false,
+        positionalArgumentCount: 0);
   }
 
-  bool _checkNoPlaceholders() {
+  static bool _checkNoPlaceholders(Node ast) {
     var generator = InstantiatorGeneratorVisitor(false);
     generator.compile(ast);
     return generator.analysis.count == 0;
   }
 
-  void _compile() {
-    var generator = InstantiatorGeneratorVisitor(forceCopy);
-    instantiator = generator.compile(ast);
-    positionalArgumentCount = generator.analysis.count;
-    Set<String> names = generator.analysis.holeNames;
-    holeNames = names.toList(growable: false);
-  }
-
   /// Instantiates the template with the given [arguments].
   ///
   /// This method fills in the holes with the given arguments. The [arguments]
   /// must be either a [List] or a [Map].
-  Node instantiate(var arguments) {
+  Node instantiate(Object arguments) {
     if (arguments is List) {
       if (arguments.length != positionalArgumentCount) {
         throw 'Wrong number of template arguments, given ${arguments.length}, '
@@ -114,8 +120,8 @@
     }
     if (arguments is Map) {
       if (holeNames.length < arguments.length) {
-        // This search is in O(n), but we only do it in case of an new StateError, and the
-        // number of holes should be quite limited.
+        // This search is in O(n), but we only do it in case of a new
+        // StateError, and the number of holes should be quite limited.
         String unusedNames = arguments.keys
             .where((name) => !holeNames.contains(name))
             .join(", ");
@@ -132,26 +138,21 @@
   }
 }
 
-/**
- * An Instantiator is a Function that generates a JS AST tree or List of
- * trees. [arguments] is a List for positional templates, or Map for
- * named templates.
- */
+/// An Instantiator is a Function that generates a JS AST tree or List of
+/// trees.
+///
+/// [arguments] is a List for positional templates, or Map for named templates.
 typedef T Instantiator<T>(arguments);
 
-/**
- * InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
- * containing [InterpolatedNode]s into a function that will create a copy of the
- * tree with the interpolated nodes substituted with provided values.
- */
+/// InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
+/// containing [InterpolatedNode]s into a function that will create a copy of the
+/// tree with the interpolated nodes substituted with provided values.
 class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
   final bool forceCopy;
 
   final analysis = InterpolatedNodeAnalysis();
 
-  /**
-   * The entire tree is cloned if [forceCopy] is true.
-   */
+  /// The entire tree is cloned if [forceCopy] is true.
   InstantiatorGeneratorVisitor(this.forceCopy);
 
   Instantiator compile(Node node) {
@@ -169,7 +170,7 @@
     return same<T>(node);
   }
 
-  Instantiator visitNullable<T extends Node>(T node) {
+  Instantiator visitNullable<T extends Node>(T? node) {
     return node == null ? makeNull : visit(node);
   }
 
@@ -396,7 +397,7 @@
     var makeThen = visit(node.then) as Instantiator<Statement>;
     var makeOtherwise = visit(node.otherwise) as Instantiator<Statement>;
     return (arguments) {
-      // Allow bools to be used for conditional compliation.
+      // Allow booleans to be used for conditional compilation.
       var nameOrPosition = condition.nameOrPosition;
       var value = arguments[nameOrPosition];
       if (value is bool) {
@@ -422,7 +423,7 @@
     var makeUpdate = visitNullable(node.update) as Instantiator<Expression>;
     var makeBody = visit(node.body) as Instantiator<Statement>;
     return (a) => For(makeInit(a), makeCondition(a),
-        makeUpdate(a)?.toVoidExpression(), makeBody(a));
+        makeUpdate(a).toVoidExpression(), makeBody(a));
   }
 
   @override
@@ -465,7 +466,7 @@
   @override
   Instantiator<Statement> visitReturn(Return node) {
     if (node.value == null) return (args) => Return();
-    var makeExpression = visit(node.value) as Instantiator<Expression>;
+    var makeExpression = visit(node.value!) as Instantiator<Expression>;
     return (a) => makeExpression(a).toReturn();
   }
 
@@ -484,8 +485,8 @@
   @override
   Instantiator<Try> visitTry(Try node) {
     var makeBody = visit(node.body) as Instantiator<Block>;
-    var makeCatch = visitNullable(node.catchPart) as Instantiator<Catch>;
-    var makeFinally = visitNullable(node.finallyPart) as Instantiator<Block>;
+    var makeCatch = visitNullable(node.catchPart) as Instantiator<Catch?>;
+    var makeFinally = visitNullable(node.finallyPart) as Instantiator<Block?>;
     return (a) => Try(makeBody(a), makeCatch(a), makeFinally(a));
   }
 
@@ -499,17 +500,25 @@
   @override
   Instantiator<Switch> visitSwitch(Switch node) {
     var makeKey = visit(node.key) as Instantiator<Expression>;
-    var makeCases = node.cases.map(visitSwitchCase).toList();
+    var makeCases =
+        node.cases.map((c) => visit(c) as Instantiator<SwitchClause>);
     return (a) => Switch(makeKey(a), makeCases.map((m) => m(a)).toList());
   }
 
   @override
-  Instantiator<SwitchCase> visitSwitchCase(SwitchCase node) {
-    var makeExpression =
-        visitNullable(node.expression) as Instantiator<Expression>;
+  Instantiator visitCase(Case node) {
+    var makeExpression = visit(node.expression) as Instantiator<Expression>;
     var makeBody = visit(node.body) as Instantiator<Block>;
     return (arguments) {
-      return SwitchCase(makeExpression(arguments), makeBody(arguments));
+      return Case(makeExpression(arguments), makeBody(arguments));
+    };
+  }
+
+  @override
+  Instantiator visitDefault(Default node) {
+    var makeBody = visit(node.body) as Instantiator<Block>;
+    return (arguments) {
+      return Default(makeBody(arguments));
     };
   }
 
@@ -545,8 +554,8 @@
   @override
   Instantiator<Expression> visitAssignment(Assignment node) {
     Instantiator makeLeftHandSide = visit(node.leftHandSide);
-    String op = node.op;
-    Instantiator makeValue = visitNullable(node.value);
+    String? op = node.op;
+    Instantiator makeValue = visit(node.value);
     return (arguments) {
       return makeValue(arguments)
           .toAssignExpression(makeLeftHandSide(arguments), op) as Expression;
@@ -558,7 +567,7 @@
       VariableInitialization node) {
     var makeDeclaration =
         visit(node.declaration) as Instantiator<VariableBinding>;
-    var makeValue = visitNullable(node.value) as Instantiator<Expression>;
+    var makeValue = visitNullable(node.value) as Instantiator<Expression?>;
     return (a) => VariableInitialization(makeDeclaration(a), makeValue(a));
   }
 
@@ -735,7 +744,8 @@
   Instantiator<ClassExpression> visitClassExpression(ClassExpression node) {
     var makeMethods = node.methods.map(visitSplayableExpression).toList();
     var makeName = visit(node.name) as Instantiator<Identifier>;
-    var makeHeritage = visit(node.heritage) as Instantiator<Expression>;
+    var makeHeritage =
+        visitNullable(node.heritage) as Instantiator<Expression?>;
 
     return (a) => ClassExpression(
         makeName(a), makeHeritage(a), splayNodes(makeMethods, a));
@@ -768,9 +778,6 @@
     return (a) => Await(makeExpr(a));
   }
 
-  // Note: these are not supported yet in the interpolation grammar.
-  @override
-  Instantiator visitModule(Module node) => throw UnimplementedError();
   @override
   Instantiator visitNameSpecifier(NameSpecifier node) =>
       throw UnimplementedError();
@@ -790,12 +797,13 @@
   @override
   Instantiator<DestructuredVariable> visitDestructuredVariable(
       DestructuredVariable node) {
-    var makeName = visitNullable(node.name) as Instantiator<Identifier>;
-    var makeProperty = visitNullable(node.property) as Instantiator<Expression>;
+    var makeName = visit(node.name) as Instantiator<Identifier>;
+    var makeProperty =
+        visitNullable(node.property) as Instantiator<Expression?>;
     var makeStructure =
-        visitNullable(node.structure) as Instantiator<BindingPattern>;
+        visitNullable(node.structure) as Instantiator<BindingPattern?>;
     var makeDefaultValue =
-        visitNullable(node.defaultValue) as Instantiator<Expression>;
+        visitNullable(node.defaultValue) as Instantiator<Expression?>;
     return (a) => DestructuredVariable(
         name: makeName(a),
         property: makeProperty(a),
@@ -806,13 +814,13 @@
   @override
   Instantiator<ArrayBindingPattern> visitArrayBindingPattern(
       ArrayBindingPattern node) {
-    List<Instantiator> makeVars = node.variables.map(this.visit).toList();
+    List<Instantiator> makeVars = node.variables.map(visit).toList();
     return (a) => ArrayBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitObjectBindingPattern(ObjectBindingPattern node) {
-    List<Instantiator> makeVars = node.variables.map(this.visit).toList();
+    List<Instantiator> makeVars = node.variables.map(visit).toList();
     return (a) => ObjectBindingPattern(splayNodes(makeVars, a));
   }
 
@@ -821,13 +829,11 @@
       (a) => SimpleBindingPattern(Identifier(node.name.name));
 }
 
-/**
- * InterpolatedNodeAnalysis determines which AST trees contain
- * [InterpolatedNode]s, and the names of the named interpolated nodes.
- */
-class InterpolatedNodeAnalysis extends BaseVisitor {
-  final Set<Node> containsInterpolatedNode = Set<Node>();
-  final Set<String> holeNames = Set<String>();
+/// InterpolatedNodeAnalysis determines which AST trees contain
+/// [InterpolatedNode]s, and the names of the named interpolated nodes.
+class InterpolatedNodeAnalysis extends BaseVisitorVoid {
+  final Set<Node> containsInterpolatedNode = {};
+  final Set<String> holeNames = {};
   int count = 0;
 
   InterpolatedNodeAnalysis();
@@ -844,7 +850,6 @@
     int before = count;
     node.visitChildren(this);
     if (count != before) containsInterpolatedNode.add(node);
-    return null;
   }
 
   @override
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 6f81197..bc13226 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -177,7 +177,7 @@
 
   Uri toCustomUri(Uri uri) {
     if (!uri.hasScheme) {
-      return Uri(scheme: options.multiRootScheme, path: '/' + uri.path);
+      return Uri(scheme: options.multiRootScheme, path: '/${uri.path}');
     }
     return uri;
   }
@@ -381,7 +381,7 @@
     if (identical(compilerState, oldCompilerState)) {
       component.unbindCanonicalNames();
     }
-    var sink = File(p.withoutExtension(outPaths.first) + '.dill').openWrite();
+    var sink = File('${p.withoutExtension(outPaths.first)}.dill').openWrite();
     // TODO(jmesserly): this appears to save external libraries.
     // Do we need to run them through an outlining step so they can be saved?
     kernel.BinaryPrinter(sink).writeComponentFile(component);
@@ -404,7 +404,7 @@
     if (identical(compilerState, oldCompilerState)) {
       compiledLibraries.unbindCanonicalNames();
     }
-    fullDillUri = p.withoutExtension(outPaths.first) + '.full.dill';
+    fullDillUri = '${p.withoutExtension(outPaths.first)}.full.dill';
     var sink = File(fullDillUri).openWrite();
     kernel.BinaryPrinter(sink).writeComponentFile(compiledLibraries);
     outFiles.add(sink.flush().then((_) => sink.close()));
@@ -418,8 +418,8 @@
     }
     var sb = StringBuffer();
     kernel.Printer(sb).writeComponentFile(component);
-    outFiles.add(File(outPaths.first + '.txt').writeAsString(sb.toString()));
-    outFiles.add(File(outPaths.first.split('.')[0] + '.ast.xml')
+    outFiles.add(File('${outPaths.first}.txt').writeAsString(sb.toString()));
+    outFiles.add(File('${outPaths.first.split('.')[0]}.ast.xml')
         .writeAsString(DebugPrinter.prettyPrint(compiledLibraries)));
   }
 
@@ -583,7 +583,7 @@
         buildSourceMap: options.sourceMap,
         inlineSourceMap: options.inlineSourceMap,
         jsUrl: p.toUri(output).toString(),
-        mapUrl: p.toUri(output + '.map').toString(),
+        mapUrl: p.toUri('$output.map').toString(),
         customScheme: options.multiRootScheme,
         multiRootOutputPath: options.multiRootOutputPath,
         component: component);
@@ -591,7 +591,7 @@
     outFiles.add(file.writeAsString(jsCode.code));
     if (jsCode.sourceMap != null) {
       outFiles.add(
-          File(output + '.map').writeAsString(json.encode(jsCode.sourceMap)));
+          File('$output.map').writeAsString(json.encode(jsCode.sourceMap)));
     }
   }
   await Future.wait(outFiles);
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index f0a8fc7..0f4ece3 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1134,8 +1134,8 @@
       var mixinType =
           _hierarchy.getClassAsInstanceOf(c, mixinClass).asInterfaceType;
       var mixinName =
-          getLocalClassName(superclass) + '_' + getLocalClassName(mixinClass);
-      var mixinId = _emitTemporaryId(mixinName + '\$');
+          '${getLocalClassName(superclass)}_${getLocalClassName(mixinClass)}';
+      var mixinId = _emitTemporaryId('$mixinName\$');
       // Collect all forwarding stub setters from anonymous mixins classes.
       // These will contain covariant parameter checks that need to be applied.
       var savedClassProperties = _classProperties;
@@ -1246,7 +1246,7 @@
           case 'Future':
           case 'Stream':
           case 'StreamSubscription':
-            return runtimeCall('is' + interface.name);
+            return runtimeCall('is${interface.name}');
         }
       }
       return null;
@@ -1327,23 +1327,7 @@
     var fields = c.fields
         .where((f) => f.isStatic && !isRedirectingFactoryField(f))
         .toList();
-    if (c.isEnum) {
-      // We know enum fields can be safely emitted as const fields, as long
-      // as the `values` field is emitted last.
-      var classRef = _emitTopLevelName(c);
-      var valueField = fields.firstWhere((f) => f.name.text == 'values');
-      fields.remove(valueField);
-      fields.add(valueField);
-      for (var f in fields) {
-        assert(f.isConst);
-        body.add(defineValueOnClass(
-                c,
-                classRef,
-                _emitStaticMemberName(f.name.text),
-                _visitInitializer(f.initializer, f.annotations))
-            .toStatement());
-      }
-    } else if (fields.isNotEmpty) {
+    if (fields.isNotEmpty) {
       body.add(_emitLazyFields(_emitTopLevelName(c), fields,
           (n) => _emitStaticMemberName(n.name.text)));
     }
@@ -2635,7 +2619,7 @@
 
   js_ast.PropertyAccess _emitFutureOrNameNoInterop({String suffix = ''}) {
     return js_ast.PropertyAccess(emitLibraryName(_coreTypes.asyncLibrary),
-        propertyName('FutureOr' + suffix));
+        propertyName('FutureOr$suffix'));
   }
 
   /// Emits the member name portion of a top-level member.
@@ -3018,7 +3002,7 @@
     }
 
     if (type.nullability == Nullability.undetermined) {
-      throw UnsupportedError('Undetermined Nullability');
+      _undeterminedNullabilityError(type);
     }
 
     // Emit non-nullable version directly.
@@ -3053,7 +3037,7 @@
     typeRep ??= _emitFutureOrNameNoInterop();
 
     if (type.declaredNullability == Nullability.undetermined) {
-      throw UnsupportedError('Undetermined Nullability');
+      _undeterminedNullabilityError(type);
     }
 
     // Emit non-nullable version directly.
@@ -3067,6 +3051,11 @@
     return _typeTable.nameType(type, typeRep);
   }
 
+  void /* Never */ _undeterminedNullabilityError(DartType type) =>
+      throw UnsupportedError(
+          'Undetermined Nullability encounted while compiling '
+          '${currentLibrary.fileUri}, which contains the type: $type.');
+
   /// Wraps [typeRep] in the appropriate wrapper for the given [nullability].
   ///
   /// Non-nullable and undetermined nullability will not cause any wrappers to
@@ -4279,7 +4268,7 @@
     var previous = _inLabeledContinueSwitch;
     _inLabeledContinueSwitch = hasLabeledContinue(node);
 
-    var cases = <js_ast.SwitchCase>[];
+    var cases = <js_ast.SwitchClause>[];
 
     if (_inLabeledContinueSwitch) {
       var labelState = _emitTemporaryId('labelState');
@@ -4320,13 +4309,13 @@
 
   /// Helper for visiting a SwitchCase statement.
   ///
-  /// lastSwitchCase is only used when the current switch statement contains
+  /// [lastSwitchCase] is only used when the current switch statement contains
   /// labeled continues. Dart permits the final case to implicitly break, but
   /// switch statements with labeled continues must explicitly break/continue
   /// to escape the surrounding infinite loop.
-  List<js_ast.SwitchCase> _visitSwitchCase(SwitchCase node,
+  List<js_ast.SwitchClause> _visitSwitchCase(SwitchCase node,
       {bool lastSwitchCase = false}) {
-    var cases = <js_ast.SwitchCase>[];
+    var cases = <js_ast.SwitchClause>[];
     var emptyBlock = js_ast.Block.empty();
     // TODO(jmesserly): make sure we are statically checking fall through
     var body = _visitStatement(node.body).toBlock();
@@ -4335,10 +4324,10 @@
         expressions.isNotEmpty && !node.isDefault ? expressions.last : null;
     for (var e in expressions) {
       var jsExpr = _visitExpression(e);
-      cases.add(js_ast.SwitchCase(jsExpr, e == lastExpr ? body : emptyBlock));
+      cases.add(js_ast.Case(jsExpr, e == lastExpr ? body : emptyBlock));
     }
     if (node.isDefault) {
-      cases.add(js_ast.SwitchCase.defaultCase(body));
+      cases.add(js_ast.Default(body));
     }
     // Switch statements with continue labels must explicitly break from their
     // last case to escape the additional loop around the switch.
@@ -4347,7 +4336,10 @@
       assert(_switchLabelStates.containsKey(node.parent));
       var breakStmt = js_ast.Break(_switchLabelStates[node.parent].label);
       var switchBody = js_ast.Block(cases.last.body.statements..add(breakStmt));
-      var updatedSwitch = js_ast.SwitchCase(cases.last.expression, switchBody);
+      var lastCase = cases.last;
+      var updatedSwitch = lastCase is js_ast.Case
+          ? js_ast.Case(lastCase.expression, switchBody)
+          : js_ast.Default(switchBody);
       cases.removeLast();
       cases.add(updatedSwitch);
     }
@@ -4376,8 +4368,12 @@
 
   @override
   js_ast.Statement visitIfStatement(IfStatement node) {
-    return js_ast.If(_visitTest(node.condition), _visitScope(node.then),
-        _visitScope(node.otherwise));
+    var condition = _visitTest(node.condition);
+    var then = _visitScope(node.then);
+    if (node.otherwise != null) {
+      return js_ast.If(condition, then, _visitScope(node.otherwise));
+    }
+    return js_ast.If.noElse(condition, then);
   }
 
   /// Visits a statement, and ensures the resulting AST handles block scope
@@ -6450,11 +6446,11 @@
     // Emit the constant as an integer, if possible.
     if (value.isFinite) {
       var intValue = value.toInt();
-      const _MIN_INT32 = -0x80000000;
-      const _MAX_INT32 = 0x7FFFFFFF;
+      const minInt32 = -0x80000000;
+      const maxInt32 = 0x7FFFFFFF;
       if (intValue.toDouble() == value &&
-          intValue >= _MIN_INT32 &&
-          intValue <= _MAX_INT32) {
+          intValue >= minInt32 &&
+          intValue <= maxInt32) {
         return js.number(intValue);
       }
     }
@@ -6474,7 +6470,7 @@
   js_ast.Expression visitStringConstant(StringConstant node) =>
       js.escapedString(node.value, '"');
 
-  // DDC does not currently use the non-primivite constant nodes; rather these
+  // DDC does not currently use the non-primitive constant nodes; rather these
   // are emitted via their normal expression nodes.
   @override
   js_ast.Expression defaultConstant(Constant node) => _emitInvalidNode(node);
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_dart_2_17_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_dart_2_17_test.dart
new file mode 100644
index 0000000..7efa925
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_dart_2_17_test.dart
@@ -0,0 +1,302 @@
+// 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.
+
+// @dart = 2.9
+
+import 'package:dev_compiler/dev_compiler.dart' show ModuleFormat;
+import 'package:test/test.dart';
+
+import 'expression_compiler_e2e_suite.dart';
+
+void main() async {
+  var driver = await TestDriver.init();
+
+  group('Dart 2.17 language features', () {
+    tearDownAll(() async {
+      await driver.finish();
+    });
+
+    group('(Unsound null safety)', () {
+      group('(AMD module system)', () {
+        var setup = SetupCompilerOptions(
+            soundNullSafety: false,
+            legacyCode: false,
+            moduleFormat: ModuleFormat.amd);
+        runSharedTests(setup, driver);
+      });
+
+      group('(DDC module system)', () {
+        var setup = SetupCompilerOptions(
+            soundNullSafety: false,
+            legacyCode: false,
+            moduleFormat: ModuleFormat.ddc);
+        runSharedTests(setup, driver);
+      });
+    });
+
+    group('(Sound null safety)', () {
+      group('(AMD module system)', () {
+        var setup = SetupCompilerOptions(
+            soundNullSafety: true,
+            legacyCode: false,
+            moduleFormat: ModuleFormat.amd);
+        runSharedTests(setup, driver);
+      });
+
+      group('(DDC module system)', () {
+        var setup = SetupCompilerOptions(
+            soundNullSafety: true,
+            legacyCode: false,
+            moduleFormat: ModuleFormat.ddc);
+        runSharedTests(setup, driver);
+      });
+    });
+  });
+}
+
+/// Shared tests for language features introduced in version 2.17.0.
+void runSharedTests(SetupCompilerOptions setup, TestDriver driver) {
+  group('Named arguments anywhere', () {
+    var source = r'''
+      String topLevelMethod(int param1, String param2,
+              {int param3 = -1, String param4 = 'default'}) =>
+          '$param1, $param2, $param3, $param4';
+
+      class C {
+        int param1;
+        String param2;
+        int param3;
+        String param4;
+        C(this.param1, this.param2,
+            {this.param3 = -1, this.param4 = 'default'});
+
+        static String staticMethod(int param1, String param2,
+              {int param3 = -1, String param4 = 'default'}) =>
+          '$param1, $param2, $param3, $param4';
+
+        String instanceMethod(int param1, String param2,
+              {int param3 = -1, String param4 = 'default'}) =>
+          '$param1, $param2, $param3, $param4';
+
+        String toString() => '$param1, $param2, $param3, $param4';
+      }
+
+      main() {
+        String localMethod(int param1, String param2,
+              {int param3 = -1, String param4 = 'default'}) =>
+          '$param1, $param2, $param3, $param4';
+        var c = C(1, 'two');
+        // Breakpoint: bp
+        print('hello world');
+      }
+        ''';
+
+    setUpAll(() async {
+      await driver.initSource(setup, source,
+          experiments: {'named-arguments-anywhere': true});
+    });
+
+    tearDownAll(() async {
+      await driver.cleanupTest();
+    });
+
+    test('in top level method', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'topLevelMethod(param3: 3, 1, param4: "four", "two")',
+          expectedResult: '1, two, 3, four');
+    });
+    test('in local method', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'topLevelMethod(param3: 3, 1, param4: "four", "two")',
+          expectedResult: '1, two, 3, four');
+    });
+    test('in class constructor', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'C(param3: 3, 1, param4: "four", "two").toString()',
+          expectedResult: '1, two, 3, four');
+    });
+    test('in class static method', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'C.staticMethod(param3: 3, 1, param4: "four", "two")',
+          expectedResult: '1, two, 3, four');
+    });
+    test('in class instance method', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'c.instanceMethod(param3: 3, 1, param4: "four", "two")',
+          expectedResult: '1, two, 3, four');
+    });
+  });
+
+  group('Super parameters', () {
+    var source = r'''
+      class S {
+        final int i;
+        final String? s;
+        final double d;
+
+        S(this.i, [this.s]): d = 3.14;
+
+        S.named(this.i, {this.d = 3.14}): s = 'default';
+      }
+
+      class C extends S {
+        final int i1;
+        final int i2;
+
+        C(this.i1, super.i, this.i2, [super.s]);
+
+        C.named({super.d}): i1 = 10, i2 = 30, super.named(20);
+      }
+
+      main() {
+        var c = C(1, 2, 3, 'bar');
+        var c2 = C.named(d: 2.71);
+        // Breakpoint: bp
+        print('hello world');
+      }
+        ''';
+
+    setUpAll(() async {
+      await driver
+          .initSource(setup, source, experiments: {'super-parameters': true});
+    });
+
+    tearDownAll(() async {
+      await driver.cleanupTest();
+    });
+
+    test('in constructor mixed with regular parameters', () async {
+      await driver.check(
+          breakpointId: 'bp', expression: 'c.i1', expectedResult: '1');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c.i', expectedResult: '2');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c.i2', expectedResult: '3');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c.s', expectedResult: 'bar');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c.d', expectedResult: '3.14');
+    });
+    test('in named constructor mixed with regular parameters', () async {
+      await driver.check(
+          breakpointId: 'bp', expression: 'c2.i1', expectedResult: '10');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c2.i', expectedResult: '20');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c2.i2', expectedResult: '30');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c2.s', expectedResult: 'default');
+      await driver.check(
+          breakpointId: 'bp', expression: 'c2.d', expectedResult: '2.71');
+    });
+  });
+
+  group('Enhanced enums', () {
+    var source = r'''
+      enum E<T> with M {
+        id_int<int>(0),
+        id_bool<bool>(true),
+        id_string<String>('hello world', n: 13);
+
+        final T field;
+        final num n;
+        static const constStaticField = id_string;
+
+        const E(T arg0, {num? n}) : this.field = arg0, this.n = n ?? 42;
+
+        T get fieldGetter => field;
+        num instanceMethod() => n;
+      }
+
+      enum E2 with M {
+        v1, v2, id_string;
+      }
+
+      mixin M on Enum {
+        int mixinMethod() => index * 100;
+      }
+
+      main() {
+        var e = E.id_string;
+        // Breakpoint: bp
+        print('hello world');
+      }
+        ''';
+
+    setUpAll(() async {
+      await driver
+          .initSource(setup, source, experiments: {'enhanced-enums': true});
+    });
+
+    tearDownAll(() async {
+      await driver.cleanupTest();
+    });
+
+    test('evaluate to the correct string', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id_string.toString()',
+          expectedResult: 'E.id_string');
+    });
+    test('evaluate to the correct index', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id_string.index',
+          expectedResult: '2');
+    });
+    test('compare properly against themselves', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e == E.id_string && E.id_string == E.id_string',
+          expectedResult: 'true');
+    });
+    test('compare properly against other enums', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e != E2.id_string && E.id_string != E2.id_string',
+          expectedResult: 'true');
+    });
+    test('with instance methods', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id_bool.instanceMethod()',
+          expectedResult: '42');
+    });
+    test('with instance methods from local instance', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e.instanceMethod()',
+          expectedResult: '13');
+    });
+    test('with getters', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id_int.fieldGetter',
+          expectedResult: '0');
+    });
+    test('with getters from local instance', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e.fieldGetter',
+          expectedResult: 'hello world');
+    });
+    test('with mixin calls', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id_string.mixinMethod()',
+          expectedResult: '200');
+    });
+    test('with mixin calls through overridden indices', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E2.v2.mixinMethod()',
+          expectedResult: '100');
+    });
+  });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
index 7db89ce..a1916b8 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_shared.dart
@@ -61,10 +61,7 @@
 }
 ''';
 
-/// Shared tests that require a language version greater than 2.12.
-///
-/// Tests that exercise language features introduced with 2.12 or after are
-/// valid here.
+/// Shared tests that require a language version >=2.12.0 <2.17.0.
 // TODO(nshahan) Merge with [runAgnosticSharedTests] after we no longer need to
 // test support for evaluation in legacy (pre-null safety) code.
 void runNullSafeSharedTests(SetupCompilerOptions setup, TestDriver driver) {
@@ -316,82 +313,6 @@
     });
   });
 
-  group('Named arguments anywhere', () {
-    var source = r'''
-      String topLevelMethod(int param1, String param2,
-              {int param3 = -1, String param4 = 'default'}) =>
-          '$param1, $param2, $param3, $param4';
-
-      class C {
-        int param1;
-        String param2;
-        int param3;
-        String param4;
-        C(this.param1, this.param2,
-            {this.param3 = -1, this.param4 = 'default'});
-
-        static String staticMethod(int param1, String param2,
-              {int param3 = -1, String param4 = 'default'}) =>
-          '$param1, $param2, $param3, $param4';
-
-        String instanceMethod(int param1, String param2,
-              {int param3 = -1, String param4 = 'default'}) =>
-          '$param1, $param2, $param3, $param4';
-
-        String toString() => '$param1, $param2, $param3, $param4';
-      }
-
-      main() {
-        String localMethod(int param1, String param2,
-              {int param3 = -1, String param4 = 'default'}) =>
-          '$param1, $param2, $param3, $param4';
-        var c = C(1, 'two');
-        // Breakpoint: bp
-        print('hello world');
-      }
-        ''';
-
-    setUpAll(() async {
-      await driver.initSource(setup, source,
-          experiments: {'named-arguments-anywhere': true});
-    });
-
-    tearDownAll(() async {
-      await driver.cleanupTest();
-    });
-
-    test('in top level method', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'topLevelMethod(param3: 3, 1, param4: "four", "two")',
-          expectedResult: '1, two, 3, four');
-    });
-    test('in local method', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'topLevelMethod(param3: 3, 1, param4: "four", "two")',
-          expectedResult: '1, two, 3, four');
-    });
-    test('in class constructor', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'C(param3: 3, 1, param4: "four", "two").toString()',
-          expectedResult: '1, two, 3, four');
-    });
-    test('in class static method', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'C.staticMethod(param3: 3, 1, param4: "four", "two")',
-          expectedResult: '1, two, 3, four');
-    });
-    test('in class instance method', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'c.instanceMethod(param3: 3, 1, param4: "four", "two")',
-          expectedResult: '1, two, 3, four');
-    });
-  });
-
   group('Enums', () {
     var source = r'''
       enum E {id1, id2, id3}
@@ -436,110 +357,6 @@
           expectedResult: 'true');
     });
   });
-
-  group('Enhanced enums', () {
-    var source = r'''
-      enum E<T> with M {
-        id_int<int>(0),
-        id_bool<bool>(true),
-        id_string<String>('hello world', n: 13);
-
-        final T field;
-        final num n;
-        static const constStaticField = id_string;
-
-        const E(T arg0, {num? n}) : this.field = arg0, this.n = n ?? 42;
-
-        T get fieldGetter => field;
-        num instanceMethod() => n;
-      }
-
-      enum E2 with M {
-        v1, v2, id_string;
-        int get index => 10;
-      }
-
-      mixin M on Enum {
-        int mixinMethod() => index * 100;
-      }
-
-      main() {
-        var e = E.id_string;
-        // Breakpoint: bp
-        print('hello world');
-      }
-        ''';
-
-    setUpAll(() async {
-      await driver
-          .initSource(setup, source, experiments: {'enhanced-enums': true});
-    });
-
-    tearDownAll(() async {
-      await driver.cleanupTest();
-    });
-
-    test('evaluate to the correct string', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E.id_string.toString()',
-          expectedResult: 'E.id_string');
-    });
-    test('evaluate to the correct index', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E.id_string.index',
-          expectedResult: '2');
-    });
-    test('compare properly against themselves', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'e == E.id_string && E.id_string == E.id_string',
-          expectedResult: 'true');
-    });
-    test('compare properly against other enums', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'e != E2.id_string && E.id_string != E2.id_string',
-          expectedResult: 'true');
-    });
-    test('with instance methods', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E.id_bool.instanceMethod()',
-          expectedResult: '42');
-    });
-    test('with instance methods from local instance', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'e.instanceMethod()',
-          expectedResult: '13');
-    });
-    test('with getters', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E.id_int.fieldGetter',
-          expectedResult: '0');
-    });
-    test('with getters from local instance', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'e.fieldGetter',
-          expectedResult: 'hello world');
-    });
-    test('with mixin calls', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E.id_string.mixinMethod()',
-          expectedResult: '200');
-    });
-    test('with mixin calls through overridden indices', () async {
-      await driver.check(
-          breakpointId: 'bp',
-          expression: 'E2.v2.mixinMethod()',
-          expectedResult: '1000');
-    });
-  });
 }
 
 /// Shared tests that are valid in legacy (before 2.12) and are agnostic to
diff --git a/pkg/dev_compiler/test/js/builder_test.dart b/pkg/dev_compiler/test/js/builder_test.dart
index acfb55c..9a1ac18 100644
--- a/pkg/dev_compiler/test/js/builder_test.dart
+++ b/pkg/dev_compiler/test/js/builder_test.dart
@@ -1,5 +1,3 @@
-// @dart = 2.9
-
 import 'package:dev_compiler/src/js_ast/js_ast.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/dev_compiler/test/modular_suite.dart b/pkg/dev_compiler/test/modular_suite.dart
index 77ee34f..eb34432 100644
--- a/pkg/dev_compiler/test/modular_suite.dart
+++ b/pkg/dev_compiler/test/modular_suite.dart
@@ -73,6 +73,12 @@
   bool get onlyOnMain => false;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: source-to-dill on $module');
@@ -163,6 +169,12 @@
   bool get onlyOnMain => false;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: ddc on $module');
@@ -245,6 +257,12 @@
   bool get onlyOnMain => true;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: d8 on $module');
@@ -266,7 +284,7 @@
     ''';
 
     var wrapper =
-        root.resolveUri(toUri(module, jsId)).toFilePath() + '.wrapper.js';
+        '${root.resolveUri(toUri(module, jsId)).toFilePath()}.wrapper.js';
     await File(wrapper).writeAsString(runjs);
     var d8Args = ['--module', wrapper];
     var result = await _runProcess(
diff --git a/pkg/dev_compiler/test/modular_suite_nnbd.dart b/pkg/dev_compiler/test/modular_suite_nnbd.dart
index 2cba274..4a1f559 100644
--- a/pkg/dev_compiler/test/modular_suite_nnbd.dart
+++ b/pkg/dev_compiler/test/modular_suite_nnbd.dart
@@ -73,6 +73,12 @@
   bool get onlyOnMain => false;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: source-to-dill on $module');
@@ -165,6 +171,12 @@
   bool get onlyOnMain => false;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: ddc on $module');
@@ -249,6 +261,12 @@
   bool get onlyOnMain => true;
 
   @override
+  bool get onlyOnSdk => false;
+
+  @override
+  bool get notOnSdk => false;
+
+  @override
   Future<void> execute(Module module, Uri root, ModuleDataToRelativeUri toUri,
       List<String> flags) async {
     if (_options.verbose) print('\nstep: d8 on $module');
@@ -270,7 +288,7 @@
     ''';
 
     var wrapper =
-        root.resolveUri(toUri(module, jsId)).toFilePath() + '.wrapper.js';
+        '${root.resolveUri(toUri(module, jsId)).toFilePath()}.wrapper.js';
     await File(wrapper).writeAsString(runjs);
     var d8Args = ['--module', wrapper];
     var result = await _runProcess(
diff --git a/pkg/dev_compiler/tool/ddb b/pkg/dev_compiler/tool/ddb
index 8c9efe1..a44b20b 100755
--- a/pkg/dev_compiler/tool/ddb
+++ b/pkg/dev_compiler/tool/ddb
@@ -32,6 +32,10 @@
 
   // Parse flags.
   var parser = ArgParser(usageLineLength: 80)
+    ..addOption('arch',
+        abbr: 'a',
+        help: "Target platform's machine architecture.",
+        allowed: ['x64', 'arm64'])
     ..addOption('binary', abbr: 'b', help: 'Runtime binary path.')
     ..addOption('compile-vm-options',
         help: 'DART_VM_OPTIONS for the compilation VM.')
@@ -106,6 +110,7 @@
     printUsage();
     exit(1);
   }
+  var arch = options['arch'] as String;
   var debug = options['debug'] as bool ||
       options['observe'] as bool ||
       options.wasParsed('vm-service-port');
@@ -213,8 +218,7 @@
   }
 
   var sdkRoot = p.dirname(p.dirname(ddcPath));
-  var buildDir =
-      p.join(sdkRoot, Platform.isMacOS ? 'xcodebuild' : 'out', 'ReleaseX64');
+  var buildDir = resolveBuildDir(sdkRoot, arch);
   var requirePath = p.join(sdkRoot, 'third_party', 'requirejs');
   var sdkOutlineDill = p.join(buildDir,
       soundNullSafety ? 'ddc_outline_sound.dill' : 'ddc_outline.dill');
@@ -371,3 +375,44 @@
   }
   throw UnsupportedError('Unsupported platform.');
 }
+
+/// Maps supported unames to supported architectures.
+final _resolvedUnames = {
+  'arm64': 'arm64',
+  'x86_64': 'x64',
+  'x64': 'x64',
+};
+
+/// Returns the location of the Dart SDK's build directory.
+String resolveBuildDir(String sdkRoot, String architecture) {
+  String platformString;
+  String archString;
+  if (Platform.isMacOS) {
+    platformString = 'xcodebuild';
+    String resolvedArchitecture = architecture;
+    if (architecture == null) {
+      final uname = Process.runSync('uname', ['-m']).stdout.trim();
+      resolvedArchitecture = _resolvedUnames[uname] ?? uname;
+    }
+    if (resolvedArchitecture == 'x64') {
+      archString = 'ReleaseX64';
+    } else if (resolvedArchitecture == 'arm64') {
+      archString = 'ReleaseARM64';
+    } else {
+      throw UnsupportedError(
+          'DDB does not currently support the architecture $architecture '
+          'on MacOS.');
+    }
+  } else if (Platform.isLinux || Platform.isWindows) {
+    platformString = 'out';
+    if (architecture != null && architecture != 'x64') {
+      throw UnsupportedError(
+          'DDB does not currently support the architecture $architecture '
+          'on Windows or Linux.');
+    }
+    archString = 'ReleaseX64';
+  } else {
+    throw UnsupportedError('Unsupported platform.');
+  }
+  return p.join(sdkRoot, platformString, archString);
+}
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index aa9eaa6..cb74f58 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -52,7 +52,7 @@
         }
         var packageRoot = '$root/packages';
         if (p.url.isWithin(packageRoot, sourceUrl)) {
-          sourceUrl = 'package:' + p.url.relative(sourceUrl, from: packageRoot);
+          sourceUrl = 'package:${p.url.relative(sourceUrl, from: packageRoot)}';
           break;
         }
       }
diff --git a/pkg/front_end/analysis_options_no_lints.yaml b/pkg/front_end/analysis_options_no_lints.yaml
index c1cae63..6b78932 100644
--- a/pkg/front_end/analysis_options_no_lints.yaml
+++ b/pkg/front_end/analysis_options_no_lints.yaml
@@ -12,8 +12,9 @@
     - test/extensions/data/**
     - test/id_testing/data/**
     - test/language_versioning/data/**
-    - test/macro_application/data/**
-    - test/macros/data/**
+    - test/macros/application/data/**
+    - test/macros/declaration/data/**
+    - test/macros/incremental/data/**
     - test/patching/data/**
     - test/predicates/data/**
     - test/static_types/data/**
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 3bd1f30..450b24b 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -18,21 +18,17 @@
 
 import '../base/nnbd_mode.dart';
 
-import '../fasta/kernel/macro.dart';
 import '../macro_serializer.dart';
 import 'experimental_flags.dart'
     show
         AllowedExperimentalFlags,
-        defaultExperimentalFlags,
         ExperimentalFlag,
-        expiredExperimentalFlags,
+        GlobalFeatures,
         parseExperimentalFlag;
 
 import 'experimental_flags.dart' as flags
     show
         getExperimentEnabledVersionInLibrary,
-        isExperimentEnabled,
-        isExperimentEnabledInLibrary,
         isExperimentEnabledInLibraryByVersion;
 
 import 'file_system.dart' show FileSystem;
@@ -118,11 +114,11 @@
   Future<MacroExecutor> Function() macroExecutorProvider =
       () async => throw 'Macro execution is not supported.';
 
-  /// Map from [MacroClass] to [Uri] for the precompiled dill that contains
-  /// the macro code.
+  /// Map from library import [Uri]s of libraries that declare macros to
+  /// the [Uri] for the precompiled dill that contains the macro code.
   ///
   /// This is part of the experimental macro feature.
-  Map<MacroClass, Uri>? precompiledMacroUris;
+  Map<Uri, Uri>? precompiledMacroUris;
 
   /// The [Target] used for compiling macros.
   ///
@@ -276,29 +272,14 @@
   /// Verbosity level used for filtering emitted messages.
   Verbosity verbosity = Verbosity.all;
 
-  /// Returns `true` if the experiment with the given [flag] is enabled, either
-  /// explicitly or implicitly.
-  ///
-  /// Note that libraries can still opt out of the experiment by having a lower
-  /// language version than required for the experiment.
-  bool isExperimentEnabled(ExperimentalFlag flag) {
-    return flags.isExperimentEnabled(flag,
-        explicitExperimentalFlags: explicitExperimentalFlags,
-        defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting);
-  }
+  GlobalFeatures? _globalFeatures;
 
-  /// Returns `true` if the experiment with the given [flag] is enabled either
-  /// explicitly or implicitly for the library with the given [importUri].
-  ///
-  /// Note that the library can still opt out of the experiment by having a
-  /// lower language version than required for the experiment. See
-  /// [getExperimentEnabledVersionInLibrary].
-  bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri importUri) {
-    return flags.isExperimentEnabledInLibrary(flag, importUri,
-        defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
-        explicitExperimentalFlags: explicitExperimentalFlags,
-        allowedExperimentalFlags: allowedExperimentalFlagsForTesting);
-  }
+  GlobalFeatures get globalFeatures => _globalFeatures ??= new GlobalFeatures(
+      explicitExperimentalFlags,
+      defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+      experimentEnabledVersionForTesting: experimentEnabledVersionForTesting,
+      experimentReleasedVersionForTesting: experimentReleasedVersionForTesting,
+      allowedExperimentalFlags: allowedExperimentalFlagsForTesting);
 
   /// Returns the minimum language version needed for a library with the given
   /// [importUri] to opt in to the experiment with the given [flag].
@@ -444,8 +425,8 @@
               "Experiment specified with conflicting values: " + experiment);
         }
       } else {
-        if (expiredExperimentalFlags[flag]!) {
-          if (value != defaultExperimentalFlags[flag]) {
+        if (flag.isExpired) {
+          if (value != flag.isEnabledByDefault) {
             /// Produce an error when the value is not the default value.
             if (value) {
               onError("Enabling experiment " +
@@ -456,7 +437,7 @@
                   experiment +
                   " is no longer supported.");
             }
-            value = defaultExperimentalFlags[flag]!;
+            value = flag.isEnabledByDefault;
           } else if (onWarning != null) {
             /// Produce a warning when the value is the default value.
             if (value) {
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
index aa49e7b..2d2a630 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -50,8 +50,6 @@
 bool isExperimentEnabled(ExperimentalFlag flag,
     {Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
     Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting}) {
-  assert(defaultExperimentalFlags.containsKey(flag),
-      "No default value for $flag.");
   bool? enabled;
   if (explicitExperimentalFlags != null) {
     enabled = explicitExperimentalFlags[flag];
@@ -59,8 +57,8 @@
   if (defaultExperimentFlagsForTesting != null) {
     enabled ??= defaultExperimentFlagsForTesting[flag];
   }
-  enabled ??= defaultExperimentalFlags[flag];
-  return enabled!;
+  enabled ??= flag.isEnabledByDefault;
+  return enabled;
 }
 
 /// Returns `true` if [flag] is enabled in the library with the [canonicalUri]
@@ -80,8 +78,6 @@
     {Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting,
     Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
     AllowedExperimentalFlags? allowedExperimentalFlags}) {
-  assert(defaultExperimentalFlags.containsKey(flag),
-      "No default value for $flag.");
   bool? enabled;
   if (explicitExperimentalFlags != null) {
     enabled = explicitExperimentalFlags[flag];
@@ -89,8 +85,8 @@
   if (defaultExperimentFlagsForTesting != null) {
     enabled ??= defaultExperimentFlagsForTesting[flag];
   }
-  enabled ??= defaultExperimentalFlags[flag];
-  if (!enabled!) {
+  enabled ??= flag.isEnabledByDefault;
+  if (!enabled) {
     allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
     Set<ExperimentalFlag>? allowedFlags;
     if (canonicalUri.isScheme('dart')) {
@@ -140,11 +136,11 @@
   if (defaultExperimentFlagsForTesting != null) {
     enabledByDefault = defaultExperimentFlagsForTesting[flag];
   }
-  enabledByDefault ??= defaultExperimentalFlags[flag];
+  enabledByDefault ??= flag.isEnabledByDefault;
 
   bool enabledExplicitly = explicitExperimentalFlags[flag] ?? false;
 
-  if (!enabledByDefault! ||
+  if (!enabledByDefault ||
       enabledExplicitly ||
       (allowedFlags != null && allowedFlags.contains(flag))) {
     // If the feature is not enabled by default or is enabled by the allowed
@@ -152,17 +148,18 @@
     if (experimentReleasedVersionForTesting != null) {
       version = experimentReleasedVersionForTesting[flag];
     }
-    version ??= experimentReleasedVersion[flag];
+    version ??= flag.experimentReleasedVersion;
   } else {
     // If the feature is enabled by default and is not enabled by the allowed
     // list use the enabled version.
     if (experimentEnabledVersionForTesting != null) {
       version = experimentEnabledVersionForTesting[flag];
     }
-    version ??= experimentEnabledVersion[flag];
+    version ??= flag.experimentEnabledVersion;
   }
+  // ignore: unnecessary_null_comparison
   assert(version != null, "No version for enabling $flag in $canonicalUri.");
-  return version!;
+  return version;
 }
 
 bool isExperimentEnabledInLibraryByVersion(
@@ -172,14 +169,11 @@
     AllowedExperimentalFlags? allowedExperimentalFlags,
     Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting,
     Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
-  assert(defaultExperimentalFlags.containsKey(flag),
-      "No default value for $flag.");
-
   bool? enabledByDefault;
   if (defaultExperimentFlagsForTesting != null) {
     enabledByDefault = defaultExperimentFlagsForTesting[flag];
   }
-  enabledByDefault ??= defaultExperimentalFlags[flag];
+  enabledByDefault ??= flag.isEnabledByDefault;
 
   bool enabledExplicitly = explicitExperimentalFlags[flag] ?? false;
 
@@ -203,7 +197,7 @@
     enabledByAllowed = allowedFlags.contains(flag);
   }
 
-  if (enabledByDefault! || enabledExplicitly || enabledByAllowed) {
+  if (enabledByDefault || enabledExplicitly || enabledByAllowed) {
     // The feature is enabled depending on the library language version.
     Version? enabledVersion;
     if (!enabledByDefault || enabledExplicitly || enabledByAllowed) {
@@ -212,18 +206,58 @@
       if (experimentReleasedVersionForTesting != null) {
         enabledVersion = experimentReleasedVersionForTesting[flag]!;
       }
-      enabledVersion ??= experimentReleasedVersion[flag];
+      enabledVersion ??= flag.experimentReleasedVersion;
     } else {
       // If the feature is enabled by default and is not enabled by the allowed
       // list use the enabled version.
       if (experimentEnabledVersionForTesting != null) {
         enabledVersion = experimentEnabledVersionForTesting[flag];
       }
-      enabledVersion ??= experimentEnabledVersion[flag];
+      enabledVersion ??= flag.experimentEnabledVersion;
     }
-    return version >= enabledVersion!;
+    return version >= enabledVersion;
   } else {
     // The feature is not enabled, regardless of library language version.
     return false;
   }
 }
+
+/// Common interface for the state of an experimental feature.
+abstract class ExperimentalFeature {
+  /// The flag for the experimental feature.
+  final ExperimentalFlag flag;
+
+  ExperimentalFeature(this.flag);
+
+  /// `true` if this feature is enabled.
+  bool get isEnabled;
+}
+
+/// The global state of an experimental feature.
+class GlobalFeature extends ExperimentalFeature {
+  @override
+  final bool isEnabled;
+
+  GlobalFeature(ExperimentalFlag flag, this.isEnabled) : super(flag);
+}
+
+/// The state of an experimental feature within a specific library.
+class LibraryFeature extends ExperimentalFeature {
+  /// `true` if this feature is supported in the library as defined by the
+  /// default language version for its containing package/sdk.
+  ///
+  /// The feature might still not be enabled if the language version of the
+  /// library itself is below the [enabledVersion] for the feature in the
+  /// containing package/sdk.
+  final bool isSupported;
+
+  @override
+  final bool isEnabled;
+
+  /// The minimum language version for enabling this feature in this library.
+  final Version enabledVersion;
+
+  LibraryFeature(ExperimentalFlag flag, this.isSupported, this.enabledVersion,
+      this.isEnabled)
+      : super(flag);
+}
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 953dfa4..4d56950 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -9,50 +9,471 @@
 
 part of 'experimental_flags.dart';
 
-enum ExperimentalFlag {
-  alternativeInvalidationStrategy,
-  constFunctions,
-  constantUpdate2018,
-  constructorTearoffs,
-  controlFlowCollections,
-  enhancedEnums,
-  extensionMethods,
-  extensionTypes,
-  genericMetadata,
-  macros,
-  namedArgumentsAnywhere,
-  nonNullable,
-  nonfunctionTypeAliases,
-  setLiterals,
-  spreadCollections,
-  superParameters,
-  testExperiment,
-  tripleShift,
-  valueClass,
-  variance,
+/// An experiment flag including its fixed properties.
+class ExperimentalFlag {
+  /// The name of this flag as used in the --enable-experiment option.
+  final String name;
+
+  /// `true` if this experimental feature is enabled by default.
+  ///
+  /// When `true`, the feature can still be disabled in individual libraries
+  /// with a language version below the [experimentEnabledVersion], and if not
+  /// [isExpired], the feature can also be disabled by using a 'no-' prefix
+  /// in the --enable-experiment option.
+  final bool isEnabledByDefault;
+
+  /// `true` if this feature can no longer be changed using the
+  /// --enable-experiment option.
+  ///
+  /// Libraries can still opt out of the feature by using a language version
+  /// below the [experimentEnabledVersion].
+  final bool isExpired;
+  final Version enabledVersion;
+
+  /// The minimum version that supports this feature.
+  ///
+  /// If the feature is not enabled by default, this is the current language
+  /// version.
+  final Version experimentEnabledVersion;
+
+  /// The minimum version that supports this feature in allowed libraries.
+  ///
+  /// Allowed libraries are specified in
+  ///
+  ///    sdk/lib/_internal/allowed_experiments.json
+  final Version experimentReleasedVersion;
+
+  const ExperimentalFlag(
+      {required this.name,
+      required this.isEnabledByDefault,
+      required this.isExpired,
+      required this.enabledVersion,
+      required this.experimentEnabledVersion,
+      required this.experimentReleasedVersion});
+  static const ExperimentalFlag alternativeInvalidationStrategy =
+      const ExperimentalFlag(
+          name: 'alternative-invalidation-strategy',
+          isEnabledByDefault: false,
+          isExpired: false,
+          enabledVersion: const Version(2, 17),
+          experimentEnabledVersion: const Version(2, 17),
+          experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag constFunctions = const ExperimentalFlag(
+      name: 'const-functions',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag constantUpdate2018 = const ExperimentalFlag(
+      name: 'constant-update-2018',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 0),
+      experimentEnabledVersion: const Version(2, 0),
+      experimentReleasedVersion: const Version(2, 0));
+
+  static const ExperimentalFlag constructorTearoffs = const ExperimentalFlag(
+      name: 'constructor-tearoffs',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 15),
+      experimentEnabledVersion: const Version(2, 15),
+      experimentReleasedVersion: const Version(2, 15));
+
+  static const ExperimentalFlag controlFlowCollections = const ExperimentalFlag(
+      name: 'control-flow-collections',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 0),
+      experimentEnabledVersion: const Version(2, 0),
+      experimentReleasedVersion: const Version(2, 0));
+
+  static const ExperimentalFlag enhancedEnums = const ExperimentalFlag(
+      name: 'enhanced-enums',
+      isEnabledByDefault: true,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag extensionMethods = const ExperimentalFlag(
+      name: 'extension-methods',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 6),
+      experimentEnabledVersion: const Version(2, 6),
+      experimentReleasedVersion: const Version(2, 6));
+
+  static const ExperimentalFlag extensionTypes = const ExperimentalFlag(
+      name: 'extension-types',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag genericMetadata = const ExperimentalFlag(
+      name: 'generic-metadata',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 14),
+      experimentEnabledVersion: const Version(2, 14),
+      experimentReleasedVersion: const Version(2, 14));
+
+  static const ExperimentalFlag inferenceUpdate1 = const ExperimentalFlag(
+      name: 'inference-update-1',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag macros = const ExperimentalFlag(
+      name: 'macros',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag namedArgumentsAnywhere = const ExperimentalFlag(
+      name: 'named-arguments-anywhere',
+      isEnabledByDefault: true,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag nonNullable = const ExperimentalFlag(
+      name: 'non-nullable',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 12),
+      experimentEnabledVersion: const Version(2, 12),
+      experimentReleasedVersion: const Version(2, 10));
+
+  static const ExperimentalFlag nonfunctionTypeAliases = const ExperimentalFlag(
+      name: 'nonfunction-type-aliases',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 13),
+      experimentEnabledVersion: const Version(2, 13),
+      experimentReleasedVersion: const Version(2, 13));
+
+  static const ExperimentalFlag setLiterals = const ExperimentalFlag(
+      name: 'set-literals',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 0),
+      experimentEnabledVersion: const Version(2, 0),
+      experimentReleasedVersion: const Version(2, 0));
+
+  static const ExperimentalFlag spreadCollections = const ExperimentalFlag(
+      name: 'spread-collections',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 0),
+      experimentEnabledVersion: const Version(2, 0),
+      experimentReleasedVersion: const Version(2, 0));
+
+  static const ExperimentalFlag superParameters = const ExperimentalFlag(
+      name: 'super-parameters',
+      isEnabledByDefault: true,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag testExperiment = const ExperimentalFlag(
+      name: 'test-experiment',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag tripleShift = const ExperimentalFlag(
+      name: 'triple-shift',
+      isEnabledByDefault: true,
+      isExpired: true,
+      enabledVersion: const Version(2, 14),
+      experimentEnabledVersion: const Version(2, 14),
+      experimentReleasedVersion: const Version(2, 14));
+
+  static const ExperimentalFlag valueClass = const ExperimentalFlag(
+      name: 'value-class',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
+
+  static const ExperimentalFlag variance = const ExperimentalFlag(
+      name: 'variance',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 17),
+      experimentEnabledVersion: const Version(2, 17),
+      experimentReleasedVersion: const Version(2, 17));
 }
 
-const Version enableAlternativeInvalidationStrategyVersion =
-    const Version(2, 17);
-const Version enableConstFunctionsVersion = const Version(2, 17);
-const Version enableConstantUpdate2018Version = const Version(2, 0);
-const Version enableConstructorTearoffsVersion = const Version(2, 15);
-const Version enableControlFlowCollectionsVersion = const Version(2, 0);
-const Version enableEnhancedEnumsVersion = const Version(2, 17);
-const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableExtensionTypesVersion = const Version(2, 17);
-const Version enableGenericMetadataVersion = const Version(2, 14);
-const Version enableMacrosVersion = const Version(2, 17);
-const Version enableNamedArgumentsAnywhereVersion = const Version(2, 17);
-const Version enableNonNullableVersion = const Version(2, 12);
-const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
-const Version enableSetLiteralsVersion = const Version(2, 0);
-const Version enableSpreadCollectionsVersion = const Version(2, 0);
-const Version enableSuperParametersVersion = const Version(2, 17);
-const Version enableTestExperimentVersion = const Version(2, 17);
-const Version enableTripleShiftVersion = const Version(2, 14);
-const Version enableValueClassVersion = const Version(2, 17);
-const Version enableVarianceVersion = const Version(2, 17);
+/// Interface for accessing the global state of experimental features.
+class GlobalFeatures {
+  final Map<ExperimentalFlag, bool> explicitExperimentalFlags;
+  final AllowedExperimentalFlags? allowedExperimentalFlags;
+  final Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting;
+  final Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting;
+  final Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting;
+
+  GlobalFeatures(this.explicitExperimentalFlags,
+      {this.allowedExperimentalFlags,
+      this.defaultExperimentFlagsForTesting,
+      this.experimentEnabledVersionForTesting,
+      this.experimentReleasedVersionForTesting});
+
+  GlobalFeature _computeGlobalFeature(ExperimentalFlag flag) {
+    return new GlobalFeature(
+        flag,
+        isExperimentEnabled(flag,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags));
+  }
+
+  LibraryFeature _computeLibraryFeature(
+      ExperimentalFlag flag, Uri canonicalUri, Version libraryVersion) {
+    return new LibraryFeature(
+        flag,
+        isExperimentEnabledInLibrary(flag, canonicalUri,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags),
+        getExperimentEnabledVersionInLibrary(
+            flag, canonicalUri, explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            experimentEnabledVersionForTesting:
+                experimentEnabledVersionForTesting,
+            experimentReleasedVersionForTesting:
+                experimentReleasedVersionForTesting),
+        isExperimentEnabledInLibraryByVersion(
+            flag, canonicalUri, libraryVersion,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags));
+  }
+
+  GlobalFeature? _alternativeInvalidationStrategy;
+  GlobalFeature get alternativeInvalidationStrategy =>
+      _alternativeInvalidationStrategy ??= _computeGlobalFeature(
+          ExperimentalFlag.alternativeInvalidationStrategy);
+
+  GlobalFeature? _constFunctions;
+  GlobalFeature get constFunctions => _constFunctions ??=
+      _computeGlobalFeature(ExperimentalFlag.constFunctions);
+
+  GlobalFeature? _constantUpdate2018;
+  GlobalFeature get constantUpdate2018 => _constantUpdate2018 ??=
+      _computeGlobalFeature(ExperimentalFlag.constantUpdate2018);
+
+  GlobalFeature? _constructorTearoffs;
+  GlobalFeature get constructorTearoffs => _constructorTearoffs ??=
+      _computeGlobalFeature(ExperimentalFlag.constructorTearoffs);
+
+  GlobalFeature? _controlFlowCollections;
+  GlobalFeature get controlFlowCollections => _controlFlowCollections ??=
+      _computeGlobalFeature(ExperimentalFlag.controlFlowCollections);
+
+  GlobalFeature? _enhancedEnums;
+  GlobalFeature get enhancedEnums =>
+      _enhancedEnums ??= _computeGlobalFeature(ExperimentalFlag.enhancedEnums);
+
+  GlobalFeature? _extensionMethods;
+  GlobalFeature get extensionMethods => _extensionMethods ??=
+      _computeGlobalFeature(ExperimentalFlag.extensionMethods);
+
+  GlobalFeature? _extensionTypes;
+  GlobalFeature get extensionTypes => _extensionTypes ??=
+      _computeGlobalFeature(ExperimentalFlag.extensionTypes);
+
+  GlobalFeature? _genericMetadata;
+  GlobalFeature get genericMetadata => _genericMetadata ??=
+      _computeGlobalFeature(ExperimentalFlag.genericMetadata);
+
+  GlobalFeature? _inferenceUpdate1;
+  GlobalFeature get inferenceUpdate1 => _inferenceUpdate1 ??=
+      _computeGlobalFeature(ExperimentalFlag.inferenceUpdate1);
+
+  GlobalFeature? _macros;
+  GlobalFeature get macros =>
+      _macros ??= _computeGlobalFeature(ExperimentalFlag.macros);
+
+  GlobalFeature? _namedArgumentsAnywhere;
+  GlobalFeature get namedArgumentsAnywhere => _namedArgumentsAnywhere ??=
+      _computeGlobalFeature(ExperimentalFlag.namedArgumentsAnywhere);
+
+  GlobalFeature? _nonNullable;
+  GlobalFeature get nonNullable =>
+      _nonNullable ??= _computeGlobalFeature(ExperimentalFlag.nonNullable);
+
+  GlobalFeature? _nonfunctionTypeAliases;
+  GlobalFeature get nonfunctionTypeAliases => _nonfunctionTypeAliases ??=
+      _computeGlobalFeature(ExperimentalFlag.nonfunctionTypeAliases);
+
+  GlobalFeature? _setLiterals;
+  GlobalFeature get setLiterals =>
+      _setLiterals ??= _computeGlobalFeature(ExperimentalFlag.setLiterals);
+
+  GlobalFeature? _spreadCollections;
+  GlobalFeature get spreadCollections => _spreadCollections ??=
+      _computeGlobalFeature(ExperimentalFlag.spreadCollections);
+
+  GlobalFeature? _superParameters;
+  GlobalFeature get superParameters => _superParameters ??=
+      _computeGlobalFeature(ExperimentalFlag.superParameters);
+
+  GlobalFeature? _testExperiment;
+  GlobalFeature get testExperiment => _testExperiment ??=
+      _computeGlobalFeature(ExperimentalFlag.testExperiment);
+
+  GlobalFeature? _tripleShift;
+  GlobalFeature get tripleShift =>
+      _tripleShift ??= _computeGlobalFeature(ExperimentalFlag.tripleShift);
+
+  GlobalFeature? _valueClass;
+  GlobalFeature get valueClass =>
+      _valueClass ??= _computeGlobalFeature(ExperimentalFlag.valueClass);
+
+  GlobalFeature? _variance;
+  GlobalFeature get variance =>
+      _variance ??= _computeGlobalFeature(ExperimentalFlag.variance);
+}
+
+/// Interface for accessing the state of experimental features within a
+/// specific library.
+class LibraryFeatures {
+  final GlobalFeatures globalFeatures;
+  final Uri canonicalUri;
+  final Version libraryVersion;
+
+  LibraryFeatures(this.globalFeatures, this.canonicalUri, this.libraryVersion);
+
+  LibraryFeature? _alternativeInvalidationStrategy;
+  LibraryFeature get alternativeInvalidationStrategy =>
+      _alternativeInvalidationStrategy ??=
+          globalFeatures._computeLibraryFeature(
+              ExperimentalFlag.alternativeInvalidationStrategy,
+              canonicalUri,
+              libraryVersion);
+
+  LibraryFeature? _constFunctions;
+  LibraryFeature get constFunctions =>
+      _constFunctions ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.constFunctions, canonicalUri, libraryVersion);
+
+  LibraryFeature? _constantUpdate2018;
+  LibraryFeature get constantUpdate2018 =>
+      _constantUpdate2018 ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.constantUpdate2018, canonicalUri, libraryVersion);
+
+  LibraryFeature? _constructorTearoffs;
+  LibraryFeature get constructorTearoffs =>
+      _constructorTearoffs ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.constructorTearoffs, canonicalUri, libraryVersion);
+
+  LibraryFeature? _controlFlowCollections;
+  LibraryFeature get controlFlowCollections =>
+      _controlFlowCollections ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.controlFlowCollections,
+          canonicalUri,
+          libraryVersion);
+
+  LibraryFeature? _enhancedEnums;
+  LibraryFeature get enhancedEnums =>
+      _enhancedEnums ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.enhancedEnums, canonicalUri, libraryVersion);
+
+  LibraryFeature? _extensionMethods;
+  LibraryFeature get extensionMethods =>
+      _extensionMethods ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.extensionMethods, canonicalUri, libraryVersion);
+
+  LibraryFeature? _extensionTypes;
+  LibraryFeature get extensionTypes =>
+      _extensionTypes ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.extensionTypes, canonicalUri, libraryVersion);
+
+  LibraryFeature? _genericMetadata;
+  LibraryFeature get genericMetadata =>
+      _genericMetadata ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.genericMetadata, canonicalUri, libraryVersion);
+
+  LibraryFeature? _inferenceUpdate1;
+  LibraryFeature get inferenceUpdate1 =>
+      _inferenceUpdate1 ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.inferenceUpdate1, canonicalUri, libraryVersion);
+
+  LibraryFeature? _macros;
+  LibraryFeature get macros =>
+      _macros ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.macros, canonicalUri, libraryVersion);
+
+  LibraryFeature? _namedArgumentsAnywhere;
+  LibraryFeature get namedArgumentsAnywhere =>
+      _namedArgumentsAnywhere ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.namedArgumentsAnywhere,
+          canonicalUri,
+          libraryVersion);
+
+  LibraryFeature? _nonNullable;
+  LibraryFeature get nonNullable =>
+      _nonNullable ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.nonNullable, canonicalUri, libraryVersion);
+
+  LibraryFeature? _nonfunctionTypeAliases;
+  LibraryFeature get nonfunctionTypeAliases =>
+      _nonfunctionTypeAliases ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.nonfunctionTypeAliases,
+          canonicalUri,
+          libraryVersion);
+
+  LibraryFeature? _setLiterals;
+  LibraryFeature get setLiterals =>
+      _setLiterals ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.setLiterals, canonicalUri, libraryVersion);
+
+  LibraryFeature? _spreadCollections;
+  LibraryFeature get spreadCollections =>
+      _spreadCollections ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.spreadCollections, canonicalUri, libraryVersion);
+
+  LibraryFeature? _superParameters;
+  LibraryFeature get superParameters =>
+      _superParameters ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.superParameters, canonicalUri, libraryVersion);
+
+  LibraryFeature? _testExperiment;
+  LibraryFeature get testExperiment =>
+      _testExperiment ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.testExperiment, canonicalUri, libraryVersion);
+
+  LibraryFeature? _tripleShift;
+  LibraryFeature get tripleShift =>
+      _tripleShift ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.tripleShift, canonicalUri, libraryVersion);
+
+  LibraryFeature? _valueClass;
+  LibraryFeature get valueClass =>
+      _valueClass ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.valueClass, canonicalUri, libraryVersion);
+
+  LibraryFeature? _variance;
+  LibraryFeature get variance =>
+      _variance ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.variance, canonicalUri, libraryVersion);
+}
 
 ExperimentalFlag? parseExperimentalFlag(String flag) {
   switch (flag) {
@@ -74,6 +495,8 @@
       return ExperimentalFlag.extensionTypes;
     case "generic-metadata":
       return ExperimentalFlag.genericMetadata;
+    case "inference-update-1":
+      return ExperimentalFlag.inferenceUpdate1;
     case "macros":
       return ExperimentalFlag.macros;
     case "named-arguments-anywhere":
@@ -100,98 +523,44 @@
   return null;
 }
 
-const Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
-  ExperimentalFlag.alternativeInvalidationStrategy: false,
-  ExperimentalFlag.constFunctions: false,
-  ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.constructorTearoffs: true,
-  ExperimentalFlag.controlFlowCollections: true,
-  ExperimentalFlag.enhancedEnums: true,
-  ExperimentalFlag.extensionMethods: true,
-  ExperimentalFlag.extensionTypes: false,
-  ExperimentalFlag.genericMetadata: true,
-  ExperimentalFlag.macros: false,
-  ExperimentalFlag.namedArgumentsAnywhere: true,
-  ExperimentalFlag.nonNullable: true,
-  ExperimentalFlag.nonfunctionTypeAliases: true,
-  ExperimentalFlag.setLiterals: true,
-  ExperimentalFlag.spreadCollections: true,
-  ExperimentalFlag.superParameters: true,
-  ExperimentalFlag.testExperiment: false,
-  ExperimentalFlag.tripleShift: true,
-  ExperimentalFlag.valueClass: false,
-  ExperimentalFlag.variance: false,
+final Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
+  ExperimentalFlag.alternativeInvalidationStrategy:
+      ExperimentalFlag.alternativeInvalidationStrategy.isEnabledByDefault,
+  ExperimentalFlag.constFunctions:
+      ExperimentalFlag.constFunctions.isEnabledByDefault,
+  ExperimentalFlag.constantUpdate2018:
+      ExperimentalFlag.constantUpdate2018.isEnabledByDefault,
+  ExperimentalFlag.constructorTearoffs:
+      ExperimentalFlag.constructorTearoffs.isEnabledByDefault,
+  ExperimentalFlag.controlFlowCollections:
+      ExperimentalFlag.controlFlowCollections.isEnabledByDefault,
+  ExperimentalFlag.enhancedEnums:
+      ExperimentalFlag.enhancedEnums.isEnabledByDefault,
+  ExperimentalFlag.extensionMethods:
+      ExperimentalFlag.extensionMethods.isEnabledByDefault,
+  ExperimentalFlag.extensionTypes:
+      ExperimentalFlag.extensionTypes.isEnabledByDefault,
+  ExperimentalFlag.genericMetadata:
+      ExperimentalFlag.genericMetadata.isEnabledByDefault,
+  ExperimentalFlag.inferenceUpdate1:
+      ExperimentalFlag.inferenceUpdate1.isEnabledByDefault,
+  ExperimentalFlag.macros: ExperimentalFlag.macros.isEnabledByDefault,
+  ExperimentalFlag.namedArgumentsAnywhere:
+      ExperimentalFlag.namedArgumentsAnywhere.isEnabledByDefault,
+  ExperimentalFlag.nonNullable: ExperimentalFlag.nonNullable.isEnabledByDefault,
+  ExperimentalFlag.nonfunctionTypeAliases:
+      ExperimentalFlag.nonfunctionTypeAliases.isEnabledByDefault,
+  ExperimentalFlag.setLiterals: ExperimentalFlag.setLiterals.isEnabledByDefault,
+  ExperimentalFlag.spreadCollections:
+      ExperimentalFlag.spreadCollections.isEnabledByDefault,
+  ExperimentalFlag.superParameters:
+      ExperimentalFlag.superParameters.isEnabledByDefault,
+  ExperimentalFlag.testExperiment:
+      ExperimentalFlag.testExperiment.isEnabledByDefault,
+  ExperimentalFlag.tripleShift: ExperimentalFlag.tripleShift.isEnabledByDefault,
+  ExperimentalFlag.valueClass: ExperimentalFlag.valueClass.isEnabledByDefault,
+  ExperimentalFlag.variance: ExperimentalFlag.variance.isEnabledByDefault,
 };
-
-const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
-  ExperimentalFlag.alternativeInvalidationStrategy: false,
-  ExperimentalFlag.constFunctions: false,
-  ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.constructorTearoffs: true,
-  ExperimentalFlag.controlFlowCollections: true,
-  ExperimentalFlag.enhancedEnums: false,
-  ExperimentalFlag.extensionMethods: true,
-  ExperimentalFlag.extensionTypes: false,
-  ExperimentalFlag.genericMetadata: true,
-  ExperimentalFlag.macros: false,
-  ExperimentalFlag.namedArgumentsAnywhere: false,
-  ExperimentalFlag.nonNullable: true,
-  ExperimentalFlag.nonfunctionTypeAliases: true,
-  ExperimentalFlag.setLiterals: true,
-  ExperimentalFlag.spreadCollections: true,
-  ExperimentalFlag.superParameters: false,
-  ExperimentalFlag.testExperiment: false,
-  ExperimentalFlag.tripleShift: true,
-  ExperimentalFlag.valueClass: false,
-  ExperimentalFlag.variance: false,
-};
-
-const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 17),
-  ExperimentalFlag.constFunctions: const Version(2, 17),
-  ExperimentalFlag.constantUpdate2018: const Version(2, 0),
-  ExperimentalFlag.constructorTearoffs: const Version(2, 15),
-  ExperimentalFlag.controlFlowCollections: const Version(2, 0),
-  ExperimentalFlag.enhancedEnums: const Version(2, 17),
-  ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.extensionTypes: const Version(2, 17),
-  ExperimentalFlag.genericMetadata: const Version(2, 14),
-  ExperimentalFlag.macros: const Version(2, 17),
-  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
-  ExperimentalFlag.nonNullable: const Version(2, 12),
-  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
-  ExperimentalFlag.setLiterals: const Version(2, 0),
-  ExperimentalFlag.spreadCollections: const Version(2, 0),
-  ExperimentalFlag.superParameters: const Version(2, 17),
-  ExperimentalFlag.testExperiment: const Version(2, 17),
-  ExperimentalFlag.tripleShift: const Version(2, 14),
-  ExperimentalFlag.valueClass: const Version(2, 17),
-  ExperimentalFlag.variance: const Version(2, 17),
-};
-
-const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
-  ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 17),
-  ExperimentalFlag.constFunctions: const Version(2, 17),
-  ExperimentalFlag.constantUpdate2018: const Version(2, 0),
-  ExperimentalFlag.constructorTearoffs: const Version(2, 15),
-  ExperimentalFlag.controlFlowCollections: const Version(2, 0),
-  ExperimentalFlag.enhancedEnums: const Version(2, 17),
-  ExperimentalFlag.extensionMethods: const Version(2, 6),
-  ExperimentalFlag.extensionTypes: const Version(2, 17),
-  ExperimentalFlag.genericMetadata: const Version(2, 14),
-  ExperimentalFlag.macros: const Version(2, 17),
-  ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
-  ExperimentalFlag.nonNullable: const Version(2, 10),
-  ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
-  ExperimentalFlag.setLiterals: const Version(2, 0),
-  ExperimentalFlag.spreadCollections: const Version(2, 0),
-  ExperimentalFlag.superParameters: const Version(2, 17),
-  ExperimentalFlag.testExperiment: const Version(2, 17),
-  ExperimentalFlag.tripleShift: const Version(2, 14),
-  ExperimentalFlag.valueClass: const Version(2, 17),
-  ExperimentalFlag.variance: const Version(2, 17),
-};
-
 const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
     const AllowedExperimentalFlags(
         sdkDefaultExperiments: {},
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index 74fd203..014908f 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -172,7 +172,9 @@
     bool verbose,
     FileSystem fileSystem,
     DiagnosticMessageHandler onDiagnostic,
-    Uri input) async {
+    List<Uri> inputs,
+    bool isModularCompile) async {
+  assert(inputs.length == 1 || isModularCompile);
   CompilerOptions options = state.options;
   options
     ..onDiagnostic = onDiagnostic
@@ -181,7 +183,7 @@
 
   ProcessedOptions processedOpts = state.processedOpts;
   processedOpts.inputs.clear();
-  processedOpts.inputs.add(input);
+  processedOpts.inputs.addAll(inputs);
   processedOpts.clearFileSystemCache();
 
   CompilerResult? compilerResult = await CompilerContext.runWithOptions(
@@ -189,9 +191,10 @@
     CompilerResult compilerResult = await generateKernelInternal();
     Component? component = compilerResult.component;
     if (component == null) return null;
-    if (component.mainMethod == null) {
+    if (component.mainMethod == null && !isModularCompile) {
       context.options.report(
-          messageMissingMain.withLocation(input, -1, 0), Severity.error);
+          messageMissingMain.withLocation(inputs.single, -1, 0),
+          Severity.error);
       return null;
     }
     return compilerResult;
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index 9190ebc..d7402a7 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -68,6 +68,9 @@
         messageFfiPackedAnnotationAlignment,
         messageNonPositiveArrayDimensions,
         noLength,
+        templateCantHaveNamedParameters,
+        templateCantHaveOptionalParameters,
+        templateFfiCompoundImplementsFinalizable,
         templateFfiDartTypeMismatch,
         templateFfiEmptyStruct,
         templateFfiExpectedConstantArg,
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index a91d6cb..959eb38 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -70,7 +70,6 @@
         templateSdkSpecificationNotFound,
         templateSdkSummaryNotFound;
 
-import '../fasta/kernel/macro.dart';
 import '../fasta/messages.dart' show getLocation;
 
 import '../fasta/problems.dart' show DebugAbort, unimplemented;
@@ -365,35 +364,8 @@
   Target get target =>
       _target ??= _raw.target ?? new NoneTarget(new TargetFlags());
 
-  /// Returns `true` if the [flag] is enabled globally by default.
-  bool isExperimentEnabledByDefault(flags.ExperimentalFlag flag) {
-    return flags.isExperimentEnabled(flag,
-        defaultExperimentFlagsForTesting:
-            _raw.defaultExperimentFlagsForTesting);
-  }
-
-  /// Returns `true` if the [flag] is enabled globally.
-  ///
-  /// This is `true` either if the [flag] is passed through an explicit
-  /// `--enable-experiment` option or if the [flag] is expired and on by
-  /// default.
-  bool isExperimentEnabledGlobally(flags.ExperimentalFlag flag) {
-    return flags.isExperimentEnabled(flag,
-        explicitExperimentalFlags: _raw.explicitExperimentalFlags,
-        defaultExperimentFlagsForTesting:
-            _raw.defaultExperimentFlagsForTesting);
-  }
-
-  /// Returns `true` if the experiment with the given [flag] is enabled either
-  /// explicitly or implicitly for the library with the given [importUri].
-  ///
-  /// Note that the library can still opt out of the experiment by having a
-  /// lower language version than required for the experiment. See
-  /// [getExperimentEnabledVersionInLibrary].
-  bool isExperimentEnabledInLibrary(
-      flags.ExperimentalFlag flag, Uri importUri) {
-    return _raw.isExperimentEnabledInLibrary(flag, importUri);
-  }
+  /// Returns the global state of the experimental features.
+  flags.GlobalFeatures get globalFeatures => _raw.globalFeatures;
 
   /// Returns the minimum language version needed for a library with the given
   /// [importUri] to opt in to the experiment with the given [flag].
@@ -858,7 +830,7 @@
   Future<MacroExecutor> Function() get macroExecutorProvider =>
       _raw.macroExecutorProvider;
 
-  Map<MacroClass, Uri> get precompiledMacroUris =>
+  Map<Uri, Uri> get precompiledMacroUris =>
       _raw.precompiledMacroUris ?? const {};
 
   CompilerOptions get rawOptionsForTesting => _raw;
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index fd50ae4..4ecde96 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -197,7 +197,7 @@
       String name, int charOffset, Uri fileUri, LibraryBuilder accessingLibrary,
       {bool isSetter: false}) {
     if (accessingLibrary.nameOriginBuilder.origin !=
-            library.nameOriginBuilder.origin &&
+            libraryBuilder.nameOriginBuilder.origin &&
         name.startsWith("_")) {
       return null;
     }
@@ -216,7 +216,7 @@
   MemberBuilder? findConstructorOrFactory(
       String name, int charOffset, Uri uri, LibraryBuilder accessingLibrary) {
     if (accessingLibrary.nameOriginBuilder.origin !=
-            library.nameOriginBuilder.origin &&
+            libraryBuilder.nameOriginBuilder.origin &&
         name.startsWith("_")) {
       return null;
     }
@@ -270,8 +270,8 @@
 
   @override
   InterfaceType get thisType {
-    return _thisType ??= new InterfaceType(cls, library.nonNullable,
-        getAsTypeArguments(cls.typeParameters, library.library));
+    return _thisType ??= new InterfaceType(cls, libraryBuilder.nonNullable,
+        getAsTypeArguments(cls.typeParameters, libraryBuilder.library));
   }
 
   @override
@@ -406,7 +406,7 @@
         : hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
     if (isSuper && target == null) {
       if (cls.isMixinDeclaration ||
-          (library.loader.target.backendTarget.enableSuperMixins &&
+          (libraryBuilder.loader.target.backendTarget.enableSuperMixins &&
               this.isAbstract)) {
         target =
             hierarchy.getInterfaceMember(instanceClass, name, setter: isSetter);
diff --git a/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart
index 4a09bd96..a58e4a1 100644
--- a/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart
@@ -15,7 +15,7 @@
 abstract class DeclarationBuilder implements TypeDeclarationBuilder {
   Scope get scope;
 
-  LibraryBuilder get library;
+  LibraryBuilder get libraryBuilder;
 
   /// Lookup a member accessed statically through this declaration.
   Builder? findStaticBuilder(
@@ -54,7 +54,7 @@
         super(metadata, modifiers, name, parent, charOffset);
 
   @override
-  LibraryBuilder get library {
+  LibraryBuilder get libraryBuilder {
     LibraryBuilder library = parent as LibraryBuilder;
     return library.partOfLibrary ?? library;
   }
@@ -62,7 +62,7 @@
   @override
   void addProblem(Message message, int charOffset, int length,
       {bool wasHandled: false, List<LocatedMessage>? context}) {
-    library.addProblem(message, charOffset, length, fileUri,
+    libraryBuilder.addProblem(message, charOffset, length, fileUri,
         wasHandled: wasHandled, context: context);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index 95e42ab..f0deb80 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -3,16 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/class_hierarchy.dart';
 
 import '../fasta_codes.dart'
     show templateInternalProblemNotFoundIn, templateTypeArgumentMismatch;
-import '../kernel/kernel_helper.dart';
+import '../problems.dart';
 import '../scope.dart';
 import '../source/source_library_builder.dart';
-import '../problems.dart';
-import '../util/helpers.dart';
-
 import 'builder.dart';
 import 'declaration_builder.dart';
 import 'field_builder.dart';
@@ -35,12 +31,6 @@
   /// Return the [Extension] built by this builder.
   Extension get extension;
 
-  void buildOutlineExpressions(
-      SourceLibraryBuilder library,
-      ClassHierarchy classHierarchy,
-      List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes);
-
   /// Looks up extension member by [name] taking privacy into account.
   ///
   /// If [setter] is `true` the sought member is a setter or assignable field.
@@ -70,7 +60,7 @@
       String name, int charOffset, Uri fileUri, LibraryBuilder accessingLibrary,
       {bool isSetter: false}) {
     if (accessingLibrary.nameOriginBuilder.origin !=
-            library.nameOriginBuilder.origin &&
+            libraryBuilder.nameOriginBuilder.origin &&
         name.startsWith("_")) {
       return null;
     }
@@ -85,7 +75,7 @@
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments) {
     if (library is SourceLibraryBuilder &&
-        library.enableExtensionTypesInLibrary) {
+        library.libraryFeatures.extensionTypes.isEnabled) {
       return buildTypeWithBuiltArguments(
           library,
           nullabilityBuilder.build(library),
@@ -100,7 +90,7 @@
   DartType buildTypeWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments) {
     if (library is SourceLibraryBuilder &&
-        library.enableExtensionTypesInLibrary) {
+        library.libraryFeatures.extensionTypes.isEnabled) {
       return new ExtensionType(extension, nullability, arguments);
     } else {
       throw new UnsupportedError(
@@ -187,7 +177,7 @@
       }
     }
     if (builder != null) {
-      if (name.isPrivate && library.library != name.library) {
+      if (name.isPrivate && libraryBuilder.library != name.library) {
         builder = null;
       } else if (builder is FieldBuilder &&
           !builder.isStatic &&
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/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index d35c1bf..a054ace 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -5,12 +5,7 @@
 library fasta.formal_parameter_builder;
 
 import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart'
-    show
-        isMandatoryFormalParameterKind,
-        isOptionalNamedFormalParameterKind,
-        isOptionalPositionalFormalParameterKind;
-import 'package:_fe_analyzer_shared/src/parser/parser.dart'
-    show FormalParameterKind;
+    show FormalParameterKind, FormalParameterKindExtension;
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 import 'package:kernel/ast.dart'
     show DartType, DynamicType, Expression, VariableDeclaration;
@@ -35,18 +30,42 @@
 import 'type_builder.dart';
 import 'variable_builder.dart';
 
+abstract class ParameterBuilder {
+  /// List of metadata builders for the metadata declared on this parameter.
+  List<MetadataBuilder>? get metadata;
+  TypeBuilder? get type;
+
+  /// The kind of this parameter, i.e. if it's required, positional optional,
+  /// or named optional.
+  FormalParameterKind get kind;
+
+  bool get isPositional;
+  bool get isRequiredPositional;
+  bool get isNamed;
+  bool get isRequiredNamed;
+
+  String? get name;
+
+  ParameterBuilder clone(
+      List<NamedTypeBuilder> newTypes,
+      SourceLibraryBuilder contextLibrary,
+      TypeParameterScopeBuilder contextDeclaration);
+}
+
 /// A builder for a formal parameter, i.e. a parameter on a method or
 /// constructor.
 class FormalParameterBuilder extends ModifierBuilderImpl
-    implements VariableBuilder {
+    implements VariableBuilder, ParameterBuilder {
   static const String noNameSentinel = 'no name sentinel';
 
   /// List of metadata builders for the metadata declared on this parameter.
+  @override
   final List<MetadataBuilder>? metadata;
 
   @override
   final int modifiers;
 
+  @override
   final TypeBuilder? type;
 
   @override
@@ -55,9 +74,8 @@
   @override
   final Uri? fileUri;
 
-  /// The kind of this parameter, i.e. if it's required, positional optional,
-  /// or named optional.
-  FormalParameterKind kind = FormalParameterKind.mandatory;
+  @override
+  final FormalParameterKind kind;
 
   /// The variable declaration created for this formal parameter.
   @override
@@ -76,8 +94,8 @@
 
   final bool isExtensionThis;
 
-  FormalParameterBuilder(this.metadata, this.modifiers, this.type, this.name,
-      LibraryBuilder? compilationUnit, int charOffset,
+  FormalParameterBuilder(this.metadata, this.kind, this.modifiers, this.type,
+      this.name, LibraryBuilder? compilationUnit, int charOffset,
       {Uri? fileUri, this.isExtensionThis: false})
       : this.fileUri = fileUri ?? compilationUnit?.fileUri,
         super(compilationUnit, charOffset);
@@ -85,21 +103,23 @@
   @override
   String get debugName => "FormalParameterBuilder";
 
-  // TODO(johnniwinther): Cleanup `isRequired` semantics in face of required
-  // named parameters.
-  bool get isRequired => isMandatoryFormalParameterKind(kind);
+  @override
+  bool get isRequiredPositional => kind.isRequiredPositional;
 
-  // TODO(johnniwinther): Rename to `isRequired`.
-  bool get isNamedRequired => (modifiers & requiredMask) != 0;
+  // TODO(johnniwinther): This was previously named `isOptional` so we might
+  // have some uses that intended to use the now existing `isOptional` method.
+  bool get isOptionalPositional => !isRequiredPositional;
 
-  bool get isPositional {
-    return isOptionalPositionalFormalParameterKind(kind) ||
-        isMandatoryFormalParameterKind(kind);
-  }
+  @override
+  bool get isRequiredNamed => kind.isRequiredNamed;
 
-  bool get isNamed => isOptionalNamedFormalParameterKind(kind);
+  @override
+  bool get isPositional => kind.isPositional;
 
-  bool get isOptional => !isRequired;
+  @override
+  bool get isNamed => kind.isNamed;
+
+  bool get isOptional => kind.isOptional;
 
   @override
   bool get isLocal => true;
@@ -137,7 +157,7 @@
           isConst: false,
           isInitializingFormal: isInitializingFormal,
           isCovariantByDeclaration: isCovariantByDeclaration,
-          isRequired: isNamedRequired,
+          isRequired: isRequiredNamed,
           hasDeclaredInitializer: hasDeclaredInitializer,
           isLowered: isExtensionThis)
         ..fileOffset = charOffset;
@@ -145,22 +165,15 @@
     return variable!;
   }
 
-  FormalParameterBuilder clone(
+  @override
+  ParameterBuilder clone(
       List<NamedTypeBuilder> newTypes,
       SourceLibraryBuilder contextLibrary,
       TypeParameterScopeBuilder contextDeclaration) {
     // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
     // how it should be cloned.  Consider cloning it instead of reusing it.
-    return new FormalParameterBuilder(
-        metadata,
-        modifiers,
-        type?.clone(newTypes, contextLibrary, contextDeclaration),
-        name,
-        parent as LibraryBuilder?,
-        charOffset,
-        fileUri: fileUri,
-        isExtensionThis: isExtensionThis)
-      ..kind = kind;
+    return new FunctionTypeParameterBuilder(metadata, kind,
+        type?.clone(newTypes, contextLibrary, contextDeclaration), name);
   }
 
   FormalParameterBuilder forFormalParameterInitializerScope() {
@@ -169,6 +182,7 @@
     if (isInitializingFormal) {
       return new FormalParameterBuilder(
           metadata,
+          kind,
           modifiers | finalMask | initializingFormalMask,
           type,
           name,
@@ -181,6 +195,7 @@
     } else if (isSuperInitializingFormal) {
       return new FormalParameterBuilder(
           metadata,
+          kind,
           modifiers | finalMask | superInitializingFormalMask,
           type,
           name,
@@ -249,3 +264,42 @@
     initializerToken = null;
   }
 }
+
+class FunctionTypeParameterBuilder implements ParameterBuilder {
+  @override
+  final List<MetadataBuilder>? metadata;
+
+  @override
+  final FormalParameterKind kind;
+
+  @override
+  final TypeBuilder? type;
+
+  @override
+  final String? name;
+
+  FunctionTypeParameterBuilder(this.metadata, this.kind, this.type, this.name);
+
+  @override
+  ParameterBuilder clone(
+      List<NamedTypeBuilder> newTypes,
+      SourceLibraryBuilder contextLibrary,
+      TypeParameterScopeBuilder contextDeclaration) {
+    // TODO(dmitryas):  It's not clear how [metadata] is used currently, and
+    // how it should be cloned.  Consider cloning it instead of reusing it.
+    return new FunctionTypeParameterBuilder(metadata, kind,
+        type?.clone(newTypes, contextLibrary, contextDeclaration), name);
+  }
+
+  @override
+  bool get isNamed => kind.isNamed;
+
+  @override
+  bool get isRequiredNamed => kind.isRequiredNamed;
+
+  @override
+  bool get isPositional => kind.isPositional;
+
+  @override
+  bool get isRequiredPositional => kind.isRequiredPositional;
+}
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..f972a4d0 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;
 
@@ -28,7 +27,7 @@
 class FunctionTypeBuilder extends TypeBuilder {
   final TypeBuilder? returnType;
   final List<TypeVariableBuilder>? typeVariables;
-  final List<FormalParameterBuilder>? formals;
+  final List<ParameterBuilder>? formals;
   @override
   final NullabilityBuilder nullabilityBuilder;
   @override
@@ -36,6 +35,8 @@
   @override
   final int charOffset;
 
+  FunctionType? _type;
+
   FunctionTypeBuilder(this.returnType, this.typeVariables, this.formals,
       this.nullabilityBuilder, this.fileUri, this.charOffset);
 
@@ -66,13 +67,13 @@
     buffer.write("(");
     if (formals != null) {
       bool isFirst = true;
-      for (FormalParameterBuilder t in formals!) {
+      for (ParameterBuilder t in formals!) {
         if (!isFirst) {
           buffer.write(", ");
         } else {
           isFirst = false;
         }
-        buffer.write(t.fullNameForErrors);
+        buffer.write(t.name);
       }
     }
     buffer.write(") ->");
@@ -83,22 +84,26 @@
   }
 
   @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>[];
     List<NamedType>? namedParameters;
     int requiredParameterCount = 0;
     if (formals != null) {
-      for (FormalParameterBuilder formal in formals!) {
+      for (ParameterBuilder formal in formals!) {
         DartType type = formal.type?.build(library) ?? const DynamicType();
         if (formal.isPositional) {
           positionalParameters.add(type);
-          if (formal.isRequired) requiredParameterCount++;
+          if (formal.isRequiredPositional) requiredParameterCount++;
         } else if (formal.isNamed) {
           namedParameters ??= <NamedType>[];
-          namedParameters.add(new NamedType(formal.name, type,
-              isRequired: formal.isNamedRequired));
+          namedParameters.add(new NamedType(formal.name!, type,
+              isRequired: formal.isRequiredNamed));
         }
       }
       if (namedParameters != null) {
@@ -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,14 +145,15 @@
       TypeParameterScopeBuilder contextDeclaration) {
     List<TypeVariableBuilder>? clonedTypeVariables;
     if (typeVariables != null) {
-      clonedTypeVariables =
-          contextLibrary.copyTypeVariables(typeVariables!, contextDeclaration);
+      clonedTypeVariables = contextLibrary.copyTypeVariables(
+          typeVariables!, contextDeclaration,
+          kind: TypeVariableKind.function);
     }
-    List<FormalParameterBuilder>? clonedFormals;
+    List<ParameterBuilder>? clonedFormals;
     if (formals != null) {
       clonedFormals =
-          new List<FormalParameterBuilder>.generate(formals!.length, (int i) {
-        FormalParameterBuilder formal = formals![i];
+          new List<ParameterBuilder>.generate(formals!.length, (int i) {
+        ParameterBuilder formal = formals![i];
         return formal.clone(newTypes, contextLibrary, contextDeclaration);
       }, growable: false);
     }
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 9b9e14b..7711727 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -23,7 +23,7 @@
 
   void set parent(Builder? value);
 
-  LibraryBuilder get library;
+  LibraryBuilder get libraryBuilder;
 
   /// The [Member] built by this builder;
   Member get member;
@@ -108,16 +108,16 @@
       parent is ClassBuilder ? parent as ClassBuilder : null;
 
   @override
-  LibraryBuilder get library {
+  LibraryBuilder get libraryBuilder {
     if (parent is LibraryBuilder) {
       LibraryBuilder library = parent as LibraryBuilder;
       return library.partOfLibrary ?? library;
     } else if (parent is ExtensionBuilder) {
       ExtensionBuilder extension = parent as ExtensionBuilder;
-      return extension.library;
+      return extension.libraryBuilder;
     } else {
       ClassBuilder cls = parent as ClassBuilder;
-      return cls.library;
+      return cls.libraryBuilder;
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
index f6d7e56..b4edd0a 100644
--- a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart
@@ -4,90 +4,15 @@
 
 library fasta.mixin_application_builder;
 
-import 'package:kernel/ast.dart' show InterfaceType, Supertype, TypedefType;
-
-import '../problems.dart' show unsupported;
-import '../source/source_library_builder.dart';
-
-import 'library_builder.dart';
-import 'named_type_builder.dart';
-import 'nullability_builder.dart';
 import 'type_builder.dart';
 import 'type_variable_builder.dart';
 
-class MixinApplicationBuilder extends TypeBuilder {
-  final TypeBuilder? supertype;
+class MixinApplicationBuilder {
   final List<TypeBuilder> mixins;
-  @override
   final Uri fileUri;
-  @override
   final int charOffset;
-  Supertype? builtType;
 
   List<TypeVariableBuilder>? typeVariables;
 
-  MixinApplicationBuilder(
-      this.supertype, this.mixins, this.fileUri, this.charOffset);
-
-  @override
-  String? get name => null;
-
-  @override
-  NullabilityBuilder get nullabilityBuilder {
-    return unsupported("nullabilityBuilder", -1, null);
-  }
-
-  @override
-  String get debugName => "MixinApplicationBuilder";
-
-  @override
-  bool get isVoidType => false;
-
-  @override
-  StringBuffer printOn(StringBuffer buffer) {
-    buffer.write(supertype);
-    buffer.write(" with ");
-    bool first = true;
-    for (TypeBuilder t in mixins) {
-      if (!first) buffer.write(", ");
-      first = false;
-      t.printOn(buffer);
-    }
-    return buffer;
-  }
-
-  @override
-  InterfaceType build(LibraryBuilder library, {TypedefType? origin}) {
-    int charOffset = -1; // TODO(ahe): Provide these.
-    Uri? fileUri = null; // TODO(ahe): Provide these.
-    return unsupported("build", charOffset, fileUri);
-  }
-
-  @override
-  Supertype buildSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
-    return unsupported("buildSupertype", charOffset, fileUri);
-  }
-
-  @override
-  Supertype buildMixedInType(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
-    return unsupported("buildMixedInType", charOffset, fileUri);
-  }
-
-  @override
-  MixinApplicationBuilder withNullabilityBuilder(
-      NullabilityBuilder nullabilityBuilder) {
-    return unsupported("withNullabilityBuilder", -1, null);
-  }
-
-  @override
-  MixinApplicationBuilder clone(
-      List<NamedTypeBuilder> newTypes,
-      SourceLibraryBuilder contextLibrary,
-      TypeParameterScopeBuilder contextDeclaration) {
-    int charOffset = -1; // TODO(dmitryas): Provide these.
-    Uri? fileUri = null; // TODO(dmitryas): Provide these.
-    return unsupported("clone", charOffset, fileUri);
-  }
+  MixinApplicationBuilder(this.mixins, this.fileUri, this.charOffset);
 }
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..1c68cb6 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
@@ -16,7 +16,6 @@
         messageTypeVariableInStaticContext,
         messageTypedefCause,
         noLength,
-        templateExperimentNotEnabled,
         templateExtendingRestricted,
         templateNotAType,
         templateSupertypeIsIllegal,
@@ -107,30 +106,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 +184,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 +208,107 @@
     } 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',
-          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));
+        !library.libraryFeatures.extensionTypes.isEnabled) {
+      int typeNameLength = nameLength;
+      int typeNameOffset = nameOffset;
+      Message message = library.reportFeatureNotEnabled(
+          library.libraryFeatures.extensionTypes,
+          fileUri!,
+          typeNameOffset,
+          typeNameLength);
+      _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_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 14a2b41c..ad7bceb 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -42,7 +42,7 @@
   @override
   LibraryBuilder get parent;
 
-  LibraryBuilder get library;
+  LibraryBuilder get libraryBuilder;
 
   @override
   Uri get fileUri;
@@ -149,7 +149,7 @@
   LibraryBuilder get parent => super.parent as LibraryBuilder;
 
   @override
-  LibraryBuilder get library => super.parent as LibraryBuilder;
+  LibraryBuilder get libraryBuilder => super.parent as LibraryBuilder;
 
   /// [arguments] have already been built.
   @override
@@ -280,7 +280,7 @@
       }
       if (builders.contains(current)) {
         // Cyclic type alias.
-        currentAliasBuilder.library.addProblem(
+        currentAliasBuilder.libraryBuilder.addProblem(
             templateCyclicTypedef.withArguments(this.name),
             charOffset,
             noLength,
@@ -303,7 +303,7 @@
             if (typeVariables != null)
               for (TypeVariableBuilder typeVariable in typeVariables!)
                 new NamedTypeBuilder.fromTypeDeclarationBuilder(
-                    typeVariable, library.nonNullableBuilder,
+                    typeVariable, libraryBuilder.nonNullableBuilder,
                     arguments: const [],
                     fileUri: fileUri,
                     charOffset: charOffset,
@@ -320,7 +320,7 @@
             }
           }
           if (found) {
-            library.addProblem(
+            libraryBuilder.addProblem(
                 messageTypedefTypeVariableNotConstructor,
                 usedAsClassCharOffset ?? TreeNode.noOffset,
                 noLength,
@@ -383,7 +383,7 @@
         if ((currentAliasBuilder.typeVariables?.length ?? 0) !=
             currentTypeArguments.length) {
           if (previousAliasBuilder != null) {
-            previousAliasBuilder.library.addProblem(
+            previousAliasBuilder.libraryBuilder.addProblem(
                 templateTypeArgumentMismatch.withArguments(
                     currentAliasBuilder.typeVariables?.length ?? 0),
                 previousAliasBuilder.charOffset,
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_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 625151e..66976b6 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -53,7 +53,8 @@
   DillClassBuilder get origin => this;
 
   @override
-  DillLibraryBuilder get library => super.library as DillLibraryBuilder;
+  DillLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as DillLibraryBuilder;
 
   @override
   bool get isMacro => cls.isMacro;
@@ -66,7 +67,7 @@
     List<TypeVariableBuilder>? typeVariables = super.typeVariables;
     if (typeVariables == null && cls.typeParameters.isNotEmpty) {
       typeVariables = super.typeVariables =
-          computeTypeVariableBuilders(library, cls.typeParameters);
+          computeTypeVariableBuilders(libraryBuilder, cls.typeParameters);
     }
     return typeVariables;
   }
@@ -81,7 +82,7 @@
       Supertype? targetSupertype = cls.supertype;
       if (targetSupertype == null) return null;
       super.supertypeBuilder =
-          supertype = computeTypeBuilder(library, targetSupertype);
+          supertype = computeTypeBuilder(libraryBuilder, targetSupertype);
     }
     return supertype;
   }
@@ -160,7 +161,7 @@
 
   @override
   TypeBuilder? get mixedInTypeBuilder {
-    return computeTypeBuilder(library, cls.mixedInType);
+    return computeTypeBuilder(libraryBuilder, cls.mixedInType);
   }
 
   @override
@@ -174,7 +175,8 @@
     if (super.interfaceBuilders == null) {
       List<TypeBuilder> result = new List<TypeBuilder>.generate(
           cls.implementedTypes.length,
-          (int i) => computeTypeBuilder(library, cls.implementedTypes[i])!,
+          (int i) =>
+              computeTypeBuilder(libraryBuilder, cls.implementedTypes[i])!,
           growable: false);
       super.interfaceBuilders = result;
     }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
index 5659abd..4307510 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_extension_builder.dart
@@ -3,20 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/class_hierarchy.dart';
 
 import '../builder/extension_builder.dart';
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_variable_builder.dart';
-
-import '../kernel/kernel_helper.dart';
-
 import '../scope.dart';
-
-import '../util/helpers.dart';
-
 import 'dill_class_builder.dart';
 import 'dill_extension_member_builder.dart';
 
@@ -101,22 +94,14 @@
   List<TypeVariableBuilder>? get typeParameters {
     if (_typeParameters == null && extension.typeParameters.isNotEmpty) {
       _typeParameters =
-          computeTypeVariableBuilders(library, extension.typeParameters);
+          computeTypeVariableBuilders(libraryBuilder, extension.typeParameters);
     }
     return _typeParameters;
   }
 
   @override
   TypeBuilder get onType {
-    return _onType ??= library.loader.computeTypeBuilder(extension.onType);
-  }
-
-  @override
-  void buildOutlineExpressions(
-      LibraryBuilder library,
-      ClassHierarchy classHierarchy,
-      List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    // TODO(johnniwinther): Remove the need for this.
+    return _onType ??=
+        libraryBuilder.loader.computeTypeBuilder(extension.onType);
   }
 }
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/dill/dill_target.dart b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
index 1a0b447..f5972b5 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -91,7 +91,7 @@
       benchmarker?.enterPhase(BenchmarkPhases.dill_finalizeExports);
       loader.finalizeExports(
           suppressFinalizationErrors: suppressFinalizationErrors);
-      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+      benchmarker?.enterPhase(BenchmarkPhases.unknownDillTarget);
     }
     isLoaded = true;
   }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
index 65a7fb6..e777b52 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_type_alias_builder.dart
@@ -42,7 +42,7 @@
   List<TypeVariableBuilder>? get typeVariables {
     if (_typeVariables == null && typedef.typeParameters.isNotEmpty) {
       _typeVariables =
-          computeTypeVariableBuilders(library, typedef.typeParameters);
+          computeTypeVariableBuilders(libraryBuilder, typedef.typeParameters);
     }
     return _typeVariables;
   }
@@ -61,7 +61,7 @@
   @override
   TypeBuilder? get type {
     if (_type == null && typedef.type is! InvalidType) {
-      _type = library.loader.computeTypeBuilder(typedef.type!);
+      _type = libraryBuilder.loader.computeTypeBuilder(typedef.type!);
     }
     // TODO(johnniwinther): Support TypeBuilder for InvalidType.
     return _type;
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index e876c78..410e9b1 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -6,9 +6,14 @@
 
 import 'dart:async' show Completer;
 
+import 'dart:convert' show JsonEncoder;
+
 import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
     show ScannerConfiguration;
 
+import 'package:front_end/src/fasta/kernel/benchmarker.dart'
+    show BenchmarkPhases, Benchmarker;
+
 import 'package:kernel/binary/ast_from_binary.dart'
     show
         BinaryBuilderWithMetadata,
@@ -55,7 +60,7 @@
 
 import 'package:package_config/package_config.dart' show Package, PackageConfig;
 
-import '../api_prototype/experimental_flags.dart';
+import '../api_prototype/compiler_options.dart' show CompilerOptions;
 
 import '../api_prototype/file_system.dart' show FileSystem, FileSystemEntity;
 
@@ -71,6 +76,10 @@
 
 import '../base/nnbd_mode.dart';
 
+import '../base/processed_options.dart' show ProcessedOptions;
+
+import '../kernel_generator_impl.dart' show precompileMacros;
+
 import 'builder/builder.dart' show Builder;
 
 import 'builder/class_builder.dart' show ClassBuilder;
@@ -85,6 +94,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;
@@ -110,13 +121,16 @@
 
 import 'incremental_serializer.dart' show IncrementalSerializer;
 
+import 'kernel/macro/macro.dart' show enableMacros, NeededPrecompilations;
+
 import 'scope.dart' show Scope;
 
 import 'source/source_class_builder.dart' show SourceClassBuilder;
 
 import 'util/error_reporter_file_copier.dart' show saveAsGzip;
 
-import 'util/experiment_environment_getter.dart' show getExperimentEnvironment;
+import 'util/experiment_environment_getter.dart'
+    show enableIncrementalCompilerBenchmarking, getExperimentEnvironment;
 
 import 'util/textual_outline.dart' show textualOutline;
 
@@ -166,6 +180,10 @@
   final IncrementalSerializer? _incrementalSerializer;
   final _ComponentProblems _componentProblems = new _ComponentProblems();
 
+  // This will be set if the right environment variable is set
+  // (enableIncrementalCompilerBenchmarking).
+  Benchmarker? _benchmarker;
+
   RecorderForTesting? get recorderForTesting => null;
 
   static final Uri debugExprUri =
@@ -239,7 +257,9 @@
   void _enableExperimentsBasedOnEnvironment({Set<String>? enabledExperiments}) {
     // Note that these are all experimental. Use at your own risk.
     enabledExperiments ??= getExperimentEnvironment();
-    // Currently there's no live experiments.
+    if (enabledExperiments.contains(enableIncrementalCompilerBenchmarking)) {
+      _benchmarker = new Benchmarker();
+    }
   }
 
   @override
@@ -268,13 +288,17 @@
       }
       _computeDeltaRunOnce = true;
       IncrementalKernelTarget? lastGoodKernelTarget = _lastGoodKernelTarget;
+      _benchmarker?.reset();
 
       // Initial setup: Load platform, initialize from dill or component etc.
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_setupPackages);
       UriTranslator uriTranslator = await _setupPackagesAndUriTranslator(c);
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_ensurePlatform);
       IncrementalCompilerData data =
           await _ensurePlatformAndInitialize(uriTranslator, c);
 
       // Figure out what to keep and what to throw away.
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_invalidate);
       Set<Uri?> invalidatedUris = this._invalidatedUris.toSet();
       _invalidateNotKeptUserBuilders(invalidatedUris);
       ReusageResult? reusedResult = _computeReusedLibraries(
@@ -297,13 +321,20 @@
       }
 
       // Experimental invalidation initialization (e.g. figure out if we can).
+      _benchmarker
+          ?.enterPhase(BenchmarkPhases.incremental_experimentalInvalidation);
       ExperimentalInvalidation? experimentalInvalidation =
           await _initializeExperimentalInvalidation(reusedResult, c);
       recorderForTesting?.recordRebuildBodiesCount(
           experimentalInvalidation?.missingSources.length ?? 0);
 
+      _benchmarker
+          ?.enterPhase(BenchmarkPhases.incremental_invalidatePrecompiledMacros);
+      _invalidatePrecompiledMacros(c.options, reusedResult.notReusedLibraries);
+
       // Cleanup: After (potentially) removing builders we have stuff to cleanup
       // to not leak, and we might need to re-create the dill target.
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_cleanup);
       _cleanupRemovedBuilders(
           lastGoodKernelTarget, reusedResult, uriTranslator);
       _recreateDillTargetIfPackageWasUpdated(uriTranslator, c);
@@ -320,6 +351,8 @@
 
       // For modular compilation we can be asked to load components and track
       // which libraries we actually use for the compilation. Set that up now.
+      _benchmarker
+          ?.enterPhase(BenchmarkPhases.incremental_loadEnsureLoadedComponents);
       _loadEnsureLoadedComponents(reusedLibraries);
       if (trackNeededDillLibraries) {
         _resetTrackingOfUsedLibraries(hierarchy);
@@ -328,21 +361,34 @@
       // For each computeDelta call we create a new kernel target which needs
       // to be setup, and in the case of experimental invalidation some of the
       // builders needs to be patched up.
-      IncrementalKernelTarget currentKernelTarget = _setupNewKernelTarget(
-          c,
-          uriTranslator,
-          hierarchy,
-          reusedLibraries,
-          experimentalInvalidation,
-          entryPoints!.first);
-      Map<LibraryBuilder, List<LibraryBuilder>>? rebuildBodiesMap =
-          _experimentalInvalidationCreateRebuildBodiesBuilders(
-              currentKernelTarget, experimentalInvalidation, uriTranslator);
-      entryPoints = currentKernelTarget.setEntryPoints(entryPoints!);
-      await currentKernelTarget.loader.buildOutlines();
-      _experimentalInvalidationPatchUpScopes(
-          experimentalInvalidation, rebuildBodiesMap);
-      rebuildBodiesMap = null;
+      IncrementalKernelTarget currentKernelTarget;
+      while (true) {
+        _benchmarker?.enterPhase(BenchmarkPhases.incremental_setupInLoop);
+        currentKernelTarget = _setupNewKernelTarget(c, uriTranslator, hierarchy,
+            reusedLibraries, experimentalInvalidation, entryPoints!.first);
+        Map<LibraryBuilder, List<LibraryBuilder>>? rebuildBodiesMap =
+            _experimentalInvalidationCreateRebuildBodiesBuilders(
+                currentKernelTarget, experimentalInvalidation, uriTranslator);
+        entryPoints = currentKernelTarget.setEntryPoints(entryPoints!);
+
+        // TODO(johnniwinther,jensj): Ensure that the internal state of the
+        // incremental compiler is consistent across 1 or more macro
+        // precompilations.
+        _benchmarker?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
+        NeededPrecompilations? neededPrecompilations =
+            await currentKernelTarget.computeNeededPrecompilations();
+        _benchmarker?.enterPhase(BenchmarkPhases.incremental_precompileMacros);
+        if (enableMacros &&
+            await precompileMacros(neededPrecompilations, c.options)) {
+          continue;
+        }
+        _benchmarker?.enterPhase(
+            BenchmarkPhases.incremental_experimentalInvalidationPatchUpScopes);
+        _experimentalInvalidationPatchUpScopes(
+            experimentalInvalidation, rebuildBodiesMap);
+        rebuildBodiesMap = null;
+        break;
+      }
 
       // Checkpoint: Build the actual outline.
       // Note that the [Component] is not the "full" component.
@@ -362,6 +408,8 @@
         componentWithDill = buildResult.component;
       }
       buildResult.macroApplications?.close();
+
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_hierarchy);
       hierarchy ??= currentKernelTarget.loader.hierarchy;
       if (currentKernelTarget.classHierarchyChanges != null) {
         hierarchy.applyTreeChanges(
@@ -375,6 +423,8 @@
 
       Set<Library>? neededDillLibraries;
       if (trackNeededDillLibraries) {
+        _benchmarker
+            ?.enterPhase(BenchmarkPhases.incremental_performDillUsageTracking);
         // Perform actual dill usage tracking.
         neededDillLibraries =
             _performDillUsageTracking(currentKernelTarget, hierarchy);
@@ -385,6 +435,8 @@
       // TODO(jensj,johnniwinther): Given the code below, [componentWithDill] is
       // assumed always to be non-null.
       if (componentWithDill != null) {
+        _benchmarker
+            ?.enterPhase(BenchmarkPhases.incremental_releaseAncillaryResources);
         this._invalidatedUris.clear();
         _hasToCheckPackageUris = false;
         lastGoodKernelTarget?.loader.releaseAncillaryResources();
@@ -393,11 +445,19 @@
 
       // Compute which libraries to output and which (previous) errors/warnings
       // we have to reissue. In the process do some cleanup too.
+      _benchmarker
+          ?.enterPhase(BenchmarkPhases.incremental_releaseAncillaryResources);
       List<Library> compiledLibraries =
           new List<Library>.of(currentKernelTarget.loader.libraries);
       Map<Uri, Source> uriToSource = componentWithDill!.uriToSource;
+
+      _benchmarker?.enterPhase(BenchmarkPhases
+          .incremental_experimentalCompilationPostCompilePatchup);
       _experimentalCompilationPostCompilePatchup(
           experimentalInvalidation, compiledLibraries, uriToSource);
+
+      _benchmarker?.enterPhase(BenchmarkPhases
+          .incremental_calculateOutputLibrariesAndIssueLibraryProblems);
       List<Library> outputLibraries =
           _calculateOutputLibrariesAndIssueLibraryProblems(
               currentKernelTarget,
@@ -421,10 +481,13 @@
         _dillLoadedData!.loader.currentSourceLoader =
             currentKernelTarget.loader;
       } else {
+        _benchmarker?.enterPhase(
+            BenchmarkPhases.incremental_convertSourceLibraryBuildersToDill);
         _previousSourceBuilders = _convertSourceLibraryBuildersToDill(
             currentKernelTarget, experimentalInvalidation);
       }
 
+      _benchmarker?.enterPhase(BenchmarkPhases.incremental_end);
       experimentalInvalidation = null;
 
       // Output result.
@@ -447,6 +510,15 @@
       currentlyCompilingLocal.complete();
 
       _lastGoodKernelTarget = currentKernelTarget;
+
+      _benchmarker?.stop();
+
+      if (_benchmarker != null) {
+        // Report.
+        JsonEncoder encoder = new JsonEncoder.withIndent("  ");
+        print(encoder.convert(_benchmarker));
+      }
+
       return new IncrementalCompilerResult(result,
           classHierarchy: currentKernelTarget.loader.hierarchy,
           coreTypes: currentKernelTarget.loader.coreTypes,
@@ -909,7 +981,7 @@
     }
     // Check compilation mode up against what we've seen here and set
     // `hasInvalidNnbdModeLibrary` accordingly.
-    if (c.options.isExperimentEnabledGlobally(ExperimentalFlag.nonNullable)) {
+    if (c.options.globalFeatures.nonNullable.isEnabled) {
       switch (c.options.nnbdMode) {
         case NnbdMode.Weak:
           // Don't expect strong or invalid.
@@ -1009,8 +1081,9 @@
       // The package file was changed.
       // Make sure the dill loader is on the same page.
       DillTarget oldDillLoadedData = _dillLoadedData!;
-      DillTarget newDillLoadedData = _dillLoadedData =
-          new DillTarget(_ticker, uriTranslator, c.options.target);
+      DillTarget newDillLoadedData = _dillLoadedData = new DillTarget(
+          _ticker, uriTranslator, c.options.target,
+          benchmarker: _benchmarker);
       for (DillLibraryBuilder library
           in oldDillLoadedData.loader.libraryBuilders) {
         newDillLoadedData.loader.registerLibraryBuilder(library);
@@ -1075,12 +1148,29 @@
     Set<LibraryBuilder> originalNotReusedLibraries;
     Set<Uri>? missingSources;
 
-    if (!context.options.isExperimentEnabledGlobally(
-        ExperimentalFlag.alternativeInvalidationStrategy)) return null;
+    if (!context
+        .options.globalFeatures.alternativeInvalidationStrategy.isEnabled) {
+      return null;
+    }
     if (_modulesToLoad != null) return null;
     if (reusedResult.directlyInvalidated.isEmpty) return null;
     if (reusedResult.invalidatedBecauseOfPackageUpdate) return null;
 
+    if (enableMacros) {
+      /// TODO(johnniwinther): Add a [hasMacro] property to [LibraryBuilder].
+      for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
+        Iterator<Builder> iterator = builder.iterator;
+        while (iterator.moveNext()) {
+          Builder childBuilder = iterator.current;
+          if (childBuilder is ClassBuilder && childBuilder.isMacro) {
+            // Changes to a library with macro classes can affect any class that
+            // depends on it.
+            return null;
+          }
+        }
+      }
+    }
+
     // Figure out if the file(s) have changed outline, or we can just
     // rebuild the bodies.
     for (LibraryBuilder builder in reusedResult.directlyInvalidated) {
@@ -1109,8 +1199,7 @@
           enableTripleShift:
               /* should this be on the library? */
               /* this is effectively what the constant evaluator does */
-              context.options
-                  .isExperimentEnabledGlobally(ExperimentalFlag.tripleShift));
+              context.options.globalFeatures.tripleShift.isEnabled);
       String? before = textualOutline(previousSource, scannerConfiguration,
           performModelling: true);
       if (before == null) {
@@ -1253,8 +1342,9 @@
       UriTranslator uriTranslator, CompilerContext context) async {
     IncrementalCompilerData data = new IncrementalCompilerData();
     if (_dillLoadedData == null) {
-      DillTarget dillLoadedData = _dillLoadedData =
-          new DillTarget(_ticker, uriTranslator, context.options.target);
+      DillTarget dillLoadedData = _dillLoadedData = new DillTarget(
+          _ticker, uriTranslator, context.options.target,
+          benchmarker: _benchmarker);
       int bytesLength = await _initializationStrategy.initialize(
           dillLoadedData,
           uriTranslator,
@@ -1288,21 +1378,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.
@@ -1381,6 +1476,25 @@
     }
   }
 
+  /// Removes the precompiled macros whose libraries cannot be reused.
+  void _invalidatePrecompiledMacros(ProcessedOptions processedOptions,
+      Set<LibraryBuilder> notReusedLibraries) {
+    if (notReusedLibraries.isEmpty) {
+      return;
+    }
+    CompilerOptions compilerOptions = processedOptions.rawOptionsForTesting;
+    Map<Uri, Uri>? precompiledMacroUris = compilerOptions.precompiledMacroUris;
+    if (precompiledMacroUris != null) {
+      Set<Uri> importUris =
+          notReusedLibraries.map((library) => library.importUri).toSet();
+      for (Uri macroLibraryUri in precompiledMacroUris.keys.toList()) {
+        if (importUris.contains(macroLibraryUri)) {
+          precompiledMacroUris.remove(macroLibraryUri);
+        }
+      }
+    }
+  }
+
   /// Internal method.
   void _invalidateNotKeptUserBuilders(Set<Uri?> invalidatedUris) {
     if (_modulesToLoad != null && _userBuilders != null) {
@@ -1672,10 +1786,13 @@
 
       Class? cls;
       if (className != null) {
-        ClassBuilder? classBuilder = libraryBuilder.scope
-            .lookupLocalMember(className, setter: false) as ClassBuilder?;
-        cls = classBuilder?.cls;
-        if (cls == null) return null;
+        Builder? scopeMember =
+            libraryBuilder.scope.lookupLocalMember(className, setter: false);
+        if (scopeMember is ClassBuilder) {
+          cls = scopeMember.cls;
+        } else {
+          return null;
+        }
       }
       Extension? extension;
       String? extensionName;
@@ -2485,8 +2602,7 @@
 
         // Compute "output nnbd mode".
         NonNullableByDefaultCompiledMode compiledMode;
-        if (context.options
-            .isExperimentEnabledGlobally(ExperimentalFlag.nonNullable)) {
+        if (context.options.globalFeatures.nonNullable.isEnabled) {
           switch (context.options.nnbdMode) {
             case NnbdMode.Weak:
               compiledMode = NonNullableByDefaultCompiledMode.Weak;
diff --git a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
index 404b3ad..5966303 100644
--- a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
@@ -15,15 +15,37 @@
 
   BenchmarkPhases _currentPhase = BenchmarkPhases.implicitInitialization;
   BenchmarkSubdivides? _subdivide;
+  int _subdivideLayer = 0;
+
+  void reset() {
+    _totalStopwatch.start();
+    _totalStopwatch.reset();
+    _phaseStopwatch.start();
+    _phaseStopwatch.reset();
+    _subdivideStopwatch.start();
+    _subdivideStopwatch.reset();
+    for (int i = 0; i < _phaseTimings.length; i++) {
+      assert(BenchmarkPhases.values[i].index == i);
+      _phaseTimings[i] = new PhaseTiming(BenchmarkPhases.values[i]);
+    }
+    _currentPhase = BenchmarkPhases.implicitInitialization;
+    _subdivide = null;
+    _subdivideLayer = 0;
+  }
 
   void beginSubdivide(final BenchmarkSubdivides phase) {
+    _subdivideLayer++;
+    if (_subdivideLayer != 1) return;
     BenchmarkSubdivides? subdivide = _subdivide;
-    if (subdivide != null) throw "Can't subdivide a subdivide";
+    assert(subdivide == null);
     _subdivideStopwatch.reset();
     _subdivide = phase;
   }
 
   void endSubdivide() {
+    _subdivideLayer--;
+    assert(_subdivideLayer >= 0);
+    if (_subdivideLayer != 0) return;
     BenchmarkSubdivides? subdivide = _subdivide;
     if (subdivide == null) throw "Can't end a nonexistent subdivide";
     _phaseTimings[_currentPhase.index]
@@ -173,10 +195,36 @@
   omitPlatform,
   writeComponent,
   benchmarkAstVisit,
+
+  incremental_setupPackages,
+  incremental_ensurePlatform,
+  incremental_invalidate,
+  incremental_experimentalInvalidation,
+  incremental_invalidatePrecompiledMacros,
+  incremental_cleanup,
+  incremental_loadEnsureLoadedComponents,
+  incremental_setupInLoop,
+  incremental_precompileMacros,
+  incremental_experimentalInvalidationPatchUpScopes,
+  incremental_hierarchy,
+  incremental_performDillUsageTracking,
+  incremental_releaseAncillaryResources,
+  incremental_experimentalCompilationPostCompilePatchup,
+  incremental_calculateOutputLibrariesAndIssueLibraryProblems,
+  incremental_convertSourceLibraryBuildersToDill,
+  incremental_end,
+
+  precompileMacros,
+
   // add more here
   //
   end,
   unknown,
+  unknownDillTarget,
+  unknownComputeNeededPrecompilations,
+  unknownBuildOutlines,
+  unknownBuildComponent,
+  unknownGenerateKernelInternal,
 }
 
 enum BenchmarkSubdivides {
@@ -198,4 +246,8 @@
 
   buildOutlineExpressions,
   delayedActionPerformer,
+
+  computeMacroApplications_macroExecutorProvider,
+  macroApplications_macroExecutorLoadMacro,
+  macroApplications_macroExecutorInstantiateMacro,
 }
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 9471504..af89434 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -33,6 +33,7 @@
 import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart'
     show isBinaryOperator, isMinusOperator, isUserDefinableOperator;
 import 'package:_fe_analyzer_shared/src/util/link.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:front_end/src/fasta/kernel/benchmarker.dart' show Benchmarker;
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
@@ -67,13 +68,7 @@
 import '../constant_context.dart' show ConstantContext;
 import '../dill/dill_library_builder.dart' show DillLibraryBuilder;
 import '../fasta_codes.dart' as fasta;
-import '../fasta_codes.dart'
-    show
-        LocatedMessage,
-        Message,
-        Template,
-        noLength,
-        templateExperimentNotEnabled;
+import '../fasta_codes.dart' show LocatedMessage, Message, Template, noLength;
 import '../identifiers.dart'
     show Identifier, InitializedIdentifier, QualifiedName, flattenName;
 import '../messages.dart' as messages show getLocationFromUri;
@@ -390,7 +385,8 @@
       : this(
             libraryBuilder: part,
             member: field,
-            enclosingScope: declarationBuilder?.scope ?? field.library.scope,
+            enclosingScope:
+                declarationBuilder?.scope ?? field.libraryBuilder.scope,
             formalParameterScope: null,
             hierarchy: part.loader.hierarchy,
             coreTypes: part.loader.coreTypes,
@@ -600,24 +596,7 @@
   DartType get implicitTypeArgument => const ImplicitTypeArgument();
 
   @override
-  bool get enableExtensionTypesInLibrary {
-    return libraryBuilder.enableExtensionTypesInLibrary;
-  }
-
-  @override
-  bool get enableConstFunctionsInLibrary {
-    return libraryBuilder.enableConstFunctionsInLibrary;
-  }
-
-  @override
-  bool get enableConstructorTearOffsInLibrary {
-    return libraryBuilder.enableConstructorTearOffsInLibrary;
-  }
-
-  @override
-  bool get enableNamedArgumentsAnywhereInLibrary {
-    return libraryBuilder.enableNamedArgumentsAnywhereInLibrary;
-  }
+  LibraryFeatures get libraryFeatures => libraryBuilder.libraryFeatures;
 
   void _enterLocalState({bool inLateLocalInitializer: false}) {
     _localInitializerState =
@@ -1233,10 +1212,10 @@
         FormalParameterBuilder parameter = formals.parameters![i];
         Expression? initializer = parameter.variable!.initializer;
         if (!parameter.isSuperInitializingFormal &&
-            (parameter.isOptional || initializer != null)) {
+            (parameter.isOptionalPositional || initializer != null)) {
           if (!parameter.initializerWasInferred) {
             parameter.initializerWasInferred = true;
-            if (parameter.isOptional) {
+            if (parameter.isOptionalPositional) {
               initializer ??= forest.createNullLiteral(
                   // TODO(ahe): Should store: originParameter.fileOffset
                   // https://github.com/dart-lang/sdk/issues/32289
@@ -1293,6 +1272,10 @@
           body);
       body = inferredFunctionBody.body;
       builder.function.futureValueType = inferredFunctionBody.futureValueType;
+      assert(
+          !(builder.function.asyncMarker == AsyncMarker.Async &&
+              builder.function.futureValueType == null),
+          "No future value type computed.");
       libraryBuilder.loader.transformPostInference(body, transformSetLiterals,
           transformCollections, libraryBuilder.library);
     }
@@ -1305,7 +1288,7 @@
     if (builder.kind == ProcedureKind.Setter) {
       if (formals?.parameters == null ||
           formals!.parameters!.length != 1 ||
-          formals.parameters!.single.isOptional) {
+          formals.parameters!.single.isOptionalPositional) {
         int charOffset = formals?.charOffset ??
             body?.fileOffset ??
             builder.member.fileOffset;
@@ -1730,8 +1713,14 @@
             : new List<FormalParameterBuilder>.generate(
                 parameters.positionalParameters.length, (int i) {
                 VariableDeclaration formal = parameters.positionalParameters[i];
-                return new FormalParameterBuilder(null, 0, null, formal.name!,
-                    libraryBuilder, formal.fileOffset,
+                return new FormalParameterBuilder(
+                    /* metadata = */ null,
+                    FormalParameterKind.requiredPositional,
+                    /* modifiers = */ 0,
+                    /* type = */ null,
+                    formal.name!,
+                    libraryBuilder,
+                    formal.fileOffset,
                     fileUri: uri)
                   ..variable = formal;
               }, growable: false);
@@ -1849,6 +1838,7 @@
 
     List<Expression>? positionalSuperParametersAsArguments;
     List<NamedExpression>? namedSuperParametersAsArguments;
+    Set<String>? namedSuperParameterNames;
     if (formals != null) {
       for (FormalParameterBuilder formal in formals) {
         if (formal.isSuperInitializingFormal) {
@@ -1860,6 +1850,7 @@
                         forNullGuardedAccess: false)
                       ..fileOffset = formal.charOffset)
                   ..fileOffset = formal.charOffset);
+            (namedSuperParameterNames ??= <String>{}).add(formal.name);
           } else {
             (positionalSuperParametersAsArguments ??= <Expression>[]).add(
                 new VariableGetImpl(formal.variable!,
@@ -1880,8 +1871,8 @@
               buildProblem(fasta.messageEnumConstructorSuperInitializer,
                   superInitializer.fileOffset, noLength))
             ..parent = constructor;
-        } else if (libraryBuilder.enableSuperParametersInLibrary) {
-          Arguments arguments = superInitializer.arguments;
+        } else if (libraryFeatures.superParameters.isEnabled) {
+          ArgumentsImpl arguments = superInitializer.arguments as ArgumentsImpl;
 
           if (positionalSuperParametersAsArguments != null) {
             if (arguments.positional.isNotEmpty) {
@@ -1899,19 +1890,21 @@
             } else {
               arguments.positional.addAll(positionalSuperParametersAsArguments);
               setParents(positionalSuperParametersAsArguments, arguments);
+              arguments.positionalAreSuperParameters = true;
             }
           }
           if (namedSuperParametersAsArguments != null) {
             // TODO(cstefantsova): Report name conflicts.
             arguments.named.addAll(namedSuperParametersAsArguments);
             setParents(namedSuperParametersAsArguments, arguments);
+            arguments.namedSuperParameterNames = namedSuperParameterNames;
           }
         }
       } else if (initializers.last is RedirectingInitializer) {
         RedirectingInitializer redirectingInitializer =
             initializers.last as RedirectingInitializer;
         if (sourceClassBuilder is SourceEnumBuilder &&
-            libraryBuilder.enableEnhancedEnumsInLibrary) {
+            libraryFeatures.enhancedEnums.isEnabled) {
           ArgumentsImpl arguments =
               redirectingInitializer.arguments as ArgumentsImpl;
           List<Expression> enumSyntheticArguments = [
@@ -1953,10 +1946,10 @@
       /// >unless the enclosing class is class Object.
       Constructor? superTarget = lookupConstructor(emptyName, isSuper: true);
       Initializer initializer;
-      Arguments arguments;
+      ArgumentsImpl arguments;
       List<Expression>? positionalArguments;
       List<NamedExpression>? namedArguments;
-      if (libraryBuilder.enableSuperParametersInLibrary) {
+      if (libraryFeatures.superParameters.isEnabled) {
         positionalArguments = positionalSuperParametersAsArguments;
         namedArguments = namedSuperParametersAsArguments;
       }
@@ -1971,6 +1964,7 @@
               forNullGuardedAccess: false)
         ]);
       }
+
       if (positionalArguments != null || namedArguments != null) {
         arguments = forest.createArguments(
             noLocation, positionalArguments ?? <Expression>[],
@@ -1978,6 +1972,11 @@
       } else {
         arguments = forest.createArgumentsEmpty(noLocation);
       }
+
+      arguments.positionalAreSuperParameters =
+          positionalSuperParametersAsArguments != null;
+      arguments.namedSuperParameterNames = namedSuperParameterNames;
+
       if (superTarget == null ||
           checkArgumentsForFunction(superTarget.function, arguments,
                   builder.charOffset, const <TypeParameter>[]) !=
@@ -1999,7 +1998,7 @@
         initializer = buildSuperInitializer(
             true, superTarget, arguments, builder.charOffset);
       }
-      if (libraryBuilder.enableSuperParametersInLibrary) {
+      if (libraryFeatures.superParameters.isEnabled) {
         InitializerInferenceResult inferenceResult =
             typeInferrer.inferInitializer(this, initializer);
         builder.addInitializer(initializer, this,
@@ -2045,7 +2044,7 @@
       return;
     }
     List<Object?>? argumentsOriginalOrder;
-    if (libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+    if (libraryFeatures.namedArgumentsAnywhere.isEnabled) {
       argumentsOriginalOrder = new List<Object?>.of(arguments);
     }
     int firstNamedArgumentIndex = arguments.length;
@@ -2063,7 +2062,7 @@
         argumentsOriginalOrder?[i] = argument;
         if (i > firstNamedArgumentIndex) {
           hasNamedBeforePositional = true;
-          if (!libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+          if (!libraryFeatures.namedArgumentsAnywhere.isEnabled) {
             arguments[i] = new NamedExpression(
                 "#$i",
                 buildProblem(fasta.messageExpectedNamedArgument,
@@ -2079,7 +2078,7 @@
     if (firstNamedArgumentIndex < arguments.length) {
       List<Expression> positional;
       List<NamedExpression> named;
-      if (libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
+      if (libraryFeatures.namedArgumentsAnywhere.isEnabled) {
         positional = new List<Expression>.filled(
             positionalCount, dummyExpression,
             growable: true);
@@ -2884,7 +2883,7 @@
       if (constantContext != ConstantContext.none &&
           !variableBuilder.isConst &&
           !member.isConstructor &&
-          !enableConstFunctionsInLibrary) {
+          !libraryFeatures.constFunctions.isEnabled) {
         return new IncompleteErrorGenerator(
             this, token, fasta.messageNotAConstantExpression);
       }
@@ -4087,16 +4086,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;
       }
     }
@@ -4104,7 +4098,7 @@
     if (name is Generator) {
       bool allowPotentiallyConstantType;
       if (libraryBuilder.isNonNullableByDefault) {
-        if (enableConstructorTearOffsInLibrary) {
+        if (libraryFeatures.constructorTearoffs.isEnabled) {
           allowPotentiallyConstantType = true;
         } else {
           allowPotentiallyConstantType = inIsOrAsOperatorType;
@@ -4114,7 +4108,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);
@@ -4123,16 +4118,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);
@@ -4176,7 +4166,7 @@
     if (typeVariables != null) {
       for (TypeVariableBuilder builder in typeVariables) {
         if (builder.parameter.annotations.isNotEmpty) {
-          if (!libraryBuilder.enableGenericMetadataInLibrary) {
+          if (!libraryFeatures.genericMetadata.isEnabled) {
             addProblem(fasta.messageAnnotationOnFunctionTypeTypeVariable,
                 builder.charOffset, builder.name.length);
           }
@@ -4330,6 +4320,7 @@
     push((covariantToken != null ? covariantMask : 0) |
         (requiredToken != null ? requiredMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme));
+    push(varFinalOrConst ?? NullValue.Token);
   }
 
   @override
@@ -4350,6 +4341,15 @@
         thisKeyword = null;
       }
     }
+    if (superKeyword != null) {
+      if (!inConstructor) {
+        handleRecoverableError(
+            fasta.messageSuperParameterInitializerOutsideConstructor,
+            superKeyword,
+            superKeyword);
+        superKeyword = null;
+      }
+    }
     Object? nameNode = pop();
     TypeBuilder? type = pop() as TypeBuilder?;
     if (functionNestingLevel == 0 && type != null) {
@@ -4362,6 +4362,15 @@
       // `invalid-type`.
       buildDartType(type, allowPotentiallyConstantType: false);
     }
+    Token? varOrFinalOrConst = pop(NullValue.Token) as Token?;
+    if (superKeyword != null &&
+        varOrFinalOrConst != null &&
+        optional('var', varOrFinalOrConst)) {
+      handleRecoverableError(
+          fasta.templateExtraneousModifier.withArguments(varOrFinalOrConst),
+          varOrFinalOrConst,
+          varOrFinalOrConst);
+    }
     int modifiers = pop() as int;
     if (inCatchClause) {
       modifiers |= finalMask;
@@ -4385,7 +4394,7 @@
         return;
       }
     } else {
-      parameter = new FormalParameterBuilder(null, modifiers, type,
+      parameter = new FormalParameterBuilder(null, kind, modifiers, type,
           name?.name ?? '', libraryBuilder, offsetForToken(nameToken),
           fileUri: uri)
         ..hasDeclaredInitializer = (initializerStart != null);
@@ -4406,7 +4415,7 @@
           variable.initializer = initializer..parent = variable;
         }
       }
-    } else if (kind != FormalParameterKind.mandatory) {
+    } else if (kind != FormalParameterKind.requiredPositional) {
       variable.initializer ??= forest.createNullLiteral(noLocation)
         ..parent = variable;
     }
@@ -4427,9 +4436,6 @@
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     debugEvent("OptionalFormalParameters");
-    FormalParameterKind kind = optional("{", beginToken)
-        ? FormalParameterKind.optionalNamed
-        : FormalParameterKind.optionalPositional;
     // When recovering from an empty list of optional arguments, count may be
     // 0. It might be simpler if the parser didn't call this method in that
     // case, however, then [beginOptionalFormalParameters] wouldn't always be
@@ -4440,9 +4446,6 @@
     if (parameters == null) {
       push(new ParserRecovery(offsetForToken(beginToken)));
     } else {
-      for (FormalParameterBuilder parameter in parameters) {
-        parameter.kind = kind;
-      }
       push(parameters);
     }
   }
@@ -5216,7 +5219,7 @@
     String name = pop() as String;
     List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
     if (inMetadata && typeArguments != null) {
-      if (!libraryBuilder.enableGenericMetadataInLibrary) {
+      if (!libraryFeatures.genericMetadata.isEnabled) {
         handleRecoverableError(fasta.messageMetadataTypeArguments,
             nameLastToken.next!, nameLastToken.next!);
       }
@@ -5268,7 +5271,8 @@
       {required int instantiationOffset,
       required int invocationOffset,
       required bool inImplicitCreationContext}) {
-    if (enableConstructorTearOffsInLibrary && inImplicitCreationContext) {
+    if (libraryFeatures.constructorTearoffs.isEnabled &&
+        inImplicitCreationContext) {
       Expression receiver = receiverFunction();
       if (typeArguments != null) {
         if (receiver is StaticTearOff &&
@@ -5502,8 +5506,8 @@
               // No type arguments provided to unaliased class, use defaults.
               List<DartType> result = new List<DartType>.generate(
                   cls.typeVariables!.length,
-                  (int i) =>
-                      cls.typeVariables![i].defaultType!.build(cls.library),
+                  (int i) => cls.typeVariables![i].defaultType!
+                      .build(cls.libraryBuilder),
                   growable: true);
               forest.argumentsSetTypeArguments(arguments, result);
             }
@@ -5542,7 +5546,7 @@
         target = b.member;
       }
       if (type.isEnum &&
-          !(libraryBuilder.enableEnhancedEnumsInLibrary &&
+          !(libraryFeatures.enhancedEnums.isEnabled &&
               target is Procedure &&
               target.kind == ProcedureKind.Factory)) {
         return buildProblem(fasta.messageEnumInstantiation,
@@ -5587,7 +5591,7 @@
   @override
   void handleConstFactory(Token constKeyword) {
     debugEvent("ConstFactory");
-    if (!libraryBuilder.enableConstFunctionsInLibrary) {
+    if (!libraryFeatures.constFunctions.isEnabled) {
       handleRecoverableError(
           fasta.messageConstFactory, constKeyword, constKeyword);
     }
@@ -6780,7 +6784,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) {
@@ -6813,7 +6818,7 @@
     TypeVariableBuilder variable = typeVariables[index];
     variable.bound = bound;
     if (variance != null) {
-      if (!libraryBuilder.enableVarianceInLibrary) {
+      if (!libraryFeatures.variance.isEnabled) {
         reportVarianceModifierNotEnabled(variance);
       }
       variable.variance = Variance.fromString(variance.lexeme);
@@ -6840,11 +6845,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,
@@ -7179,7 +7179,7 @@
     ]));
     List<TypeBuilder>? typeArguments =
         pop() as List<TypeBuilder>?; // typeArguments
-    if (libraryBuilder.enableConstructorTearOffsInLibrary) {
+    if (libraryFeatures.constructorTearoffs.isEnabled) {
       Object? operand = pop();
       if (operand is Generator) {
         push(operand.applyTypeArguments(
@@ -7198,11 +7198,9 @@
           ..fileOffset = openAngleBracket.charOffset);
       }
     } else {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'constructor-tearoffs',
-              libraryBuilder.enableConstructorTearOffsVersionInLibrary
-                  .toText()),
+      libraryBuilder.reportFeatureNotEnabled(
+          libraryFeatures.constructorTearoffs,
+          uri,
           openAngleBracket.charOffset,
           noLength);
     }
@@ -7229,43 +7227,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);
           }
         }
       }
@@ -7279,8 +7251,7 @@
       _validateTypeVariableUseInternal(builder.returnType,
           allowPotentiallyConstantType: allowPotentiallyConstantType);
       if (builder.formals != null) {
-        for (FormalParameterBuilder formalParameterBuilder
-            in builder.formals!) {
+        for (ParameterBuilder formalParameterBuilder in builder.formals!) {
           _validateTypeVariableUseInternal(formalParameterBuilder.type,
               allowPotentiallyConstantType: allowPotentiallyConstantType);
         }
@@ -7316,7 +7287,7 @@
       {bool isConstantExpression: false, bool isNullAware: false}) {
     if (constantContext != ConstantContext.none &&
         !isConstantExpression &&
-        !enableConstFunctionsInLibrary) {
+        !libraryFeatures.constFunctions.isEnabled) {
       return buildProblem(
           fasta.templateNotConstantExpression
               .withArguments('Method invocation'),
@@ -7346,7 +7317,7 @@
       bool isImplicitCall: false}) {
     if (constantContext != ConstantContext.none &&
         !isConstantExpression &&
-        !enableConstFunctionsInLibrary) {
+        !libraryFeatures.constFunctions.isEnabled) {
       return buildProblem(
           fasta.templateNotConstantExpression
               .withArguments('Method invocation'),
@@ -7460,14 +7431,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>[];
@@ -7496,15 +7459,8 @@
 
   @override
   void handleNewAsIdentifier(Token token) {
-    if (!libraryBuilder.enableConstructorTearOffsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'constructor-tearoffs',
-              libraryBuilder.enableConstructorTearOffsVersionInLibrary
-                  .toText()),
-          token.charOffset,
-          token.length);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.constructorTearoffs, token.charOffset, token.length);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index ae2efed..53d9f3d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -121,7 +121,8 @@
     if (members.length == 1) {
       bestSoFarIndex = 0;
     } else {
-      bool isNonNullableByDefault = classBuilder.library.isNonNullableByDefault;
+      bool isNonNullableByDefault =
+          classBuilder.libraryBuilder.isNonNullableByDefault;
 
       DartType? bestTypeSoFar;
       for (int candidateIndex = members.length - 1;
@@ -269,7 +270,7 @@
   /// The this type of [classBuilder].
   InterfaceType get thisType {
     return _thisType ??= _coreTypes.thisInterfaceType(
-        classBuilder.cls, classBuilder.library.nonNullable);
+        classBuilder.cls, classBuilder.libraryBuilder.nonNullable);
   }
 
   /// Returns `true` if the canonical member is declared in [classBuilder].
@@ -295,7 +296,7 @@
       assert(target != null,
           "No member computed for index ${index} in ${members}");
       candidateType = _computeMemberType(thisType, target);
-      if (!classBuilder.library.isNonNullableByDefault) {
+      if (!classBuilder.libraryBuilder.isNonNullableByDefault) {
         DartType? legacyErasure;
         if (target == hierarchy.coreTypes.objectEquals) {
           // In legacy code we special case `Object.==` to infer `dynamic`
@@ -318,7 +319,7 @@
 
   DartType getMemberTypeForTarget(Member target) {
     DartType candidateType = _computeMemberType(thisType, target);
-    if (!classBuilder.library.isNonNullableByDefault) {
+    if (!classBuilder.libraryBuilder.isNonNullableByDefault) {
       DartType? legacyErasure;
       if (target == hierarchy.coreTypes.objectEquals) {
         // In legacy code we special case `Object.==` to infer `dynamic`
@@ -341,7 +342,7 @@
       if (_canonicalMemberIndex == null) {
         return null;
       }
-      if (classBuilder.library.isNonNullableByDefault) {
+      if (classBuilder.libraryBuilder.isNonNullableByDefault) {
         DartType canonicalMemberType = _combinedMemberSignatureType =
             getMemberType(_canonicalMemberIndex!);
         _containsNnbdTypes =
@@ -717,7 +718,7 @@
       return type;
     }
     InterfaceType? instance = hierarchy.getTypeAsInstanceOf(
-        thisType, member.enclosingClass!, classBuilder.library.library);
+        thisType, member.enclosingClass!, classBuilder.libraryBuilder.library);
     assert(
         instance != null,
         "No instance of $thisType as ${member.enclosingClass} found for "
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 4bb0a08..2f58bb1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -479,9 +479,6 @@
     constantEvaluator.withNewEnvironment(() {
       transformAnnotations(node.annotations, node);
       transformTypeParameterList(node.typeParameters, node);
-      transformTypeParameterList(node.typeParametersOfFunctionType, node);
-      transformVariableDeclarationList(node.positionalParameters, node);
-      transformVariableDeclarationList(node.namedParameters, node);
     });
     return node;
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index 3b70084..8b99bb3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -274,9 +274,9 @@
 /// Creates the body for the redirecting factory [tearOff] with the target
 /// [constructor] and [typeArguments].
 ///
-/// Returns the [SynthesizedFunctionNode] object need to perform default value
+/// Returns the [DelayedDefaultValueCloner] object need to perform default value
 /// computation.
-SynthesizedFunctionNode buildRedirectingFactoryTearOffBody(
+DelayedDefaultValueCloner buildRedirectingFactoryTearOffBody(
     Procedure tearOff,
     Member target,
     List<DartType> typeArguments,
@@ -318,7 +318,7 @@
   }
   Arguments arguments = _createArguments(tearOff, typeArguments, fileOffset);
   _createTearOffBody(tearOff, target, arguments);
-  return new SynthesizedFunctionNode(
+  return new DelayedDefaultValueCloner(
       substitutionMap, target.function!, tearOff.function,
       identicalSignatures: false, libraryBuilder: libraryBuilder);
 }
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 f1e283a..927fca16 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) {
@@ -1511,7 +1503,7 @@
       {bool isTypeArgumentsInForest = false}) {
     if (_helper.constantContext != ConstantContext.none &&
         !_helper.isIdentical(readTarget) &&
-        !_helper.enableConstFunctionsInLibrary) {
+        !_helper.libraryFeatures.constFunctions.isEnabled) {
       return _helper.buildProblem(
           templateNotConstantExpression.withArguments('Method invocation'),
           offset,
@@ -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,12 +3080,12 @@
       } else {
         _expression = _forest.createTypeLiteral(
             offsetForToken(token),
-            _helper.buildTypeLiteralDartType(
+            _helper.buildDartType(
                 buildTypeWithResolvedArguments(
                     _helper.libraryBuilder.nonNullableBuilder, typeArguments,
-                    allowPotentiallyConstantType: true),
+                    allowPotentiallyConstantType: true, forTypeLiteral: true),
                 allowPotentiallyConstantType:
-                    _helper.enableConstructorTearOffsInLibrary));
+                    _helper.libraryFeatures.constructorTearoffs.isEnabled));
       }
     }
     return _expression!;
@@ -3145,7 +3110,7 @@
           usedAsClassFileUri: _uri);
 
       bool isConstructorTearOff = send is PropertySelector &&
-          _helper.enableConstructorTearOffsInLibrary &&
+          _helper.libraryFeatures.constructorTearoffs.isEnabled &&
           declarationBuilder is ClassBuilder;
       List<TypeBuilder>? aliasedTypeArguments = typeArguments
           ?.map((unknownType) => _helper.validateTypeVariableUse(unknownType,
@@ -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 =
@@ -3206,7 +3173,7 @@
               "Unexpected non-null typeArguments of "
               "an IncompletePropertyAccessGenerator object: "
               "'${send.typeArguments.runtimeType}'.");
-          if (_helper.enableConstructorTearOffsInLibrary &&
+          if (_helper.libraryFeatures.constructorTearoffs.isEnabled &&
               declarationBuilder is ClassBuilder) {
             MemberBuilder? constructor =
                 declarationBuilder.findConstructorOrFactory(
@@ -3267,8 +3234,10 @@
                     allowPotentiallyConstantType: true);
               }
               if (isGenericTypedefTearOff) {
-                if (isProperRenameForClass(_helper.typeEnvironment,
-                    aliasBuilder!.typedef, aliasBuilder.library.library)) {
+                if (isProperRenameForClass(
+                    _helper.typeEnvironment,
+                    aliasBuilder!.typedef,
+                    aliasBuilder.libraryBuilder.library)) {
                   return tearOffExpression;
                 }
                 Procedure? tearOffLowering =
@@ -4181,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(
@@ -4200,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
@@ -4307,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
@@ -4831,7 +4786,8 @@
   /// Report an error if the selector name "new" when the constructor-tearoff
   /// feature is enabled.
   void reportNewAsSelector() {
-    if (name.text == 'new' && _helper.enableConstructorTearOffsInLibrary) {
+    if (name.text == 'new' &&
+        _helper.libraryFeatures.constructorTearoffs.isEnabled) {
       _helper.addProblem(messageNewAsSelector, fileOffset, name.text.length);
     }
   }
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..41ab864 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
@@ -9,20 +9,19 @@
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 
+import '../../api_prototype/experimental_flags.dart';
 import '../builder/builder.dart';
 import '../builder/formal_parameter_builder.dart';
 import '../builder/named_type_builder.dart';
 import '../builder/prefix_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
-
 import '../constant_context.dart' show ConstantContext;
 import '../fasta_codes.dart' show LocatedMessage;
 import '../messages.dart' show Message;
 import '../scope.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../type_inference/inference_helper.dart' show InferenceHelper;
-
 import 'constness.dart' show Constness;
 import 'forest.dart' show Forest;
 import 'internal_ast.dart';
@@ -57,13 +56,7 @@
 
   Member? lookupSuperMember(Name name, {bool isSetter});
 
-  bool get enableExtensionTypesInLibrary;
-
-  bool get enableConstFunctionsInLibrary;
-
-  bool get enableConstructorTearOffsInLibrary;
-
-  bool get enableNamedArgumentsAnywhereInLibrary;
+  LibraryFeatures get libraryFeatures;
 
   Expression_Generator_Builder scopeLookup(
       Scope scope, String name, Token token,
@@ -160,9 +153,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/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index 878dc03b..62640c1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -239,7 +239,7 @@
                 parameter.type,
                 superParameterType,
                 _combinedMemberSignature
-                        .classBuilder.library.isNonNullableByDefault
+                        .classBuilder.libraryBuilder.isNonNullableByDefault
                     ? SubtypeCheckMode.withNullabilities
                     : SubtypeCheckMode.ignoringNullabilities)) {
               expression = new AsExpression(expression, superParameterType)
@@ -268,7 +268,7 @@
                 parameter.type,
                 superParameterType,
                 _combinedMemberSignature
-                        .classBuilder.library.isNonNullableByDefault
+                        .classBuilder.libraryBuilder.isNonNullableByDefault
                     ? SubtypeCheckMode.withNullabilities
                     : SubtypeCheckMode.ignoringNullabilities)) {
               expression = new AsExpression(expression, superParameterType)
@@ -307,7 +307,7 @@
               parameter.type,
               superParameterType,
               _combinedMemberSignature
-                      .classBuilder.library.isNonNullableByDefault
+                      .classBuilder.libraryBuilder.isNonNullableByDefault
                   ? SubtypeCheckMode.withNullabilities
                   : SubtypeCheckMode.ignoringNullabilities)) {
             expression = new AsExpression(expression, superParameterType)
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart
index f45ba32..dd83533 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/class_member.dart
@@ -318,7 +318,7 @@
     if (_member != null) {
       return;
     }
-    if (classBuilder.library is! SourceLibraryBuilder) {
+    if (classBuilder.libraryBuilder is! SourceLibraryBuilder) {
       if (_canonicalMember != null) {
         _member = _canonicalMember!.getMember(membersBuilder);
         _covariance = _canonicalMember!.getCovariance(membersBuilder);
@@ -384,7 +384,7 @@
         assert(stub != canonicalMember);
         classBuilder.cls.addProcedure(stub);
         SourceLibraryBuilder library =
-            classBuilder.library as SourceLibraryBuilder;
+            classBuilder.libraryBuilder as SourceLibraryBuilder;
         if (canonicalMember is Procedure) {
           library.forwardersOrigins
             ..add(stub)
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 30bd373..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
@@ -51,10 +51,11 @@
     List<Supertype> interfacesList;
     int maxInheritancePath;
 
-    List<TypeBuilder>? directInterfaceBuilders;
+    ClassHierarchyNode? mixedInNode;
+    List<ClassHierarchyNode>? interfaceNodes;
 
     if (classBuilder.isMixinApplication) {
-      inferMixinApplication();
+      mixedInNode = inferMixinApplication();
     }
 
     if (supernode == null) {
@@ -67,8 +68,8 @@
 
       superclasses = new List<Supertype>.filled(
           supernode.superclasses.length + 1, dummySupertype);
-      Supertype? supertype = classBuilder.supertypeBuilder!.buildSupertype(
-          classBuilder.library, 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.
@@ -78,14 +79,15 @@
       superclasses.setRange(0, superclasses.length - 1,
           substSupertypes(supertype, supernode.superclasses));
       superclasses[superclasses.length - 1] = supertype;
-      if (!classBuilder.library.isNonNullableByDefault &&
-          supernode.classBuilder.library.isNonNullableByDefault) {
+      if (!classBuilder.libraryBuilder.isNonNullableByDefault &&
+          supernode.classBuilder.libraryBuilder.isNonNullableByDefault) {
         for (int i = 0; i < superclasses.length; i++) {
           superclasses[i] = legacyErasureSupertype(superclasses[i]);
         }
       }
 
-      directInterfaceBuilders = ignoreFunction(classBuilder.interfaceBuilders);
+      List<TypeBuilder>? directInterfaceBuilders =
+          ignoreFunction(classBuilder.interfaceBuilders);
       if (classBuilder.isMixinApplication) {
         if (directInterfaceBuilders == null) {
           directInterfaceBuilders = <TypeBuilder>[
@@ -99,15 +101,13 @@
       }
 
       List<Supertype> superclassInterfaces = supernode.interfaces;
-      // ignore: unnecessary_null_comparison
-      if (superclassInterfaces != null) {
+      if (superclassInterfaces.isNotEmpty) {
         superclassInterfaces = substSupertypes(supertype, superclassInterfaces);
       }
 
       if (directInterfaceBuilders != null) {
         Map<Class, Supertype> interfaces = {};
-        // ignore: unnecessary_null_comparison
-        if (superclassInterfaces != null) {
+        if (superclassInterfaces.isNotEmpty) {
           for (int i = 0; i < superclassInterfaces.length; i++) {
             addInterface(interfaces, superclasses, superclassInterfaces[i]);
           }
@@ -115,39 +115,35 @@
 
         for (int i = 0; i < directInterfaceBuilders.length; i++) {
           Supertype? directInterface = directInterfaceBuilders[i]
-              .buildSupertype(classBuilder.library, classBuilder.charOffset,
-                  classBuilder.fileUri);
+              .buildSupertype(classBuilder.libraryBuilder);
           if (directInterface != null) {
             addInterface(interfaces, superclasses, directInterface);
             ClassHierarchyNode interfaceNode =
                 hierarchy.getNodeFromClass(directInterface.classNode);
-            // ignore: unnecessary_null_comparison
-            if (interfaceNode != null) {
-              if (maxInheritancePath < interfaceNode.maxInheritancePath + 1) {
-                maxInheritancePath = interfaceNode.maxInheritancePath + 1;
-              }
+            (interfaceNodes ??= []).add(interfaceNode);
 
+            if (maxInheritancePath < interfaceNode.maxInheritancePath + 1) {
+              maxInheritancePath = interfaceNode.maxInheritancePath + 1;
+            }
+
+            List<Supertype> types =
+                substSupertypes(directInterface, interfaceNode.superclasses);
+            for (int i = 0; i < types.length; i++) {
+              addInterface(interfaces, superclasses, types[i]);
+            }
+            if (interfaceNode.interfaces.isNotEmpty) {
               List<Supertype> types =
-                  substSupertypes(directInterface, interfaceNode.superclasses);
+                  substSupertypes(directInterface, interfaceNode.interfaces);
               for (int i = 0; i < types.length; i++) {
                 addInterface(interfaces, superclasses, types[i]);
               }
-              // ignore: unnecessary_null_comparison
-              if (interfaceNode.interfaces != null) {
-                List<Supertype> types =
-                    substSupertypes(directInterface, interfaceNode.interfaces);
-                for (int i = 0; i < types.length; i++) {
-                  addInterface(interfaces, superclasses, types[i]);
-                }
-              }
             }
           }
         }
         interfacesList = interfaces.values.toList();
-        // ignore: unnecessary_null_comparison
-      } else if (superclassInterfaces != null &&
-          !classBuilder.library.isNonNullableByDefault &&
-          supernode.classBuilder.library.isNonNullableByDefault) {
+      } else if (superclassInterfaces.isNotEmpty &&
+          !classBuilder.libraryBuilder.isNonNullableByDefault &&
+          supernode.classBuilder.libraryBuilder.isNonNullableByDefault) {
         Map<Class, Supertype> interfaces = {};
         for (int i = 0; i < superclassInterfaces.length; i++) {
           addInterface(interfaces, superclasses, superclassInterfaces[i]);
@@ -168,13 +164,8 @@
       }
     }
 
-    return new ClassHierarchyNode(
-        classBuilder,
-        supernode,
-        directInterfaceBuilders,
-        superclasses,
-        interfacesList,
-        maxInheritancePath);
+    return new ClassHierarchyNode(classBuilder, supernode, mixedInNode,
+        interfaceNodes, superclasses, interfacesList, maxInheritancePath);
   }
 
   Supertype recordSupertype(Supertype supertype) {
@@ -235,7 +226,7 @@
       List<Supertype> superclasses, Supertype type) {
     // ignore: unnecessary_null_comparison
     if (type == null) return null;
-    if (!classBuilder.library.isNonNullableByDefault) {
+    if (!classBuilder.libraryBuilder.isNonNullableByDefault) {
       type = legacyErasureSupertype(type);
     }
     ClassHierarchyNode node = hierarchy.getNodeFromClass(type.classNode);
@@ -246,7 +237,7 @@
     Supertype? superclass = depth < myDepth ? superclasses[depth] : null;
     if (superclass != null && superclass.classNode == type.classNode) {
       // This is a potential conflict.
-      if (classBuilder.library.isNonNullableByDefault) {
+      if (classBuilder.libraryBuilder.isNonNullableByDefault) {
         superclass = nnbdTopMergeSupertype(
             hierarchy.coreTypes,
             normSupertype(hierarchy.coreTypes, superclass),
@@ -265,7 +256,7 @@
       Supertype? interface = interfaces[type.classNode];
       if (interface != null) {
         // This is a potential conflict.
-        if (classBuilder.library.isNonNullableByDefault) {
+        if (classBuilder.libraryBuilder.isNonNullableByDefault) {
           interface = nnbdTopMergeSupertype(
               hierarchy.coreTypes,
               normSupertype(hierarchy.coreTypes, interface),
@@ -284,12 +275,16 @@
     interfaces[type.classNode] = type;
   }
 
-  void inferMixinApplication() {
+  ClassHierarchyNode? inferMixinApplication() {
     Class cls = classBuilder.cls;
     Supertype? mixedInType = cls.mixedInType;
-    if (mixedInType == null) return;
+    if (mixedInType == null) return null;
+    ClassHierarchyNode? mixinNode =
+        hierarchy.getNodeFromClass(mixedInType.classNode);
     List<DartType> typeArguments = mixedInType.typeArguments;
-    if (typeArguments.isEmpty || typeArguments.first is! UnknownType) return;
+    if (typeArguments.isEmpty || typeArguments.first is! UnknownType) {
+      return mixinNode;
+    }
     new BuilderMixinInferrer(
             classBuilder,
             hierarchy.coreTypes,
@@ -303,6 +298,7 @@
     NamedTypeBuilder mixedInTypeBuilder =
         classBuilder.mixedInTypeBuilder as NamedTypeBuilder;
     mixedInTypeBuilder.arguments = inferredArguments;
+    return mixinNode;
   }
 
   /// The class Function from dart:core is supposed to be ignored when used as
@@ -329,9 +325,17 @@
   /// The class corresponding to this hierarchy node.
   final ClassBuilder classBuilder;
 
-  final ClassHierarchyNode? supernode;
+  /// The [ClassHierarchyNode] for the direct super class of [classBuilder], or
+  /// `null` if this is `Object`.
+  final ClassHierarchyNode? directSuperClassNode;
 
-  final List<TypeBuilder>? directInterfaceBuilders;
+  /// The [ClassHierarchyNode] for the mixed in class, if [classBuilder] is a
+  /// mixin application, or `null` otherwise;
+  final ClassHierarchyNode? mixedInNode;
+
+  /// The [ClassHierarchyNode]s for the direct super interfaces of
+  /// [classBuilder].
+  final List<ClassHierarchyNode>? directInterfaceNodes;
 
   /// All superclasses of [classBuilder] excluding itself. The classes are
   /// sorted by depth from the root (Object) in ascending order.
@@ -348,12 +352,18 @@
 
   ClassHierarchyNode(
       this.classBuilder,
-      this.supernode,
-      this.directInterfaceBuilders,
+      this.directSuperClassNode,
+      this.mixedInNode,
+      this.directInterfaceNodes,
       this.superclasses,
       this.interfaces,
       this.maxInheritancePath);
 
+  /// Returns `true` if [classBuilder] is a mixin application.
+  ///
+  /// If `true`, [mixedInNode] is non-null.
+  bool get isMixinApplication => mixedInNode != null;
+
   /// Returns a list of all supertypes of [classBuilder], including this node.
   List<ClassHierarchyNode> computeAllSuperNodes(
       ClassHierarchyBuilder hierarchy) {
@@ -390,8 +400,7 @@
       sb.writeln();
       depth++;
     }
-    // ignore: unnecessary_null_comparison
-    if (interfaces != null) {
+    if (interfaces.isNotEmpty) {
       sb.write("  interfaces:");
       bool first = true;
       for (Supertype i in interfaces) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
index e4a2839..49448b4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/members_node.dart
@@ -27,6 +27,7 @@
         messageDeclaredMemberConflictsWithInheritedMember,
         messageDeclaredMemberConflictsWithInheritedMemberCause,
         messageDeclaredMemberConflictsWithOverriddenMembersCause,
+        messageEnumAbstractMember,
         messageInheritedMembersConflict,
         messageInheritedMembersConflictCause1,
         messageInheritedMembersConflictCause2,
@@ -37,6 +38,7 @@
         templateCantInferTypeDueToNoCombinedSignature,
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
+        templateInstanceAndSynthesizedStaticConflict,
         templateMissingImplementationCause,
         templateMissingImplementationNotAbstract;
 import '../../names.dart' show noSuchMethodName;
@@ -70,7 +72,7 @@
   ClassBuilder get classBuilder => _hierarchyNode.classBuilder;
 
   bool get shouldModifyKernel =>
-      classBuilder.library.loader == hierarchy.loader;
+      classBuilder.libraryBuilder.loader == hierarchy.loader;
 
   ClassMember? checkInheritanceConflict(ClassMember a, ClassMember b) {
     if (a.isStatic || a.isProperty != b.isProperty) {
@@ -373,7 +375,7 @@
       ClassBuilder classBuilder,
       DartType? inferredType,
       DartType inheritedType) {
-    if (classBuilder.library.isNonNullableByDefault) {
+    if (classBuilder.libraryBuilder.isNonNullableByDefault) {
       if (inferredType == null) {
         return inheritedType;
       } else {
@@ -531,12 +533,23 @@
         staticMember = b;
         instanceMember = a;
       }
-      classBuilder.library.addProblem(messageStaticAndInstanceConflict,
-          staticMember.charOffset, name.length, staticMember.fileUri,
-          context: <LocatedMessage>[
-            messageStaticAndInstanceConflictCause.withLocation(
-                instanceMember.fileUri, instanceMember.charOffset, name.length)
-          ]);
+      if (!staticMember.isSynthesized) {
+        classBuilder.libraryBuilder.addProblem(messageStaticAndInstanceConflict,
+            staticMember.charOffset, name.length, staticMember.fileUri,
+            context: <LocatedMessage>[
+              messageStaticAndInstanceConflictCause.withLocation(
+                  instanceMember.fileUri,
+                  instanceMember.charOffset,
+                  name.length)
+            ]);
+      } else {
+        classBuilder.libraryBuilder.addProblem(
+            templateInstanceAndSynthesizedStaticConflict
+                .withArguments(staticMember.name.text),
+            instanceMember.charOffset,
+            name.length,
+            instanceMember.fileUri);
+      }
     } else {
       // This message can be reported twice (when merging localMembers with
       // classSetters, or localSetters with classMembers). By ensuring that
@@ -553,7 +566,7 @@
         existing = b;
         duplicate = a;
       }
-      classBuilder.library.addProblem(
+      classBuilder.libraryBuilder.addProblem(
           templateDuplicatedDeclaration.withArguments(name),
           duplicate.charOffset,
           name.length,
@@ -566,12 +579,12 @@
   }
 
   ClassMembersNode build() {
-    ClassMembersNode? supernode = _hierarchyNode.supernode != null
-        ? _membersBuilder
-            .getNodeFromClassBuilder(_hierarchyNode.supernode!.classBuilder)
+    ClassMembersNode? supernode = _hierarchyNode.directSuperClassNode != null
+        ? _membersBuilder.getNodeFromClassBuilder(
+            _hierarchyNode.directSuperClassNode!.classBuilder)
         : null;
-    List<TypeBuilder>? directInterfaceBuilders =
-        _hierarchyNode.directInterfaceBuilders;
+    List<ClassHierarchyNode>? interfaceNodes =
+        _hierarchyNode.directInterfaceNodes;
 
     /// Set to `true` if the class needs interfaces, that is, if it has any
     /// members where the interface member is different from its corresponding
@@ -770,18 +783,16 @@
         implement(supernode.interfaceSetterMap ?? supernode.classSetterMap);
       }
 
-      if (directInterfaceBuilders != null) {
-        for (int i = 0; i < directInterfaceBuilders.length; i++) {
+      if (interfaceNodes != null) {
+        for (int i = 0; i < interfaceNodes.length; i++) {
           ClassMembersNode? interfaceNode = _membersBuilder
-              .getNodeFromTypeBuilder(directInterfaceBuilders[i]);
-          if (interfaceNode != null) {
-            hasInterfaces = true;
+              .getNodeFromClassBuilder(interfaceNodes[i].classBuilder);
+          hasInterfaces = true;
 
-            implement(interfaceNode.interfaceMemberMap ??
-                interfaceNode.classMemberMap);
-            implement(interfaceNode.interfaceSetterMap ??
-                interfaceNode.classSetterMap);
-          }
+          implement(
+              interfaceNode.interfaceMemberMap ?? interfaceNode.classMemberMap);
+          implement(
+              interfaceNode.interfaceSetterMap ?? interfaceNode.classSetterMap);
         }
       }
     }
@@ -939,8 +950,8 @@
     ///    }
     ///
     bool needsMemberSignatureFor(ClassMember classMember) {
-      return !classBuilder.library.isNonNullableByDefault &&
-          classMember.classBuilder.library.isNonNullableByDefault;
+      return !classBuilder.libraryBuilder.isNonNullableByDefault &&
+          classMember.classBuilder.libraryBuilder.isNonNullableByDefault;
     }
 
     memberMap.forEach((Name name, Tuple tuple) {
@@ -2340,15 +2351,20 @@
   void reportMissingMembers(List<ClassMember> abstractMembers) {
     Map<String, LocatedMessage> contextMap = <String, LocatedMessage>{};
     for (ClassMember declaration in unfoldDeclarations(abstractMembers)) {
-      if (isNameVisibleIn(declaration.name, classBuilder.library)) {
-        String name = declaration.fullNameForErrors;
-        String className = declaration.classBuilder.fullNameForErrors;
-        String displayName =
-            declaration.isSetter ? "$className.$name=" : "$className.$name";
-        contextMap[displayName] = templateMissingImplementationCause
-            .withArguments(displayName)
-            .withLocation(
-                declaration.fileUri, declaration.charOffset, name.length);
+      if (isNameVisibleIn(declaration.name, classBuilder.libraryBuilder)) {
+        if (classBuilder.isEnum && declaration.classBuilder == classBuilder) {
+          classBuilder.addProblem(messageEnumAbstractMember,
+              declaration.charOffset, declaration.name.text.length);
+        } else {
+          String name = declaration.fullNameForErrors;
+          String className = declaration.classBuilder.fullNameForErrors;
+          String displayName =
+              declaration.isSetter ? "$className.$name=" : "$className.$name";
+          contextMap[displayName] = templateMissingImplementationCause
+              .withArguments(displayName)
+              .withLocation(
+                  declaration.fileUri, declaration.charOffset, name.length);
+        }
       }
     }
     if (contextMap.isEmpty) return;
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
index 792c92f..8294c53 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_field_type.dart
@@ -5,6 +5,7 @@
 library fasta.implicit_type;
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
+import 'package:front_end/src/fasta/source/source_enum_builder.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/src/assumptions.dart';
 import 'package:kernel/src/legacy_erasure.dart';
@@ -13,6 +14,7 @@
 import '../constant_context.dart';
 import '../fasta_codes.dart';
 import '../problems.dart' show unsupported;
+import '../builder/builder.dart';
 import '../source/source_field_builder.dart';
 import '../type_inference/type_inferrer.dart';
 import '../type_inference/type_schema.dart';
@@ -105,7 +107,7 @@
   @override
   DartType computeType() {
     if (isStarted) {
-      fieldBuilder.library.addProblem(
+      fieldBuilder.libraryBuilder.addProblem(
           templateCantInferTypeDueToCircularity
               .withArguments(fieldBuilder.name),
           fieldBuilder.charOffset,
@@ -115,10 +117,11 @@
     }
     isStarted = true;
     DartType? inferredType;
+    Builder? parent = fieldBuilder.parent;
     if (_overriddenFields != null) {
       for (ImplicitFieldType overridden in _overriddenFields!) {
         DartType overriddenType = overridden.inferType();
-        if (!fieldBuilder.library.isNonNullableByDefault) {
+        if (!fieldBuilder.libraryBuilder.isNonNullableByDefault) {
           overriddenType = legacyErasure(overriddenType);
         }
         if (inferredType == null) {
@@ -128,20 +131,24 @@
         }
       }
       return inferredType!;
+    } else if (parent is SourceEnumBuilder &&
+        parent.elementBuilders.contains(fieldBuilder)) {
+      inferredType = parent.buildElement(
+          fieldBuilder, parent.libraryBuilder.loader.coreTypes);
     } else if (initializerToken != null) {
       InterfaceType? enclosingClassThisType = fieldBuilder.classBuilder == null
           ? null
-          : fieldBuilder.library.loader.typeInferenceEngine.coreTypes
+          : fieldBuilder.libraryBuilder.loader.typeInferenceEngine.coreTypes
               .thisInterfaceType(fieldBuilder.classBuilder!.cls,
-                  fieldBuilder.library.library.nonNullable);
+                  fieldBuilder.libraryBuilder.library.nonNullable);
       TypeInferrer typeInferrer = fieldBuilder
-          .library.loader.typeInferenceEngine
+          .libraryBuilder.loader.typeInferenceEngine
           .createTopLevelTypeInferrer(
               fieldBuilder.fileUri,
               enclosingClassThisType,
-              fieldBuilder.library,
+              fieldBuilder.libraryBuilder,
               fieldBuilder.dataForTesting?.inferenceData);
-      BodyBuilder bodyBuilder = fieldBuilder.library.loader
+      BodyBuilder bodyBuilder = fieldBuilder.libraryBuilder.loader
           .createBodyBuilderForField(fieldBuilder, typeInferrer);
       bodyBuilder.constantContext = fieldBuilder.isConst
           ? ConstantContext.inferred
@@ -172,7 +179,7 @@
     if (_overriddenFields != null) {
       for (ImplicitFieldType overridden in _overriddenFields!) {
         DartType overriddenType = overridden.inferType();
-        if (!fieldBuilder.library.isNonNullableByDefault) {
+        if (!fieldBuilder.libraryBuilder.isNonNullableByDefault) {
           overriddenType = legacyErasure(overriddenType);
         }
         if (type != overriddenType) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index cc5d497..f7b6898 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -78,7 +78,7 @@
         fileOffset = node.fileOffset;
       } else {
         // Otherwise use the library file uri with no offset.
-        uri = inferrer.library.fileUri;
+        uri = inferrer.libraryBuilder.fileUri;
         fileOffset = TreeNode.noOffset;
       }
     }
@@ -127,7 +127,8 @@
         resultType = const DynamicType();
         break;
       case DynamicAccessKind.Never:
-        resultType = NeverType.fromNullability(inferrer.library.nonNullable);
+        resultType =
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable);
         break;
       case DynamicAccessKind.Invalid:
       case DynamicAccessKind.Unresolved:
@@ -207,8 +208,8 @@
   ExpressionInferenceResult visitStaticTearOff(
       StaticTearOff node, DartType typeContext) {
     inferrer.ensureMemberType(node.target);
-    DartType type =
-        node.target.function.computeFunctionType(inferrer.library.nonNullable);
+    DartType type = node.target.function
+        .computeFunctionType(inferrer.libraryBuilder.nonNullable);
     return inferrer.instantiateTearOff(type, typeContext, node);
   }
 
@@ -234,16 +235,16 @@
   ExpressionInferenceResult visitConstructorTearOff(
       ConstructorTearOff node, DartType typeContext) {
     inferrer.ensureMemberType(node.target);
-    DartType type =
-        node.target.function!.computeFunctionType(inferrer.library.nonNullable);
+    DartType type = node.target.function!
+        .computeFunctionType(inferrer.libraryBuilder.nonNullable);
     return inferrer.instantiateTearOff(type, typeContext, node);
   }
 
   @override
   ExpressionInferenceResult visitRedirectingFactoryTearOff(
       RedirectingFactoryTearOff node, DartType typeContext) {
-    DartType type =
-        node.target.function.computeFunctionType(inferrer.library.nonNullable);
+    DartType type = node.target.function
+        .computeFunctionType(inferrer.libraryBuilder.nonNullable);
     return inferrer.instantiateTearOff(type, typeContext, node);
   }
 
@@ -470,7 +471,8 @@
   ExpressionInferenceResult visitIntLiteral(
       IntLiteral node, DartType typeContext) {
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.intRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.intRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
@@ -497,7 +499,7 @@
   StatementInferenceResult visitAssertStatement(AssertStatement node) {
     inferrer.flowAnalysis.assert_begin();
     InterfaceType expectedType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
@@ -561,7 +563,7 @@
     List<Statement>? result = _visitStatements<Statement>(node.statements);
     if (result != null) {
       Block block = new Block(result)..fileOffset = node.fileOffset;
-      inferrer.library.loader.dataForTesting?.registerAlias(node, block);
+      inferrer.libraryBuilder.loader.dataForTesting?.registerAlias(node, block);
       return new StatementInferenceResult.single(block);
     } else {
       return const StatementInferenceResult();
@@ -573,7 +575,8 @@
       BoolLiteral node, DartType typeContext) {
     inferrer.flowAnalysis.booleanLiteral(node, node.value);
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
@@ -656,7 +659,7 @@
       ConditionalExpression node, DartType typeContext) {
     inferrer.flowAnalysis.conditional_conditionBegin();
     InterfaceType expectedType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
@@ -682,7 +685,7 @@
     inferrer.flowAnalysis.conditional_end(node, node.otherwise);
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(thenResult.inferredType,
-            otherwiseResult.inferredType, inferrer.library.library);
+            otherwiseResult.inferredType, inferrer.libraryBuilder.library);
     node.staticType = inferredType;
     return new ExpressionInferenceResult(inferredType, node);
   }
@@ -693,12 +696,12 @@
     inferrer.inferConstructorParameterTypes(node.target);
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
     FunctionType functionType = node.target.function
-        .computeThisFunctionType(inferrer.library.nonNullable);
+        .computeThisFunctionType(inferrer.libraryBuilder.nonNullable);
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, functionType, node.arguments as ArgumentsImpl,
         isConst: node.isConst, staticTarget: node.target);
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (!hadExplicitTypeArguments) {
         library.checkBoundsInConstructorInvocation(
             node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
@@ -720,9 +723,10 @@
       ExtensionTearOff node, DartType typeContext) {
     // ignore: unnecessary_null_comparison
     FunctionType calleeType = node.target != null
-        ? node.target.function.computeFunctionType(inferrer.library.nonNullable)
+        ? node.target.function
+            .computeFunctionType(inferrer.libraryBuilder.nonNullable)
         : new FunctionType(
-            [], const DynamicType(), inferrer.library.nonNullable);
+            [], const DynamicType(), inferrer.libraryBuilder.nonNullable);
     TypeArgumentsInfo typeArgumentsInfo = getTypeArgumentsInfo(node.arguments);
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
@@ -731,7 +735,7 @@
         new StaticInvocation(node.target, node.arguments);
     // ignore: unnecessary_null_comparison
     if (!inferrer.isTopLevel && node.target != null) {
-      inferrer.library.checkBoundsInStaticInvocation(
+      inferrer.libraryBuilder.checkBoundsInStaticInvocation(
           replacement,
           inferrer.typeSchemaEnvironment,
           inferrer.helper!.uri,
@@ -947,7 +951,7 @@
     }
     inferrer.flowAnalysis.doStatement_conditionBegin();
     InterfaceType boolType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, boolType, !inferrer.isTopLevel,
         isVoidAllowed: true);
@@ -962,7 +966,8 @@
   ExpressionInferenceResult visitDoubleLiteral(
       DoubleLiteral node, DartType typeContext) {
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.doubleRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.doubleRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
@@ -985,7 +990,7 @@
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
 
     FunctionType functionType = node.target.function
-        .computeThisFunctionType(inferrer.library.nonNullable);
+        .computeThisFunctionType(inferrer.libraryBuilder.nonNullable);
 
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, functionType, node.arguments as ArgumentsImpl,
@@ -993,7 +998,7 @@
     node.hasBeenInferred = true;
     Expression resultNode = node;
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (!hadExplicitTypeArguments) {
         library.checkBoundsInFactoryInvocation(
             node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
@@ -1016,7 +1021,7 @@
     Typedef typedef = node.typeAliasBuilder.typedef;
     FunctionType calleeType = node.target.function
         .computeAliasedConstructorFunctionType(
-            typedef, inferrer.library.library);
+            typedef, inferrer.libraryBuilder.library);
     calleeType = replaceReturnType(calleeType, calleeType.returnType.unalias);
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
@@ -1040,7 +1045,8 @@
     assert(getExplicitTypeArguments(node.arguments) == null);
     Typedef typedef = node.typeAliasBuilder.typedef;
     FunctionType calleeType = node.target.function
-        .computeAliasedFactoryFunctionType(typedef, inferrer.library.library);
+        .computeAliasedFactoryFunctionType(
+            typedef, inferrer.libraryBuilder.library);
     calleeType = replaceReturnType(calleeType, calleeType.returnType.unalias);
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
@@ -1149,7 +1155,7 @@
         ? inferrer.coreTypes.streamClass
         : inferrer.coreTypes.iterableClass;
     DartType context = inferrer.wrapType(
-        elementType, iterableClass, inferrer.library.nonNullable);
+        elementType, iterableClass, inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult iterableResult = inferrer
         .inferExpression(iterable, context, typeNeeded, isVoidAllowed: false);
     DartType iterableType = iterableResult.inferredType;
@@ -1157,8 +1163,8 @@
     DartType inferredExpressionType =
         inferrer.resolveTypeParameter(iterableType);
     iterable = inferrer.ensureAssignable(
-        inferrer.wrapType(
-            const DynamicType(), iterableClass, inferrer.library.nonNullable),
+        inferrer.wrapType(const DynamicType(), iterableClass,
+            inferrer.libraryBuilder.nonNullable),
         inferredExpressionType,
         iterable,
         errorTemplate: templateForInLoopTypeNotIterable,
@@ -1297,7 +1303,8 @@
         isAsync: node.isAsync)
       ..fileOffset = node.fileOffset
       ..bodyOffset = node.bodyOffset;
-    inferrer.library.loader.dataForTesting?.registerAlias(node, replacement);
+    inferrer.libraryBuilder.loader.dataForTesting
+        ?.registerAlias(node, replacement);
     return new StatementInferenceResult.single(replacement);
   }
 
@@ -1342,7 +1349,7 @@
     inferrer.flowAnalysis.for_conditionBegin(node);
     if (node.condition != null) {
       InterfaceType expectedType =
-          inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+          inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
       ExpressionInferenceResult conditionResult = inferrer.inferExpression(
           node.condition!, expectedType, !inferrer.isTopLevel,
           isVoidAllowed: true);
@@ -1389,8 +1396,8 @@
       inferrer.dataForTesting!.typeInferenceResult.inferredVariableTypes[node] =
           inferredType.returnType;
     }
-    inferrer.library.checkBoundsInFunctionNode(node.function,
-        inferrer.typeSchemaEnvironment, inferrer.library.fileUri);
+    inferrer.libraryBuilder.checkBoundsInFunctionNode(node.function,
+        inferrer.typeSchemaEnvironment, inferrer.libraryBuilder.fileUri);
     node.variable.type = inferredType;
     inferrer.flowAnalysis.functionExpression_end();
     return const StatementInferenceResult();
@@ -1408,8 +1415,8 @@
     }
     // In anonymous functions the return type isn't declared, so
     // it shouldn't be checked.
-    inferrer.library.checkBoundsInFunctionNode(
-        node.function, inferrer.typeSchemaEnvironment, inferrer.library.fileUri,
+    inferrer.libraryBuilder.checkBoundsInFunctionNode(node.function,
+        inferrer.typeSchemaEnvironment, inferrer.libraryBuilder.fileUri,
         skipReturnType: true);
     inferrer.flowAnalysis.functionExpression_end();
     return new ExpressionInferenceResult(inferredType, node);
@@ -1422,7 +1429,7 @@
             inferrer.thisType!.classNode, node.target.enclosingClass)!);
     FunctionType functionType = replaceReturnType(
         substitution.substituteType(node.target.function
-            .computeThisFunctionType(inferrer.library.nonNullable)
+            .computeThisFunctionType(inferrer.libraryBuilder.nonNullable)
             .withoutTypeParameters) as FunctionType,
         inferrer.thisType!);
     InvocationInferenceResult invocationInferenceResult =
@@ -1469,7 +1476,7 @@
     DartType nonNullableLhsType = originalLhsType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableLhsType, rhsResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
     Expression replacement;
     if (left is ThisExpression) {
       replacement = left;
@@ -1479,7 +1486,7 @@
       Expression equalsNull = inferrer.createEqualsNull(
           lhsResult.expression.fileOffset, createVariableGet(variable));
       VariableGet variableGet = createVariableGet(variable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableLhsType, originalLhsType)) {
         variableGet.promotedType = nonNullableLhsType;
       }
@@ -1496,7 +1503,7 @@
   StatementInferenceResult visitIfStatement(IfStatement node) {
     inferrer.flowAnalysis.ifStatement_conditionBegin();
     InterfaceType expectedType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
@@ -1528,8 +1535,8 @@
       if (doubleValue != null) {
         Expression replacement = new DoubleLiteral(doubleValue)
           ..fileOffset = node.fileOffset;
-        DartType inferredType =
-            inferrer.coreTypes.doubleRawType(inferrer.library.nonNullable);
+        DartType inferredType = inferrer.coreTypes
+            .doubleRawType(inferrer.libraryBuilder.nonNullable);
         return new ExpressionInferenceResult(inferredType, replacement);
       }
     }
@@ -1539,7 +1546,7 @@
       return new ExpressionInferenceResult(const DynamicType(), error);
     }
     DartType inferredType =
-        inferrer.coreTypes.intRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.intRawType(inferrer.libraryBuilder.nonNullable);
     return new ExpressionInferenceResult(inferredType, node);
   }
 
@@ -1550,8 +1557,8 @@
       if (doubleValue != null) {
         Expression replacement = new DoubleLiteral(doubleValue)
           ..fileOffset = node.fileOffset;
-        DartType inferredType =
-            inferrer.coreTypes.doubleRawType(inferrer.library.nonNullable);
+        DartType inferredType = inferrer.coreTypes
+            .doubleRawType(inferrer.libraryBuilder.nonNullable);
         return new ExpressionInferenceResult(inferredType, replacement);
       }
     }
@@ -1571,7 +1578,7 @@
     }
     Expression replacement = new IntLiteral(intValue);
     DartType inferredType =
-        inferrer.coreTypes.intRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.intRawType(inferrer.libraryBuilder.nonNullable);
     return new ExpressionInferenceResult(inferredType, replacement);
   }
 
@@ -1604,7 +1611,8 @@
     inferrer.flowAnalysis
         .isExpression_end(node, node.operand, /*isNot:*/ false, node.type);
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
@@ -1665,7 +1673,7 @@
           element.expression,
           new InterfaceType(
               inferrer.coreTypes.iterableClass,
-              inferrer.library.nullableIfTrue(element.isNullAware),
+              inferrer.libraryBuilder.nullableIfTrue(element.isNullAware),
               <DartType>[inferredTypeArgument]),
           inferenceNeeded || typeChecksNeeded,
           isVoidAllowed: true);
@@ -1781,7 +1789,7 @@
     } else if (element is IfElement) {
       inferrer.flowAnalysis.ifStatement_conditionBegin();
       DartType boolType =
-          inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+          inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
       ExpressionInferenceResult conditionResult = inferrer.inferExpression(
           element.condition, boolType, typeChecksNeeded,
           isVoidAllowed: false);
@@ -1816,7 +1824,7 @@
               : inferrer.typeSchemaEnvironment.getStandardUpperBound(
                   thenResult.inferredType,
                   otherwiseResult.inferredType,
-                  inferrer.library.library),
+                  inferrer.libraryBuilder.library),
           element);
     } else if (element is ForElement) {
       // TODO(johnniwinther): Use _visitStatements instead.
@@ -1862,7 +1870,7 @@
       if (element.condition != null) {
         ExpressionInferenceResult conditionResult = inferrer.inferExpression(
             element.condition!,
-            inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
             inferenceNeeded || typeChecksNeeded,
             isVoidAllowed: false);
         element.condition = conditionResult.expression..parent = element;
@@ -1968,7 +1976,7 @@
       if (spreadType is DynamicType) {
         Expression expression = inferrer.ensureAssignable(
             inferrer.coreTypes.iterableRawType(
-                inferrer.library.nullableIfTrue(item.isNullAware)),
+                inferrer.libraryBuilder.nullableIfTrue(item.isNullAware)),
             spreadType,
             item.expression);
         item.expression = expression..parent = item;
@@ -1984,7 +1992,7 @@
       if (item.condition != null) {
         DartType conditionType = inferredConditionTypes[item.condition]!;
         Expression condition = inferrer.ensureAssignable(
-            inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
             conditionType,
             item.condition!);
         item.condition = condition..parent = item;
@@ -2004,7 +2012,7 @@
       ListLiteral node, DartType typeContext) {
     Class listClass = inferrer.coreTypes.listClass;
     InterfaceType listType = inferrer.coreTypes
-        .thisInterfaceType(listClass, inferrer.library.nonNullable);
+        .thisInterfaceType(listClass, inferrer.libraryBuilder.nonNullable);
     List<DartType>? inferredTypes;
     DartType inferredTypeArgument;
     List<DartType>? formalTypes;
@@ -2028,7 +2036,7 @@
           null,
           typeContext,
           inferredTypes,
-          inferrer.library.library,
+          inferrer.libraryBuilder.library,
           isConst: node.isConst);
       inferredTypeArgument = inferredTypes[0];
       if (inferrer.dataForTesting != null) {
@@ -2062,7 +2070,7 @@
           actualTypes,
           typeContext,
           inferredTypes!,
-          inferrer.library.library);
+          inferrer.libraryBuilder.library);
       inferredTypeArgument = inferredTypes[0];
       inferrer.instrumentation?.record(
           inferrer.uriForInstrumentation,
@@ -2078,9 +2086,9 @@
       }
     }
     DartType inferredType = new InterfaceType(
-        listClass, inferrer.library.nonNullable, [inferredTypeArgument]);
+        listClass, inferrer.libraryBuilder.nonNullable, [inferredTypeArgument]);
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (inferenceNeeded) {
         library.checkBoundsInListLiteral(
             node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
@@ -2095,7 +2103,7 @@
   ExpressionInferenceResult visitLogicalExpression(
       LogicalExpression node, DartType typeContext) {
     InterfaceType boolType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     inferrer.flowAnalysis.logicalBinaryOp_begin();
     ExpressionInferenceResult leftResult = inferrer.inferExpression(
         node.left, boolType, !inferrer.isTopLevel,
@@ -2364,16 +2372,16 @@
       // TODO(dmitryas):  Handle the case of an ambiguous Set.
       entry.entryType = new InterfaceType(
           mapEntryClass!,
-          inferrer.library.nonNullable,
+          inferrer.libraryBuilder.nonNullable,
           <DartType>[actualKeyType, actualValueType]);
 
       bool isMap = inferrer.typeSchemaEnvironment.isSubtypeOf(
           spreadType,
-          inferrer.coreTypes.mapRawType(inferrer.library.nullable),
+          inferrer.coreTypes.mapRawType(inferrer.libraryBuilder.nullable),
           SubtypeCheckMode.withNullabilities);
       bool isIterable = inferrer.typeSchemaEnvironment.isSubtypeOf(
           spreadType,
-          inferrer.coreTypes.iterableRawType(inferrer.library.nullable),
+          inferrer.coreTypes.iterableRawType(inferrer.libraryBuilder.nullable),
           SubtypeCheckMode.withNullabilities);
       if (isMap && !isIterable) {
         mapSpreadOffset = entry.fileOffset;
@@ -2386,7 +2394,7 @@
     } else if (entry is IfMapEntry) {
       inferrer.flowAnalysis.ifStatement_conditionBegin();
       DartType boolType =
-          inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+          inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
       ExpressionInferenceResult conditionResult = inferrer.inferExpression(
           entry.condition, boolType, typeChecksNeeded,
           isVoidAllowed: false);
@@ -2433,14 +2441,16 @@
         int length = actualTypes.length;
         actualTypes[length - 2] = inferrer.typeSchemaEnvironment
             .getStandardUpperBound(actualKeyType, actualTypes[length - 2],
-                inferrer.library.library);
+                inferrer.libraryBuilder.library);
         actualTypes[length - 1] = inferrer.typeSchemaEnvironment
             .getStandardUpperBound(actualValueType, actualTypes[length - 1],
-                inferrer.library.library);
+                inferrer.libraryBuilder.library);
         int lengthForSet = actualTypesForSet.length;
         actualTypesForSet[lengthForSet - 1] = inferrer.typeSchemaEnvironment
-            .getStandardUpperBound(actualTypeForSet,
-                actualTypesForSet[lengthForSet - 1], inferrer.library.library);
+            .getStandardUpperBound(
+                actualTypeForSet,
+                actualTypesForSet[lengthForSet - 1],
+                inferrer.libraryBuilder.library);
         entry.otherwise = otherwise..parent = entry;
       }
       inferrer.flowAnalysis.ifStatement_end(entry.otherwise != null);
@@ -2489,7 +2499,7 @@
       if (entry.condition != null) {
         ExpressionInferenceResult conditionResult = inferrer.inferExpression(
             entry.condition!,
-            inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
             inferenceNeeded || typeChecksNeeded,
             isVoidAllowed: false);
         entry.condition = conditionResult.expression..parent = entry;
@@ -2615,8 +2625,8 @@
       DartType? spreadType = inferredSpreadTypes[entry.expression];
       if (spreadType is DynamicType) {
         Expression expression = inferrer.ensureAssignable(
-            inferrer.coreTypes
-                .mapRawType(inferrer.library.nullableIfTrue(entry.isNullAware)),
+            inferrer.coreTypes.mapRawType(
+                inferrer.libraryBuilder.nullableIfTrue(entry.isNullAware)),
             spreadType,
             entry.expression);
         entry.expression = expression..parent = entry;
@@ -2634,7 +2644,7 @@
       if (entry.condition != null) {
         DartType conditionType = inferredConditionTypes[entry.condition]!;
         Expression condition = inferrer.ensureAssignable(
-            inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
             conditionType,
             entry.condition!);
         entry.condition = condition..parent = entry;
@@ -2657,7 +2667,7 @@
       MapLiteral node, DartType typeContext) {
     Class mapClass = inferrer.coreTypes.mapClass;
     InterfaceType mapType = inferrer.coreTypes
-        .thisInterfaceType(mapClass, inferrer.library.nonNullable);
+        .thisInterfaceType(mapClass, inferrer.libraryBuilder.nonNullable);
     List<DartType>? inferredTypes;
     DartType inferredKeyType;
     DartType inferredValueType;
@@ -2710,7 +2720,7 @@
           null,
           typeContext,
           inferredTypes,
-          inferrer.library.library,
+          inferrer.libraryBuilder.library,
           isConst: node.isConst);
       inferredKeyType = inferredTypes[0];
       inferredValueType = inferredTypes[1];
@@ -2735,12 +2745,12 @@
         spreadTypeContext = inferrer.typeSchemaEnvironment.getTypeAsInstanceOf(
             unfuturedTypeContext as InterfaceType,
             inferrer.coreTypes.iterableClass,
-            inferrer.library.library,
+            inferrer.libraryBuilder.library,
             inferrer.coreTypes)!;
       } else if (!typeContextIsIterable && typeContextIsMap) {
         spreadTypeContext = new InterfaceType(
             inferrer.coreTypes.mapClass,
-            inferrer.library.nonNullable,
+            inferrer.libraryBuilder.nonNullable,
             <DartType>[inferredKeyType, inferredValueType]);
       }
       for (int index = 0; index < node.entries.length; ++index) {
@@ -2774,7 +2784,7 @@
         List<Expression> setElements = <Expression>[];
         List<DartType> formalTypesForSet = <DartType>[];
         InterfaceType setType = inferrer.coreTypes.thisInterfaceType(
-            inferrer.coreTypes.setClass, inferrer.library.nonNullable);
+            inferrer.coreTypes.setClass, inferrer.libraryBuilder.nonNullable);
         for (int i = 0; i < node.entries.length; ++i) {
           setElements.add(convertToElement(node.entries[i], inferrer.helper,
               inferrer.assignedVariables.reassignInfo));
@@ -2789,17 +2799,17 @@
             null,
             typeContext,
             inferredTypesForSet,
-            inferrer.library.library,
+            inferrer.libraryBuilder.library,
             isConst: node.isConst);
         inferrer.typeSchemaEnvironment.inferGenericFunctionOrType(
-            inferrer.coreTypes.thisInterfaceType(
-                inferrer.coreTypes.setClass, inferrer.library.nonNullable),
+            inferrer.coreTypes.thisInterfaceType(inferrer.coreTypes.setClass,
+                inferrer.libraryBuilder.nonNullable),
             inferrer.coreTypes.setClass.typeParameters,
             formalTypesForSet,
             actualTypesForSet,
             typeContext,
             inferredTypesForSet,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
         DartType inferredTypeArgument = inferredTypesForSet[0];
         inferrer.instrumentation?.record(
             inferrer.uriForInstrumentation,
@@ -2822,7 +2832,7 @@
         }
 
         DartType inferredType = new InterfaceType(inferrer.coreTypes.setClass,
-            inferrer.library.nonNullable, inferredTypesForSet);
+            inferrer.libraryBuilder.nonNullable, inferredTypesForSet);
         return new ExpressionInferenceResult(inferredType, setLiteral);
       }
       if (canBeSet && canBeMap && node.entries.isNotEmpty) {
@@ -2832,7 +2842,7 @@
               messageCantDisambiguateNotEnoughInformation, node.fileOffset, 1);
         }
         return new ExpressionInferenceResult(
-            NeverType.fromNullability(inferrer.library.nonNullable),
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable),
             replacement);
       }
       if (!canBeSet && !canBeMap) {
@@ -2842,7 +2852,7 @@
               messageCantDisambiguateAmbiguousInformation, node.fileOffset, 1);
         }
         return new ExpressionInferenceResult(
-            NeverType.fromNullability(inferrer.library.nonNullable),
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable),
             replacement);
       }
       inferrer.typeSchemaEnvironment.inferGenericFunctionOrType(
@@ -2852,7 +2862,7 @@
           actualTypes,
           typeContext,
           inferredTypes!,
-          inferrer.library.library);
+          inferrer.libraryBuilder.library);
       inferredKeyType = inferredTypes[0];
       inferredValueType = inferredTypes[1];
       inferrer.instrumentation?.record(
@@ -2871,10 +2881,12 @@
         node.entries[index] = entry..parent = node;
       }
     }
-    DartType inferredType = new InterfaceType(mapClass,
-        inferrer.library.nonNullable, [inferredKeyType, inferredValueType]);
+    DartType inferredType = new InterfaceType(
+        mapClass,
+        inferrer.libraryBuilder.nonNullable,
+        [inferredKeyType, inferredValueType]);
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       // Either both [_declaredKeyType] and [_declaredValueType] are omitted or
       // none of them, so we may just check one.
       if (inferenceNeeded) {
@@ -2938,7 +2950,7 @@
   @override
   ExpressionInferenceResult visitNot(Not node, DartType typeContext) {
     InterfaceType boolType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult operandResult =
         inferrer.inferExpression(node.operand, boolType, !inferrer.isTopLevel);
     Expression operand = inferrer
@@ -3213,7 +3225,7 @@
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(
-            nonNullableReadType, writeType, inferrer.library.library);
+            nonNullableReadType, writeType, inferrer.libraryBuilder.library);
 
     Expression replacement;
     if (node.forEffect) {
@@ -3237,7 +3249,7 @@
       Expression equalsNull = inferrer.createEqualsNull(
           node.fileOffset, createVariableGet(readVariable));
       VariableGet variableGet = createVariableGet(readVariable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
         variableGet.promotedType = nonNullableReadType;
       }
@@ -3273,7 +3285,7 @@
     DartType nonNullableReadType = originalReadType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableReadType, writeResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
 
     Expression replacement;
     if (node.forEffect) {
@@ -3297,7 +3309,7 @@
       Expression equalsNull = inferrer.createEqualsNull(
           node.fileOffset, createVariableGet(readVariable));
       VariableGet variableGet = createVariableGet(readVariable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, originalReadType)) {
         variableGet.promotedType = nonNullableReadType;
       }
@@ -3663,7 +3675,7 @@
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableReadType, valueResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
 
     VariableDeclaration? valueVariable;
     Expression? returnedValue;
@@ -3738,7 +3750,7 @@
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet variableGet = createVariableGet(readVariable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
         variableGet.promotedType = nonNullableReadType;
       }
@@ -3840,7 +3852,7 @@
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableReadType, valueResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
 
     VariableDeclaration? valueVariable;
     Expression? returnedValue;
@@ -3904,7 +3916,7 @@
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet readVariableGet = createVariableGet(readVariable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
         readVariableGet.promotedType = nonNullableReadType;
       }
@@ -4012,7 +4024,7 @@
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableReadType, valueResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
 
     VariableDeclaration? valueVariable;
     Expression? returnedValue;
@@ -4069,7 +4081,7 @@
       VariableDeclaration writeVariable =
           createVariable(write, const VoidType());
       VariableGet readVariableGet = createVariableGet(readVariable);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
         readVariableGet.promotedType = nonNullableReadType;
       }
@@ -4108,7 +4120,8 @@
       {required bool isNot}) {
     // ignore: unnecessary_null_comparison
     assert(isNot != null);
-    inferrer.flowAnalysis.equalityOp_rightBegin(left, leftType);
+    EqualityInfo<VariableDeclaration, DartType>? equalityInfo =
+        inferrer.flowAnalysis.equalityOperand_end(left, leftType);
     bool typeNeeded = !inferrer.isTopLevel;
 
     Expression? equals;
@@ -4125,11 +4138,15 @@
       if (isNot) {
         equals = new Not(equals)..fileOffset = fileOffset;
       }
-      inferrer.flowAnalysis.equalityOp_end(
-          equals, rightResult.expression, rightResult.inferredType,
+      inferrer.flowAnalysis.equalityOperation_end(
+          equals,
+          equalityInfo,
+          inferrer.flowAnalysis.equalityOperand_end(
+              rightResult.expression, rightResult.inferredType),
           notEqual: isNot);
       return new ExpressionInferenceResult(
-          inferrer.coreTypes.boolRawType(inferrer.library.nonNullable), equals);
+          inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable),
+          equals);
     }
 
     ObjectAccessTarget equalsTarget = inferrer.findInterfaceMember(
@@ -4153,7 +4170,7 @@
     DartType rightType =
         inferrer.getPositionalParameterTypeForTarget(equalsTarget, leftType, 0);
     rightResult = inferrer.ensureAssignableResult(
-        rightType.withDeclaredNullability(inferrer.library.nullable),
+        rightType.withDeclaredNullability(inferrer.libraryBuilder.nullable),
         rightResult,
         errorTemplate: templateArgumentTypeNotAssignable,
         nullabilityErrorTemplate: templateArgumentTypeNotAssignableNullability,
@@ -4178,7 +4195,7 @@
     } else {
       assert(equalsTarget.isNever);
       FunctionType functionType = new FunctionType([const DynamicType()],
-          const NeverType.nonNullable(), inferrer.library.nonNullable);
+          const NeverType.nonNullable(), inferrer.libraryBuilder.nonNullable);
       // Ensure operator == member even for `Never`.
       Member target = inferrer
           .findInterfaceMember(const DynamicType(), equalsName, -1,
@@ -4193,13 +4210,17 @@
       }
     }
 
-    inferrer.flowAnalysis.equalityOp_end(
-        equals, right, rightResult.inferredType,
+    inferrer.flowAnalysis.equalityOperation_end(
+        equals,
+        equalityInfo,
+        inferrer.flowAnalysis
+            .equalityOperand_end(right, rightResult.inferredType),
         notEqual: isNot);
     return new ExpressionInferenceResult(
         equalsTarget.isNever
             ? const NeverType.nonNullable()
-            : inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            : inferrer.coreTypes
+                .boolRawType(inferrer.libraryBuilder.nonNullable),
         equals);
   }
 
@@ -4351,7 +4372,7 @@
             ])
               ..fileOffset = fileOffset,
             functionType: new FunctionType(
-                [rightType], binaryType, inferrer.library.nonNullable),
+                [rightType], binaryType, inferrer.libraryBuilder.nonNullable),
             interfaceTarget: binaryTarget.member as Procedure)
           ..fileOffset = fileOffset;
 
@@ -4468,7 +4489,7 @@
         unary = new InstanceInvocation(InstanceAccessKind.Instance, expression,
             unaryName, new Arguments(<Expression>[])..fileOffset = fileOffset,
             functionType: new FunctionType(
-                <DartType>[], unaryType, inferrer.library.nonNullable),
+                <DartType>[], unaryType, inferrer.libraryBuilder.nonNullable),
             interfaceTarget: unaryTarget.member as Procedure)
           ..fileOffset = fileOffset;
 
@@ -4609,7 +4630,7 @@
             ])
               ..fileOffset = fileOffset,
             functionType: new FunctionType(
-                [indexType], readType, inferrer.library.nonNullable),
+                [indexType], readType, inferrer.libraryBuilder.nonNullable),
             interfaceTarget: readTarget.member as Procedure)
           ..fileOffset = fileOffset;
         if (readCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
@@ -4729,7 +4750,7 @@
         write = new InstanceInvocation(kind, receiver, indexSetName,
             new Arguments(<Expression>[index, value])..fileOffset = fileOffset,
             functionType: new FunctionType([indexType, valueType],
-                const VoidType(), inferrer.library.nonNullable),
+                const VoidType(), inferrer.libraryBuilder.nonNullable),
             interfaceTarget: writeTarget.member as Procedure)
           ..fileOffset = fileOffset;
         break;
@@ -4868,7 +4889,7 @@
           if (interfaceMember is Procedure) {
             DartType typeToCheck = inferrer.isNonNullableByDefault
                 ? interfaceMember.function
-                    .computeFunctionType(inferrer.library.nonNullable)
+                    .computeFunctionType(inferrer.libraryBuilder.nonNullable)
                 : interfaceMember.function.returnType;
             checkReturn =
                 TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
@@ -5804,7 +5825,7 @@
     DartType nonNullableReadType = readType.toNonNull();
     DartType inferredType = inferrer.typeSchemaEnvironment
         .getStandardUpperBound(nonNullableReadType, valueResult.inferredType,
-            inferrer.library.library);
+            inferrer.libraryBuilder.library);
 
     Expression replacement;
     if (node.forEffect) {
@@ -5836,7 +5857,7 @@
       Expression readEqualsNull =
           inferrer.createEqualsNull(receiverVariable.fileOffset, read);
       VariableGet variableGet = createVariableGet(readVariable!);
-      if (inferrer.library.isNonNullableByDefault &&
+      if (inferrer.libraryBuilder.isNonNullableByDefault &&
           !identical(nonNullableReadType, readType)) {
         variableGet.promotedType = nonNullableReadType;
       }
@@ -5884,15 +5905,15 @@
     List<DartType> typeArguments = new List<DartType>.generate(
         classTypeParameters.length,
         (int i) => new TypeParameterType.withDefaultNullabilityForLibrary(
-            classTypeParameters[i], inferrer.library.library),
+            classTypeParameters[i], inferrer.libraryBuilder.library),
         growable: false);
     ArgumentsImpl.setNonInferrableArgumentTypes(
         node.arguments as ArgumentsImpl, typeArguments);
     FunctionType functionType = replaceReturnType(
         node.target.function
-            .computeThisFunctionType(inferrer.library.nonNullable),
+            .computeThisFunctionType(inferrer.libraryBuilder.nonNullable),
         inferrer.coreTypes.thisInterfaceType(
-            node.target.enclosingClass, inferrer.library.nonNullable));
+            node.target.enclosingClass, inferrer.libraryBuilder.nonNullable));
     InvocationInferenceResult inferenceResult = inferrer.inferInvocation(
         const UnknownType(),
         node.fileOffset,
@@ -5941,7 +5962,7 @@
       SetLiteral node, DartType typeContext) {
     Class setClass = inferrer.coreTypes.setClass;
     InterfaceType setType = inferrer.coreTypes
-        .thisInterfaceType(setClass, inferrer.library.nonNullable);
+        .thisInterfaceType(setClass, inferrer.libraryBuilder.nonNullable);
     List<DartType>? inferredTypes;
     DartType inferredTypeArgument;
     List<DartType>? formalTypes;
@@ -5965,7 +5986,7 @@
           null,
           typeContext,
           inferredTypes,
-          inferrer.library.library,
+          inferrer.libraryBuilder.library,
           isConst: node.isConst);
       inferredTypeArgument = inferredTypes[0];
       if (inferrer.dataForTesting != null) {
@@ -5999,7 +6020,7 @@
           actualTypes,
           typeContext,
           inferredTypes!,
-          inferrer.library.library);
+          inferrer.libraryBuilder.library);
       inferredTypeArgument = inferredTypes[0];
       inferrer.instrumentation?.record(
           inferrer.uriForInstrumentation,
@@ -6015,9 +6036,9 @@
       }
     }
     DartType inferredType = new InterfaceType(
-        setClass, inferrer.library.nonNullable, [inferredTypeArgument]);
+        setClass, inferrer.libraryBuilder.nonNullable, [inferredTypeArgument]);
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (inferenceNeeded) {
         library.checkBoundsInSetLiteral(
             node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
@@ -6072,16 +6093,17 @@
       StaticInvocation node, DartType typeContext) {
     // ignore: unnecessary_null_comparison
     FunctionType calleeType = node.target != null
-        ? node.target.function.computeFunctionType(inferrer.library.nonNullable)
+        ? node.target.function
+            .computeFunctionType(inferrer.libraryBuilder.nonNullable)
         : new FunctionType(
-            [], const DynamicType(), inferrer.library.nonNullable);
+            [], const DynamicType(), inferrer.libraryBuilder.nonNullable);
     TypeArgumentsInfo typeArgumentsInfo = getTypeArgumentsInfo(node.arguments);
     InvocationInferenceResult result = inferrer.inferInvocation(typeContext,
         node.fileOffset, calleeType, node.arguments as ArgumentsImpl,
         staticTarget: node.target);
     // ignore: unnecessary_null_comparison
     if (!inferrer.isTopLevel && node.target != null) {
-      inferrer.library.checkBoundsInStaticInvocation(
+      inferrer.libraryBuilder.checkBoundsInStaticInvocation(
           node,
           inferrer.typeSchemaEnvironment,
           inferrer.helper!.uri,
@@ -6103,14 +6125,16 @@
       }
     }
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.stringRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.stringRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
   ExpressionInferenceResult visitStringLiteral(
       StringLiteral node, DartType typeContext) {
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.stringRawType(inferrer.library.nonNullable), node);
+        inferrer.coreTypes.stringRawType(inferrer.libraryBuilder.nonNullable),
+        node);
   }
 
   @override
@@ -6121,7 +6145,7 @@
             inferrer.thisType!.classNode, node.target.enclosingClass)!);
     FunctionType functionType = replaceReturnType(
         substitution.substituteType(node.target.function
-            .computeThisFunctionType(inferrer.library.nonNullable)
+            .computeThisFunctionType(inferrer.libraryBuilder.nonNullable)
             .withoutTypeParameters) as FunctionType,
         inferrer.thisType!);
     InvocationInferenceResult inferenceResult = inferrer.inferInvocation(
@@ -6170,7 +6194,7 @@
     DartType receiverType = inferrer.classHierarchy.getTypeAsInstanceOf(
         inferrer.thisType!,
         inferrer.thisType!.classNode.supertype!.classNode,
-        inferrer.library.library)!;
+        inferrer.libraryBuilder.library)!;
 
     ObjectAccessTarget writeTarget = node.interfaceTarget != null
         ? new ObjectAccessTarget.interfaceMember(node.interfaceTarget!,
@@ -6235,7 +6259,7 @@
         }
 
         if (!inferrer.isTopLevel) {
-          if (inferrer.library.isNonNullableByDefault) {
+          if (inferrer.libraryBuilder.isNonNullableByDefault) {
             if (!inferrer.typeSchemaEnvironment.isSubtypeOf(caseExpressionType,
                 expressionType, SubtypeCheckMode.withNullabilities)) {
               inferrer.helper!.addProblem(
@@ -6285,7 +6309,7 @@
           // The last case block is allowed to complete normally.
           if (caseIndex < node.cases.length - 1 &&
               inferrer.flowAnalysis.isReachable) {
-            inferrer.library.addProblem(messageSwitchCaseFallThrough,
+            inferrer.libraryBuilder.addProblem(messageSwitchCaseFallThrough,
                 switchCase.fileOffset, noLength, inferrer.helper!.uri);
           }
         }
@@ -6335,7 +6359,7 @@
   ExpressionInferenceResult visitSymbolLiteral(
       SymbolLiteral node, DartType typeContext) {
     DartType inferredType =
-        inferrer.coreTypes.symbolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.symbolRawType(inferrer.libraryBuilder.nonNullable);
     return new ExpressionInferenceResult(inferredType, node);
   }
 
@@ -6428,7 +6452,7 @@
               : node.finallyBlock!)
         ..fileOffset = node.fileOffset;
     }
-    inferrer.library.loader.dataForTesting?.registerAlias(node, result);
+    inferrer.libraryBuilder.loader.dataForTesting?.registerAlias(node, result);
     return new StatementInferenceResult.single(result);
   }
 
@@ -6436,12 +6460,12 @@
   ExpressionInferenceResult visitTypeLiteral(
       TypeLiteral node, DartType typeContext) {
     DartType inferredType =
-        inferrer.coreTypes.typeRawType(inferrer.library.nonNullable);
-    if (inferrer.library.enableConstructorTearOffsInLibrary) {
-      inferrer.library.checkBoundsInType(
+        inferrer.coreTypes.typeRawType(inferrer.libraryBuilder.nonNullable);
+    if (inferrer.libraryFeatures.constructorTearoffs.isEnabled) {
+      inferrer.libraryBuilder.checkBoundsInType(
           node.type,
           inferrer.typeSchemaEnvironment,
-          inferrer.library.fileUri,
+          inferrer.libraryBuilder.fileUri,
           node.fileOffset);
     }
     return new ExpressionInferenceResult(inferredType, node);
@@ -6577,7 +6601,7 @@
       node.initializer = initializer..parent = node;
     }
     if (!inferrer.isTopLevel) {
-      SourceLibraryBuilder library = inferrer.library;
+      SourceLibraryBuilder library = inferrer.libraryBuilder;
       if (node.isImplicitlyTyped) {
         library.checkBoundsInVariableDeclaration(
             node, inferrer.typeSchemaEnvironment, inferrer.helper!.uri,
@@ -6585,24 +6609,26 @@
       }
     }
     if (node.isLate &&
-        inferrer.library.loader.target.backendTarget.isLateLocalLoweringEnabled(
-            hasInitializer: node.hasDeclaredInitializer,
-            isFinal: node.isFinal,
-            isPotentiallyNullable: node.type.isPotentiallyNullable)) {
+        inferrer.libraryBuilder.loader.target.backendTarget
+            .isLateLocalLoweringEnabled(
+                hasInitializer: node.hasDeclaredInitializer,
+                isFinal: node.isFinal,
+                isPotentiallyNullable: node.type.isPotentiallyNullable)) {
       int fileOffset = node.fileOffset;
 
       List<Statement> result = <Statement>[];
       result.add(node);
 
       late_lowering.IsSetEncoding isSetEncoding =
-          late_lowering.computeIsSetEncoding(
-              node.type, late_lowering.computeIsSetStrategy(inferrer.library));
+          late_lowering.computeIsSetEncoding(node.type,
+              late_lowering.computeIsSetStrategy(inferrer.libraryBuilder));
       VariableDeclaration? isSetVariable;
       if (isSetEncoding == late_lowering.IsSetEncoding.useIsSetField) {
         isSetVariable = new VariableDeclaration(
             late_lowering.computeLateLocalIsSetName(node.name!),
             initializer: new BoolLiteral(false)..fileOffset = fileOffset,
-            type: inferrer.coreTypes.boolRawType(inferrer.library.nonNullable),
+            type: inferrer.coreTypes
+                .boolRawType(inferrer.libraryBuilder.nonNullable),
             isLowered: true)
           ..fileOffset = fileOffset;
         result.add(isSetVariable);
@@ -6663,8 +6689,8 @@
                           isSetEncoding: isSetEncoding)),
               returnType: node.type))
         ..fileOffset = fileOffset;
-      getVariable.type =
-          getter.function.computeFunctionType(inferrer.library.nonNullable);
+      getVariable.type = getter.function
+          .computeFunctionType(inferrer.libraryBuilder.nonNullable);
       node.lateGetter = getVariable;
       result.add(getter);
 
@@ -6708,8 +6734,8 @@
             // TODO(johnniwinther): Reinsert the file offset when the vm doesn't
             //  use it for function declaration identity.
             /*..fileOffset = fileOffset*/;
-        setVariable.type =
-            setter.function.computeFunctionType(inferrer.library.nonNullable);
+        setVariable.type = setter.function
+            .computeFunctionType(inferrer.libraryBuilder.nonNullable);
         node.lateSetter = setVariable;
         result.add(setter);
       }
@@ -6837,7 +6863,7 @@
   StatementInferenceResult visitWhileStatement(WhileStatement node) {
     inferrer.flowAnalysis.whileStatement_conditionBegin(node);
     InterfaceType expectedType =
-        inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
+        inferrer.coreTypes.boolRawType(inferrer.libraryBuilder.nonNullable);
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: false);
@@ -6865,7 +6891,7 @@
           closureContext.isAsync
               ? inferrer.coreTypes.streamClass
               : inferrer.coreTypes.iterableClass,
-          inferrer.library.nonNullable);
+          inferrer.libraryBuilder.nonNullable);
     }
     expressionResult = inferrer.inferExpression(
         node.expression, typeContext, true,
@@ -6878,10 +6904,10 @@
   ExpressionInferenceResult visitLoadLibrary(
       covariant LoadLibraryImpl node, DartType typeContext) {
     DartType inferredType = inferrer.typeSchemaEnvironment
-        .futureType(const DynamicType(), inferrer.library.nonNullable);
+        .futureType(const DynamicType(), inferrer.libraryBuilder.nonNullable);
     if (node.arguments != null) {
-      FunctionType calleeType =
-          new FunctionType([], inferredType, inferrer.library.nonNullable);
+      FunctionType calleeType = new FunctionType(
+          [], inferredType, inferrer.libraryBuilder.nonNullable);
       inferrer.inferInvocation(typeContext, node.fileOffset, calleeType,
           node.arguments! as ArgumentsImpl);
     }
@@ -6892,9 +6918,9 @@
       LoadLibraryTearOff node, DartType typeContext) {
     DartType inferredType = new FunctionType(
         [],
-        inferrer.typeSchemaEnvironment
-            .futureType(const DynamicType(), inferrer.library.nonNullable),
-        inferrer.library.nonNullable);
+        inferrer.typeSchemaEnvironment.futureType(
+            const DynamicType(), inferrer.libraryBuilder.nonNullable),
+        inferrer.libraryBuilder.nonNullable);
     Expression replacement = new StaticTearOff(node.target)
       ..fileOffset = node.fileOffset;
     return new ExpressionInferenceResult(inferredType, replacement);
@@ -6905,7 +6931,8 @@
       CheckLibraryIsLoaded node, DartType typeContext) {
     // TODO(dmitryas): Figure out the suitable nullability for that.
     return new ExpressionInferenceResult(
-        inferrer.coreTypes.objectRawType(inferrer.library.nullable), node);
+        inferrer.coreTypes.objectRawType(inferrer.libraryBuilder.nullable),
+        node);
   }
 
   ExpressionInferenceResult visitEquals(
@@ -6953,8 +6980,8 @@
           if (doubleValue != null) {
             Expression replacement = new DoubleLiteral(doubleValue)
               ..fileOffset = node.fileOffset;
-            DartType inferredType =
-                inferrer.coreTypes.doubleRawType(inferrer.library.nonNullable);
+            DartType inferredType = inferrer.coreTypes
+                .doubleRawType(inferrer.libraryBuilder.nonNullable);
             return new ExpressionInferenceResult(inferredType, replacement);
           }
         }
@@ -6973,7 +7000,7 @@
               Expression replacement = new DoubleLiteral(doubleValue)
                 ..fileOffset = node.fileOffset;
               DartType inferredType = inferrer.coreTypes
-                  .doubleRawType(inferrer.library.nonNullable);
+                  .doubleRawType(inferrer.libraryBuilder.nonNullable);
               return new ExpressionInferenceResult(inferredType, replacement);
             }
           }
@@ -6994,7 +7021,8 @@
               return new ExpressionInferenceResult(const DynamicType(), error);
             }
             expressionResult = new ExpressionInferenceResult(
-                inferrer.coreTypes.intRawType(inferrer.library.nonNullable),
+                inferrer.coreTypes
+                    .intRawType(inferrer.libraryBuilder.nonNullable),
                 new IntLiteral(-intValue)
                   ..fileOffset = node.expression.fileOffset);
           }
@@ -7022,7 +7050,7 @@
     if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (operandType is! InvalidType &&
           operandType.nullability == Nullability.nonNullable) {
-        inferrer.library.addProblem(
+        inferrer.libraryBuilder.addProblem(
             templateNonNullableInNullAware.withArguments(
                 operationName, operandType, inferrer.isNonNullableByDefault),
             offset,
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 9a8570c..3009ba1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -493,6 +493,17 @@
 
   List<Object?>? argumentsOriginalOrder;
 
+  /// True if the arguments are passed to the super-constructor in a
+  /// super-initializer, and the positional parameters are super-initializer
+  /// parameters. It is true that either all of the positional parameters are
+  /// super-initializer parameters or none of them, so a simple boolean
+  /// accurately reflects the state.
+  bool positionalAreSuperParameters = false;
+
+  /// Names of the named positional parameters. If none of the parameters are
+  /// super-positional, the field is null.
+  Set<String>? namedSuperParameterNames;
+
   ArgumentsImpl.internal(
       {required List<Expression> positional,
       required List<DartType>? types,
@@ -1011,7 +1022,7 @@
     TypeInferrerImpl inferrer, int value, String? literal, int charOffset) {
   if (value >= 0 && value <= (1 << 53)) return null;
   if (inferrer.isTopLevel) return null;
-  if (!inferrer.library.loader.target.backendTarget
+  if (!inferrer.libraryBuilder.loader.target.backendTarget
       .errorOnUnexactWebIntLiterals) return null;
   BigInt asInt = new BigInt.from(value).toUnsigned(64);
   BigInt asDouble = new BigInt.from(asInt.toDouble());
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index bd652d3..0a19850 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -19,7 +19,7 @@
 /// created from the constructors in the superclass, and for tear off lowerings
 /// for redirecting factories, which are created from the effective target
 /// constructor.
-class SynthesizedFunctionNode {
+class DelayedDefaultValueCloner {
   /// Type parameter map from type parameters in scope [_original] to types
   /// in scope of [_synthesized].
   // TODO(johnniwinther): Is this ever needed? Should occurrence of type
@@ -49,7 +49,7 @@
 
   CloneVisitorNotMembers? _cloner;
 
-  SynthesizedFunctionNode(
+  DelayedDefaultValueCloner(
       this._typeSubstitution, this._original, this._synthesized,
       {this.identicalSignatures: true,
       List<int?>? positionalSuperParameters: null,
@@ -240,7 +240,7 @@
 
   @override
   String toString() {
-    return "SynthesizedFunctionNode(original=${_original.parent}, "
+    return "DelayedDefaultValueCloner(original=${_original.parent}, "
         "synthesized=${_synthesized.parent})";
   }
 }
@@ -250,11 +250,13 @@
   final Member original;
   final Substitution substitution;
   final bool copyReturnType;
+  bool _hasBeenInferred = false;
 
   TypeDependency(this.synthesized, this.original, this.substitution,
       {required this.copyReturnType});
 
   void copyInferred() {
+    if (_hasBeenInferred) return;
     for (int i = 0; i < original.function!.positionalParameters.length; i++) {
       VariableDeclaration synthesizedParameter =
           synthesized.function!.positionalParameters[i];
@@ -275,5 +277,6 @@
       synthesized.function!.returnType =
           substitution.substituteType(original.function!.returnType);
     }
+    _hasBeenInferred = true;
   }
 }
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 730ab5747..176a1b9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -17,7 +17,8 @@
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
 import 'package:package_config/package_config.dart' hide LanguageVersion;
 
-import '../../api_prototype/experimental_flags.dart' show ExperimentalFlag;
+import '../../api_prototype/experimental_flags.dart'
+    show ExperimentalFlag, GlobalFeatures;
 import '../../api_prototype/file_system.dart' show FileSystem;
 import '../../base/nnbd_mode.dart';
 import '../../base/processed_options.dart' show ProcessedOptions;
@@ -82,7 +83,7 @@
         ConstantEvaluationData;
 import 'kernel_constants.dart' show KernelConstantErrorReporter;
 import 'kernel_helper.dart';
-import 'macro.dart';
+import 'macro/macro.dart';
 import 'verifier.dart' show verifyComponent, verifyGetStaticType;
 
 class KernelTarget extends TargetImplementation {
@@ -102,56 +103,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;
@@ -162,8 +139,8 @@
   final bool errorOnUnevaluatedConstant =
       CompilerContext.current.options.errorOnUnevaluatedConstant;
 
-  final List<SynthesizedFunctionNode> synthesizedFunctionNodes =
-      <SynthesizedFunctionNode>[];
+  final List<DelayedDefaultValueCloner> _delayedDefaultValueCloners =
+      <DelayedDefaultValueCloner>[];
 
   final UriTranslator uriTranslator;
 
@@ -195,9 +172,7 @@
     loader = createLoader();
   }
 
-  bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri importUri) {
-    return _options.isExperimentEnabledInLibrary(flag, importUri);
-  }
+  GlobalFeatures get globalFeatures => _options.globalFeatures;
 
   Version getExperimentEnabledVersionInLibrary(
       ExperimentalFlag flag, Uri importUri) {
@@ -210,20 +185,6 @@
         flag, importUri, version);
   }
 
-  /// Returns `true` if the [flag] is enabled by default.
-  bool isExperimentEnabledByDefault(ExperimentalFlag flag) {
-    return _options.isExperimentEnabledByDefault(flag);
-  }
-
-  /// Returns `true` if the [flag] is enabled globally.
-  ///
-  /// This is `true` either if the [flag] is passed through an explicit
-  /// `--enable-experiment` option or if the [flag] is expired and on by
-  /// default.
-  bool isExperimentEnabledGlobally(ExperimentalFlag flag) {
-    return _options.isExperimentEnabledGlobally(flag);
-  }
-
   Uri? translateUri(Uri uri) => uriTranslator.translate(uri);
 
   /// Returns a reference to the constructor of
@@ -385,14 +346,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;
   }
@@ -417,7 +373,8 @@
       benchmarker?.enterPhase(BenchmarkPhases.outline_computeMacroDeclarations);
       NeededPrecompilations? result = loader.computeMacroDeclarations();
 
-      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.unknownComputeNeededPrecompilations);
       return result;
     }, () => loader.currentUriForCrashReporting);
   }
@@ -538,7 +495,8 @@
       loader.buildClassHierarchy(sourceClassBuilders, objectClassBuilder);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
-      loader.checkSupertypes(sourceClassBuilders, enumClass);
+      loader.checkSupertypes(
+          sourceClassBuilders, enumClass, underscoreEnumClass);
 
       if (macroApplications != null) {
         benchmarker?.enterPhase(BenchmarkPhases.outline_applyDeclarationMacros);
@@ -587,7 +545,7 @@
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_buildOutlineExpressions);
       loader.buildOutlineExpressions(
-          loader.hierarchy, synthesizedFunctionNodes);
+          loader.hierarchy, _delayedDefaultValueCloners);
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_checkTypes);
       loader.checkTypes();
@@ -608,7 +566,7 @@
       installAllComponentProblems(loader.allComponentProblems);
       loader.allComponentProblems.clear();
 
-      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+      benchmarker?.enterPhase(BenchmarkPhases.unknownBuildOutlines);
 
       // For whatever reason sourceClassBuilders is kept alive for some amount
       // of time, meaning that all source library builders will be kept alive
@@ -689,7 +647,7 @@
       benchmarker?.enterPhase(BenchmarkPhases.body_installAllComponentProblems);
       installAllComponentProblems(loader.allComponentProblems);
 
-      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+      benchmarker?.enterPhase(BenchmarkPhases.unknownBuildComponent);
 
       // For whatever reason sourceClasses is kept alive for some amount
       // of time, meaning that all source library builders will be kept alive
@@ -731,7 +689,7 @@
         nameRoot: nameRoot, libraries: libraries, uriToSource: uriToSource));
 
     NonNullableByDefaultCompiledMode? compiledMode = null;
-    if (isExperimentEnabledGlobally(ExperimentalFlag.nonNullable)) {
+    if (globalFeatures.nonNullable.isEnabled) {
       switch (loader.nnbdMode) {
         case NnbdMode.Weak:
           compiledMode = NonNullableByDefaultCompiledMode.Weak;
@@ -883,6 +841,11 @@
 
   Class get enumClass => enumClassBuilder.cls;
 
+  ClassBuilder get underscoreEnumBuilder =>
+      underscoreEnumType.declaration as ClassBuilder;
+
+  Class get underscoreEnumClass => underscoreEnumBuilder.cls;
+
   /// If [builder] doesn't have a constructors, install the defaults.
   void installDefaultConstructor(SourceClassBuilder builder) {
     assert(!builder.isMixinApplication);
@@ -915,7 +878,7 @@
 
   void installForwardingConstructors(SourceClassBuilder builder) {
     assert(builder.isMixinApplication);
-    if (builder.library.loader != loader) return;
+    if (builder.libraryBuilder.loader != loader) return;
     if (builder.cls.constructors.isNotEmpty) {
       // These were installed by a subclass in the recursive call below.
       return;
@@ -1084,18 +1047,18 @@
         returnType: makeConstructorReturnType(cls));
     SuperInitializer initializer = new SuperInitializer(
         superConstructor, new Arguments(positional, named: named));
-    SynthesizedFunctionNode synthesizedFunctionNode =
-        new SynthesizedFunctionNode(
+    DelayedDefaultValueCloner delayedDefaultValueCloner =
+        new DelayedDefaultValueCloner(
             substitutionMap, superConstructor.function, function,
-            libraryBuilder: classBuilder.library);
+            libraryBuilder: classBuilder.libraryBuilder);
     if (!isConst) {
       // For constant constructors default values are computed and cloned part
       // of the outline expression and therefore passed to the
       // [SyntheticConstructorBuilder] below.
       //
       // For non-constant constructors default values are cloned as part of the
-      // full compilation using [synthesizedFunctionNodes].
-      synthesizedFunctionNodes.add(synthesizedFunctionNode);
+      // full compilation using [_delayedDefaultValueCloners].
+      _delayedDefaultValueCloners.add(delayedDefaultValueCloner);
     }
     Constructor constructor = new Constructor(function,
         name: superConstructor.name,
@@ -1110,16 +1073,16 @@
       //..fileEndOffset = cls.fileOffset
       ..isNonNullableByDefault = cls.enclosingLibrary.isNonNullableByDefault;
 
+    TypeDependency? typeDependency;
     if (hasTypeDependency) {
-      loader.registerTypeDependency(
-          constructor,
-          new TypeDependency(constructor, superConstructor, substitution,
-              copyReturnType: false));
+      typeDependency = new TypeDependency(
+          constructor, superConstructor, substitution,
+          copyReturnType: false);
     }
 
     Procedure? constructorTearOff = createConstructorTearOffProcedure(
         superConstructor.name.text,
-        classBuilder.library,
+        classBuilder.libraryBuilder,
         cls.fileUri,
         cls.fileOffset,
         tearOffReference,
@@ -1127,29 +1090,33 @@
 
     if (constructorTearOff != null) {
       buildConstructorTearOffProcedure(constructorTearOff, constructor,
-          classBuilder.cls, classBuilder.library);
+          classBuilder.cls, classBuilder.libraryBuilder);
     }
-    return new SyntheticSourceConstructorBuilder(
-        classBuilder, constructor, constructorTearOff,
-        // We pass on the original constructor and the cloned function nodes to
-        // ensure that the default values are computed and cloned for the
-        // outline. It is needed to make the default values a part of the
-        // outline for const constructors, and additionally it is required for
-        // a potential subclass using super initializing parameters that will
-        // required the cloning of the default values.
-        origin: superConstructorBuilder,
-        synthesizedFunctionNode: synthesizedFunctionNode);
+    SyntheticSourceConstructorBuilder constructorBuilder =
+        new SyntheticSourceConstructorBuilder(
+            classBuilder, constructor, constructorTearOff,
+            // We pass on the original constructor and the cloned function nodes
+            // to ensure that the default values are computed and cloned for the
+            // outline. It is needed to make the default values a part of the
+            // outline for const constructors, and additionally it is required
+            // for a potential subclass using super initializing parameters that
+            // will required the cloning of the default values.
+            definingConstructor: superConstructorBuilder,
+            delayedDefaultValueCloner: delayedDefaultValueCloner,
+            typeDependency: typeDependency);
+    loader.registerConstructorToBeInferred(constructor, constructorBuilder);
+    return constructorBuilder;
   }
 
   void finishSynthesizedParameters({bool forOutline = false}) {
-    for (SynthesizedFunctionNode synthesizedFunctionNode
-        in synthesizedFunctionNodes) {
-      if (!forOutline || synthesizedFunctionNode.isOutlineNode) {
-        synthesizedFunctionNode.cloneDefaultValues(loader.typeEnvironment);
+    for (DelayedDefaultValueCloner delayedDefaultValueCloner
+        in _delayedDefaultValueCloners) {
+      if (!forOutline || delayedDefaultValueCloner.isOutlineNode) {
+        delayedDefaultValueCloner.cloneDefaultValues(loader.typeEnvironment);
       }
     }
     if (!forOutline) {
-      synthesizedFunctionNodes.clear();
+      _delayedDefaultValueCloners.clear();
     }
     ticker.logMs("Cloned default values of formals");
   }
@@ -1174,7 +1141,7 @@
           enclosingClass.enclosingLibrary.isNonNullableByDefault;
     Procedure? constructorTearOff = createConstructorTearOffProcedure(
         '',
-        classBuilder.library,
+        classBuilder.libraryBuilder,
         enclosingClass.fileUri,
         enclosingClass.fileOffset,
         tearOffReference,
@@ -1182,7 +1149,7 @@
             enclosingClass.isAbstract || enclosingClass.isEnum);
     if (constructorTearOff != null) {
       buildConstructorTearOffProcedure(constructorTearOff, constructor,
-          classBuilder.cls, classBuilder.library);
+          classBuilder.cls, classBuilder.libraryBuilder);
     }
     return new SyntheticSourceConstructorBuilder(
         classBuilder, constructor, constructorTearOff);
@@ -1201,20 +1168,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() {
@@ -1389,7 +1365,7 @@
                   .toList());
           nonFinalFields.clear();
         }
-        SourceLibraryBuilder library = builder.library;
+        SourceLibraryBuilder library = builder.libraryBuilder;
         if (library.isNonNullableByDefault) {
           if (constructor.isConst && lateFinalFields.isNotEmpty) {
             for (FieldBuilder field in lateFinalFields) {
@@ -1452,7 +1428,7 @@
         if (!fieldBuilder.isLate) {
           if (fieldBuilder.isFinal &&
               uninitializedFinalOrNonNullableFieldIsError) {
-            String uri = '${fieldBuilder.library.importUri}';
+            String uri = '${fieldBuilder.libraryBuilder.importUri}';
             String file = fieldBuilder.fileUri.pathSegments.last;
             if (uri == 'dart:html' ||
                 uri == 'dart:svg' ||
@@ -1461,7 +1437,7 @@
               // TODO(johnniwinther): Use external getters instead of final
               // fields. See https://github.com/dart-lang/sdk/issues/33762
             } else {
-              builder.library.addProblem(
+              builder.libraryBuilder.addProblem(
                   templateFinalFieldNotInitialized
                       .withArguments(fieldBuilder.name),
                   fieldBuilder.charOffset,
@@ -1471,7 +1447,7 @@
           } else if (fieldBuilder.fieldType is! InvalidType &&
               fieldBuilder.fieldType.isPotentiallyNonNullable &&
               uninitializedFinalOrNonNullableFieldIsError) {
-            SourceLibraryBuilder library = builder.library;
+            SourceLibraryBuilder library = builder.libraryBuilder;
             if (library.isNonNullableByDefault) {
               library.addProblem(
                   templateFieldNonNullableWithoutInitializerError.withArguments(
@@ -1500,7 +1476,7 @@
           initializer.parent = constructorBuilder.constructor;
           constructorBuilder.constructor.initializers.insert(0, initializer);
           if (fieldBuilder.isFinal) {
-            builder.library.addProblem(
+            builder.libraryBuilder.addProblem(
                 templateFinalFieldNotInitializedByConstructor
                     .withArguments(fieldBuilder.name),
                 constructorBuilder.charOffset,
@@ -1515,7 +1491,7 @@
           } else if (fieldBuilder.field.type is! InvalidType &&
               !fieldBuilder.isLate &&
               fieldBuilder.field.type.isPotentiallyNonNullable) {
-            SourceLibraryBuilder library = builder.library;
+            SourceLibraryBuilder library = builder.libraryBuilder;
             if (library.isNonNullableByDefault) {
               library.addProblem(
                   templateFieldNonNullableNotInitializedByConstructorError
@@ -1604,12 +1580,10 @@
             new KernelConstantErrorReporter(loader),
             evaluationMode,
             evaluateAnnotations: true,
-            enableTripleShift:
-                isExperimentEnabledGlobally(ExperimentalFlag.tripleShift),
-            enableConstFunctions:
-                isExperimentEnabledGlobally(ExperimentalFlag.constFunctions),
-            enableConstructorTearOff: isExperimentEnabledGlobally(
-                ExperimentalFlag.constructorTearoffs),
+            enableTripleShift: globalFeatures.tripleShift.isEnabled,
+            enableConstFunctions: globalFeatures.constFunctions.isEnabled,
+            enableConstructorTearOff:
+                globalFeatures.constructorTearoffs.isEnabled,
             errorOnUnevaluatedConstant: errorOnUnevaluatedConstant);
     ticker.logMs("Evaluated constants");
 
@@ -1626,8 +1600,7 @@
     });
     ticker.logMs("Added constant coverage");
 
-    if (loader.target.context.options
-        .isExperimentEnabledGlobally(ExperimentalFlag.valueClass)) {
+    if (loader.target.context.options.globalFeatures.valueClass.isEnabled) {
       valueClass.transformComponent(component!, loader.coreTypes,
           loader.hierarchy, loader.referenceFromIndex, environment);
       ticker.logMs("Lowered value classes");
@@ -1661,12 +1634,9 @@
       new KernelConstantErrorReporter(loader),
       evaluationMode,
       evaluateAnnotations: true,
-      enableTripleShift:
-          isExperimentEnabledGlobally(ExperimentalFlag.tripleShift),
-      enableConstFunctions:
-          isExperimentEnabledGlobally(ExperimentalFlag.constFunctions),
-      enableConstructorTearOff:
-          isExperimentEnabledGlobally(ExperimentalFlag.constructorTearoffs),
+      enableTripleShift: globalFeatures.tripleShift.isEnabled,
+      enableConstFunctions: globalFeatures.constFunctions.isEnabled,
+      enableConstructorTearOff: globalFeatures.constructorTearoffs.isEnabled,
       errorOnUnevaluatedConstant: errorOnUnevaluatedConstant,
     );
     ticker.logMs("Evaluated constants");
@@ -1685,7 +1655,7 @@
     // because the SDK might be agnostic and therefore needs to be weakened
     // for legacy mode.
     assert(
-        isExperimentEnabledGlobally(ExperimentalFlag.nonNullable) ||
+        globalFeatures.nonNullable.isEnabled ||
             loader.nnbdMode == NnbdMode.Weak,
         "Non-weak nnbd mode found without experiment enabled: "
         "${loader.nnbdMode}.");
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro.dart
deleted file mode 100644
index 0b2bb54..0000000
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ /dev/null
@@ -1,1109 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:_fe_analyzer_shared/src/macros/api.dart' as macro;
-import 'package:_fe_analyzer_shared/src/macros/executor.dart' as macro;
-import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart'
-    as macro;
-import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart'
-    as macro;
-import 'package:kernel/ast.dart' show DartType;
-import 'package:kernel/src/types.dart';
-import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
-
-import '../../base/common.dart';
-import '../builder/builder.dart';
-import '../builder/class_builder.dart';
-import '../builder/formal_parameter_builder.dart';
-import '../builder/library_builder.dart';
-import '../builder/member_builder.dart';
-import '../builder/named_type_builder.dart';
-import '../builder/nullability_builder.dart';
-import '../builder/type_alias_builder.dart';
-import '../builder/type_builder.dart';
-import '../builder/type_declaration_builder.dart';
-import '../identifiers.dart';
-import '../source/source_class_builder.dart';
-import '../source/source_constructor_builder.dart';
-import '../source/source_factory_builder.dart';
-import '../source/source_field_builder.dart';
-import '../source/source_library_builder.dart';
-import '../source/source_loader.dart';
-import '../source/source_procedure_builder.dart';
-import 'hierarchy/hierarchy_builder.dart';
-import 'hierarchy/hierarchy_node.dart';
-
-bool enableMacros = false;
-
-const String augmentationScheme = 'org-dartlang-augmentation';
-
-final Uri macroLibraryUri =
-    Uri.parse('package:_fe_analyzer_shared/src/macros/api.dart');
-const String macroClassName = 'Macro';
-final macro.IdentifierImpl dynamicIdentifier = new macro.IdentifierImpl(
-    id: macro.RemoteInstance.uniqueId, name: 'dynamic');
-
-class MacroDeclarationData {
-  bool macrosAreAvailable = false;
-  Map<Uri, List<String>> macroDeclarations = {};
-  List<List<Uri>>? compilationSequence;
-  List<Map<Uri, Map<String, List<String>>>> neededPrecompilations = [];
-}
-
-class MacroClass {
-  final Uri importUri;
-  final String className;
-
-  const MacroClass(this.importUri, this.className);
-
-  @override
-  int get hashCode => importUri.hashCode * 13 + className.hashCode * 17;
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-    return other is MacroClass &&
-        importUri == other.importUri &&
-        className == other.className;
-  }
-}
-
-class MacroApplication {
-  final ClassBuilder classBuilder;
-  final String constructorName;
-
-  // TODO(johnniwinther): Add support for arguments.
-
-  MacroApplication(this.classBuilder, this.constructorName);
-
-  late macro.MacroInstanceIdentifier instanceIdentifier;
-
-  @override
-  String toString() {
-    return '${classBuilder.name}.'
-        '${constructorName.isEmpty ? 'new' : constructorName}()';
-  }
-}
-
-class MacroApplicationDataForTesting {
-  Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData = {};
-  Map<SourceLibraryBuilder, String> libraryTypesResult = {};
-  Map<SourceLibraryBuilder, String> libraryDefinitionResult = {};
-  Map<SourceClassBuilder, List<macro.MacroExecutionResult>> classTypesResults =
-      {};
-  Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
-      classDeclarationsResults = {};
-  Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
-      classDefinitionsResults = {};
-  Map<MemberBuilder, List<macro.MacroExecutionResult>> memberTypesResults = {};
-  Map<MemberBuilder, List<macro.MacroExecutionResult>>
-      memberDeclarationsResults = {};
-  Map<MemberBuilder, List<macro.MacroExecutionResult>>
-      memberDefinitionsResults = {};
-}
-
-class LibraryMacroApplicationData {
-  Map<SourceClassBuilder, ClassMacroApplicationData> classData = {};
-  Map<MemberBuilder, List<MacroApplication>> memberApplications = {};
-}
-
-class ClassMacroApplicationData {
-  List<MacroApplication>? classApplications;
-  Map<MemberBuilder, List<MacroApplication>> memberApplications = {};
-}
-
-/// Macro classes that need to be precompiled.
-class NeededPrecompilations {
-  /// Map from library uris to macro class names and the names of constructor
-  /// their constructors is returned for macro classes that need to be
-  /// precompiled.
-  final Map<Uri, Map<String, List<String>>> macroDeclarations;
-
-  NeededPrecompilations(this.macroDeclarations);
-}
-
-class MacroApplications {
-  final macro.MacroExecutor _macroExecutor;
-  final Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData;
-  final MacroApplicationDataForTesting? dataForTesting;
-  List<_ApplicationData>? _applicationDataCache;
-
-  MacroApplications(
-      this._macroExecutor, this.libraryData, this.dataForTesting) {
-    dataForTesting?.libraryData.addAll(libraryData);
-  }
-
-  static Future<MacroApplications> loadMacroIds(
-      macro.MacroExecutor macroExecutor,
-      Map<MacroClass, Uri> precompiledMacroUris,
-      Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData,
-      MacroApplicationDataForTesting? dataForTesting) async {
-    Map<ClassBuilder, macro.MacroClassIdentifier> classIdCache = {};
-
-    Map<MacroApplication, macro.MacroInstanceIdentifier> instanceIdCache = {};
-
-    Future<void> ensureMacroClassIds(
-        List<MacroApplication>? applications) async {
-      if (applications != null) {
-        for (MacroApplication application in applications) {
-          MacroClass macroClass = new MacroClass(
-              application.classBuilder.library.importUri,
-              application.classBuilder.name);
-          Uri? precompiledMacroUri = precompiledMacroUris[macroClass];
-          try {
-            macro.MacroClassIdentifier macroClassIdentifier =
-                classIdCache[application.classBuilder] ??= await macroExecutor
-                    .loadMacro(macroClass.importUri, macroClass.className,
-                        precompiledKernelUri: precompiledMacroUri);
-            try {
-              application.instanceIdentifier = instanceIdCache[application] ??=
-                  await macroExecutor.instantiateMacro(
-                      macroClassIdentifier,
-                      application.constructorName,
-                      // TODO(johnniwinther): Support macro arguments.
-                      new macro.Arguments([], {}));
-            } catch (e) {
-              throw "Error instantiating macro `${application}`: $e";
-            }
-          } catch (e) {
-            throw "Error loading macro class "
-                "'${application.classBuilder.name}' from "
-                "'${application.classBuilder.library.importUri}': $e";
-          }
-        }
-      }
-    }
-
-    for (LibraryMacroApplicationData libraryData in libraryData.values) {
-      for (ClassMacroApplicationData classData
-          in libraryData.classData.values) {
-        await ensureMacroClassIds(classData.classApplications);
-        for (List<MacroApplication> applications
-            in classData.memberApplications.values) {
-          await ensureMacroClassIds(applications);
-        }
-      }
-      for (List<MacroApplication> applications
-          in libraryData.memberApplications.values) {
-        await ensureMacroClassIds(applications);
-      }
-    }
-    return new MacroApplications(macroExecutor, libraryData, dataForTesting);
-  }
-
-  Map<ClassBuilder, macro.ClassDeclaration> _classDeclarations = {};
-  Map<macro.ClassDeclaration, ClassBuilder> _classBuilders = {};
-  Map<MemberBuilder, macro.Declaration?> _memberDeclarations = {};
-
-  // TODO(johnniwinther): Support all members.
-  macro.Declaration? _getMemberDeclaration(MemberBuilder memberBuilder) {
-    return _memberDeclarations[memberBuilder] ??=
-        _createMemberDeclaration(memberBuilder);
-  }
-
-  macro.ClassDeclaration _getClassDeclaration(ClassBuilder builder) {
-    return _classDeclarations[builder] ??= _createClassDeclaration(builder);
-  }
-
-  ClassBuilder _getClassBuilder(macro.ClassDeclaration declaration) {
-    return _classBuilders[declaration]!;
-  }
-
-  macro.Declaration _createMemberDeclaration(MemberBuilder memberBuilder) {
-    if (memberBuilder is SourceProcedureBuilder) {
-      return _createFunctionDeclaration(memberBuilder);
-    } else if (memberBuilder is SourceFieldBuilder) {
-      return _createVariableDeclaration(memberBuilder);
-    } else if (memberBuilder is SourceConstructorBuilder) {
-      return _createConstructorDeclaration(memberBuilder);
-    } else if (memberBuilder is SourceFactoryBuilder) {
-      return _createFactoryDeclaration(memberBuilder);
-    } else {
-      // TODO(johnniwinther): Throw when all members are supported.
-      throw new UnimplementedError(
-          'Unsupported member ${memberBuilder} (${memberBuilder.runtimeType})');
-    }
-  }
-
-  macro.ResolvedIdentifier _resolveIdentifier(macro.Identifier identifier) {
-    if (identifier is _IdentifierImpl) {
-      MemberBuilder? memberBuilder = identifier.memberBuilder;
-      FormalParameterBuilder? parameterBuilder = identifier.parameterBuilder;
-      TypeDeclarationBuilder? typeDeclarationBuilder =
-          identifier.typeDeclarationBuilder ??
-              identifier.typeBuilder?.declaration;
-      if (memberBuilder != null) {
-        Uri? uri;
-        String? staticScope;
-        macro.IdentifierKind kind;
-        if (memberBuilder.isStatic || memberBuilder.isConstructor) {
-          ClassBuilder classBuilder = memberBuilder.classBuilder!;
-          staticScope = classBuilder.name;
-          uri = classBuilder.library.importUri;
-          kind = macro.IdentifierKind.staticInstanceMember;
-        } else if (memberBuilder.isTopLevel) {
-          uri = memberBuilder.library.importUri;
-          kind = macro.IdentifierKind.topLevelMember;
-        } else {
-          kind = macro.IdentifierKind.instanceMember;
-        }
-        return new macro.ResolvedIdentifier(
-            kind: kind,
-            name: identifier.name,
-            staticScope: staticScope,
-            uri: uri);
-      } else if (typeDeclarationBuilder != null) {
-        Uri? uri;
-        if (typeDeclarationBuilder is ClassBuilder) {
-          uri = typeDeclarationBuilder.library.importUri;
-        } else if (typeDeclarationBuilder is TypeAliasBuilder) {
-          uri = typeDeclarationBuilder.library.importUri;
-        } else if (identifier.name == 'dynamic') {
-          uri = Uri.parse('dart:core');
-        }
-        return new macro.ResolvedIdentifier(
-            kind: macro.IdentifierKind.topLevelMember,
-            name: identifier.name,
-            staticScope: null,
-            uri: uri);
-      } else if (parameterBuilder != null) {
-        return new macro.ResolvedIdentifier(
-            kind: macro.IdentifierKind.local,
-            name: identifier.name,
-            staticScope: null,
-            uri: null);
-      } else {
-        throw new StateError('Unable to resolve identifier $identifier');
-      }
-    } else {
-      // TODO(johnniwinther): Use [_IdentifierImpl] for all identifiers.
-      if (identical(identifier, dynamicIdentifier)) {
-        return new macro.ResolvedIdentifier(
-            kind: macro.IdentifierKind.topLevelMember,
-            name: identifier.name,
-            staticScope: null,
-            uri: Uri.parse('dart:core'));
-      } else {
-        return new macro.ResolvedIdentifier(
-            kind: macro.IdentifierKind.topLevelMember,
-            name: identifier.name,
-            staticScope: null,
-            uri: null);
-      }
-    }
-  }
-
-  Iterable<_ApplicationData> get _applicationData {
-    if (_applicationDataCache == null) {
-      List<_ApplicationData> data = _applicationDataCache = [];
-      for (MapEntry<SourceLibraryBuilder,
-          LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
-        SourceLibraryBuilder libraryBuilder = libraryEntry.key;
-        LibraryMacroApplicationData libraryMacroApplicationData =
-            libraryEntry.value;
-        for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
-            in libraryMacroApplicationData.memberApplications.entries) {
-          MemberBuilder memberBuilder = memberEntry.key;
-          macro.Declaration? declaration = _getMemberDeclaration(memberBuilder);
-          if (declaration != null) {
-            data.add(new _ApplicationData(
-                libraryBuilder, memberBuilder, declaration, memberEntry.value));
-          }
-        }
-        for (MapEntry<SourceClassBuilder, ClassMacroApplicationData> classEntry
-            in libraryMacroApplicationData.classData.entries) {
-          SourceClassBuilder classBuilder = classEntry.key;
-          ClassMacroApplicationData classData = classEntry.value;
-          List<MacroApplication>? classApplications =
-              classData.classApplications;
-          if (classApplications != null) {
-            macro.ClassDeclaration classDeclaration =
-                _getClassDeclaration(classBuilder);
-            data.add(new _ApplicationData(libraryBuilder, classBuilder,
-                classDeclaration, classApplications));
-          }
-          for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
-              in classData.memberApplications.entries) {
-            MemberBuilder memberBuilder = memberEntry.key;
-            macro.Declaration? declaration =
-                _getMemberDeclaration(memberBuilder);
-            if (declaration != null) {
-              data.add(new _ApplicationData(libraryBuilder, memberBuilder,
-                  declaration, memberEntry.value));
-            }
-          }
-        }
-      }
-    }
-    return _applicationDataCache!;
-  }
-
-  Future<List<macro.MacroExecutionResult>> _applyTypeMacros(
-      _ApplicationData applicationData) async {
-    macro.Declaration declaration = applicationData.declaration;
-    List<macro.MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication
-        in applicationData.macroApplications) {
-      if (macroApplication.instanceIdentifier
-          .shouldExecute(_declarationKind(declaration), macro.Phase.types)) {
-        macro.MacroExecutionResult result =
-            await _macroExecutor.executeTypesPhase(
-                macroApplication.instanceIdentifier,
-                declaration,
-                identifierResolver);
-        if (result.isNotEmpty) {
-          results.add(result);
-        }
-      }
-    }
-
-    if (retainDataForTesting) {
-      Builder builder = applicationData.builder;
-      if (builder is SourceClassBuilder) {
-        dataForTesting?.classTypesResults[builder] = results;
-      } else {
-        dataForTesting?.memberTypesResults[builder as MemberBuilder] = results;
-      }
-    }
-    return results;
-  }
-
-  late macro.IdentifierResolver identifierResolver;
-  late SourceLoader sourceLoader;
-
-  Future<List<SourceLibraryBuilder>> applyTypeMacros(
-      SourceLoader sourceLoader) async {
-    identifierResolver = new _IdentifierResolver(sourceLoader);
-    List<SourceLibraryBuilder> augmentationLibraries = [];
-    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
-    for (_ApplicationData macroApplication in _applicationData) {
-      List<macro.MacroExecutionResult> executionResults =
-          await _applyTypeMacros(macroApplication);
-      if (executionResults.isNotEmpty) {
-        (results[macroApplication.libraryBuilder] ??= [])
-            .addAll(executionResults);
-      }
-    }
-    for (MapEntry<SourceLibraryBuilder, List<macro.MacroExecutionResult>> entry
-        in results.entries) {
-      SourceLibraryBuilder sourceLibraryBuilder = entry.key;
-      assert(entry.value.isNotEmpty);
-      String result = _macroExecutor
-          .buildAugmentationLibrary(entry.value, _resolveIdentifier)
-          .trim();
-      assert(
-          result.trim().isNotEmpty,
-          "Empty types phase augmentation library source for "
-          "$sourceLibraryBuilder}");
-      if (result.isNotEmpty) {
-        if (retainDataForTesting) {
-          dataForTesting?.libraryTypesResult[sourceLibraryBuilder] = result;
-        }
-        augmentationLibraries
-            .add(await sourceLibraryBuilder.createAugmentationLibrary(result));
-      }
-    }
-    return augmentationLibraries;
-  }
-
-  Future<void> _applyDeclarationsMacros(_ApplicationData applicationData,
-      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
-    List<macro.MacroExecutionResult> results = [];
-    macro.Declaration declaration = applicationData.declaration;
-    for (MacroApplication macroApplication
-        in applicationData.macroApplications) {
-      if (macroApplication.instanceIdentifier.shouldExecute(
-          _declarationKind(declaration), macro.Phase.declarations)) {
-        macro.MacroExecutionResult result =
-            await _macroExecutor.executeDeclarationsPhase(
-                macroApplication.instanceIdentifier,
-                declaration,
-                identifierResolver,
-                typeResolver,
-                classIntrospector);
-        if (result.isNotEmpty) {
-          String source = _macroExecutor
-              .buildAugmentationLibrary([result], _resolveIdentifier);
-          SourceLibraryBuilder augmentationLibrary = await applicationData
-              .libraryBuilder
-              .createAugmentationLibrary(source);
-          await onAugmentationLibrary(augmentationLibrary);
-          if (retainDataForTesting) {
-            results.add(result);
-          }
-        }
-      }
-    }
-    if (retainDataForTesting) {
-      Builder builder = applicationData.builder;
-      if (builder is SourceClassBuilder) {
-        dataForTesting?.classDeclarationsResults[builder] = results;
-      } else {
-        dataForTesting?.memberDeclarationsResults[builder as MemberBuilder] =
-            results;
-      }
-    }
-  }
-
-  late Types types;
-  late macro.TypeResolver typeResolver;
-  late macro.ClassIntrospector classIntrospector;
-
-  Future<void> applyDeclarationsMacros(ClassHierarchyBuilder classHierarchy,
-      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
-    types = new Types(classHierarchy);
-    typeResolver = new _TypeResolver(this);
-    classIntrospector = new _ClassIntrospector(this, classHierarchy);
-    for (_ApplicationData macroApplication in _applicationData) {
-      await _applyDeclarationsMacros(macroApplication, onAugmentationLibrary);
-    }
-  }
-
-  Future<List<macro.MacroExecutionResult>> _applyDefinitionMacros(
-      _ApplicationData applicationData) async {
-    List<macro.MacroExecutionResult> results = [];
-    macro.Declaration declaration = applicationData.declaration;
-    for (MacroApplication macroApplication
-        in applicationData.macroApplications) {
-      if (macroApplication.instanceIdentifier.shouldExecute(
-          _declarationKind(declaration), macro.Phase.definitions)) {
-        macro.MacroExecutionResult result =
-            await _macroExecutor.executeDefinitionsPhase(
-                macroApplication.instanceIdentifier,
-                declaration,
-                identifierResolver,
-                typeResolver,
-                classIntrospector,
-                typeDeclarationResolver);
-        if (result.isNotEmpty) {
-          results.add(result);
-        }
-      }
-    }
-    if (retainDataForTesting) {
-      Builder builder = applicationData.builder;
-      if (builder is SourceClassBuilder) {
-        dataForTesting?.classDefinitionsResults[builder] = results;
-      } else {
-        dataForTesting?.memberDefinitionsResults[builder as MemberBuilder] =
-            results;
-      }
-    }
-    return results;
-  }
-
-  late macro.TypeDeclarationResolver typeDeclarationResolver;
-
-  Future<List<SourceLibraryBuilder>> applyDefinitionMacros() async {
-    typeDeclarationResolver = new _TypeDeclarationResolver();
-    List<SourceLibraryBuilder> augmentationLibraries = [];
-    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
-    for (_ApplicationData macroApplication in _applicationData) {
-      List<macro.MacroExecutionResult> executionResults =
-          await _applyDefinitionMacros(macroApplication);
-      if (executionResults.isNotEmpty) {
-        (results[macroApplication.libraryBuilder] ??= [])
-            .addAll(executionResults);
-      }
-    }
-    for (MapEntry<SourceLibraryBuilder, List<macro.MacroExecutionResult>> entry
-        in results.entries) {
-      SourceLibraryBuilder sourceLibraryBuilder = entry.key;
-      String result = _macroExecutor.buildAugmentationLibrary(
-          entry.value, _resolveIdentifier);
-      assert(
-          result.trim().isNotEmpty,
-          "Empty definitions phase augmentation library source for "
-          "$sourceLibraryBuilder}");
-      if (retainDataForTesting) {
-        dataForTesting?.libraryDefinitionResult[sourceLibraryBuilder] = result;
-      }
-      augmentationLibraries
-          .add(await sourceLibraryBuilder.createAugmentationLibrary(result));
-    }
-    return augmentationLibraries;
-  }
-
-  void close() {
-    _macroExecutor.close();
-    _staticTypeCache.clear();
-    _typeAnnotationCache.clear();
-    _applicationDataCache?.clear();
-  }
-
-  macro.ClassDeclaration _createClassDeclaration(ClassBuilder builder) {
-    macro.ClassDeclaration declaration = new macro.ClassDeclarationImpl(
-        id: macro.RemoteInstance.uniqueId,
-        identifier: new _IdentifierImpl.forTypeDeclarationBuilder(
-            typeDeclarationBuilder: builder,
-            libraryBuilder: builder.library,
-            id: macro.RemoteInstance.uniqueId,
-            name: builder.name),
-        // TODO(johnniwinther): Support typeParameters
-        typeParameters: [],
-        // TODO(johnniwinther): Support interfaces
-        interfaces: [],
-        isAbstract: builder.isAbstract,
-        isExternal: builder.isExternal,
-        // TODO(johnniwinther): Support mixins
-        mixins: [],
-        // TODO(johnniwinther): Support superclass
-        superclass: null);
-    _classBuilders[declaration] = builder;
-    return declaration;
-  }
-
-  List<List<macro.ParameterDeclarationImpl>> _createParameters(
-      MemberBuilder builder, List<FormalParameterBuilder>? formals) {
-    List<macro.ParameterDeclarationImpl>? positionalParameters;
-    List<macro.ParameterDeclarationImpl>? namedParameters;
-    if (formals == null) {
-      positionalParameters = namedParameters = const [];
-    } else {
-      positionalParameters = [];
-      namedParameters = [];
-      for (FormalParameterBuilder formal in formals) {
-        macro.TypeAnnotationImpl type =
-            computeTypeAnnotation(builder.library, formal.type);
-        macro.IdentifierImpl identifier =
-            new _IdentifierImpl.forParameterBuilder(
-                id: macro.RemoteInstance.uniqueId,
-                name: formal.name,
-                parameterBuilder: formal,
-                libraryBuilder: builder.library);
-        if (formal.isNamed) {
-          namedParameters.add(new macro.ParameterDeclarationImpl(
-            id: macro.RemoteInstance.uniqueId,
-            identifier: identifier,
-            isRequired: formal.isNamedRequired,
-            isNamed: true,
-            type: type,
-          ));
-        } else {
-          positionalParameters.add(new macro.ParameterDeclarationImpl(
-            id: macro.RemoteInstance.uniqueId,
-            identifier: identifier,
-            isRequired: formal.isRequired,
-            isNamed: false,
-            type: type,
-          ));
-        }
-      }
-    }
-    return [positionalParameters, namedParameters];
-  }
-
-  macro.ConstructorDeclaration _createConstructorDeclaration(
-      SourceConstructorBuilder builder) {
-    List<FormalParameterBuilder>? formals = null;
-    // TODO(johnniwinther): Support formals for other constructors.
-    if (builder is DeclaredSourceConstructorBuilder) {
-      formals = builder.formals;
-    }
-    List<List<macro.ParameterDeclarationImpl>> parameters =
-        _createParameters(builder, formals);
-    macro.ClassDeclaration definingClass =
-        _getClassDeclaration(builder.classBuilder as SourceClassBuilder);
-    return new macro.ConstructorDeclarationImpl(
-      id: macro.RemoteInstance.uniqueId,
-      identifier: new _IdentifierImpl.forMemberBuilder(
-          memberBuilder: builder,
-          id: macro.RemoteInstance.uniqueId,
-          name: builder.name),
-      definingClass: definingClass.identifier as macro.IdentifierImpl,
-      isFactory: builder.isFactory,
-      isAbstract: builder.isAbstract,
-      isExternal: builder.isExternal,
-      isGetter: builder.isGetter,
-      isOperator: builder.isOperator,
-      isSetter: builder.isSetter,
-      positionalParameters: parameters[0],
-      namedParameters: parameters[1],
-      // TODO(johnniwinther): Support constructor return type.
-      returnType: computeTypeAnnotation(builder.library, null),
-      // TODO(johnniwinther): Support typeParameters
-      typeParameters: const [],
-    );
-  }
-
-  macro.ConstructorDeclaration _createFactoryDeclaration(
-      SourceFactoryBuilder builder) {
-    List<List<macro.ParameterDeclarationImpl>> parameters =
-        _createParameters(builder, builder.formals);
-    macro.ClassDeclaration definingClass =
-        _getClassDeclaration(builder.classBuilder as SourceClassBuilder);
-
-    return new macro.ConstructorDeclarationImpl(
-      id: macro.RemoteInstance.uniqueId,
-      identifier: new _IdentifierImpl.forMemberBuilder(
-          memberBuilder: builder,
-          id: macro.RemoteInstance.uniqueId,
-          name: builder.name),
-      definingClass: definingClass.identifier as macro.IdentifierImpl,
-      isFactory: builder.isFactory,
-      isAbstract: builder.isAbstract,
-      isExternal: builder.isExternal,
-      isGetter: builder.isGetter,
-      isOperator: builder.isOperator,
-      isSetter: builder.isSetter,
-      positionalParameters: parameters[0],
-      namedParameters: parameters[1],
-      // TODO(johnniwinther): Support constructor return type.
-      returnType: computeTypeAnnotation(builder.library, null),
-      // TODO(johnniwinther): Support typeParameters
-      typeParameters: const [],
-    );
-  }
-
-  macro.FunctionDeclaration _createFunctionDeclaration(
-      SourceProcedureBuilder builder) {
-    List<List<macro.ParameterDeclarationImpl>> parameters =
-        _createParameters(builder, builder.formals);
-
-    macro.ClassDeclaration? definingClass = null;
-    if (builder.classBuilder != null) {
-      definingClass =
-          _getClassDeclaration(builder.classBuilder as SourceClassBuilder);
-    }
-    if (definingClass != null) {
-      // TODO(johnniwinther): Should static fields be field or variable
-      //  declarations?
-      return new macro.MethodDeclarationImpl(
-          id: macro.RemoteInstance.uniqueId,
-          identifier: new _IdentifierImpl.forMemberBuilder(
-              memberBuilder: builder,
-              id: macro.RemoteInstance.uniqueId,
-              name: builder.name),
-          definingClass: definingClass.identifier as macro.IdentifierImpl,
-          isAbstract: builder.isAbstract,
-          isExternal: builder.isExternal,
-          isGetter: builder.isGetter,
-          isOperator: builder.isOperator,
-          isSetter: builder.isSetter,
-          isStatic: builder.isStatic,
-          positionalParameters: parameters[0],
-          namedParameters: parameters[1],
-          returnType:
-              computeTypeAnnotation(builder.library, builder.returnType),
-          // TODO(johnniwinther): Support typeParameters
-          typeParameters: const []);
-    } else {
-      return new macro.FunctionDeclarationImpl(
-          id: macro.RemoteInstance.uniqueId,
-          identifier: new _IdentifierImpl.forMemberBuilder(
-              memberBuilder: builder,
-              id: macro.RemoteInstance.uniqueId,
-              name: builder.name),
-          isAbstract: builder.isAbstract,
-          isExternal: builder.isExternal,
-          isGetter: builder.isGetter,
-          isOperator: builder.isOperator,
-          isSetter: builder.isSetter,
-          positionalParameters: parameters[0],
-          namedParameters: parameters[1],
-          returnType:
-              computeTypeAnnotation(builder.library, builder.returnType),
-          // TODO(johnniwinther): Support typeParameters
-          typeParameters: const []);
-    }
-  }
-
-  macro.VariableDeclaration _createVariableDeclaration(
-      SourceFieldBuilder builder) {
-    macro.ClassDeclaration? definingClass = null;
-    if (builder.classBuilder != null) {
-      definingClass =
-          _getClassDeclaration(builder.classBuilder as SourceClassBuilder);
-    }
-    if (definingClass != null) {
-      // TODO(johnniwinther): Should static fields be field or variable
-      //  declarations?
-      return new macro.FieldDeclarationImpl(
-          id: macro.RemoteInstance.uniqueId,
-          identifier: new macro.IdentifierImpl(
-              id: macro.RemoteInstance.uniqueId, name: builder.name),
-          definingClass: definingClass.identifier as macro.IdentifierImpl,
-          isExternal: builder.isExternal,
-          isFinal: builder.isFinal,
-          isLate: builder.isLate,
-          isStatic: builder.isStatic,
-          type: computeTypeAnnotation(builder.library, builder.type));
-    } else {
-      return new macro.VariableDeclarationImpl(
-          id: macro.RemoteInstance.uniqueId,
-          identifier: new macro.IdentifierImpl(
-              id: macro.RemoteInstance.uniqueId, name: builder.name),
-          isExternal: builder.isExternal,
-          isFinal: builder.isFinal,
-          isLate: builder.isLate,
-          type: computeTypeAnnotation(builder.library, builder.type));
-    }
-  }
-
-  Map<TypeBuilder?, macro.TypeAnnotationImpl> _typeAnnotationCache = {};
-
-  List<macro.TypeAnnotationImpl> computeTypeAnnotations(
-      LibraryBuilder library, List<TypeBuilder>? typeBuilders) {
-    if (typeBuilders == null) return const [];
-    return new List.generate(typeBuilders.length,
-        (int index) => computeTypeAnnotation(library, typeBuilders[index]));
-  }
-
-  macro.TypeAnnotationImpl _computeTypeAnnotation(
-      LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
-    if (typeBuilder != null) {
-      if (typeBuilder is NamedTypeBuilder) {
-        Object name = typeBuilder.name;
-        List<macro.TypeAnnotationImpl> typeArguments =
-            computeTypeAnnotations(libraryBuilder, typeBuilder.arguments);
-        bool isNullable = typeBuilder.nullabilityBuilder.isNullable;
-        if (name is String) {
-          return new macro.NamedTypeAnnotationImpl(
-              id: macro.RemoteInstance.uniqueId,
-              identifier: new _IdentifierImpl.forTypeBuilder(
-                  typeBuilder: typeBuilder,
-                  libraryBuilder: libraryBuilder,
-                  id: macro.RemoteInstance.uniqueId,
-                  name: name),
-              typeArguments: typeArguments,
-              isNullable: isNullable);
-        } else if (name is QualifiedName) {
-          assert(name.qualifier is String);
-          return new macro.NamedTypeAnnotationImpl(
-              id: macro.RemoteInstance.uniqueId,
-              identifier: new _IdentifierImpl.forTypeBuilder(
-                  typeBuilder: typeBuilder,
-                  libraryBuilder: libraryBuilder,
-                  id: macro.RemoteInstance.uniqueId,
-                  name: name.name),
-              typeArguments: typeArguments,
-              isNullable: isNullable);
-        }
-      }
-    }
-    return new macro.NamedTypeAnnotationImpl(
-        id: macro.RemoteInstance.uniqueId,
-        identifier: dynamicIdentifier,
-        isNullable: false,
-        typeArguments: const []);
-  }
-
-  macro.TypeAnnotationImpl computeTypeAnnotation(
-      LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
-    return _typeAnnotationCache[typeBuilder] ??=
-        _computeTypeAnnotation(libraryBuilder, typeBuilder);
-  }
-
-  TypeBuilder _typeBuilderForAnnotation(
-      macro.TypeAnnotationCode typeAnnotation) {
-    NullabilityBuilder nullabilityBuilder;
-    if (typeAnnotation is macro.NullableTypeAnnotationCode) {
-      nullabilityBuilder = const NullabilityBuilder.nullable();
-      typeAnnotation = typeAnnotation.underlyingType;
-    } else {
-      nullabilityBuilder = const NullabilityBuilder.omitted();
-    }
-
-    if (typeAnnotation is macro.NamedTypeAnnotationCode) {
-      _IdentifierImpl typeIdentifier = typeAnnotation.name as _IdentifierImpl;
-      TypeDeclarationBuilder? typeDeclarationBuilder =
-          typeIdentifier.typeDeclarationBuilder;
-      InstanceTypeVariableAccessState instanceTypeVariableAccessState =
-          InstanceTypeVariableAccessState.Unexpected;
-      if (typeDeclarationBuilder == null) {
-        TypeBuilder? originalTypeBuilder = typeIdentifier.typeBuilder;
-
-        if (originalTypeBuilder == null) {
-          throw new StateError('No type builder for $typeIdentifier');
-        }
-        if (originalTypeBuilder is! NamedTypeBuilder) {
-          throw new StateError(
-              'Type $typeIdentifier was not a named type as expected!');
-        }
-        typeDeclarationBuilder = originalTypeBuilder.declaration!;
-        instanceTypeVariableAccessState =
-            originalTypeBuilder.instanceTypeVariableAccess;
-      }
-      List<TypeBuilder> arguments = [
-        for (macro.TypeAnnotationCode argumentCode
-            in typeAnnotation.typeArguments)
-          _typeBuilderForAnnotation(argumentCode),
-      ];
-
-      return new NamedTypeBuilder.fromTypeDeclarationBuilder(
-          typeDeclarationBuilder, nullabilityBuilder,
-          instanceTypeVariableAccess: instanceTypeVariableAccessState,
-          arguments: arguments);
-    }
-    // TODO: Implement support for function types.
-    throw new UnimplementedError(
-        'Unimplemented type annotation kind ${typeAnnotation.kind}');
-  }
-
-  macro.StaticType resolveTypeAnnotation(
-      macro.TypeAnnotationCode typeAnnotation) {
-    TypeBuilder typeBuilder = _typeBuilderForAnnotation(typeAnnotation);
-    // TODO: This should probably be passed in instead, possibly attached to the
-    // TypeResolver class?
-    LibraryBuilder libraryBuilder =
-        typeAnnotation.parts.whereType<_IdentifierImpl>().first.libraryBuilder;
-    return createStaticType(typeBuilder.build(libraryBuilder));
-  }
-
-  Map<DartType, _StaticTypeImpl> _staticTypeCache = {};
-
-  macro.StaticType createStaticType(DartType dartType) {
-    return _staticTypeCache[dartType] ??= new _StaticTypeImpl(this, dartType);
-  }
-}
-
-class _IdentifierImpl extends macro.IdentifierImpl {
-  final TypeDeclarationBuilder? typeDeclarationBuilder;
-  final MemberBuilder? memberBuilder;
-  final TypeBuilder? typeBuilder;
-  final LibraryBuilder libraryBuilder;
-  final FormalParameterBuilder? parameterBuilder;
-
-  _IdentifierImpl.forTypeBuilder({
-    required TypeBuilder this.typeBuilder,
-    required this.libraryBuilder,
-    required int id,
-    required String name,
-  })  : typeDeclarationBuilder = null,
-        memberBuilder = null,
-        parameterBuilder = null,
-        super(id: id, name: name);
-
-  _IdentifierImpl.forTypeDeclarationBuilder({
-    required TypeDeclarationBuilder this.typeDeclarationBuilder,
-    required this.libraryBuilder,
-    required int id,
-    required String name,
-  })  : typeBuilder = null,
-        memberBuilder = null,
-        parameterBuilder = null,
-        super(id: id, name: name);
-
-  _IdentifierImpl.forMemberBuilder(
-      {required MemberBuilder this.memberBuilder,
-      required int id,
-      required String name})
-      : typeBuilder = null,
-        typeDeclarationBuilder = null,
-        parameterBuilder = null,
-        libraryBuilder = memberBuilder.library,
-        super(id: id, name: name);
-
-  _IdentifierImpl.forParameterBuilder({
-    required FormalParameterBuilder this.parameterBuilder,
-    required this.libraryBuilder,
-    required int id,
-    required String name,
-  })  : typeBuilder = null,
-        typeDeclarationBuilder = null,
-        memberBuilder = null,
-        super(id: id, name: name);
-}
-
-class _StaticTypeImpl extends macro.StaticType {
-  final MacroApplications macroApplications;
-  final DartType type;
-
-  _StaticTypeImpl(this.macroApplications, this.type);
-
-  @override
-  Future<bool> isExactly(covariant _StaticTypeImpl other) {
-    return new Future.value(type == other.type);
-  }
-
-  @override
-  Future<bool> isSubtypeOf(covariant _StaticTypeImpl other) {
-    return new Future.value(macroApplications.types
-        .isSubtypeOf(type, other.type, SubtypeCheckMode.withNullabilities));
-  }
-}
-
-class _IdentifierResolver implements macro.IdentifierResolver {
-  final SourceLoader sourceLoader;
-
-  _IdentifierResolver(this.sourceLoader);
-
-  @override
-  Future<macro.Identifier> resolveIdentifier(Uri library, String name) {
-    LibraryBuilder? libraryBuilder = sourceLoader.lookupLibraryBuilder(library);
-    if (libraryBuilder == null) {
-      return new Future.error(
-          new ArgumentError('Library at uri $library could not be resolved.'),
-          StackTrace.current);
-    }
-    bool isSetter = false;
-    String memberName = name;
-    if (name.endsWith('=')) {
-      memberName = name.substring(0, name.length - 1);
-      isSetter = true;
-    }
-    Builder? builder =
-        libraryBuilder.scope.lookupLocalMember(memberName, setter: isSetter);
-    if (builder == null) {
-      return new Future.error(
-          new ArgumentError(
-              'Unable to find top level identifier "$name" in $library'),
-          StackTrace.current);
-    } else if (builder is TypeDeclarationBuilder) {
-      return new Future.value(new _IdentifierImpl.forTypeDeclarationBuilder(
-          typeDeclarationBuilder: builder,
-          libraryBuilder: libraryBuilder,
-          id: macro.RemoteInstance.uniqueId,
-          name: name));
-    } else if (builder is MemberBuilder) {
-      return new Future.value(new _IdentifierImpl.forMemberBuilder(
-          memberBuilder: builder,
-          id: macro.RemoteInstance.uniqueId,
-          name: name));
-    } else {
-      return new Future.error(
-          new UnsupportedError('Unsupported identifier kind $builder'),
-          StackTrace.current);
-    }
-  }
-}
-
-class _TypeResolver implements macro.TypeResolver {
-  final MacroApplications macroApplications;
-
-  _TypeResolver(this.macroApplications);
-
-  @override
-  Future<macro.StaticType> resolve(macro.TypeAnnotationCode typeAnnotation) {
-    return new Future.value(
-        macroApplications.resolveTypeAnnotation(typeAnnotation));
-  }
-}
-
-class _ClassIntrospector implements macro.ClassIntrospector {
-  final MacroApplications macroApplications;
-  final ClassHierarchyBuilder classHierarchy;
-
-  _ClassIntrospector(this.macroApplications, this.classHierarchy);
-
-  @override
-  Future<List<macro.ConstructorDeclaration>> constructorsOf(
-      macro.ClassDeclaration clazz) {
-    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
-    List<macro.ConstructorDeclaration> result = [];
-    classBuilder.forEachConstructor((_, MemberBuilder memberBuilder) {
-      if (memberBuilder is DeclaredSourceConstructorBuilder) {
-        // TODO(johnniwinther): Should we support synthesized constructors?
-        result.add(macroApplications._getMemberDeclaration(memberBuilder)
-            as macro.ConstructorDeclaration);
-      }
-    });
-    classBuilder.forEach((_, Builder memberBuilder) {
-      if (memberBuilder is SourceFactoryBuilder) {
-        result.add(macroApplications._getMemberDeclaration(memberBuilder)
-            as macro.ConstructorDeclaration);
-      }
-    });
-    return new Future.value(result);
-  }
-
-  @override
-  Future<List<macro.FieldDeclaration>> fieldsOf(macro.ClassDeclaration clazz) {
-    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
-    List<macro.FieldDeclaration> result = [];
-    classBuilder.forEach((_, Builder memberBuilder) {
-      if (memberBuilder is SourceFieldBuilder) {
-        result.add(macroApplications._getMemberDeclaration(memberBuilder)
-            as macro.FieldDeclaration);
-      }
-    });
-    return new Future.value(result);
-  }
-
-  @override
-  Future<List<macro.ClassDeclaration>> interfacesOf(
-      macro.ClassDeclaration clazz) {
-    // TODO: implement interfacesOf
-    throw new UnimplementedError('_ClassIntrospector.interfacesOf');
-  }
-
-  @override
-  Future<List<macro.MethodDeclaration>> methodsOf(
-      macro.ClassDeclaration clazz) {
-    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
-    List<macro.MethodDeclaration> result = [];
-    classBuilder.forEach((_, Builder memberBuilder) {
-      if (memberBuilder is SourceProcedureBuilder) {
-        result.add(macroApplications._getMemberDeclaration(memberBuilder)
-            as macro.MethodDeclaration);
-      }
-    });
-    return new Future.value(result);
-  }
-
-  @override
-  Future<List<macro.ClassDeclaration>> mixinsOf(macro.ClassDeclaration clazz) {
-    // TODO: implement mixinsOf
-    throw new UnimplementedError('_ClassIntrospector.mixinsOf');
-  }
-
-  @override
-  Future<macro.ClassDeclaration?> superclassOf(macro.ClassDeclaration clazz) {
-    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
-    ClassHierarchyNode node =
-        classHierarchy.getNodeFromClassBuilder(classBuilder);
-    ClassHierarchyNode? superNode = node.supernode;
-    while (superNode != null &&
-        superNode.classBuilder.isAnonymousMixinApplication) {
-      superNode = superNode.supernode;
-    }
-    if (superNode != null) {
-      return new Future.value(
-          macroApplications._getClassDeclaration(superNode.classBuilder));
-    }
-    return new Future.value();
-  }
-}
-
-class _TypeDeclarationResolver implements macro.TypeDeclarationResolver {
-  @override
-  Future<macro.TypeDeclaration> declarationOf(macro.Identifier identifier) {
-    // TODO: implement declarationOf
-    throw new UnimplementedError('_TypeDeclarationResolver.declarationOf');
-  }
-}
-
-macro.DeclarationKind _declarationKind(macro.Declaration declaration) {
-  if (declaration is macro.ConstructorDeclaration) {
-    return macro.DeclarationKind.constructor;
-  } else if (declaration is macro.MethodDeclaration) {
-    return macro.DeclarationKind.method;
-  } else if (declaration is macro.FunctionDeclaration) {
-    return macro.DeclarationKind.function;
-  } else if (declaration is macro.FieldDeclaration) {
-    return macro.DeclarationKind.field;
-  } else if (declaration is macro.VariableDeclaration) {
-    return macro.DeclarationKind.variable;
-  } else if (declaration is macro.ClassDeclaration) {
-    return macro.DeclarationKind.clazz;
-  }
-  throw new UnsupportedError(
-      "Unexpected declaration ${declaration} (${declaration.runtimeType})");
-}
-
-/// Data needed to apply a list of macro applications to a class or member.
-class _ApplicationData {
-  final SourceLibraryBuilder libraryBuilder;
-  final Builder builder;
-  final macro.Declaration declaration;
-  final List<MacroApplication> macroApplications;
-
-  _ApplicationData(this.libraryBuilder, this.builder, this.declaration,
-      this.macroApplications);
-}
-
-extension on macro.MacroExecutionResult {
-  bool get isNotEmpty =>
-      libraryAugmentations.isNotEmpty || classAugmentations.isNotEmpty;
-}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
new file mode 100644
index 0000000..e177ba8
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -0,0 +1,1935 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:_fe_analyzer_shared/src/messages/codes.dart';
+import 'package:_fe_analyzer_shared/src/parser/parser.dart';
+import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
+import 'package:_fe_analyzer_shared/src/scanner/token.dart';
+
+import '../../builder/builder.dart';
+import '../../builder/class_builder.dart';
+import '../../builder/member_builder.dart';
+import '../../builder/metadata_builder.dart';
+import '../../builder/prefix_builder.dart';
+import '../../scope.dart';
+import '../../source/diet_parser.dart';
+import '../../source/source_library_builder.dart';
+
+import 'macro.dart';
+
+List<MacroApplication>? prebuildAnnotations(
+    {required SourceLibraryBuilder enclosingLibrary,
+    required List<MetadataBuilder>? metadataBuilders,
+    required Uri fileUri,
+    required Scope scope}) {
+  if (metadataBuilders == null) return null;
+  List<MacroApplication>? result;
+  for (MetadataBuilder metadataBuilder in metadataBuilders) {
+    _MacroListener listener =
+        new _MacroListener(enclosingLibrary, fileUri, scope);
+    Parser parser = new Parser(listener,
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
+    parser.parseMetadata(
+        parser.syntheticPreviousToken(metadataBuilder.beginToken));
+    MacroApplication? application = listener.popMacroApplication();
+    if (application != null) {
+      result ??= [];
+      result.add(application);
+    }
+  }
+  return result;
+}
+
+class _Node {}
+
+class _UnrecognizedNode implements _Node {
+  const _UnrecognizedNode();
+}
+
+class _MacroClassNode implements _Node {
+  final Token token;
+  final ClassBuilder classBuilder;
+
+  _MacroClassNode(this.token, this.classBuilder);
+}
+
+class _MacroConstructorNode implements _Node {
+  final ClassBuilder classBuilder;
+  final String constructorName;
+
+  _MacroConstructorNode(this.classBuilder, this.constructorName);
+}
+
+class _PrefixNode implements _Node {
+  final PrefixBuilder prefixBuilder;
+
+  _PrefixNode(this.prefixBuilder);
+}
+
+class _MacroApplicationNode implements _Node {
+  final MacroApplication application;
+
+  _MacroApplicationNode(this.application);
+}
+
+class _NoArgumentsNode implements _Node {
+  const _NoArgumentsNode();
+}
+
+class _ArgumentsNode implements _Node {
+  _ArgumentsNode();
+}
+
+class _MacroListener implements Listener {
+  final SourceLibraryBuilder currentLibrary;
+
+  @override
+  final Uri uri;
+
+  final Scope scope;
+
+  final List<_Node> _stack = [];
+
+  Object? _unrecognized;
+
+  bool get unrecognized => _unrecognized != null;
+
+  void set unrecognized(bool value) {
+    if (value) {
+      // TODO(johnniwinther): Remove this when implementation is more mature.
+      _unrecognized = StackTrace.current;
+    } else {
+      _unrecognized = null;
+    }
+  }
+
+  _MacroListener(this.currentLibrary, this.uri, this.scope);
+
+  void pushUnsupported() {
+    push(const _UnrecognizedNode());
+    _unsupported();
+  }
+
+  void push(_Node node) {
+    _stack.add(node);
+  }
+
+  _Node pop() => _stack.removeLast();
+
+  MacroApplication? popMacroApplication() {
+    if (unrecognized) return null;
+    if (_stack.length != 1) return null;
+    _Node node = pop();
+    if (node is _MacroApplicationNode) {
+      return node.application;
+    }
+    return null;
+  }
+
+  @override
+  void beginMetadata(Token token) {
+    // Do nothing.
+  }
+
+  @override
+  void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
+    _Node argumentsNode = pop();
+    _Node referenceNode = pop();
+    if (!unrecognized) {
+      ClassBuilder? macroClass;
+      String? constructorName;
+      if (referenceNode is _MacroClassNode) {
+        macroClass = referenceNode.classBuilder;
+        MemberBuilder? member = referenceNode.classBuilder
+            .findConstructorOrFactory(
+                '', referenceNode.token.charOffset, uri, currentLibrary);
+        if (member != null) {
+          constructorName = '';
+        }
+      } else if (referenceNode is _MacroConstructorNode) {
+        macroClass = referenceNode.classBuilder;
+        constructorName = referenceNode.constructorName;
+      }
+      if (macroClass != null &&
+          constructorName != null &&
+          argumentsNode is _ArgumentsNode) {
+        push(new _MacroApplicationNode(
+            new MacroApplication(macroClass, constructorName)));
+        return;
+      }
+    }
+    pushUnsupported();
+  }
+
+  @override
+  void handleIdentifier(Token token, IdentifierContext context) {
+    switch (context) {
+      case IdentifierContext.metadataReference:
+        Builder? builder = scope.lookup(token.lexeme, token.charOffset, uri);
+        if (builder is ClassBuilder && builder.isMacro) {
+          push(new _MacroClassNode(token, builder));
+        } else if (builder is PrefixBuilder) {
+          push(new _PrefixNode(builder));
+        } else {
+          pushUnsupported();
+        }
+        break;
+      case IdentifierContext.metadataContinuation:
+        _Node node = pop();
+        if (node is _PrefixNode) {
+          Builder? builder =
+              node.prefixBuilder.lookup(token.lexeme, token.charOffset, uri);
+          if (builder is ClassBuilder && builder.isMacro) {
+            push(new _MacroClassNode(token, builder));
+          } else {
+            pushUnsupported();
+          }
+        } else if (node is _MacroClassNode) {
+          MemberBuilder? member = node.classBuilder.findConstructorOrFactory(
+              token.lexeme, token.charOffset, uri, currentLibrary);
+          if (member != null) {
+            push(new _MacroConstructorNode(node.classBuilder, token.lexeme));
+          } else {
+            pushUnsupported();
+          }
+        } else {
+          pushUnsupported();
+        }
+        break;
+      case IdentifierContext.metadataContinuationAfterTypeArguments:
+        _Node node = pop();
+        if (node is _MacroClassNode) {
+          MemberBuilder? member = node.classBuilder.findConstructorOrFactory(
+              token.lexeme, token.charOffset, uri, currentLibrary);
+          if (member != null) {
+            push(new _MacroConstructorNode(node.classBuilder, token.lexeme));
+          } else {
+            pushUnsupported();
+          }
+        } else {
+          pushUnsupported();
+        }
+        break;
+      default:
+        pushUnsupported();
+        break;
+    }
+  }
+
+  @override
+  void beginArguments(Token token) {
+    // Do nothing.
+  }
+
+  @override
+  void endArguments(int count, Token beginToken, Token endToken) {
+    if (count == 0) {
+      push(new _ArgumentsNode());
+    } else {
+      // TODO(johnniwinther): Handle arguments.
+      pushUnsupported();
+    }
+  }
+
+  @override
+  void handleNoArguments(Token token) {
+    push(const _NoArgumentsNode());
+  }
+
+  @override
+  void handleNoTypeArguments(Token token) {
+    // TODO(johnniwinther): Handle type arguments. Ignore for now.
+  }
+
+  @override
+  void handleQualified(Token period) {
+    // Do nothing. Supported qualified names are handled through the identifier
+    // context.
+  }
+
+  //////////////////////////////////////////////////////////////////////////////
+  // Stub implementation
+  //////////////////////////////////////////////////////////////////////////////
+
+  /// Called for listener events that are expected but not supported.
+  void _unsupported() {
+    unrecognized = true;
+  }
+
+  /// Called for listener events that are unexpected.
+  void _unexpected() {
+    unrecognized = true;
+  }
+
+  /// Called for listener events that are supported but not handled yet.
+  void _unhandled() {
+    unrecognized = true;
+  }
+
+  /// Called for listener events whose use in unknown.
+  void _unknown() {
+    unrecognized = true;
+  }
+
+  /// Called for listener events that are ignored.
+  void _ignored() {}
+
+  @override
+  void beginAsOperatorType(Token operator) {
+    _unsupported();
+  }
+
+  @override
+  void beginAssert(Token assertKeyword, Assert kind) {
+    _unsupported();
+  }
+
+  @override
+  void beginAwaitExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginBinaryExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginBlock(Token token, BlockKind blockKind) {
+    _unsupported();
+  }
+
+  @override
+  void beginBlockFunctionBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginCascade(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginCaseExpression(Token caseKeyword) {
+    _unsupported();
+  }
+
+  @override
+  void beginCatchClause(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    _unexpected();
+  }
+
+  @override
+  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginCombinators(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginCompilationUnit(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginConditionalExpression(Token question) {
+    _unsupported();
+  }
+
+  @override
+  void beginConditionalUri(Token ifKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginConditionalUris(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginConstExpression(Token constKeyword) {
+    _unhandled();
+  }
+
+  @override
+  void beginConstLiteral(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void beginConstructorReference(Token start) {
+    _unknown();
+  }
+
+  @override
+  void beginDoWhileStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginDoWhileStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginElseStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginEnum(Token enumKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginExport(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
+    _unexpected();
+  }
+
+  @override
+  void beginExtensionDeclarationPrelude(Token extensionKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
+      Token? externalToken, Token? constToken) {
+    _unexpected();
+  }
+
+  @override
+  void beginFieldInitializer(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginFields(
+      DeclarationKind declarationKind,
+      Token? abstractToken,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      Token lastConsumed) {
+    _unexpected();
+  }
+
+  @override
+  void beginForControlFlow(Token? awaitToken, Token forToken) {
+    _unsupported();
+  }
+
+  @override
+  void beginForInBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginForInExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginForStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginForStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
+      Token? covariantToken, Token? varFinalOrConst) {
+    _unsupported();
+  }
+
+  @override
+  void beginFormalParameterDefaultValueExpression() {
+    _unsupported();
+  }
+
+  @override
+  void beginFormalParameters(Token token, MemberKind kind) {
+    _unsupported();
+  }
+
+  @override
+  void beginFunctionExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginFunctionName(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginFunctionType(Token beginToken) {
+    _unhandled();
+  }
+
+  @override
+  void beginFunctionTypedFormalParameter(Token token) {
+    _unknown();
+  }
+
+  @override
+  void beginHide(Token hideKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginIfControlFlow(Token ifToken) {
+    _unsupported();
+  }
+
+  @override
+  void beginIfStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginImplicitCreationExpression(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void beginImport(Token importKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginInitializedIdentifier(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginInitializer(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginInitializers(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginIsOperatorType(Token operator) {
+    _unhandled();
+  }
+
+  @override
+  void beginLabeledStatement(Token token, int labelCount) {
+    _unsupported();
+  }
+
+  @override
+  void beginLibraryName(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginLiteralString(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void beginLiteralSymbol(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void beginLocalFunctionDeclaration(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginMember() {
+    _unexpected();
+  }
+
+  @override
+  void beginMetadataStar(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginMethod(
+      DeclarationKind declarationKind,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? varFinalOrConst,
+      Token? getOrSet,
+      Token name) {
+    _unexpected();
+  }
+
+  @override
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
+    _unexpected();
+  }
+
+  @override
+  void beginNamedFunctionExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    _unexpected();
+  }
+
+  @override
+  void beginNewExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginOptionalFormalParameters(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginPart(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginPartOf(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginRedirectingFactoryBody(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginRethrowStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginReturnStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginShow(Token showKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void beginSwitchBlock(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
+    _unsupported();
+  }
+
+  @override
+  void beginSwitchStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginThenStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginTopLevelMember(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
+    _unexpected();
+  }
+
+  @override
+  void beginTryStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginTypeArguments(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void beginTypeList(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginTypeVariable(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginTypeVariables(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginTypedef(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginUncategorizedTopLevelDeclaration(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void beginVariableInitializer(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginVariablesDeclaration(
+      Token token, Token? lateToken, Token? varFinalOrConst) {
+    _unsupported();
+  }
+
+  @override
+  void beginWhileStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginWhileStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void beginYieldStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endAsOperatorType(Token operator) {
+    _unhandled();
+  }
+
+  @override
+  void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
+      Token? commaToken, Token semicolonToken) {
+    _unsupported();
+  }
+
+  @override
+  void endAwaitExpression(Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endBinaryExpression(Token token) {
+    _unknown();
+  }
+
+  @override
+  void endBlock(
+      int count, Token beginToken, Token endToken, BlockKind blockKind) {
+    _unsupported();
+  }
+
+  @override
+  void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endCascade() {
+    _unsupported();
+  }
+
+  @override
+  void endCaseExpression(Token colon) {
+    _unsupported();
+  }
+
+  @override
+  void endCatchClause(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endClassDeclaration(Token beginToken, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endClassFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endClassFields(
+      Token? abstractToken,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endClassOrMixinOrExtensionBody(
+      DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endCombinators(int count) {
+    _unexpected();
+  }
+
+  @override
+  void endCompilationUnit(int count, Token token) {
+    _unexpected();
+  }
+
+  @override
+  void endConditionalExpression(Token question, Token colon) {
+    _unhandled();
+  }
+
+  @override
+  void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
+    _unexpected();
+  }
+
+  @override
+  void endConditionalUris(int count) {
+    _unexpected();
+  }
+
+  @override
+  void endConstExpression(Token token) {
+    _unknown();
+  }
+
+  @override
+  void endConstLiteral(Token token) {
+    _unknown();
+  }
+
+  @override
+  void endConstructorReference(Token start, Token? periodBeforeName,
+      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
+    _unknown();
+  }
+
+  @override
+  void endDoWhileStatement(
+      Token doKeyword, Token whileKeyword, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endDoWhileStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endElseStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endEnum(Token enumKeyword, Token leftBrace, int memberCount) {
+    _unexpected();
+  }
+
+  @override
+  void endEnumConstructor(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endEnumFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endEnumFields(
+      Token? abstractToken,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endExport(Token exportKeyword, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void endExtensionConstructor(Token? getOrSet, Token beginToken,
+      Token beginParam, Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
+      Token onKeyword, Token? showKeyword, Token? hideKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endExtensionFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endExtensionFields(
+      Token? abstractToken,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endFieldInitializer(Token assignment, Token token) {
+    _unexpected();
+  }
+
+  @override
+  void endForControlFlow(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endForIn(Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endForInBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endForInControlFlow(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endForInExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endForStatement(Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endForStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endFormalParameter(
+      Token? thisKeyword,
+      Token? superKeyword,
+      Token? periodAfterThisOrSuper,
+      Token nameToken,
+      Token? initializerStart,
+      Token? initializerEnd,
+      FormalParameterKind kind,
+      MemberKind memberKind) {
+    _unsupported();
+  }
+
+  @override
+  void endFormalParameterDefaultValueExpression() {
+    _unsupported();
+  }
+
+  @override
+  void endFormalParameters(
+      int count, Token beginToken, Token endToken, MemberKind kind) {
+    _unsupported();
+  }
+
+  @override
+  void endFunctionExpression(Token beginToken, Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endFunctionName(Token beginToken, Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endFunctionType(Token functionToken, Token? questionMark) {
+    _unhandled();
+  }
+
+  @override
+  void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
+    _unknown();
+  }
+
+  @override
+  void endHide(Token hideKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void endIfControlFlow(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endIfElseControlFlow(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endIfStatement(Token ifToken, Token? elseToken) {
+    _unsupported();
+  }
+
+  @override
+  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
+    _unhandled();
+  }
+
+  @override
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void endInitializedIdentifier(Token nameToken) {
+    _unsupported();
+  }
+
+  @override
+  void endInitializer(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void endInitializers(int count, Token beginToken, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endInvalidAwaitExpression(
+      Token beginToken, Token endToken, MessageCode errorCode) {
+    _unsupported();
+  }
+
+  @override
+  void endInvalidYieldStatement(Token beginToken, Token? starToken,
+      Token endToken, MessageCode errorCode) {
+    _unsupported();
+  }
+
+  @override
+  void endIsOperatorType(Token operator) {
+    _unhandled();
+  }
+
+  @override
+  void endLabeledStatement(int labelCount) {
+    _unsupported();
+  }
+
+  @override
+  void endLibraryName(Token libraryKeyword, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void endLiteralString(int interpolationCount, Token endToken) {
+    _unhandled();
+  }
+
+  @override
+  void endLiteralSymbol(Token hashToken, int identifierCount) {
+    _unhandled();
+  }
+
+  @override
+  void endLocalFunctionDeclaration(Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endMember() {
+    _unexpected();
+  }
+
+  @override
+  void endMetadataStar(int count) {
+    _unsupported();
+  }
+
+  @override
+  void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endMixinDeclaration(Token mixinKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endMixinFactoryMethod(
+      Token beginToken, Token factoryKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endMixinFields(
+      Token? abstractToken,
+      Token? augmentToken,
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
+      Token? beginInitializers, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endNamedFunctionExpression(Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
+      Token? implementsKeyword, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endNewExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endOptionalFormalParameters(
+      int count, Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endPart(Token partKeyword, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void endPartOf(
+      Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
+    _unexpected();
+  }
+
+  @override
+  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endRethrowStatement(Token rethrowToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endReturnStatement(
+      bool hasExpression, Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endShow(Token showKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endSwitchCase(
+      int labelCount,
+      int expressionCount,
+      Token? defaultKeyword,
+      Token? colonAfterDefault,
+      int statementCount,
+      Token firstToken,
+      Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endSwitchStatement(Token switchKeyword, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endThenStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endTopLevelDeclaration(Token nextToken) {
+    _unexpected();
+  }
+
+  @override
+  void endTopLevelFields(
+      Token? externalToken,
+      Token? staticToken,
+      Token? covariantToken,
+      Token? lateToken,
+      Token? varFinalOrConst,
+      int count,
+      Token beginToken,
+      Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endTryStatement(
+      int catchCount, Token tryKeyword, Token? finallyKeyword) {
+    _unsupported();
+  }
+
+  @override
+  void endTypeArguments(int count, Token beginToken, Token endToken) {
+    _unhandled();
+  }
+
+  @override
+  void endTypeList(int count) {
+    _unexpected();
+  }
+
+  @override
+  void endTypeVariable(
+      Token token, int index, Token? extendsOrSuper, Token? variance) {
+    _unsupported();
+  }
+
+  @override
+  void endTypeVariables(Token beginToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void endVariableInitializer(Token assignmentOperator) {
+    _unsupported();
+  }
+
+  @override
+  void endVariablesDeclaration(int count, Token? endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endWhileStatement(Token whileKeyword, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void endWhileStatementBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleAsOperator(Token operator) {
+    _unhandled();
+  }
+
+  @override
+  void handleAssignmentExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleAsyncModifier(Token? asyncToken, Token? starToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleBreakStatement(
+      bool hasTarget, Token breakKeyword, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleCaseMatch(Token caseKeyword, Token colon) {
+    _unsupported();
+  }
+
+  @override
+  void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
+    _unsupported();
+  }
+
+  @override
+  void handleClassExtends(Token? extendsKeyword, int typeCount) {
+    _unexpected();
+  }
+
+  @override
+  void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
+    _unexpected();
+  }
+
+  @override
+  void handleClassNoWithClause() {
+    _unexpected();
+  }
+
+  @override
+  void handleClassWithClause(Token withKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleCommentReference(
+      Token? newKeyword,
+      Token? firstToken,
+      Token? firstPeriod,
+      Token? secondToken,
+      Token? secondPeriod,
+      Token thirdToken) {
+    _ignored();
+  }
+
+  @override
+  void handleCommentReferenceText(String referenceSource, int referenceOffset) {
+    _ignored();
+  }
+
+  @override
+  void handleConditionalExpressionColon() {
+    _unhandled();
+  }
+
+  @override
+  void handleConstFactory(Token constKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleContinueStatement(
+      bool hasTarget, Token continueKeyword, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleDirectivesOnly() {
+    _unknown();
+  }
+
+  @override
+  void handleDottedName(int count, Token firstIdentifier) {
+    _unknown();
+  }
+
+  @override
+  void handleElseControlFlow(Token elseToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleEmptyFunctionBody(Token semicolon) {
+    _unsupported();
+  }
+
+  @override
+  void handleEmptyStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleEndingBinaryExpression(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleEnumElement(Token beginToken) {
+    _unexpected();
+  }
+
+  @override
+  void handleEnumElements(Token elementsEndToken, int elementsCount) {
+    _unexpected();
+  }
+
+  @override
+  void handleEnumHeader(Token enumKeyword, Token leftBrace) {
+    _unexpected();
+  }
+
+  @override
+  void handleEnumNoWithClause() {
+    _unexpected();
+  }
+
+  @override
+  void handleEnumWithClause(Token withKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleErrorToken(ErrorToken token) {
+    _unsupported();
+  }
+
+  @override
+  void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleExpressionStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleExtensionShowHide(Token? showKeyword, int showElementCount,
+      Token? hideKeyword, int hideElementCount) {
+    _unexpected();
+  }
+
+  @override
+  void handleExtraneousExpression(Token token, Message message) {
+    _unknown();
+  }
+
+  @override
+  void handleFinallyBlock(Token finallyKeyword) {
+    _unsupported();
+  }
+
+  @override
+  void handleForInLoopParts(Token? awaitToken, Token forToken,
+      Token leftParenthesis, Token inKeyword) {
+    _unsupported();
+  }
+
+  @override
+  void handleForInitializerEmptyStatement(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleForInitializerExpressionStatement(Token token, bool forIn) {
+    _unsupported();
+  }
+
+  @override
+  void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
+    _unsupported();
+  }
+
+  @override
+  void handleForLoopParts(Token forKeyword, Token leftParen,
+      Token leftSeparator, int updateExpressionCount) {
+    _unsupported();
+  }
+
+  @override
+  void handleFormalParameterWithoutValue(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
+    _unsupported();
+  }
+
+  @override
+  void handleIdentifierList(int count) {
+    _unknown();
+  }
+
+  @override
+  void handleImplements(Token? implementsKeyword, int interfacesCount) {
+    _unexpected();
+  }
+
+  @override
+  void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleIndexedExpression(
+      Token? question, Token openSquareBracket, Token closeSquareBracket) {
+    _unsupported();
+  }
+
+  @override
+  void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
+    _unhandled();
+  }
+
+  @override
+  void handleInvalidExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleInvalidFunctionBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleInvalidMember(Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void handleInvalidOperatorName(Token operatorKeyword, Token token) {
+    _unexpected();
+  }
+
+  @override
+  void handleInvalidStatement(Token token, Message message) {
+    _unsupported();
+  }
+
+  @override
+  void handleInvalidTopLevelBlock(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void handleInvalidTopLevelDeclaration(Token endToken) {
+    _unexpected();
+  }
+
+  @override
+  void handleInvalidTypeArguments(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleInvalidTypeReference(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleIsOperator(Token isOperator, Token? not) {
+    _unhandled();
+  }
+
+  @override
+  void handleLabel(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleLiteralBool(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralDouble(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralInt(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralList(
+      int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralMapEntry(Token colon, Token endToken) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralNull(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleLiteralSetOrMap(int count, Token leftBrace, Token? constKeyword,
+      Token rightBrace, bool hasSetEntry) {
+    _unhandled();
+  }
+
+  @override
+  void handleMixinHeader(Token mixinKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleMixinOn(Token? onKeyword, int typeCount) {
+    _unexpected();
+  }
+
+  @override
+  void handleNamedArgument(Token colon) {
+    _unhandled();
+  }
+
+  @override
+  void handleNamedMixinApplicationWithClause(Token withKeyword) {
+    _unexpected();
+  }
+
+  @override
+  void handleNativeClause(Token nativeToken, bool hasName) {
+    _unexpected();
+  }
+
+  @override
+  void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void handleNewAsIdentifier(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleNoCommentReference() {
+    _ignored();
+  }
+
+  @override
+  void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleNoFieldInitializer(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void handleNoFormalParameters(Token token, MemberKind kind) {
+    _unsupported();
+  }
+
+  @override
+  void handleNoFunctionBody(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleNoInitializers() {
+    _unexpected();
+  }
+
+  @override
+  void handleNoName(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleNoType(Token lastConsumed) {
+    _unknown();
+  }
+
+  @override
+  void handleNoTypeNameInConstructorReference(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleNoTypeVariables(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleNoVariableInitializer(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleNonNullAssertExpression(Token bang) {
+    _unsupported();
+  }
+
+  @override
+  void handleOperator(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleOperatorName(Token operatorKeyword, Token token) {
+    _unexpected();
+  }
+
+  @override
+  void handleParenthesizedCondition(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleParenthesizedExpression(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleRecoverClassHeader() {
+    _unexpected();
+  }
+
+  @override
+  void handleRecoverImport(Token? semicolon) {
+    _unexpected();
+  }
+
+  @override
+  void handleRecoverMixinHeader() {
+    _unexpected();
+  }
+
+  @override
+  void handleRecoverableError(
+      Message message, Token startToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleScript(Token token) {
+    _unexpected();
+  }
+
+  @override
+  void handleSend(Token beginToken, Token endToken) {
+    _unhandled();
+  }
+
+  @override
+  void handleShowHideIdentifier(Token? modifier, Token identifier) {
+    _unexpected();
+  }
+
+  @override
+  void handleSpreadExpression(Token spreadToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleStringJuxtaposition(Token startToken, int literalCount) {
+    _unhandled();
+  }
+
+  @override
+  void handleStringPart(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleSuperExpression(Token token, IdentifierContext context) {
+    _unsupported();
+  }
+
+  @override
+  void handleSymbolVoid(Token token) {
+    _unhandled();
+  }
+
+  @override
+  void handleThenControlFlow(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleThisExpression(Token token, IdentifierContext context) {
+    _unsupported();
+  }
+
+  @override
+  void handleThrowExpression(Token throwToken, Token endToken) {
+    _unsupported();
+  }
+
+  @override
+  void handleType(Token beginToken, Token? questionMark) {
+    _unknown();
+  }
+
+  @override
+  void handleTypeArgumentApplication(Token openAngleBracket) {
+    _unhandled();
+  }
+
+  @override
+  void handleTypeVariablesDefined(Token token, int count) {
+    _unsupported();
+  }
+
+  @override
+  void handleUnaryPostfixAssignmentExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleUnaryPrefixAssignmentExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleUnaryPrefixExpression(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleUnescapeError(
+      Message message, covariant Token location, int stringOffset, int length) {
+    _unsupported();
+  }
+
+  @override
+  void handleValuedFormalParameter(Token equals, Token token) {
+    _unsupported();
+  }
+
+  @override
+  void handleVoidKeyword(Token token) {
+    _unknown();
+  }
+
+  @override
+  void handleVoidKeywordWithTypeArguments(Token token) {
+    _unsupported();
+  }
+
+  @override
+  void logEvent(String name) {}
+
+  @override
+  void reportVarianceModifierNotEnabled(Token? variance) {
+    _unsupported();
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
new file mode 100644
index 0000000..8ca4ce2
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart
@@ -0,0 +1,231 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:_fe_analyzer_shared/src/macros/api.dart' as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor.dart' as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart'
+    as macro;
+import 'package:kernel/ast.dart';
+
+import '../../builder/class_builder.dart';
+import '../../builder/formal_parameter_builder.dart';
+import '../../builder/library_builder.dart';
+import '../../builder/member_builder.dart';
+import '../../builder/nullability_builder.dart';
+import '../../builder/type_alias_builder.dart';
+import '../../builder/type_builder.dart';
+import '../../builder/type_declaration_builder.dart';
+import 'macro.dart';
+
+abstract class IdentifierImpl extends macro.IdentifierImpl {
+  IdentifierImpl({
+    required int id,
+    required String name,
+  }) : super(id: id, name: name);
+
+  macro.ResolvedIdentifier resolveIdentifier();
+
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications);
+
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments);
+
+  macro.ResolvedIdentifier _resolveTypeDeclarationIdentifier(
+      TypeDeclarationBuilder? typeDeclarationBuilder) {
+    if (typeDeclarationBuilder != null) {
+      Uri? uri;
+      if (typeDeclarationBuilder is ClassBuilder) {
+        uri = typeDeclarationBuilder.libraryBuilder.importUri;
+      } else if (typeDeclarationBuilder is TypeAliasBuilder) {
+        uri = typeDeclarationBuilder.libraryBuilder.importUri;
+      } else if (name == 'dynamic') {
+        uri = Uri.parse('dart:core');
+      }
+      return new macro.ResolvedIdentifier(
+          kind: macro.IdentifierKind.topLevelMember,
+          name: name,
+          staticScope: null,
+          uri: uri);
+    } else {
+      throw new StateError('Unable to resolve identifier $this');
+    }
+  }
+
+  Future<macro.TypeDeclaration> _resolveTypeDeclaration(
+      MacroApplications macroApplications,
+      TypeDeclarationBuilder? typeDeclarationBuilder) {
+    if (typeDeclarationBuilder is ClassBuilder) {
+      return new Future.value(
+          macroApplications.getClassDeclaration(typeDeclarationBuilder));
+    } else if (typeDeclarationBuilder is TypeAliasBuilder) {
+      return new Future.value(
+          macroApplications.getTypeAliasDeclaration(typeDeclarationBuilder));
+    } else {
+      return new Future.error(
+          new ArgumentError('Unable to resolve identifier $this'));
+    }
+  }
+}
+
+class TypeBuilderIdentifier extends IdentifierImpl {
+  final TypeBuilder typeBuilder;
+  final LibraryBuilder libraryBuilder;
+
+  TypeBuilderIdentifier({
+    required this.typeBuilder,
+    required this.libraryBuilder,
+    required int id,
+    required String name,
+  }) : super(id: id, name: name);
+
+  @override
+  macro.ResolvedIdentifier resolveIdentifier() {
+    return _resolveTypeDeclarationIdentifier(typeBuilder.declaration);
+  }
+
+  @override
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+    return typeBuilder.declaration!.buildTypeWithBuiltArguments(libraryBuilder,
+        nullabilityBuilder.build(libraryBuilder), typeArguments);
+  }
+
+  @override
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications) {
+    return _resolveTypeDeclaration(macroApplications, typeBuilder.declaration);
+  }
+}
+
+class TypeDeclarationBuilderIdentifier extends IdentifierImpl {
+  final TypeDeclarationBuilder typeDeclarationBuilder;
+  final LibraryBuilder libraryBuilder;
+
+  TypeDeclarationBuilderIdentifier({
+    required this.typeDeclarationBuilder,
+    required this.libraryBuilder,
+    required int id,
+    required String name,
+  }) : super(id: id, name: name);
+
+  @override
+  macro.ResolvedIdentifier resolveIdentifier() {
+    return _resolveTypeDeclarationIdentifier(typeDeclarationBuilder);
+  }
+
+  @override
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications) {
+    return _resolveTypeDeclaration(macroApplications, typeDeclarationBuilder);
+  }
+
+  @override
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+    return typeDeclarationBuilder.buildTypeWithBuiltArguments(libraryBuilder,
+        nullabilityBuilder.build(libraryBuilder), typeArguments);
+  }
+}
+
+class MemberBuilderIdentifier extends IdentifierImpl {
+  final MemberBuilder memberBuilder;
+
+  MemberBuilderIdentifier(
+      {required this.memberBuilder, required int id, required String name})
+      : super(id: id, name: name);
+
+  @override
+  macro.ResolvedIdentifier resolveIdentifier() {
+    Uri? uri;
+    String? staticScope;
+    macro.IdentifierKind kind;
+    if (memberBuilder.isStatic || memberBuilder.isConstructor) {
+      ClassBuilder classBuilder = memberBuilder.classBuilder!;
+      staticScope = classBuilder.name;
+      uri = classBuilder.libraryBuilder.importUri;
+      kind = macro.IdentifierKind.staticInstanceMember;
+    } else if (memberBuilder.isTopLevel) {
+      uri = memberBuilder.libraryBuilder.importUri;
+      kind = macro.IdentifierKind.topLevelMember;
+    } else {
+      kind = macro.IdentifierKind.instanceMember;
+    }
+    return new macro.ResolvedIdentifier(
+        kind: kind, name: name, staticScope: staticScope, uri: uri);
+  }
+
+  @override
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+    throw new UnsupportedError('Cannot build type from member.');
+  }
+
+  @override
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications) {
+    return new Future.error(
+        new ArgumentError('Cannot resolve type declaration from member.'));
+  }
+}
+
+class FormalParameterBuilderIdentifier extends IdentifierImpl {
+  final LibraryBuilder libraryBuilder;
+  final FormalParameterBuilder parameterBuilder;
+
+  FormalParameterBuilderIdentifier({
+    required this.parameterBuilder,
+    required this.libraryBuilder,
+    required int id,
+    required String name,
+  }) : super(id: id, name: name);
+
+  @override
+  macro.ResolvedIdentifier resolveIdentifier() {
+    return new macro.ResolvedIdentifier(
+        kind: macro.IdentifierKind.local,
+        name: name,
+        staticScope: null,
+        uri: null);
+  }
+
+  @override
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+    throw new UnsupportedError('Cannot build type from formal parameter.');
+  }
+
+  @override
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications) {
+    throw new ArgumentError(
+        'Cannot resolve type declaration from formal parameter.');
+  }
+}
+
+class OmittedTypeIdentifier extends IdentifierImpl {
+  OmittedTypeIdentifier({required int id}) : super(id: id, name: 'dynamic');
+
+  @override
+  DartType buildType(
+      NullabilityBuilder nullabilityBuilder, List<DartType> typeArguments) {
+    return const DynamicType();
+  }
+
+  @override
+  macro.ResolvedIdentifier resolveIdentifier() {
+    return new macro.ResolvedIdentifier(
+        kind: macro.IdentifierKind.topLevelMember,
+        name: name,
+        staticScope: null,
+        uri: Uri.parse('dart:core'));
+  }
+
+  @override
+  Future<macro.TypeDeclaration> resolveTypeDeclaration(
+      MacroApplications macroApplications) {
+    return new Future.error(new ArgumentError(
+        'Cannot resolve type declaration from omitted type.'));
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
new file mode 100644
index 0000000..4bce249
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
@@ -0,0 +1,1040 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:_fe_analyzer_shared/src/macros/api.dart' as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor.dart' as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart'
+    as macro;
+import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart'
+    as macro;
+import 'package:front_end/src/fasta/kernel/benchmarker.dart'
+    show BenchmarkSubdivides, Benchmarker;
+import 'package:kernel/ast.dart' show DartType;
+import 'package:kernel/src/types.dart';
+import 'package:kernel/type_environment.dart' show SubtypeCheckMode;
+
+import '../../../base/common.dart';
+import '../../builder/builder.dart';
+import '../../builder/class_builder.dart';
+import '../../builder/formal_parameter_builder.dart';
+import '../../builder/library_builder.dart';
+import '../../builder/member_builder.dart';
+import '../../builder/named_type_builder.dart';
+import '../../builder/nullability_builder.dart';
+import '../../builder/type_alias_builder.dart';
+import '../../builder/type_builder.dart';
+import '../../builder/type_declaration_builder.dart';
+import '../../identifiers.dart';
+import '../../source/source_class_builder.dart';
+import '../../source/source_constructor_builder.dart';
+import '../../source/source_factory_builder.dart';
+import '../../source/source_field_builder.dart';
+import '../../source/source_library_builder.dart';
+import '../../source/source_loader.dart';
+import '../../source/source_procedure_builder.dart';
+import '../hierarchy/hierarchy_builder.dart';
+import '../hierarchy/hierarchy_node.dart';
+import 'identifiers.dart';
+
+bool enableMacros = false;
+
+/// Enables macros whether the Macro class actually exists in the transitive
+/// deps or not. This allows for easier experimentation.
+///
+/// TODO: Remove this once it is no longer necessary.
+bool forceEnableMacros = false;
+
+const String augmentationScheme = 'org-dartlang-augmentation';
+
+final Uri macroLibraryUri =
+    Uri.parse('package:_fe_analyzer_shared/src/macros/api.dart');
+const String macroClassName = 'Macro';
+final IdentifierImpl omittedTypeIdentifier =
+    new OmittedTypeIdentifier(id: macro.RemoteInstance.uniqueId);
+
+class MacroDeclarationData {
+  bool macrosAreAvailable = false;
+  Map<Uri, List<String>> macroDeclarations = {};
+  List<List<Uri>>? compilationSequence;
+  List<Map<Uri, Map<String, List<String>>>> neededPrecompilations = [];
+}
+
+class MacroApplication {
+  final ClassBuilder classBuilder;
+  final String constructorName;
+
+  // TODO(johnniwinther): Add support for arguments.
+
+  MacroApplication(this.classBuilder, this.constructorName);
+
+  late macro.MacroInstanceIdentifier instanceIdentifier;
+
+  @override
+  String toString() {
+    return '${classBuilder.name}.'
+        '${constructorName.isEmpty ? 'new' : constructorName}()';
+  }
+}
+
+class MacroApplicationDataForTesting {
+  Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData = {};
+  Map<SourceLibraryBuilder, String> libraryTypesResult = {};
+  Map<SourceLibraryBuilder, String> libraryDefinitionResult = {};
+  Map<SourceClassBuilder, List<macro.MacroExecutionResult>> classTypesResults =
+      {};
+  Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
+      classDeclarationsResults = {};
+  Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
+      classDefinitionsResults = {};
+  Map<MemberBuilder, List<macro.MacroExecutionResult>> memberTypesResults = {};
+  Map<MemberBuilder, List<macro.MacroExecutionResult>>
+      memberDeclarationsResults = {};
+  Map<MemberBuilder, List<macro.MacroExecutionResult>>
+      memberDefinitionsResults = {};
+}
+
+class LibraryMacroApplicationData {
+  Map<SourceClassBuilder, ClassMacroApplicationData> classData = {};
+  Map<MemberBuilder, List<MacroApplication>> memberApplications = {};
+}
+
+class ClassMacroApplicationData {
+  List<MacroApplication>? classApplications;
+  Map<MemberBuilder, List<MacroApplication>> memberApplications = {};
+}
+
+/// Macro classes that need to be precompiled.
+class NeededPrecompilations {
+  /// Map from library uris to macro class names and the names of constructor
+  /// their constructors is returned for macro classes that need to be
+  /// precompiled.
+  final Map<Uri, Map<String, List<String>>> macroDeclarations;
+
+  NeededPrecompilations(this.macroDeclarations);
+}
+
+class MacroApplications {
+  final macro.MacroExecutor _macroExecutor;
+  final Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData;
+  final MacroApplicationDataForTesting? dataForTesting;
+  List<_ApplicationData>? _applicationDataCache;
+
+  MacroApplications(
+      this._macroExecutor, this.libraryData, this.dataForTesting) {
+    dataForTesting?.libraryData.addAll(libraryData);
+  }
+
+  static Future<MacroApplications> loadMacroIds(
+      macro.MacroExecutor macroExecutor,
+      Map<Uri, Uri> precompiledMacroUris,
+      Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData,
+      MacroApplicationDataForTesting? dataForTesting,
+      Benchmarker? benchmarker) async {
+    Map<ClassBuilder, macro.MacroClassIdentifier> classIdCache = {};
+
+    Map<MacroApplication, macro.MacroInstanceIdentifier> instanceIdCache = {};
+
+    Future<void> ensureMacroClassIds(
+        List<MacroApplication>? applications) async {
+      if (applications != null) {
+        for (MacroApplication application in applications) {
+          Uri libraryUri = application.classBuilder.libraryBuilder.importUri;
+          String macroClassName = application.classBuilder.name;
+          Uri? precompiledMacroUri = precompiledMacroUris[libraryUri];
+          try {
+            benchmarker?.beginSubdivide(
+                BenchmarkSubdivides.macroApplications_macroExecutorLoadMacro);
+            macro.MacroClassIdentifier macroClassIdentifier =
+                classIdCache[application.classBuilder] ??=
+                    await macroExecutor.loadMacro(libraryUri, macroClassName,
+                        precompiledKernelUri: precompiledMacroUri);
+            benchmarker?.endSubdivide();
+            try {
+              benchmarker?.beginSubdivide(BenchmarkSubdivides
+                  .macroApplications_macroExecutorInstantiateMacro);
+              application.instanceIdentifier = instanceIdCache[application] ??=
+                  await macroExecutor.instantiateMacro(
+                      macroClassIdentifier,
+                      application.constructorName,
+                      // TODO(johnniwinther): Support macro arguments.
+                      new macro.Arguments([], {}));
+              benchmarker?.endSubdivide();
+            } catch (e) {
+              throw "Error instantiating macro `${application}`: $e";
+            }
+          } catch (e) {
+            throw "Error loading macro class "
+                "'${application.classBuilder.name}' from "
+                "'${application.classBuilder.libraryBuilder.importUri}': $e";
+          }
+        }
+      }
+    }
+
+    for (LibraryMacroApplicationData libraryData in libraryData.values) {
+      for (ClassMacroApplicationData classData
+          in libraryData.classData.values) {
+        await ensureMacroClassIds(classData.classApplications);
+        for (List<MacroApplication> applications
+            in classData.memberApplications.values) {
+          await ensureMacroClassIds(applications);
+        }
+      }
+      for (List<MacroApplication> applications
+          in libraryData.memberApplications.values) {
+        await ensureMacroClassIds(applications);
+      }
+    }
+    return new MacroApplications(macroExecutor, libraryData, dataForTesting);
+  }
+
+  Map<ClassBuilder, macro.ClassDeclaration> _classDeclarations = {};
+  Map<macro.ClassDeclaration, ClassBuilder> _classBuilders = {};
+  Map<TypeAliasBuilder, macro.TypeAliasDeclaration> _typeAliasDeclarations = {};
+  Map<MemberBuilder, macro.Declaration?> _memberDeclarations = {};
+
+  // TODO(johnniwinther): Support all members.
+  macro.Declaration? _getMemberDeclaration(MemberBuilder memberBuilder) {
+    return _memberDeclarations[memberBuilder] ??=
+        _createMemberDeclaration(memberBuilder);
+  }
+
+  macro.ClassDeclaration getClassDeclaration(ClassBuilder builder) {
+    return _classDeclarations[builder] ??= _createClassDeclaration(builder);
+  }
+
+  macro.TypeAliasDeclaration getTypeAliasDeclaration(TypeAliasBuilder builder) {
+    return _typeAliasDeclarations[builder] ??=
+        _createTypeAliasDeclaration(builder);
+  }
+
+  ClassBuilder _getClassBuilder(macro.ClassDeclaration declaration) {
+    return _classBuilders[declaration]!;
+  }
+
+  macro.Declaration _createMemberDeclaration(MemberBuilder memberBuilder) {
+    if (memberBuilder is SourceProcedureBuilder) {
+      return _createFunctionDeclaration(memberBuilder);
+    } else if (memberBuilder is SourceFieldBuilder) {
+      return _createVariableDeclaration(memberBuilder);
+    } else if (memberBuilder is SourceConstructorBuilder) {
+      return _createConstructorDeclaration(memberBuilder);
+    } else if (memberBuilder is SourceFactoryBuilder) {
+      return _createFactoryDeclaration(memberBuilder);
+    } else {
+      // TODO(johnniwinther): Throw when all members are supported.
+      throw new UnimplementedError(
+          'Unsupported member ${memberBuilder} (${memberBuilder.runtimeType})');
+    }
+  }
+
+  macro.ResolvedIdentifier _resolveIdentifier(macro.Identifier identifier) {
+    if (identifier is IdentifierImpl) {
+      return identifier.resolveIdentifier();
+    } else {
+      throw new UnsupportedError(
+          'Unsupported identifier ${identifier} (${identifier.runtimeType})');
+    }
+  }
+
+  macro.TypeAnnotation _inferOmittedType(
+      macro.OmittedTypeAnnotation omittedType) {
+    throw new UnimplementedError('This is not yet supported!');
+  }
+
+  Iterable<_ApplicationData> get _applicationData {
+    if (_applicationDataCache == null) {
+      List<_ApplicationData> data = _applicationDataCache = [];
+      for (MapEntry<SourceLibraryBuilder,
+          LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
+        SourceLibraryBuilder libraryBuilder = libraryEntry.key;
+        LibraryMacroApplicationData libraryMacroApplicationData =
+            libraryEntry.value;
+        for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
+            in libraryMacroApplicationData.memberApplications.entries) {
+          MemberBuilder memberBuilder = memberEntry.key;
+          macro.Declaration? declaration = _getMemberDeclaration(memberBuilder);
+          if (declaration != null) {
+            data.add(new _ApplicationData(
+                libraryBuilder, memberBuilder, declaration, memberEntry.value));
+          }
+        }
+        for (MapEntry<SourceClassBuilder, ClassMacroApplicationData> classEntry
+            in libraryMacroApplicationData.classData.entries) {
+          SourceClassBuilder classBuilder = classEntry.key;
+          ClassMacroApplicationData classData = classEntry.value;
+          List<MacroApplication>? classApplications =
+              classData.classApplications;
+          if (classApplications != null) {
+            macro.ClassDeclaration classDeclaration =
+                getClassDeclaration(classBuilder);
+            data.add(new _ApplicationData(libraryBuilder, classBuilder,
+                classDeclaration, classApplications));
+          }
+          for (MapEntry<MemberBuilder, List<MacroApplication>> memberEntry
+              in classData.memberApplications.entries) {
+            MemberBuilder memberBuilder = memberEntry.key;
+            macro.Declaration? declaration =
+                _getMemberDeclaration(memberBuilder);
+            if (declaration != null) {
+              data.add(new _ApplicationData(libraryBuilder, memberBuilder,
+                  declaration, memberEntry.value));
+            }
+          }
+        }
+      }
+    }
+    return _applicationDataCache!;
+  }
+
+  Future<List<macro.MacroExecutionResult>> _applyTypeMacros(
+      _ApplicationData applicationData) async {
+    macro.Declaration declaration = applicationData.declaration;
+    List<macro.MacroExecutionResult> results = [];
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
+      if (macroApplication.instanceIdentifier
+          .shouldExecute(_declarationKind(declaration), macro.Phase.types)) {
+        macro.MacroExecutionResult result =
+            await _macroExecutor.executeTypesPhase(
+                macroApplication.instanceIdentifier,
+                declaration,
+                identifierResolver);
+        if (result.isNotEmpty) {
+          results.add(result);
+        }
+      }
+    }
+
+    if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
+      if (builder is SourceClassBuilder) {
+        dataForTesting?.classTypesResults[builder] = results;
+      } else {
+        dataForTesting?.memberTypesResults[builder as MemberBuilder] = results;
+      }
+    }
+    return results;
+  }
+
+  late macro.IdentifierResolver identifierResolver;
+  late SourceLoader sourceLoader;
+
+  Future<List<SourceLibraryBuilder>> applyTypeMacros(
+      SourceLoader sourceLoader) async {
+    identifierResolver = new _IdentifierResolver(sourceLoader);
+    List<SourceLibraryBuilder> augmentationLibraries = [];
+    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
+    for (_ApplicationData macroApplication in _applicationData) {
+      List<macro.MacroExecutionResult> executionResults =
+          await _applyTypeMacros(macroApplication);
+      if (executionResults.isNotEmpty) {
+        (results[macroApplication.libraryBuilder] ??= [])
+            .addAll(executionResults);
+      }
+    }
+    for (MapEntry<SourceLibraryBuilder, List<macro.MacroExecutionResult>> entry
+        in results.entries) {
+      SourceLibraryBuilder sourceLibraryBuilder = entry.key;
+      assert(entry.value.isNotEmpty);
+      String result = _macroExecutor
+          .buildAugmentationLibrary(
+              entry.value, _resolveIdentifier, _inferOmittedType)
+          .trim();
+      assert(
+          result.trim().isNotEmpty,
+          "Empty types phase augmentation library source for "
+          "$sourceLibraryBuilder}");
+      if (result.isNotEmpty) {
+        if (retainDataForTesting) {
+          dataForTesting?.libraryTypesResult[sourceLibraryBuilder] = result;
+        }
+        augmentationLibraries
+            .add(await sourceLibraryBuilder.createAugmentationLibrary(result));
+      }
+    }
+    return augmentationLibraries;
+  }
+
+  Future<void> _applyDeclarationsMacros(_ApplicationData applicationData,
+      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
+    List<macro.MacroExecutionResult> results = [];
+    macro.Declaration declaration = applicationData.declaration;
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
+      if (macroApplication.instanceIdentifier.shouldExecute(
+          _declarationKind(declaration), macro.Phase.declarations)) {
+        macro.MacroExecutionResult result =
+            await _macroExecutor.executeDeclarationsPhase(
+                macroApplication.instanceIdentifier,
+                declaration,
+                identifierResolver,
+                typeResolver,
+                classIntrospector);
+        if (result.isNotEmpty) {
+          String source = _macroExecutor.buildAugmentationLibrary(
+              [result], _resolveIdentifier, _inferOmittedType);
+          SourceLibraryBuilder augmentationLibrary = await applicationData
+              .libraryBuilder
+              .createAugmentationLibrary(source);
+          await onAugmentationLibrary(augmentationLibrary);
+          if (retainDataForTesting) {
+            results.add(result);
+          }
+        }
+      }
+    }
+    if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
+      if (builder is SourceClassBuilder) {
+        dataForTesting?.classDeclarationsResults[builder] = results;
+      } else {
+        dataForTesting?.memberDeclarationsResults[builder as MemberBuilder] =
+            results;
+      }
+    }
+  }
+
+  late Types types;
+  late macro.TypeResolver typeResolver;
+  late macro.ClassIntrospector classIntrospector;
+
+  Future<void> applyDeclarationsMacros(ClassHierarchyBuilder classHierarchy,
+      Future<void> Function(SourceLibraryBuilder) onAugmentationLibrary) async {
+    types = new Types(classHierarchy);
+    typeResolver = new _TypeResolver(this);
+    classIntrospector = new _ClassIntrospector(this, classHierarchy);
+    for (_ApplicationData macroApplication in _applicationData) {
+      await _applyDeclarationsMacros(macroApplication, onAugmentationLibrary);
+    }
+  }
+
+  Future<List<macro.MacroExecutionResult>> _applyDefinitionMacros(
+      _ApplicationData applicationData) async {
+    List<macro.MacroExecutionResult> results = [];
+    macro.Declaration declaration = applicationData.declaration;
+    for (MacroApplication macroApplication
+        in applicationData.macroApplications) {
+      if (macroApplication.instanceIdentifier.shouldExecute(
+          _declarationKind(declaration), macro.Phase.definitions)) {
+        macro.MacroExecutionResult result =
+            await _macroExecutor.executeDefinitionsPhase(
+                macroApplication.instanceIdentifier,
+                declaration,
+                identifierResolver,
+                typeResolver,
+                classIntrospector,
+                typeDeclarationResolver,
+                typeInferrer);
+        if (result.isNotEmpty) {
+          results.add(result);
+        }
+      }
+    }
+    if (retainDataForTesting) {
+      Builder builder = applicationData.builder;
+      if (builder is SourceClassBuilder) {
+        dataForTesting?.classDefinitionsResults[builder] = results;
+      } else {
+        dataForTesting?.memberDefinitionsResults[builder as MemberBuilder] =
+            results;
+      }
+    }
+    return results;
+  }
+
+  late macro.TypeDeclarationResolver typeDeclarationResolver;
+  late macro.TypeInferrer typeInferrer;
+
+  Future<List<SourceLibraryBuilder>> applyDefinitionMacros() async {
+    typeDeclarationResolver = new _TypeDeclarationResolver(this);
+    typeInferrer = new _TypeInferrer(this);
+    List<SourceLibraryBuilder> augmentationLibraries = [];
+    Map<SourceLibraryBuilder, List<macro.MacroExecutionResult>> results = {};
+    for (_ApplicationData macroApplication in _applicationData) {
+      List<macro.MacroExecutionResult> executionResults =
+          await _applyDefinitionMacros(macroApplication);
+      if (executionResults.isNotEmpty) {
+        (results[macroApplication.libraryBuilder] ??= [])
+            .addAll(executionResults);
+      }
+    }
+    for (MapEntry<SourceLibraryBuilder, List<macro.MacroExecutionResult>> entry
+        in results.entries) {
+      SourceLibraryBuilder sourceLibraryBuilder = entry.key;
+      String result = _macroExecutor.buildAugmentationLibrary(
+          entry.value, _resolveIdentifier, _inferOmittedType);
+      assert(
+          result.trim().isNotEmpty,
+          "Empty definitions phase augmentation library source for "
+          "$sourceLibraryBuilder}");
+      if (retainDataForTesting) {
+        dataForTesting?.libraryDefinitionResult[sourceLibraryBuilder] = result;
+      }
+      augmentationLibraries
+          .add(await sourceLibraryBuilder.createAugmentationLibrary(result));
+    }
+    return augmentationLibraries;
+  }
+
+  void close() {
+    _macroExecutor.close();
+    _staticTypeCache.clear();
+    _typeAnnotationCache.clear();
+    _applicationDataCache?.clear();
+  }
+
+  macro.ClassDeclaration _createClassDeclaration(ClassBuilder builder) {
+    macro.ClassDeclaration declaration = new macro.ClassDeclarationImpl(
+        id: macro.RemoteInstance.uniqueId,
+        identifier: new TypeDeclarationBuilderIdentifier(
+            typeDeclarationBuilder: builder,
+            libraryBuilder: builder.libraryBuilder,
+            id: macro.RemoteInstance.uniqueId,
+            name: builder.name),
+        // TODO(johnniwinther): Support typeParameters
+        typeParameters: [],
+        // TODO(johnniwinther): Support interfaces
+        interfaces: [],
+        isAbstract: builder.isAbstract,
+        isExternal: builder.isExternal,
+        // TODO(johnniwinther): Support mixins
+        mixins: [],
+        // TODO(johnniwinther): Support superclass
+        superclass: null);
+    _classBuilders[declaration] = builder;
+    return declaration;
+  }
+
+  macro.TypeAliasDeclaration _createTypeAliasDeclaration(
+      TypeAliasBuilder builder) {
+    macro.TypeAliasDeclaration declaration = new macro.TypeAliasDeclarationImpl(
+        id: macro.RemoteInstance.uniqueId,
+        identifier: new TypeDeclarationBuilderIdentifier(
+            typeDeclarationBuilder: builder,
+            libraryBuilder: builder.libraryBuilder,
+            id: macro.RemoteInstance.uniqueId,
+            name: builder.name),
+        // TODO(johnniwinther): Support typeParameters
+        typeParameters: [],
+        aliasedType:
+            _computeTypeAnnotation(builder.libraryBuilder, builder.type));
+    return declaration;
+  }
+
+  List<List<macro.ParameterDeclarationImpl>> _createParameters(
+      MemberBuilder builder, List<FormalParameterBuilder>? formals) {
+    List<macro.ParameterDeclarationImpl>? positionalParameters;
+    List<macro.ParameterDeclarationImpl>? namedParameters;
+    if (formals == null) {
+      positionalParameters = namedParameters = const [];
+    } else {
+      positionalParameters = [];
+      namedParameters = [];
+      for (FormalParameterBuilder formal in formals) {
+        macro.TypeAnnotationImpl type =
+            computeTypeAnnotation(builder.libraryBuilder, formal.type);
+        macro.IdentifierImpl identifier = new FormalParameterBuilderIdentifier(
+            id: macro.RemoteInstance.uniqueId,
+            name: formal.name,
+            parameterBuilder: formal,
+            libraryBuilder: builder.libraryBuilder);
+        if (formal.isNamed) {
+          namedParameters.add(new macro.ParameterDeclarationImpl(
+            id: macro.RemoteInstance.uniqueId,
+            identifier: identifier,
+            isRequired: formal.isRequiredNamed,
+            isNamed: true,
+            type: type,
+          ));
+        } else {
+          positionalParameters.add(new macro.ParameterDeclarationImpl(
+            id: macro.RemoteInstance.uniqueId,
+            identifier: identifier,
+            isRequired: formal.isRequiredPositional,
+            isNamed: false,
+            type: type,
+          ));
+        }
+      }
+    }
+    return [positionalParameters, namedParameters];
+  }
+
+  macro.ConstructorDeclaration _createConstructorDeclaration(
+      SourceConstructorBuilder builder) {
+    List<FormalParameterBuilder>? formals = null;
+    // TODO(johnniwinther): Support formals for other constructors.
+    if (builder is DeclaredSourceConstructorBuilder) {
+      formals = builder.formals;
+    }
+    List<List<macro.ParameterDeclarationImpl>> parameters =
+        _createParameters(builder, formals);
+    macro.ClassDeclaration definingClass =
+        getClassDeclaration(builder.classBuilder as SourceClassBuilder);
+    return new macro.ConstructorDeclarationImpl(
+      id: macro.RemoteInstance.uniqueId,
+      identifier: new MemberBuilderIdentifier(
+          memberBuilder: builder,
+          id: macro.RemoteInstance.uniqueId,
+          name: builder.name),
+      definingClass: definingClass.identifier as macro.IdentifierImpl,
+      isFactory: builder.isFactory,
+      isAbstract: builder.isAbstract,
+      isExternal: builder.isExternal,
+      isGetter: builder.isGetter,
+      isOperator: builder.isOperator,
+      isSetter: builder.isSetter,
+      positionalParameters: parameters[0],
+      namedParameters: parameters[1],
+      // TODO(johnniwinther): Support constructor return type.
+      returnType: computeTypeAnnotation(builder.libraryBuilder, null),
+      // TODO(johnniwinther): Support typeParameters
+      typeParameters: const [],
+    );
+  }
+
+  macro.ConstructorDeclaration _createFactoryDeclaration(
+      SourceFactoryBuilder builder) {
+    List<List<macro.ParameterDeclarationImpl>> parameters =
+        _createParameters(builder, builder.formals);
+    macro.ClassDeclaration definingClass =
+        getClassDeclaration(builder.classBuilder as SourceClassBuilder);
+
+    return new macro.ConstructorDeclarationImpl(
+      id: macro.RemoteInstance.uniqueId,
+      identifier: new MemberBuilderIdentifier(
+          memberBuilder: builder,
+          id: macro.RemoteInstance.uniqueId,
+          name: builder.name),
+      definingClass: definingClass.identifier as macro.IdentifierImpl,
+      isFactory: builder.isFactory,
+      isAbstract: builder.isAbstract,
+      isExternal: builder.isExternal,
+      isGetter: builder.isGetter,
+      isOperator: builder.isOperator,
+      isSetter: builder.isSetter,
+      positionalParameters: parameters[0],
+      namedParameters: parameters[1],
+      // TODO(johnniwinther): Support constructor return type.
+      returnType: computeTypeAnnotation(builder.libraryBuilder, null),
+      // TODO(johnniwinther): Support typeParameters
+      typeParameters: const [],
+    );
+  }
+
+  macro.FunctionDeclaration _createFunctionDeclaration(
+      SourceProcedureBuilder builder) {
+    List<List<macro.ParameterDeclarationImpl>> parameters =
+        _createParameters(builder, builder.formals);
+
+    macro.ClassDeclaration? definingClass = null;
+    if (builder.classBuilder != null) {
+      definingClass =
+          getClassDeclaration(builder.classBuilder as SourceClassBuilder);
+    }
+    if (definingClass != null) {
+      // TODO(johnniwinther): Should static fields be field or variable
+      //  declarations?
+      return new macro.MethodDeclarationImpl(
+          id: macro.RemoteInstance.uniqueId,
+          identifier: new MemberBuilderIdentifier(
+              memberBuilder: builder,
+              id: macro.RemoteInstance.uniqueId,
+              name: builder.name),
+          definingClass: definingClass.identifier as macro.IdentifierImpl,
+          isAbstract: builder.isAbstract,
+          isExternal: builder.isExternal,
+          isGetter: builder.isGetter,
+          isOperator: builder.isOperator,
+          isSetter: builder.isSetter,
+          isStatic: builder.isStatic,
+          positionalParameters: parameters[0],
+          namedParameters: parameters[1],
+          returnType:
+              computeTypeAnnotation(builder.libraryBuilder, builder.returnType),
+          // TODO(johnniwinther): Support typeParameters
+          typeParameters: const []);
+    } else {
+      return new macro.FunctionDeclarationImpl(
+          id: macro.RemoteInstance.uniqueId,
+          identifier: new MemberBuilderIdentifier(
+              memberBuilder: builder,
+              id: macro.RemoteInstance.uniqueId,
+              name: builder.name),
+          isAbstract: builder.isAbstract,
+          isExternal: builder.isExternal,
+          isGetter: builder.isGetter,
+          isOperator: builder.isOperator,
+          isSetter: builder.isSetter,
+          positionalParameters: parameters[0],
+          namedParameters: parameters[1],
+          returnType:
+              computeTypeAnnotation(builder.libraryBuilder, builder.returnType),
+          // TODO(johnniwinther): Support typeParameters
+          typeParameters: const []);
+    }
+  }
+
+  macro.VariableDeclaration _createVariableDeclaration(
+      SourceFieldBuilder builder) {
+    macro.ClassDeclaration? definingClass = null;
+    if (builder.classBuilder != null) {
+      definingClass =
+          getClassDeclaration(builder.classBuilder as SourceClassBuilder);
+    }
+    if (definingClass != null) {
+      // TODO(johnniwinther): Should static fields be field or variable
+      //  declarations?
+      return new macro.FieldDeclarationImpl(
+          id: macro.RemoteInstance.uniqueId,
+          identifier: new MemberBuilderIdentifier(
+              memberBuilder: builder,
+              id: macro.RemoteInstance.uniqueId,
+              name: builder.name),
+          definingClass: definingClass.identifier as macro.IdentifierImpl,
+          isExternal: builder.isExternal,
+          isFinal: builder.isFinal,
+          isLate: builder.isLate,
+          isStatic: builder.isStatic,
+          type: computeTypeAnnotation(builder.libraryBuilder, builder.type));
+    } else {
+      return new macro.VariableDeclarationImpl(
+          id: macro.RemoteInstance.uniqueId,
+          identifier: new MemberBuilderIdentifier(
+              memberBuilder: builder,
+              id: macro.RemoteInstance.uniqueId,
+              name: builder.name),
+          isExternal: builder.isExternal,
+          isFinal: builder.isFinal,
+          isLate: builder.isLate,
+          type: computeTypeAnnotation(builder.libraryBuilder, builder.type));
+    }
+  }
+
+  Map<TypeBuilder?, macro.TypeAnnotationImpl> _typeAnnotationCache = {};
+
+  List<macro.TypeAnnotationImpl> computeTypeAnnotations(
+      LibraryBuilder library, List<TypeBuilder>? typeBuilders) {
+    if (typeBuilders == null) return const [];
+    return new List.generate(typeBuilders.length,
+        (int index) => computeTypeAnnotation(library, typeBuilders[index]));
+  }
+
+  macro.TypeAnnotationImpl _computeTypeAnnotation(
+      LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
+    if (typeBuilder != null) {
+      if (typeBuilder is NamedTypeBuilder) {
+        Object name = typeBuilder.name;
+        List<macro.TypeAnnotationImpl> typeArguments =
+            computeTypeAnnotations(libraryBuilder, typeBuilder.arguments);
+        bool isNullable = typeBuilder.nullabilityBuilder.isNullable;
+        if (name is String) {
+          return new macro.NamedTypeAnnotationImpl(
+              id: macro.RemoteInstance.uniqueId,
+              identifier: new TypeBuilderIdentifier(
+                  typeBuilder: typeBuilder,
+                  libraryBuilder: libraryBuilder,
+                  id: macro.RemoteInstance.uniqueId,
+                  name: name),
+              typeArguments: typeArguments,
+              isNullable: isNullable);
+        } else if (name is QualifiedName) {
+          assert(name.qualifier is String);
+          return new macro.NamedTypeAnnotationImpl(
+              id: macro.RemoteInstance.uniqueId,
+              identifier: new TypeBuilderIdentifier(
+                  typeBuilder: typeBuilder,
+                  libraryBuilder: libraryBuilder,
+                  id: macro.RemoteInstance.uniqueId,
+                  name: name.name),
+              typeArguments: typeArguments,
+              isNullable: isNullable);
+        }
+      }
+    }
+    return new macro.NamedTypeAnnotationImpl(
+        id: macro.RemoteInstance.uniqueId,
+        identifier: omittedTypeIdentifier,
+        isNullable: false,
+        typeArguments: const []);
+  }
+
+  macro.TypeAnnotationImpl computeTypeAnnotation(
+      LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
+    return _typeAnnotationCache[typeBuilder] ??=
+        _computeTypeAnnotation(libraryBuilder, typeBuilder);
+  }
+
+  DartType _typeForAnnotation(macro.TypeAnnotationCode typeAnnotation) {
+    NullabilityBuilder nullabilityBuilder;
+    if (typeAnnotation is macro.NullableTypeAnnotationCode) {
+      nullabilityBuilder = const NullabilityBuilder.nullable();
+      typeAnnotation = typeAnnotation.underlyingType;
+    } else {
+      nullabilityBuilder = const NullabilityBuilder.omitted();
+    }
+
+    if (typeAnnotation is macro.NamedTypeAnnotationCode) {
+      macro.NamedTypeAnnotationCode namedTypeAnnotation = typeAnnotation;
+      IdentifierImpl typeIdentifier = typeAnnotation.name as IdentifierImpl;
+      List<DartType> arguments = new List<DartType>.generate(
+          namedTypeAnnotation.typeArguments.length,
+          (int index) =>
+              _typeForAnnotation(namedTypeAnnotation.typeArguments[index]));
+      return typeIdentifier.buildType(nullabilityBuilder, arguments);
+    }
+    // TODO: Implement support for function types.
+    throw new UnimplementedError(
+        'Unimplemented type annotation kind ${typeAnnotation.kind}');
+  }
+
+  macro.StaticType resolveTypeAnnotation(
+      macro.TypeAnnotationCode typeAnnotation) {
+    return createStaticType(_typeForAnnotation(typeAnnotation));
+  }
+
+  Map<DartType, _StaticTypeImpl> _staticTypeCache = {};
+
+  macro.StaticType createStaticType(DartType dartType) {
+    return _staticTypeCache[dartType] ??= new _StaticTypeImpl(this, dartType);
+  }
+}
+
+class _StaticTypeImpl extends macro.StaticType {
+  final MacroApplications macroApplications;
+  final DartType type;
+
+  _StaticTypeImpl(this.macroApplications, this.type);
+
+  @override
+  Future<bool> isExactly(covariant _StaticTypeImpl other) {
+    return new Future.value(type == other.type);
+  }
+
+  @override
+  Future<bool> isSubtypeOf(covariant _StaticTypeImpl other) {
+    return new Future.value(macroApplications.types
+        .isSubtypeOf(type, other.type, SubtypeCheckMode.withNullabilities));
+  }
+}
+
+class _IdentifierResolver implements macro.IdentifierResolver {
+  final SourceLoader sourceLoader;
+
+  _IdentifierResolver(this.sourceLoader);
+
+  @override
+  Future<macro.Identifier> resolveIdentifier(Uri library, String name) {
+    LibraryBuilder? libraryBuilder = sourceLoader.lookupLibraryBuilder(library);
+    if (libraryBuilder == null) {
+      return new Future.error(
+          new ArgumentError('Library at uri $library could not be resolved.'),
+          StackTrace.current);
+    }
+    bool isSetter = false;
+    String memberName = name;
+    if (name.endsWith('=')) {
+      memberName = name.substring(0, name.length - 1);
+      isSetter = true;
+    }
+    Builder? builder =
+        libraryBuilder.scope.lookupLocalMember(memberName, setter: isSetter);
+    if (builder == null) {
+      return new Future.error(
+          new ArgumentError(
+              'Unable to find top level identifier "$name" in $library'),
+          StackTrace.current);
+    } else if (builder is TypeDeclarationBuilder) {
+      return new Future.value(new TypeDeclarationBuilderIdentifier(
+          typeDeclarationBuilder: builder,
+          libraryBuilder: libraryBuilder,
+          id: macro.RemoteInstance.uniqueId,
+          name: name));
+    } else if (builder is MemberBuilder) {
+      return new Future.value(new MemberBuilderIdentifier(
+          memberBuilder: builder,
+          id: macro.RemoteInstance.uniqueId,
+          name: name));
+    } else {
+      return new Future.error(
+          new UnsupportedError('Unsupported identifier kind $builder'),
+          StackTrace.current);
+    }
+  }
+}
+
+class _TypeResolver implements macro.TypeResolver {
+  final MacroApplications macroApplications;
+
+  _TypeResolver(this.macroApplications);
+
+  @override
+  Future<macro.StaticType> resolve(macro.TypeAnnotationCode typeAnnotation) {
+    return new Future.value(
+        macroApplications.resolveTypeAnnotation(typeAnnotation));
+  }
+}
+
+class _ClassIntrospector implements macro.ClassIntrospector {
+  final MacroApplications macroApplications;
+  final ClassHierarchyBuilder classHierarchy;
+
+  _ClassIntrospector(this.macroApplications, this.classHierarchy);
+
+  @override
+  Future<List<macro.ConstructorDeclaration>> constructorsOf(
+      macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    List<macro.ConstructorDeclaration> result = [];
+    classBuilder.forEachConstructor((_, MemberBuilder memberBuilder) {
+      if (memberBuilder is DeclaredSourceConstructorBuilder) {
+        // TODO(johnniwinther): Should we support synthesized constructors?
+        result.add(macroApplications._getMemberDeclaration(memberBuilder)
+            as macro.ConstructorDeclaration);
+      } else if (memberBuilder is SourceFactoryBuilder) {
+        result.add(macroApplications._getMemberDeclaration(memberBuilder)
+            as macro.ConstructorDeclaration);
+      }
+    });
+    return new Future.value(result);
+  }
+
+  @override
+  Future<List<macro.FieldDeclaration>> fieldsOf(macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    List<macro.FieldDeclaration> result = [];
+    classBuilder.forEach((_, Builder memberBuilder) {
+      if (memberBuilder is SourceFieldBuilder) {
+        result.add(macroApplications._getMemberDeclaration(memberBuilder)
+            as macro.FieldDeclaration);
+      }
+    });
+    return new Future.value(result);
+  }
+
+  @override
+  Future<List<macro.ClassDeclaration>> interfacesOf(
+      macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    ClassHierarchyNode node =
+        classHierarchy.getNodeFromClassBuilder(classBuilder);
+    List<ClassHierarchyNode>? directInterfaceNodes = node.directInterfaceNodes;
+    if (directInterfaceNodes != null) {
+      List<macro.ClassDeclaration> list = [];
+      for (ClassHierarchyNode interfaceNode in directInterfaceNodes) {
+        list.add(
+            macroApplications.getClassDeclaration(interfaceNode.classBuilder));
+      }
+      return new Future.value(list);
+    }
+    return new Future.value(const []);
+  }
+
+  @override
+  Future<List<macro.MethodDeclaration>> methodsOf(
+      macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    List<macro.MethodDeclaration> result = [];
+    classBuilder.forEach((_, Builder memberBuilder) {
+      if (memberBuilder is SourceProcedureBuilder) {
+        result.add(macroApplications._getMemberDeclaration(memberBuilder)
+            as macro.MethodDeclaration);
+      }
+    });
+    return new Future.value(result);
+  }
+
+  @override
+  Future<List<macro.ClassDeclaration>> mixinsOf(macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    ClassHierarchyNode node =
+        classHierarchy.getNodeFromClassBuilder(classBuilder);
+    ClassHierarchyNode? superNode = node.directSuperClassNode;
+    List<macro.ClassDeclaration>? list;
+    while (superNode != null && superNode.isMixinApplication) {
+      (list ??= []).add(macroApplications
+          .getClassDeclaration(superNode.mixedInNode!.classBuilder));
+      superNode = superNode.directSuperClassNode;
+    }
+    return new Future.value(list?.reversed.toList() ?? const []);
+  }
+
+  @override
+  Future<macro.ClassDeclaration?> superclassOf(macro.ClassDeclaration clazz) {
+    ClassBuilder classBuilder = macroApplications._getClassBuilder(clazz);
+    ClassHierarchyNode node =
+        classHierarchy.getNodeFromClassBuilder(classBuilder);
+    ClassHierarchyNode? superNode = node.directSuperClassNode;
+    while (superNode != null &&
+        superNode.classBuilder.isAnonymousMixinApplication) {
+      superNode = superNode.directSuperClassNode;
+    }
+    if (superNode != null) {
+      return new Future.value(
+          macroApplications.getClassDeclaration(superNode.classBuilder));
+    }
+    return new Future.value();
+  }
+}
+
+class _TypeDeclarationResolver implements macro.TypeDeclarationResolver {
+  final MacroApplications macroApplications;
+
+  _TypeDeclarationResolver(this.macroApplications);
+
+  @override
+  Future<macro.TypeDeclaration> declarationOf(macro.Identifier identifier) {
+    if (identifier is IdentifierImpl) {
+      return identifier.resolveTypeDeclaration(macroApplications);
+    }
+    throw new UnsupportedError(
+        'Unsupported identifier $identifier (${identifier.runtimeType})');
+  }
+}
+
+class _TypeInferrer implements macro.TypeInferrer {
+  final MacroApplications _macroApplications;
+
+  _TypeInferrer(this._macroApplications);
+
+  @override
+  Future<macro.TypeAnnotation> inferType(
+          macro.OmittedTypeAnnotation omittedType) =>
+      new Future.value(_macroApplications._inferOmittedType(omittedType));
+}
+
+macro.DeclarationKind _declarationKind(macro.Declaration declaration) {
+  if (declaration is macro.ConstructorDeclaration) {
+    return macro.DeclarationKind.constructor;
+  } else if (declaration is macro.MethodDeclaration) {
+    return macro.DeclarationKind.method;
+  } else if (declaration is macro.FunctionDeclaration) {
+    return macro.DeclarationKind.function;
+  } else if (declaration is macro.FieldDeclaration) {
+    return macro.DeclarationKind.field;
+  } else if (declaration is macro.VariableDeclaration) {
+    return macro.DeclarationKind.variable;
+  } else if (declaration is macro.ClassDeclaration) {
+    return macro.DeclarationKind.clazz;
+  }
+  throw new UnsupportedError(
+      "Unexpected declaration ${declaration} (${declaration.runtimeType})");
+}
+
+/// Data needed to apply a list of macro applications to a class or member.
+class _ApplicationData {
+  final SourceLibraryBuilder libraryBuilder;
+  final Builder builder;
+  final macro.Declaration declaration;
+  final List<MacroApplication> macroApplications;
+
+  _ApplicationData(this.libraryBuilder, this.builder, this.declaration,
+      this.macroApplications);
+}
+
+extension on macro.MacroExecutionResult {
+  bool get isNotEmpty =>
+      libraryAugmentations.isNotEmpty || classAugmentations.isNotEmpty;
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
deleted file mode 100644
index aeed256..0000000
--- a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
+++ /dev/null
@@ -1,1935 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:_fe_analyzer_shared/src/messages/codes.dart';
-import 'package:_fe_analyzer_shared/src/parser/parser.dart';
-import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
-import 'package:_fe_analyzer_shared/src/scanner/token.dart';
-
-import '../builder/builder.dart';
-import '../builder/class_builder.dart';
-import '../builder/member_builder.dart';
-import '../builder/metadata_builder.dart';
-import '../builder/prefix_builder.dart';
-import '../scope.dart';
-import '../source/diet_parser.dart';
-import '../source/source_library_builder.dart';
-
-import 'macro.dart';
-
-List<MacroApplication>? prebuildAnnotations(
-    {required SourceLibraryBuilder enclosingLibrary,
-    required List<MetadataBuilder>? metadataBuilders,
-    required Uri fileUri,
-    required Scope scope}) {
-  if (metadataBuilders == null) return null;
-  List<MacroApplication>? result;
-  for (MetadataBuilder metadataBuilder in metadataBuilders) {
-    _MacroListener listener =
-        new _MacroListener(enclosingLibrary, fileUri, scope);
-    Parser parser = new Parser(listener,
-        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
-    parser.parseMetadata(
-        parser.syntheticPreviousToken(metadataBuilder.beginToken));
-    MacroApplication? application = listener.popMacroApplication();
-    if (application != null) {
-      result ??= [];
-      result.add(application);
-    }
-  }
-  return result;
-}
-
-class _Node {}
-
-class _UnrecognizedNode implements _Node {
-  const _UnrecognizedNode();
-}
-
-class _MacroClassNode implements _Node {
-  final Token token;
-  final ClassBuilder classBuilder;
-
-  _MacroClassNode(this.token, this.classBuilder);
-}
-
-class _MacroConstructorNode implements _Node {
-  final ClassBuilder classBuilder;
-  final String constructorName;
-
-  _MacroConstructorNode(this.classBuilder, this.constructorName);
-}
-
-class _PrefixNode implements _Node {
-  final PrefixBuilder prefixBuilder;
-
-  _PrefixNode(this.prefixBuilder);
-}
-
-class _MacroApplicationNode implements _Node {
-  final MacroApplication application;
-
-  _MacroApplicationNode(this.application);
-}
-
-class _NoArgumentsNode implements _Node {
-  const _NoArgumentsNode();
-}
-
-class _ArgumentsNode implements _Node {
-  _ArgumentsNode();
-}
-
-class _MacroListener implements Listener {
-  final SourceLibraryBuilder currentLibrary;
-
-  @override
-  final Uri uri;
-
-  final Scope scope;
-
-  final List<_Node> _stack = [];
-
-  Object? _unrecognized;
-
-  bool get unrecognized => _unrecognized != null;
-
-  void set unrecognized(bool value) {
-    if (value) {
-      // TODO(johnniwinther): Remove this when implementation is more mature.
-      _unrecognized = StackTrace.current;
-    } else {
-      _unrecognized = null;
-    }
-  }
-
-  _MacroListener(this.currentLibrary, this.uri, this.scope);
-
-  void pushUnsupported() {
-    push(const _UnrecognizedNode());
-    _unsupported();
-  }
-
-  void push(_Node node) {
-    _stack.add(node);
-  }
-
-  _Node pop() => _stack.removeLast();
-
-  MacroApplication? popMacroApplication() {
-    if (unrecognized) return null;
-    if (_stack.length != 1) return null;
-    _Node node = pop();
-    if (node is _MacroApplicationNode) {
-      return node.application;
-    }
-    return null;
-  }
-
-  @override
-  void beginMetadata(Token token) {
-    // Do nothing.
-  }
-
-  @override
-  void endMetadata(Token beginToken, Token? periodBeforeName, Token endToken) {
-    _Node argumentsNode = pop();
-    _Node referenceNode = pop();
-    if (!unrecognized) {
-      ClassBuilder? macroClass;
-      String? constructorName;
-      if (referenceNode is _MacroClassNode) {
-        macroClass = referenceNode.classBuilder;
-        MemberBuilder? member = referenceNode.classBuilder
-            .findConstructorOrFactory(
-                '', referenceNode.token.charOffset, uri, currentLibrary);
-        if (member != null) {
-          constructorName = '';
-        }
-      } else if (referenceNode is _MacroConstructorNode) {
-        macroClass = referenceNode.classBuilder;
-        constructorName = referenceNode.constructorName;
-      }
-      if (macroClass != null &&
-          constructorName != null &&
-          argumentsNode is _ArgumentsNode) {
-        push(new _MacroApplicationNode(
-            new MacroApplication(macroClass, constructorName)));
-        return;
-      }
-    }
-    pushUnsupported();
-  }
-
-  @override
-  void handleIdentifier(Token token, IdentifierContext context) {
-    switch (context) {
-      case IdentifierContext.metadataReference:
-        Builder? builder = scope.lookup(token.lexeme, token.charOffset, uri);
-        if (builder is ClassBuilder && builder.isMacro) {
-          push(new _MacroClassNode(token, builder));
-        } else if (builder is PrefixBuilder) {
-          push(new _PrefixNode(builder));
-        } else {
-          pushUnsupported();
-        }
-        break;
-      case IdentifierContext.metadataContinuation:
-        _Node node = pop();
-        if (node is _PrefixNode) {
-          Builder? builder =
-              node.prefixBuilder.lookup(token.lexeme, token.charOffset, uri);
-          if (builder is ClassBuilder && builder.isMacro) {
-            push(new _MacroClassNode(token, builder));
-          } else {
-            pushUnsupported();
-          }
-        } else if (node is _MacroClassNode) {
-          MemberBuilder? member = node.classBuilder.findConstructorOrFactory(
-              token.lexeme, token.charOffset, uri, currentLibrary);
-          if (member != null) {
-            push(new _MacroConstructorNode(node.classBuilder, token.lexeme));
-          } else {
-            pushUnsupported();
-          }
-        } else {
-          pushUnsupported();
-        }
-        break;
-      case IdentifierContext.metadataContinuationAfterTypeArguments:
-        _Node node = pop();
-        if (node is _MacroClassNode) {
-          MemberBuilder? member = node.classBuilder.findConstructorOrFactory(
-              token.lexeme, token.charOffset, uri, currentLibrary);
-          if (member != null) {
-            push(new _MacroConstructorNode(node.classBuilder, token.lexeme));
-          } else {
-            pushUnsupported();
-          }
-        } else {
-          pushUnsupported();
-        }
-        break;
-      default:
-        pushUnsupported();
-        break;
-    }
-  }
-
-  @override
-  void beginArguments(Token token) {
-    // Do nothing.
-  }
-
-  @override
-  void endArguments(int count, Token beginToken, Token endToken) {
-    if (count == 0) {
-      push(new _ArgumentsNode());
-    } else {
-      // TODO(johnniwinther): Handle arguments.
-      pushUnsupported();
-    }
-  }
-
-  @override
-  void handleNoArguments(Token token) {
-    push(const _NoArgumentsNode());
-  }
-
-  @override
-  void handleNoTypeArguments(Token token) {
-    // TODO(johnniwinther): Handle type arguments. Ignore for now.
-  }
-
-  @override
-  void handleQualified(Token period) {
-    // Do nothing. Supported qualified names are handled through the identifier
-    // context.
-  }
-
-  //////////////////////////////////////////////////////////////////////////////
-  // Stub implementation
-  //////////////////////////////////////////////////////////////////////////////
-
-  /// Called for listener events that are expected but not supported.
-  void _unsupported() {
-    unrecognized = true;
-  }
-
-  /// Called for listener events that are unexpected.
-  void _unexpected() {
-    unrecognized = true;
-  }
-
-  /// Called for listener events that are supported but not handled yet.
-  void _unhandled() {
-    unrecognized = true;
-  }
-
-  /// Called for listener events whose use in unknown.
-  void _unknown() {
-    unrecognized = true;
-  }
-
-  /// Called for listener events that are ignored.
-  void _ignored() {}
-
-  @override
-  void beginAsOperatorType(Token operator) {
-    _unsupported();
-  }
-
-  @override
-  void beginAssert(Token assertKeyword, Assert kind) {
-    _unsupported();
-  }
-
-  @override
-  void beginAwaitExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginBinaryExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginBlock(Token token, BlockKind blockKind) {
-    _unsupported();
-  }
-
-  @override
-  void beginBlockFunctionBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginCascade(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginCaseExpression(Token caseKeyword) {
-    _unsupported();
-  }
-
-  @override
-  void beginCatchClause(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginClassDeclaration(Token begin, Token? abstractToken,
-      Token? macroToken, Token? augmentToken, Token name) {
-    _unexpected();
-  }
-
-  @override
-  void beginClassOrMixinOrExtensionBody(DeclarationKind kind, Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginClassOrMixinOrNamedMixinApplicationPrelude(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginCombinators(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginCompilationUnit(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginConditionalExpression(Token question) {
-    _unsupported();
-  }
-
-  @override
-  void beginConditionalUri(Token ifKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginConditionalUris(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginConstExpression(Token constKeyword) {
-    _unhandled();
-  }
-
-  @override
-  void beginConstLiteral(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void beginConstructorReference(Token start) {
-    _unknown();
-  }
-
-  @override
-  void beginDoWhileStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginDoWhileStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginElseStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginEnum(Token enumKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginExport(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginExtensionDeclaration(Token extensionKeyword, Token? name) {
-    _unexpected();
-  }
-
-  @override
-  void beginExtensionDeclarationPrelude(Token extensionKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginFactoryMethod(DeclarationKind declarationKind, Token lastConsumed,
-      Token? externalToken, Token? constToken) {
-    _unexpected();
-  }
-
-  @override
-  void beginFieldInitializer(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginFields(
-      DeclarationKind declarationKind,
-      Token? abstractToken,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      Token lastConsumed) {
-    _unexpected();
-  }
-
-  @override
-  void beginForControlFlow(Token? awaitToken, Token forToken) {
-    _unsupported();
-  }
-
-  @override
-  void beginForInBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginForInExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginForStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginForStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginFormalParameter(Token token, MemberKind kind, Token? requiredToken,
-      Token? covariantToken, Token? varFinalOrConst) {
-    _unsupported();
-  }
-
-  @override
-  void beginFormalParameterDefaultValueExpression() {
-    _unsupported();
-  }
-
-  @override
-  void beginFormalParameters(Token token, MemberKind kind) {
-    _unsupported();
-  }
-
-  @override
-  void beginFunctionExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginFunctionName(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginFunctionType(Token beginToken) {
-    _unhandled();
-  }
-
-  @override
-  void beginFunctionTypedFormalParameter(Token token) {
-    _unknown();
-  }
-
-  @override
-  void beginHide(Token hideKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginIfControlFlow(Token ifToken) {
-    _unsupported();
-  }
-
-  @override
-  void beginIfStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginImplicitCreationExpression(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void beginImport(Token importKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginInitializedIdentifier(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginInitializer(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginInitializers(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginIsOperatorType(Token operator) {
-    _unhandled();
-  }
-
-  @override
-  void beginLabeledStatement(Token token, int labelCount) {
-    _unsupported();
-  }
-
-  @override
-  void beginLibraryName(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginLiteralString(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void beginLiteralSymbol(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void beginLocalFunctionDeclaration(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginMember() {
-    _unexpected();
-  }
-
-  @override
-  void beginMetadataStar(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginMethod(
-      DeclarationKind declarationKind,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? varFinalOrConst,
-      Token? getOrSet,
-      Token name) {
-    _unexpected();
-  }
-
-  @override
-  void beginMixinDeclaration(
-      Token? augmentToken, Token mixinKeyword, Token name) {
-    _unexpected();
-  }
-
-  @override
-  void beginNamedFunctionExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginNamedMixinApplication(Token begin, Token? abstractToken,
-      Token? macroToken, Token? augmentToken, Token name) {
-    _unexpected();
-  }
-
-  @override
-  void beginNewExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginOptionalFormalParameters(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginPart(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginPartOf(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginRedirectingFactoryBody(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginRethrowStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginReturnStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginShow(Token showKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void beginSwitchBlock(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
-    _unsupported();
-  }
-
-  @override
-  void beginSwitchStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginThenStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginTopLevelMember(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginTopLevelMethod(
-      Token lastConsumed, Token? augmentToken, Token? externalToken) {
-    _unexpected();
-  }
-
-  @override
-  void beginTryStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginTypeArguments(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void beginTypeList(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginTypeVariable(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginTypeVariables(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginTypedef(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginUncategorizedTopLevelDeclaration(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void beginVariableInitializer(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginVariablesDeclaration(
-      Token token, Token? lateToken, Token? varFinalOrConst) {
-    _unsupported();
-  }
-
-  @override
-  void beginWhileStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginWhileStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void beginYieldStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endAsOperatorType(Token operator) {
-    _unhandled();
-  }
-
-  @override
-  void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
-      Token? commaToken, Token semicolonToken) {
-    _unsupported();
-  }
-
-  @override
-  void endAwaitExpression(Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endBinaryExpression(Token token) {
-    _unknown();
-  }
-
-  @override
-  void endBlock(
-      int count, Token beginToken, Token endToken, BlockKind blockKind) {
-    _unsupported();
-  }
-
-  @override
-  void endBlockFunctionBody(int count, Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endCascade() {
-    _unsupported();
-  }
-
-  @override
-  void endCaseExpression(Token colon) {
-    _unsupported();
-  }
-
-  @override
-  void endCatchClause(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endClassConstructor(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endClassDeclaration(Token beginToken, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endClassFactoryMethod(
-      Token beginToken, Token factoryKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endClassFields(
-      Token? abstractToken,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      int count,
-      Token beginToken,
-      Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endClassOrMixinOrExtensionBody(
-      DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endCombinators(int count) {
-    _unexpected();
-  }
-
-  @override
-  void endCompilationUnit(int count, Token token) {
-    _unexpected();
-  }
-
-  @override
-  void endConditionalExpression(Token question, Token colon) {
-    _unhandled();
-  }
-
-  @override
-  void endConditionalUri(Token ifKeyword, Token leftParen, Token? equalSign) {
-    _unexpected();
-  }
-
-  @override
-  void endConditionalUris(int count) {
-    _unexpected();
-  }
-
-  @override
-  void endConstExpression(Token token) {
-    _unknown();
-  }
-
-  @override
-  void endConstLiteral(Token token) {
-    _unknown();
-  }
-
-  @override
-  void endConstructorReference(Token start, Token? periodBeforeName,
-      Token endToken, ConstructorReferenceContext constructorReferenceContext) {
-    _unknown();
-  }
-
-  @override
-  void endDoWhileStatement(
-      Token doKeyword, Token whileKeyword, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endDoWhileStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endElseStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endEnum(Token enumKeyword, Token leftBrace, int memberCount) {
-    _unexpected();
-  }
-
-  @override
-  void endEnumConstructor(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endEnumFactoryMethod(
-      Token beginToken, Token factoryKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endEnumFields(
-      Token? abstractToken,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      int count,
-      Token beginToken,
-      Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endExport(Token exportKeyword, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void endExtensionConstructor(Token? getOrSet, Token beginToken,
-      Token beginParam, Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
-      Token onKeyword, Token? showKeyword, Token? hideKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endExtensionFactoryMethod(
-      Token beginToken, Token factoryKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endExtensionFields(
-      Token? abstractToken,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      int count,
-      Token beginToken,
-      Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endExtensionMethod(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endFieldInitializer(Token assignment, Token token) {
-    _unexpected();
-  }
-
-  @override
-  void endForControlFlow(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endForIn(Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endForInBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endForInControlFlow(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endForInExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endForStatement(Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endForStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endFormalParameter(
-      Token? thisKeyword,
-      Token? superKeyword,
-      Token? periodAfterThisOrSuper,
-      Token nameToken,
-      Token? initializerStart,
-      Token? initializerEnd,
-      FormalParameterKind kind,
-      MemberKind memberKind) {
-    _unsupported();
-  }
-
-  @override
-  void endFormalParameterDefaultValueExpression() {
-    _unsupported();
-  }
-
-  @override
-  void endFormalParameters(
-      int count, Token beginToken, Token endToken, MemberKind kind) {
-    _unsupported();
-  }
-
-  @override
-  void endFunctionExpression(Token beginToken, Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endFunctionName(Token beginToken, Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endFunctionType(Token functionToken, Token? questionMark) {
-    _unhandled();
-  }
-
-  @override
-  void endFunctionTypedFormalParameter(Token nameToken, Token? question) {
-    _unknown();
-  }
-
-  @override
-  void endHide(Token hideKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void endIfControlFlow(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endIfElseControlFlow(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endIfStatement(Token ifToken, Token? elseToken) {
-    _unsupported();
-  }
-
-  @override
-  void endImplicitCreationExpression(Token token, Token openAngleBracket) {
-    _unhandled();
-  }
-
-  @override
-  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void endInitializedIdentifier(Token nameToken) {
-    _unsupported();
-  }
-
-  @override
-  void endInitializer(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void endInitializers(int count, Token beginToken, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endInvalidAwaitExpression(
-      Token beginToken, Token endToken, MessageCode errorCode) {
-    _unsupported();
-  }
-
-  @override
-  void endInvalidYieldStatement(Token beginToken, Token? starToken,
-      Token endToken, MessageCode errorCode) {
-    _unsupported();
-  }
-
-  @override
-  void endIsOperatorType(Token operator) {
-    _unhandled();
-  }
-
-  @override
-  void endLabeledStatement(int labelCount) {
-    _unsupported();
-  }
-
-  @override
-  void endLibraryName(Token libraryKeyword, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void endLiteralString(int interpolationCount, Token endToken) {
-    _unhandled();
-  }
-
-  @override
-  void endLiteralSymbol(Token hashToken, int identifierCount) {
-    _unhandled();
-  }
-
-  @override
-  void endLocalFunctionDeclaration(Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endMember() {
-    _unexpected();
-  }
-
-  @override
-  void endMetadataStar(int count) {
-    _unsupported();
-  }
-
-  @override
-  void endMixinConstructor(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endMixinDeclaration(Token mixinKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endMixinFactoryMethod(
-      Token beginToken, Token factoryKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endMixinFields(
-      Token? abstractToken,
-      Token? augmentToken,
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      int count,
-      Token beginToken,
-      Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endMixinMethod(Token? getOrSet, Token beginToken, Token beginParam,
-      Token? beginInitializers, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endNamedFunctionExpression(Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endNamedMixinApplication(Token begin, Token classKeyword, Token equals,
-      Token? implementsKeyword, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endNewExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endOptionalFormalParameters(
-      int count, Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endPart(Token partKeyword, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void endPartOf(
-      Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
-    _unexpected();
-  }
-
-  @override
-  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endRethrowStatement(Token rethrowToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endReturnStatement(
-      bool hasExpression, Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endShow(Token showKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endSwitchCase(
-      int labelCount,
-      int expressionCount,
-      Token? defaultKeyword,
-      Token? colonAfterDefault,
-      int statementCount,
-      Token firstToken,
-      Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endSwitchStatement(Token switchKeyword, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endThenStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endTopLevelDeclaration(Token nextToken) {
-    _unexpected();
-  }
-
-  @override
-  void endTopLevelFields(
-      Token? externalToken,
-      Token? staticToken,
-      Token? covariantToken,
-      Token? lateToken,
-      Token? varFinalOrConst,
-      int count,
-      Token beginToken,
-      Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endTopLevelMethod(Token beginToken, Token? getOrSet, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endTryStatement(
-      int catchCount, Token tryKeyword, Token? finallyKeyword) {
-    _unsupported();
-  }
-
-  @override
-  void endTypeArguments(int count, Token beginToken, Token endToken) {
-    _unhandled();
-  }
-
-  @override
-  void endTypeList(int count) {
-    _unexpected();
-  }
-
-  @override
-  void endTypeVariable(
-      Token token, int index, Token? extendsOrSuper, Token? variance) {
-    _unsupported();
-  }
-
-  @override
-  void endTypeVariables(Token beginToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endTypedef(Token typedefKeyword, Token? equals, Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void endVariableInitializer(Token assignmentOperator) {
-    _unsupported();
-  }
-
-  @override
-  void endVariablesDeclaration(int count, Token? endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endWhileStatement(Token whileKeyword, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void endWhileStatementBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void endYieldStatement(Token yieldToken, Token? starToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleAsOperator(Token operator) {
-    _unhandled();
-  }
-
-  @override
-  void handleAssignmentExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleAsyncModifier(Token? asyncToken, Token? starToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleBreakStatement(
-      bool hasTarget, Token breakKeyword, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleCaseMatch(Token caseKeyword, Token colon) {
-    _unsupported();
-  }
-
-  @override
-  void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) {
-    _unsupported();
-  }
-
-  @override
-  void handleClassExtends(Token? extendsKeyword, int typeCount) {
-    _unexpected();
-  }
-
-  @override
-  void handleClassHeader(Token begin, Token classKeyword, Token? nativeToken) {
-    _unexpected();
-  }
-
-  @override
-  void handleClassNoWithClause() {
-    _unexpected();
-  }
-
-  @override
-  void handleClassWithClause(Token withKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleCommentReference(
-      Token? newKeyword,
-      Token? firstToken,
-      Token? firstPeriod,
-      Token? secondToken,
-      Token? secondPeriod,
-      Token thirdToken) {
-    _ignored();
-  }
-
-  @override
-  void handleCommentReferenceText(String referenceSource, int referenceOffset) {
-    _ignored();
-  }
-
-  @override
-  void handleConditionalExpressionColon() {
-    _unhandled();
-  }
-
-  @override
-  void handleConstFactory(Token constKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleContinueStatement(
-      bool hasTarget, Token continueKeyword, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleDirectivesOnly() {
-    _unknown();
-  }
-
-  @override
-  void handleDottedName(int count, Token firstIdentifier) {
-    _unknown();
-  }
-
-  @override
-  void handleElseControlFlow(Token elseToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleEmptyFunctionBody(Token semicolon) {
-    _unsupported();
-  }
-
-  @override
-  void handleEmptyStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleEndingBinaryExpression(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleEnumElement(Token beginToken) {
-    _unexpected();
-  }
-
-  @override
-  void handleEnumElements(Token elementsEndToken, int elementsCount) {
-    _unexpected();
-  }
-
-  @override
-  void handleEnumHeader(Token enumKeyword, Token leftBrace) {
-    _unexpected();
-  }
-
-  @override
-  void handleEnumNoWithClause() {
-    _unexpected();
-  }
-
-  @override
-  void handleEnumWithClause(Token withKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleErrorToken(ErrorToken token) {
-    _unsupported();
-  }
-
-  @override
-  void handleExpressionFunctionBody(Token arrowToken, Token? endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleExpressionStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleExtensionShowHide(Token? showKeyword, int showElementCount,
-      Token? hideKeyword, int hideElementCount) {
-    _unexpected();
-  }
-
-  @override
-  void handleExtraneousExpression(Token token, Message message) {
-    _unknown();
-  }
-
-  @override
-  void handleFinallyBlock(Token finallyKeyword) {
-    _unsupported();
-  }
-
-  @override
-  void handleForInLoopParts(Token? awaitToken, Token forToken,
-      Token leftParenthesis, Token inKeyword) {
-    _unsupported();
-  }
-
-  @override
-  void handleForInitializerEmptyStatement(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleForInitializerExpressionStatement(Token token, bool forIn) {
-    _unsupported();
-  }
-
-  @override
-  void handleForInitializerLocalVariableDeclaration(Token token, bool forIn) {
-    _unsupported();
-  }
-
-  @override
-  void handleForLoopParts(Token forKeyword, Token leftParen,
-      Token leftSeparator, int updateExpressionCount) {
-    _unsupported();
-  }
-
-  @override
-  void handleFormalParameterWithoutValue(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleFunctionBodySkipped(Token token, bool isExpressionBody) {
-    _unsupported();
-  }
-
-  @override
-  void handleIdentifierList(int count) {
-    _unknown();
-  }
-
-  @override
-  void handleImplements(Token? implementsKeyword, int interfacesCount) {
-    _unexpected();
-  }
-
-  @override
-  void handleImportPrefix(Token? deferredKeyword, Token? asKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleIndexedExpression(
-      Token? question, Token openSquareBracket, Token closeSquareBracket) {
-    _unsupported();
-  }
-
-  @override
-  void handleInterpolationExpression(Token leftBracket, Token? rightBracket) {
-    _unhandled();
-  }
-
-  @override
-  void handleInvalidExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleInvalidFunctionBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleInvalidMember(Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void handleInvalidOperatorName(Token operatorKeyword, Token token) {
-    _unexpected();
-  }
-
-  @override
-  void handleInvalidStatement(Token token, Message message) {
-    _unsupported();
-  }
-
-  @override
-  void handleInvalidTopLevelBlock(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void handleInvalidTopLevelDeclaration(Token endToken) {
-    _unexpected();
-  }
-
-  @override
-  void handleInvalidTypeArguments(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleInvalidTypeReference(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleIsOperator(Token isOperator, Token? not) {
-    _unhandled();
-  }
-
-  @override
-  void handleLabel(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleLiteralBool(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralDouble(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralInt(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralList(
-      int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralNull(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralSetOrMap(int count, Token leftBrace, Token? constKeyword,
-      Token rightBrace, bool hasSetEntry) {
-    _unhandled();
-  }
-
-  @override
-  void handleMixinHeader(Token mixinKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleMixinOn(Token? onKeyword, int typeCount) {
-    _unexpected();
-  }
-
-  @override
-  void handleNamedArgument(Token colon) {
-    _unhandled();
-  }
-
-  @override
-  void handleNamedMixinApplicationWithClause(Token withKeyword) {
-    _unexpected();
-  }
-
-  @override
-  void handleNativeClause(Token nativeToken, bool hasName) {
-    _unexpected();
-  }
-
-  @override
-  void handleNativeFunctionBody(Token nativeToken, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void handleNativeFunctionBodyIgnored(Token nativeToken, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void handleNativeFunctionBodySkipped(Token nativeToken, Token semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void handleNewAsIdentifier(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleNoCommentReference() {
-    _ignored();
-  }
-
-  @override
-  void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleNoFieldInitializer(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void handleNoFormalParameters(Token token, MemberKind kind) {
-    _unsupported();
-  }
-
-  @override
-  void handleNoFunctionBody(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleNoInitializers() {
-    _unexpected();
-  }
-
-  @override
-  void handleNoName(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleNoType(Token lastConsumed) {
-    _unknown();
-  }
-
-  @override
-  void handleNoTypeNameInConstructorReference(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleNoTypeVariables(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleNoVariableInitializer(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleNonNullAssertExpression(Token bang) {
-    _unsupported();
-  }
-
-  @override
-  void handleOperator(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleOperatorName(Token operatorKeyword, Token token) {
-    _unexpected();
-  }
-
-  @override
-  void handleParenthesizedCondition(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleParenthesizedExpression(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleRecoverClassHeader() {
-    _unexpected();
-  }
-
-  @override
-  void handleRecoverImport(Token? semicolon) {
-    _unexpected();
-  }
-
-  @override
-  void handleRecoverMixinHeader() {
-    _unexpected();
-  }
-
-  @override
-  void handleRecoverableError(
-      Message message, Token startToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleScript(Token token) {
-    _unexpected();
-  }
-
-  @override
-  void handleSend(Token beginToken, Token endToken) {
-    _unhandled();
-  }
-
-  @override
-  void handleShowHideIdentifier(Token? modifier, Token identifier) {
-    _unexpected();
-  }
-
-  @override
-  void handleSpreadExpression(Token spreadToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleStringJuxtaposition(Token startToken, int literalCount) {
-    _unhandled();
-  }
-
-  @override
-  void handleStringPart(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleSuperExpression(Token token, IdentifierContext context) {
-    _unsupported();
-  }
-
-  @override
-  void handleSymbolVoid(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleThenControlFlow(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleThisExpression(Token token, IdentifierContext context) {
-    _unsupported();
-  }
-
-  @override
-  void handleThrowExpression(Token throwToken, Token endToken) {
-    _unsupported();
-  }
-
-  @override
-  void handleType(Token beginToken, Token? questionMark) {
-    _unknown();
-  }
-
-  @override
-  void handleTypeArgumentApplication(Token openAngleBracket) {
-    _unhandled();
-  }
-
-  @override
-  void handleTypeVariablesDefined(Token token, int count) {
-    _unsupported();
-  }
-
-  @override
-  void handleUnaryPostfixAssignmentExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleUnaryPrefixAssignmentExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleUnaryPrefixExpression(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleUnescapeError(
-      Message message, covariant Token location, int stringOffset, int length) {
-    _unsupported();
-  }
-
-  @override
-  void handleValuedFormalParameter(Token equals, Token token) {
-    _unsupported();
-  }
-
-  @override
-  void handleVoidKeyword(Token token) {
-    _unknown();
-  }
-
-  @override
-  void handleVoidKeywordWithTypeArguments(Token token) {
-    _unsupported();
-  }
-
-  @override
-  void logEvent(String name) {}
-
-  @override
-  void reportVarianceModifierNotEnabled(Token? variance) {
-    _unsupported();
-  }
-}
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..1992464 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -137,7 +137,7 @@
       }
     }
     if (type.formals != null) {
-      for (FormalParameterBuilder formal in type.formals!) {
+      for (ParameterBuilder formal in type.formals!) {
         result = Variance.meet(
             result,
             Variance.combine(
@@ -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;
@@ -285,9 +281,9 @@
       variables = new List<TypeVariableBuilder>.filled(
           type.typeVariables!.length, dummyTypeVariableBuilder);
     }
-    List<FormalParameterBuilder>? formals;
+    List<ParameterBuilder>? formals;
     if (type.formals != null) {
-      formals = new List<FormalParameterBuilder>.filled(
+      formals = new List<ParameterBuilder>.filled(
           type.formals!.length, dummyFormalParameterBuilder);
     }
     TypeBuilder? returnType;
@@ -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);
@@ -326,7 +322,7 @@
     }
     if (type.formals != null) {
       for (int i = 0; i < formals!.length; i++) {
-        FormalParameterBuilder formal = type.formals![i];
+        ParameterBuilder formal = type.formals![i];
         TypeBuilder? parameterType = substituteRange(
             formal.type,
             functionTypeUpperSubstitution ?? upperSubstitution,
@@ -335,15 +331,8 @@
             unboundTypeVariables,
             variance: Variance.combine(variance, Variance.contravariant));
         if (parameterType != formal.type) {
-          formals[i] = new FormalParameterBuilder(
-              formal.metadata,
-              formal.modifiers,
-              parameterType,
-              formal.name,
-              formal.parent as LibraryBuilder?,
-              formal.charOffset,
-              fileUri: formal.fileUri,
-              isExtensionThis: formal.isExtensionThis);
+          formals[i] = new FunctionTypeParameterBuilder(
+              formal.metadata, formal.kind, parameterType, formal.name);
           changed = true;
         } else {
           formals[i] = formal;
@@ -480,7 +469,7 @@
           }
         }
         if (type.formals != null) {
-          for (FormalParameterBuilder parameter in type.formals!) {
+          for (ParameterBuilder parameter in type.formals!) {
             collectReferencesFrom(index, parameter.type);
           }
         }
@@ -534,7 +523,7 @@
       }
     }
     if (type.formals != null) {
-      for (FormalParameterBuilder formal in type.formals!) {
+      for (ParameterBuilder formal in type.formals!) {
         uses.addAll(findVariableUsesInType(variable, formal.type));
       }
     }
@@ -655,7 +644,7 @@
       }
     }
     if (type.formals != null) {
-      for (FormalParameterBuilder formal in type.formals!) {
+      for (ParameterBuilder formal in type.formals!) {
         typesAndDependencies
             .addAll(findRawTypesWithInboundReferences(formal.type));
       }
@@ -826,7 +815,7 @@
       }
     }
     if (start.formals != null) {
-      for (FormalParameterBuilder formal in start.formals!) {
+      for (ParameterBuilder formal in start.formals!) {
         paths.addAll(findRawTypePathsToDeclaration(formal.type, end, visited));
       }
     }
@@ -1034,7 +1023,7 @@
     }
     findUnaliasedGenericFunctionTypes(type.returnType, result: result);
     if (type.formals != null) {
-      for (FormalParameterBuilder formal in type.formals!) {
+      for (ParameterBuilder formal in type.formals!) {
         findUnaliasedGenericFunctionTypes(formal.type, result: result);
       }
     }
@@ -1063,7 +1052,7 @@
     }
     findGenericFunctionTypes(type.returnType, result: result);
     if (type.formals != null) {
-      for (FormalParameterBuilder formal in type.formals!) {
+      for (ParameterBuilder formal in type.formals!) {
         findGenericFunctionTypes(formal.type, result: result);
       }
     }
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..d21a6c7 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
@@ -131,36 +127,27 @@
     List<TypeVariableBuilder>? typeVariables = null;
     List<DartType> positionalParameters = node.positionalParameters;
     List<NamedType> namedParameters = node.namedParameters;
-    List<FormalParameterBuilder> formals =
-        new List<FormalParameterBuilder>.filled(
-            positionalParameters.length + namedParameters.length,
-            dummyFormalParameterBuilder);
+    List<ParameterBuilder> formals = new List<ParameterBuilder>.filled(
+        positionalParameters.length + namedParameters.length,
+        dummyFormalParameterBuilder);
     for (int i = 0; i < positionalParameters.length; i++) {
       TypeBuilder type = positionalParameters[i].accept(this);
-      FormalParameterKind kind = FormalParameterKind.mandatory;
+      FormalParameterKind kind = FormalParameterKind.requiredPositional;
       if (i >= node.requiredParameterCount) {
         kind = FormalParameterKind.optionalPositional;
       }
-      formals[i] = new FormalParameterBuilder(
-          /* metadata = */ null,
-          /* modifiers = */ 0,
-          type,
-          /* name = */ '',
-          /* compilationUnit = */ null,
-          /* charOffset = */ TreeNode.noOffset)
-        ..kind = kind;
+      formals[i] = new FunctionTypeParameterBuilder(
+          /* metadata = */ null, kind, type, /* name = */ null);
     }
     for (int i = 0; i < namedParameters.length; i++) {
       NamedType parameter = namedParameters[i];
       TypeBuilder type = parameter.type.accept(this);
-      formals[i + positionalParameters.length] = new FormalParameterBuilder(
-          /* metadata = */ null,
-          /* modifiers = */ 0,
-          type,
-          parameter.name,
-          /* compilationUnit = */ null,
-          /* charOffset = */ TreeNode.noOffset)
-        ..kind = FormalParameterKind.optionalNamed;
+      FormalParameterKind kind = parameter.isRequired
+          ? FormalParameterKind.requiredNamed
+          : FormalParameterKind.optionalNamed;
+      formals[i + positionalParameters.length] =
+          new FunctionTypeParameterBuilder(
+              /* metadata = */ null, kind, type, parameter.name);
     }
     return new FunctionTypeBuilder(
         returnType,
@@ -183,14 +170,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 3a85b46..3443cf7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -6,6 +6,7 @@
 
 import 'dart:typed_data' show Uint8List;
 
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
 import 'package:_fe_analyzer_shared/src/scanner/token.dart'
     show SyntheticToken, TokenType;
@@ -96,6 +97,20 @@
 
 const String kDebugClassName = "#DebugClass";
 
+class _CollectLibraryDependencies extends RecursiveVisitor {
+  Set<LibraryDependency> foundLibraryDependencies = {};
+
+  @override
+  void visitLoadLibrary(LoadLibrary node) {
+    foundLibraryDependencies.add(node.import);
+  }
+
+  @override
+  void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    foundLibraryDependencies.add(node.import);
+  }
+}
+
 Component createExpressionEvaluationComponent(Procedure procedure) {
   Library realLibrary = procedure.enclosingLibrary;
 
@@ -106,6 +121,17 @@
     ..nonNullableByDefaultCompiledMode =
         realLibrary.nonNullableByDefaultCompiledMode;
 
+  // Add deferred library dependencies. They are needed for serializing
+  // references to deferred libraries. We can just claim ownership of the ones
+  // we find as they were created when doing the expression compilation.
+  _CollectLibraryDependencies collectLibraryDependencies =
+      new _CollectLibraryDependencies();
+  procedure.accept(collectLibraryDependencies);
+  for (LibraryDependency libraryDependency
+      in collectLibraryDependencies.foundLibraryDependencies) {
+    fakeLibrary.addDependency(libraryDependency);
+  }
+
   TreeNode? realClass = procedure.parent;
   if (realClass is Class) {
     Class fakeClass = new Class(name: kDebugClassName, fileUri: uri)
@@ -206,9 +232,12 @@
 final TypeBuilder dummyTypeBuilder =
     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);
+    new FormalParameterBuilder(
+        null, FormalParameterKind.requiredPositional, 0, null, '', null, -1,
+        fileUri: dummyUri);
+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/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index b4c0a0a..f78f458 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -805,7 +805,7 @@
   }
 
   @override
-  SourceLibraryBuilder get library {
+  SourceLibraryBuilder get libraryBuilder {
     throw new UnsupportedError('AmbiguousMemberBuilder.library');
   }
 
@@ -815,17 +815,15 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     throw new UnsupportedError(
         'AmbiguousMemberBuilder.buildOutlineExpressions');
   }
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
     assert(false, "Unexpected call to $runtimeType.buildMembers.");
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 86e5832..05e5c4f 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -289,34 +289,17 @@
     if (typedefBuilder is TypeAliasBuilder) {
       TypeBuilder? type = typedefBuilder.type;
       if (type is FunctionTypeBuilder) {
-        List<FormalParameterBuilder>? formals = type.formals;
+        List<ParameterBuilder>? formals = type.formals;
         if (formals != null) {
           for (int i = 0; i < formals.length; ++i) {
-            FormalParameterBuilder formal = formals[i];
+            ParameterBuilder formal = formals[i];
             List<MetadataBuilder>? metadata = formal.metadata;
             if (metadata != null && metadata.length > 0) {
               // [parseMetadata] is using [Parser.parseMetadataStar] under the
               // hood, so we only need the offset of the first annotation.
               Token metadataToken = tokenForOffset(
                   typedefKeyword, endToken, metadata[0].charOffset)!;
-              List<Expression> annotations =
-                  parseMetadata(typedefBuilder, metadataToken, null)!;
-              if (formal.isPositional) {
-                VariableDeclaration parameter =
-                    typedefBuilder.typedef.positionalParameters[i];
-                for (Expression annotation in annotations) {
-                  parameter.addAnnotation(annotation);
-                }
-              } else {
-                for (VariableDeclaration named
-                    in typedefBuilder.typedef.namedParameters) {
-                  if (named.name == formal.name) {
-                    for (Expression annotation in annotations) {
-                      named.addAnnotation(annotation);
-                    }
-                  }
-                }
-              }
+              parseMetadata(typedefBuilder, metadataToken, null)!;
             }
           }
         }
@@ -1149,7 +1132,7 @@
           ? ""
           : nameOrQualified as String;
     }
-    if (libraryBuilder.enableConstructorTearOffsInLibrary) {
+    if (libraryFeatures.constructorTearoffs.isEnabled) {
       suffix = suffix == "new" ? "" : suffix;
     }
     declaration = currentClass!.constructorScope.local[suffix];
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 146909d..17173a4 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 {
@@ -543,16 +591,9 @@
     checkEmpty(importKeyword.charOffset);
     if (prefix is ParserRecovery) return;
 
-    if (!libraryBuilder.enableMacrosInLibrary) {
-      if (augmentToken != null) {
-        // TODO(johnniwinther): We should emit a different message when the
-        // experiment is not released yet. The current message indicates that
-        // changing the sdk version can solve the problem.
-        addProblem(
-            templateExperimentNotEnabled.withArguments(
-                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-            augmentToken.next!.charOffset,
-            augmentToken.next!.length);
+    if (augmentToken != null) {
+      if (reportIfNotEnabled(libraryFeatures.macros, augmentToken.charOffset,
+          augmentToken.length)) {
         augmentToken = null;
       }
     }
@@ -827,16 +868,9 @@
     libraryBuilder.setCurrentClassName(name.lexeme);
     inAbstractClass = abstractToken != null;
     push(abstractToken != null ? abstractMask : 0);
-    if (!libraryBuilder.enableMacrosInLibrary) {
-      if (macroToken != null) {
-        // TODO(johnniwinther): We should emit a different message when the
-        // experiment is not released yet. The current message indicates that
-        // changing the sdk version can solve the problem.
-        addProblem(
-            templateExperimentNotEnabled.withArguments(
-                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-            macroToken.next!.charOffset,
-            macroToken.next!.length);
+    if (macroToken != null) {
+      if (reportIfNotEnabled(
+          libraryFeatures.macros, macroToken.charOffset, macroToken.length)) {
         macroToken = null;
       }
     }
@@ -927,13 +961,9 @@
     libraryBuilder.currentTypeParameterScopeBuilder.markAsNamedMixinApplication(
         name.lexeme, name.charOffset, typeVariables);
     push(abstractToken != null ? abstractMask : 0);
-    if (!libraryBuilder.enableMacrosInLibrary) {
-      if (macroToken != null) {
-        addProblem(
-            templateExperimentNotEnabled.withArguments(
-                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-            macroToken.next!.charOffset,
-            macroToken.next!.length);
+    if (macroToken != null) {
+      if (reportIfNotEnabled(libraryFeatures.macros,
+          macroToken.next!.charOffset, macroToken.next!.length)) {
         macroToken = null;
       }
     }
@@ -948,14 +978,10 @@
             .popNonNullable(stack, interfacesCount, dummyTypeBuilder) ??
         NullValue.TypeBuilderList);
 
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary &&
-        implementsKeyword != null &&
+    if (implementsKeyword != null &&
         declarationContext == DeclarationContext.Enum) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          implementsKeyword.charOffset,
-          -1);
+      reportIfNotEnabled(libraryFeatures.enhancedEnums,
+          implementsKeyword.charOffset, implementsKeyword.length);
     }
   }
 
@@ -1031,14 +1057,27 @@
   @override
   void handleRecoverClassHeader() {
     debugEvent("handleRecoverClassHeader");
+    assert(checkState(null, [
+      /* interfaces */ ValueKinds.TypeBuilderListOrNull,
+      /* mixins */ unionOfKinds([
+        ValueKinds.MixinApplicationBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+      /* supertype offset */ ValueKinds.Integer,
+      /* supertype */ unionOfKinds([
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
     // TODO(jensj): Possibly use these instead... E.g. "class A extend B {}"
     // will get here (because it's 'extends' with an 's') and discard the B...
     // Also Analyzer actually merges the information meaning that the two could
     // give different errors (if, say, one later assigns
     // A to a variable of type B).
     pop(NullValue.TypeBuilderList); // Interfaces.
+    pop(NullValue.MixinApplicationBuilder); // Mixin applications.
     pop(); // Supertype offset.
-    pop(); // Supertype.
+    pop(NullValue.TypeBuilder); // Supertype.
   }
 
   @override
@@ -1073,6 +1112,10 @@
     debugEvent("endClassDeclaration");
     assert(checkState(beginToken, [
       /* interfaces */ ValueKinds.TypeBuilderListOrNull,
+      /* mixins */ unionOfKinds([
+        ValueKinds.MixinApplicationBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
       /* supertype offset */ ValueKinds.Integer,
       /* supertype */ unionOfKinds([
         ValueKinds.TypeBuilderOrNull,
@@ -1089,6 +1132,9 @@
 
     List<TypeBuilder>? interfaces =
         pop(NullValue.TypeBuilderList) as List<TypeBuilder>?;
+    MixinApplicationBuilder? mixinApplication =
+        nullIfParserRecovery(pop(NullValue.MixinApplicationBuilder))
+            as MixinApplicationBuilder?;
     int supertypeOffset = popCharOffset();
     TypeBuilder? supertype = nullIfParserRecovery(pop()) as TypeBuilder?;
     Token? augmentToken = pop(NullValue.Token) as Token?;
@@ -1098,8 +1144,8 @@
         pop() as List<TypeVariableBuilder>?;
     int nameOffset = popCharOffset();
     Object? name = pop();
-    if (typeVariables != null && supertype is MixinApplicationBuilder) {
-      supertype.typeVariables = typeVariables;
+    if (typeVariables != null && mixinApplication != null) {
+      mixinApplication.typeVariables = typeVariables;
     }
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     inAbstractClass = false;
@@ -1115,23 +1161,19 @@
 
       if (libraryBuilder.isNonNullableByDefault) {
         String classNameForErrors = "${name}";
-        TypeBuilder? supertypeForErrors = supertype is MixinApplicationBuilder
-            ? supertype.supertype
-            : supertype;
-        List<TypeBuilder>? mixins =
-            supertype is MixinApplicationBuilder ? supertype.mixins : null;
-        if (supertypeForErrors != null) {
-          if (supertypeForErrors.nullabilityBuilder.build(libraryBuilder) ==
+        if (supertype != null) {
+          if (supertype.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
             libraryBuilder.addProblem(
                 templateNullableSuperclassError
-                    .withArguments(supertypeForErrors.fullNameForErrors),
+                    .withArguments(supertype.fullNameForErrors),
                 nameOffset,
                 classNameForErrors.length,
                 uri);
           }
         }
-        if (mixins != null) {
+        if (mixinApplication != null) {
+          List<TypeBuilder>? mixins = mixinApplication.mixins;
           for (TypeBuilder mixin in mixins) {
             if (mixin.nullabilityBuilder.build(libraryBuilder) ==
                 Nullability.nullable) {
@@ -1165,6 +1207,7 @@
           name as String,
           typeVariables,
           supertype,
+          mixinApplication,
           interfaces,
           startCharOffset,
           nameOffset,
@@ -1217,19 +1260,6 @@
     } else {
       int startOffset =
           metadata == null ? mixinToken.charOffset : metadata.first.charOffset;
-      TypeBuilder? supertype;
-      if (supertypeConstraints != null && supertypeConstraints.isNotEmpty) {
-        if (supertypeConstraints.length == 1) {
-          supertype = supertypeConstraints.first;
-        } else {
-          supertype = new MixinApplicationBuilder(
-              supertypeConstraints.first,
-              supertypeConstraints.skip(1).toList(),
-              supertypeConstraints.first.fileUri!,
-              supertypeConstraints.first.charOffset!);
-        }
-      }
-
       if (libraryBuilder.isNonNullableByDefault) {
         String classNameForErrors = "${name}";
         if (supertypeConstraints != null) {
@@ -1265,7 +1295,7 @@
           mixinDeclarationMask,
           name as String,
           typeVariables,
-          supertype,
+          supertypeConstraints,
           interfaces,
           startOffset,
           nameOffset,
@@ -1351,11 +1381,8 @@
             hiddenMembersOrTypes: hiddenMembersOrTypes ?? const <String>[],
             hiddenOperators: hiddenOperators ?? const <Operator>[]);
 
-    if (showKeyword != null && !libraryBuilder.enableExtensionTypesInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('extension-types',
-              libraryBuilder.enableExtensionTypesVersionInLibrary.toText()),
-          showKeyword.charOffset,
+    if (showKeyword != null) {
+      reportIfNotEnabled(libraryFeatures.extensionTypes, showKeyword.charOffset,
           showKeyword.length);
     }
     Object? onType = pop();
@@ -1379,13 +1406,9 @@
         ? extensionKeyword.charOffset
         : metadata.first.charOffset;
     bool isExtensionTypeDeclaration = typeKeyword != null;
-    if (!libraryBuilder.enableExtensionTypesInLibrary &&
-        isExtensionTypeDeclaration) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('extension-types',
-              libraryBuilder.enableExtensionTypesVersionInLibrary.toText()),
-          extensionKeyword.next!.charOffset,
-          extensionKeyword.next!.length);
+    if (isExtensionTypeDeclaration) {
+      reportIfNotEnabled(libraryFeatures.extensionTypes,
+          extensionKeyword.next!.charOffset, extensionKeyword.next!.length);
     }
     libraryBuilder.addExtensionDeclaration(
         metadata,
@@ -1745,7 +1768,7 @@
       } else {
         if (formals != null) {
           for (FormalParameterBuilder formal in formals) {
-            if (!formal.isRequired) {
+            if (!formal.isRequiredPositional) {
               addProblem(messageOperatorWithOptionalFormals, formal.charOffset,
                   formal.name.length);
             }
@@ -1838,7 +1861,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]] =
@@ -1868,8 +1891,15 @@
           libraryBuilder.unboundTypeVariables.addAll(unboundTypeVariables);
         }
         synthesizedFormals.add(new FormalParameterBuilder(
-            null, finalMask, thisType, extensionThisName, null, charOffset,
-            fileUri: uri, isExtensionThis: true));
+            /* metadata = */ null,
+            FormalParameterKind.requiredPositional,
+            finalMask,
+            thisType,
+            extensionThisName,
+            null,
+            charOffset,
+            fileUri: uri,
+            isExtensionThis: true));
         if (formals != null) {
           synthesizedFormals.addAll(formals);
         }
@@ -1880,7 +1910,7 @@
       if (constructorName != null) {
         if (isConst &&
             bodyKind != MethodBody.Abstract &&
-            !libraryBuilder.enableConstFunctionsInLibrary) {
+            !libraryFeatures.constFunctions.isEnabled) {
           addProblem(messageConstConstructorWithBody, varFinalOrConstOffset, 5);
           modifiers &= ~constMask;
         }
@@ -1943,16 +1973,33 @@
   @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     debugEvent("NamedMixinApplicationWithClause");
+    assert(checkState(withKeyword, [
+      /* mixins */ unionOfKinds([
+        ValueKinds.ParserRecovery,
+        ValueKinds.TypeBuilderListOrNull,
+      ]),
+      /* supertype */ unionOfKinds([
+        ValueKinds.ParserRecovery,
+        ValueKinds.TypeBuilder,
+      ]),
+    ]));
     Object? mixins = pop();
-    Object? supertype = pop();
     if (mixins is ParserRecovery) {
       push(mixins);
-    } else if (supertype is ParserRecovery) {
-      push(supertype);
     } else {
-      push(libraryBuilder.addMixinApplication(supertype as TypeBuilder?,
+      push(libraryBuilder.addMixinApplication(
           mixins as List<TypeBuilder>, withKeyword.charOffset));
     }
+    assert(checkState(withKeyword, [
+      /* mixin application */ unionOfKinds([
+        ValueKinds.ParserRecovery,
+        ValueKinds.MixinApplicationBuilder,
+      ]),
+      /* supertype */ unionOfKinds([
+        ValueKinds.ParserRecovery,
+        ValueKinds.TypeBuilder,
+      ]),
+    ]));
   }
 
   @override
@@ -1968,9 +2015,16 @@
     debugEvent("endNamedMixinApplication");
     assert(checkState(beginToken, [
       if (implementsKeyword != null)
-        /* interfaces */ ValueKinds.TypeBuilderListOrNull,
+        /* interfaces */ unionOfKinds([
+          ValueKinds.ParserRecovery,
+          ValueKinds.TypeBuilderListOrNull,
+        ]),
       /* mixin application */ unionOfKinds([
         ValueKinds.ParserRecovery,
+        ValueKinds.MixinApplicationBuilder,
+      ]),
+      /* supertype */ unionOfKinds([
+        ValueKinds.ParserRecovery,
         ValueKinds.TypeBuilder,
       ]),
       /* augment token */ ValueKinds.TokenOrNull,
@@ -1983,8 +2037,10 @@
     ]));
 
     List<TypeBuilder>? interfaces =
-        popIfNotNull(implementsKeyword) as List<TypeBuilder>?;
+        nullIfParserRecovery(popIfNotNull(implementsKeyword))
+            as List<TypeBuilder>?;
     Object? mixinApplication = pop();
+    Object? supertype = pop();
     Token? augmentToken = pop(NullValue.Token) as Token?;
     Token? macroToken = pop(NullValue.Token) as Token?;
     int modifiers = pop() as int;
@@ -1994,7 +2050,9 @@
     Object? name = pop();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(beginToken.charOffset);
-    if (name is ParserRecovery || mixinApplication is ParserRecovery) {
+    if (name is ParserRecovery ||
+        supertype is ParserRecovery ||
+        mixinApplication is ParserRecovery) {
       libraryBuilder
           .endNestedDeclaration(
               TypeParameterScopeKind.namedMixinApplication, "<syntax-error>")
@@ -2004,9 +2062,8 @@
         String classNameForErrors = "${name}";
         MixinApplicationBuilder mixinApplicationBuilder =
             mixinApplication as MixinApplicationBuilder;
-        TypeBuilder? supertype = mixinApplicationBuilder.supertype;
         List<TypeBuilder> mixins = mixinApplicationBuilder.mixins;
-        if (supertype != null && supertype is! MixinApplicationBuilder) {
+        if (supertype is TypeBuilder && supertype is! MixinApplicationBuilder) {
           if (supertype.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
             libraryBuilder.addProblem(
@@ -2050,7 +2107,8 @@
           name as String,
           typeVariables,
           modifiers,
-          mixinApplication as TypeBuilder?,
+          supertype as TypeBuilder?,
+          mixinApplication as MixinApplicationBuilder,
           interfaces,
           startCharOffset,
           charOffset,
@@ -2185,15 +2243,9 @@
       MemberKind memberKind) {
     debugEvent("FormalParameter");
 
-    if (superKeyword != null &&
-        !libraryBuilder.enableSuperParametersInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'super-parameters',
-              libraryBuilder.enableConstructorTearOffsVersionInLibrary
-                  .toText()),
-          superKeyword.charOffset,
-          superKeyword.length);
+    if (superKeyword != null) {
+      reportIfNotEnabled(libraryFeatures.superParameters,
+          superKeyword.charOffset, superKeyword.length);
     }
 
     int charOffset = popCharOffset();
@@ -2206,6 +2258,7 @@
     } else {
       push(libraryBuilder.addFormalParameter(
           metadata,
+          kind,
           modifiers,
           type,
           name == null ? FormalParameterBuilder.noNameSentinel : name as String,
@@ -2243,9 +2296,6 @@
   void endOptionalFormalParameters(
       int count, Token beginToken, Token endToken) {
     debugEvent("OptionalFormalParameters");
-    FormalParameterKind kind = optional("{", beginToken)
-        ? FormalParameterKind.optionalNamed
-        : FormalParameterKind.optionalPositional;
     // When recovering from an empty list of optional arguments, count may be
     // 0. It might be simpler if the parser didn't call this method in that
     // case, however, then [beginOptionalFormalParameters] wouldn't always be
@@ -2256,9 +2306,6 @@
     if (parameters == null) {
       push(new ParserRecovery(offsetForToken(beginToken)));
     } else {
-      for (FormalParameterBuilder parameter in parameters) {
-        parameter.kind = kind;
-      }
       push(parameters);
     }
   }
@@ -2451,8 +2498,10 @@
 
     int endCharOffset = popCharOffset();
     int startCharOffset = popCharOffset();
-    List<TypeBuilder>? interfaces = pop() as List<TypeBuilder>?;
-    MixinApplicationBuilder? mixinBuilder = pop() as MixinApplicationBuilder?;
+    List<TypeBuilder>? interfaces =
+        nullIfParserRecovery(pop()) as List<TypeBuilder>?;
+    MixinApplicationBuilder? mixinBuilder =
+        nullIfParserRecovery(pop()) as MixinApplicationBuilder?;
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     int charOffset = popCharOffset(); // identifier char offset.
@@ -2610,7 +2659,7 @@
         return;
       }
       if (type is FunctionTypeBuilder &&
-          !libraryBuilder.enableNonfunctionTypeAliasesInLibrary) {
+          !libraryFeatures.nonfunctionTypeAliases.isEnabled) {
         if (type.nullabilityBuilder.build(libraryBuilder) ==
                 Nullability.nullable &&
             libraryBuilder.isNonNullableByDefault) {
@@ -2635,7 +2684,7 @@
           // of a generic function).
           aliasedType = type;
         }
-      } else if (libraryBuilder.enableNonfunctionTypeAliasesInLibrary) {
+      } else if (libraryFeatures.nonfunctionTypeAliases.isEnabled) {
         if (type is TypeBuilder) {
           aliasedType = type;
         } else {
@@ -2870,7 +2919,8 @@
       push(name);
     } else {
       push(libraryBuilder.addTypeVariable(
-          metadata, name as String, null, charOffset, uri));
+          metadata, name as String, null, charOffset, uri,
+          kind: declarationContext.typeVariableKind));
     }
   }
 
@@ -2894,7 +2944,7 @@
     if (typeParameters != null) {
       typeParameters[index].bound = bound;
       if (variance != null) {
-        if (!libraryBuilder.enableVarianceInLibrary) {
+        if (!libraryFeatures.variance.isEnabled) {
           reportVarianceModifierNotEnabled(variance);
         }
         typeParameters[index].variance = Variance.fromString(variance.lexeme);
@@ -2906,13 +2956,9 @@
   void endTypeVariables(Token beginToken, Token endToken) {
     debugEvent("endTypeVariables");
 
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary &&
-        declarationContext == DeclarationContext.Enum) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          beginToken.charOffset,
-          -1);
+    if (declarationContext == DeclarationContext.Enum) {
+      reportIfNotEnabled(
+          libraryFeatures.enhancedEnums, beginToken.charOffset, noLength);
     }
 
     // Peek to leave type parameters on top of stack.
@@ -2960,18 +3006,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)));
           }
         }
       }
@@ -3020,7 +3066,7 @@
       // omitted only within an enum element declaration.
       if (libraryBuilder.currentTypeParameterScopeBuilder.kind ==
           TypeParameterScopeKind.enumDeclaration) {
-        if (libraryBuilder.enableEnhancedEnumsInLibrary) {
+        if (libraryFeatures.enhancedEnums.isEnabled) {
           push(libraryBuilder.addConstructorReference(
               libraryBuilder.currentTypeParameterScopeBuilder.name,
               typeArguments,
@@ -3030,13 +3076,8 @@
           // For entries that consist of their name only, all of the elements
           // of the constructor reference should be null.
           if (typeArguments != null || suffix != null) {
-            addProblem(
-                templateExperimentNotEnabled.withArguments(
-                    'enhanced-enums',
-                    libraryBuilder.enableEnhancedEnumsVersionInLibrary
-                        .toText()),
-                charOffset,
-                -1);
+            libraryBuilder.reportFeatureNotEnabled(
+                libraryFeatures.enhancedEnums, uri, charOffset, noLength);
           }
           push(NullValue.ConstructorReference);
         }
@@ -3145,13 +3186,8 @@
   void endEnumFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     debugEvent("EnumFactoryMethod");
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          beginToken.charOffset,
-          -1);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.enhancedEnums, beginToken.charOffset, noLength);
 
     _endFactoryMethod(beginToken, factoryKeyword, endToken);
   }
@@ -3159,13 +3195,8 @@
   @override
   void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          beginToken.charOffset,
-          -1);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.enhancedEnums, beginToken.charOffset, noLength);
 
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.enumMethod);
@@ -3183,13 +3214,9 @@
       int count,
       Token beginToken,
       Token endToken) {
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          beginToken.charOffset,
-          -1);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.enhancedEnums, beginToken.charOffset, noLength);
+
     endClassFields(
         abstractToken,
         augmentToken,
@@ -3206,13 +3233,8 @@
   @override
   void endEnumConstructor(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken) {
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          beginToken.charOffset,
-          -1);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.enhancedEnums, beginToken.charOffset, noLength);
 
     _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
         endToken, _MethodKind.enumConstructor);
@@ -3227,7 +3249,7 @@
   @override
   void handleConstFactory(Token constKeyword) {
     debugEvent("ConstFactory");
-    if (!libraryBuilder.enableConstFunctionsInLibrary) {
+    if (!libraryFeatures.constFunctions.isEnabled) {
       handleRecoverableError(messageConstFactory, constKeyword, constKeyword);
     }
   }
@@ -3289,51 +3311,94 @@
   @override
   void handleClassWithClause(Token withKeyword) {
     debugEvent("ClassWithClause");
+    assert(checkState(withKeyword, [
+      /* mixins */ unionOfKinds([
+        ValueKinds.TypeBuilderList,
+        ValueKinds.ParserRecovery,
+      ]),
+      /* supertype offset */ ValueKinds.Integer,
+      /* supertype */ unionOfKinds([
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
 
     Object? mixins = pop();
     int extendsOffset = popCharOffset();
-    Object? supertype = pop();
+    Object? supertype = peek();
+    push(extendsOffset);
     if (supertype is ParserRecovery || mixins is ParserRecovery) {
       push(new ParserRecovery(withKeyword.charOffset));
     } else {
-      push(libraryBuilder.addMixinApplication(supertype as TypeBuilder?,
+      push(libraryBuilder.addMixinApplication(
           mixins as List<TypeBuilder>, withKeyword.charOffset));
     }
-    push(extendsOffset);
+    assert(checkState(withKeyword, [
+      /* mixins */ unionOfKinds([
+        ValueKinds.MixinApplicationBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+      /* supertype offset */ ValueKinds.Integer,
+      /* supertype */ unionOfKinds([
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
   }
 
   @override
   void handleClassNoWithClause() {
     debugEvent("ClassNoWithClause");
+    assert(checkState(null, [
+      /* supertype offset */ ValueKinds.Integer,
+      /* supertype */ unionOfKinds([
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
+    push(NullValue.MixinApplicationBuilder);
+    assert(checkState(null, [
+      /* mixins */ ValueKinds.MixinApplicationBuilderOrNull,
+      /* supertype offset */ ValueKinds.Integer,
+      /* supertype */ unionOfKinds([
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
   }
 
   @override
   void handleEnumWithClause(Token withKeyword) {
     debugEvent("EnumWithClause");
+    assert(checkState(withKeyword, [
+      /* mixins */ unionOfKinds([
+        ValueKinds.TypeBuilderListOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
 
-    if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments('enhanced-enums',
-              libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
-          withKeyword.charOffset,
-          -1);
-    }
+    reportIfNotEnabled(libraryFeatures.enhancedEnums, withKeyword.charOffset,
+        withKeyword.length);
 
     Object? mixins = pop();
     if (mixins is ParserRecovery) {
       push(new ParserRecovery(withKeyword.charOffset));
     } else {
       push(libraryBuilder.addMixinApplication(
-          libraryBuilder.loader.target.underscoreEnumType,
-          mixins as List<TypeBuilder>,
-          withKeyword.charOffset));
+          mixins as List<TypeBuilder>, withKeyword.charOffset));
     }
+    assert(checkState(withKeyword, [
+      /* mixins */ unionOfKinds([
+        ValueKinds.MixinApplicationBuilderOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+    ]));
   }
 
   @override
   void handleEnumNoWithClause() {
     debugEvent("EnumNoWithClause");
-    push(NullValue.TypeBuilder);
+    push(NullValue.MixinApplicationBuilder);
   }
 
   @override
@@ -3381,15 +3446,8 @@
 
   @override
   void handleNewAsIdentifier(Token token) {
-    if (!libraryBuilder.enableConstructorTearOffsInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'constructor-tearoffs',
-              libraryBuilder.enableConstructorTearOffsVersionInLibrary
-                  .toText()),
-          token.charOffset,
-          token.length);
-    }
+    reportIfNotEnabled(
+        libraryFeatures.constructorTearoffs, token.charOffset, token.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 bbadbf0..d914a49 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
@@ -66,12 +66,17 @@
     int startCharOffset,
     int charOffset,
     int charEndOffset,
-    IndexedClass? referencesFrom) {
+    IndexedClass? referencesFrom,
+    {required bool isAugmentation}) {
   cls ??= new Class(
       name: name,
       typeParameters:
           TypeVariableBuilder.typeParametersFromBuilders(typeVariables),
-      reference: referencesFrom?.cls.reference,
+      // If the class is an augmentation class it shouldn't use the reference
+      // from index even when available.
+      // TODO(johnniwinther): Avoid creating [Class] so early in the builder
+      // that we end up creating unneeded nodes.
+      reference: isAugmentation ? null : referencesFrom?.cls.reference,
       fileUri: parent.fileUri);
   if (cls.startFileOffset == TreeNode.noOffset) {
     cls.startFileOffset = startCharOffset;
@@ -129,7 +134,8 @@
       this.isMacro = false,
       this.isAugmentation = false})
       : actualCls = initializeClass(cls, typeVariables, name, parent,
-            startCharOffset, nameOffset, charEndOffset, referencesFromIndexed),
+            startCharOffset, nameOffset, charEndOffset, referencesFromIndexed,
+            isAugmentation: isAugmentation),
         super(metadata, modifiers, name, typeVariables, supertype, interfaces,
             onTypes, scope, constructors, parent, nameOffset) {
     actualCls.hasConstConstructor = declaresConstConstructor;
@@ -146,10 +152,11 @@
   Class get cls => origin.actualCls;
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
-  Class build(SourceLibraryBuilder library, LibraryBuilder coreLibrary) {
-    SourceLibraryBuilder.checkMemberConflicts(library, scope,
+  Class build(LibraryBuilder coreLibrary) {
+    SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, scope,
         // These checks are performed as part of the class hierarchy
         // computation.
         checkForInstanceVsStaticConflict: false,
@@ -172,8 +179,8 @@
           }
         } else if (declaration is SourceMemberBuilder) {
           SourceMemberBuilder memberBuilder = declaration;
-          memberBuilder.buildMembers(library,
-              (Member member, BuiltMemberKind memberKind) {
+          memberBuilder
+              .buildMembers((Member member, BuiltMemberKind memberKind) {
             member.parent = cls;
             if (!memberBuilder.isPatch &&
                 !memberBuilder.isDuplicate &&
@@ -206,13 +213,12 @@
     if (supertypeBuilder != null) {
       supertypeBuilder = _checkSupertype(supertypeBuilder!);
     }
-    Supertype? supertype =
-        supertypeBuilder?.buildSupertype(library, charOffset, fileUri);
+    Supertype? supertype = supertypeBuilder?.buildSupertype(libraryBuilder);
     if (supertype != null) {
       Class superclass = supertype.classNode;
       if (superclass.name == 'Function' &&
           superclass.enclosingLibrary == coreLibrary.library) {
-        library.addProblem(
+        libraryBuilder.addProblem(
             messageExtendFunction, charOffset, noLength, fileUri);
         supertype = null;
         supertypeBuilder = null;
@@ -225,7 +231,7 @@
       // cannot be extended.  However, a mixin declaration with a single
       // superclass constraint is encoded with the constraint as the supertype,
       // and that is allowed to be a mixin's interface.
-      library.addProblem(
+      libraryBuilder.addProblem(
           templateSupertypeIsIllegal.withArguments(actualCls.superclass!.name),
           charOffset,
           noLength,
@@ -241,9 +247,10 @@
       mixedInTypeBuilder = _checkSupertype(mixedInTypeBuilder!);
     }
     Supertype? mixedInType =
-        mixedInTypeBuilder?.buildMixedInType(library, charOffset, fileUri);
+        mixedInTypeBuilder?.buildMixedInType(libraryBuilder);
     if (_isFunction(mixedInType, coreLibrary)) {
-      library.addProblem(messageMixinFunction, charOffset, noLength, fileUri);
+      libraryBuilder.addProblem(
+          messageMixinFunction, charOffset, noLength, fileUri);
       mixedInType = null;
       mixedInTypeBuilder = null;
       actualCls.isAnonymousMixin = false;
@@ -263,10 +270,10 @@
       for (int i = 0; i < interfaceBuilders!.length; ++i) {
         interfaceBuilders![i] = _checkSupertype(interfaceBuilders![i]);
         Supertype? supertype =
-            interfaceBuilders![i].buildSupertype(library, charOffset, fileUri);
+            interfaceBuilders![i].buildSupertype(libraryBuilder);
         if (supertype != null) {
           if (_isFunction(supertype, coreLibrary)) {
-            library.addProblem(
+            libraryBuilder.addProblem(
                 messageImplementFunction, charOffset, noLength, fileUri);
             continue;
           }
@@ -331,21 +338,20 @@
   }
 
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     void build(String ignore, Builder declaration) {
       SourceMemberBuilder member = declaration as SourceMemberBuilder;
-      member.buildOutlineExpressions(library, classHierarchy,
-          delayedActionPerformers, synthesizedFunctionNodes);
+      member.buildOutlineExpressions(
+          classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     }
 
     MetadataBuilder.buildAnnotations(isPatch ? origin.cls : cls, metadata,
-        library, this, null, fileUri, library.scope);
+        libraryBuilder, this, null, fileUri, libraryBuilder.scope);
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
-        typeVariables![i].buildOutlineExpressions(library, this, null,
+        typeVariables![i].buildOutlineExpressions(libraryBuilder, this, null,
             classHierarchy, delayedActionPerformers, scope.parent!);
       }
     }
@@ -616,7 +622,7 @@
               originMember.applyPatch(patchMember);
             } else {
               patchMember.isConflictingAugmentationMember = true;
-              library.addProblem(
+              libraryBuilder.addProblem(
                   templateNonAugmentationClassMemberConflict
                       .withArguments(name),
                   patchMember.charOffset,
@@ -631,7 +637,7 @@
             }
           } else {
             if (patchMember.isAugmentation) {
-              library.addProblem(
+              libraryBuilder.addProblem(
                   templateUnmatchedAugmentationClassMember.withArguments(name),
                   patchMember.charOffset,
                   name.length,
@@ -701,8 +707,8 @@
         }
       }
     } else {
-      library.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
-          noLength, patch.fileUri, context: [
+      libraryBuilder.addProblem(messagePatchDeclarationMismatch,
+          patch.charOffset, noLength, patch.fileUri, context: [
         messagePatchDeclarationOrigin.withLocation(
             fileUri, charOffset, noLength)
       ]);
@@ -713,6 +719,7 @@
       CoreTypes coreTypes,
       ClassHierarchyBuilder hierarchyBuilder,
       Class enumClass,
+      Class underscoreEnumClass,
       Class? macroClass) {
     // This method determines whether the class (that's being built) its super
     // class appears both in 'extends' and 'implements' clauses and whether any
@@ -720,7 +727,7 @@
     // Moreover, it checks that `FutureOr` and `void` are not among the
     // supertypes and that `Enum` is not implemented by non-abstract classes.
 
-    if (library.enableEnhancedEnumsInLibrary) {
+    if (libraryBuilder.libraryFeatures.enhancedEnums.isEnabled && !isEnum) {
       bool hasEnumSuperinterface = false;
       List<Supertype> interfaces =
           hierarchyBuilder.getNodeFromClass(cls).superclasses;
@@ -740,7 +747,8 @@
             charOffset, noLength);
       }
 
-      if (hasEnumSuperinterface) {
+      if (hasEnumSuperinterface && cls != underscoreEnumClass) {
+        // Instance members named `values` are restricted.
         Builder? customValuesDeclaration =
             scope.lookupLocalMember("values", setter: false);
         if (customValuesDeclaration != null &&
@@ -749,7 +757,7 @@
           while (customValuesDeclaration?.next != null) {
             customValuesDeclaration = customValuesDeclaration?.next;
           }
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateEnumImplementerContainsValuesDeclaration
                   .withArguments(this.name),
               customValuesDeclaration!.charOffset,
@@ -764,13 +772,28 @@
           while (customValuesDeclaration?.next != null) {
             customValuesDeclaration = customValuesDeclaration?.next;
           }
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateEnumImplementerContainsValuesDeclaration
                   .withArguments(this.name),
               customValuesDeclaration!.charOffset,
               customValuesDeclaration.fullNameForErrors.length,
               fileUri);
         }
+
+        // Non-setter concrete instance members named `index` and hashCode and
+        // operator == are restricted.
+        for (String restrictedMemberName in const ["index", "hashCode", "=="]) {
+          Builder? member =
+              scope.lookupLocalMember(restrictedMemberName, setter: false);
+          if (member is MemberBuilder && !member.isAbstract) {
+            libraryBuilder.addProblem(
+                templateEnumImplementerContainsRestrictedInstanceDeclaration
+                    .withArguments(this.name, restrictedMemberName),
+                member.charOffset,
+                member.fullNameForErrors.length,
+                fileUri);
+          }
+        }
       }
     }
     if (macroClass != null && !cls.isMacro && !cls.isAbstract) {
@@ -799,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(
@@ -911,20 +929,20 @@
       InterfaceType requiredInterface =
           substitution.substituteSupertype(constraint).asInterfaceType;
       InterfaceType? implementedInterface = hierarchy.getTypeAsInstanceOf(
-          supertype, requiredInterface.classNode, library.library);
+          supertype, requiredInterface.classNode, libraryBuilder.library);
       if (implementedInterface == null ||
           !typeEnvironment.areMutualSubtypes(
               implementedInterface,
               requiredInterface,
-              library.isNonNullableByDefault
+              libraryBuilder.isNonNullableByDefault
                   ? SubtypeCheckMode.withNullabilities
                   : SubtypeCheckMode.ignoringNullabilities)) {
-        library.addProblem(
+        libraryBuilder.addProblem(
             templateMixinApplicationIncompatibleSupertype.withArguments(
                 supertype,
                 requiredInterface,
                 cls.mixedInType!.asInterfaceType,
-                library.isNonNullableByDefault),
+                libraryBuilder.isNonNullableByDefault),
             cls.fileOffset,
             noLength,
             cls.fileUri);
@@ -955,7 +973,7 @@
 
     List<DartType>? typeArguments = factory.getTypeArguments();
     FunctionType targetFunctionType =
-        targetNode.computeFunctionType(library.nonNullable);
+        targetNode.computeFunctionType(libraryBuilder.nonNullable);
     if (typeArguments != null &&
         targetFunctionType.typeParameters.length != typeArguments.length) {
       _addProblemForRedirectingFactory(
@@ -988,18 +1006,18 @@
               templateRedirectingFactoryIncompatibleTypeArgument.withArguments(
                   typeArgument,
                   typeParameterBound,
-                  library.isNonNullableByDefault),
+                  libraryBuilder.isNonNullableByDefault),
               redirectionTarget.charOffset,
               noLength);
           hasProblem = true;
-        } else if (library.isNonNullableByDefault) {
+        } else if (libraryBuilder.isNonNullableByDefault) {
           if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
               SubtypeCheckMode.withNullabilities)) {
             _addProblemForRedirectingFactory(
                 factory,
                 templateRedirectingFactoryIncompatibleTypeArgument
                     .withArguments(typeArgument, typeParameterBound,
-                        library.isNonNullableByDefault),
+                        libraryBuilder.isNonNullableByDefault),
                 redirectionTarget.charOffset,
                 noLength);
             hasProblem = true;
@@ -1068,7 +1086,7 @@
   void _addProblemForRedirectingFactory(RedirectingFactoryBuilder factory,
       Message message, int charOffset, int length) {
     addProblem(message, charOffset, length);
-    String text = library.loader.target.context
+    String text = libraryBuilder.loader.target.context
         .format(
             message.withLocation(fileUri, charOffset, length), Severity.error)
         .plain;
@@ -1093,7 +1111,7 @@
     // its enclosing class, because constructors cannot specify type parameters
     // of their own.
     FunctionType factoryType = factory.function
-        .computeThisFunctionType(library.nonNullable)
+        .computeThisFunctionType(libraryBuilder.nonNullable)
         .withoutTypeParameters;
     FunctionType? redirecteeType =
         _computeRedirecteeType(factory, typeEnvironment);
@@ -1114,16 +1132,20 @@
         _addProblemForRedirectingFactory(
             factory,
             templateIncompatibleRedirecteeFunctionType.withArguments(
-                redirecteeType, factoryType, library.isNonNullableByDefault),
+                redirecteeType,
+                factoryType,
+                libraryBuilder.isNonNullableByDefault),
             factory.redirectionTarget.charOffset,
             noLength);
-      } else if (library.isNonNullableByDefault) {
+      } else if (libraryBuilder.isNonNullableByDefault) {
         if (!typeEnvironment.isSubtypeOf(
             redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
           _addProblemForRedirectingFactory(
               factory,
               templateIncompatibleRedirecteeFunctionType.withArguments(
-                  redirecteeType, factoryType, library.isNonNullableByDefault),
+                  redirecteeType,
+                  factoryType,
+                  libraryBuilder.isNonNullableByDefault),
               factory.redirectionTarget.charOffset,
               noLength);
         }
@@ -1168,7 +1190,7 @@
     for (int i = 0; i < typeVariables!.length; ++i) {
       TypeVariableBuilder typeVariableBuilder = typeVariables![i];
       int variance = computeTypeVariableBuilderVariance(
-          typeVariableBuilder, supertype, library);
+          typeVariableBuilder, supertype, libraryBuilder);
       if (!Variance.greaterThanOrEqual(variance, typeVariables![i].variance)) {
         if (typeVariables![i].parameter.isLegacyCovariant) {
           message = templateInvalidTypeVariableInSupertype.withArguments(
@@ -1183,20 +1205,20 @@
                   Variance.keywordString(variance),
                   supertype.name as String);
         }
-        library.addProblem(message, charOffset, noLength, fileUri);
+        libraryBuilder.addProblem(message, charOffset, noLength, fileUri);
       }
     }
     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;
   }
@@ -1279,7 +1301,7 @@
   void reportVariancePositionIfInvalid(
       int variance, TypeParameter typeParameter, Uri fileUri, int fileOffset,
       {bool isReturnType: false}) {
-    SourceLibraryBuilder library = this.library;
+    SourceLibraryBuilder library = this.libraryBuilder;
     if (!typeParameter.isLegacyCovariant &&
         !Variance.greaterThanOrEqual(variance, typeParameter.variance)) {
       Message message;
@@ -1300,7 +1322,6 @@
 
   void checkBoundsInSupertype(
       Supertype supertype, TypeEnvironment typeEnvironment) {
-    SourceLibraryBuilder libraryBuilder = this.library;
     Library library = libraryBuilder.library;
 
     List<TypeArgumentIssue> issues = findTypeArgumentIssues(
@@ -1313,7 +1334,7 @@
         allowSuperBounded: false,
         isNonNullableByDefault: library.isNonNullableByDefault,
         areGenericArgumentsAllowed:
-            libraryBuilder.enableGenericMetadataInLibrary);
+            libraryBuilder.libraryFeatures.genericMetadata.isEnabled);
     for (TypeArgumentIssue issue in issues) {
       DartType argument = issue.argument;
       TypeParameter typeParameter = issue.typeParameter;
@@ -1375,7 +1396,7 @@
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    library.checkBoundsInTypeParameters(
+    libraryBuilder.checkBoundsInTypeParameters(
         typeEnvironment, cls.typeParameters, fileUri);
 
     // Check in supers.
@@ -1395,7 +1416,7 @@
     forEach((String name, Builder builder) {
       if (builder is SourceMemberBuilder) {
         builder.checkVariance(this, typeEnvironment);
-        builder.checkTypes(library, typeEnvironment);
+        builder.checkTypes(libraryBuilder, typeEnvironment);
       } else {
         assert(
             false,
@@ -1406,7 +1427,7 @@
 
     forEachConstructor((String name, MemberBuilder builder) {
       if (builder is SourceMemberBuilder) {
-        builder.checkTypes(library, typeEnvironment);
+        builder.checkTypes(libraryBuilder, typeEnvironment);
       } else {
         assert(false,
             "Unexpected constructor builder $builder (${builder.runtimeType})");
@@ -1601,8 +1622,8 @@
             memberSignature.parent = cls;
 
             if (member is Procedure) {
-              library.forwardersOrigins.add(memberSignature);
-              library.forwardersOrigins.add(member);
+              libraryBuilder.forwardersOrigins.add(memberSignature);
+              libraryBuilder.forwardersOrigins.add(member);
             }
           }
           changed = true;
@@ -1714,7 +1735,7 @@
         target.loader.coreTypes,
         new ThisExpression(),
         invocationName,
-        new Arguments.forwarded(procedure.function, library.library),
+        new Arguments.forwarded(procedure.function, libraryBuilder.library),
         procedure.fileOffset,
         /*isSuper=*/ false);
     Expression result = new InstanceInvocation(InstanceAccessKind.Instance,
@@ -1726,7 +1747,7 @@
       result = new AsExpression(result, procedure.function.returnType)
         ..isTypeError = true
         ..isForDynamic = true
-        ..isForNonNullableByDefault = library.isNonNullableByDefault
+        ..isForNonNullableByDefault = libraryBuilder.isNonNullableByDefault
         ..fileOffset = procedure.fileOffset;
     }
     procedure.function.body = new ReturnStatement(result)
@@ -2035,10 +2056,10 @@
       bool isValid = types.isSubtypeOf(
           getterType,
           setterType,
-          library.isNonNullableByDefault
+          libraryBuilder.isNonNullableByDefault
               ? SubtypeCheckMode.withNullabilities
               : SubtypeCheckMode.ignoringNullabilities);
-      if (!isValid && !library.isNonNullableByDefault) {
+      if (!isValid && !libraryBuilder.isNonNullableByDefault) {
         // Allow assignability in legacy libraries.
         isValid = types.isSubtypeOf(
             setterType, getterType, SubtypeCheckMode.ignoringNullabilities);
@@ -2053,12 +2074,12 @@
         if (getterOrigin.enclosingClass == cls &&
             setterOrigin.enclosingClass == cls) {
           Template<Message Function(DartType, String, DartType, String, bool)>
-              template = library.isNonNullableByDefault
+              template = libraryBuilder.isNonNullableByDefault
                   ? templateInvalidGetterSetterType
                   : templateInvalidGetterSetterTypeLegacy;
-          library.addProblem(
+          libraryBuilder.addProblem(
               template.withArguments(getterType, getterMemberName, setterType,
-                  setterMemberName, library.isNonNullableByDefault),
+                  setterMemberName, libraryBuilder.isNonNullableByDefault),
               getterOrigin.fileOffset,
               getterOrigin.name.text.length,
               getterOrigin.fileUri,
@@ -2070,17 +2091,17 @@
               ]);
         } else if (getterOrigin.enclosingClass == cls) {
           Template<Message Function(DartType, String, DartType, String, bool)>
-              template = library.isNonNullableByDefault
+              template = libraryBuilder.isNonNullableByDefault
                   ? templateInvalidGetterSetterTypeSetterInheritedGetter
                   : templateInvalidGetterSetterTypeSetterInheritedGetterLegacy;
           if (getterOrigin is Field) {
-            template = library.isNonNullableByDefault
+            template = libraryBuilder.isNonNullableByDefault
                 ? templateInvalidGetterSetterTypeSetterInheritedField
                 : templateInvalidGetterSetterTypeSetterInheritedFieldLegacy;
           }
-          library.addProblem(
+          libraryBuilder.addProblem(
               template.withArguments(getterType, getterMemberName, setterType,
-                  setterMemberName, library.isNonNullableByDefault),
+                  setterMemberName, libraryBuilder.isNonNullableByDefault),
               getterOrigin.fileOffset,
               getterOrigin.name.text.length,
               getterOrigin.fileUri,
@@ -2092,20 +2113,20 @@
               ]);
         } else if (setterOrigin.enclosingClass == cls) {
           Template<Message Function(DartType, String, DartType, String, bool)>
-              template = library.isNonNullableByDefault
+              template = libraryBuilder.isNonNullableByDefault
                   ? templateInvalidGetterSetterTypeGetterInherited
                   : templateInvalidGetterSetterTypeGetterInheritedLegacy;
           Template<Message Function(String)> context =
               templateInvalidGetterSetterTypeGetterContext;
           if (getterOrigin is Field) {
-            template = library.isNonNullableByDefault
+            template = libraryBuilder.isNonNullableByDefault
                 ? templateInvalidGetterSetterTypeFieldInherited
                 : templateInvalidGetterSetterTypeFieldInheritedLegacy;
             context = templateInvalidGetterSetterTypeFieldContext;
           }
-          library.addProblem(
+          libraryBuilder.addProblem(
               template.withArguments(getterType, getterMemberName, setterType,
-                  setterMemberName, library.isNonNullableByDefault),
+                  setterMemberName, libraryBuilder.isNonNullableByDefault),
               setterOrigin.fileOffset,
               setterOrigin.name.text.length,
               setterOrigin.fileUri,
@@ -2117,20 +2138,20 @@
               ]);
         } else {
           Template<Message Function(DartType, String, DartType, String, bool)>
-              template = library.isNonNullableByDefault
+              template = libraryBuilder.isNonNullableByDefault
                   ? templateInvalidGetterSetterTypeBothInheritedGetter
                   : templateInvalidGetterSetterTypeBothInheritedGetterLegacy;
           Template<Message Function(String)> context =
               templateInvalidGetterSetterTypeGetterContext;
           if (getterOrigin is Field) {
-            template = library.isNonNullableByDefault
+            template = libraryBuilder.isNonNullableByDefault
                 ? templateInvalidGetterSetterTypeBothInheritedField
                 : templateInvalidGetterSetterTypeBothInheritedFieldLegacy;
             context = templateInvalidGetterSetterTypeFieldContext;
           }
-          library.addProblem(
+          libraryBuilder.addProblem(
               template.withArguments(getterType, getterMemberName, setterType,
-                  setterMemberName, library.isNonNullableByDefault),
+                  setterMemberName, libraryBuilder.isNonNullableByDefault),
               charOffset,
               noLength,
               fileUri,
@@ -2233,7 +2254,7 @@
                 interfaceSubstitution.substituteType(interfaceBound);
           }
           DartType computedBound = substitution.substituteType(interfaceBound);
-          if (!library.isNonNullableByDefault) {
+          if (!libraryBuilder.isNonNullableByDefault) {
             computedBound = legacyErasure(computedBound);
           }
           if (declaredNeedsLegacyErasure) {
@@ -2254,7 +2275,7 @@
                     computedBound,
                     "${interfaceMemberOrigin.enclosingClass!.name}."
                         "${interfaceMemberOrigin.name.text}",
-                    library.isNonNullableByDefault),
+                    libraryBuilder.isNonNullableByDefault),
                 declaredMember.fileOffset,
                 noLength,
                 context: [
@@ -2340,7 +2361,7 @@
           (!isCovariantByDeclaration ||
               !types.isSubtypeOf(
                   supertype, subtype, SubtypeCheckMode.ignoringNullabilities));
-      if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
+      if (isErrorInNnbdOptedOutMode || libraryBuilder.isNonNullableByDefault) {
         String declaredMemberName = '${declaredMember.enclosingClass!.name}'
             '.${declaredMember.name.text}';
         String interfaceMemberName =
@@ -2356,14 +2377,14 @@
                 declaredType,
                 interfaceType,
                 interfaceMemberName,
-                library.isNonNullableByDefault);
+                libraryBuilder.isNonNullableByDefault);
           } else {
             message = templateOverrideTypeMismatchReturnType.withArguments(
                 declaredMemberName,
                 declaredType,
                 interfaceType,
                 interfaceMemberName,
-                library.isNonNullableByDefault);
+                libraryBuilder.isNonNullableByDefault);
           }
           fileOffset = declaredMember.fileOffset;
         } else {
@@ -2373,7 +2394,7 @@
               declaredType,
               interfaceType,
               interfaceMemberName,
-              library.isNonNullableByDefault);
+              libraryBuilder.isNonNullableByDefault);
           fileOffset = declaredParameter.fileOffset;
         }
         reportInvalidOverride(
@@ -2731,7 +2752,8 @@
 
     if (declaredMember.enclosingClass == cls) {
       // Ordinary override
-      library.addProblem(message, fileOffset, length, declaredMember.fileUri,
+      libraryBuilder.addProblem(
+          message, fileOffset, length, declaredMember.fileUri,
           context: context);
     } else {
       context = [
@@ -2740,7 +2762,7 @@
       ];
       if (isInterfaceCheck) {
         // Interface check
-        library.addProblem(
+        libraryBuilder.addProblem(
             templateInterfaceCheck.withArguments(
                 declaredMember.name.text, cls.name),
             cls.fileOffset,
@@ -2753,7 +2775,7 @@
           String baseName = cls.superclass!.demangledName;
           String mixinName = cls.mixedInClass!.name;
           int classNameLength = cls.nameAsMixinApplicationSubclass.length;
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateImplicitMixinOverride.withArguments(
                   mixinName, baseName, declaredMember.name.text),
               cls.fileOffset,
@@ -2762,7 +2784,7 @@
               context: context);
         } else {
           // Named mixin application class
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateNamedMixinOverride.withArguments(
                   cls.name, declaredMember.name.text),
               cls.fileOffset,
@@ -2793,7 +2815,7 @@
 /// 'dart:_interceptors' that implements both `int` and `double`, and `JsArray`
 /// in `dart:js` that implement both `ListMixin` and `JsObject`.
 int? getOverlookedOverrideProblemChoice(ClassBuilder classBuilder) {
-  String uri = '${classBuilder.library.importUri}';
+  String uri = '${classBuilder.libraryBuilder.importUri}';
   if (uri == 'dart:js' && classBuilder.fileUri.pathSegments.last == 'js.dart') {
     return 0;
   } else if (uri == 'dart:_interceptors' &&
@@ -2809,14 +2831,14 @@
       : super(field, parent);
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     // Do nothing.
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index eee8284..52e657e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -12,7 +12,6 @@
 import '../builder/class_builder.dart';
 import '../builder/constructor_builder.dart';
 import '../builder/formal_parameter_builder.dart';
-import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../builder/metadata_builder.dart';
 import '../builder/named_type_builder.dart';
@@ -27,7 +26,8 @@
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/expression_generator_helper.dart';
 import '../kernel/hierarchy/class_member.dart' show ClassMember;
-import '../kernel/kernel_helper.dart' show SynthesizedFunctionNode;
+import '../kernel/kernel_helper.dart'
+    show DelayedDefaultValueCloner, TypeDependency;
 import '../kernel/utils.dart'
     show isRedirectingGenerativeConstructorImplementation;
 import '../messages.dart'
@@ -52,7 +52,13 @@
 import 'source_function_builder.dart';
 
 abstract class SourceConstructorBuilder
-    implements ConstructorBuilder, SourceMemberBuilder {}
+    implements ConstructorBuilder, SourceMemberBuilder {
+  /// Infers the types of any untyped initializing formals.
+  void inferFormalTypes(TypeEnvironment typeEnvironment);
+
+  void addSuperParameterDefaultValueCloners(
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners);
+}
 
 class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl
     implements SourceConstructorBuilder {
@@ -81,8 +87,8 @@
 
   final bool _hasSuperInitializingFormals;
 
-  final List<SynthesizedFunctionNode> _superParameterDefaultValueCloners =
-      <SynthesizedFunctionNode>[];
+  final List<DelayedDefaultValueCloner> _superParameterDefaultValueCloners =
+      <DelayedDefaultValueCloner>[];
 
   @override
   List<FormalParameterBuilder>? formals;
@@ -174,9 +180,8 @@
   }
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
-    Member member = build(library);
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+    Member member = build();
     f(member, BuiltMemberKind.Constructor);
     if (_constructorTearOff != null) {
       f(_constructorTearOff!, BuiltMemberKind.Method);
@@ -186,9 +191,9 @@
   bool _hasBeenBuilt = false;
 
   @override
-  Constructor build(SourceLibraryBuilder libraryBuilder) {
+  Constructor build() {
     if (!_hasBeenBuilt) {
-      buildFunction(libraryBuilder);
+      buildFunction();
       _constructor.function.fileOffset = charOpenParenOffset;
       _constructor.function.fileEndOffset = _constructor.fileEndOffset;
       _constructor.function.typeParameters = const <TypeParameter>[];
@@ -216,10 +221,6 @@
         }
       }
       if (needsInference) {
-        assert(
-            library == libraryBuilder,
-            "Unexpected library builder ${libraryBuilder} for"
-            " constructor $this in ${library}.");
         libraryBuilder.loader
             .registerConstructorToBeInferred(_constructor, this);
       }
@@ -227,7 +228,7 @@
     return _constructor;
   }
 
-  /// Infers the types of any untyped initializing formals.
+  @override
   void inferFormalTypes(TypeEnvironment typeEnvironment) {
     if (_hasFormalsInferred) return;
     if (formals != null) {
@@ -242,10 +243,12 @@
       if (_hasSuperInitializingFormals) {
         List<Initializer>? initializers;
         if (beginInitializers != null) {
-          BodyBuilder bodyBuilder = library.loader
-              .createBodyBuilderForOutlineExpression(
-                  library, classBuilder, this, classBuilder.scope, fileUri);
-          bodyBuilder.constantContext = ConstantContext.required;
+          BodyBuilder bodyBuilder = libraryBuilder.loader
+              .createBodyBuilderForOutlineExpression(libraryBuilder,
+                  classBuilder, this, classBuilder.scope, fileUri);
+          if (isConst) {
+            bodyBuilder.constantContext = ConstantContext.required;
+          }
           initializers = bodyBuilder.parseInitializers(beginInitializers!,
               doFinishConstructor: false);
         }
@@ -289,7 +292,7 @@
       superTarget = (initializers.last as SuperInitializer).target;
     } else {
       MemberBuilder? memberBuilder = superclassBuilder.constructorScope
-          .lookup("", charOffset, library.fileUri);
+          .lookup("", charOffset, libraryBuilder.fileUri);
       if (memberBuilder is ConstructorBuilder) {
         superTarget = memberBuilder.constructor;
       } else {
@@ -299,14 +302,14 @@
     }
 
     MemberBuilder? constructorBuilder =
-        superclassBuilder.findConstructorOrFactory(
-            superTarget.name.text, charOffset, library.fileUri, library);
+        superclassBuilder.findConstructorOrFactory(superTarget.name.text,
+            charOffset, libraryBuilder.fileUri, libraryBuilder);
     return constructorBuilder is ConstructorBuilder ? constructorBuilder : null;
   }
 
   void finalizeSuperInitializingFormals(
       TypeEnvironment typeEnvironment,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes,
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners,
       List<Initializer>? initializers) {
     if (formals == null) return;
     if (!_hasSuperInitializingFormals) return;
@@ -321,19 +324,22 @@
 
     ConstructorBuilder? superTargetBuilder =
         _computeSuperTargetBuilder(initializers);
+
+    if (superTargetBuilder is SourceConstructorBuilder) {
+      superTargetBuilder.inferFormalTypes(typeEnvironment);
+    }
+
     Constructor superTarget;
     List<FormalParameterBuilder>? superFormals;
+    FunctionNode? superConstructorFunction;
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
       superTarget = superTargetBuilder.constructor;
       superFormals = superTargetBuilder.formals!;
     } else if (superTargetBuilder is DillConstructorBuilder) {
       superTarget = superTargetBuilder.constructor;
+      superConstructorFunction = superTargetBuilder.function;
       if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
         superFormals = superTargetBuilder.formals;
-      } else {
-        // The error in this case should be reported elsewhere. Here we perform
-        // a simple recovery.
-        return performRecoveryForErroneousCase();
       }
     } else {
       // The error in this case should be reported elsewhere. Here we perform a
@@ -341,19 +347,57 @@
       return performRecoveryForErroneousCase();
     }
 
-    if (superFormals == null) {
-      // The error in this case should be reported elsewhere. Here we perform a
-      // simple recovery.
-      return performRecoveryForErroneousCase();
-    }
-
-    if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
-      superTargetBuilder.inferFormalTypes(typeEnvironment);
-    } else if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
-      MemberBuilder? superTargetOriginBuilder = superTargetBuilder.actualOrigin;
-      if (superTargetOriginBuilder is DeclaredSourceConstructorBuilder) {
-        superTargetOriginBuilder.inferFormalTypes(typeEnvironment);
+    List<DartType?> positionalSuperFormalType = [];
+    List<bool> positionalSuperFormalHasInitializer = [];
+    Map<String, DartType?> namedSuperFormalType = {};
+    Map<String, bool> namedSuperFormalHasInitializer = {};
+    // TODO(johnniwinther): Clean this up when [VariableDeclaration] has a
+    // `hasDeclaredInitializer` flag.
+    if (superFormals != null && superConstructorFunction != null) {
+      for (VariableDeclaration formal
+          in superConstructorFunction.positionalParameters) {
+        positionalSuperFormalType.add(formal.type);
       }
+      for (VariableDeclaration formal
+          in superConstructorFunction.namedParameters) {
+        namedSuperFormalType[formal.name!] = formal.type;
+      }
+      for (FormalParameterBuilder formal in superFormals) {
+        if (formal.isPositional) {
+          positionalSuperFormalHasInitializer
+              .add(formal.hasDeclaredInitializer);
+        } else {
+          namedSuperFormalHasInitializer[formal.name] =
+              formal.hasDeclaredInitializer;
+        }
+      }
+    } else if (superFormals != null) {
+      for (FormalParameterBuilder formal in superFormals) {
+        if (formal.isPositional) {
+          positionalSuperFormalType.add(formal.variable?.type);
+          positionalSuperFormalHasInitializer
+              .add(formal.hasDeclaredInitializer);
+        } else {
+          namedSuperFormalType[formal.name] = formal.variable?.type;
+          namedSuperFormalHasInitializer[formal.name] =
+              formal.hasDeclaredInitializer;
+        }
+      }
+    } else if (superConstructorFunction != null) {
+      for (VariableDeclaration formal
+          in superConstructorFunction.positionalParameters) {
+        positionalSuperFormalType.add(formal.type);
+        positionalSuperFormalHasInitializer.add(formal.initializer != null);
+      }
+      for (VariableDeclaration formal
+          in superConstructorFunction.namedParameters) {
+        namedSuperFormalType[formal.name!] = formal.type;
+        namedSuperFormalHasInitializer[formal.name!] =
+            formal.initializer != null;
+      }
+    } else {
+      // The error is reported elsewhere.
+      return performRecoveryForErroneousCase();
     }
 
     int superInitializingFormalIndex = -1;
@@ -373,34 +417,32 @@
         superInitializingFormalIndex++;
         bool hasImmediatelyDeclaredInitializer = formal.hasDeclaredInitializer;
 
-        FormalParameterBuilder? correspondingSuperFormal;
-
+        DartType? correspondingSuperFormalType;
         if (formal.isPositional) {
-          if (superInitializingFormalIndex < superFormals.length) {
-            correspondingSuperFormal =
-                superFormals[superInitializingFormalIndex];
+          assert(positionalSuperFormalHasInitializer.length ==
+              positionalSuperFormalType.length);
+          if (superInitializingFormalIndex <
+              positionalSuperFormalHasInitializer.length) {
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                correspondingSuperFormal.hasDeclaredInitializer;
-            if (!hasImmediatelyDeclaredInitializer && !formal.isRequired) {
+                positionalSuperFormalHasInitializer[
+                    superInitializingFormalIndex];
+            correspondingSuperFormalType =
+                positionalSuperFormalType[superInitializingFormalIndex];
+            if (!hasImmediatelyDeclaredInitializer &&
+                !formal.isRequiredPositional) {
               (positionalSuperParameters ??= <int?>[]).add(formalIndex);
             } else {
               (positionalSuperParameters ??= <int?>[]).add(null);
             }
           } else {
-            // TODO(cstefantsova): Report an error.
+            // The error is reported elsewhere.
           }
         } else {
-          for (FormalParameterBuilder superFormal in superFormals) {
-            if (superFormal.isNamed && superFormal.name == formal.name) {
-              correspondingSuperFormal = superFormal;
-              break;
-            }
-          }
-
-          if (correspondingSuperFormal != null) {
+          if (namedSuperFormalHasInitializer[formal.name] != null) {
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                correspondingSuperFormal.hasDeclaredInitializer;
-            if (!hasImmediatelyDeclaredInitializer && !formal.isNamedRequired) {
+                namedSuperFormalHasInitializer[formal.name]!;
+            correspondingSuperFormalType = namedSuperFormalType[formal.name];
+            if (!hasImmediatelyDeclaredInitializer && !formal.isRequiredNamed) {
               (namedSuperParameters ??= <String>[]).add(formal.name);
             }
           } else {
@@ -409,7 +451,7 @@
         }
 
         if (formal.type == null) {
-          DartType? type = correspondingSuperFormal?.variable?.type;
+          DartType? type = correspondingSuperFormalType;
           if (substitution.isNotEmpty && type != null) {
             type = substitute(type, substitution);
           }
@@ -419,12 +461,12 @@
     }
 
     if (positionalSuperParameters != null || namedSuperParameters != null) {
-      synthesizedFunctionNodes.add(new SynthesizedFunctionNode(
+      delayedDefaultValueCloners.add(new DelayedDefaultValueCloner(
           substitution, superTarget.function, constructor.function,
           positionalSuperParameters: positionalSuperParameters ?? const <int>[],
           namedSuperParameters: namedSuperParameters ?? const <String>[],
           isOutlineNode: true,
-          libraryBuilder: library));
+          libraryBuilder: libraryBuilder));
     }
   }
 
@@ -432,17 +474,16 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     if (_hasBuiltOutlines) return;
     if (isConst && isPatch) {
-      origin.buildOutlineExpressions(library, classHierarchy,
-          delayedActionPerformers, synthesizedFunctionNodes);
+      origin.buildOutlineExpressions(
+          classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     }
-    super.buildOutlineExpressions(library, classHierarchy,
-        delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(
+        classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
 
     // For modular compilation purposes we need to include initializers
     // for const constructors into the outline. We also need to parse
@@ -458,54 +499,57 @@
       } else {
         formalParameterScope = null;
       }
-      BodyBuilder bodyBuilder = library.loader
+      BodyBuilder bodyBuilder = libraryBuilder.loader
           .createBodyBuilderForOutlineExpression(
-              library, classBuilder, this, classBuilder.scope, fileUri,
+              libraryBuilder, classBuilder, this, classBuilder.scope, fileUri,
               formalParameterScope: formalParameterScope);
-      bodyBuilder.constantContext = ConstantContext.required;
+      if (isConst) {
+        bodyBuilder.constantContext = ConstantContext.required;
+      }
       bodyBuilder.parseInitializers(beginInitializers!,
           doFinishConstructor: isConst);
       bodyBuilder.performBacklogComputations(delayedActionPerformers);
     }
     beginInitializers = null;
-    addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+    addSuperParameterDefaultValueCloners(delayedDefaultValueCloners);
     if (isConst && isPatch) {
       _finishPatch();
     }
     _hasBuiltOutlines = true;
   }
 
+  @override
   void addSuperParameterDefaultValueCloners(
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     ConstructorBuilder? superTargetBuilder =
         _computeSuperTargetBuilder(constructor.initializers);
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
       superTargetBuilder
-          .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+          .addSuperParameterDefaultValueCloners(delayedDefaultValueCloners);
     } else if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
       superTargetBuilder
-          .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+          .addSuperParameterDefaultValueCloners(delayedDefaultValueCloners);
     }
 
-    synthesizedFunctionNodes.addAll(_superParameterDefaultValueCloners);
+    delayedDefaultValueCloners.addAll(_superParameterDefaultValueCloners);
     _superParameterDefaultValueCloners.clear();
   }
 
   @override
-  void buildFunction(SourceLibraryBuilder library) {
+  void buildFunction() {
     // According to the specification §9.3 the return type of a constructor
     // function is its enclosing class.
-    super.buildFunction(library);
+    super.buildFunction();
     Class enclosingClass = classBuilder.cls;
     List<DartType> typeParameterTypes = <DartType>[];
     for (int i = 0; i < enclosingClass.typeParameters.length; i++) {
       TypeParameter typeParameter = enclosingClass.typeParameters[i];
       typeParameterTypes.add(
           new TypeParameterType.withDefaultNullabilityForLibrary(
-              typeParameter, library.library));
+              typeParameter, libraryBuilder.library));
     }
     function.returnType = new InterfaceType(
-        enclosingClass, library.nonNullable, typeParameterTypes);
+        enclosingClass, libraryBuilder.nonNullable, typeParameterTypes);
   }
 
   @override
@@ -764,78 +808,89 @@
 }
 
 class SyntheticSourceConstructorBuilder extends DillConstructorBuilder
-    with SourceMemberBuilderMixin {
-  // TODO(johnniwinther,cstefantsova): Rename [_origin] to avoid the confusion
-  // with patches.
-  // TODO(johnniwinther): Change the type of [_origin] to SourceMemberBuilder
-  // when it's the supertype for both old SourceMemberBuilder and
-  // SyntheticConstructorBuilder.
-  MemberBuilder? _origin;
-  SynthesizedFunctionNode? _synthesizedFunctionNode;
+    with SourceMemberBuilderMixin
+    implements SourceConstructorBuilder {
+  /// The constructor from which this synthesized constructor is defined.
+  ///
+  /// This defines the parameter structure and the default values of this
+  /// constructor.
+  ///
+  /// The [_immediatelyDefiningConstructor] might itself a synthesized
+  /// constructor and [_effectivelyDefiningConstructor] can be used to find
+  /// the constructor that effectively defines this constructor.
+  MemberBuilder? _immediatelyDefiningConstructor;
+  DelayedDefaultValueCloner? _delayedDefaultValueCloner;
+  TypeDependency? _typeDependency;
 
   SyntheticSourceConstructorBuilder(SourceClassBuilder parent,
       Constructor constructor, Procedure? constructorTearOff,
-      {MemberBuilder? origin, SynthesizedFunctionNode? synthesizedFunctionNode})
-      : _origin = origin,
-        _synthesizedFunctionNode = synthesizedFunctionNode,
+      {MemberBuilder? definingConstructor,
+      DelayedDefaultValueCloner? delayedDefaultValueCloner,
+      TypeDependency? typeDependency})
+      : _immediatelyDefiningConstructor = definingConstructor,
+        _delayedDefaultValueCloner = delayedDefaultValueCloner,
+        _typeDependency = typeDependency,
         super(constructor, constructorTearOff, parent);
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
-  // TODO(johnniwinther,cstefantsova): Rename [actualOrigin] to avoid the
-  //  confusion with patches.
-  MemberBuilder? get actualOrigin {
-    MemberBuilder? origin = _origin;
+  @override
+  void inferFormalTypes(TypeEnvironment typeEnvironment) {
+    if (_immediatelyDefiningConstructor is SourceConstructorBuilder) {
+      (_immediatelyDefiningConstructor as SourceConstructorBuilder)
+          .inferFormalTypes(typeEnvironment);
+    }
+    if (_typeDependency != null) {
+      _typeDependency!.copyInferred();
+      _typeDependency = null;
+    }
+  }
+
+  MemberBuilder? get _effectivelyDefiningConstructor {
+    MemberBuilder? origin = _immediatelyDefiningConstructor;
     while (origin is SyntheticSourceConstructorBuilder) {
-      origin = origin._origin;
+      origin = origin._immediatelyDefiningConstructor;
     }
     return origin;
   }
 
   List<FormalParameterBuilder>? get formals {
-    MemberBuilder? origin = actualOrigin;
+    MemberBuilder? origin = _effectivelyDefiningConstructor;
     return origin is DeclaredSourceConstructorBuilder ? origin.formals : null;
   }
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder libraryBuilder,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    if (_origin != null) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
+    if (_immediatelyDefiningConstructor != null) {
       // Ensure that default value expressions have been created for [_origin].
-      LibraryBuilder originLibraryBuilder = _origin!.library;
-      if (originLibraryBuilder is SourceLibraryBuilder) {
-        // If [_origin] is from a source library, we need to build the default
-        // values and initializers first.
-        MemberBuilder origin = _origin!;
-        if (origin is DeclaredSourceConstructorBuilder) {
-          origin.buildOutlineExpressions(originLibraryBuilder, classHierarchy,
-              delayedActionPerformers, synthesizedFunctionNodes);
-        } else if (origin is SyntheticSourceConstructorBuilder) {
-          origin.buildOutlineExpressions(originLibraryBuilder, classHierarchy,
-              delayedActionPerformers, synthesizedFunctionNodes);
-        }
+      // If [_origin] is from a source library, we need to build the default
+      // values and initializers first.
+      MemberBuilder origin = _immediatelyDefiningConstructor!;
+      if (origin is SourceConstructorBuilder) {
+        origin.buildOutlineExpressions(classHierarchy, delayedActionPerformers,
+            delayedDefaultValueCloners);
       }
-      addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
-      _origin = null;
+      addSuperParameterDefaultValueCloners(delayedDefaultValueCloners);
+      _immediatelyDefiningConstructor = null;
     }
   }
 
+  @override
   void addSuperParameterDefaultValueCloners(
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    MemberBuilder? origin = _origin;
-    if (origin is DeclaredSourceConstructorBuilder) {
-      origin.addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
-    } else if (origin is SyntheticSourceConstructorBuilder) {
-      origin.addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
+    MemberBuilder? origin = _immediatelyDefiningConstructor;
+    if (origin is SourceConstructorBuilder) {
+      origin.addSuperParameterDefaultValueCloners(delayedDefaultValueCloners);
     }
-    if (_synthesizedFunctionNode != null) {
-      synthesizedFunctionNodes
-          .add(_synthesizedFunctionNode!..isOutlineNode = true);
-      _synthesizedFunctionNode = null;
+    if (_delayedDefaultValueCloner != null) {
+      delayedDefaultValueCloners
+          .add(_delayedDefaultValueCloner!..isOutlineNode = true);
+      _delayedDefaultValueCloner = null;
     }
   }
 
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 7248daf..10a8838 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
@@ -4,16 +4,17 @@
 
 library fasta.enum_builder;
 
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/constructor_reference_builder.dart';
-import '../builder/field_builder.dart';
 import '../builder/formal_parameter_builder.dart';
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
@@ -29,7 +30,6 @@
         LocatedMessage,
         Severity,
         messageEnumContainsValuesDeclaration,
-        messageEnumEntryWithTypeArgumentsWithoutArguments,
         messageEnumNonConstConstructor,
         messageNoUnnamedConstructorInObject,
         noLength,
@@ -37,6 +37,7 @@
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
         templateDuplicatedDeclarationSyntheticCause,
+        templateEnumContainsRestrictedInstanceDeclaration,
         templateEnumConstantSameNameAsEnclosing;
 
 import '../kernel/body_builder.dart';
@@ -44,6 +45,7 @@
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/expression_generator_helper.dart';
 import '../kernel/kernel_helper.dart';
+import '../kernel/implicit_field_type.dart';
 import '../kernel/internal_ast.dart';
 
 import '../modifier.dart' show constMask, hasInitializerMask, staticMask;
@@ -71,8 +73,17 @@
 
   final NamedTypeBuilder listType;
 
+  final NamedTypeBuilder selfType;
+
   DeclaredSourceConstructorBuilder? synthesizedDefaultConstructorBuilder;
 
+  final List<SourceFieldBuilder> elementBuilders;
+
+  final Set<SourceFieldBuilder> _builtElements =
+      new Set<SourceFieldBuilder>.identity();
+
+  final List<DelayedActionPerformer> _delayedActionPerformers = [];
+
   SourceEnumBuilder.internal(
       List<MetadataBuilder>? metadata,
       String name,
@@ -82,11 +93,13 @@
       Scope scope,
       ConstructorScope constructors,
       Class cls,
+      this.elementBuilders,
       this.enumConstantInfos,
       this.intType,
       this.listType,
       this.objectType,
       this.stringType,
+      this.selfType,
       SourceLibraryBuilder parent,
       List<ConstructorReferenceBuilder> constructorReferences,
       int startCharOffset,
@@ -118,7 +131,7 @@
       TypeBuilder? supertypeBuilder,
       List<TypeBuilder>? interfaceBuilders,
       List<EnumConstantInfo?>? enumConstantInfos,
-      SourceLibraryBuilder parent,
+      SourceLibraryBuilder libraryBuilder,
       List<ConstructorReferenceBuilder> constructorReferences,
       int startCharOffset,
       int charOffset,
@@ -128,16 +141,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
@@ -150,25 +159,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,
@@ -179,19 +176,13 @@
     Map<String, MemberBuilder> members = <String, MemberBuilder>{};
     Map<String, MemberBuilder> setters = <String, MemberBuilder>{};
     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 {
@@ -212,7 +203,7 @@
         extensionName: null,
         libraryReference: referencesFromIndexed != null
             ? referencesFromIndexed.library.reference
-            : parent.library.reference);
+            : libraryBuilder.library.reference);
 
     NameScheme procedureNameScheme = new NameScheme(
         isInstanceMember: true,
@@ -221,7 +212,7 @@
         extensionName: null,
         libraryReference: referencesFromIndexed != null
             ? referencesFromIndexed.library.reference
-            : parent.library.reference);
+            : libraryBuilder.library.reference);
 
     Reference? constructorReference;
     Reference? tearOffReference;
@@ -252,26 +243,49 @@
       while (customValuesDeclaration?.next != null) {
         customValuesDeclaration = customValuesDeclaration?.next;
       }
-      parent.addProblem(
+      libraryBuilder.addProblem(
           messageEnumContainsValuesDeclaration,
           customValuesDeclaration!.charOffset,
           customValuesDeclaration.fullNameForErrors.length,
           fileUri);
     }
 
+    for (String restrictedInstanceMemberName in const [
+      "index",
+      "hashCode",
+      "=="
+    ]) {
+      Builder? customIndexDeclaration =
+          scope.lookupLocalMember(restrictedInstanceMemberName, setter: false);
+      if (customIndexDeclaration is MemberBuilder &&
+          !customIndexDeclaration.isAbstract) {
+        // Retrieve the earliest declaration for error reporting.
+        while (customIndexDeclaration?.next != null) {
+          customIndexDeclaration = customIndexDeclaration?.next;
+        }
+        libraryBuilder.addProblem(
+            templateEnumContainsRestrictedInstanceDeclaration
+                .withArguments(restrictedInstanceMemberName),
+            customIndexDeclaration!.charOffset,
+            customIndexDeclaration.fullNameForErrors.length,
+            fileUri);
+      }
+    }
+
     SourceFieldBuilder valuesBuilder = new SourceFieldBuilder(
         /* metadata = */ null,
         listType,
         "values",
         constMask | staticMask | hasInitializerMask,
         /* isTopLevel = */ false,
-        parent,
+        libraryBuilder,
         charOffset,
         charOffset,
         staticFieldNameScheme,
         fieldReference: valuesFieldReference,
         fieldGetterReference: valuesGetterReference,
-        fieldSetterReference: valuesSetterReference);
+        fieldSetterReference: valuesSetterReference,
+        isSynthesized: true);
     members["values"] = valuesBuilder;
 
     DeclaredSourceConstructorBuilder? synthesizedDefaultConstructorBuilder;
@@ -298,11 +312,23 @@
               /* typeParameters = */ null,
               <FormalParameterBuilder>[
                 new FormalParameterBuilder(
-                    null, 0, intType, "index", parent, charOffset),
+                    null,
+                    FormalParameterKind.requiredPositional,
+                    0,
+                    intType,
+                    "index",
+                    libraryBuilder,
+                    charOffset),
                 new FormalParameterBuilder(
-                    null, 0, stringType, "name", parent, charOffset)
+                    null,
+                    FormalParameterKind.requiredPositional,
+                    0,
+                    stringType,
+                    "name",
+                    libraryBuilder,
+                    charOffset)
               ],
-              parent,
+              libraryBuilder,
               charOffset,
               charOffset,
               charOffset,
@@ -320,11 +346,23 @@
           member.formals!.insert(
               0,
               new FormalParameterBuilder(
-                  null, 0, stringType, "name", parent, charOffset));
+                  /* metadata = */ null,
+                  FormalParameterKind.requiredPositional,
+                  /* modifiers = */ 0,
+                  stringType,
+                  "name",
+                  libraryBuilder,
+                  charOffset));
           member.formals!.insert(
               0,
               new FormalParameterBuilder(
-                  null, 0, intType, "index", parent, charOffset));
+                  /* metadata = */ null,
+                  FormalParameterKind.requiredPositional,
+                  /* modifiers = */ 0,
+                  intType,
+                  "index",
+                  libraryBuilder,
+                  charOffset));
         }
       });
     }
@@ -338,7 +376,7 @@
           /* typeVariables = */ null,
           /* formals = */ null,
           ProcedureKind.Method,
-          parent,
+          libraryBuilder,
           charOffset,
           charOffset,
           charOffset,
@@ -390,23 +428,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;
@@ -419,20 +461,24 @@
           setterReference =
               referencesFromIndexed.lookupSetterReference(nameName);
         }
-        FieldBuilder fieldBuilder = new SourceFieldBuilder(
+        SourceFieldBuilder fieldBuilder = new SourceFieldBuilder(
             metadata,
-            selfType,
+            null,
             name,
             constMask | staticMask | hasInitializerMask,
             /* isTopLevel = */ false,
-            parent,
+            libraryBuilder,
             enumConstantInfo.charOffset,
             enumConstantInfo.charOffset,
             staticFieldNameScheme,
             fieldReference: fieldReference,
             fieldGetterReference: getterReference,
             fieldSetterReference: setterReference);
+        fieldBuilder.fieldType = new ImplicitFieldType(
+            fieldBuilder, enumConstantInfo.argumentsBeginToken);
+        libraryBuilder.registerImplicitlyTypedField(fieldBuilder);
         members[name] = fieldBuilder..next = existing;
+        elementBuilders.add(fieldBuilder);
       }
     }
 
@@ -450,12 +496,14 @@
             isModifiable: false),
         constructorScope..local.addAll(constructors),
         cls,
+        elementBuilders,
         enumConstantInfos,
         intType,
         listType,
         objectType,
         stringType,
-        parent,
+        selfType,
+        libraryBuilder,
         constructorReferences,
         startCharOffsetComputed,
         charOffset,
@@ -473,12 +521,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);
         }
       }
@@ -511,7 +559,7 @@
   }
 
   @override
-  Class build(SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
+  Class build(LibraryBuilder coreLibrary) {
     cls.isEnum = true;
     intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
     stringType.resolveIn(
@@ -530,7 +578,7 @@
           Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
           if (declaration.isField) {
             SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
-            fieldBuilder.build(libraryBuilder);
+            fieldBuilder.build();
             values.add(new StaticGet(fieldBuilder.field));
           }
         }
@@ -538,7 +586,7 @@
     }
     SourceFieldBuilder valuesBuilder =
         firstMemberNamed("values") as SourceFieldBuilder;
-    valuesBuilder.build(libraryBuilder);
+    valuesBuilder.build();
 
     // The super initializer for the synthesized default constructor is
     // inserted here if the enum's supertype is _Enum to preserve the legacy
@@ -548,8 +596,7 @@
     // building.
     if (identical(this.supertypeBuilder, enumType)) {
       if (synthesizedDefaultConstructorBuilder != null) {
-        Constructor constructor =
-            synthesizedDefaultConstructorBuilder!.build(libraryBuilder);
+        Constructor constructor = synthesizedDefaultConstructorBuilder!.build();
         ClassBuilder objectClass = objectType.declaration as ClassBuilder;
         ClassBuilder enumClass = enumType.declaration as ClassBuilder;
         MemberBuilder? superConstructor = enumClass.findConstructorOrFactory(
@@ -561,7 +608,7 @@
           // situation that can happen unless you start modifying the SDK
           // sources. (We should add a correct message. We no longer depend on
           // Object here.)
-          library.addProblem(
+          libraryBuilder.addProblem(
               messageNoUnnamedConstructorInObject,
               objectClass.charOffset,
               objectClass.name.length,
@@ -577,15 +624,150 @@
       }
     }
 
-    return super.build(libraryBuilder, coreLibrary);
+    return super.build(coreLibrary);
+  }
+
+  DartType buildElement(SourceFieldBuilder fieldBuilder, CoreTypes coreTypes) {
+    DartType selfType = this.selfType.build(libraryBuilder);
+    Builder? builder = firstMemberNamed(fieldBuilder.name);
+    if (builder == null || !builder.isField) return selfType;
+    fieldBuilder = builder as SourceFieldBuilder;
+    if (!_builtElements.add(fieldBuilder)) return fieldBuilder.fieldType;
+
+    if (enumConstantInfos == null) return selfType;
+
+    String constant = fieldBuilder.name;
+
+    EnumConstantInfo? enumConstantInfo;
+    int elementIndex = 0;
+    for (EnumConstantInfo? info in enumConstantInfos!) {
+      if (info?.name == constant) {
+        enumConstantInfo = info;
+        break;
+      }
+      // Skip the duplicated entries in numbering.
+      if (info?.name != null) {
+        elementIndex++;
+      }
+    }
+    if (enumConstantInfo == null) return selfType;
+
+    DartType inferredFieldType = selfType;
+
+    String constructorName =
+        enumConstantInfo.constructorReferenceBuilder?.suffix ?? "";
+    String fullConstructorNameForErrors =
+        enumConstantInfo.constructorReferenceBuilder?.fullNameForErrors ?? name;
+    int fileOffset = enumConstantInfo.constructorReferenceBuilder?.charOffset ??
+        enumConstantInfo.charOffset;
+    MemberBuilder? constructorBuilder =
+        constructorScope.lookupLocalMember(constructorName);
+
+    ArgumentsImpl arguments;
+    List<Expression> enumSyntheticArguments = <Expression>[
+      new IntLiteral(elementIndex),
+      new StringLiteral(constant),
+    ];
+    List<DartType>? typeArguments;
+    List<TypeBuilder>? typeArgumentBuilders =
+        enumConstantInfo.constructorReferenceBuilder?.typeArguments;
+    if (typeArgumentBuilders != null) {
+      typeArguments = <DartType>[];
+      for (TypeBuilder typeBuilder in typeArgumentBuilders) {
+        typeArguments.add(typeBuilder.build(libraryBuilder));
+      }
+    }
+    if (libraryBuilder.libraryFeatures.enhancedEnums.isEnabled) {
+      // We need to create a BodyBuilder to solve the following: 1) if
+      // the arguments token is provided, we'll use the BodyBuilder to
+      // parse them and perform inference, 2) if the type arguments
+      // aren't provided, but required, we'll use it to infer them, and
+      // 3) in case of erroneous code the constructor invocation should
+      // be built via a body builder to detect potential errors.
+      BodyBuilder bodyBuilder = libraryBuilder.loader
+          .createBodyBuilderForOutlineExpression(
+              libraryBuilder, this, this, scope, fileUri);
+      bodyBuilder.constantContext = ConstantContext.inferred;
+
+      if (enumConstantInfo.argumentsBeginToken != null) {
+        arguments =
+            bodyBuilder.parseArguments(enumConstantInfo.argumentsBeginToken!);
+        bodyBuilder.performBacklogComputations(_delayedActionPerformers);
+
+        arguments.positional.insertAll(0, enumSyntheticArguments);
+        arguments.argumentsOriginalOrder?.insertAll(0, enumSyntheticArguments);
+      } else {
+        arguments = new ArgumentsImpl(enumSyntheticArguments);
+      }
+      if (typeArguments != null) {
+        ArgumentsImpl.setNonInferrableArgumentTypes(arguments, typeArguments);
+      } else if (cls.typeParameters.isNotEmpty) {
+        arguments.types.addAll(new List<DartType>.filled(
+            cls.typeParameters.length, const UnknownType()));
+      }
+      setParents(enumSyntheticArguments, arguments);
+      if (constructorBuilder == null ||
+          constructorBuilder is! SourceConstructorBuilder) {
+        if (!fieldBuilder.hasBodyBeenBuilt) {
+          fieldBuilder.buildBody(
+              coreTypes,
+              bodyBuilder.buildUnresolvedError(new NullLiteral(),
+                  fullConstructorNameForErrors, arguments, fileOffset,
+                  kind: UnresolvedKind.Constructor));
+        }
+      } else {
+        Expression initializer = bodyBuilder.buildStaticInvocation(
+            constructorBuilder.constructor, arguments,
+            constness: Constness.explicitConst,
+            charOffset: fieldBuilder.charOffset);
+        ExpressionInferenceResult inferenceResult = bodyBuilder.typeInferrer
+            .inferFieldInitializer(
+                bodyBuilder, const UnknownType(), initializer);
+        initializer = inferenceResult.expression;
+        inferredFieldType = inferenceResult.inferredType;
+        if (!fieldBuilder.hasBodyBeenBuilt) {
+          fieldBuilder.buildBody(coreTypes, initializer);
+        }
+      }
+    } else {
+      arguments = new ArgumentsImpl(enumSyntheticArguments);
+      setParents(enumSyntheticArguments, arguments);
+      if (constructorBuilder == null ||
+          constructorBuilder is! SourceConstructorBuilder ||
+          !constructorBuilder.isConst) {
+        // This can only occur if there enhanced enum features are used
+        // when they are not enabled.
+        assert(libraryBuilder.loader.hasSeenError);
+        String text = libraryBuilder.loader.target.context
+            .format(
+                templateConstructorNotFound
+                    .withArguments(fullConstructorNameForErrors)
+                    .withLocation(fieldBuilder.fileUri, fileOffset, noLength),
+                Severity.error)
+            .plain;
+        if (!fieldBuilder.hasBodyBeenBuilt) {
+          fieldBuilder.buildBody(
+              coreTypes, new InvalidExpression(text)..fileOffset = charOffset);
+        }
+      } else {
+        Expression initializer = new ConstructorInvocation(
+            constructorBuilder.constructor, arguments,
+            isConst: true)
+          ..fileOffset = fieldBuilder.charOffset;
+        if (!fieldBuilder.hasBodyBeenBuilt) {
+          fieldBuilder.buildBody(coreTypes, initializer);
+        }
+      }
+    }
+
+    return inferredFieldType;
   }
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder libraryBuilder,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     List<Expression> values = <Expression>[];
     if (enumConstantInfos != null) {
       for (EnumConstantInfo? enumConstantInfo in enumConstantInfos!) {
@@ -593,7 +775,7 @@
           Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
           if (declaration.isField) {
             SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
-            fieldBuilder.build(libraryBuilder);
+            fieldBuilder.build();
             values.add(new StaticGet(fieldBuilder.field));
           }
         }
@@ -604,131 +786,14 @@
     valuesBuilder.buildBody(
         classHierarchy.coreTypes,
         new ListLiteral(values,
-            typeArgument: rawType(library.nonNullable), isConst: true));
-    int index = 0;
-    if (enumConstantInfos != null) {
-      for (EnumConstantInfo? enumConstantInfo in enumConstantInfos!) {
-        if (enumConstantInfo != null) {
-          if (enumConstantInfo.argumentsBeginToken == null &&
-              enumConstantInfo.constructorReferenceBuilder?.typeArguments !=
-                  null) {
-            addProblem(messageEnumEntryWithTypeArgumentsWithoutArguments,
-                enumConstantInfo.charOffset, noLength);
-          }
+            typeArgument: rawType(libraryBuilder.nonNullable), isConst: true));
 
-          String constant = enumConstantInfo.name;
-          Builder declaration = firstMemberNamed(constant)!;
-          SourceFieldBuilder field;
-          if (declaration.isField) {
-            field = declaration as SourceFieldBuilder;
-          } else {
-            continue;
-          }
-
-          String constructorName =
-              enumConstantInfo.constructorReferenceBuilder?.suffix ?? "";
-          String fullConstructorNameForErrors =
-              enumConstantInfo.constructorReferenceBuilder?.fullNameForErrors ??
-                  name;
-          int fileOffset =
-              enumConstantInfo.constructorReferenceBuilder?.charOffset ??
-                  enumConstantInfo.charOffset;
-          MemberBuilder? constructorBuilder =
-              constructorScope.lookupLocalMember(constructorName);
-
-          ArgumentsImpl arguments;
-          List<Expression> enumSyntheticArguments = <Expression>[
-            new IntLiteral(index++),
-            new StringLiteral(constant),
-          ];
-          List<DartType>? typeArguments;
-          List<TypeBuilder>? typeArgumentBuilders =
-              enumConstantInfo.constructorReferenceBuilder?.typeArguments;
-          if (typeArgumentBuilders != null) {
-            typeArguments = <DartType>[];
-            for (TypeBuilder typeBuilder in typeArgumentBuilders) {
-              typeArguments.add(typeBuilder.build(library));
-            }
-          }
-          if (libraryBuilder.enableEnhancedEnumsInLibrary) {
-            // We need to create a BodyBuilder to solve the following: 1) if
-            // the arguments token is provided, we'll use the BodyBuilder to
-            // parse them and perform inference, 2) if the type arguments
-            // aren't provided, but required, we'll use it to infer them, and
-            // 3) in case of erroneous code the constructor invocation should
-            // be built via a body builder to detect potential errors.
-            BodyBuilder bodyBuilder = library.loader
-                .createBodyBuilderForOutlineExpression(
-                    library, this, this, scope, fileUri);
-            bodyBuilder.constantContext = ConstantContext.inferred;
-
-            if (enumConstantInfo.argumentsBeginToken != null) {
-              arguments = bodyBuilder
-                  .parseArguments(enumConstantInfo.argumentsBeginToken!);
-              bodyBuilder.performBacklogComputations(delayedActionPerformers);
-
-              arguments.positional.insertAll(0, enumSyntheticArguments);
-              arguments.argumentsOriginalOrder
-                  ?.insertAll(0, enumSyntheticArguments);
-            } else {
-              arguments = new ArgumentsImpl(enumSyntheticArguments);
-            }
-            if (typeArguments != null) {
-              ArgumentsImpl.setNonInferrableArgumentTypes(
-                  arguments, typeArguments);
-            } else if (cls.typeParameters.isNotEmpty) {
-              arguments.types.addAll(new List<DartType>.filled(
-                  cls.typeParameters.length, const UnknownType()));
-            }
-            setParents(enumSyntheticArguments, arguments);
-            if (constructorBuilder == null ||
-                constructorBuilder is! SourceConstructorBuilder) {
-              field.buildBody(
-                  classHierarchy.coreTypes,
-                  bodyBuilder.buildUnresolvedError(new NullLiteral(),
-                      fullConstructorNameForErrors, arguments, fileOffset,
-                      kind: UnresolvedKind.Constructor));
-            } else {
-              Expression initializer = bodyBuilder.buildStaticInvocation(
-                  constructorBuilder.constructor, arguments,
-                  constness: Constness.explicitConst,
-                  charOffset: field.charOffset);
-              ExpressionInferenceResult inferenceResult =
-                  bodyBuilder.typeInferrer.inferFieldInitializer(
-                      bodyBuilder, const UnknownType(), initializer);
-              initializer = inferenceResult.expression;
-              field.fieldType = inferenceResult.inferredType;
-              field.buildBody(classHierarchy.coreTypes, initializer);
-            }
-          } else {
-            arguments = new ArgumentsImpl(enumSyntheticArguments);
-            setParents(enumSyntheticArguments, arguments);
-            if (constructorBuilder == null ||
-                constructorBuilder is! SourceConstructorBuilder ||
-                !constructorBuilder.isConst) {
-              // This can only occur if there enhanced enum features are used
-              // when they are not enabled.
-              assert(libraryBuilder.loader.hasSeenError);
-              String text = libraryBuilder.loader.target.context
-                  .format(
-                      templateConstructorNotFound
-                          .withArguments(fullConstructorNameForErrors)
-                          .withLocation(field.fileUri, fileOffset, noLength),
-                      Severity.error)
-                  .plain;
-              field.buildBody(classHierarchy.coreTypes,
-                  new InvalidExpression(text)..fileOffset = charOffset);
-            } else {
-              Expression initializer = new ConstructorInvocation(
-                  constructorBuilder.constructor, arguments,
-                  isConst: true)
-                ..fileOffset = field.charOffset;
-              field.buildBody(classHierarchy.coreTypes, initializer);
-            }
-          }
-        }
-      }
+    for (SourceFieldBuilder elementBuilder in elementBuilders) {
+      elementBuilder.fieldType =
+          buildElement(elementBuilder, classHierarchy.coreTypes);
     }
+    delayedActionPerformers.addAll(_delayedActionPerformers);
+    _delayedActionPerformers.clear();
 
     SourceProcedureBuilder toStringBuilder =
         firstMemberNamed("toString") as SourceProcedureBuilder;
@@ -748,8 +813,8 @@
           resultType: nameField.getterType),
     ]));
 
-    super.buildOutlineExpressions(library, classHierarchy,
-        delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(
+        classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
   }
 }
 
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 6a8924b..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
@@ -72,7 +72,8 @@
         super(metadata, modifiers, name, parent, nameOffset, scope);
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
   @override
   SourceExtensionBuilder get origin => _origin ?? this;
@@ -88,14 +89,13 @@
   /// another library member. In this case, the extension member should not be
   /// added to the library to avoid name clashes with other members in the
   /// library.
-  Extension build(
-      SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary,
+  Extension build(LibraryBuilder coreLibrary,
       {required bool addMembersToLibrary}) {
     _extension.onType = onType.build(libraryBuilder);
     extensionTypeShowHideClauseBuilder.buildAndStoreTypes(
         _extension, libraryBuilder);
 
-    SourceLibraryBuilder.checkMemberConflicts(library, scope,
+    SourceLibraryBuilder.checkMemberConflicts(libraryBuilder, scope,
         checkForInstanceVsStaticConflict: true,
         checkForMethodVsSetterConflict: true);
 
@@ -123,8 +123,8 @@
           }
         } else if (declaration is SourceMemberBuilder) {
           SourceMemberBuilder memberBuilder = declaration;
-          memberBuilder.buildMembers(libraryBuilder,
-              (Member member, BuiltMemberKind memberKind) {
+          memberBuilder
+              .buildMembers((Member member, BuiltMemberKind memberKind) {
             if (addMembersToLibrary &&
                 !memberBuilder.isPatch &&
                 !memberBuilder.isDuplicate &&
@@ -221,8 +221,8 @@
       // TODO(johnniwinther): Check that type parameters and on-type match
       // with origin declaration.
     } else {
-      library.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
-          noLength, patch.fileUri, context: [
+      libraryBuilder.addProblem(messagePatchDeclarationMismatch,
+          patch.charOffset, noLength, patch.fileUri, context: [
         messagePatchDeclarationOrigin.withLocation(
             fileUri, charOffset, noLength)
       ]);
@@ -241,28 +241,28 @@
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    library.checkBoundsInTypeParameters(
+    libraryBuilder.checkBoundsInTypeParameters(
         typeEnvironment, extension.typeParameters, fileUri);
 
     // Check on clause.
     // ignore: unnecessary_null_comparison
     if (_extension.onType != null) {
-      library.checkBoundsInType(_extension.onType, typeEnvironment,
+      libraryBuilder.checkBoundsInType(_extension.onType, typeEnvironment,
           onType.fileUri!, onType.charOffset!);
     }
 
     forEach((String name, Builder builder) {
       if (builder is SourceFieldBuilder) {
         // Check fields.
-        library.checkTypesInField(builder, typeEnvironment);
+        libraryBuilder.checkTypesInField(builder, typeEnvironment);
       } else if (builder is SourceProcedureBuilder) {
         // Check procedures
-        library.checkTypesInFunctionBuilder(builder, typeEnvironment);
+        libraryBuilder.checkTypesInFunctionBuilder(builder, typeEnvironment);
         if (builder.isGetter) {
           Builder? setterDeclaration =
               scope.lookupLocalMember(builder.name, setter: true);
           if (setterDeclaration != null) {
-            library.checkGetterSetterTypes(builder,
+            libraryBuilder.checkGetterSetterTypes(builder,
                 setterDeclaration as ProcedureBuilder, typeEnvironment);
           }
         }
@@ -272,25 +272,23 @@
     });
   }
 
-  @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     MetadataBuilder.buildAnnotations(isPatch ? origin.extension : extension,
-        metadata, library, this, null, fileUri, library.scope);
+        metadata, libraryBuilder, this, null, fileUri, libraryBuilder.scope);
     if (typeParameters != null) {
       for (int i = 0; i < typeParameters!.length; i++) {
-        typeParameters![i].buildOutlineExpressions(library, this, null,
+        typeParameters![i].buildOutlineExpressions(libraryBuilder, this, null,
             classHierarchy, delayedActionPerformers, scope.parent!);
       }
     }
 
     void build(String ignore, Builder declaration) {
       SourceMemberBuilder member = declaration as SourceMemberBuilder;
-      member.buildOutlineExpressions(library, classHierarchy,
-          delayedActionPerformers, synthesizedFunctionNodes);
+      member.buildOutlineExpressions(
+          classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     }
 
     scope.forEach(build);
@@ -323,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_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index edf0831..b7ab94d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -130,9 +130,8 @@
   Iterable<Member> get exportedMembers => [_procedure];
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
-    Member member = build(library);
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+    Member member = build();
     f(member, BuiltMemberKind.Method);
     if (_factoryTearOff != null) {
       f(_factoryTearOff!, BuiltMemberKind.Method);
@@ -140,8 +139,8 @@
   }
 
   @override
-  Procedure build(SourceLibraryBuilder libraryBuilder) {
-    buildFunction(libraryBuilder);
+  Procedure build() {
+    buildFunction();
     _procedureInternal.function.fileOffset = charOpenParenOffset;
     _procedureInternal.function.fileEndOffset =
         _procedureInternal.fileEndOffset;
@@ -162,13 +161,12 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     if (_hasBuiltOutlines) return;
-    super.buildOutlineExpressions(library, classHierarchy,
-        delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(
+        classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     _hasBuiltOutlines = true;
   }
 
@@ -319,8 +317,8 @@
 
     // Ensure that constant factories only have constant targets/bodies.
     if (isConst && !target.isConst) {
-      library.addProblem(messageConstFactoryRedirectionToNonConst, charOffset,
-          noLength, fileUri);
+      libraryBuilder.addProblem(messageConstFactoryRedirectionToNonConst,
+          charOffset, noLength, fileUri);
     }
 
     bodyInternal = new RedirectingFactoryBody(target, typeArguments, function);
@@ -334,7 +332,8 @@
         for (int i = 0; i < function.typeParameters.length; i++) {
           substitution[function.typeParameters[i]] =
               new TypeParameterType.withDefaultNullabilityForLibrary(
-                  actualOrigin!.function.typeParameters[i], library.library);
+                  actualOrigin!.function.typeParameters[i],
+                  libraryBuilder.library);
         }
         typeArguments = new List<DartType>.generate(typeArguments.length,
             (int i) => substitute(typeArguments[i], substitution),
@@ -345,9 +344,8 @@
   }
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
-    Member member = build(library);
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+    Member member = build();
     f(member, BuiltMemberKind.RedirectingFactory);
     if (_factoryTearOff != null) {
       f(_factoryTearOff!, BuiltMemberKind.Method);
@@ -355,8 +353,8 @@
   }
 
   @override
-  Procedure build(SourceLibraryBuilder libraryBuilder) {
-    buildFunction(libraryBuilder);
+  Procedure build() {
+    buildFunction();
     _procedureInternal.function.fileOffset = charOpenParenOffset;
     _procedureInternal.function.fileEndOffset =
         _procedureInternal.fileEndOffset;
@@ -368,7 +366,7 @@
     if (redirectionTarget.typeArguments != null) {
       typeArguments = new List<DartType>.generate(
           redirectionTarget.typeArguments!.length,
-          (int i) => redirectionTarget.typeArguments![i].build(library),
+          (int i) => redirectionTarget.typeArguments![i].build(libraryBuilder),
           growable: false);
     }
     updatePrivateMemberName(_procedureInternal, libraryBuilder);
@@ -385,32 +383,32 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     if (_hasBuiltOutlines) return;
     if (isConst && isPatch) {
-      origin.buildOutlineExpressions(library, classHierarchy,
-          delayedActionPerformers, synthesizedFunctionNodes);
+      origin.buildOutlineExpressions(
+          classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     }
-    super.buildOutlineExpressions(library, classHierarchy,
-        delayedActionPerformers, synthesizedFunctionNodes);
+    super.buildOutlineExpressions(
+        classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     RedirectingFactoryBody redirectingFactoryBody =
         _procedureInternal.function.body as RedirectingFactoryBody;
     List<DartType>? typeArguments = redirectingFactoryBody.typeArguments;
     Member? target = redirectingFactoryBody.target;
     if (typeArguments != null && typeArguments.any((t) => t is UnknownType)) {
-      TypeInferrer inferrer = library.loader.typeInferenceEngine
+      TypeInferrer inferrer = libraryBuilder.loader.typeInferenceEngine
           .createLocalTypeInferrer(
-              fileUri, classBuilder!.thisType, library, null);
-      inferrer.helper = library.loader.createBodyBuilderForOutlineExpression(
-          library, classBuilder, this, classBuilder!.scope, fileUri);
+              fileUri, classBuilder!.thisType, libraryBuilder, null);
+      inferrer.helper = libraryBuilder.loader
+          .createBodyBuilderForOutlineExpression(
+              libraryBuilder, classBuilder, this, classBuilder!.scope, fileUri);
       Builder? targetBuilder = redirectionTarget.target;
       if (targetBuilder is SourceMemberBuilder) {
         // Ensure that target has been built.
-        targetBuilder.buildOutlineExpressions(targetBuilder.library,
-            classHierarchy, delayedActionPerformers, synthesizedFunctionNodes);
+        targetBuilder.buildOutlineExpressions(classHierarchy,
+            delayedActionPerformers, delayedDefaultValueCloners);
       }
       if (targetBuilder is FunctionBuilder) {
         target = targetBuilder.member;
@@ -462,34 +460,51 @@
           new RedirectingFactoryBody(target, typeArguments, function);
       function.body!.parent = function;
     }
-    if (_factoryTearOff != null) {
-      Set<Procedure> seenTargets = {};
-      while (target is Procedure && target.isRedirectingFactory) {
-        if (!seenTargets.add(target)) {
-          // Cyclic dependency.
-          target = null;
-          break;
-        }
-        RedirectingFactoryBody body =
-            target.function.body as RedirectingFactoryBody;
-        if (typeArguments != null) {
-          Substitution substitution = Substitution.fromPairs(
-              target.function.typeParameters, typeArguments);
-          typeArguments =
-              body.typeArguments?.map(substitution.substituteType).toList();
-        } else {
-          typeArguments = body.typeArguments;
-        }
-        target = body.target;
+
+    Set<Procedure> seenTargets = {};
+    while (target is Procedure && target.isRedirectingFactory) {
+      if (!seenTargets.add(target)) {
+        // Cyclic dependency.
+        target = null;
+        break;
       }
-      if (target is Constructor || target is Procedure && target.isFactory) {
-        synthesizedFunctionNodes.add(buildRedirectingFactoryTearOffBody(
+      RedirectingFactoryBody body =
+          target.function.body as RedirectingFactoryBody;
+      if (typeArguments != null) {
+        Substitution substitution = Substitution.fromPairs(
+            target.function.typeParameters, typeArguments);
+        typeArguments =
+            body.typeArguments?.map(substitution.substituteType).toList();
+      } else {
+        typeArguments = body.typeArguments;
+      }
+      target = body.target;
+    }
+
+    if (target is Constructor || target is Procedure && target.isFactory) {
+      typeArguments ??= [];
+      if (_factoryTearOff != null) {
+        delayedDefaultValueCloners.add(buildRedirectingFactoryTearOffBody(
             _factoryTearOff!,
             target!,
-            typeArguments ?? [],
+            typeArguments,
             _tearOffTypeParameters!,
-            library));
+            libraryBuilder));
       }
+      Map<TypeParameter, DartType> substitutionMap;
+      if (function.typeParameters.length == typeArguments.length) {
+        substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+            function.typeParameters, typeArguments);
+      } else {
+        // Error case: Substitute type parameters with `dynamic`.
+        substitutionMap = new Map<TypeParameter, DartType>.fromIterables(
+            function.typeParameters,
+            new List<DartType>.generate(function.typeParameters.length,
+                (int index) => const DynamicType()));
+      }
+      delayedDefaultValueCloners.add(new DelayedDefaultValueCloner(
+          substitutionMap, target!.function!, function,
+          libraryBuilder: libraryBuilder, identicalSignatures: false));
     }
     if (isConst && isPatch) {
       _finishPatch();
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index 6735bb3..e5d89e8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -70,6 +70,8 @@
   @override
   final bool isTopLevel;
 
+  final bool isSynthesized;
+
   SourceFieldBuilder(
       this.metadata,
       this.type,
@@ -88,7 +90,8 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      Token? constInitializerToken})
+      Token? constInitializerToken,
+      this.isSynthesized = false})
       : _constInitializerToken = constInitializerToken,
         super(libraryBuilder, charOffset) {
     bool isInstanceMember = fieldNameScheme.isInstanceMember;
@@ -119,7 +122,7 @@
           isExternal: isExternal,
           isFinal: isFinal,
           isCovariantByDeclaration: isCovariantByDeclaration,
-          isNonNullableByDefault: library.isNonNullableByDefault);
+          isNonNullableByDefault: libraryBuilder.isNonNullableByDefault);
     } else if (isLate &&
         libraryBuilder.loader.target.backendTarget.isLateFieldLoweringEnabled(
             hasInitializer: hasInitializer,
@@ -250,7 +253,7 @@
           isConst: isConst,
           isLate: isLate,
           hasInitializer: hasInitializer,
-          isNonNullableByDefault: library.isNonNullableByDefault,
+          isNonNullableByDefault: libraryBuilder.isNonNullableByDefault,
           fieldReference: fieldReference,
           getterReference: fieldGetterReference,
           setterReference: fieldSetterReference);
@@ -356,14 +359,13 @@
   Iterable<Member> get exportedMembers => _fieldEncoding.exportedMembers;
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
-    build(library);
-    _fieldEncoding.registerMembers(library, this, f);
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+    build();
+    _fieldEncoding.registerMembers(libraryBuilder, this, f);
   }
 
   /// Builds the core AST structures for this field as needed for the outline.
-  void build(SourceLibraryBuilder libraryBuilder) {
+  void build() {
     if (type != null) {
       fieldType = type!.build(libraryBuilder);
     }
@@ -372,21 +374,20 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     _fieldEncoding.completeSignature(classHierarchy.coreTypes);
 
     for (Annotatable annotatable in _fieldEncoding.annotatables) {
       MetadataBuilder.buildAnnotations(
           annotatable,
           metadata,
-          library,
+          libraryBuilder,
           declarationBuilder,
           this,
           fileUri,
-          declarationBuilder?.scope ?? library.scope);
+          declarationBuilder?.scope ?? libraryBuilder.scope);
     }
 
     // For modular compilation we need to include initializers of all const
@@ -398,10 +399,10 @@
                 isClassMember &&
                 classBuilder!.declaresConstConstructor)) &&
         _constInitializerToken != null) {
-      Scope scope = declarationBuilder?.scope ?? library.scope;
-      BodyBuilder bodyBuilder = library.loader
+      Scope scope = declarationBuilder?.scope ?? libraryBuilder.scope;
+      BodyBuilder bodyBuilder = libraryBuilder.loader
           .createBodyBuilderForOutlineExpression(
-              library, declarationBuilder, this, scope, fileUri);
+              libraryBuilder, declarationBuilder, this, scope, fileUri);
       bodyBuilder.constantContext =
           isConst ? ConstantContext.inferred : ConstantContext.required;
       Expression initializer = bodyBuilder.typeInferrer
@@ -413,9 +414,9 @@
         // Wrap the initializer in a temporary parent expression; the
         // transformations need a parent relation.
         Not wrapper = new Not(initializer);
-        SourceLoader loader = library.loader;
+        SourceLoader loader = libraryBuilder.loader;
         loader.transformPostInference(wrapper, bodyBuilder.transformSetLiterals,
-            bodyBuilder.transformCollections, library.library);
+            bodyBuilder.transformCollections, libraryBuilder.library);
         initializer = wrapper.operand;
       }
       buildBody(classHierarchy.coreTypes, initializer);
@@ -446,7 +447,6 @@
   }
 
   DartType inferType() {
-    SourceLibraryBuilder library = this.library;
     if (fieldType is! ImplicitFieldType) {
       // We have already inferred a type.
       return fieldType;
@@ -457,7 +457,7 @@
     if (fieldType is ImplicitFieldType) {
       // `fieldType` may have changed if a circularity was detected when
       // [inferredType] was computed.
-      if (!library.isNonNullableByDefault) {
+      if (!libraryBuilder.isNonNullableByDefault) {
         inferredType = legacyErasure(inferredType);
       }
       fieldType = implicitFieldType.checkInferred(inferredType);
@@ -761,6 +761,9 @@
   bool get isProperty => true;
 
   @override
+  bool get isSynthesized => memberBuilder.isSynthesized;
+
+  @override
   bool isSameDeclaration(ClassMember other) {
     return other is SourceFieldMember && memberBuilder == other.memberBuilder;
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index 52c156d..1411267 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -34,7 +34,6 @@
 import '../type_inference/type_inference_engine.dart'
     show IncludesTypeParametersNonCovariantly;
 import '../util/helpers.dart' show DelayedActionPerformer;
-import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_member_builder.dart';
 
 abstract class SourceFunctionBuilder
@@ -315,7 +314,7 @@
   @override
   bool get isNative => nativeMethodName != null;
 
-  void buildFunction(SourceLibraryBuilder library) {
+  void buildFunction() {
     function.asyncMarker = asyncModifier;
     function.body = body;
     body?.parent = function;
@@ -344,7 +343,7 @@
     }
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        VariableDeclaration parameter = formal.build(library, 0);
+        VariableDeclaration parameter = formal.build(libraryBuilder, 0);
         if (needsCheckVisitor != null) {
           if (parameter.type.accept(needsCheckVisitor)) {
             parameter.isCovariantByClass = true;
@@ -356,14 +355,14 @@
           function.positionalParameters.add(parameter);
         }
         parameter.parent = function;
-        if (formal.isRequired) {
+        if (formal.isRequiredPositional) {
           function.requiredParameterCount++;
         }
 
-        if (library.isNonNullableByDefault) {
+        if (libraryBuilder.isNonNullableByDefault) {
           // Required named parameters can't have default values.
-          if (formal.isNamedRequired && formal.initializerToken != null) {
-            library.addProblem(
+          if (formal.isRequiredNamed && formal.initializerToken != null) {
+            libraryBuilder.addProblem(
                 templateRequiredNamedParameterHasDefaultValueError
                     .withArguments(formal.name),
                 formal.charOffset,
@@ -375,7 +374,7 @@
     }
     if (!isExtensionInstanceMember &&
         isSetter &&
-        (formals?.length != 1 || formals![0].isOptional)) {
+        (formals?.length != 1 || formals![0].isOptionalPositional)) {
       // Replace illegal parameters by single dummy parameter.
       // Do this after building the parameters, since the diet listener
       // assumes that parameters are built, even if illegal in number.
@@ -388,7 +387,7 @@
       function.requiredParameterCount = 1;
     }
     if (returnType != null) {
-      function.returnType = returnType!.build(library);
+      function.returnType = returnType!.build(libraryBuilder);
     }
     if (isExtensionInstanceMember) {
       ExtensionBuilder extensionBuilder = parent as ExtensionBuilder;
@@ -434,22 +433,22 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     if (!_hasBuiltOutlineExpressions) {
       DeclarationBuilder? classOrExtensionBuilder =
           isClassMember || isExtensionMember
               ? parent as DeclarationBuilder
               : null;
-      Scope parentScope = classOrExtensionBuilder?.scope ?? library.scope;
-      MetadataBuilder.buildAnnotations(member, metadata, library,
+      Scope parentScope =
+          classOrExtensionBuilder?.scope ?? libraryBuilder.scope;
+      MetadataBuilder.buildAnnotations(member, metadata, libraryBuilder,
           classOrExtensionBuilder, this, fileUri, parentScope);
       if (typeVariables != null) {
         for (int i = 0; i < typeVariables!.length; i++) {
           typeVariables![i].buildOutlineExpressions(
-              library,
+              libraryBuilder,
               classOrExtensionBuilder,
               this,
               classHierarchy,
@@ -464,14 +463,15 @@
         // buildOutlineExpressions to clear initializerToken to prevent
         // consuming too much memory.
         for (FormalParameterBuilder formal in formals!) {
-          formal.buildOutlineExpressions(library, delayedActionPerformers);
+          formal.buildOutlineExpressions(
+              libraryBuilder, delayedActionPerformers);
         }
       }
       _hasBuiltOutlineExpressions = true;
     }
   }
 
-  Member build(SourceLibraryBuilder library);
+  Member build();
 
   @override
   void becomeNative(SourceLoader loader) {
@@ -494,7 +494,7 @@
   @override
   bool checkPatch(FunctionBuilder patch) {
     if (!isExternal) {
-      patch.library.addProblem(
+      patch.libraryBuilder.addProblem(
           messagePatchNonExternal, patch.charOffset, noLength, patch.fileUri!,
           context: [
             messagePatchDeclarationOrigin.withLocation(
@@ -507,7 +507,7 @@
 
   @override
   void reportPatchMismatch(Builder patch) {
-    library.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
+    libraryBuilder.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
         noLength, patch.fileUri!, context: [
       messagePatchDeclarationOrigin.withLocation(fileUri, charOffset, noLength)
     ]);
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 8c5da3c..56607a6 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
@@ -7,6 +7,7 @@
 import 'dart:collection';
 import 'dart:convert' show jsonEncode;
 
+import 'package:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 import 'package:_fe_analyzer_shared/src/util/resolve_relative_uri.dart'
     show resolveRelativeUri;
@@ -66,7 +67,7 @@
 import '../kernel/internal_ast.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/load_library_builder.dart';
-import '../kernel/macro.dart';
+import '../kernel/macro/macro.dart';
 import '../kernel/type_algorithms.dart'
     show
         NonSimplicityIssue,
@@ -309,142 +310,56 @@
   TypeParameterScopeBuilder get libraryTypeParameterScopeBuilderForTesting =>
       _libraryTypeParameterScopeBuilder;
 
-  bool? _enableConstFunctionsInLibrary;
-  bool? _enableVarianceInLibrary;
-  bool? _enableNonfunctionTypeAliasesInLibrary;
-  bool? _enableNonNullableInLibrary;
-  Version? _enableNonNullableVersionInLibrary;
-  Version? _enableConstructorTearoffsVersionInLibrary;
-  Version? _enableExtensionTypesVersionInLibrary;
-  Version? _enableNamedArgumentsAnywhereVersionInLibrary;
-  Version? _enableSuperParametersVersionInLibrary;
-  Version? _enableEnhancedEnumsVersionInLibrary;
-  Version? _enableMacrosVersionInLibrary;
-  bool? _enableTripleShiftInLibrary;
-  bool? _enableExtensionMethodsInLibrary;
-  bool? _enableGenericMetadataInLibrary;
-  bool? _enableExtensionTypesInLibrary;
-  bool? _enableEnhancedEnumsInLibrary;
-  bool? _enableConstructorTearOffsInLibrary;
-  bool? _enableNamedArgumentsAnywhereInLibrary;
-  bool? _enableSuperParametersInLibrary;
-  bool? _enableMacrosInLibrary;
+  LibraryFeatures? _libraryFeatures;
 
-  bool get enableConstFunctionsInLibrary => _enableConstFunctionsInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.constFunctions,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  bool get enableVarianceInLibrary => _enableVarianceInLibrary ??= loader.target
-      .isExperimentEnabledInLibraryByVersion(ExperimentalFlag.variance,
+  /// Returns the state of the experimental features within this library.
+  LibraryFeatures get libraryFeatures =>
+      _libraryFeatures ??= new LibraryFeatures(loader.target.globalFeatures,
           _packageUri ?? importUri, languageVersion.version);
 
-  bool get enableNonfunctionTypeAliasesInLibrary =>
-      _enableNonfunctionTypeAliasesInLibrary ??= loader.target
-          .isExperimentEnabledInLibraryByVersion(
-              ExperimentalFlag.nonfunctionTypeAliases,
-              _packageUri ?? importUri,
-              languageVersion.version);
-
-  /// Returns `true` if the 'non-nullable' experiment is enabled for this
-  /// library.
+  /// Reports that [feature] is not enabled, using [charOffset] and
+  /// [length] for the location of the message.
   ///
-  /// Note that the library might still opt out of the experiment by having
-  /// a version that is too low for opting in to the experiment.
-  bool get enableNonNullableInLibrary => _enableNonNullableInLibrary ??=
-      loader.target.isExperimentEnabledInLibrary(
-          ExperimentalFlag.nonNullable, _packageUri ?? importUri);
-
-  Version get enableNonNullableVersionInLibrary =>
-      _enableNonNullableVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.nonNullable, _packageUri ?? importUri);
-
-  bool get enableConstructorTearOffsInLibrary =>
-      _enableConstructorTearOffsInLibrary ??= loader.target
-          .isExperimentEnabledInLibraryByVersion(
-              ExperimentalFlag.constructorTearoffs,
-              _packageUri ?? importUri,
-              languageVersion.version);
-
-  Version get enableConstructorTearOffsVersionInLibrary =>
-      _enableConstructorTearoffsVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.constructorTearoffs, _packageUri ?? importUri);
-
-  bool get enableTripleShiftInLibrary => _enableTripleShiftInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.tripleShift,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  bool get enableExtensionMethodsInLibrary =>
-      _enableExtensionMethodsInLibrary ??= loader.target
-          .isExperimentEnabledInLibraryByVersion(
-              ExperimentalFlag.extensionMethods,
-              _packageUri ?? importUri,
-              languageVersion.version);
-
-  bool get enableGenericMetadataInLibrary => _enableGenericMetadataInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.genericMetadata,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  bool get enableExtensionTypesInLibrary => _enableExtensionTypesInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.extensionTypes,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  Version get enableExtensionTypesVersionInLibrary =>
-      _enableExtensionTypesVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.extensionTypes, _packageUri ?? importUri);
-
-  bool get enableNamedArgumentsAnywhereInLibrary =>
-      _enableNamedArgumentsAnywhereInLibrary ??= loader.target
-          .isExperimentEnabledInLibraryByVersion(
-              ExperimentalFlag.namedArgumentsAnywhere,
-              _packageUri ?? importUri,
-              languageVersion.version);
-
-  Version get enableNamedArgumentsAnywhereVersionInLibrary =>
-      _enableNamedArgumentsAnywhereVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.namedArgumentsAnywhere,
-              _packageUri ?? importUri);
-
-  bool get enableSuperParametersInLibrary => _enableSuperParametersInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.superParameters,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  Version get enableSuperParametersVersionInLibrary =>
-      _enableSuperParametersVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.superParameters, _packageUri ?? importUri);
-
-  bool get enableEnhancedEnumsInLibrary => _enableEnhancedEnumsInLibrary ??=
-      loader.target.isExperimentEnabledInLibraryByVersion(
-          ExperimentalFlag.enhancedEnums,
-          _packageUri ?? importUri,
-          languageVersion.version);
-
-  Version get enableEnhancedEnumsVersionInLibrary =>
-      _enableEnhancedEnumsVersionInLibrary ??= loader.target
-          .getExperimentEnabledVersionInLibrary(
-              ExperimentalFlag.enhancedEnums, _packageUri ?? importUri);
-
-  bool get enableMacrosInLibrary => _enableMacrosInLibrary ??= loader.target
-      .isExperimentEnabledInLibraryByVersion(ExperimentalFlag.macros,
-          _packageUri ?? importUri, languageVersion.version);
-
-  Version get enableMacrosVersionInLibrary => _enableMacrosVersionInLibrary ??=
-      loader.target.getExperimentEnabledVersionInLibrary(
-          ExperimentalFlag.macros, _packageUri ?? importUri);
+  /// Return the primary message.
+  Message reportFeatureNotEnabled(
+      LibraryFeature feature, Uri fileUri, int charOffset, int length) {
+    assert(!feature.isEnabled);
+    Message message;
+    if (feature.isSupported) {
+      if (languageVersion.isExplicit) {
+        message = templateExperimentOptOutExplicit.withArguments(
+            feature.flag.name, feature.enabledVersion.toText());
+        addProblem(message, charOffset, length, fileUri,
+            context: <LocatedMessage>[
+              templateExperimentOptOutComment
+                  .withArguments(feature.flag.name)
+                  .withLocation(languageVersion.fileUri!,
+                      languageVersion.charOffset, languageVersion.charCount)
+            ]);
+      } else {
+        message = templateExperimentOptOutImplicit.withArguments(
+            feature.flag.name, feature.enabledVersion.toText());
+        addProblem(message, charOffset, length, fileUri);
+      }
+    } else {
+      if (feature.flag.isEnabledByDefault) {
+        if (languageVersion.version < feature.enabledVersion) {
+          message =
+              templateExperimentDisabledInvalidLanguageVersion.withArguments(
+                  feature.flag.name, feature.enabledVersion.toText());
+          addProblem(message, charOffset, length, fileUri);
+        } else {
+          message = templateExperimentDisabled.withArguments(feature.flag.name);
+          addProblem(message, charOffset, length, fileUri);
+        }
+      } else {
+        message = templateExperimentNotEnabledOffByDefault
+            .withArguments(feature.flag.name);
+        addProblem(message, charOffset, length, fileUri);
+      }
+    }
+    return message;
+  }
 
   void _updateLibraryNNBDSettings() {
     library.isNonNullableByDefault = isNonNullableByDefault;
@@ -530,7 +445,8 @@
         isUnsupported: false,
         target: library,
         origin: this,
-        isAugmentation: true);
+        isAugmentation: true,
+        referencesFrom: referencesFrom);
     addPatchLibrary(augmentationLibrary);
     loader.registerUnparsedLibrarySource(augmentationLibrary, source);
     return augmentationLibrary;
@@ -569,8 +485,8 @@
   }
 
   bool _computeIsNonNullableByDefault() =>
-      enableNonNullableInLibrary &&
-      languageVersion.version >= enableNonNullableVersionInLibrary;
+      libraryFeatures.nonNullable.isSupported &&
+      languageVersion.version >= libraryFeatures.nonNullable.enabledVersion;
 
   LanguageVersion get languageVersion {
     assert(
@@ -709,7 +625,7 @@
       prefix = name as String;
       suffix = null;
     }
-    if (enableConstructorTearOffsInLibrary) {
+    if (libraryFeatures.constructorTearoffs.isEnabled) {
       suffix = suffix == "new" ? "" : suffix;
     }
     if (prefix == className) {
@@ -801,7 +717,8 @@
       builder = loader.read(resolvedUri, uriOffset,
           origin: isAugmentationImport ? this : null,
           accessor: this,
-          isAugmentation: isAugmentationImport);
+          isAugmentation: isAugmentationImport,
+          referencesFrom: isAugmentationImport ? referencesFrom : null);
     }
 
     imports.add(new Import(
@@ -1515,7 +1432,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;
@@ -1537,19 +1453,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);
         }
       }
     }
@@ -1659,17 +1571,23 @@
     //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));
   }
 
-  TypeBuilder addMixinApplication(
-      TypeBuilder? supertype, List<TypeBuilder> mixins, int charOffset) {
-    return new MixinApplicationBuilder(supertype, mixins, fileUri, charOffset);
+  MixinApplicationBuilder addMixinApplication(
+      List<TypeBuilder> mixins, int charOffset) {
+    return new MixinApplicationBuilder(mixins, fileUri, charOffset);
   }
 
   TypeBuilder addVoidType(int charOffset) {
@@ -1677,7 +1595,7 @@
     return addNamedType(
         "void", const NullabilityBuilder.inherent(), null, charOffset,
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(
+      ..bind(this,
           new VoidTypeDeclarationBuilder(const VoidType(), this, charOffset));
   }
 
@@ -1776,6 +1694,7 @@
       String className,
       List<TypeVariableBuilder>? typeVariables,
       TypeBuilder? supertype,
+      MixinApplicationBuilder? mixins,
       List<TypeBuilder>? interfaces,
       int startOffset,
       int nameOffset,
@@ -1790,6 +1709,7 @@
         className,
         typeVariables,
         supertype,
+        mixins,
         interfaces,
         startOffset,
         nameOffset,
@@ -1804,13 +1724,24 @@
       int modifiers,
       String className,
       List<TypeVariableBuilder>? typeVariables,
-      TypeBuilder? supertype,
+      List<TypeBuilder>? supertypeConstraints,
       List<TypeBuilder>? interfaces,
       int startOffset,
       int nameOffset,
       int endOffset,
       int supertypeOffset,
       {required bool isAugmentation}) {
+    TypeBuilder? supertype;
+    MixinApplicationBuilder? mixinApplication;
+    if (supertypeConstraints != null && supertypeConstraints.isNotEmpty) {
+      supertype = supertypeConstraints.first;
+      if (supertypeConstraints.length > 1) {
+        mixinApplication = new MixinApplicationBuilder(
+            supertypeConstraints.skip(1).toList(),
+            supertype.fileUri!,
+            supertype.charOffset!);
+      }
+    }
     _addClass(
         TypeParameterScopeKind.mixinDeclaration,
         metadata,
@@ -1818,6 +1749,7 @@
         className,
         typeVariables,
         supertype,
+        mixinApplication,
         interfaces,
         startOffset,
         nameOffset,
@@ -1834,6 +1766,7 @@
       String className,
       List<TypeVariableBuilder>? typeVariables,
       TypeBuilder? supertype,
+      MixinApplicationBuilder? mixins,
       List<TypeBuilder>? interfaces,
       int startOffset,
       int nameOffset,
@@ -1876,10 +1809,11 @@
         modifiers,
         className,
         typeVariables,
-        applyMixins(supertype, startOffset, nameOffset, endOffset, className,
-            isMixinDeclaration,
+        applyMixins(supertype, mixins, startOffset, nameOffset, endOffset,
+            className, isMixinDeclaration,
             typeVariables: typeVariables,
             isMacro: false,
+            // TODO(johnniwinther): How can we support class with mixins?
             isAugmentation: false),
         interfaces,
         // TODO(johnniwinther): Add the `on` clause types of a mixin declaration
@@ -1939,7 +1873,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}';
@@ -2145,7 +2079,8 @@
   }
 
   TypeBuilder? applyMixins(
-      TypeBuilder? type,
+      TypeBuilder? supertype,
+      MixinApplicationBuilder? mixinApplications,
       int startCharOffset,
       int charOffset,
       int charEndOffset,
@@ -2168,7 +2103,7 @@
             "interfaces", "unnamed mixin application", charOffset, fileUri);
       }
     }
-    if (type is MixinApplicationBuilder) {
+    if (mixinApplications != null) {
       // Documentation below assumes the given mixin application is in one of
       // these forms:
       //
@@ -2185,7 +2120,7 @@
       /// 1. `S with M1`.
       /// 2. `(S with M1) with M2`.
       /// 3. `((S with M1) with M2) with M3`.
-      TypeBuilder supertype = type.supertype ?? loader.target.objectType;
+      supertype ??= loader.target.objectType;
 
       /// The variable part of the mixin application's synthetic name. It
       /// starts out as the name of the superclass, but is only used after it
@@ -2244,7 +2179,7 @@
           }
         } else if (type is FunctionTypeBuilder) {
           if (type.formals != null) {
-            for (FormalParameterBuilder formal in type.formals!) {
+            for (ParameterBuilder formal in type.formals!) {
               if (usesTypeVariables(formal.type)) {
                 return true;
               }
@@ -2266,9 +2201,10 @@
       /// Iterate over the mixins from left to right. At the end of each
       /// iteration, a new [supertype] is computed that is the mixin
       /// application of [supertype] with the current mixin.
-      for (int i = 0; i < type.mixins.length; i++) {
-        TypeBuilder mixin = type.mixins[i];
-        isNamedMixinApplication = name != null && mixin == type.mixins.last;
+      for (int i = 0; i < mixinApplications.mixins.length; i++) {
+        TypeBuilder mixin = mixinApplications.mixins[i];
+        isNamedMixinApplication =
+            name != null && mixin == mixinApplications.mixins.last;
         bool isGeneric = false;
         if (!isNamedMixinApplication) {
           if (supertype is NamedTypeBuilder) {
@@ -2296,7 +2232,8 @@
                 "mixin application");
 
             applicationTypeVariables = copyTypeVariables(
-                typeVariables!, currentTypeParameterScopeBuilder);
+                typeVariables!, currentTypeParameterScopeBuilder,
+                kind: TypeVariableKind.extensionSynthesized);
 
             List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
             if (supertype is NamedTypeBuilder && supertype.arguments != null) {
@@ -2324,16 +2261,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));
             }
           }
         }
@@ -2359,7 +2298,7 @@
             isNamedMixinApplication
                 ? interfaces
                 : isMixinDeclaration
-                    ? [supertype, mixin]
+                    ? [supertype!, mixin]
                     : null,
             null, // No `on` clause types.
             new Scope(
@@ -2391,7 +2330,7 @@
       }
       return supertype;
     } else {
-      return type;
+      return supertype;
     }
   }
 
@@ -2400,7 +2339,8 @@
       String name,
       List<TypeVariableBuilder>? typeVariables,
       int modifiers,
-      TypeBuilder? mixinApplication,
+      TypeBuilder? supertype,
+      MixinApplicationBuilder mixinApplication,
       List<TypeBuilder>? interfaces,
       int startCharOffset,
       int charOffset,
@@ -2410,7 +2350,7 @@
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name)
         .resolveNamedTypes(typeVariables, this);
-    TypeBuilder supertype = applyMixins(mixinApplication, startCharOffset,
+    supertype = applyMixins(supertype, mixinApplication, startCharOffset,
         charOffset, charEndOffset, name, false,
         metadata: metadata,
         name: name,
@@ -2609,7 +2549,8 @@
     if (constructorBuilder.isConst) {
       currentTypeParameterScopeBuilder.declaresConstConstructor = true;
     }
-    if (constructorBuilder.isConst || enableSuperParametersInLibrary) {
+    if (constructorBuilder.isConst ||
+        libraryFeatures.superParameters.isEnabled) {
       // const constructors will have their initializers compiled and written
       // into the outline. In case of super-parameters language feature, the
       // super initializers are required to infer the types of super parameters.
@@ -2729,7 +2670,7 @@
       int charEndOffset,
       String? nativeMethodName,
       AsyncMarker asyncModifier) {
-    TypeBuilder returnType = addNamedType(
+    NamedTypeBuilder returnType = addNamedType(
         currentTypeParameterScopeBuilder.parent!.name,
         const NullabilityBuilder.omitted(),
         <TypeBuilder>[],
@@ -2739,10 +2680,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(
@@ -2790,7 +2733,8 @@
           copyTypeVariables(
               currentTypeParameterScopeBuilder.typeVariables ??
                   const <TypeVariableBuilder>[],
-              factoryDeclaration),
+              factoryDeclaration,
+              kind: TypeVariableKind.function),
           formals,
           this,
           startCharOffset,
@@ -2811,7 +2755,8 @@
           copyTypeVariables(
               currentTypeParameterScopeBuilder.typeVariables ??
                   const <TypeVariableBuilder>[],
-              factoryDeclaration),
+              factoryDeclaration,
+              kind: TypeVariableKind.function),
           formals,
           this,
           startCharOffset,
@@ -2848,7 +2793,7 @@
       List<MetadataBuilder>? metadata,
       String name,
       List<TypeVariableBuilder>? typeVariables,
-      TypeBuilder? supertypeBuilder,
+      MixinApplicationBuilder? supertypeBuilder,
       List<TypeBuilder>? interfaceBuilders,
       List<EnumConstantInfo?>? enumConstantInfos,
       int startCharOffset,
@@ -2871,8 +2816,14 @@
         metadata,
         name,
         typeVariables,
-        applyMixins(supertypeBuilder, startCharOffset, charOffset,
-            charEndOffset, name, /* isMixinDeclaration = */ false,
+        applyMixins(
+            loader.target.underscoreEnumType,
+            supertypeBuilder,
+            startCharOffset,
+            charOffset,
+            charEndOffset,
+            name,
+            /* isMixinDeclaration = */ false,
             typeVariables: typeVariables,
             isMacro: false,
             isAugmentation: false),
@@ -2963,7 +2914,7 @@
     if (typeVariables != null) {
       for (TypeVariableBuilder builder in typeVariables) {
         if (builder.metadata != null) {
-          if (!enableGenericMetadataInLibrary) {
+          if (!libraryFeatures.genericMetadata.isEnabled) {
             addProblem(messageAnnotationOnFunctionTypeTypeVariable,
                 builder.charOffset, builder.name.length, builder.fileUri);
           }
@@ -2979,6 +2930,7 @@
 
   FormalParameterBuilder addFormalParameter(
       List<MetadataBuilder>? metadata,
+      FormalParameterKind kind,
       int modifiers,
       TypeBuilder? type,
       String name,
@@ -2995,7 +2947,7 @@
       modifiers |= superInitializingFormalMask;
     }
     FormalParameterBuilder formal = new FormalParameterBuilder(
-        metadata, modifiers, type, name, this, charOffset,
+        metadata, kind, modifiers, type, name, this, charOffset,
         fileUri: fileUri)
       ..initializerToken = initializerToken
       ..hasDeclaredInitializer = (initializerToken != null);
@@ -3003,10 +2955,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;
@@ -3014,13 +2967,13 @@
 
   void buildOutlineExpressions(
       ClassHierarchy classHierarchy,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes,
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners,
       List<DelayedActionPerformer> delayedActionPerformers) {
     Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
     if (patches != null) {
       for (SourceLibraryBuilder patchLibrary in patches) {
-        patchLibrary.buildOutlineExpressions(
-            classHierarchy, synthesizedFunctionNodes, delayedActionPerformers);
+        patchLibrary.buildOutlineExpressions(classHierarchy,
+            delayedDefaultValueCloners, delayedActionPerformers);
       }
     }
 
@@ -3031,17 +2984,17 @@
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceClassBuilder) {
-        declaration.buildOutlineExpressions(this, classHierarchy,
-            delayedActionPerformers, synthesizedFunctionNodes);
-      } else if (declaration is ExtensionBuilder) {
-        declaration.buildOutlineExpressions(this, classHierarchy,
-            delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(classHierarchy,
+            delayedActionPerformers, delayedDefaultValueCloners);
+      } else if (declaration is SourceExtensionBuilder) {
+        declaration.buildOutlineExpressions(classHierarchy,
+            delayedActionPerformers, delayedDefaultValueCloners);
       } else if (declaration is SourceMemberBuilder) {
-        declaration.buildOutlineExpressions(this, classHierarchy,
-            delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(classHierarchy,
+            delayedActionPerformers, delayedDefaultValueCloners);
       } else if (declaration is SourceTypeAliasBuilder) {
-        declaration.buildOutlineExpressions(this, classHierarchy,
-            delayedActionPerformers, synthesizedFunctionNodes);
+        declaration.buildOutlineExpressions(classHierarchy,
+            delayedActionPerformers, delayedDefaultValueCloners);
       } else {
         assert(
             declaration is PrefixBuilder ||
@@ -3069,20 +3022,19 @@
     }
 
     if (declaration is SourceClassBuilder) {
-      Class cls = declaration.build(this, coreLibrary);
+      Class cls = declaration.build(coreLibrary);
       if (!declaration.isPatch) {
         cls.name += findDuplicateSuffix(declaration);
         library.addClass(cls);
       }
     } else if (declaration is SourceExtensionBuilder) {
-      Extension extension = declaration.build(this, coreLibrary,
+      Extension extension = declaration.build(coreLibrary,
           addMembersToLibrary: !declaration.isDuplicate);
       if (!declaration.isPatch && !declaration.isDuplicate) {
         library.addExtension(extension);
       }
     } else if (declaration is SourceMemberBuilder) {
-      declaration.buildMembers(this,
-          (Member member, BuiltMemberKind memberKind) {
+      declaration.buildMembers((Member member, BuiltMemberKind memberKind) {
         if (member is Field) {
           member.isStatic = true;
           if (!declaration.isPatch && !declaration.isDuplicate) {
@@ -3101,12 +3053,12 @@
         }
       });
     } else if (declaration is SourceTypeAliasBuilder) {
-      Typedef typedef = declaration.build(this);
+      Typedef typedef = declaration.build();
       if (!declaration.isPatch && !declaration.isDuplicate) {
         library.addTypedef(typedef);
       }
     } else if (declaration is SourceEnumBuilder) {
-      Class cls = declaration.build(this, coreLibrary);
+      Class cls = declaration.build(coreLibrary);
       if (!declaration.isPatch) {
         cls.name += findDuplicateSuffix(declaration);
         library.addClass(cls);
@@ -3376,14 +3328,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);
@@ -3552,7 +3504,7 @@
   /// any errors were reported.
   bool _recursivelyReportGenericFunctionTypesAsBoundsForVariable(
       TypeVariableBuilder typeVariable) {
-    if (enableGenericMetadataInLibrary) return false;
+    if (libraryFeatures.genericMetadata.isEnabled) return false;
 
     bool hasReportedErrors = false;
     hasReportedErrors =
@@ -3572,7 +3524,7 @@
   /// reported.
   bool _recursivelyReportGenericFunctionTypesAsBoundsForType(
       TypeBuilder? typeBuilder) {
-    if (enableGenericMetadataInLibrary) return false;
+    if (libraryFeatures.genericMetadata.isEnabled) return false;
 
     List<FunctionTypeBuilder> genericFunctionTypeBuilders =
         <FunctionTypeBuilder>[];
@@ -3600,7 +3552,7 @@
   /// Returns `true` if any errors were reported.
   bool _reportGenericFunctionTypeAsBoundIfNeeded(
       TypeVariableBuilder typeVariable) {
-    if (enableGenericMetadataInLibrary) return false;
+    if (libraryFeatures.genericMetadata.isEnabled) return false;
 
     TypeBuilder? bound = typeVariable.bound;
     bool isUnaliasedGenericFunctionType = bound is FunctionTypeBuilder &&
@@ -3650,7 +3602,7 @@
 
       bool haveErroneousBounds = false;
       if (!inErrorRecovery) {
-        if (!enableGenericMetadataInLibrary) {
+        if (!libraryFeatures.genericMetadata.isEnabled) {
           for (TypeVariableBuilder variable in variables) {
             haveErroneousBounds =
                 _recursivelyReportGenericFunctionTypesAsBoundsForVariable(
@@ -4141,8 +4093,9 @@
     if (!isNonNullableByDefault) return;
 
     for (FormalParameterBuilder formal in formals) {
-      bool isOptionalPositional = formal.isOptional && formal.isPositional;
-      bool isOptionalNamed = !formal.isNamedRequired && formal.isNamed;
+      bool isOptionalPositional =
+          formal.isOptionalPositional && formal.isPositional;
+      bool isOptionalNamed = !formal.isRequiredNamed && formal.isNamed;
       bool isOptional = isOptionalPositional || isOptionalNamed;
       if (isOptional &&
           formal.variable!.type.isPotentiallyNonNullable &&
@@ -4169,7 +4122,8 @@
               : SubtypeCheckMode.ignoringNullabilities,
           allowSuperBounded: true,
           isNonNullableByDefault: library.isNonNullableByDefault,
-          areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+          areGenericArgumentsAllowed:
+              libraryFeatures.genericMetadata.isEnabled);
       for (TypeArgumentIssue issue in issues) {
         DartType argument = issue.argument;
         TypeParameter typeParameter = issue.typeParameter;
@@ -4246,7 +4200,8 @@
               : SubtypeCheckMode.ignoringNullabilities,
           allowSuperBounded: true,
           isNonNullableByDefault: library.isNonNullableByDefault,
-          areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+          areGenericArgumentsAllowed:
+              libraryFeatures.genericMetadata.isEnabled);
       for (TypeArgumentIssue issue in issues) {
         DartType argument = issue.argument;
         TypeParameter typeParameter = issue.typeParameter;
@@ -4356,7 +4311,7 @@
             : SubtypeCheckMode.ignoringNullabilities,
         allowSuperBounded: allowSuperBounded,
         isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+        areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
     reportTypeArgumentIssues(issues, fileUri, offset, inferred: inferred);
   }
 
@@ -4423,7 +4378,7 @@
             : SubtypeCheckMode.ignoringNullabilities,
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+        areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
     if (issues.isNotEmpty) {
       DartType? targetReceiver;
       if (klass != null) {
@@ -4509,7 +4464,7 @@
             : SubtypeCheckMode.ignoringNullabilities,
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+        areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
     reportTypeArgumentIssues(issues, fileUri, offset,
         typeArgumentsInfo: getTypeArgumentsInfo(arguments),
         targetReceiver: receiverType,
@@ -4542,7 +4497,7 @@
             : SubtypeCheckMode.ignoringNullabilities,
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+        areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
     reportTypeArgumentIssues(issues, fileUri, offset,
         typeArgumentsInfo: getTypeArgumentsInfo(arguments),
         // TODO(johnniwinther): Special-case messaging on function type
@@ -4579,7 +4534,7 @@
             : SubtypeCheckMode.ignoringNullabilities,
         bottomType,
         isNonNullableByDefault: library.isNonNullableByDefault,
-        areGenericArgumentsAllowed: enableGenericMetadataInLibrary);
+        areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
     reportTypeArgumentIssues(issues, fileUri, offset,
         targetReceiver: functionType,
         typeArgumentsInfo: inferred
@@ -5208,11 +5163,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!,
@@ -5417,7 +5375,7 @@
     }
     if (root.formals != null && root.formals!.isNotEmpty) {
       internalDependents = <TypeBuilder>[];
-      for (FormalParameterBuilder formal in root.formals!) {
+      for (ParameterBuilder formal in root.formals!) {
         internalDependents.add(formal.type!);
       }
     }
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 88c7198..3d323b0 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -72,10 +72,10 @@
 import '../kernel/hierarchy/hierarchy_builder.dart';
 import '../kernel/hierarchy/members_builder.dart';
 import '../kernel/kernel_helper.dart'
-    show SynthesizedFunctionNode, TypeDependency;
+    show DelayedDefaultValueCloner, TypeDependency;
 import '../kernel/kernel_target.dart' show KernelTarget;
-import '../kernel/macro.dart';
-import '../kernel/macro_annotation_parser.dart';
+import '../kernel/macro/macro.dart';
+import '../kernel/macro/annotation_parser.dart';
 import '../kernel/transform_collections.dart' show CollectionTransformer;
 import '../kernel/transform_set_literals.dart' show SetLiteralTransformer;
 import '../kernel/type_builder_computer.dart' show TypeBuilderComputer;
@@ -815,10 +815,10 @@
   Template<SummaryTemplate> get outlineSummaryTemplate =>
       templateSourceOutlineSummary;
 
-  Future<Token> tokenize(SourceLibraryBuilder library,
+  Future<Token> tokenize(SourceLibraryBuilder libraryBuilder,
       {bool suppressLexicalErrors: false}) async {
     target.benchmarker?.beginSubdivide(BenchmarkSubdivides.tokenize);
-    Uri fileUri = library.fileUri;
+    Uri fileUri = libraryBuilder.fileUri;
 
     // Lookup the file URI in the cache.
     List<int>? bytes = sourceBytes[fileUri];
@@ -827,18 +827,18 @@
       // Error recovery.
       if (fileUri.isScheme(untranslatableUriScheme)) {
         Message message =
-            templateUntranslatableUri.withArguments(library.importUri);
-        library.addProblemAtAccessors(message);
-        bytes = synthesizeSourceForMissingFile(library.importUri, null);
+            templateUntranslatableUri.withArguments(libraryBuilder.importUri);
+        libraryBuilder.addProblemAtAccessors(message);
+        bytes = synthesizeSourceForMissingFile(libraryBuilder.importUri, null);
       } else if (!fileUri.hasScheme) {
         target.benchmarker?.endSubdivide();
         return internalProblem(
             templateInternalProblemUriMissingScheme.withArguments(fileUri),
             -1,
-            library.importUri);
+            libraryBuilder.importUri);
       } else if (fileUri.isScheme(SourceLibraryBuilder.MALFORMED_URI_SCHEME)) {
-        library.addProblemAtAccessors(messageExpectedUri);
-        bytes = synthesizeSourceForMissingFile(library.importUri, null);
+        libraryBuilder.addProblemAtAccessors(messageExpectedUri);
+        bytes = synthesizeSourceForMissingFile(libraryBuilder.importUri, null);
       }
       if (bytes != null) {
         Uint8List zeroTerminatedBytes = new Uint8List(bytes.length + 1);
@@ -857,8 +857,9 @@
       } on FileSystemException catch (e) {
         Message message =
             templateCantReadFile.withArguments(fileUri, e.message);
-        library.addProblemAtAccessors(message);
-        rawBytes = synthesizeSourceForMissingFile(library.importUri, message);
+        libraryBuilder.addProblemAtAccessors(message);
+        rawBytes =
+            synthesizeSourceForMissingFile(libraryBuilder.importUri, message);
       }
       Uint8List zeroTerminatedBytes = new Uint8List(rawBytes.length + 1);
       zeroTerminatedBytes.setRange(0, rawBytes.length, rawBytes);
@@ -872,36 +873,38 @@
         configuration: new ScannerConfiguration(
             enableTripleShift: target.isExperimentEnabledInLibraryByVersion(
                 ExperimentalFlag.tripleShift,
-                library.importUri,
-                library.packageLanguageVersion.version),
+                libraryBuilder.importUri,
+                libraryBuilder.packageLanguageVersion.version),
             enableExtensionMethods:
                 target.isExperimentEnabledInLibraryByVersion(
                     ExperimentalFlag.extensionMethods,
-                    library.importUri,
-                    library.packageLanguageVersion.version),
+                    libraryBuilder.importUri,
+                    libraryBuilder.packageLanguageVersion.version),
             enableNonNullable: target.isExperimentEnabledInLibraryByVersion(
                 ExperimentalFlag.nonNullable,
-                library.importUri,
-                library.packageLanguageVersion.version),
-            forAugmentationLibrary: library.isAugmentation),
+                libraryBuilder.importUri,
+                libraryBuilder.packageLanguageVersion.version),
+            forAugmentationLibrary: libraryBuilder.isAugmentation),
         languageVersionChanged:
             (Scanner scanner, LanguageVersionToken version) {
       if (!suppressLexicalErrors) {
-        library.registerExplicitLanguageVersion(
+        libraryBuilder.registerExplicitLanguageVersion(
             new Version(version.major, version.minor),
             offset: version.offset,
             length: version.length);
       }
       scanner.configuration = new ScannerConfiguration(
-          enableTripleShift: library.enableTripleShiftInLibrary,
-          enableExtensionMethods: library.enableExtensionMethodsInLibrary,
-          enableNonNullable: library.isNonNullableByDefault);
+          enableTripleShift:
+              libraryBuilder.libraryFeatures.tripleShift.isEnabled,
+          enableExtensionMethods:
+              libraryBuilder.libraryFeatures.extensionMethods.isEnabled,
+          enableNonNullable: libraryBuilder.isNonNullableByDefault);
     });
     Token token = result.tokens;
     if (!suppressLexicalErrors) {
       List<int> source = getSource(bytes);
-      Uri importUri = library.importUri;
-      if (library.isPatch) {
+      Uri importUri = libraryBuilder.importUri;
+      if (libraryBuilder.isPatch) {
         // For patch files we create a "fake" import uri.
         // We cannot use the import uri from the patched library because
         // several different files would then have the same import uri,
@@ -910,19 +913,19 @@
         // represented several files?
         List<String> newPathSegments =
             new List<String>.of(importUri.pathSegments);
-        newPathSegments.add(library.fileUri.pathSegments.last);
+        newPathSegments.add(libraryBuilder.fileUri.pathSegments.last);
         newPathSegments[0] = "${newPathSegments[0]}-patch";
         importUri = importUri.replace(pathSegments: newPathSegments);
       }
       target.addSourceInformation(
-          importUri, library.fileUri, result.lineStarts, source);
+          importUri, libraryBuilder.fileUri, result.lineStarts, source);
     }
-    library.issuePostponedProblems();
-    library.markLanguageVersionFinal();
+    libraryBuilder.issuePostponedProblems();
+    libraryBuilder.markLanguageVersionFinal();
     while (token is ErrorToken) {
       if (!suppressLexicalErrors) {
         ErrorToken error = token;
-        library.addProblem(error.assertionMessage, offsetForToken(token),
+        libraryBuilder.addProblem(error.assertionMessage, offsetForToken(token),
             lengthForToken(token), fileUri);
       }
       token = token.next!;
@@ -974,7 +977,7 @@
   }
 
   void registerConstructorToBeInferred(
-      Constructor constructor, DeclaredSourceConstructorBuilder builder) {
+      Constructor constructor, SourceConstructorBuilder builder) {
     _typeInferenceEngine!.toBeInferred[constructor] = builder;
   }
 
@@ -1438,10 +1441,7 @@
     /// [ClassBuilder]s for the macro classes.
     Map<Uri, List<ClassBuilder>> macroLibraries = {};
 
-    /// Libraries containing precompiled macro classes.
-    Set<Uri> precompiledMacroLibraries = {};
-
-    Map<MacroClass, Uri> precompiledMacroUris =
+    Map<Uri, Uri> precompiledMacroUris =
         target.context.options.precompiledMacroUris;
 
     for (LibraryBuilder libraryBuilder in libraryBuilders) {
@@ -1449,17 +1449,14 @@
       while (iterator.moveNext()) {
         Builder builder = iterator.current;
         if (builder is ClassBuilder && builder.isMacro) {
-          Uri libraryUri = builder.library.importUri;
-          MacroClass macroClass = new MacroClass(libraryUri, builder.name);
-          if (!precompiledMacroUris.containsKey(macroClass)) {
+          Uri libraryUri = builder.libraryBuilder.importUri;
+          if (!precompiledMacroUris.containsKey(libraryUri)) {
             (macroLibraries[libraryUri] ??= []).add(builder);
             if (retainDataForTesting) {
               (dataForTesting!.macroDeclarationData
                       .macroDeclarations[libraryUri] ??= [])
                   .add(builder.name);
             }
-          } else {
-            precompiledMacroLibraries.add(libraryUri);
           }
         }
       }
@@ -1520,9 +1517,11 @@
     }
 
     for (LibraryBuilder builder in _builders.values) {
-      if (builder.loader != this) {
+      if (builder.importUri.isScheme("dart") && !builder.isSynthetic) {
+        // Assume the platform is precompiled.
         addPrecompiledLibrary(builder.importUri);
-      } else if (precompiledMacroLibraries.contains(builder.importUri)) {
+      } else if (precompiledMacroUris.containsKey(builder.importUri)) {
+        // The precompiled macros given are also precompiled.
         assert(
             !macroLibraries.containsKey(builder.importUri),
             "Macro library ${builder.importUri} is only partially "
@@ -1588,7 +1587,9 @@
   }
 
   Future<MacroApplications?> computeMacroApplications() async {
-    if (!enableMacros || _macroClassBuilder == null) return null;
+    if ((!enableMacros || _macroClassBuilder == null) && !forceEnableMacros) {
+      return null;
+    }
 
     Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData = {};
     for (SourceLibraryBuilder libraryBuilder in sourceLibraryBuilders) {
@@ -1700,15 +1701,21 @@
       }
     }
     if (libraryData.isNotEmpty) {
+      target.benchmarker?.beginSubdivide(
+          BenchmarkSubdivides.computeMacroApplications_macroExecutorProvider);
       MacroExecutor macroExecutor =
           await target.context.options.macroExecutorProvider();
-      Map<MacroClass, Uri> precompiledMacroUris =
+      target.benchmarker?.endSubdivide();
+
+      Map<Uri, Uri> precompiledMacroUris =
           target.context.options.precompiledMacroUris;
-      return await MacroApplications.loadMacroIds(
+      MacroApplications result = await MacroApplications.loadMacroIds(
           macroExecutor,
           precompiledMacroUris,
           libraryData,
-          dataForTesting?.macroApplicationData);
+          dataForTesting?.macroApplicationData,
+          target.benchmarker);
+      return result;
     }
     return null;
   }
@@ -1793,7 +1800,7 @@
   /// found.
   void checkObjectClassHierarchy(ClassBuilder objectClass) {
     if (objectClass is SourceClassBuilder &&
-        objectClass.library.loader == this) {
+        objectClass.libraryBuilder.loader == this) {
       if (objectClass.supertypeBuilder != null) {
         objectClass.supertypeBuilder = null;
         objectClass.addProblem(
@@ -1896,7 +1903,7 @@
   }
 
   bool checkEnumSupertypeIsDenylisted(SourceClassBuilder cls) {
-    if (!cls.library.enableEnhancedEnumsInLibrary) {
+    if (!cls.libraryBuilder.libraryFeatures.enhancedEnums.isEnabled) {
       cls.addProblem(
           templateEnumSupertypeOfNonAbstractClass.withArguments(cls.name),
           cls.charOffset,
@@ -1919,7 +1926,7 @@
       if (supertype is SourceEnumBuilder) {
         cls.addProblem(templateExtendingEnum.withArguments(supertype.name),
             cls.charOffset, noLength);
-      } else if (!cls.library.mayImplementRestrictedTypes &&
+      } else if (!cls.libraryBuilder.mayImplementRestrictedTypes &&
           (denyListedClasses.contains(supertype) ||
               identical(supertype, enumClass) &&
                   checkEnumSupertypeIsDenylisted(cls))) {
@@ -1967,7 +1974,7 @@
                       aliasBuilder.fileUri, aliasBuilder.charOffset, noLength),
                 ]);
             return;
-          } else if (!cls.library.mayImplementRestrictedTypes &&
+          } else if (!cls.libraryBuilder.mayImplementRestrictedTypes &&
               denyListedClasses.contains(builder)) {
             cls.addProblem(
                 templateExtendingRestricted
@@ -2102,12 +2109,12 @@
     ticker.logMs("Computed core types");
   }
 
-  void checkSupertypes(
-      List<SourceClassBuilder> sourceClasses, Class enumClass) {
+  void checkSupertypes(List<SourceClassBuilder> sourceClasses, Class enumClass,
+      Class underscoreEnumClass) {
     for (SourceClassBuilder builder in sourceClasses) {
-      if (builder.library.loader == this && !builder.isPatch) {
-        builder.checkSupertypes(
-            coreTypes, hierarchyBuilder, enumClass, _macroClassBuilder?.cls);
+      if (builder.libraryBuilder.loader == this && !builder.isPatch) {
+        builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass,
+            underscoreEnumClass, _macroClassBuilder?.cls);
       }
     }
     ticker.logMs("Checked supertypes");
@@ -2127,6 +2134,45 @@
     }
     ticker.logMs("Checked ${overrideChecks.length} overrides");
 
+    List<Name> restrictedMemberNames = <Name>[
+      new Name("index"),
+      new Name("hashCode"),
+      new Name("=="),
+      new Name("values")
+    ];
+    List<Class?> restrictedMemberDeclarers = <Class?>[
+      (target.underscoreEnumType.declaration as ClassBuilder).cls,
+      coreTypes.objectClass,
+      coreTypes.objectClass,
+      null
+    ];
+    for (SourceClassBuilder classBuilder in sourceClasses) {
+      if (classBuilder.isEnum) {
+        for (int i = 0; i < restrictedMemberNames.length; ++i) {
+          Name name = restrictedMemberNames[i];
+          Class? declarer = restrictedMemberDeclarers[i];
+
+          Member? member = hierarchy.getDispatchTarget(classBuilder.cls, name);
+          if (member?.enclosingClass != declarer &&
+              member?.enclosingClass != classBuilder.cls &&
+              member?.isAbstract == false) {
+            classBuilder.libraryBuilder.addProblem(
+                templateEnumInheritsRestricted.withArguments(name.text),
+                classBuilder.charOffset,
+                classBuilder.name.length,
+                classBuilder.fileUri,
+                context: <LocatedMessage>[
+                  messageEnumInheritsRestrictedMember.withLocation(
+                      member!.fileUri,
+                      member.fileOffset,
+                      member.name.text.length)
+                ]);
+          }
+        }
+      }
+    }
+    ticker.logMs("Checked for restricted members inheritance in enums.");
+
     typeInferenceEngine.finishTopLevelInitializingFormals();
     ticker.logMs("Finished initializing formals");
   }
@@ -2150,7 +2196,7 @@
   void checkRedirectingFactories(List<SourceClassBuilder> sourceClasses) {
     // TODO(ahe): Move this to [ClassHierarchyBuilder].
     for (SourceClassBuilder builder in sourceClasses) {
-      if (builder.library.loader == this && !builder.isPatch) {
+      if (builder.libraryBuilder.loader == this && !builder.isPatch) {
         builder.checkRedirectingFactories(
             typeInferenceEngine.typeSchemaEnvironment);
       }
@@ -2164,7 +2210,7 @@
 
     List<Class> changedClasses = <Class>[];
     for (SourceClassBuilder builder in sourceClasses) {
-      if (builder.library.loader == this && !builder.isPatch) {
+      if (builder.libraryBuilder.loader == this && !builder.isPatch) {
         if (builder.addNoSuchMethodForwarders(target, hierarchy)) {
           changedClasses.add(builder.cls);
         }
@@ -2176,7 +2222,7 @@
 
   void checkMixins(List<SourceClassBuilder> sourceClasses) {
     for (SourceClassBuilder builder in sourceClasses) {
-      if (builder.library.loader == this && !builder.isPatch) {
+      if (builder.libraryBuilder.loader == this && !builder.isPatch) {
         Class? mixedInClass = builder.cls.mixedInClass;
         if (mixedInClass != null && mixedInClass.isMixinDeclaration) {
           builder.checkMixinApplication(hierarchy, coreTypes);
@@ -2187,12 +2233,12 @@
   }
 
   void buildOutlineExpressions(ClassHierarchy classHierarchy,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     List<DelayedActionPerformer> delayedActionPerformers =
         <DelayedActionPerformer>[];
     for (SourceLibraryBuilder library in sourceLibraryBuilders) {
       library.buildOutlineExpressions(
-          classHierarchy, synthesizedFunctionNodes, delayedActionPerformers);
+          classHierarchy, delayedDefaultValueCloners, delayedActionPerformers);
     }
 
     target.benchmarker
@@ -2478,9 +2524,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_member_builder.dart b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
index 9b8a08d..429809d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
@@ -26,17 +26,15 @@
   MemberDataForTesting? get dataForTesting;
 
   @override
-  SourceLibraryBuilder get library;
+  SourceLibraryBuilder get libraryBuilder;
 
   /// Builds the core AST structures for this member as needed for the outline.
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f);
+  void buildMembers(void Function(Member, BuiltMemberKind) f);
 
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes);
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners);
 
   /// Checks the variance of type parameters [sourceClassBuilder] used in the
   /// signature of this member.
@@ -62,8 +60,7 @@
       retainDataForTesting ? new MemberDataForTesting() : null;
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
     assert(false, "Unexpected call to $runtimeType.buildMembers.");
   }
 
@@ -91,7 +88,8 @@
         super(parent, charOffset, fileUri);
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
   bool get isRedirectingGenerativeConstructor => false;
 
@@ -131,10 +129,9 @@
 
   @override
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {}
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {}
 
   @override
   StringBuffer printOn(StringBuffer buffer) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 5695450..89731b6 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -104,7 +104,7 @@
           isExtensionMember: true,
           reference: _tearOffReference,
           fileUri: fileUri)
-        ..isNonNullableByDefault = library.isNonNullableByDefault;
+        ..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault;
     }
   }
 
@@ -229,9 +229,8 @@
   Iterable<Member> get exportedMembers => [procedure];
 
   @override
-  void buildMembers(
-      SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
-    Member member = build(library);
+  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+    Member member = build();
     if (isExtensionMethod) {
       switch (kind) {
         case ProcedureKind.Method:
@@ -259,8 +258,8 @@
   }
 
   @override
-  Procedure build(SourceLibraryBuilder libraryBuilder) {
-    buildFunction(libraryBuilder);
+  Procedure build() {
+    buildFunction();
     _procedure.function.fileOffset = charOpenParenOffset;
     _procedure.function.fileEndOffset = _procedure.fileEndOffset;
     _procedure.isAbstract = isAbstract;
@@ -302,8 +301,8 @@
   ///       return (S s, Y y) => E|method<T, S>(#this, s, y);
   ///     }
   ///
-  void _buildExtensionTearOff(
-      SourceLibraryBuilder libraryBuilder, ExtensionBuilder extensionBuilder) {
+  void _buildExtensionTearOff(SourceLibraryBuilder sourceLibraryBuilder,
+      ExtensionBuilder extensionBuilder) {
     assert(
         _extensionTearOff != null, "No extension tear off created for $this.");
 
@@ -418,7 +417,8 @@
           typeParameters: tearOffTypeParameters,
           positionalParameters: [extensionThis],
           requiredParameterCount: 1,
-          returnType: closure.function.computeFunctionType(library.nonNullable))
+          returnType:
+              closure.function.computeFunctionType(libraryBuilder.nonNullable))
         ..fileOffset = fileOffset
         ..fileEndOffset = fileEndOffset)
       ..fileUri = fileUri
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 b932aa9..f6fd8b7 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
@@ -7,37 +7,27 @@
 import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
-
-import 'package:kernel/type_algebra.dart'
-    show FreshTypeParameters, getFreshTypeParameters;
-
 import 'package:kernel/type_environment.dart';
 
-import '../fasta_codes.dart'
-    show noLength, templateCyclicTypedef, templateTypeArgumentMismatch;
-
-import '../problems.dart' show unhandled;
-import '../scope.dart';
-
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/fixed_type_builder.dart';
-import '../builder/formal_parameter_builder.dart';
 import '../builder/function_type_builder.dart';
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../builder/metadata_builder.dart';
 import '../builder/named_type_builder.dart';
-import '../builder/type_builder.dart';
 import '../builder/type_alias_builder.dart';
+import '../builder/type_builder.dart';
 import '../builder/type_declaration_builder.dart';
 import '../builder/type_variable_builder.dart';
-
+import '../fasta_codes.dart'
+    show noLength, templateCyclicTypedef, templateTypeArgumentMismatch;
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/kernel_helper.dart';
-
+import '../problems.dart' show unhandled;
+import '../scope.dart';
 import '../util/helpers.dart';
-
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
@@ -75,7 +65,8 @@
         super(metadata, name, parent, charOffset);
 
   @override
-  SourceLibraryBuilder get library => super.library as SourceLibraryBuilder;
+  SourceLibraryBuilder get libraryBuilder =>
+      super.libraryBuilder as SourceLibraryBuilder;
 
   @override
   List<TypeVariableBuilder>? get typeVariables => _typeVariables;
@@ -96,37 +87,13 @@
         typeDeclarationBuilder.isNullClass;
   }
 
-  Typedef build(SourceLibraryBuilder libraryBuilder) {
+  Typedef build() {
     typedef.type ??= buildThisType();
 
     TypeBuilder? type = this.type;
-    if (type is FunctionTypeBuilder) {
-      List<TypeParameter> typeParameters = new List<TypeParameter>.generate(
-          type.typeVariables?.length ?? 0,
-          (int i) => type.typeVariables![i].parameter,
-          growable: false);
-      FreshTypeParameters freshTypeParameters =
-          getFreshTypeParameters(typeParameters);
-      for (int i = 0; i < freshTypeParameters.freshTypeParameters.length; i++) {
-        TypeParameter typeParameter =
-            freshTypeParameters.freshTypeParameters[i];
-        typedef.typeParametersOfFunctionType
-            .add(typeParameter..parent = typedef);
-      }
-
-      if (type.formals != null) {
-        for (FormalParameterBuilder formal in type.formals!) {
-          VariableDeclaration parameter = formal.build(libraryBuilder, 0);
-          parameter.type = freshTypeParameters.substitute(parameter.type);
-          if (formal.isNamed) {
-            typedef.namedParameters.add(parameter);
-          } else {
-            typedef.positionalParameters.add(parameter);
-          }
-          parameter.parent = typedef;
-        }
-      }
-    } else if (type is NamedTypeBuilder || type is FixedTypeBuilder) {
+    if (type is FunctionTypeBuilder ||
+        type is NamedTypeBuilder ||
+        type is FixedTypeBuilder) {
       // No error, but also no additional setup work.
       // ignore: unnecessary_null_comparison
     } else if (type != null) {
@@ -141,7 +108,7 @@
     if (thisType != null) {
       if (identical(thisType, pendingTypeAliasMarker)) {
         thisType = cyclicTypeAliasMarker;
-        library.addProblem(templateCyclicTypedef.withArguments(name),
+        libraryBuilder.addProblem(templateCyclicTypedef.withArguments(name),
             charOffset, noLength, fileUri);
         return const InvalidType();
       } else if (identical(thisType, cyclicTypeAliasMarker)) {
@@ -156,14 +123,23 @@
     TypeBuilder? type = this.type;
     // ignore: unnecessary_null_comparison
     if (type != null) {
-      DartType builtType =
-          type.build(library, origin: thisTypedefType(typedef, library));
+      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) {
           for (TypeVariableBuilder tv in typeVariables!) {
             // Follow bound in order to find all cycles
-            tv.bound?.build(library);
+            tv.bound?.build(libraryBuilder);
           }
         }
         if (identical(thisType, cyclicTypeAliasMarker)) {
@@ -204,7 +180,7 @@
         // At this point, [parent] should be a [SourceLibraryBuilder] because
         // otherwise it's a compiled library loaded from a dill file, and the
         // bounds should have been assigned.
-        library.registerPendingNullability(
+        libraryBuilder.registerPendingNullability(
             _typeVariables![i].fileUri!,
             _typeVariables![i].charOffset,
             asTypeArguments[i] as TypeParameterType);
@@ -248,39 +224,38 @@
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
-    library.checkBoundsInTypeParameters(
+    libraryBuilder.checkBoundsInTypeParameters(
         typeEnvironment, typedef.typeParameters, fileUri);
-    library.checkBoundsInType(
+    libraryBuilder.checkBoundsInType(
         typedef.type!, typeEnvironment, fileUri, type?.charOffset ?? charOffset,
         allowSuperBounded: false);
   }
 
   void buildOutlineExpressions(
-      SourceLibraryBuilder library,
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    MetadataBuilder.buildAnnotations(
-        typedef, metadata, library, null, null, fileUri, library.scope);
+      List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
+    MetadataBuilder.buildAnnotations(typedef, metadata, libraryBuilder, null,
+        null, fileUri, libraryBuilder.scope);
     if (typeVariables != null) {
       for (int i = 0; i < typeVariables!.length; i++) {
         typeVariables![i].buildOutlineExpressions(
-            library,
+            libraryBuilder,
             null,
             null,
             classHierarchy,
             delayedActionPerformers,
-            computeTypeParameterScope(library.scope));
+            computeTypeParameterScope(libraryBuilder.scope));
       }
     }
     _tearOffDependencies?.forEach((Procedure tearOff, Member target) {
       InterfaceType targetType = typedef.type as InterfaceType;
-      synthesizedFunctionNodes.add(new SynthesizedFunctionNode(
+      delayedDefaultValueCloners.add(new DelayedDefaultValueCloner(
           new Map<TypeParameter, DartType>.fromIterables(
               target.enclosingClass!.typeParameters, targetType.typeArguments),
           target.function!,
           tearOff.function,
-          libraryBuilder: library));
+          libraryBuilder: libraryBuilder));
     });
   }
 
@@ -318,7 +293,7 @@
             target = builder.readTarget!;
           }
           Name targetName =
-              new Name(constructorName, declaration.library.library);
+              new Name(constructorName, declaration.libraryBuilder.library);
           Reference? tearOffReference;
           if (library.referencesFromIndexed != null) {
             tearOffReference = library.referencesFromIndexed!
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
index 3e8326c..30f281c 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart
@@ -12,6 +12,7 @@
 
 import 'package:kernel/ast.dart';
 
+import '../../api_prototype/experimental_flags.dart';
 import '../fasta_codes.dart';
 
 import '../problems.dart' as problems
@@ -22,6 +23,8 @@
 abstract class StackListenerImpl extends StackListener {
   SourceLibraryBuilder get libraryBuilder;
 
+  LibraryFeatures get libraryFeatures => libraryBuilder.libraryFeatures;
+
   AsyncMarker asyncMarkerFromTokens(Token? asyncToken, Token? starToken) {
     if (asyncToken == null || identical(asyncToken.stringValue, "sync")) {
       if (starToken == null) {
@@ -75,32 +78,32 @@
     assert(!libraryBuilder.isNonNullableByDefault);
     // ignore: unnecessary_null_comparison
     assert(token != null);
-    if (libraryBuilder.enableNonNullableInLibrary) {
+    if (libraryFeatures.nonNullable.isSupported) {
       if (libraryBuilder.languageVersion.isExplicit) {
         addProblem(
-            templateNonNullableOptOutExplicit.withArguments(
-                libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+            templateNullSafetyOptOutExplicit.withArguments(
+                libraryFeatures.nonNullable.enabledVersion.toText()),
             token.charOffset,
             token.charCount,
             context: <LocatedMessage>[
-              messageNonNullableOptOutComment.withLocation(
+              messageNullSafetyOptOutComment.withLocation(
                   libraryBuilder.languageVersion.fileUri!,
                   libraryBuilder.languageVersion.charOffset,
                   libraryBuilder.languageVersion.charCount)
             ]);
       } else {
         addProblem(
-            templateNonNullableOptOutImplicit.withArguments(
-                libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+            templateNullSafetyOptOutImplicit.withArguments(
+                libraryFeatures.nonNullable.enabledVersion.toText()),
             token.charOffset,
             token.charCount);
       }
     } else {
       if (libraryBuilder.languageVersion.version <
-          libraryBuilder.enableNonNullableVersionInLibrary) {
+          libraryFeatures.nonNullable.enabledVersion) {
         addProblem(
-            templateExperimentDisabledInvalidLanguageVersion.withArguments(
-                libraryBuilder.enableNonNullableVersionInLibrary.toText()),
+            templateNullSafetyDisabledInvalidLanguageVersion.withArguments(
+                libraryFeatures.nonNullable.enabledVersion.toText()),
             token.offset,
             noLength);
       } else {
@@ -110,6 +113,18 @@
     }
   }
 
+  /// Reports an error if [feature] is not enabled, using [charOffset] and
+  /// [length] for the location of the message.
+  ///
+  /// Return `true` if the [feature] is not enabled.
+  bool reportIfNotEnabled(LibraryFeature feature, int charOffset, int length) {
+    if (!feature.isEnabled) {
+      libraryBuilder.reportFeatureNotEnabled(feature, uri, charOffset, length);
+      return true;
+    }
+    return false;
+  }
+
   void reportErrorIfNullableType(Token? questionMark) {
     if (questionMark != null) {
       reportMissingNonNullableSupport(questionMark);
diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
index 9a81d93..1f482cb 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -16,6 +16,7 @@
 
 import '../builder/formal_parameter_builder.dart' as type;
 import '../builder/metadata_builder.dart' as type;
+import '../builder/mixin_application_builder.dart' as type;
 import '../builder/type_builder.dart' as type;
 import '../builder/type_variable_builder.dart' as type;
 
@@ -69,6 +70,11 @@
   static const ValueKind Initializer =
       const SingleValueKind<type.Initializer>();
   static const ValueKind MethodBody = const SingleValueKind<type.MethodBody>();
+  static const ValueKind MixinApplicationBuilder =
+      const SingleValueKind<type.MixinApplicationBuilder>();
+  static const ValueKind MixinApplicationBuilderOrNull =
+      const SingleValueKind<type.MixinApplicationBuilder>(
+          NullValue.MixinApplicationBuilder);
   static const ValueKind Modifiers =
       const SingleValueKind<List<type.Modifier>>();
   static const ValueKind ModifiersOrNull =
@@ -116,6 +122,8 @@
       const SingleValueKind<type.TypeBuilder>();
   static const ValueKind TypeBuilderOrNull =
       const SingleValueKind<type.TypeBuilder>(NullValue.TypeBuilder);
+  static const ValueKind TypeBuilderList =
+      const SingleValueKind<List<type.TypeBuilder>>();
   static const ValueKind TypeBuilderListOrNull =
       const SingleValueKind<List<type.TypeBuilder>>(NullValue.TypeBuilderList);
   static const ValueKind TypeVariableListOrNull =
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 5ccc48d..4d46072 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -65,8 +65,12 @@
               computeFutureValueType(inferrer.coreTypes, declaredReturnType);
         }
       } else {
-        returnContext = inferrer.wrapFutureOrType(
-            inferrer.typeSchemaEnvironment.flatten(returnContext));
+        DartType flattenedType =
+            inferrer.typeSchemaEnvironment.flatten(returnContext);
+        returnContext = inferrer.wrapFutureOrType(flattenedType);
+        if (!needToInferReturnType) {
+          futureValueType = flattenedType;
+        }
       }
       return new _AsyncClosureContext(returnContext, declaredReturnType,
           needToInferReturnType, futureValueType);
@@ -326,7 +330,7 @@
         // No explicit return and the function doesn't complete normally; that
         // is, it throws.
         actualReturnedType =
-            NeverType.fromNullability(inferrer.library.nonNullable);
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable);
       }
       // Use the types seen from the explicit return statements.
       for (int i = 0; i < _returnStatements!.length; i++) {
@@ -344,7 +348,7 @@
         } else {
           actualReturnedType = inferrer.typeSchemaEnvironment
               .getStandardUpperBound(
-                  actualReturnedType, type, inferrer.library.library);
+                  actualReturnedType, type, inferrer.libraryBuilder.library);
         }
       }
 
@@ -383,7 +387,7 @@
           } else {
             actualReturnedType = inferrer.typeSchemaEnvironment
                 .getStandardUpperBound(
-                    actualReturnedType, type, inferrer.library.library);
+                    actualReturnedType, type, inferrer.libraryBuilder.library);
           }
         }
       } else if (hasImplicitReturn) {
@@ -413,8 +417,8 @@
       }
     }
 
-    return _inferredReturnType =
-        demoteTypeInLibrary(inferredReturnType, inferrer.library.library);
+    return _inferredReturnType = demoteTypeInLibrary(
+        inferredReturnType, inferrer.libraryBuilder.library);
   }
 
   @override
@@ -432,7 +436,7 @@
       returnType = _declaredReturnType;
     }
     if (!inferrer.isTopLevel &&
-        inferrer.library.isNonNullableByDefault &&
+        inferrer.libraryBuilder.isNonNullableByDefault &&
         !containsInvalidType(returnType) &&
         returnType.isPotentiallyNonNullable &&
         inferrer.flowAnalysis.isReachable) {
@@ -443,7 +447,7 @@
           .wrapInProblem(
               new NullLiteral()..fileOffset = fileOffset,
               templateImplicitReturnNull.withArguments(
-                  returnType, inferrer.library.isNonNullableByDefault),
+                  returnType, inferrer.libraryBuilder.isNonNullableByDefault),
               fileOffset,
               noLength))
         ..fileOffset = fileOffset;
@@ -707,7 +711,7 @@
       DartType unfuturedExpectedType =
           inferrer.typeSchemaEnvironment.flatten(contextType);
       DartType futuredExpectedType = inferrer.wrapFutureType(
-          unfuturedExpectedType, inferrer.library.nonNullable);
+          unfuturedExpectedType, inferrer.libraryBuilder.nonNullable);
       if (inferrer.isAssignable(unfuturedExpectedType, expressionType)) {
         contextType = unfuturedExpectedType;
       } else if (inferrer.isAssignable(futuredExpectedType, expressionType)) {
@@ -732,7 +736,8 @@
       } else {
         // No explicit return and the function doesn't complete normally; that
         // is, it throws.
-        inferredType = NeverType.fromNullability(inferrer.library.nonNullable);
+        inferredType =
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable);
       }
       // Use the types seen from the explicit return statements.
       for (int i = 0; i < _returnStatements!.length; i++) {
@@ -743,7 +748,7 @@
           inferredType = unwrappedType;
         } else {
           inferredType = inferrer.typeSchemaEnvironment.getStandardUpperBound(
-              inferredType, unwrappedType, inferrer.library.library);
+              inferredType, unwrappedType, inferrer.libraryBuilder.library);
         }
       }
 
@@ -767,7 +772,7 @@
       }
       inferredType = inferrer.wrapFutureType(
           inferrer.typeSchemaEnvironment.flatten(inferredType),
-          inferrer.library.nonNullable);
+          inferrer.libraryBuilder.nonNullable);
     } else {
       if (_returnStatements!.isNotEmpty) {
         // Use the types seen from the explicit return statements.
@@ -789,7 +794,7 @@
             inferredType = unwrappedType;
           } else {
             inferredType = inferrer.typeSchemaEnvironment.getStandardUpperBound(
-                inferredType, unwrappedType, inferrer.library.library);
+                inferredType, unwrappedType, inferrer.libraryBuilder.library);
           }
         }
       } else if (hasImplicitReturn) {
@@ -800,8 +805,8 @@
         // that is, it throws.
         inferredType = const NullType();
       }
-      inferredType =
-          inferrer.wrapFutureType(inferredType!, inferrer.library.nonNullable);
+      inferredType = inferrer.wrapFutureType(
+          inferredType!, inferrer.libraryBuilder.nonNullable);
 
       if (!inferrer.typeSchemaEnvironment.isSubtypeOf(
           inferredType, _returnContext, SubtypeCheckMode.withNullabilities)) {
@@ -814,6 +819,8 @@
     if (inferrer.isNonNullableByDefault) {
       futureValueType =
           computeFutureValueType(inferrer.coreTypes, inferredType);
+    } else {
+      futureValueType = inferrer.typeSchemaEnvironment.flatten(inferredType);
     }
     if (!inferrer.isTopLevel) {
       for (int i = 0; i < _returnStatements!.length; ++i) {
@@ -823,7 +830,7 @@
     }
 
     return _inferredReturnType =
-        demoteTypeInLibrary(inferredType, inferrer.library.library);
+        demoteTypeInLibrary(inferredType, inferrer.libraryBuilder.library);
   }
 
   @override
@@ -842,7 +849,7 @@
     }
     returnType = inferrer.typeSchemaEnvironment.flatten(returnType);
     if (!inferrer.isTopLevel &&
-        inferrer.library.isNonNullableByDefault &&
+        inferrer.libraryBuilder.isNonNullableByDefault &&
         !containsInvalidType(returnType) &&
         returnType.isPotentiallyNonNullable &&
         inferrer.flowAnalysis.isReachable) {
@@ -853,7 +860,7 @@
           .wrapInProblem(
               new NullLiteral()..fileOffset = fileOffset,
               templateImplicitReturnNull.withArguments(
-                  returnType, inferrer.library.isNonNullableByDefault),
+                  returnType, inferrer.libraryBuilder.isNonNullableByDefault),
               fileOffset,
               noLength))
         ..fileOffset = fileOffset;
@@ -922,8 +929,10 @@
   void handleYield(TypeInferrerImpl inferrer, YieldStatement node,
       ExpressionInferenceResult expressionResult) {
     DartType expectedType = node.isYieldStar
-        ? inferrer.wrapType(_yieldElementContext,
-            inferrer.coreTypes.iterableClass, inferrer.library.nonNullable)
+        ? inferrer.wrapType(
+            _yieldElementContext,
+            inferrer.coreTypes.iterableClass,
+            inferrer.libraryBuilder.nonNullable)
         : _yieldElementContext;
     Expression expression = inferrer
         .ensureAssignableResult(expectedType, expressionResult,
@@ -961,7 +970,7 @@
         } else {
           inferredElementType = inferrer.typeSchemaEnvironment
               .getStandardUpperBound(
-                  inferredElementType, type, inferrer.library.library);
+                  inferredElementType, type, inferrer.libraryBuilder.library);
         }
       }
     } else if (hasImplicitReturn) {
@@ -972,14 +981,14 @@
       // it throws.
       if (inferrer.isNonNullableByDefault) {
         inferredElementType =
-            NeverType.fromNullability(inferrer.library.nonNullable);
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable);
       } else {
         inferredElementType = const NullType();
       }
     }
 
     DartType inferredType = inferrer.wrapType(inferredElementType!,
-        inferrer.coreTypes.iterableClass, inferrer.library.nonNullable);
+        inferrer.coreTypes.iterableClass, inferrer.libraryBuilder.nonNullable);
 
     if (!inferrer.typeSchemaEnvironment.isSubtypeOf(inferredType,
         _yieldElementContext, SubtypeCheckMode.withNullabilities)) {
@@ -988,7 +997,7 @@
       inferredType = inferrer.computeGreatestClosure2(_declaredReturnType);
     }
 
-    return demoteTypeInLibrary(inferredType, inferrer.library.library);
+    return demoteTypeInLibrary(inferredType, inferrer.libraryBuilder.library);
   }
 
   @override
@@ -1055,7 +1064,7 @@
       ExpressionInferenceResult expressionResult) {
     DartType expectedType = node.isYieldStar
         ? inferrer.wrapType(_yieldElementContext,
-            inferrer.coreTypes.streamClass, inferrer.library.nonNullable)
+            inferrer.coreTypes.streamClass, inferrer.libraryBuilder.nonNullable)
         : _yieldElementContext;
 
     Expression expression = inferrer
@@ -1092,8 +1101,8 @@
           inferredElementType = elementType;
         } else {
           inferredElementType = inferrer.typeSchemaEnvironment
-              .getStandardUpperBound(
-                  inferredElementType, elementType, inferrer.library.library);
+              .getStandardUpperBound(inferredElementType, elementType,
+                  inferrer.libraryBuilder.library);
         }
       }
     } else if (hasImplicitReturn) {
@@ -1104,14 +1113,14 @@
       // it throws.
       if (inferrer.isNonNullableByDefault) {
         inferredElementType =
-            NeverType.fromNullability(inferrer.library.nonNullable);
+            NeverType.fromNullability(inferrer.libraryBuilder.nonNullable);
       } else {
         inferredElementType = const NullType();
       }
     }
 
     DartType inferredType = inferrer.wrapType(inferredElementType!,
-        inferrer.coreTypes.streamClass, inferrer.library.nonNullable);
+        inferrer.coreTypes.streamClass, inferrer.libraryBuilder.nonNullable);
 
     if (!inferrer.typeSchemaEnvironment.isSubtypeOf(inferredType,
         _yieldElementContext, SubtypeCheckMode.withNullabilities)) {
@@ -1120,7 +1129,7 @@
       inferredType = inferrer.computeGreatestClosure2(_declaredReturnType);
     }
 
-    return demoteTypeInLibrary(inferredType, inferrer.library.library);
+    return demoteTypeInLibrary(inferredType, inferrer.libraryBuilder.library);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 3459623..0327d2c 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -113,14 +113,14 @@
   /// This is represented as a map from a constructor to its library
   /// builder because the builder is used to report errors due to cyclic
   /// inference dependencies.
-  final Map<Constructor, DeclaredSourceConstructorBuilder> toBeInferred = {};
+  final Map<Constructor, SourceConstructorBuilder> toBeInferred = {};
 
   /// A map containing constructors in the process of being inferred.
   ///
   /// This is used to detect cyclic inference dependencies.  It is represented
   /// as a map from a constructor to its library builder because the builder
   /// is used to report errors.
-  final Map<Constructor, DeclaredSourceConstructorBuilder> beingInferred = {};
+  final Map<Constructor, SourceConstructorBuilder> beingInferred = {};
 
   final Map<Member, TypeDependency> typeDependencies = {};
 
@@ -144,7 +144,7 @@
   void finishTopLevelInitializingFormals() {
     // Field types have all been inferred so we don't need to guard against
     // cyclic dependency.
-    for (DeclaredSourceConstructorBuilder builder in toBeInferred.values) {
+    for (SourceConstructorBuilder builder in toBeInferred.values) {
       builder.inferFormalTypes(typeSchemaEnvironment);
     }
     toBeInferred.clear();
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 9f5f948..b99f8f5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -15,6 +15,7 @@
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 
+import '../../api_prototype/experimental_flags.dart';
 import '../../base/instrumentation.dart'
     show
         Instrumentation,
@@ -101,7 +102,7 @@
 /// This class describes the interface for use by clients of type inference
 /// (e.g. BodyBuilder).  Derived classes should derive from [TypeInferrerImpl].
 abstract class TypeInferrer {
-  SourceLibraryBuilder get library;
+  SourceLibraryBuilder get libraryBuilder;
 
   /// Gets the [TypeSchemaEnvironment] being used for type inference.
   TypeSchemaEnvironment get typeSchemaEnvironment;
@@ -188,12 +189,12 @@
   @override
   late final FlowAnalysis<TreeNode, Statement, Expression, VariableDeclaration,
           DartType> flowAnalysis =
-      library.isNonNullableByDefault
+      libraryBuilder.isNonNullableByDefault
           ? new FlowAnalysis(
               new TypeOperationsCfe(engine.typeSchemaEnvironment),
               assignedVariables,
               respectImplicitlyTypedVarInitializers:
-                  library.enableConstructorTearOffsInLibrary)
+                  libraryFeatures.constructorTearoffs.isEnabled)
           : new FlowAnalysis.legacy(
               new TypeOperationsCfe(engine.typeSchemaEnvironment),
               assignedVariables);
@@ -221,7 +222,7 @@
   final InterfaceType? thisType;
 
   @override
-  final SourceLibraryBuilder library;
+  final SourceLibraryBuilder libraryBuilder;
 
   @override
   InferenceHelper? helper;
@@ -230,12 +231,18 @@
   /// inside a closure.
   ClosureContext? closureContext;
 
-  TypeInferrerImpl(this.engine, this.uriForInstrumentation, bool topLevel,
-      this.thisType, this.library, this.assignedVariables, this.dataForTesting)
+  TypeInferrerImpl(
+      this.engine,
+      this.uriForInstrumentation,
+      bool topLevel,
+      this.thisType,
+      this.libraryBuilder,
+      this.assignedVariables,
+      this.dataForTesting)
       // ignore: unnecessary_null_comparison
-      : assert(library != null),
+      : assert(libraryBuilder != null),
         unknownFunction = new FunctionType(
-            const [], const DynamicType(), library.nonNullable),
+            const [], const DynamicType(), libraryBuilder.nonNullable),
         classHierarchy = engine.classHierarchy,
         instrumentation = topLevel ? null : engine.instrumentation,
         typeSchemaEnvironment = engine.typeSchemaEnvironment,
@@ -243,9 +250,11 @@
 
   CoreTypes get coreTypes => engine.coreTypes;
 
-  bool get isNonNullableByDefault => library.isNonNullableByDefault;
+  bool get isNonNullableByDefault => libraryBuilder.isNonNullableByDefault;
 
-  NnbdMode get nnbdMode => library.loader.nnbdMode;
+  NnbdMode get nnbdMode => libraryBuilder.loader.nnbdMode;
+
+  LibraryFeatures get libraryFeatures => libraryBuilder.libraryFeatures;
 
   DartType get bottomType =>
       isNonNullableByDefault ? const NeverType.nonNullable() : const NullType();
@@ -267,12 +276,12 @@
     if (type is NullType || type is NeverType) {
       return const NullType();
     }
-    return type.withDeclaredNullability(library.nullable);
+    return type.withDeclaredNullability(libraryBuilder.nullable);
   }
 
   Expression createReachabilityError(
       int fileOffset, Message errorMessage, Message warningMessage) {
-    if (library.loader.target.context.options.warnOnReachabilityCheck &&
+    if (libraryBuilder.loader.target.context.options.warnOnReachabilityCheck &&
         // ignore: unnecessary_null_comparison
         warningMessage != null) {
       helper?.addProblem(warningMessage, fileOffset, noLength);
@@ -382,8 +391,7 @@
 
   @override
   void inferConstructorParameterTypes(Constructor target) {
-    DeclaredSourceConstructorBuilder? constructor =
-        engine.beingInferred[target];
+    SourceConstructorBuilder? constructor = engine.beingInferred[target];
     if (constructor != null) {
       // There is a cyclic dependency where inferring the types of the
       // initializing formals of a constructor required us to infer the
@@ -395,7 +403,7 @@
         // instead. However, `inferrer.helper` may be null.
         name += ".${target.name.text}";
       }
-      constructor.library.addProblem(
+      constructor.libraryBuilder.addProblem(
           templateCantInferTypeDueToCircularity.withArguments(name),
           target.fileOffset,
           name.length,
@@ -488,6 +496,7 @@
       DartType? declaredContextType,
       DartType? runtimeCheckedType,
       bool isVoidAllowed: false,
+      bool coerceExpression: true,
       Template<Message Function(DartType, DartType, bool)>? errorTemplate,
       Template<Message Function(DartType, DartType, bool)>?
           nullabilityErrorTemplate,
@@ -503,6 +512,7 @@
             declaredContextType: declaredContextType,
             runtimeCheckedType: runtimeCheckedType,
             isVoidAllowed: isVoidAllowed,
+            coerceExpression: coerceExpression,
             errorTemplate: errorTemplate,
             nullabilityErrorTemplate: nullabilityErrorTemplate,
             nullabilityNullErrorTemplate: nullabilityNullErrorTemplate,
@@ -521,6 +531,7 @@
       DartType? declaredContextType,
       DartType? runtimeCheckedType,
       bool isVoidAllowed: false,
+      bool coerceExpression: true,
       Template<Message Function(DartType, DartType, bool)>? errorTemplate,
       Template<Message Function(DartType, DartType, bool)>?
           nullabilityErrorTemplate,
@@ -572,7 +583,8 @@
         contextType, inferenceResult.inferredType,
         isNonNullableByDefault: isNonNullableByDefault,
         isVoidAllowed: isVoidAllowed,
-        isExpressionTypePrecise: preciseTypeErrorTemplate != null);
+        isExpressionTypePrecise: preciseTypeErrorTemplate != null,
+        coerceExpression: coerceExpression);
 
     if (assignabilityResult.needsTearOff) {
       TypedTearoff typedTearoff = _tearOffCall(inferenceResult.expression,
@@ -776,7 +788,8 @@
       DartType contextType, DartType expressionType,
       {required bool isNonNullableByDefault,
       required bool isVoidAllowed,
-      required bool isExpressionTypePrecise}) {
+      required bool isExpressionTypePrecise,
+      required bool coerceExpression}) {
     // ignore: unnecessary_null_comparison
     assert(isNonNullableByDefault != null);
     // ignore: unnecessary_null_comparison
@@ -788,7 +801,7 @@
     // should tear off `.call`.
     // TODO(paulberry): use resolveTypeParameter.  See findInterfaceMember.
     bool needsTearoff = false;
-    if (expressionType is InterfaceType) {
+    if (coerceExpression && expressionType is InterfaceType) {
       Class classNode = expressionType.classNode;
       Member? callMember =
           classHierarchy.getInterfaceMember(classNode, callName);
@@ -807,7 +820,7 @@
       }
     }
     ImplicitInstantiation? implicitInstantiation;
-    if (library.enableConstructorTearOffsInLibrary) {
+    if (coerceExpression && libraryFeatures.constructorTearoffs.isEnabled) {
       implicitInstantiation =
           computeImplicitInstantiation(expressionType, contextType);
       if (implicitInstantiation != null) {
@@ -861,8 +874,15 @@
       return const AssignabilityResult(AssignabilityKind.unassignablePrecise,
           needsTearOff: false);
     }
-    // Insert an implicit downcast.
-    return new AssignabilityResult(AssignabilityKind.assignableCast,
+
+    if (coerceExpression) {
+      // Insert an implicit downcast.
+      return new AssignabilityResult(AssignabilityKind.assignableCast,
+          needsTearOff: needsTearoff,
+          implicitInstantiation: implicitInstantiation);
+    }
+
+    return new AssignabilityResult(AssignabilityKind.unassignable,
         needsTearOff: needsTearoff,
         implicitInstantiation: implicitInstantiation);
   }
@@ -897,7 +917,7 @@
     List<DartType> inferredTypes =
         new List<DartType>.filled(typeParameters.length, const UnknownType());
     typeSchemaEnvironment.inferGenericFunctionOrType(null, typeParameters,
-        [onType], [receiverType], null, inferredTypes, library.library);
+        [onType], [receiverType], null, inferredTypes, libraryBuilder.library);
     return inferredTypes;
   }
 
@@ -968,7 +988,7 @@
             break;
           default:
             unhandled("${descriptor.kind}", "_findDirectExtensionMember",
-                fileOffset, library.fileUri);
+                fileOffset, libraryBuilder.fileUri);
         }
       }
     }
@@ -1025,7 +1045,7 @@
 
     ExtensionAccessCandidate? bestSoFar;
     List<ExtensionAccessCandidate> noneMoreSpecific = [];
-    library.forEachExtensionInScope((ExtensionBuilder extensionBuilder) {
+    libraryBuilder.forEachExtensionInScope((ExtensionBuilder extensionBuilder) {
       MemberBuilder? thisBuilder = extensionBuilder
           .lookupLocalMemberByName(name, setter: setter) as MemberBuilder?;
       MemberBuilder? otherBuilder = extensionBuilder.lookupLocalMemberByName(
@@ -1061,7 +1081,7 @@
           onType = inferredSubstitution
               .substituteType(extensionBuilder.extension.onType);
           List<DartType> instantiateToBoundTypeArguments = calculateBounds(
-              typeParameters, coreTypes.objectClass, library.library);
+              typeParameters, coreTypes.objectClass, libraryBuilder.library);
           Substitution instantiateToBoundsSubstitution = Substitution.fromPairs(
               typeParameters, instantiateToBoundTypeArguments);
           onTypeInstantiateToBounds = instantiateToBoundsSubstitution
@@ -1095,7 +1115,8 @@
               onType,
               onTypeInstantiateToBounds,
               target,
-              isPlatform: extensionBuilder.library.importUri.isScheme('dart'));
+              isPlatform:
+                  extensionBuilder.libraryBuilder.importUri.isScheme('dart'));
           if (noneMoreSpecific.isNotEmpty) {
             bool isMostSpecific = true;
             for (ExtensionAccessCandidate other in noneMoreSpecific) {
@@ -1211,7 +1232,7 @@
                   receiverBound,
                   isNonNullableByDefault),
               fileOffset,
-              library.fileUri);
+              libraryBuilder.fileUri);
       }
     }
 
@@ -1231,7 +1252,7 @@
       target = isReceiverTypePotentiallyNullable
           ? const ObjectAccessTarget.nullableCallFunction()
           : const ObjectAccessTarget.callFunction();
-    } else if (library.enableExtensionTypesInLibrary &&
+    } else if (libraryFeatures.extensionTypes.isEnabled &&
         receiverBound is ExtensionType) {
       target = _findDirectExtensionTypeMember(receiverBound, name, fileOffset,
           isSetter: isSetter,
@@ -1379,7 +1400,7 @@
           case ProcedureKind.Method:
           case ProcedureKind.Operator:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             List<TypeParameter> extensionTypeParameters = functionType
                 .typeParameters
                 .take(target.inferredExtensionTypeArguments.length)
@@ -1389,7 +1410,7 @@
             DartType resultType = substitution.substituteType(new FunctionType(
                 functionType.positionalParameters.skip(1).toList(),
                 functionType.returnType,
-                library.nonNullable,
+                libraryBuilder.nonNullable,
                 namedParameters: functionType.namedParameters,
                 typeParameters: functionType.typeParameters
                     .skip(target.inferredExtensionTypeArguments.length)
@@ -1402,7 +1423,7 @@
             return resultType;
           case ProcedureKind.Getter:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             List<TypeParameter> extensionTypeParameters = functionType
                 .typeParameters
                 .take(target.inferredExtensionTypeArguments.length)
@@ -1500,7 +1521,7 @@
           case ProcedureKind.Method:
           case ProcedureKind.Operator:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             if (!isNonNullableByDefault) {
               functionType = legacyErasure(functionType) as FunctionType;
             }
@@ -1545,7 +1566,7 @@
         switch (target.extensionMethodKind) {
           case ProcedureKind.Operator:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             DartType returnType = functionType.returnType;
             if (functionType.typeParameters.isNotEmpty) {
               Substitution substitution = Substitution.fromPairs(
@@ -1588,8 +1609,8 @@
         break;
       case ObjectAccessTargetKind.extensionMember:
       case ObjectAccessTargetKind.nullableExtensionMember:
-        FunctionType functionType =
-            target.member!.function!.computeFunctionType(library.nonNullable);
+        FunctionType functionType = target.member!.function!
+            .computeFunctionType(libraryBuilder.nonNullable);
         if (functionType.positionalParameters.length > index + 1) {
           DartType keyType = functionType.positionalParameters[index + 1];
           if (functionType.typeParameters.isNotEmpty) {
@@ -1652,7 +1673,7 @@
         switch (target.extensionMethodKind) {
           case ProcedureKind.Operator:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             if (functionType.positionalParameters.length >= 2) {
               DartType keyType = functionType.positionalParameters[1];
               if (functionType.typeParameters.isNotEmpty) {
@@ -1716,7 +1737,7 @@
         switch (target.extensionMethodKind) {
           case ProcedureKind.Operator:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             if (functionType.positionalParameters.length >= 3) {
               DartType indexType = functionType.positionalParameters[2];
               if (functionType.typeParameters.isNotEmpty) {
@@ -1849,7 +1870,7 @@
         switch (target.extensionMethodKind) {
           case ProcedureKind.Setter:
             FunctionType functionType = target.member!.function!
-                .computeFunctionType(library.nonNullable);
+                .computeFunctionType(libraryBuilder.nonNullable);
             List<TypeParameter> extensionTypeParameters = functionType
                 .typeParameters
                 .take(target.inferredExtensionTypeArguments.length)
@@ -1897,9 +1918,10 @@
       return const DynamicType();
     }
     if (forSyntheticVariable) {
-      return normalizeNullabilityInLibrary(initializerType, library.library);
+      return normalizeNullabilityInLibrary(
+          initializerType, libraryBuilder.library);
     } else {
-      return demoteTypeInLibrary(initializerType, library.library);
+      return demoteTypeInLibrary(initializerType, libraryBuilder.library);
     }
   }
 
@@ -2097,10 +2119,7 @@
     result =
         closureContext!.handleImplicitReturn(this, body, result, fileOffset);
     DartType? futureValueType = closureContext!.futureValueType;
-    assert(
-        !(isNonNullableByDefault &&
-            asyncMarker == AsyncMarker.Async &&
-            futureValueType == null),
+    assert(!(asyncMarker == AsyncMarker.Async && futureValueType == null),
         "No future value type computed.");
     closureContext = null;
     this.helper = null;
@@ -2164,7 +2183,7 @@
     FunctionType extensionFunctionType = new FunctionType(
         [calleeType.positionalParameters.first],
         const DynamicType(),
-        library.nonNullable,
+        libraryBuilder.nonNullable,
         requiredParameterCount: 1,
         typeParameters: calleeType.typeParameters
             .take(extensionTypeParameterCount)
@@ -2191,7 +2210,7 @@
     FunctionType targetFunctionType = new FunctionType(
         calleeType.positionalParameters.skip(1).toList(),
         calleeType.returnType,
-        library.nonNullable,
+        libraryBuilder.nonNullable,
         requiredParameterCount: calleeType.requiredParameterCount - 1,
         namedParameters: calleeType.namedParameters,
         typeParameters: targetTypeParameters);
@@ -2275,7 +2294,7 @@
     }
 
     List<VariableDeclaration>? localHoistedExpressions;
-    if (library.enableNamedArgumentsAnywhereInLibrary &&
+    if (libraryFeatures.namedArgumentsAnywhere.isEnabled &&
         arguments.argumentsOriginalOrder != null &&
         hoistedExpressions == null &&
         !isTopLevel) {
@@ -2303,7 +2322,7 @@
           null,
           typeContext,
           inferredTypes,
-          library.library);
+          libraryBuilder.library);
       substitution =
           Substitution.fromPairs(calleeTypeParameters, inferredTypes);
     } else if (explicitTypeArguments != null &&
@@ -2321,7 +2340,7 @@
     // TODO(paulberry): if we are doing top level inference and type arguments
     // were omitted, report an error.
     List<Object?> argumentsEvaluationOrder;
-    if (library.enableNamedArgumentsAnywhereInLibrary &&
+    if (libraryFeatures.namedArgumentsAnywhere.isEnabled &&
         arguments.argumentsOriginalOrder != null) {
       if (staticTarget?.isExtensionMember ?? false) {
         // Add the receiver.
@@ -2352,7 +2371,7 @@
     // vector, and none of the arguments is hoisted. That way the legacy
     // behavior is preserved.
     int hoistingEndIndex;
-    if (library.enableNamedArgumentsAnywhereInLibrary) {
+    if (libraryFeatures.namedArgumentsAnywhere.isEnabled) {
       hoistingEndIndex = argumentsEvaluationOrder.length - 1;
       for (int i = argumentsEvaluationOrder.length - 2;
           i >= 0 && hoistingEndIndex == i + 1;
@@ -2369,6 +2388,8 @@
       hoistingEndIndex = 0;
     }
 
+    List<EqualityInfo<VariableDeclaration, DartType>?>? identicalInfo =
+        isIdentical && arguments.positional.length == 2 ? [] : null;
     int positionalIndex = 0;
     int namedIndex = 0;
     for (int evaluationOrderIndex = 0;
@@ -2423,14 +2444,8 @@
           }
           Expression expression =
               _hoist(result.expression, inferredType, hoistedExpressions);
-          if (isIdentical && arguments.positional.length == 2) {
-            if (index == 0) {
-              flowAnalysis.equalityOp_rightBegin(expression, inferredType);
-            } else {
-              flowAnalysis.equalityOp_end(
-                  arguments.parent as Expression, expression, inferredType);
-            }
-          }
+          identicalInfo
+              ?.add(flowAnalysis.equalityOperand_end(expression, inferredType));
           arguments.positional[index] = expression..parent = arguments;
         }
         if (inferenceNeeded || typeChecksNeeded) {
@@ -2472,6 +2487,10 @@
         }
       }
     }
+    if (identicalInfo != null) {
+      flowAnalysis.equalityOperation_end(
+          arguments.parent as Expression, identicalInfo[0], identicalInfo[1]);
+    }
     assert(
         positionalIndex == arguments.positional.length,
         "Expected 'positionalIndex' to be ${arguments.positional.length}, "
@@ -2480,17 +2499,39 @@
         namedIndex == arguments.named.length,
         "Expected 'namedIndex' to be ${arguments.named.length}, "
         "got ${namedIndex}.");
-    if (isSpecialCasedBinaryOperator) {
-      calleeType = replaceReturnType(
-          calleeType,
-          typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator(
-              receiverType!, actualTypes![0],
-              isNonNullableByDefault: isNonNullableByDefault));
-    } else if (isSpecialCasedTernaryOperator) {
-      calleeType = replaceReturnType(
-          calleeType,
-          typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator(
-              receiverType!, actualTypes![0], actualTypes[1], library.library));
+
+    if (isSpecialCasedBinaryOperator || isSpecialCasedTernaryOperator) {
+      if (typeChecksNeeded && !identical(calleeType, unknownFunction)) {
+        LocatedMessage? argMessage = helper!.checkArgumentsForType(
+            calleeType, arguments, offset,
+            isExtensionMemberInvocation: isExtensionMemberInvocation);
+        if (argMessage != null) {
+          return new WrapInProblemInferenceResult(
+              const InvalidType(),
+              const InvalidType(),
+              argMessage.messageObject,
+              argMessage.charOffset,
+              argMessage.length,
+              helper!,
+              isInapplicable: true,
+              hoistedArguments: localHoistedExpressions);
+        }
+      }
+      if (isSpecialCasedBinaryOperator) {
+        calleeType = replaceReturnType(
+            calleeType,
+            typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator(
+                receiverType!, actualTypes![0],
+                isNonNullableByDefault: isNonNullableByDefault));
+      } else if (isSpecialCasedTernaryOperator) {
+        calleeType = replaceReturnType(
+            calleeType,
+            typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator(
+                receiverType!,
+                actualTypes![0],
+                actualTypes[1],
+                libraryBuilder.library));
+      }
     }
 
     // Check for and remove duplicated named arguments.
@@ -2546,7 +2587,7 @@
           actualTypes,
           typeContext,
           inferredTypes!,
-          library.library);
+          libraryBuilder.library);
       assert(inferredTypes.every((type) => isKnown(type)),
           "Unknown type(s) in inferred types: $inferredTypes.");
       assert(inferredTypes.every((type) => !hasPromotedTypeVariable(type)),
@@ -2591,17 +2632,23 @@
           DartType actualType = actualTypes![i];
           Expression expression;
           NamedExpression? namedExpression;
+          bool coerceExpression;
           if (i < numPositionalArgs) {
             expression = arguments.positional[positionalShift + i];
             positionalArgumentTypes.add(actualType);
+            coerceExpression = !arguments.positionalAreSuperParameters;
           } else {
             namedExpression = arguments.named[i - numPositionalArgs];
             expression = namedExpression.value;
             namedArgumentTypes
                 .add(new NamedType(namedExpression.name, actualType));
+            coerceExpression = !(arguments.namedSuperParameterNames
+                    ?.contains(namedExpression.name) ??
+                false);
           }
           expression = ensureAssignable(expectedType, actualType, expression,
               isVoidAllowed: expectedType is VoidType,
+              coerceExpression: coerceExpression,
               // TODO(johnniwinther): Specialize message for operator
               // invocations.
               errorTemplate: templateArgumentTypeNotAssignable,
@@ -2748,14 +2795,14 @@
               isNonNullableByDefault
                   ? SubtypeCheckMode.withNullabilities
                   : SubtypeCheckMode.ignoringNullabilities)) {
-            inferredType = coreTypes.objectRawType(library.nullable);
+            inferredType = coreTypes.objectRawType(libraryBuilder.nullable);
           }
         } else {
           inferredType = const DynamicType();
         }
         instrumentation?.record(uriForInstrumentation, formal.fileOffset,
             'type', new InstrumentationValueForType(inferredType));
-        formal.type = demoteTypeInLibrary(inferredType, library.library);
+        formal.type = demoteTypeInLibrary(inferredType, libraryBuilder.library);
         if (dataForTesting != null) {
           dataForTesting!.typeInferenceResult.inferredVariableTypes[formal] =
               formal.type;
@@ -2772,12 +2819,12 @@
         if ((isOptionalPositional || isOptionalNamed) &&
             formal.type.isPotentiallyNonNullable &&
             !formal.hasDeclaredInitializer) {
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateOptionalNonNullableWithoutInitializerError.withArguments(
                   formal.name!, formal.type, isNonNullableByDefault),
               formal.fileOffset,
               formal.name!.length,
-              library.importUri);
+              libraryBuilder.importUri);
         }
       }
     }
@@ -2787,12 +2834,12 @@
         VariableDeclarationImpl formal = parameter as VariableDeclarationImpl;
         // Required named parameters shouldn't have initializers.
         if (formal.isRequired && formal.hasDeclaredInitializer) {
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateRequiredNamedParameterHasDefaultValueError
                   .withArguments(formal.name!),
               formal.fileOffset,
               formal.name!.length,
-              library.importUri);
+              libraryBuilder.importUri);
         }
       }
     }
@@ -2833,8 +2880,7 @@
         this, function.body!, bodyResult, fileOffset);
     function.futureValueType = closureContext.futureValueType;
     assert(
-        !(isNonNullableByDefault &&
-            function.asyncMarker == AsyncMarker.Async &&
+        !(function.asyncMarker == AsyncMarker.Async &&
             function.futureValueType == null),
         "No future value type computed.");
 
@@ -2842,7 +2888,7 @@
       function.body = bodyResult.statement..parent = function;
     }
     this.closureContext = oldClosureContext;
-    return function.computeFunctionType(library.nonNullable);
+    return function.computeFunctionType(libraryBuilder.nonNullable);
   }
 
   @override
@@ -3037,7 +3083,7 @@
           isImplicitCall: isImplicitCall,
           isExtensionMemberInvocation: true);
       if (!isTopLevel) {
-        library.checkBoundsInStaticInvocation(
+        libraryBuilder.checkBoundsInStaticInvocation(
             staticInvocation,
             typeSchemaEnvironment,
             helper!.uri,
@@ -3185,7 +3231,7 @@
     return new FunctionType(
         new List<DartType>.filled(arguments.positional.length, type),
         type,
-        library.nonNullable,
+        libraryBuilder.nonNullable,
         namedParameters: new List<NamedType>.generate(arguments.named.length,
             (int index) => new NamedType(arguments.named[index].name, type)));
   }
@@ -3499,7 +3545,8 @@
           context: context);
     }
 
-    if (!library.loader.target.backendTarget.supportsExplicitGetterCalls) {
+    if (!libraryBuilder
+        .loader.target.backendTarget.supportsExplicitGetterCalls) {
       // TODO(johnniwinther): Remove this when dart2js/ddc supports explicit
       //  getter calls.
       Expression nullAwareAction = invocationResult.nullAwareAction;
@@ -3696,7 +3743,8 @@
           context: context);
     }
 
-    if (!library.loader.target.backendTarget.supportsExplicitGetterCalls) {
+    if (!libraryBuilder
+        .loader.target.backendTarget.supportsExplicitGetterCalls) {
       // TODO(johnniwinther): Remove this when dart2js/ddc supports explicit
       //  getter calls.
       Expression nullAwareAction = invocationResult.nullAwareAction;
@@ -3890,7 +3938,7 @@
             : null;
         actualMethodName = methodName;
       }
-      library.checkBoundsInMethodInvocation(
+      libraryBuilder.checkBoundsInMethodInvocation(
           actualReceiverType,
           typeSchemaEnvironment,
           classHierarchy,
@@ -3911,8 +3959,14 @@
     // If [arguments] were inferred, check them.
     if (!isTopLevel) {
       // We only perform checks in full inference.
-      library.checkBoundsInInstantiation(typeSchemaEnvironment, classHierarchy,
-          this, functionType, arguments, helper!.uri, fileOffset,
+      libraryBuilder.checkBoundsInInstantiation(
+          typeSchemaEnvironment,
+          classHierarchy,
+          this,
+          functionType,
+          arguments,
+          helper!.uri,
+          fileOffset,
           inferred: inferred);
     }
   }
@@ -3922,7 +3976,7 @@
     // If [arguments] were inferred, check them.
     if (!isTopLevel) {
       // We only perform checks in full inference.
-      library.checkBoundsInFunctionInvocation(
+      libraryBuilder.checkBoundsInFunctionInvocation(
           typeSchemaEnvironment,
           classHierarchy,
           this,
@@ -3985,7 +4039,7 @@
       // operator == always allows nullable arguments.
       functionType = new FunctionType([
         functionType.positionalParameters.single
-            .withDeclaredNullability(library.nullable)
+            .withDeclaredNullability(libraryBuilder.nullable)
       ], functionType.returnType, functionType.declaredNullability);
     }
     InvocationInferenceResult result = inferInvocation(
@@ -3995,7 +4049,7 @@
         isImplicitExtensionMember: false);
     DartType inferredType = result.inferredType;
     if (methodName.text == '==') {
-      inferredType = coreTypes.boolRawType(library.nonNullable);
+      inferredType = coreTypes.boolRawType(libraryBuilder.nonNullable);
     }
     _checkBoundsInMethodInvocation(
         target, receiverType, calleeType, methodName, arguments, fileOffset);
@@ -4076,8 +4130,14 @@
         List<DartType> inferredTypes = new List<DartType>.filled(
             typeParameters.length, const UnknownType());
         FunctionType instantiatedType = functionType.withoutTypeParameters;
-        typeSchemaEnvironment.inferGenericFunctionOrType(instantiatedType,
-            typeParameters, [], [], context, inferredTypes, library.library);
+        typeSchemaEnvironment.inferGenericFunctionOrType(
+            instantiatedType,
+            typeParameters,
+            [],
+            [],
+            context,
+            inferredTypes,
+            libraryBuilder.library);
         Substitution substitution =
             Substitution.fromPairs(typeParameters, inferredTypes);
         tearoffType = substitution.substituteType(instantiatedType);
@@ -4241,9 +4301,9 @@
     // return it unmodified?
     // ignore: unnecessary_null_comparison
     if (type == null) {
-      return coreTypes.futureRawType(library.nullable);
+      return coreTypes.futureRawType(libraryBuilder.nullable);
     }
-    return new FutureOrType(type, library.nonNullable);
+    return new FutureOrType(type, libraryBuilder.nonNullable);
   }
 
   DartType wrapFutureType(DartType type, Nullability nullability) {
@@ -4280,7 +4340,7 @@
         classMember = null;
       } else if (classMember.isDuplicate) {
         if (!isTopLevel) {
-          library.addProblem(
+          libraryBuilder.addProblem(
               templateDuplicatedDeclarationUse.withArguments(name.text),
               charOffset,
               name.text.length,
@@ -4290,7 +4350,7 @@
       }
     }
     Member? member = classMember?.getMember(engine.membersBuilder);
-    if (member == null && library.isPatch) {
+    if (member == null && libraryBuilder.isPatch) {
       // TODO(johnniwinther): Injected members are currently not included
       // in the class hierarchy builder.
       member ??=
@@ -4698,7 +4758,7 @@
       get flowAnalysis => impl.flowAnalysis;
 
   @override
-  SourceLibraryBuilder get library => impl.library;
+  SourceLibraryBuilder get libraryBuilder => impl.libraryBuilder;
 
   @override
   TypeSchemaEnvironment get typeSchemaEnvironment => impl.typeSchemaEnvironment;
diff --git a/pkg/front_end/lib/src/fasta/util/experiment_environment_getter.dart b/pkg/front_end/lib/src/fasta/util/experiment_environment_getter.dart
index d589065..0548ee8 100644
--- a/pkg/front_end/lib/src/fasta/util/experiment_environment_getter.dart
+++ b/pkg/front_end/lib/src/fasta/util/experiment_environment_getter.dart
@@ -4,8 +4,11 @@
 
 import 'dart:io' show Platform;
 
+const String enableIncrementalCompilerBenchmarking =
+    "DART_CFE_ENABLE_INCREMENTAL_COMPILER_BENCHMARKING";
+
 const Set<String> _known = {
-  // Currently there's no live experiments.
+  enableIncrementalCompilerBenchmarking,
 };
 
 Set<String> getExperimentEnvironment() {
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 07c4b09..65c8d51 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -23,8 +23,9 @@
 import 'fasta/dill/dill_target.dart' show DillTarget;
 import 'fasta/fasta_codes.dart' show LocatedMessage;
 import 'fasta/hybrid_file_system.dart';
+import 'fasta/kernel/benchmarker.dart' show BenchmarkPhases;
 import 'fasta/kernel/kernel_target.dart' show BuildResult, KernelTarget;
-import 'fasta/kernel/macro.dart';
+import 'fasta/kernel/macro/macro.dart';
 import 'fasta/kernel/utils.dart' show printComponentText, serializeComponent;
 import 'fasta/kernel/verifier.dart' show verifyComponent;
 import 'fasta/source/source_loader.dart' show SourceLoader;
@@ -93,21 +94,14 @@
       kernelTarget.setEntryPoints(options.inputs);
       NeededPrecompilations? neededPrecompilations =
           await kernelTarget.computeNeededPrecompilations();
-      if (neededPrecompilations != null) {
-        if (enableMacros) {
-          // TODO(johnniwinther): Avoid using [rawOptionsForTesting] to compute
-          // the compiler options for the precompilation.
-          if (options.rawOptionsForTesting.macroTarget != null) {
-            await _compileMacros(
-                neededPrecompilations, options.rawOptionsForTesting);
-            // TODO(johnniwinther): Assert that some works has been done.
-            // TODO(johnniwinther): Stop in case of compile-time errors.
-            continue;
-          }
-        } else {
-          throw new UnsupportedError('Macro precompilation is not supported');
-        }
+      kernelTarget.benchmarker?.enterPhase(BenchmarkPhases.precompileMacros);
+      if (await precompileMacros(neededPrecompilations, options)) {
+        kernelTarget.benchmarker
+            ?.enterPhase(BenchmarkPhases.unknownGenerateKernelInternal);
+        continue;
       }
+      kernelTarget.benchmarker
+          ?.enterPhase(BenchmarkPhases.unknownGenerateKernelInternal);
       return _buildInternal(
           options: options,
           kernelTarget: kernelTarget,
@@ -276,6 +270,33 @@
 /// compilation below.
 Uri _defaultDir = Uri.parse('org-dartlang-macro:///a/b/c/');
 
+/// Compiles the libraries for the macro classes in [neededPrecompilations].
+///
+/// Returns `true` if macro classes were compiled and added to the
+/// [CompilerOptions.precompiledMacroUris] of the provided [options].
+///
+/// Returns `false` if no macro classes needed precompilation or if macro
+/// precompilation is not supported.
+Future<bool> precompileMacros(NeededPrecompilations? neededPrecompilations,
+    ProcessedOptions options) async {
+  if (neededPrecompilations != null) {
+    if (enableMacros) {
+      // TODO(johnniwinther): Avoid using [rawOptionsForTesting] to compute
+      // the compiler options for the precompilation.
+      if (options.rawOptionsForTesting.macroTarget != null) {
+        await _compileMacros(
+            neededPrecompilations, options.rawOptionsForTesting);
+        // TODO(johnniwinther): Assert that some works has been done.
+        // TODO(johnniwinther): Stop in case of compile-time errors.
+        return true;
+      }
+    } else {
+      throw new UnsupportedError('Macro precompilation is not supported');
+    }
+  }
+  return false;
+}
+
 Future<void> _compileMacros(NeededPrecompilations neededPrecompilations,
     CompilerOptions options) async {
   assert(options.macroSerializer != null);
@@ -305,17 +326,15 @@
   fs.entityForUri(uri).writeAsStringSync(bootstrapMacroIsolate(
       macroDeclarations, SerializationMode.byteDataClient));
 
-  precompilationOptions..fileSystem = new HybridFileSystem(fs);
+  precompilationOptions
+    ..fileSystem = new HybridFileSystem(fs, options.fileSystem);
   CompilerResult? compilerResult =
       await kernelForProgramInternal(uri, precompilationOptions);
   Uri precompiledUri = await options.macroSerializer!
       .createUriForComponent(compilerResult!.component!);
-  Map<MacroClass, Uri> precompiledMacroUris =
-      options.precompiledMacroUris ??= {};
+  Map<Uri, Uri> precompiledMacroUris = options.precompiledMacroUris ??= {};
   neededPrecompilations.macroDeclarations
       .forEach((Uri uri, Map<String, List<String>> macroClasses) {
-    for (String macroClass in macroClasses.keys) {
-      precompiledMacroUris[new MacroClass(uri, macroClass)] = precompiledUri;
-    }
+    precompiledMacroUris[uri] = precompiledUri;
   });
 }
diff --git a/pkg/front_end/lib/src/testing/compiler_common.dart b/pkg/front_end/lib/src/testing/compiler_common.dart
index 407f814..f8cebf7 100644
--- a/pkg/front_end/lib/src/testing/compiler_common.dart
+++ b/pkg/front_end/lib/src/testing/compiler_common.dart
@@ -86,7 +86,7 @@
 ///   * specify the location of the sdk summaries.
 Future<Null> setup(CompilerOptions options, Map<String, dynamic> sources,
     {List<String> additionalDills: const []}) async {
-  MemoryFileSystem fs = new MemoryFileSystem(_defaultDir);
+  MemoryFileSystem fs = createMemoryFileSystem();
   sources.forEach((name, data) {
     MemoryFileSystemEntity entity = fs.entityForUri(toTestUri(name));
     if (data is String) {
@@ -114,6 +114,8 @@
   }
 }
 
+MemoryFileSystem createMemoryFileSystem() => new MemoryFileSystem(_defaultDir);
+
 const String _testUriScheme = 'org-dartlang-test';
 
 bool isTestUri(Uri uri) => uri.isScheme(_testUriScheme);
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 102912e..4be720bd 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -25,7 +25,7 @@
 import '../api_prototype/terminal_color_support.dart'
     show printDiagnosticMessage;
 import '../base/common.dart';
-import '../fasta/kernel/macro.dart';
+import '../fasta/kernel/macro/macro.dart';
 import '../fasta/messages.dart' show FormattedMessage;
 import '../kernel_generator_impl.dart' show InternalCompilerResult;
 import 'compiler_common.dart' show compileScript, toTestUri;
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 6563de2..3d82ad2 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -56,6 +56,8 @@
 CantDetermineConstness/analyzerCode: Fail
 CantDisambiguateAmbiguousInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
 CantDisambiguateNotEnoughInformation/analyzerCode: Fail # There's no analyzer code for that error yet.
+CantHaveNamedParameters/analyzerCode: Fail
+CantHaveOptionalParameters/analyzerCode: Fail
 CantInferPackagesFromManyInputs/analyzerCode: Fail
 CantInferPackagesFromManyInputs/example: Fail
 CantInferPackagesFromPackageUri/analyzerCode: Fail
@@ -212,23 +214,29 @@
 DuplicatedNamedArgument/example: Fail
 DuplicatedParameterName/example: Fail
 Encoding/analyzerCode: Fail
+EnumAbstractMember/analyzerCode: Fail
+EnumAbstractMember/example: Fail
 EnumConstantSameNameAsEnclosing/example: Fail
 EnumConstructorSuperInitializer/analyzerCode: Fail
 EnumConstructorSuperInitializer/example: Fail
 EnumConstructorTearoff/analyzerCode: Fail
 EnumConstructorTearoff/example: Fail
+EnumContainsRestrictedInstanceDeclaration/analyzerCode: Fail
+EnumContainsRestrictedInstanceDeclaration/example: Fail
 EnumContainsValuesDeclaration/analyzerCode: Fail
 EnumContainsValuesDeclaration/example: Fail
 EnumDeclaresConstFactory/analyzerCode: Fail
 EnumDeclaresConstFactory/example: Fail
 EnumDeclaresFactory/analyzerCode: Fail
 EnumDeclaresFactory/example: Fail
-EnumEntryWithTypeArgumentsWithoutArguments/analyzerCode: Fail
-EnumEntryWithTypeArgumentsWithoutArguments/example: Fail
 EnumFactoryRedirectsToConstructor/analyzerCode: Fail
 EnumFactoryRedirectsToConstructor/example: Fail
+EnumImplementerContainsRestrictedInstanceDeclaration/analyzerCode: Fail
+EnumImplementerContainsRestrictedInstanceDeclaration/example: Fail
 EnumImplementerContainsValuesDeclaration/analyzerCode: Fail
 EnumImplementerContainsValuesDeclaration/example: Fail
+EnumInheritsRestricted/analyzerCode: Fail
+EnumInheritsRestricted/example: Fail
 EnumInstantiation/example: Fail
 EnumNonConstConstructor/analyzerCode: Fail
 EnumNonConstConstructor/example: Fail
@@ -270,6 +278,11 @@
 ExperimentNotEnabled/example: Fail
 ExperimentNotEnabledNoFlag/example: Fail
 ExperimentNotEnabledNoFlagInvalidLanguageVersion/example: Fail
+ExperimentNotEnabledOffByDefault/example: Fail
+ExperimentOptOutExplicit/analyzerCode: Fail
+ExperimentOptOutExplicit/example: Fail
+ExperimentOptOutImplicit/analyzerCode: Fail
+ExperimentOptOutImplicit/example: Fail
 ExplicitExtensionArgumentMismatch/analyzerCode: Fail
 ExplicitExtensionArgumentMismatch/example: Fail
 ExplicitExtensionAsExpression/analyzerCode: Fail
@@ -355,6 +368,7 @@
 FastaUsageShort/example: Fail
 FfiAbiSpecificIntegerInvalid/analyzerCode: Fail
 FfiAbiSpecificIntegerMappingInvalid/analyzerCode: Fail
+FfiCompoundImplementsFinalizable/analyzerCode: Fail
 FfiDartTypeMismatch/analyzerCode: Fail
 FfiEmptyStruct/analyzerCode: Fail
 FfiExceptionalReturnNull/analyzerCode: Fail
@@ -468,6 +482,7 @@
 InitializerOutsideConstructor/example: Fail
 InputFileNotFound/analyzerCode: Fail
 InputFileNotFound/example: Fail
+InstanceAndSynthesizedStaticConflict/example: Fail
 InstantiationNonGenericFunctionType/analyzerCode: Fail
 InstantiationTooFewArguments/analyzerCode: Fail
 InstantiationTooManyArguments/analyzerCode: Fail
@@ -546,8 +561,6 @@
 JsInteropExternalExtensionMemberOnTypeInvalid/example: Fail # Web compiler specific
 JsInteropExternalMemberNotJSAnnotated/analyzerCode: Fail # Web compiler specific
 JsInteropExternalMemberNotJSAnnotated/example: Fail # Web compiler specific
-JsInteropIndexNotSupported/analyzerCode: Fail # Web compiler specific
-JsInteropIndexNotSupported/example: Fail # Web compiler specific
 JsInteropJSClassExtendsDartClass/analyzerCode: Fail # Web compiler specific
 JsInteropJSClassExtendsDartClass/example: Fail # Web compiler specific
 JsInteropNamedParameters/analyzerCode: Fail # Web compiler specific
@@ -558,6 +571,8 @@
 JsInteropNonExternalConstructor/example: Fail # Web compiler specific
 JsInteropNonExternalMember/analyzerCode: Fail # Web compiler specific
 JsInteropNonExternalMember/example: Fail # Web compiler specific
+JsInteropOperatorsNotSupported/analyzerCode: Fail # Web compiler specific
+JsInteropOperatorsNotSupported/example: Fail # Web compiler specific
 JsInteropStaticInteropWithInstanceMembers/analyzerCode: Fail # Web compiler specific
 JsInteropStaticInteropWithInstanceMembers/example: Fail # Web compiler specific
 JsInteropStaticInteropWithNonStaticSupertype/analyzerCode: Fail # Web compiler specific
@@ -668,6 +683,11 @@
 NotBinaryOperator/analyzerCode: Fail
 NotConstantExpression/example: Fail
 NullAwareCascadeOutOfOrder/example: Fail
+NullSafetyDisabledInvalidLanguageVersion/example: Fail
+NullSafetyOptOutExplicit/analyzerCode: Fail
+NullSafetyOptOutExplicit/example: Fail
+NullSafetyOptOutImplicit/analyzerCode: Fail
+NullSafetyOptOutImplicit/example: Fail
 NullableExpressionCallError/analyzerCode: Fail
 NullableExpressionCallError/example: Fail
 NullableExpressionCallWarning/analyzerCode: Fail
@@ -805,6 +825,8 @@
 SuperAsExpression/example: Fail
 SuperAsIdentifier/example: Fail
 SuperNullAware/example: Fail
+SuperParameterInitializerOutsideConstructor/analyzerCode: Fail
+SuperParameterInitializerOutsideConstructor/example: Fail
 SuperclassHasNoDefaultConstructor/example: Fail
 SuperclassHasNoGetter/example: Fail
 SuperclassHasNoMember/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index d165d4c..2e1aa57 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -286,15 +286,24 @@
   correctionMessage: "Try updating your pubspec.yaml to set the minimum SDK constraint to #string2 or higher, and running 'pub get'."
   analyzerCode: ParserErrorCode.EXPERIMENT_NOT_ENABLED
 
+ExperimentNotEnabledOffByDefault:
+  problemMessage: "This requires the experimental '#string' language feature to be enabled."
+  correctionMessage: "Try passing the '--enable-experiment=#string' command line option."
+  analyzerCode: ParserErrorCode.EXPERIMENT_NOT_ENABLED
+
 ExperimentDisabled:
   problemMessage: "This requires the '#string' language feature to be enabled."
   correctionMessage: "The feature is on by default but is currently disabled, maybe because the '--enable-experiment=no-#string' command line option is passed."
   analyzerCode: ParserErrorCode.EXPERIMENT_NOT_ENABLED
 
-ExperimentDisabledInvalidLanguageVersion:
+NullSafetyDisabledInvalidLanguageVersion:
   problemMessage: "This requires the null safety language feature, which requires language version of #string2 or higher."
   analyzerCode: ParserErrorCode.EXPERIMENT_NOT_ENABLED
 
+ExperimentDisabledInvalidLanguageVersion:
+  problemMessage: "This requires the '#string' language feature, which requires language version of #string2 or higher."
+  analyzerCode: ParserErrorCode.EXPERIMENT_NOT_ENABLED
+
 EmptyNamedParameterList:
   problemMessage: "Named parameter lists cannot be empty."
   correctionMessage: "Try adding a named parameter to the list."
@@ -1308,16 +1317,40 @@
     - "'\\x0'"
     - "'\\x0y'"
 
-InvalidUnicodeEscape:
+InvalidUnicodeEscapeUStarted:
   index: 38
   problemMessage: "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'."
-  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE
+  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED
   expression:
     - "'\\u'"
+
+InvalidUnicodeEscapeUNoBracket:
+  index: 124
+  problemMessage: "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits."
+  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
+  expression:
     - "'\\u0F'"
+
+InvalidUnicodeEscapeUBracket:
+  index: 125
+  problemMessage: "An escape sequence starting with '\\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'."
+  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET
+  expression:
     - "'\\u{'"
     - "'\\u{03'"
     - "'\\u{0Z}'"
+    - "'\\u{0000003}'"
+
+InvalidEscapeStarted:
+  index: 126
+  problemMessage: "The string '\\' can't stand alone."
+  correctionMessage: "Try adding another backslash (\\) to escape the '\\'."
+  analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED
+  exampleAllowMoreCodes: true
+  expression:
+    - |
+      print('Hello, World!\
+      ');
 
 UnexpectedDollarInString:
   problemMessage: "A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({})."
@@ -1730,6 +1763,10 @@
   script:
     - "class C { void m(this.x); }"
 
+SuperParameterInitializerOutsideConstructor:
+  problemMessage: "Super-initializer formal parameters can only be used in generative constructors."
+  correctionMessage: "Try removing 'super.'."
+
 RedirectionTargetNotFound:
   problemMessage: "Redirection constructor target not found: '#name'"
   analyzerCode: REDIRECT_TO_MISSING_CONSTRUCTOR
@@ -4569,6 +4606,10 @@
   problemMessage: "This is the instance member."
   severity: CONTEXT
 
+InstanceAndSynthesizedStaticConflict:
+  problemMessage: "This instance member conflicts with the synthesized static member called '#name'."
+  analyzerCode: CONFLICTING_STATIC_AND_INSTANCE
+
 FfiAbiSpecificIntegerInvalid:
   # Used by dart:ffi
   problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type arguments."
@@ -4662,6 +4703,12 @@
   problemMessage: "#string '#name' should not be generic."
   external: test/ffi_test.dart
 
+FfiCompoundImplementsFinalizable:
+  # Used by dart:ffi
+  problemMessage: "#string '#name' can't implement Finalizable."
+  correctionMessage: "Try removing the implements clause from '#name'."
+  external: test/ffi_test.dart
+
 FfiDartTypeMismatch:
   # Used by dart:ffi
   problemMessage: "Expected '#type' to be a subtype of '#type2'."
@@ -4736,6 +4783,16 @@
         var b = [...a];
       }
 
+CantHaveNamedParameters:
+  # Used by dart:ffi
+  problemMessage: "'#name' can't be declared with named parameters."
+  external: test/ffi_test.dart
+
+CantHaveOptionalParameters:
+  # Used by dart:ffi
+  problemMessage: "'#name' can't be declared with optional parameters."
+  external: test/ffi_test.dart
+
 SpreadElementTypeMismatch:
   problemMessage: "Can't assign spread elements of type '#type' to collection elements of type '#type2'."
   analyzerCode: LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
@@ -5048,18 +5105,30 @@
 FieldNonNullableNotInitializedByConstructorError:
   problemMessage: "This constructor should initialize field '#name' because its type '#type' doesn't allow null."
 
-NonNullableOptOutExplicit:
+NullSafetyOptOutExplicit:
   problemMessage: "Null safety features are disabled for this library."
   correctionMessage: "Try removing the `@dart=` annotation or setting the language version to #string or higher."
 
-NonNullableOptOutImplicit:
+ExperimentOptOutExplicit:
+  problemMessage: "The '#string' language feature is disabled for this library."
+  correctionMessage: "Try removing the `@dart=` annotation or setting the language version to #string2 or higher."
+
+NullSafetyOptOutImplicit:
   problemMessage: "Null safety features are disabled for this library."
   correctionMessage: "Try removing the package language version or setting the language version to #string or higher."
 
-NonNullableOptOutComment:
+NullSafetyOptOutComment:
   problemMessage: "This is the annotation that opts out this library from null safety features."
   severity: CONTEXT
 
+ExperimentOptOutImplicit:
+  problemMessage: "The '#string' language feature is disabled for this library."
+  correctionMessage: "Try removing the package language version or setting the language version to #string2 or higher."
+
+ExperimentOptOutComment:
+  problemMessage: "This is the annotation that opts out this library from the '#string' language feature."
+  severity: CONTEXT
+
 AwaitInLateLocalInitializer:
   problemMessage: "`await` expressions are not supported in late local initializers."
 
@@ -5096,18 +5165,6 @@
   problemMessage: "Only JS interop members may be 'external'."
   correctionMessage: "Try removing the 'external' keyword or adding a JS interop annotation."
 
-JsInteropIndexNotSupported:
-  problemMessage: "JS interop classes do not support [] and []= operator methods."
-  correctionMessage: "Try replacing with a normal method."
-
-JsInteropStaticInteropWithInstanceMembers:
-  problemMessage: "JS interop class '#name' with `@staticInterop` annotation cannot declare instance members."
-  correctionMessage: "Try moving the instance member to a static extension."
-
-JsInteropStaticInteropWithNonStaticSupertype:
-  problemMessage: "JS interop class '#name' has an `@staticInterop` annotation, but has supertype '#name2', which is non-static."
-  correctionMessage: "Try marking the supertype as a static interop class using `@staticInterop`."
-
 JsInteropJSClassExtendsDartClass:
   problemMessage: "JS interop class '#name' cannot extend Dart class '#name2'."
   correctionMessage: "Try removing the JS interop annotation or adding it to the parent class."
@@ -5128,6 +5185,18 @@
   problemMessage: "This JS interop member must be annotated with `external`. Only factories and static methods can be non-external."
   correctionMessage: "Try annotating the member with `external`."
 
+JsInteropOperatorsNotSupported:
+  problemMessage: "JS interop classes do not support operator methods."
+  correctionMessage: "Try replacing this with a normal method."
+
+JsInteropStaticInteropWithInstanceMembers:
+  problemMessage: "JS interop class '#name' with `@staticInterop` annotation cannot declare instance members."
+  correctionMessage: "Try moving the instance member to a static extension."
+
+JsInteropStaticInteropWithNonStaticSupertype:
+  problemMessage: "JS interop class '#name' has an `@staticInterop` annotation, but has supertype '#name2', which is non-static."
+  correctionMessage: "Try marking the supertype as a static interop class using `@staticInterop`."
+
 DefaultListConstructorError:
   problemMessage: "Can't use the default List constructor."
   correctionMessage: "Try using List.filled instead."
@@ -5480,9 +5549,6 @@
 EnumSupertypeOfNonAbstractClass:
   problemMessage: "Non-abstract class '#name' has 'Enum' as a superinterface."
 
-EnumEntryWithTypeArgumentsWithoutArguments:
-  problemMessage: "Missing arguments in enum constructor invocation."
-
 EnumNonConstConstructor:
   problemMessage: "Generative enum constructors must be marked as 'const'."
 
@@ -5496,11 +5562,18 @@
   problemMessage: "Enum factory constructors can't redirect to generative constructors."
 
 EnumContainsValuesDeclaration:
-  problemMessage: "Enums can't contain declarations of members with the name 'values'."
+  problemMessage: "An enum can't declare a member named 'values'."
 
 EnumImplementerContainsValuesDeclaration:
   problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'."
 
+EnumInheritsRestricted:
+  problemMessage: "An enum can't inherit a member named '#name'."
+
+EnumInheritsRestrictedMember:
+  problemMessage: "This is the inherited member"
+  severity: CONTEXT
+
 MacroClassNotDeclaredMacro:
   problemMessage: "Non-abstract class '#name' implements 'Macro' but isn't declared as a macro class."
   correctionMessage: "Try adding the 'macro' class modifier."
@@ -5519,3 +5592,12 @@
 
 OptionalSuperParameterWithoutInitializer:
   problemMessage: "Type '#type' of the optional super-initializer parameter '#name' doesn't allow 'null', but the parameter doesn't have a default value, and the default value can't be copied from the corresponding parameter of the super constructor."
+
+EnumContainsRestrictedInstanceDeclaration:
+  problemMessage: "An enum can't declare a non-abstract member named '#name'."
+
+EnumImplementerContainsRestrictedInstanceDeclaration:
+  problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static members with name '#name2'."
+
+EnumAbstractMember:
+  problemMessage: "Enums can't declare abstract members."
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
index 91c611c..8f1c122 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
@@ -85,7 +85,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -107,7 +107,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -260,7 +260,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -282,7 +282,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -448,7 +448,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -470,7 +470,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -623,7 +623,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -645,7 +645,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
index 7f35186..4865006 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
@@ -177,7 +177,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -186,7 +186,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -218,7 +218,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -227,7 +227,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -513,7 +513,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -522,7 +522,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -553,7 +553,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -562,7 +562,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -874,7 +874,7 @@
                 parseFormalParameters(setter, MemberKind.NonStaticMethod)
                   parseFormalParametersRest((, MemberKind.NonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(value)
                         listener: endMetadataStar(0)
@@ -883,7 +883,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(value, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -915,7 +915,7 @@
                 parseFormalParameters(setter, MemberKind.NonStaticMethod)
                   parseFormalParametersRest((, MemberKind.NonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(value)
                         listener: endMetadataStar(0)
@@ -924,7 +924,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(value, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -1210,7 +1210,7 @@
                 parseFormalParameters(setter, MemberKind.StaticMethod)
                   parseFormalParametersRest((, MemberKind.StaticMethod)
                     listener: beginFormalParameters((, MemberKind.StaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(value)
                         listener: endMetadataStar(0)
@@ -1219,7 +1219,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(value, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -1250,7 +1250,7 @@
                 parseFormalParameters(setter, MemberKind.StaticMethod)
                   parseFormalParametersRest((, MemberKind.StaticMethod)
                     listener: beginFormalParameters((, MemberKind.StaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(value)
                         listener: endMetadataStar(0)
@@ -1259,7 +1259,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(value, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
index 693edbe..d550bda 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
@@ -456,7 +456,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -479,7 +479,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -501,7 +501,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -523,7 +523,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -546,7 +546,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -568,7 +568,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -940,7 +940,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -963,7 +963,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -986,7 +986,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1009,7 +1009,7 @@
                 handleNoType(()
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
             endFormalParameters(1, (, ), MemberKind.StaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
index 01ea526..03c4dfb 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
@@ -429,7 +429,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -438,7 +438,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -472,7 +472,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -481,7 +481,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -513,7 +513,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -522,7 +522,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -554,7 +554,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -563,7 +563,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -597,7 +597,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -606,7 +606,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -638,7 +638,7 @@
                   parseFormalParameters(setter, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -647,7 +647,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1332,7 +1332,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -1341,7 +1341,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1374,7 +1374,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -1383,7 +1383,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1416,7 +1416,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -1425,7 +1425,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1458,7 +1458,7 @@
                   parseFormalParameters(setter, MemberKind.StaticMethod)
                     parseFormalParametersRest((, MemberKind.StaticMethod)
                       listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(value)
                           listener: endMetadataStar(0)
@@ -1467,7 +1467,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect
index ff03f5c..b0493a0 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect
@@ -69,7 +69,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -90,7 +90,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
index 3bc9178..4e04f8b 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
@@ -139,7 +139,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -148,7 +148,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -176,7 +176,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -185,7 +185,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.expect b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.expect
index e6b0821..6262504 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.expect
@@ -304,7 +304,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -326,7 +326,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleEmptyFunctionBody(;)
@@ -347,7 +347,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleEmptyFunctionBody(;)
@@ -368,7 +368,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -390,7 +390,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleEmptyFunctionBody(;)
@@ -411,7 +411,7 @@
           handleNoType(()
           handleIdentifier(value, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleEmptyFunctionBody(;)
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
index a5272f9..fef31b5 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
@@ -361,7 +361,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -370,7 +370,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -401,7 +401,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -410,7 +410,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -439,7 +439,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -448,7 +448,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -476,7 +476,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -485,7 +485,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -515,7 +515,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -524,7 +524,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -552,7 +552,7 @@
           parseFormalParameters(setter, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(value)
                   listener: endMetadataStar(0)
@@ -561,7 +561,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(value, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
index 92d5054..192dfcf 100644
--- a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.expect
@@ -110,7 +110,7 @@
               handleType(int, null)
               handleIdentifier(value, formalParameterDeclaration)
               handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
           endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
           handleNoInitializers()
           handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
index 7d106ee..f2e1124 100644
--- a/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/enhanced_enums/entries_with_type_arguments.dart.intertwined.expect
@@ -43,19 +43,18 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(one, enumValueDeclaration)
-          parseConstructorReference(one, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(<)
-            listener: beginConstructorReference(one)
-            listener: beginTypeArguments(<)
-            listener: handleIdentifier(int, typeReference)
-            listener: handleNoTypeArguments(,)
-            listener: handleType(int, null)
-            listener: handleIdentifier(String, typeReference)
-            listener: handleNoTypeArguments(>)
-            listener: handleType(String, null)
-            listener: endTypeArguments(2, <, >)
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            listener: endConstructorReference(one, null, (, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(one)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(,)
+          listener: handleType(int, null)
+          listener: handleIdentifier(String, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(String, null)
+          listener: endTypeArguments(2, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+          listener: endConstructorReference(one, null, (, ConstructorReferenceContext.Const)
           parseConstructorInvocationArguments(>)
             parseArgumentsRest(()
               listener: beginArguments(()
@@ -67,19 +66,18 @@
             listener: endMetadataStar(0)
           ensureIdentifier(,, enumValueDeclaration)
             listener: handleIdentifier(two, enumValueDeclaration)
-          parseConstructorReference(two, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(<)
-            listener: beginConstructorReference(two)
-            listener: beginTypeArguments(<)
-            listener: handleIdentifier(double, typeReference)
-            listener: handleNoTypeArguments(,)
-            listener: handleType(double, null)
-            listener: handleIdentifier(num, typeReference)
-            listener: handleNoTypeArguments(>)
-            listener: handleType(num, null)
-            listener: endTypeArguments(2, <, >)
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
-            listener: endConstructorReference(two, null, (, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(two)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(double, typeReference)
+          listener: handleNoTypeArguments(,)
+          listener: handleType(double, null)
+          listener: handleIdentifier(num, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(num, null)
+          listener: endTypeArguments(2, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+          listener: endConstructorReference(two, null, (, ConstructorReferenceContext.Const)
           parseConstructorInvocationArguments(>)
             parseArgumentsRest(()
               listener: beginArguments(()
@@ -91,20 +89,19 @@
             listener: endMetadataStar(0)
           ensureIdentifier(,, enumValueDeclaration)
             listener: handleIdentifier(three, enumValueDeclaration)
-          parseConstructorReference(three, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(<)
-            listener: beginConstructorReference(three)
-            listener: beginTypeArguments(<)
-            listener: handleIdentifier(int, typeReference)
-            listener: handleNoTypeArguments(,)
-            listener: handleType(int, null)
-            listener: handleIdentifier(int, typeReference)
-            listener: handleNoTypeArguments(>)
-            listener: handleType(int, null)
-            listener: endTypeArguments(2, <, >)
-            ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
-              listener: handleIdentifier(named, constructorReferenceContinuationAfterTypeArguments)
-            listener: endConstructorReference(three, ., (, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(three)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(,)
+          listener: handleType(int, null)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(2, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(named, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(three, ., (, ConstructorReferenceContext.Const)
           parseConstructorInvocationArguments(named)
             parseArgumentsRest(()
               listener: beginArguments(()
@@ -168,7 +165,7 @@
               parseFormalParameters(named, MemberKind.NonStaticMethod)
                 parseFormalParametersRest((, MemberKind.NonStaticMethod)
                   listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                  parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                  parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                     parseMetadataStar(()
                       listener: beginMetadataStar(int)
                       listener: endMetadataStar(0)
@@ -179,7 +176,7 @@
                     ensureIdentifier(int, formalParameterDeclaration)
                       listener: handleIdentifier(value, formalParameterDeclaration)
                     listener: handleFormalParameterWithoutValue())
-                    listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                    listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                   listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             parseInitializersOpt())
               listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
index c02d432..050a0b9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.intertwined.expect
@@ -40,7 +40,7 @@
                             parseNewExpression({)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(C, constructorReference)
                                 listener: beginConstructorReference(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
index 3fd8b9b..19c202d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.expect
@@ -51,7 +51,7 @@
                 handleType(int, null)
                 handleIdentifier(b, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.ExtensionNonStaticMethod, null, null, null)
@@ -60,7 +60,7 @@
                 handleType(int, null)
                 handleIdentifier(c, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -100,7 +100,7 @@
                 handleType(int, null)
                 handleIdentifier(d, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, d, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, d, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -131,7 +131,7 @@
           handleType(List, null)
           handleIdentifier(l, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, l, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -169,7 +169,7 @@
           handleType(List, null)
           handleIdentifier(l, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, l, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
index 334068a..bdae2a2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/extension_member_contributor_test_completion.dart.intertwined.expect
@@ -53,7 +53,7 @@
                 parseFormalParameters(a, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(int)
                         listener: endMetadataStar(0)
@@ -64,8 +64,8 @@
                       ensureIdentifier(int, formalParameterDeclaration)
                         listener: handleIdentifier(b, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue(,)
-                      listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(,)
                         listener: beginMetadataStar(int)
                         listener: endMetadataStar(0)
@@ -76,7 +76,7 @@
                       ensureIdentifier(int, formalParameterDeclaration)
                         listener: handleIdentifier(c, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(2, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -144,7 +144,7 @@
                 parseFormalParameters(c, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(int)
                         listener: endMetadataStar(0)
@@ -155,7 +155,7 @@
                       ensureIdentifier(int, formalParameterDeclaration)
                         listener: handleIdentifier(d, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, d, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, d, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -191,7 +191,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(List)
                   listener: endMetadataStar(0)
@@ -206,7 +206,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(l, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, l, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -269,7 +269,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(List)
                   listener: endMetadataStar(0)
@@ -284,7 +284,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(l, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, l, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, l, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
index 8b091c3..7bc6b89 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.expect
@@ -57,7 +57,7 @@
                 handleNoType(()
                 handleIdentifier(message, fieldInitializer)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(this, null, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(this, null, ., message, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
index fd5d902..557ff88 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22314.dart.intertwined.expect
@@ -82,7 +82,7 @@
                   parseFormalParameters(Annotation, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(this)
                           listener: endMetadataStar(0)
@@ -91,7 +91,7 @@
                         ensureIdentifier(., fieldInitializer)
                           listener: handleIdentifier(message, fieldInitializer)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(this, null, ., message, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(this, null, ., message, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -200,7 +200,7 @@
                             parseNewExpression(=>)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(A, constructorReference)
                                 listener: beginConstructorReference(A)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
index 942e5ce..c7790de 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.expect
@@ -53,7 +53,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -76,7 +76,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -102,7 +102,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -126,7 +126,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -156,7 +156,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -188,7 +188,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -230,7 +230,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -286,7 +286,7 @@
             handleType(int, null)
             handleIdentifier(x, formalParameterDeclaration)
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
index 8eca861..2d1c17f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26073.dart.intertwined.expect
@@ -22,7 +22,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -33,7 +33,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -56,7 +56,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -67,7 +67,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -96,7 +96,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -107,7 +107,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -133,7 +133,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -144,7 +144,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -177,7 +177,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -188,7 +188,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -222,7 +222,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -233,7 +233,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -278,7 +278,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -289,7 +289,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -357,7 +357,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
@@ -368,7 +368,7 @@
               ensureIdentifier(int, formalParameterDeclaration)
                 listener: handleIdentifier(x, formalParameterDeclaration)
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
index d1fcfd2..e6bfd54 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.expect
@@ -387,7 +387,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -396,7 +396,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -432,7 +432,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -441,7 +441,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -476,7 +476,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -485,7 +485,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -524,7 +524,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -533,7 +533,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -571,7 +571,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -580,7 +580,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -635,7 +635,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -644,7 +644,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -698,7 +698,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -707,7 +707,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -749,7 +749,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -758,7 +758,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -799,7 +799,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -808,7 +808,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -853,7 +853,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -862,7 +862,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -904,7 +904,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -913,7 +913,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -991,7 +991,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1000,7 +1000,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1082,7 +1082,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1091,7 +1091,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1170,7 +1170,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1179,7 +1179,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
index c90f416..e480ced 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810.dart.intertwined.expect
@@ -779,7 +779,7 @@
                   parseFormalParameters(i, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -790,8 +790,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -802,7 +802,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -876,7 +876,7 @@
                   parseFormalParameters(j, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -887,8 +887,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -899,7 +899,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -961,7 +961,7 @@
                   parseFormalParameters(k, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -972,8 +972,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -984,7 +984,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1065,7 +1065,7 @@
                   parseFormalParameters(l, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1076,8 +1076,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1088,7 +1088,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1157,7 +1157,7 @@
                   parseFormalParameters(m, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1168,8 +1168,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1180,7 +1180,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1296,7 +1296,7 @@
                   parseFormalParameters(n, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1307,8 +1307,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1319,7 +1319,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1423,7 +1423,7 @@
                   parseFormalParameters(o, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1434,8 +1434,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1446,7 +1446,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1539,7 +1539,7 @@
                   parseFormalParameters(p, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1550,8 +1550,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1562,7 +1562,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1638,7 +1638,7 @@
                   parseFormalParameters(q, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1649,8 +1649,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1661,7 +1661,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1761,7 +1761,7 @@
                   parseFormalParameters(r, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1772,8 +1772,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1784,7 +1784,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1866,7 +1866,7 @@
                   parseFormalParameters(s, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1877,8 +1877,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1889,7 +1889,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2104,7 +2104,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2115,8 +2115,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2127,7 +2127,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2349,7 +2349,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2360,8 +2360,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2372,7 +2372,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2558,7 +2558,7 @@
                   parseFormalParameters(not_currently_working, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2569,8 +2569,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2581,7 +2581,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
index 27098f5..80e2f29 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.expect
@@ -387,7 +387,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -396,7 +396,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -432,7 +432,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -441,7 +441,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -476,7 +476,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -485,7 +485,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -524,7 +524,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -533,7 +533,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -571,7 +571,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -580,7 +580,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -635,7 +635,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -644,7 +644,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -698,7 +698,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -707,7 +707,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -749,7 +749,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -758,7 +758,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -799,7 +799,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -808,7 +808,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -853,7 +853,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -862,7 +862,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -904,7 +904,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -913,7 +913,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -991,7 +991,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1000,7 +1000,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1082,7 +1082,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1091,7 +1091,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1170,7 +1170,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1179,7 +1179,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
index 7a715ee..93b2ee2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_and.dart.intertwined.expect
@@ -781,7 +781,7 @@
                   parseFormalParameters(i, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -792,8 +792,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -804,7 +804,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -878,7 +878,7 @@
                   parseFormalParameters(j, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -889,8 +889,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -901,7 +901,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -963,7 +963,7 @@
                   parseFormalParameters(k, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -974,8 +974,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -986,7 +986,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1067,7 +1067,7 @@
                   parseFormalParameters(l, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1078,8 +1078,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1090,7 +1090,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1159,7 +1159,7 @@
                   parseFormalParameters(m, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1170,8 +1170,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1182,7 +1182,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1298,7 +1298,7 @@
                   parseFormalParameters(n, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1309,8 +1309,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1321,7 +1321,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1425,7 +1425,7 @@
                   parseFormalParameters(o, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1436,8 +1436,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1448,7 +1448,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1542,7 +1542,7 @@
                   parseFormalParameters(p, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1553,8 +1553,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1565,7 +1565,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1641,7 +1641,7 @@
                   parseFormalParameters(q, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1652,8 +1652,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1664,7 +1664,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1765,7 +1765,7 @@
                   parseFormalParameters(r, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1776,8 +1776,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1788,7 +1788,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1870,7 +1870,7 @@
                   parseFormalParameters(s, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1881,8 +1881,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1893,7 +1893,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2108,7 +2108,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2119,8 +2119,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2131,7 +2131,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2353,7 +2353,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2364,8 +2364,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2376,7 +2376,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2562,7 +2562,7 @@
                   parseFormalParameters(not_currently_working, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2573,8 +2573,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2585,7 +2585,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
index 529110a..bbeb795 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.expect
@@ -387,7 +387,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -396,7 +396,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -432,7 +432,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -441,7 +441,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -476,7 +476,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -485,7 +485,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -524,7 +524,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -533,7 +533,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -571,7 +571,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -580,7 +580,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -635,7 +635,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -644,7 +644,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -698,7 +698,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -707,7 +707,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -749,7 +749,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -758,7 +758,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -799,7 +799,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -808,7 +808,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -853,7 +853,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -862,7 +862,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -904,7 +904,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -913,7 +913,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -991,7 +991,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1000,7 +1000,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1082,7 +1082,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1091,7 +1091,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(foo)
@@ -1170,7 +1170,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -1179,7 +1179,7 @@
                 handleType(int, null)
                 handleIdentifier(y, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
index 8c0dec2..897cffb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_26810_or.dart.intertwined.expect
@@ -781,7 +781,7 @@
                   parseFormalParameters(i, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -792,8 +792,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -804,7 +804,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -878,7 +878,7 @@
                   parseFormalParameters(j, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -889,8 +889,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -901,7 +901,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -963,7 +963,7 @@
                   parseFormalParameters(k, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -974,8 +974,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -986,7 +986,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1067,7 +1067,7 @@
                   parseFormalParameters(l, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1078,8 +1078,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1090,7 +1090,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1159,7 +1159,7 @@
                   parseFormalParameters(m, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1170,8 +1170,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1182,7 +1182,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1298,7 +1298,7 @@
                   parseFormalParameters(n, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1309,8 +1309,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1321,7 +1321,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1425,7 +1425,7 @@
                   parseFormalParameters(o, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1436,8 +1436,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1448,7 +1448,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1542,7 +1542,7 @@
                   parseFormalParameters(p, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1553,8 +1553,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1565,7 +1565,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1641,7 +1641,7 @@
                   parseFormalParameters(q, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1652,8 +1652,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1664,7 +1664,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1765,7 +1765,7 @@
                   parseFormalParameters(r, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1776,8 +1776,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1788,7 +1788,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1870,7 +1870,7 @@
                   parseFormalParameters(s, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1881,8 +1881,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1893,7 +1893,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2108,7 +2108,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2119,8 +2119,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2131,7 +2131,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2353,7 +2353,7 @@
                   parseFormalParameters(Key, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2364,8 +2364,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2376,7 +2376,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -2562,7 +2562,7 @@
                   parseFormalParameters(not_currently_working, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2573,8 +2573,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2585,7 +2585,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
index 7d7451a..69188e8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.expect
@@ -57,7 +57,7 @@
                 handleNoType(()
                 handleIdentifier(builder, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
             endFormalParameters(1, (, ), MemberKind.Local)
             handleAsyncModifier(null, null)
             handleIdentifier(builder, expression)
@@ -111,7 +111,7 @@
                 handleNoType(()
                 handleIdentifier(builder, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
             endFormalParameters(1, (, ), MemberKind.Local)
             handleAsyncModifier(null, null)
             handleIdentifier(builder, expression)
@@ -166,7 +166,7 @@
                 handleNoType(()
                 handleIdentifier(builder, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+              endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
             endFormalParameters(1, (, ), MemberKind.Local)
             handleAsyncModifier(null, null)
             handleIdentifier(builder, expression)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
index e3deae7..0018e7b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42267.dart.intertwined.expect
@@ -106,7 +106,7 @@
                                                 parseFormalParametersRequiredOpt((, MemberKind.Local)
                                                   parseFormalParametersRest((, MemberKind.Local)
                                                     listener: beginFormalParameters((, MemberKind.Local)
-                                                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                                                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                       parseMetadataStar(()
                                                         listener: beginMetadataStar(builder)
                                                         listener: endMetadataStar(0)
@@ -115,7 +115,7 @@
                                                       ensureIdentifier((, formalParameterDeclaration)
                                                         listener: handleIdentifier(builder, formalParameterDeclaration)
                                                       listener: handleFormalParameterWithoutValue())
-                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                     listener: endFormalParameters(1, (, ), MemberKind.Local)
                                                 parseAsyncOptBody(), true, false)
                                                   parseAsyncModifierOpt())
@@ -257,7 +257,7 @@
                                                 parseFormalParametersRequiredOpt((, MemberKind.Local)
                                                   parseFormalParametersRest((, MemberKind.Local)
                                                     listener: beginFormalParameters((, MemberKind.Local)
-                                                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                                                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                       parseMetadataStar(()
                                                         listener: beginMetadataStar(builder)
                                                         listener: endMetadataStar(0)
@@ -266,7 +266,7 @@
                                                       ensureIdentifier((, formalParameterDeclaration)
                                                         listener: handleIdentifier(builder, formalParameterDeclaration)
                                                       listener: handleFormalParameterWithoutValue())
-                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                     listener: endFormalParameters(1, (, ), MemberKind.Local)
                                                 parseAsyncOptBody(), true, false)
                                                   parseAsyncModifierOpt())
@@ -410,7 +410,7 @@
                                                 parseFormalParametersRequiredOpt((, MemberKind.Local)
                                                   parseFormalParametersRest((, MemberKind.Local)
                                                     listener: beginFormalParameters((, MemberKind.Local)
-                                                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                                                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                       parseMetadataStar(()
                                                         listener: beginMetadataStar(builder)
                                                         listener: endMetadataStar(0)
@@ -419,7 +419,7 @@
                                                       ensureIdentifier((, formalParameterDeclaration)
                                                         listener: handleIdentifier(builder, formalParameterDeclaration)
                                                       listener: handleFormalParameterWithoutValue())
-                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                                                      listener: endFormalParameter(null, null, null, builder, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                                                     listener: endFormalParameters(1, (, ), MemberKind.Local)
                                                 parseAsyncOptBody(), true, false)
                                                   parseAsyncModifierOpt())
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.expect
index 1e45c25..9bf88cd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.expect
@@ -33,7 +33,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -42,7 +42,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -93,7 +93,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -102,7 +102,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.intertwined.expect
index 152a677..c213cf0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,8 +31,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -43,7 +43,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -175,7 +175,7 @@
           parseFormalParameters(bar, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -186,8 +186,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -198,7 +198,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.expect
index 999435a..bdc7f1e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.expect
@@ -41,7 +41,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -50,7 +50,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -100,7 +100,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -109,7 +109,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -118,7 +118,7 @@
           handleType(int, null)
           handleIdentifier(c, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -178,7 +178,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -187,7 +187,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -237,7 +237,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -246,7 +246,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -255,7 +255,7 @@
           handleType(int, null)
           handleIdentifier(c, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.intertwined.expect
index 7f659af..748a56f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,8 +31,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -43,7 +43,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -172,7 +172,7 @@
           parseFormalParameters(foo2, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -183,8 +183,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -195,8 +195,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -207,7 +207,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(c, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -384,7 +384,7 @@
           parseFormalParameters(bar, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -395,8 +395,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -407,7 +407,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -536,7 +536,7 @@
           parseFormalParameters(bar2, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -547,8 +547,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -559,8 +559,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -571,7 +571,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(c, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.expect
index 4d1bbe5..488b2e2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -73,7 +73,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -82,7 +82,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -91,7 +91,7 @@
           handleType(int, null)
           handleIdentifier(c, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -149,7 +149,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -158,7 +158,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -207,7 +207,7 @@
           handleType(int, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -216,7 +216,7 @@
           handleType(int, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -225,7 +225,7 @@
           handleType(int, null)
           handleIdentifier(c, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.intertwined.expect
index 7e08a7b..afefe42 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_2.crash_dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,8 +31,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -43,7 +43,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -146,7 +146,7 @@
           parseFormalParameters(foo2, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -157,8 +157,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -169,8 +169,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -181,7 +181,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(c, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -305,7 +305,7 @@
           parseFormalParameters(bar, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -316,8 +316,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -328,7 +328,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -431,7 +431,7 @@
           parseFormalParameters(bar2, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -442,8 +442,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -454,8 +454,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -466,7 +466,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(c, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
index 41f0d2a..3a10de3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
@@ -190,7 +190,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
@@ -246,7 +246,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
index 0e6be26..9980e62 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.intertwined.expect
@@ -177,7 +177,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
@@ -226,7 +226,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
index 888082a..7756662 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.intertwined.expect
@@ -180,7 +180,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
@@ -230,7 +230,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(List, constructorReference)
                               listener: beginConstructorReference(List)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
index 6d378b0..2157ccf 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
@@ -193,7 +193,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
@@ -250,7 +250,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Map, constructorReference)
                               listener: beginConstructorReference(Map)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
index 8285289..c74ab8a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.intertwined.expect
@@ -168,7 +168,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
@@ -217,7 +217,7 @@
                         parsePrimary(=, expression)
                           parseConstExpression(=)
                             listener: beginConstExpression(const)
-                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(const, ConstructorReferenceContext.Const, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(const, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
index 77797c9..d7e246f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.intertwined.expect
@@ -171,7 +171,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'ComplexTypeParamOrArgInfo')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
@@ -221,7 +221,7 @@
                           parseNewExpression(=)
                             isNextIdentifier(new)
                             listener: beginNewExpression(new)
-                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg', false)
+                            parseConstructorReference(new, ConstructorReferenceContext.New, Instance of 'NoTypeParamOrArg')
                               ensureIdentifier(new, constructorReference)
                                 listener: handleIdentifier(Set, constructorReference)
                               listener: beginConstructorReference(Set)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
index d543918..4344e3d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.expect
@@ -45,7 +45,7 @@
                 handleType(Object, ?)
                 handleIdentifier(key, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, key, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, key, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
index 4efe113..4684887 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327_prime_1.crash_dart.intertwined.expect
@@ -52,7 +52,7 @@
                   parseFormalParameters(foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Object)
                           listener: endMetadataStar(0)
@@ -63,7 +63,7 @@
                         ensureIdentifier(?, formalParameterDeclaration)
                           listener: handleIdentifier(key, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, key, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, key, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
index 499a3c6..5e11902 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.expect
@@ -47,7 +47,7 @@
                 handleType(T, null)
                 handleIdentifier(foo, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -86,7 +86,7 @@
                 handleType(T, null)
                 handleIdentifier(foo, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -118,7 +118,7 @@
                 handleType(T, null)
                 handleIdentifier(foo, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
index 81224ad..28d1be1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_6.crash_dart.intertwined.expect
@@ -60,7 +60,7 @@
                   parseFormalParameters(>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(T)
                           listener: endMetadataStar(0)
@@ -71,7 +71,7 @@
                         ensureIdentifier(T, formalParameterDeclaration)
                           listener: handleIdentifier(foo, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -124,7 +124,7 @@
                   parseFormalParameters(>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(T)
                           listener: endMetadataStar(0)
@@ -135,7 +135,7 @@
                         ensureIdentifier(T, formalParameterDeclaration)
                           listener: handleIdentifier(foo, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -176,7 +176,7 @@
                   parseFormalParameters(>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(T)
                           listener: endMetadataStar(0)
@@ -187,7 +187,7 @@
                         ensureIdentifier(T, formalParameterDeclaration)
                           listener: handleIdentifier(foo, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, foo, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect
index 1404e10..b455d26 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.expect
@@ -22,7 +22,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           handleIdentifier(default, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, default, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect
index 8b1d296..122fa9b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(String)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
                   listener: handleIdentifier(default, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, default, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect
index 74df9c4..63cba8a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(String, null)
           handleIdentifier(defaultX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect
index f165cd4..261da80 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46736_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(String)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(String, formalParameterDeclaration)
                   listener: handleIdentifier(defaultX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart
new file mode 100644
index 0000000..5aeef11
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart
@@ -0,0 +1,3 @@
+void f(int x) {
+  g(: 1, bbb: 0);
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.expect
new file mode 100644
index 0000000..660963d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.expect
@@ -0,0 +1,44 @@
+Problems reported:
+
+parser/error_recovery/issue_48288:2:5: Expected an identifier, but got ':'.
+  g(: 1, bbb: 0);
+    ^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+          handleIdentifier(, namedArgumentReference)
+          handleLiteralInt(1)
+          handleNamedArgument(:)
+          handleIdentifier(bbb, namedArgumentReference)
+          handleLiteralInt(0)
+          handleNamedArgument(:)
+        endArguments(2, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect
new file mode 100644
index 0000000..3c69aee
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect
@@ -0,0 +1,92 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    ensureIdentifier((, namedArgumentReference)
+                                      insertSyntheticIdentifier((, namedArgumentReference, message: Message[ExpectedIdentifier, Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], messageOnToken: null)
+                                        reportRecoverableError(:, Message[ExpectedIdentifier, Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}])
+                                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+                                        rewriter()
+                                      listener: handleIdentifier(, namedArgumentReference)
+                                    parseExpression(:)
+                                      parsePrecedenceExpression(:, 1, true)
+                                        parseUnaryExpression(:, true)
+                                          parsePrimary(:, expression)
+                                            parseLiteralInt(:)
+                                              listener: handleLiteralInt(1)
+                                    listener: handleNamedArgument(:)
+                                    ensureIdentifier(,, namedArgumentReference)
+                                      listener: handleIdentifier(bbb, namedArgumentReference)
+                                    parseExpression(:)
+                                      parsePrecedenceExpression(:, 1, true)
+                                        parseUnaryExpression(:, true)
+                                          parsePrimary(:, expression)
+                                            parseLiteralInt(:)
+                                              listener: handleLiteralInt(0)
+                                    listener: handleNamedArgument(:)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.parser.expect
new file mode 100644
index 0000000..57b6b56a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.parser.expect
@@ -0,0 +1,11 @@
+NOTICE: Stream was rewritten by parser!
+
+void f(int x) {
+g(*synthetic*: 1, bbb: 0);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken][SyntheticStringToken]:[SimpleToken] 1[StringToken],[SimpleToken] bbb[StringToken]:[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.scanner.expect
new file mode 100644
index 0000000..b02d99b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.scanner.expect
@@ -0,0 +1,9 @@
+void f(int x) {
+g(: 1, bbb: 0);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]:[SimpleToken] 1[StringToken],[SimpleToken] bbb[StringToken]:[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48288.equivalence_info
new file mode 100644
index 0000000..b479e22
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48288.dart
+  - issue_48288_prime.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart
new file mode 100644
index 0000000..b547da1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart
@@ -0,0 +1,3 @@
+void f(int x) {
+  g(foo: 1, bbb: 0);
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.expect
new file mode 100644
index 0000000..2211671
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.expect
@@ -0,0 +1,37 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(foo, namedArgumentReference)
+          handleLiteralInt(1)
+          handleNamedArgument(:)
+          handleIdentifier(bbb, namedArgumentReference)
+          handleLiteralInt(0)
+          handleNamedArgument(:)
+        endArguments(2, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect
new file mode 100644
index 0000000..e7e4c1e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect
@@ -0,0 +1,88 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    ensureIdentifier((, namedArgumentReference)
+                                      listener: handleIdentifier(foo, namedArgumentReference)
+                                    parseExpression(:)
+                                      parsePrecedenceExpression(:, 1, true)
+                                        parseUnaryExpression(:, true)
+                                          parsePrimary(:, expression)
+                                            parseLiteralInt(:)
+                                              listener: handleLiteralInt(1)
+                                    listener: handleNamedArgument(:)
+                                    ensureIdentifier(,, namedArgumentReference)
+                                      listener: handleIdentifier(bbb, namedArgumentReference)
+                                    parseExpression(:)
+                                      parsePrecedenceExpression(:, 1, true)
+                                        parseUnaryExpression(:, true)
+                                          parsePrimary(:, expression)
+                                            parseLiteralInt(:)
+                                              listener: handleLiteralInt(0)
+                                    listener: handleNamedArgument(:)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.parser.expect
new file mode 100644
index 0000000..a4c0177
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.parser.expect
@@ -0,0 +1,9 @@
+void f(int x) {
+g(foo: 1, bbb: 0);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]foo[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] bbb[StringToken]:[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.scanner.expect
new file mode 100644
index 0000000..a4c0177
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.scanner.expect
@@ -0,0 +1,9 @@
+void f(int x) {
+g(foo: 1, bbb: 0);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]foo[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] bbb[StringToken]:[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
index 98d94b2..97bd6bb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
@@ -28,12 +28,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -68,12 +67,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -110,12 +108,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -157,12 +154,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -194,12 +190,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -231,12 +226,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -273,12 +267,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -316,12 +309,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -356,12 +348,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -399,12 +390,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -441,12 +431,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -491,12 +480,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -541,12 +529,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -604,12 +591,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
@@ -666,12 +652,11 @@
             listener: endMetadataStar(0)
           ensureIdentifier({, enumValueDeclaration)
             listener: handleIdentifier(v, enumValueDeclaration)
-          parseConstructorReference(v, ConstructorReferenceContext.Const, null, true)
-            listener: handleNoTypeNameInConstructorReference(})
-            listener: beginConstructorReference(v)
-            listener: handleNoTypeArguments(})
-            listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
-            listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+          listener: handleNoTypeNameInConstructorReference(})
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(})
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(})
+          listener: endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
           listener: handleNoArguments(v)
           listener: handleEnumElement({)
         listener: handleEnumElements(}, 1)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
index e02aece..8ca4377 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
@@ -55,7 +55,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
index 81e1bf1..9e7e4e6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
@@ -79,7 +79,7 @@
                   parseFormalParameters(foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -90,7 +90,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart
new file mode 100644
index 0000000..648f203
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart
@@ -0,0 +1,6 @@
+enum E<F> {
+  v<int>./*about to write foo()*/;
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
new file mode 100644
index 0000000..d03460d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
@@ -0,0 +1,79 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_1:2:34: Expected an identifier, but got ';'.
+  v<int>./*about to write foo()*/;
+                                 ^
+
+parser/error_recovery/issue_48380_1:2:34: Expected '(' after this.
+  v<int>./*about to write foo()*/;
+                                 ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+        handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., ;, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
new file mode 100644
index 0000000..d9be036
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
@@ -0,0 +1,125 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            insertSyntheticIdentifier(., constructorReferenceContinuationAfterTypeArguments, message: Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], messageOnToken: null)
+              reportRecoverableError(;, Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}])
+                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+              rewriter()
+            listener: handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., ;, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments()
+            reportRecoverableError(, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.parser.expect
new file mode 100644
index 0000000..b09b0bb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E<F> {
+v<int>. *synthetic*();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.scanner.expect
new file mode 100644
index 0000000..077fb17
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int>. ;
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken] ;[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.equivalence_info
new file mode 100644
index 0000000..65d02ba
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_1.dart
+  - issue_48380_1_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart
new file mode 100644
index 0000000..f7645f0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart
@@ -0,0 +1,7 @@
+enum E<F> {
+  v1<int>./*about to write foo()*/,
+  v2<int>.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
new file mode 100644
index 0000000..a476264
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
@@ -0,0 +1,94 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_1_comma:2:35: Expected an identifier, but got ','.
+  v1<int>./*about to write foo()*/,
+                                  ^
+
+parser/error_recovery/issue_48380_1_comma:2:35: Expected '(' after this.
+  v1<int>./*about to write foo()*/,
+                                  ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v1)
+      endMetadataStar(0)
+      handleIdentifier(v1, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v1)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], ,, ,)
+        handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v1, ., ,, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v2)
+      endMetadataStar(0)
+      handleIdentifier(v2, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v2)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
new file mode 100644
index 0000000..5b66e82
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
@@ -0,0 +1,146 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v1)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v1, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v1)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            insertSyntheticIdentifier(., constructorReferenceContinuationAfterTypeArguments, message: Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], messageOnToken: null)
+              reportRecoverableError(,, Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}])
+                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], ,, ,)
+              rewriter()
+            listener: handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v1, ., ,, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments()
+            reportRecoverableError(, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v2)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v2, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v2)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.parser.expect
new file mode 100644
index 0000000..6808052
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.parser.expect
@@ -0,0 +1,19 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E<F> {
+v1<int>. *synthetic*(),
+v2<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v1[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken],[SimpleToken]
+v2[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.scanner.expect
new file mode 100644
index 0000000..c29b1ae
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v1<int>. ,
+v2<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v1[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken] ,[SimpleToken]
+v2[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.equivalence_info
new file mode 100644
index 0000000..d57b2dd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_1_comma.dart
+  - issue_48380_1_comma_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart
new file mode 100644
index 0000000..091bd9d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart
@@ -0,0 +1,7 @@
+enum E<F> {
+  v1<int>.foo(),
+  v2<int>.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
new file mode 100644
index 0000000..02ff85c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
@@ -0,0 +1,82 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v1)
+      endMetadataStar(0)
+      handleIdentifier(v1, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v1)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v1, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v2)
+      endMetadataStar(0)
+      handleIdentifier(v2, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v2)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
new file mode 100644
index 0000000..2b675de
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
@@ -0,0 +1,139 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v1)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v1, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v1)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v1, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v2)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v2, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v2)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v2, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.parser.expect
new file mode 100644
index 0000000..587bf4c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.parser.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v1<int>.foo(),
+v2<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v1[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken],[SimpleToken]
+v2[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.scanner.expect
new file mode 100644
index 0000000..587bf4c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v1<int>.foo(),
+v2<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v1[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken],[SimpleToken]
+v2[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart
new file mode 100644
index 0000000..f99ff5a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart
@@ -0,0 +1,6 @@
+enum E<F> {
+  v<int>.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
new file mode 100644
index 0000000..f07eb68
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
@@ -0,0 +1,67 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
new file mode 100644
index 0000000..5140820
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
@@ -0,0 +1,118 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.parser.expect
new file mode 100644
index 0000000..7c3acbb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.parser.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.scanner.expect
new file mode 100644
index 0000000..7c3acbb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart
new file mode 100644
index 0000000..e5e57c1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart
@@ -0,0 +1,6 @@
+enum E<F> {
+  v<int>/*about to write () or .foo()*/;
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
new file mode 100644
index 0000000..3059da9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
@@ -0,0 +1,74 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_2:2:8: Expected '(' after this.
+  v<int>/*about to write () or .foo()*/;
+       ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleNoConstructorReferenceContinuationAfterTypeArguments(;)
+      endConstructorReference(v, null, ;, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
new file mode 100644
index 0000000..aa66271
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
@@ -0,0 +1,120 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(;)
+          listener: endConstructorReference(v, null, ;, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(>)
+            reportRecoverableError(>, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.parser.expect
new file mode 100644
index 0000000..84679d8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E<F> {
+v<int> ();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.scanner.expect
new file mode 100644
index 0000000..4e2d701
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int> ;
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ;[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.equivalence_info
new file mode 100644
index 0000000..0e5ddd3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_2.dart
+  - issue_48380_2_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart
new file mode 100644
index 0000000..cd77dcf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart
@@ -0,0 +1,7 @@
+enum E<F> {
+  v<int>/*about to write () or .foo()*/,
+  v<int>.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
new file mode 100644
index 0000000..de6c892
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
@@ -0,0 +1,89 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_2_comma:2:8: Expected '(' after this.
+  v<int>/*about to write () or .foo()*/,
+       ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleNoConstructorReferenceContinuationAfterTypeArguments(,)
+      endConstructorReference(v, null, ,, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
new file mode 100644
index 0000000..7886f23
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
@@ -0,0 +1,141 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(,)
+          listener: endConstructorReference(v, null, ,, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(>)
+            reportRecoverableError(>, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], >, >)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.parser.expect
new file mode 100644
index 0000000..dbc0185
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.parser.expect
@@ -0,0 +1,19 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E<F> {
+v<int> (),
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken],[SimpleToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.scanner.expect
new file mode 100644
index 0000000..b01cb81
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v<int> ,
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ,[SimpleToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.equivalence_info
new file mode 100644
index 0000000..7a6d9e1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_2_comma.dart
+  - issue_48380_2_comma_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart
new file mode 100644
index 0000000..fa5b1ba
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart
@@ -0,0 +1,7 @@
+enum E<F> {
+  v<int>(),
+  v<int>.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
new file mode 100644
index 0000000..04bf2ea
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
@@ -0,0 +1,82 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleNoConstructorReferenceContinuationAfterTypeArguments(()
+      endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
new file mode 100644
index 0000000..da8382e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
@@ -0,0 +1,138 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+          listener: endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(>)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.parser.expect
new file mode 100644
index 0000000..c224e0f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.parser.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v<int>(),
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken])[SimpleToken],[SimpleToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.scanner.expect
new file mode 100644
index 0000000..c224e0f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E<F> {
+v<int>(),
+v<int>.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken])[SimpleToken],[SimpleToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart
new file mode 100644
index 0000000..99fb1cb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart
@@ -0,0 +1,6 @@
+enum E<F> {
+  v<int>();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
new file mode 100644
index 0000000..682bbe8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
@@ -0,0 +1,67 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      beginTypeVariables(<)
+        beginMetadataStar(F)
+        endMetadataStar(0)
+        handleIdentifier(F, typeVariableDeclaration)
+        beginTypeVariable(F)
+          handleTypeVariablesDefined(F, 1)
+          handleNoType(F)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(<)
+      beginConstructorReference(v)
+        beginTypeArguments(<)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(>)
+          handleType(int, null)
+        endTypeArguments(1, <, >)
+        handleNoConstructorReferenceContinuationAfterTypeArguments(()
+      endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
new file mode 100644
index 0000000..9e712d2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
@@ -0,0 +1,117 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(F)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(F, typeVariableDeclaration)
+          listener: beginTypeVariable(F)
+          listener: handleTypeVariablesDefined(F, 1)
+          listener: handleNoType(F)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          parseEnumWithClauseOpt(>)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(>)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(<)
+          listener: beginConstructorReference(v)
+          listener: beginTypeArguments(<)
+          listener: handleIdentifier(int, typeReference)
+          listener: handleNoTypeArguments(>)
+          listener: handleType(int, null)
+          listener: endTypeArguments(1, <, >)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(()
+          listener: endConstructorReference(v, null, (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(>)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.parser.expect
new file mode 100644
index 0000000..03de71a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.parser.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int>();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.scanner.expect
new file mode 100644
index 0000000..03de71a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E<F> {
+v<int>();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken]<[BeginToken]F[StringToken]>[SimpleToken] {[BeginToken]
+v[StringToken]<[BeginToken]int[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart
new file mode 100644
index 0000000..7b0a907
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart
@@ -0,0 +1,6 @@
+enum E {
+  v./* about to write foo()*/;
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
new file mode 100644
index 0000000..3816ec8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
@@ -0,0 +1,67 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_3:2:30: Expected an identifier, but got ';'.
+  v./* about to write foo()*/;
+                             ^
+
+parser/error_recovery/issue_48380_3:2:30: Expected '(' after this.
+  v./* about to write foo()*/;
+                             ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables({)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+        handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., ;, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
new file mode 100644
index 0000000..180f9ab
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
@@ -0,0 +1,113 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: handleNoTypeVariables({)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            insertSyntheticIdentifier(., constructorReferenceContinuationAfterTypeArguments, message: Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], messageOnToken: null)
+              reportRecoverableError(;, Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}])
+                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+              rewriter()
+            listener: handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., ;, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments()
+            reportRecoverableError(, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.parser.expect
new file mode 100644
index 0000000..88ce45f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E {
+v. *synthetic*();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.scanner.expect
new file mode 100644
index 0000000..2124d41
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E {
+v. ;
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken] ;[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.equivalence_info
new file mode 100644
index 0000000..9d49e0d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_3.dart
+  - issue_48380_3_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart
new file mode 100644
index 0000000..745f4d0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart
@@ -0,0 +1,7 @@
+enum E {
+  v./* about to write foo()*/,
+  v.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
new file mode 100644
index 0000000..c79dcad
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
@@ -0,0 +1,78 @@
+Problems reported:
+
+parser/error_recovery/issue_48380_3_comma:2:30: Expected an identifier, but got ','.
+  v./* about to write foo()*/,
+                             ^
+
+parser/error_recovery/issue_48380_3_comma:2:30: Expected '(' after this.
+  v./* about to write foo()*/,
+                             ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables({)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], ,, ,)
+        handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., ,, ConstructorReferenceContext.Const)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
new file mode 100644
index 0000000..fcabf24
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
@@ -0,0 +1,130 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: handleNoTypeVariables({)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            insertSyntheticIdentifier(., constructorReferenceContinuationAfterTypeArguments, message: Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], messageOnToken: null)
+              reportRecoverableError(,, Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}])
+                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ','., Try inserting an identifier before ','., {lexeme: ,}], ,, ,)
+              rewriter()
+            listener: handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., ,, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments()
+            reportRecoverableError(, Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}])
+              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ,, ,)
+            rewriter()
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.parser.expect
new file mode 100644
index 0000000..c1c5a98
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.parser.expect
@@ -0,0 +1,19 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E {
+v. *synthetic*(),
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken],[SimpleToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.scanner.expect
new file mode 100644
index 0000000..76bf22f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E {
+v. ,
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken] ,[SimpleToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.equivalence_info b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.equivalence_info
new file mode 100644
index 0000000..c70a57e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.equivalence_info
@@ -0,0 +1,7 @@
+files:
+  - issue_48380_3_comma.dart
+  - issue_48380_3_comma_ok.dart
+filters:
+  - ignoreListenerArguments
+ignored:
+  - handleRecoverableError
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart
new file mode 100644
index 0000000..9012b7a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart
@@ -0,0 +1,7 @@
+enum E {
+  v.foo(),
+  v.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
new file mode 100644
index 0000000..2059af9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
@@ -0,0 +1,66 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables({)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement(,)
+      handleEnumElements(;, 2)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
new file mode 100644
index 0000000..2c0722c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
@@ -0,0 +1,123 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: handleNoTypeVariables({)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        parseEnumElement(,)
+          parseMetadataStar(,)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier(,, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement(,)
+        listener: handleEnumElements(;, 2)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.parser.expect
new file mode 100644
index 0000000..8f655c0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.parser.expect
@@ -0,0 +1,17 @@
+enum E {
+v.foo(),
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken],[SimpleToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.scanner.expect
new file mode 100644
index 0000000..8f655c0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.scanner.expect
@@ -0,0 +1,17 @@
+enum E {
+v.foo(),
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken],[SimpleToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart
new file mode 100644
index 0000000..0552cb6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart
@@ -0,0 +1,6 @@
+enum E {
+  v.foo();
+
+  const E();
+  const E.foo();
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
new file mode 100644
index 0000000..e71a4ea
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
@@ -0,0 +1,55 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables({)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(.)
+      beginConstructorReference(v)
+        handleNoTypeArguments(.)
+        handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+      endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+      beginArguments(()
+      endArguments(0, (, ))
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+      beginMetadataStar(const)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+          handleNoType(const)
+          handleIdentifier(E, methodDeclaration)
+          handleIdentifier(foo, methodDeclarationContinuation)
+          handleQualified(.)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          handleEmptyFunctionBody(;)
+        endEnumConstructor(null, const, (, null, ;)
+      endMember()
+    endEnum(enum, {, 2)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
new file mode 100644
index 0000000..b443f1f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
@@ -0,0 +1,106 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: handleNoTypeVariables({)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(v, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(.)
+          listener: beginConstructorReference(v)
+          listener: handleNoTypeArguments(.)
+          ensureIdentifier(., constructorReferenceContinuationAfterTypeArguments)
+            listener: handleIdentifier(foo, constructorReferenceContinuationAfterTypeArguments)
+          listener: endConstructorReference(v, ., (, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(foo)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+            parseMethodTypeVar(E)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(E, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(E, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, const)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(const)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
+            listener: handleNoType(const)
+            ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+              listener: handleIdentifier(E, methodDeclaration)
+            parseQualifiedRestOpt(E, methodDeclarationContinuation)
+              parseQualifiedRest(E, methodDeclarationContinuation)
+                ensureIdentifier(., methodDeclarationContinuation)
+                  listener: handleIdentifier(foo, methodDeclarationContinuation)
+                listener: handleQualified(.)
+            parseMethodTypeVar(foo)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(foo, E, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endEnumConstructor(null, const, (, null, ;)
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 2)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.parser.expect
new file mode 100644
index 0000000..9de11dd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.parser.expect
@@ -0,0 +1,15 @@
+enum E {
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.scanner.expect
new file mode 100644
index 0000000..9de11dd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.scanner.expect
@@ -0,0 +1,15 @@
+enum E {
+v.foo();
+
+const E();
+const E.foo();
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+v[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+const[KeywordToken] E[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] E[StringToken].[SimpleToken]foo[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart
new file mode 100644
index 0000000..120cb97
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart
@@ -0,0 +1,8 @@
+enum E {
+  x;
+
+  String hello() {
+    print("hello");
+    return "hello";
+  }
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
new file mode 100644
index 0000000..f0af6df
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
@@ -0,0 +1,53 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables({)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(x)
+      endMetadataStar(0)
+      handleIdentifier(x, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(;)
+      beginConstructorReference(x)
+        handleNoTypeArguments(;)
+        handleNoConstructorReferenceContinuationAfterTypeArguments(;)
+      endConstructorReference(x, null, ;, ConstructorReferenceContext.Const)
+      handleNoArguments(x)
+      handleEnumElement({)
+      handleEnumElements(;, 1)
+      beginMetadataStar(String)
+      endMetadataStar(0)
+      beginMember()
+        beginMethod(DeclarationKind.Enum, null, null, null, null, null, null, hello)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(hello)
+          handleType(String, null)
+          handleIdentifier(hello, methodDeclaration)
+          handleNoTypeVariables(()
+          beginFormalParameters((, MemberKind.NonStaticMethod)
+          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          beginBlockFunctionBody({)
+            handleIdentifier(print, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+              beginLiteralString("hello")
+              endLiteralString(0, ))
+            endArguments(1, (, ))
+            handleSend(print, ;)
+            handleExpressionStatement(;)
+            beginReturnStatement(return)
+              beginLiteralString("hello")
+              endLiteralString(0, ;)
+            endReturnStatement(true, return, ;)
+          endBlockFunctionBody(2, {, })
+        endEnumMethod(null, String, (, null, })
+      endMember()
+    endEnum(enum, {, 1)
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
new file mode 100644
index 0000000..0a13135
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
@@ -0,0 +1,122 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
+      parseEnum(enum)
+        listener: beginUncategorizedTopLevelDeclaration(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(E, enum)
+          listener: handleNoTypeVariables({)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(x)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(x, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(;)
+          listener: beginConstructorReference(x)
+          listener: handleNoTypeArguments(;)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(;)
+          listener: endConstructorReference(x, null, ;, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(x)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(;, 1)
+        notEofOrValue(}, String)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(String)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, hello, DeclarationKind.Enum, E, false)
+            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, null, null, hello)
+            listener: handleIdentifier(String, typeReference)
+            listener: handleNoTypeArguments(hello)
+            listener: handleType(String, null)
+            ensureIdentifierPotentiallyRecovered(String, methodDeclaration, false)
+              listener: handleIdentifier(hello, methodDeclaration)
+            parseQualifiedRestOpt(hello, methodDeclarationContinuation)
+            parseMethodTypeVar(hello)
+              listener: handleNoTypeVariables(()
+            parseGetterOrFormalParameters(hello, hello, false, MemberKind.NonStaticMethod)
+              parseFormalParameters(hello, MemberKind.NonStaticMethod)
+                parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                  listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                  listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            parseInitializersOpt())
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: beginBlockFunctionBody({)
+              notEofOrValue(}, print)
+              parseStatement({)
+                parseStatementX({)
+                  parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                    looksLikeLocalFunction(print)
+                    parseExpressionStatement({)
+                      parseExpression({)
+                        parsePrecedenceExpression({, 1, true)
+                          parseUnaryExpression({, true)
+                            parsePrimary({, expression)
+                              parseSendOrFunctionLiteral({, expression)
+                                looksLikeFunctionBody(;)
+                                parseSend({, expression)
+                                  isNextIdentifier({)
+                                  ensureIdentifier({, expression)
+                                    listener: handleIdentifier(print, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(print)
+                                    parseArguments(print)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseLiteralString(()
+                                                  parseSingleLiteralString(()
+                                                    listener: beginLiteralString("hello")
+                                                    listener: endLiteralString(0, ))
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(print, ;)
+                      ensureSemicolon())
+                      listener: handleExpressionStatement(;)
+              notEofOrValue(}, return)
+              parseStatement(;)
+                parseStatementX(;)
+                  parseReturnStatement(;)
+                    listener: beginReturnStatement(return)
+                    parseExpression(return)
+                      parsePrecedenceExpression(return, 1, true)
+                        parseUnaryExpression(return, true)
+                          parsePrimary(return, expression)
+                            parseLiteralString(return)
+                              parseSingleLiteralString(return)
+                                listener: beginLiteralString("hello")
+                                listener: endLiteralString(0, ;)
+                    ensureSemicolon("hello")
+                    listener: endReturnStatement(true, return, ;)
+                    inGenerator()
+              notEofOrValue(}, })
+              listener: endBlockFunctionBody(2, {, })
+            listener: endEnumMethod(null, String, (, null, })
+          listener: endMember()
+        notEofOrValue(}, })
+        listener: endEnum(enum, {, 1)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.parser.expect
new file mode 100644
index 0000000..31f63bc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.parser.expect
@@ -0,0 +1,19 @@
+enum E {
+x;
+
+String hello() {
+print("hello");
+return "hello";
+}
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+x[StringToken];[SimpleToken]
+
+String[StringToken] hello[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken];[SimpleToken]
+return[KeywordToken] "hello"[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.scanner.expect
new file mode 100644
index 0000000..31f63bc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.scanner.expect
@@ -0,0 +1,19 @@
+enum E {
+x;
+
+String hello() {
+print("hello");
+return "hello";
+}
+}
+
+
+enum[KeywordToken] E[StringToken] {[BeginToken]
+x[StringToken];[SimpleToken]
+
+String[StringToken] hello[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken];[SimpleToken]
+return[KeywordToken] "hello"[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
index 9cff1ec..8f0651c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
@@ -53,7 +53,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -78,7 +78,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -118,7 +118,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -182,7 +182,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -248,7 +248,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -299,7 +299,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -350,7 +350,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -414,7 +414,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -492,7 +492,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
index 891b53a..2cad8a9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters(A, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -55,7 +55,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -90,7 +90,7 @@
                   parseFormalParameters(y, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -101,7 +101,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -162,7 +162,7 @@
                   parseFormalParameters(B, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -173,7 +173,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -295,7 +295,7 @@
                   parseFormalParameters(B2, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -306,7 +306,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -436,7 +436,7 @@
                   parseFormalParameters(B3, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -447,7 +447,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -550,7 +550,7 @@
                   parseFormalParameters(y, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -561,7 +561,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -639,7 +639,7 @@
                   parseFormalParameters(C, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -650,7 +650,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -772,7 +772,7 @@
                   parseFormalParameters(D, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -783,7 +783,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -925,7 +925,7 @@
                   parseFormalParameters(E, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -936,7 +936,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
index 6b97b24..247be6f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
@@ -27,7 +27,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -52,7 +52,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -92,7 +92,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -155,7 +155,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -220,7 +220,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -270,7 +270,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -321,7 +321,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -384,7 +384,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -461,7 +461,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
index 40c0fe6..baded31 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters(A, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -55,7 +55,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -90,7 +90,7 @@
                   parseFormalParameters(y, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -101,7 +101,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -162,7 +162,7 @@
                   parseFormalParameters(B, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -173,7 +173,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -292,7 +292,7 @@
                   parseFormalParameters(B2, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -303,7 +303,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -430,7 +430,7 @@
                   parseFormalParameters(B3, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -441,7 +441,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -541,7 +541,7 @@
                   parseFormalParameters(y, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -552,7 +552,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -630,7 +630,7 @@
                   parseFormalParameters(C, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -641,7 +641,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -760,7 +760,7 @@
                   parseFormalParameters(D, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -771,7 +771,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -910,7 +910,7 @@
                   parseFormalParameters(E, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -921,7 +921,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
index 0c60901..0e04d97 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
@@ -78,7 +78,7 @@
                   listener: handleRecoverableError(RedirectionInNonFactory, =, =)
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       insertSyntheticIdentifier(=, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
                         reportRecoverableError(0, Message[ExpectedIdentifier, Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
index 6eb5e42..902c6a8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.expect
@@ -511,7 +511,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -569,7 +569,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -628,7 +628,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -684,7 +684,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -742,7 +742,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -801,7 +801,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -866,7 +866,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -926,7 +926,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -986,7 +986,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1046,7 +1046,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1110,7 +1110,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1174,7 +1174,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1233,7 +1233,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1292,7 +1292,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1351,7 +1351,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1425,7 +1425,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1484,7 +1484,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1554,7 +1554,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1613,7 +1613,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1672,7 +1672,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1731,7 +1731,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1789,7 +1789,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1847,7 +1847,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1906,7 +1906,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1965,7 +1965,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2052,7 +2052,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2112,7 +2112,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2191,7 +2191,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2249,7 +2249,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2307,7 +2307,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2366,7 +2366,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2436,7 +2436,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2494,7 +2494,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2553,7 +2553,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2612,7 +2612,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2670,7 +2670,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2729,7 +2729,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2797,7 +2797,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2855,7 +2855,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2913,7 +2913,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -2971,7 +2971,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3030,7 +3030,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3094,7 +3094,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3152,7 +3152,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3210,7 +3210,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3268,7 +3268,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3326,7 +3326,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3384,7 +3384,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3442,7 +3442,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3500,7 +3500,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3559,7 +3559,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3619,7 +3619,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3674,7 +3674,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3732,7 +3732,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3790,7 +3790,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3848,7 +3848,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3918,7 +3918,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -3977,7 +3977,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4048,7 +4048,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4118,7 +4118,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4177,7 +4177,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4233,7 +4233,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4292,7 +4292,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4359,7 +4359,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4418,7 +4418,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4505,7 +4505,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4592,7 +4592,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4663,7 +4663,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -4722,7 +4722,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
index 2b9a2c3..36f1d49 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.intertwined.expect
@@ -45,7 +45,7 @@
                   parseFormalParameters(abstract, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -56,7 +56,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -189,7 +189,7 @@
                   parseFormalParameters(as, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -200,7 +200,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -337,7 +337,7 @@
                   parseFormalParameters(assert, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -348,7 +348,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -472,7 +472,7 @@
                   parseFormalParameters(async, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -483,7 +483,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -616,7 +616,7 @@
                   parseFormalParameters(await, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -627,7 +627,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -767,7 +767,7 @@
                   parseFormalParameters(break, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -778,7 +778,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -946,7 +946,7 @@
                   parseFormalParameters(case, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -957,7 +957,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1093,7 +1093,7 @@
                   parseFormalParameters(catch, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1104,7 +1104,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1240,7 +1240,7 @@
                   parseFormalParameters(class, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1251,7 +1251,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1387,7 +1387,7 @@
                   parseFormalParameters(const, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1398,7 +1398,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1464,7 +1464,7 @@
                               parsePrimary(return, expression)
                                 parseConstExpression(return)
                                   listener: beginConstExpression(const)
-                                  parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                                  parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                                     ensureIdentifier(const, constructorReference)
                                       insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
                                         reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
@@ -1539,7 +1539,7 @@
                   parseFormalParameters(continue, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1550,7 +1550,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1714,7 +1714,7 @@
                   parseFormalParameters(covariant, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1725,7 +1725,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1862,7 +1862,7 @@
                   parseFormalParameters(default, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1873,7 +1873,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2005,7 +2005,7 @@
                   parseFormalParameters(deferred, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2016,7 +2016,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2153,7 +2153,7 @@
                   parseFormalParameters(do, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2164,7 +2164,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2352,7 +2352,7 @@
                   parseFormalParameters(dynamic, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2363,7 +2363,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2500,7 +2500,7 @@
                   parseFormalParameters(else, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2511,7 +2511,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2697,7 +2697,7 @@
                   parseFormalParameters(enum, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2708,7 +2708,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2840,7 +2840,7 @@
                   parseFormalParameters(export, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2851,7 +2851,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2988,7 +2988,7 @@
                   parseFormalParameters(extends, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2999,7 +2999,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3131,7 +3131,7 @@
                   parseFormalParameters(extension, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3142,7 +3142,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3275,7 +3275,7 @@
                   parseFormalParameters(external, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3286,7 +3286,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3419,7 +3419,7 @@
                   parseFormalParameters(factory, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3430,7 +3430,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3567,7 +3567,7 @@
                   parseFormalParameters(false, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3578,7 +3578,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3709,7 +3709,7 @@
                   parseFormalParameters(final, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3720,7 +3720,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -3948,7 +3948,7 @@
                   parseFormalParameters(finally, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -3959,7 +3959,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4095,7 +4095,7 @@
                   parseFormalParameters(for, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4106,7 +4106,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4305,7 +4305,7 @@
                   parseFormalParameters(Function, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4316,7 +4316,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4450,7 +4450,7 @@
                   parseFormalParameters(get, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4461,7 +4461,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4594,7 +4594,7 @@
                   parseFormalParameters(hide, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4605,7 +4605,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4742,7 +4742,7 @@
                   parseFormalParameters(if, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4753,7 +4753,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -4923,7 +4923,7 @@
                   parseFormalParameters(implements, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -4934,7 +4934,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5067,7 +5067,7 @@
                   parseFormalParameters(import, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5078,7 +5078,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5215,7 +5215,7 @@
                   parseFormalParameters(in, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5226,7 +5226,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5358,7 +5358,7 @@
                   parseFormalParameters(inout, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5369,7 +5369,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5502,7 +5502,7 @@
                   parseFormalParameters(interface, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5513,7 +5513,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5650,7 +5650,7 @@
                   parseFormalParameters(is, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5661,7 +5661,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5825,7 +5825,7 @@
                   parseFormalParameters(late, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5836,7 +5836,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -5969,7 +5969,7 @@
                   parseFormalParameters(library, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -5980,7 +5980,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6113,7 +6113,7 @@
                   parseFormalParameters(mixin, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6124,7 +6124,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6257,7 +6257,7 @@
                   parseFormalParameters(native, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6268,7 +6268,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6405,7 +6405,7 @@
                   parseFormalParameters(new, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6416,7 +6416,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6483,7 +6483,7 @@
                                 parseNewExpression(return)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
                                         reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
@@ -6558,7 +6558,7 @@
                   parseFormalParameters(null, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6569,7 +6569,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6696,7 +6696,7 @@
                   parseFormalParameters(of, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6707,7 +6707,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6840,7 +6840,7 @@
                   parseFormalParameters(on, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6851,7 +6851,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -6986,7 +6986,7 @@
                   parseFormalParameters(operator, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -6997,7 +6997,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7130,7 +7130,7 @@
                   parseFormalParameters(out, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7141,7 +7141,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7274,7 +7274,7 @@
                   parseFormalParameters(part, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7285,7 +7285,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7418,7 +7418,7 @@
                   parseFormalParameters(patch, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7429,7 +7429,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7562,7 +7562,7 @@
                   parseFormalParameters(required, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7573,7 +7573,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7710,7 +7710,7 @@
                   parseFormalParameters(rethrow, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7721,7 +7721,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7857,7 +7857,7 @@
                   parseFormalParameters(return, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -7868,7 +7868,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -7997,7 +7997,7 @@
                   parseFormalParameters(set, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8008,7 +8008,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -8141,7 +8141,7 @@
                   parseFormalParameters(show, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8152,7 +8152,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -8285,7 +8285,7 @@
                   parseFormalParameters(source, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8296,7 +8296,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -8429,7 +8429,7 @@
                   parseFormalParameters(static, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8440,7 +8440,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -8600,7 +8600,7 @@
                     parseFormalParameters(, MemberKind.NonStaticMethod)
                       parseFormalParametersRest((, MemberKind.NonStaticMethod)
                         listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                           parseMetadataStar(()
                             listener: beginMetadataStar(int)
                             listener: endMetadataStar(0)
@@ -8611,7 +8611,7 @@
                           ensureIdentifier(int, formalParameterDeclaration)
                             listener: handleIdentifier(x, formalParameterDeclaration)
                           listener: handleFormalParameterWithoutValue())
-                          listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                          listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                   parseInitializersOpt())
                     listener: handleNoInitializers()
@@ -8741,7 +8741,7 @@
                   parseFormalParameters(switch, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8752,7 +8752,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -8931,7 +8931,7 @@
                   parseFormalParameters(sync, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -8942,7 +8942,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -9102,7 +9102,7 @@
                     parseFormalParameters(, MemberKind.NonStaticMethod)
                       parseFormalParametersRest((, MemberKind.NonStaticMethod)
                         listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                           parseMetadataStar(()
                             listener: beginMetadataStar(int)
                             listener: endMetadataStar(0)
@@ -9113,7 +9113,7 @@
                           ensureIdentifier(int, formalParameterDeclaration)
                             listener: handleIdentifier(x, formalParameterDeclaration)
                           listener: handleFormalParameterWithoutValue())
-                          listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                          listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                   parseInitializersOpt())
                     listener: handleNoInitializers()
@@ -9243,7 +9243,7 @@
                   parseFormalParameters(throw, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -9254,7 +9254,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -9385,7 +9385,7 @@
                   parseFormalParameters(true, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -9396,7 +9396,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -9527,7 +9527,7 @@
                   parseFormalParameters(try, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -9538,7 +9538,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -9708,7 +9708,7 @@
                   parseFormalParameters(typedef, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -9719,7 +9719,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -9856,7 +9856,7 @@
                   parseFormalParameters(var, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -9867,7 +9867,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -10095,7 +10095,7 @@
                   parseFormalParameters(void, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -10106,7 +10106,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -10335,7 +10335,7 @@
                   parseFormalParameters(while, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -10346,7 +10346,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -10520,7 +10520,7 @@
                   parseFormalParameters(with, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -10531,7 +10531,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -10663,7 +10663,7 @@
                   parseFormalParameters(yield, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -10674,7 +10674,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect
index a1fd276..fd5c4ec 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.expect
@@ -809,7 +809,7 @@
           handleType(int, null)
           handleIdentifier(abstract, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, abstract, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, abstract, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -966,7 +966,7 @@
           handleType(int, null)
           handleIdentifier(as, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, as, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, as, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1124,7 +1124,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
           handleIdentifier(assert, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, assert, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, assert, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1286,7 +1286,7 @@
           handleType(int, null)
           handleIdentifier(async, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, async, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, async, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1443,7 +1443,7 @@
           handleType(int, null)
           handleIdentifier(await, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, await, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, await, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1601,7 +1601,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
           handleIdentifier(break, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, break, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, break, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1764,7 +1764,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
           handleIdentifier(case, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, case, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, case, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1927,7 +1927,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
           handleIdentifier(catch, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, catch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, catch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2090,7 +2090,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
           handleIdentifier(class, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, class, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, class, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2253,7 +2253,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
           handleIdentifier(const, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, const, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, const, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2416,7 +2416,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
           handleIdentifier(continue, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, continue, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, continue, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2578,7 +2578,7 @@
           handleType(int, null)
           handleIdentifier(covariant, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, covariant, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, covariant, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2736,7 +2736,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
           handleIdentifier(default, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, default, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2898,7 +2898,7 @@
           handleType(int, null)
           handleIdentifier(deferred, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, deferred, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, deferred, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3056,7 +3056,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
           handleIdentifier(do, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, do, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, do, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3218,7 +3218,7 @@
           handleType(int, null)
           handleIdentifier(dynamic, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, dynamic, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, dynamic, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3376,7 +3376,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
           handleIdentifier(else, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, else, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, else, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3539,7 +3539,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
           handleIdentifier(enum, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, enum, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, enum, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3701,7 +3701,7 @@
           handleType(int, null)
           handleIdentifier(export, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, export, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, export, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3859,7 +3859,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
           handleIdentifier(extends, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, extends, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, extends, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4021,7 +4021,7 @@
           handleType(int, null)
           handleIdentifier(extension, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, extension, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, extension, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4178,7 +4178,7 @@
           handleType(int, null)
           handleIdentifier(external, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, external, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, external, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4335,7 +4335,7 @@
           handleType(int, null)
           handleIdentifier(factory, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, factory, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, factory, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4493,7 +4493,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
           handleIdentifier(false, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, false, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, false, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4656,7 +4656,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
           handleIdentifier(final, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, final, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, final, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4819,7 +4819,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
           handleIdentifier(finally, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, finally, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, finally, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4982,7 +4982,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
           handleIdentifier(for, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, for, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, for, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5144,7 +5144,7 @@
           handleType(int, null)
           handleIdentifier(Function, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, Function, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, Function, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5301,7 +5301,7 @@
           handleType(int, null)
           handleIdentifier(get, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, get, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, get, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5458,7 +5458,7 @@
           handleType(int, null)
           handleIdentifier(hide, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, hide, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, hide, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5616,7 +5616,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
           handleIdentifier(if, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, if, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, if, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5778,7 +5778,7 @@
           handleType(int, null)
           handleIdentifier(implements, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, implements, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, implements, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5935,7 +5935,7 @@
           handleType(int, null)
           handleIdentifier(import, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, import, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, import, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6093,7 +6093,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
           handleIdentifier(in, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, in, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, in, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6255,7 +6255,7 @@
           handleType(int, null)
           handleIdentifier(inout, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, inout, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, inout, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6412,7 +6412,7 @@
           handleType(int, null)
           handleIdentifier(interface, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, interface, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, interface, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6570,7 +6570,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
           handleIdentifier(is, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, is, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, is, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6732,7 +6732,7 @@
           handleType(int, null)
           handleIdentifier(late, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, late, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, late, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6889,7 +6889,7 @@
           handleType(int, null)
           handleIdentifier(library, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, library, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, library, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7046,7 +7046,7 @@
           handleType(int, null)
           handleIdentifier(mixin, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, mixin, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, mixin, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7203,7 +7203,7 @@
           handleType(int, null)
           handleIdentifier(native, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, native, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, native, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7361,7 +7361,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
           handleIdentifier(new, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, new, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, new, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7524,7 +7524,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
           handleIdentifier(null, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, null, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, null, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7686,7 +7686,7 @@
           handleType(int, null)
           handleIdentifier(of, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, of, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, of, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7843,7 +7843,7 @@
           handleType(int, null)
           handleIdentifier(on, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8000,7 +8000,7 @@
           handleType(int, null)
           handleIdentifier(operator, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, operator, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, operator, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8157,7 +8157,7 @@
           handleType(int, null)
           handleIdentifier(out, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, out, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, out, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8314,7 +8314,7 @@
           handleType(int, null)
           handleIdentifier(part, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, part, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, part, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8471,7 +8471,7 @@
           handleType(int, null)
           handleIdentifier(patch, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, patch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, patch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8628,7 +8628,7 @@
           handleType(int, null)
           handleIdentifier(required, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, required, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, required, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8786,7 +8786,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
           handleIdentifier(rethrow, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, rethrow, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, rethrow, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8949,7 +8949,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
           handleIdentifier(return, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, return, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, return, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9111,7 +9111,7 @@
           handleType(int, null)
           handleIdentifier(set, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, set, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, set, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9268,7 +9268,7 @@
           handleType(int, null)
           handleIdentifier(show, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, show, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, show, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9425,7 +9425,7 @@
           handleType(int, null)
           handleIdentifier(source, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, source, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, source, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9582,7 +9582,7 @@
           handleType(int, null)
           handleIdentifier(static, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, static, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, static, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9740,7 +9740,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
           handleIdentifier(super, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, super, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, super, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9903,7 +9903,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
           handleIdentifier(switch, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, switch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, switch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10065,7 +10065,7 @@
           handleType(int, null)
           handleIdentifier(sync, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sync, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sync, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10223,7 +10223,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
           handleIdentifier(this, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, this, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, this, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10386,7 +10386,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
           handleIdentifier(throw, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, throw, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, throw, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10549,7 +10549,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
           handleIdentifier(true, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, true, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, true, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10712,7 +10712,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
           handleIdentifier(try, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, try, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, try, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10874,7 +10874,7 @@
           handleType(int, null)
           handleIdentifier(typedef, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, typedef, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, typedef, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -11032,7 +11032,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
           handleIdentifier(var, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, var, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, var, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -11195,7 +11195,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
           handleIdentifier(void, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, void, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, void, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -11358,7 +11358,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
           handleIdentifier(while, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, while, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, while, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -11521,7 +11521,7 @@
           handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
           handleIdentifier(with, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, with, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, with, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -11683,7 +11683,7 @@
           handleType(int, null)
           handleIdentifier(yield, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, yield, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, yield, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect
index af2dd41..92be491 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,7 +31,7 @@
                   inPlainSync()
                   listener: handleIdentifier(abstract, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, abstract, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, abstract, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -303,7 +303,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -315,7 +315,7 @@
                   inPlainSync()
                   listener: handleIdentifier(as, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, as, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, as, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -587,7 +587,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -600,7 +600,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
                   listener: handleIdentifier(assert, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, assert, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, assert, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -877,7 +877,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -889,7 +889,7 @@
                   inPlainSync()
                   listener: handleIdentifier(async, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, async, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, async, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1161,7 +1161,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1173,7 +1173,7 @@
                   inPlainSync()
                   listener: handleIdentifier(await, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, await, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, await, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1445,7 +1445,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1458,7 +1458,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
                   listener: handleIdentifier(break, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, break, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, break, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1735,7 +1735,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1748,7 +1748,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
                   listener: handleIdentifier(case, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, case, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, case, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2025,7 +2025,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2038,7 +2038,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
                   listener: handleIdentifier(catch, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, catch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, catch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2315,7 +2315,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2328,7 +2328,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
                   listener: handleIdentifier(class, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, class, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, class, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2605,7 +2605,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2618,7 +2618,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
                   listener: handleIdentifier(const, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, const, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, const, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2895,7 +2895,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2908,7 +2908,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
                   listener: handleIdentifier(continue, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, continue, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, continue, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3185,7 +3185,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3197,7 +3197,7 @@
                   inPlainSync()
                   listener: handleIdentifier(covariant, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, covariant, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, covariant, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3469,7 +3469,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3482,7 +3482,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
                   listener: handleIdentifier(default, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, default, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, default, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3759,7 +3759,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3771,7 +3771,7 @@
                   inPlainSync()
                   listener: handleIdentifier(deferred, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, deferred, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, deferred, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4043,7 +4043,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4056,7 +4056,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
                   listener: handleIdentifier(do, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, do, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, do, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4333,7 +4333,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4345,7 +4345,7 @@
                   inPlainSync()
                   listener: handleIdentifier(dynamic, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, dynamic, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, dynamic, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4617,7 +4617,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4630,7 +4630,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
                   listener: handleIdentifier(else, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, else, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, else, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4907,7 +4907,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4920,7 +4920,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
                   listener: handleIdentifier(enum, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, enum, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, enum, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5197,7 +5197,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5209,7 +5209,7 @@
                   inPlainSync()
                   listener: handleIdentifier(export, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, export, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, export, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5481,7 +5481,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5494,7 +5494,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
                   listener: handleIdentifier(extends, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, extends, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, extends, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5771,7 +5771,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5783,7 +5783,7 @@
                   inPlainSync()
                   listener: handleIdentifier(extension, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, extension, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, extension, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6055,7 +6055,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6067,7 +6067,7 @@
                   inPlainSync()
                   listener: handleIdentifier(external, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, external, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, external, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6339,7 +6339,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6351,7 +6351,7 @@
                   inPlainSync()
                   listener: handleIdentifier(factory, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, factory, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, factory, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6623,7 +6623,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6636,7 +6636,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
                   listener: handleIdentifier(false, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, false, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, false, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6913,7 +6913,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6926,7 +6926,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
                   listener: handleIdentifier(final, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, final, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, final, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7203,7 +7203,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7216,7 +7216,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
                   listener: handleIdentifier(finally, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, finally, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, finally, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7493,7 +7493,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7506,7 +7506,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
                   listener: handleIdentifier(for, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, for, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, for, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7783,7 +7783,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7795,7 +7795,7 @@
                   inPlainSync()
                   listener: handleIdentifier(Function, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, Function, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, Function, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8067,7 +8067,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8079,7 +8079,7 @@
                   inPlainSync()
                   listener: handleIdentifier(get, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, get, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, get, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8351,7 +8351,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8363,7 +8363,7 @@
                   inPlainSync()
                   listener: handleIdentifier(hide, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, hide, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, hide, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8635,7 +8635,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8648,7 +8648,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
                   listener: handleIdentifier(if, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, if, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, if, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8925,7 +8925,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8937,7 +8937,7 @@
                   inPlainSync()
                   listener: handleIdentifier(implements, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, implements, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, implements, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9209,7 +9209,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9221,7 +9221,7 @@
                   inPlainSync()
                   listener: handleIdentifier(import, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, import, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, import, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9493,7 +9493,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9506,7 +9506,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
                   listener: handleIdentifier(in, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, in, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, in, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9783,7 +9783,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9795,7 +9795,7 @@
                   inPlainSync()
                   listener: handleIdentifier(inout, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, inout, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, inout, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10067,7 +10067,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10079,7 +10079,7 @@
                   inPlainSync()
                   listener: handleIdentifier(interface, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, interface, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, interface, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10351,7 +10351,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10364,7 +10364,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
                   listener: handleIdentifier(is, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, is, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, is, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10641,7 +10641,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10653,7 +10653,7 @@
                   inPlainSync()
                   listener: handleIdentifier(late, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, late, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, late, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10925,7 +10925,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10937,7 +10937,7 @@
                   inPlainSync()
                   listener: handleIdentifier(library, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, library, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, library, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11209,7 +11209,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11221,7 +11221,7 @@
                   inPlainSync()
                   listener: handleIdentifier(mixin, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, mixin, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, mixin, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11493,7 +11493,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11505,7 +11505,7 @@
                   inPlainSync()
                   listener: handleIdentifier(native, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, native, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, native, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11777,7 +11777,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11790,7 +11790,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
                   listener: handleIdentifier(new, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, new, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, new, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12067,7 +12067,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12080,7 +12080,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
                   listener: handleIdentifier(null, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, null, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12357,7 +12357,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12369,7 +12369,7 @@
                   inPlainSync()
                   listener: handleIdentifier(of, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, of, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, of, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12641,7 +12641,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12653,7 +12653,7 @@
                   inPlainSync()
                   listener: handleIdentifier(on, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12925,7 +12925,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12937,7 +12937,7 @@
                   inPlainSync()
                   listener: handleIdentifier(operator, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, operator, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, operator, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13209,7 +13209,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13221,7 +13221,7 @@
                   inPlainSync()
                   listener: handleIdentifier(out, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, out, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, out, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13493,7 +13493,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13505,7 +13505,7 @@
                   inPlainSync()
                   listener: handleIdentifier(part, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, part, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, part, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13777,7 +13777,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13789,7 +13789,7 @@
                   inPlainSync()
                   listener: handleIdentifier(patch, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, patch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, patch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14061,7 +14061,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14073,7 +14073,7 @@
                   inPlainSync()
                   listener: handleIdentifier(required, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, required, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, required, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14345,7 +14345,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14358,7 +14358,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
                   listener: handleIdentifier(rethrow, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, rethrow, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, rethrow, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14635,7 +14635,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14648,7 +14648,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
                   listener: handleIdentifier(return, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, return, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, return, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14925,7 +14925,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14937,7 +14937,7 @@
                   inPlainSync()
                   listener: handleIdentifier(set, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, set, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, set, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15209,7 +15209,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15221,7 +15221,7 @@
                   inPlainSync()
                   listener: handleIdentifier(show, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, show, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, show, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15493,7 +15493,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15505,7 +15505,7 @@
                   inPlainSync()
                   listener: handleIdentifier(source, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, source, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, source, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15777,7 +15777,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15789,7 +15789,7 @@
                   inPlainSync()
                   listener: handleIdentifier(static, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, static, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, static, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16061,7 +16061,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16074,7 +16074,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
                   listener: handleIdentifier(super, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, super, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, super, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16351,7 +16351,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16364,7 +16364,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
                   listener: handleIdentifier(switch, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, switch, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, switch, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16641,7 +16641,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16653,7 +16653,7 @@
                   inPlainSync()
                   listener: handleIdentifier(sync, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sync, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sync, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16925,7 +16925,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16938,7 +16938,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
                   listener: handleIdentifier(this, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, this, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, this, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17215,7 +17215,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17228,7 +17228,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
                   listener: handleIdentifier(throw, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, throw, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, throw, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17505,7 +17505,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17518,7 +17518,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
                   listener: handleIdentifier(true, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, true, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, true, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17795,7 +17795,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17808,7 +17808,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
                   listener: handleIdentifier(try, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, try, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, try, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18085,7 +18085,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18097,7 +18097,7 @@
                   inPlainSync()
                   listener: handleIdentifier(typedef, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, typedef, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, typedef, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18369,7 +18369,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18382,7 +18382,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
                   listener: handleIdentifier(var, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, var, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, var, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18659,7 +18659,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18672,7 +18672,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
                   listener: handleIdentifier(void, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, void, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, void, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18949,7 +18949,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18962,7 +18962,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
                   listener: handleIdentifier(while, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, while, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, while, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -19239,7 +19239,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -19252,7 +19252,7 @@
                     listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
                   listener: handleIdentifier(with, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, with, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, with, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -19529,7 +19529,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -19541,7 +19541,7 @@
                   inPlainSync()
                   listener: handleIdentifier(yield, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, yield, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, yield, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect
index e3ca5ec..ab33d55 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(abstractX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, abstractX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, abstractX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -172,7 +172,7 @@
           handleType(int, null)
           handleIdentifier(asX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, asX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, asX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -329,7 +329,7 @@
           handleType(int, null)
           handleIdentifier(assertX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, assertX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, assertX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -486,7 +486,7 @@
           handleType(int, null)
           handleIdentifier(asyncX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, asyncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, asyncX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -643,7 +643,7 @@
           handleType(int, null)
           handleIdentifier(awaitX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, awaitX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, awaitX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -800,7 +800,7 @@
           handleType(int, null)
           handleIdentifier(breakX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, breakX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, breakX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -957,7 +957,7 @@
           handleType(int, null)
           handleIdentifier(caseX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, caseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, caseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1114,7 +1114,7 @@
           handleType(int, null)
           handleIdentifier(catchX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, catchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, catchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1271,7 +1271,7 @@
           handleType(int, null)
           handleIdentifier(classX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, classX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, classX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1428,7 +1428,7 @@
           handleType(int, null)
           handleIdentifier(constX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, constX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, constX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1585,7 +1585,7 @@
           handleType(int, null)
           handleIdentifier(continueX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, continueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, continueX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1742,7 +1742,7 @@
           handleType(int, null)
           handleIdentifier(covariantX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, covariantX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, covariantX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1899,7 +1899,7 @@
           handleType(int, null)
           handleIdentifier(defaultX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2056,7 +2056,7 @@
           handleType(int, null)
           handleIdentifier(deferredX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, deferredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, deferredX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2213,7 +2213,7 @@
           handleType(int, null)
           handleIdentifier(doX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, doX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, doX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2370,7 +2370,7 @@
           handleType(int, null)
           handleIdentifier(dynamicX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, dynamicX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, dynamicX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2527,7 +2527,7 @@
           handleType(int, null)
           handleIdentifier(elseX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, elseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, elseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2684,7 +2684,7 @@
           handleType(int, null)
           handleIdentifier(enumX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, enumX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, enumX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2841,7 +2841,7 @@
           handleType(int, null)
           handleIdentifier(exportX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, exportX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, exportX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2998,7 +2998,7 @@
           handleType(int, null)
           handleIdentifier(extendsX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, extendsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, extendsX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3155,7 +3155,7 @@
           handleType(int, null)
           handleIdentifier(extensionX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, extensionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, extensionX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3312,7 +3312,7 @@
           handleType(int, null)
           handleIdentifier(externalX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, externalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, externalX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3469,7 +3469,7 @@
           handleType(int, null)
           handleIdentifier(factoryX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, factoryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, factoryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3626,7 +3626,7 @@
           handleType(int, null)
           handleIdentifier(falseX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, falseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, falseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3783,7 +3783,7 @@
           handleType(int, null)
           handleIdentifier(finalX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, finalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, finalX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3940,7 +3940,7 @@
           handleType(int, null)
           handleIdentifier(finallyX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, finallyX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, finallyX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4097,7 +4097,7 @@
           handleType(int, null)
           handleIdentifier(forX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, forX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, forX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4254,7 +4254,7 @@
           handleType(int, null)
           handleIdentifier(FunctionX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, FunctionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, FunctionX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4411,7 +4411,7 @@
           handleType(int, null)
           handleIdentifier(getX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, getX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, getX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4568,7 +4568,7 @@
           handleType(int, null)
           handleIdentifier(hideX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, hideX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, hideX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4725,7 +4725,7 @@
           handleType(int, null)
           handleIdentifier(ifX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, ifX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, ifX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4882,7 +4882,7 @@
           handleType(int, null)
           handleIdentifier(implementsX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, implementsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, implementsX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5039,7 +5039,7 @@
           handleType(int, null)
           handleIdentifier(importX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, importX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, importX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5196,7 +5196,7 @@
           handleType(int, null)
           handleIdentifier(inX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, inX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, inX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5353,7 +5353,7 @@
           handleType(int, null)
           handleIdentifier(inoutX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, inoutX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, inoutX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5510,7 +5510,7 @@
           handleType(int, null)
           handleIdentifier(interfaceX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, interfaceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, interfaceX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5667,7 +5667,7 @@
           handleType(int, null)
           handleIdentifier(isX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, isX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, isX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5824,7 +5824,7 @@
           handleType(int, null)
           handleIdentifier(lateX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, lateX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, lateX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -5981,7 +5981,7 @@
           handleType(int, null)
           handleIdentifier(libraryX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, libraryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, libraryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6138,7 +6138,7 @@
           handleType(int, null)
           handleIdentifier(mixinX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, mixinX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, mixinX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6295,7 +6295,7 @@
           handleType(int, null)
           handleIdentifier(nativeX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, nativeX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, nativeX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6452,7 +6452,7 @@
           handleType(int, null)
           handleIdentifier(newX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, newX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, newX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6609,7 +6609,7 @@
           handleType(int, null)
           handleIdentifier(nullX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, nullX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, nullX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6766,7 +6766,7 @@
           handleType(int, null)
           handleIdentifier(ofX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, ofX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, ofX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -6923,7 +6923,7 @@
           handleType(int, null)
           handleIdentifier(onX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7080,7 +7080,7 @@
           handleType(int, null)
           handleIdentifier(operatorX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, operatorX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, operatorX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7237,7 +7237,7 @@
           handleType(int, null)
           handleIdentifier(outX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, outX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, outX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7394,7 +7394,7 @@
           handleType(int, null)
           handleIdentifier(partX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, partX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, partX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7551,7 +7551,7 @@
           handleType(int, null)
           handleIdentifier(patchX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, patchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, patchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7708,7 +7708,7 @@
           handleType(int, null)
           handleIdentifier(requiredX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, requiredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, requiredX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -7865,7 +7865,7 @@
           handleType(int, null)
           handleIdentifier(rethrowX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, rethrowX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, rethrowX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8022,7 +8022,7 @@
           handleType(int, null)
           handleIdentifier(returnX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, returnX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, returnX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8179,7 +8179,7 @@
           handleType(int, null)
           handleIdentifier(setX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, setX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, setX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8336,7 +8336,7 @@
           handleType(int, null)
           handleIdentifier(showX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, showX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, showX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8493,7 +8493,7 @@
           handleType(int, null)
           handleIdentifier(sourceX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sourceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sourceX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8650,7 +8650,7 @@
           handleType(int, null)
           handleIdentifier(staticX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, staticX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, staticX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8807,7 +8807,7 @@
           handleType(int, null)
           handleIdentifier(superX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, superX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, superX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -8964,7 +8964,7 @@
           handleType(int, null)
           handleIdentifier(switchX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, switchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, switchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9121,7 +9121,7 @@
           handleType(int, null)
           handleIdentifier(syncX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, syncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, syncX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9278,7 +9278,7 @@
           handleType(int, null)
           handleIdentifier(thisX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, thisX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, thisX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9435,7 +9435,7 @@
           handleType(int, null)
           handleIdentifier(throwX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, throwX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, throwX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9592,7 +9592,7 @@
           handleType(int, null)
           handleIdentifier(trueX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, trueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, trueX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9749,7 +9749,7 @@
           handleType(int, null)
           handleIdentifier(tryX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, tryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, tryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -9906,7 +9906,7 @@
           handleType(int, null)
           handleIdentifier(typedefX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, typedefX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, typedefX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10063,7 +10063,7 @@
           handleType(int, null)
           handleIdentifier(varX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, varX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, varX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10220,7 +10220,7 @@
           handleType(int, null)
           handleIdentifier(voidX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, voidX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, voidX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10377,7 +10377,7 @@
           handleType(int, null)
           handleIdentifier(whileX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, whileX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, whileX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10534,7 +10534,7 @@
           handleType(int, null)
           handleIdentifier(withX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, withX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, withX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -10691,7 +10691,7 @@
           handleType(int, null)
           handleIdentifier(yieldX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, yieldX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, yieldX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect
index ce4b7a3..d4fea1c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(abstractX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, abstractX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, abstractX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -297,7 +297,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -308,7 +308,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(asX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, asX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, asX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -575,7 +575,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -586,7 +586,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(assertX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, assertX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, assertX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -853,7 +853,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -864,7 +864,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(asyncX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, asyncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, asyncX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1131,7 +1131,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1142,7 +1142,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(awaitX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, awaitX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, awaitX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1409,7 +1409,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1420,7 +1420,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(breakX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, breakX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, breakX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1687,7 +1687,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1698,7 +1698,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(caseX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, caseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, caseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1965,7 +1965,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1976,7 +1976,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(catchX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, catchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, catchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2243,7 +2243,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2254,7 +2254,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(classX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, classX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, classX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2521,7 +2521,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2532,7 +2532,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(constX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, constX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, constX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2799,7 +2799,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2810,7 +2810,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(continueX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, continueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, continueX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3077,7 +3077,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3088,7 +3088,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(covariantX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, covariantX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, covariantX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3355,7 +3355,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3366,7 +3366,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(defaultX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, defaultX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3633,7 +3633,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3644,7 +3644,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(deferredX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, deferredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, deferredX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3911,7 +3911,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3922,7 +3922,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(doX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, doX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, doX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4189,7 +4189,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4200,7 +4200,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(dynamicX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, dynamicX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, dynamicX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4467,7 +4467,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4478,7 +4478,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(elseX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, elseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, elseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4745,7 +4745,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4756,7 +4756,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(enumX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, enumX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, enumX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5023,7 +5023,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5034,7 +5034,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(exportX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, exportX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, exportX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5301,7 +5301,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5312,7 +5312,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(extendsX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, extendsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, extendsX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5579,7 +5579,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5590,7 +5590,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(extensionX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, extensionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, extensionX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5857,7 +5857,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5868,7 +5868,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(externalX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, externalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, externalX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6135,7 +6135,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6146,7 +6146,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(factoryX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, factoryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, factoryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6413,7 +6413,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6424,7 +6424,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(falseX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, falseX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, falseX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6691,7 +6691,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6702,7 +6702,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(finalX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, finalX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, finalX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6969,7 +6969,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6980,7 +6980,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(finallyX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, finallyX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, finallyX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7247,7 +7247,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7258,7 +7258,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(forX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, forX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, forX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7525,7 +7525,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7536,7 +7536,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(FunctionX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, FunctionX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, FunctionX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7803,7 +7803,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7814,7 +7814,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(getX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, getX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, getX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8081,7 +8081,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8092,7 +8092,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(hideX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, hideX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, hideX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8359,7 +8359,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8370,7 +8370,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(ifX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, ifX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, ifX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8637,7 +8637,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8648,7 +8648,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(implementsX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, implementsX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, implementsX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8915,7 +8915,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8926,7 +8926,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(importX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, importX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, importX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9193,7 +9193,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9204,7 +9204,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(inX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, inX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, inX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9471,7 +9471,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9482,7 +9482,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(inoutX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, inoutX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, inoutX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9749,7 +9749,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9760,7 +9760,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(interfaceX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, interfaceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, interfaceX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10027,7 +10027,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10038,7 +10038,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(isX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, isX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, isX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10305,7 +10305,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10316,7 +10316,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(lateX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, lateX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, lateX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10583,7 +10583,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10594,7 +10594,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(libraryX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, libraryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, libraryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10861,7 +10861,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10872,7 +10872,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(mixinX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, mixinX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, mixinX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11139,7 +11139,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11150,7 +11150,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(nativeX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, nativeX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, nativeX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11417,7 +11417,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11428,7 +11428,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(newX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, newX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, newX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11695,7 +11695,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11706,7 +11706,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(nullX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, nullX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, nullX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -11973,7 +11973,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -11984,7 +11984,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(ofX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, ofX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, ofX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12251,7 +12251,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12262,7 +12262,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(onX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12529,7 +12529,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12540,7 +12540,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(operatorX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, operatorX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, operatorX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -12807,7 +12807,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -12818,7 +12818,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(outX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, outX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, outX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13085,7 +13085,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13096,7 +13096,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(partX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, partX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, partX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13363,7 +13363,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13374,7 +13374,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(patchX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, patchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, patchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13641,7 +13641,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13652,7 +13652,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(requiredX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, requiredX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, requiredX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -13919,7 +13919,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -13930,7 +13930,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(rethrowX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, rethrowX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, rethrowX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14197,7 +14197,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14208,7 +14208,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(returnX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, returnX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, returnX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14475,7 +14475,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14486,7 +14486,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(setX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, setX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, setX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -14753,7 +14753,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -14764,7 +14764,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(showX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, showX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, showX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15031,7 +15031,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15042,7 +15042,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(sourceX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sourceX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sourceX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15309,7 +15309,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15320,7 +15320,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(staticX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, staticX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, staticX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15587,7 +15587,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15598,7 +15598,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(superX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, superX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, superX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -15865,7 +15865,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -15876,7 +15876,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(switchX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, switchX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, switchX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16143,7 +16143,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16154,7 +16154,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(syncX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, syncX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, syncX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16421,7 +16421,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16432,7 +16432,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(thisX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, thisX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, thisX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16699,7 +16699,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16710,7 +16710,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(throwX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, throwX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, throwX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -16977,7 +16977,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -16988,7 +16988,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(trueX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, trueX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, trueX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17255,7 +17255,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17266,7 +17266,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(tryX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, tryX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, tryX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17533,7 +17533,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17544,7 +17544,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(typedefX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, typedefX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, typedefX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -17811,7 +17811,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -17822,7 +17822,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(varX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, varX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, varX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18089,7 +18089,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18100,7 +18100,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(voidX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, voidX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, voidX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18367,7 +18367,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18378,7 +18378,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(whileX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, whileX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, whileX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18645,7 +18645,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18656,7 +18656,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(withX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, withX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, withX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -18923,7 +18923,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -18934,7 +18934,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(yieldX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, yieldX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, yieldX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
index 3867cc6..eb31b03 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.expect
@@ -23,7 +23,7 @@
           handleNoType(()
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(class)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'class'., null, {lexeme: class}], class, class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
index 1a5f237..c90c0c6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_formal_parameter_start_of_next_top_level.dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(x)
                   listener: endMetadataStar(0)
@@ -29,7 +29,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(class)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               rewriter()
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
index bd52e60..02db7c4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.expect
@@ -483,7 +483,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -540,7 +540,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -598,7 +598,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -653,7 +653,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -710,7 +710,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -768,7 +768,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -832,7 +832,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -891,7 +891,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -950,7 +950,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1009,7 +1009,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1072,7 +1072,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1135,7 +1135,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1193,7 +1193,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1251,7 +1251,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1309,7 +1309,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1382,7 +1382,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1440,7 +1440,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1509,7 +1509,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1567,7 +1567,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1625,7 +1625,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1683,7 +1683,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1740,7 +1740,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1797,7 +1797,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1855,7 +1855,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1913,7 +1913,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1999,7 +1999,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2058,7 +2058,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2136,7 +2136,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2193,7 +2193,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2250,7 +2250,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2308,7 +2308,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2377,7 +2377,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2434,7 +2434,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2492,7 +2492,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2550,7 +2550,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2607,7 +2607,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2665,7 +2665,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2732,7 +2732,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2789,7 +2789,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2846,7 +2846,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2903,7 +2903,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -2961,7 +2961,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3024,7 +3024,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3081,7 +3081,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3138,7 +3138,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3195,7 +3195,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3252,7 +3252,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3309,7 +3309,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3366,7 +3366,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3423,7 +3423,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3481,7 +3481,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3540,7 +3540,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3594,7 +3594,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3651,7 +3651,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3708,7 +3708,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3765,7 +3765,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3823,7 +3823,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3881,7 +3881,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -3951,7 +3951,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4009,7 +4009,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4067,7 +4067,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4122,7 +4122,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4180,7 +4180,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4246,7 +4246,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4304,7 +4304,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4390,7 +4390,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4476,7 +4476,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4546,7 +4546,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -4604,7 +4604,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
index 21af54c..1db298e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(abstract, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -161,7 +161,7 @@
           parseFormalParameters(as, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -172,7 +172,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -305,7 +305,7 @@
           parseFormalParameters(assert, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -316,7 +316,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -436,7 +436,7 @@
           parseFormalParameters(async, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -447,7 +447,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -576,7 +576,7 @@
           parseFormalParameters(await, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -587,7 +587,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -723,7 +723,7 @@
           parseFormalParameters(break, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -734,7 +734,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -898,7 +898,7 @@
           parseFormalParameters(case, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -909,7 +909,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1041,7 +1041,7 @@
           parseFormalParameters(catch, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1052,7 +1052,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1184,7 +1184,7 @@
           parseFormalParameters(class, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1195,7 +1195,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1327,7 +1327,7 @@
           parseFormalParameters(const, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1338,7 +1338,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1401,7 +1401,7 @@
                       parsePrimary(return, expression)
                         parseConstExpression(return)
                           listener: beginConstExpression(const)
-                          parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                          parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                             ensureIdentifier(const, constructorReference)
                               insertSyntheticIdentifier(const, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
                                 reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
@@ -1475,7 +1475,7 @@
           parseFormalParameters(continue, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1486,7 +1486,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1646,7 +1646,7 @@
           parseFormalParameters(covariant, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1657,7 +1657,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1790,7 +1790,7 @@
           parseFormalParameters(default, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1801,7 +1801,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1929,7 +1929,7 @@
           parseFormalParameters(deferred, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1940,7 +1940,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2073,7 +2073,7 @@
           parseFormalParameters(do, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2084,7 +2084,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2268,7 +2268,7 @@
           parseFormalParameters(dynamic, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2279,7 +2279,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2412,7 +2412,7 @@
           parseFormalParameters(else, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2423,7 +2423,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2605,7 +2605,7 @@
           parseFormalParameters(enum, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2616,7 +2616,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2744,7 +2744,7 @@
           parseFormalParameters(export, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2755,7 +2755,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2888,7 +2888,7 @@
           parseFormalParameters(extends, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2899,7 +2899,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3027,7 +3027,7 @@
           parseFormalParameters(extension, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3038,7 +3038,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3167,7 +3167,7 @@
           parseFormalParameters(external, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3178,7 +3178,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3307,7 +3307,7 @@
           parseFormalParameters(factory, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3318,7 +3318,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3451,7 +3451,7 @@
           parseFormalParameters(false, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3462,7 +3462,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3589,7 +3589,7 @@
           parseFormalParameters(final, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3600,7 +3600,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3824,7 +3824,7 @@
           parseFormalParameters(finally, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3835,7 +3835,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -3967,7 +3967,7 @@
           parseFormalParameters(for, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -3978,7 +3978,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4173,7 +4173,7 @@
           parseFormalParameters(Function, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4184,7 +4184,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4313,7 +4313,7 @@
           parseFormalParameters(get, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4324,7 +4324,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4453,7 +4453,7 @@
           parseFormalParameters(hide, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4464,7 +4464,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4597,7 +4597,7 @@
           parseFormalParameters(if, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4608,7 +4608,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4774,7 +4774,7 @@
           parseFormalParameters(implements, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4785,7 +4785,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -4914,7 +4914,7 @@
           parseFormalParameters(import, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -4925,7 +4925,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5058,7 +5058,7 @@
           parseFormalParameters(in, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5069,7 +5069,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5197,7 +5197,7 @@
           parseFormalParameters(inout, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5208,7 +5208,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5337,7 +5337,7 @@
           parseFormalParameters(interface, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5348,7 +5348,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5481,7 +5481,7 @@
           parseFormalParameters(is, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5492,7 +5492,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5652,7 +5652,7 @@
           parseFormalParameters(late, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5663,7 +5663,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5792,7 +5792,7 @@
           parseFormalParameters(library, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5803,7 +5803,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -5932,7 +5932,7 @@
           parseFormalParameters(mixin, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -5943,7 +5943,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6072,7 +6072,7 @@
           parseFormalParameters(native, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6083,7 +6083,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6216,7 +6216,7 @@
           parseFormalParameters(new, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6227,7 +6227,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6291,7 +6291,7 @@
                         parseNewExpression(return)
                           isNextIdentifier(new)
                           listener: beginNewExpression(new)
-                          parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                          parseConstructorReference(new, ConstructorReferenceContext.New, null)
                             ensureIdentifier(new, constructorReference)
                               insertSyntheticIdentifier(new, constructorReference, message: Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
                                 reportRecoverableError((, Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
@@ -6365,7 +6365,7 @@
           parseFormalParameters(null, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6376,7 +6376,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6499,7 +6499,7 @@
           parseFormalParameters(of, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6510,7 +6510,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6639,7 +6639,7 @@
           parseFormalParameters(on, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6650,7 +6650,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6779,7 +6779,7 @@
           parseFormalParameters(operator, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6790,7 +6790,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -6919,7 +6919,7 @@
           parseFormalParameters(out, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -6930,7 +6930,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7059,7 +7059,7 @@
           parseFormalParameters(part, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7070,7 +7070,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7199,7 +7199,7 @@
           parseFormalParameters(patch, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7210,7 +7210,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7339,7 +7339,7 @@
           parseFormalParameters(required, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7350,7 +7350,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7483,7 +7483,7 @@
           parseFormalParameters(rethrow, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7494,7 +7494,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7626,7 +7626,7 @@
           parseFormalParameters(return, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7637,7 +7637,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7761,7 +7761,7 @@
           parseFormalParameters(set, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7772,7 +7772,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -7901,7 +7901,7 @@
           parseFormalParameters(show, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -7912,7 +7912,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8041,7 +8041,7 @@
           parseFormalParameters(source, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8052,7 +8052,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8181,7 +8181,7 @@
           parseFormalParameters(static, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8192,7 +8192,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8323,7 +8323,7 @@
           parseFormalParameters(super, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8334,7 +8334,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8460,7 +8460,7 @@
           parseFormalParameters(switch, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8471,7 +8471,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8646,7 +8646,7 @@
           parseFormalParameters(sync, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8657,7 +8657,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8788,7 +8788,7 @@
           parseFormalParameters(this, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8799,7 +8799,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -8925,7 +8925,7 @@
           parseFormalParameters(throw, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -8936,7 +8936,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9063,7 +9063,7 @@
           parseFormalParameters(true, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9074,7 +9074,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9201,7 +9201,7 @@
           parseFormalParameters(try, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9212,7 +9212,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9378,7 +9378,7 @@
           parseFormalParameters(typedef, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9389,7 +9389,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9522,7 +9522,7 @@
           parseFormalParameters(var, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9533,7 +9533,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9757,7 +9757,7 @@
           parseFormalParameters(void, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -9768,7 +9768,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -9993,7 +9993,7 @@
           parseFormalParameters(while, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10004,7 +10004,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10174,7 +10174,7 @@
           parseFormalParameters(with, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10185,7 +10185,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -10313,7 +10313,7 @@
           parseFormalParameters(yield, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -10324,7 +10324,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
index e2047f3..4499d3c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.expect
@@ -103,7 +103,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
index 6934455..7cfe30a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with.dart.intertwined.expect
@@ -159,7 +159,7 @@
                   parseFormalParameters(with, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -170,7 +170,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
index 5eeaf82..fbd7076 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.expect
@@ -73,7 +73,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
index e653b4e..d1d6c10 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime.dart.intertwined.expect
@@ -143,7 +143,7 @@
                   parseFormalParameters(With, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -154,7 +154,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
index 3af857b..d0fd8f1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.expect
Binary files differ
diff --git a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
index a2da381..35df62b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/utf_16_le_content.crash_dart.intertwined.expect
@@ -124,7 +124,7 @@
           parseFormalParameters(t, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(c)
                   listener: endMetadataStar(0)
@@ -133,7 +133,7 @@
                 ensureIdentifier((, formalParameterDeclaration)
                   listener: handleIdentifier(c, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, c, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
index 1744160..f9bf0cd 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -58,7 +58,7 @@
           handleType(A, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleIdentifier(type, expression)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
index ddf7ace..59564b1 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
@@ -98,7 +98,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(A)
                   listener: endMetadataStar(0)
@@ -109,7 +109,7 @@
                 ensureIdentifier(A, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -138,7 +138,7 @@
                                       parseNewExpression(()
                                         isNextIdentifier(new)
                                         listener: beginNewExpression(new)
-                                        parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                        parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                           ensureIdentifier(new, constructorReference)
                                             listener: handleIdentifier(A, constructorReference)
                                           listener: beginConstructorReference(A)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index f37431c..dab74ca 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -64,7 +64,7 @@
                 handleType(A, null)
                 handleIdentifier(child, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
index 835d04c..50dd4c4 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -93,7 +93,7 @@
                 parseFormalParameters(addChild, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(covariant)
                         listener: endMetadataStar(0)
@@ -106,7 +106,7 @@
                       ensureIdentifier(A, formalParameterDeclaration)
                         listener: handleIdentifier(child, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
index 7c25b4c..111aade 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -57,7 +57,7 @@
                 handleType(A, null)
                 handleIdentifier(child, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
index d0869ba..0a9e526 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.intertwined.expect
@@ -93,7 +93,7 @@
                 parseFormalParameters(addChild, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(A)
                         listener: endMetadataStar(0)
@@ -104,7 +104,7 @@
                       ensureIdentifier(A, formalParameterDeclaration)
                         listener: handleIdentifier(child, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index 932e894..c361540 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -57,7 +57,7 @@
                 handleType(A, null)
                 handleIdentifier(child, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
index 57ce9e6..cef8fa7 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -93,7 +93,7 @@
                 parseFormalParameters(addChild, MemberKind.ExtensionStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(A)
                         listener: endMetadataStar(0)
@@ -104,7 +104,7 @@
                       ensureIdentifier(A, formalParameterDeclaration)
                         listener: handleIdentifier(child, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
index 3224be6..45c1c22 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -64,7 +64,7 @@
                 handleType(A, null)
                 handleIdentifier(child, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
index f23594f..25db406 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.intertwined.expect
@@ -93,7 +93,7 @@
                 parseFormalParameters(addChild, MemberKind.ExtensionStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(covariant)
                         listener: endMetadataStar(0)
@@ -106,7 +106,7 @@
                       ensureIdentifier(A, formalParameterDeclaration)
                         listener: handleIdentifier(child, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionStaticMethod)
+                      listener: endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
index 65c4451..54576a8 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.expect
@@ -29,7 +29,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -84,7 +84,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -139,7 +139,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -194,7 +194,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -249,7 +249,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -304,7 +304,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -359,7 +359,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -414,7 +414,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -469,7 +469,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -524,7 +524,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -579,7 +579,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -634,7 +634,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -689,7 +689,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -744,7 +744,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -799,7 +799,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -854,7 +854,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -909,7 +909,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -964,7 +964,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1019,7 +1019,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -1074,7 +1074,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
index 8006263..d53e616 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_methods.dart.intertwined.expect
@@ -45,7 +45,7 @@
                   parseFormalParameters(abstract, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -56,7 +56,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -182,7 +182,7 @@
                   parseFormalParameters(as, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -193,7 +193,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -319,7 +319,7 @@
                   parseFormalParameters(covariant, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -330,7 +330,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -456,7 +456,7 @@
                   parseFormalParameters(deferred, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -467,7 +467,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -593,7 +593,7 @@
                   parseFormalParameters(dynamic, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -604,7 +604,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -730,7 +730,7 @@
                   parseFormalParameters(export, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -741,7 +741,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -867,7 +867,7 @@
                   parseFormalParameters(external, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -878,7 +878,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1004,7 +1004,7 @@
                   parseFormalParameters(factory, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1015,7 +1015,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1141,7 +1141,7 @@
                   parseFormalParameters(Function, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1152,7 +1152,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1279,7 +1279,7 @@
                   parseFormalParameters(get, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1290,7 +1290,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1416,7 +1416,7 @@
                   parseFormalParameters(implements, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1427,7 +1427,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1553,7 +1553,7 @@
                   parseFormalParameters(import, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1564,7 +1564,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1690,7 +1690,7 @@
                   parseFormalParameters(interface, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1701,7 +1701,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1827,7 +1827,7 @@
                   parseFormalParameters(library, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1838,7 +1838,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -1966,7 +1966,7 @@
                   parseFormalParameters(operator, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -1977,7 +1977,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2103,7 +2103,7 @@
                   parseFormalParameters(mixin, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2114,7 +2114,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2240,7 +2240,7 @@
                   parseFormalParameters(part, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2251,7 +2251,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2378,7 +2378,7 @@
                   parseFormalParameters(set, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2389,7 +2389,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2515,7 +2515,7 @@
                   parseFormalParameters(static, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2526,7 +2526,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -2652,7 +2652,7 @@
                   parseFormalParameters(typedef, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -2663,7 +2663,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
index ed37033..09cc1ba 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.expect
@@ -17,7 +17,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -71,7 +71,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -125,7 +125,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -179,7 +179,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -233,7 +233,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -287,7 +287,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -341,7 +341,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -395,7 +395,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -449,7 +449,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -503,7 +503,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -557,7 +557,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -611,7 +611,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -665,7 +665,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -719,7 +719,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -773,7 +773,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -827,7 +827,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -881,7 +881,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -935,7 +935,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -989,7 +989,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -1043,7 +1043,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.intertwined.expect
index 3657522..9bc5625 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_methods.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(abstract, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -154,7 +154,7 @@
           parseFormalParameters(as, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -165,7 +165,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -287,7 +287,7 @@
           parseFormalParameters(covariant, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -298,7 +298,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -420,7 +420,7 @@
           parseFormalParameters(deferred, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -431,7 +431,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -553,7 +553,7 @@
           parseFormalParameters(dynamic, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -564,7 +564,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -686,7 +686,7 @@
           parseFormalParameters(export, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -697,7 +697,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -819,7 +819,7 @@
           parseFormalParameters(external, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -830,7 +830,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -952,7 +952,7 @@
           parseFormalParameters(factory, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -963,7 +963,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1085,7 +1085,7 @@
           parseFormalParameters(Function, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1096,7 +1096,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1218,7 +1218,7 @@
           parseFormalParameters(get, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1229,7 +1229,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1351,7 +1351,7 @@
           parseFormalParameters(implements, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1362,7 +1362,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1484,7 +1484,7 @@
           parseFormalParameters(import, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1495,7 +1495,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1617,7 +1617,7 @@
           parseFormalParameters(interface, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1628,7 +1628,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1750,7 +1750,7 @@
           parseFormalParameters(library, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1761,7 +1761,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -1883,7 +1883,7 @@
           parseFormalParameters(operator, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -1894,7 +1894,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2016,7 +2016,7 @@
           parseFormalParameters(mixin, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2027,7 +2027,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2149,7 +2149,7 @@
           parseFormalParameters(part, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2160,7 +2160,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2282,7 +2282,7 @@
           parseFormalParameters(set, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2293,7 +2293,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2415,7 +2415,7 @@
           parseFormalParameters(static, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2426,7 +2426,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -2548,7 +2548,7 @@
           parseFormalParameters(typedef, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -2559,7 +2559,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.expect
index bbc6919..0ed8d05 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.expect
@@ -22,7 +22,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.intertwined.expect
index 5a8b511..5ec70ff 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.intertwined.expect
@@ -44,7 +44,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.expect
index 2622377..76ae8fa 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.expect
@@ -22,7 +22,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
@@ -54,7 +54,7 @@
               handleNoType(()
               handleIdentifier(e, formalParameterDeclaration)
               handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
           endFormalParameters(1, (, ), MemberKind.Local)
           handleNoInitializers()
           handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.intertwined.expect
index 16b73ff..c07d0c6 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.intertwined.expect
@@ -44,7 +44,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
@@ -104,7 +104,7 @@
                     parseFormalParametersRequiredOpt(on, MemberKind.Local)
                       parseFormalParametersRest((, MemberKind.Local)
                         listener: beginFormalParameters((, MemberKind.Local)
-                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                        parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                           parseMetadataStar(()
                             listener: beginMetadataStar(e)
                             listener: endMetadataStar(0)
@@ -113,7 +113,7 @@
                           ensureIdentifier((, formalParameterDeclaration)
                             listener: handleIdentifier(e, formalParameterDeclaration)
                           listener: handleFormalParameterWithoutValue())
-                          listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                          listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                         listener: endFormalParameters(1, (, ), MemberKind.Local)
                     parseInitializersOpt())
                       listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.expect
index 0bd07bd..2dfc599 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.expect
@@ -22,7 +22,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
@@ -54,7 +54,7 @@
               handleNoType(()
               handleIdentifier(e, formalParameterDeclaration)
               handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
           endFormalParameters(1, (, ), MemberKind.Local)
           handleNoInitializers()
           handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
index 6922931..f97eb71 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
@@ -44,7 +44,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
@@ -102,7 +102,7 @@
                   parseFormalParametersRequiredOpt(onX, MemberKind.Local)
                     parseFormalParametersRest((, MemberKind.Local)
                       listener: beginFormalParameters((, MemberKind.Local)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                         parseMetadataStar(()
                           listener: beginMetadataStar(e)
                           listener: endMetadataStar(0)
@@ -111,7 +111,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(e, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                        listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                       listener: endFormalParameters(1, (, ), MemberKind.Local)
                   parseInitializersOpt())
                     listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.expect
index a76f004..fe1931e 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(on, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
index 1961dd6..d336933 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,7 +31,7 @@
                   inPlainSync()
                   listener: handleIdentifier(on, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -57,7 +57,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -66,7 +66,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.expect
index 7ae894f..7a4f1c7 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(onX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
index 10c263e..610ebd6 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(onX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -56,7 +56,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -65,7 +65,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.expect
index 44a3071..74d2acb 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(on, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
index 3fee6f6..e47aced 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,7 +31,7 @@
                   inPlainSync()
                   listener: handleIdentifier(on, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -57,7 +57,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -66,7 +66,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.expect
index dff16a5..b1a6d3b 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(onX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
index 4a8d11a..f7336c4 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(onX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -56,7 +56,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -65,7 +65,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.expect
index 1318bfe..c65fbdb 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(on, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.intertwined.expect
index 761800b..1c3467c 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -31,7 +31,7 @@
                   inPlainSync()
                   listener: handleIdentifier(on, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -57,7 +57,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -66,7 +66,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.expect
index f03df25..9b4da14 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(int, null)
           handleIdentifier(onX, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -31,7 +31,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
index 0570855..de467a3 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(onX, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -56,7 +56,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -65,7 +65,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.expect
index 3848d33..8ebdaa9 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.expect
@@ -22,7 +22,7 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(1, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
index 40100a5..007fb4b 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
@@ -44,7 +44,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(1, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/chained_call_01.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_01.dart.expect
index 514a391..af6819d 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_01.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_01.dart.intertwined.expect
index 1d66387..fce21ba 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_01.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_02.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_02.dart.expect
index ab3cd87..d45db40 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_02.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_02.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_02.dart.intertwined.expect
index 036a456..9579bc0 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_02.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
index a127cb2..100e880 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_03.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
index 5e86f7b..4807443 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_03.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
index 647163d..393d61d 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_04.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
index 47b2f02..cf46e41 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_04.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_05.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_05.dart.expect
index fc05dac..8b0e034 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_05.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_05.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_05.dart.intertwined.expect
index dfe42d1..5434b21 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_05.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
index 76a1c9d..a754bf0 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_06.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
index 19f3f2c..f308d99 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_06.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect b/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
index d7bc5fb..fc5d52b 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_07.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
index dbf54d7..9129a71 100644
--- a/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/chained_call_07.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
index bb3f747..918b3ca 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
@@ -398,7 +398,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, <, Instance of 'ComplexTypeParamOrArgInfo')
                   listener: beginImplicitCreationExpression(f)
-                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'ComplexTypeParamOrArgInfo', false)
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'ComplexTypeParamOrArgInfo')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(f, constructorReference)
                     listener: beginConstructorReference(f)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
index dca4bd9..6ad4a38 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.expect
@@ -614,7 +614,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -650,7 +650,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -690,7 +690,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -734,7 +734,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -778,7 +778,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -822,7 +822,7 @@
             endFunctionType(Function, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
diff --git a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
index f2c7a7f..227449a 100644
--- a/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/generic_function_typedef.dart.intertwined.expect
@@ -819,7 +819,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -842,7 +842,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -865,7 +865,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -892,7 +892,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -915,7 +915,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -948,7 +948,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -971,7 +971,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -1008,7 +1008,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1031,7 +1031,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -1068,7 +1068,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1091,7 +1091,7 @@
         parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
@@ -1128,7 +1128,7 @@
               listener: endFunctionType(Function, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
index 4962c43..890482b 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -80,7 +80,7 @@
                 handleType(Configuration, null)
                 handleIdentifier(configuration, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
@@ -127,7 +127,7 @@
                 handleType(Configuration, null)
                 handleIdentifier(configuration, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(assert)
diff --git a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
index 7b2445b..d36c146 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.intertwined.expect
@@ -61,7 +61,7 @@
                   parseFormalParameters(ConfigurationService, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Configuration)
                           listener: endMetadataStar(0)
@@ -72,7 +72,7 @@
                         ensureIdentifier(Configuration, formalParameterDeclaration)
                           listener: handleIdentifier(configuration, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -161,7 +161,7 @@
                   parseFormalParameters(configuration, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Configuration)
                           listener: endMetadataStar(0)
@@ -172,7 +172,7 @@
                         ensureIdentifier(Configuration, formalParameterDeclaration)
                           listener: handleIdentifier(configuration, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, configuration, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
index 911e2dd..4bcd475 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
@@ -79,7 +79,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -150,7 +150,7 @@
               handleType(int, null)
               handleIdentifier(y, formalParameterDeclaration)
               handleFormalParameterWithoutValue())
-            endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
           endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         endFunctionType(Function, ?)
         beginVariablesDeclaration(f, null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
index a2eaf9f..846f5fe 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.intertwined.expect
@@ -108,7 +108,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -140,7 +140,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -238,7 +238,7 @@
                   parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                     parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                       listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
                         parseMetadataStar(()
                           listener: beginMetadataStar(@)
                           parseMetadata(()
@@ -271,7 +271,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(y, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+                        listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
                       listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
                   listener: endFunctionType(Function, ?)
                   listener: beginVariablesDeclaration(f, null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect
index 213652b..63a4760 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(int, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect
index fb14934..762eb6c 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,7 +163,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect
index 2f24240..20a4b28 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(int, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect
index c5323dd..6649435 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,7 +163,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect
index 55f2041..f217da9 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(bool, null)
           handleIdentifier(b2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect
index 364c2db..dd24930 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,7 +163,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect
index 6d2ad97..ab3fe72 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(bool, null)
           handleIdentifier(b2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect
index 917e374..cf4975c 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,7 +163,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect
index 6b1850a..911ef38 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(bool, null)
           handleIdentifier(b2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -94,7 +94,7 @@
           handleType(Object, null)
           handleIdentifier(p, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect
index 9f9ba52..98b3ef5 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,8 +163,8 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -175,7 +175,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(p, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect
index af3542b..986780c 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(bool, null)
           handleIdentifier(b1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(bool, null)
           handleIdentifier(b2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -67,7 +67,7 @@
           handleType(int, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(int)
         endMetadataStar(0)
         beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
@@ -76,7 +76,7 @@
           handleType(int, null)
           handleIdentifier(y, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -85,7 +85,7 @@
           handleType(Object, null)
           handleIdentifier(o, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(Object)
         endMetadataStar(0)
         beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
@@ -94,7 +94,7 @@
           handleType(Object, null)
           handleIdentifier(p, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect
index 0d4dd9d..c0c86e7 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -30,8 +30,8 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -42,7 +42,7 @@
                 ensureIdentifier(bool, formalParameterDeclaration)
                   listener: handleIdentifier(b2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -128,7 +128,7 @@
           parseFormalParameters(g, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -139,8 +139,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -151,8 +151,8 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(y, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -163,8 +163,8 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(o, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(Object)
                   listener: endMetadataStar(0)
@@ -175,7 +175,7 @@
                 ensureIdentifier(Object, formalParameterDeclaration)
                   listener: handleIdentifier(p, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
index 6e3fbf8d..d19f050 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -168,7 +168,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -230,7 +230,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -295,7 +295,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -360,7 +360,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -431,7 +431,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -505,7 +505,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -582,7 +582,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -662,7 +662,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -745,7 +745,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
@@ -831,7 +831,7 @@
             handleType(int, null)
             handleNoName())
             handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
         endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
       endFunctionType(Function, null)
     endTypedef(typedef, =, ;)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
index e61e6cb..6ce9ce4 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -311,7 +311,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -331,7 +331,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -405,7 +405,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -429,7 +429,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -507,7 +507,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -533,7 +533,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -619,7 +619,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -649,7 +649,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -745,7 +745,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -780,7 +780,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -880,7 +880,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -917,7 +917,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1011,7 +1011,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -1045,7 +1045,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1145,7 +1145,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -1182,7 +1182,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1284,7 +1284,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -1322,7 +1322,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
@@ -1430,7 +1430,7 @@
         parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
           parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
             listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
-            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+            parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
               parseMetadataStar(()
                 listener: beginMetadataStar(@)
                 parseMetadata(()
@@ -1471,7 +1471,7 @@
               listener: handleType(int, null)
               listener: handleNoName())
               listener: handleFormalParameterWithoutValue())
-              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
+              listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
             listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
         listener: endFunctionType(Function, null)
         ensureSemicolon())
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
index 8c87ac4..4304e12 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.intertwined.expect
@@ -329,7 +329,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -374,7 +374,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -420,7 +420,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
@@ -466,7 +466,7 @@
                 inPlainSync()
                 parseRedirectingFactoryBody())
                   listener: beginRedirectingFactoryBody(=)
-                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
@@ -637,7 +637,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -678,7 +678,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -720,7 +720,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -762,7 +762,7 @@
                 parsePrimary(=, expression)
                   parseConstExpression(=)
                     listener: beginConstExpression(const)
-                    parseConstructorReference(const, ConstructorReferenceContext.Const, null, false)
+                    parseConstructorReference(const, ConstructorReferenceContext.Const, null)
                       ensureIdentifier(const, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -809,7 +809,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -851,7 +851,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(C, constructorReference)
                       listener: beginConstructorReference(C)
@@ -894,7 +894,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -937,7 +937,7 @@
                   parseNewExpression(=)
                     isNextIdentifier(new)
                     listener: beginNewExpression(new)
-                    parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                    parseConstructorReference(new, ConstructorReferenceContext.New, null)
                       ensureIdentifier(new, constructorReference)
                         listener: handleIdentifier(prefix, constructorReference)
                       listener: beginConstructorReference(prefix)
@@ -1028,7 +1028,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, <, Instance of 'SimpleTypeArgument1')
                   listener: beginImplicitCreationExpression(C)
-                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1', false)
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(C, constructorReference)
                     listener: beginConstructorReference(C)
@@ -1126,7 +1126,7 @@
               parseUnaryExpression(=, true)
                 parseImplicitCreationExpression(=, <, Instance of 'SimpleTypeArgument1')
                   listener: beginImplicitCreationExpression(prefix)
-                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1', false)
+                  parseConstructorReference(=, ConstructorReferenceContext.Implicit, Instance of 'SimpleTypeArgument1')
                     ensureIdentifier(=, constructorReference)
                       listener: handleIdentifier(prefix, constructorReference)
                     listener: beginConstructorReference(prefix)
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
index 87f4d7f..8171688 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -29,7 +29,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -58,7 +58,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -87,7 +87,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -116,7 +116,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -145,7 +145,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
index 0f8ef5f..ab8e689 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters(<, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -55,7 +55,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -102,7 +102,7 @@
                   parseFormalParameters(<<, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -113,7 +113,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -160,7 +160,7 @@
                   parseFormalParameters(>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -171,7 +171,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -218,7 +218,7 @@
                   parseFormalParameters(>>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -229,7 +229,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -276,7 +276,7 @@
                   parseFormalParameters(>>>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -287,7 +287,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
index 1f57566..26fedc5 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.expect
@@ -34,7 +34,7 @@
                 handleType(int, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
index dec4f2e..2a09196 100644
--- a/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/operator_hat_class.crash_dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters(^, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -55,7 +55,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/general/try_catch.dart.expect b/pkg/front_end/parser_testcases/general/try_catch.dart.expect
index 3632e57..88d1779 100644
--- a/pkg/front_end/parser_testcases/general/try_catch.dart.expect
+++ b/pkg/front_end/parser_testcases/general/try_catch.dart.expect
@@ -21,14 +21,14 @@
                 handleNoType(()
                 handleIdentifier(e, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
               beginMetadataStar(s)
               endMetadataStar(0)
               beginFormalParameter(s, MemberKind.Catch, null, null, null)
                 handleNoType(,)
                 handleIdentifier(s, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, s, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+              endFormalParameter(null, null, null, s, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
             endFormalParameters(2, (, ), MemberKind.Catch)
           endCatchClause({)
           beginBlock({, BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/general/try_catch.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/try_catch.dart.intertwined.expect
index e241c98..69d9485 100644
--- a/pkg/front_end/parser_testcases/general/try_catch.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/try_catch.dart.intertwined.expect
@@ -40,7 +40,7 @@
                 parseFormalParameters(catch, MemberKind.Catch)
                   parseFormalParametersRest((, MemberKind.Catch)
                     listener: beginFormalParameters((, MemberKind.Catch)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(()
                         listener: beginMetadataStar(e)
                         listener: endMetadataStar(0)
@@ -49,8 +49,8 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(e, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue(,)
-                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
-                    parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
+                    parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.Catch)
                       parseMetadataStar(,)
                         listener: beginMetadataStar(s)
                         listener: endMetadataStar(0)
@@ -59,7 +59,7 @@
                       ensureIdentifier(,, formalParameterDeclaration)
                         listener: handleIdentifier(s, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, s, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                      listener: endFormalParameter(null, null, null, s, null, null, FormalParameterKind.requiredPositional, MemberKind.Catch)
                     listener: endFormalParameters(2, (, ), MemberKind.Catch)
                 listener: endCatchClause({)
                 parseBlock(), BlockKind(catch clause))
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.expect
index d504573..57b7ebe 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.intertwined.expect
index 985578d..96a8d67 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_01.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.expect
index a2d09c6..ca320d5 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.intertwined.expect
index 0e86802..115149e 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_02.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
index b3e65bd..eccfab3 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
index 37721d8..69052ee 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_03.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
index 620e5ab..a69c92c 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
index 8e4acb1..5a3d80b 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_04.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.expect
index 7835582..eb681bb 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.intertwined.expect
index d8d323d..1c24308c 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_05.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
index 89c58a5..4796374 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
index 1b8fd87..3e3a9f3 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_06.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
index 8d817a4..b3e4b40 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
index 9a8e4f2..f87b938 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_07.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
index 20ea60b..91da9ad 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
index 9fbc8ef..100b30b 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_08.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.expect
index 50105ca..3844143 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.intertwined.expect
index 021b068..03b5b3a 100644
--- a/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/chained_call_with_index_01.dart.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
index fe8f216..b239bfa 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
@@ -15,7 +15,7 @@
           handleType(C, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
index 0109ec5..f18ffcf 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(C)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(C, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
index 024e3ff..8f68023 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.expect
@@ -15,7 +15,7 @@
           handleType(C, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
index c9caa2d..66561d9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(C)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(C, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
index 93f0fc4..e89b97c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(C, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
index 0609ba0..c16692e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_2_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(C)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(C, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
index 7bf5d36..bbcf676 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(C, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
index 536cdc4..7a91e01 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(test, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(C)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(C, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
index c7ab142..ee4fa8d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -27,7 +27,7 @@
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
index 427c908..f65ed0f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   parseFormalParameters([], MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
index 7637e0a..5ef701e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.expect
@@ -27,7 +27,7 @@
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
index 9e35037..82758c4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723_prime.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   parseFormalParameters([], MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect
index 46fbaed..b7eafc6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect
@@ -17,7 +17,7 @@
           handleType(int, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginLiteralString("42")
@@ -51,7 +51,7 @@
           handleType(T, null)
           handleIdentifier(t, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.intertwined.expect
index e532ab1..65accca 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -79,7 +79,7 @@
           parseFormalParameters(>, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(T)
                   listener: endMetadataStar(0)
@@ -90,7 +90,7 @@
                 ensureIdentifier(T, formalParameterDeclaration)
                   listener: handleIdentifier(t, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.expect
index 9bd99df..f7060bf 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.expect
@@ -17,7 +17,7 @@
           handleType(int, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginLiteralString("42")
@@ -51,7 +51,7 @@
           handleType(T, null)
           handleIdentifier(t, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.intertwined.expect
index 3cd3ac7..5381dd5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime1.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -79,7 +79,7 @@
           parseFormalParameters(>, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(T)
                   listener: endMetadataStar(0)
@@ -90,7 +90,7 @@
                 ensureIdentifier(T, formalParameterDeclaration)
                   listener: handleIdentifier(t, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.expect
index a0cc20d..6dda6e9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.expect
@@ -17,7 +17,7 @@
           handleType(int, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginLiteralString("42")
@@ -51,7 +51,7 @@
           handleType(T, null)
           handleIdentifier(t, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.intertwined.expect
index abe2650..56af9fb 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime2.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(foo, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(int)
                   listener: endMetadataStar(0)
@@ -32,7 +32,7 @@
                 ensureIdentifier(int, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -79,7 +79,7 @@
           parseFormalParameters(>, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(T)
                   listener: endMetadataStar(0)
@@ -90,7 +90,7 @@
                 ensureIdentifier(T, formalParameterDeclaration)
                   listener: handleIdentifier(t, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.expect
index c5bf508..3b76c2e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.expect
@@ -31,7 +31,7 @@
           handleType(T1, null)
           handleIdentifier(t1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(T2)
         endMetadataStar(0)
         beginFormalParameter(T2, MemberKind.TopLevelMethod, null, null, null)
@@ -40,7 +40,7 @@
           handleType(T2, null)
           handleIdentifier(t2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.intertwined.expect
index c56b490..dbdb47c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime3.dart.intertwined.expect
@@ -39,7 +39,7 @@
           parseFormalParameters(>, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(T1)
                   listener: endMetadataStar(0)
@@ -50,8 +50,8 @@
                 ensureIdentifier(T1, formalParameterDeclaration)
                   listener: handleIdentifier(t1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(T2)
                   listener: endMetadataStar(0)
@@ -62,7 +62,7 @@
                 ensureIdentifier(T2, formalParameterDeclaration)
                   listener: handleIdentifier(t2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.expect
index e2bd69d..42ad557 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.expect
@@ -31,7 +31,7 @@
           handleType(T1, null)
           handleIdentifier(t1, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(T2)
         endMetadataStar(0)
         beginFormalParameter(T2, MemberKind.TopLevelMethod, null, null, null)
@@ -40,7 +40,7 @@
           handleType(T2, null)
           handleIdentifier(t2, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.intertwined.expect
index fde2d69..598888b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime4.dart.intertwined.expect
@@ -39,7 +39,7 @@
           parseFormalParameters(>, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(T1)
                   listener: endMetadataStar(0)
@@ -50,8 +50,8 @@
                 ensureIdentifier(T1, formalParameterDeclaration)
                   listener: handleIdentifier(t1, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t1, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(T2)
                   listener: endMetadataStar(0)
@@ -62,7 +62,7 @@
                 ensureIdentifier(T2, formalParameterDeclaration)
                   listener: handleIdentifier(t2, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, t2, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
index 9dcfc3f..40b6430 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.intertwined.expect
index 2f84138..7d451f6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus.dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -31,7 +31,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.expect
index a4df5d6..4876cb5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(dynamic)
         endMetadataStar(0)
         beginFormalParameter(dynamic, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(dynamic, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.intertwined.expect
index 872d2a6..040e0e1 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_lookup_plus_plus.dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -31,8 +31,8 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -43,7 +43,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
index a3bcbdb..e42484f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.expect
@@ -87,7 +87,7 @@
                 handleNoType(()
                 handleIdentifier(b, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
             endFormalParameters(1, (, ), MemberKind.Local)
             handleAsyncModifier(null, null)
             handleRecoverableError(ExpectedBody, ;, ;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
index dab8c9f..7578970 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_with_type_arguments.dart.intertwined.expect
@@ -148,7 +148,7 @@
                                       parseFormalParametersRequiredOpt(>, MemberKind.Local)
                                         parseFormalParametersRest((, MemberKind.Local)
                                           listener: beginFormalParameters((, MemberKind.Local)
-                                          parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                                          parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.Local)
                                             parseMetadataStar(()
                                               listener: beginMetadataStar(b)
                                               listener: endMetadataStar(0)
@@ -157,7 +157,7 @@
                                             ensureIdentifier((, formalParameterDeclaration)
                                               listener: handleIdentifier(b, formalParameterDeclaration)
                                             listener: handleFormalParameterWithoutValue())
-                                            listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                                            listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.Local)
                                           listener: endFormalParameters(1, (, ), MemberKind.Local)
                                       parseAsyncOptBody(), true, false)
                                         parseAsyncModifierOpt())
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.expect
index 5c7e077..71d336d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(x, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(dynamic)
         endMetadataStar(0)
         beginFormalParameter(dynamic, MemberKind.TopLevelMethod, null, null, null)
@@ -24,7 +24,7 @@
           handleType(dynamic, null)
           handleIdentifier(i, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.intertwined.expect
index c14c7a9..e73d955 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_plus_plus_lookup.dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -31,8 +31,8 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(x, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -43,7 +43,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(i, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
index f7f74f3..fa82b45 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(sample, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
index 4ff2191..db63fbb 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(sample, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
index 330ec02..b6813cd 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(sample, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
index 1da22990..b3f8cc3 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(sample, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
index 8c44af9..3026351 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(sample, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
index 9fa6435..20ab822 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime2.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(sample, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
index c790069..918518a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(sample, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
index 7a10fec..41a07ff 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime3.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(sample, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, sample, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
index 1a04353..a1027b6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
index 944e564..82eec5f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime4.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
index fa573f88..4680630 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.expect
@@ -15,7 +15,7 @@
           handleType(dynamic, null)
           handleIdentifier(e, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
index ae28fcf..2490973 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793_prime5.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(f, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(dynamic)
                   listener: endMetadataStar(0)
@@ -30,7 +30,7 @@
                 ensureIdentifier(dynamic, formalParameterDeclaration)
                   listener: handleIdentifier(e, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
index b03f7c8..2295a3d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.expect
@@ -49,7 +49,7 @@
                 handleType(Object, ?)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(x)
@@ -100,7 +100,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(y)
@@ -164,7 +164,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(y)
@@ -228,7 +228,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(y)
@@ -292,7 +292,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(y)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
index 2739059..1ea62e7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_01.dart.intertwined.expect
@@ -78,7 +78,7 @@
                   parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Object)
                           listener: endMetadataStar(0)
@@ -89,7 +89,7 @@
                         ensureIdentifier(?, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -188,7 +188,7 @@
                   parseFormalParameters(a, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -199,7 +199,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -333,7 +333,7 @@
                   parseFormalParameters(b, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -344,7 +344,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -478,7 +478,7 @@
                   parseFormalParameters(c, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -489,7 +489,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -623,7 +623,7 @@
                   parseFormalParameters(d, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -634,7 +634,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
index ef0735d..9faf112 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.expect
@@ -49,7 +49,7 @@
                 handleType(Object, ?)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(x)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
index b8fd957..f21eff7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_02.dart.intertwined.expect
@@ -78,7 +78,7 @@
                   parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Object)
                           listener: endMetadataStar(0)
@@ -89,7 +89,7 @@
                         ensureIdentifier(?, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
index e9498ef..01b9de6 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.expect
@@ -49,7 +49,7 @@
                 handleType(Object, ?)
                 handleIdentifier(o, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             beginInitializers(:)
               beginInitializer(x)
@@ -109,7 +109,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -166,7 +166,7 @@
                 handleType(dynamic, null)
                 handleIdentifier(x, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
index 19ff1e8..b2028d4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40834_03.dart.intertwined.expect
@@ -78,7 +78,7 @@
                   parseFormalParameters(Foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(Object)
                           listener: endMetadataStar(0)
@@ -89,7 +89,7 @@
                         ensureIdentifier(?, formalParameterDeclaration)
                           listener: handleIdentifier(o, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, o, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
@@ -214,7 +214,7 @@
                   parseFormalParameters(foo, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -225,7 +225,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -355,7 +355,7 @@
                   parseFormalParameters(bar, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(dynamic)
                           listener: endMetadataStar(0)
@@ -366,7 +366,7 @@
                         ensureIdentifier(dynamic, formalParameterDeclaration)
                           listener: handleIdentifier(x, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect
index 7f0bd3e..cafb81f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect
@@ -19,7 +19,7 @@
           handleType(List, ?)
           handleIdentifier(a, formalParameterDeclaration)
           handleFormalParameterWithoutValue(,)
-        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
@@ -28,7 +28,7 @@
           handleType(bool, ?)
           handleIdentifier(b, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.intertwined.expect
index 68efe3e..4be754e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.intertwined.expect
@@ -20,7 +20,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(List)
                   listener: endMetadataStar(0)
@@ -35,8 +35,8 @@
                 ensureIdentifier(?, formalParameterDeclaration)
                   listener: handleIdentifier(a, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue(,)
-                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
-              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(,)
                   listener: beginMetadataStar(bool)
                   listener: endMetadataStar(0)
@@ -47,7 +47,7 @@
                 ensureIdentifier(?, formalParameterDeclaration)
                   listener: handleIdentifier(b, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
index 9b642f3..1931d06 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -24,7 +24,7 @@
           handleType(Map, null)
           handleIdentifier(json, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -105,7 +105,7 @@
           handleType(Map, null)
           handleIdentifier(json, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -186,7 +186,7 @@
           handleType(Map, null)
           handleIdentifier(json, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
@@ -268,7 +268,7 @@
           handleType(Map, null)
           handleIdentifier(json, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
index b07dc15..c621fc7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.intertwined.expect
@@ -21,7 +21,7 @@
           parseFormalParameters(method1, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(Map)
                   listener: endMetadataStar(0)
@@ -40,7 +40,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(json, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -187,7 +187,7 @@
           parseFormalParameters(method2, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(Map)
                   listener: endMetadataStar(0)
@@ -206,7 +206,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(json, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -353,7 +353,7 @@
           parseFormalParameters(method3, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(Map)
                   listener: endMetadataStar(0)
@@ -372,7 +372,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(json, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
@@ -529,7 +529,7 @@
           parseFormalParameters(method4, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(Map)
                   listener: endMetadataStar(0)
@@ -548,7 +548,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(json, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, json, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart
new file mode 100644
index 0000000..2a6f3cb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart
@@ -0,0 +1,6 @@
+void main() {
+  Function? f = () {
+    print(1)
+  };
+  f();
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.expect
new file mode 100644
index 0000000..3bc47da
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.expect
@@ -0,0 +1,56 @@
+Problems reported:
+
+parser/nnbd/issue_47020:3:12: Expected ';' after this.
+    print(1)
+           ^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(Function)
+        endMetadataStar(0)
+        handleIdentifier(Function, typeReference)
+        handleNoTypeArguments(?)
+        handleType(Function, ?)
+        beginVariablesDeclaration(f, null, null)
+          handleIdentifier(f, localVariableDeclaration)
+          beginInitializedIdentifier(f)
+            beginVariableInitializer(=)
+              handleNoTypeVariables(()
+              beginFunctionExpression(()
+                beginFormalParameters((, MemberKind.Local)
+                endFormalParameters(0, (, ), MemberKind.Local)
+                handleAsyncModifier(null, null)
+                beginBlockFunctionBody({)
+                  handleIdentifier(print, expression)
+                  handleNoTypeArguments(()
+                  beginArguments(()
+                    handleLiteralInt(1)
+                  endArguments(1, (, ))
+                  handleSend(print, })
+                  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                  handleExpressionStatement(;)
+                endBlockFunctionBody(1, {, })
+              endFunctionExpression((, ;)
+            endVariableInitializer(=)
+          endInitializedIdentifier(f)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect
new file mode 100644
index 0000000..06f70a8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect
@@ -0,0 +1,175 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, Function)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclaration({, false)
+                parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                  looksLikeLocalFunction(f)
+                  parseExpressionWithoutCascade(=)
+                    parsePrecedenceExpression(=, 1, false)
+                      parseUnaryExpression(=, false)
+                        parsePrimary(=, expression)
+                          parseParenthesizedExpressionOrFunctionLiteral(=)
+                            parseFunctionExpression(=)
+                              parseFormalParametersRequiredOpt(=, MemberKind.Local)
+                                parseFormalParametersRest((, MemberKind.Local)
+                              parseAsyncOptBody(), true, false)
+                                parseAsyncModifierOpt())
+                                  inPlainSync()
+                                parseFunctionBody(), true, false)
+                                  notEofOrValue(}, print)
+                                  parseStatement({)
+                                    parseStatementX({)
+                                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                                        looksLikeLocalFunction(print)
+                                        parseExpressionStatement({)
+                                          parseExpression({)
+                                            parsePrecedenceExpression({, 1, true)
+                                              parseUnaryExpression({, true)
+                                                parsePrimary({, expression)
+                                                  parseSendOrFunctionLiteral({, expression)
+                                                    looksLikeFunctionBody(})
+                                                    parseSend({, expression)
+                                                      isNextIdentifier({)
+                                                      ensureIdentifier({, expression)
+                                                      parseArgumentsOpt(print)
+                                                        parseArguments(print)
+                                                          parseArgumentsRest(()
+                                                            parseExpression(()
+                                                              parsePrecedenceExpression((, 1, true)
+                                                                parseUnaryExpression((, true)
+                                                                  parsePrimary((, expression)
+                                                                    parseLiteralInt(()
+                                          ensureSemicolon())
+                                            reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                            rewriter()
+                                  notEofOrValue(}, })
+                  listener: beginMetadataStar(Function)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(Function, typeReference)
+                  listener: handleNoTypeArguments(?)
+                  listener: handleType(Function, ?)
+                  listener: beginVariablesDeclaration(f, null, null)
+                  parseVariablesDeclarationRest(?, true)
+                    parseOptionallyInitializedIdentifier(?)
+                      ensureIdentifier(?, localVariableDeclaration)
+                        listener: handleIdentifier(f, localVariableDeclaration)
+                      listener: beginInitializedIdentifier(f)
+                      parseVariableInitializerOpt(f)
+                        listener: beginVariableInitializer(=)
+                        parseExpression(=)
+                          parsePrecedenceExpression(=, 1, true)
+                            parseUnaryExpression(=, true)
+                              parsePrimary(=, expression)
+                                parseParenthesizedExpressionOrFunctionLiteral(=)
+                                  listener: handleNoTypeVariables(()
+                                  parseFunctionExpression(=)
+                                    listener: beginFunctionExpression(()
+                                    parseFormalParametersRequiredOpt(=, MemberKind.Local)
+                                      parseFormalParametersRest((, MemberKind.Local)
+                                        listener: beginFormalParameters((, MemberKind.Local)
+                                        listener: endFormalParameters(0, (, ), MemberKind.Local)
+                                    parseAsyncOptBody(), true, false)
+                                      parseAsyncModifierOpt())
+                                        listener: handleAsyncModifier(null, null)
+                                        inPlainSync()
+                                      parseFunctionBody(), true, false)
+                                        listener: beginBlockFunctionBody({)
+                                        notEofOrValue(}, print)
+                                        parseStatement({)
+                                          parseStatementX({)
+                                            parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                                              looksLikeLocalFunction(print)
+                                              parseExpressionStatement({)
+                                                parseExpression({)
+                                                  parsePrecedenceExpression({, 1, true)
+                                                    parseUnaryExpression({, true)
+                                                      parsePrimary({, expression)
+                                                        parseSendOrFunctionLiteral({, expression)
+                                                          looksLikeFunctionBody(})
+                                                          parseSend({, expression)
+                                                            isNextIdentifier({)
+                                                            ensureIdentifier({, expression)
+                                                              listener: handleIdentifier(print, expression)
+                                                            listener: handleNoTypeArguments(()
+                                                            parseArgumentsOpt(print)
+                                                              parseArguments(print)
+                                                                parseArgumentsRest(()
+                                                                  listener: beginArguments(()
+                                                                  parseExpression(()
+                                                                    parsePrecedenceExpression((, 1, true)
+                                                                      parseUnaryExpression((, true)
+                                                                        parsePrimary((, expression)
+                                                                          parseLiteralInt(()
+                                                                            listener: handleLiteralInt(1)
+                                                                  listener: endArguments(1, (, ))
+                                                            listener: handleSend(print, })
+                                                ensureSemicolon())
+                                                  reportRecoverableError(), Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                                                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
+                                                  rewriter()
+                                                listener: handleExpressionStatement(;)
+                                        notEofOrValue(}, })
+                                        listener: endBlockFunctionBody(1, {, })
+                                    listener: endFunctionExpression((, ;)
+                        listener: endVariableInitializer(=)
+                      listener: endInitializedIdentifier(f)
+                    ensureSemicolon(})
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrValue(}, f)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    parsePrecedenceExpression(;, 1, true)
+                      parseUnaryExpression(;, true)
+                        parsePrimary(;, expression)
+                          parseSendOrFunctionLiteral(;, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(;, expression)
+                              isNextIdentifier(;)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.parser.expect
new file mode 100644
index 0000000..f31ed62
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+void main() {
+Function? f = () {
+print(1)
+;};
+f();
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Function[KeywordToken]?[SimpleToken] f[StringToken] =[SimpleToken] ([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]1[StringToken])[SimpleToken]
+;[SyntheticToken]}[SimpleToken];[SimpleToken]
+f[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.scanner.expect
new file mode 100644
index 0000000..0bec4b0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.scanner.expect
@@ -0,0 +1,15 @@
+void main() {
+Function? f = () {
+print(1)
+};
+f();
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+Function[KeywordToken]?[SimpleToken] f[StringToken] =[SimpleToken] ([BeginToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]1[StringToken])[SimpleToken]
+}[SimpleToken];[SimpleToken]
+f[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
index d52f8d6..85eedbd 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.intertwined.expect
@@ -52,7 +52,7 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
@@ -182,7 +182,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
@@ -228,7 +228,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
index 779ed57..b8370c4 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.intertwined.expect
@@ -52,7 +52,7 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
@@ -182,7 +182,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
@@ -228,7 +228,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
index 9c2a5d2..8d87962 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.expect
@@ -29,7 +29,7 @@
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -56,7 +56,7 @@
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
               beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
@@ -65,7 +65,7 @@
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
index 1799ed6..c607ff5 100644
--- a/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/null_shorting_index.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters([], MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -55,7 +55,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -100,7 +100,7 @@
                   parseFormalParameters([]=, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -111,8 +111,8 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
@@ -123,7 +123,7 @@
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
index 1339faa..5d6b7f5 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.intertwined.expect
@@ -52,7 +52,7 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
@@ -182,7 +182,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
@@ -228,7 +228,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
index 0201be0..6dee6b1 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -113,7 +113,7 @@
             handleType(int, null)
             handleIdentifier(named, formalParameterDeclaration)
             handleFormalParameterWithoutValue(})
-          endFormalParameter(null, null, null, named, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+          endFormalParameter(null, null, null, named, null, null, FormalParameterKind.requiredNamed, MemberKind.TopLevelMethod)
         endOptionalFormalParameters(1, {, })
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
index 9e00462..072c202 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.intertwined.expect
@@ -52,7 +52,7 @@
                                 parseNewExpression(=)
                                   isNextIdentifier(new)
                                   listener: beginNewExpression(new)
-                                  parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                     ensureIdentifier(new, constructorReference)
                                       listener: handleIdentifier(X, constructorReference)
                                     listener: beginConstructorReference(X)
@@ -182,7 +182,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(X, constructorReference)
                                 listener: beginConstructorReference(X)
@@ -228,7 +228,7 @@
                             parseNewExpression(;)
                               isNextIdentifier(new)
                               listener: beginNewExpression(new)
-                              parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                              parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                 ensureIdentifier(new, constructorReference)
                                   listener: handleIdentifier(Y, constructorReference)
                                 listener: beginConstructorReference(Y)
@@ -291,7 +291,7 @@
                   ensureIdentifier(int, formalParameterDeclaration)
                     listener: handleIdentifier(named, formalParameterDeclaration)
                   listener: handleFormalParameterWithoutValue(})
-                  listener: endFormalParameter(null, null, null, named, null, null, FormalParameterKind.optionalNamed, MemberKind.TopLevelMethod)
+                  listener: endFormalParameter(null, null, null, named, null, null, FormalParameterKind.requiredNamed, MemberKind.TopLevelMethod)
                 listener: endOptionalFormalParameters(1, {, })
               ensureCloseParen(}, ()
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
index 677cc26..6d8f5ab 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.expect
@@ -50,7 +50,7 @@
                 handleNoType(()
                 handleIdentifier(_, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
index bb151a0..980cb19 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart.intertwined.expect
@@ -47,7 +47,7 @@
                   parseFormalParameters(>>>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(_)
                           listener: endMetadataStar(0)
@@ -56,7 +56,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(_, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -130,7 +130,7 @@
                               parseNewExpression(=)
                                 isNextIdentifier(new)
                                 listener: beginNewExpression(new)
-                                parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                   ensureIdentifier(new, constructorReference)
                                     listener: handleIdentifier(Foo, constructorReference)
                                   listener: beginConstructorReference(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
index 1bb956b..5b84bd6 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.expect
@@ -27,7 +27,7 @@
                 handleNoType(()
                 handleIdentifier(_, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
index d083d95..13d82fc 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   parseFormalParameters(>>, MemberKind.NonStaticMethod)
                     parseFormalParametersRest((, MemberKind.NonStaticMethod)
                       listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(_)
                           listener: endMetadataStar(0)
@@ -53,7 +53,7 @@
                         ensureIdentifier((, formalParameterDeclaration)
                           listener: handleIdentifier(_, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
                       listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
@@ -127,7 +127,7 @@
                               parseNewExpression(=)
                                 isNextIdentifier(new)
                                 listener: beginNewExpression(new)
-                                parseConstructorReference(new, ConstructorReferenceContext.New, null, false)
+                                parseConstructorReference(new, ConstructorReferenceContext.New, null)
                                   ensureIdentifier(new, constructorReference)
                                     listener: handleIdentifier(Foo, constructorReference)
                                   listener: beginConstructorReference(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect
index 7d1245d..e021f75 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.expect
@@ -25,7 +25,7 @@
           handleType(List, null)
           handleIdentifier(arguments, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, arguments, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, arguments, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect
index aabf7a7..f6c8349 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart.intertwined.expect
@@ -19,7 +19,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(List)
                   listener: endMetadataStar(0)
@@ -34,7 +34,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(arguments, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, arguments, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, arguments, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
index f167070..9e599ba 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.expect
@@ -25,7 +25,7 @@
                 handleNoType(()
                 handleIdentifier(_, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
@@ -50,7 +50,7 @@
                 handleNoType(()
                 handleIdentifier(_, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+              endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
             endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
index b8e8393..d3f42a9 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart.intertwined.expect
@@ -36,7 +36,7 @@
                 parseFormalParameters(>, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(_)
                         listener: endMetadataStar(0)
@@ -45,7 +45,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(_, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
@@ -88,7 +88,7 @@
                 parseFormalParameters(call, MemberKind.ExtensionNonStaticMethod)
                   parseFormalParametersRest((, MemberKind.ExtensionNonStaticMethod)
                     listener: beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
-                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                       parseMetadataStar(()
                         listener: beginMetadataStar(_)
                         listener: endMetadataStar(0)
@@ -97,7 +97,7 @@
                       ensureIdentifier((, formalParameterDeclaration)
                         listener: handleIdentifier(_, formalParameterDeclaration)
                       listener: handleFormalParameterWithoutValue())
-                      listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.mandatory, MemberKind.ExtensionNonStaticMethod)
+                      listener: endFormalParameter(null, null, null, _, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
                     listener: endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
               parseInitializersOpt())
                 listener: handleNoInitializers()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
index dd68ff3..28faad6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.expect
@@ -165,7 +165,7 @@
           handleType(List, null)
           handleIdentifier(args, formalParameterDeclaration)
           handleFormalParameterWithoutValue())
-        endFormalParameter(null, null, null, args, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        endFormalParameter(null, null, null, args, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
       endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
index c03aca1..a09ee1e 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
@@ -156,7 +156,7 @@
           parseFormalParameters(main, MemberKind.TopLevelMethod)
             parseFormalParametersRest((, MemberKind.TopLevelMethod)
               listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                 parseMetadataStar(()
                   listener: beginMetadataStar(List)
                   listener: endMetadataStar(0)
@@ -171,7 +171,7 @@
                 ensureIdentifier(>, formalParameterDeclaration)
                   listener: handleIdentifier(args, formalParameterDeclaration)
                 listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, args, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                listener: endFormalParameter(null, null, null, args, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
               listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
         parseAsyncModifierOpt())
           listener: handleAsyncModifier(null, null)
diff --git a/pkg/front_end/test/constant_evaluator_benchmark.dart b/pkg/front_end/test/constant_evaluator_benchmark.dart
index c86c066..8319bc8 100644
--- a/pkg/front_end/test/constant_evaluator_benchmark.dart
+++ b/pkg/front_end/test/constant_evaluator_benchmark.dart
@@ -87,12 +87,11 @@
             new SilentErrorReporter(),
             evaluationMode,
             evaluateAnnotations: true,
-            enableTripleShift: target
-                .isExperimentEnabledGlobally(ExperimentalFlag.tripleShift),
-            enableConstFunctions: target
-                .isExperimentEnabledGlobally(ExperimentalFlag.constFunctions),
-            enableConstructorTearOff: target.isExperimentEnabledGlobally(
-                ExperimentalFlag.constructorTearoffs),
+            enableTripleShift: target.globalFeatures.tripleShift.isEnabled,
+            enableConstFunctions:
+                target.globalFeatures.constFunctions.isEnabled,
+            enableConstructorTearOff:
+                target.globalFeatures.constructorTearoffs.isEnabled,
             errorOnUnevaluatedConstant:
                 incrementalCompiler.context.options.errorOnUnevaluatedConstant);
         print("Transformed constants with $environmentDefinesDescription"
diff --git a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
index e6ffb2b..8b716eb 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -290,7 +290,7 @@
 
     // For all dart files: Parse them as set their source as the parsed source
     // to "get around" any encoding issues when printing later.
-    Map<Uri, Uint8List> copy = new Map.from(_fs.data);
+    Map<Uri?, Uint8List?> copy = new Map.of(_fs.data);
     for (Uri? uri in _fs.data.keys) {
       if (await _shouldQuit()) break;
       String uriString = uri.toString();
@@ -726,7 +726,7 @@
 
     // TODO(jensj): don't use full uris.
     print("""
-# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+# 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.md file.
 
@@ -910,7 +910,7 @@
     // Check if there now are any unused files.
     if (_latestComponent == null) return;
     Set<Uri> neededUris = _latestComponent!.uriToSource.keys.toSet();
-    Map<Uri, Uint8List> copy = new Map.from(_fs.data);
+    Map<Uri?, Uint8List?> copy = new Map.of(_fs.data);
     bool removedSome = false;
     if (await _shouldQuit()) return;
     for (MapEntry<Uri?, Uint8List?> entry in _fs.data.entries) {
@@ -947,7 +947,7 @@
 
     if (!limitTo1) {
       if (await _shouldQuit()) return;
-      Map<Uri, Uint8List> copy = new Map.from(_fs.data);
+      Map<Uri?, Uint8List?> copy = new Map.of(_fs.data);
       // Try to remove content of i and the next 9 (10 files in total).
       for (int j = uriIndex; j < uriIndex + 10 && j < uris.length; j++) {
         Uri uri = uris[j];
@@ -1223,7 +1223,7 @@
       // Try to load json and remove blocks.
       try {
         Map json = jsonDecode(utf8.decode(data));
-        Map jsonModified = new Map.from(json);
+        Map jsonModified = new Map.of(json);
         List packages = json["packages"];
         List packagesModified = new List.from(packages);
         jsonModified["packages"] = packagesModified;
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..824d8f1 100644
--- a/pkg/front_end/test/extensions/data/use_as_type.dart
+++ b/pkg/front_end/test/extensions/data/use_as_type.dart
@@ -34,19 +34,19 @@
 extension B2<T> on B1<T> {}
 
 main() {
-  /*error: errors=['A2' isn't a type.]*/
+  /*error: errors=[This requires the experimental 'extension-types' language feature to be enabled.]*/
   A2 var1;
-  /*error: errors=['B2' isn't a type.]*/
+  /*error: errors=[This requires the experimental '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 experimental 'extension-types' language feature to be enabled.]*/A2> var3;
 }
 
-/*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/
+/*error: errors=[This requires the experimental 'extension-types' language feature to be enabled.]*/
 A2 method1() => null;
 
 // 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 experimental '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;
+B1</*error: errors=[This requires the experimental 'extension-types' language feature to be enabled.]*/A2> method3() => null;
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index bb09833..3face97 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -233,7 +233,7 @@
     if (memberBuilder is SourceFunctionBuilder) {
       if (memberBuilder.formals != null) {
         for (FormalParameterBuilder parameter in memberBuilder.formals!) {
-          if (parameter.isRequired) {
+          if (parameter.isRequiredPositional) {
             features.addElement(Tags.builderRequiredParameters, parameter.name);
           } else if (parameter.isPositional) {
             features.addElement(
diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 47c08bb..2e0a4a9 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -39,6 +39,7 @@
 
 import 'package:front_end/src/fasta/kernel/utils.dart'
     show serializeComponent, serializeProcedure;
+import 'package:front_end/src/testing/compiler_common.dart';
 
 import "package:kernel/ast.dart"
     show
@@ -66,10 +67,13 @@
 
 import "package:yaml/yaml.dart" show YamlMap, YamlList, loadYamlNode;
 
+import '../testing_utils.dart' show checkEnvironment;
+
 import '../utils/kernel_chain.dart' show runDiff, openWrite;
 
 class Context extends ChainContext {
   final CompilerContext compilerContext;
+  final CompilerContext compilerContextNoNNBD;
   final List<DiagnosticMessage> errors;
 
   @override
@@ -79,7 +83,8 @@
   final Set<Uri> fuzzedLibraries = {};
   int fuzzCompiles = 0;
 
-  Context(this.compilerContext, this.errors, bool updateExpectations, this.fuzz)
+  Context(this.compilerContext, this.compilerContextNoNNBD, this.errors,
+      bool updateExpectations, this.fuzz)
       : steps = <Step>[
           const ReadTest(),
           const CompileExpression(),
@@ -142,9 +147,9 @@
 class TestCase {
   final TestDescription description;
 
-  final Uri? entryPoint;
+  final Map<String, String> sources;
 
-  final Uri? import;
+  final Uri entryPoint;
 
   final List<String> definitions;
 
@@ -158,20 +163,20 @@
 
   final bool isStaticMethod;
 
-  final Uri? library;
+  final Uri library;
 
   final String? className;
 
   final String? methodName;
 
-  String? expression;
+  String expression;
 
   List<CompilationResult> results = [];
 
   TestCase(
       this.description,
+      this.sources,
       this.entryPoint,
-      this.import,
       this.definitions,
       this.definitionTypes,
       this.typeDefinitions,
@@ -186,8 +191,8 @@
   @override
   String toString() {
     return "TestCase("
+        "$sources, "
         "$entryPoint, "
-        "$import, "
         "$definitions, "
         "$definitionTypes, "
         "$typeDefinitions,"
@@ -197,23 +202,6 @@
         "$className, "
         "static = $isStaticMethod)";
   }
-
-  String? validate() {
-    print(this);
-    if (entryPoint == null) {
-      return "No entryPoint.";
-    }
-    if (!(new File.fromUri(entryPoint!)).existsSync()) {
-      return "Entry point $entryPoint doesn't exist.";
-    }
-    if (library == null) {
-      return "No enclosing node.";
-    }
-    if (expression == null) {
-      return "No expression to compile.";
-    }
-    return null;
-  }
 }
 
 class MatchProcedureExpectations extends Step<List<TestCase>, Null, Context> {
@@ -230,12 +218,11 @@
   Future<Result<Null>> run(List<TestCase> tests, Context context) async {
     String actual = "";
     for (TestCase test in tests) {
-      String primary =
-          test.results.first.printResult(test.entryPoint!, context);
+      String primary = test.results.first.printResult(test.entryPoint, context);
       actual += primary;
       for (int i = 1; i < test.results.length; ++i) {
         String secondary =
-            test.results[i].printResult(test.entryPoint!, context);
+            test.results[i].printResult(test.entryPoint, context);
         if (primary != secondary) {
           return fail(
               null,
@@ -286,8 +273,7 @@
     Uri uri = description.uri;
     String contents = await new File.fromUri(uri).readAsString();
 
-    Uri? entryPoint;
-    Uri? import;
+    Uri entryPoint = toTestUri('main.dart');
     List<String> definitions = <String>[];
     List<String> definitionTypes = <String>[];
     List<String> typeDefinitions = <String>[];
@@ -303,16 +289,22 @@
     if (maps is YamlMap) maps = [maps];
 
     final List<TestCase> tests = [];
+    Map<String, String> sources = {};
     for (YamlMap map in maps) {
       for (String key in map.keys) {
         dynamic value = map[key];
-
-        if (key == "entry_point") {
-          entryPoint = description.uri.resolveUri(Uri.parse(value as String));
-        } else if (key == "import") {
-          import = description.uri.resolveUri(Uri.parse(value as String));
+        if (key == "sources") {
+          if (value is String) {
+            sources['main.dart'] = value;
+          } else if (value is YamlMap) {
+            value.forEach((key, value) {
+              sources[key as String] = value as String;
+            });
+          }
+        } else if (key == "entry_point") {
+          entryPoint = toTestUri(value as String);
         } else if (key == "position") {
-          Uri uri = description.uri.resolveUri(Uri.parse(value as String));
+          Uri uri = entryPoint.resolveUri(Uri.parse(value as String));
           library = uri.removeFragment();
           if (uri.fragment != '') {
             className = uri.fragment;
@@ -335,12 +327,19 @@
           isStaticMethod = value;
         } else if (key == "expression") {
           expression = value;
+        } else {
+          throw new UnsupportedError("Unknown key: ${key}");
         }
       }
+      library ??= entryPoint;
+      if (expression == null) {
+        return new Result.fail(tests, "No expression to compile.");
+      }
+
       TestCase test = new TestCase(
           description,
+          sources,
           entryPoint,
-          import,
           definitions,
           definitionTypes,
           typeDefinitions,
@@ -351,10 +350,6 @@
           className,
           methodName,
           expression);
-      String? result = test.validate();
-      if (result != null) {
-        return new Result.fail(tests, result);
-      }
       tests.add(test);
     }
     return new Result.pass(tests);
@@ -369,8 +364,12 @@
 
   // Compile [test.expression], update [test.errors] with results.
   // As a side effect - verify that generated procedure can be serialized.
-  Future<void> compileExpression(TestCase test, IncrementalCompiler compiler,
-      IncrementalCompilerResult compilerResult, Context context) async {
+  Future<void> compileExpression(
+      TestCase test,
+      IncrementalCompiler compiler,
+      IncrementalCompiler? compilerNoNNBD,
+      IncrementalCompilerResult compilerResult,
+      Context context) async {
     Map<String, DartType>? definitions = createDefinitionsWithTypes(
         compilerResult.classHierarchy?.knownLibraries,
         test.definitionTypes,
@@ -396,11 +395,11 @@
     }
 
     Procedure? compiledProcedure = await compiler.compileExpression(
-      test.expression!,
+      test.expression,
       definitions,
       typeParams,
       "debugExpr",
-      test.library!,
+      test.library,
       className: test.className,
       methodName: test.methodName,
       isStatic: test.isStaticMethod,
@@ -415,29 +414,36 @@
     }
 
     if (context.fuzz) {
-      await fuzz(compiler, compilerResult, context);
+      await fuzz(compiler, compilerNoNNBD!, compilerResult, context);
     }
   }
 
-  Future<void> fuzz(IncrementalCompiler compiler,
-      IncrementalCompilerResult compilerResult, Context context) async {
+  Future<void> fuzz(
+      IncrementalCompiler compiler,
+      IncrementalCompiler compilerNoNNBD,
+      IncrementalCompilerResult compilerResult,
+      Context context) async {
     for (Library lib in compilerResult.classHierarchy!.knownLibraries) {
       if (!context.fuzzedLibraries.add(lib.importUri)) continue;
 
       for (Member m in lib.members) {
-        await fuzzMember(m, compiler, lib.importUri, context);
+        await fuzzMember(m, compiler, compilerNoNNBD, lib.importUri, context);
       }
 
       for (Class c in lib.classes) {
         for (Member m in c.members) {
-          await fuzzMember(m, compiler, lib.importUri, context);
+          await fuzzMember(m, compiler, compilerNoNNBD, lib.importUri, context);
         }
       }
     }
   }
 
-  Future<void> fuzzMember(Member m, IncrementalCompiler compiler,
-      Uri libraryUri, Context context) async {
+  Future<void> fuzzMember(
+      Member m,
+      IncrementalCompiler compiler,
+      IncrementalCompiler compilerNoNNBD,
+      Uri libraryUri,
+      Context context) async {
     String expression = m.name.text;
     if (m is Field || (m is Procedure && m.isGetter)) {
       // fields and getters are fine as-is
@@ -454,8 +460,7 @@
         expression = "${parent.name}()";
       }
     } else {
-      print("Ignoring $m (${m.runtimeType})");
-      return;
+      throw "Didn't know ${m.runtimeType}";
     }
 
     String? className;
@@ -464,23 +469,36 @@
       className = parent.name;
     }
 
-    await fuzzTryCompile(compiler, "$expression", libraryUri, className,
-        !m.isInstanceMember, context);
-    if (className != null && !m.isInstanceMember) {
-      await fuzzTryCompile(compiler, "$className.$expression", libraryUri, null,
-          !m.isInstanceMember, context);
-    }
-    await fuzzTryCompile(compiler, "$expression.toString()", libraryUri,
+    await fuzzTryCompile(compiler, compilerNoNNBD, "$expression", libraryUri,
         className, !m.isInstanceMember, context);
     if (className != null && !m.isInstanceMember) {
-      await fuzzTryCompile(compiler, "$className.$expression.toString()",
+      await fuzzTryCompile(compiler, compilerNoNNBD, "$className.$expression",
           libraryUri, null, !m.isInstanceMember, context);
     }
-    await fuzzTryCompile(compiler, "$expression.toString() == '42'", libraryUri,
-        className, !m.isInstanceMember, context);
+    await fuzzTryCompile(compiler, compilerNoNNBD, "$expression.toString()",
+        libraryUri, className, !m.isInstanceMember, context);
     if (className != null && !m.isInstanceMember) {
       await fuzzTryCompile(
           compiler,
+          compilerNoNNBD,
+          "$className.$expression.toString()",
+          libraryUri,
+          null,
+          !m.isInstanceMember,
+          context);
+    }
+    await fuzzTryCompile(
+        compiler,
+        compilerNoNNBD,
+        "$expression.toString() == '42'",
+        libraryUri,
+        className,
+        !m.isInstanceMember,
+        context);
+    if (className != null && !m.isInstanceMember) {
+      await fuzzTryCompile(
+          compiler,
+          compilerNoNNBD,
           "$className.$expression.toString() == '42'",
           libraryUri,
           null,
@@ -489,6 +507,7 @@
     }
     await fuzzTryCompile(
         compiler,
+        compilerNoNNBD,
         "() { var x = $expression.toString(); x == '42'; }()",
         libraryUri,
         className,
@@ -497,6 +516,7 @@
     if (className != null && !m.isInstanceMember) {
       await fuzzTryCompile(
           compiler,
+          compilerNoNNBD,
           "() { var x = $className.$expression.toString(); x == '42'; }()",
           libraryUri,
           null,
@@ -505,25 +525,50 @@
     }
   }
 
-  Future<void> fuzzTryCompile(IncrementalCompiler compiler, String expression,
-      Uri libraryUri, String? className, bool isStatic, Context context) async {
+  Future<void> fuzzTryCompile(
+      IncrementalCompiler compiler,
+      IncrementalCompiler compilerNoNNBD,
+      String expression,
+      Uri libraryUri,
+      String? className,
+      bool isStatic,
+      Context context) async {
     context.fuzzCompiles++;
     print("Fuzz compile #${context.fuzzCompiles} "
         "('$expression' in $libraryUri $className)");
-    Procedure? compiledProcedure = await compiler.compileExpression(
-      expression,
-      {},
-      [],
-      "debugExpr",
-      libraryUri,
-      className: className,
-      isStatic: isStatic,
-    );
-    context.takeErrors();
-    if (compiledProcedure != null) {
-      // Confirm we can serialize generated procedure.
-      List<int> list = serializeProcedure(compiledProcedure);
-      assert(list.length > 0);
+    {
+      Procedure? compiledProcedure = await compiler.compileExpression(
+        expression,
+        {},
+        [],
+        "debugExpr",
+        libraryUri,
+        className: className,
+        isStatic: isStatic,
+      );
+      context.takeErrors();
+      if (compiledProcedure != null) {
+        // Confirm we can serialize generated procedure.
+        List<int> list = serializeProcedure(compiledProcedure);
+        assert(list.length > 0);
+      }
+    }
+    {
+      Procedure? compiledProcedure = await compilerNoNNBD.compileExpression(
+        expression,
+        {},
+        [],
+        "debugExpr",
+        libraryUri,
+        className: className,
+        isStatic: isStatic,
+      );
+      context.takeErrors();
+      if (compiledProcedure != null) {
+        // Confirm we can serialize generated procedure.
+        List<int> list = serializeProcedure(compiledProcedure);
+        assert(list.length > 0);
+      }
     }
   }
 
@@ -531,18 +576,16 @@
   Future<Result<List<TestCase>>> run(
       List<TestCase> tests, Context context) async {
     for (TestCase test in tests) {
-      context.fileSystem.entityForUri(test.entryPoint!).writeAsBytesSync(
-          await new File.fromUri(test.entryPoint!).readAsBytes());
-
-      if (test.import != null) {
-        context.fileSystem.entityForUri(test.import!).writeAsBytesSync(
-            await new File.fromUri(test.import!).readAsBytes());
-      }
+      test.sources.forEach((String fileName, String source) {
+        context.fileSystem
+            .entityForUri(toTestUri(fileName))
+            .writeAsStringSync(source);
+      });
 
       IncrementalCompiler sourceCompiler =
           new IncrementalCompiler(context.compilerContext);
       IncrementalCompilerResult sourceCompilerResult =
-          await sourceCompiler.computeDelta(entryPoints: [test.entryPoint!]);
+          await sourceCompiler.computeDelta(entryPoints: [test.entryPoint]);
       Component component = sourceCompilerResult.component;
       List<DiagnosticMessage> errors = context.takeErrors();
       if (!errors.isEmpty) {
@@ -551,19 +594,33 @@
             "Couldn't compile entry-point: "
             "${errors.map((e) => e.plainTextFormatted.first).toList()}");
       }
-      Uri dillFileUri = new Uri(
-          scheme: test.entryPoint!.scheme,
-          path: test.entryPoint!.path + ".dill");
+      Uri dillFileUri = toTestUri("${test.description.shortName}.dill");
+      Uri dillFileNoNNBDUri =
+          toTestUri("${test.description.shortName}.no.nnbd.dill");
       Uint8List dillData = await serializeComponent(component);
       context.fileSystem.entityForUri(dillFileUri).writeAsBytesSync(dillData);
       Set<Uri> beforeFuzzedLibraries = context.fuzzedLibraries.toSet();
-      await compileExpression(
-          test, sourceCompiler, sourceCompilerResult, context);
+      IncrementalCompiler? sourceCompilerNoNNBD;
+      if (context.fuzz) {
+        sourceCompilerNoNNBD =
+            new IncrementalCompiler(context.compilerContextNoNNBD);
+        IncrementalCompilerResult sourceCompilerNoNNBDResult =
+            await sourceCompilerNoNNBD
+                .computeDelta(entryPoints: [test.entryPoint]);
+        Component componentNoNNBD = sourceCompilerNoNNBDResult.component;
+        Uint8List dillDataNoNNBD = await serializeComponent(componentNoNNBD);
+        context.fileSystem
+            .entityForUri(dillFileNoNNBDUri)
+            .writeAsBytesSync(dillDataNoNNBD);
+        context.takeErrors();
+      }
+      await compileExpression(test, sourceCompiler, sourceCompilerNoNNBD,
+          sourceCompilerResult, context);
 
       IncrementalCompiler dillCompiler =
           new IncrementalCompiler(context.compilerContext, dillFileUri);
       IncrementalCompilerResult dillCompilerResult =
-          await dillCompiler.computeDelta(entryPoints: [test.entryPoint!]);
+          await dillCompiler.computeDelta(entryPoints: [test.entryPoint]);
       component = dillCompilerResult.component;
       component.computeCanonicalNames();
 
@@ -571,9 +628,23 @@
       // Since it compiled successfully from source, the bootstrap-from-Dill
       // should also succeed without errors.
       assert(errors.isEmpty);
+
+      IncrementalCompiler? dillCompilerNoNNBD;
+      if (context.fuzz) {
+        dillCompilerNoNNBD = new IncrementalCompiler(
+            context.compilerContextNoNNBD, dillFileNoNNBDUri);
+        IncrementalCompilerResult dillCompilerNoNNBDResult =
+            await dillCompilerNoNNBD
+                .computeDelta(entryPoints: [test.entryPoint]);
+        Component componentNoNNBD = dillCompilerNoNNBDResult.component;
+        componentNoNNBD.computeCanonicalNames();
+        context.takeErrors();
+      }
+
       context.fuzzedLibraries.clear();
       context.fuzzedLibraries.addAll(beforeFuzzedLibraries);
-      await compileExpression(test, dillCompiler, dillCompilerResult, context);
+      await compileExpression(
+          test, dillCompiler, dillCompilerNoNNBD, dillCompilerResult, context);
     }
     return new Result.pass(tests);
   }
@@ -581,6 +652,12 @@
 
 Future<Context> createContext(
     Chain suite, Map<String, String> environment) async {
+  const Set<String> knownEnvironmentKeys = {
+    "updateExpectations",
+    "fuzz",
+  };
+  checkEnvironment(environment, knownEnvironmentKeys);
+
   final Uri base = Uri.parse("org-dartlang-test:///");
 
   /// Unused because we supply entry points to [computeDelta] directly above.
@@ -613,23 +690,43 @@
       errors.add(message);
     }
     ..environmentDefines = const {}
-    ..explicitExperimentalFlags = {ExperimentalFlag.nonNullable: false}
+    ..explicitExperimentalFlags = {}
     ..allowedExperimentalFlagsForTesting = const AllowedExperimentalFlags();
 
   final ProcessedOptions options =
       new ProcessedOptions(options: optionBuilder, inputs: [entryPoint]);
 
+  final CompilerOptions optionBuilderNoNNBD = new CompilerOptions()
+    ..target = new VmTarget(new TargetFlags())
+    ..verbose = true
+    ..omitPlatform = true
+    ..fileSystem = fs
+    ..sdkSummary = sdkSummary
+    ..onDiagnostic = (DiagnosticMessage message) {
+      printDiagnosticMessage(message, print);
+      errors.add(message);
+    }
+    ..environmentDefines = const {}
+    ..explicitExperimentalFlags = {ExperimentalFlag.nonNullable: false}
+    ..allowedExperimentalFlagsForTesting = const AllowedExperimentalFlags();
+
+  final ProcessedOptions optionsNoNNBD =
+      new ProcessedOptions(options: optionBuilderNoNNBD, inputs: [entryPoint]);
+
   final bool updateExpectations = environment["updateExpectations"] == "true";
 
   final bool fuzz = environment["fuzz"] == "true";
 
   final CompilerContext compilerContext = new CompilerContext(options);
+  final CompilerContext compilerContextNoNNBD =
+      new CompilerContext(optionsNoNNBD);
 
   // Disable colors to ensure that expectation files are the same across
   // platforms and independent of stdin/stderr.
   colors.enableColors = false;
 
-  return new Context(compilerContext, errors, updateExpectations, fuzz);
+  return new Context(
+      compilerContext, compilerContextNoNNBD, errors, updateExpectations, fuzz);
 }
 
 void main([List<String> arguments = const []]) =>
diff --git a/pkg/front_end/test/fasta/messages_suite.dart b/pkg/front_end/test/fasta/messages_suite.dart
index df8fbb5..6b0ae9a 100644
--- a/pkg/front_end/test/fasta/messages_suite.dart
+++ b/pkg/front_end/test/fasta/messages_suite.dart
@@ -844,8 +844,11 @@
     }
     return fail(
         null,
-        suite.formatProblems("Too many messages reported in ${example.name}:",
-            example, messages));
+        suite.formatProblems(
+            "Too many or unexpected messages (${messages.length}) reported "
+            "in ${example.name}:",
+            example,
+            messages));
   }
 }
 
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index 8402482..b73a89d 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -776,7 +776,7 @@
       'handleType int null',
       'handleNoName )',
       'handleFormalParameterWithoutValue )',
-      'endFormalParameter null null ) FormalParameterKind.mandatory '
+      'endFormalParameter null null ) FormalParameterKind.requiredPositional '
           'MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function null',
@@ -802,7 +802,7 @@
       'handleType int null',
       'handleNoName )',
       'handleFormalParameterWithoutValue )',
-      'endFormalParameter null null ) FormalParameterKind.mandatory'
+      'endFormalParameter null null ) FormalParameterKind.requiredPositional'
           ' MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function null',
@@ -1471,7 +1471,8 @@
           'handleType int null',
           'handleIdentifier x formalParameterDeclaration',
           'handleFormalParameterWithoutValue )',
-          'endFormalParameter null null x FormalParameterKind.mandatory '
+          'endFormalParameter null null x '
+              'FormalParameterKind.requiredPositional '
               'MemberKind.GeneralizedFunctionType',
           'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function null',
@@ -1484,7 +1485,8 @@
           'handleType int null',
           'handleIdentifier x formalParameterDeclaration',
           'handleFormalParameterWithoutValue )',
-          'endFormalParameter null null x FormalParameterKind.mandatory '
+          'endFormalParameter null null x '
+              'FormalParameterKind.requiredPositional '
               'MemberKind.GeneralizedFunctionType',
           'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function null',
@@ -2422,7 +2424,8 @@
           'handleType T null',
           'handleNoName )',
           'handleFormalParameterWithoutValue )',
-          'endFormalParameter null null ) FormalParameterKind.mandatory '
+          'endFormalParameter null null ) '
+              'FormalParameterKind.requiredPositional '
               'MemberKind.GeneralizedFunctionType',
           'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function null',
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 2b3db8d..c2ab5a9 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -15,6 +15,8 @@
     show LibraryInfo;
 import 'package:_fe_analyzer_shared/src/util/options.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
+import 'package:compiler/src/options.dart' as dart2jsOptions
+    show CompilerOptions;
 import 'package:dev_compiler/src/kernel/target.dart';
 import 'package:front_end/src/api_prototype/compiler_options.dart'
     show
@@ -867,7 +869,7 @@
       target.backendTarget,
       result.component,
       result.options.environmentDefines,
-      target.isExperimentEnabledGlobally(ExperimentalFlag.tripleShift),
+      target.globalFeatures.tripleShift.isEnabled,
       environment,
       !target.backendTarget.supportsSetLiterals,
       result.options.errorOnUnevaluatedConstant,
@@ -1742,7 +1744,9 @@
       target = new TestTargetWrapper(new NoneTarget(targetFlags), targetFlags);
       break;
     case "dart2js":
-      target = new TestDart2jsTarget('dart2js', targetFlags);
+      target = new TestDart2jsTarget('dart2js', targetFlags,
+          options: dart2jsOptions.CompilerOptions.parse(
+              folderOptions.defines?.values.toList() ?? []));
       break;
     case "dartdevc":
       target = new TestDevCompilerTarget(targetFlags);
@@ -2214,7 +2218,9 @@
   @override
   final TestTargetFlags flags;
 
-  TestDart2jsTarget(String name, this.flags) : super(name, flags);
+  TestDart2jsTarget(String name, this.flags,
+      {dart2jsOptions.CompilerOptions? options})
+      : super(name, flags, options: options);
 }
 
 class TestDevCompilerTarget extends DevCompilerTarget
diff --git a/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart b/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
index 55076d6..a1c2094 100644
--- a/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
+++ b/pkg/front_end/test/fasta/types/dill_hierarchy_test.dart
@@ -37,12 +37,10 @@
 const String expectedHierarchy = """
 Object:
   superclasses:
-  interfaces:
 
 A:
   superclasses:
     Object
-  interfaces:
 
 B:
   Longest path to Object: 2
diff --git a/pkg/front_end/test/hot_reload_e2e_test.dart b/pkg/front_end/test/hot_reload_e2e_test.dart
index 07cf63b..aa8e855 100644
--- a/pkg/front_end/test/hot_reload_e2e_test.dart
+++ b/pkg/front_end/test/hot_reload_e2e_test.dart
@@ -86,8 +86,8 @@
 
   Future<int> computeVmPort() async {
     var portLine = await lines[0];
-    Expect.isTrue(observatoryPortRegExp.hasMatch(portLine));
-    var match = observatoryPortRegExp.firstMatch(portLine);
+    Expect.isTrue(dartVMServicePortRegExp.hasMatch(portLine));
+    var match = dartVMServicePortRegExp.firstMatch(portLine);
     return int.parse(match!.group(1)!);
   }
 
@@ -384,5 +384,5 @@
 void g() {}
 ''';
 
-RegExp observatoryPortRegExp =
-    new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)/");
+RegExp dartVMServicePortRegExp = new RegExp(
+    "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)/");
diff --git a/pkg/front_end/test/id_tests/inheritance_test.dart b/pkg/front_end/test/id_tests/inheritance_test.dart
index b618894..c1d47c6 100644
--- a/pkg/front_end/test/id_tests/inheritance_test.dart
+++ b/pkg/front_end/test/id_tests/inheritance_test.dart
@@ -212,7 +212,7 @@
       addSupertype(new Supertype(
           classHierarchyNode.classBuilder.cls,
           getAsTypeArguments(classHierarchyNode.classBuilder.cls.typeParameters,
-              classHierarchyNode.classBuilder.library.library)));
+              classHierarchyNode.classBuilder.libraryBuilder.library)));
       classHierarchyNode.superclasses.forEach(addSupertype);
       classHierarchyNode.interfaces.forEach(addSupertype);
       List<String> sorted = supertypes.toList()..sort();
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index e72f3f2..84d3b6c 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -23,7 +23,7 @@
     show CompilerOptions, parseExperimentalArguments, parseExperimentalFlags;
 
 import 'package:front_end/src/api_prototype/experimental_flags.dart'
-    show ExperimentalFlag, experimentEnabledVersion;
+    show ExperimentalFlag;
 import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart'
     show IncrementalCompilerResult;
 import "package:front_end/src/api_prototype/memory_file_system.dart"
@@ -392,7 +392,7 @@
 
   String doStringReplacements(String input) {
     Version enableNonNullableVersion =
-        experimentEnabledVersion[ExperimentalFlag.nonNullable]!;
+        ExperimentalFlag.nonNullable.experimentEnabledVersion;
     String output = input.replaceAll("%NNBD_VERSION_MARKER%",
         "${enableNonNullableVersion.major}.${enableNonNullableVersion.minor}");
     return output;
diff --git a/pkg/front_end/test/macro_api_test.dart b/pkg/front_end/test/macro_api_test.dart
deleted file mode 100644
index 70c3503..0000000
--- a/pkg/front_end/test/macro_api_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// 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:io' show Platform;
-
-import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
-    as isolatedExecutor;
-import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
-import 'package:expect/expect.dart';
-import 'package:front_end/src/api_prototype/experimental_flags.dart';
-import 'package:front_end/src/api_prototype/front_end.dart';
-import 'package:front_end/src/compute_platform_binaries_location.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
-import 'package:front_end/src/isolate_macro_serializer.dart';
-import 'package:front_end/src/macro_serializer.dart';
-import 'package:front_end/src/testing/id_testing_helper.dart';
-import 'package:kernel/target/targets.dart';
-import 'package:vm/target/vm.dart';
-
-Future<void> main(List<String> args) async {
-  enableMacros = true;
-
-  MacroSerializer macroSerializer = new IsolateMacroSerializer();
-  try {
-    CompilerOptions options = new CompilerOptions();
-    options.sdkRoot = computePlatformBinariesLocation();
-    options.environmentDefines = {};
-    options.explicitExperimentalFlags[ExperimentalFlag.macros] = true;
-    options.packagesFileUri = Platform.script.resolve(
-        '../../_fe_analyzer_shared/test/macros/api/package_config.json');
-    options.macroExecutorProvider = () async {
-      return await isolatedExecutor.start(SerializationMode.byteDataServer);
-    };
-    options.precompiledMacroUris = {};
-    options.target = options.macroTarget = new VmTarget(new TargetFlags());
-    options.macroSerializer = macroSerializer;
-
-    InternalCompilerResult result = await kernelForProgramInternal(
-        Platform.script.resolve(
-            '../../_fe_analyzer_shared/test/macros/api/api_test_data.dart'),
-        options,
-        retainDataForTesting: true) as InternalCompilerResult;
-    Expect.isFalse(result.kernelTargetForTesting!.loader.hasSeenError);
-  } finally {
-    await macroSerializer.close();
-  }
-}
diff --git a/pkg/front_end/test/macro_application/data/package_config.json b/pkg/front_end/test/macro_application/data/package_config.json
deleted file mode 100644
index fbfd870..0000000
--- a/pkg/front_end/test/macro_application/data/package_config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "configVersion": 2,
-  "packages": [
-    {
-      "name": "macro",
-      "rootUri": "pkgs/macro/lib/"
-    },
-    {
-      "name": "meta",
-      "rootUri": "../../../../meta/",
-      "packageUri": "lib/"
-    },
-    {
-      "name": "_fe_analyzer_shared",
-      "rootUri": "../../../../_fe_analyzer_shared/lib/"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
deleted file mode 100644
index 5a90a29..0000000
--- a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'package:_fe_analyzer_shared/src/macros/api.dart';
-
-macro
-
-class FunctionDefinitionMacro1 implements FunctionDefinitionMacro {
-  const FunctionDefinitionMacro1();
-
-  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
-      FunctionDefinitionBuilder builder) {
-    builder.augment(new FunctionBodyCode.fromString('''{
-  throw 42;
-}'''));
-  }
-}
-
-macro
-
-class FunctionDefinitionMacro2 implements FunctionDefinitionMacro {
-  const FunctionDefinitionMacro2();
-
-  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
-      FunctionDefinitionBuilder builder) async {
-    if (function.positionalParameters.isEmpty) {
-      return;
-    }
-    StaticType returnType = await builder.resolve(function.returnType.code);
-    StaticType parameterType =
-    await builder.resolve(function.positionalParameters.first.type.code);
-    builder.augment(new FunctionBodyCode.fromString('''{
-  print('isExactly=${await returnType.isExactly(parameterType)}');
-  print('isSubtype=${await returnType.isSubtypeOf(parameterType)}');
-  throw 42;
-}'''));
-  }
-}
-
-
-macro
-
-class FunctionTypesMacro1 implements FunctionTypesMacro {
-  const FunctionTypesMacro1();
-
-  FutureOr<void> buildTypesForFunction(FunctionDeclaration function,
-      TypeBuilder builder) {
-    var name = '${function.identifier.name}GeneratedClass';
-    builder.declareType(
-        name, new DeclarationCode.fromParts(['''
-class $name {
-  external ''', function.returnType.code, ''' method();
-}'''
-    ]));
-  }
-}
-
-macro
-
-class FunctionDeclarationsMacro1 implements FunctionDeclarationsMacro {
-  const FunctionDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForFunction(FunctionDeclaration function,
-      DeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (function.isAbstract) {
-      sb.write('a');
-    }
-    if (function.isExternal) {
-      sb.write('e');
-    }
-    if (function.isGetter) {
-      sb.write('g');
-    }
-    if (function.isOperator) {
-      sb.write('o');
-    }
-    if (function.isSetter) {
-      sb.write('s');
-    }
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${function.identifier.name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class FunctionDeclarationsMacro2 implements FunctionDeclarationsMacro {
-  const FunctionDeclarationsMacro2();
-
-  FutureOr<void> buildDeclarationsForFunction(FunctionDeclaration function,
-      DeclarationBuilder builder) async {
-    if (function.positionalParameters.isEmpty) {
-      return;
-    }
-    StaticType returnType = await builder.resolve(function.returnType.code);
-    StaticType parameterType =
-    await builder.resolve(function.positionalParameters.first.type.code);
-    bool isExactly = await returnType.isExactly(parameterType);
-    bool isSubtype = await returnType.isSubtypeOf(parameterType);
-    String tag = '${isExactly ? 'e' : ''}${isSubtype ? 's' : ''}';
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${function.identifier.name}GeneratedMethod_$tag() {}
-'''));
-  }
-}
-
-macro
-
-class MethodDeclarationsMacro1 implements MethodDeclarationsMacro {
-  const MethodDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForMethod(MethodDeclaration method,
-      ClassMemberDeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (method.isAbstract) {
-      sb.write('a');
-    }
-    if (method.isExternal) {
-      sb.write('e');
-    }
-    if (method.isGetter) {
-      sb.write('g');
-    }
-    if (method.isOperator) {
-      sb.write('o');
-    }
-    if (method.isSetter) {
-      sb.write('s');
-    }
-    String name;
-    if (method.isOperator) {
-      name = 'operator';
-    } else {
-      name = method.identifier.name;
-    }
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${method.definingClass.name}_${name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class VariableDeclarationsMacro1 implements VariableDeclarationsMacro {
-  const VariableDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForVariable(VariableDeclaration variable,
-      DeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (variable.isExternal) {
-      sb.write('e');
-    }
-    if (variable.isFinal) {
-      sb.write('f');
-    }
-    if (variable.isLate) {
-      sb.write('l');
-    }
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${variable.identifier.name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class FieldDeclarationsMacro1 implements FieldDeclarationsMacro {
-  const FieldDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForField(FieldDeclaration field,
-      ClassMemberDeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (field.isExternal) {
-      sb.write('e');
-    }
-    if (field.isFinal) {
-      sb.write('f');
-    }
-    if (field.isLate) {
-      sb.write('l');
-    }
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${field.definingClass.name}_${field.identifier.name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class ClassDeclarationsMacro1 implements ClassDeclarationsMacro {
-  const ClassDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
-      ClassMemberDeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (clazz.isAbstract) {
-      sb.write('a');
-    }
-    if (clazz.isExternal) {
-      sb.write('e');
-    }
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${clazz.identifier.name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class ClassDeclarationsMacro2 implements ClassDeclarationsMacro {
-  const ClassDeclarationsMacro2();
-
-  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
-      ClassMemberDeclarationBuilder builder) async {
-    List<ConstructorDeclaration> constructors = await builder.constructorsOf(
-        clazz);
-    StringBuffer constructorsText = new StringBuffer();
-    String comma = '';
-    constructorsText.write('constructors=');
-    for (ConstructorDeclaration constructor in constructors) {
-      constructorsText.write(comma);
-      String name = constructor.identifier.name;
-      constructorsText.write("'$name'");
-      comma = ',';
-    }
-
-    List<FieldDeclaration> fields = await builder.fieldsOf(
-        clazz);
-    StringBuffer fieldsText = new StringBuffer();
-    comma = '';
-    fieldsText.write('fields=');
-    for (FieldDeclaration field in fields) {
-      fieldsText.write(comma);
-      String name = field.identifier.name;
-      fieldsText.write("'$name'");
-      comma = ',';
-    }
-
-    List<MethodDeclaration> methods = await builder.methodsOf(
-        clazz);
-    StringBuffer methodsText = new StringBuffer();
-    comma = '';
-    methodsText.write('methods=');
-    for (MethodDeclaration method in methods) {
-      methodsText.write(comma);
-      String name = method.identifier.name;
-      methodsText.write("'$name'");
-      comma = ',';
-    }
-
-    builder.declareInLibrary(new DeclarationCode.fromString('''
-void ${clazz.identifier.name}Introspection() {
-  print("$constructorsText");
-  print("$fieldsText");
-  print("$methodsText");
-}
-'''));
-  }
-}
-
-macro
-
-class ConstructorDeclarationsMacro1
-    implements ConstructorDeclarationsMacro {
-  const ConstructorDeclarationsMacro1();
-
-  FutureOr<void> buildDeclarationsForConstructor(
-      ConstructorDeclaration constructor,
-      ClassMemberDeclarationBuilder builder) {
-    StringBuffer sb = new StringBuffer();
-    if (constructor.isAbstract) {
-      sb.write('a');
-    }
-    if (constructor.isExternal) {
-      sb.write('e');
-    }
-    if (constructor.isGetter) {
-      sb.write('g');
-    }
-    if (constructor.isOperator) {
-      sb.write('o');
-    }
-    if (constructor.isSetter) {
-      sb.write('s');
-    }
-    if (constructor.isFactory) {
-      sb.write('f');
-    }
-    builder.declareInClass(new DeclarationCode.fromString('''
-void ${constructor.definingClass.name}_${constructor.identifier
-        .name}GeneratedMethod_${sb}() {}
-'''));
-  }
-}
-
-macro
-
-class ToStringMacro implements ClassDeclarationsMacro {
-  const ToStringMacro();
-
-  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
-      ClassMemberDeclarationBuilder builder) async {
-    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
-    if (!methods.any((m) => m.identifier.name == 'toString')) {
-      Iterable<FieldDeclaration> fields = await builder.fieldsOf(clazz);
-      List<Object> parts = ['''
-  toString() {
-    return "${clazz.identifier.name}('''
-      ];
-      String comma = '';
-      for (FieldDeclaration field in fields) {
-        parts.add(comma);
-        parts.add('${field.identifier.name}=\${');
-        parts.add(field.identifier.name);
-        parts.add('}');
-        comma = ',';
-      }
-      parts.add(''')";
-  }''');
-      builder.declareInClass(new DeclarationCode.fromParts(parts));
-    }
-  }
-}
-
-macro
-
-class SequenceMacro implements ClassDeclarationsMacro {
-  const SequenceMacro();
-
-  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
-      ClassMemberDeclarationBuilder builder) async {
-    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
-    int index = 0;
-    String suffix = '';
-    while (methods.any((m) => m.identifier.name == 'method$suffix')) {
-      index++;
-      suffix = '$index';
-    }
-    builder.declareInClass(new DeclarationCode.fromString('''
-  method$suffix() {}'''));
-  }
-}
-
-macro
-
-class SupertypesMacro implements ClassDefinitionMacro {
-  const SupertypesMacro();
-
-  FutureOr<void> buildDefinitionForClass(ClassDeclaration clazz,
-      ClassDefinitionBuilder builder) async {
-    ClassDeclaration? superClass = await builder.superclassOf(clazz);
-    FunctionDefinitionBuilder getSuperClassBuilder = await builder.buildMethod(
-        (await builder.methodsOf(clazz))
-            .firstWhere((m) => m.identifier.name == 'getSuperClass')
-            .identifier);
-    getSuperClassBuilder.augment(new FunctionBodyCode.fromString('''{
-    return "${superClass?.identifier.name}";
-  }'''));
-  }
-}
\ No newline at end of file
diff --git a/pkg/front_end/test/macro_application/data/tests/declarations.dart b/pkg/front_end/test/macro_application/data/tests/declarations.dart
deleted file mode 100644
index a225e74..0000000
--- a/pkg/front_end/test/macro_application/data/tests/declarations.dart
+++ /dev/null
@@ -1,157 +0,0 @@
-// 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:macro/macro.dart';
-
-/*member: topLevelFunction1:
-void topLevelFunction1GeneratedMethod_() {}
-*/
-@FunctionDeclarationsMacro1()
-void topLevelFunction1() {}
-
-/*member: topLevelFunction2:
-void topLevelFunction2GeneratedMethod_e() {}
-*/
-@FunctionDeclarationsMacro1()
-external void topLevelFunction2();
-
-/*member: topLevelField1:
-void topLevelField1GeneratedMethod_() {}
-*/
-@VariableDeclarationsMacro1()
-int? topLevelField1;
-
-/*member: topLevelField2:
-void topLevelField2GeneratedMethod_e() {}
-*/
-@VariableDeclarationsMacro1()
-external int? topLevelField2;
-
-/*member: topLevelField3:
-void topLevelField3GeneratedMethod_f() {}
-*/
-@VariableDeclarationsMacro1()
-final int? topLevelField3 = null;
-
-/*member: topLevelField4:
-void topLevelField4GeneratedMethod_l() {}
-*/
-@VariableDeclarationsMacro1()
-late int? topLevelField4;
-
-/*member: topLevelGetter1:
-void topLevelGetter1GeneratedMethod_g() {}
-*/
-@FunctionDeclarationsMacro1()
-int? get topLevelGetter1 => null;
-
-/*member: topLevelSetter1=:
-void topLevelSetter1GeneratedMethod_s() {}
-*/
-@FunctionDeclarationsMacro1()
-void set topLevelSetter1(int? value) {}
-
-/*class: Class1:
-void Class1GeneratedMethod_() {}
-
-void Class1Introspection() {
-  print("constructors=''");
-  print("fields='instanceField1','instanceField2','instanceField3'");
-  print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1'");
-}
-*/
-@ClassDeclarationsMacro1()
-@ClassDeclarationsMacro2()
-class Class1 {
-  /*member: Class1.:
-augment class Class1 {
-void Class1_GeneratedMethod_() {}
-
-}*/
-  @ConstructorDeclarationsMacro1()
-  Class1();
-
-  /*member: Class1.redirect:
-augment class Class1 {
-void Class1_redirectGeneratedMethod_f() {}
-
-}*/
-  @ConstructorDeclarationsMacro1()
-  factory Class1.redirect() = Class1;
-
-  /*member: Class1.fact:
-augment class Class1 {
-void Class1_factGeneratedMethod_f() {}
-
-}*/
-  @ConstructorDeclarationsMacro1()
-  factory Class1.fact() => new Class1();
-
-  /*member: Class1.instanceMethod1:
-void Class1_instanceMethod1GeneratedMethod_() {}
-*/
-  @MethodDeclarationsMacro1()
-  void instanceMethod1() {}
-
-  /*member: Class1.instanceGetter1:
-void Class1_instanceGetter1GeneratedMethod_g() {}
-*/
-  @MethodDeclarationsMacro1()
-  int? get instanceGetter1 => null;
-
-  /*member: Class1.instanceSetter1=:
-void Class1_instanceSetter1GeneratedMethod_s() {}
-*/
-  @MethodDeclarationsMacro1()
-  void set instanceSetter1(int? value) {}
-
-  /*member: Class1.[]:
-void Class1_operatorGeneratedMethod_o() {}
-*/
-  @MethodDeclarationsMacro1()
-  int operator [](int i) => i;
-
-  /*member: Class1.instanceField1:
-void Class1_instanceField1GeneratedMethod_() {}
-*/
-  @FieldDeclarationsMacro1()
-  int? instanceField1;
-
-  /*member: Class1.instanceField2:
-void Class1_instanceField2GeneratedMethod_f() {}
-*/
-  @FieldDeclarationsMacro1()
-  final int? instanceField2 = null;
-
-  /*member: Class1.instanceField3:
-void Class1_instanceField3GeneratedMethod_fl() {}
-*/
-  @FieldDeclarationsMacro1()
-  late final int? instanceField3 = null;
-}
-
-/*class: Class2:
-void Class2GeneratedMethod_a() {}
-
-void Class2Introspection() {
-  print("constructors=");
-  print("fields='instanceField1'");
-  print("methods='instanceMethod1'");
-}
-*/
-@ClassDeclarationsMacro1()
-@ClassDeclarationsMacro2()
-abstract class Class2 {
-  /*member: Class2.instanceMethod1:
-void Class2_instanceMethod1GeneratedMethod_a() {}
-*/
-  @MethodDeclarationsMacro1()
-  void instanceMethod1();
-
-  /*member: Class2.instanceField1:
-void Class2_instanceField1GeneratedMethod_() {}
-*/
-  @FieldDeclarationsMacro1()
-  abstract int? instanceField1;
-}
diff --git a/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect b/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect
deleted file mode 100644
index 27bb5b1..0000000
--- a/pkg/front_end/test/macro_application/data/tests/declarations.dart.expect
+++ /dev/null
@@ -1,113 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "package:macro/macro.dart" as mac;
-import "dart:core" as core;
-
-import "package:macro/macro.dart";
-
-@#C1
-@#C2
-class Class1 extends core::Object {
-  @#C3
-  field core::int? instanceField1 = null;
-  @#C3
-  final field core::int? instanceField2 = null;
-  @#C3
-  late final field core::int? instanceField3 = null;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
-  @#C5
-  constructor •() → self::Class1
-    : super core::Object::•()
-    ;
-  method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ Class1_GeneratedMethod_() → void {}
-  method /* from org-dartlang-augmentation:/a/b/c/main.dart-18 */ Class1_redirectGeneratedMethod_f() → void {}
-  method /* from org-dartlang-augmentation:/a/b/c/main.dart-19 */ Class1_factGeneratedMethod_f() → void {}
-  @#C5
-  static factory redirect() → self::Class1
-    return new self::Class1::•();
-  @#C5
-  static factory fact() → self::Class1
-    return new self::Class1::•();
-  @#C6
-  method instanceMethod1() → void {}
-  @#C6
-  get instanceGetter1() → core::int?
-    return null;
-  @#C6
-  set instanceSetter1(core::int? value) → void {}
-  @#C6
-  operator [](core::int i) → core::int
-    return i;
-}
-@#C1
-@#C2
-abstract class Class2 extends core::Object {
-  synthetic constructor •() → self::Class2
-    : super core::Object::•()
-    ;
-  @#C6
-  abstract method instanceMethod1() → void;
-  @#C3
-  abstract get instanceField1() → core::int?;
-  @#C3
-  abstract set instanceField1(core::int? #externalFieldValue) → void;
-}
-@#C7
-static field core::int? topLevelField1;
-@#C7
-static final field core::int? topLevelField3 = null;
-@#C7
-late static field core::int? topLevelField4;
-@#C8
-static method topLevelFunction1() → void {}
-@#C8
-external static method topLevelFunction2() → void;
-@#C7
-external static get topLevelField2() → core::int?;
-@#C7
-external static set topLevelField2(core::int? #externalFieldValue) → void;
-@#C8
-static get topLevelGetter1() → core::int?
-  return null;
-@#C8
-static set topLevelSetter1(core::int? value) → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction1GeneratedMethod_() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ topLevelFunction2GeneratedMethod_e() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ topLevelField1GeneratedMethod_() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ topLevelField2GeneratedMethod_e() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelField3GeneratedMethod_f() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ topLevelField4GeneratedMethod_l() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ topLevelGetter1GeneratedMethod_g() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-7 */ topLevelSetter1GeneratedMethod_s() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-8 */ Class1GeneratedMethod_() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-9 */ Class1Introspection() → void {
-  core::print("constructors=''");
-  core::print("fields='instanceField1','instanceField2','instanceField3'");
-  core::print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1'");
-}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-10 */ Class1_instanceMethod1GeneratedMethod_() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ Class1_instanceGetter1GeneratedMethod_g() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-12 */ Class1_operatorGeneratedMethod_o() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-13 */ Class1_instanceField1GeneratedMethod_() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-14 */ Class1_instanceField2GeneratedMethod_f() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-15 */ Class1_instanceField3GeneratedMethod_fl() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-16 */ Class1_instanceSetter1GeneratedMethod_s() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-20 */ Class2GeneratedMethod_a() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-21 */ Class2Introspection() → void {
-  core::print("constructors=");
-  core::print("fields='instanceField1'");
-  core::print("methods='instanceMethod1'");
-}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-22 */ Class2_instanceMethod1GeneratedMethod_a() → void {}
-static method /* from org-dartlang-augmentation:/a/b/c/main.dart-23 */ Class2_instanceField1GeneratedMethod_() → void {}
-
-constants  {
-  #C1 = mac::ClassDeclarationsMacro1 {}
-  #C2 = mac::ClassDeclarationsMacro2 {}
-  #C3 = mac::FieldDeclarationsMacro1 {}
-  #C4 = constructor-tearoff self::Class1::redirect
-  #C5 = mac::ConstructorDeclarationsMacro1 {}
-  #C6 = mac::MethodDeclarationsMacro1 {}
-  #C7 = mac::VariableDeclarationsMacro1 {}
-  #C8 = mac::FunctionDeclarationsMacro1 {}
-}
diff --git a/pkg/front_end/test/macro_application/data/tests/marker.options b/pkg/front_end/test/macro_application/data/tests/marker.options
deleted file mode 100644
index 578e904..0000000
--- a/pkg/front_end/test/macro_application/data/tests/marker.options
+++ /dev/null
@@ -1 +0,0 @@
-cfe=pkg/front_end/test/macro_application/macro_application_test.dart
diff --git a/pkg/front_end/test/macro_application/data/tests/parameters.dart b/pkg/front_end/test/macro_application/data/tests/parameters.dart
deleted file mode 100644
index c71841a..0000000
--- a/pkg/front_end/test/macro_application/data/tests/parameters.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-// 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.
-
-/*library: 
-Definitions:
-import 'dart:core' as i0;
-
-
-augment void topLevelFunction1(i0.int a, ) {
-  throw 42;
-}
-augment void topLevelFunction2(i0.int a, i0.int b, ) {
-  throw 42;
-}
-augment void topLevelFunction3(i0.int a, [i0.int? b, ]) {
-  throw 42;
-}
-augment void topLevelFunction4(i0.int a, {i0.int? b, i0.int? c, }) {
-  throw 42;
-}
-*/
-
-import 'package:macro/macro.dart';
-
-/*member: topLevelFunction1:
-augment void topLevelFunction1(int a, ) {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external void topLevelFunction1(int a);
-
-/*member: topLevelFunction2:
-augment void topLevelFunction2(int a, int b, ) {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external void topLevelFunction2(int a, int b);
-
-/*member: topLevelFunction3:
-augment void topLevelFunction3(int a, [int? b, ]) {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external void topLevelFunction3(int a, [int? b]);
-
-/*member: topLevelFunction4:
-augment void topLevelFunction4(int a, {int? b, int? c, }) {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external void topLevelFunction4(int a, {int? b, int? c});
diff --git a/pkg/front_end/test/macro_application/data/tests/subtypes.dart b/pkg/front_end/test/macro_application/data/tests/subtypes.dart
deleted file mode 100644
index b4028fd..0000000
--- a/pkg/front_end/test/macro_application/data/tests/subtypes.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// 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.
-
-/*library: 
-Definitions:
-import 'org-dartlang-test:///a/b/c/main.dart' as i0;
-
-
-augment i0.A topLevelFunction1(i0.A a, ) {
-  print('isExactly=true');
-  print('isSubtype=true');
-  throw 42;
-}
-augment i0.B2 topLevelFunction2(i0.B1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=true');
-  throw 42;
-}
-augment i0.C2 topLevelFunction3(i0.C1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=false');
-  throw 42;
-}
-augment i0.D2 topLevelFunction4(i0.D1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=false');
-  throw 42;
-}
-*/
-
-import 'package:macro/macro.dart';
-
-class A {}
-
-class B1 {}
-
-class B2 extends B1 {}
-
-class C1 extends C2 {}
-
-class C2 {}
-
-class D1 {}
-
-class D2 {}
-
-/*member: topLevelFunction1:
-void topLevelFunction1GeneratedMethod_es() {}
-
-augment A topLevelFunction1(A a, ) {
-  print('isExactly=true');
-  print('isSubtype=true');
-  throw 42;
-}*/
-@FunctionDeclarationsMacro2()
-@FunctionDefinitionMacro2()
-external A topLevelFunction1(A a);
-
-/*member: topLevelFunction2:
-void topLevelFunction2GeneratedMethod_s() {}
-
-augment B2 topLevelFunction2(B1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=true');
-  throw 42;
-}*/
-@FunctionDeclarationsMacro2()
-@FunctionDefinitionMacro2()
-external B2 topLevelFunction2(B1 a);
-
-/*member: topLevelFunction3:
-void topLevelFunction3GeneratedMethod_() {}
-
-augment C2 topLevelFunction3(C1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=false');
-  throw 42;
-}*/
-@FunctionDeclarationsMacro2()
-@FunctionDefinitionMacro2()
-external C2 topLevelFunction3(C1 a);
-
-/*member: topLevelFunction4:
-void topLevelFunction4GeneratedMethod_() {}
-
-augment D2 topLevelFunction4(D1 a, ) {
-  print('isExactly=false');
-  print('isSubtype=false');
-  throw 42;
-}*/
-@FunctionDeclarationsMacro2()
-@FunctionDefinitionMacro2()
-external D2 topLevelFunction4(D1 a);
diff --git a/pkg/front_end/test/macro_application/data/tests/supertypes.dart b/pkg/front_end/test/macro_application/data/tests/supertypes.dart
deleted file mode 100644
index 37c4038..0000000
--- a/pkg/front_end/test/macro_application/data/tests/supertypes.dart
+++ /dev/null
@@ -1,76 +0,0 @@
-// 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.
-
-/*library: 
-Definitions:
-import 'dart:core' as i0;
-
-
-augment class A {
-augment i0.String getSuperClass() {
-    return "Object";
-  }
-}
-augment class B {
-augment i0.String getSuperClass() {
-    return "A";
-  }
-}
-augment class M {
-augment i0.String getSuperClass() {
-    return "Object";
-  }
-}
-augment class C {
-augment i0.String getSuperClass() {
-    return "A";
-  }
-}
-*/
-
-import 'package:macro/macro.dart';
-
-/*class: A:
-augment class A {
-augment String getSuperClass() {
-    return "Object";
-  }
-}*/
-@SupertypesMacro()
-class A {
-  external String getSuperClass();
-}
-
-/*class: B:
-augment class B {
-augment String getSuperClass() {
-    return "A";
-  }
-}*/
-@SupertypesMacro()
-class B extends A {
-  external String getSuperClass();
-}
-
-/*class: M:
-augment class M {
-augment String getSuperClass() {
-    return "Object";
-  }
-}*/
-@SupertypesMacro()
-mixin M {
-  external String getSuperClass();
-}
-
-/*class: C:
-augment class C {
-augment String getSuperClass() {
-    return "A";
-  }
-}*/
-@SupertypesMacro()
-class C extends A with M {
-  external String getSuperClass();
-}
diff --git a/pkg/front_end/test/macro_application/data/tests/type_annotations.dart b/pkg/front_end/test/macro_application/data/tests/type_annotations.dart
deleted file mode 100644
index f61a9a2..0000000
--- a/pkg/front_end/test/macro_application/data/tests/type_annotations.dart
+++ /dev/null
@@ -1,95 +0,0 @@
-// 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.
-
-/*library: 
-Definitions:
-import 'dart:core' as i0;
-import 'dart:math' as i1;
-
-
-augment void topLevelFunction1() {
-  throw 42;
-}
-augment i0.dynamic topLevelFunction2() {
-  throw 42;
-}
-augment i0.int topLevelFunction3() {
-  throw 42;
-}
-augment i0.dynamic topLevelFunction4() {
-  throw 42;
-}
-augment i1.Random topLevelFunction5() {
-  throw 42;
-}
-augment i0.List<i0.int> topLevelFunction6() {
-  throw 42;
-}
-augment i0.Map<i1.Random, i0.List<i0.int>> topLevelFunction7() {
-  throw 42;
-}
-augment i0.Map<i0.int?, i0.String>? topLevelFunction8() {
-  throw 42;
-}
-*/
-
-import 'dart:math' as math;
-
-import 'package:macro/macro.dart';
-
-/*member: topLevelFunction1:
-augment void topLevelFunction1() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external void topLevelFunction1();
-
-/*member: topLevelFunction2:
-augment dynamic topLevelFunction2() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external dynamic topLevelFunction2();
-
-/*member: topLevelFunction3:
-augment int topLevelFunction3() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external int topLevelFunction3();
-
-/*member: topLevelFunction4:
-augment dynamic topLevelFunction4() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external topLevelFunction4();
-
-/*member: topLevelFunction5:
-augment Random topLevelFunction5() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external math.Random topLevelFunction5();
-
-/*member: topLevelFunction6:
-augment List<int> topLevelFunction6() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external List<int> topLevelFunction6();
-
-/*member: topLevelFunction7:
-augment Map<Random, List<int>> topLevelFunction7() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external Map<math.Random, List<int>> topLevelFunction7();
-
-/*member: topLevelFunction8:
-augment Map<int?, String>? topLevelFunction8() {
-  throw 42;
-}*/
-@FunctionDefinitionMacro1()
-external Map<int?, String>? topLevelFunction8();
diff --git a/pkg/front_end/test/macro_application/data/tests/types.dart b/pkg/front_end/test/macro_application/data/tests/types.dart
deleted file mode 100644
index 5da560d..0000000
--- a/pkg/front_end/test/macro_application/data/tests/types.dart
+++ /dev/null
@@ -1,62 +0,0 @@
-// 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.
-
-/*library: 
-Types:
-import 'dart:core' as i0;
-import 'package:macro/macro.dart' as i1;
-
-
-class topLevelFunction1GeneratedClass {
-  external void method();
-}
-class topLevelFunction2GeneratedClass {
-  external i0.dynamic method();
-}
-class topLevelFunction3GeneratedClass {
-  external i0.int method();
-}
-class topLevelFunction4GeneratedClass {
-  external i1.FunctionTypesMacro1? method();
-}
-class topLevelFunction5GeneratedClass {
-  external i0.dynamic method();
-}*/
-
-import 'package:macro/macro.dart';
-
-/*member: topLevelFunction1:
-class topLevelFunction1GeneratedClass {
-  external void method();
-}*/
-@FunctionTypesMacro1()
-void topLevelFunction1() {}
-
-/*member: topLevelFunction2:
-class topLevelFunction2GeneratedClass {
-  external dynamic method();
-}*/
-@FunctionTypesMacro1()
-dynamic topLevelFunction2() {}
-
-/*member: topLevelFunction3:
-class topLevelFunction3GeneratedClass {
-  external int method();
-}*/
-@FunctionTypesMacro1()
-int topLevelFunction3() => 0;
-
-/*member: topLevelFunction4:
-class topLevelFunction4GeneratedClass {
-  external FunctionTypesMacro1? method();
-}*/
-@FunctionTypesMacro1()
-FunctionTypesMacro1? topLevelFunction4() => null;
-
-/*member: topLevelFunction5:
-class topLevelFunction5GeneratedClass {
-  external dynamic method();
-}*/
-@FunctionTypesMacro1()
-topLevelFunction5() {}
diff --git a/pkg/front_end/test/macro_application/data/tests/types.dart.expect b/pkg/front_end/test/macro_application/data/tests/types.dart.expect
deleted file mode 100644
index e36ef4f..0000000
--- a/pkg/front_end/test/macro_application/data/tests/types.dart.expect
+++ /dev/null
@@ -1,55 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "package:macro/macro.dart" as mac;
-
-import "dart:core" as i0;
-import "package:macro/macro.dart" as i1;
-import "package:macro/macro.dart";
-
-class topLevelFunction1GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
-  synthetic constructor •() → self::topLevelFunction1GeneratedClass
-    : super core::Object::•()
-    ;
-  external method method() → void;
-}
-class topLevelFunction2GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
-  synthetic constructor •() → self::topLevelFunction2GeneratedClass
-    : super core::Object::•()
-    ;
-  external method method() → dynamic;
-}
-class topLevelFunction3GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
-  synthetic constructor •() → self::topLevelFunction3GeneratedClass
-    : super core::Object::•()
-    ;
-  external method method() → core::int;
-}
-class topLevelFunction4GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
-  synthetic constructor •() → self::topLevelFunction4GeneratedClass
-    : super core::Object::•()
-    ;
-  external method method() → mac::FunctionTypesMacro1?;
-}
-class topLevelFunction5GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
-  synthetic constructor •() → self::topLevelFunction5GeneratedClass
-    : super core::Object::•()
-    ;
-  external method method() → dynamic;
-}
-@#C1
-static method topLevelFunction1() → void {}
-@#C1
-static method topLevelFunction2() → dynamic {}
-@#C1
-static method topLevelFunction3() → core::int
-  return 0;
-@#C1
-static method topLevelFunction4() → mac::FunctionTypesMacro1?
-  return null;
-@#C1
-static method topLevelFunction5() → dynamic {}
-
-constants  {
-  #C1 = mac::FunctionTypesMacro1 {}
-}
diff --git a/pkg/front_end/test/macro_application/macro_application_test.dart b/pkg/front_end/test/macro_application/macro_application_test.dart
deleted file mode 100644
index 3b988bb..0000000
--- a/pkg/front_end/test/macro_application/macro_application_test.dart
+++ /dev/null
@@ -1,336 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io' show Directory, File, Platform;
-
-import 'package:_fe_analyzer_shared/src/macros/api.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
-    as isolatedExecutor;
-import 'package:_fe_analyzer_shared/src/testing/id.dart'
-    show ActualData, ClassId, Id, LibraryId;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
-import 'package:front_end/src/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/experimental_flags.dart';
-import 'package:front_end/src/fasta/builder/field_builder.dart';
-import 'package:front_end/src/fasta/builder/member_builder.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
-import 'package:front_end/src/fasta/source/source_class_builder.dart';
-import 'package:front_end/src/fasta/source/source_library_builder.dart';
-import 'package:front_end/src/macro_serializer.dart';
-import 'package:front_end/src/temp_dir_macro_serializer.dart';
-import 'package:front_end/src/testing/compiler_common.dart';
-import 'package:front_end/src/testing/id_extractor.dart';
-import 'package:front_end/src/testing/id_testing_helper.dart';
-import 'package:front_end/src/testing/id_testing_utils.dart';
-import 'package:kernel/ast.dart' hide Arguments;
-import 'package:kernel/kernel.dart';
-import 'package:kernel/target/targets.dart';
-import 'package:kernel/text/ast_to_text.dart';
-import 'package:vm/target/vm.dart';
-
-import '../utils/kernel_chain.dart';
-
-Future<void> main(List<String> args) async {
-  bool generateExpectations = args.contains('-g');
-  enableMacros = true;
-
-  MacroSerializer macroSerializer =
-      new TempDirMacroSerializer('macro_application');
-  try {
-    Directory dataDir =
-        new Directory.fromUri(Platform.script.resolve('data/tests'));
-    await runTests<String>(dataDir,
-        args: args,
-        createUriForFileName: createUriForFileName,
-        onFailure: onFailure,
-        runTest: runTestFor(const MacroDataComputer(), [
-          new MacroTestConfig(dataDir, macroSerializer,
-              generateExpectations: generateExpectations)
-        ]),
-        preserveWhitespaceInAnnotations: true);
-  } finally {
-    await macroSerializer.close();
-  }
-}
-
-class MacroTestConfig extends TestConfig {
-  final Directory dataDir;
-  final MacroSerializer macroSerializer;
-  final bool generateExpectations;
-  final Map<MacroClass, Uri> precompiledMacroUris = {};
-
-  MacroTestConfig(this.dataDir, this.macroSerializer,
-      {required this.generateExpectations})
-      : super(cfeMarker, 'cfe',
-            explicitExperimentalFlags: {ExperimentalFlag.macros: true},
-            packageConfigUri:
-                Platform.script.resolve('data/package_config.json'));
-
-  @override
-  void customizeCompilerOptions(CompilerOptions options, TestData testData) {
-    options.macroExecutorProvider = () async {
-      return await isolatedExecutor.start(SerializationMode.byteDataServer);
-    };
-    options.precompiledMacroUris = precompiledMacroUris;
-    options.macroTarget = new VmTarget(new TargetFlags());
-    options.macroSerializer = macroSerializer;
-  }
-
-  @override
-  Future<void> onCompilationResult(
-      TestData testData, TestResultData testResultData) async {
-    Component component = testResultData.compilerResult.component!;
-    StringBuffer buffer = new StringBuffer();
-    Printer printer = new Printer(buffer)
-      ..writeProblemsAsJson("Problems in component", component.problemsAsJson);
-    component.libraries.forEach((Library library) {
-      if (isTestUri(library.importUri)) {
-        printer.writeLibraryFile(library);
-        printer.endLine();
-      }
-    });
-    printer.writeConstantTable(component);
-    String actual = buffer.toString();
-    String expectationFileName = '${testData.name}.expect';
-    Uri expectedUri = dataDir.uri.resolve(expectationFileName);
-    File file = new File.fromUri(expectedUri);
-    if (file.existsSync()) {
-      String expected = file.readAsStringSync();
-      if (expected != actual) {
-        if (generateExpectations) {
-          file.writeAsStringSync(actual);
-        } else {
-          String diff = await runDiff(expectedUri, actual);
-          throw "${testData.name} don't match ${expectedUri}\n$diff";
-        }
-      }
-    } else if (generateExpectations) {
-      file.writeAsStringSync(actual);
-    } else {
-      throw 'Please use -g option to create file ${expectedUri} with this '
-          'content:\n$actual';
-    }
-  }
-}
-
-bool _isMember(MemberBuilder memberBuilder, Member member) {
-  if (memberBuilder is FieldBuilder) {
-    // Only show annotations for the field or getter.
-    return memberBuilder.readTarget == member;
-  } else if (member is Procedure && member.isSetter) {
-    return memberBuilder.writeTarget == member;
-  } else if (member is Procedure && member.isGetter) {
-    return memberBuilder.readTarget == member;
-  } else {
-    return memberBuilder.invokeTarget == member;
-  }
-}
-
-class MacroDataComputer extends DataComputer<String> {
-  const MacroDataComputer();
-
-  @override
-  DataInterpreter<String> get dataValidator => const StringDataInterpreter();
-
-  @override
-  void computeLibraryData(TestResultData testResultData, Library library,
-      Map<Id, ActualData<String>> actualMap,
-      {bool? verbose}) {
-    CfeDataRegistry<String> registry =
-        new CfeDataRegistry(testResultData.compilerResult, actualMap);
-    MacroApplicationDataForTesting macroApplicationData = testResultData
-        .compilerResult
-        .kernelTargetForTesting!
-        .loader
-        .dataForTesting!
-        .macroApplicationData;
-    StringBuffer sb = new StringBuffer();
-    for (SourceLibraryBuilder sourceLibraryBuilder
-        in macroApplicationData.libraryTypesResult.keys) {
-      if (sourceLibraryBuilder.library == library) {
-        String source =
-            macroApplicationData.libraryTypesResult[sourceLibraryBuilder]!;
-        sb.write('\nTypes:');
-        sb.write('\n${source}');
-      }
-    }
-    for (SourceLibraryBuilder sourceLibraryBuilder
-        in macroApplicationData.libraryDefinitionResult.keys) {
-      if (sourceLibraryBuilder.library == library) {
-        String source =
-            macroApplicationData.libraryDefinitionResult[sourceLibraryBuilder]!;
-        sb.write('\nDefinitions:');
-        sb.write('\n${source}');
-      }
-    }
-    if (sb.isNotEmpty) {
-      Id id = new LibraryId(library.fileUri);
-      registry.registerValue(
-          library.fileUri, library.fileOffset, id, sb.toString(), library);
-    }
-  }
-
-  @override
-  void computeClassData(TestResultData testResultData, Class cls,
-      Map<Id, ActualData<String>> actualMap,
-      {bool? verbose}) {
-    CfeDataRegistry<String> registry =
-        new CfeDataRegistry(testResultData.compilerResult, actualMap);
-    MacroApplicationDataForTesting macroApplicationData = testResultData
-        .compilerResult
-        .kernelTargetForTesting!
-        .loader
-        .dataForTesting!
-        .macroApplicationData;
-    StringBuffer sb = new StringBuffer();
-    List<DeclarationCode> mergedClassAugmentations = [];
-    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.classTypesResults.entries) {
-      if (entry.key.cls == cls) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          mergedClassAugmentations
-              .addAll(result.classAugmentations[entry.key.name] ?? const []);
-        }
-      }
-    }
-    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.classDeclarationsResults.entries) {
-      if (entry.key.cls == cls) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          mergedClassAugmentations
-              .addAll(result.classAugmentations[entry.key.name] ?? const []);
-        }
-      }
-    }
-    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.classDefinitionsResults.entries) {
-      if (entry.key.cls == cls) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          mergedClassAugmentations
-              .addAll(result.classAugmentations[entry.key.name] ?? const []);
-        }
-      }
-    }
-    if (mergedClassAugmentations.isNotEmpty) {
-      sb.write('\naugment class ${cls.name} {');
-      for (var result in mergedClassAugmentations) {
-        sb.write('\n${codeToString(result)}');
-      }
-      sb.write('\n}');
-    }
-    if (sb.isNotEmpty) {
-      Id id = new ClassId(cls.name);
-      registry.registerValue(
-          cls.fileUri, cls.fileOffset, id, sb.toString(), cls);
-    }
-  }
-
-  @override
-  void computeMemberData(TestResultData testResultData, Member member,
-      Map<Id, ActualData<String>> actualMap,
-      {bool? verbose}) {
-    CfeDataRegistry<String> registry =
-        new CfeDataRegistry(testResultData.compilerResult, actualMap);
-    MacroApplicationDataForTesting macroApplicationData = testResultData
-        .compilerResult
-        .kernelTargetForTesting!
-        .loader
-        .dataForTesting!
-        .macroApplicationData;
-    StringBuffer sb = StringBuffer();
-    List<DeclarationCode> mergedAugmentations = [];
-    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.memberTypesResults.entries) {
-      if (_isMember(entry.key, member)) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          if (member.enclosingClass != null) {
-            mergedAugmentations.addAll(
-                result.classAugmentations[member.enclosingClass!.name] ??
-                    const []);
-          }
-        }
-      }
-    }
-    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.memberDeclarationsResults.entries) {
-      if (_isMember(entry.key, member)) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          if (member.enclosingClass != null) {
-            mergedAugmentations.addAll(
-                result.classAugmentations[member.enclosingClass!.name] ??
-                    const []);
-          }
-        }
-      }
-    }
-    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
-        in macroApplicationData.memberDefinitionsResults.entries) {
-      if (_isMember(entry.key, member)) {
-        for (MacroExecutionResult result in entry.value) {
-          if (result.libraryAugmentations.isNotEmpty) {
-            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
-          }
-          if (member.enclosingClass != null) {
-            mergedAugmentations.addAll(
-                result.classAugmentations[member.enclosingClass!.name] ??
-                    const []);
-          }
-        }
-      }
-    }
-    if (mergedAugmentations.isNotEmpty) {
-      if (member.enclosingClass != null) {
-        sb.write('\naugment class ${member.enclosingClass!.name} {');
-      }
-      for (DeclarationCode augmentation in mergedAugmentations) {
-        sb.write('\n${codeToString(augmentation)}');
-      }
-      if (member.enclosingClass != null) {
-        sb.write('\n}');
-      }
-    }
-    if (sb.isNotEmpty) {
-      Id id = computeMemberId(member);
-      MemberBuilder memberBuilder =
-          lookupMemberBuilder(testResultData.compilerResult, member)!;
-      registry.registerValue(memberBuilder.fileUri!, memberBuilder.charOffset,
-          id, sb.toString(), member);
-    }
-  }
-}
-
-void _codeToString(StringBuffer sb, Code code) {
-  for (Object part in code.parts) {
-    if (part is Code) {
-      _codeToString(sb, part);
-    } else if (part is Identifier) {
-      sb.write(part.name);
-    } else {
-      sb.write(part);
-    }
-  }
-}
-
-String codeToString(Code code) {
-  StringBuffer sb = new StringBuffer();
-  _codeToString(sb, code);
-  return sb.toString();
-}
diff --git a/pkg/front_end/test/macros/application/data/package_config.json b/pkg/front_end/test/macros/application/data/package_config.json
new file mode 100644
index 0000000..2e8365d
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/package_config.json
@@ -0,0 +1,18 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "macro",
+      "rootUri": "pkgs/macro/lib/"
+    },
+    {
+      "name": "meta",
+      "rootUri": "../../../../../meta/",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "_fe_analyzer_shared",
+      "rootUri": "../../../../../_fe_analyzer_shared/lib/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro.dart
new file mode 100644
index 0000000..3cc37c6
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro.dart
@@ -0,0 +1,401 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+macro
+
+class FunctionDefinitionMacro1 implements FunctionDefinitionMacro {
+  const FunctionDefinitionMacro1();
+
+  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
+      FunctionDefinitionBuilder builder) {
+    builder.augment(new FunctionBodyCode.fromString('''{
+  throw 42;
+}'''));
+  }
+}
+
+macro
+
+class FunctionDefinitionMacro2 implements FunctionDefinitionMacro {
+  const FunctionDefinitionMacro2();
+
+  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
+      FunctionDefinitionBuilder builder) async {
+    if (function.positionalParameters.isEmpty) {
+      return;
+    }
+    StaticType returnType = await builder.resolve(function.returnType.code);
+    StaticType parameterType =
+    await builder.resolve(function.positionalParameters.first.type.code);
+    builder.augment(new FunctionBodyCode.fromString('''{
+  print('isExactly=${await returnType.isExactly(parameterType)}');
+  print('isSubtype=${await returnType.isSubtypeOf(parameterType)}');
+  throw 42;
+}'''));
+  }
+}
+
+
+macro
+
+class FunctionTypesMacro1 implements FunctionTypesMacro {
+  const FunctionTypesMacro1();
+
+  FutureOr<void> buildTypesForFunction(FunctionDeclaration function,
+      TypeBuilder builder) {
+    var name = '${function.identifier.name}GeneratedClass';
+    builder.declareType(
+        name, new DeclarationCode.fromParts(['''
+class $name {
+  external ''', function.returnType.code, ''' method();
+}'''
+    ]));
+  }
+}
+
+macro
+
+class FunctionDeclarationsMacro1 implements FunctionDeclarationsMacro {
+  const FunctionDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForFunction(FunctionDeclaration function,
+      DeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (function.isAbstract) {
+      sb.write('a');
+    }
+    if (function.isExternal) {
+      sb.write('e');
+    }
+    if (function.isGetter) {
+      sb.write('g');
+    }
+    if (function.isOperator) {
+      sb.write('o');
+    }
+    if (function.isSetter) {
+      sb.write('s');
+    }
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${function.identifier.name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class FunctionDeclarationsMacro2 implements FunctionDeclarationsMacro {
+  const FunctionDeclarationsMacro2();
+
+  FutureOr<void> buildDeclarationsForFunction(FunctionDeclaration function,
+      DeclarationBuilder builder) async {
+    if (function.positionalParameters.isEmpty) {
+      return;
+    }
+    StaticType returnType = await builder.resolve(function.returnType.code);
+    StaticType parameterType =
+    await builder.resolve(function.positionalParameters.first.type.code);
+    bool isExactly = await returnType.isExactly(parameterType);
+    bool isSubtype = await returnType.isSubtypeOf(parameterType);
+    String tag = '${isExactly ? 'e' : ''}${isSubtype ? 's' : ''}';
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${function.identifier.name}GeneratedMethod_$tag() {}
+'''));
+  }
+}
+
+macro
+
+class MethodDeclarationsMacro1 implements MethodDeclarationsMacro {
+  const MethodDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForMethod(MethodDeclaration method,
+      ClassMemberDeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (method.isAbstract) {
+      sb.write('a');
+    }
+    if (method.isExternal) {
+      sb.write('e');
+    }
+    if (method.isGetter) {
+      sb.write('g');
+    }
+    if (method.isOperator) {
+      sb.write('o');
+    }
+    if (method.isSetter) {
+      sb.write('s');
+    }
+    String name;
+    if (method.isOperator) {
+      name = 'operator';
+    } else {
+      name = method.identifier.name;
+    }
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${method.definingClass.name}_${name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class VariableDeclarationsMacro1 implements VariableDeclarationsMacro {
+  const VariableDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForVariable(VariableDeclaration variable,
+      DeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (variable.isExternal) {
+      sb.write('e');
+    }
+    if (variable.isFinal) {
+      sb.write('f');
+    }
+    if (variable.isLate) {
+      sb.write('l');
+    }
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${variable.identifier.name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class FieldDeclarationsMacro1 implements FieldDeclarationsMacro {
+  const FieldDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForField(FieldDeclaration field,
+      ClassMemberDeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (field.isExternal) {
+      sb.write('e');
+    }
+    if (field.isFinal) {
+      sb.write('f');
+    }
+    if (field.isLate) {
+      sb.write('l');
+    }
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${field.definingClass.name}_${field.identifier.name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class ClassDeclarationsMacro1 implements ClassDeclarationsMacro {
+  const ClassDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (clazz.isAbstract) {
+      sb.write('a');
+    }
+    if (clazz.isExternal) {
+      sb.write('e');
+    }
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${clazz.identifier.name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class ClassDeclarationsMacro2 implements ClassDeclarationsMacro {
+  const ClassDeclarationsMacro2();
+
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    List<ConstructorDeclaration> constructors = await builder.constructorsOf(
+        clazz);
+    StringBuffer constructorsText = new StringBuffer();
+    String comma = '';
+    constructorsText.write('constructors=');
+    for (ConstructorDeclaration constructor in constructors) {
+      constructorsText.write(comma);
+      String name = constructor.identifier.name;
+      constructorsText.write("'$name'");
+      comma = ',';
+    }
+
+    List<FieldDeclaration> fields = await builder.fieldsOf(
+        clazz);
+    StringBuffer fieldsText = new StringBuffer();
+    comma = '';
+    fieldsText.write('fields=');
+    for (FieldDeclaration field in fields) {
+      fieldsText.write(comma);
+      String name = field.identifier.name;
+      fieldsText.write("'$name'");
+      comma = ',';
+    }
+
+    List<MethodDeclaration> methods = await builder.methodsOf(
+        clazz);
+    StringBuffer methodsText = new StringBuffer();
+    comma = '';
+    methodsText.write('methods=');
+    for (MethodDeclaration method in methods) {
+      methodsText.write(comma);
+      String name = method.identifier.name;
+      methodsText.write("'$name'");
+      comma = ',';
+    }
+
+    builder.declareInLibrary(new DeclarationCode.fromString('''
+void ${clazz.identifier.name}Introspection() {
+  print("$constructorsText");
+  print("$fieldsText");
+  print("$methodsText");
+}
+'''));
+  }
+}
+
+macro
+
+class ConstructorDeclarationsMacro1
+    implements ConstructorDeclarationsMacro {
+  const ConstructorDeclarationsMacro1();
+
+  FutureOr<void> buildDeclarationsForConstructor(
+      ConstructorDeclaration constructor,
+      ClassMemberDeclarationBuilder builder) {
+    StringBuffer sb = new StringBuffer();
+    if (constructor.isAbstract) {
+      sb.write('a');
+    }
+    if (constructor.isExternal) {
+      sb.write('e');
+    }
+    if (constructor.isGetter) {
+      sb.write('g');
+    }
+    if (constructor.isOperator) {
+      sb.write('o');
+    }
+    if (constructor.isSetter) {
+      sb.write('s');
+    }
+    if (constructor.isFactory) {
+      sb.write('f');
+    }
+    builder.declareInClass(new DeclarationCode.fromString('''
+void ${constructor.definingClass.name}_${constructor.identifier
+        .name}GeneratedMethod_${sb}() {}
+'''));
+  }
+}
+
+macro
+
+class ToStringMacro implements ClassDeclarationsMacro {
+  const ToStringMacro();
+
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    if (!methods.any((m) => m.identifier.name == 'toString')) {
+      Iterable<FieldDeclaration> fields = await builder.fieldsOf(clazz);
+      List<Object> parts = ['''
+  toString() {
+    return "${clazz.identifier.name}('''
+      ];
+      String comma = '';
+      for (FieldDeclaration field in fields) {
+        parts.add(comma);
+        parts.add('${field.identifier.name}=\${');
+        parts.add(field.identifier.name);
+        parts.add('}');
+        comma = ',';
+      }
+      parts.add(''')";
+  }''');
+      builder.declareInClass(new DeclarationCode.fromParts(parts));
+    }
+  }
+}
+
+macro
+
+class SequenceMacro implements ClassDeclarationsMacro {
+  const SequenceMacro();
+
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    int index = 0;
+    String suffix = '';
+    while (methods.any((m) => m.identifier.name == 'method$suffix')) {
+      index++;
+      suffix = '$index';
+    }
+    builder.declareInClass(new DeclarationCode.fromString('''
+  method$suffix() {}'''));
+  }
+}
+
+macro
+
+class SupertypesMacro implements ClassDefinitionMacro {
+  const SupertypesMacro();
+
+  FutureOr<void> buildDefinitionForClass(ClassDeclaration clazz,
+      ClassDefinitionBuilder builder) async {
+    ClassDeclaration? superClass = await builder.superclassOf(clazz);
+    FunctionDefinitionBuilder getSuperClassBuilder = await builder.buildMethod(
+        (await builder.methodsOf(clazz))
+            .firstWhere((m) => m.identifier.name == 'getSuperClass')
+            .identifier);
+    getSuperClassBuilder.augment(new FunctionBodyCode.fromString('''{
+    return "${superClass?.identifier.name}";
+  }'''));
+  }
+}
+
+macro
+
+class ImportConflictMacro implements FunctionDefinitionMacro {
+  const ImportConflictMacro();
+
+  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
+      FunctionDefinitionBuilder builder) {
+    builder.augment(new FunctionBodyCode.fromParts([
+      '{\n  ',
+      'var ',
+      'prefix',
+      ' = ',
+      function.positionalParameters
+          .elementAt(0)
+          .type
+          .code,
+      ';\n  ',
+      'var prefix0',
+      ' = ',
+      function.positionalParameters
+          .elementAt(1)
+          .type
+          .code,
+      ';\n  ',
+      'var pre',
+      'fix',
+      '10 = ',
+      function.positionalParameters
+          .elementAt(2)
+          .type
+          .code,
+      ';\n',
+      '}',
+    ]));
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro1.dart b/pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro1.dart
similarity index 100%
rename from pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro1.dart
rename to pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro1.dart
diff --git a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro2.dart b/pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro2.dart
similarity index 100%
rename from pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro2.dart
rename to pkg/front_end/test/macros/application/data/pkgs/macro/lib/macro2.dart
diff --git a/pkg/front_end/test/macros/application/data/tests/declarations.dart b/pkg/front_end/test/macros/application/data/tests/declarations.dart
new file mode 100644
index 0000000..a172251
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/declarations.dart
@@ -0,0 +1,157 @@
+// 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:macro/macro.dart';
+
+/*member: topLevelFunction1:
+void topLevelFunction1GeneratedMethod_() {}
+*/
+@FunctionDeclarationsMacro1()
+void topLevelFunction1() {}
+
+/*member: topLevelFunction2:
+void topLevelFunction2GeneratedMethod_e() {}
+*/
+@FunctionDeclarationsMacro1()
+external void topLevelFunction2();
+
+/*member: topLevelField1:
+void topLevelField1GeneratedMethod_() {}
+*/
+@VariableDeclarationsMacro1()
+int? topLevelField1;
+
+/*member: topLevelField2:
+void topLevelField2GeneratedMethod_e() {}
+*/
+@VariableDeclarationsMacro1()
+external int? topLevelField2;
+
+/*member: topLevelField3:
+void topLevelField3GeneratedMethod_f() {}
+*/
+@VariableDeclarationsMacro1()
+final int? topLevelField3 = null;
+
+/*member: topLevelField4:
+void topLevelField4GeneratedMethod_l() {}
+*/
+@VariableDeclarationsMacro1()
+late int? topLevelField4;
+
+/*member: topLevelGetter1:
+void topLevelGetter1GeneratedMethod_g() {}
+*/
+@FunctionDeclarationsMacro1()
+int? get topLevelGetter1 => null;
+
+/*member: topLevelSetter1=:
+void topLevelSetter1GeneratedMethod_s() {}
+*/
+@FunctionDeclarationsMacro1()
+void set topLevelSetter1(int? value) {}
+
+/*class: Class1:
+void Class1GeneratedMethod_() {}
+
+void Class1Introspection() {
+  print("constructors='','redirect','fact'");
+  print("fields='instanceField1','instanceField2','instanceField3'");
+  print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1'");
+}
+*/
+@ClassDeclarationsMacro1()
+@ClassDeclarationsMacro2()
+class Class1 {
+  /*member: Class1.:
+augment class Class1 {
+void Class1_GeneratedMethod_() {}
+
+}*/
+  @ConstructorDeclarationsMacro1()
+  Class1();
+
+  /*member: Class1.redirect:
+augment class Class1 {
+void Class1_redirectGeneratedMethod_f() {}
+
+}*/
+  @ConstructorDeclarationsMacro1()
+  factory Class1.redirect() = Class1;
+
+  /*member: Class1.fact:
+augment class Class1 {
+void Class1_factGeneratedMethod_f() {}
+
+}*/
+  @ConstructorDeclarationsMacro1()
+  factory Class1.fact() => new Class1();
+
+  /*member: Class1.instanceMethod1:
+void Class1_instanceMethod1GeneratedMethod_() {}
+*/
+  @MethodDeclarationsMacro1()
+  void instanceMethod1() {}
+
+  /*member: Class1.instanceGetter1:
+void Class1_instanceGetter1GeneratedMethod_g() {}
+*/
+  @MethodDeclarationsMacro1()
+  int? get instanceGetter1 => null;
+
+  /*member: Class1.instanceSetter1=:
+void Class1_instanceSetter1GeneratedMethod_s() {}
+*/
+  @MethodDeclarationsMacro1()
+  void set instanceSetter1(int? value) {}
+
+  /*member: Class1.[]:
+void Class1_operatorGeneratedMethod_o() {}
+*/
+  @MethodDeclarationsMacro1()
+  int operator [](int i) => i;
+
+  /*member: Class1.instanceField1:
+void Class1_instanceField1GeneratedMethod_() {}
+*/
+  @FieldDeclarationsMacro1()
+  int? instanceField1;
+
+  /*member: Class1.instanceField2:
+void Class1_instanceField2GeneratedMethod_f() {}
+*/
+  @FieldDeclarationsMacro1()
+  final int? instanceField2 = null;
+
+  /*member: Class1.instanceField3:
+void Class1_instanceField3GeneratedMethod_fl() {}
+*/
+  @FieldDeclarationsMacro1()
+  late final int? instanceField3 = null;
+}
+
+/*class: Class2:
+void Class2GeneratedMethod_a() {}
+
+void Class2Introspection() {
+  print("constructors=");
+  print("fields='instanceField1'");
+  print("methods='instanceMethod1'");
+}
+*/
+@ClassDeclarationsMacro1()
+@ClassDeclarationsMacro2()
+abstract class Class2 {
+  /*member: Class2.instanceMethod1:
+void Class2_instanceMethod1GeneratedMethod_a() {}
+*/
+  @MethodDeclarationsMacro1()
+  void instanceMethod1();
+
+  /*member: Class2.instanceField1:
+void Class2_instanceField1GeneratedMethod_() {}
+*/
+  @FieldDeclarationsMacro1()
+  abstract int? instanceField1;
+}
diff --git a/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect b/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect
new file mode 100644
index 0000000..215ac30
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect
@@ -0,0 +1,113 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+@#C2
+class Class1 extends core::Object {
+  @#C3
+  field core::int? instanceField1 = null;
+  @#C3
+  final field core::int? instanceField2 = null;
+  @#C3
+  late final field core::int? instanceField3 = null;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  @#C5
+  constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-17 */ Class1_GeneratedMethod_() → void {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-18 */ Class1_redirectGeneratedMethod_f() → void {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-19 */ Class1_factGeneratedMethod_f() → void {}
+  @#C5
+  static factory redirect() → self::Class1
+    return new self::Class1::•();
+  @#C5
+  static factory fact() → self::Class1
+    return new self::Class1::•();
+  @#C6
+  method instanceMethod1() → void {}
+  @#C6
+  get instanceGetter1() → core::int?
+    return null;
+  @#C6
+  set instanceSetter1(core::int? value) → void {}
+  @#C6
+  operator [](core::int i) → core::int
+    return i;
+}
+@#C1
+@#C2
+abstract class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  @#C6
+  abstract method instanceMethod1() → void;
+  @#C3
+  abstract get instanceField1() → core::int?;
+  @#C3
+  abstract set instanceField1(core::int? #externalFieldValue) → void;
+}
+@#C7
+static field core::int? topLevelField1;
+@#C7
+static final field core::int? topLevelField3 = null;
+@#C7
+late static field core::int? topLevelField4;
+@#C8
+static method topLevelFunction1() → void {}
+@#C8
+external static method topLevelFunction2() → void;
+@#C7
+external static get topLevelField2() → core::int?;
+@#C7
+external static set topLevelField2(core::int? #externalFieldValue) → void;
+@#C8
+static get topLevelGetter1() → core::int?
+  return null;
+@#C8
+static set topLevelSetter1(core::int? value) → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ topLevelFunction2GeneratedMethod_e() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ topLevelField1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ topLevelField2GeneratedMethod_e() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelField3GeneratedMethod_f() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ topLevelField4GeneratedMethod_l() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ topLevelGetter1GeneratedMethod_g() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-7 */ topLevelSetter1GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-8 */ Class1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-9 */ Class1Introspection() → void {
+  core::print("constructors='','redirect','fact'");
+  core::print("fields='instanceField1','instanceField2','instanceField3'");
+  core::print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1'");
+}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-10 */ Class1_instanceMethod1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ Class1_instanceGetter1GeneratedMethod_g() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-12 */ Class1_operatorGeneratedMethod_o() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-13 */ Class1_instanceField1GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-14 */ Class1_instanceField2GeneratedMethod_f() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-15 */ Class1_instanceField3GeneratedMethod_fl() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-16 */ Class1_instanceSetter1GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-20 */ Class2GeneratedMethod_a() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-21 */ Class2Introspection() → void {
+  core::print("constructors=");
+  core::print("fields='instanceField1'");
+  core::print("methods='instanceMethod1'");
+}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-22 */ Class2_instanceMethod1GeneratedMethod_a() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-23 */ Class2_instanceField1GeneratedMethod_() → void {}
+
+constants  {
+  #C1 = mac::ClassDeclarationsMacro1 {}
+  #C2 = mac::ClassDeclarationsMacro2 {}
+  #C3 = mac::FieldDeclarationsMacro1 {}
+  #C4 = constructor-tearoff self::Class1::redirect
+  #C5 = mac::ConstructorDeclarationsMacro1 {}
+  #C6 = mac::MethodDeclarationsMacro1 {}
+  #C7 = mac::VariableDeclarationsMacro1 {}
+  #C8 = mac::FunctionDeclarationsMacro1 {}
+}
diff --git a/pkg/front_end/test/macros/application/data/tests/import_conflict.dart b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart
new file mode 100644
index 0000000..44c42bb
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart
@@ -0,0 +1,31 @@
+// 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.
+
+/*library: 
+Definitions:
+import 'dart:core' as prefix2_0;
+import 'dart:async' as prefix2_1;
+import 'dart:math' as prefix2_2;
+import 'dart:convert' as prefix2_3;
+
+augment void function(prefix2_0.int i, prefix2_1.FutureOr<prefix2_2.Random> f, prefix2_3.JsonCodec c, ) {
+  var prefix = prefix2_0.int;
+  var prefix0 = prefix2_1.FutureOr<prefix2_2.Random>;
+  var prefix10 = prefix2_3.JsonCodec;
+}
+*/
+
+import 'package:macro/macro.dart';
+import 'dart:async';
+import 'dart:math';
+import 'dart:convert';
+
+@ImportConflictMacro()
+/*member: function:
+augment void function(int i, FutureOr<Random> f, JsonCodec c, ) {
+  var prefix = int;
+  var prefix0 = FutureOr<Random>;
+  var prefix10 = JsonCodec;
+}*/
+external void function(int i, FutureOr<Random> f, JsonCodec c);
diff --git a/pkg/front_end/test/macros/application/data/tests/import_conflict.dart.expect b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart.expect
new file mode 100644
index 0000000..f688800
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+import "package:macro/macro.dart";
+import "dart:async";
+import "dart:math";
+import "dart:convert";
+
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ function(core::int i, FutureOr<math::Random>f, con::JsonCodec c) → void {
+  core::Type prefix = #C2;
+  core::Type prefix0 = #C3;
+  core::Type prefix10 = #C4;
+}
+
+constants  {
+  #C1 = mac::ImportConflictMacro {}
+  #C2 = TypeLiteralConstant(core::int*)
+  #C3 = TypeLiteralConstant(FutureOr<math::Random*>*)
+  #C4 = TypeLiteralConstant(con::JsonCodec*)
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/layers.dart b/pkg/front_end/test/macros/application/data/tests/layers.dart
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/layers.dart
rename to pkg/front_end/test/macros/application/data/tests/layers.dart
diff --git a/pkg/front_end/test/macro_application/data/tests/layers.dart.expect b/pkg/front_end/test/macros/application/data/tests/layers.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/layers.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/layers.dart.expect
diff --git a/pkg/front_end/test/macros/application/data/tests/marker.options b/pkg/front_end/test/macros/application/data/tests/marker.options
new file mode 100644
index 0000000..71e74a2
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/marker.options
@@ -0,0 +1 @@
+cfe=pkg/front_end/test/macros/application/macro_application_test.dart
diff --git a/pkg/front_end/test/macros/application/data/tests/parameters.dart b/pkg/front_end/test/macros/application/data/tests/parameters.dart
new file mode 100644
index 0000000..dae087e
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/parameters.dart
@@ -0,0 +1,51 @@
+// 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.
+
+/*library: 
+Definitions:
+import 'dart:core' as prefix0;
+
+augment void topLevelFunction1(prefix0.int a, ) {
+  throw 42;
+}
+augment void topLevelFunction2(prefix0.int a, prefix0.int b, ) {
+  throw 42;
+}
+augment void topLevelFunction3(prefix0.int a, [prefix0.int? b, ]) {
+  throw 42;
+}
+augment void topLevelFunction4(prefix0.int a, {prefix0.int? b, prefix0.int? c, }) {
+  throw 42;
+}
+*/
+
+import 'package:macro/macro.dart';
+
+/*member: topLevelFunction1:
+augment void topLevelFunction1(int a, ) {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external void topLevelFunction1(int a);
+
+/*member: topLevelFunction2:
+augment void topLevelFunction2(int a, int b, ) {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external void topLevelFunction2(int a, int b);
+
+/*member: topLevelFunction3:
+augment void topLevelFunction3(int a, [int? b, ]) {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external void topLevelFunction3(int a, [int? b]);
+
+/*member: topLevelFunction4:
+augment void topLevelFunction4(int a, {int? b, int? c, }) {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external void topLevelFunction4(int a, {int? b, int? c});
diff --git a/pkg/front_end/test/macro_application/data/tests/parameters.dart.expect b/pkg/front_end/test/macros/application/data/tests/parameters.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/parameters.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/parameters.dart.expect
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart b/pkg/front_end/test/macros/application/data/tests/sequence.dart
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/sequence.dart
rename to pkg/front_end/test/macros/application/data/tests/sequence.dart
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect b/pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/sequence.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/sequence.dart.expect
diff --git a/pkg/front_end/test/macros/application/data/tests/subtypes.dart b/pkg/front_end/test/macros/application/data/tests/subtypes.dart
new file mode 100644
index 0000000..b275017
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/subtypes.dart
@@ -0,0 +1,93 @@
+// 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.
+
+/*library: 
+Definitions:
+import 'org-dartlang-test:///a/b/c/main.dart' as prefix0;
+
+augment prefix0.A topLevelFunction1(prefix0.A a, ) {
+  print('isExactly=true');
+  print('isSubtype=true');
+  throw 42;
+}
+augment prefix0.B2 topLevelFunction2(prefix0.B1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=true');
+  throw 42;
+}
+augment prefix0.C2 topLevelFunction3(prefix0.C1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=false');
+  throw 42;
+}
+augment prefix0.D2 topLevelFunction4(prefix0.D1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=false');
+  throw 42;
+}
+*/
+
+import 'package:macro/macro.dart';
+
+class A {}
+
+class B1 {}
+
+class B2 extends B1 {}
+
+class C1 extends C2 {}
+
+class C2 {}
+
+class D1 {}
+
+class D2 {}
+
+/*member: topLevelFunction1:
+void topLevelFunction1GeneratedMethod_es() {}
+
+augment A topLevelFunction1(A a, ) {
+  print('isExactly=true');
+  print('isSubtype=true');
+  throw 42;
+}*/
+@FunctionDeclarationsMacro2()
+@FunctionDefinitionMacro2()
+external A topLevelFunction1(A a);
+
+/*member: topLevelFunction2:
+void topLevelFunction2GeneratedMethod_s() {}
+
+augment B2 topLevelFunction2(B1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=true');
+  throw 42;
+}*/
+@FunctionDeclarationsMacro2()
+@FunctionDefinitionMacro2()
+external B2 topLevelFunction2(B1 a);
+
+/*member: topLevelFunction3:
+void topLevelFunction3GeneratedMethod_() {}
+
+augment C2 topLevelFunction3(C1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=false');
+  throw 42;
+}*/
+@FunctionDeclarationsMacro2()
+@FunctionDefinitionMacro2()
+external C2 topLevelFunction3(C1 a);
+
+/*member: topLevelFunction4:
+void topLevelFunction4GeneratedMethod_() {}
+
+augment D2 topLevelFunction4(D1 a, ) {
+  print('isExactly=false');
+  print('isSubtype=false');
+  throw 42;
+}*/
+@FunctionDeclarationsMacro2()
+@FunctionDefinitionMacro2()
+external D2 topLevelFunction4(D1 a);
diff --git a/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect b/pkg/front_end/test/macros/application/data/tests/subtypes.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/subtypes.dart.expect
diff --git a/pkg/front_end/test/macros/application/data/tests/supertypes.dart b/pkg/front_end/test/macros/application/data/tests/supertypes.dart
new file mode 100644
index 0000000..5bf8b9e
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/supertypes.dart
@@ -0,0 +1,75 @@
+// 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.
+
+/*library: 
+Definitions:
+import 'dart:core' as prefix0;
+
+augment class A {
+augment prefix0.String getSuperClass() {
+    return "Object";
+  }
+}
+augment class B {
+augment prefix0.String getSuperClass() {
+    return "A";
+  }
+}
+augment class M {
+augment prefix0.String getSuperClass() {
+    return "Object";
+  }
+}
+augment class C {
+augment prefix0.String getSuperClass() {
+    return "A";
+  }
+}
+*/
+
+import 'package:macro/macro.dart';
+
+/*class: A:
+augment class A {
+augment String getSuperClass() {
+    return "Object";
+  }
+}*/
+@SupertypesMacro()
+class A {
+  external String getSuperClass();
+}
+
+/*class: B:
+augment class B {
+augment String getSuperClass() {
+    return "A";
+  }
+}*/
+@SupertypesMacro()
+class B extends A {
+  external String getSuperClass();
+}
+
+/*class: M:
+augment class M {
+augment String getSuperClass() {
+    return "Object";
+  }
+}*/
+@SupertypesMacro()
+mixin M {
+  external String getSuperClass();
+}
+
+/*class: C:
+augment class C {
+augment String getSuperClass() {
+    return "A";
+  }
+}*/
+@SupertypesMacro()
+class C extends A with M {
+  external String getSuperClass();
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/supertypes.dart.expect b/pkg/front_end/test/macros/application/data/tests/supertypes.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/supertypes.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/supertypes.dart.expect
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart b/pkg/front_end/test/macros/application/data/tests/to_string.dart
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/to_string.dart
rename to pkg/front_end/test/macros/application/data/tests/to_string.dart
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect b/pkg/front_end/test/macros/application/data/tests/to_string.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/to_string.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/to_string.dart.expect
diff --git a/pkg/front_end/test/macros/application/data/tests/type_annotations.dart b/pkg/front_end/test/macros/application/data/tests/type_annotations.dart
new file mode 100644
index 0000000..0ad8e21
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/type_annotations.dart
@@ -0,0 +1,94 @@
+// 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.
+
+/*library: 
+Definitions:
+import 'dart:core' as prefix0;
+import 'dart:math' as prefix1;
+
+augment void topLevelFunction1() {
+  throw 42;
+}
+augment prefix0.dynamic topLevelFunction2() {
+  throw 42;
+}
+augment prefix0.int topLevelFunction3() {
+  throw 42;
+}
+augment prefix0.dynamic topLevelFunction4() {
+  throw 42;
+}
+augment prefix1.Random topLevelFunction5() {
+  throw 42;
+}
+augment prefix0.List<prefix0.int> topLevelFunction6() {
+  throw 42;
+}
+augment prefix0.Map<prefix1.Random, prefix0.List<prefix0.int>> topLevelFunction7() {
+  throw 42;
+}
+augment prefix0.Map<prefix0.int?, prefix0.String>? topLevelFunction8() {
+  throw 42;
+}
+*/
+
+import 'dart:math' as math;
+
+import 'package:macro/macro.dart';
+
+/*member: topLevelFunction1:
+augment void topLevelFunction1() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external void topLevelFunction1();
+
+/*member: topLevelFunction2:
+augment dynamic topLevelFunction2() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external dynamic topLevelFunction2();
+
+/*member: topLevelFunction3:
+augment int topLevelFunction3() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external int topLevelFunction3();
+
+/*member: topLevelFunction4:
+augment dynamic topLevelFunction4() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external topLevelFunction4();
+
+/*member: topLevelFunction5:
+augment Random topLevelFunction5() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external math.Random topLevelFunction5();
+
+/*member: topLevelFunction6:
+augment List<int> topLevelFunction6() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external List<int> topLevelFunction6();
+
+/*member: topLevelFunction7:
+augment Map<Random, List<int>> topLevelFunction7() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external Map<math.Random, List<int>> topLevelFunction7();
+
+/*member: topLevelFunction8:
+augment Map<int?, String>? topLevelFunction8() {
+  throw 42;
+}*/
+@FunctionDefinitionMacro1()
+external Map<int?, String>? topLevelFunction8();
diff --git a/pkg/front_end/test/macro_application/data/tests/type_annotations.dart.expect b/pkg/front_end/test/macros/application/data/tests/type_annotations.dart.expect
similarity index 100%
rename from pkg/front_end/test/macro_application/data/tests/type_annotations.dart.expect
rename to pkg/front_end/test/macros/application/data/tests/type_annotations.dart.expect
diff --git a/pkg/front_end/test/macros/application/data/tests/types.dart b/pkg/front_end/test/macros/application/data/tests/types.dart
new file mode 100644
index 0000000..6e3dacf
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/types.dart
@@ -0,0 +1,61 @@
+// 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.
+
+/*library: 
+Types:
+import 'dart:core' as prefix0;
+import 'package:macro/macro.dart' as prefix1;
+
+class topLevelFunction1GeneratedClass {
+  external void method();
+}
+class topLevelFunction2GeneratedClass {
+  external prefix0.dynamic method();
+}
+class topLevelFunction3GeneratedClass {
+  external prefix0.int method();
+}
+class topLevelFunction4GeneratedClass {
+  external prefix1.FunctionTypesMacro1? method();
+}
+class topLevelFunction5GeneratedClass {
+  external prefix0.dynamic method();
+}*/
+
+import 'package:macro/macro.dart';
+
+/*member: topLevelFunction1:
+class topLevelFunction1GeneratedClass {
+  external void method();
+}*/
+@FunctionTypesMacro1()
+void topLevelFunction1() {}
+
+/*member: topLevelFunction2:
+class topLevelFunction2GeneratedClass {
+  external dynamic method();
+}*/
+@FunctionTypesMacro1()
+dynamic topLevelFunction2() {}
+
+/*member: topLevelFunction3:
+class topLevelFunction3GeneratedClass {
+  external int method();
+}*/
+@FunctionTypesMacro1()
+int topLevelFunction3() => 0;
+
+/*member: topLevelFunction4:
+class topLevelFunction4GeneratedClass {
+  external FunctionTypesMacro1? method();
+}*/
+@FunctionTypesMacro1()
+FunctionTypesMacro1? topLevelFunction4() => null;
+
+/*member: topLevelFunction5:
+class topLevelFunction5GeneratedClass {
+  external dynamic method();
+}*/
+@FunctionTypesMacro1()
+topLevelFunction5() {}
diff --git a/pkg/front_end/test/macros/application/data/tests/types.dart.expect b/pkg/front_end/test/macros/application/data/tests/types.dart.expect
new file mode 100644
index 0000000..ed9d33c
--- /dev/null
+++ b/pkg/front_end/test/macros/application/data/tests/types.dart.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:macro/macro.dart" as mac;
+
+import "dart:core" as prefix0;
+import "package:macro/macro.dart" as prefix1;
+import "package:macro/macro.dart";
+
+class topLevelFunction1GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
+  synthetic constructor •() → self::topLevelFunction1GeneratedClass
+    : super core::Object::•()
+    ;
+  external method method() → void;
+}
+class topLevelFunction2GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
+  synthetic constructor •() → self::topLevelFunction2GeneratedClass
+    : super core::Object::•()
+    ;
+  external method method() → dynamic;
+}
+class topLevelFunction3GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
+  synthetic constructor •() → self::topLevelFunction3GeneratedClass
+    : super core::Object::•()
+    ;
+  external method method() → core::int;
+}
+class topLevelFunction4GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
+  synthetic constructor •() → self::topLevelFunction4GeneratedClass
+    : super core::Object::•()
+    ;
+  external method method() → mac::FunctionTypesMacro1?;
+}
+class topLevelFunction5GeneratedClass extends core::Object { // from org-dartlang-augmentation:/a/b/c/main.dart-0
+  synthetic constructor •() → self::topLevelFunction5GeneratedClass
+    : super core::Object::•()
+    ;
+  external method method() → dynamic;
+}
+@#C1
+static method topLevelFunction1() → void {}
+@#C1
+static method topLevelFunction2() → dynamic {}
+@#C1
+static method topLevelFunction3() → core::int
+  return 0;
+@#C1
+static method topLevelFunction4() → mac::FunctionTypesMacro1?
+  return null;
+@#C1
+static method topLevelFunction5() → dynamic {}
+
+constants  {
+  #C1 = mac::FunctionTypesMacro1 {}
+}
diff --git a/pkg/front_end/test/macros/application/macro_application_test.dart b/pkg/front_end/test/macros/application/macro_application_test.dart
new file mode 100644
index 0000000..69ae9c6
--- /dev/null
+++ b/pkg/front_end/test/macros/application/macro_application_test.dart
@@ -0,0 +1,336 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io' show Directory, File, Platform;
+
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
+    as isolatedExecutor;
+import 'package:_fe_analyzer_shared/src/testing/id.dart'
+    show ActualData, ClassId, Id, LibraryId;
+import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
+import 'package:front_end/src/fasta/builder/field_builder.dart';
+import 'package:front_end/src/fasta/builder/member_builder.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
+import 'package:front_end/src/fasta/source/source_class_builder.dart';
+import 'package:front_end/src/fasta/source/source_library_builder.dart';
+import 'package:front_end/src/macro_serializer.dart';
+import 'package:front_end/src/temp_dir_macro_serializer.dart';
+import 'package:front_end/src/testing/compiler_common.dart';
+import 'package:front_end/src/testing/id_extractor.dart';
+import 'package:front_end/src/testing/id_testing_helper.dart';
+import 'package:front_end/src/testing/id_testing_utils.dart';
+import 'package:kernel/ast.dart' hide Arguments;
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/text/ast_to_text.dart';
+import 'package:vm/target/vm.dart';
+
+import '../../utils/kernel_chain.dart';
+
+Future<void> main(List<String> args) async {
+  bool generateExpectations = args.contains('-g');
+  enableMacros = true;
+
+  MacroSerializer macroSerializer =
+      new TempDirMacroSerializer('macro_application');
+  try {
+    Directory dataDir =
+        new Directory.fromUri(Platform.script.resolve('data/tests'));
+    await runTests<String>(dataDir,
+        args: args,
+        createUriForFileName: createUriForFileName,
+        onFailure: onFailure,
+        runTest: runTestFor(const MacroDataComputer(), [
+          new MacroTestConfig(dataDir, macroSerializer,
+              generateExpectations: generateExpectations)
+        ]),
+        preserveWhitespaceInAnnotations: true);
+  } finally {
+    await macroSerializer.close();
+  }
+}
+
+class MacroTestConfig extends TestConfig {
+  final Directory dataDir;
+  final MacroSerializer macroSerializer;
+  final bool generateExpectations;
+  final Map<Uri, Uri> precompiledMacroUris = {};
+
+  MacroTestConfig(this.dataDir, this.macroSerializer,
+      {required this.generateExpectations})
+      : super(cfeMarker, 'cfe',
+            explicitExperimentalFlags: {ExperimentalFlag.macros: true},
+            packageConfigUri:
+                Platform.script.resolve('data/package_config.json'));
+
+  @override
+  void customizeCompilerOptions(CompilerOptions options, TestData testData) {
+    options.macroExecutorProvider = () async {
+      return await isolatedExecutor.start(SerializationMode.byteDataServer);
+    };
+    options.precompiledMacroUris = precompiledMacroUris;
+    options.macroTarget = new VmTarget(new TargetFlags());
+    options.macroSerializer = macroSerializer;
+  }
+
+  @override
+  Future<void> onCompilationResult(
+      TestData testData, TestResultData testResultData) async {
+    Component component = testResultData.compilerResult.component!;
+    StringBuffer buffer = new StringBuffer();
+    Printer printer = new Printer(buffer)
+      ..writeProblemsAsJson("Problems in component", component.problemsAsJson);
+    component.libraries.forEach((Library library) {
+      if (isTestUri(library.importUri)) {
+        printer.writeLibraryFile(library);
+        printer.endLine();
+      }
+    });
+    printer.writeConstantTable(component);
+    String actual = buffer.toString();
+    String expectationFileName = '${testData.name}.expect';
+    Uri expectedUri = dataDir.uri.resolve(expectationFileName);
+    File file = new File.fromUri(expectedUri);
+    if (file.existsSync()) {
+      String expected = file.readAsStringSync();
+      if (expected != actual) {
+        if (generateExpectations) {
+          file.writeAsStringSync(actual);
+        } else {
+          String diff = await runDiff(expectedUri, actual);
+          throw "${testData.name} don't match ${expectedUri}\n$diff";
+        }
+      }
+    } else if (generateExpectations) {
+      file.writeAsStringSync(actual);
+    } else {
+      throw 'Please use -g option to create file ${expectedUri} with this '
+          'content:\n$actual';
+    }
+  }
+}
+
+bool _isMember(MemberBuilder memberBuilder, Member member) {
+  if (memberBuilder is FieldBuilder) {
+    // Only show annotations for the field or getter.
+    return memberBuilder.readTarget == member;
+  } else if (member is Procedure && member.isSetter) {
+    return memberBuilder.writeTarget == member;
+  } else if (member is Procedure && member.isGetter) {
+    return memberBuilder.readTarget == member;
+  } else {
+    return memberBuilder.invokeTarget == member;
+  }
+}
+
+class MacroDataComputer extends DataComputer<String> {
+  const MacroDataComputer();
+
+  @override
+  DataInterpreter<String> get dataValidator => const StringDataInterpreter();
+
+  @override
+  void computeLibraryData(TestResultData testResultData, Library library,
+      Map<Id, ActualData<String>> actualMap,
+      {bool? verbose}) {
+    CfeDataRegistry<String> registry =
+        new CfeDataRegistry(testResultData.compilerResult, actualMap);
+    MacroApplicationDataForTesting macroApplicationData = testResultData
+        .compilerResult
+        .kernelTargetForTesting!
+        .loader
+        .dataForTesting!
+        .macroApplicationData;
+    StringBuffer sb = new StringBuffer();
+    for (SourceLibraryBuilder sourceLibraryBuilder
+        in macroApplicationData.libraryTypesResult.keys) {
+      if (sourceLibraryBuilder.library == library) {
+        String source =
+            macroApplicationData.libraryTypesResult[sourceLibraryBuilder]!;
+        sb.write('\nTypes:');
+        sb.write('\n${source}');
+      }
+    }
+    for (SourceLibraryBuilder sourceLibraryBuilder
+        in macroApplicationData.libraryDefinitionResult.keys) {
+      if (sourceLibraryBuilder.library == library) {
+        String source =
+            macroApplicationData.libraryDefinitionResult[sourceLibraryBuilder]!;
+        sb.write('\nDefinitions:');
+        sb.write('\n${source}');
+      }
+    }
+    if (sb.isNotEmpty) {
+      Id id = new LibraryId(library.fileUri);
+      registry.registerValue(
+          library.fileUri, library.fileOffset, id, sb.toString(), library);
+    }
+  }
+
+  @override
+  void computeClassData(TestResultData testResultData, Class cls,
+      Map<Id, ActualData<String>> actualMap,
+      {bool? verbose}) {
+    CfeDataRegistry<String> registry =
+        new CfeDataRegistry(testResultData.compilerResult, actualMap);
+    MacroApplicationDataForTesting macroApplicationData = testResultData
+        .compilerResult
+        .kernelTargetForTesting!
+        .loader
+        .dataForTesting!
+        .macroApplicationData;
+    StringBuffer sb = new StringBuffer();
+    List<DeclarationCode> mergedClassAugmentations = [];
+    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.classTypesResults.entries) {
+      if (entry.key.cls == cls) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          mergedClassAugmentations
+              .addAll(result.classAugmentations[entry.key.name] ?? const []);
+        }
+      }
+    }
+    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.classDeclarationsResults.entries) {
+      if (entry.key.cls == cls) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          mergedClassAugmentations
+              .addAll(result.classAugmentations[entry.key.name] ?? const []);
+        }
+      }
+    }
+    for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.classDefinitionsResults.entries) {
+      if (entry.key.cls == cls) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          mergedClassAugmentations
+              .addAll(result.classAugmentations[entry.key.name] ?? const []);
+        }
+      }
+    }
+    if (mergedClassAugmentations.isNotEmpty) {
+      sb.write('\naugment class ${cls.name} {');
+      for (var result in mergedClassAugmentations) {
+        sb.write('\n${codeToString(result)}');
+      }
+      sb.write('\n}');
+    }
+    if (sb.isNotEmpty) {
+      Id id = new ClassId(cls.name);
+      registry.registerValue(
+          cls.fileUri, cls.fileOffset, id, sb.toString(), cls);
+    }
+  }
+
+  @override
+  void computeMemberData(TestResultData testResultData, Member member,
+      Map<Id, ActualData<String>> actualMap,
+      {bool? verbose}) {
+    CfeDataRegistry<String> registry =
+        new CfeDataRegistry(testResultData.compilerResult, actualMap);
+    MacroApplicationDataForTesting macroApplicationData = testResultData
+        .compilerResult
+        .kernelTargetForTesting!
+        .loader
+        .dataForTesting!
+        .macroApplicationData;
+    StringBuffer sb = StringBuffer();
+    List<DeclarationCode> mergedAugmentations = [];
+    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.memberTypesResults.entries) {
+      if (_isMember(entry.key, member)) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          if (member.enclosingClass != null) {
+            mergedAugmentations.addAll(
+                result.classAugmentations[member.enclosingClass!.name] ??
+                    const []);
+          }
+        }
+      }
+    }
+    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.memberDeclarationsResults.entries) {
+      if (_isMember(entry.key, member)) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          if (member.enclosingClass != null) {
+            mergedAugmentations.addAll(
+                result.classAugmentations[member.enclosingClass!.name] ??
+                    const []);
+          }
+        }
+      }
+    }
+    for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
+        in macroApplicationData.memberDefinitionsResults.entries) {
+      if (_isMember(entry.key, member)) {
+        for (MacroExecutionResult result in entry.value) {
+          if (result.libraryAugmentations.isNotEmpty) {
+            sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+          }
+          if (member.enclosingClass != null) {
+            mergedAugmentations.addAll(
+                result.classAugmentations[member.enclosingClass!.name] ??
+                    const []);
+          }
+        }
+      }
+    }
+    if (mergedAugmentations.isNotEmpty) {
+      if (member.enclosingClass != null) {
+        sb.write('\naugment class ${member.enclosingClass!.name} {');
+      }
+      for (DeclarationCode augmentation in mergedAugmentations) {
+        sb.write('\n${codeToString(augmentation)}');
+      }
+      if (member.enclosingClass != null) {
+        sb.write('\n}');
+      }
+    }
+    if (sb.isNotEmpty) {
+      Id id = computeMemberId(member);
+      MemberBuilder memberBuilder =
+          lookupMemberBuilder(testResultData.compilerResult, member)!;
+      registry.registerValue(memberBuilder.fileUri!, memberBuilder.charOffset,
+          id, sb.toString(), member);
+    }
+  }
+}
+
+void _codeToString(StringBuffer sb, Code code) {
+  for (Object part in code.parts) {
+    if (part is Code) {
+      _codeToString(sb, part);
+    } else if (part is Identifier) {
+      sb.write(part.name);
+    } else {
+      sb.write(part);
+    }
+  }
+}
+
+String codeToString(Code code) {
+  StringBuffer sb = new StringBuffer();
+  _codeToString(sb, code);
+  return sb.toString();
+}
diff --git a/pkg/front_end/test/macros/data/package_config.json b/pkg/front_end/test/macros/data/package_config.json
deleted file mode 100644
index f176d49..0000000
--- a/pkg/front_end/test/macros/data/package_config.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
-  "configVersion": 2,
-  "packages": [
-    {
-      "name": "macro",
-      "rootUri": "pkgs/macro/lib/"
-    },
-    {
-      "name": "precompiled_macro",
-      "rootUri": "pkgs/precompiled_macro/lib/"
-    },
-    {
-      "name": "_fe_analyzer_shared",
-      "rootUri": "../../../../_fe_analyzer_shared/lib/"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/data/tests/marker.options b/pkg/front_end/test/macros/data/tests/marker.options
deleted file mode 100644
index 8416ef5..0000000
--- a/pkg/front_end/test/macros/data/tests/marker.options
+++ /dev/null
@@ -1 +0,0 @@
-cfe=pkg/front_end/test/macros/macro_test.dart
diff --git a/pkg/front_end/test/macros/declaration/data/package_config.json b/pkg/front_end/test/macros/declaration/data/package_config.json
new file mode 100644
index 0000000..55ff011
--- /dev/null
+++ b/pkg/front_end/test/macros/declaration/data/package_config.json
@@ -0,0 +1,17 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "macro",
+      "rootUri": "pkgs/macro/lib/"
+    },
+    {
+      "name": "precompiled_macro",
+      "rootUri": "pkgs/precompiled_macro/lib/"
+    },
+    {
+      "name": "_fe_analyzer_shared",
+      "rootUri": "../../../../../_fe_analyzer_shared/lib/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/pkgs/macro/lib/macro.dart
rename to pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart
diff --git a/pkg/front_end/test/macros/data/pkgs/precompiled_macro/lib/precompiled_macro.dart b/pkg/front_end/test/macros/declaration/data/pkgs/precompiled_macro/lib/precompiled_macro.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/pkgs/precompiled_macro/lib/precompiled_macro.dart
rename to pkg/front_end/test/macros/declaration/data/pkgs/precompiled_macro/lib/precompiled_macro.dart
diff --git a/pkg/front_end/test/macros/data/pkgs/precompiled_macro/lib/src/macro_base.dart b/pkg/front_end/test/macros/declaration/data/pkgs/precompiled_macro/lib/src/macro_base.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/pkgs/precompiled_macro/lib/src/macro_base.dart
rename to pkg/front_end/test/macros/declaration/data/pkgs/precompiled_macro/lib/src/macro_base.dart
diff --git a/pkg/front_end/test/macros/data/tests/all_precompiled.dart b/pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/all_precompiled.dart
rename to pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart
diff --git a/pkg/front_end/test/macros/data/tests/applications.dart b/pkg/front_end/test/macros/declaration/data/tests/applications.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/applications.dart
rename to pkg/front_end/test/macros/declaration/data/tests/applications.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_macro.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_macro.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_macro.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_macro.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/apply_lib.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/apply_lib.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/apply_lib_dep.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib_dep.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/apply_lib_dep.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib_dep.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/macro_lib.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/macro_lib.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/macro_lib.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/macro_lib.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/macro_lib_dep.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/macro_lib_dep.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/macro_lib_dep.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/macro_lib_dep.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/main.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/main.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/main.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/main.dart
diff --git a/pkg/front_end/test/macros/data/tests/declare_vs_apply/main_lib_dep.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/main_lib_dep.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/declare_vs_apply/main_lib_dep.dart
rename to pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/main_lib_dep.dart
diff --git a/pkg/front_end/test/macros/data/tests/direct_import.dart b/pkg/front_end/test/macros/declaration/data/tests/direct_import.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/direct_import.dart
rename to pkg/front_end/test/macros/declaration/data/tests/direct_import.dart
diff --git a/pkg/front_end/test/macros/data/tests/import_macro_builder.dart b/pkg/front_end/test/macros/declaration/data/tests/import_macro_builder.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/import_macro_builder.dart
rename to pkg/front_end/test/macros/declaration/data/tests/import_macro_builder.dart
diff --git a/pkg/front_end/test/macros/data/tests/import_macro_package.dart b/pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/import_macro_package.dart
rename to pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart
diff --git a/pkg/front_end/test/macros/data/tests/import_macro_source/macro_lib.dart b/pkg/front_end/test/macros/declaration/data/tests/import_macro_source/macro_lib.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/import_macro_source/macro_lib.dart
rename to pkg/front_end/test/macros/declaration/data/tests/import_macro_source/macro_lib.dart
diff --git a/pkg/front_end/test/macros/data/tests/import_macro_source/main.dart b/pkg/front_end/test/macros/declaration/data/tests/import_macro_source/main.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/import_macro_source/main.dart
rename to pkg/front_end/test/macros/declaration/data/tests/import_macro_source/main.dart
diff --git a/pkg/front_end/test/macros/data/tests/macro_declarations.dart b/pkg/front_end/test/macros/declaration/data/tests/macro_declarations.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/macro_declarations.dart
rename to pkg/front_end/test/macros/declaration/data/tests/macro_declarations.dart
diff --git a/pkg/front_end/test/macros/declaration/data/tests/marker.options b/pkg/front_end/test/macros/declaration/data/tests/marker.options
new file mode 100644
index 0000000..776355b
--- /dev/null
+++ b/pkg/front_end/test/macros/declaration/data/tests/marker.options
@@ -0,0 +1 @@
+cfe=pkg/front_end/test/macros/declaration/macro_declaration_test.dart
diff --git a/pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib1.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib1.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib1.dart
rename to pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib1.dart
diff --git a/pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib2a.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2a.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib2a.dart
rename to pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2a.dart
diff --git a/pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib2b.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/multiple_macros/macro_lib2b.dart
rename to pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart
diff --git a/pkg/front_end/test/macros/data/tests/multiple_macros/main.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/multiple_macros/main.dart
rename to pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart
diff --git a/pkg/front_end/test/macros/data/tests/no_import.dart b/pkg/front_end/test/macros/declaration/data/tests/no_import.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/no_import.dart
rename to pkg/front_end/test/macros/declaration/data/tests/no_import.dart
diff --git a/pkg/front_end/test/macros/data/tests/precompiled.dart b/pkg/front_end/test/macros/declaration/data/tests/precompiled.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/precompiled.dart
rename to pkg/front_end/test/macros/declaration/data/tests/precompiled.dart
diff --git a/pkg/front_end/test/macros/data/tests/use_macro_package.dart b/pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/use_macro_package.dart
rename to pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart
diff --git a/pkg/front_end/test/macros/data/tests/use_macro_source/macro_lib.dart b/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/macro_lib.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/use_macro_source/macro_lib.dart
rename to pkg/front_end/test/macros/declaration/data/tests/use_macro_source/macro_lib.dart
diff --git a/pkg/front_end/test/macros/data/tests/use_macro_source/main.dart b/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart
similarity index 100%
rename from pkg/front_end/test/macros/data/tests/use_macro_source/main.dart
rename to pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart
diff --git a/pkg/front_end/test/macros/declaration/macro_declaration_test.dart b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
new file mode 100644
index 0000000..d1e3f3b
--- /dev/null
+++ b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
@@ -0,0 +1,417 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io' show Directory, Platform;
+
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:_fe_analyzer_shared/src/testing/features.dart';
+import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
+import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
+import 'package:front_end/src/fasta/builder/class_builder.dart';
+import 'package:front_end/src/fasta/builder/library_builder.dart';
+import 'package:front_end/src/fasta/builder/member_builder.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
+import 'package:front_end/src/testing/id_testing_helper.dart';
+import 'package:front_end/src/testing/id_testing_utils.dart';
+import 'package:kernel/ast.dart' hide Arguments;
+
+Future<void> main(List<String> args) async {
+  enableMacros = true;
+
+  Directory dataDir =
+      new Directory.fromUri(Platform.script.resolve('data/tests'));
+  await runTests<Features>(dataDir,
+      args: args,
+      createUriForFileName: createUriForFileName,
+      onFailure: onFailure,
+      runTest: runTestFor(const MacroDataComputer(), [new MacroTestConfig()]));
+}
+
+class MacroTestConfig extends TestConfig {
+  MacroTestConfig()
+      : super(cfeMarker, 'cfe',
+            explicitExperimentalFlags: {ExperimentalFlag.macros: true},
+            packageConfigUri:
+                Platform.script.resolve('data/package_config.json'));
+
+  @override
+  TestMacroExecutor customizeCompilerOptions(
+      CompilerOptions options, TestData testData) {
+    TestMacroExecutor macroExecutor = new TestMacroExecutor();
+    options.macroExecutorProvider = () async => macroExecutor;
+    Uri precompiledPackage =
+        Uri.parse('package:precompiled_macro/precompiled_macro.dart');
+    options.precompiledMacroUris = {
+      precompiledPackage: dummyUri,
+    };
+    return macroExecutor;
+  }
+}
+
+class MacroDataComputer extends DataComputer<Features> {
+  const MacroDataComputer();
+
+  @override
+  void computeMemberData(TestResultData testResultData, Member member,
+      Map<Id, ActualData<Features>> actualMap,
+      {bool? verbose}) {
+    member.accept(new MacroDataExtractor(testResultData, actualMap));
+  }
+
+  @override
+  void computeClassData(TestResultData testResultData, Class cls,
+      Map<Id, ActualData<Features>> actualMap,
+      {bool? verbose}) {
+    new MacroDataExtractor(testResultData, actualMap).computeForClass(cls);
+  }
+
+  @override
+  void computeLibraryData(TestResultData testResultData, Library library,
+      Map<Id, ActualData<Features>> actualMap,
+      {bool? verbose}) {
+    new MacroDataExtractor(testResultData, actualMap)
+        .computeForLibrary(library);
+  }
+
+  @override
+  bool get supportsErrors => true;
+
+  @override
+  Features? computeErrorData(
+      TestResultData testResultData, Id id, List<FormattedMessage> errors) {
+    Features features = new Features();
+    features[Tags.error] = errorsToText(errors, useCodes: true);
+    return features;
+  }
+
+  @override
+  DataInterpreter<Features> get dataValidator =>
+      const FeaturesDataInterpreter();
+}
+
+class Tags {
+  static const String macrosAreAvailable = 'macrosAreAvailable';
+  static const String macrosAreApplied = 'macrosAreApplied';
+  static const String compilationSequence = 'compilationSequence';
+  static const String neededPrecompilations = 'neededPrecompilations';
+  static const String declaredMacros = 'declaredMacros';
+  static const String appliedMacros = 'appliedMacros';
+  static const String macroClassIds = 'macroClassIds';
+  static const String macroInstanceIds = 'macroInstanceIds';
+  static const String error = 'error';
+}
+
+String constructorNameToString(String constructorName) {
+  return constructorName == '' ? 'new' : constructorName;
+}
+
+String importUriToString(Uri importUri) {
+  if (importUri.isScheme('package')) {
+    return importUri.toString();
+  } else if (importUri.isScheme('dart')) {
+    return importUri.toString();
+  } else {
+    return importUri.pathSegments.last;
+  }
+}
+
+String libraryToString(Library library) => importUriToString(library.importUri);
+
+String strongComponentToString(Iterable<Uri> uris) {
+  List<String> list = uris.map(importUriToString).toList();
+  list.sort();
+  return list.join('|');
+}
+
+class MacroDataExtractor extends CfeDataExtractor<Features> {
+  final TestResultData testResultData;
+
+  MacroDataExtractor(
+      this.testResultData, Map<Id, ActualData<Features>> actualMap)
+      : super(testResultData.compilerResult, actualMap);
+
+  TestMacroExecutor get macroExecutor => testResultData.customData;
+
+  MacroDeclarationData get macroDeclarationData => testResultData.compilerResult
+      .kernelTargetForTesting!.loader.dataForTesting!.macroDeclarationData;
+
+  MacroApplicationDataForTesting get macroApplicationData => testResultData
+      .compilerResult
+      .kernelTargetForTesting!
+      .loader
+      .dataForTesting!
+      .macroApplicationData;
+
+  LibraryMacroApplicationData? getLibraryMacroApplicationData(Library library) {
+    for (MapEntry<LibraryBuilder, LibraryMacroApplicationData> entry
+        in macroApplicationData.libraryData.entries) {
+      if (entry.key.library == library) {
+        return entry.value;
+      }
+    }
+    return null;
+  }
+
+  ClassMacroApplicationData? getClassMacroApplicationData(Class cls) {
+    LibraryMacroApplicationData? applicationData =
+        getLibraryMacroApplicationData(cls.enclosingLibrary);
+    if (applicationData != null) {
+      for (MapEntry<ClassBuilder, ClassMacroApplicationData> entry
+          in applicationData.classData.entries) {
+        if (entry.key.cls == cls) {
+          return entry.value;
+        }
+      }
+    }
+    return null;
+  }
+
+  List<MacroApplication>? getClassMacroApplications(Class cls) {
+    return getClassMacroApplicationData(cls)?.classApplications;
+  }
+
+  List<MacroApplication>? getMemberMacroApplications(Member member) {
+    Class? enclosingClass = member.enclosingClass;
+    Map<MemberBuilder, List<MacroApplication>>? memberApplications;
+    if (enclosingClass != null) {
+      memberApplications =
+          getClassMacroApplicationData(enclosingClass)?.memberApplications;
+    } else {
+      memberApplications =
+          getLibraryMacroApplicationData(member.enclosingLibrary)
+              ?.memberApplications;
+    }
+    if (memberApplications != null) {
+      for (MapEntry<MemberBuilder, List<MacroApplication>> entry
+          in memberApplications.entries) {
+        if (entry.key.member == member) {
+          return entry.value;
+        }
+      }
+    }
+    return null;
+  }
+
+  void registerMacroApplications(
+      Features features, List<MacroApplication>? macroApplications) {
+    if (macroApplications != null) {
+      for (MacroApplication application in macroApplications) {
+        String className = application.classBuilder.name;
+        String constructorName =
+            constructorNameToString(application.constructorName);
+        features.addElement(
+            Tags.appliedMacros, '${className}.${constructorName}');
+      }
+    }
+  }
+
+  @override
+  Features computeClassValue(Id id, Class node) {
+    Features features = new Features();
+    if (getClassMacroApplicationData(node) != null) {
+      features.add(Tags.macrosAreApplied);
+    }
+    registerMacroApplications(features, getClassMacroApplications(node));
+    return features;
+  }
+
+  @override
+  Features computeLibraryValue(Id id, Library node) {
+    Features features = new Features();
+    if (macroDeclarationData.macrosAreAvailable) {
+      features.add(Tags.macrosAreAvailable);
+    }
+    if (node == compilerResult.component!.mainMethod!.enclosingLibrary) {
+      if (macroDeclarationData.compilationSequence != null) {
+        features.markAsUnsorted(Tags.compilationSequence);
+        for (List<Uri> component in macroDeclarationData.compilationSequence!) {
+          features.addElement(
+              Tags.compilationSequence, strongComponentToString(component));
+        }
+      }
+      for (Map<Uri, Map<String, List<String>>> precompilation
+          in macroDeclarationData.neededPrecompilations) {
+        Map<String, Map<String, List<String>>> converted =
+            new Map.fromIterables(precompilation.keys.map(importUriToString),
+                precompilation.values);
+        List<String> uris = converted.keys.toList()..sort();
+        StringBuffer sb = new StringBuffer();
+        for (String uri in uris) {
+          sb.write(uri);
+          sb.write('=');
+          Map<String, List<String>> macros = converted[uri]!;
+          List<String> classes = macros.keys.toList()..sort();
+          String delimiter = '';
+          for (String cls in classes) {
+            List<String> constructorNames =
+                macros[cls]!.map(constructorNameToString).toList()..sort();
+            sb.write(delimiter);
+            sb.write(cls);
+            sb.write('(');
+            sb.write(constructorNames.join('/'));
+            sb.write(')');
+            delimiter = '|';
+          }
+        }
+        features.addElement(Tags.neededPrecompilations, sb.toString());
+      }
+      for (_MacroClassIdentifier id in macroExecutor.macroClasses) {
+        features.addElement(Tags.macroClassIds, id.toText());
+      }
+      for (_MacroInstanceIdentifier id in macroExecutor.macroInstances) {
+        features.addElement(Tags.macroInstanceIds, id.toText());
+      }
+    }
+    List<String>? macroClasses =
+        macroDeclarationData.macroDeclarations[node.importUri];
+    if (macroClasses != null) {
+      for (String clsName in macroClasses) {
+        features.addElement(Tags.declaredMacros, clsName);
+      }
+    }
+    if (getLibraryMacroApplicationData(node) != null) {
+      features.add(Tags.macrosAreApplied);
+    }
+
+    return features;
+  }
+
+  @override
+  Features computeMemberValue(Id id, Member node) {
+    Features features = new Features();
+    registerMacroApplications(features, getMemberMacroApplications(node));
+    return features;
+  }
+}
+
+class TestMacroExecutor implements MacroExecutor {
+  List<_MacroClassIdentifier> macroClasses = [];
+  List<_MacroInstanceIdentifier> macroInstances = [];
+
+  @override
+  String buildAugmentationLibrary(
+      Iterable<MacroExecutionResult> macroResults,
+      ResolvedIdentifier Function(Identifier) resolveIdentifier,
+      TypeAnnotation? Function(OmittedTypeAnnotation) inferOmittedType,
+      {Map<OmittedTypeAnnotation, String>? omittedTypes}) {
+    return '';
+  }
+
+  @override
+  void close() {
+    // TODO: implement close
+  }
+
+  @override
+  Future<MacroExecutionResult> executeDeclarationsPhase(
+      MacroInstanceIdentifier macro,
+      Declaration declaration,
+      IdentifierResolver identifierResolver,
+      TypeResolver typeResolver,
+      ClassIntrospector classIntrospector) async {
+    return new _MacroExecutionResult();
+  }
+
+  @override
+  Future<MacroExecutionResult> executeDefinitionsPhase(
+      MacroInstanceIdentifier macro,
+      Declaration declaration,
+      IdentifierResolver identifierResolver,
+      TypeResolver typeResolver,
+      ClassIntrospector classIntrospector,
+      TypeDeclarationResolver typeDeclarationResolver,
+      TypeInferrer typeInferrer) async {
+    return new _MacroExecutionResult();
+  }
+
+  @override
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+      Declaration declaration, IdentifierResolver identifierResolver) async {
+    return new _MacroExecutionResult();
+  }
+
+  @override
+  Future<MacroInstanceIdentifier> instantiateMacro(
+      MacroClassIdentifier macroClass,
+      String constructor,
+      Arguments arguments) async {
+    _MacroInstanceIdentifier id = new _MacroInstanceIdentifier(
+        macroClass as _MacroClassIdentifier, constructor, arguments);
+    macroInstances.add(id);
+    return id;
+  }
+
+  @override
+  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+      {Uri? precompiledKernelUri}) async {
+    _MacroClassIdentifier id = new _MacroClassIdentifier(library, name);
+    macroClasses.add(id);
+    return id;
+  }
+}
+
+class _MacroClassIdentifier implements MacroClassIdentifier {
+  final Uri uri;
+  final String className;
+
+  _MacroClassIdentifier(this.uri, this.className);
+
+  String toText() => '${importUriToString(uri)}/${className}';
+
+  @override
+  int get hashCode => uri.hashCode * 13 + className.hashCode * 17;
+
+  @override
+  bool operator ==(Object other) {
+    if (identical(this, other)) return true;
+    return other is _MacroClassIdentifier &&
+        uri == other.uri &&
+        className == other.className;
+  }
+
+  @override
+  String toString() => 'MacroClassIdentifier($uri,$className)';
+
+  @override
+  void serialize(Serializer serializer) => throw UnimplementedError();
+}
+
+class _MacroInstanceIdentifier implements MacroInstanceIdentifier {
+  final _MacroClassIdentifier macroClass;
+  final String constructor;
+  final Arguments arguments;
+
+  _MacroInstanceIdentifier(this.macroClass, this.constructor, this.arguments);
+
+  String toText() => '${macroClass.toText()}/${constructor}()';
+
+  @override
+  void serialize(Serializer serializer) => throw UnimplementedError();
+
+  @override
+  bool shouldExecute(DeclarationKind declarationKind, Phase phase) => false;
+
+  @override
+  bool supportsDeclarationKind(DeclarationKind declarationKind) => false;
+}
+
+class _MacroExecutionResult implements MacroExecutionResult {
+  @override
+  Map<String, Iterable<DeclarationCode>> classAugmentations = const {};
+
+  @override
+  Iterable<DeclarationCode> libraryAugmentations = const [];
+
+  @override
+  Iterable<String> newTypeNames = const [];
+
+  @override
+  void serialize(Serializer serializer) {
+    throw UnimplementedError();
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/package_config.json b/pkg/front_end/test/macros/incremental/data/package_config.json
new file mode 100644
index 0000000..2e8365d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/package_config.json
@@ -0,0 +1,18 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "macro",
+      "rootUri": "pkgs/macro/lib/"
+    },
+    {
+      "name": "meta",
+      "rootUri": "../../../../../meta/",
+      "packageUri": "lib/"
+    },
+    {
+      "name": "_fe_analyzer_shared",
+      "rootUri": "../../../../../_fe_analyzer_shared/lib/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart
new file mode 100644
index 0000000..9b3df34
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/pkgs/macro/lib/macro.dart
@@ -0,0 +1,55 @@
+// 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:_fe_analyzer_shared/src/macros/api.dart';
+
+macro
+
+class ToStringMacro implements ClassDeclarationsMacro {
+  const ToStringMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    if (!methods.any((m) => m.identifier.name == 'toString')) {
+      Iterable<FieldDeclaration> fields = await builder.fieldsOf(clazz);
+      Uri dartCore = Uri.parse('dart:core');
+      Identifier stringClass =
+          await builder.resolveIdentifier(dartCore, 'String');
+      List<Object> parts = [stringClass, '''
+ toString() {
+    return "${clazz.identifier.name}('''
+      ];
+      String comma = '';
+      for (FieldDeclaration field in fields) {
+        parts.add(comma);
+        parts.add('${field.identifier.name}=\${');
+        parts.add(field.identifier.name);
+        parts.add('}');
+        comma = ',';
+      }
+      parts.add(''')";
+  }''');
+      builder.declareInClass(new DeclarationCode.fromParts(parts));
+    }
+  }
+}
+
+macro
+
+class InjectMacro implements ClassDeclarationsMacro {
+  const InjectMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    Iterable<MethodDeclaration> methods = await builder.methodsOf(clazz);
+    if (!methods.any((m) => m.identifier.name == 'injectedMethod')) {
+      builder.declareInClass(new DeclarationCode.fromString('''
+ void injectedMethod() {}'''));
+    }
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart
new file mode 100644
index 0000000..40eda1a
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart
@@ -0,0 +1,11 @@
+// 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:macro/macro.dart';
+
+class DataClass {
+  final String string;
+
+  DataClass({required this.string});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect
new file mode 100644
index 0000000..4b63cfd
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.0.dart.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+class DataClass extends core::Object {
+  final field core::String string;
+  constructor •({required core::String string = #C1}) → self::DataClass
+    : self::DataClass::string = string, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart
new file mode 100644
index 0000000..75ac97b
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart
@@ -0,0 +1,12 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class DataClass {
+  final String string;
+
+  DataClass({required this.string});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect
new file mode 100644
index 0000000..401567c
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.1.dart.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class DataClass extends core::Object {
+  final field core::String string;
+  constructor •({required core::String string = #C2}) → self::DataClass
+    : self::DataClass::string = string, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/data_class.dart-0 */ toString() → core::String {
+    return "DataClass(string=${this.{self::DataClass::string}{core::String}})";
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+  #C2 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart
new file mode 100644
index 0000000..7ae60b6
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.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.
+
+import 'package:macro/macro.dart';
+
+@ToStringMacro()
+class DataClass {
+  final String string;
+  final int integer;
+
+  DataClass({required this.string, required this.integer});
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect
new file mode 100644
index 0000000..bf0544d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/data_class.2.dart.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class DataClass extends core::Object {
+  final field core::String string;
+  final field core::int integer;
+  constructor •({required core::String string = #C2, required core::int integer = #C2}) → self::DataClass
+    : self::DataClass::string = string, self::DataClass::integer = integer, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/data_class.dart-0 */ toString() → core::String {
+    return "DataClass(string=${this.{self::DataClass::string}{core::String}},integer=${this.{self::DataClass::integer}{core::int}})";
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+  #C2 = null
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart
new file mode 100644
index 0000000..87a023f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart
@@ -0,0 +1,14 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class Class {
+  final int field;
+
+  Class(this.field);
+
+  void method() {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect
new file mode 100644
index 0000000..469fe1a
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.0.dart.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/in_body_change.dart-0 */ toString() → core::String {
+    return "Class(field=${this.{self::Class::field}{core::int}})";
+  }
+  method method() → void {}
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart
new file mode 100644
index 0000000..0b1a729
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart
@@ -0,0 +1,16 @@
+// 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:macro/macro.dart';
+
+@ToStringMacro()
+class Class {
+  final int field;
+
+  Class(this.field);
+
+  void method() {
+    print('method');
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect
new file mode 100644
index 0000000..f95a86f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/in_body_change.1.dart.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/in_body_change.dart-0 */ toString() → core::String {
+    return "Class(field=${this.{self::Class::field}{core::int}})";
+  }
+  method method() → void {
+    core::print("method");
+  }
+}
+
+constants  {
+  #C1 = #lib1::ToStringMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart
new file mode 100644
index 0000000..31bf8ab
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart
@@ -0,0 +1,10 @@
+// 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:macro/macro.dart';
+
+@InjectMacro()
+class Class {
+  void existingMethod() {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart.expect
new file mode 100644
index 0000000..a288219
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.0.dart.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/inject_macro.dart-0 */ injectedMethod() → void {}
+  method existingMethod() → void {}
+}
+
+constants  {
+  #C1 = #lib1::InjectMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart
new file mode 100644
index 0000000..d5aad15
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart
@@ -0,0 +1,12 @@
+// 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:macro/macro.dart';
+
+@InjectMacro()
+class Class {
+  void existingMethod() {
+    print('existingMethod');
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart.expect
new file mode 100644
index 0000000..20889b9
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/inject_macro.1.dart.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/inject_macro.dart-0 */ injectedMethod() → void {}
+  method existingMethod() → void {
+    core::print("existingMethod");
+  }
+}
+
+constants  {
+  #C1 = #lib1::InjectMacro {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart
new file mode 100644
index 0000000..a65202e
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.0.dart
@@ -0,0 +1,17 @@
+// 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:_fe_analyzer_shared/src/macros/api.dart';
+import 'macro_dependency.dart';
+
+macro
+
+class MethodMacro implements ClassDeclarationsMacro {
+  const MethodMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart
new file mode 100644
index 0000000..5cfce9f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro.1.dart
@@ -0,0 +1,19 @@
+// 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:_fe_analyzer_shared/src/macros/api.dart';
+import 'macro_dependency.dart';
+
+macro
+
+class MethodMacro implements ClassDeclarationsMacro {
+  const MethodMacro();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) async {
+    builder.declareInClass(new DeclarationCode.fromString(generateBody()));
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.0.dart
new file mode 100644
index 0000000..2e1634f
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.0.dart
@@ -0,0 +1,9 @@
+// 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.
+
+String generateBody() {
+  return '''
+  void method() {}
+''';
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.2.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.2.dart
new file mode 100644
index 0000000..6861d3d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/macro_dependency.2.dart
@@ -0,0 +1,11 @@
+// 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.
+
+String generateBody() {
+  return '''
+  void method() {
+    print('method');
+  }
+''';
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart
new file mode 100644
index 0000000..26d9e54
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.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.
+
+import 'macro.dart';
+import 'main_lib.dart';
+
+@MethodMacro()
+class Class {
+  void existingMethod() {
+    existingMethodDependency();
+  }
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect
new file mode 100644
index 0000000..9872609
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.0.dart.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "macro.dart" as mac;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-test:///a/b/c/user_macro/macro.dart";
+import "org-dartlang-test:///a/b/c/user_macro/main_lib.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    mai::existingMethodDependency();
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+
+static method existingMethodDependency() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mac;
+import "dart:core" as core;
+import "package:_fe_analyzer_shared/src/macros/api.dart" as api;
+
+import "dart:async";
+import "package:_fe_analyzer_shared/src/macros/api.dart";
+import "org-dartlang-test:///a/b/c/user_macro/macro_dependency.dart";
+
+macro class MethodMacro extends core::Object implements api::ClassDeclarationsMacro /*hasConstConstructor*/  {
+  const constructor •() → mac::MethodMacro
+    : super core::Object::•()
+    ;
+  @#C2
+  method buildDeclarationsForClass(api::ClassDeclaration clazz, api::ClassMemberDeclarationBuilder builder) → FutureOr<void> async /* futureValueType= void */ {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+static method generateBody() → core::String {
+  return "  void method() {}\n";
+}
+
+constants  {
+  #C1 = mac::MethodMacro {}
+  #C2 = dart.core::_Override {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect
new file mode 100644
index 0000000..c7ffa1c
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.1.dart.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "macro.dart" as mac;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-test:///a/b/c/user_macro/macro.dart";
+import "org-dartlang-test:///a/b/c/user_macro/main_lib.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/user_macro/main.dart-0 */ method() → void {}
+  method existingMethod() → void {
+    mai::existingMethodDependency();
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as mac;
+import "dart:core" as core;
+import "package:_fe_analyzer_shared/src/macros/api.dart" as api;
+import "macro_dependency.dart" as mac2;
+
+import "dart:async";
+import "package:_fe_analyzer_shared/src/macros/api.dart";
+import "org-dartlang-test:///a/b/c/user_macro/macro_dependency.dart";
+
+macro class MethodMacro extends core::Object implements api::ClassDeclarationsMacro /*hasConstConstructor*/  {
+  const constructor •() → mac::MethodMacro
+    : super core::Object::•()
+    ;
+  @#C2
+  method buildDeclarationsForClass(api::ClassDeclaration clazz, api::ClassMemberDeclarationBuilder builder) → FutureOr<void> async /* futureValueType= void */ {
+    builder.{api::ClassMemberDeclarationBuilder::declareInClass}(new api::DeclarationCode::fromString(mac2::generateBody())){(api::DeclarationCode) → void};
+  }
+}
+
+constants  {
+  #C1 = mac::MethodMacro {}
+  #C2 = dart.core::_Override {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.2.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.2.dart.expect
new file mode 100644
index 0000000..26e4a4d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.2.dart.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "macro.dart" as mac;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-test:///a/b/c/user_macro/macro.dart";
+import "org-dartlang-test:///a/b/c/user_macro/main_lib.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/user_macro/main.dart-0 */ method() → void {
+    core::print("method");
+  }
+  method existingMethod() → void {
+    mai::existingMethodDependency();
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as mac;
+import "dart:core" as core;
+import "package:_fe_analyzer_shared/src/macros/api.dart" as api;
+import "macro_dependency.dart" as mac2;
+
+import "dart:async";
+import "package:_fe_analyzer_shared/src/macros/api.dart";
+import "org-dartlang-test:///a/b/c/user_macro/macro_dependency.dart";
+
+macro class MethodMacro extends core::Object implements api::ClassDeclarationsMacro /*hasConstConstructor*/  {
+  const constructor •() → mac::MethodMacro
+    : super core::Object::•()
+    ;
+  @#C2
+  method buildDeclarationsForClass(api::ClassDeclaration clazz, api::ClassMemberDeclarationBuilder builder) → FutureOr<void> async /* futureValueType= void */ {
+    builder.{api::ClassMemberDeclarationBuilder::declareInClass}(new api::DeclarationCode::fromString(mac2::generateBody())){(api::DeclarationCode) → void};
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as mac2;
+import "dart:core" as core;
+
+static method generateBody() → core::String {
+  return "  void method() {\n    print('method');\n  }\n";
+}
+
+constants  {
+  #C1 = mac::MethodMacro {}
+  #C2 = dart.core::_Override {}
+}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.3.dart.expect b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.3.dart.expect
new file mode 100644
index 0000000..9e26179
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main.3.dart.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method existingMethodDependency() → void {
+  core::print("existingMethodDependency");
+}
+
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.0.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.0.dart
new file mode 100644
index 0000000..0dc9b98
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.0.dart
@@ -0,0 +1,5 @@
+// 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 existingMethodDependency() {}
diff --git a/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.3.dart b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.3.dart
new file mode 100644
index 0000000..d574b8d
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/data/tests/user_macro/main_lib.3.dart
@@ -0,0 +1,7 @@
+// 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 existingMethodDependency() {
+  print('existingMethodDependency');
+}
diff --git a/pkg/front_end/test/macros/incremental/incremental_macro_test.dart b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
new file mode 100644
index 0000000..6e38046
--- /dev/null
+++ b/pkg/front_end/test/macros/incremental/incremental_macro_test.dart
@@ -0,0 +1,180 @@
+// 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:io';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
+    as isolatedExecutor;
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
+import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
+import 'package:front_end/src/api_prototype/memory_file_system.dart';
+import 'package:front_end/src/base/processed_options.dart';
+import 'package:front_end/src/compute_platform_binaries_location.dart';
+import 'package:front_end/src/fasta/compiler_context.dart';
+import 'package:front_end/src/fasta/hybrid_file_system.dart';
+import 'package:front_end/src/fasta/incremental_compiler.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
+import 'package:front_end/src/isolate_macro_serializer.dart';
+import 'package:front_end/src/macro_serializer.dart';
+import 'package:front_end/src/testing/compiler_common.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/text/ast_to_text.dart';
+import 'package:vm/target/vm.dart';
+
+import '../../utils/kernel_chain.dart';
+
+Future<void> main(List<String> args) async {
+  Map<String, Test> tests = {};
+  Map<String, Map<Uri, Map<int, String>>> testData = {};
+  Directory dataDir =
+      new Directory.fromUri(Platform.script.resolve('data/tests'));
+
+  void addFile(Test? test, FileSystemEntity file, String fileName) {
+    if (file is! File || !fileName.endsWith('.dart')) {
+      return;
+    }
+    String testFileName = fileName.substring(0, fileName.length - 5);
+    int dotIndex = testFileName.lastIndexOf('.');
+    int index = 1;
+    if (dotIndex != -1) {
+      index = int.parse(testFileName.substring(dotIndex + 1));
+      testFileName = testFileName.substring(0, dotIndex);
+    }
+    String testName = testFileName;
+    testFileName += '.dart';
+    Uri uri = toTestUri(testFileName);
+    test ??= new Test(testName, uri);
+    tests[test.name] ??= test;
+    Map<Uri, Map<int, String>> updates = testData[test.name] ??= {};
+    (updates[uri] ??= {})[index] = file.readAsStringSync();
+  }
+
+  for (FileSystemEntity file in dataDir.listSync()) {
+    String fileName = file.uri.pathSegments.last;
+    if (file is Directory) {
+      Directory dir = file;
+      // Note that the last segment of a directory uri is the empty string!
+      String dirName = dir.uri.pathSegments[dir.uri.pathSegments.length - 2];
+      Test test = new Test('$dirName/main', toTestUri('$dirName/main.dart'));
+      for (FileSystemEntity file in dir.listSync()) {
+        addFile(test, file, '$dirName/${file.uri.pathSegments.last}');
+      }
+    } else {
+      addFile(null, file, fileName);
+    }
+  }
+
+  testData.forEach((String testName, Map<Uri, Map<int, String>> files) {
+    Test test = tests[testName]!;
+    Map<int, Map<Uri, String>> updatesMap = {};
+    files.forEach((Uri uri, Map<int, String> updates) {
+      test.uris.add(uri);
+      updates.forEach((int index, String source) {
+        (updatesMap[index] ??= {})[uri] = source;
+      });
+    });
+    for (int index in updatesMap.keys.toList()..sort()) {
+      test.updates.add(new TestUpdate(index, updatesMap[index]!));
+    }
+  });
+
+  args = args.toList();
+  bool generateExpectations = args.remove('-g');
+  enableMacros = true;
+  MacroSerializer macroSerializer = new IsolateMacroSerializer();
+  MemoryFileSystem memoryFileSystem = createMemoryFileSystem();
+  CompilerOptions compilerOptions = new CompilerOptions()
+    ..sdkRoot = computePlatformBinariesLocation(forceBuildDir: true)
+    ..packagesFileUri = Platform.script.resolve('data/package_config.json')
+    ..explicitExperimentalFlags = {
+      ExperimentalFlag.macros: true,
+      ExperimentalFlag.alternativeInvalidationStrategy: true,
+    }
+    ..macroSerializer = macroSerializer
+    ..precompiledMacroUris = {}
+    ..macroExecutorProvider = () async {
+      return await isolatedExecutor.start(SerializationMode.byteDataServer);
+    }
+    ..macroTarget = new VmTarget(new TargetFlags())
+    ..fileSystem = new HybridFileSystem(memoryFileSystem);
+
+  ProcessedOptions processedOptions =
+      new ProcessedOptions(options: compilerOptions);
+
+  await CompilerContext.runWithOptions(processedOptions,
+      (CompilerContext context) async {
+    IncrementalCompiler compiler = new IncrementalCompiler(context);
+    for (Test test in tests.values) {
+      if (args.isNotEmpty && !args.contains(test.name)) {
+        print('Skipped ${test.name}');
+        continue;
+      }
+      Uri entryPoint = test.entryPoint;
+      for (TestUpdate update in test.updates) {
+        print('Running ${test.name} update ${update.index}');
+        update.files.forEach((Uri uri, String source) {
+          memoryFileSystem.entityForUri(uri).writeAsStringSync(source);
+          compiler.invalidate(uri);
+        });
+        IncrementalCompilerResult incrementalCompilerResult =
+            await compiler.computeDelta(entryPoints: [entryPoint]);
+        Component component = incrementalCompilerResult.component;
+        StringBuffer buffer = new StringBuffer();
+        Printer printer = new Printer(buffer)
+          ..writeProblemsAsJson(
+              "Problems in component", component.problemsAsJson);
+        component.libraries.forEach((Library library) {
+          if (test.uris.contains(library.importUri)) {
+            printer.writeLibraryFile(library);
+            printer.endLine();
+          }
+        });
+        printer.writeConstantTable(component);
+        String actual = buffer.toString();
+        String expectationFileName = '${test.name}.${update.index}.dart.expect';
+        Uri expectedUri = dataDir.uri.resolve(expectationFileName);
+        File expectationFile = new File.fromUri(expectedUri);
+        if (expectationFile.existsSync()) {
+          String expected = expectationFile.readAsStringSync();
+          if (expected != actual) {
+            if (generateExpectations) {
+              expectationFile.writeAsStringSync(actual);
+            } else {
+              String diff = await runDiff(expectedUri, actual);
+              throw "${expectationFileName} don't match ${expectedUri}\n$diff";
+            }
+          }
+        } else if (generateExpectations) {
+          expectationFile.writeAsStringSync(actual);
+        } else {
+          throw 'Please use -g option to create file ${expectationFileName} '
+              'with this content:\n$actual';
+        }
+
+        /// Test serialization
+        writeComponentToBytes(component);
+      }
+    }
+  }, errorOnMissingInput: false);
+  await macroSerializer.close();
+}
+
+class Test {
+  final String name;
+  final Uri entryPoint;
+  final Set<Uri> uris = {};
+  final List<TestUpdate> updates = [];
+
+  Test(this.name, this.entryPoint);
+}
+
+class TestUpdate {
+  final int index;
+  final Map<Uri, String> files;
+
+  TestUpdate(this.index, this.files);
+}
diff --git a/pkg/front_end/test/macros/macro_api_test.dart b/pkg/front_end/test/macros/macro_api_test.dart
new file mode 100644
index 0000000..1392e5f
--- /dev/null
+++ b/pkg/front_end/test/macros/macro_api_test.dart
@@ -0,0 +1,48 @@
+// 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:io' show Platform;
+
+import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
+    as isolatedExecutor;
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:expect/expect.dart';
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
+import 'package:front_end/src/api_prototype/front_end.dart';
+import 'package:front_end/src/compute_platform_binaries_location.dart';
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
+import 'package:front_end/src/isolate_macro_serializer.dart';
+import 'package:front_end/src/macro_serializer.dart';
+import 'package:front_end/src/testing/id_testing_helper.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:vm/target/vm.dart';
+
+Future<void> main(List<String> args) async {
+  enableMacros = true;
+
+  MacroSerializer macroSerializer = new IsolateMacroSerializer();
+  try {
+    CompilerOptions options = new CompilerOptions();
+    options.sdkRoot = computePlatformBinariesLocation();
+    options.environmentDefines = {};
+    options.explicitExperimentalFlags[ExperimentalFlag.macros] = true;
+    options.packagesFileUri = Platform.script.resolve(
+        '../../../_fe_analyzer_shared/test/macros/api/package_config.json');
+    options.macroExecutorProvider = () async {
+      return await isolatedExecutor.start(SerializationMode.byteDataServer);
+    };
+    options.precompiledMacroUris = {};
+    options.target = options.macroTarget = new VmTarget(new TargetFlags());
+    options.macroSerializer = macroSerializer;
+
+    InternalCompilerResult result = await kernelForProgramInternal(
+        Platform.script.resolve(
+            '../../../_fe_analyzer_shared/test/macros/api/api_test_data.dart'),
+        options,
+        retainDataForTesting: true) as InternalCompilerResult;
+    Expect.isFalse(result.kernelTargetForTesting!.loader.hasSeenError);
+  } finally {
+    await macroSerializer.close();
+  }
+}
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
deleted file mode 100644
index 01f9653..0000000
--- a/pkg/front_end/test/macros/macro_test.dart
+++ /dev/null
@@ -1,413 +0,0 @@
-// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io' show Directory, Platform;
-
-import 'package:_fe_analyzer_shared/src/macros/api.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
-import 'package:_fe_analyzer_shared/src/testing/features.dart';
-import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
-import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
-import 'package:front_end/src/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/experimental_flags.dart';
-import 'package:front_end/src/fasta/builder/class_builder.dart';
-import 'package:front_end/src/fasta/builder/library_builder.dart';
-import 'package:front_end/src/fasta/builder/member_builder.dart';
-import 'package:front_end/src/fasta/kernel/macro.dart';
-import 'package:front_end/src/testing/id_testing_helper.dart';
-import 'package:front_end/src/testing/id_testing_utils.dart';
-import 'package:kernel/ast.dart' hide Arguments;
-
-Future<void> main(List<String> args) async {
-  enableMacros = true;
-
-  Directory dataDir =
-      new Directory.fromUri(Platform.script.resolve('data/tests'));
-  await runTests<Features>(dataDir,
-      args: args,
-      createUriForFileName: createUriForFileName,
-      onFailure: onFailure,
-      runTest: runTestFor(const MacroDataComputer(), [new MacroTestConfig()]));
-}
-
-class MacroTestConfig extends TestConfig {
-  MacroTestConfig()
-      : super(cfeMarker, 'cfe',
-            explicitExperimentalFlags: {ExperimentalFlag.macros: true},
-            packageConfigUri:
-                Platform.script.resolve('data/package_config.json'));
-
-  @override
-  TestMacroExecutor customizeCompilerOptions(
-      CompilerOptions options, TestData testData) {
-    TestMacroExecutor macroExecutor = new TestMacroExecutor();
-    options.macroExecutorProvider = () async => macroExecutor;
-    Uri precompiledPackage =
-        Uri.parse('package:precompiled_macro/precompiled_macro.dart');
-    options.precompiledMacroUris = {
-      new MacroClass(precompiledPackage, 'PrecompiledMacro'): dummyUri,
-    };
-    return macroExecutor;
-  }
-}
-
-class MacroDataComputer extends DataComputer<Features> {
-  const MacroDataComputer();
-
-  @override
-  void computeMemberData(TestResultData testResultData, Member member,
-      Map<Id, ActualData<Features>> actualMap,
-      {bool? verbose}) {
-    member.accept(new MacroDataExtractor(testResultData, actualMap));
-  }
-
-  @override
-  void computeClassData(TestResultData testResultData, Class cls,
-      Map<Id, ActualData<Features>> actualMap,
-      {bool? verbose}) {
-    new MacroDataExtractor(testResultData, actualMap).computeForClass(cls);
-  }
-
-  @override
-  void computeLibraryData(TestResultData testResultData, Library library,
-      Map<Id, ActualData<Features>> actualMap,
-      {bool? verbose}) {
-    new MacroDataExtractor(testResultData, actualMap)
-        .computeForLibrary(library);
-  }
-
-  @override
-  bool get supportsErrors => true;
-
-  @override
-  Features? computeErrorData(
-      TestResultData testResultData, Id id, List<FormattedMessage> errors) {
-    Features features = new Features();
-    features[Tags.error] = errorsToText(errors, useCodes: true);
-    return features;
-  }
-
-  @override
-  DataInterpreter<Features> get dataValidator =>
-      const FeaturesDataInterpreter();
-}
-
-class Tags {
-  static const String macrosAreAvailable = 'macrosAreAvailable';
-  static const String macrosAreApplied = 'macrosAreApplied';
-  static const String compilationSequence = 'compilationSequence';
-  static const String neededPrecompilations = 'neededPrecompilations';
-  static const String declaredMacros = 'declaredMacros';
-  static const String appliedMacros = 'appliedMacros';
-  static const String macroClassIds = 'macroClassIds';
-  static const String macroInstanceIds = 'macroInstanceIds';
-  static const String error = 'error';
-}
-
-String constructorNameToString(String constructorName) {
-  return constructorName == '' ? 'new' : constructorName;
-}
-
-String importUriToString(Uri importUri) {
-  if (importUri.isScheme('package')) {
-    return importUri.toString();
-  } else if (importUri.isScheme('dart')) {
-    return importUri.toString();
-  } else {
-    return importUri.pathSegments.last;
-  }
-}
-
-String libraryToString(Library library) => importUriToString(library.importUri);
-
-String strongComponentToString(Iterable<Uri> uris) {
-  List<String> list = uris.map(importUriToString).toList();
-  list.sort();
-  return list.join('|');
-}
-
-class MacroDataExtractor extends CfeDataExtractor<Features> {
-  final TestResultData testResultData;
-
-  MacroDataExtractor(
-      this.testResultData, Map<Id, ActualData<Features>> actualMap)
-      : super(testResultData.compilerResult, actualMap);
-
-  TestMacroExecutor get macroExecutor => testResultData.customData;
-
-  MacroDeclarationData get macroDeclarationData => testResultData.compilerResult
-      .kernelTargetForTesting!.loader.dataForTesting!.macroDeclarationData;
-
-  MacroApplicationDataForTesting get macroApplicationData => testResultData
-      .compilerResult
-      .kernelTargetForTesting!
-      .loader
-      .dataForTesting!
-      .macroApplicationData;
-
-  LibraryMacroApplicationData? getLibraryMacroApplicationData(Library library) {
-    for (MapEntry<LibraryBuilder, LibraryMacroApplicationData> entry
-        in macroApplicationData.libraryData.entries) {
-      if (entry.key.library == library) {
-        return entry.value;
-      }
-    }
-    return null;
-  }
-
-  ClassMacroApplicationData? getClassMacroApplicationData(Class cls) {
-    LibraryMacroApplicationData? applicationData =
-        getLibraryMacroApplicationData(cls.enclosingLibrary);
-    if (applicationData != null) {
-      for (MapEntry<ClassBuilder, ClassMacroApplicationData> entry
-          in applicationData.classData.entries) {
-        if (entry.key.cls == cls) {
-          return entry.value;
-        }
-      }
-    }
-    return null;
-  }
-
-  List<MacroApplication>? getClassMacroApplications(Class cls) {
-    return getClassMacroApplicationData(cls)?.classApplications;
-  }
-
-  List<MacroApplication>? getMemberMacroApplications(Member member) {
-    Class? enclosingClass = member.enclosingClass;
-    Map<MemberBuilder, List<MacroApplication>>? memberApplications;
-    if (enclosingClass != null) {
-      memberApplications =
-          getClassMacroApplicationData(enclosingClass)?.memberApplications;
-    } else {
-      memberApplications =
-          getLibraryMacroApplicationData(member.enclosingLibrary)
-              ?.memberApplications;
-    }
-    if (memberApplications != null) {
-      for (MapEntry<MemberBuilder, List<MacroApplication>> entry
-          in memberApplications.entries) {
-        if (entry.key.member == member) {
-          return entry.value;
-        }
-      }
-    }
-    return null;
-  }
-
-  void registerMacroApplications(
-      Features features, List<MacroApplication>? macroApplications) {
-    if (macroApplications != null) {
-      for (MacroApplication application in macroApplications) {
-        String className = application.classBuilder.name;
-        String constructorName =
-            constructorNameToString(application.constructorName);
-        features.addElement(
-            Tags.appliedMacros, '${className}.${constructorName}');
-      }
-    }
-  }
-
-  @override
-  Features computeClassValue(Id id, Class node) {
-    Features features = new Features();
-    if (getClassMacroApplicationData(node) != null) {
-      features.add(Tags.macrosAreApplied);
-    }
-    registerMacroApplications(features, getClassMacroApplications(node));
-    return features;
-  }
-
-  @override
-  Features computeLibraryValue(Id id, Library node) {
-    Features features = new Features();
-    if (macroDeclarationData.macrosAreAvailable) {
-      features.add(Tags.macrosAreAvailable);
-    }
-    if (node == compilerResult.component!.mainMethod!.enclosingLibrary) {
-      if (macroDeclarationData.compilationSequence != null) {
-        features.markAsUnsorted(Tags.compilationSequence);
-        for (List<Uri> component in macroDeclarationData.compilationSequence!) {
-          features.addElement(
-              Tags.compilationSequence, strongComponentToString(component));
-        }
-      }
-      for (Map<Uri, Map<String, List<String>>> precompilation
-          in macroDeclarationData.neededPrecompilations) {
-        Map<String, Map<String, List<String>>> converted =
-            new Map.fromIterables(precompilation.keys.map(importUriToString),
-                precompilation.values);
-        List<String> uris = converted.keys.toList()..sort();
-        StringBuffer sb = new StringBuffer();
-        for (String uri in uris) {
-          sb.write(uri);
-          sb.write('=');
-          Map<String, List<String>> macros = converted[uri]!;
-          List<String> classes = macros.keys.toList()..sort();
-          String delimiter = '';
-          for (String cls in classes) {
-            List<String> constructorNames =
-                macros[cls]!.map(constructorNameToString).toList()..sort();
-            sb.write(delimiter);
-            sb.write(cls);
-            sb.write('(');
-            sb.write(constructorNames.join('/'));
-            sb.write(')');
-            delimiter = '|';
-          }
-        }
-        features.addElement(Tags.neededPrecompilations, sb.toString());
-      }
-      for (_MacroClassIdentifier id in macroExecutor.macroClasses) {
-        features.addElement(Tags.macroClassIds, id.toText());
-      }
-      for (_MacroInstanceIdentifier id in macroExecutor.macroInstances) {
-        features.addElement(Tags.macroInstanceIds, id.toText());
-      }
-    }
-    List<String>? macroClasses =
-        macroDeclarationData.macroDeclarations[node.importUri];
-    if (macroClasses != null) {
-      for (String clsName in macroClasses) {
-        features.addElement(Tags.declaredMacros, clsName);
-      }
-    }
-    if (getLibraryMacroApplicationData(node) != null) {
-      features.add(Tags.macrosAreApplied);
-    }
-
-    return features;
-  }
-
-  @override
-  Features computeMemberValue(Id id, Member node) {
-    Features features = new Features();
-    registerMacroApplications(features, getMemberMacroApplications(node));
-    return features;
-  }
-}
-
-class TestMacroExecutor implements MacroExecutor {
-  List<_MacroClassIdentifier> macroClasses = [];
-  List<_MacroInstanceIdentifier> macroInstances = [];
-
-  @override
-  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
-      ResolvedIdentifier Function(Identifier) resolveIdentifier) {
-    return '';
-  }
-
-  @override
-  void close() {
-    // TODO: implement close
-  }
-
-  @override
-  Future<MacroExecutionResult> executeDeclarationsPhase(
-      MacroInstanceIdentifier macro,
-      Declaration declaration,
-      IdentifierResolver identifierResolver,
-      TypeResolver typeResolver,
-      ClassIntrospector classIntrospector) async {
-    return new _MacroExecutionResult();
-  }
-
-  @override
-  Future<MacroExecutionResult> executeDefinitionsPhase(
-      MacroInstanceIdentifier macro,
-      Declaration declaration,
-      IdentifierResolver identifierResolver,
-      TypeResolver typeResolver,
-      ClassIntrospector classIntrospector,
-      TypeDeclarationResolver typeDeclarationResolver) async {
-    return new _MacroExecutionResult();
-  }
-
-  @override
-  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
-      Declaration declaration, IdentifierResolver identifierResolver) async {
-    return new _MacroExecutionResult();
-  }
-
-  @override
-  Future<MacroInstanceIdentifier> instantiateMacro(
-      MacroClassIdentifier macroClass,
-      String constructor,
-      Arguments arguments) async {
-    _MacroInstanceIdentifier id = new _MacroInstanceIdentifier(
-        macroClass as _MacroClassIdentifier, constructor, arguments);
-    macroInstances.add(id);
-    return id;
-  }
-
-  @override
-  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
-      {Uri? precompiledKernelUri}) async {
-    _MacroClassIdentifier id = new _MacroClassIdentifier(library, name);
-    macroClasses.add(id);
-    return id;
-  }
-}
-
-class _MacroClassIdentifier implements MacroClassIdentifier {
-  final Uri uri;
-  final String className;
-
-  _MacroClassIdentifier(this.uri, this.className);
-
-  String toText() => '${importUriToString(uri)}/${className}';
-
-  @override
-  int get hashCode => uri.hashCode * 13 + className.hashCode * 17;
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-    return other is _MacroClassIdentifier &&
-        uri == other.uri &&
-        className == other.className;
-  }
-
-  @override
-  String toString() => 'MacroClassIdentifier($uri,$className)';
-
-  @override
-  void serialize(Serializer serializer) => throw UnimplementedError();
-}
-
-class _MacroInstanceIdentifier implements MacroInstanceIdentifier {
-  final _MacroClassIdentifier macroClass;
-  final String constructor;
-  final Arguments arguments;
-
-  _MacroInstanceIdentifier(this.macroClass, this.constructor, this.arguments);
-
-  String toText() => '${macroClass.toText()}/${constructor}()';
-
-  @override
-  void serialize(Serializer serializer) => throw UnimplementedError();
-
-  @override
-  bool shouldExecute(DeclarationKind declarationKind, Phase phase) => false;
-
-  @override
-  bool supportsDeclarationKind(DeclarationKind declarationKind) => false;
-}
-
-class _MacroExecutionResult implements MacroExecutionResult {
-  @override
-  Map<String, Iterable<DeclarationCode>> classAugmentations = const {};
-
-  @override
-  Iterable<DeclarationCode> libraryAugmentations = const [];
-
-  @override
-  Iterable<String> newTypeNames = const [];
-
-  @override
-  void serialize(Serializer serializer) {
-    throw UnimplementedError();
-  }
-}
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 3c015f1..0e24107 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -1321,15 +1321,14 @@
   @override
   Token parseConstructorReference(
       Token token, ConstructorReferenceContext constructorReferenceContext,
-      [TypeParamOrArgInfo? typeArg, bool isImplicitTypeName = false]) {
+      [TypeParamOrArgInfo? typeArg]) {
     doPrint('parseConstructorReference('
         '$token, '
         '$constructorReferenceContext, '
-        '$typeArg, '
-        '$isImplicitTypeName)');
+        '$typeArg)');
     indent++;
-    var result = super.parseConstructorReference(
-        token, constructorReferenceContext, typeArg, isImplicitTypeName);
+    var result = super
+        .parseConstructorReference(token, constructorReferenceContext, typeArg);
     indent--;
     return result;
   }
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index f1532f1..099e6f8 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -22,10 +22,12 @@
 acov
 across
 activated
+actively
 adequate
 adi
 advantage
 affecting
+affords
 afterwards
 agree
 agreeing
@@ -121,6 +123,7 @@
 binds
 bj
 bk
+blend
 blindly
 blob
 blobs
@@ -141,6 +144,7 @@
 brevity
 brianwilkerson
 bridge
+bridges
 bs
 bsd
 bslash
@@ -241,6 +245,7 @@
 connectivity
 consideration
 constness
+constraining
 consult
 consumers
 container
@@ -276,6 +281,7 @@
 customized
 cut
 cwd
+cyclical
 cyclically
 d
 dace
@@ -315,6 +321,8 @@
 demangle
 demangled
 dep
+depended
+dependency's
 deps
 dereferencing
 deregister
@@ -336,6 +344,7 @@
 dictates
 diff
 differs
+difficult
 diffs
 digest
 digests
@@ -428,7 +437,9 @@
 exp
 expando
 expense
+experimentation
 explaining
+explore
 exportable
 exportee
 exportees
@@ -491,6 +502,7 @@
 fourth
 framework
 freely
+freshly
 frontend
 frontends
 fs
@@ -627,6 +639,7 @@
 interior
 interleaved
 intermediate
+internet
 interpolations
 interrupted
 intersects
@@ -639,6 +652,7 @@
 ints
 invariants
 io
+ipv
 isolate
 isolated
 isolates
@@ -668,6 +682,7 @@
 kallentu
 kb
 kernel's
+kick
 kill
 klass
 kmillikin
@@ -721,6 +736,7 @@
 logged
 logically
 lookahead
+loopback
 lots
 lp
 lparen
@@ -805,6 +821,7 @@
 nominality
 nonexistent
 nonimplementation
+nonzero
 norm
 normalization
 notifier
@@ -954,6 +971,7 @@
 pulled
 pure
 puts
+pv
 q
 q'i
 qi
@@ -1012,6 +1030,7 @@
 recompiling
 recompute
 recomputed
+reconciliation
 reconstruct
 recorder
 recoveries
@@ -1026,6 +1045,7 @@
 reexports
 ref
 refactoring
+refined
 reflect
 reflectee
 reflective
@@ -1107,6 +1127,7 @@
 say
 sb
 sc
+scc
 scheglov
 scoped
 scoping
@@ -1201,6 +1222,7 @@
 stability
 stacktrace
 stacktraces
+stages
 stale
 stand
 starter
@@ -1247,6 +1269,7 @@
 substed
 substitutes
 substitutor
+suffixing
 suggests
 suite
 sum
@@ -1276,6 +1299,8 @@
 taking
 talk
 talks
+tarjan
+tarjan's
 tb
 team
 tearoff
@@ -1362,6 +1387,7 @@
 unconstrained
 undeclare
 undergo
+undermine
 undo
 undoable
 unequal
@@ -1429,6 +1455,7 @@
 vb
 vector
 vegorov
+verbatim
 verbosity
 versa
 versus
@@ -1446,6 +1473,8 @@
 vtab
 w
 waiting
+walker
+walking
 wanting
 wants
 waste
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index e442d51..c09bea1 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -47,6 +47,7 @@
 accounted
 accumulate
 accurate
+accurately
 achieve
 act
 acting
@@ -489,6 +490,7 @@
 closures
 clue
 code
+coerce
 coincides
 coinductively
 collapses
@@ -744,6 +746,8 @@
 declarations
 declare
 declared
+declarer
+declarers
 declares
 declaring
 decode
@@ -1201,6 +1205,7 @@
 filtered
 filtering
 final
+finalizable
 finalization
 finalize
 finalized
@@ -2022,6 +2027,7 @@
 nullable
 num
 number
+numbering
 numbers
 numeric
 object
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 664608e..329dc17 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -50,6 +50,7 @@
 loadlibrary
 macro
 migrate
+n
 name.#name
 name.stack
 nameokempty
@@ -68,11 +69,13 @@
 patch(es)
 placing
 pubspec.yaml
+r
 re
 sdksummary
 size
 solutions
 stacktrace
+stand
 staticinterop
 stringokempty
 struct<#name
@@ -80,6 +83,7 @@
 super.namedconstructor
 superinterface
 supermixin
+t
 team
 this.namedconstructor
 this.x
diff --git a/pkg/front_end/test/static_types/data/for_in.dart b/pkg/front_end/test/static_types/data/for_in.dart
index 922bee5..6974c3c 100644
--- a/pkg/front_end/test/static_types/data/for_in.dart
+++ b/pkg/front_end/test/static_types/data/for_in.dart
@@ -48,7 +48,7 @@
   }
 }
 
-/*cfe:nnbd.member: asyncForInDynamicStream:futureValueType=dynamic*/
+/*member: asyncForInDynamicStream:futureValueType=dynamic*/
 asyncForInDynamicStream(dynamic stream) async {
   /*current: dynamic*/
   await for (var e in
@@ -59,7 +59,7 @@
   }
 }
 
-/*cfe:nnbd.member: asyncForInDynamic:futureValueType=dynamic*/
+/*member: asyncForInDynamic:futureValueType=dynamic*/
 asyncForInDynamic(Stream<dynamic> stream) async {
   /*current: dynamic*/
   await for (var e in
@@ -70,7 +70,7 @@
   }
 }
 
-/*cfe:nnbd.member: asyncForInInt:futureValueType=dynamic*/
+/*member: asyncForInInt:futureValueType=dynamic*/
 asyncForInInt(Stream<int> stream) async {
   /*cfe.current: int*/
   /*cfe:nnbd.current: int!*/
@@ -84,7 +84,7 @@
   }
 }
 
-/*cfe:nnbd.member: asyncForInIntToNum:futureValueType=dynamic*/
+/*member: asyncForInIntToNum:futureValueType=dynamic*/
 asyncForInIntToNum(Stream<int> stream) async {
   /*cfe.current: int*/
   /*cfe:nnbd.current: int!*/
@@ -119,7 +119,7 @@
   Iterator<int> get iterator;
 }
 
-/*cfe:nnbd.member: customStream:futureValueType=dynamic*/
+/*member: customStream:futureValueType=dynamic*/
 customStream(CustomStream stream) async {
   /*cfe.current: num*/
   /*cfe:nnbd.current: num!*/
@@ -158,7 +158,7 @@
   CustomIterator get iterator;
 }
 
-/*cfe:nnbd.member: customStreamIterator:futureValueType=dynamic*/
+/*member: customStreamIterator:futureValueType=dynamic*/
 customStreamIterator(StreamWithCustomIterator stream) async {
   /*cfe.current: num*/
   /*cfe:nnbd.current: num!*/
@@ -183,7 +183,7 @@
   }
 }
 
-/*cfe:nnbd.member: genericStream:futureValueType=void*/
+/*member: genericStream:futureValueType=void*/
 void genericStream<T extends Stream<T>>(T x) async {
   /*cfe.current: T*/
   /*cfe:nnbd.current: T!*/
diff --git a/pkg/front_end/test/static_types/data/future_value_type.dart b/pkg/front_end/test/static_types/data/future_value_type.dart
index f9ba684..ca6cc92 100644
--- a/pkg/front_end/test/static_types/data/future_value_type.dart
+++ b/pkg/front_end/test/static_types/data/future_value_type.dart
@@ -9,50 +9,53 @@
 import 'dart:async';
 
 /*cfe:nnbd.member: declaredFutureInt:futureValueType=int!*/
+/*cfe.member: declaredFutureInt:futureValueType=int*/
 Future<int> declaredFutureInt() async {
   return
       /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
 }
 
 /*cfe:nnbd.member: declaredFutureOrInt:futureValueType=int!*/
+/*cfe.member: declaredFutureOrInt:futureValueType=int*/
 FutureOr<int> declaredFutureOrInt() async {
   return
       /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
 }
 
 /*cfe:nnbd.member: declaredObject:futureValueType=Object?*/
+/*cfe.member: declaredObject:futureValueType=Object*/
 Object declaredObject() async {
   return
       /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
 }
 
-/*cfe:nnbd.member: omitted:futureValueType=dynamic*/
+/*member: omitted:futureValueType=dynamic*/
 omitted() async {}
 
-/*cfe:nnbd.member: method:futureValueType=dynamic*/
+/*member: method:futureValueType=dynamic*/
 method() async {
   /*cfe:nnbd.futureValueType=int!*/
-  Future<int> declaredLocalFutureInt() async {
+  /*cfe.futureValueType=int*/Future<int> declaredLocalFutureInt() async {
     return
         /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
   }
 
   /*cfe:nnbd.futureValueType=int!*/
-  FutureOr<int> declaredLocalFutureOrInt() async {
+  /*cfe.futureValueType=int*/FutureOr<int> declaredLocalFutureOrInt() async {
     return
         /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
   }
 
   /*cfe:nnbd.futureValueType=Object?*/
-  Object declaredLocalObject() async {
+  /*cfe.futureValueType=Object*/Object declaredLocalObject() async {
     return
         /*cfe.int*/ /*cfe:nnbd.int!*/ 0;
   }
 
-  /*cfe:nnbd.futureValueType=Null*/ omittedLocal() async {}
+  /*futureValueType=Null*/omittedLocal() async {}
 
   Future<int> inferredCalledFutureInt =
-      /*cfe.Future<int> Function()*/
+      /*cfe.Future<int> Function(),futureValueType=int*/
       /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
       () async {
     return
@@ -63,7 +66,7 @@
           ();
 
   FutureOr<int> inferredCalledFutureOrInt =
-      /*cfe.Future<int> Function()*/
+      /*cfe.Future<int> Function(),futureValueType=int*/
       /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
       () async {
     return
@@ -74,7 +77,7 @@
           ();
 
   Future<int> Function() inferredFutureInt =
-      /*cfe.Future<int> Function()*/
+      /*cfe.Future<int> Function(),futureValueType=int*/
       /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
       () async {
     return
@@ -82,7 +85,7 @@
   };
 
   FutureOr<int> Function() inferredFutureOrInt =
-      /*cfe.Future<int> Function()*/
+      /*cfe.Future<int> Function(),futureValueType=int*/
       /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
       () async {
     return
@@ -90,7 +93,7 @@
   };
 
   Object Function() inferredInt =
-      /*cfe.Future<int> Function()*/
+      /*cfe.Future<int> Function(),futureValueType=int*/
       /*cfe:nnbd.Future<int!>! Function()!,futureValueType=int!*/
       () async {
     return
@@ -98,7 +101,7 @@
   };
 
   Object Function() inferredNull =
-      /*cfe.Future<Null> Function()*/
+      /*cfe.Future<Null> Function(),futureValueType=Null*/
       /*cfe:nnbd.Future<Null>! Function()!,futureValueType=Null*/
       () async {
     return
@@ -106,7 +109,7 @@
   };
 
   Object Function() inferredEmpty =
-      /*cfe.Future<Null> Function()*/
+      /*cfe.Future<Null> Function(),futureValueType=Null*/
       /*cfe:nnbd.Future<Null>! Function()!,futureValueType=Null*/
       () async {};
 }
diff --git a/pkg/front_end/test/vm_service_helper.dart b/pkg/front_end/test/vm_service_helper.dart
index f2d3cb6..ac33557 100644
--- a/pkg/front_end/test/vm_service_helper.dart
+++ b/pkg/front_end/test/vm_service_helper.dart
@@ -166,10 +166,10 @@
         .transform(utf8.decoder)
         .transform(new LineSplitter())
         .listen((line) {
-      const kObservatoryListening = 'Observatory listening on ';
-      if (line.startsWith(kObservatoryListening)) {
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      if (line.startsWith(kDartVMServiceListening)) {
         Uri observatoryUri =
-            Uri.parse(line.substring(kObservatoryListening.length));
+            Uri.parse(line.substring(kDartVMServiceListening.length));
         _setupAndRun(observatoryUri).catchError((e, st) {
           // Manually kill the process or it will leak,
           // see http://dartbug.com/42918
diff --git a/pkg/front_end/test/weekly_tester.dart b/pkg/front_end/test/weekly_tester.dart
index 077210e..5f52e98 100644
--- a/pkg/front_end/test/weekly_tester.dart
+++ b/pkg/front_end/test/weekly_tester.dart
@@ -169,7 +169,7 @@
       .transform(new LineSplitter())
       .listen((line) {
     print("$id stderr> $line");
-    if (line.contains("Observatory listening on")) {
+    if (line.contains("The Dart VM service is listening on")) {
       observatoryLines.add(line);
     }
   });
@@ -178,7 +178,7 @@
       .transform(new LineSplitter())
       .listen((line) {
     print("$id stdout> $line");
-    if (line.contains("Observatory listening on")) {
+    if (line.contains("The Dart VM service is listening on")) {
       observatoryLines.add(line);
     }
   });
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
index 4acef90..a55684b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
index e793729..149333a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.strong.transformed.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
index 841838c..7093a76 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
index 742d873..0b49573 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.transformed.expect
@@ -61,7 +61,7 @@
     return new self::Class::•<self::Class::fact::T%>(field);
   static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
     return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
   static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
     return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
index cc59901..f707639 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.strong.transformed.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
index 8c398fe..00b5a13 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
index cc59901..f707639 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.transformed.expect
@@ -23,20 +23,20 @@
     ;
   static method _#_#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
-  static factory •([core::int field = #C3]) → self::Class1
+  static factory •([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
   static method _#new#tearOff([core::int field = #C2]) → self::Class1
     return new self::Class1::_(field);
 }
 class Class2 extends core::Object {
   final field core::int field;
-  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
   constructor _({core::int field = #C2}) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
   static method _#_#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
-  static factory •({core::int field = #C3}) → self::Class2
+  static factory •({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
   static method _#new#tearOff({core::int field = #C2}) → self::Class2
     return new self::Class2::_(field: field);
@@ -47,7 +47,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → void {
-  ([core::int]) → self::Class1 f1a = #C5;
+  ([core::int]) → self::Class1 f1a = #C4;
   self::Class1 c1a = f1a(){([core::int]) → self::Class1};
   self::expect(42, c1a.{self::Class1::field}{core::int});
   self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
@@ -58,13 +58,13 @@
     f1a(42, 87); // error
        ^" in f1a{<inapplicable>}.(42, 87);
   };
-  dynamic f1b = #C5;
+  dynamic f1b = #C4;
   dynamic c1c = f1b{dynamic}.call();
   self::expect(42, c1c{dynamic}.field);
   dynamic c1d = f1b{dynamic}.call(87);
   self::expect(87, c1d{dynamic}.field);
   self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
-  ({field: core::int}) → self::Class2 f2a = #C6;
+  ({field: core::int}) → self::Class2 f2a = #C5;
   self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
   self::expect(42, c2a.{self::Class2::field}{core::int});
   self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
@@ -75,7 +75,7 @@
     f2a(87); // error
        ^" in f2a{<inapplicable>}.(87);
   };
-  dynamic f2b = #C6;
+  dynamic f2b = #C5;
   dynamic c2c = f2b{dynamic}.call();
   self::expect(42, c2c{dynamic}.field);
   dynamic c2d = f2b{dynamic}.call(field: 87);
@@ -86,7 +86,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C6}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -103,9 +103,8 @@
 constants  {
   #C1 = constructor-tearoff self::Class1::•
   #C2 = 42
-  #C3 = null
-  #C4 = constructor-tearoff self::Class2::•
-  #C5 = static-tearoff self::Class1::_#new#tearOff
-  #C6 = static-tearoff self::Class2::_#new#tearOff
-  #C7 = false
+  #C3 = constructor-tearoff self::Class2::•
+  #C4 = static-tearoff self::Class1::_#new#tearOff
+  #C5 = static-tearoff self::Class2::_#new#tearOff
+  #C6 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
index aa4af4d..80d7fd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.strong.transformed.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
index aa8c2df..f53573a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
index aa4af4d..80d7fd2 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.transformed.expect
@@ -52,11 +52,11 @@
     ;
   static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+  static factory redirectPositionalSame([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
   static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
     return new self::Class1::positional(field1, field2);
-  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+  static factory redirectPositionalFewer1([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
   static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
     return new self::Class1::positional(field1);
@@ -66,19 +66,19 @@
     return new self::Class1::positional();
   static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedSame({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
   static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field1: field1, field2: field2);
-  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedReorder({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
   static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field2: field2, field1: field1);
-  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+  static factory redirectNamedFewer1({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
   static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
     return new self::Class1::named(field1: field1);
-  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+  static factory redirectNamedFewer2({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
   static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
     return new self::Class1::named(field2: field2);
@@ -93,7 +93,7 @@
   self::testDefaultValues();
 }
 static method testDefaultValues() → dynamic {
-  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  ([core::int, core::int]) → self::Class1 f1a = #C11;
   self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
   self::expect(1, c1a.{self::Class1::field1}{core::int});
   self::expect(2, c1a.{self::Class1::field2}{core::int});
@@ -103,7 +103,7 @@
   self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
   self::expect(42, c1c.{self::Class1::field1}{core::int});
   self::expect(87, c1c.{self::Class1::field2}{core::int});
-  ([core::int]) → self::Class1 f1b = #C13;
+  ([core::int]) → self::Class1 f1b = #C12;
   self::Class1 c1d = f1b(){([core::int]) → self::Class1};
   self::expect(1, c1d.{self::Class1::field1}{core::int});
   self::expect(2, c1d.{self::Class1::field2}{core::int});
@@ -116,7 +116,7 @@
     f1b(42, 87); // error
        ^" in f1b{<inapplicable>}.(42, 87);
   };
-  () → self::Class1 f1c = #C14;
+  () → self::Class1 f1c = #C13;
   self::Class1 c1f = f1c(){() → self::Class1};
   self::expect(1, c1f.{self::Class1::field1}{core::int});
   self::expect(2, c1f.{self::Class1::field2}{core::int});
@@ -130,7 +130,7 @@
     f1c(42, 87); // error
        ^" in f1c{<inapplicable>}.(42, 87);
   };
-  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C14;
   self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c2a.{self::Class1::field1}{core::int});
   self::expect(2, c2a.{self::Class1::field2}{core::int});
@@ -146,7 +146,7 @@
   self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c2e.{self::Class1::field1}{core::int});
   self::expect(87, c2e.{self::Class1::field2}{core::int});
-  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C15;
   self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(1, c3a.{self::Class1::field1}{core::int});
   self::expect(2, c3a.{self::Class1::field2}{core::int});
@@ -162,7 +162,7 @@
   self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
   self::expect(42, c3e.{self::Class1::field1}{core::int});
   self::expect(87, c3e.{self::Class1::field2}{core::int});
-  ({field1: core::int}) → self::Class1 f2c = #C17;
+  ({field1: core::int}) → self::Class1 f2c = #C16;
   self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
   self::expect(1, c4a.{self::Class1::field1}{core::int});
   self::expect(2, c4a.{self::Class1::field2}{core::int});
@@ -174,7 +174,7 @@
     f2c(field1: 42, field2: 87); // error
                     ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
   };
-  ({field2: core::int}) → self::Class1 f2d = #C18;
+  ({field2: core::int}) → self::Class1 f2d = #C17;
   self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
   self::expect(1, c5a.{self::Class1::field1}{core::int});
   self::expect(2, c5a.{self::Class1::field2}{core::int});
@@ -186,7 +186,7 @@
     f2d(field1: 42, field2: 87); // error
         ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
   };
-  () → self::Class1 f2e = #C19;
+  () → self::Class1 f2e = #C18;
   self::Class1 c6a = f2e(){() → self::Class1};
   self::expect(1, c6a.{self::Class1::field1}{core::int});
   self::expect(2, c6a.{self::Class1::field2}{core::int});
@@ -206,7 +206,7 @@
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C19}) → dynamic {
   try {
     f(){() → dynamic};
   }
@@ -231,14 +231,13 @@
   #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
   #C9 = 1
   #C10 = 2
-  #C11 = null
-  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
-  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
-  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
-  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
-  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
-  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
-  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
-  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
-  #C20 = false
+  #C11 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C12 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C19 = false
 }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
index 713b894..3175a4a 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
index e1f62d1..9913373 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.strong.transformed.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
index 911cbda..2a8a57e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
index ec985b8..7444b65 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
     ;
   static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
     return new self::Class::•<self::Class::fact::T%>(field);
-  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::redirectingFactory::T%>
     return new self::Class::•<self::Class::redirectingFactory::T%>(field);
 }
 abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart
new file mode 100644
index 0000000..25589b4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart
@@ -0,0 +1,57 @@
+// 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.
+
+enum E1 {
+  element;
+
+  void foo(); // Error.
+}
+
+enum E2 {
+  element;
+
+  int get foo; // Error.
+}
+
+enum E3 {
+  element;
+
+  void set foo(int val); // Error.
+}
+
+abstract class InterfaceMethod {
+  void foo();
+}
+
+enum E4 implements InterfaceMethod { // Error.
+  element
+}
+
+abstract class InterfaceGetter {
+  int get foo;
+}
+
+enum E5 implements InterfaceGetter { // Error.
+  element
+}
+
+abstract class InterfaceSetter {
+  void set foo(int val);
+}
+
+enum E6 implements InterfaceSetter { // Error.
+  element
+}
+
+mixin MethodImplementation {
+  void foo() {}
+}
+
+enum E7 with MethodImplementation {
+  element;
+
+  void foo(); // Ok.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.expect
new file mode 100644
index 0000000..01185de
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImplementation /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method foo() → void
+    return super.{self::MethodImplementation::foo}();
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&MethodImplementation::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///abstract_members.dart:
+- E1. (from org-dartlang-testcase:///abstract_members.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///abstract_members.dart:11:6)
+- E3. (from org-dartlang-testcase:///abstract_members.dart:17:6)
+- E4. (from org-dartlang-testcase:///abstract_members.dart:27:6)
+- E5. (from org-dartlang-testcase:///abstract_members.dart:35:6)
+- E6. (from org-dartlang-testcase:///abstract_members.dart:43:6)
+- E7. (from org-dartlang-testcase:///abstract_members.dart:51:6)
+- _E7&_Enum&MethodImplementation. (from org-dartlang-testcase:///abstract_members.dart:51:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..7bc3967
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.strong.transformed.expect
@@ -0,0 +1,189 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+abstract class _E7&_Enum&MethodImplementation extends core::_Enum implements self::MethodImplementation /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  method foo() → void {}
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&MethodImplementation::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///abstract_members.dart:
+- E1. (from org-dartlang-testcase:///abstract_members.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///abstract_members.dart:11:6)
+- E3. (from org-dartlang-testcase:///abstract_members.dart:17:6)
+- E4. (from org-dartlang-testcase:///abstract_members.dart:27:6)
+- E5. (from org-dartlang-testcase:///abstract_members.dart:35:6)
+- E6. (from org-dartlang-testcase:///abstract_members.dart:43:6)
+- E7. (from org-dartlang-testcase:///abstract_members.dart:51:6)
+- _E7&_Enum&MethodImplementation. (from org-dartlang-testcase:///abstract_members.dart:51:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline.expect
new file mode 100644
index 0000000..f15df76
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline.expect
@@ -0,0 +1,47 @@
+enum E1 {
+  element;
+
+  void foo();
+}
+
+enum E2 {
+  element;
+
+  int get foo;
+}
+
+enum E3 {
+  element;
+
+  void set foo(int val);
+}
+
+abstract class InterfaceMethod {
+  void foo();
+}
+
+enum E4 implements InterfaceMethod { element }
+
+abstract class InterfaceGetter {
+  int get foo;
+}
+
+enum E5 implements InterfaceGetter { element }
+
+abstract class InterfaceSetter {
+  void set foo(int val);
+}
+
+enum E6 implements InterfaceSetter { element }
+
+mixin MethodImplementation {
+  void foo() {}
+}
+
+enum E7 with MethodImplementation {
+  element;
+
+  void foo();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7f0a7bd
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.textual_outline_modelled.expect
@@ -0,0 +1,46 @@
+abstract class InterfaceGetter {
+  int get foo;
+}
+
+abstract class InterfaceMethod {
+  void foo();
+}
+
+abstract class InterfaceSetter {
+  void set foo(int val);
+}
+
+enum E1 {
+  element;
+
+  void foo();
+}
+
+enum E2 {
+  element;
+
+  int get foo;
+}
+
+enum E3 {
+  element;
+
+  void set foo(int val);
+}
+
+enum E4 implements InterfaceMethod { element }
+
+enum E5 implements InterfaceGetter { element }
+
+enum E6 implements InterfaceSetter { element }
+
+enum E7 with MethodImplementation {
+  element;
+
+  void foo();
+}
+
+main() {}
+mixin MethodImplementation {
+  void foo() {}
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.expect
new file mode 100644
index 0000000..6548f65
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImplementation /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method foo() → void
+    return super.{self::MethodImplementation::foo}();
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&MethodImplementation::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///abstract_members.dart:
+- E1. (from org-dartlang-testcase:///abstract_members.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///abstract_members.dart:11:6)
+- E3. (from org-dartlang-testcase:///abstract_members.dart:17:6)
+- E4. (from org-dartlang-testcase:///abstract_members.dart:27:6)
+- E5. (from org-dartlang-testcase:///abstract_members.dart:35:6)
+- E6. (from org-dartlang-testcase:///abstract_members.dart:43:6)
+- E7. (from org-dartlang-testcase:///abstract_members.dart:51:6)
+- _E7&_Enum&MethodImplementation. (from org-dartlang-testcase:///abstract_members.dart:51:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.modular.expect
new file mode 100644
index 0000000..6548f65
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.modular.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImplementation /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method foo() → void
+    return super.{self::MethodImplementation::foo}();
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&MethodImplementation::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///abstract_members.dart:
+- E1. (from org-dartlang-testcase:///abstract_members.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///abstract_members.dart:11:6)
+- E3. (from org-dartlang-testcase:///abstract_members.dart:17:6)
+- E4. (from org-dartlang-testcase:///abstract_members.dart:27:6)
+- E5. (from org-dartlang-testcase:///abstract_members.dart:35:6)
+- E6. (from org-dartlang-testcase:///abstract_members.dart:43:6)
+- E7. (from org-dartlang-testcase:///abstract_members.dart:51:6)
+- _E7&_Enum&MethodImplementation. (from org-dartlang-testcase:///abstract_members.dart:51:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.outline.expect
new file mode 100644
index 0000000..ea495c1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.outline.expect
@@ -0,0 +1,173 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void
+    ;
+}
+abstract class _E7&_Enum&MethodImplementation = core::_Enum with self::MethodImplementation /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method foo() → void
+    return super.{self::MethodImplementation::foo}();
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:17:6 -> ListConstant(const <E3*>[const E3{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:18:3 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:27:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:28:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:35:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:36:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:43:6 -> ListConstant(const <E6*>[const E6{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:44:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:51:6 -> ListConstant(const <E7*>[const E7{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///abstract_members.dart:52:3 -> InstanceConstant(const E7{})
+Extra constant evaluation: evaluated: 50, effectively constant: 14
diff --git a/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..08739b0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/abstract_members.dart.weak.transformed.expect
@@ -0,0 +1,189 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:8:8: Error: Enums can't declare abstract members.
+//   void foo(); // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:14:11: Error: Enums can't declare abstract members.
+//   int get foo; // Error.
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:20:12: Error: Enums can't declare abstract members.
+//   void set foo(int val); // Error.
+//            ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:27:6: Error: The non-abstract class 'E4' is missing implementations for these members:
+//  - InterfaceMethod.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E4 implements InterfaceMethod { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:24:8: Context: 'InterfaceMethod.foo' is defined here.
+//   void foo();
+//        ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:35:6: Error: The non-abstract class 'E5' is missing implementations for these members:
+//  - InterfaceGetter.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E5 implements InterfaceGetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:32:11: Context: 'InterfaceGetter.foo' is defined here.
+//   int get foo;
+//           ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:43:6: Error: The non-abstract class 'E6' is missing implementations for these members:
+//  - InterfaceSetter.foo=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// enum E6 implements InterfaceSetter { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/abstract_members.dart:40:12: Context: 'InterfaceSetter.foo=' is defined here.
+//   void set foo(int val);
+//            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract get foo() → core::int;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  abstract set foo(core::int val) → void;
+}
+abstract class InterfaceMethod extends core::Object {
+  synthetic constructor •() → self::InterfaceMethod
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+}
+class E4 extends core::_Enum implements self::InterfaceMethod /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceGetter extends core::Object {
+  synthetic constructor •() → self::InterfaceGetter
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::int;
+}
+class E5 extends core::_Enum implements self::InterfaceGetter /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class InterfaceSetter extends core::Object {
+  synthetic constructor •() → self::InterfaceSetter
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int val) → void;
+}
+class E6 extends core::_Enum implements self::InterfaceSetter /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class MethodImplementation extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+abstract class _E7&_Enum&MethodImplementation extends core::_Enum implements self::MethodImplementation /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&MethodImplementation
+    : super core::_Enum::•(index, _name)
+    ;
+  method foo() → void {}
+}
+class E7 extends self::_E7&_Enum&MethodImplementation /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&MethodImplementation::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  abstract method foo() → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///abstract_members.dart:
+- E1. (from org-dartlang-testcase:///abstract_members.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///abstract_members.dart:11:6)
+- E3. (from org-dartlang-testcase:///abstract_members.dart:17:6)
+- E4. (from org-dartlang-testcase:///abstract_members.dart:27:6)
+- E5. (from org-dartlang-testcase:///abstract_members.dart:35:6)
+- E6. (from org-dartlang-testcase:///abstract_members.dart:43:6)
+- E7. (from org-dartlang-testcase:///abstract_members.dart:51:6)
+- _E7&_Enum&MethodImplementation. (from org-dartlang-testcase:///abstract_members.dart:51:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
index 7840205..3b2e796 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -99,7 +99,7 @@
                    ^";
   static factory f5() → self::E
     return self::E::f();
-  static factory f6(core::int value) → self::E
+  static factory f6(core::int value = #C11) → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:28:29: Error: The constructor function type 'E Function()' isn't a subtype of 'E Function(int)'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/constructor_calls.dart'.
   factory E.f6(int value) = E.f; // Error.
@@ -129,7 +129,7 @@
 Try using a constructor or factory that is 'const'.
   const E.f(); // Error.
         ^";
-  #C11;
+  #C12;
 }
 static method main() → dynamic {}
 
@@ -144,7 +144,8 @@
   #C8 = constructor-tearoff self::E::f4
   #C9 = constructor-tearoff self::E::f5
   #C10 = constructor-tearoff self::E::f6
-  #C11 = constructor-tearoff self::E::f
+  #C11 = null
+  #C12 = constructor-tearoff self::E::f
 }
 
 
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart
new file mode 100644
index 0000000..dbad564
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart
@@ -0,0 +1,23 @@
+// 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.
+
+enum E1 {
+  element;
+
+  bool operator==(Object other) => true; // Error.
+}
+
+enum E2 {
+  element;
+
+  bool operator==(Object other); // Ok.
+}
+
+abstract class I3 {
+  bool operator==(Object other);
+}
+
+enum E3 implements I3 { element } // Ok.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect
new file mode 100644
index 0000000..b0f0e52
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect
new file mode 100644
index 0000000..b0f0e52
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.strong.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect
new file mode 100644
index 0000000..22f42d5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+enum E1 {
+  element;
+
+  bool operator ==(Object other) => true;
+}
+
+enum E2 {
+  element;
+
+  bool operator ==(Object other);
+}
+
+abstract class I3 {
+  bool operator ==(Object other);
+}
+
+enum E3 implements I3 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a705c86
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class I3 {
+  bool operator ==(Object other);
+}
+
+enum E1 {
+  element;
+
+  bool operator ==(Object other) => true;
+}
+
+enum E2 {
+  element;
+
+  bool operator ==(Object other);
+}
+
+enum E3 implements I3 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect
new file mode 100644
index 0000000..9e49691
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_equals.dart:21:6 -> ListConstant(const <E3*>[const E3{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_equals.dart:21:25 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 21, effectively constant: 6
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect
new file mode 100644
index 0000000..e9a2e61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_equals.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_equals.dart:8:16: Error: An enum can't declare a non-abstract member named '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class I3 extends core::Object {
+  synthetic constructor •() → self::I3
+    : super core::Object::•()
+    ;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E3 extends core::_Enum implements self::I3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_equals.dart:
+- E1. (from org-dartlang-testcase:///declared_equals.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_equals.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_equals.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart
new file mode 100644
index 0000000..2630888
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart
@@ -0,0 +1,89 @@
+// 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.
+
+enum E1 {
+  element;
+
+  int get hashCode => 42; // Error.
+}
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo"; // Error.
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42; // Error.
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => []; // Error.
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42; // Error.
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2; // Error.
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {} // Ok.
+
+  int get hashCode; // Ok.
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {} // Error.
+}
+
+enum E9 {
+  element;
+
+  double get hashCode; // Error.
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42; // Error.
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {} // Error.
+}
+
+enum E12 {
+  hashCode // Error.
+}
+
+abstract class I13 {
+  int get hashCode;
+}
+
+enum E13 implements I13 { element } // Ok.
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E14 implements I14 { element } // Error.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect
new file mode 100644
index 0000000..b907c0c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.strong.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect
new file mode 100644
index 0000000..b68bbf2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline.expect
@@ -0,0 +1,82 @@
+enum E1 {
+  element;
+
+  int get hashCode => 42;
+}
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {}
+  int get hashCode;
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get hashCode;
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {}
+}
+
+enum E12 { hashCode }
+
+abstract class I13 {
+  int get hashCode;
+}
+
+enum E13 implements I13 { element }
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E14 implements I14 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..808b575
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.textual_outline_modelled.expect
@@ -0,0 +1,82 @@
+abstract class I13 {
+  int get hashCode;
+}
+
+abstract class I14 {
+  Never get hashCode;
+}
+
+enum E1 {
+  element;
+
+  int get hashCode => 42;
+}
+
+enum E10 {
+  element;
+
+  static int get hashCode => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set hashCode(int value) {}
+}
+
+enum E12 { hashCode }
+
+enum E13 implements I13 { element }
+
+enum E14 implements I14 { element }
+
+enum E2 {
+  element;
+
+  String get hashCode => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int hashCode = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> hashCode() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get hashCode => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, hashCode = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set hashCode(int value) {}
+  int get hashCode;
+}
+
+enum E8 {
+  element;
+
+  void set hashCode(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get hashCode;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect
new file mode 100644
index 0000000..8f3f873
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect
new file mode 100644
index 0000000..8f3f873
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.modular.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int hashCode = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int hashCode = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void {}
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 hashCode = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {hashCode:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, hashCode:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "hashCode"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_hashcode.dart:
+- E1. (from org-dartlang-testcase:///declared_hashcode.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_hashcode.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_hashcode.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_hashcode.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_hashcode.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_hashcode.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_hashcode.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_hashcode.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_hashcode.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_hashcode.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_hashcode.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_hashcode.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_hashcode.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_hashcode.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect
new file mode 100644
index 0000000..d6594a4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart.weak.outline.expect
@@ -0,0 +1,301 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:8:11: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   int get hashCode => 42; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   String get hashCode => "foo"; // Error.
+//              ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:20:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int hashCode = 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:32:13: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   Never get hashCode => throw 42; // Error.
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:38:22: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   final int foo = 0, hashCode = 1, bar = 2; // Error.
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: An enum can't declare a non-abstract member named 'hashCode'.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> hashCode() => []; // Error.
+//                ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get hashCode => 42; // Error.
+//                  ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set hashCode(int value) {} // Error.
+//                   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   hashCode // Error.
+//   ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the inherited member.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:14:14: Error: The return type of the method 'E2.hashCode' is 'String', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   String get hashCode => "foo"; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:52:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'String' of the setter 'E8.hashCode'.
+//   void set hashCode(String value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Error: The return type of the method 'E9.hashCode' is 'double', which does not match the return type, 'int', of the overridden method, 'Object.hashCode'.
+// Change to a subtype of 'int'.
+//   double get hashCode; // Error.
+//              ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the overridden method ('hashCode').
+//   int get hashCode => _getHash(this);
+//           ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:55:6: Error: The implementation of 'hashCode' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.hashCode'.
+// Change to a subtype of 'double'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:58:14: Context: This is the overridden method ('hashCode').
+//   double get hashCode; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:87:6: Error: The implementation of 'hashCode' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: The return type of the method 'Object.hashCode' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.hashCode'.
+// Change to a subtype of 'Never'.
+//   int get hashCode => _getHash(this);
+//           ^
+// pkg/front_end/testcases/enhanced_enums/declared_hashcode.dart:84:13: Context: This is the overridden method ('hashCode').
+//   Never get hashCode;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::int
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → core::String
+    ;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  final field core::int hashCode;
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method hashCode() → core::List<core::String>
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get hashCode() → Never
+    ;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  final field core::int foo;
+  final field core::int hashCode;
+  final field core::int bar;
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::int value) → void
+    ;
+  abstract get hashCode() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set hashCode(core::String value) → void
+    ;
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get hashCode() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get hashCode() → core::int
+    ;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
+  static const field self::E11 element = const self::E11::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set hashCode(core::int value) → void
+    ;
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = const <self::E12>[self::E12::hashCode];
+  static const field self::E12 hashCode = const self::E12::•(0, "hashCode");
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    ;
+  abstract get hashCode() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
+  static const field self::E13 element = const self::E13::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    ;
+  abstract get hashCode() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
+  static const field self::E14 element = const self::E14::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get hashCode() → Never; -> self::I14::hashCode
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:17:6 -> ListConstant(const <E3*>[const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:18:3 -> InstanceConstant(const E3{E3.hashCode: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:23:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:24:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:29:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:30:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:35:6 -> ListConstant(const <E6*>[const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:36:3 -> InstanceConstant(const E6{E6.foo: null, E6.hashCode: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:41:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:42:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:49:6 -> ListConstant(const <E8*>[const E8{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:50:3 -> InstanceConstant(const E8{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:55:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:56:3 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:61:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:62:3 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:67:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:68:3 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:73:6 -> ListConstant(const <E12*>[const E12{_Enum.index: 0, _Enum._name: "hashCode"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:74:3 -> InstanceConstant(const E12{_Enum.index: 0, _Enum._name: "hashCode"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:81:6 -> ListConstant(const <E13*>[const E13{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:81:27 -> InstanceConstant(const E13{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_hashcode.dart:87:6 -> ListConstant(const <E14*>[const E14{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_hashcode.dart:87:27 -> InstanceConstant(const E14{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 98, effectively constant: 28
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart b/pkg/front_end/testcases/enhanced_enums/declared_index.dart
new file mode 100644
index 0000000..db6042d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart
@@ -0,0 +1,89 @@
+// 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.
+
+enum E1 {
+  element;
+
+  int get index => 42; // Error.
+}
+
+enum E2 {
+  element;
+
+  String get index => "foo"; // Error.
+}
+
+enum E3 {
+  element;
+
+  final int index = 42; // Error.
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => []; // Error.
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42; // Error.
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2; // Error.
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {} // Ok.
+
+  int get index; // Ok.
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {} // Error.
+}
+
+enum E9 {
+  element;
+
+  double get index; // Error.
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42; // Error.
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {} // Error.
+}
+
+enum E12 {
+  index // Error.
+}
+
+abstract class I13 {
+  int get index;
+}
+
+enum E13 implements I13 { element } // Ok.
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E14 implements I14 { element } // Error.
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect
new file mode 100644
index 0000000..63126a8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.strong.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect
new file mode 100644
index 0000000..2b8d9c5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline.expect
@@ -0,0 +1,82 @@
+enum E1 {
+  element;
+
+  int get index => 42;
+}
+
+enum E2 {
+  element;
+
+  String get index => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int index = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {}
+  int get index;
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get index;
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {}
+}
+
+enum E12 { index }
+
+abstract class I13 {
+  int get index;
+}
+
+enum E13 implements I13 { element }
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E14 implements I14 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b6960cf
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.textual_outline_modelled.expect
@@ -0,0 +1,82 @@
+abstract class I13 {
+  int get index;
+}
+
+abstract class I14 {
+  Never get index;
+}
+
+enum E1 {
+  element;
+
+  int get index => 42;
+}
+
+enum E10 {
+  element;
+
+  static int get index => 42;
+}
+
+enum E11 {
+  element;
+
+  static void set index(int value) {}
+}
+
+enum E12 { index }
+
+enum E13 implements I13 { element }
+
+enum E14 implements I14 { element }
+
+enum E2 {
+  element;
+
+  String get index => "foo";
+}
+
+enum E3 {
+  element;
+
+  final int index = 42;
+}
+
+enum E4 {
+  element;
+
+  List<String> index() => [];
+}
+
+enum E5 {
+  element;
+
+  Never get index => throw 42;
+}
+
+enum E6 {
+  element;
+
+  final int foo = 0, index = 1, bar = 2;
+}
+
+enum E7 {
+  element;
+
+  void set index(int value) {}
+  int get index;
+}
+
+enum E8 {
+  element;
+
+  void set index(String value) {}
+}
+
+enum E9 {
+  element;
+
+  double get index;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect
new file mode 100644
index 0000000..22e1547
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect
new file mode 100644
index 0000000..22e1547
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.modular.expect
@@ -0,0 +1,324 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    return 42;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    return "foo";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C9;
+  final field core::int index = 42;
+  static const field self::E3 element = #C8;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C11;
+  static const field self::E4 element = #C10;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    return <core::String>[];
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C13;
+  static const field self::E5 element = #C12;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    return throw 42;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C17;
+  final field core::int foo = 0;
+  final field core::int index = 1;
+  final field core::int bar = 2;
+  static const field self::E6 element = #C16;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C19;
+  static const field self::E7 element = #C18;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void {}
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = #C21;
+  static const field self::E8 element = #C20;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void {}
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C23;
+  static const field self::E9 element = #C22;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C25;
+  static const field self::E10 element = #C24;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    return 42;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C27;
+  static const field self::E11 element = #C26;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void {}
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C30;
+  static const field self::E12 index = #C29;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = #C32;
+  static const field self::E13 element = #C31;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    : super core::Object::•()
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = #C34;
+  static const field self::E14 element = #C33;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = 42
+  #C8 = self::E3 {index:#C7, index:#C1, _name:#C2}
+  #C9 = <self::E3*>[#C8]
+  #C10 = self::E4 {index:#C1, _name:#C2}
+  #C11 = <self::E4*>[#C10]
+  #C12 = self::E5 {index:#C1, _name:#C2}
+  #C13 = <self::E5*>[#C12]
+  #C14 = 1
+  #C15 = 2
+  #C16 = self::E6 {foo:#C1, index:#C14, bar:#C15, index:#C1, _name:#C2}
+  #C17 = <self::E6*>[#C16]
+  #C18 = self::E7 {index:#C1, _name:#C2}
+  #C19 = <self::E7*>[#C18]
+  #C20 = self::E8 {index:#C1, _name:#C2}
+  #C21 = <self::E8*>[#C20]
+  #C22 = self::E9 {index:#C1, _name:#C2}
+  #C23 = <self::E9*>[#C22]
+  #C24 = self::E10 {index:#C1, _name:#C2}
+  #C25 = <self::E10*>[#C24]
+  #C26 = self::E11 {index:#C1, _name:#C2}
+  #C27 = <self::E11*>[#C26]
+  #C28 = "index"
+  #C29 = self::E12 {index:#C1, _name:#C28}
+  #C30 = <self::E12*>[#C29]
+  #C31 = self::E13 {index:#C1, _name:#C2}
+  #C32 = <self::E13*>[#C31]
+  #C33 = self::E14 {index:#C1, _name:#C2}
+  #C34 = <self::E14*>[#C33]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_index.dart:
+- E1. (from org-dartlang-testcase:///declared_index.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///declared_index.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_index.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_index.dart:23:6)
+- E5. (from org-dartlang-testcase:///declared_index.dart:29:6)
+- E6. (from org-dartlang-testcase:///declared_index.dart:35:6)
+- E7. (from org-dartlang-testcase:///declared_index.dart:41:6)
+- E8. (from org-dartlang-testcase:///declared_index.dart:49:6)
+- E9. (from org-dartlang-testcase:///declared_index.dart:55:6)
+- E10. (from org-dartlang-testcase:///declared_index.dart:61:6)
+- E11. (from org-dartlang-testcase:///declared_index.dart:67:6)
+- E12. (from org-dartlang-testcase:///declared_index.dart:73:6)
+- E13. (from org-dartlang-testcase:///declared_index.dart:81:6)
+- E14. (from org-dartlang-testcase:///declared_index.dart:87:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect
new file mode 100644
index 0000000..9546bff
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_index.dart.weak.outline.expect
@@ -0,0 +1,301 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:8:11: Error: An enum can't declare a non-abstract member named 'index'.
+//   int get index => 42; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: An enum can't declare a non-abstract member named 'index'.
+//   String get index => "foo"; // Error.
+//              ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:20:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int index = 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: An enum can't declare a non-abstract member named 'index'.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:32:13: Error: An enum can't declare a non-abstract member named 'index'.
+//   Never get index => throw 42; // Error.
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:38:22: Error: An enum can't declare a non-abstract member named 'index'.
+//   final int foo = 0, index = 1, bar = 2; // Error.
+//                      ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: An enum can't declare a non-abstract member named 'index'.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:26:16: Error: Can't declare a member that conflicts with an inherited one.
+//   List<String> index() => []; // Error.
+//                ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:64:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get index => 42; // Error.
+//                  ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:70:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set index(int value) {} // Error.
+//                   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:74:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index // Error.
+//   ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:14:14: Error: The return type of the method 'E2.index' is 'String', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   String get index => "foo"; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:52:12: Error: The type 'int' of the inherited field '_Enum.index' is not a subtype of the type 'String' of the setter 'E8.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:101:13: Context: This is the declaration of the field '_Enum.index'.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Error: The return type of the method 'E9.index' is 'double', which does not match the return type, 'int', of the overridden method, '_Enum.index'.
+// Change to a subtype of 'int'.
+//   double get index; // Error.
+//              ^
+// sdk/lib/core/enum.dart:101:13: Context: This is the overridden method ('index').
+//   final int index;
+//             ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:55:6: Error: The implementation of 'index' in the non-abstract class 'E9' does not conform to its interface.
+// enum E9 {
+//      ^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'double', of the overridden method, 'E9.index'.
+// Change to a subtype of 'double'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:58:14: Context: This is the overridden method ('index').
+//   double get index; // Error.
+//              ^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:87:6: Error: The implementation of 'index' in the non-abstract class 'E14' does not conform to its interface.
+// enum E14 implements I14 { element } // Error.
+//      ^^^
+// sdk/lib/core/enum.dart:101:13: Context: The return type of the method '_Enum.index' is 'int', which does not match the return type, 'Never', of the overridden method, 'I14.index'.
+// Change to a subtype of 'Never'.
+//   final int index;
+//             ^
+// pkg/front_end/testcases/enhanced_enums/declared_index.dart:84:13: Context: This is the overridden method ('index').
+//   Never get index;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::int
+    ;
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+  get index() → core::String
+    ;
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  final field core::int index;
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  method index() → core::List<core::String>
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+  get index() → Never
+    ;
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  final field core::int foo;
+  final field core::int index;
+  final field core::int bar;
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::int value) → void
+    ;
+  abstract get index() → core::int;
+}
+class E8 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+  set index(core::String value) → void
+    ;
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+  abstract get index() → core::double;
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+  static get index() → core::int
+    ;
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
+  static const field self::E11 element = const self::E11::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+  static set index(core::int value) → void
+    ;
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = const <self::E12>[self::E12::index];
+  static const field self::E12 index = const self::E12::•(0, "index");
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I13 extends core::Object {
+  synthetic constructor •() → self::I13
+    ;
+  abstract get index() → core::int;
+}
+class E13 extends core::_Enum implements self::I13 /*isEnum*/  {
+  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
+  static const field self::E13 element = const self::E13::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E13
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class I14 extends core::Object {
+  synthetic constructor •() → self::I14
+    ;
+  abstract get index() → Never;
+}
+class E14 extends core::_Enum implements self::I14 /*isEnum*/  {
+  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
+  static const field self::E14 element = const self::E14::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E14
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → Never; -> self::I14::index
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:17:6 -> ListConstant(const <E3*>[const E3{E3.index: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:18:3 -> InstanceConstant(const E3{E3.index: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:23:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:24:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:29:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:30:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:35:6 -> ListConstant(const <E6*>[const E6{E6.foo: null, E6.index: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:36:3 -> InstanceConstant(const E6{E6.foo: null, E6.index: null, E6.bar: null, _Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:41:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:42:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:49:6 -> ListConstant(const <E8*>[const E8{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:50:3 -> InstanceConstant(const E8{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:55:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:56:3 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:61:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:62:3 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:67:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:68:3 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:73:6 -> ListConstant(const <E12*>[const E12{_Enum.index: 0, _Enum._name: "index"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:74:3 -> InstanceConstant(const E12{_Enum.index: 0, _Enum._name: "index"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:81:6 -> ListConstant(const <E13*>[const E13{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:81:27 -> InstanceConstant(const E13{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_index.dart:87:6 -> ListConstant(const <E14*>[const E14{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_index.dart:87:27 -> InstanceConstant(const E14{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 98, effectively constant: 28
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
index dde0f55..9912e9e 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
index dde0f55..9912e9e 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
index 3acc5b0..feb041c 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
index 3acc5b0..feb041c 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
index 535787e..0a445dd 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
index 3acc5b0..feb041c 100644
--- a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:8:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E1> values = [E1.element]; // Error in E1.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:14:7: Error: An enum can't declare a member named 'values'.
 //   int values = 42; // Error in E2.
 //       ^^^^^^
 //
@@ -17,11 +17,11 @@
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Error: An enum can't declare a member named 'values'.
 //   static const List<E3> values = [E3.element]; // Error in E3.
 //                         ^^^^^^
 //
-// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: Enums can't contain declarations of members with the name 'values'.
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:45:8: Error: An enum can't declare a member named 'values'.
 //   void values() {} // Error in E7.
 //        ^^^^^^
 //
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
index cc27a95..56b28c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
index cc27a95..56b28c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline.expect
index c2d1e7f..22e587f 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline.expect
@@ -1,2 +1,11 @@
-enum E<X, Y> { one<int, String>(), two<double, num>(), three<int, int>.named(42), four<num, bool>; const E(); const E.named(int value); }
+enum E<X, Y> {
+  one<int, String>(),
+  two<double, num>(),
+  three<int, int>.named(42),
+  four<num, bool>();
+
+  const E();
+  const E.named(int value);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..22e587f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+enum E<X, Y> {
+  one<int, String>(),
+  two<double, num>(),
+  three<int, int>.named(42),
+  four<num, bool>();
+
+  const E();
+  const E.named(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
index 5838648..174339c 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
index 5838648..174339c 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.outline.expect
index d5da873..326acaf 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.outline.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
index 5838648..174339c 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:3: Error: Missing arguments in enum constructor invocation.
+// pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart:9:17: Error: Expected '(' after this.
 //   four<num, bool>; // Error.
-//   ^
+//                 ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
index 8889a45..5978728 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart
@@ -13,7 +13,7 @@
 abstract class EnumInterface implements Enum {}
 
 class EnumClass extends EnumInterface { // Error.
-  int get index => 0;
+  int get index => 0; // Error
 }
 
 abstract class AbstractEnumClass extends EnumInterface {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
index 99bdbbb..3984e35 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
index 9f0c21d..f61139c 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.strong.transformed.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
index 99bdbbb..3984e35 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
index 99bdbbb..3984e35 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.modular.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
index 75296a2..8448a78 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.outline.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
index 9f0c21d..f61139c 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart.weak.transformed.expect
@@ -14,6 +14,10 @@
 // class EnumClass extends EnumInterface { // Error.
 //       ^
 //
+// pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:16:11: Error: 'EnumClass' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error
+//           ^^^^^
+//
 // pkg/front_end/testcases/enhanced_enums/enum_as_supertype_error.dart:21:7: Error: Non-abstract class 'EnumClass2' has 'Enum' as a superinterface.
 // class EnumClass2 extends AbstractEnumClass {} // Error.
 //       ^
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart
new file mode 100644
index 0000000..142e1ab
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart
@@ -0,0 +1,61 @@
+// 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.
+
+abstract class A1 implements Enum {
+  int get index => 0; // Error.
+  bool operator==(Object other) => true; // Error.
+  int get hashCode => 1; // Error.
+}
+
+mixin M1 implements Enum {
+  int get index => 0; // Error.
+  bool operator==(Object other) => true; // Error.
+  int get hashCode => 1; // Error.
+}
+
+abstract class A2 implements Enum {
+  void set index(String value) {} // Error.
+  void set hashCode(double value) {} // Error.
+}
+
+mixin M2 implements Enum {
+  void set index(String value) {} // Error.
+  void set hashCode(double value) {} // Error.
+}
+
+abstract class A3 implements Enum {
+  int get index; // Ok.
+  bool operator==(Object other); // Ok.
+  int get HashCode; // Ok.
+}
+
+mixin M3 implements Enum {
+  int get index; // Ok.
+  bool operator==(Object other); // Ok.
+  int get HashCode; // Ok.
+}
+
+abstract class A4 implements Enum {
+  int index = 0; // Error.
+  int hashCode = 1; // Error.
+}
+
+mixin M4 implements Enum {
+  int index = 0; // Error.
+  int hashCode = 1; // Error.
+}
+
+abstract class A5 implements Enum {
+  int foo = 0, bar = 1, // Ok.
+    index = 2, // Error.
+    hashCode = 3; // Error.
+}
+
+mixin M5 implements Enum {
+  int foo = 0, bar = 1, // Ok.
+    index = 2, // Error.
+    hashCode = 3; // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.expect
new file mode 100644
index 0000000..061215b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..061215b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.strong.transformed.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline.expect
new file mode 100644
index 0000000..2946b54
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline.expect
@@ -0,0 +1,52 @@
+abstract class A1 implements Enum {
+  int get index => 0;
+  bool operator ==(Object other) => true;
+  int get hashCode => 1;
+}
+
+mixin M1 implements Enum {
+  int get index => 0;
+  bool operator ==(Object other) => true;
+  int get hashCode => 1;
+}
+
+abstract class A2 implements Enum {
+  void set index(String value) {}
+  void set hashCode(double value) {}
+}
+
+mixin M2 implements Enum {
+  void set index(String value) {}
+  void set hashCode(double value) {}
+}
+
+abstract class A3 implements Enum {
+  int get index;
+  bool operator ==(Object other);
+  int get HashCode;
+}
+
+mixin M3 implements Enum {
+  int get index;
+  bool operator ==(Object other);
+  int get HashCode;
+}
+
+abstract class A4 implements Enum {
+  int index = 0;
+  int hashCode = 1;
+}
+
+mixin M4 implements Enum {
+  int index = 0;
+  int hashCode = 1;
+}
+
+abstract class A5 implements Enum {
+  int foo = 0, bar = 1, index = 2, hashCode = 3;
+}
+
+mixin M5 implements Enum {
+  int foo = 0, bar = 1, index = 2, hashCode = 3;
+}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6daef0a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.textual_outline_modelled.expect
@@ -0,0 +1,48 @@
+abstract class A1 implements Enum {
+  bool operator ==(Object other) => true;
+  int get hashCode => 1;
+  int get index => 0;
+}
+
+abstract class A2 implements Enum {
+  void set hashCode(double value) {}
+  void set index(String value) {}
+}
+
+abstract class A3 implements Enum {
+  bool operator ==(Object other);
+  int get HashCode;
+  int get index;
+}
+
+abstract class A4 implements Enum {
+  int hashCode = 1;
+  int index = 0;
+}
+
+abstract class A5 implements Enum {
+  int foo = 0, bar = 1, index = 2, hashCode = 3;
+}
+
+main() {}
+mixin M1 implements Enum {
+  bool operator ==(Object other) => true;
+  int get hashCode => 1;
+  int get index => 0;
+}
+mixin M2 implements Enum {
+  void set hashCode(double value) {}
+  void set index(String value) {}
+}
+mixin M3 implements Enum {
+  bool operator ==(Object other);
+  int get HashCode;
+  int get index;
+}
+mixin M4 implements Enum {
+  int hashCode = 1;
+  int index = 0;
+}
+mixin M5 implements Enum {
+  int foo = 0, bar = 1, index = 2, hashCode = 3;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.expect
new file mode 100644
index 0000000..061215b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.modular.expect
new file mode 100644
index 0000000..061215b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.modular.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.outline.expect
new file mode 100644
index 0000000..169a70c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.outline.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    ;
+  get index() → core::int
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+  get hashCode() → core::int
+    ;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+  get hashCode() → core::int
+    ;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    ;
+  set index(core::String value) → void
+    ;
+  set hashCode(core::double value) → void
+    ;
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void
+    ;
+  set hashCode(core::double value) → void
+    ;
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index;
+  field core::int hashCode;
+  synthetic constructor •() → self::A4
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index;
+  field core::int hashCode;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo;
+  field core::int bar;
+  field core::int index;
+  field core::int hashCode;
+  synthetic constructor •() → self::A5
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo;
+  field core::int bar;
+  field core::int index;
+  field core::int hashCode;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..061215b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart.weak.transformed.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:6:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:8:11: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:7:16: Error: 'A1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:12:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int get index => 0; // Error.
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:14:11: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int get hashCode => 1; // Error.
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:13:16: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static members with name '=='.
+//   bool operator==(Object other) => true; // Error.
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:40:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:41:7: Error: 'A4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:45:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//   int index = 0; // Error.
+//       ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:46:7: Error: 'M4' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//   int hashCode = 1; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:51:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:52:5: Error: 'A5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:57:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'index'.
+//     index = 2, // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:58:5: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static members with name 'hashCode'.
+//     hashCode = 3; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:18:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'A2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:19:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'A2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:23:12: Error: The type 'int' of the inherited getter 'Enum.index' is not a subtype of the type 'String' of the setter 'M2.index'.
+//   void set index(String value) {} // Error.
+//            ^^^^^
+// sdk/lib/core/enum.dart:22:11: Context: This is the declaration of the getter 'Enum.index'.
+//   int get index;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/enum_implementers_with_restricted_members.dart:24:12: Error: The type 'int' of the inherited getter 'Object.hashCode' is not a subtype of the type 'double' of the setter 'M2.hashCode'.
+//   void set hashCode(double value) {} // Error.
+//            ^^^^^^^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:24:11: Context: This is the declaration of the getter 'Object.hashCode'.
+//   int get hashCode => _getHash(this);
+//           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class M1 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 0;
+  operator ==(core::Object other) → core::bool
+    return true;
+  get hashCode() → core::int
+    return 1;
+}
+abstract class A2 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class M2 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  set index(core::String value) → void {}
+  set hashCode(core::double value) → void {}
+}
+abstract class A3 extends core::Object implements core::Enum {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class M3 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+  abstract get HashCode() → core::int;
+}
+abstract class A4 extends core::Object implements core::Enum {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+}
+abstract class M4 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int index = 0;
+  field core::int hashCode = 1;
+}
+abstract class A5 extends core::Object implements core::Enum {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+}
+abstract class M5 extends core::Object implements core::Enum /*isMixinDeclaration*/  {
+  field core::int foo = 0;
+  field core::int bar = 1;
+  field core::int index = 2;
+  field core::int hashCode = 3;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart
new file mode 100644
index 0000000..d294528
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart
@@ -0,0 +1,89 @@
+// 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.
+
+class A1 {
+  int get hashCode => 42;
+}
+
+enum E1 with A1 { // Error.
+  element
+}
+
+class A2 {
+  int get values => 42;
+}
+
+enum E2 with A2 { // Error.
+  element
+}
+
+class A3 {
+  int get index => 42;
+}
+
+enum E3 with A3 { // Error.
+  element
+}
+
+class A4 {
+  bool operator==(Object other) => true;
+}
+
+enum E4 with A4 { // Error.
+  element
+}
+
+mixin M5 {
+  int get hashCode => 42;
+}
+
+enum E5 with M5 { // Error.
+  element
+}
+
+mixin M6 {
+  int get values => 42;
+}
+
+enum E6 with M6 { // Error.
+  element
+}
+
+mixin M7 {
+  int get index => 42;
+}
+
+enum E7 with M7 { // Error.
+  element
+}
+
+mixin M8 {
+  bool operator==(Object other) => true;
+}
+
+enum E8 with M8 { // Error.
+  element
+}
+
+abstract class A9 {
+  int get index;
+  int get hashCode;
+  bool operator==(Object other);
+}
+
+enum E9 with A9 { // Ok.
+  element
+}
+
+mixin M10 {
+  int get index;
+  int get hashCode;
+  bool operator==(Object other);
+}
+
+enum E10 with M10 { // Ok.
+  element
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.expect
new file mode 100644
index 0000000..3a4a2bf
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.expect
@@ -0,0 +1,348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E1&_Enum&A1 = core::_Enum with self::A1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::A1::hashCode};
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super self::_E1&_Enum&A1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  get values() → core::int
+    return 42;
+}
+abstract class _E2&_Enum&A2 = core::_Enum with self::A2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::A2::values};
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super self::_E2&_Enum&A2::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 42;
+}
+abstract class _E3&_Enum&A3 = core::_Enum with self::A3 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::A3::index};
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super self::_E3&_Enum&A3::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E4&_Enum&A4 = core::_Enum with self::A4 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::A4::==}(other);
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&A4::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E5&_Enum&M5 = core::_Enum with self::M5 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::M5::hashCode};
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&M5::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    return 42;
+}
+abstract class _E6&_Enum&M6 = core::_Enum with self::M6 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::M6::values};
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&M6::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 42;
+}
+abstract class _E7&_Enum&M7 = core::_Enum with self::M7 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::M7::index};
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&M7::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E8&_Enum&M8 = core::_Enum with self::M8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::M8::==}(other);
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C18;
+  static const field self::E8 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&M8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::A9::index
+  abstract mixin-stub get hashCode() → core::int; -> self::A9::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::A9::==
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = #C20;
+  static const field self::E9 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 = core::_Enum with self::M10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::M10::index
+  abstract mixin-stub get hashCode() → core::int; -> self::M10::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::M10::==
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C22;
+  static const field self::E10 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&M10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7>[#C15]
+  #C17 = self::E8 {index:#C1, _name:#C2}
+  #C18 = <self::E8>[#C17]
+  #C19 = self::E9 {index:#C1, _name:#C2}
+  #C20 = <self::E9>[#C19]
+  #C21 = self::E10 {index:#C1, _name:#C2}
+  #C22 = <self::E10>[#C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inherited_restricted_members.dart:
+- E1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _E1&_Enum&A1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- _E2&_Enum&A2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- E3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- _E3&_Enum&A3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- E4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- _E4&_Enum&A4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- E5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- _E5&_Enum&M5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- E6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- _E6&_Enum&M6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- E7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- _E7&_Enum&M7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- E8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- _E8&_Enum&M8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- E9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- _E9&_Enum&A9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- E10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
+- _E10&_Enum&M10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..80daf575
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.strong.transformed.expect
@@ -0,0 +1,348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E1&_Enum&A1 extends core::_Enum implements self::A1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super self::_E1&_Enum&A1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  get values() → core::int
+    return 42;
+}
+abstract class _E2&_Enum&A2 extends core::_Enum implements self::A2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  get values() → core::int
+    return 42;
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super self::_E2&_Enum&A2::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 42;
+}
+abstract class _E3&_Enum&A3 extends core::_Enum implements self::A3 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  get index() → core::int
+    return 42;
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super self::_E3&_Enum&A3::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E4&_Enum&A4 extends core::_Enum implements self::A4 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&A4::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E5&_Enum&M5 extends core::_Enum implements self::M5 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&M5::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    return 42;
+}
+abstract class _E6&_Enum&M6 extends core::_Enum implements self::M6 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  get values() → core::int
+    return 42;
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&M6::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 42;
+}
+abstract class _E7&_Enum&M7 extends core::_Enum implements self::M7 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  get index() → core::int
+    return 42;
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&M7::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E8&_Enum&M8 extends core::_Enum implements self::M8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C18;
+  static const field self::E8 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&M8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = #C20;
+  static const field self::E9 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 extends core::_Enum implements self::M10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C22;
+  static const field self::E10 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&M10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7>[#C15]
+  #C17 = self::E8 {index:#C1, _name:#C2}
+  #C18 = <self::E8>[#C17]
+  #C19 = self::E9 {index:#C1, _name:#C2}
+  #C20 = <self::E9>[#C19]
+  #C21 = self::E10 {index:#C1, _name:#C2}
+  #C22 = <self::E10>[#C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inherited_restricted_members.dart:
+- E1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _E1&_Enum&A1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- _E2&_Enum&A2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- E3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- _E3&_Enum&A3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- E4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- _E4&_Enum&A4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- E5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- _E5&_Enum&M5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- E6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- _E6&_Enum&M6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- E7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- _E7&_Enum&M7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- E8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- _E8&_Enum&M8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- E9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- _E9&_Enum&A9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- E10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
+- _E10&_Enum&M10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline.expect
new file mode 100644
index 0000000..52a0730
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline.expect
@@ -0,0 +1,65 @@
+class A1 {
+  int get hashCode => 42;
+}
+
+enum E1 with A1 { element }
+
+class A2 {
+  int get values => 42;
+}
+
+enum E2 with A2 { element }
+
+class A3 {
+  int get index => 42;
+}
+
+enum E3 with A3 { element }
+
+class A4 {
+  bool operator ==(Object other) => true;
+}
+
+enum E4 with A4 { element }
+
+mixin M5 {
+  int get hashCode => 42;
+}
+
+enum E5 with M5 { element }
+
+mixin M6 {
+  int get values => 42;
+}
+
+enum E6 with M6 { element }
+
+mixin M7 {
+  int get index => 42;
+}
+
+enum E7 with M7 { element }
+
+mixin M8 {
+  bool operator ==(Object other) => true;
+}
+
+enum E8 with M8 { element }
+
+abstract class A9 {
+  int get index;
+  int get hashCode;
+  bool operator ==(Object other);
+}
+
+enum E9 with A9 { element }
+
+mixin M10 {
+  int get index;
+  int get hashCode;
+  bool operator ==(Object other);
+}
+
+enum E10 with M10 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..38785e8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.textual_outline_modelled.expect
@@ -0,0 +1,60 @@
+abstract class A9 {
+  bool operator ==(Object other);
+  int get hashCode;
+  int get index;
+}
+
+class A1 {
+  int get hashCode => 42;
+}
+
+class A2 {
+  int get values => 42;
+}
+
+class A3 {
+  int get index => 42;
+}
+
+class A4 {
+  bool operator ==(Object other) => true;
+}
+
+enum E1 with A1 { element }
+
+enum E10 with M10 { element }
+
+enum E2 with A2 { element }
+
+enum E3 with A3 { element }
+
+enum E4 with A4 { element }
+
+enum E5 with M5 { element }
+
+enum E6 with M6 { element }
+
+enum E7 with M7 { element }
+
+enum E8 with M8 { element }
+
+enum E9 with A9 { element }
+
+main() {}
+mixin M10 {
+  bool operator ==(Object other);
+  int get hashCode;
+  int get index;
+}
+mixin M5 {
+  int get hashCode => 42;
+}
+mixin M6 {
+  int get values => 42;
+}
+mixin M7 {
+  int get index => 42;
+}
+mixin M8 {
+  bool operator ==(Object other) => true;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.expect
new file mode 100644
index 0000000..0e8de44
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.expect
@@ -0,0 +1,348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E1&_Enum&A1 = core::_Enum with self::A1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::A1::hashCode};
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super self::_E1&_Enum&A1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  get values() → core::int
+    return 42;
+}
+abstract class _E2&_Enum&A2 = core::_Enum with self::A2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::A2::values};
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super self::_E2&_Enum&A2::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 42;
+}
+abstract class _E3&_Enum&A3 = core::_Enum with self::A3 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::A3::index};
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super self::_E3&_Enum&A3::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E4&_Enum&A4 = core::_Enum with self::A4 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::A4::==}(other);
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&A4::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E5&_Enum&M5 = core::_Enum with self::M5 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::M5::hashCode};
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&M5::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    return 42;
+}
+abstract class _E6&_Enum&M6 = core::_Enum with self::M6 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::M6::values};
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&M6::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 42;
+}
+abstract class _E7&_Enum&M7 = core::_Enum with self::M7 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::M7::index};
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&M7::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E8&_Enum&M8 = core::_Enum with self::M8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::M8::==}(other);
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C18;
+  static const field self::E8 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&M8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::A9::index
+  abstract mixin-stub get hashCode() → core::int; -> self::A9::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::A9::==
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = #C20;
+  static const field self::E9 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 = core::_Enum with self::M10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::M10::index
+  abstract mixin-stub get hashCode() → core::int; -> self::M10::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::M10::==
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C22;
+  static const field self::E10 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&M10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+  #C17 = self::E8 {index:#C1, _name:#C2}
+  #C18 = <self::E8*>[#C17]
+  #C19 = self::E9 {index:#C1, _name:#C2}
+  #C20 = <self::E9*>[#C19]
+  #C21 = self::E10 {index:#C1, _name:#C2}
+  #C22 = <self::E10*>[#C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inherited_restricted_members.dart:
+- E1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _E1&_Enum&A1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- _E2&_Enum&A2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- E3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- _E3&_Enum&A3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- E4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- _E4&_Enum&A4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- E5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- _E5&_Enum&M5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- E6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- _E6&_Enum&M6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- E7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- _E7&_Enum&M7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- E8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- _E8&_Enum&M8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- E9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- _E9&_Enum&A9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- E10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
+- _E10&_Enum&M10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.modular.expect
new file mode 100644
index 0000000..0e8de44
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.modular.expect
@@ -0,0 +1,348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E1&_Enum&A1 = core::_Enum with self::A1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::A1::hashCode};
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super self::_E1&_Enum&A1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  get values() → core::int
+    return 42;
+}
+abstract class _E2&_Enum&A2 = core::_Enum with self::A2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::A2::values};
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super self::_E2&_Enum&A2::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 42;
+}
+abstract class _E3&_Enum&A3 = core::_Enum with self::A3 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::A3::index};
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super self::_E3&_Enum&A3::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E4&_Enum&A4 = core::_Enum with self::A4 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::A4::==}(other);
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&A4::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E5&_Enum&M5 = core::_Enum with self::M5 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::M5::hashCode};
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&M5::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    return 42;
+}
+abstract class _E6&_Enum&M6 = core::_Enum with self::M6 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::M6::values};
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&M6::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 42;
+}
+abstract class _E7&_Enum&M7 = core::_Enum with self::M7 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::M7::index};
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&M7::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E8&_Enum&M8 = core::_Enum with self::M8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::M8::==}(other);
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C18;
+  static const field self::E8 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&M8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::A9::index
+  abstract mixin-stub get hashCode() → core::int; -> self::A9::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::A9::==
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = #C20;
+  static const field self::E9 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 = core::_Enum with self::M10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::M10::index
+  abstract mixin-stub get hashCode() → core::int; -> self::M10::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::M10::==
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C22;
+  static const field self::E10 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&M10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+  #C17 = self::E8 {index:#C1, _name:#C2}
+  #C18 = <self::E8*>[#C17]
+  #C19 = self::E9 {index:#C1, _name:#C2}
+  #C20 = <self::E9*>[#C19]
+  #C21 = self::E10 {index:#C1, _name:#C2}
+  #C22 = <self::E10*>[#C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inherited_restricted_members.dart:
+- E1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _E1&_Enum&A1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- _E2&_Enum&A2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- E3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- _E3&_Enum&A3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- E4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- _E4&_Enum&A4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- E5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- _E5&_Enum&M5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- E6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- _E6&_Enum&M6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- E7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- _E7&_Enum&M7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- E8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- _E8&_Enum&M8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- E9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- _E9&_Enum&A9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- E10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
+- _E10&_Enum&M10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.outline.expect
new file mode 100644
index 0000000..774f207
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.outline.expect
@@ -0,0 +1,307 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    ;
+  get hashCode() → core::int
+    ;
+}
+abstract class _E1&_Enum&A1 = core::_Enum with self::A1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::A1::hashCode};
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    ;
+  get values() → core::int
+    ;
+}
+abstract class _E2&_Enum&A2 = core::_Enum with self::A2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::A2::values};
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    ;
+  get index() → core::int
+    ;
+}
+abstract class _E3&_Enum&A3 = core::_Enum with self::A3 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::A3::index};
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    ;
+  operator ==(core::Object other) → core::bool
+    ;
+}
+abstract class _E4&_Enum&A4 = core::_Enum with self::A4 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::A4::==}(other);
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    ;
+}
+abstract class _E5&_Enum&M5 = core::_Enum with self::M5 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get hashCode() → core::int
+    return super.{self::M5::hashCode};
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    ;
+}
+abstract class _E6&_Enum&M6 = core::_Enum with self::M6 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get values() → core::int
+    return super.{self::M6::values};
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    ;
+}
+abstract class _E7&_Enum&M7 = core::_Enum with self::M7 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get index() → core::int
+    return super.{self::M7::index};
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    ;
+}
+abstract class _E8&_Enum&M8 = core::_Enum with self::M8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub operator ==(core::Object other) → core::bool
+    return super.{self::M8::==}(other);
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::A9::index
+  abstract mixin-stub get hashCode() → core::int; -> self::A9::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::A9::==
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 = core::_Enum with self::M10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract mixin-stub get index() → core::int; -> self::M10::index
+  abstract mixin-stub get hashCode() → core::int; -> self::M10::hashCode
+  abstract mixin-stub operator ==(core::Object other) → core::bool; -> self::M10::==
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:9:6 -> ListConstant(const <E1*>[const E1{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:10:3 -> InstanceConstant(const E1{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:17:6 -> ListConstant(const <E2*>[const E2{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:18:3 -> InstanceConstant(const E2{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:25:6 -> ListConstant(const <E3*>[const E3{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:26:3 -> InstanceConstant(const E3{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:33:6 -> ListConstant(const <E4*>[const E4{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:34:3 -> InstanceConstant(const E4{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:41:6 -> ListConstant(const <E5*>[const E5{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:42:3 -> InstanceConstant(const E5{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:49:6 -> ListConstant(const <E6*>[const E6{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:50:3 -> InstanceConstant(const E6{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:57:6 -> ListConstant(const <E7*>[const E7{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:58:3 -> InstanceConstant(const E7{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:65:6 -> ListConstant(const <E8*>[const E8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:66:3 -> InstanceConstant(const E8{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:75:6 -> ListConstant(const <E9*>[const E9{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:76:3 -> InstanceConstant(const E9{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///inherited_restricted_members.dart:85:6 -> ListConstant(const <E10*>[const E10{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inherited_restricted_members.dart:86:3 -> InstanceConstant(const E10{})
+Extra constant evaluation: evaluated: 80, effectively constant: 20
diff --git a/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..92342bc
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart.weak.transformed.expect
@@ -0,0 +1,348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E2 with A2 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: Can't declare a member that conflicts with an inherited one.
+// enum E6 with M6 { // Error.
+//      ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member.
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:9:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E1 with A1 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:6:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:17:6: Error: An enum can't inherit a member named 'values'.
+// enum E2 with A2 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:14:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:25:6: Error: An enum can't inherit a member named 'index'.
+// enum E3 with A3 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:22:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:33:6: Error: An enum can't inherit a member named '=='.
+// enum E4 with A4 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:30:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:41:6: Error: An enum can't inherit a member named 'hashCode'.
+// enum E5 with M5 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:38:11: Context: This is the inherited member
+//   int get hashCode => 42;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:49:6: Error: An enum can't inherit a member named 'values'.
+// enum E6 with M6 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:46:11: Context: This is the inherited member
+//   int get values => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:57:6: Error: An enum can't inherit a member named 'index'.
+// enum E7 with M7 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:54:11: Context: This is the inherited member
+//   int get index => 42;
+//           ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:65:6: Error: An enum can't inherit a member named '=='.
+// enum E8 with M8 { // Error.
+//      ^^
+// pkg/front_end/testcases/enhanced_enums/inherited_restricted_members.dart:62:16: Context: This is the inherited member
+//   bool operator==(Object other) => true;
+//                ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E1&_Enum&A1 extends core::_Enum implements self::A1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E1&_Enum&A1
+    : super core::_Enum::•(index, _name)
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+class E1 extends self::_E1&_Enum&A1 /*isEnum*/  {
+  static const field core::List<self::E1> values = #C4;
+  static const field self::E1 element = #C3;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super self::_E1&_Enum&A1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+  get values() → core::int
+    return 42;
+}
+abstract class _E2&_Enum&A2 extends core::_Enum implements self::A2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A2
+    : super core::_Enum::•(index, _name)
+    ;
+  get values() → core::int
+    return 42;
+}
+class E2 extends self::_E2&_Enum&A2 /*isEnum*/  {
+  static const field core::List<self::E2> values = #C6;
+  static const field self::E2 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super self::_E2&_Enum&A2::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  get index() → core::int
+    return 42;
+}
+abstract class _E3&_Enum&A3 extends core::_Enum implements self::A3 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&A3
+    : super core::_Enum::•(index, _name)
+    ;
+  get index() → core::int
+    return 42;
+}
+class E3 extends self::_E3&_Enum&A3 /*isEnum*/  {
+  static const field core::List<self::E3> values = #C8;
+  static const field self::E3 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super self::_E3&_Enum&A3::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class A4 extends core::Object {
+  synthetic constructor •() → self::A4
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E4&_Enum&A4 extends core::_Enum implements self::A4 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&A4
+    : super core::_Enum::•(index, _name)
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E4 extends self::_E4&_Enum&A4 /*isEnum*/  {
+  static const field core::List<self::E4> values = #C10;
+  static const field self::E4 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&A4::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M5 extends core::Object /*isMixinDeclaration*/  {
+  get hashCode() → core::int
+    return 42;
+}
+abstract class _E5&_Enum&M5 extends core::_Enum implements self::M5 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&M5
+    : super core::_Enum::•(index, _name)
+    ;
+  get hashCode() → core::int
+    return 42;
+}
+class E5 extends self::_E5&_Enum&M5 /*isEnum*/  {
+  static const field core::List<self::E5> values = #C12;
+  static const field self::E5 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&M5::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M6 extends core::Object /*isMixinDeclaration*/  {
+  get values() → core::int
+    return 42;
+}
+abstract class _E6&_Enum&M6 extends core::_Enum implements self::M6 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&M6
+    : super core::_Enum::•(index, _name)
+    ;
+  get values() → core::int
+    return 42;
+}
+class E6 extends self::_E6&_Enum&M6 /*isEnum*/  {
+  static const field core::List<self::E6> values = #C14;
+  static const field self::E6 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&M6::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M7 extends core::Object /*isMixinDeclaration*/  {
+  get index() → core::int
+    return 42;
+}
+abstract class _E7&_Enum&M7 extends core::_Enum implements self::M7 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&M7
+    : super core::_Enum::•(index, _name)
+    ;
+  get index() → core::int
+    return 42;
+}
+class E7 extends self::_E7&_Enum&M7 /*isEnum*/  {
+  static const field core::List<self::E7> values = #C16;
+  static const field self::E7 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&M7::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M8 extends core::Object /*isMixinDeclaration*/  {
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+abstract class _E8&_Enum&M8 extends core::_Enum implements self::M8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&M8
+    : super core::_Enum::•(index, _name)
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class E8 extends self::_E8&_Enum&M8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C18;
+  static const field self::E8 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&M8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = #C20;
+  static const field self::E9 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class M10 extends core::Object /*isMixinDeclaration*/  {
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+abstract class _E10&_Enum&M10 extends core::_Enum implements self::M10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&M10
+    : super core::_Enum::•(index, _name)
+    ;
+  abstract get index() → core::int;
+  abstract get hashCode() → core::int;
+  abstract operator ==(core::Object other) → core::bool;
+}
+class E10 extends self::_E10&_Enum&M10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C22;
+  static const field self::E10 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&M10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1*>[#C3]
+  #C5 = self::E2 {index:#C1, _name:#C2}
+  #C6 = <self::E2*>[#C5]
+  #C7 = self::E3 {index:#C1, _name:#C2}
+  #C8 = <self::E3*>[#C7]
+  #C9 = self::E4 {index:#C1, _name:#C2}
+  #C10 = <self::E4*>[#C9]
+  #C11 = self::E5 {index:#C1, _name:#C2}
+  #C12 = <self::E5*>[#C11]
+  #C13 = self::E6 {index:#C1, _name:#C2}
+  #C14 = <self::E6*>[#C13]
+  #C15 = self::E7 {index:#C1, _name:#C2}
+  #C16 = <self::E7*>[#C15]
+  #C17 = self::E8 {index:#C1, _name:#C2}
+  #C18 = <self::E8*>[#C17]
+  #C19 = self::E9 {index:#C1, _name:#C2}
+  #C20 = <self::E9*>[#C19]
+  #C21 = self::E10 {index:#C1, _name:#C2}
+  #C22 = <self::E10*>[#C21]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inherited_restricted_members.dart:
+- E1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _E1&_Enum&A1. (from org-dartlang-testcase:///inherited_restricted_members.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- _E2&_Enum&A2. (from org-dartlang-testcase:///inherited_restricted_members.dart:17:6)
+- E3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- _E3&_Enum&A3. (from org-dartlang-testcase:///inherited_restricted_members.dart:25:6)
+- E4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- _E4&_Enum&A4. (from org-dartlang-testcase:///inherited_restricted_members.dart:33:6)
+- E5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- _E5&_Enum&M5. (from org-dartlang-testcase:///inherited_restricted_members.dart:41:6)
+- E6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- _E6&_Enum&M6. (from org-dartlang-testcase:///inherited_restricted_members.dart:49:6)
+- E7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- _E7&_Enum&M7. (from org-dartlang-testcase:///inherited_restricted_members.dart:57:6)
+- E8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- _E8&_Enum&M8. (from org-dartlang-testcase:///inherited_restricted_members.dart:65:6)
+- E9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- _E9&_Enum&A9. (from org-dartlang-testcase:///inherited_restricted_members.dart:75:6)
+- E10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
+- _E10&_Enum&M10. (from org-dartlang-testcase:///inherited_restricted_members.dart:85:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart
new file mode 100644
index 0000000..78f8244
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart
@@ -0,0 +1,12 @@
+// 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.
+
+enum E {
+  e1,
+  e2;
+
+  void set values(List<E> val) {} // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.expect
new file mode 100644
index 0000000..f257434
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C7;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = <self::E>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///member_values_conflicts.dart:
+- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.transformed.expect
new file mode 100644
index 0000000..f257434
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.strong.transformed.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C7;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = <self::E>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///member_values_conflicts.dart:
+- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline.expect
new file mode 100644
index 0000000..77502aa
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+enum E {
+  e1,
+  e2;
+
+  void set values(List<E> val) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..77502aa
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+enum E {
+  e1,
+  e2;
+
+  void set values(List<E> val) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.expect
new file mode 100644
index 0000000..756f859
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C7;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = <self::E*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///member_values_conflicts.dart:
+- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.modular.expect
new file mode 100644
index 0000000..756f859
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C7;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = <self::E*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///member_values_conflicts.dart:
+- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.outline.expect
new file mode 100644
index 0000000..5cd70a0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.outline.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = const <self::E>[self::E::e1, self::E::e2];
+  static const field self::E e1 = const self::E::•(0, "e1");
+  static const field self::E e2 = const self::E::•(1, "e2");
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void
+    ;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///member_values_conflicts.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "e1"}, const E{_Enum.index: 1, _Enum._name: "e2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///member_values_conflicts.dart:6:3 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "e1"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///member_values_conflicts.dart:7:3 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "e2"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.transformed.expect
new file mode 100644
index 0000000..756f859
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart.weak.transformed.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/member_values_conflicts.dart:9:12: Error: This instance member conflicts with the synthesized static member called 'values'.
+//   void set values(List<E> val) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C7;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  set values(core::List<self::E> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = <self::E*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///member_values_conflicts.dart:
+- E. (from org-dartlang-testcase:///member_values_conflicts.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart
new file mode 100644
index 0000000..5ab89b1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.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.
+
+enum E<T> {
+  element<int>(),
+  element2<int>();
+
+  static void set element(E<int> val) {} // Ok.
+  static void set element2(E<String> val) {} // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.expect
new file mode 100644
index 0000000..e34c005
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = #C7;
+  static const field self::E<core::int> element = #C3;
+  static const field self::E<core::int> element2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void {}
+  static set element2(self::E<core::String> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::int> {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "element2"
+  #C6 = self::E<core::int> {index:#C4, _name:#C5}
+  #C7 = <self::E<dynamic>>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///setter_getter_type_check.dart:
+- E. (from org-dartlang-testcase:///setter_getter_type_check.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.transformed.expect
new file mode 100644
index 0000000..e34c005
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.strong.transformed.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = #C7;
+  static const field self::E<core::int> element = #C3;
+  static const field self::E<core::int> element2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void {}
+  static set element2(self::E<core::String> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::int> {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "element2"
+  #C6 = self::E<core::int> {index:#C4, _name:#C5}
+  #C7 = <self::E<dynamic>>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///setter_getter_type_check.dart:
+- E. (from org-dartlang-testcase:///setter_getter_type_check.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline.expect
new file mode 100644
index 0000000..43a8af8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+enum E<T> {
+  element<int>(),
+  element2<int>();
+
+  static void set element(E<int> val) {}
+  static void set element2(E<String> val) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..43a8af8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+enum E<T> {
+  element<int>(),
+  element2<int>();
+
+  static void set element(E<int> val) {}
+  static void set element2(E<String> val) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.expect
new file mode 100644
index 0000000..117fd4f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = #C7;
+  static const field self::E<core::int> element = #C3;
+  static const field self::E<core::int> element2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void {}
+  static set element2(self::E<core::String> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::int*> {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "element2"
+  #C6 = self::E<core::int*> {index:#C4, _name:#C5}
+  #C7 = <self::E<dynamic>*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///setter_getter_type_check.dart:
+- E. (from org-dartlang-testcase:///setter_getter_type_check.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.modular.expect
new file mode 100644
index 0000000..117fd4f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = #C7;
+  static const field self::E<core::int> element = #C3;
+  static const field self::E<core::int> element2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void {}
+  static set element2(self::E<core::String> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::int*> {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "element2"
+  #C6 = self::E<core::int*> {index:#C4, _name:#C5}
+  #C7 = <self::E<dynamic>*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///setter_getter_type_check.dart:
+- E. (from org-dartlang-testcase:///setter_getter_type_check.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.outline.expect
new file mode 100644
index 0000000..adc5a7d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.outline.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = const <self::E<dynamic>>[self::E::element, self::E::element2];
+  static const field self::E<core::int> element = const self::E::•<core::int>(0, "element");
+  static const field self::E<core::int> element2 = const self::E::•<core::int>(1, "element2");
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void
+    ;
+  static set element2(self::E<core::String> val) → void
+    ;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///setter_getter_type_check.dart:5:6 -> ListConstant(const <E<dynamic>*>[const E<int*>{_Enum.index: 0, _Enum._name: "element"}, const E<int*>{_Enum.index: 1, _Enum._name: "element2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///setter_getter_type_check.dart:6:3 -> InstanceConstant(const E<int*>{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///setter_getter_type_check.dart:7:3 -> InstanceConstant(const E<int*>{_Enum.index: 1, _Enum._name: "element2"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.transformed.expect
new file mode 100644
index 0000000..117fd4f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart.weak.transformed.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:7:3: Error: The type 'E<int>' of the getter 'E.element2' is not a subtype of the type 'E<String>' of the setter 'E.element2'.
+//  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart'.
+//   element2<int>();
+//   ^^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/setter_getter_type_check.dart:10:19: Context: This is the declaration of the setter 'E.element2'.
+//   static void set element2(E<String> val) {} // Error.
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E<T extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E<dynamic>> values = #C7;
+  static const field self::E<core::int> element = #C3;
+  static const field self::E<core::int> element2 = #C6;
+  const constructor •(core::int index, core::String name) → self::E<self::E::T%>
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E<core::int> val) → void {}
+  static set element2(self::E<core::String> val) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E<core::int*> {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "element2"
+  #C6 = self::E<core::int*> {index:#C4, _name:#C5}
+  #C7 = <self::E<dynamic>*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///setter_getter_type_check.dart:
+- E. (from org-dartlang-testcase:///setter_getter_type_check.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/expression/a.dart b/pkg/front_end/testcases/expression/a.dart
deleted file mode 100644
index 63db95e..0000000
--- a/pkg/front_end/testcases/expression/a.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import "b.dart";
-
-main() {
-  Foo foo = new Foo();
-  print(foo.foo);
-}
-
-class Foo<E1> {
-  E1 get foo => null;
-  String get bar => "hello";
-}
-
-class Bar {}
diff --git a/pkg/front_end/testcases/expression/b.dart b/pkg/front_end/testcases/expression/b.dart
deleted file mode 100644
index dc9ed0a..0000000
--- a/pkg/front_end/testcases/expression/b.dart
+++ /dev/null
@@ -1,4 +0,0 @@
-class Foo<E2> {
-  E2 get foo => null;
-  int get bar => 42;
-}
diff --git a/pkg/front_end/testcases/expression/class_capture.expression.yaml b/pkg/front_end/testcases/expression/class_capture.expression.yaml
index fdce2d6..f95adf5 100644
--- a/pkg/front_end/testcases/expression/class_capture.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_capture.expression.yaml
@@ -2,8 +2,14 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    int x;
+    final int y = 7;
+
+    B(this.x);
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   () { return x + y; }
diff --git a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
index 2bf8abf..b4200b9 100644
--- a/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_capture.expression.yaml.expect
@@ -1,6 +1,6 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → dart.core::int* {
-    return this.{main::B::x}{dart.core::int*}.{dart.core::num::+}(this.{main::B::y}{dart.core::int*}){(dart.core::num*) →* dart.core::int*};
+  return () → dart.core::int {
+    return this.{#lib1::B::x}{dart.core::int}.{dart.core::num::+}(this.{#lib1::B::y}{dart.core::int}){(dart.core::num) → dart.core::int};
   };
diff --git a/pkg/front_end/testcases/expression/class_getter.expression.yaml b/pkg/front_end/testcases/expression/class_getter.expression.yaml
index f6e64e6..69f9ff4 100644
--- a/pkg/front_end/testcases/expression/class_getter.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_getter.expression.yaml
@@ -2,8 +2,13 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    String get z {
+      return "";
+    }
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   z
diff --git a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
index d0eae14..07d707b 100644
--- a/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_getter.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::z}{dart.core::String*};
+  return this.{#lib1::B::z}{dart.core::String};
diff --git a/pkg/front_end/testcases/expression/class_invalid_static.expression.yaml b/pkg/front_end/testcases/expression/class_invalid_static.expression.yaml
index 59c21b9..179b971 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_invalid_static.expression.yaml
@@ -2,9 +2,13 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A {
+    int doit_with_this(int x) => x + 1;
+  }
+
 definitions: []
-position: "main.dart#A"
+position: "#A"
 static: true
 expression: |
   doit_with_this(3)
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml
index 0c6f18a..81e276d 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_invalid_static_capture.expression.yaml
@@ -2,9 +2,15 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    int x;
+    final int y = 7;
+
+    B(this.x);
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 static: true
 expression: |
   () { return x + y; }
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml b/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml
index 2fd524f..8048dec 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_invalid_static_getter.expression.yaml
@@ -2,9 +2,14 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    String get z {
+      return "";
+    }
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 static: true
 expression: |
   z
diff --git a/pkg/front_end/testcases/expression/class_invalid_static_setter.expression.yaml b/pkg/front_end/testcases/expression/class_invalid_static_setter.expression.yaml
index 289cf59..24000e5 100644
--- a/pkg/front_end/testcases/expression/class_invalid_static_setter.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_invalid_static_setter.expression.yaml
@@ -2,9 +2,13 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    void set z(_) {}
+  }
+
 definitions: []
-position: "main.dart#B"
+position: "#B"
 static: true
 expression: |
   z = 2
diff --git a/pkg/front_end/testcases/expression/class_method.expression.yaml b/pkg/front_end/testcases/expression/class_method.expression.yaml
index 13b9772..5aceeaf 100644
--- a/pkg/front_end/testcases/expression/class_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_method.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class A {
+    int doit_with_this(int x) => x + 1;
+  }
 definitions: []
-position: "main.dart#A"
+position: "#A"
 expression: |
   doit_with_this(2)
diff --git a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
index f5bb3e4..0b0f902 100644
--- a/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::A::doit_with_this}(2){(dart.core::int*) →* dart.core::int*};
+  return this.{#lib1::A::doit_with_this}(2){(dart.core::int) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/class_private_get.expression.yaml b/pkg/front_end/testcases/expression/class_private_get.expression.yaml
index dc9214d..3b19b84 100644
--- a/pkg/front_end/testcases/expression/class_private_get.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_private_get.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    int? _priv;
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   _priv
diff --git a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
index b594541..f271c9b 100644
--- a/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_get.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_priv}{dart.core::int*};
+  return this.{#lib1::B::_priv}{dart.core::int?};
diff --git a/pkg/front_end/testcases/expression/class_private_method.expression.yaml b/pkg/front_end/testcases/expression/class_private_method.expression.yaml
index 0af4443..95e8a61 100644
--- a/pkg/front_end/testcases/expression/class_private_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_private_method.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    void _privMethod() {}
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   _privMethod
diff --git a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
index b1449b4..4cf1622 100644
--- a/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_privMethod}{() →* void};
+  return this.{#lib1::B::_privMethod}{() → void};
diff --git a/pkg/front_end/testcases/expression/class_private_set.expression.yaml b/pkg/front_end/testcases/expression/class_private_set.expression.yaml
index 33b2db9..5310a73 100644
--- a/pkg/front_end/testcases/expression/class_private_set.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_private_set.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    int? _priv;
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   _priv = 3
diff --git a/pkg/front_end/testcases/expression/class_private_set.expression.yaml.expect b/pkg/front_end/testcases/expression/class_private_set.expression.yaml.expect
index dc37e63..91fb6d6 100644
--- a/pkg/front_end/testcases/expression/class_private_set.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_private_set.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::_priv} = 3;
+  return this.{#lib1::B::_priv} = 3;
diff --git a/pkg/front_end/testcases/expression/class_setter.expression.yaml b/pkg/front_end/testcases/expression/class_setter.expression.yaml
index f559566..904e0b23 100644
--- a/pkg/front_end/testcases/expression/class_setter.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_setter.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class B {
+    void set z(_) {}
+  }
 definitions: []
-position: "main.dart#B"
+position: "#B"
 expression: |
   z = 3
diff --git a/pkg/front_end/testcases/expression/class_setter.expression.yaml.expect b/pkg/front_end/testcases/expression/class_setter.expression.yaml.expect
index 8c53fc2..04e8669 100644
--- a/pkg/front_end/testcases/expression/class_setter.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_setter.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::B::z} = 3;
+  return this.{#lib1::B::z} = 3;
diff --git a/pkg/front_end/testcases/expression/class_static.expression.yaml b/pkg/front_end/testcases/expression/class_static.expression.yaml
index 309ff3f..3fdd5d8 100644
--- a/pkg/front_end/testcases/expression/class_static.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_static.expression.yaml
@@ -2,9 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A {
+    static int doit(int x) => x + 1;
+  }
 definitions: []
-position: "main.dart#A"
+position: "#A"
 static: true
 expression: |
   doit(3)
diff --git a/pkg/front_end/testcases/expression/class_static.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static.expression.yaml.expect
index 8fc9b60..655c1d4 100644
--- a/pkg/front_end/testcases/expression/class_static.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return main::A::doit(3);
+  return #lib1::A::doit(3);
diff --git a/pkg/front_end/testcases/expression/class_static2.expression.yaml b/pkg/front_end/testcases/expression/class_static2.expression.yaml
index 69e19b9..82b12f5 100644
--- a/pkg/front_end/testcases/expression/class_static2.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_static2.expression.yaml
@@ -2,9 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A {
+    int doit_with_this(int x) => x + 1;
+  }
 definitions: []
-position: "main.dart#A"
+position: "#A"
 static: true
 expression: |
   doit_with_this(2)
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml b/pkg/front_end/testcases/expression/class_static3.expression.yaml
index e1e7796..9d47551 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml
@@ -2,15 +2,20 @@
 # 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.
 
-- entry_point: "eval.dart"
-  definitions: []
-  position: "eval.dart"
+- sources: |
+    int globalVar = 100;
+    class MyClass {
+      static int staticVar = 1000;
+    }
   expression: |
     globalVar + staticVar + 5
 
-- entry_point: "eval.dart"
-  definitions: []
-  position: "eval.dart#MyClass"
+- sources: |
+    int globalVar = 100;
+    class MyClass {
+      static int staticVar = 1000;
+    }
+  position: "#MyClass"
   static: true
   expression: |
     globalVar + staticVar + 5
diff --git a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
index b682d78..06ec757 100644
--- a/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_static3.expression.yaml.expect
@@ -4,8 +4,8 @@
               ^^^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num*) →* dart.core::num*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::num*};
+  return #lib1::globalVar.{dart.core::num::+}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:13: Error: Undefined name 'staticVar'.\nglobalVar + staticVar + 5\n            ^^^^^^^^^"){(dart.core::num) → dart.core::double}.{dart.core::double::+}(5){(dart.core::num) → dart.core::double};
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar){(dart.core::num*) →* dart.core::int*}.{dart.core::num::+}(5){(dart.core::num*) →* dart.core::int*};
+  return #lib1::globalVar.{dart.core::num::+}(#lib1::MyClass::staticVar){(dart.core::num) → dart.core::int}.{dart.core::num::+}(5){(dart.core::num) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml
index b415f4a..edaa0c0 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: ["x"]
-position: "main.dart#C"
+sources: |
+  class Bound {}
+  void hasBound<T extends Bound>() {}
+  class C<T extends Bound> {}
+position: "#C"
 expression: |
   hasBound<T>()
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
index c21f4fd..d986e71 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::C::T*>();
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return #lib1::hasBound<#lib1::C::T>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml
index 373069e..56443cc 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml
@@ -2,9 +2,18 @@
 # 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.
 
+sources:
+  main.dart: |
+    class Bound {}
+    void hasBound<T extends Bound>() {}
+    class C<T extends Bound> {}
+    main() {}
+  main_2.dart: |
+    import 'main.dart' as m;
+    main() {
+      m.main();
+    }
 entry_point: "main_2.dart"
-import: "main.dart"
-definitions: ["x"]
 position: "main.dart#C"
 expression: |
   hasBound<T>()
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
index c21f4fd..d986e71 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::C::T*>();
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return #lib1::hasBound<#lib1::C::T>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml
index 2ff676d..da78f23 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: ["x"]
+sources: |
+  class Bound {}
+  void hasBound<T extends Bound>() {}
+  class A<T> {}
 position: "main.dart#A"
 expression: |
   hasBound<T>()
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
index 845e716..ec753a8 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal.expression.yaml.expect
@@ -1,9 +1,9 @@
 Errors: {
   org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
-   - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
+   - 'Bound' is from 'org-dartlang-testcase:///main.dart'.
   Try changing type arguments so that they conform to the bounds.
   hasBound<T>()
   ^
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::A::T*>();
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return #lib1::hasBound<#lib1::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml
index e6a0f33..8dc7a50 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml
@@ -2,9 +2,19 @@
 # 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.
 
+sources:
+  main.dart: |
+    class Bound {}
+    void hasBound<T extends Bound>() {}
+    class C<T extends Bound> {}
+    class A<T> {}
+    main() {}
+  main_2.dart: |
+    import 'main.dart' as m;
+    main() {
+      m.main();
+    }
 entry_point: "main_2.dart"
-import: "main.dart"
-definitions: ["x"]
 position: "main.dart#A"
 expression: |
   hasBound<T>()
diff --git a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
index 845e716..ec753a8 100644
--- a/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_bound_illegal_2.expression.yaml.expect
@@ -1,9 +1,9 @@
 Errors: {
   org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
-   - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
+   - 'Bound' is from 'org-dartlang-testcase:///main.dart'.
   Try changing type arguments so that they conform to the bounds.
   hasBound<T>()
   ^
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::hasBound<main::A::T*>();
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return #lib1::hasBound<#lib1::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml
index 086d26f..8be718c 100644
--- a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#MiddlewareApi"
+sources: |
+  abstract class Built<V extends Built<V, B>, B extends Builder<V, B>> {}
+  abstract class Builder<V extends Built<V, B>, B extends Builder<V, B>> {}
+  class MiddlewareApi<State extends Built<State, StateBuilder>,
+      StateBuilder extends Builder<State, StateBuilder>> {}
+position: "#MiddlewareApi"
 expression: |
   toString()
diff --git a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
index 87b923b..04d903b 100644
--- a/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_circular_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::MiddlewareApi::toString}(){() →* dart.core::String*};
+  return this.{dart.core::Object::toString}(){() → dart.core::String};
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml
index 18371de..5744d72 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml
@@ -2,8 +2,9 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
 definitions: ["x"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   x is T
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
index bed6d1b..fc7bba2 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return x is main::A::T*;
+  return x is{ForNonNullableByDefault} #lib1::A::T%;
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml
index 13ab5ef..518bf0a 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
+  T id<T>(T x) => x;
 definitions: ["x"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   id<T>(x)
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
index d89f1f9..41d97278 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return main::id<main::A::T*>(x as{TypeError,ForDynamic} main::A::T*);
+  return #lib1::id<#lib1::A::T%>(x as{TypeError,ForDynamic,ForNonNullableByDefault} #lib1::A::T%);
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml
index d42666f..6b7197e 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml
@@ -2,9 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
+  T id<T>(T x) => x;
 definitions: ["x"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
     x = id(x);
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml.expect
index e5b3c04..d81f9e6 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_arg_inferred.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
   return () → Null {
-    x = main::id<dynamic>(x);
+    x = #lib1::id<dynamic>(x);
   };
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml
index a1526e4..71a14d9 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: ["x"]
-position: "main.dart#A"
+sources: |
+  class A<T> {
+    const A();
+  }
+position: "#A"
 expression: |
   new A<T>()
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
index 5b0ed1c..45a803d 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_ctor.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return new main::A::•<main::A::T*>();
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return new #lib1::A::•<#lib1::A::T%>();
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml
index 39ff366..a16e189 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml
@@ -2,9 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {
+    const A();
+  }
 definitions: ["x"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
     x = new A();
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml.expect
index bbce9bb..4a5575a 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_ctor_inferred.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
   return () → Null {
-    x = new main::A::•<dynamic>();
+    x = new #lib1::A::•<dynamic>();
   };
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
index 642f7ef..3c12a4c 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml
@@ -2,11 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
 definitions: []
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
-    T k = null;
+    T? k = null;
     return k;
   }
diff --git a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
index dfe66d2..a77652b 100644
--- a/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/class_type_param_reference_var.expression.yaml.expect
@@ -1,7 +1,7 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → main::A::T* {
-    main::A::T* k = null;
+  return () → #lib1::A::T? {
+    #lib1::A::T? k = null;
     return k;
   };
diff --git a/pkg/front_end/testcases/expression/const_usage.expression.yaml b/pkg/front_end/testcases/expression/const_usage.expression.yaml
index b017b26..9fadd7b 100644
--- a/pkg/front_end/testcases/expression/const_usage.expression.yaml
+++ b/pkg/front_end/testcases/expression/const_usage.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  const ConstClass const42 = ConstClass(42);
+  class ConstClass {
+    final int x;
+    const ConstClass(this.x);
+  }
 expression: |
   const42.x
diff --git a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
index e07be30..70b508c 100644
--- a/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage.expression.yaml.expect
@@ -1,8 +1,8 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #C2.{main::ConstClass::x}{dart.core::int*};
+  return #C2.{#lib1::ConstClass::x}{dart.core::int};
 constants  {
   #C1 = 42
-  #C2 = main::ConstClass {x:#C1}
+  #C2 = #lib1::ConstClass {x:#C1}
 }
diff --git a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml
index 9425ebb..497e6aa 100644
--- a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml
+++ b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml
@@ -2,8 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#ConstClass"
+sources: |
+  class ConstClass {
+    static const ConstClass classConst42 = ConstClass(42);
+    final int x;
+    const ConstClass(this.x);
+  }
+position: "#ConstClass"
 expression: |
   classConst42.x
diff --git a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
index e07be30..70b508c 100644
--- a/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/const_usage_class.expression.yaml.expect
@@ -1,8 +1,8 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return #C2.{main::ConstClass::x}{dart.core::int*};
+  return #C2.{#lib1::ConstClass::x}{dart.core::int};
 constants  {
   #C1 = 42
-  #C2 = main::ConstClass {x:#C1}
+  #C2 = #lib1::ConstClass {x:#C1}
 }
diff --git a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml
index 61f679b..8eafa97 100644
--- a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml
+++ b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-- entry_point: "main.dart"
-  definitions: []
-  position: "dart:collection"
-  expression: |
-    identical(1, 1)
+sources: |
+  main() {}
+position: "dart:collection"
+expression: |
+  identical(1, 1)
diff --git a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
index 5167c83..dd6add4 100644
--- a/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/core_lib_imported.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return dart.core::identical(1, 1);
diff --git a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml
index 6a2652b..864d0a2 100644
--- a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml
+++ b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-- entry_point: "main.dart"
-  definitions: []
-  position: "dart:collection"
-  expression: |
-    null is Queue
+sources: |
+  main() {}
+position: "dart:collection"
+expression: |
+  null is Queue
diff --git a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
index 72b7d9d..ed30efb 100644
--- a/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/core_lib_internal.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return null is dart.collection::Queue<dynamic>*;
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return null is{ForNonNullableByDefault} dart.collection::Queue<dynamic>;
diff --git a/pkg/front_end/testcases/expression/eval.dart b/pkg/front_end/testcases/expression/eval.dart
deleted file mode 100644
index db764a3..0000000
--- a/pkg/front_end/testcases/expression/eval.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
-int globalVar = 100;
-
-class MyClass {
-  static int staticVar = 1000;
-
-  static void method(int value) {}
-}
-
-void testFunction() {
-  int i = 0;
-  while (true) {
-    if (++i % 100000000 == 0) {
-      MyClass.method(10000);
-    }
-  }
-}
diff --git a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml
index ad1a058..f92bf67 100644
--- a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml
@@ -2,14 +2,24 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void hasList() {
+    List<String> x = ["a", "b", "c"];
+    int xCombinedLength = x.fold<int>(
+        0, (previousValue, element) => previousValue + element.length);
+    print("xCombinedLength = $xCombinedLength");
+  }
+  extension Foo on String {
+    int getFortyTwo() {
+      return 42;
+    }
+  }
 definitions: ["x"]
 # List<String>
 definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0"]
 type_definitions: [""]
 type_bounds: []
 type_defaults: []
-position: "main.dart"
 method: "hasList"
 # x is List<String> with entries, so x.first is String, String has extension
 # with method getFortyTwo.
diff --git a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
index 8545fba..6516caa 100644
--- a/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr< extends dynamic>(dart.core::List<dart.core::String> x) → dynamic
-  return main::Foo|getFortyTwo(x.{dart.core::Iterable::first}{dart.core::String*});
+  return #lib1::Foo|getFortyTwo(x.{dart.core::Iterable::first}{dart.core::String});
diff --git a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml
index e43e163..3729e29 100644
--- a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml
+++ b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml
@@ -2,14 +2,24 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void hasList() {
+    List<String> x = ["a", "b", "c"];
+    int xCombinedLength = x.fold<int>(
+        0, (previousValue, element) => previousValue + element.length);
+    print("xCombinedLength = $xCombinedLength");
+  }
+  extension Foo on String {
+    int getFortyTwo() {
+      return 42;
+    }
+  }
 definitions: ["x", "y"]
 # List<String>, int
 definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0", "dart:core", "int", "1", "0"]
 type_definitions: []
 type_bounds: []
 type_defaults: []
-position: "main.dart"
 method: "hasList"
 # Because x has a type (List<String>) x.fold knows that element is a String.
 expression: |
diff --git a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
index 84d4688..fc134e4 100644
--- a/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::List<dart.core::String> x, dart.core::int y) → dynamic
-  return x.{dart.core::Iterable::fold}<dart.core::int*>(0, (dart.core::int* previousValue, dart.core::String* element) → dart.core::int* => previousValue.{dart.core::num::+}(element.{dart.core::String::length}{dart.core::int*}){(dart.core::num*) →* dart.core::int*}){(dart.core::int*, (dart.core::int*, dart.core::String*) →* dart.core::int*) →* dart.core::int*};
+  return x.{dart.core::Iterable::fold}<dart.core::int>(0, (dart.core::int previousValue, dart.core::String element) → dart.core::int => previousValue.{dart.core::num::+}(element.{dart.core::String::length}{dart.core::int}){(dart.core::num) → dart.core::int}){(dart.core::int, (dart.core::int, dart.core::String) → dart.core::int) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/extension_this.expression.yaml b/pkg/front_end/testcases/expression/extension_this.expression.yaml
index 3ac2b8f..f9014c3 100644
--- a/pkg/front_end/testcases/expression/extension_this.expression.yaml
+++ b/pkg/front_end/testcases/expression/extension_this.expression.yaml
@@ -2,9 +2,20 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  extension Foo on String {
+    int parseAsInt() {
+      int result = int.parse(this);
+      print("Parsed $this to $result");
+      print(getFortyTwo());
+      return result;
+    }
+
+    int getFortyTwo() {
+      return 42;
+    }
+  }
 definitions: ["#this"]
-position: "main.dart"
 method: "Foo.parseAsInt"
 expression: |
   () { print(getFortyTwo()); return this; }
diff --git a/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
index aed2ac6..3aec282 100644
--- a/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_this.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dynamic #this) → dynamic
   return () → dynamic {
-    dart.core::print(main::Foo|getFortyTwo(#this as{TypeError,ForDynamic} dart.core::String*));
+    dart.core::print(#lib1::Foo|getFortyTwo(#this as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::String));
     return #this;
   };
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml
index 9b5507b..211acc3 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml
@@ -2,7 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 definitions: [a, b]
 position: "dart:collection"
 expression: |
diff --git a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
index b6b1ee0..2c26025 100644
--- a/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/from_vm_cc_linked_hash_map.expression.yaml.expect
@@ -1,21 +1,21 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
-  return ((dynamic a, dynamic b) → dart.core::bool* {
-    if(!(a{dynamic}._usedData =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._usedData) || !(a{dynamic}._deletedKeys =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._deletedKeys) || !(a{dynamic}._hashMask =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._hashMask) || !(a{dynamic}._index{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.length) || !(a{dynamic}._data{dynamic}.length =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._data{dynamic}.length)) {
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
+  return ((dynamic a, dynamic b) → dart.core::bool {
+    if(!(a{dynamic}._usedData =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._usedData) || !(a{dynamic}._deletedKeys =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._deletedKeys) || !(a{dynamic}._hashMask =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._hashMask) || !(a{dynamic}._index{dynamic}.length =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._index{dynamic}.length) || !(a{dynamic}._data{dynamic}.length =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._data{dynamic}.length)) {
       return false;
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._index{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
-      if(!(a{dynamic}._index{dynamic}.[](i) =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b{dynamic}._index{dynamic}.[](i))) {
+    for (dart.core::int i = 0; i.{dart.core::num::<}(a{dynamic}._index{dynamic}.length as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::num){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
+      if(!(a{dynamic}._index{dynamic}.[](i) =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b{dynamic}._index{dynamic}.[](i))) {
         return false;
       }
     }
-    for (dart.core::int* i = 0; i.{dart.core::num::<}(a{dynamic}._data{dynamic}.length as{TypeError,ForDynamic} dart.core::num*){(dart.core::num*) →* dart.core::bool*}; i = i.{dart.core::num::+}(1){(dart.core::num*) →* dart.core::int*}) {
+    for (dart.core::int i = 0; i.{dart.core::num::<}(a{dynamic}._data{dynamic}.length as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::num){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
       dynamic ad = a{dynamic}._data{dynamic}.[](i);
       dynamic bd = b{dynamic}._data{dynamic}.[](i);
-      if(!dart.core::identical(ad, bd) && !(ad =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} a && bd =={dart.core::Object::==}{(dart.core::Object*) →* dart.core::bool*} b)) {
+      if(!dart.core::identical(ad, bd) && !(ad =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} a && bd =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} b)) {
         return false;
       }
     }
     return true;
-  })(a, b){(dynamic, dynamic) →* dart.core::bool*};
+  })(a, b){(dynamic, dynamic) → dart.core::bool};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml
index 30dce60..00a2c4b 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml
@@ -2,9 +2,27 @@
 # 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.
 
+sources:
+  a.dart: |
+    import "b.dart";
+
+    main() {
+      Foo foo = new Foo();
+      print(foo.foo);
+    }
+
+    class Foo<E1> {
+      E1? get foo => null;
+      String get bar => "hello";
+    }
+
+    class Bar {}
+  b.dart: |
+    class Foo<E2> {
+      E2? get foo => null;
+      int get bar => 42;
+    }
 entry_point: "a.dart"
-import: "b.dart"
-definitions: []
 position: "a.dart#Foo"
 expression: |
   foo
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
index e9f21d4..ffd8346 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_1.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{#lib1::Foo::foo}{#lib1::Foo::E1*};
+  return this.{#lib1::Foo::foo}{#lib1::Foo::E1?};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml
index 2fba111..de73402 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml
@@ -2,9 +2,27 @@
 # 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.
 
+sources:
+  a.dart: |
+    import "b.dart";
+
+    main() {
+      Foo foo = new Foo();
+      print(foo.foo);
+    }
+
+    class Foo<E1> {
+      E1? get foo => null;
+      String get bar => "hello";
+    }
+
+    class Bar {}
+  b.dart: |
+    class Foo<E2> {
+      E2? get foo => null;
+      int get bar => 42;
+    }
 entry_point: "a.dart"
-import: "b.dart"
-definitions: []
 position: "a.dart#Foo"
 expression: |
   bar.length
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
index bdeb445..75cd1638 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{#lib1::Foo::bar}{dart.core::String*}.{dart.core::String::length}{dart.core::int*};
+  return this.{#lib1::Foo::bar}{dart.core::String}.{dart.core::String::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml
index f8eb3a8..fbafc54 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml
@@ -2,9 +2,27 @@
 # 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.
 
+sources:
+  a.dart: |
+    import "b.dart";
+
+    main() {
+      Foo foo = new Foo();
+      print(foo.foo);
+    }
+
+    class Foo<E1> {
+      E1? get foo => null;
+      String get bar => "hello";
+    }
+
+    class Bar {}
+  b.dart: |
+    class Foo<E2> {
+      E2? get foo => null;
+      int get bar => 42;
+    }
 entry_point: "a.dart"
-import: "b.dart"
-definitions: []
 position: "a.dart#Bar"
 expression: |
   new Foo().bar.length
diff --git a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
index 01c5a65..d3baad3 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_import_3.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return new #lib1::Foo::•<dynamic>().{#lib1::Foo::bar}{dart.core::String*}.{dart.core::String::length}{dart.core::int*};
+  return new #lib1::Foo::•<dynamic>().{#lib1::Foo::bar}{dart.core::String}.{dart.core::String::length}{dart.core::int};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml
index 23272e3..e057e29 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml
+++ b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml
@@ -2,8 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#E"
+sources: |
+  class E<T> {
+    T? _t;
+    T? get t => _t;
+  }
+position: "#E"
 expression: |
   t
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
index d7463a7..4800587 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_t.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{main::E::t}{main::E::T*};
+  return this.{#lib1::E::t}{#lib1::E::T?};
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml
index 343d2ba..02647cb 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml
+++ b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  main() {}
 position: "dart:collection#LinkedList"
 expression: |
   first
diff --git a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
index 9625a0d..066255f 100644
--- a/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/inside_class_with_t_in_dart_collection.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{dart.collection::LinkedList::first}{dart.collection::LinkedList::E*};
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.collection::LinkedList::first}{dart.collection::LinkedList::E};
diff --git a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
index b6739e7..1ef088c 100644
--- a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
+++ b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  enum En { a, b, c }
 expression: |
   En(123, 'foo')
diff --git a/pkg/front_end/testcases/expression/invalid.expression.yaml b/pkg/front_end/testcases/expression/invalid.expression.yaml
index 374eda8..46a15f5 100644
--- a/pkg/front_end/testcases/expression/invalid.expression.yaml
+++ b/pkg/front_end/testcases/expression/invalid.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  main() {}
 expression: |
   *foo(3,
diff --git a/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml b/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml
index 70beb29..3e08854 100644
--- a/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml
+++ b/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 type_definitions: ["a#b"]
-position: "main.dart"
 expression: |
   3
diff --git a/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml.expect b/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml.expect
index 792e96a..b27d75a 100644
--- a/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
-  pkg/front_end/testcases/expression/main.dart: Error: Illegal type parameter name 'TypeParameter(a#b)' found during expression compilation.
+  org-dartlang-testcase:///main.dart: Error: Illegal type parameter name 'TypeParameter(a#b)' found during expression compilation.
 }
 <no procedure>
diff --git a/pkg/front_end/testcases/expression/invalid_variable.expression.yaml b/pkg/front_end/testcases/expression/invalid_variable.expression.yaml
index 6d44881..7ee6fa5 100644
--- a/pkg/front_end/testcases/expression/invalid_variable.expression.yaml
+++ b/pkg/front_end/testcases/expression/invalid_variable.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 definitions: ["a#b"]
-position: "main.dart"
 expression: |
   3
diff --git a/pkg/front_end/testcases/expression/invalid_variable.expression.yaml.expect b/pkg/front_end/testcases/expression/invalid_variable.expression.yaml.expect
index a093fa5..9807b7a 100644
--- a/pkg/front_end/testcases/expression/invalid_variable.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/invalid_variable.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
-  pkg/front_end/testcases/expression/main.dart: Error: Illegal parameter name 'a#b' found during expression compilation.
+  org-dartlang-testcase:///main.dart: Error: Illegal parameter name 'a#b' found during expression compilation.
 }
 <no procedure>
diff --git a/pkg/front_end/testcases/expression/issue_48587.expression.yaml b/pkg/front_end/testcases/expression/issue_48587.expression.yaml
new file mode 100644
index 0000000..b527faf
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_48587.expression.yaml
@@ -0,0 +1,27 @@
+# Copyright (c) 2018, 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.
+
+# Check the expression compilation (including serialization) of usage of a
+# deferred import works.
+
+sources:
+  main.dart: |
+    import 'import.dart' deferred as d;
+
+    void main() {
+      print('hello');
+    }
+
+    Future<void> printDeferred() async {
+      d.deferredPrintLocal();
+    }
+
+  import.dart: |
+    void deferredPrintLocal() {
+      print('hello from deferred library');
+    }
+definitions: []
+position: "main.dart"
+expression: |
+  d.deferredPrintLocal()
diff --git a/pkg/front_end/testcases/expression/issue_48587.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_48587.expression.yaml.expect
new file mode 100644
index 0000000..f33f124
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_48587.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return let final dynamic #t1 = CheckLibraryIsLoaded(d) in #lib1::deferredPrintLocal();
diff --git a/pkg/front_end/testcases/expression/lib_ctor.expression.yaml b/pkg/front_end/testcases/expression/lib_ctor.expression.yaml
index c1d5cee..0ce5205 100644
--- a/pkg/front_end/testcases/expression/lib_ctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_ctor.expression.yaml
@@ -2,8 +2,9 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  class A<T> {
+    const A();
+  }
 expression: |
   () { new A(); const A(); }
diff --git a/pkg/front_end/testcases/expression/lib_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_ctor.expression.yaml.expect
index 5944c43..9a71d6b 100644
--- a/pkg/front_end/testcases/expression/lib_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_ctor.expression.yaml.expect
@@ -2,10 +2,9 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return () → Null {
-    new main::A::•<dynamic>();
-    #C2;
+    new #lib1::A::•<dynamic>();
+    #C1;
   };
 constants  {
-  #C1 = 0
-  #C2 = main::A<dynamic> {_priv:#C1}
+  #C1 = #lib1::A<dynamic> {}
 }
diff --git a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml
index 51e04a2..b50e643 100644
--- a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  import 'dart:io' show File, Process;
+  main() {}
 expression: |
   () { new Process(); new File.fromUri(Uri.parse("file://test.dart")); }
diff --git a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
index 430f437..3fc7e5b 100644
--- a/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_external_ctor.expression.yaml.expect
@@ -4,7 +4,7 @@
            ^^^^^^^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return () → Null {
+  return () → Never {
     throw new dart.core::AbstractClassInstantiationError::•("Process");
     dart.io::File::fromUri(dart.core::Uri::parse("file://test.dart"));
   };
diff --git a/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml b/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml
index 637ef0c..d93abe1 100644
--- a/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_nonctor.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  main() {}
 expression: |
   new Random()
diff --git a/pkg/front_end/testcases/expression/lib_nonreference.expression.yaml b/pkg/front_end/testcases/expression/lib_nonreference.expression.yaml
index a50ac5c..e5b1b5e 100644
--- a/pkg/front_end/testcases/expression/lib_nonreference.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_nonreference.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  main() {}
 expression: |
   acos(1.0)
diff --git a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml
index db9b51c..65af04b 100644
--- a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  import 'dart:io' show File;
+  main() {}
 expression: |
   new Directory("test")
diff --git a/pkg/front_end/testcases/expression/lib_reference.expression.yaml b/pkg/front_end/testcases/expression/lib_reference.expression.yaml
index 59999cc..9a128c0 100644
--- a/pkg/front_end/testcases/expression/lib_reference.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_reference.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  import 'dart:io' show exit;
+  main() {}
 expression: |
   exit(2)
diff --git a/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
index 5f9d49f..eab2b6c 100644
--- a/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_reference.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return dart.io::exit(2);
+  return let final Never #t1 = dart.io::exit(2) in throw new dart._internal::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/expression/lib_simple.expression.yaml b/pkg/front_end/testcases/expression/lib_simple.expression.yaml
index 052b9b4..6e5ceb3 100644
--- a/pkg/front_end/testcases/expression/lib_simple.expression.yaml
+++ b/pkg/front_end/testcases/expression/lib_simple.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  int doitstat(int x) => x + 1;
 expression: |
   doitstat(2)
diff --git a/pkg/front_end/testcases/expression/lib_simple.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_simple.expression.yaml.expect
index c54d90c..a515e97 100644
--- a/pkg/front_end/testcases/expression/lib_simple.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_simple.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return main::doitstat(2);
+  return #lib1::doitstat(2);
diff --git a/pkg/front_end/testcases/expression/library_private_get.expression.yaml b/pkg/front_end/testcases/expression/library_private_get.expression.yaml
index 1420876..803b4d4 100644
--- a/pkg/front_end/testcases/expression/library_private_get.expression.yaml
+++ b/pkg/front_end/testcases/expression/library_private_get.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  int _globalPrivate = 7;
 expression: |
   _globalPrivate
diff --git a/pkg/front_end/testcases/expression/library_private_get.expression.yaml.expect b/pkg/front_end/testcases/expression/library_private_get.expression.yaml.expect
index 3344ae2..bbd5c55 100644
--- a/pkg/front_end/testcases/expression/library_private_get.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/library_private_get.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return main::_globalPrivate;
+  return #lib1::_globalPrivate;
diff --git a/pkg/front_end/testcases/expression/library_private_method.expression.yaml b/pkg/front_end/testcases/expression/library_private_method.expression.yaml
index 49c6972..06e5b0b 100644
--- a/pkg/front_end/testcases/expression/library_private_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/library_private_method.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  int _privateToplevel(int x) => x + 1;
 expression: |
   _privateToplevel(3)
diff --git a/pkg/front_end/testcases/expression/library_private_method.expression.yaml.expect b/pkg/front_end/testcases/expression/library_private_method.expression.yaml.expect
index 6a0e56c..f02e425 100644
--- a/pkg/front_end/testcases/expression/library_private_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/library_private_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return main::_privateToplevel(3);
+  return #lib1::_privateToplevel(3);
diff --git a/pkg/front_end/testcases/expression/library_private_set.expression.yaml b/pkg/front_end/testcases/expression/library_private_set.expression.yaml
index 5fe632f..83744da 100644
--- a/pkg/front_end/testcases/expression/library_private_set.expression.yaml
+++ b/pkg/front_end/testcases/expression/library_private_set.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  int _globalPrivate = 7;
 expression: |
   _globalPrivate = 2
diff --git a/pkg/front_end/testcases/expression/library_private_set.expression.yaml.expect b/pkg/front_end/testcases/expression/library_private_set.expression.yaml.expect
index e7752bf..72b218d 100644
--- a/pkg/front_end/testcases/expression/library_private_set.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/library_private_set.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return main::_globalPrivate = 2;
+  return #lib1::_globalPrivate = 2;
diff --git a/pkg/front_end/testcases/expression/main.dart b/pkg/front_end/testcases/expression/main.dart
deleted file mode 100644
index 35045e1..0000000
--- a/pkg/front_end/testcases/expression/main.dart
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
-library main;
-
-import 'dart:io' show File, Process, exit;
-import 'dart:collection';
-
-class Entry extends LinkedListEntry<Entry> {}
-
-List<String> listOfStrings = ["hello"];
-
-int doitstat(int x) => x + 1;
-int _privateToplevel(int x) => x + 1;
-
-int globalVar = 6;
-int _globalPrivate = 7;
-
-const ConstClass const42 = ConstClass(42);
-
-class ConstClass {
-  static const ConstClass classConst42 = ConstClass(42);
-  final int x;
-  const ConstClass(this.x);
-}
-
-class A<T> {
-  const A();
-  static int doit(int x) => x + 1;
-  static int staticVar = 3;
-  int doit_with_this(int x) => x + 1;
-
-  final int _priv = 0;
-  void _privMethod() {}
-}
-
-T id<T>(T x) => x;
-
-class B extends A<Object> {
-  int x;
-  final int y = 7;
-  int _priv;
-  String get z {
-    return "";
-  }
-
-  void set z(_) {}
-  void _privMethod() {}
-}
-
-class Bound {}
-
-class HasPrivate {
-  int _priv = 0;
-}
-
-class C<T extends Bound> extends HasPrivate {}
-
-void hasBound<T extends Bound>() {}
-
-Object k;
-
-class D<T> {
-  Y id<Y>(Y x) => x;
-  m(List<T> l) {
-    assert(l is List<T>);
-  }
-
-  foo() {
-    List<T> s;
-  }
-}
-
-abstract class Built<V extends Built<V, B>, B extends Builder<V, B>> {}
-
-abstract class Builder<V extends Built<V, B>, B extends Builder<V, B>> {}
-
-class MiddlewareApi<State extends Built<State, StateBuilder>,
-    StateBuilder extends Builder<State, StateBuilder>> {}
-
-main() {
-  exit(0);
-}
-
-extension Foo on String {
-  int parseAsInt() {
-    int result = int.parse(this);
-    print("Parsed $this to $result");
-    print(getFortyTwo());
-    return result;
-  }
-
-  int getFortyTwo() {
-    return 42;
-  }
-}
-
-class E<T> {
-  T _t;
-  T get t => _t;
-}
-
-void withBound<E extends String>(List<E> x) {
-  List<E> y = [];
-  List<String> z = [];
-  z.addAll(y);
-}
-
-void withBound2<E>() {
-  print(E);
-}
-
-void hasList() {
-  List<String> x = ["a", "b", "c"];
-  int xCombinedLength = x.fold<int>(
-      0, (previousValue, element) => previousValue + element.length);
-  print("xCombinedLength = $xCombinedLength");
-}
-
-void hasClosure() {
-  List<String> x() {
-    return ["hello"];
-  }
-
-  int xCombinedLength = x()
-      .fold<int>(0, (previousValue, element) => previousValue + element.length);
-  print("xCombinedLength = $xCombinedLength");
-}
-
-enum En { a, b, c }
diff --git a/pkg/front_end/testcases/expression/main_2.dart b/pkg/front_end/testcases/expression/main_2.dart
deleted file mode 100644
index eb9600f..0000000
--- a/pkg/front_end/testcases/expression/main_2.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// 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.
-// @dart=2.9
-library main_2;
-
-import 'main.dart' as m;
-
-main() {
-  m.main();
-}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/expression/main_private.dart b/pkg/front_end/testcases/expression/main_private.dart
deleted file mode 100644
index cce57ee..0000000
--- a/pkg/front_end/testcases/expression/main_private.dart
+++ /dev/null
@@ -1,263 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-class Foo {
-  int what;
-
-  Foo() : what = 0;
-  Foo.publicNamed() : what = 1;
-  Foo._privateNamed() : what = 2;
-
-  int publicMethod() {
-    return 42;
-  }
-
-  int _privateMethod() {
-    return 43;
-  }
-
-  static int publicStaticMethod() {
-    return 44;
-  }
-
-  static int _privateStaticMethod() {
-    return 45;
-  }
-
-  int publicField = 84;
-  int _privateField = 85;
-  static int publicStaticField = 86;
-  static int _privateStaticField = 87;
-
-  int get publicGetter => -1;
-  int get _privateGetter => -2;
-  static int get publicStaticGetter => -3;
-  static int get _privateStaticGetter => -4;
-
-  void set publicSetter(int x) {}
-  void set _privateSetter(int x) {}
-  static void set publicStaticSetter(int x) {}
-  static void set _privateStaticSetter(int x) {}
-}
-
-extension PublicExtension on Foo {
-  int publicPublicExtensionMethod() {
-    return 20;
-  }
-
-  int _publicPrivateExtensionMethod() {
-    return 21;
-  }
-
-  static int publicPublicStaticExtensionMethod() {
-    return 22;
-  }
-
-  static int _publicPrivateStaticExtensionMethod() {
-    return 23;
-  }
-
-  static int publicPublicStaticExtensionField = 24;
-  static int _publicPrivateStaticExtensionField = 25;
-
-  int get publicPublicExtensionGetter {
-    return 26;
-  }
-
-  int get _publicPrivateExtensionGetter {
-    return 27;
-  }
-
-  static int get publicPublicStaticExtensionGetter {
-    return 28;
-  }
-
-  static int get _publicPrivateStaticExtensionGetter {
-    return 29;
-  }
-
-  void set publicPublicExtensionSetter(int x) {}
-
-  void set _publicPrivateExtensionSetter(int x) {}
-
-  static void set publicPublicStaticExtensionSetter(int x) {}
-
-  static void set _publicPrivateStaticExtensionSetter(int x) {}
-}
-
-extension _PrivateExtension on Foo {
-  int privatePublicExtensionMethod() {
-    return 30;
-  }
-
-  int _privatePrivateExtensionMethod() {
-    return 31;
-  }
-
-  static int privatePublicStaticExtensionMethod() {
-    return 32;
-  }
-
-  static int _privatePrivateStaticExtensionMethod() {
-    return 33;
-  }
-
-  static int privatePublicStaticExtensionField = 34;
-  static int _privatePrivateStaticExtensionField = 35;
-
-  int get privatePublicExtensionGetter {
-    return 36;
-  }
-
-  int get _privatePrivateExtensionGetter {
-    return 37;
-  }
-
-  static int get privatePublicStaticExtensionGetter {
-    return 38;
-  }
-
-  static int get _privatePrivateStaticExtensionGetter {
-    return 39;
-  }
-
-  void set privatePublicExtensionSetter(int x) {}
-
-  void set _privatePrivateExtensionSetter(int x) {}
-
-  static void set privatePublicStaticExtensionSetter(int x) {}
-
-  static void set _privatePrivateStaticExtensionSetter(int x) {}
-}
-
-int publicTopLevelMethod() {
-  return 50;
-}
-
-int _privateTopLevelMethod() {
-  return 51;
-}
-
-int publicTopLevelField = 52;
-int _privateTopLevelField = 53;
-
-int get publicTopLevelGetter {
-  return 54;
-}
-
-int get _privateTopLevelGetter {
-  return 55;
-}
-
-void set publicTopLevelSetter(int x) {}
-
-void set _privateTopLevelSetter(int x) {}
-
-main() {
-  // Class constructors.
-  Foo foo = new Foo();
-  assert(foo.what == 0);
-  foo = new Foo.publicNamed();
-  assert(foo.what == 1);
-  foo = new Foo._privateNamed();
-  assert(foo.what == 2);
-
-  // Class methods.
-  assert(foo.publicMethod() == 42);
-  assert(foo._privateMethod() == 43);
-  assert(Foo.publicStaticMethod() == 44);
-  assert(Foo._privateStaticMethod() == 45);
-
-  // Class fields.
-  assert(foo.publicField == 84);
-  foo.publicField = -84;
-  assert(foo.publicField == -84);
-  assert(foo._privateField == 85);
-  foo._privateField = -85;
-  assert(foo._privateField == -85);
-  assert(Foo.publicStaticField == 86);
-  Foo.publicStaticField = -86;
-  assert(Foo.publicStaticField == -86);
-  assert(Foo._privateStaticField == 87);
-  Foo._privateStaticField = -87;
-  assert(Foo._privateStaticField == -87);
-
-  // Class getters.
-  assert(foo.publicGetter == -1);
-  assert(foo._privateGetter == -2);
-  assert(Foo.publicStaticGetter == -3);
-  assert(Foo._privateStaticGetter == -4);
-
-  // Class setters.
-  foo.publicSetter = 42;
-  foo._privateSetter = 42;
-  Foo.publicStaticSetter = 42;
-  Foo._privateStaticSetter = 42;
-
-  // Extension methods.
-  assert(foo.publicPublicExtensionMethod() == 20);
-  assert(foo._publicPrivateExtensionMethod() == 21);
-  assert(PublicExtension.publicPublicStaticExtensionMethod() == 22);
-  assert(PublicExtension._publicPrivateStaticExtensionMethod() == 23);
-  assert(foo.privatePublicExtensionMethod() == 30);
-  assert(foo._privatePrivateExtensionMethod() == 31);
-  assert(_PrivateExtension.privatePublicStaticExtensionMethod() == 32);
-  assert(_PrivateExtension._privatePrivateStaticExtensionMethod() == 33);
-
-  // Extension fields.
-  assert(PublicExtension.publicPublicStaticExtensionField == 24);
-  PublicExtension.publicPublicStaticExtensionField = -24;
-  assert(PublicExtension.publicPublicStaticExtensionField == -24);
-  assert(PublicExtension._publicPrivateStaticExtensionField == 25);
-  PublicExtension._publicPrivateStaticExtensionField = -25;
-  assert(PublicExtension._publicPrivateStaticExtensionField == -25);
-  assert(_PrivateExtension.privatePublicStaticExtensionField == 34);
-  _PrivateExtension.privatePublicStaticExtensionField = -34;
-  assert(_PrivateExtension.privatePublicStaticExtensionField == -34);
-  assert(_PrivateExtension._privatePrivateStaticExtensionField == 35);
-  _PrivateExtension._privatePrivateStaticExtensionField = -35;
-  assert(_PrivateExtension._privatePrivateStaticExtensionField == -35);
-
-  // Extension getters.
-  assert(foo.publicPublicExtensionGetter == 26);
-  assert(foo._publicPrivateExtensionGetter == 27);
-  assert(PublicExtension.publicPublicStaticExtensionGetter == 28);
-  assert(PublicExtension._publicPrivateStaticExtensionGetter == 29);
-  assert(foo.privatePublicExtensionGetter == 36);
-  assert(foo._privatePrivateExtensionGetter == 37);
-  assert(_PrivateExtension.privatePublicStaticExtensionGetter == 38);
-  assert(_PrivateExtension._privatePrivateStaticExtensionGetter == 39);
-
-  // Extension setters.
-  foo.publicPublicExtensionSetter = 42;
-  foo._publicPrivateExtensionSetter = 42;
-  PublicExtension.publicPublicStaticExtensionSetter = 42;
-  PublicExtension._publicPrivateStaticExtensionSetter = 42;
-  foo.privatePublicExtensionSetter = 42;
-  foo._privatePrivateExtensionSetter = 42;
-  _PrivateExtension.privatePublicStaticExtensionSetter = 42;
-  _PrivateExtension._privatePrivateStaticExtensionSetter = 42;
-
-  // Top-level methods.
-  assert(publicTopLevelMethod() == 50);
-  assert(_privateTopLevelMethod() == 51);
-
-  // Top-level fields.
-  assert(publicTopLevelField == 52);
-  publicTopLevelField = -52;
-  assert(publicTopLevelField == -52);
-  assert(_privateTopLevelField == 53);
-  _privateTopLevelField = -53;
-  assert(_privateTopLevelField == -53);
-
-  // Top-level getters.
-  assert(publicTopLevelGetter == 54);
-  assert(_privateTopLevelGetter == 55);
-
-  // Top-level setters.
-  publicTopLevelSetter = 42;
-  _privateTopLevelSetter = 42;
-}
diff --git a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml
index 2c83b92..48b86e4 100644
--- a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml
+++ b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml
@@ -2,8 +2,14 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class D<T> {
+    Y id<Y>(Y x) => x;
+    m(List<T> l) {
+      assert(l is List<T>);
+    }
+  }
 definitions: ["s"]
-position: "main.dart#D"
+position: "#D"
 expression: |
   m(id(s = []))
diff --git a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
index 69d0373..3a81278 100644
--- a/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/missing_variable_types.expression.yaml.expect
@@ -1,4 +1,8 @@
 Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:6: Error: The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<T>'.
+   - 'List' is from 'dart:core'.
+  m(id(s = []))
+       ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic s) → dynamic
-  return this.{main::D::m}(this.{main::D::id}<dart.core::List<main::D::T*>*>((s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError} dart.core::List<main::D::T*>*){(dart.core::List<main::D::T*>*) →* dart.core::List<main::D::T*>*}){(dart.core::List<main::D::T*>*) →* dynamic};
+  return this.{#lib1::D::m}(this.{#lib1::D::id}<dart.core::List<#lib1::D::T%>>(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:6: Error: The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<T>'.\n - 'List' is from 'dart:core'.\nm(id(s = []))\n     ^" in (s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError,ForNonNullableByDefault} Never){(dart.core::List<#lib1::D::T%>) → dart.core::List<#lib1::D::T%>}){(dart.core::List<#lib1::D::T%>) → dynamic};
diff --git a/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml b/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml
new file mode 100644
index 0000000..34bd7f2
--- /dev/null
+++ b/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml
@@ -0,0 +1,16 @@
+# 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.
+
+sources: |
+  // @dart=2.9
+  class D<T> {
+    Y id<Y>(Y x) => x;
+    m(List<T> l) {
+      assert(l is List<T>);
+    }
+  }
+definitions: ["s"]
+position: "#D"
+expression: |
+  m(id(s = []))
diff --git a/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml.expect b/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml.expect
new file mode 100644
index 0000000..89cbec5
--- /dev/null
+++ b/pkg/front_end/testcases/expression/missing_variable_types2.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic s) → dynamic
+  return this.{#lib1::D::m}(this.{#lib1::D::id}<dart.core::List<#lib1::D::T*>*>((s = dart.core::_GrowableList::•<dynamic>(0)) as{TypeError} dart.core::List<#lib1::D::T*>*){(dart.core::List<#lib1::D::T*>*) →* dart.core::List<#lib1::D::T*>*}){(dart.core::List<#lib1::D::T*>*) →* dynamic};
diff --git a/pkg/front_end/testcases/expression/noclass.expression.yaml b/pkg/front_end/testcases/expression/noclass.expression.yaml
index bc5edf0..332dd5f 100644
--- a/pkg/front_end/testcases/expression/noclass.expression.yaml
+++ b/pkg/front_end/testcases/expression/noclass.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#NoClass"
+sources: |
+  main() {}
+position: "#NoClass"
 expression: |
   0
diff --git a/pkg/front_end/testcases/expression/nolib.expression.yaml b/pkg/front_end/testcases/expression/nolib.expression.yaml
index 9ec59b7..80838fa 100644
--- a/pkg/front_end/testcases/expression/nolib.expression.yaml
+++ b/pkg/front_end/testcases/expression/nolib.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "nono.dart"
+sources: |
+  main() {}
+position: "noexisting.dart"
 expression: |
   0
diff --git a/pkg/front_end/testcases/expression/nolib.expression.yaml.expect b/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
index c46c67f..c48fc35 100644
--- a/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/nolib.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+method /*isNonNullableByDefault, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return 0;
diff --git a/pkg/front_end/testcases/expression/param_assign.expression.yaml b/pkg/front_end/testcases/expression/param_assign.expression.yaml
index 137e2a4..ef8f482 100644
--- a/pkg/front_end/testcases/expression/param_assign.expression.yaml
+++ b/pkg/front_end/testcases/expression/param_assign.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 definitions: ["x", "y"]
-position: "main.dart"
 expression: |
   x = 3
diff --git a/pkg/front_end/testcases/expression/param_capture.expression.yaml b/pkg/front_end/testcases/expression/param_capture.expression.yaml
index ac45276..2edb784 100644
--- a/pkg/front_end/testcases/expression/param_capture.expression.yaml
+++ b/pkg/front_end/testcases/expression/param_capture.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 definitions: ["x", "y"]
-position: "main.dart"
 expression: |
   () { x = x + y; }
diff --git a/pkg/front_end/testcases/expression/param_conflict.expression.yaml b/pkg/front_end/testcases/expression/param_conflict.expression.yaml
index b63adf0..79ec79d 100644
--- a/pkg/front_end/testcases/expression/param_conflict.expression.yaml
+++ b/pkg/front_end/testcases/expression/param_conflict.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  int dostat(int x) => x + 1;
 definitions: ["dostat", "y"]
-position: "main.dart"
 expression: |
   dostat.foo()
diff --git a/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml b/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml
index 2bf8db6..5d32980 100644
--- a/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml
+++ b/pkg/front_end/testcases/expression/param_conflict_class.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A {}
 definitions: ["A", "y"]
-position: "main.dart"
 expression: |
   A.foo(y)
diff --git a/pkg/front_end/testcases/expression/param_method.expression.yaml b/pkg/front_end/testcases/expression/param_method.expression.yaml
index dbb3b59..b8d37c8 100644
--- a/pkg/front_end/testcases/expression/param_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/param_method.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  main() {}
 definitions: ["x", "y"]
-position: "main.dart"
 expression: |
   x.foo(y)
diff --git a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml
index eabefb8..acd4ac8 100644
--- a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml
+++ b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml
@@ -2,8 +2,9 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  import 'dart:io';
+  main() {}
 position: "dart:io"
 static: true
 expression: |
diff --git a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
index 872d5f9..4cffbf8 100644
--- a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return dart.io::Platform::isAndroid;
diff --git a/pkg/front_end/testcases/expression/private_stuff.expression.yaml b/pkg/front_end/testcases/expression/private_stuff.expression.yaml
index 2e9f8c6..8d15684 100644
--- a/pkg/front_end/testcases/expression/private_stuff.expression.yaml
+++ b/pkg/front_end/testcases/expression/private_stuff.expression.yaml
@@ -2,9 +2,266 @@
 # 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.
 
-entry_point: "main_private.dart"
-definitions: []
-position: "main_private.dart"
+sources: |
+  // @dart = 2.9
+
+  class Foo {
+    int what;
+
+    Foo() : what = 0;
+    Foo.publicNamed() : what = 1;
+    Foo._privateNamed() : what = 2;
+
+    int publicMethod() {
+      return 42;
+    }
+
+    int _privateMethod() {
+      return 43;
+    }
+
+    static int publicStaticMethod() {
+      return 44;
+    }
+
+    static int _privateStaticMethod() {
+      return 45;
+    }
+
+    int publicField = 84;
+    int _privateField = 85;
+    static int publicStaticField = 86;
+    static int _privateStaticField = 87;
+
+    int get publicGetter => -1;
+    int get _privateGetter => -2;
+    static int get publicStaticGetter => -3;
+    static int get _privateStaticGetter => -4;
+
+    void set publicSetter(int x) {}
+    void set _privateSetter(int x) {}
+    static void set publicStaticSetter(int x) {}
+    static void set _privateStaticSetter(int x) {}
+  }
+
+  extension PublicExtension on Foo {
+    int publicPublicExtensionMethod() {
+      return 20;
+    }
+
+    int _publicPrivateExtensionMethod() {
+      return 21;
+    }
+
+    static int publicPublicStaticExtensionMethod() {
+      return 22;
+    }
+
+    static int _publicPrivateStaticExtensionMethod() {
+      return 23;
+    }
+
+    static int publicPublicStaticExtensionField = 24;
+    static int _publicPrivateStaticExtensionField = 25;
+
+    int get publicPublicExtensionGetter {
+      return 26;
+    }
+
+    int get _publicPrivateExtensionGetter {
+      return 27;
+    }
+
+    static int get publicPublicStaticExtensionGetter {
+      return 28;
+    }
+
+    static int get _publicPrivateStaticExtensionGetter {
+      return 29;
+    }
+
+    void set publicPublicExtensionSetter(int x) {}
+
+    void set _publicPrivateExtensionSetter(int x) {}
+
+    static void set publicPublicStaticExtensionSetter(int x) {}
+
+    static void set _publicPrivateStaticExtensionSetter(int x) {}
+  }
+
+  extension _PrivateExtension on Foo {
+    int privatePublicExtensionMethod() {
+      return 30;
+    }
+
+    int _privatePrivateExtensionMethod() {
+      return 31;
+    }
+
+    static int privatePublicStaticExtensionMethod() {
+      return 32;
+    }
+
+    static int _privatePrivateStaticExtensionMethod() {
+      return 33;
+    }
+
+    static int privatePublicStaticExtensionField = 34;
+    static int _privatePrivateStaticExtensionField = 35;
+
+    int get privatePublicExtensionGetter {
+      return 36;
+    }
+
+    int get _privatePrivateExtensionGetter {
+      return 37;
+    }
+
+    static int get privatePublicStaticExtensionGetter {
+      return 38;
+    }
+
+    static int get _privatePrivateStaticExtensionGetter {
+      return 39;
+    }
+
+    void set privatePublicExtensionSetter(int x) {}
+
+    void set _privatePrivateExtensionSetter(int x) {}
+
+    static void set privatePublicStaticExtensionSetter(int x) {}
+
+    static void set _privatePrivateStaticExtensionSetter(int x) {}
+  }
+
+  int publicTopLevelMethod() {
+    return 50;
+  }
+
+  int _privateTopLevelMethod() {
+    return 51;
+  }
+
+  int publicTopLevelField = 52;
+  int _privateTopLevelField = 53;
+
+  int get publicTopLevelGetter {
+    return 54;
+  }
+
+  int get _privateTopLevelGetter {
+    return 55;
+  }
+
+  void set publicTopLevelSetter(int x) {}
+
+  void set _privateTopLevelSetter(int x) {}
+
+  main() {
+    // Class constructors.
+    Foo foo = new Foo();
+    assert(foo.what == 0);
+    foo = new Foo.publicNamed();
+    assert(foo.what == 1);
+    foo = new Foo._privateNamed();
+    assert(foo.what == 2);
+
+    // Class methods.
+    assert(foo.publicMethod() == 42);
+    assert(foo._privateMethod() == 43);
+    assert(Foo.publicStaticMethod() == 44);
+    assert(Foo._privateStaticMethod() == 45);
+
+    // Class fields.
+    assert(foo.publicField == 84);
+    foo.publicField = -84;
+    assert(foo.publicField == -84);
+    assert(foo._privateField == 85);
+    foo._privateField = -85;
+    assert(foo._privateField == -85);
+    assert(Foo.publicStaticField == 86);
+    Foo.publicStaticField = -86;
+    assert(Foo.publicStaticField == -86);
+    assert(Foo._privateStaticField == 87);
+    Foo._privateStaticField = -87;
+    assert(Foo._privateStaticField == -87);
+
+    // Class getters.
+    assert(foo.publicGetter == -1);
+    assert(foo._privateGetter == -2);
+    assert(Foo.publicStaticGetter == -3);
+    assert(Foo._privateStaticGetter == -4);
+
+    // Class setters.
+    foo.publicSetter = 42;
+    foo._privateSetter = 42;
+    Foo.publicStaticSetter = 42;
+    Foo._privateStaticSetter = 42;
+
+    // Extension methods.
+    assert(foo.publicPublicExtensionMethod() == 20);
+    assert(foo._publicPrivateExtensionMethod() == 21);
+    assert(PublicExtension.publicPublicStaticExtensionMethod() == 22);
+    assert(PublicExtension._publicPrivateStaticExtensionMethod() == 23);
+    assert(foo.privatePublicExtensionMethod() == 30);
+    assert(foo._privatePrivateExtensionMethod() == 31);
+    assert(_PrivateExtension.privatePublicStaticExtensionMethod() == 32);
+    assert(_PrivateExtension._privatePrivateStaticExtensionMethod() == 33);
+
+    // Extension fields.
+    assert(PublicExtension.publicPublicStaticExtensionField == 24);
+    PublicExtension.publicPublicStaticExtensionField = -24;
+    assert(PublicExtension.publicPublicStaticExtensionField == -24);
+    assert(PublicExtension._publicPrivateStaticExtensionField == 25);
+    PublicExtension._publicPrivateStaticExtensionField = -25;
+    assert(PublicExtension._publicPrivateStaticExtensionField == -25);
+    assert(_PrivateExtension.privatePublicStaticExtensionField == 34);
+    _PrivateExtension.privatePublicStaticExtensionField = -34;
+    assert(_PrivateExtension.privatePublicStaticExtensionField == -34);
+    assert(_PrivateExtension._privatePrivateStaticExtensionField == 35);
+    _PrivateExtension._privatePrivateStaticExtensionField = -35;
+    assert(_PrivateExtension._privatePrivateStaticExtensionField == -35);
+
+    // Extension getters.
+    assert(foo.publicPublicExtensionGetter == 26);
+    assert(foo._publicPrivateExtensionGetter == 27);
+    assert(PublicExtension.publicPublicStaticExtensionGetter == 28);
+    assert(PublicExtension._publicPrivateStaticExtensionGetter == 29);
+    assert(foo.privatePublicExtensionGetter == 36);
+    assert(foo._privatePrivateExtensionGetter == 37);
+    assert(_PrivateExtension.privatePublicStaticExtensionGetter == 38);
+    assert(_PrivateExtension._privatePrivateStaticExtensionGetter == 39);
+
+    // Extension setters.
+    foo.publicPublicExtensionSetter = 42;
+    foo._publicPrivateExtensionSetter = 42;
+    PublicExtension.publicPublicStaticExtensionSetter = 42;
+    PublicExtension._publicPrivateStaticExtensionSetter = 42;
+    foo.privatePublicExtensionSetter = 42;
+    foo._privatePrivateExtensionSetter = 42;
+    _PrivateExtension.privatePublicStaticExtensionSetter = 42;
+    _PrivateExtension._privatePrivateStaticExtensionSetter = 42;
+
+    // Top-level methods.
+    assert(publicTopLevelMethod() == 50);
+    assert(_privateTopLevelMethod() == 51);
+
+    // Top-level fields.
+    assert(publicTopLevelField == 52);
+    publicTopLevelField = -52;
+    assert(publicTopLevelField == -52);
+    assert(_privateTopLevelField == 53);
+    _privateTopLevelField = -53;
+    assert(_privateTopLevelField == -53);
+
+    // Top-level getters.
+    assert(publicTopLevelGetter == 54);
+    assert(_privateTopLevelGetter == 55);
+
+    // Top-level setters.
+    publicTopLevelSetter = 42;
+    _privateTopLevelSetter = 42;
+  }
 expression: |
   () {
     // Class constructors.
diff --git a/pkg/front_end/testcases/expression/regress_34224.expression.yaml b/pkg/front_end/testcases/expression/regress_34224.expression.yaml
index a399aaf..e9be2ab 100644
--- a/pkg/front_end/testcases/expression/regress_34224.expression.yaml
+++ b/pkg/front_end/testcases/expression/regress_34224.expression.yaml
@@ -2,8 +2,8 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  main() {}
 position: "dart:core#Object"
 expression: |
   toString()
\ No newline at end of file
diff --git a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
index fd54faa..04d903b 100644
--- a/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/regress_34224.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return this.{dart.core::Object::toString}(){() →* dart.core::String*};
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.core::Object::toString}(){() → dart.core::String};
diff --git a/pkg/front_end/testcases/expression/set_literal.expression.yaml b/pkg/front_end/testcases/expression/set_literal.expression.yaml
index 7354c65..c4d1229 100644
--- a/pkg/front_end/testcases/expression/set_literal.expression.yaml
+++ b/pkg/front_end/testcases/expression/set_literal.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  main() {}
 expression: |
   {"a"}
diff --git a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
index 175aec2..9fe5f50 100644
--- a/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/set_literal.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return block {
-    final dart.core::Set<dart.core::String*>* #t1 = new dart.collection::_CompactLinkedHashSet::•<dart.core::String*>();
-    #t1.{dart.core::Set::add}{Invariant}("a"){(dart.core::String*) →* dart.core::bool*};
+    final dart.core::Set<dart.core::String> #t1 = new dart.collection::_CompactLinkedHashSet::•<dart.core::String>();
+    #t1.{dart.core::Set::add}{Invariant}("a"){(dart.core::String) → dart.core::bool};
   } =>#t1;
diff --git a/pkg/front_end/testcases/expression/spread_element.expression.yaml b/pkg/front_end/testcases/expression/spread_element.expression.yaml
index 3583851..d2bb995 100644
--- a/pkg/front_end/testcases/expression/spread_element.expression.yaml
+++ b/pkg/front_end/testcases/expression/spread_element.expression.yaml
@@ -2,8 +2,7 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart"
+sources: |
+  List<String> listOfStrings = ["hello"];
 expression: |
   [...listOfStrings]
diff --git a/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect b/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
index 6c8b355..fce8f75 100644
--- a/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/spread_element.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return block {
-    final dart.core::List<dart.core::String*>* #t1 = dart.core::List::of<dart.core::String*>(main::listOfStrings);
+    final dart.core::List<dart.core::String> #t1 = dart.core::List::of<dart.core::String>(#lib1::listOfStrings);
   } =>#t1;
diff --git a/pkg/front_end/testcases/expression/super_private_get.expression.yaml b/pkg/front_end/testcases/expression/super_private_get.expression.yaml
index a4b1c4e..4e19488 100644
--- a/pkg/front_end/testcases/expression/super_private_get.expression.yaml
+++ b/pkg/front_end/testcases/expression/super_private_get.expression.yaml
@@ -2,8 +2,13 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#B"
+sources: |
+  class A {
+    final int? _priv = 0;
+  }
+  class B extends A {
+    int? _priv;
+  }
+position: "#B"
 expression: |
   super._priv
diff --git a/pkg/front_end/testcases/expression/super_private_get.expression.yaml.expect b/pkg/front_end/testcases/expression/super_private_get.expression.yaml.expect
index 20ec891..fedb500 100644
--- a/pkg/front_end/testcases/expression/super_private_get.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/super_private_get.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return super.{main::A::_priv};
+  return super.{#lib1::A::_priv};
diff --git a/pkg/front_end/testcases/expression/super_private_method.expression.yaml b/pkg/front_end/testcases/expression/super_private_method.expression.yaml
index 53a1429..2de3f1b 100644
--- a/pkg/front_end/testcases/expression/super_private_method.expression.yaml
+++ b/pkg/front_end/testcases/expression/super_private_method.expression.yaml
@@ -2,8 +2,14 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#B"
+sources: |
+  class A {
+    void _privMethod() {}
+  }
+
+  class B extends A {
+    void _privMethod() {}
+  }
+position: "#B"
 expression: |
   super._privMethod
diff --git a/pkg/front_end/testcases/expression/super_private_method.expression.yaml.expect b/pkg/front_end/testcases/expression/super_private_method.expression.yaml.expect
index 39cb950..09e5b13 100644
--- a/pkg/front_end/testcases/expression/super_private_method.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/super_private_method.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return super.{main::A::_privMethod};
+  return super.{#lib1::A::_privMethod};
diff --git a/pkg/front_end/testcases/expression/super_private_set.expression.yaml b/pkg/front_end/testcases/expression/super_private_set.expression.yaml
index f52f8c3..59b9c36 100644
--- a/pkg/front_end/testcases/expression/super_private_set.expression.yaml
+++ b/pkg/front_end/testcases/expression/super_private_set.expression.yaml
@@ -2,8 +2,14 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
-position: "main.dart#C"
+sources: |
+  class A {
+    int? _priv = 0;
+  }
+  class B extends A {
+    int? _priv;
+  }
+
+position: "#B"
 expression: |
   super._priv = 0
diff --git a/pkg/front_end/testcases/expression/super_private_set.expression.yaml.expect b/pkg/front_end/testcases/expression/super_private_set.expression.yaml.expect
index 8e9d782..0e518c3 100644
--- a/pkg/front_end/testcases/expression/super_private_set.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/super_private_set.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
-  return super.{main::HasPrivate::_priv} = 0;
+  return super.{#lib1::A::_priv} = 0;
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml
index 5565212..59c45ef 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml
@@ -2,14 +2,22 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void hasClosure() {
+    List<String> x() {
+      return ["hello"];
+    }
+
+    int xCombinedLength = x()
+        .fold<int>(0, (previousValue, element) => previousValue + element.length);
+    print("xCombinedLength = $xCombinedLength");
+  }
 definitions: ["x"]
 # _Closure --- note that this is not what the VM sends (anymore).
 definition_types: ["dart:core", "_Closure", "1", "0"]
 type_definitions: []
 type_bounds: []
 type_defaults: []
-position: "main.dart"
 method: "hasClosure"
 expression: |
   x().fold<int>(0, (previousValue, element) => previousValue + element.length)
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
index 5865e1f..3fb0d47 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
@@ -6,4 +6,4 @@
    ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_Closure x) → dynamic
-  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Cannot invoke an instance of '_Closure' because it declares 'call' to be something other than a method.\n - '_Closure' is from 'dart:core'.\nTry changing 'call' to a method or explicitly invoke 'call'.\nx().fold<int>(0, (previousValue, element) => previousValue + element.length)\n ^"{dynamic}.fold<dart.core::int*>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:2: Error: Cannot invoke an instance of '_Closure' because it declares 'call' to be something other than a method.\n - '_Closure' is from 'dart:core'.\nTry changing 'call' to a method or explicitly invoke 'call'.\nx().fold<int>(0, (previousValue, element) => previousValue + element.length)\n ^"{dynamic}.fold<dart.core::int>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml
index f441fdd..6914b5f 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml
@@ -2,14 +2,22 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void hasClosure() {
+    List<String> x() {
+      return ["hello"];
+    }
+
+    int xCombinedLength = x()
+        .fold<int>(0, (previousValue, element) => previousValue + element.length);
+    print("xCombinedLength = $xCombinedLength");
+  }
 definitions: ["x"]
 # _Closure is send as null aka dynamic.
 definition_types: ["null"]
 type_definitions: []
 type_bounds: []
 type_defaults: []
-position: "main.dart"
 method: "hasClosure"
 expression: |
   x().fold<int>(0, (previousValue, element) => previousValue + element.length)
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
index 7b31ce4..9b852fc 100644
--- a/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic x) → dynamic
-  return x{dynamic}.call(){dynamic}.fold<dart.core::int*>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
+  return x{dynamic}.call(){dynamic}.fold<dart.core::int>(0, (dynamic previousValue, dynamic element) → dynamic => previousValue{dynamic}.+(element{dynamic}.length));
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml
index c8bbfc0..a4e2207 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml
@@ -2,7 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void withBound<E extends String>(List<E> x) {
+    List<E> y = [];
+    List<String> z = [];
+    z.addAll(y);
+  }
 definitions: ["x"]
 # List<String>
 definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0"]
@@ -11,7 +16,6 @@
 type_bounds: ["dart:core", "String", "1", "0"]
 # String
 type_defaults: ["dart:core", "String", "1", "0"]
-position: "main.dart"
 method: "withBound"
 # Can add List<E> to List<String> as E extends String.
 expression: |
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
index 680d8c5..5c6162f 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<dart.core::String> x) → dynamic
   return (() → Null {
-    dart.core::List<#lib1::debugExpr::E*>* y = dart.core::_GrowableList::•<#lib1::debugExpr::E*>(0);
-    x.{dart.core::List::addAll}(y){(dart.core::Iterable<dart.core::String*>*) →* void};
-  })(){() →* Null};
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::_GrowableList::•<#lib1::debugExpr::E>(0);
+    x.{dart.core::List::addAll}(y){(dart.core::Iterable<dart.core::String>) → void};
+  })(){() → Null};
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml
index ca8e903..69da8f7 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml
@@ -2,7 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  void withBound<E extends String>(List<E> x) {
+    List<E> y = [];
+    List<String> z = [];
+    z.addAll(y);
+  }
 definitions: ["x"]
 # List<String>
 definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0"]
@@ -11,7 +16,6 @@
 type_bounds: ["dart:core", "String", "1", "0"]
 # String
 type_defaults: ["dart:core", "String", "1", "0"]
-position: "main.dart"
 method: "withBound"
 # Can't add List<String> to List<E> :(
 expression: |
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
index be07da0..705f6d9 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
@@ -7,6 +7,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<dart.core::String> x) → dynamic
   return () → Null {
-    dart.core::List<#lib1::debugExpr::E*>* y = dart.core::_GrowableList::•<#lib1::debugExpr::E*>(0);
-    y.{dart.core::List::addAll}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:31: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<E>'.\n - 'List' is from 'dart:core'.\n - 'Iterable' is from 'dart:core'.\n() { List<E> y = []; y.addAll(x); }\n                              ^" in x as{TypeError} Never){(dart.core::Iterable<#lib1::debugExpr::E*>*) →* void};
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::_GrowableList::•<#lib1::debugExpr::E>(0);
+    y.{dart.core::List::addAll}(invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:31: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<E>'.\n - 'List' is from 'dart:core'.\n - 'Iterable' is from 'dart:core'.\n() { List<E> y = []; y.addAll(x); }\n                              ^" in x as{TypeError,ForNonNullableByDefault} Never){(dart.core::Iterable<#lib1::debugExpr::E>) → void};
   };
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml
index 80d4f5b..192d3cd 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml
@@ -2,15 +2,16 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  void withBound2<E>() {
+    print(E);
+  }
 definition_types: []
 type_definitions: ["E"]
 # Object?
 type_bounds: ["dart:core", "Object", "0", "0"]
 # null (because dynamic).
 type_defaults: ["null"]
-position: "main.dart"
 method: "withBound2"
 expression: |
   print(E)
diff --git a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
index f70deb2..b61150e 100644
--- a/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::Object? = dynamic>() → dynamic
-  return dart.core::print(#lib1::debugExpr::E*);
+  return dart.core::print(#lib1::debugExpr::E%);
diff --git a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml
index e2d74e1..2029414 100644
--- a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml
@@ -2,9 +2,9 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  class Bound {}
+  void hasBound<T extends Bound>() {}
 type_definitions: ["T"]
-position: "main.dart"
 expression: |
   hasBound<T>()
diff --git a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
index a38c415..5071613 100644
--- a/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound.expression.yaml.expect
@@ -1,9 +1,9 @@
 Errors: {
   org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
-   - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
+   - 'Bound' is from 'org-dartlang-testcase:///main.dart'.
   Try changing type arguments so that they conform to the bounds.
   hasBound<T>()
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return main::hasBound<#lib1::debugExpr::T*>();
+  return #lib1::hasBound<#lib2::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml
index b584ef2..c8c4cbe 100644
--- a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml
@@ -2,9 +2,17 @@
 # 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.
 
+sources:
+  main.dart: |
+    class Bound {}
+    void hasBound<T extends Bound>() {}
+    main() {}
+  main_2.dart: |
+    import 'main.dart' as m;
+    main() {
+      m.main();
+    }
 entry_point: "main_2.dart"
-import: "main.dart"
-definitions: []
 type_definitions: ["T"]
 position: "main.dart"
 expression: |
diff --git a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
index a38c415..5071613 100644
--- a/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_bound_2.expression.yaml.expect
@@ -1,9 +1,9 @@
 Errors: {
   org-dartlang-debug:synthetic_debug_expression:1:1: Error: Type argument 'T' doesn't conform to the bound 'Bound' of the type variable 'T' on 'hasBound'.
-   - 'Bound' is from 'pkg/front_end/testcases/expression/main.dart'.
+   - 'Bound' is from 'org-dartlang-testcase:///main.dart'.
   Try changing type arguments so that they conform to the bounds.
   hasBound<T>()
   ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return main::hasBound<#lib1::debugExpr::T*>();
+  return #lib1::hasBound<#lib2::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml
index 1cc3d38..c1caac5 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml
@@ -2,9 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
 definitions: ["x"]
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   x is T
diff --git a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
index 6cb5b78..370052a 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return x is main::A::debugExpr::T*;
+  return x is{ForNonNullableByDefault} #lib1::A::debugExpr::T%;
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml
index f18d8d3..b2660c4 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml
@@ -2,9 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
+  T id<T>(T x) => x;
 definitions: ["x"]
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   id<T>(x)
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
index 66d7a12..bd76619 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
-  return main::id<main::A::debugExpr::T*>(x as{TypeError,ForDynamic} main::A::debugExpr::T*);
+  return #lib1::id<#lib1::A::debugExpr::T%>(x as{TypeError,ForDynamic,ForNonNullableByDefault} #lib1::A::debugExpr::T%);
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml
index 4078116..96e9302 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml
@@ -2,10 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  class A<T> {
+    const A();
+  }
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
     T k = new A();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
index 4b7f9b0..dfc7f67 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_ctor_inferred.expression.yaml.expect
@@ -1,10 +1,10 @@
 Errors: {
   org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.
-   - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.
+   - 'A' is from 'org-dartlang-testcase:///main.dart'.
     T k = new A();
               ^
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    main::A::debugExpr::T* k = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'pkg/front_end/testcases/expression/main.dart'.\n  T k = new A();\n            ^" in new main::A::•<dynamic>() as{TypeError} Never;
+    #lib1::A::debugExpr::T% k = invalid-expression "org-dartlang-debug:synthetic_debug_expression:2:13: Error: A value of type 'A<dynamic>' can't be assigned to a variable of type 'T'.\n - 'A' is from 'org-dartlang-testcase:///main.dart'.\n  T k = new A();\n            ^" in new #lib1::A::•<dynamic>() as{TypeError,ForNonNullableByDefault} Never;
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
index c379cd5..5856281 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml
@@ -2,12 +2,13 @@
 # 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.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  class A<T> {}
+  T id<T>(T x) => x;
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
-    T k = null;
+    T? k = null;
     k = id(k);
   }
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
index 4e5bdde..b4a7d36 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_arg_inferred.expression.yaml.expect
@@ -2,6 +2,6 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
   return () → Null {
-    main::A::debugExpr::T* k = null;
-    k = main::id<main::A::debugExpr::T*>(k);
+    #lib1::A::debugExpr::T? k = null;
+    k = #lib1::id<#lib1::A::debugExpr::T?>(k);
   };
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml
index bcc4445..86a8a6f 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml
@@ -2,9 +2,11 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-entry_point: "main.dart"
-definitions: []
+sources: |
+  class A<T> {
+    const A();
+  }
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   new A<T>()
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
index 6ae7542..736160b 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_ctor.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>() → dynamic
-  return new main::A::•<main::A::debugExpr::T*>();
+  return new #lib1::A::•<#lib1::A::debugExpr::T%>();
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
index c1c6c10..63fd21b 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
+++ b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml
@@ -2,11 +2,12 @@
 # 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.
 
-entry_point: "main.dart"
+sources: |
+  class A<T> {}
 definitions: ["x"]
 type_definitions: ["T"]
-position: "main.dart#A"
+position: "#A"
 expression: |
   () {
-    T x = null;
+    T? x = null;
   }
diff --git a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
index a632a3c..2b35841 100644
--- a/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/type_param_shadow_var.expression.yaml.expect
@@ -2,5 +2,5 @@
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dynamic>(dynamic x) → dynamic
   return () → Null {
-    main::A::debugExpr::T* x = null;
+    #lib1::A::debugExpr::T? x = null;
   };
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml
new file mode 100644
index 0000000..32436f4
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml
@@ -0,0 +1,9 @@
+# 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.
+
+sources: ""
+definitions: []
+position: "dart:core#double"
+expression: |
+  remainder()
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect
new file mode 100644
index 0000000..562772f
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash.expression.yaml.expect
@@ -0,0 +1,7 @@
+Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:10: Error: Too few positional arguments: 1 required, 0 given.
+  remainder()
+           ^
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:10: Error: Too few positional arguments: 1 required, 0 given.\nremainder()\n         ^" in this.{dart.core::double::remainder}{<inapplicable>}.(){() → invalid-type};
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml
new file mode 100644
index 0000000..06be5ad
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml
@@ -0,0 +1,9 @@
+# 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.
+
+sources: ""
+definitions: []
+position: "dart:core#double"
+expression: |
+  clamp()
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect
new file mode 100644
index 0000000..79d8f70
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2.expression.yaml.expect
@@ -0,0 +1,7 @@
+Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:6: Error: Too few positional arguments: 2 required, 0 given.
+  clamp()
+       ^
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:6: Error: Too few positional arguments: 2 required, 0 given.\nclamp()\n     ^" in this.{dart.core::num::clamp}{<inapplicable>}.(){() → invalid-type};
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml
new file mode 100644
index 0000000..969b867
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml
@@ -0,0 +1,9 @@
+# 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.
+
+sources: ""
+definitions: []
+position: "dart:core#double"
+expression: |
+  clamp(42, 42)
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect
new file mode 100644
index 0000000..22d3276
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_2_prime.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.core::num::clamp}(42, 42){(dart.core::num, dart.core::num) → dart.core::num};
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml
new file mode 100644
index 0000000..ed211a3
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml
@@ -0,0 +1,9 @@
+# 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.
+
+sources: ""
+definitions: []
+position: "dart:core#double"
+expression: |
+  remainder(42)
diff --git a/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect
new file mode 100644
index 0000000..3d31b64
--- /dev/null
+++ b/pkg/front_end/testcases/expression/weekly_bot_run_83_crash_prime.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return this.{dart.core::double::remainder}(42){(dart.core::num) → dart.core::double};
diff --git a/pkg/front_end/testcases/expression/wrong_position.expression.yaml b/pkg/front_end/testcases/expression/wrong_position.expression.yaml
new file mode 100644
index 0000000..1656813
--- /dev/null
+++ b/pkg/front_end/testcases/expression/wrong_position.expression.yaml
@@ -0,0 +1,13 @@
+# Copyright (c) 2018, 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.
+
+sources:
+  main.dart: |
+    void main() {
+      print('hello');
+    }
+definitions: []
+position: "main.dart#main"
+expression: |
+  main()
diff --git a/pkg/front_end/testcases/expression/wrong_position.expression.yaml.expect b/pkg/front_end/testcases/expression/wrong_position.expression.yaml.expect
new file mode 100644
index 0000000..ba1f145
--- /dev/null
+++ b/pkg/front_end/testcases/expression/wrong_position.expression.yaml.expect
@@ -0,0 +1,3 @@
+Errors: {
+}
+<no procedure>
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/async_extensions.dart.weak.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
index f053e58..1cd81f5 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
@@ -13,7 +13,7 @@
 static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
 static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async {}
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async /* futureValueType= dynamic */ {}
 static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
 static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
index f053e58..1cd81f5 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
@@ -13,7 +13,7 @@
 static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
 static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async {}
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async /* futureValueType= dynamic */ {}
 static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
 static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
index 739da7f..c9d8f91 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
 }
 static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
   return () → dynamic => self::Extension|syncStarMethod(#this);
-static method Extension|asyncMethod(lowered final core::int* #this) → dynamic /* originally async */ {
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
index a3e0d9a..e5d181d 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
@@ -13,7 +13,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
   self::expect(0, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
index a3e0d9a..e5d181d 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
@@ -13,7 +13,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
   self::expect(0, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
index 2aa57c8..612662d 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
index ddd41d6..0b080b3 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
   self::expect(42, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
index ddd41d6..0b080b3 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
   self::expect(42, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
index f4d6fd7..bc5853f 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
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/annotation_typedef_formals.dart.weak.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.expect
index 44bd339..3f168f4 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int x, core::num y, {@#C2 @#C3 core::String z, core::Object w}) → void;
-typedef G = (@#C1 core::int a, core::num b, [@#C2 @#C3 core::String c, core::Object d]) → void;
+typedef F = (core::int, core::num, {w: core::Object, z: core::String}) → void;
+typedef G = (core::int, core::num, [core::String, core::Object]) → void;
 static const field core::int foo = #C1;
 static const field core::int bar = #C2;
 static const field core::int baz = #C3;
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect
index 44bd339..3f168f4 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int x, core::num y, {@#C2 @#C3 core::String z, core::Object w}) → void;
-typedef G = (@#C1 core::int a, core::num b, [@#C2 @#C3 core::String c, core::Object d]) → void;
+typedef F = (core::int, core::num, {w: core::Object, z: core::String}) → void;
+typedef G = (core::int, core::num, [core::String, core::Object]) → void;
 static const field core::int foo = #C1;
 static const field core::int bar = #C2;
 static const field core::int baz = #C3;
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.transformed.expect
index 44bd339..3f168f4 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.transformed.expect
@@ -2,8 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int x, core::num y, {@#C2 @#C3 core::String z, core::Object w}) → void;
-typedef G = (@#C1 core::int a, core::num b, [@#C2 @#C3 core::String c, core::Object d]) → void;
+typedef F = (core::int, core::num, {w: core::Object, z: core::String}) → void;
+typedef G = (core::int, core::num, [core::String, core::Object]) → void;
 static const field core::int foo = #C1;
 static const field core::int bar = #C2;
 static const field core::int baz = #C3;
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.expect
index 95d7ed5..707fc20 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int app) → core::int;
+typedef F = (core::int) → core::int;
 static const field core::int app = #C1;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect
index 95d7ed5..707fc20 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int app) → core::int;
+typedef F = (core::int) → core::int;
 static const field core::int app = #C1;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.transformed.expect
index 95d7ed5..707fc20 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int app) → core::int;
+typedef F = (core::int) → core::int;
 static const field core::int app = #C1;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.expect
index d111b25..8329d57 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) → dynamic;
+typedef hest_t = ({named: dynamic}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::Bar
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
index d111b25..8329d57 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) → dynamic;
+typedef hest_t = ({named: dynamic}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::Bar
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.transformed.expect
index d111b25..8329d57 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) → dynamic;
+typedef hest_t = ({named: dynamic}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::Bar
     : super core::Object::•()
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.expect b/pkg/front_end/testcases/general/async_function.dart.weak.expect
index 5e81b91..2bedd98e 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.expect
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static field core::List<core::String> stringList = <core::String>["bar"];
-static method asyncString() → asy::Future<core::String> async {
+static method asyncString() → asy::Future<core::String> async /* futureValueType= core::String */ {
   return "foo";
 }
-static method asyncString2() → asy::Future<core::String> async {
+static method asyncString2() → asy::Future<core::String> async /* futureValueType= core::String */ {
   return self::asyncString();
 }
 static method syncStarString() → core::Iterable<core::String> sync* {
@@ -28,6 +28,6 @@
 static method asyncStarString2() → asy::Stream<core::String> async* {
   yield "bar";
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::String str = await self::asyncString();
 }
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect
index 5e81b91..2bedd98e 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect
@@ -6,10 +6,10 @@
 import "dart:async";
 
 static field core::List<core::String> stringList = <core::String>["bar"];
-static method asyncString() → asy::Future<core::String> async {
+static method asyncString() → asy::Future<core::String> async /* futureValueType= core::String */ {
   return "foo";
 }
-static method asyncString2() → asy::Future<core::String> async {
+static method asyncString2() → asy::Future<core::String> async /* futureValueType= core::String */ {
   return self::asyncString();
 }
 static method syncStarString() → core::Iterable<core::String> sync* {
@@ -28,6 +28,6 @@
 static method asyncStarString2() → asy::Stream<core::String> async* {
   yield "bar";
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::String str = await self::asyncString();
 }
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
index cd8de28..373a8d8 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 import "dart:async";
 
 static field core::List<core::String> stringList = core::_GrowableList::_literal1<core::String>("bar");
-static method asyncString() → asy::Future<core::String> /* originally async */ {
+static method asyncString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   core::String? :return_value;
@@ -34,7 +34,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method asyncString2() → asy::Future<core::String> /* originally async */ {
+static method asyncString2() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   FutureOr<core::String>? :return_value;
@@ -178,7 +178,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String>};
   return :controller_stream;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.expect
index 6f8e4d4..46f8ed8 100644
--- a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnsString();
   await self::returnsFutureOrString();
   await self::returnsAwaitFutureOrString();
@@ -17,27 +17,27 @@
   await self::returnsFutureObject();
   await self::returnsAwaitFutureObject();
 }
-static method returnsString() → asy::Future<core::String> async 
+static method returnsString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return "a";
-static method returnsFutureOrString() → asy::Future<core::String> async 
+static method returnsFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return self::getFutureOr<core::String>("a");
-static method returnsAwaitFutureOrString() → asy::Future<core::String> async 
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return await self::getFutureOr<core::String>("a");
-static method returnsFutureString() → asy::Future<core::String> async 
+static method returnsFutureString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return self::getFuture<core::String>("a");
-static method returnsAwaitFutureString() → FutureOr<core::String> async 
+static method returnsAwaitFutureString() → FutureOr<core::String> async /* futureValueType= core::String */ 
   return await self::getFuture<core::String>("a");
-static method returnsObject() → asy::Future<core::Object> async 
+static method returnsObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return new core::Object::•();
-static method returnsFutureOrObject() → asy::Future<core::Object> async 
+static method returnsFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return self::getFutureOr<core::Object>(new core::Object::•());
-static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async 
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return await self::getFutureOr<core::Object>(new core::Object::•());
-static method returnsFutureObject() → asy::Future<core::Object> async 
+static method returnsFutureObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return self::getFuture<core::Object>(new core::Object::•());
-static method returnsAwaitFutureObject() → FutureOr<core::Object> async 
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async /* futureValueType= core::Object */ 
   return await self::getFuture<core::Object>(new core::Object::•());
-static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async 
+static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async /* futureValueType= self::getFutureOr::T% */ 
   return v;
-static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async 
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async /* futureValueType= self::getFuture::T% */ 
   return v;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.modular.expect
index 6f8e4d4..46f8ed8 100644
--- a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnsString();
   await self::returnsFutureOrString();
   await self::returnsAwaitFutureOrString();
@@ -17,27 +17,27 @@
   await self::returnsFutureObject();
   await self::returnsAwaitFutureObject();
 }
-static method returnsString() → asy::Future<core::String> async 
+static method returnsString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return "a";
-static method returnsFutureOrString() → asy::Future<core::String> async 
+static method returnsFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return self::getFutureOr<core::String>("a");
-static method returnsAwaitFutureOrString() → asy::Future<core::String> async 
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return await self::getFutureOr<core::String>("a");
-static method returnsFutureString() → asy::Future<core::String> async 
+static method returnsFutureString() → asy::Future<core::String> async /* futureValueType= core::String */ 
   return self::getFuture<core::String>("a");
-static method returnsAwaitFutureString() → FutureOr<core::String> async 
+static method returnsAwaitFutureString() → FutureOr<core::String> async /* futureValueType= core::String */ 
   return await self::getFuture<core::String>("a");
-static method returnsObject() → asy::Future<core::Object> async 
+static method returnsObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return new core::Object::•();
-static method returnsFutureOrObject() → asy::Future<core::Object> async 
+static method returnsFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return self::getFutureOr<core::Object>(new core::Object::•());
-static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async 
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return await self::getFutureOr<core::Object>(new core::Object::•());
-static method returnsFutureObject() → asy::Future<core::Object> async 
+static method returnsFutureObject() → asy::Future<core::Object> async /* futureValueType= core::Object */ 
   return self::getFuture<core::Object>(new core::Object::•());
-static method returnsAwaitFutureObject() → FutureOr<core::Object> async 
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async /* futureValueType= core::Object */ 
   return await self::getFuture<core::Object>(new core::Object::•());
-static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async 
+static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async /* futureValueType= self::getFutureOr::T% */ 
   return v;
-static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async 
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async /* futureValueType= self::getFuture::T% */ 
   return v;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
index 2ccc693..f6fb0b0 100644
--- a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "dart:async";
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -52,7 +52,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsString() → asy::Future<core::String> /* originally async */ {
+static method returnsString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   core::String? :return_value;
@@ -79,7 +79,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsFutureOrString() → asy::Future<core::String> /* originally async */ {
+static method returnsFutureOrString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   FutureOr<core::String>? :return_value;
@@ -106,7 +106,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsAwaitFutureOrString() → asy::Future<core::String> /* originally async */ {
+static method returnsAwaitFutureOrString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   core::String? :return_value;
@@ -135,7 +135,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsFutureString() → asy::Future<core::String> /* originally async */ {
+static method returnsFutureString() → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   FutureOr<core::String>? :return_value;
@@ -162,7 +162,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsAwaitFutureString() → FutureOr<core::String> /* originally async */ {
+static method returnsAwaitFutureString() → FutureOr<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   core::String? :return_value;
@@ -191,7 +191,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsObject() → asy::Future<core::Object> /* originally async */ {
+static method returnsObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
@@ -218,7 +218,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsFutureOrObject() → asy::Future<core::Object> /* originally async */ {
+static method returnsFutureOrObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
@@ -245,7 +245,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsAwaitFutureOrObject() → asy::Future<core::Object> /* originally async */ {
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
@@ -274,7 +274,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsFutureObject() → asy::Future<core::Object> /* originally async */ {
+static method returnsFutureObject() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
@@ -301,7 +301,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnsAwaitFutureObject() → FutureOr<core::Object> /* originally async */ {
+static method returnsAwaitFutureObject() → FutureOr<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
@@ -330,7 +330,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> /* originally async */ {
+static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> /* futureValueType= self::getFutureOr::T% */ /* originally async */ {
   final asy::_Future<self::getFutureOr::T%> :async_future = new asy::_Future::•<self::getFutureOr::T%>();
   core::bool* :is_sync = false;
   FutureOr<self::getFutureOr::T%>? :return_value;
@@ -357,7 +357,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> /* originally async */ {
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> /* futureValueType= self::getFuture::T% */ /* originally async */ {
   final asy::_Future<self::getFuture::T%> :async_future = new asy::_Future::•<self::getFuture::T%>();
   core::bool* :is_sync = false;
   FutureOr<self::getFuture::T%>? :return_value;
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
index 05a55b2..ccacb73 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.expect
@@ -8,7 +8,7 @@
 //
 import self as self;
 
-static method foo() → dynamic async {
+static method foo() → dynamic async /* futureValueType= dynamic */ {
   invalid-type x;
   for (dynamic y in x{<invalid>}.z) {
   }
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect
index 05a55b2..ccacb73 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 //
 import self as self;
 
-static method foo() → dynamic async {
+static method foo() → dynamic async /* futureValueType= dynamic */ {
   invalid-type x;
   for (dynamic y in x{<invalid>}.z) {
   }
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
index 5a6c5a5..eaa793aa 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static method foo() → dynamic /* originally async */ {
+static method foo() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.expect
index f7a0987..57176c1 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.expect
@@ -17,7 +17,7 @@
     return "${this.{self::Node::name}{core::String}} ${let final core::Iterable<dynamic>? #t3 = tmp in #t3 == null ?{core::String?} null : #t3{core::Iterable<dynamic>}.{core::Iterable::join}(" "){([core::String]) → core::String}}".{core::String::trim}(){() → core::String};
   }
 }
-static method main() → void async {
+static method main() → void async /* futureValueType= void */ {
   core::String expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node node = new self::Node::•("1", <self::Node>[new self::Node::•("2", <self::Node>[]), await asy::Future::value<self::Node>(new self::Node::•("3", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("4", <self::Node>[new self::Node::•("5", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("6", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("7", <self::Node>[]))])), await asy::Future::value<self::Node>(new self::Node::•("8", <self::Node>[])), await asy::Future::value<self::Node>(new self::Node::•("9", <self::Node>[]))])]))])), await asy::Future::value<self::Node>(new self::Node::•("10", <self::Node>[]))]);
   core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect
index f7a0987..57176c1 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect
@@ -17,7 +17,7 @@
     return "${this.{self::Node::name}{core::String}} ${let final core::Iterable<dynamic>? #t3 = tmp in #t3 == null ?{core::String?} null : #t3{core::Iterable<dynamic>}.{core::Iterable::join}(" "){([core::String]) → core::String}}".{core::String::trim}(){() → core::String};
   }
 }
-static method main() → void async {
+static method main() → void async /* futureValueType= void */ {
   core::String expected = "1 2 3 4 5 6 7 8 9 10";
   self::Node node = new self::Node::•("1", <self::Node>[new self::Node::•("2", <self::Node>[]), await asy::Future::value<self::Node>(new self::Node::•("3", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("4", <self::Node>[new self::Node::•("5", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("6", <self::Node>[await asy::Future::value<self::Node>(new self::Node::•("7", <self::Node>[]))])), await asy::Future::value<self::Node>(new self::Node::•("8", <self::Node>[])), await asy::Future::value<self::Node>(new self::Node::•("9", <self::Node>[]))])]))])), await asy::Future::value<self::Node>(new self::Node::•("10", <self::Node>[]))]);
   core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
index 9082a3a..e7662de 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
     return "${this.{self::Node::name}{core::String}} ${let final core::Iterable<dynamic>? #t3 = tmp in #t3 == null ?{core::String?} null : #t3{core::Iterable<dynamic>}.{core::Iterable::join}(" "){([core::String]) → core::String}}".{core::String::trim}(){() → core::String};
   }
 }
-static method main() → void /* originally async */ {
+static method main() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/await.dart.weak.expect b/pkg/front_end/testcases/general/await.dart.weak.expect
index e1be515..c9c78d7 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::print(await "Hello, World!");
 }
diff --git a/pkg/front_end/testcases/general/await.dart.weak.modular.expect b/pkg/front_end/testcases/general/await.dart.weak.modular.expect
index e1be515..c9c78d7 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.modular.expect
@@ -2,6 +2,6 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::print(await "Hello, World!");
 }
diff --git a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
index 245023e..8d16530 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.expect
index 280661a..18e4d6a 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.expect
@@ -53,7 +53,7 @@
 }
 static method dummy() → dynamic
   return 1;
-static method staticMembers() → dynamic async {
+static method staticMembers() → dynamic async /* futureValueType= dynamic */ {
   core::num a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
   core::num f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
@@ -67,7 +67,7 @@
   core::num e = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num) → core::int}.{core::num::+}(self::C::staticSetter = 1){(core::num) → core::int}.{core::num::+}(self::C::staticFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method topLevelMembers() → dynamic async {
+static method topLevelMembers() → dynamic async /* futureValueType= dynamic */ {
   core::num a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
   core::num b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
@@ -79,7 +79,7 @@
   core::num e = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num) → core::int}.{core::num::+}(self::topLevelSetter = 1){(core::num) → core::int}.{core::num::+}(self::topLevelFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method instanceMembers() → dynamic async {
+static method instanceMembers() → dynamic async /* futureValueType= dynamic */ {
   self::C inst = new self::C::•();
   core::num a = inst.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
@@ -92,7 +92,7 @@
   core::num e = inst.{self::C::field}{core::int}.{core::num::+}(inst.{self::C::getter}{core::int}){(core::num) → core::int}.{core::num::+}(inst.{self::C::setter} = 1){(core::num) → core::int}.{core::num::+}(inst.{self::C::foo}(1){(core::int) → core::int}){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method others() → dynamic async {
+static method others() → dynamic async /* futureValueType= dynamic */ {
   core::String a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String) → core::String};
   self::expect("1 1 someString", a);
   self::C c = new self::C::•();
@@ -104,7 +104,7 @@
   core::num e = b.{core::List::[]}(0){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, e);
 }
-static method conditionals() → dynamic async {
+static method conditionals() → dynamic async /* futureValueType= dynamic */ {
   core::bool a = false;
   core::bool b = true;
   core::bool c = a || b || await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -119,7 +119,7 @@
   on core::Object catch(final core::Object e) {
   }
 }
-static method asserts() → dynamic async {
+static method asserts() → dynamic async /* futureValueType= dynamic */ {
   for (final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func in <<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>[#C1, #C2]) {
     assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>});
     assert(invalid-expression "pkg/front_end/testcases/general/await_complex.dart:120:12: Error: A value of type 'FutureOr<bool>' can't be assigned to a variable of type 'bool'.
@@ -136,7 +136,7 @@
     }
   }
 }
-static method controlFlow() → dynamic async {
+static method controlFlow() → dynamic async /* futureValueType= dynamic */ {
   for (final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func in <<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>[#C1, #C2]) {
     core::int c = 0;
     for (core::int i = await func<core::int>(0){(core::int) → FutureOr<core::int>}; await func<core::bool>(i.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}; await func<core::int>(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1){(core::int) → FutureOr<core::int>}) {
@@ -204,10 +204,10 @@
           throw "unreachable";
         }
     }
-    self::expect(42, await(() → asy::Future<core::int> async {
+    self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
       return await func<core::int>(42){(core::int) → FutureOr<core::int>};
     })(){() → asy::Future<core::int>});
-    self::expect(42, await(() → asy::Future<core::int> async {
+    self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
       return func<core::int>(42){(core::int) → FutureOr<core::int>};
     })(){() → asy::Future<core::int>});
     function testStream1() → asy::Stream<core::int> async* {
@@ -220,14 +220,14 @@
     self::expectList(<dynamic>[42], await testStream2(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
   }
 }
-static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async 
+static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async /* futureValueType= self::future::T% */ 
   return value;
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → FutureOr<self::id::T%>
   return value;
 static method intStream() → asy::Stream<core::int> async* {
   yield 42;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   for (core::int i = 0; i.{core::num::<}(11){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     await self::staticMembers();
     await self::topLevelMembers();
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect
index 280661a..18e4d6a 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect
@@ -53,7 +53,7 @@
 }
 static method dummy() → dynamic
   return 1;
-static method staticMembers() → dynamic async {
+static method staticMembers() → dynamic async /* futureValueType= dynamic */ {
   core::num a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
   core::num f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
@@ -67,7 +67,7 @@
   core::num e = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num) → core::int}.{core::num::+}(self::C::staticSetter = 1){(core::num) → core::int}.{core::num::+}(self::C::staticFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method topLevelMembers() → dynamic async {
+static method topLevelMembers() → dynamic async /* futureValueType= dynamic */ {
   core::num a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
   core::num b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
@@ -79,7 +79,7 @@
   core::num e = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num) → core::int}.{core::num::+}(self::topLevelSetter = 1){(core::num) → core::int}.{core::num::+}(self::topLevelFoo(1)){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method instanceMembers() → dynamic async {
+static method instanceMembers() → dynamic async /* futureValueType= dynamic */ {
   self::C inst = new self::C::•();
   core::num a = inst.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, a);
@@ -92,7 +92,7 @@
   core::num e = inst.{self::C::field}{core::int}.{core::num::+}(inst.{self::C::getter}{core::int}){(core::num) → core::int}.{core::num::+}(inst.{self::C::setter} = 1){(core::num) → core::int}.{core::num::+}(inst.{self::C::foo}(1){(core::int) → core::int}){(core::num) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(5, e);
 }
-static method others() → dynamic async {
+static method others() → dynamic async /* futureValueType= dynamic */ {
   core::String a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String) → core::String};
   self::expect("1 1 someString", a);
   self::C c = new self::C::•();
@@ -104,7 +104,7 @@
   core::num e = b.{core::List::[]}(0){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, e);
 }
-static method conditionals() → dynamic async {
+static method conditionals() → dynamic async /* futureValueType= dynamic */ {
   core::bool a = false;
   core::bool b = true;
   core::bool c = a || b || await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
@@ -119,7 +119,7 @@
   on core::Object catch(final core::Object e) {
   }
 }
-static method asserts() → dynamic async {
+static method asserts() → dynamic async /* futureValueType= dynamic */ {
   for (final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func in <<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>[#C1, #C2]) {
     assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>});
     assert(invalid-expression "pkg/front_end/testcases/general/await_complex.dart:120:12: Error: A value of type 'FutureOr<bool>' can't be assigned to a variable of type 'bool'.
@@ -136,7 +136,7 @@
     }
   }
 }
-static method controlFlow() → dynamic async {
+static method controlFlow() → dynamic async /* futureValueType= dynamic */ {
   for (final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func in <<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>[#C1, #C2]) {
     core::int c = 0;
     for (core::int i = await func<core::int>(0){(core::int) → FutureOr<core::int>}; await func<core::bool>(i.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}; await func<core::int>(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1){(core::num) → core::int} in #t1){(core::int) → FutureOr<core::int>}) {
@@ -204,10 +204,10 @@
           throw "unreachable";
         }
     }
-    self::expect(42, await(() → asy::Future<core::int> async {
+    self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
       return await func<core::int>(42){(core::int) → FutureOr<core::int>};
     })(){() → asy::Future<core::int>});
-    self::expect(42, await(() → asy::Future<core::int> async {
+    self::expect(42, await(() → asy::Future<core::int> async /* futureValueType= core::int */ {
       return func<core::int>(42){(core::int) → FutureOr<core::int>};
     })(){() → asy::Future<core::int>});
     function testStream1() → asy::Stream<core::int> async* {
@@ -220,14 +220,14 @@
     self::expectList(<dynamic>[42], await testStream2(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
   }
 }
-static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async 
+static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> async /* futureValueType= self::future::T% */ 
   return value;
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → FutureOr<self::id::T%>
   return value;
 static method intStream() → asy::Stream<core::int> async* {
   yield 42;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   for (core::int i = 0; i.{core::num::<}(11){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     await self::staticMembers();
     await self::topLevelMembers();
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
index e4c6804..21decd4 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
 }
 static method dummy() → dynamic
   return 1;
-static method staticMembers() → dynamic /* originally async */ {
+static method staticMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -109,7 +109,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method topLevelMembers() → dynamic /* originally async */ {
+static method topLevelMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -160,7 +160,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method instanceMembers() → dynamic /* originally async */ {
+static method instanceMembers() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -212,7 +212,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method others() → dynamic /* originally async */ {
+static method others() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -264,7 +264,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method conditionals() → dynamic /* originally async */ {
+static method conditionals() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -336,7 +336,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method asserts() → dynamic /* originally async */ {
+static method asserts() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -410,7 +410,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method controlFlow() → dynamic /* originally async */ {
+static method controlFlow() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -542,7 +542,7 @@
                     }
                 }
               }
-              [yield] let dynamic #t50 = asy::_awaitHelper((() → asy::Future<core::int> /* originally async */ {
+              [yield] let dynamic #t50 = asy::_awaitHelper((() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
                 final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
                 core::bool* :is_sync = false;
                 core::int? :return_value;
@@ -572,7 +572,7 @@
                 return :async_future;
               })(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
               self::expect(42, _in::unsafeCast<core::int>(:result_or_exception));
-              [yield] let dynamic #t52 = asy::_awaitHelper((() → asy::Future<core::int> /* originally async */ {
+              [yield] let dynamic #t52 = asy::_awaitHelper((() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
                 final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
                 core::bool* :is_sync = false;
                 FutureOr<core::int>? :return_value;
@@ -690,7 +690,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> /* originally async */ {
+static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<self::future::T%> /* futureValueType= self::future::T% */ /* originally async */ {
   final asy::_Future<self::future::T%> :async_future = new asy::_Future::•<self::future::T%>();
   core::bool* :is_sync = false;
   FutureOr<self::future::T%>? :return_value;
@@ -752,7 +752,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
   return :controller_stream;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
index b0ffd22..45117a7 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int>> async 
+  method m() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ 
     return let final core::List<core::int> #t1 = <core::int>[] in block {
       #t1.{core::List::add}(await this.{self::C::_m}(){() → asy::Future<core::int>}){(core::int) → void};
     } =>#t1;
-  method _m() → asy::Future<core::int> async 
+  method _m() → asy::Future<core::int> async /* futureValueType= core::int */ 
     return 42;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   self::expect(42, (await new self::C::•().{self::C::m}(){() → asy::Future<core::List<core::int>>}).{core::Iterable::first}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
index b0ffd22..45117a7 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int>> async 
+  method m() → asy::Future<core::List<core::int>> async /* futureValueType= core::List<core::int> */ 
     return let final core::List<core::int> #t1 = <core::int>[] in block {
       #t1.{core::List::add}(await this.{self::C::_m}(){() → asy::Future<core::int>}){(core::int) → void};
     } =>#t1;
-  method _m() → asy::Future<core::int> async 
+  method _m() → asy::Future<core::int> async /* futureValueType= core::int */ 
     return 42;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   self::expect(42, (await new self::C::•().{self::C::m}(){() → asy::Future<core::List<core::int>>}).{core::Iterable::first}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
index 652b3a2..4b57e71 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int>> /* originally async */ {
+  method m() → asy::Future<core::List<core::int>> /* futureValueType= core::List<core::int> */ /* originally async */ {
     final asy::_Future<core::List<core::int>> :async_future = new asy::_Future::•<core::List<core::int>>();
     core::bool* :is_sync = false;
     core::List<core::int>? :return_value;
@@ -41,7 +41,7 @@
     :is_sync = true;
     return :async_future;
   }
-  method _m() → asy::Future<core::int> /* originally async */ {
+  method _m() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -69,7 +69,7 @@
     return :async_future;
   }
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
index d94db31..61269a2 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
@@ -8,6 +8,6 @@
   FutureOr<core::String>result = self::returnsString();
   core::print(result.{core::Object::runtimeType}{core::Type});
 }
-static method returnsString() → FutureOr<core::String> async {
+static method returnsString() → FutureOr<core::String> async /* futureValueType= core::String */ {
   return "oh no";
 }
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
index d94db31..61269a2 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
@@ -8,6 +8,6 @@
   FutureOr<core::String>result = self::returnsString();
   core::print(result.{core::Object::runtimeType}{core::Type});
 }
-static method returnsString() → FutureOr<core::String> async {
+static method returnsString() → FutureOr<core::String> async /* futureValueType= core::String */ {
   return "oh no";
 }
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
index b7ed807..25f1e40 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   FutureOr<core::String>result = self::returnsString();
   core::print(result.{core::Object::runtimeType}{core::Type});
 }
-static method returnsString() → FutureOr<core::String> /* originally async */ {
+static method returnsString() → FutureOr<core::String> /* futureValueType= core::String */ /* originally async */ {
   final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
   core::bool* :is_sync = false;
   core::String? :return_value;
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
index 3ea6567..3249453 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
@@ -20,20 +20,20 @@
     ;
   method f(dynamic _) → dynamic {}
 }
-static method f1() → asy::Future<core::List<core::Object>> async {
+static method f1() → asy::Future<core::List<core::Object>> async /* futureValueType= core::List<core::Object> */ {
   return <core::Object>[1];
 }
 static method f2() → core::List<core::Object>
   return <core::Object>[2];
-static method f3() → asy::Future<core::Object> async {
+static method f3() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
   return 3;
 }
-static method foo() → asy::Future<self::X> async {
+static method foo() → asy::Future<self::X> async /* futureValueType= self::X */ {
   return new self::X::•(let final self::Y #t1 = new self::Y::•() in block {
     #t1.{self::Y::f}(await self::f1()){(dynamic) → dynamic};
     #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
   } =>#t1, await self::f3());
 }
-static method main() → asy::Future<void> async {
+static method main() → asy::Future<void> async /* futureValueType= void */ {
   core::print(await self::foo());
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
index 3ea6567..3249453 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
@@ -20,20 +20,20 @@
     ;
   method f(dynamic _) → dynamic {}
 }
-static method f1() → asy::Future<core::List<core::Object>> async {
+static method f1() → asy::Future<core::List<core::Object>> async /* futureValueType= core::List<core::Object> */ {
   return <core::Object>[1];
 }
 static method f2() → core::List<core::Object>
   return <core::Object>[2];
-static method f3() → asy::Future<core::Object> async {
+static method f3() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
   return 3;
 }
-static method foo() → asy::Future<self::X> async {
+static method foo() → asy::Future<self::X> async /* futureValueType= self::X */ {
   return new self::X::•(let final self::Y #t1 = new self::Y::•() in block {
     #t1.{self::Y::f}(await self::f1()){(dynamic) → dynamic};
     #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
   } =>#t1, await self::f3());
 }
-static method main() → asy::Future<void> async {
+static method main() → asy::Future<void> async /* futureValueType= void */ {
   core::print(await self::foo());
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
index ee3e7d7..f5586b6 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
     ;
   method f(dynamic _) → dynamic {}
 }
-static method f1() → asy::Future<core::List<core::Object>> /* originally async */ {
+static method f1() → asy::Future<core::List<core::Object>> /* futureValueType= core::List<core::Object> */ /* originally async */ {
   final asy::_Future<core::List<core::Object>> :async_future = new asy::_Future::•<core::List<core::Object>>();
   core::bool* :is_sync = false;
   core::List<core::Object>? :return_value;
@@ -50,7 +50,7 @@
 }
 static method f2() → core::List<core::Object>
   return core::_GrowableList::_literal1<core::Object>(2);
-static method f3() → asy::Future<core::Object> /* originally async */ {
+static method f3() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   core::Object? :return_value;
@@ -77,7 +77,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method foo() → asy::Future<self::X> /* originally async */ {
+static method foo() → asy::Future<self::X> /* futureValueType= self::X */ /* originally async */ {
   final asy::_Future<self::X> :async_future = new asy::_Future::•<self::X>();
   core::bool* :is_sync = false;
   self::X? :return_value;
@@ -113,7 +113,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → asy::Future<void> /* originally async */ {
+static method main() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.expect
index 562a536..0da4157 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.expect
@@ -5,7 +5,7 @@
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
 
 static method main() → dynamic {}
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
 }
 
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect
index 562a536..0da4157 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
 
 static method main() → dynamic {}
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
 }
 
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
index 55724af..3517f76 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
 
 static method main() → dynamic {}
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart b/pkg/front_end/testcases/general/constants/circularity.dart
index 642e46f..8d543cb 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart
+++ b/pkg/front_end/testcases/general/constants/circularity.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const int a = b;
 const int b = a;
 const int c = d;
@@ -9,7 +9,7 @@
 const int e = d - 1;
 
 class Class1 {
-  const Class1({Class1 c = const Class1(c: null)});
+  const Class1({Class1? c = const Class1(c: null)});
 }
 
 const Class1 c1_0 = const Class1();
@@ -17,7 +17,7 @@
 const Class1 c1_2 = const Class1();
 
 class Class2 {
-  final Class2 field;
+  final Class2? field;
   const Class2(int value) : field = value == 0 ? null : const Class2(0);
 }
 
@@ -26,7 +26,7 @@
 const Class2 c2_2 = const Class2(1);
 
 class Class3 {
-  const Class3([Class3 c = c3_1]);
+  const Class3([Class3? c = c3_1]);
 }
 
 const Class3 c3_0 = const Class3();
@@ -34,7 +34,7 @@
 const Class3 c3_2 = const Class3(null);
 
 class Class4 {
-  const Class4({Class4 c = const Class4()});
+  const Class4({Class4? c = const Class4()});
 }
 
 const Class4 c4_0 = const Class4();
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline.expect
index 83f9369..4e1f414 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int a = b;
 const int b = a;
 const int c = d;
@@ -6,7 +5,7 @@
 const int e = d - 1;
 
 class Class1 {
-  const Class1({Class1 c = const Class1(c: null)});
+  const Class1({Class1? c = const Class1(c: null)});
 }
 
 const Class1 c1_0 = const Class1();
@@ -14,7 +13,7 @@
 const Class1 c1_2 = const Class1();
 
 class Class2 {
-  final Class2 field;
+  final Class2? field;
   const Class2(int value) : field = value == 0 ? null : const Class2(0);
 }
 
@@ -23,7 +22,7 @@
 const Class2 c2_2 = const Class2(1);
 
 class Class3 {
-  const Class3([Class3 c = c3_1]);
+  const Class3([Class3? c = c3_1]);
 }
 
 const Class3 c3_0 = const Class3();
@@ -31,7 +30,7 @@
 const Class3 c3_2 = const Class3(null);
 
 class Class4 {
-  const Class4({Class4 c = const Class4()});
+  const Class4({Class4? c = const Class4()});
 }
 
 const Class4 c4_0 = const Class4();
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline_modelled.expect
index e30767c..aa895a1c 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.textual_outline_modelled.expect
@@ -1,19 +1,18 @@
-// @dart = 2.9
 class Class1 {
-  const Class1({Class1 c = const Class1(c: null)});
+  const Class1({Class1? c = const Class1(c: null)});
 }
 
 class Class2 {
   const Class2(int value) : field = value == 0 ? null : const Class2(0);
-  final Class2 field;
+  final Class2? field;
 }
 
 class Class3 {
-  const Class3([Class3 c = c3_1]);
+  const Class3([Class3? c = c3_1]);
 }
 
 class Class4 {
-  const Class4({Class4 c = const Class4()});
+  const Class4({Class4? c = const Class4()});
 }
 
 const Class1 c1_0 = const Class1();
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
index d9ec24f..f1a8d15 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Error: Constant evaluation error:
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Context: Constant expression depends on itself.
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:24: Context: While analyzing:
-//   const Class4({Class4 c = const Class4()});
-//                        ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Error: Constant evaluation error:
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Context: Constant expression depends on itself.
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:25: Context: While analyzing:
+//   const Class4({Class4? c = const Class4()});
+//                         ^
 //
 // pkg/front_end/testcases/general/constants/circularity.dart:5:15: Error: Constant evaluation error:
 // const int a = b;
@@ -46,82 +46,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class1* c = #C1}) → self::Class1*
+  const constructor •({self::Class1? c = #C1}) → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object /*hasConstConstructor*/  {
-  final field self::Class2* field;
-  const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
+  final field self::Class2? field;
+  const constructor •(core::int value) → self::Class2
+    : self::Class2::field = value =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Class2?} null : #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class3 extends core::Object /*hasConstConstructor*/  {
-  const constructor •([self::Class3* c = #C4]) → self::Class3*
+  const constructor •([self::Class3? c = #C4]) → self::Class3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class4* c = invalid-expression "Constant expression depends on itself."}) → self::Class4*
+  const constructor •({self::Class4? c = invalid-expression "Constant expression depends on itself."}) → self::Class4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a = invalid-expression "Constant expression depends on itself.";
-static const field core::int* b = invalid-expression "Constant expression depends on itself.";
-static const field core::int* c = invalid-expression "Constant expression depends on itself.";
-static const field core::int* d = invalid-expression "Constant expression depends on itself.";
-static const field core::int* e = invalid-expression "Constant expression depends on itself.";
-static const field self::Class1* c1_0 = #C1;
-static const field self::Class1* c1_1 = #C1;
-static const field self::Class1* c1_2 = #C1;
-static const field self::Class2* c2_0 = #C5;
-static const field self::Class2* c2_1 = #C3;
-static const field self::Class2* c2_2 = #C5;
-static const field self::Class3* c3_0 = #C4;
-static const field self::Class3* c3_1 = #C4;
-static const field self::Class3* c3_2 = #C4;
-static const field self::Class4* c4_0 = invalid-expression "Constant expression depends on itself.";
-static const field self::Class4* c4_1 = #C6;
+static const field core::int a = invalid-expression "Constant expression depends on itself.";
+static const field core::int b = invalid-expression "Constant expression depends on itself.";
+static const field core::int c = invalid-expression "Constant expression depends on itself.";
+static const field core::int d = invalid-expression "Constant expression depends on itself.";
+static const field core::int e = invalid-expression "Constant expression depends on itself.";
+static const field self::Class1 c1_0 = #C1;
+static const field self::Class1 c1_1 = #C1;
+static const field self::Class1 c1_2 = #C1;
+static const field self::Class2 c2_0 = #C5;
+static const field self::Class2 c2_1 = #C3;
+static const field self::Class2 c2_2 = #C5;
+static const field self::Class3 c3_0 = #C4;
+static const field self::Class3 c3_1 = #C4;
+static const field self::Class3 c3_2 = #C4;
+static const field self::Class4 c4_0 = invalid-expression "Constant expression depends on itself.";
+static const field self::Class4 c4_1 = #C6;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect
index d9ec24f..f1a8d15 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Error: Constant evaluation error:
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Context: Constant expression depends on itself.
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:24: Context: While analyzing:
-//   const Class4({Class4 c = const Class4()});
-//                        ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Error: Constant evaluation error:
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Context: Constant expression depends on itself.
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:25: Context: While analyzing:
+//   const Class4({Class4? c = const Class4()});
+//                         ^
 //
 // pkg/front_end/testcases/general/constants/circularity.dart:5:15: Error: Constant evaluation error:
 // const int a = b;
@@ -46,82 +46,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class1* c = #C1}) → self::Class1*
+  const constructor •({self::Class1? c = #C1}) → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object /*hasConstConstructor*/  {
-  final field self::Class2* field;
-  const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
+  final field self::Class2? field;
+  const constructor •(core::int value) → self::Class2
+    : self::Class2::field = value =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Class2?} null : #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class3 extends core::Object /*hasConstConstructor*/  {
-  const constructor •([self::Class3* c = #C4]) → self::Class3*
+  const constructor •([self::Class3? c = #C4]) → self::Class3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class4* c = invalid-expression "Constant expression depends on itself."}) → self::Class4*
+  const constructor •({self::Class4? c = invalid-expression "Constant expression depends on itself."}) → self::Class4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a = invalid-expression "Constant expression depends on itself.";
-static const field core::int* b = invalid-expression "Constant expression depends on itself.";
-static const field core::int* c = invalid-expression "Constant expression depends on itself.";
-static const field core::int* d = invalid-expression "Constant expression depends on itself.";
-static const field core::int* e = invalid-expression "Constant expression depends on itself.";
-static const field self::Class1* c1_0 = #C1;
-static const field self::Class1* c1_1 = #C1;
-static const field self::Class1* c1_2 = #C1;
-static const field self::Class2* c2_0 = #C5;
-static const field self::Class2* c2_1 = #C3;
-static const field self::Class2* c2_2 = #C5;
-static const field self::Class3* c3_0 = #C4;
-static const field self::Class3* c3_1 = #C4;
-static const field self::Class3* c3_2 = #C4;
-static const field self::Class4* c4_0 = invalid-expression "Constant expression depends on itself.";
-static const field self::Class4* c4_1 = #C6;
+static const field core::int a = invalid-expression "Constant expression depends on itself.";
+static const field core::int b = invalid-expression "Constant expression depends on itself.";
+static const field core::int c = invalid-expression "Constant expression depends on itself.";
+static const field core::int d = invalid-expression "Constant expression depends on itself.";
+static const field core::int e = invalid-expression "Constant expression depends on itself.";
+static const field self::Class1 c1_0 = #C1;
+static const field self::Class1 c1_1 = #C1;
+static const field self::Class1 c1_2 = #C1;
+static const field self::Class2 c2_0 = #C5;
+static const field self::Class2 c2_1 = #C3;
+static const field self::Class2 c2_2 = #C5;
+static const field self::Class3 c3_0 = #C4;
+static const field self::Class3 c3_1 = #C4;
+static const field self::Class3 c3_2 = #C4;
+static const field self::Class4 c4_0 = invalid-expression "Constant expression depends on itself.";
+static const field self::Class4 c4_1 = #C6;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
index 9c83c85..61867c2 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.outline.expect
@@ -1,92 +1,52 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class1* c = const self::Class1::•(c: null)}) → self::Class1*
+  const constructor •({self::Class1? c = const self::Class1::•(c: null)}) → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object /*hasConstConstructor*/  {
-  final field self::Class2* field;
-  const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : const self::Class2::•(0), super core::Object::•()
+  final field self::Class2? field;
+  const constructor •(core::int value) → self::Class2
+    : self::Class2::field = value =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Class2?} null : const self::Class2::•(0), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class3 extends core::Object /*hasConstConstructor*/  {
-  const constructor •([self::Class3* c = self::c3_1]) → self::Class3*
+  const constructor •([self::Class3? c = self::c3_1]) → self::Class3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class4* c = const self::Class4::•()}) → self::Class4*
+  const constructor •({self::Class4? c = const self::Class4::•()}) → self::Class4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a = self::b;
-static const field core::int* b = self::a;
-static const field core::int* c = self::d;
-static const field core::int* d = self::e.{core::num::+}(1){(core::num*) →* core::int*};
-static const field core::int* e = self::d.{core::num::-}(1){(core::num*) →* core::int*};
-static const field self::Class1* c1_0 = const self::Class1::•();
-static const field self::Class1* c1_1 = const self::Class1::•(c: null);
-static const field self::Class1* c1_2 = const self::Class1::•();
-static const field self::Class2* c2_0 = const self::Class2::•(1);
-static const field self::Class2* c2_1 = const self::Class2::•(0);
-static const field self::Class2* c2_2 = const self::Class2::•(1);
-static const field self::Class3* c3_0 = const self::Class3::•();
-static const field self::Class3* c3_1 = const self::Class3::•(self::c3_2);
-static const field self::Class3* c3_2 = const self::Class3::•(null);
-static const field self::Class4* c4_0 = const self::Class4::•();
-static const field self::Class4* c4_1 = const self::Class4::•(c: null);
+static const field core::int a = self::b;
+static const field core::int b = self::a;
+static const field core::int c = self::d;
+static const field core::int d = self::e.{core::num::+}(1){(core::num) → core::int};
+static const field core::int e = self::d.{core::num::-}(1){(core::num) → core::int};
+static const field self::Class1 c1_0 = const self::Class1::•();
+static const field self::Class1 c1_1 = const self::Class1::•(c: null);
+static const field self::Class1 c1_2 = const self::Class1::•();
+static const field self::Class2 c2_0 = const self::Class2::•(1);
+static const field self::Class2 c2_1 = const self::Class2::•(0);
+static const field self::Class2 c2_2 = const self::Class2::•(1);
+static const field self::Class3 c3_0 = const self::Class3::•();
+static const field self::Class3 c3_1 = const self::Class3::•(self::c3_2);
+static const field self::Class3 c3_2 = const self::Class3::•(null);
+static const field self::Class4 c4_0 = const self::Class4::•();
+static const field self::Class4 c4_1 = const self::Class4::•(c: null);
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:12:34 -> InstanceConstant(const Class1{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:12:35 -> InstanceConstant(const Class1{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:21:63 -> InstanceConstant(const Class2{Class2.field: null})
-Evaluated: StaticGet @ org-dartlang-testcase:///circularity.dart:29:28 -> InstanceConstant(const Class3{})
+Evaluated: StaticGet @ org-dartlang-testcase:///circularity.dart:29:29 -> InstanceConstant(const Class3{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:15:27 -> InstanceConstant(const Class1{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:16:27 -> InstanceConstant(const Class1{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///circularity.dart:17:27 -> InstanceConstant(const Class1{})
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
index d9ec24f..f1a8d15 100644
--- a/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.transformed.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Error: Constant evaluation error:
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Context: Constant expression depends on itself.
-//   const Class4({Class4 c = const Class4()});
-//                                  ^
-// pkg/front_end/testcases/general/constants/circularity.dart:37:24: Context: While analyzing:
-//   const Class4({Class4 c = const Class4()});
-//                        ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Error: Constant evaluation error:
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:35: Context: Constant expression depends on itself.
+//   const Class4({Class4? c = const Class4()});
+//                                   ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:25: Context: While analyzing:
+//   const Class4({Class4? c = const Class4()});
+//                         ^
 //
 // pkg/front_end/testcases/general/constants/circularity.dart:5:15: Error: Constant evaluation error:
 // const int a = b;
@@ -46,82 +46,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class1* c = #C1}) → self::Class1*
+  const constructor •({self::Class1? c = #C1}) → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object /*hasConstConstructor*/  {
-  final field self::Class2* field;
-  const constructor •(core::int* value) → self::Class2*
-    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
+  final field self::Class2? field;
+  const constructor •(core::int value) → self::Class2
+    : self::Class2::field = value =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Class2?} null : #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class3 extends core::Object /*hasConstConstructor*/  {
-  const constructor •([self::Class3* c = #C4]) → self::Class3*
+  const constructor •([self::Class3? c = #C4]) → self::Class3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class4 extends core::Object /*hasConstConstructor*/  {
-  const constructor •({self::Class4* c = invalid-expression "Constant expression depends on itself."}) → self::Class4*
+  const constructor •({self::Class4? c = invalid-expression "Constant expression depends on itself."}) → self::Class4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* a = invalid-expression "Constant expression depends on itself.";
-static const field core::int* b = invalid-expression "Constant expression depends on itself.";
-static const field core::int* c = invalid-expression "Constant expression depends on itself.";
-static const field core::int* d = invalid-expression "Constant expression depends on itself.";
-static const field core::int* e = invalid-expression "Constant expression depends on itself.";
-static const field self::Class1* c1_0 = #C1;
-static const field self::Class1* c1_1 = #C1;
-static const field self::Class1* c1_2 = #C1;
-static const field self::Class2* c2_0 = #C5;
-static const field self::Class2* c2_1 = #C3;
-static const field self::Class2* c2_2 = #C5;
-static const field self::Class3* c3_0 = #C4;
-static const field self::Class3* c3_1 = #C4;
-static const field self::Class3* c3_2 = #C4;
-static const field self::Class4* c4_0 = invalid-expression "Constant expression depends on itself.";
-static const field self::Class4* c4_1 = #C6;
+static const field core::int a = invalid-expression "Constant expression depends on itself.";
+static const field core::int b = invalid-expression "Constant expression depends on itself.";
+static const field core::int c = invalid-expression "Constant expression depends on itself.";
+static const field core::int d = invalid-expression "Constant expression depends on itself.";
+static const field core::int e = invalid-expression "Constant expression depends on itself.";
+static const field self::Class1 c1_0 = #C1;
+static const field self::Class1 c1_1 = #C1;
+static const field self::Class1 c1_2 = #C1;
+static const field self::Class2 c2_0 = #C5;
+static const field self::Class2 c2_1 = #C3;
+static const field self::Class2 c2_2 = #C5;
+static const field self::Class3 c3_0 = #C4;
+static const field self::Class3 c3_1 = #C4;
+static const field self::Class3 c3_2 = #C4;
+static const field self::Class4 c4_0 = invalid-expression "Constant expression depends on itself.";
+static const field self::Class4 c4_1 = #C6;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart b/pkg/front_end/testcases/general/constants/const_asserts.dart
index 90a4166..6df56ea 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 class Foo {
   final int x;
   const Foo(this.x)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
index a0f8836..3dc34e4 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.expect
@@ -2,122 +2,122 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   const Foo.withInvalidCondition(this.x) : assert(x);
 //                                                   ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Error: Constant expression expected.
 // Try inserting 'const'.
 //       : assert(bool.fromEnvironment("foo", defaultValue: null));
 //                     ^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
 // const Foo foo2 = const Foo(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
+// pkg/front_end/testcases/general/constants/const_asserts.dart:10:18: Context: This assertion failed with message: x is not positive
 //       : assert(x > 0, "x is not positive"),
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
 // const Foo foo2 = const Foo(0);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:24: Error: Constant evaluation error:
 // const Foo foo3 = const Foo.withMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:15:18: Context: This assertion failed with message: btw foo was false
+// pkg/front_end/testcases/general/constants/const_asserts.dart:17:18: Context: This assertion failed with message: btw foo was false
 //       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:11: Context: While analyzing:
 // const Foo foo3 = const Foo.withMessage(42);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:16:56: Context: This assertion failed with a non-String message.
-//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
-//                                                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//           ^
-//
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:24: Error: Constant evaluation error:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(bool.fromEnvironment("foo", defaultValue: null));
-//                     ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:18:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:11: Context: While analyzing:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
-//           ^
-//
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:24: Error: Constant evaluation error:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:21:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
-//                      ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:11: Context: While analyzing:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:24: Error: Constant evaluation error:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(bool.fromEnvironment("foo", defaultValue: null));
+//                     ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:11: Context: While analyzing:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:24: Error: Constant evaluation error:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:23:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
+//                      ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:11: Context: While analyzing:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:24: Error: Constant evaluation error:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:11: Context: While analyzing:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:24: Error: Constant evaluation error:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:11: Context: While analyzing:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:24: Error: Constant evaluation error:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
-//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
-//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:11: Context: While analyzing:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:43:24: Error: Constant evaluation error:
-// const Bar bar6 = const Bar.withEmptyMessage(0);
+// const Bar bar4 = const Bar.withoutMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
 //   const Bar.withEmptyMessage(this.x) : assert(x < 0);
 //                                                 ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:11: Context: While analyzing:
 // const Bar bar6 = const Bar.withEmptyMessage(0);
 //           ^
 //
@@ -136,7 +136,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -183,7 +183,7 @@
 static const field self::Foo* foo2 = invalid-expression "This assertion failed with message: x is not positive";
 static const field self::Foo* foo3 = invalid-expression "This assertion failed with message: btw foo was false";
 static const field self::Foo* foo4 = invalid-expression "This assertion failed with a non-String message.";
-static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^";
 static const field self::Foo* foo6 = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
@@ -208,13 +208,13 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_asserts.dart:
-- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
+- Foo. (from org-dartlang-testcase:///const_asserts.dart:9:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:14:9)
-- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
-- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:17:9)
-- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:18:9)
-- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:20:9)
-- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:26:9)
-- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:27:9)
-- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:18:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:19:9)
+- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:20:9)
+- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:22:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:29:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:30:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect
index a0f8836..3dc34e4 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect
@@ -2,122 +2,122 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   const Foo.withInvalidCondition(this.x) : assert(x);
 //                                                   ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Error: Constant expression expected.
 // Try inserting 'const'.
 //       : assert(bool.fromEnvironment("foo", defaultValue: null));
 //                     ^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
 // const Foo foo2 = const Foo(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
+// pkg/front_end/testcases/general/constants/const_asserts.dart:10:18: Context: This assertion failed with message: x is not positive
 //       : assert(x > 0, "x is not positive"),
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
 // const Foo foo2 = const Foo(0);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:24: Error: Constant evaluation error:
 // const Foo foo3 = const Foo.withMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:15:18: Context: This assertion failed with message: btw foo was false
+// pkg/front_end/testcases/general/constants/const_asserts.dart:17:18: Context: This assertion failed with message: btw foo was false
 //       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:11: Context: While analyzing:
 // const Foo foo3 = const Foo.withMessage(42);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:16:56: Context: This assertion failed with a non-String message.
-//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
-//                                                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//           ^
-//
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:24: Error: Constant evaluation error:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(bool.fromEnvironment("foo", defaultValue: null));
-//                     ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:18:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:11: Context: While analyzing:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
-//           ^
-//
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:24: Error: Constant evaluation error:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:21:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
-//                      ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:11: Context: While analyzing:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:24: Error: Constant evaluation error:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(bool.fromEnvironment("foo", defaultValue: null));
+//                     ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:11: Context: While analyzing:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:24: Error: Constant evaluation error:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:23:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
+//                      ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:11: Context: While analyzing:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:24: Error: Constant evaluation error:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:11: Context: While analyzing:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:24: Error: Constant evaluation error:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:11: Context: While analyzing:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:24: Error: Constant evaluation error:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
-//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
-//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:11: Context: While analyzing:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:43:24: Error: Constant evaluation error:
-// const Bar bar6 = const Bar.withEmptyMessage(0);
+// const Bar bar4 = const Bar.withoutMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
 //   const Bar.withEmptyMessage(this.x) : assert(x < 0);
 //                                                 ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:11: Context: While analyzing:
 // const Bar bar6 = const Bar.withEmptyMessage(0);
 //           ^
 //
@@ -136,7 +136,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -183,7 +183,7 @@
 static const field self::Foo* foo2 = invalid-expression "This assertion failed with message: x is not positive";
 static const field self::Foo* foo3 = invalid-expression "This assertion failed with message: btw foo was false";
 static const field self::Foo* foo4 = invalid-expression "This assertion failed with a non-String message.";
-static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^";
 static const field self::Foo* foo6 = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
@@ -208,13 +208,13 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_asserts.dart:
-- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
+- Foo. (from org-dartlang-testcase:///const_asserts.dart:9:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:14:9)
-- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
-- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:17:9)
-- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:18:9)
-- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:20:9)
-- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:26:9)
-- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:27:9)
-- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:18:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:19:9)
+- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:20:9)
+- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:22:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:29:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:30:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
index d767009..590086f 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   const Foo.withInvalidCondition(this.x) : assert(x);
 //                                                   ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Error: Constant expression expected.
 // Try inserting 'const'.
 //       : assert(bool.fromEnvironment("foo", defaultValue: null));
 //                     ^^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -87,11 +87,11 @@
 
 
 Extra constant evaluation status:
-Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
-Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
 Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
-Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:19:21 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:21:22 -> NullConstant(null)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:31:24 -> InstanceConstant(const Foo{Foo.x: 1})
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:14:59 -> StringConstant("foo was false")
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:15:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:17:73 -> StringConstant("btw foo was false")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:21:21 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:23:22 -> NullConstant(null)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_asserts.dart:33:24 -> InstanceConstant(const Foo{Foo.x: 1})
 Extra constant evaluation: evaluated: 45, effectively constant: 7
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
index c635add..53ea857 100644
--- a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.transformed.expect
@@ -2,122 +2,122 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   const Foo.withInvalidCondition(this.x) : assert(x);
 //                                                   ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Error: Constant expression expected.
 // Try inserting 'const'.
 //       : assert(bool.fromEnvironment("foo", defaultValue: null));
 //                     ^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
 // const Foo foo2 = const Foo(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
+// pkg/front_end/testcases/general/constants/const_asserts.dart:10:18: Context: This assertion failed with message: x is not positive
 //       : assert(x > 0, "x is not positive"),
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:32:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
 // const Foo foo2 = const Foo(0);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:24: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:24: Error: Constant evaluation error:
 // const Foo foo3 = const Foo.withMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:15:18: Context: This assertion failed with message: btw foo was false
+// pkg/front_end/testcases/general/constants/const_asserts.dart:17:18: Context: This assertion failed with message: btw foo was false
 //       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
 //                  ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:33:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:35:11: Context: While analyzing:
 // const Foo foo3 = const Foo.withMessage(42);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:16:56: Context: This assertion failed with a non-String message.
-//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
-//                                                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
-// const Foo foo4 = const Foo.withInvalidMessage(42);
-//           ^
-//
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:24: Error: Constant evaluation error:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(bool.fromEnvironment("foo", defaultValue: null));
-//                     ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:18:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:36:11: Context: While analyzing:
-// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
-//           ^
-//
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:24: Error: Constant evaluation error:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
-//                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:21:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
-//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
-//                      ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:37:11: Context: While analyzing:
-// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
+// const Foo foo4 = const Foo.withInvalidMessage(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:24: Error: Constant evaluation error:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(bool.fromEnvironment("foo", defaultValue: null));
+//                     ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:38:11: Context: While analyzing:
-// const Bar bar1 = const Bar.withMessage(1);
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:24: Error: Constant evaluation error:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
-//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
-//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:23:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
+//                      ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:39:11: Context: While analyzing:
-// const Bar bar2 = const Bar.withMessage(0);
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:24: Error: Constant evaluation error:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:40:11: Context: While analyzing:
-// const Bar bar3 = const Bar.withoutMessage(1);
+// const Bar bar1 = const Bar.withMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:24: Error: Constant evaluation error:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
-//   const Bar.withoutMessage(this.x) : assert(x < 0);
-//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:41:11: Context: While analyzing:
-// const Bar bar4 = const Bar.withoutMessage(0);
+// const Bar bar2 = const Bar.withMessage(0);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:24: Error: Constant evaluation error:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
-//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
-//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
 // pkg/front_end/testcases/general/constants/const_asserts.dart:42:11: Context: While analyzing:
-// const Bar bar5 = const Bar.withEmptyMessage(1);
+// const Bar bar3 = const Bar.withoutMessage(1);
 //           ^
 //
 // pkg/front_end/testcases/general/constants/const_asserts.dart:43:24: Error: Constant evaluation error:
-// const Bar bar6 = const Bar.withEmptyMessage(0);
+// const Bar bar4 = const Bar.withoutMessage(0);
 //                        ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
+// pkg/front_end/testcases/general/constants/const_asserts.dart:29:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
 //   const Bar.withEmptyMessage(this.x) : assert(x < 0);
 //                                                 ^
-// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/const_asserts.dart:44:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:30:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:45:11: Context: While analyzing:
 // const Bar bar6 = const Bar.withEmptyMessage(0);
 //           ^
 //
@@ -136,7 +136,7 @@
     : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
     ;
   const constructor withInvalidCondition(core::int* x) → self::Foo*
-    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^" in x as{TypeError} core::bool*), super core::Object::•()
     ;
@@ -183,7 +183,7 @@
 static const field self::Foo* foo2 = invalid-expression "This assertion failed with message: x is not positive";
 static const field self::Foo* foo3 = invalid-expression "This assertion failed with message: btw foo was false";
 static const field self::Foo* foo4 = invalid-expression "This assertion failed with a non-String message.";
-static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:19:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   const Foo.withInvalidCondition(this.x) : assert(x);
                                                   ^";
 static const field self::Foo* foo6 = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
@@ -206,22 +206,22 @@
 }
 
 Extra constant evaluation status:
-Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:11:50 -> BoolConstant(true)
-Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:12:59 -> StringConstant("foo was false")
 Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:13:50 -> BoolConstant(true)
-Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:15:73 -> StringConstant("btw foo was false")
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:14:59 -> StringConstant("foo was false")
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:15:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:17:73 -> StringConstant("btw foo was false")
 Extra constant evaluation: evaluated: 31, effectively constant: 4
 
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_asserts.dart:
-- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
+- Foo. (from org-dartlang-testcase:///const_asserts.dart:9:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:14:9)
-- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
-- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:17:9)
-- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:18:9)
-- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:20:9)
-- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:26:9)
-- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:27:9)
-- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:18:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:19:9)
+- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:20:9)
+- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:22:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:29:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:30:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart b/pkg/front_end/testcases/general/constants/const_asserts2.dart
new file mode 100644
index 0000000..ea23d1d
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2020, 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.
+
+class Foo {
+  final int x;
+  const Foo(this.x)
+      : assert(x > 0, "x is not positive"),
+        assert(x > 0),
+        assert(x > 0, ""),
+        assert(const bool.fromEnvironment("foo") == false,
+            "foo was ${const bool.fromEnvironment("foo")}"),
+        assert(const bool.fromEnvironment("foo") == false);
+  const Foo.withMessage(this.x)
+      : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+  const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+  const Foo.withInvalidCondition(this.x) : assert(x);
+}
+
+class Bar {
+  final int x;
+  const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+  const Bar.withoutMessage(this.x) : assert(x < 0);
+  const Bar.withEmptyMessage(this.x) : assert(x < 0);
+}
+
+const Foo foo1 = const Foo(1);
+const Foo foo2 = const Foo(0);
+const Foo foo3 = const Foo.withMessage(42);
+const Foo foo4 = const Foo.withInvalidMessage(42);
+const Foo foo5 = const Foo.withInvalidCondition(42);
+const Bar bar1 = const Bar.withMessage(1);
+const Bar bar2 = const Bar.withMessage(0);
+const Bar bar3 = const Bar.withoutMessage(1);
+const Bar bar4 = const Bar.withoutMessage(0);
+const Bar bar5 = const Bar.withEmptyMessage(1);
+const Bar bar6 = const Bar.withEmptyMessage(0);
+
+main() {
+  print(foo1);
+}
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline.expect
new file mode 100644
index 0000000..37904ec
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline.expect
@@ -0,0 +1,34 @@
+class Foo {
+  final int x;
+  const Foo(this.x)
+      : assert(x > 0, "x is not positive"),
+        assert(x > 0),
+        assert(x > 0, ""),
+        assert(const bool.fromEnvironment("foo") == false,
+            "foo was ${const bool.fromEnvironment("foo")}"),
+        assert(const bool.fromEnvironment("foo") == false);
+  const Foo.withMessage(this.x)
+      : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+  const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+  const Foo.withInvalidCondition(this.x) : assert(x);
+}
+
+class Bar {
+  final int x;
+  const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+  const Bar.withoutMessage(this.x) : assert(x < 0);
+  const Bar.withEmptyMessage(this.x) : assert(x < 0);
+}
+
+const Foo foo1 = const Foo(1);
+const Foo foo2 = const Foo(0);
+const Foo foo3 = const Foo.withMessage(42);
+const Foo foo4 = const Foo.withInvalidMessage(42);
+const Foo foo5 = const Foo.withInvalidCondition(42);
+const Bar bar1 = const Bar.withMessage(1);
+const Bar bar2 = const Bar.withMessage(0);
+const Bar bar3 = const Bar.withoutMessage(1);
+const Bar bar4 = const Bar.withoutMessage(0);
+const Bar bar5 = const Bar.withEmptyMessage(1);
+const Bar bar6 = const Bar.withEmptyMessage(0);
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b8428ab
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.textual_outline_modelled.expect
@@ -0,0 +1,34 @@
+class Bar {
+  const Bar.withEmptyMessage(this.x) : assert(x < 0);
+  const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+  const Bar.withoutMessage(this.x) : assert(x < 0);
+  final int x;
+}
+
+class Foo {
+  const Foo(this.x)
+      : assert(x > 0, "x is not positive"),
+        assert(x > 0),
+        assert(x > 0, ""),
+        assert(const bool.fromEnvironment("foo") == false,
+            "foo was ${const bool.fromEnvironment("foo")}"),
+        assert(const bool.fromEnvironment("foo") == false);
+  const Foo.withInvalidCondition(this.x) : assert(x);
+  const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+  const Foo.withMessage(this.x)
+      : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+  final int x;
+}
+
+const Bar bar1 = const Bar.withMessage(1);
+const Bar bar2 = const Bar.withMessage(0);
+const Bar bar3 = const Bar.withoutMessage(1);
+const Bar bar4 = const Bar.withoutMessage(0);
+const Bar bar5 = const Bar.withEmptyMessage(1);
+const Bar bar6 = const Bar.withEmptyMessage(0);
+const Foo foo1 = const Foo(1);
+const Foo foo2 = const Foo(0);
+const Foo foo3 = const Foo.withMessage(42);
+const Foo foo4 = const Foo.withInvalidMessage(42);
+const Foo foo5 = const Foo.withInvalidCondition(42);
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.expect
new file mode 100644
index 0000000..ac685f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:24: Error: Constant evaluation error:
+// const Foo foo2 = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:8:18: Context: This assertion failed with message: x is not positive
+//       : assert(x > 0, "x is not positive"),
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:11: Context: While analyzing:
+// const Foo foo2 = const Foo(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:24: Error: Constant evaluation error:
+// const Foo foo3 = const Foo.withMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:15:18: Context: This assertion failed with message: btw foo was false
+//       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:11: Context: While analyzing:
+// const Foo foo3 = const Foo.withMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:24: Error: Constant evaluation error:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:16:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:11: Context: While analyzing:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:24: Error: Constant evaluation error:
+// const Bar bar1 = const Bar.withMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:11: Context: While analyzing:
+// const Bar bar1 = const Bar.withMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:24: Error: Constant evaluation error:
+// const Bar bar2 = const Bar.withMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:11: Context: While analyzing:
+// const Bar bar2 = const Bar.withMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:24: Error: Constant evaluation error:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:11: Context: While analyzing:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:24: Error: Constant evaluation error:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:11: Context: While analyzing:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(x.{core::num::>}(0){(core::num) → core::bool}, ""), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${#C1}"), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${#C1}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int x) → self::Foo
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
+    ;
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor withMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+  const constructor withEmptyMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+}
+static const field self::Foo foo1 = #C3;
+static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
+static const field self::Foo foo3 = invalid-expression "This assertion failed with message: btw foo was false";
+static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
+static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^";
+static const field self::Bar bar1 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar2 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar3 = invalid-expression "This assertion failed.";
+static const field self::Bar bar4 = invalid-expression "This assertion failed.";
+static const field self::Bar bar5 = invalid-expression "This assertion failed.";
+static const field self::Bar bar6 = invalid-expression "This assertion failed.";
+static method main() → dynamic {
+  core::print(#C3);
+}
+
+constants  {
+  #C1 = false
+  #C2 = 1
+  #C3 = self::Foo {x:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_asserts2.dart:
+- Foo. (from org-dartlang-testcase:///const_asserts2.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts2.dart:14:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts2.dart:16:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts2.dart:17:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts2.dart:22:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts2.dart:23:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts2.dart:24:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.modular.expect
new file mode 100644
index 0000000..ac685f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:24: Error: Constant evaluation error:
+// const Foo foo2 = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:8:18: Context: This assertion failed with message: x is not positive
+//       : assert(x > 0, "x is not positive"),
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:11: Context: While analyzing:
+// const Foo foo2 = const Foo(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:24: Error: Constant evaluation error:
+// const Foo foo3 = const Foo.withMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:15:18: Context: This assertion failed with message: btw foo was false
+//       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:11: Context: While analyzing:
+// const Foo foo3 = const Foo.withMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:24: Error: Constant evaluation error:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:16:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:11: Context: While analyzing:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:24: Error: Constant evaluation error:
+// const Bar bar1 = const Bar.withMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:11: Context: While analyzing:
+// const Bar bar1 = const Bar.withMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:24: Error: Constant evaluation error:
+// const Bar bar2 = const Bar.withMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:11: Context: While analyzing:
+// const Bar bar2 = const Bar.withMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:24: Error: Constant evaluation error:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:11: Context: While analyzing:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:24: Error: Constant evaluation error:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:11: Context: While analyzing:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(x.{core::num::>}(0){(core::num) → core::bool}, ""), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${#C1}"), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${#C1}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int x) → self::Foo
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
+    ;
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor withMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+  const constructor withEmptyMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+}
+static const field self::Foo foo1 = #C3;
+static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
+static const field self::Foo foo3 = invalid-expression "This assertion failed with message: btw foo was false";
+static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
+static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^";
+static const field self::Bar bar1 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar2 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar3 = invalid-expression "This assertion failed.";
+static const field self::Bar bar4 = invalid-expression "This assertion failed.";
+static const field self::Bar bar5 = invalid-expression "This assertion failed.";
+static const field self::Bar bar6 = invalid-expression "This assertion failed.";
+static method main() → dynamic {
+  core::print(#C3);
+}
+
+constants  {
+  #C1 = false
+  #C2 = 1
+  #C3 = self::Foo {x:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_asserts2.dart:
+- Foo. (from org-dartlang-testcase:///const_asserts2.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts2.dart:14:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts2.dart:16:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts2.dart:17:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts2.dart:22:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts2.dart:23:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts2.dart:24:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.outline.expect
new file mode 100644
index 0000000..5503846
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.outline.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(x.{core::num::>}(0){(core::num) → core::bool}, ""), assert(const core::bool::fromEnvironment("foo") =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${const core::bool::fromEnvironment("foo")}"), assert(const core::bool::fromEnvironment("foo") =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${const core::bool::fromEnvironment("foo")}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int x) → self::Foo
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
+    ;
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor withMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+  const constructor withEmptyMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+}
+static const field self::Foo foo1 = const self::Foo::•(1);
+static const field self::Foo foo2 = const self::Foo::•(0);
+static const field self::Foo foo3 = const self::Foo::withMessage(42);
+static const field self::Foo foo4 = const self::Foo::withInvalidMessage(42);
+static const field self::Foo foo5 = const self::Foo::withInvalidCondition(42);
+static const field self::Bar bar1 = const self::Bar::withMessage(1);
+static const field self::Bar bar2 = const self::Bar::withMessage(0);
+static const field self::Bar bar3 = const self::Bar::withoutMessage(1);
+static const field self::Bar bar4 = const self::Bar::withoutMessage(0);
+static const field self::Bar bar5 = const self::Bar::withEmptyMessage(1);
+static const field self::Bar bar6 = const self::Bar::withEmptyMessage(0);
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts2.dart:11:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts2.dart:12:59 -> StringConstant("foo was false")
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts2.dart:13:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts2.dart:15:73 -> StringConstant("btw foo was false")
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_asserts2.dart:27:24 -> InstanceConstant(const Foo{Foo.x: 1})
+Extra constant evaluation: evaluated: 39, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.transformed.expect
new file mode 100644
index 0000000..6e172f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts2.dart.weak.transformed.expect
@@ -0,0 +1,171 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:24: Error: Constant evaluation error:
+// const Foo foo2 = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:8:18: Context: This assertion failed with message: x is not positive
+//       : assert(x > 0, "x is not positive"),
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:28:11: Context: While analyzing:
+// const Foo foo2 = const Foo(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:24: Error: Constant evaluation error:
+// const Foo foo3 = const Foo.withMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:15:18: Context: This assertion failed with message: btw foo was false
+//       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:29:11: Context: While analyzing:
+// const Foo foo3 = const Foo.withMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:24: Error: Constant evaluation error:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:16:56: Context: This assertion failed with a non-String message.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:30:11: Context: While analyzing:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:24: Error: Constant evaluation error:
+// const Bar bar1 = const Bar.withMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:32:11: Context: While analyzing:
+// const Bar bar1 = const Bar.withMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:24: Error: Constant evaluation error:
+// const Bar bar2 = const Bar.withMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:22:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:33:11: Context: While analyzing:
+// const Bar bar2 = const Bar.withMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:24: Error: Constant evaluation error:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:34:11: Context: While analyzing:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:24: Error: Constant evaluation error:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:23:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:35:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:36:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:24:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts2.dart:37:11: Context: While analyzing:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(x.{core::num::>}(0){(core::num) → core::bool}, ""), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${#C1}"), assert(#C1 =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${#C1}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int x) → self::Foo
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
+    ;
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor withMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+  const constructor withEmptyMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+}
+static const field self::Foo foo1 = #C3;
+static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
+static const field self::Foo foo3 = invalid-expression "This assertion failed with message: btw foo was false";
+static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
+static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts2.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^";
+static const field self::Bar bar1 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar2 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar3 = invalid-expression "This assertion failed.";
+static const field self::Bar bar4 = invalid-expression "This assertion failed.";
+static const field self::Bar bar5 = invalid-expression "This assertion failed.";
+static const field self::Bar bar6 = invalid-expression "This assertion failed.";
+static method main() → dynamic {
+  core::print(#C3);
+}
+
+constants  {
+  #C1 = false
+  #C2 = 1
+  #C3 = self::Foo {x:#C2}
+}
+
+Extra constant evaluation status:
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts2.dart:11:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts2.dart:12:59 -> StringConstant("foo was false")
+Evaluated: EqualsCall @ org-dartlang-testcase:///const_asserts2.dart:13:50 -> BoolConstant(true)
+Evaluated: StringConcatenation @ org-dartlang-testcase:///const_asserts2.dart:15:73 -> StringConstant("btw foo was false")
+Extra constant evaluation: evaluated: 29, effectively constant: 4
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_asserts2.dart:
+- Foo. (from org-dartlang-testcase:///const_asserts2.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts2.dart:14:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts2.dart:16:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts2.dart:17:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts2.dart:22:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts2.dart:23:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts2.dart:24:9)
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart b/pkg/front_end/testcases/general/constants/const_collections.dart
index 5d63d1a..f137024 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'dart:collection';
 
 class ConstIterable extends IterableBase<int> {
@@ -13,13 +13,13 @@
 const int fortyTwo = 42;
 const dynamic fortyTwoAsDynamic = ((fortyTwo as dynamic) * 2) ~/ 2;
 
-const List<String> nullList = null;
+const List<String>? nullList = null;
 const List<String> foo = ["hello", "world"];
 List<String> get fooAsGetter => const ["hello", "world"];
 const List<String> bar = [...foo, "!"];
 var barAsVar = [...foo, "!"];
 List<String> get barAsGetter => const [...foo, "!"];
-const List<String> barWithNullSpread = [...foo, ...nullList];
+const List<String> barWithNullSpread = [...foo, ...?nullList];
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
 const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 const List<String> barWithMapSpread = [...foo, ...quux];
@@ -32,12 +32,12 @@
 const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
 const List<String> listConcat = ["Hello"] + ["World"];
 
-const Set<String> nullSet = null;
+const Set<String>? nullSet = null;
 const Set<String> baz = {"hello", "world"};
 Set<String> get bazAsGetter => const {"hello", "world"};
 const Set<String> qux = {...baz, "!"};
 Set<String> get quxAsGetter => const {...baz, "!"};
-const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+const Set<String> quxWithNullSpread = {...baz, ...?nullSet};
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
 const Set<String> quxWithMapSpread = {...baz, ...quux};
 const Set<String> quxWithCustomIterableSpread1 = {
@@ -49,12 +49,12 @@
 const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
 const Set<dynamic> setWithDuplicates = {42, 42};
 
-const Map<String, String> nullMap = null;
+const Map<String, String>? nullMap = null;
 const Map<String, String> quux = {"hello": "world"};
 Map<String, String> get quuxAsGetter => const {"hello": "world"};
 const Map<String, String> quuz = {...quux, "!": "bye!"};
 Map<String, String> get quuzAsGetter => const {...quux, "!": "bye!"};
-const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+const Map<String, String> quuzWithNullSpread = {...quux, ...?nullMap};
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
 const Map<String, String> mapWithSetSpread = {...baz};
@@ -87,7 +87,7 @@
   Iterable<MapEntry<String, String>> get entries => [];
 
   @override
-  String operator [](Object key) => throw new UnimplementedError();
+  String operator [](Object? key) => throw new UnimplementedError();
 
   @override
   void operator []=(String key, String value) => throw new UnimplementedError();
@@ -99,10 +99,10 @@
   void clear() => throw new UnimplementedError();
 
   @override
-  bool containsKey(Object key) => throw new UnimplementedError();
+  bool containsKey(Object? key) => throw new UnimplementedError();
 
   @override
-  bool containsValue(Object value) => throw new UnimplementedError();
+  bool containsValue(Object? value) => throw new UnimplementedError();
 
   @override
   bool get isEmpty => throw new UnimplementedError();
@@ -117,7 +117,7 @@
   int get length => throw new UnimplementedError();
 
   @override
-  String remove(Object key) => throw new UnimplementedError();
+  String remove(Object? key) => throw new UnimplementedError();
 
   @override
   Iterable<String> get values => throw new UnimplementedError();
@@ -145,7 +145,8 @@
   void removeWhere(bool predicate(String key, String value)) =>
       throw new UnimplementedError();
 
-  String update(String key, String update(String value), {String ifAbsent()}) =>
+  String update(String key, String update(String value),
+          {String ifAbsent()?}) =>
       throw new UnimplementedError();
 
   Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> f(String key, String value)) =>
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline.expect
index d5f1dc8..805abad 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 class ConstIterable extends IterableBase<int> {
@@ -8,13 +7,13 @@
 
 const int fortyTwo = 42;
 const dynamic fortyTwoAsDynamic = ((fortyTwo as dynamic) * 2) ~/ 2;
-const List<String> nullList = null;
+const List<String>? nullList = null;
 const List<String> foo = ["hello", "world"];
 List<String> get fooAsGetter => const ["hello", "world"];
 const List<String> bar = [...foo, "!"];
 var barAsVar = [...foo, "!"];
 List<String> get barAsGetter => const [...foo, "!"];
-const List<String> barWithNullSpread = [...foo, ...nullList];
+const List<String> barWithNullSpread = [...foo, ...?nullList];
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
 const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 const List<String> barWithMapSpread = [...foo, ...quux];
@@ -26,12 +25,12 @@
 const customIterable = const CustomIterable();
 const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
 const List<String> listConcat = ["Hello"] + ["World"];
-const Set<String> nullSet = null;
+const Set<String>? nullSet = null;
 const Set<String> baz = {"hello", "world"};
 Set<String> get bazAsGetter => const {"hello", "world"};
 const Set<String> qux = {...baz, "!"};
 Set<String> get quxAsGetter => const {...baz, "!"};
-const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+const Set<String> quxWithNullSpread = {...baz, ...?nullSet};
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
 const Set<String> quxWithMapSpread = {...baz, ...quux};
 const Set<String> quxWithCustomIterableSpread1 = {
@@ -42,12 +41,12 @@
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
 const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
 const Set<dynamic> setWithDuplicates = {42, 42};
-const Map<String, String> nullMap = null;
+const Map<String, String>? nullMap = null;
 const Map<String, String> quux = {"hello": "world"};
 Map<String, String> get quuxAsGetter => const {"hello": "world"};
 const Map<String, String> quuz = {...quux, "!": "bye!"};
 Map<String, String> get quuzAsGetter => const {...quux, "!": "bye!"};
-const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+const Map<String, String> quuzWithNullSpread = {...quux, ...?nullMap};
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
 const Map<String, String> mapWithSetSpread = {...baz};
@@ -76,7 +75,7 @@
   @override
   Iterable<MapEntry<String, String>> get entries => [];
   @override
-  String operator [](Object key) => throw new UnimplementedError();
+  String operator [](Object? key) => throw new UnimplementedError();
   @override
   void operator []=(String key, String value) => throw new UnimplementedError();
   @override
@@ -84,9 +83,9 @@
   @override
   void clear() => throw new UnimplementedError();
   @override
-  bool containsKey(Object key) => throw new UnimplementedError();
+  bool containsKey(Object? key) => throw new UnimplementedError();
   @override
-  bool containsValue(Object value) => throw new UnimplementedError();
+  bool containsValue(Object? value) => throw new UnimplementedError();
   @override
   bool get isEmpty => throw new UnimplementedError();
   @override
@@ -96,7 +95,7 @@
   @override
   int get length => throw new UnimplementedError();
   @override
-  String remove(Object key) => throw new UnimplementedError();
+  String remove(Object? key) => throw new UnimplementedError();
   @override
   Iterable<String> get values => throw new UnimplementedError();
   @override
@@ -116,7 +115,8 @@
   @override
   void removeWhere(bool predicate(String key, String value)) =>
       throw new UnimplementedError();
-  String update(String key, String update(String value), {String ifAbsent()}) =>
+  String update(String key, String update(String value),
+          {String ifAbsent()?}) =>
       throw new UnimplementedError();
   Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> f(String key, String value)) =>
       throw new UnimplementedError();
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline_modelled.expect
index 5082de0..3b6f414 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:collection';
 
 List<String> get barAsGetter => const [...foo, "!"];
@@ -30,18 +29,19 @@
   @override
   Map<RK, RV> cast<RK, RV>() => throw new UnimplementedError();
   @override
-  String operator [](Object key) => throw new UnimplementedError();
+  String operator [](Object? key) => throw new UnimplementedError();
   @override
   String putIfAbsent(String key, String ifAbsent()) =>
       throw new UnimplementedError();
   @override
-  String remove(Object key) => throw new UnimplementedError();
-  String update(String key, String update(String value), {String ifAbsent()}) =>
+  String remove(Object? key) => throw new UnimplementedError();
+  String update(String key, String update(String value),
+          {String ifAbsent()?}) =>
       throw new UnimplementedError();
   @override
-  bool containsKey(Object key) => throw new UnimplementedError();
+  bool containsKey(Object? key) => throw new UnimplementedError();
   @override
-  bool containsValue(Object value) => throw new UnimplementedError();
+  bool containsValue(Object? value) => throw new UnimplementedError();
   @override
   bool get isEmpty => throw new UnimplementedError();
   @override
@@ -75,6 +75,7 @@
   operator ==(Object o) {}
 }
 
+const List<String>? nullList = null;
 const List<String> bar = [...foo, "!"];
 const List<String> barWithCustomIterableSpread1 = [
   ...bar,
@@ -85,27 +86,26 @@
 const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
 const List<String> barWithMapSpread = [...foo, ...quux];
-const List<String> barWithNullSpread = [...foo, ...nullList];
+const List<String> barWithNullSpread = [...foo, ...?nullList];
 const List<String> foo = ["hello", "world"];
 const List<String> listConcat = ["Hello"] + ["World"];
-const List<String> nullList = null;
+const Map<String, String>? nullMap = null;
 const Map<String, String> customMap = const CustomMap();
 const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
 const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
 const Map<String, String> mapWithCustomMap3 = {...customMap};
 const Map<String, String> mapWithSetSpread = {...baz};
-const Map<String, String> nullMap = null;
 const Map<String, String> quux = {"hello": "world"};
 const Map<String, String> quuz = {...quux, "!": "bye!"};
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
-const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+const Map<String, String> quuzWithNullSpread = {...quux, ...?nullMap};
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
 const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
   const WithEquals(42): 42
 };
 const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
+const Set<String>? nullSet = null;
 const Set<String> baz = {"hello", "world"};
-const Set<String> nullSet = null;
 const Set<String> qux = {...baz, "!"};
 const Set<String> quxWithCustomIterableSpread1 = {
   ...baz,
@@ -115,7 +115,7 @@
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
 const Set<String> quxWithMapSpread = {...baz, ...quux};
-const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+const Set<String> quxWithNullSpread = {...baz, ...?nullSet};
 const Set<dynamic> setWithDuplicates = {42, 42};
 const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
 const customIterable = const CustomIterable();
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
index 456d5c3..5043c10 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,16 +36,6 @@
 // const Map<String, String> mapWithSetSpread = {...baz};
 //                                              ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:40: Error: Constant evaluation error:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                        ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:52: Context: Null value during constant evaluation.
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                                    ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:20: Context: While analyzing:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                    ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:24:46: Error: Constant evaluation error:
 // const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 //                                              ^
@@ -97,16 +87,6 @@
 // const List<String> listConcat = ["Hello"] + ["World"];
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:39: Error: Constant evaluation error:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                       ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:51: Context: Null value during constant evaluation.
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                                   ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:19: Context: While analyzing:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                   ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:43:50: Error: Constant evaluation error:
 // const Set<String> quxWithCustomIterableSpread1 = {
 //                                                  ^
@@ -148,16 +128,6 @@
 // const Set<dynamic> setWithDuplicates = {42, 42};
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Error: Constant evaluation error:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:61: Context: Null value during constant evaluation.
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                                                             ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Context: While analyzing:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Error: Constant evaluation error:
 // const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
 //                           ^
@@ -215,291 +185,198 @@
 
 import "dart:collection";
 
-class ConstIterable extends col::IterableBase<core::int*> /*hasConstConstructor*/  {
-  const constructor •() → self::ConstIterable*
+class ConstIterable extends col::IterableBase<core::int> /*hasConstConstructor*/  {
+  const constructor •() → self::ConstIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::int*>*
-    return <core::int*>[].{core::Iterable::iterator}{core::Iterator<core::int*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::int*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::int*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::int>
+    return <core::int>[].{core::Iterable::iterator}{core::Iterator<core::int>};
 }
 class WithEquals extends core::Object /*hasConstConstructor*/  {
-  final field core::int* i;
-  const constructor •(core::int* i) → self::WithEquals*
+  final field core::int i;
+  const constructor •(core::int i) → self::WithEquals
     : self::WithEquals::i = i, super core::Object::•()
     ;
-  operator ==(core::Object* o) → core::bool* {
-    return o is self::WithEquals* && (o{self::WithEquals*} as self::WithEquals*).{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
+  operator ==(core::Object o) → core::bool {
+    return o is{ForNonNullableByDefault} self::WithEquals && (o{self::WithEquals} as{ForNonNullableByDefault} self::WithEquals).{self::WithEquals::i}{core::int} =={core::num::==}{(core::Object) → core::bool} this.{self::WithEquals::i}{core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class CustomIterable extends col::IterableBase<core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomIterable*
+class CustomIterable extends col::IterableBase<core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::String*>*
-    return <core::String*>[].{core::Iterable::iterator}{core::Iterator<core::String*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::String*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::String*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::String>
+    return <core::String>[].{core::Iterable::iterator}{core::Iterator<core::String>};
 }
-class CustomMap extends core::Object implements core::Map<core::String*, core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomMap*
+class CustomMap extends core::Object implements core::Map<core::String, core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomMap
     : super core::Object::•()
     ;
-  @#C4
-  get entries() → core::Iterable<core::MapEntry<core::String*, core::String*>*>*
-    return <core::MapEntry<core::String*, core::String*>*>[];
-  @#C4
-  operator [](core::Object* key) → core::String*
+  @#C1
+  get entries() → core::Iterable<core::MapEntry<core::String, core::String>>
+    return <core::MapEntry<core::String, core::String>>[];
+  @#C1
+  operator [](core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
+  @#C1
+  operator []=(covariant-by-class core::String key, covariant-by-class core::String value) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
+  @#C1
+  method cast<RK extends core::Object? = dynamic, RV extends core::Object? = dynamic>() → core::Map<self::CustomMap::cast::RK%, self::CustomMap::cast::RV%>
     return throw new core::UnimplementedError::•();
-  @#C4
+  @#C1
   method clear() → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsKey(core::Object* key) → core::bool*
+  @#C1
+  method containsKey(core::Object? key) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsValue(core::Object* value) → core::bool*
+  @#C1
+  method containsValue(core::Object? value) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isEmpty() → core::bool*
+  @#C1
+  get isEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isNotEmpty() → core::bool*
+  @#C1
+  get isNotEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get keys() → core::Iterable<core::String*>*
+  @#C1
+  get keys() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  get length() → core::int*
+  @#C1
+  get length() → core::int
     return throw new core::UnimplementedError::•();
-  @#C4
-  method remove(core::Object* key) → core::String*
+  @#C1
+  method remove(core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  get values() → core::Iterable<core::String*>*
+  @#C1
+  get values() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
+  @#C1
+  method addAll(covariant-by-class core::Map<core::String, core::String> other) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  @#C1
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String, core::String>> newEntries) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method forEach((core::String*, core::String*) →* void f) → void
+  @#C1
+  method forEach((core::String, core::String) → void f) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
+  @#C1
+  method putIfAbsent(covariant-by-class core::String key, covariant-by-class () → core::String ifAbsent) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
+  @#C1
+  method updateAll(covariant-by-class (core::String, core::String) → core::String update) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
+  @#C1
+  method removeWhere((core::String, core::String) → core::bool predicate) → void
     return throw new core::UnimplementedError::•();
-  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = #C2}) → core::String
     return throw new core::UnimplementedError::•();
-  method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
+  method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     return throw new core::UnimplementedError::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* fortyTwo = #C5;
-static const field dynamic fortyTwoAsDynamic = #C5;
-static const field core::List<core::String*>* nullList = #C3;
-static const field core::List<core::String*>* foo = #C8;
-static const field core::List<core::String*>* bar = #C10;
-static field core::List<core::String*>* barAsVar = block {
-  final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
-  #t1.{core::List::add}{Invariant}("!"){(core::String*) →* void};
+static const field core::int fortyTwo = #C3;
+static const field dynamic fortyTwoAsDynamic = #C3;
+static const field core::List<core::String>? nullList = #C2;
+static const field core::List<core::String> foo = #C6;
+static const field core::List<core::String> bar = #C8;
+static field core::List<core::String> barAsVar = block {
+  final core::List<core::String> #t1 = core::List::of<core::String>(#C6);
+  #t1.{core::List::add}{Invariant}("!"){(core::String) → void};
 } =>#t1;
-static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithNullSpread = #C6;
+static const field core::List<core::String> barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
                                                   ^";
-static const field core::List<core::String*>* barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
+static const field core::List<core::String> barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
  - 'Iterable' is from 'dart:core'.";
-static const field core::List<core::String*>* barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
 const List<String> barWithMapSpread = [...foo, ...quux];
                                                   ^";
-static const field core::List<core::String*>* barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field self::CustomIterable* customIterable = #C11;
-static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
-static const field core::Set<core::String*>* nullSet = #C3;
-static const field core::Set<core::String*>* baz = #C12;
-static const field core::Set<core::String*>* qux = #C13;
-static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::List<core::String> barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field self::CustomIterable customIterable = #C9;
+static const field core::List<core::String> barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
+static const field core::Set<core::String>? nullSet = #C2;
+static const field core::Set<core::String> baz = #C10;
+static const field core::Set<core::String> qux = #C11;
+static const field core::Set<core::String> quxWithNullSpread = #C10;
+static const field core::Set<core::String> quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
                                                  ^";
-static const field core::Set<core::String*>* quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Set<core::String> quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Set<String> quxWithMapSpread = {...baz, ...quux};
                                      ^";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+static const field core::Set<core::String> quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
                                                           ^";
-static const field core::Set<dynamic>* setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
-static const field core::Map<core::String*, core::String*>* nullMap = #C3;
-static const field core::Map<core::String*, core::String*>* quux = #C14;
-static const field core::Map<core::String*, core::String*>* quuz = #C16;
-static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
+static const field core::Map<core::String, core::String>? nullMap = #C2;
+static const field core::Map<core::String, core::String> quux = #C12;
+static const field core::Map<core::String, core::String> quuz = #C14;
+static const field core::Map<core::String, core::String> quuzWithNullSpread = #C12;
+static const field core::Map<core::String, core::String> quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
                                                            ^";
-static const field core::Map<core::String*, core::String*>* quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
                                               ^";
-static const field core::Map<core::String*, core::String*>* mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> mapWithSetSpread = {...baz};
                                              ^";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* customMap = #C17;
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Map<core::String, core::String> mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> customMap = #C15;
+static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Map<core::int*, core::int*>* mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
-static get fooAsGetter() → core::List<core::String*>*
+static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
+static get fooAsGetter() → core::List<core::String>
+  return #C6;
+static get barAsGetter() → core::List<core::String>
   return #C8;
-static get barAsGetter() → core::List<core::String*>*
+static get bazAsGetter() → core::Set<core::String>
   return #C10;
-static get bazAsGetter() → core::Set<core::String*>*
+static get quxAsGetter() → core::Set<core::String>
+  return #C11;
+static get quuxAsGetter() → core::Map<core::String, core::String>
   return #C12;
-static get quxAsGetter() → core::Set<core::String*>*
-  return #C13;
-static get quuxAsGetter() → core::Map<core::String*, core::String*>*
+static get quuzAsGetter() → core::Map<core::String, core::String>
   return #C14;
-static get quuzAsGetter() → core::Map<core::String*, core::String*>*
-  return #C16;
 static method main() → dynamic {
-  core::print(#C10);
-  core::print(#C13);
-  core::print(#C16);
+  core::print(#C8);
+  core::print(#C11);
+  core::print(#C14);
   core::print( block {
-    final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
-    #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
+    final core::Set<core::String> #t2 = col::LinkedHashSet::•<core::String>();
+    #t2.{core::Set::add}{Invariant}("hello"){(core::String) → core::bool};
   } =>#t2);
-  core::print(#C18);
+  core::print(#C16);
 }
 
 constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-  #C4 = core::_Override {}
-  #C5 = 42
-  #C6 = "hello"
-  #C7 = "world"
-  #C8 = <core::String*>[#C6, #C7]
-  #C9 = "!"
-  #C10 = <core::String*>[#C6, #C7, #C9]
-  #C11 = self::CustomIterable {}
-  #C12 = <core::String*>{#C6, #C7}
-  #C13 = <core::String*>{#C6, #C7, #C9}
-  #C14 = <core::String*, core::String*>{#C6:#C7)
-  #C15 = "bye!"
-  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
-  #C17 = self::CustomMap {}
-  #C18 = <core::String*>{#C6}
+  #C1 = core::_Override {}
+  #C2 = null
+  #C3 = 42
+  #C4 = "hello"
+  #C5 = "world"
+  #C6 = <core::String*>[#C4, #C5]
+  #C7 = "!"
+  #C8 = <core::String*>[#C4, #C5, #C7]
+  #C9 = self::CustomIterable {}
+  #C10 = <core::String*>{#C4, #C5}
+  #C11 = <core::String*>{#C4, #C5, #C7}
+  #C12 = <core::String*, core::String*>{#C4:#C5)
+  #C13 = "bye!"
+  #C14 = <core::String*, core::String*>{#C4:#C5, #C7:#C13)
+  #C15 = self::CustomMap {}
+  #C16 = <core::String*>{#C4}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect
index 456d5c3..5043c10 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,16 +36,6 @@
 // const Map<String, String> mapWithSetSpread = {...baz};
 //                                              ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:40: Error: Constant evaluation error:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                        ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:52: Context: Null value during constant evaluation.
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                                    ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:20: Context: While analyzing:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                    ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:24:46: Error: Constant evaluation error:
 // const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 //                                              ^
@@ -97,16 +87,6 @@
 // const List<String> listConcat = ["Hello"] + ["World"];
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:39: Error: Constant evaluation error:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                       ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:51: Context: Null value during constant evaluation.
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                                   ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:19: Context: While analyzing:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                   ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:43:50: Error: Constant evaluation error:
 // const Set<String> quxWithCustomIterableSpread1 = {
 //                                                  ^
@@ -148,16 +128,6 @@
 // const Set<dynamic> setWithDuplicates = {42, 42};
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Error: Constant evaluation error:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:61: Context: Null value during constant evaluation.
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                                                             ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Context: While analyzing:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Error: Constant evaluation error:
 // const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
 //                           ^
@@ -215,291 +185,198 @@
 
 import "dart:collection";
 
-class ConstIterable extends col::IterableBase<core::int*> /*hasConstConstructor*/  {
-  const constructor •() → self::ConstIterable*
+class ConstIterable extends col::IterableBase<core::int> /*hasConstConstructor*/  {
+  const constructor •() → self::ConstIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::int*>*
-    return <core::int*>[].{core::Iterable::iterator}{core::Iterator<core::int*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::int*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::int*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::int>
+    return <core::int>[].{core::Iterable::iterator}{core::Iterator<core::int>};
 }
 class WithEquals extends core::Object /*hasConstConstructor*/  {
-  final field core::int* i;
-  const constructor •(core::int* i) → self::WithEquals*
+  final field core::int i;
+  const constructor •(core::int i) → self::WithEquals
     : self::WithEquals::i = i, super core::Object::•()
     ;
-  operator ==(core::Object* o) → core::bool* {
-    return o is self::WithEquals* && (o{self::WithEquals*} as self::WithEquals*).{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
+  operator ==(core::Object o) → core::bool {
+    return o is{ForNonNullableByDefault} self::WithEquals && (o{self::WithEquals} as{ForNonNullableByDefault} self::WithEquals).{self::WithEquals::i}{core::int} =={core::num::==}{(core::Object) → core::bool} this.{self::WithEquals::i}{core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class CustomIterable extends col::IterableBase<core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomIterable*
+class CustomIterable extends col::IterableBase<core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::String*>*
-    return <core::String*>[].{core::Iterable::iterator}{core::Iterator<core::String*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::String*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::String*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::String>
+    return <core::String>[].{core::Iterable::iterator}{core::Iterator<core::String>};
 }
-class CustomMap extends core::Object implements core::Map<core::String*, core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomMap*
+class CustomMap extends core::Object implements core::Map<core::String, core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomMap
     : super core::Object::•()
     ;
-  @#C4
-  get entries() → core::Iterable<core::MapEntry<core::String*, core::String*>*>*
-    return <core::MapEntry<core::String*, core::String*>*>[];
-  @#C4
-  operator [](core::Object* key) → core::String*
+  @#C1
+  get entries() → core::Iterable<core::MapEntry<core::String, core::String>>
+    return <core::MapEntry<core::String, core::String>>[];
+  @#C1
+  operator [](core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
+  @#C1
+  operator []=(covariant-by-class core::String key, covariant-by-class core::String value) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
+  @#C1
+  method cast<RK extends core::Object? = dynamic, RV extends core::Object? = dynamic>() → core::Map<self::CustomMap::cast::RK%, self::CustomMap::cast::RV%>
     return throw new core::UnimplementedError::•();
-  @#C4
+  @#C1
   method clear() → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsKey(core::Object* key) → core::bool*
+  @#C1
+  method containsKey(core::Object? key) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsValue(core::Object* value) → core::bool*
+  @#C1
+  method containsValue(core::Object? value) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isEmpty() → core::bool*
+  @#C1
+  get isEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isNotEmpty() → core::bool*
+  @#C1
+  get isNotEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get keys() → core::Iterable<core::String*>*
+  @#C1
+  get keys() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  get length() → core::int*
+  @#C1
+  get length() → core::int
     return throw new core::UnimplementedError::•();
-  @#C4
-  method remove(core::Object* key) → core::String*
+  @#C1
+  method remove(core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  get values() → core::Iterable<core::String*>*
+  @#C1
+  get values() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
+  @#C1
+  method addAll(covariant-by-class core::Map<core::String, core::String> other) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  @#C1
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String, core::String>> newEntries) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method forEach((core::String*, core::String*) →* void f) → void
+  @#C1
+  method forEach((core::String, core::String) → void f) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
+  @#C1
+  method putIfAbsent(covariant-by-class core::String key, covariant-by-class () → core::String ifAbsent) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
+  @#C1
+  method updateAll(covariant-by-class (core::String, core::String) → core::String update) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
+  @#C1
+  method removeWhere((core::String, core::String) → core::bool predicate) → void
     return throw new core::UnimplementedError::•();
-  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = #C2}) → core::String
     return throw new core::UnimplementedError::•();
-  method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
+  method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     return throw new core::UnimplementedError::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* fortyTwo = #C5;
-static const field dynamic fortyTwoAsDynamic = #C5;
-static const field core::List<core::String*>* nullList = #C3;
-static const field core::List<core::String*>* foo = #C8;
-static const field core::List<core::String*>* bar = #C10;
-static field core::List<core::String*>* barAsVar = block {
-  final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
-  #t1.{core::List::add}{Invariant}("!"){(core::String*) →* void};
+static const field core::int fortyTwo = #C3;
+static const field dynamic fortyTwoAsDynamic = #C3;
+static const field core::List<core::String>? nullList = #C2;
+static const field core::List<core::String> foo = #C6;
+static const field core::List<core::String> bar = #C8;
+static field core::List<core::String> barAsVar = block {
+  final core::List<core::String> #t1 = core::List::of<core::String>(#C6);
+  #t1.{core::List::add}{Invariant}("!"){(core::String) → void};
 } =>#t1;
-static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithNullSpread = #C6;
+static const field core::List<core::String> barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
                                                   ^";
-static const field core::List<core::String*>* barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
+static const field core::List<core::String> barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
  - 'Iterable' is from 'dart:core'.";
-static const field core::List<core::String*>* barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
 const List<String> barWithMapSpread = [...foo, ...quux];
                                                   ^";
-static const field core::List<core::String*>* barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field self::CustomIterable* customIterable = #C11;
-static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
-static const field core::Set<core::String*>* nullSet = #C3;
-static const field core::Set<core::String*>* baz = #C12;
-static const field core::Set<core::String*>* qux = #C13;
-static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::List<core::String> barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field self::CustomIterable customIterable = #C9;
+static const field core::List<core::String> barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
+static const field core::Set<core::String>? nullSet = #C2;
+static const field core::Set<core::String> baz = #C10;
+static const field core::Set<core::String> qux = #C11;
+static const field core::Set<core::String> quxWithNullSpread = #C10;
+static const field core::Set<core::String> quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
                                                  ^";
-static const field core::Set<core::String*>* quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Set<core::String> quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Set<String> quxWithMapSpread = {...baz, ...quux};
                                      ^";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+static const field core::Set<core::String> quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
                                                           ^";
-static const field core::Set<dynamic>* setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
-static const field core::Map<core::String*, core::String*>* nullMap = #C3;
-static const field core::Map<core::String*, core::String*>* quux = #C14;
-static const field core::Map<core::String*, core::String*>* quuz = #C16;
-static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
+static const field core::Map<core::String, core::String>? nullMap = #C2;
+static const field core::Map<core::String, core::String> quux = #C12;
+static const field core::Map<core::String, core::String> quuz = #C14;
+static const field core::Map<core::String, core::String> quuzWithNullSpread = #C12;
+static const field core::Map<core::String, core::String> quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
                                                            ^";
-static const field core::Map<core::String*, core::String*>* quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
                                               ^";
-static const field core::Map<core::String*, core::String*>* mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> mapWithSetSpread = {...baz};
                                              ^";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* customMap = #C17;
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Map<core::String, core::String> mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> customMap = #C15;
+static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Map<core::int*, core::int*>* mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
-static get fooAsGetter() → core::List<core::String*>*
+static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
+static get fooAsGetter() → core::List<core::String>
+  return #C6;
+static get barAsGetter() → core::List<core::String>
   return #C8;
-static get barAsGetter() → core::List<core::String*>*
+static get bazAsGetter() → core::Set<core::String>
   return #C10;
-static get bazAsGetter() → core::Set<core::String*>*
+static get quxAsGetter() → core::Set<core::String>
+  return #C11;
+static get quuxAsGetter() → core::Map<core::String, core::String>
   return #C12;
-static get quxAsGetter() → core::Set<core::String*>*
-  return #C13;
-static get quuxAsGetter() → core::Map<core::String*, core::String*>*
+static get quuzAsGetter() → core::Map<core::String, core::String>
   return #C14;
-static get quuzAsGetter() → core::Map<core::String*, core::String*>*
-  return #C16;
 static method main() → dynamic {
-  core::print(#C10);
-  core::print(#C13);
-  core::print(#C16);
+  core::print(#C8);
+  core::print(#C11);
+  core::print(#C14);
   core::print( block {
-    final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
-    #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
+    final core::Set<core::String> #t2 = col::LinkedHashSet::•<core::String>();
+    #t2.{core::Set::add}{Invariant}("hello"){(core::String) → core::bool};
   } =>#t2);
-  core::print(#C18);
+  core::print(#C16);
 }
 
 constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-  #C4 = core::_Override {}
-  #C5 = 42
-  #C6 = "hello"
-  #C7 = "world"
-  #C8 = <core::String*>[#C6, #C7]
-  #C9 = "!"
-  #C10 = <core::String*>[#C6, #C7, #C9]
-  #C11 = self::CustomIterable {}
-  #C12 = <core::String*>{#C6, #C7}
-  #C13 = <core::String*>{#C6, #C7, #C9}
-  #C14 = <core::String*, core::String*>{#C6:#C7)
-  #C15 = "bye!"
-  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
-  #C17 = self::CustomMap {}
-  #C18 = <core::String*>{#C6}
+  #C1 = core::_Override {}
+  #C2 = null
+  #C3 = 42
+  #C4 = "hello"
+  #C5 = "world"
+  #C6 = <core::String*>[#C4, #C5]
+  #C7 = "!"
+  #C8 = <core::String*>[#C4, #C5, #C7]
+  #C9 = self::CustomIterable {}
+  #C10 = <core::String*>{#C4, #C5}
+  #C11 = <core::String*>{#C4, #C5, #C7}
+  #C12 = <core::String*, core::String*>{#C4:#C5)
+  #C13 = "bye!"
+  #C14 = <core::String*, core::String*>{#C4:#C5, #C7:#C13)
+  #C15 = self::CustomMap {}
+  #C16 = <core::String*>{#C4}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index bc85ecb..d73794e 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -42,253 +42,162 @@
 
 import "dart:collection";
 
-class ConstIterable extends col::IterableBase<core::int*> /*hasConstConstructor*/  {
-  const constructor •() → self::ConstIterable*
+class ConstIterable extends col::IterableBase<core::int> /*hasConstConstructor*/  {
+  const constructor •() → self::ConstIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::int*>*
+  get iterator() → core::Iterator<core::int>
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable}) → core::List<core::int*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::int*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class WithEquals extends core::Object /*hasConstConstructor*/  {
-  final field core::int* i;
-  const constructor •(core::int* i) → self::WithEquals*
+  final field core::int i;
+  const constructor •(core::int i) → self::WithEquals
     : self::WithEquals::i = i, super core::Object::•()
     ;
-  operator ==(core::Object* o) → core::bool*
+  operator ==(core::Object o) → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class CustomIterable extends col::IterableBase<core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomIterable*
+class CustomIterable extends col::IterableBase<core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::String*>*
+  get iterator() → core::Iterator<core::String>
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable}) → core::List<core::String*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::String*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class CustomMap extends core::Object implements core::Map<core::String*, core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomMap*
+class CustomMap extends core::Object implements core::Map<core::String, core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomMap
     : super core::Object::•()
     ;
   @core::override
-  get entries() → core::Iterable<core::MapEntry<core::String*, core::String*>*>*
+  get entries() → core::Iterable<core::MapEntry<core::String, core::String>>
     ;
   @core::override
-  operator [](core::Object* key) → core::String*
+  operator [](core::Object? key) → core::String
     ;
   @core::override
-  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
+  operator []=(covariant-by-class core::String key, covariant-by-class core::String value) → void
     ;
   @core::override
-  method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
+  method cast<RK extends core::Object? = dynamic, RV extends core::Object? = dynamic>() → core::Map<self::CustomMap::cast::RK%, self::CustomMap::cast::RV%>
     ;
   @core::override
   method clear() → void
     ;
   @core::override
-  method containsKey(core::Object* key) → core::bool*
+  method containsKey(core::Object? key) → core::bool
     ;
   @core::override
-  method containsValue(core::Object* value) → core::bool*
+  method containsValue(core::Object? value) → core::bool
     ;
   @core::override
-  get isEmpty() → core::bool*
+  get isEmpty() → core::bool
     ;
   @core::override
-  get isNotEmpty() → core::bool*
+  get isNotEmpty() → core::bool
     ;
   @core::override
-  get keys() → core::Iterable<core::String*>*
+  get keys() → core::Iterable<core::String>
     ;
   @core::override
-  get length() → core::int*
+  get length() → core::int
     ;
   @core::override
-  method remove(core::Object* key) → core::String*
+  method remove(core::Object? key) → core::String
     ;
   @core::override
-  get values() → core::Iterable<core::String*>*
+  get values() → core::Iterable<core::String>
     ;
   @core::override
-  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
+  method addAll(covariant-by-class core::Map<core::String, core::String> other) → void
     ;
   @core::override
-  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String, core::String>> newEntries) → void
     ;
   @core::override
-  method forEach((core::String*, core::String*) →* void f) → void
+  method forEach((core::String, core::String) → void f) → void
     ;
   @core::override
-  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
+  method putIfAbsent(covariant-by-class core::String key, covariant-by-class () → core::String ifAbsent) → core::String
     ;
   @core::override
-  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
+  method updateAll(covariant-by-class (core::String, core::String) → core::String update) → void
     ;
   @core::override
-  method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
+  method removeWhere((core::String, core::String) → core::bool predicate) → void
     ;
-  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent}) → core::String*
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent}) → core::String
     ;
-  method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
+  method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* fortyTwo = 42;
-static const field dynamic fortyTwoAsDynamic = (self::fortyTwo as dynamic){dynamic}.*(2){dynamic}.~/(2);
-static const field core::List<core::String*>* nullList = null;
-static const field core::List<core::String*>* foo = const <core::String*>["hello", "world"];
-static const field core::List<core::String*>* bar = self::foo + const <core::String*>["!"];
-static field core::List<core::String*>* barAsVar;
-static const field core::List<core::String*>* barWithNullSpread = self::foo + self::nullList;
-static const field core::List<core::String*>* barWithIntSpread = self::foo + const <core::String*>[invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::int fortyTwo = 42;
+static const field dynamic fortyTwoAsDynamic = (self::fortyTwo as{ForNonNullableByDefault} dynamic){dynamic}.*(2){dynamic}.~/(2);
+static const field core::List<core::String>? nullList = null;
+static const field core::List<core::String> foo = const <core::String>["hello", "world"];
+static const field core::List<core::String> bar = self::foo + const <core::String>["!"];
+static field core::List<core::String> barAsVar;
+static const field core::List<core::String> barWithNullSpread = self::foo + let final core::Iterable<core::String>? #t1 = self::nullList in #t1 == null ?{core::Iterable<core::String>} const <core::String>[] : #t1{core::Iterable<core::String>};
+static const field core::List<core::String> barWithIntSpread = self::foo + const <core::String>[invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
                                                   ^"];
-static const field core::List<core::String*>* barWithIntDynamicSpread = self::foo + self::fortyTwoAsDynamic as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-static const field core::List<core::String*>* barWithMapSpread = self::foo + const <core::String*>[invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithIntDynamicSpread = self::foo + self::fortyTwoAsDynamic as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>;
+static const field core::List<core::String> barWithMapSpread = self::foo + const <core::String>[invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
 const List<String> barWithMapSpread = [...foo, ...quux];
                                                   ^"];
-static const field core::List<core::String*>* barWithCustomIterableSpread1 = self::bar + const self::CustomIterable::•();
-static const field core::List<core::String*>* barWithCustomIterableSpread2 = self::bar + const self::CustomIterable::•();
-static const field self::CustomIterable* customIterable = const self::CustomIterable::•();
-static const field core::List<core::String*>* barWithCustomIterableSpread3 = self::bar + self::customIterable;
-static const field core::List<core::String*>* listConcat = const <core::String*>["Hello"].{core::List::+}(const <core::String*>["World"]){(core::List<core::String*>*) →* core::List<core::String*>*};
-static const field core::Set<core::String*>* nullSet = null;
-static const field core::Set<core::String*>* baz = const <core::String*>{"hello", "world"};
-static const field core::Set<core::String*>* qux = self::baz + const <core::String*>{"!"};
-static const field core::Set<core::String*>* quxWithNullSpread = self::baz + self::nullSet;
-static const field core::Set<core::String*>* quxWithIntSpread = self::baz + const <core::String*>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::List<core::String> barWithCustomIterableSpread1 = self::bar + const self::CustomIterable::•();
+static const field core::List<core::String> barWithCustomIterableSpread2 = self::bar + const self::CustomIterable::•();
+static const field self::CustomIterable customIterable = const self::CustomIterable::•();
+static const field core::List<core::String> barWithCustomIterableSpread3 = self::bar + self::customIterable;
+static const field core::List<core::String> listConcat = const <core::String>["Hello"].{core::List::+}(const <core::String>["World"]){(core::List<core::String>) → core::List<core::String>};
+static const field core::Set<core::String>? nullSet = null;
+static const field core::Set<core::String> baz = const <core::String>{"hello", "world"};
+static const field core::Set<core::String> qux = self::baz + const <core::String>{"!"};
+static const field core::Set<core::String> quxWithNullSpread = self::baz + let final core::Iterable<core::String>? #t2 = self::nullSet in #t2 == null ?{core::Iterable<core::String>} const <core::String>{} : #t2{core::Iterable<core::String>};
+static const field core::Set<core::String> quxWithIntSpread = self::baz + const <core::String>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
                                                  ^"};
-static const field core::Set<core::String*>* quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Set<core::String> quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Set<String> quxWithMapSpread = {...baz, ...quux};
                                      ^";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = self::baz + const self::CustomIterable::•();
-static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = self::baz + const self::CustomIterable::•();
-static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = self::baz + const <core::String*>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+static const field core::Set<core::String> quxWithCustomIterableSpread1 = self::baz + const self::CustomIterable::•();
+static const field core::Set<core::String> quxWithCustomIterableSpread2 = self::baz + const self::CustomIterable::•();
+static const field core::Set<core::String> quxWithCustomIterableSpread3 = self::baz + const <core::String>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
-                                                          ^" in self::customIterable as{TypeError} core::String*};
-static const field core::Set<dynamic>* setWithNonPrimitiveEquals = const <dynamic>{const self::WithEquals::•(42)};
-static const field core::Set<dynamic>* setWithDuplicates = const <dynamic>{42, 42};
-static const field core::Map<core::String*, core::String*>* nullMap = null;
-static const field core::Map<core::String*, core::String*>* quux = const <core::String*, core::String*>{"hello": "world"};
-static const field core::Map<core::String*, core::String*>* quuz = self::quux + const <core::String*, core::String*>{"!": "bye!"};
-static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = self::quux + self::nullMap;
-static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = self::quux + const <core::String*, core::String*>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                          ^" in self::customIterable as{TypeError,ForNonNullableByDefault} core::String};
+static const field core::Set<dynamic> setWithNonPrimitiveEquals = const <dynamic>{const self::WithEquals::•(42)};
+static const field core::Set<dynamic> setWithDuplicates = const <dynamic>{42, 42};
+static const field core::Map<core::String, core::String>? nullMap = null;
+static const field core::Map<core::String, core::String> quux = const <core::String, core::String>{"hello": "world"};
+static const field core::Map<core::String, core::String> quuz = self::quux + const <core::String, core::String>{"!": "bye!"};
+static const field core::Map<core::String, core::String> quuzWithNullSpread = self::quux + let final core::Map<core::String, core::String>? #t3 = self::nullMap in #t3 == null ?{core::Map<core::String, core::String>} const <core::String, core::String>{} : #t3{core::Map<core::String, core::String>};
+static const field core::Map<core::String, core::String> quuzWithIntSpread = self::quux + const <core::String, core::String>{invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
                                                            ^": null};
-static const field core::Map<core::String*, core::String*>* quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
                                               ^";
-static const field core::Map<core::String*, core::String*>* mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> mapWithSetSpread = {...baz};
                                              ^";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = const self::CustomMap::•();
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = const self::CustomMap::•();
-static const field core::Map<core::String*, core::String*>* customMap = const self::CustomMap::•();
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = self::customMap;
-static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = const <dynamic, core::int*>{const self::WithEquals::•(42): 42};
-static const field core::Map<core::int*, core::int*>* mapWithDuplicates = const <core::int*, core::int*>{42: 42, 42: 42};
-static get fooAsGetter() → core::List<core::String*>*
+static const field core::Map<core::String, core::String> mapWithCustomMap1 = const self::CustomMap::•();
+static const field core::Map<core::String, core::String> mapWithCustomMap2 = const self::CustomMap::•();
+static const field core::Map<core::String, core::String> customMap = const self::CustomMap::•();
+static const field core::Map<core::String, core::String> mapWithCustomMap3 = self::customMap;
+static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = const <dynamic, core::int>{const self::WithEquals::•(42): 42};
+static const field core::Map<core::int, core::int> mapWithDuplicates = const <core::int, core::int>{42: 42, 42: 42};
+static get fooAsGetter() → core::List<core::String>
   ;
-static get barAsGetter() → core::List<core::String*>*
+static get barAsGetter() → core::List<core::String>
   ;
-static get bazAsGetter() → core::Set<core::String*>*
+static get bazAsGetter() → core::Set<core::String>
   ;
-static get quxAsGetter() → core::Set<core::String*>*
+static get quxAsGetter() → core::Set<core::String>
   ;
-static get quuxAsGetter() → core::Map<core::String*, core::String*>*
+static get quuxAsGetter() → core::Map<core::String, core::String>
   ;
-static get quuzAsGetter() → core::Map<core::String*, core::String*>*
+static get quuzAsGetter() → core::Map<core::String, core::String>
   ;
 static method main() → dynamic
   ;
@@ -317,8 +226,7 @@
 Evaluated: DynamicInvocation @ org-dartlang-testcase:///const_collections.dart:14:63 -> IntConstant(42)
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:17:26 -> ListConstant(const <String*>["hello", "world"])
 Evaluated: ListConcatenation @ org-dartlang-testcase:///const_collections.dart:19:26 -> ListConstant(const <String*>["hello", "world", "!"])
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:22:44 -> ListConstant(const <String*>["hello", "world"])
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:22:52 -> NullConstant(null)
+Evaluated: ListConcatenation @ org-dartlang-testcase:///const_collections.dart:22:40 -> ListConstant(const <String*>["hello", "world"])
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:23:43 -> ListConstant(const <String*>["hello", "world"])
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:24:50 -> ListConstant(const <String*>["hello", "world"])
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:24:58 -> IntConstant(42)
@@ -334,8 +242,7 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///const_collections.dart:33:45 -> ListConstant(const <String*>["World"])
 Evaluated: SetLiteral @ org-dartlang-testcase:///const_collections.dart:36:25 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: SetConcatenation @ org-dartlang-testcase:///const_collections.dart:38:25 -> SetConstant(const <String*>{"hello", "world", "!"})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:40:43 -> SetConstant(const <String*>{"hello", "world"})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:40:51 -> NullConstant(null)
+Evaluated: SetConcatenation @ org-dartlang-testcase:///const_collections.dart:40:39 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:41:42 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:44:6 -> SetConstant(const <String*>{"hello", "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:45:12 -> InstanceConstant(const CustomIterable{})
@@ -345,12 +252,11 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:49:55 -> InstanceConstant(const WithEquals{WithEquals.i: 42})
 Evaluated: MapLiteral @ org-dartlang-testcase:///const_collections.dart:53:34 -> MapConstant(const <String*, String*>{"hello": "world"})
 Evaluated: MapConcatenation @ org-dartlang-testcase:///const_collections.dart:55:27 -> MapConstant(const <String*, String*>{"hello": "world", "!": "bye!"})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:57:52 -> MapConstant(const <String*, String*>{"hello": "world"})
-Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:57:61 -> NullConstant(null)
+Evaluated: MapConcatenation @ org-dartlang-testcase:///const_collections.dart:57:27 -> MapConstant(const <String*, String*>{"hello": "world"})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:58:51 -> MapConstant(const <String*, String*>{"hello": "world"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:61:57 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:62:51 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:63:45 -> InstanceConstant(const CustomMap{})
 Evaluated: StaticGet @ org-dartlang-testcase:///const_collections.dart:64:51 -> InstanceConstant(const CustomMap{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///const_collections.dart:66:9 -> InstanceConstant(const WithEquals{WithEquals.i: 42})
-Extra constant evaluation: evaluated: 87, effectively constant: 58
+Extra constant evaluation: evaluated: 81, effectively constant: 55
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
index d5c4674..905ec6e 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,16 +36,6 @@
 // const Map<String, String> mapWithSetSpread = {...baz};
 //                                              ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:40: Error: Constant evaluation error:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                        ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:52: Context: Null value during constant evaluation.
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                                                    ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:22:20: Context: While analyzing:
-// const List<String> barWithNullSpread = [...foo, ...nullList];
-//                    ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:24:46: Error: Constant evaluation error:
 // const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
 //                                              ^
@@ -97,16 +87,6 @@
 // const List<String> listConcat = ["Hello"] + ["World"];
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:39: Error: Constant evaluation error:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                       ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:51: Context: Null value during constant evaluation.
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                                                   ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:40:19: Context: While analyzing:
-// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
-//                   ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:43:50: Error: Constant evaluation error:
 // const Set<String> quxWithCustomIterableSpread1 = {
 //                                                  ^
@@ -148,16 +128,6 @@
 // const Set<dynamic> setWithDuplicates = {42, 42};
 //                    ^
 //
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Error: Constant evaluation error:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:61: Context: Null value during constant evaluation.
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                                                             ^
-// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Context: While analyzing:
-// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
-//                           ^
-//
 // pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Error: Constant evaluation error:
 // const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
 //                           ^
@@ -215,291 +185,198 @@
 
 import "dart:collection";
 
-class ConstIterable extends col::IterableBase<core::int*> /*hasConstConstructor*/  {
-  const constructor •() → self::ConstIterable*
+class ConstIterable extends col::IterableBase<core::int> /*hasConstConstructor*/  {
+  const constructor •() → self::ConstIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::int*>*
-    return core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<core::int*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::int*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::int*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::int>
+    return core::_GrowableList::•<core::int>(0).{core::Iterable::iterator}{core::Iterator<core::int>};
 }
 class WithEquals extends core::Object /*hasConstConstructor*/  {
-  final field core::int* i;
-  const constructor •(core::int* i) → self::WithEquals*
+  final field core::int i;
+  const constructor •(core::int i) → self::WithEquals
     : self::WithEquals::i = i, super core::Object::•()
     ;
-  operator ==(core::Object* o) → core::bool* {
-    return o is self::WithEquals* && o{self::WithEquals*}.{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
+  operator ==(core::Object o) → core::bool {
+    return o is{ForNonNullableByDefault} self::WithEquals && o{self::WithEquals}.{self::WithEquals::i}{core::int} =={core::num::==}{(core::Object) → core::bool} this.{self::WithEquals::i}{core::int};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class CustomIterable extends col::IterableBase<core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomIterable*
+class CustomIterable extends col::IterableBase<core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomIterable
     : super col::IterableBase::•()
     ;
-  get iterator() → core::Iterator<core::String*>*
-    return core::_GrowableList::•<core::String*>(0).{core::Iterable::iterator}{core::Iterator<core::String*>*};
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::String*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::String*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get iterator() → core::Iterator<core::String>
+    return core::_GrowableList::•<core::String>(0).{core::Iterable::iterator}{core::Iterator<core::String>};
 }
-class CustomMap extends core::Object implements core::Map<core::String*, core::String*> /*hasConstConstructor*/  {
-  const constructor •() → self::CustomMap*
+class CustomMap extends core::Object implements core::Map<core::String, core::String> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomMap
     : super core::Object::•()
     ;
-  @#C4
-  get entries() → core::Iterable<core::MapEntry<core::String*, core::String*>*>*
-    return core::_GrowableList::•<core::MapEntry<core::String*, core::String*>*>(0);
-  @#C4
-  operator [](core::Object* key) → core::String*
+  @#C1
+  get entries() → core::Iterable<core::MapEntry<core::String, core::String>>
+    return core::_GrowableList::•<core::MapEntry<core::String, core::String>>(0);
+  @#C1
+  operator [](core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
+  @#C1
+  operator []=(covariant-by-class core::String key, covariant-by-class core::String value) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
+  @#C1
+  method cast<RK extends core::Object? = dynamic, RV extends core::Object? = dynamic>() → core::Map<self::CustomMap::cast::RK%, self::CustomMap::cast::RV%>
     return throw new core::UnimplementedError::•();
-  @#C4
+  @#C1
   method clear() → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsKey(core::Object* key) → core::bool*
+  @#C1
+  method containsKey(core::Object? key) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  method containsValue(core::Object* value) → core::bool*
+  @#C1
+  method containsValue(core::Object? value) → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isEmpty() → core::bool*
+  @#C1
+  get isEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get isNotEmpty() → core::bool*
+  @#C1
+  get isNotEmpty() → core::bool
     return throw new core::UnimplementedError::•();
-  @#C4
-  get keys() → core::Iterable<core::String*>*
+  @#C1
+  get keys() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  get length() → core::int*
+  @#C1
+  get length() → core::int
     return throw new core::UnimplementedError::•();
-  @#C4
-  method remove(core::Object* key) → core::String*
+  @#C1
+  method remove(core::Object? key) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  get values() → core::Iterable<core::String*>*
+  @#C1
+  get values() → core::Iterable<core::String>
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
+  @#C1
+  method addAll(covariant-by-class core::Map<core::String, core::String> other) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  @#C1
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String, core::String>> newEntries) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method forEach((core::String*, core::String*) →* void f) → void
+  @#C1
+  method forEach((core::String, core::String) → void f) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
+  @#C1
+  method putIfAbsent(covariant-by-class core::String key, covariant-by-class () → core::String ifAbsent) → core::String
     return throw new core::UnimplementedError::•();
-  @#C4
-  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
+  @#C1
+  method updateAll(covariant-by-class (core::String, core::String) → core::String update) → void
     return throw new core::UnimplementedError::•();
-  @#C4
-  method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
+  @#C1
+  method removeWhere((core::String, core::String) → core::bool predicate) → void
     return throw new core::UnimplementedError::•();
-  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
+  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = #C2}) → core::String
     return throw new core::UnimplementedError::•();
-  method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
+  method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
     return throw new core::UnimplementedError::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* fortyTwo = #C5;
-static const field dynamic fortyTwoAsDynamic = #C5;
-static const field core::List<core::String*>* nullList = #C3;
-static const field core::List<core::String*>* foo = #C8;
-static const field core::List<core::String*>* bar = #C10;
-static field core::List<core::String*>* barAsVar = block {
-  final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
-  #t1.{core::List::add}{Invariant}("!"){(core::String*) →* void};
+static const field core::int fortyTwo = #C3;
+static const field dynamic fortyTwoAsDynamic = #C3;
+static const field core::List<core::String>? nullList = #C2;
+static const field core::List<core::String> foo = #C6;
+static const field core::List<core::String> bar = #C8;
+static field core::List<core::String> barAsVar = block {
+  final core::List<core::String> #t1 = core::List::of<core::String>(#C6);
+  #t1.{core::List::add}{Invariant}("!"){(core::String) → void};
 } =>#t1;
-static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithNullSpread = #C6;
+static const field core::List<core::String> barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 const List<String> barWithIntSpread = [...foo, ...fortyTwo];
                                                   ^";
-static const field core::List<core::String*>* barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
+static const field core::List<core::String> barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
  - 'Iterable' is from 'dart:core'.";
-static const field core::List<core::String*>* barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+static const field core::List<core::String> barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
 const List<String> barWithMapSpread = [...foo, ...quux];
                                                   ^";
-static const field core::List<core::String*>* barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field self::CustomIterable* customIterable = #C11;
-static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
-static const field core::Set<core::String*>* nullSet = #C3;
-static const field core::Set<core::String*>* baz = #C12;
-static const field core::Set<core::String*>* qux = #C13;
-static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::List<core::String> barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field self::CustomIterable customIterable = #C9;
+static const field core::List<core::String> barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String> listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
+static const field core::Set<core::String>? nullSet = #C2;
+static const field core::Set<core::String> baz = #C10;
+static const field core::Set<core::String> qux = #C11;
+static const field core::Set<core::String> quxWithNullSpread = #C10;
+static const field core::Set<core::String> quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
                                                  ^";
-static const field core::Set<core::String*>* quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Set<core::String> quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Set<String> quxWithMapSpread = {...baz, ...quux};
                                      ^";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
-static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+static const field core::Set<core::String> quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String> quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
 const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
                                                           ^";
-static const field core::Set<dynamic>* setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
-static const field core::Map<core::String*, core::String*>* nullMap = #C3;
-static const field core::Map<core::String*, core::String*>* quux = #C14;
-static const field core::Map<core::String*, core::String*>* quuz = #C16;
-static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
-static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
+static const field core::Map<core::String, core::String>? nullMap = #C2;
+static const field core::Map<core::String, core::String> quux = #C12;
+static const field core::Map<core::String, core::String> quuz = #C14;
+static const field core::Map<core::String, core::String> quuzWithNullSpread = #C12;
+static const field core::Map<core::String, core::String> quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
                                                            ^";
-static const field core::Map<core::String*, core::String*>* quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
                                               ^";
-static const field core::Map<core::String*, core::String*>* mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+static const field core::Map<core::String, core::String> mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 const Map<String, String> mapWithSetSpread = {...baz};
                                              ^";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<core::String*, core::String*>* customMap = #C17;
-static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
-static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
+static const field core::Map<core::String, core::String> mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String, core::String> customMap = #C15;
+static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
-static const field core::Map<core::int*, core::int*>* mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
-static get fooAsGetter() → core::List<core::String*>*
+static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
+static get fooAsGetter() → core::List<core::String>
+  return #C6;
+static get barAsGetter() → core::List<core::String>
   return #C8;
-static get barAsGetter() → core::List<core::String*>*
+static get bazAsGetter() → core::Set<core::String>
   return #C10;
-static get bazAsGetter() → core::Set<core::String*>*
+static get quxAsGetter() → core::Set<core::String>
+  return #C11;
+static get quuxAsGetter() → core::Map<core::String, core::String>
   return #C12;
-static get quxAsGetter() → core::Set<core::String*>*
-  return #C13;
-static get quuxAsGetter() → core::Map<core::String*, core::String*>*
+static get quuzAsGetter() → core::Map<core::String, core::String>
   return #C14;
-static get quuzAsGetter() → core::Map<core::String*, core::String*>*
-  return #C16;
 static method main() → dynamic {
-  core::print(#C10);
-  core::print(#C13);
-  core::print(#C16);
+  core::print(#C8);
+  core::print(#C11);
+  core::print(#C14);
   core::print( block {
-    final core::Set<core::String*>* #t2 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
+    final core::Set<core::String> #t2 = new col::_CompactLinkedHashSet::•<core::String>();
+    #t2.{core::Set::add}{Invariant}("hello"){(core::String) → core::bool};
   } =>#t2);
-  core::print(#C18);
+  core::print(#C16);
 }
 
 constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-  #C4 = core::_Override {}
-  #C5 = 42
-  #C6 = "hello"
-  #C7 = "world"
-  #C8 = <core::String*>[#C6, #C7]
-  #C9 = "!"
-  #C10 = <core::String*>[#C6, #C7, #C9]
-  #C11 = self::CustomIterable {}
-  #C12 = <core::String*>{#C6, #C7}
-  #C13 = <core::String*>{#C6, #C7, #C9}
-  #C14 = <core::String*, core::String*>{#C6:#C7)
-  #C15 = "bye!"
-  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
-  #C17 = self::CustomMap {}
-  #C18 = <core::String*>{#C6}
+  #C1 = core::_Override {}
+  #C2 = null
+  #C3 = 42
+  #C4 = "hello"
+  #C5 = "world"
+  #C6 = <core::String*>[#C4, #C5]
+  #C7 = "!"
+  #C8 = <core::String*>[#C4, #C5, #C7]
+  #C9 = self::CustomIterable {}
+  #C10 = <core::String*>{#C4, #C5}
+  #C11 = <core::String*>{#C4, #C5, #C7}
+  #C12 = <core::String*, core::String*>{#C4:#C5)
+  #C13 = "bye!"
+  #C14 = <core::String*, core::String*>{#C4:#C5, #C7:#C13)
+  #C15 = self::CustomMap {}
+  #C16 = <core::String*>{#C4}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart
index 4da77ce..952eff9 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import "const_constructor_coverage_lib1.dart";
 import "const_constructor_coverage_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline.expect
index c0374d8..a7b8a8a 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "const_constructor_coverage_lib1.dart";
 import "const_constructor_coverage_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline_modelled.expect
index c0374d8..a7b8a8a 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "const_constructor_coverage_lib1.dart";
 import "const_constructor_coverage_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
index 75eedd4..a3db761 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -6,15 +6,15 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
-static const field con::Foo* foo1 = #C4;
-static const field con::Foo* foo2 = #C4;
-static const field con::Foo* foo3 = #C4;
-static const field con::Foo* foo4 = #C4;
+static const field con::Foo foo1 = #C4;
+static const field con::Foo foo2 = #C4;
+static const field con::Foo foo3 = #C4;
+static const field con::Foo foo4 = #C4;
 static method main() → dynamic {
   core::print(#C4);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 import "const_constructor_coverage_lib2.dart" as con2;
@@ -22,61 +22,41 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con::Foo*
+  final field con::Bar bar;
+  const constructor •() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named1() → con::Foo*
+  const constructor named1() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named2() → con::Foo*
+  const constructor named2() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named3() → con::Foo*
+  const constructor named3() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field con2::Baz* baz;
-  const constructor •() → con::Bar*
+  final field con2::Baz baz;
+  const constructor •() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named1() → con::Bar*
+  const constructor named1() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named2() → con::Bar*
+  const constructor named2() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named3() → con::Bar*
+  const constructor named3() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+  const constructor named4(core::int i) → con::Bar
+    : con::Bar::baz = i.{core::num::>}(0){(core::num) → core::bool} ?{con2::Baz} #C2 : #C2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con::Foo* foo = #C4;
+static const field con::Foo foo = #C4;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con2;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -84,42 +64,32 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 
 class Baz extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con2::Baz*
+  final field con::Bar? bar;
+  const constructor •() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named1() → con2::Baz*
+  const constructor named1() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named2() → con2::Baz*
+  const constructor named2() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named3() → con2::Baz*
+  const constructor named3() → con2::Baz
     : con2::Baz::bar = #C3, super core::Object::•()
     ;
-  const constructor named4() → con2::Baz*
+  const constructor named4() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named5() → con2::Baz*
+  const constructor named5() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named6() → con2::Baz*
+  const constructor named6() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con2::Baz* baz = #C2;
-static const field con::Foo* foo = #C4;
-static const field con::Bar* bar = #C3;
+static const field con2::Baz baz = #C2;
+static const field con::Foo foo = #C4;
+static const field con::Bar bar = #C3;
 
 constants  {
   #C1 = null
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect
index 75eedd4..a3db761 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -6,15 +6,15 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
-static const field con::Foo* foo1 = #C4;
-static const field con::Foo* foo2 = #C4;
-static const field con::Foo* foo3 = #C4;
-static const field con::Foo* foo4 = #C4;
+static const field con::Foo foo1 = #C4;
+static const field con::Foo foo2 = #C4;
+static const field con::Foo foo3 = #C4;
+static const field con::Foo foo4 = #C4;
 static method main() → dynamic {
   core::print(#C4);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 import "const_constructor_coverage_lib2.dart" as con2;
@@ -22,61 +22,41 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con::Foo*
+  final field con::Bar bar;
+  const constructor •() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named1() → con::Foo*
+  const constructor named1() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named2() → con::Foo*
+  const constructor named2() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named3() → con::Foo*
+  const constructor named3() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field con2::Baz* baz;
-  const constructor •() → con::Bar*
+  final field con2::Baz baz;
+  const constructor •() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named1() → con::Bar*
+  const constructor named1() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named2() → con::Bar*
+  const constructor named2() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named3() → con::Bar*
+  const constructor named3() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+  const constructor named4(core::int i) → con::Bar
+    : con::Bar::baz = i.{core::num::>}(0){(core::num) → core::bool} ?{con2::Baz} #C2 : #C2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con::Foo* foo = #C4;
+static const field con::Foo foo = #C4;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con2;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -84,42 +64,32 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 
 class Baz extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con2::Baz*
+  final field con::Bar? bar;
+  const constructor •() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named1() → con2::Baz*
+  const constructor named1() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named2() → con2::Baz*
+  const constructor named2() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named3() → con2::Baz*
+  const constructor named3() → con2::Baz
     : con2::Baz::bar = #C3, super core::Object::•()
     ;
-  const constructor named4() → con2::Baz*
+  const constructor named4() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named5() → con2::Baz*
+  const constructor named5() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named6() → con2::Baz*
+  const constructor named6() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con2::Baz* baz = #C2;
-static const field con::Foo* foo = #C4;
-static const field con::Bar* bar = #C3;
+static const field con2::Baz baz = #C2;
+static const field con::Foo foo = #C4;
+static const field con::Bar bar = #C3;
 
 constants  {
   #C1 = null
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
index eabea4f..1454b44 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "const_constructor_coverage_lib1.dart" as con;
 
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
-static const field con::Foo* foo1 = const con::Foo::•();
-static const field con::Foo* foo2 = const con::Foo::named1();
-static const field con::Foo* foo3 = const con::Foo::named2();
-static const field con::Foo* foo4 = const con::Foo::named3();
+static const field con::Foo foo1 = const con::Foo::•();
+static const field con::Foo foo2 = const con::Foo::named1();
+static const field con::Foo foo3 = const con::Foo::named2();
+static const field con::Foo foo4 = const con::Foo::named3();
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 import "const_constructor_coverage_lib2.dart" as con2;
@@ -20,61 +20,41 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con::Foo*
+  final field con::Bar bar;
+  const constructor •() → con::Foo
     : con::Foo::bar = const con::Bar::•(), super core::Object::•()
     ;
-  const constructor named1() → con::Foo*
+  const constructor named1() → con::Foo
     : con::Foo::bar = const con::Bar::named1(), super core::Object::•()
     ;
-  const constructor named2() → con::Foo*
+  const constructor named2() → con::Foo
     : con::Foo::bar = const con::Bar::named1(), super core::Object::•()
     ;
-  const constructor named3() → con::Foo*
+  const constructor named3() → con::Foo
     : con::Foo::bar = const con::Bar::named1(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field con2::Baz* baz;
-  const constructor •() → con::Bar*
+  final field con2::Baz baz;
+  const constructor •() → con::Bar
     : con::Bar::baz = const con2::Baz::•(), super core::Object::•()
     ;
-  const constructor named1() → con::Bar*
+  const constructor named1() → con::Bar
     : con::Bar::baz = const con2::Baz::named1(), super core::Object::•()
     ;
-  const constructor named2() → con::Bar*
+  const constructor named2() → con::Bar
     : con::Bar::baz = const con2::Baz::named1(), super core::Object::•()
     ;
-  const constructor named3() → con::Bar*
+  const constructor named3() → con::Bar
     : con::Bar::baz = const con2::Baz::named1(), super core::Object::•()
     ;
-  const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} const con2::Baz::named5() : const con2::Baz::named6(), super core::Object::•()
+  const constructor named4(core::int i) → con::Bar
+    : con::Bar::baz = i.{core::num::>}(0){(core::num) → core::bool} ?{con2::Baz} const con2::Baz::named5() : const con2::Baz::named6(), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con::Foo* foo = const con::Foo::named3();
+static const field con::Foo foo = const con::Foo::named3();
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con2;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -82,42 +62,32 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 
 class Baz extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con2::Baz*
+  final field con::Bar? bar;
+  const constructor •() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named1() → con2::Baz*
+  const constructor named1() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named2() → con2::Baz*
+  const constructor named2() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named3() → con2::Baz*
+  const constructor named3() → con2::Baz
     : con2::Baz::bar = const con::Bar::named3(), super core::Object::•()
     ;
-  const constructor named4() → con2::Baz*
+  const constructor named4() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named5() → con2::Baz*
+  const constructor named5() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named6() → con2::Baz*
+  const constructor named6() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con2::Baz* baz = const con2::Baz::named4();
-static const field con::Foo* foo = const con::Foo::named2();
-static const field con::Bar* bar = const con::Bar::named2();
+static const field con2::Baz baz = const con2::Baz::named4();
+static const field con::Foo foo = const con::Foo::named2();
+static const field con::Bar bar = const con::Bar::named2();
 
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
index 75eedd4..a3db761 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -6,15 +6,15 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
-static const field con::Foo* foo1 = #C4;
-static const field con::Foo* foo2 = #C4;
-static const field con::Foo* foo3 = #C4;
-static const field con::Foo* foo4 = #C4;
+static const field con::Foo foo1 = #C4;
+static const field con::Foo foo2 = #C4;
+static const field con::Foo foo3 = #C4;
+static const field con::Foo foo4 = #C4;
 static method main() → dynamic {
   core::print(#C4);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 import "const_constructor_coverage_lib2.dart" as con2;
@@ -22,61 +22,41 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con::Foo*
+  final field con::Bar bar;
+  const constructor •() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named1() → con::Foo*
+  const constructor named1() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named2() → con::Foo*
+  const constructor named2() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  const constructor named3() → con::Foo*
+  const constructor named3() → con::Foo
     : con::Foo::bar = #C3, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field con2::Baz* baz;
-  const constructor •() → con::Bar*
+  final field con2::Baz baz;
+  const constructor •() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named1() → con::Bar*
+  const constructor named1() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named2() → con::Bar*
+  const constructor named2() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named3() → con::Bar*
+  const constructor named3() → con::Bar
     : con::Bar::baz = #C2, super core::Object::•()
     ;
-  const constructor named4(core::int* i) → con::Bar*
-    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+  const constructor named4(core::int i) → con::Bar
+    : con::Bar::baz = i.{core::num::>}(0){(core::num) → core::bool} ?{con2::Baz} #C2 : #C2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con::Foo* foo = #C4;
+static const field con::Foo foo = #C4;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con2;
 import "dart:core" as core;
 import "const_constructor_coverage_lib1.dart" as con;
@@ -84,42 +64,32 @@
 import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
 
 class Baz extends core::Object /*hasConstConstructor*/  {
-  final field con::Bar* bar;
-  const constructor •() → con2::Baz*
+  final field con::Bar? bar;
+  const constructor •() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named1() → con2::Baz*
+  const constructor named1() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named2() → con2::Baz*
+  const constructor named2() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named3() → con2::Baz*
+  const constructor named3() → con2::Baz
     : con2::Baz::bar = #C3, super core::Object::•()
     ;
-  const constructor named4() → con2::Baz*
+  const constructor named4() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named5() → con2::Baz*
+  const constructor named5() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  const constructor named6() → con2::Baz*
+  const constructor named6() → con2::Baz
     : con2::Baz::bar = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field con2::Baz* baz = #C2;
-static const field con::Foo* foo = #C4;
-static const field con::Bar* bar = #C3;
+static const field con2::Baz baz = #C2;
+static const field con::Foo foo = #C4;
+static const field con::Bar bar = #C3;
 
 constants  {
   #C1 = null
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib1.dart b/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib1.dart
index d5b94bc..e7d6647 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib1.dart
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib1.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import "const_constructor_coverage_lib2.dart";
 
 class Foo {
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib2.dart b/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib2.dart
index ee04592..9c50822 100644
--- a/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib2.dart
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage_lib2.dart
@@ -1,11 +1,11 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import "const_constructor_coverage_lib1.dart";
 
 class Baz {
-  final Bar bar;
+  final Bar? bar;
   const /*x*/ Baz() : bar = null;
   const /*x*/ Baz.named1() : bar = null;
   const Baz.named2() : bar = null;
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart b/pkg/front_end/testcases/general/constants/from_lib/main.dart
index f8f5ccf..b301857 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'main_lib.dart' as a;
 
 const map = <int, String>{
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline.expect
index d76ac83..ecc271e 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib.dart' as a;
 
 const map = <int, String>{
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline_modelled.expect
index a2a94e6..b817c1c 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib.dart' as a;
 
 const list = <int>[
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
index 6d5d48a..623a4c3 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.expect
@@ -1,21 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C6;
-static const field core::List<core::int*>* list = #C7;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C6;
+static const field core::List<core::int> list = #C7;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C8;
-static const field core::List<core::int*>* list = #C9;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C8;
+static const field core::List<core::int> list = #C9;
 
 constants  {
   #C1 = 1
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect
index 4af39e7..9d23b98 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C6;
-static const field core::List<core::int*>* list = #C7;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C6;
+static const field core::List<core::int> list = #C7;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
index f0edaba..3276612 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.outline.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "main_lib.dart" as mai;
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = mai::map;
-static const field core::Set<core::int*>* set = mai::set + mai::list;
-static const field core::List<core::int*>* list = mai::list + mai::set;
+static const field core::Map<core::int, core::String> map = mai::map;
+static const field core::Set<core::int> set = mai::set + mai::list;
+static const field core::List<core::int> list = mai::list + mai::set;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C5;
-static const field core::List<core::int*>* list = #C7;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C5;
+static const field core::List<core::int> list = #C7;
 
 constants  {
   #C1 = 1
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
index 6d5d48a..623a4c3 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.transformed.expect
@@ -1,21 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///main_lib.dart" as a;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C6;
-static const field core::List<core::int*>* list = #C7;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C6;
+static const field core::List<core::int> list = #C7;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static const field core::Map<core::int*, core::String*>* map = #C3;
-static const field core::Set<core::int*>* set = #C8;
-static const field core::List<core::int*>* list = #C9;
+static const field core::Map<core::int, core::String> map = #C3;
+static const field core::Set<core::int> set = #C8;
+static const field core::List<core::int> list = #C9;
 
 constants  {
   #C1 = 1
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main_lib.dart b/pkg/front_end/testcases/general/constants/from_lib/main_lib.dart
index 7529c60..eccfc0b 100644
--- a/pkg/front_end/testcases/general/constants/from_lib/main_lib.dart
+++ b/pkg/front_end/testcases/general/constants/from_lib/main_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const map = <int, String>{
   1: 'a',
 };
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect
index 86587cd..0954a14 100644
--- a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.expect
@@ -2,47 +2,65 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v2 = MyClass<int>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
 //   const v2 = MyClass<int>.constr;
 //                           ^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v4 = MyClass<String>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
 //   const v4 = MyClass<String>.constr;
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect
index 86587cd..0954a14 100644
--- a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect
@@ -2,47 +2,65 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v2 = MyClass<int>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
 //   const v2 = MyClass<int>.constr;
 //                           ^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v4 = MyClass<String>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
 //   const v4 = MyClass<String>.constr;
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect
index 86587cd..0954a14 100644
--- a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.transformed.expect
@@ -2,47 +2,65 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
 //   const v1 = MyClass<String>.new;
 //                              ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v2 = MyClass<int>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
 //   const v2 = MyClass<int>.constr;
 //                           ^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
 //   const v3 = MyClass<int>.new;
 //                           ^^^
 //
-// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const v4 = MyClass<String>.constr;
 //                     ^
+// pkg/front_end/testcases/general/constants/issue46925.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
 //   const v4 = MyClass<String>.constr;
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart b/pkg/front_end/testcases/general/constants/issue_43431.dart
index 45b056c..c333e70 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class Foo {
   const Foo({bool x: true});
   const x = Foo();
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline.expect
index 21dbcf2..3051321 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   const Foo({bool x: true});
   const x = Foo();
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline_modelled.expect
index 21dbcf2..3051321 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   const Foo({bool x: true});
   const x = Foo();
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
index 65e909f..30bfb3c 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant expression expected.
 // Try inserting 'const'.
 //   const x = Foo();
 //             ^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:6:9: Error: Constructor is marked 'const' so all fields must be final.
 //   const Foo({bool x: true});
 //         ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:9: Context: Field isn't final, but constructor is 'const'.
 //   const x = Foo();
 //         ^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant evaluation error:
 //   const x = Foo();
 //             ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Context: Constant expression depends on itself.
 //   const x = Foo();
 //             ^
 //
@@ -30,20 +30,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  field self::Foo* x = invalid-expression "Constant expression depends on itself.";
-  const constructor •({core::bool* x = #C1}) → self::Foo*
+  field self::Foo x = invalid-expression "Constant expression depends on itself.";
+  const constructor •({core::bool x = #C1}) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
@@ -54,4 +44,4 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_43431.dart:
-- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:6:9)
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect
index 65e909f..30bfb3c 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant expression expected.
 // Try inserting 'const'.
 //   const x = Foo();
 //             ^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:6:9: Error: Constructor is marked 'const' so all fields must be final.
 //   const Foo({bool x: true});
 //         ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:9: Context: Field isn't final, but constructor is 'const'.
 //   const x = Foo();
 //         ^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant evaluation error:
 //   const x = Foo();
 //             ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Context: Constant expression depends on itself.
 //   const x = Foo();
 //             ^
 //
@@ -30,20 +30,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  field self::Foo* x = invalid-expression "Constant expression depends on itself.";
-  const constructor •({core::bool* x = #C1}) → self::Foo*
+  field self::Foo x = invalid-expression "Constant expression depends on itself.";
+  const constructor •({core::bool x = #C1}) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
@@ -54,4 +44,4 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_43431.dart:
-- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:6:9)
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
index c1256e5..ab4f74e 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
@@ -11,20 +11,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  field self::Foo* x;
-  const constructor •({core::bool* x = true}) → self::Foo*
+  field self::Foo x;
+  const constructor •({core::bool x = true}) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
index 65e909f..30bfb3c 100644
--- a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.transformed.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:3: Error: Only static fields can be declared as const.
 // Try using 'final' instead of 'const', or adding the keyword 'static'.
 //   const x = Foo();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant expression expected.
 // Try inserting 'const'.
 //   const x = Foo();
 //             ^^^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:6:9: Error: Constructor is marked 'const' so all fields must be final.
 //   const Foo({bool x: true});
 //         ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:9: Context: Field isn't final, but constructor is 'const'.
 //   const x = Foo();
 //         ^
 //
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Error: Constant evaluation error:
 //   const x = Foo();
 //             ^
-// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/issue_43431.dart:7:13: Context: Constant expression depends on itself.
 //   const x = Foo();
 //             ^
 //
@@ -30,20 +30,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  field self::Foo* x = invalid-expression "Constant expression depends on itself.";
-  const constructor •({core::bool* x = #C1}) → self::Foo*
+  field self::Foo x = invalid-expression "Constant expression depends on itself.";
+  const constructor •({core::bool x = #C1}) → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
@@ -54,4 +44,4 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///issue_43431.dart:
-- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:6:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart b/pkg/front_end/testcases/general/constants/js_semantics/various.dart
index cb703e5..f2270ff 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const bool y = false;
 const bool z = !(y);
 
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline.expect
index 54ebf2f..4ca812c 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const bool y = false;
 const bool z = !(y);
 const maybeInt = z ? 42 : true;
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline_modelled.expect
index 87607b2..70b112b 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const String intStringConcat = "hello" "${intFortyTwo * intFortyTwo}";
 const bool isItDouble = maybeInt is double ? true : false;
 const bool isItDouble2 = actualInt is double ? true : false;
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.expect
index 0570489..dc34372 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.expect
@@ -1,41 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::bool* y = #C1;
-static const field core::bool* z = #C2;
-static const field core::Object* maybeInt = #C3;
-static const field core::bool* isItInt = #C2;
-static const field core::bool* isItDouble = #C2;
-static const field core::int* actualInt = #C3;
-static const field core::bool* isItInt2 = #C2;
-static const field core::bool* isItDouble2 = #C2;
-static const field core::Object* maybeDouble = #C3;
-static const field core::bool* isItInt3 = #C2;
-static const field core::bool* isItDouble3 = #C2;
-static const field core::double* actualDouble = #C3;
-static const field core::bool* isItInt4 = #C2;
-static const field core::bool* isItDouble4 = #C2;
-static const field core::Object* maybeDouble2 = #C4;
-static const field core::bool* isItInt5 = #C1;
-static const field core::bool* isItDouble5 = #C2;
-static const field core::double* actualDouble2 = #C4;
-static const field core::bool* isItInt6 = #C1;
-static const field core::bool* isItDouble7 = #C2;
-static const field core::bool* zeroPointZeroIdentical = #C2;
-static const field core::bool* zeroPointZeroIdenticalToZero = #C2;
-static const field core::bool* zeroIdenticalToZeroPointZero = #C2;
-static const field core::bool* nanIdentical = #C1;
-static const field core::bool* stringIdentical = #C2;
-static const field core::bool* string2Identical = #C1;
-static const field core::bool* zeroPointZeroEqual = #C2;
-static const field core::bool* zeroPointZeroEqualToZero = #C2;
-static const field core::bool* zeroEqualToZeroPointZero = #C2;
-static const field core::bool* nanEqual = #C1;
-static const field core::bool* stringEqual = #C2;
-static const field core::bool* string2Equal = #C1;
-static const field core::int* intFortyTwo = #C3;
-static const field core::String* intStringConcat = #C5;
+static const field core::bool y = #C1;
+static const field core::bool z = #C2;
+static const field core::Object maybeInt = #C3;
+static const field core::bool isItInt = #C2;
+static const field core::bool isItDouble = #C2;
+static const field core::int actualInt = #C3;
+static const field core::bool isItInt2 = #C2;
+static const field core::bool isItDouble2 = #C2;
+static const field core::Object maybeDouble = #C3;
+static const field core::bool isItInt3 = #C2;
+static const field core::bool isItDouble3 = #C2;
+static const field core::double actualDouble = #C3;
+static const field core::bool isItInt4 = #C2;
+static const field core::bool isItDouble4 = #C2;
+static const field core::Object maybeDouble2 = #C4;
+static const field core::bool isItInt5 = #C1;
+static const field core::bool isItDouble5 = #C2;
+static const field core::double actualDouble2 = #C4;
+static const field core::bool isItInt6 = #C1;
+static const field core::bool isItDouble7 = #C2;
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C2;
+static const field core::bool zeroIdenticalToZeroPointZero = #C2;
+static const field core::bool nanIdentical = #C1;
+static const field core::bool stringIdentical = #C2;
+static const field core::bool string2Identical = #C1;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field core::bool stringEqual = #C2;
+static const field core::bool string2Equal = #C1;
+static const field core::int intFortyTwo = #C3;
+static const field core::String intStringConcat = #C5;
 
 constants  {
   #C1 = false
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect
index 0570489..dc34372 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect
@@ -1,41 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::bool* y = #C1;
-static const field core::bool* z = #C2;
-static const field core::Object* maybeInt = #C3;
-static const field core::bool* isItInt = #C2;
-static const field core::bool* isItDouble = #C2;
-static const field core::int* actualInt = #C3;
-static const field core::bool* isItInt2 = #C2;
-static const field core::bool* isItDouble2 = #C2;
-static const field core::Object* maybeDouble = #C3;
-static const field core::bool* isItInt3 = #C2;
-static const field core::bool* isItDouble3 = #C2;
-static const field core::double* actualDouble = #C3;
-static const field core::bool* isItInt4 = #C2;
-static const field core::bool* isItDouble4 = #C2;
-static const field core::Object* maybeDouble2 = #C4;
-static const field core::bool* isItInt5 = #C1;
-static const field core::bool* isItDouble5 = #C2;
-static const field core::double* actualDouble2 = #C4;
-static const field core::bool* isItInt6 = #C1;
-static const field core::bool* isItDouble7 = #C2;
-static const field core::bool* zeroPointZeroIdentical = #C2;
-static const field core::bool* zeroPointZeroIdenticalToZero = #C2;
-static const field core::bool* zeroIdenticalToZeroPointZero = #C2;
-static const field core::bool* nanIdentical = #C1;
-static const field core::bool* stringIdentical = #C2;
-static const field core::bool* string2Identical = #C1;
-static const field core::bool* zeroPointZeroEqual = #C2;
-static const field core::bool* zeroPointZeroEqualToZero = #C2;
-static const field core::bool* zeroEqualToZeroPointZero = #C2;
-static const field core::bool* nanEqual = #C1;
-static const field core::bool* stringEqual = #C2;
-static const field core::bool* string2Equal = #C1;
-static const field core::int* intFortyTwo = #C3;
-static const field core::String* intStringConcat = #C5;
+static const field core::bool y = #C1;
+static const field core::bool z = #C2;
+static const field core::Object maybeInt = #C3;
+static const field core::bool isItInt = #C2;
+static const field core::bool isItDouble = #C2;
+static const field core::int actualInt = #C3;
+static const field core::bool isItInt2 = #C2;
+static const field core::bool isItDouble2 = #C2;
+static const field core::Object maybeDouble = #C3;
+static const field core::bool isItInt3 = #C2;
+static const field core::bool isItDouble3 = #C2;
+static const field core::double actualDouble = #C3;
+static const field core::bool isItInt4 = #C2;
+static const field core::bool isItDouble4 = #C2;
+static const field core::Object maybeDouble2 = #C4;
+static const field core::bool isItInt5 = #C1;
+static const field core::bool isItDouble5 = #C2;
+static const field core::double actualDouble2 = #C4;
+static const field core::bool isItInt6 = #C1;
+static const field core::bool isItDouble7 = #C2;
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C2;
+static const field core::bool zeroIdenticalToZeroPointZero = #C2;
+static const field core::bool nanIdentical = #C1;
+static const field core::bool stringIdentical = #C2;
+static const field core::bool string2Identical = #C1;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field core::bool stringEqual = #C2;
+static const field core::bool string2Equal = #C1;
+static const field core::int intFortyTwo = #C3;
+static const field core::String intStringConcat = #C5;
 
 constants  {
   #C1 = false
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.outline.expect
index f015e56..4e7468c 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.outline.expect
@@ -1,41 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::bool* y = false;
-static const field core::bool* z = !self::y;
-static const field core::Object* maybeInt = self::z ?{core::Object*} 42 : true;
-static const field core::bool* isItInt = self::maybeInt is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble = self::maybeInt is core::double* ?{core::bool*} true : false;
-static const field core::int* actualInt = 42;
-static const field core::bool* isItInt2 = self::actualInt is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble2 = self::actualInt is core::double* ?{core::bool*} true : false;
-static const field core::Object* maybeDouble = self::z ?{core::Object*} 42.0 : true;
-static const field core::bool* isItInt3 = self::maybeDouble is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble3 = self::maybeDouble is core::double* ?{core::bool*} true : false;
-static const field core::double* actualDouble = 42.0;
-static const field core::bool* isItInt4 = self::actualDouble is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble4 = self::actualDouble is core::double* ?{core::bool*} true : false;
-static const field core::Object* maybeDouble2 = self::z ?{core::Object*} 42.42 : true;
-static const field core::bool* isItInt5 = self::maybeDouble2 is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble5 = self::maybeDouble2 is core::double* ?{core::bool*} true : false;
-static const field core::double* actualDouble2 = 42.42;
-static const field core::bool* isItInt6 = self::actualDouble2 is core::int* ?{core::bool*} true : false;
-static const field core::bool* isItDouble7 = self::actualDouble2 is core::double* ?{core::bool*} true : false;
-static const field core::bool* zeroPointZeroIdentical = core::identical(0.0, 0.0);
-static const field core::bool* zeroPointZeroIdenticalToZero = core::identical(0.0, 0);
-static const field core::bool* zeroIdenticalToZeroPointZero = core::identical(0, 0.0);
-static const field core::bool* nanIdentical = core::identical(0.{core::num::/}(0){(core::num*) →* core::double*}, 0.{core::num::/}(0){(core::num*) →* core::double*});
-static const field core::bool* stringIdentical = core::identical("hello", "hello");
-static const field core::bool* string2Identical = core::identical("hello", "world");
-static const field core::bool* zeroPointZeroEqual = 0.0 =={core::num::==}{(core::Object*) →* core::bool*} 0.0;
-static const field core::bool* zeroPointZeroEqualToZero = 0.0 =={core::num::==}{(core::Object*) →* core::bool*} 0;
-static const field core::bool* zeroEqualToZeroPointZero = 0 =={core::num::==}{(core::Object*) →* core::bool*} 0.0;
-static const field core::bool* nanEqual = 0.{core::num::/}(0){(core::num*) →* core::double*} =={core::num::==}{(core::Object*) →* core::bool*} 0.{core::num::/}(0){(core::num*) →* core::double*};
-static const field core::bool* stringEqual = "hello" =={core::String::==}{(core::Object*) →* core::bool*} "hello";
-static const field core::bool* string2Equal = "hello" =={core::String::==}{(core::Object*) →* core::bool*} "world";
-static const field core::int* intFortyTwo = 42;
-static const field core::String* intStringConcat = "hello${self::intFortyTwo.{core::num::*}(self::intFortyTwo){(core::num*) →* core::int*}}";
+static const field core::bool y = false;
+static const field core::bool z = !self::y;
+static const field core::Object maybeInt = self::z ?{core::Object} 42 : true;
+static const field core::bool isItInt = self::maybeInt is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble = self::maybeInt is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::int actualInt = 42;
+static const field core::bool isItInt2 = self::actualInt is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble2 = self::actualInt is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::Object maybeDouble = self::z ?{core::Object} 42.0 : true;
+static const field core::bool isItInt3 = self::maybeDouble is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble3 = self::maybeDouble is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::double actualDouble = 42.0;
+static const field core::bool isItInt4 = self::actualDouble is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble4 = self::actualDouble is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::Object maybeDouble2 = self::z ?{core::Object} 42.42 : true;
+static const field core::bool isItInt5 = self::maybeDouble2 is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble5 = self::maybeDouble2 is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::double actualDouble2 = 42.42;
+static const field core::bool isItInt6 = self::actualDouble2 is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::bool isItDouble7 = self::actualDouble2 is{ForNonNullableByDefault} core::double ?{core::bool} true : false;
+static const field core::bool zeroPointZeroIdentical = core::identical(0.0, 0.0);
+static const field core::bool zeroPointZeroIdenticalToZero = core::identical(0.0, 0);
+static const field core::bool zeroIdenticalToZeroPointZero = core::identical(0, 0.0);
+static const field core::bool nanIdentical = core::identical(0.{core::num::/}(0){(core::num) → core::double}, 0.{core::num::/}(0){(core::num) → core::double});
+static const field core::bool stringIdentical = core::identical("hello", "hello");
+static const field core::bool string2Identical = core::identical("hello", "world");
+static const field core::bool zeroPointZeroEqual = 0.0 =={core::num::==}{(core::Object) → core::bool} 0.0;
+static const field core::bool zeroPointZeroEqualToZero = 0.0 =={core::num::==}{(core::Object) → core::bool} 0;
+static const field core::bool zeroEqualToZeroPointZero = 0 =={core::num::==}{(core::Object) → core::bool} 0.0;
+static const field core::bool nanEqual = 0.{core::num::/}(0){(core::num) → core::double} =={core::num::==}{(core::Object) → core::bool} 0.{core::num::/}(0){(core::num) → core::double};
+static const field core::bool stringEqual = "hello" =={core::String::==}{(core::Object) → core::bool} "hello";
+static const field core::bool string2Equal = "hello" =={core::String::==}{(core::Object) → core::bool} "world";
+static const field core::int intFortyTwo = 42;
+static const field core::String intStringConcat = "hello${self::intFortyTwo.{core::num::*}(self::intFortyTwo){(core::num) → core::int}}";
 
 
 Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.transformed.expect
index 0570489..dc34372 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.transformed.expect
@@ -1,41 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::bool* y = #C1;
-static const field core::bool* z = #C2;
-static const field core::Object* maybeInt = #C3;
-static const field core::bool* isItInt = #C2;
-static const field core::bool* isItDouble = #C2;
-static const field core::int* actualInt = #C3;
-static const field core::bool* isItInt2 = #C2;
-static const field core::bool* isItDouble2 = #C2;
-static const field core::Object* maybeDouble = #C3;
-static const field core::bool* isItInt3 = #C2;
-static const field core::bool* isItDouble3 = #C2;
-static const field core::double* actualDouble = #C3;
-static const field core::bool* isItInt4 = #C2;
-static const field core::bool* isItDouble4 = #C2;
-static const field core::Object* maybeDouble2 = #C4;
-static const field core::bool* isItInt5 = #C1;
-static const field core::bool* isItDouble5 = #C2;
-static const field core::double* actualDouble2 = #C4;
-static const field core::bool* isItInt6 = #C1;
-static const field core::bool* isItDouble7 = #C2;
-static const field core::bool* zeroPointZeroIdentical = #C2;
-static const field core::bool* zeroPointZeroIdenticalToZero = #C2;
-static const field core::bool* zeroIdenticalToZeroPointZero = #C2;
-static const field core::bool* nanIdentical = #C1;
-static const field core::bool* stringIdentical = #C2;
-static const field core::bool* string2Identical = #C1;
-static const field core::bool* zeroPointZeroEqual = #C2;
-static const field core::bool* zeroPointZeroEqualToZero = #C2;
-static const field core::bool* zeroEqualToZeroPointZero = #C2;
-static const field core::bool* nanEqual = #C1;
-static const field core::bool* stringEqual = #C2;
-static const field core::bool* string2Equal = #C1;
-static const field core::int* intFortyTwo = #C3;
-static const field core::String* intStringConcat = #C5;
+static const field core::bool y = #C1;
+static const field core::bool z = #C2;
+static const field core::Object maybeInt = #C3;
+static const field core::bool isItInt = #C2;
+static const field core::bool isItDouble = #C2;
+static const field core::int actualInt = #C3;
+static const field core::bool isItInt2 = #C2;
+static const field core::bool isItDouble2 = #C2;
+static const field core::Object maybeDouble = #C3;
+static const field core::bool isItInt3 = #C2;
+static const field core::bool isItDouble3 = #C2;
+static const field core::double actualDouble = #C3;
+static const field core::bool isItInt4 = #C2;
+static const field core::bool isItDouble4 = #C2;
+static const field core::Object maybeDouble2 = #C4;
+static const field core::bool isItInt5 = #C1;
+static const field core::bool isItDouble5 = #C2;
+static const field core::double actualDouble2 = #C4;
+static const field core::bool isItInt6 = #C1;
+static const field core::bool isItDouble7 = #C2;
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C2;
+static const field core::bool zeroIdenticalToZeroPointZero = #C2;
+static const field core::bool nanIdentical = #C1;
+static const field core::bool stringIdentical = #C2;
+static const field core::bool string2Identical = #C1;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field core::bool stringEqual = #C2;
+static const field core::bool string2Equal = #C1;
+static const field core::int intFortyTwo = #C3;
+static const field core::String intStringConcat = #C5;
 
 constants  {
   #C1 = false
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart b/pkg/front_end/testcases/general/constants/no_experiments/various.dart
index 8ddb0d4..df79a2d 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const Symbol tripleShiftSymbol = const Symbol(">>>");
 
 main() {}
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline.expect
index 39c800d..3cb83df 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const Symbol tripleShiftSymbol = const Symbol(">>>");
 main() {}
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline_modelled.expect
index 39c800d..3cb83df 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 const Symbol tripleShiftSymbol = const Symbol(">>>");
 main() {}
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.expect
index 376dfb4..dfa09ae 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static const field core::Symbol* tripleShiftSymbol = #C1;
+static const field core::Symbol tripleShiftSymbol = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect
index 376dfb4..dfa09ae 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static const field core::Symbol* tripleShiftSymbol = #C1;
+static const field core::Symbol tripleShiftSymbol = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.outline.expect
index 9194ec0..310349f 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static const field core::Symbol* tripleShiftSymbol = const _in::Symbol::•(">>>");
+static const field core::Symbol tripleShiftSymbol = const _in::Symbol::•(">>>");
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.transformed.expect
index 376dfb4..dfa09ae 100644
--- a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static const field core::Symbol* tripleShiftSymbol = #C1;
+static const field core::Symbol tripleShiftSymbol = #C1;
 static method main() → dynamic {}
 
 constants  {
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/rudimentary_test_01.dart b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart
index cae9472..9eb86b4 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const int foo = 42 * 42;
 const String bar =
     "hello" " " "${String.fromEnvironment("baz", defaultValue: "world")}" "!";
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline.expect
index 8e1cc1fe..c369a44 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int foo = 42 * 42;
 const String bar =
     "hello" " " "${String.fromEnvironment("baz", defaultValue: "world")}" "!";
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline_modelled.expect
index c74e867..fc42499 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const String bar =
     "hello" " " "${String.fromEnvironment("baz", defaultValue: "world")}" "!";
 const String bar2 = "hello2" " 2" + bar;
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.expect
index f3b74df..520bfe6 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* foo = #C1;
-static const field core::String* bar = #C2;
-static const field core::String* bar2 = #C3;
-static const field core::bool* baz = #C4;
-static const field core::Symbol* blaSymbol = #C5;
+static const field core::int foo = #C1;
+static const field core::String bar = #C2;
+static const field core::String bar2 = #C3;
+static const field core::bool baz = #C4;
+static const field core::Symbol blaSymbol = #C5;
 static method main() → dynamic {
   self::_x();
   #C6;
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect
index f3b74df..520bfe6 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* foo = #C1;
-static const field core::String* bar = #C2;
-static const field core::String* bar2 = #C3;
-static const field core::bool* baz = #C4;
-static const field core::Symbol* blaSymbol = #C5;
+static const field core::int foo = #C1;
+static const field core::String bar = #C2;
+static const field core::String bar2 = #C3;
+static const field core::bool baz = #C4;
+static const field core::Symbol blaSymbol = #C5;
 static method main() → dynamic {
   self::_x();
   #C6;
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
index 10ad97d..c7009f2 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.outline.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* foo = 42.{core::num::*}(42){(core::num*) →* core::int*};
-static const field core::String* bar = "hello ${const core::String::fromEnvironment("baz", defaultValue: "world")}!";
-static const field core::String* bar2 = "hello2 2".{core::String::+}(self::bar){(core::String*) →* core::String*};
-static const field core::bool* baz = true && true && (false || true) && 42 =={core::num::==}{(core::Object*) →* core::bool*} 21.{core::num::*}(4){(core::num*) →* core::int*}.{core::num::/}(2){(core::num*) →* core::double*};
-static const field core::Symbol* blaSymbol = #_x;
+static const field core::int foo = 42.{core::num::*}(42){(core::num) → core::int};
+static const field core::String bar = "hello ${const core::String::fromEnvironment("baz", defaultValue: "world")}!";
+static const field core::String bar2 = "hello2 2".{core::String::+}(self::bar){(core::String) → core::String};
+static const field core::bool baz = true && true && (false || true) && 42 =={core::num::==}{(core::Object) → core::bool} 21.{core::num::*}(4){(core::num) → core::int}.{core::num::/}(2){(core::num) → core::double};
+static const field core::Symbol blaSymbol = #_x;
 static method main() → dynamic
   ;
 static method _x() → void
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.transformed.expect
index f3b74df..520bfe6 100644
--- a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* foo = #C1;
-static const field core::String* bar = #C2;
-static const field core::String* bar2 = #C3;
-static const field core::bool* baz = #C4;
-static const field core::Symbol* blaSymbol = #C5;
+static const field core::int foo = #C1;
+static const field core::String bar = #C2;
+static const field core::String bar2 = #C3;
+static const field core::bool baz = #C4;
+static const field core::Symbol blaSymbol = #C5;
 static method main() → dynamic {
   self::_x();
   #C6;
diff --git a/pkg/front_end/testcases/general/constants/various.dart b/pkg/front_end/testcases/general/constants/various.dart
index 927fb6e..a1ce27a 100644
--- a/pkg/front_end/testcases/general/constants/various.dart
+++ b/pkg/front_end/testcases/general/constants/various.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 // Environment does not contain "bar".
 const bool barFromEnv = const bool.fromEnvironment("bar");
 const bool hasBarEnv = const bool.hasEnvironment("bar");
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
index 9fa5cbe..dcff246 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.expect
@@ -2,314 +2,314 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/various.dart:162:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/constants/various.dart:164:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const ClassWithNonEmptyConstConstructor() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:78:14: Error: Not a constant expression.
 // const x1 = --x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:79:14: Error: Not a constant expression.
 // const x2 = ++x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Error: Not a constant expression.
 // const x3 = x--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Error: Not a constant expression.
 // const x4 = x++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 // const y1 = --y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 // const y2 = ++y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 // const y3 = y--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 // const y4 = y++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 // const function_const = () {};
 //                        ^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Can't access 'this' in a field initializer to read 'y'.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   @AbstractClass()
 //    ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //   @AbstractClassWithConstructor()
 //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 // const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
 //                                       ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 //   const ExtendsFoo2();
 //         ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Not a constant expression.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Error: Not a constant expression.
 //   final z2 = x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //     const AbstractClassWithConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const AbstractClassWithConstructor();
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const ClassWithNonEmptyConstConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:116:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 // class ExtendsFoo1 extends Foo {
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Not a constant expression.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Not a constant expression.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Error: Constant evaluation error:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:12:12: Context: While analyzing:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:11:49: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:13:49: Error: Constant evaluation error:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                                 ^
-// pkg/front_end/testcases/general/constants/various.dart:11:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:13:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                ^
-// pkg/front_end/testcases/general/constants/various.dart:11:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:13:12: Context: While analyzing:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Error: Constant evaluation error:
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:12: Context: While analyzing:
-// const bool andOnNull = barFromEnvOrNull && true;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Error: Constant evaluation error:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:12: Context: While analyzing:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Error: Constant evaluation error:
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
 // pkg/front_end/testcases/general/constants/various.dart:18:12: Context: While analyzing:
+// const bool andOnNull = barFromEnvOrNull && true;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Error: Constant evaluation error:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Error: Constant evaluation error:
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:12: Context: While analyzing:
 // const bool orOnNull = barFromEnvOrNull || true;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Error: Constant evaluation error:
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
-// const bool orOnNull2 = barFromEnvOrNull || false;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Error: Constant evaluation error:
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
 // pkg/front_end/testcases/general/constants/various.dart:21:12: Context: While analyzing:
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Error: Constant evaluation error:
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:12: Context: While analyzing:
 // const bool orOnNull4 = false || barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Error: Constant evaluation error:
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Context: Null value during constant evaluation.
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:28:14: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:30:14: Context: While analyzing:
 // const String nullFromEnvString =
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Error: Constant evaluation error:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Context: Null value during constant evaluation.
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:38:12: Context: While analyzing:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Error: Constant evaluation error:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Context: Null value during constant evaluation.
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:45:11: Context: While analyzing:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Error: Constant evaluation error:
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:7: Context: While analyzing:
-// const binaryOnDouble = willBeDouble << 2;
-//       ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Error: Constant evaluation error:
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
 // pkg/front_end/testcases/general/constants/various.dart:66:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
 // const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Error: Constant evaluation error:
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:70:7: Context: While analyzing:
 // const binaryOnIntWithString = willBeInt << "hello";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Error: Constant evaluation error:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:74:7: Context: While analyzing:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Error: Constant evaluation error:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:75:7: Context: While analyzing:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:80:13: Error: Constant evaluation error:
 // const x3 = x--;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x3 = x--;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:78:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:80:7: Context: While analyzing:
 // const x3 = x--;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:81:13: Error: Constant evaluation error:
 // const x4 = x++;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x4 = x++;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:79:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:81:7: Context: While analyzing:
 // const x4 = x++;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Error: Constant evaluation error:
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various.dart'.
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:131:12: Context: While analyzing:
 // const bool foosEqual = foo1 == foo2;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Error: Constant evaluation error:
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Context: Constant expression depends on itself.
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:137:11: Context: While analyzing:
 // const int circularity1 = circularity2;
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:148:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:150:11: Error: Constant evaluation error:
 //     const ConstClassWithFailingAssertWithEmptyMessage();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:144:64: Context: This assertion failed with message: (empty)
+// pkg/front_end/testcases/general/constants/various.dart:146:64: Context: This assertion failed with message: (empty)
 //   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
 //                                                                ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:185:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:187:11: Error: Constant evaluation error:
 //     const ConstClassWithFinalFields2();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Context: The invocation of 'x' is not allowed in a constant expression.
 //   final z2 = x;
 //              ^
 //
@@ -391,7 +391,7 @@
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
   const constructor •() → self::ExtendsFoo2*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^"
     ;
@@ -531,27 +531,27 @@
 static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* y = #C12;
-static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
-static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 const y3 = y--;
            ^";
-static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 const y4 = y++;
            ^";
-static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const AbstractClassWithConstructor();
           ^";
-static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
                                       ^^^^^^^^^^^";
-static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^";
 static const field self::Foo* foo1 = #C14;
@@ -567,7 +567,7 @@
 static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
-static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var = () → Null {};
@@ -575,7 +575,7 @@
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments1 = #C19;
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments2 = #C20;
 static const field core::bool* classWithTypeArgumentsIdentical = #C1;
-static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const ClassWithNonEmptyConstConstructor();
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -636,9 +636,9 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///various.dart:
-- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:121:9)
-- Foo. (from org-dartlang-testcase:///various.dart:109:9)
+- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:123:9)
+- Foo. (from org-dartlang-testcase:///various.dart:111:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:144:9)
-- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:151:9)
-- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:177:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:146:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:153:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:179:9)
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect
index 9fa5cbe..dcff246 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect
@@ -2,314 +2,314 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/various.dart:162:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/constants/various.dart:164:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const ClassWithNonEmptyConstConstructor() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:78:14: Error: Not a constant expression.
 // const x1 = --x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:79:14: Error: Not a constant expression.
 // const x2 = ++x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Error: Not a constant expression.
 // const x3 = x--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Error: Not a constant expression.
 // const x4 = x++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 // const y1 = --y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 // const y2 = ++y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 // const y3 = y--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 // const y4 = y++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 // const function_const = () {};
 //                        ^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Can't access 'this' in a field initializer to read 'y'.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   @AbstractClass()
 //    ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //   @AbstractClassWithConstructor()
 //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 // const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
 //                                       ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 //   const ExtendsFoo2();
 //         ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Not a constant expression.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Error: Not a constant expression.
 //   final z2 = x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //     const AbstractClassWithConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const AbstractClassWithConstructor();
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const ClassWithNonEmptyConstConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:116:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 // class ExtendsFoo1 extends Foo {
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Not a constant expression.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Not a constant expression.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Error: Constant evaluation error:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:12:12: Context: While analyzing:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:11:49: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:13:49: Error: Constant evaluation error:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                                 ^
-// pkg/front_end/testcases/general/constants/various.dart:11:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:13:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                ^
-// pkg/front_end/testcases/general/constants/various.dart:11:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:13:12: Context: While analyzing:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Error: Constant evaluation error:
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:12: Context: While analyzing:
-// const bool andOnNull = barFromEnvOrNull && true;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Error: Constant evaluation error:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:12: Context: While analyzing:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Error: Constant evaluation error:
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
 // pkg/front_end/testcases/general/constants/various.dart:18:12: Context: While analyzing:
+// const bool andOnNull = barFromEnvOrNull && true;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Error: Constant evaluation error:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Error: Constant evaluation error:
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:12: Context: While analyzing:
 // const bool orOnNull = barFromEnvOrNull || true;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Error: Constant evaluation error:
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
-// const bool orOnNull2 = barFromEnvOrNull || false;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Error: Constant evaluation error:
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
 // pkg/front_end/testcases/general/constants/various.dart:21:12: Context: While analyzing:
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Error: Constant evaluation error:
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:12: Context: While analyzing:
 // const bool orOnNull4 = false || barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Error: Constant evaluation error:
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Context: Null value during constant evaluation.
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:28:14: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:30:14: Context: While analyzing:
 // const String nullFromEnvString =
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Error: Constant evaluation error:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Context: Null value during constant evaluation.
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:38:12: Context: While analyzing:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Error: Constant evaluation error:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Context: Null value during constant evaluation.
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:45:11: Context: While analyzing:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Error: Constant evaluation error:
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:7: Context: While analyzing:
-// const binaryOnDouble = willBeDouble << 2;
-//       ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Error: Constant evaluation error:
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
 // pkg/front_end/testcases/general/constants/various.dart:66:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
 // const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Error: Constant evaluation error:
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:70:7: Context: While analyzing:
 // const binaryOnIntWithString = willBeInt << "hello";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Error: Constant evaluation error:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:74:7: Context: While analyzing:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Error: Constant evaluation error:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:75:7: Context: While analyzing:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:80:13: Error: Constant evaluation error:
 // const x3 = x--;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x3 = x--;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:78:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:80:7: Context: While analyzing:
 // const x3 = x--;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:81:13: Error: Constant evaluation error:
 // const x4 = x++;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x4 = x++;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:79:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:81:7: Context: While analyzing:
 // const x4 = x++;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Error: Constant evaluation error:
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various.dart'.
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:131:12: Context: While analyzing:
 // const bool foosEqual = foo1 == foo2;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Error: Constant evaluation error:
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Context: Constant expression depends on itself.
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:137:11: Context: While analyzing:
 // const int circularity1 = circularity2;
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:148:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:150:11: Error: Constant evaluation error:
 //     const ConstClassWithFailingAssertWithEmptyMessage();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:144:64: Context: This assertion failed with message: (empty)
+// pkg/front_end/testcases/general/constants/various.dart:146:64: Context: This assertion failed with message: (empty)
 //   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
 //                                                                ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:185:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:187:11: Error: Constant evaluation error:
 //     const ConstClassWithFinalFields2();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Context: The invocation of 'x' is not allowed in a constant expression.
 //   final z2 = x;
 //              ^
 //
@@ -391,7 +391,7 @@
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
   const constructor •() → self::ExtendsFoo2*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^"
     ;
@@ -531,27 +531,27 @@
 static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* y = #C12;
-static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
-static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 const y3 = y--;
            ^";
-static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 const y4 = y++;
            ^";
-static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const AbstractClassWithConstructor();
           ^";
-static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
                                       ^^^^^^^^^^^";
-static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^";
 static const field self::Foo* foo1 = #C14;
@@ -567,7 +567,7 @@
 static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
-static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var = () → Null {};
@@ -575,7 +575,7 @@
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments1 = #C19;
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments2 = #C20;
 static const field core::bool* classWithTypeArgumentsIdentical = #C1;
-static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const ClassWithNonEmptyConstConstructor();
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -636,9 +636,9 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///various.dart:
-- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:121:9)
-- Foo. (from org-dartlang-testcase:///various.dart:109:9)
+- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:123:9)
+- Foo. (from org-dartlang-testcase:///various.dart:111:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:144:9)
-- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:151:9)
-- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:177:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:146:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:153:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:179:9)
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
index 7b7e406..a12e1f8 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
@@ -2,83 +2,83 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/various.dart:162:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/constants/various.dart:164:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const ClassWithNonEmptyConstConstructor() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:78:14: Error: Not a constant expression.
 // const x1 = --x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:79:14: Error: Not a constant expression.
 // const x2 = ++x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Error: Not a constant expression.
 // const x3 = x--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Error: Not a constant expression.
 // const x4 = x++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 // const y1 = --y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 // const y2 = ++y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 // const y3 = y--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 // const y4 = y++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 // const function_const = () {};
 //                        ^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Can't access 'this' in a field initializer to read 'y'.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   @AbstractClass()
 //    ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //   @AbstractClassWithConstructor()
 //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 // const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
 //                                       ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 //   const ExtendsFoo2();
 //         ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Not a constant expression.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Error: Not a constant expression.
 //   final z2 = x;
 //              ^
 //
@@ -117,12 +117,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotAbstractClass extends core::Object {
-  @throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+  @throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   @AbstractClass()
    ^"
   field core::Object* foo;
-  @throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+  @throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   @AbstractClassWithConstructor()
    ^"
@@ -163,7 +163,7 @@
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
   const constructor •() → self::ExtendsFoo2*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^"
     ;
@@ -301,20 +301,20 @@
 static const field core::int* x3 = let final core::int* #t4 = self::x in let final core::int* #t5 = self::x = #t4.{core::num::-}(1){(core::num*) →* core::int*} in #t4;
 static const field core::int* x4 = let final core::int* #t6 = self::x in let final core::int* #t7 = self::x = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
 static const field core::int* y = 1;
-static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
-static const field core::int* y3 = let final core::int* #t8 = self::y in let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+static const field core::int* y3 = let final core::int* #t8 = self::y in let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 const y3 = y--;
            ^" in #t8;
-static const field core::int* y4 = let final core::int* #t10 = self::y in let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+static const field core::int* y4 = let final core::int* #t10 = self::y in let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 const y4 = y++;
            ^" in #t10;
 static field self::AbstractClassWithConstructor* abstractClassWithConstructor;
-static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
                                       ^^^^^^^^^^^";
@@ -331,7 +331,7 @@
 static const field core::int* circularity2 = self::circularity3;
 static const field core::int* circularity3 = self::circularity4;
 static const field core::int* circularity4 = self::circularity1;
-static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var;
@@ -369,88 +369,88 @@
 
 
 Extra constant evaluation status:
-Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:6:31 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:7:30 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:9:11 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:10:35 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:11:32 -> NullConstant(null)
-Evaluated: Let @ org-dartlang-testcase:///various.dart:12:51 -> BoolConstant(true)
-Evaluated: Let @ org-dartlang-testcase:///various.dart:13:52 -> BoolConstant(false)
-Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:14:46 -> BoolConstant(false)
-Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:15:46 -> BoolConstant(false)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:16:24 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:17:33 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:18:23 -> NullConstant(null)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:19:24 -> NullConstant(null)
-Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:20:29 -> BoolConstant(true)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:21:33 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:23:39 -> StringConstant("")
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:25:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:27:11 -> StringConstant("hello")
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:29:34 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:31:35 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:33:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:35:11 -> BoolConstant(true)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:36:57 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:38:33 -> IntConstant(0)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:40:11 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:42:11 -> IntConstant(42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:43:54 -> NullConstant(null)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:46:31 -> BoolConstant(false)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:47:30 -> BoolConstant(true)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:48:35 -> IntConstant(42)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:49:41 -> StringConstant("42")
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:53:35 -> BoolConstant(true)
-Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:54:36 -> BoolConstant(false)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:58:41 -> BoolConstant(true)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:59:45 -> BoolConstant(false)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:60:39 -> BoolConstant(true)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:61:41 -> BoolConstant(true)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:63:64 -> DoubleConstant(42.42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:64:24 -> DoubleConstant(42.42)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:65:61 -> IntConstant(42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:66:34 -> IntConstant(42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:66:47 -> DoubleConstant(42.42)
-Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:67:43 -> DoubleConstant(84.42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:68:31 -> IntConstant(42)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:70:39 -> StringConstant("hello")
-Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:71:49 -> StringConstant("hello world")
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:72:31 -> StringConstant("hello")
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:72:46 -> IntConstant(42)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:73:37 -> StringConstant("hello")
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:84:12 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///various.dart:84:12 -> IntConstant(1)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:85:12 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///various.dart:85:12 -> IntConstant(1)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:126:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:127:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:128:28 -> BoolConstant(true)
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:129:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
-Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:129:32 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:130:29 -> SymbolConstant(#Foo)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:131:34 -> SymbolConstant(#Foo=)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:132:40 -> SymbolConstant(#>>>)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:133:37 -> SymbolConstant(#I.Have.Dots)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:155:11 -> InstanceConstant(const ClassWithTypeArguments<int*, int*, int*>{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:157:11 -> InstanceConstant(const ClassWithTypeArguments<dynamic, dynamic, dynamic>{})
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:159:5 -> BoolConstant(false)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:187:32 -> BoolConstant(true)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:188:38 -> BoolConstant(false)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:189:38 -> BoolConstant(false)
-Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:190:22 -> BoolConstant(true)
-Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:192:32 -> BoolConstant(true)
-Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:193:38 -> BoolConstant(true)
-Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:194:36 -> BoolConstant(true)
-Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:195:24 -> BoolConstant(false)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:200:66 -> NullConstant(null)
-Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:203:39 -> NullConstant(null)
-Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:205:39 -> InstantiationConstant(id1<int*>)
-Evaluated: Not @ org-dartlang-testcase:///various.dart:208:20 -> BoolConstant(false)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:210:46 -> BoolConstant(true)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:211:38 -> BoolConstant(false)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:212:25 -> BoolConstant(true)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:213:40 -> BoolConstant(false)
-Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:214:25 -> NullConstant(null)
+Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:113:26 -> IntConstant(5)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:8:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:9:30 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:11:11 -> NullConstant(null)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:12:35 -> NullConstant(null)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:13:32 -> NullConstant(null)
+Evaluated: Let @ org-dartlang-testcase:///various.dart:14:51 -> BoolConstant(true)
+Evaluated: Let @ org-dartlang-testcase:///various.dart:15:52 -> BoolConstant(false)
+Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:16:46 -> BoolConstant(false)
+Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:17:46 -> BoolConstant(false)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:18:24 -> NullConstant(null)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:19:33 -> NullConstant(null)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:20:23 -> NullConstant(null)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:21:24 -> NullConstant(null)
+Evaluated: LogicalExpression @ org-dartlang-testcase:///various.dart:22:29 -> BoolConstant(true)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:23:33 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:25:39 -> StringConstant("")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:27:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:29:11 -> StringConstant("hello")
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:31:34 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:33:35 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:35:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:37:11 -> BoolConstant(true)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:38:57 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:40:33 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:42:11 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:44:11 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:45:54 -> NullConstant(null)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:48:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:49:30 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:50:35 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:51:41 -> StringConstant("42")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:55:35 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various.dart:56:36 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:60:41 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:61:45 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:62:39 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various.dart:63:41 -> BoolConstant(true)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:65:64 -> DoubleConstant(42.42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:66:24 -> DoubleConstant(42.42)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:67:61 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:68:34 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:68:47 -> DoubleConstant(42.42)
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:69:43 -> DoubleConstant(84.42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:70:31 -> IntConstant(42)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:72:39 -> StringConstant("hello")
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various.dart:73:49 -> StringConstant("hello world")
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:74:31 -> StringConstant("hello")
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:74:46 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:75:37 -> StringConstant("hello")
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:86:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///various.dart:86:12 -> IntConstant(1)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:87:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///various.dart:87:12 -> IntConstant(1)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:128:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:129:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:130:28 -> BoolConstant(true)
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:131:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: StaticGet @ org-dartlang-testcase:///various.dart:131:32 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:132:29 -> SymbolConstant(#Foo)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:133:34 -> SymbolConstant(#Foo=)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:134:40 -> SymbolConstant(#>>>)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:135:37 -> SymbolConstant(#I.Have.Dots)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:157:11 -> InstanceConstant(const ClassWithTypeArguments<int*, int*, int*>{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:159:11 -> InstanceConstant(const ClassWithTypeArguments<dynamic, dynamic, dynamic>{})
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:161:5 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:189:32 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:190:38 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:191:38 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:192:22 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:194:32 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:195:38 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:196:36 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:197:24 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:202:66 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:205:39 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:207:39 -> InstantiationConstant(id1<int*>)
+Evaluated: Not @ org-dartlang-testcase:///various.dart:210:20 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:212:46 -> BoolConstant(true)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:213:38 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:214:25 -> BoolConstant(true)
 Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:215:40 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:216:25 -> NullConstant(null)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:217:40 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 135, effectively constant: 84
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
index 37e4135..cc993aa 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.transformed.expect
@@ -2,314 +2,314 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/constants/various.dart:162:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/constants/various.dart:164:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const ClassWithNonEmptyConstConstructor() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:78:14: Error: Not a constant expression.
 // const x1 = --x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:79:14: Error: Not a constant expression.
 // const x2 = ++x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Error: Not a constant expression.
 // const x3 = x--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Error: Not a constant expression.
 // const x4 = x++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 // const y1 = --y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 // const y2 = ++y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 // const y3 = y--;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 // const y4 = y++;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 // const function_const = () {};
 //                        ^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Can't access 'this' in a field initializer to read 'y'.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   @AbstractClass()
 //    ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //   @AbstractClassWithConstructor()
 //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 // const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
 //                                       ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 //   const ExtendsFoo2();
 //         ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:182:14: Error: Not a constant expression.
 //   final z1 = y;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Error: Not a constant expression.
 //   final z2 = x;
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
 //     const AbstractClassWithConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const AbstractClassWithConstructor();
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //     const ClassWithNonEmptyConstConstructor();
 //           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/constants/various.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// pkg/front_end/testcases/general/constants/various.dart:116:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
 // class ExtendsFoo1 extends Foo {
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:101:4: Error: Not a constant expression.
 //   @AbstractClass()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:104:4: Error: Not a constant expression.
 //   @AbstractClassWithConstructor()
 //    ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Error: Constant evaluation error:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:12:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:10:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:12:12: Context: While analyzing:
 // const bool notBarFromEnvOrNull = !barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:11:49: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:13:49: Error: Constant evaluation error:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                                 ^
-// pkg/front_end/testcases/general/constants/various.dart:11:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// pkg/front_end/testcases/general/constants/various.dart:13:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //                                ^
-// pkg/front_end/testcases/general/constants/various.dart:11:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:13:12: Context: While analyzing:
 // const bool conditionalOnNull = barFromEnvOrNull ? true : false;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Error: Constant evaluation error:
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:18:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
 // const bool andOnNull = barFromEnvOrNull && true;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:16:12: Context: While analyzing:
-// const bool andOnNull = barFromEnvOrNull && true;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Error: Constant evaluation error:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:17:12: Context: While analyzing:
-// const bool andOnNull2 = true && barFromEnvOrNull;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Error: Constant evaluation error:
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
-// pkg/front_end/testcases/general/constants/various.dart:18:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
-// const bool orOnNull = barFromEnvOrNull || true;
-//                                        ^
 // pkg/front_end/testcases/general/constants/various.dart:18:12: Context: While analyzing:
+// const bool andOnNull = barFromEnvOrNull && true;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Error: Constant evaluation error:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Error: Constant evaluation error:
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:20:12: Context: While analyzing:
 // const bool orOnNull = barFromEnvOrNull || true;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Error: Constant evaluation error:
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:21:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
 // const bool orOnNull2 = barFromEnvOrNull || false;
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
-// const bool orOnNull2 = barFromEnvOrNull || false;
-//            ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Error: Constant evaluation error:
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
-// pkg/front_end/testcases/general/constants/various.dart:21:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
-// const bool orOnNull4 = false || barFromEnvOrNull;
-//                              ^
 // pkg/front_end/testcases/general/constants/various.dart:21:12: Context: While analyzing:
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Error: Constant evaluation error:
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:23:12: Context: While analyzing:
 // const bool orOnNull4 = false || barFromEnvOrNull;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Error: Constant evaluation error:
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:29:11: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:31:11: Context: Null value during constant evaluation.
 //     const String.fromEnvironment(barFromEnvOrNullString);
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:28:14: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:30:14: Context: While analyzing:
 // const String nullFromEnvString =
 //              ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Error: Constant evaluation error:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:36: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:38:36: Context: Null value during constant evaluation.
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //                                    ^
-// pkg/front_end/testcases/general/constants/various.dart:36:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:38:12: Context: While analyzing:
 // const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Error: Constant evaluation error:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:34: Context: Null value during constant evaluation.
+// pkg/front_end/testcases/general/constants/various.dart:45:34: Context: Null value during constant evaluation.
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:43:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:45:11: Context: While analyzing:
 // const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Error: Constant evaluation error:
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// pkg/front_end/testcases/general/constants/various.dart:66:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
 // const binaryOnDouble = willBeDouble << 2;
 //                                     ^
-// pkg/front_end/testcases/general/constants/various.dart:64:7: Context: While analyzing:
-// const binaryOnDouble = willBeDouble << 2;
-//       ^
-//
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Error: Constant evaluation error:
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
-// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
-//                                            ^
 // pkg/front_end/testcases/general/constants/various.dart:66:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
 // const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Error: Constant evaluation error:
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// pkg/front_end/testcases/general/constants/various.dart:70:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
 // const binaryOnIntWithString = willBeInt << "hello";
 //                                         ^
-// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:70:7: Context: While analyzing:
 // const binaryOnIntWithString = willBeInt << "hello";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Error: Constant evaluation error:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// pkg/front_end/testcases/general/constants/various.dart:74:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //                                            ^
-// pkg/front_end/testcases/general/constants/various.dart:72:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:74:7: Context: While analyzing:
 // const binaryOnStringWithInt = willBeString + willBeInt;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Error: Constant evaluation error:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:75:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
 // const binaryOnStringWithStringBad = willBeString - " world";
 //                                                  ^
-// pkg/front_end/testcases/general/constants/various.dart:73:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:75:7: Context: While analyzing:
 // const binaryOnStringWithStringBad = willBeString - " world";
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:78:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:80:13: Error: Constant evaluation error:
 // const x3 = x--;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:80:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x3 = x--;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:78:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:80:7: Context: While analyzing:
 // const x3 = x--;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:79:13: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:81:13: Error: Constant evaluation error:
 // const x4 = x++;
 //             ^
-// pkg/front_end/testcases/general/constants/various.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:81:12: Context: The invocation of 'x' is not allowed in a constant expression.
 // const x4 = x++;
 //            ^
-// pkg/front_end/testcases/general/constants/various.dart:79:7: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:81:7: Context: While analyzing:
 // const x4 = x++;
 //       ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Error: Constant evaluation error:
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+// pkg/front_end/testcases/general/constants/various.dart:131:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various.dart'.
 // const bool foosEqual = foo1 == foo2;
 //                             ^
-// pkg/front_end/testcases/general/constants/various.dart:129:12: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:131:12: Context: While analyzing:
 // const bool foosEqual = foo1 == foo2;
 //            ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Error: Constant evaluation error:
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:26: Context: Constant expression depends on itself.
+// pkg/front_end/testcases/general/constants/various.dart:137:26: Context: Constant expression depends on itself.
 // const int circularity1 = circularity2;
 //                          ^
-// pkg/front_end/testcases/general/constants/various.dart:135:11: Context: While analyzing:
+// pkg/front_end/testcases/general/constants/various.dart:137:11: Context: While analyzing:
 // const int circularity1 = circularity2;
 //           ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:148:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:150:11: Error: Constant evaluation error:
 //     const ConstClassWithFailingAssertWithEmptyMessage();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:144:64: Context: This assertion failed with message: (empty)
+// pkg/front_end/testcases/general/constants/various.dart:146:64: Context: This assertion failed with message: (empty)
 //   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
 //                                                                ^
 //
-// pkg/front_end/testcases/general/constants/various.dart:185:11: Error: Constant evaluation error:
+// pkg/front_end/testcases/general/constants/various.dart:187:11: Error: Constant evaluation error:
 //     const ConstClassWithFinalFields2();
 //           ^
-// pkg/front_end/testcases/general/constants/various.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+// pkg/front_end/testcases/general/constants/various.dart:183:14: Context: The invocation of 'x' is not allowed in a constant expression.
 //   final z2 = x;
 //              ^
 //
@@ -391,7 +391,7 @@
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
   const constructor •() → self::ExtendsFoo2*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^"
     ;
@@ -531,27 +531,27 @@
 static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
 static const field core::int* y = #C12;
-static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:14: Error: Setter not found: 'y'.
 const y1 = --y;
              ^";
-static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:14: Error: Setter not found: 'y'.
 const y2 = ++y;
              ^";
-static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:86:12: Error: Setter not found: 'y'.
 const y3 = y--;
            ^";
-static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:87:12: Error: Setter not found: 'y'.
 const y4 = y++;
            ^";
-static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:98:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const AbstractClassWithConstructor();
           ^";
-static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:120:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
 const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
                                       ^^^^^^^^^^^";
-static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:123:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
   const ExtendsFoo2();
         ^^^^^^^^^^^";
 static const field self::Foo* foo1 = #C14;
@@ -567,7 +567,7 @@
 static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
 static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
-static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:142:24: Error: Not a constant expression.
 const function_const = () {};
                        ^^";
 static field () →* Null function_var = () → Null {};
@@ -575,7 +575,7 @@
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments1 = #C19;
 static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments2 = #C20;
 static const field core::bool* classWithTypeArgumentsIdentical = #C1;
-static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:170:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
     const ClassWithNonEmptyConstConstructor();
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
@@ -634,15 +634,15 @@
 }
 
 Extra constant evaluation status:
-Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:111:26 -> IntConstant(5)
+Evaluated: InstanceGet @ org-dartlang-testcase:///various.dart:113:26 -> IntConstant(5)
 Extra constant evaluation: evaluated: 12, effectively constant: 1
 
 
 Constructor coverage from constants:
 org-dartlang-testcase:///various.dart:
-- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:121:9)
-- Foo. (from org-dartlang-testcase:///various.dart:109:9)
+- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:123:9)
+- Foo. (from org-dartlang-testcase:///various.dart:111:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
-- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:144:9)
-- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:151:9)
-- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:177:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:146:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:153:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:179:9)
diff --git a/pkg/front_end/testcases/general/constants/various2.dart b/pkg/front_end/testcases/general/constants/various2.dart
new file mode 100644
index 0000000..bd7c03e
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart
@@ -0,0 +1,220 @@
+// Copyright (c) 2020, 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.
+
+// Environment does not contain "bar".
+const bool barFromEnv = const bool.fromEnvironment("bar");
+const bool hasBarEnv = const bool.hasEnvironment("bar");
+const bool barFromEnvOrNull =
+const bool.fromEnvironment("bar", defaultValue: null);
+const bool notBarFromEnvOrNull = !barFromEnvOrNull;
+const bool conditionalOnNull = barFromEnvOrNull ? true : false;
+const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+const bool andOnFalse = nullAwareOnNullFalse && nullAwareOnNullTrue;
+const bool andOnFalse2 = nullAwareOnNullTrue && nullAwareOnNullFalse;
+const bool andOnNull = barFromEnvOrNull && true;
+const bool andOnNull2 = true && barFromEnvOrNull;
+const bool orOnNull = barFromEnvOrNull || true;
+const bool orOnNull2 = barFromEnvOrNull || false;
+const bool orOnNull3 = true || barFromEnvOrNull;
+const bool orOnNull4 = false || barFromEnvOrNull;
+
+const String barFromEnvString = const String.fromEnvironment("bar");
+const String barFromEnvOrNullString =
+const String.fromEnvironment("bar", defaultValue: null);
+const String barFromEnvOrActualString =
+const String.fromEnvironment("bar", defaultValue: "hello");
+const String nullFromEnvString =
+const String.fromEnvironment(barFromEnvOrNullString);
+
+const bool barFromEnvBool = const bool.fromEnvironment("bar");
+const bool barFromEnvOrNullBool =
+const bool.fromEnvironment("bar", defaultValue: null);
+const bool barFromEnvOrActualBool =
+const bool.fromEnvironment("bar", defaultValue: true);
+const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
+
+const int barFromEnvInt = const int.fromEnvironment("bar");
+const int barFromEnvOrNullInt =
+const int.fromEnvironment("bar", defaultValue: null);
+const int barFromEnvOrActualInt =
+const int.fromEnvironment("bar", defaultValue: 42);
+const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
+
+// Environment does contain "baz" (value '42', i.e. neither true nor false).
+const bool bazFromEnv = const bool.fromEnvironment("baz");
+const bool hasBazEnv = const bool.hasEnvironment("baz");
+const int bazFromEnvAsInt = const int.fromEnvironment("baz");
+const String bazFromEnvAsString = const String.fromEnvironment("baz");
+
+// Environment does contain "bazTrue" (value 'true') and
+// "bazFalse" (value 'false').
+const bool bazTrueFromEnv = const bool.fromEnvironment("bazTrue");
+const bool bazFalseFromEnv = const bool.fromEnvironment("bazFalse");
+
+const bool trueBool = true;
+const bool falseBool = false;
+const bool binaryOnBoolCaret = trueBool ^ falseBool;
+const bool binaryOnBoolAmpersand = trueBool & falseBool;
+const bool binaryOnBoolBar = trueBool | falseBool;
+const bool binaryOnBoolBar2 = falseBool | trueBool;
+
+const dynamic willBeDouble = const bool.fromEnvironment("foo") ? 42 : 42.42;
+const binaryOnDouble = willBeDouble << 2;
+const dynamic willBeInt = const bool.fromEnvironment("foo") ? 42.42 : 42;
+const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+const binaryOnIntWithDoubleOK = willBeInt + willBeDouble;
+const binaryOnIntWithString = willBeInt << "hello";
+const dynamic willBeString =
+const bool.fromEnvironment("foo") ? 42.42 : "hello";
+const binaryOnStringWithStringOK = willBeString + " world";
+const binaryOnStringWithInt = willBeString + willBeInt;
+const binaryOnStringWithStringBad = willBeString - " world";
+
+var x = 1;
+const x1 = --x;
+const x2 = ++x;
+const x3 = x--;
+const x4 = x++;
+
+const y = 1;
+const y1 = --y;
+const y2 = ++y;
+const y3 = y--;
+const y4 = y++;
+
+abstract class AbstractClass {}
+
+abstract class AbstractClassWithConstructor {
+  const AbstractClassWithConstructor();
+
+  int foo();
+}
+
+AbstractClassWithConstructor abstractClassWithConstructor =
+const AbstractClassWithConstructor();
+
+class NotAbstractClass {
+  @AbstractClass()
+  Object foo;
+
+  @AbstractClassWithConstructor()
+  Object bar;
+}
+
+class Foo {
+  final int x;
+  final int y;
+  const Foo(int x)
+      : this.x = x,
+        this.y = "hello".length;
+}
+
+class ExtendsFoo1 extends Foo {
+  // No constructor.
+}
+
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+
+class ExtendsFoo2 extends Foo {
+  const ExtendsFoo2();
+}
+
+const ExtendsFoo2 extendsFoo2 = const ExtendsFoo2();
+
+const Foo foo1 = const Foo(42);
+const Foo foo2 = const Foo(42);
+const bool foosIdentical = identical(foo1, foo2);
+const bool foosEqual = foo1 == foo2;
+const Symbol barFoo = const Symbol("Foo");
+const Symbol barFooEqual = const Symbol("Foo=");
+const Symbol tripleShiftSymbol = const Symbol(">>>");
+const Symbol symbolWithDots = const Symbol("I.Have.Dots");
+
+const int circularity1 = circularity2;
+const int circularity2 = circularity3;
+const int circularity3 = circularity4;
+const int circularity4 = circularity1;
+
+const function_const = () {};
+var function_var = () {};
+
+class ConstClassWithFailingAssertWithEmptyMessage {
+  const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+}
+
+ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage =
+const ConstClassWithFailingAssertWithEmptyMessage();
+
+class ClassWithTypeArguments<E, F, G> {
+  const ClassWithTypeArguments(E e, F f, G g);
+}
+
+const ClassWithTypeArguments classWithTypeArguments1 =
+const ClassWithTypeArguments<int, int, int>(42, 42, 42);
+const ClassWithTypeArguments classWithTypeArguments2 =
+const ClassWithTypeArguments(42, 42, 42);
+const bool classWithTypeArgumentsIdentical =
+identical(classWithTypeArguments1, classWithTypeArguments2);
+
+class ClassWithNonEmptyConstConstructor {
+  const ClassWithNonEmptyConstConstructor() {
+    print("hello");
+  }
+}
+
+ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor =
+const ClassWithNonEmptyConstConstructor();
+
+class ConstClassWithFinalFields1 {
+  const ConstClassWithFinalFields1();
+
+  final x = 1;
+}
+
+class ConstClassWithFinalFields2 {
+  const ConstClassWithFinalFields2();
+
+  final y = 1;
+  final z1 = y;
+  final z2 = x;
+}
+
+ConstClassWithFinalFields2 constClassWithFinalFields =
+const ConstClassWithFinalFields2();
+
+const zeroPointZeroIdentical = identical(0.0, 0.0);
+const zeroPointZeroIdenticalToZero = identical(0.0, 0);
+const zeroIdenticalToZeroPointZero = identical(0, 0.0);
+const nanIdentical = identical(0 / 0, 0 / 0);
+
+const zeroPointZeroEqual = 0.0 == 0.0;
+const zeroPointZeroEqualToZero = 0.0 == 0;
+const zeroEqualToZeroPointZero = 0 == 0.0;
+const nanEqual = 0 / 0 == 0 / 0;
+
+T id1<T>(T t) => t;
+T id2<T>(T t) => t;
+
+const dynamic willBecomeNull = const bool.fromEnvironment("foo") ? id1 : null;
+
+const int Function(int) willBecomeNullToo =
+const bool.fromEnvironment("foo") ? id1 : willBecomeNull;
+const int Function(int) partialInstantiation =
+const bool.fromEnvironment("foo") ? willBecomeNull : id1;
+
+const bool yBool = true;
+const bool zBool = !yBool;
+
+const maybeInt = bool.fromEnvironment("foo") ? 42 : true;
+const bool isItInt = maybeInt is int ? true : false;
+const maybeInt2 = zBool ? 42 : true;
+const bool isItInt2 = maybeInt2 is int ? true : false;
+const maybeInt3 = zBool ? 42 : null;
+const bool isItInt3 = maybeInt3 is int ? true : false;
+
+main() {
+  print(barFromEnv);
+  print(hasBarEnv);
+}
diff --git a/pkg/front_end/testcases/general/constants/various2.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/various2.dart.textual_outline.expect
new file mode 100644
index 0000000..f696546
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart.textual_outline.expect
@@ -0,0 +1,143 @@
+const bool barFromEnv = const bool.fromEnvironment("bar");
+const bool hasBarEnv = const bool.hasEnvironment("bar");
+const bool barFromEnvOrNull = const bool.fromEnvironment("bar", defaultValue: null);
+const bool notBarFromEnvOrNull = !barFromEnvOrNull;
+const bool conditionalOnNull = barFromEnvOrNull ? true : false;
+const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+const bool andOnFalse = nullAwareOnNullFalse && nullAwareOnNullTrue;
+const bool andOnFalse2 = nullAwareOnNullTrue && nullAwareOnNullFalse;
+const bool andOnNull = barFromEnvOrNull && true;
+const bool andOnNull2 = true && barFromEnvOrNull;
+const bool orOnNull = barFromEnvOrNull || true;
+const bool orOnNull2 = barFromEnvOrNull || false;
+const bool orOnNull3 = true || barFromEnvOrNull;
+const bool orOnNull4 = false || barFromEnvOrNull;
+const String barFromEnvString = const String.fromEnvironment("bar");
+const String barFromEnvOrNullString = const String.fromEnvironment("bar", defaultValue: null);
+const String barFromEnvOrActualString = const String.fromEnvironment("bar", defaultValue: "hello");
+const String nullFromEnvString = const String.fromEnvironment(barFromEnvOrNullString);
+const bool barFromEnvBool = const bool.fromEnvironment("bar");
+const bool barFromEnvOrNullBool = const bool.fromEnvironment("bar", defaultValue: null);
+const bool barFromEnvOrActualBool = const bool.fromEnvironment("bar", defaultValue: true);
+const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
+const int barFromEnvInt = const int.fromEnvironment("bar");
+const int barFromEnvOrNullInt = const int.fromEnvironment("bar", defaultValue: null);
+const int barFromEnvOrActualInt = const int.fromEnvironment("bar", defaultValue: 42);
+const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
+const bool bazFromEnv = const bool.fromEnvironment("baz");
+const bool hasBazEnv = const bool.hasEnvironment("baz");
+const int bazFromEnvAsInt = const int.fromEnvironment("baz");
+const String bazFromEnvAsString = const String.fromEnvironment("baz");
+const bool bazTrueFromEnv = const bool.fromEnvironment("bazTrue");
+const bool bazFalseFromEnv = const bool.fromEnvironment("bazFalse");
+const bool trueBool = true;
+const bool falseBool = false;
+const bool binaryOnBoolCaret = trueBool ^ falseBool;
+const bool binaryOnBoolAmpersand = trueBool & falseBool;
+const bool binaryOnBoolBar = trueBool | falseBool;
+const bool binaryOnBoolBar2 = falseBool | trueBool;
+const dynamic willBeDouble = const bool.fromEnvironment("foo") ? 42 : 42.42;
+const binaryOnDouble = willBeDouble << 2;
+const dynamic willBeInt = const bool.fromEnvironment("foo") ? 42.42 : 42;
+const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+const binaryOnIntWithDoubleOK = willBeInt + willBeDouble;
+const binaryOnIntWithString = willBeInt << "hello";
+const dynamic willBeString = const bool.fromEnvironment("foo") ? 42.42 : "hello";
+const binaryOnStringWithStringOK = willBeString + " world";
+const binaryOnStringWithInt = willBeString + willBeInt;
+const binaryOnStringWithStringBad = willBeString - " world";
+var x = 1;
+const x1 = --x;
+const x2 = ++x;
+const x3 = x--;
+const x4 = x++;
+const y = 1;
+const y1 = --y;
+const y2 = ++y;
+const y3 = y--;
+const y4 = y++;
+abstract class AbstractClass {}
+abstract class AbstractClassWithConstructor {
+  const AbstractClassWithConstructor();
+  int foo();
+}
+AbstractClassWithConstructor abstractClassWithConstructor = const AbstractClassWithConstructor();
+class NotAbstractClass {
+  @AbstractClass()
+  Object foo;
+  @AbstractClassWithConstructor()
+  Object bar;
+}
+class Foo {
+  final int x;
+  final int y;
+  const Foo(int x) : this.x = x, this.y = "hello".length;
+}
+class ExtendsFoo1 extends Foo {}
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+class ExtendsFoo2 extends Foo {
+  const ExtendsFoo2();
+}
+const ExtendsFoo2 extendsFoo2 = const ExtendsFoo2();
+const Foo foo1 = const Foo(42);
+const Foo foo2 = const Foo(42);
+const bool foosIdentical = identical(foo1, foo2);
+const bool foosEqual = foo1 == foo2;
+const Symbol barFoo = const Symbol("Foo");
+const Symbol barFooEqual = const Symbol("Foo=");
+const Symbol tripleShiftSymbol = const Symbol(">>>");
+const Symbol symbolWithDots = const Symbol("I.Have.Dots");
+const int circularity1 = circularity2;
+const int circularity2 = circularity3;
+const int circularity3 = circularity4;
+const int circularity4 = circularity1;
+const function_const = () {};
+var function_var = () {};
+class ConstClassWithFailingAssertWithEmptyMessage {
+  const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+}
+ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage = const ConstClassWithFailingAssertWithEmptyMessage();
+class ClassWithTypeArguments<E, F, G> {
+  const ClassWithTypeArguments(E e, F f, G g);
+}
+const ClassWithTypeArguments classWithTypeArguments1 = const ClassWithTypeArguments<int, int, int>(42, 42, 42);
+const ClassWithTypeArguments classWithTypeArguments2 = const ClassWithTypeArguments(42, 42, 42);
+const bool classWithTypeArgumentsIdentical = identical(classWithTypeArguments1, classWithTypeArguments2);
+class ClassWithNonEmptyConstConstructor {
+  const ClassWithNonEmptyConstConstructor() {}
+}
+ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor = const ClassWithNonEmptyConstConstructor();
+class ConstClassWithFinalFields1 {
+  const ConstClassWithFinalFields1();
+  final x = 1;
+}
+class ConstClassWithFinalFields2 {
+  const ConstClassWithFinalFields2();
+  final y = 1;
+  final z1 = y;
+  final z2 = x;
+}
+ConstClassWithFinalFields2 constClassWithFinalFields = const ConstClassWithFinalFields2();
+const zeroPointZeroIdentical = identical(0.0, 0.0);
+const zeroPointZeroIdenticalToZero = identical(0.0, 0);
+const zeroIdenticalToZeroPointZero = identical(0, 0.0);
+const nanIdentical = identical(0 / 0, 0 / 0);
+const zeroPointZeroEqual = 0.0 == 0.0;
+const zeroPointZeroEqualToZero = 0.0 == 0;
+const zeroEqualToZeroPointZero = 0 == 0.0;
+const nanEqual = 0 / 0 == 0 / 0;
+T id1<T>(T t) => t;
+T id2<T>(T t) => t;
+const dynamic willBecomeNull = const bool.fromEnvironment("foo") ? id1 : null;
+const int Function(int) willBecomeNullToo = const bool.fromEnvironment("foo") ? id1 : willBecomeNull;
+const int Function(int) partialInstantiation = const bool.fromEnvironment("foo") ? willBecomeNull : id1;
+const bool yBool = true;
+const bool zBool = !yBool;
+const maybeInt = bool.fromEnvironment("foo") ? 42 : true;
+const bool isItInt = maybeInt is int ? true : false;
+const maybeInt2 = zBool ? 42 : true;
+const bool isItInt2 = maybeInt2 is int ? true : false;
+const maybeInt3 = zBool ? 42 : null;
+const bool isItInt3 = maybeInt3 is int ? true : false;
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/various2.dart.weak.expect b/pkg/front_end/testcases/general/constants/various2.dart.weak.expect
new file mode 100644
index 0000000..dc0f5f6
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart.weak.expect
@@ -0,0 +1,524 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/various2.dart:162:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const ClassWithNonEmptyConstConstructor() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:76:14: Error: Not a constant expression.
+// const x1 = --x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:77:14: Error: Not a constant expression.
+// const x2 = ++x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Error: Not a constant expression.
+// const x3 = x--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Error: Not a constant expression.
+// const x4 = x++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+// const y1 = --y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+// const y2 = ++y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+// const y3 = y--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+// const y4 = y++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+// const function_const = () {};
+//                        ^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:12:34: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+//                                  ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:13:35: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+//                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+// const String.fromEnvironment("bar", defaultValue: null);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+// const int.fromEnvironment("bar", defaultValue: null);
+//                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   @AbstractClass()
+//    ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//   @AbstractClassWithConstructor()
+//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+//                                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+//   const ExtendsFoo2();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Not a constant expression.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Error: Not a constant expression.
+//   final z2 = x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// const AbstractClassWithConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const AbstractClassWithConstructor();
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ClassWithNonEmptyConstConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:100:10: Error: Field 'foo' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object foo;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:103:10: Error: Field 'bar' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object bar;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// class ExtendsFoo1 extends Foo {
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Error: Constant evaluation error:
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:7: Context: While analyzing:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Error: Constant evaluation error:
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:7: Context: While analyzing:
+// const binaryOnIntWithString = willBeInt << "hello";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Error: Constant evaluation error:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:7: Context: While analyzing:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Error: Constant evaluation error:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:7: Context: While analyzing:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:13: Error: Constant evaluation error:
+// const x3 = x--;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x3 = x--;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:7: Context: While analyzing:
+// const x3 = x--;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:13: Error: Constant evaluation error:
+// const x4 = x++;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x4 = x++;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:7: Context: While analyzing:
+// const x4 = x++;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
+// const bool foosEqual = foo1 == foo2;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Context: Constant expression depends on itself.
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:11: Context: While analyzing:
+// const int circularity1 = circularity2;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:148:7: Error: Constant evaluation error:
+// const ConstClassWithFailingAssertWithEmptyMessage();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:144:64: Context: This assertion failed with message: (empty)
+//   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+//                                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:185:7: Error: Constant evaluation error:
+// const ConstClassWithFinalFields2();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+//   final z2 = x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::AbstractClassWithConstructor
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int;
+}
+class NotAbstractClass extends core::Object {
+  @invalid-expression "Not a constant expression."
+  field core::Object foo = null;
+  @invalid-expression "Not a constant expression."
+  field core::Object bar = null;
+  synthetic constructor •() → self::NotAbstractClass
+    : super core::Object::•()
+    ;
+}
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  final field core::int y;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int}, super core::Object::•()
+    ;
+}
+class ExtendsFoo1 extends self::Foo {
+  synthetic constructor •() → self::ExtendsFoo1
+    : invalid-initializer
+    ;
+}
+class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
+  const constructor •() → self::ExtendsFoo2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^"
+    ;
+}
+class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage
+    : assert(false, ""), super core::Object::•()
+    ;
+}
+class ClassWithTypeArguments<E extends core::Object? = dynamic, F extends core::Object? = dynamic, G extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::ClassWithTypeArguments::E% e, self::ClassWithTypeArguments::F% f, self::ClassWithTypeArguments::G% g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E%, self::ClassWithTypeArguments::F%, self::ClassWithTypeArguments::G%>
+    : super core::Object::•()
+    ;
+}
+class ClassWithNonEmptyConstConstructor extends core::Object {
+  constructor •() → self::ClassWithNonEmptyConstConstructor
+    : super core::Object::•() {
+    core::print("hello");
+  }
+}
+class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
+  final field core::int x = 1;
+  const constructor •() → self::ConstClassWithFinalFields1
+    : super core::Object::•()
+    ;
+}
+class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int y = 1;
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int};
+  final field core::int z2 = self::x;
+  const constructor •() → self::ConstClassWithFinalFields2
+    : super core::Object::•()
+    ;
+}
+static const field core::bool barFromEnv = #C1;
+static const field core::bool hasBarEnv = #C1;
+static const field core::bool barFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool notBarFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool conditionalOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullTrue = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull3 = #C2;
+static const field core::bool orOnNull4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::String barFromEnvString = #C3;
+static const field core::String barFromEnvOrNullString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::String barFromEnvOrActualString = #C4;
+static const field core::String nullFromEnvString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool barFromEnvBool = #C1;
+static const field core::bool barFromEnvOrNullBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool barFromEnvOrActualBool = #C2;
+static const field core::bool nullFromEnvBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::int barFromEnvInt = #C5;
+static const field core::int barFromEnvOrNullInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+const int.fromEnvironment(\"bar\", defaultValue: null);
+                                               ^";
+static const field core::int barFromEnvOrActualInt = #C6;
+static const field core::int nullFromEnvInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool bazFromEnv = #C1;
+static const field core::bool hasBazEnv = #C2;
+static const field core::int bazFromEnvAsInt = #C6;
+static const field core::String bazFromEnvAsString = #C7;
+static const field core::bool bazTrueFromEnv = #C2;
+static const field core::bool bazFalseFromEnv = #C1;
+static const field core::bool trueBool = #C2;
+static const field core::bool falseBool = #C1;
+static const field core::bool binaryOnBoolCaret = #C2;
+static const field core::bool binaryOnBoolAmpersand = #C1;
+static const field core::bool binaryOnBoolBar = #C2;
+static const field core::bool binaryOnBoolBar2 = #C2;
+static const field dynamic willBeDouble = #C8;
+static const field dynamic binaryOnDouble = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic willBeInt = #C6;
+static const field dynamic binaryOnIntWithDoubleBad = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic binaryOnIntWithDoubleOK = #C9;
+static const field dynamic binaryOnIntWithString = invalid-expression "Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.";
+static const field dynamic willBeString = #C4;
+static const field dynamic binaryOnStringWithStringOK = #C10;
+static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
+static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
+static field core::int x = 1;
+static const field core::int x1 = invalid-expression "Not a constant expression.";
+static const field core::int x2 = invalid-expression "Not a constant expression.";
+static const field core::int x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int y = #C11;
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+const y1 = --y;
+             ^";
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+const y2 = ++y;
+             ^";
+static const field core::int y3 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+const y3 = y--;
+           ^";
+static const field core::int y4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+const y4 = y++;
+           ^";
+static field self::AbstractClassWithConstructor abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const AbstractClassWithConstructor();
+      ^";
+static const field self::ExtendsFoo1 extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+                                      ^^^^^^^^^^^";
+static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^";
+static const field self::Foo foo1 = #C13;
+static const field self::Foo foo2 = #C13;
+static const field core::bool foosIdentical = #C2;
+static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
+static const field core::Symbol barFoo = #C14;
+static const field core::Symbol barFooEqual = #C15;
+static const field core::Symbol tripleShiftSymbol = #C16;
+static const field core::Symbol symbolWithDots = #C17;
+static const field core::int circularity1 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity2 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity3 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity4 = invalid-expression "Constant expression depends on itself.";
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+const function_const = () {};
+                       ^^";
+static field () → Null function_var = () → Null {};
+static field self::ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage = invalid-expression "This assertion failed with message: (empty)";
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments1 = #C18;
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments2 = #C19;
+static const field core::bool classWithTypeArgumentsIdentical = #C1;
+static field self::ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ClassWithNonEmptyConstConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+static field self::ConstClassWithFinalFields2 constClassWithFinalFields = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C1;
+static const field core::bool zeroIdenticalToZeroPointZero = #C1;
+static const field core::bool nanIdentical = #C2;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field dynamic willBecomeNull = #C20;
+static const field (core::int) → core::int willBecomeNullToo = #C20;
+static const field (core::int) → core::int partialInstantiation = #C22;
+static const field core::bool yBool = #C2;
+static const field core::bool zBool = #C1;
+static const field core::Object maybeInt = #C2;
+static const field core::bool isItInt = #C1;
+static const field core::Object maybeInt2 = #C2;
+static const field core::bool isItInt2 = #C1;
+static const field core::int? maybeInt3 = #C20;
+static const field core::bool isItInt3 = #C1;
+static method id1<T extends core::Object? = dynamic>(self::id1::T% t) → self::id1::T%
+  return t;
+static method id2<T extends core::Object? = dynamic>(self::id2::T% t) → self::id2::T%
+  return t;
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = false
+  #C2 = true
+  #C3 = ""
+  #C4 = "hello"
+  #C5 = 0
+  #C6 = 42
+  #C7 = "42"
+  #C8 = 42.42
+  #C9 = 84.42
+  #C10 = "hello world"
+  #C11 = 1
+  #C12 = 5
+  #C13 = self::Foo {x:#C6, y:#C12}
+  #C14 = #Foo
+  #C15 = #Foo=
+  #C16 = #>>>
+  #C17 = #I.Have.Dots
+  #C18 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
+  #C19 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
+  #C20 = null
+  #C21 = static-tearoff self::id1
+  #C22 = instantiation #C21 <core::int*>
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various2.dart:
+- ExtendsFoo2. (from org-dartlang-testcase:///various2.dart:121:9)
+- Foo. (from org-dartlang-testcase:///various2.dart:109:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various2.dart:144:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various2.dart:151:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various2.dart:177:9)
diff --git a/pkg/front_end/testcases/general/constants/various2.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/various2.dart.weak.modular.expect
new file mode 100644
index 0000000..dc0f5f6
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart.weak.modular.expect
@@ -0,0 +1,524 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/various2.dart:162:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const ClassWithNonEmptyConstConstructor() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:76:14: Error: Not a constant expression.
+// const x1 = --x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:77:14: Error: Not a constant expression.
+// const x2 = ++x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Error: Not a constant expression.
+// const x3 = x--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Error: Not a constant expression.
+// const x4 = x++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+// const y1 = --y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+// const y2 = ++y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+// const y3 = y--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+// const y4 = y++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+// const function_const = () {};
+//                        ^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:12:34: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+//                                  ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:13:35: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+//                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+// const String.fromEnvironment("bar", defaultValue: null);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+// const int.fromEnvironment("bar", defaultValue: null);
+//                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   @AbstractClass()
+//    ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//   @AbstractClassWithConstructor()
+//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+//                                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+//   const ExtendsFoo2();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Not a constant expression.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Error: Not a constant expression.
+//   final z2 = x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// const AbstractClassWithConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const AbstractClassWithConstructor();
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ClassWithNonEmptyConstConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:100:10: Error: Field 'foo' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object foo;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:103:10: Error: Field 'bar' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object bar;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// class ExtendsFoo1 extends Foo {
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Error: Constant evaluation error:
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:7: Context: While analyzing:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Error: Constant evaluation error:
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:7: Context: While analyzing:
+// const binaryOnIntWithString = willBeInt << "hello";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Error: Constant evaluation error:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:7: Context: While analyzing:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Error: Constant evaluation error:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:7: Context: While analyzing:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:13: Error: Constant evaluation error:
+// const x3 = x--;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x3 = x--;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:7: Context: While analyzing:
+// const x3 = x--;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:13: Error: Constant evaluation error:
+// const x4 = x++;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x4 = x++;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:7: Context: While analyzing:
+// const x4 = x++;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
+// const bool foosEqual = foo1 == foo2;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Context: Constant expression depends on itself.
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:11: Context: While analyzing:
+// const int circularity1 = circularity2;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:148:7: Error: Constant evaluation error:
+// const ConstClassWithFailingAssertWithEmptyMessage();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:144:64: Context: This assertion failed with message: (empty)
+//   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+//                                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:185:7: Error: Constant evaluation error:
+// const ConstClassWithFinalFields2();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+//   final z2 = x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::AbstractClassWithConstructor
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int;
+}
+class NotAbstractClass extends core::Object {
+  @invalid-expression "Not a constant expression."
+  field core::Object foo = null;
+  @invalid-expression "Not a constant expression."
+  field core::Object bar = null;
+  synthetic constructor •() → self::NotAbstractClass
+    : super core::Object::•()
+    ;
+}
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  final field core::int y;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int}, super core::Object::•()
+    ;
+}
+class ExtendsFoo1 extends self::Foo {
+  synthetic constructor •() → self::ExtendsFoo1
+    : invalid-initializer
+    ;
+}
+class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
+  const constructor •() → self::ExtendsFoo2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^"
+    ;
+}
+class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage
+    : assert(false, ""), super core::Object::•()
+    ;
+}
+class ClassWithTypeArguments<E extends core::Object? = dynamic, F extends core::Object? = dynamic, G extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::ClassWithTypeArguments::E% e, self::ClassWithTypeArguments::F% f, self::ClassWithTypeArguments::G% g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E%, self::ClassWithTypeArguments::F%, self::ClassWithTypeArguments::G%>
+    : super core::Object::•()
+    ;
+}
+class ClassWithNonEmptyConstConstructor extends core::Object {
+  constructor •() → self::ClassWithNonEmptyConstConstructor
+    : super core::Object::•() {
+    core::print("hello");
+  }
+}
+class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
+  final field core::int x = 1;
+  const constructor •() → self::ConstClassWithFinalFields1
+    : super core::Object::•()
+    ;
+}
+class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int y = 1;
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int};
+  final field core::int z2 = self::x;
+  const constructor •() → self::ConstClassWithFinalFields2
+    : super core::Object::•()
+    ;
+}
+static const field core::bool barFromEnv = #C1;
+static const field core::bool hasBarEnv = #C1;
+static const field core::bool barFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool notBarFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool conditionalOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullTrue = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull3 = #C2;
+static const field core::bool orOnNull4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::String barFromEnvString = #C3;
+static const field core::String barFromEnvOrNullString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::String barFromEnvOrActualString = #C4;
+static const field core::String nullFromEnvString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool barFromEnvBool = #C1;
+static const field core::bool barFromEnvOrNullBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool barFromEnvOrActualBool = #C2;
+static const field core::bool nullFromEnvBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::int barFromEnvInt = #C5;
+static const field core::int barFromEnvOrNullInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+const int.fromEnvironment(\"bar\", defaultValue: null);
+                                               ^";
+static const field core::int barFromEnvOrActualInt = #C6;
+static const field core::int nullFromEnvInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool bazFromEnv = #C1;
+static const field core::bool hasBazEnv = #C2;
+static const field core::int bazFromEnvAsInt = #C6;
+static const field core::String bazFromEnvAsString = #C7;
+static const field core::bool bazTrueFromEnv = #C2;
+static const field core::bool bazFalseFromEnv = #C1;
+static const field core::bool trueBool = #C2;
+static const field core::bool falseBool = #C1;
+static const field core::bool binaryOnBoolCaret = #C2;
+static const field core::bool binaryOnBoolAmpersand = #C1;
+static const field core::bool binaryOnBoolBar = #C2;
+static const field core::bool binaryOnBoolBar2 = #C2;
+static const field dynamic willBeDouble = #C8;
+static const field dynamic binaryOnDouble = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic willBeInt = #C6;
+static const field dynamic binaryOnIntWithDoubleBad = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic binaryOnIntWithDoubleOK = #C9;
+static const field dynamic binaryOnIntWithString = invalid-expression "Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.";
+static const field dynamic willBeString = #C4;
+static const field dynamic binaryOnStringWithStringOK = #C10;
+static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
+static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
+static field core::int x = 1;
+static const field core::int x1 = invalid-expression "Not a constant expression.";
+static const field core::int x2 = invalid-expression "Not a constant expression.";
+static const field core::int x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int y = #C11;
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+const y1 = --y;
+             ^";
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+const y2 = ++y;
+             ^";
+static const field core::int y3 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+const y3 = y--;
+           ^";
+static const field core::int y4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+const y4 = y++;
+           ^";
+static field self::AbstractClassWithConstructor abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const AbstractClassWithConstructor();
+      ^";
+static const field self::ExtendsFoo1 extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+                                      ^^^^^^^^^^^";
+static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^";
+static const field self::Foo foo1 = #C13;
+static const field self::Foo foo2 = #C13;
+static const field core::bool foosIdentical = #C2;
+static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
+static const field core::Symbol barFoo = #C14;
+static const field core::Symbol barFooEqual = #C15;
+static const field core::Symbol tripleShiftSymbol = #C16;
+static const field core::Symbol symbolWithDots = #C17;
+static const field core::int circularity1 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity2 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity3 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity4 = invalid-expression "Constant expression depends on itself.";
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+const function_const = () {};
+                       ^^";
+static field () → Null function_var = () → Null {};
+static field self::ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage = invalid-expression "This assertion failed with message: (empty)";
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments1 = #C18;
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments2 = #C19;
+static const field core::bool classWithTypeArgumentsIdentical = #C1;
+static field self::ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ClassWithNonEmptyConstConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+static field self::ConstClassWithFinalFields2 constClassWithFinalFields = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C1;
+static const field core::bool zeroIdenticalToZeroPointZero = #C1;
+static const field core::bool nanIdentical = #C2;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field dynamic willBecomeNull = #C20;
+static const field (core::int) → core::int willBecomeNullToo = #C20;
+static const field (core::int) → core::int partialInstantiation = #C22;
+static const field core::bool yBool = #C2;
+static const field core::bool zBool = #C1;
+static const field core::Object maybeInt = #C2;
+static const field core::bool isItInt = #C1;
+static const field core::Object maybeInt2 = #C2;
+static const field core::bool isItInt2 = #C1;
+static const field core::int? maybeInt3 = #C20;
+static const field core::bool isItInt3 = #C1;
+static method id1<T extends core::Object? = dynamic>(self::id1::T% t) → self::id1::T%
+  return t;
+static method id2<T extends core::Object? = dynamic>(self::id2::T% t) → self::id2::T%
+  return t;
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = false
+  #C2 = true
+  #C3 = ""
+  #C4 = "hello"
+  #C5 = 0
+  #C6 = 42
+  #C7 = "42"
+  #C8 = 42.42
+  #C9 = 84.42
+  #C10 = "hello world"
+  #C11 = 1
+  #C12 = 5
+  #C13 = self::Foo {x:#C6, y:#C12}
+  #C14 = #Foo
+  #C15 = #Foo=
+  #C16 = #>>>
+  #C17 = #I.Have.Dots
+  #C18 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
+  #C19 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
+  #C20 = null
+  #C21 = static-tearoff self::id1
+  #C22 = instantiation #C21 <core::int*>
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various2.dart:
+- ExtendsFoo2. (from org-dartlang-testcase:///various2.dart:121:9)
+- Foo. (from org-dartlang-testcase:///various2.dart:109:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various2.dart:144:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various2.dart:151:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various2.dart:177:9)
diff --git a/pkg/front_end/testcases/general/constants/various2.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/various2.dart.weak.outline.expect
new file mode 100644
index 0000000..26de167
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart.weak.outline.expect
@@ -0,0 +1,380 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/various2.dart:162:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const ClassWithNonEmptyConstConstructor() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:76:14: Error: Not a constant expression.
+// const x1 = --x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:77:14: Error: Not a constant expression.
+// const x2 = ++x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Error: Not a constant expression.
+// const x3 = x--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Error: Not a constant expression.
+// const x4 = x++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+// const y1 = --y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+// const y2 = ++y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+// const y3 = y--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+// const y4 = y++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+// const function_const = () {};
+//                        ^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:12:34: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+//                                  ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:13:35: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+//                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+// const String.fromEnvironment("bar", defaultValue: null);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+// const int.fromEnvironment("bar", defaultValue: null);
+//                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   @AbstractClass()
+//    ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//   @AbstractClassWithConstructor()
+//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+//                                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+//   const ExtendsFoo2();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Not a constant expression.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Error: Not a constant expression.
+//   final z2 = x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass
+    ;
+}
+abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::AbstractClassWithConstructor
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int;
+}
+class NotAbstractClass extends core::Object {
+  @throw invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  @AbstractClass()
+   ^"
+  field core::Object foo;
+  @throw invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  @AbstractClassWithConstructor()
+   ^"
+  field core::Object bar;
+  synthetic constructor •() → self::NotAbstractClass
+    ;
+}
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  final field core::int y;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int}, super core::Object::•()
+    ;
+}
+class ExtendsFoo1 extends self::Foo {
+  synthetic constructor •() → self::ExtendsFoo1
+    ;
+}
+class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
+  const constructor •() → self::ExtendsFoo2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^"
+    ;
+}
+class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage
+    : assert(false, ""), super core::Object::•()
+    ;
+}
+class ClassWithTypeArguments<E extends core::Object? = dynamic, F extends core::Object? = dynamic, G extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::ClassWithTypeArguments::E% e, self::ClassWithTypeArguments::F% f, self::ClassWithTypeArguments::G% g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E%, self::ClassWithTypeArguments::F%, self::ClassWithTypeArguments::G%>
+    : super core::Object::•()
+    ;
+}
+class ClassWithNonEmptyConstConstructor extends core::Object {
+  constructor •() → self::ClassWithNonEmptyConstConstructor
+    ;
+}
+class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
+  final field core::int x = 1;
+  const constructor •() → self::ConstClassWithFinalFields1
+    : super core::Object::•()
+    ;
+}
+class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int y = 1;
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int};
+  final field core::int z2 = self::x;
+  const constructor •() → self::ConstClassWithFinalFields2
+    : super core::Object::•()
+    ;
+}
+static const field core::bool barFromEnv = const core::bool::fromEnvironment("bar");
+static const field core::bool hasBarEnv = const core::bool::hasEnvironment("bar");
+static const field core::bool barFromEnvOrNull = const core::bool::fromEnvironment("bar", defaultValue: invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^" in null as{TypeError,ForNonNullableByDefault} core::bool);
+static const field core::bool notBarFromEnvOrNull = !self::barFromEnvOrNull;
+static const field core::bool conditionalOnNull = self::barFromEnvOrNull ?{core::bool} true : false;
+static const field core::bool nullAwareOnNullTrue = let final core::bool #t2 = self::barFromEnvOrNull in #t2 == null ?{core::bool} true : #t2;
+static const field core::bool nullAwareOnNullFalse = let final core::bool #t3 = self::barFromEnvOrNull in #t3 == null ?{core::bool} false : #t3;
+static const field core::bool andOnFalse = self::nullAwareOnNullFalse && self::nullAwareOnNullTrue;
+static const field core::bool andOnFalse2 = self::nullAwareOnNullTrue && self::nullAwareOnNullFalse;
+static const field core::bool andOnNull = self::barFromEnvOrNull && true;
+static const field core::bool andOnNull2 = true && self::barFromEnvOrNull;
+static const field core::bool orOnNull = self::barFromEnvOrNull || true;
+static const field core::bool orOnNull2 = self::barFromEnvOrNull || false;
+static const field core::bool orOnNull3 = true || self::barFromEnvOrNull;
+static const field core::bool orOnNull4 = false || self::barFromEnvOrNull;
+static const field core::String barFromEnvString = const core::String::fromEnvironment("bar");
+static const field core::String barFromEnvOrNullString = const core::String::fromEnvironment("bar", defaultValue: invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^" in null as{TypeError,ForNonNullableByDefault} core::String);
+static const field core::String barFromEnvOrActualString = const core::String::fromEnvironment("bar", defaultValue: "hello");
+static const field core::String nullFromEnvString = const core::String::fromEnvironment(self::barFromEnvOrNullString);
+static const field core::bool barFromEnvBool = const core::bool::fromEnvironment("bar");
+static const field core::bool barFromEnvOrNullBool = const core::bool::fromEnvironment("bar", defaultValue: invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^" in null as{TypeError,ForNonNullableByDefault} core::bool);
+static const field core::bool barFromEnvOrActualBool = const core::bool::fromEnvironment("bar", defaultValue: true);
+static const field core::bool nullFromEnvBool = const core::bool::fromEnvironment(self::barFromEnvOrNullString);
+static const field core::int barFromEnvInt = const core::int::fromEnvironment("bar");
+static const field core::int barFromEnvOrNullInt = const core::int::fromEnvironment("bar", defaultValue: invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+const int.fromEnvironment(\"bar\", defaultValue: null);
+                                               ^" in null as{TypeError,ForNonNullableByDefault} core::int);
+static const field core::int barFromEnvOrActualInt = const core::int::fromEnvironment("bar", defaultValue: 42);
+static const field core::int nullFromEnvInt = const core::int::fromEnvironment(self::barFromEnvOrNullString);
+static const field core::bool bazFromEnv = const core::bool::fromEnvironment("baz");
+static const field core::bool hasBazEnv = const core::bool::hasEnvironment("baz");
+static const field core::int bazFromEnvAsInt = const core::int::fromEnvironment("baz");
+static const field core::String bazFromEnvAsString = const core::String::fromEnvironment("baz");
+static const field core::bool bazTrueFromEnv = const core::bool::fromEnvironment("bazTrue");
+static const field core::bool bazFalseFromEnv = const core::bool::fromEnvironment("bazFalse");
+static const field core::bool trueBool = true;
+static const field core::bool falseBool = false;
+static const field core::bool binaryOnBoolCaret = self::trueBool.{core::bool::^}(self::falseBool){(core::bool) → core::bool};
+static const field core::bool binaryOnBoolAmpersand = self::trueBool.{core::bool::&}(self::falseBool){(core::bool) → core::bool};
+static const field core::bool binaryOnBoolBar = self::trueBool.{core::bool::|}(self::falseBool){(core::bool) → core::bool};
+static const field core::bool binaryOnBoolBar2 = self::falseBool.{core::bool::|}(self::trueBool){(core::bool) → core::bool};
+static const field dynamic willBeDouble = const core::bool::fromEnvironment("foo") ?{core::num} 42 : 42.42;
+static const field dynamic binaryOnDouble = self::willBeDouble{dynamic}.<<(2);
+static const field dynamic willBeInt = const core::bool::fromEnvironment("foo") ?{core::num} 42.42 : 42;
+static const field dynamic binaryOnIntWithDoubleBad = self::willBeInt{dynamic}.<<(self::willBeDouble);
+static const field dynamic binaryOnIntWithDoubleOK = self::willBeInt{dynamic}.+(self::willBeDouble);
+static const field dynamic binaryOnIntWithString = self::willBeInt{dynamic}.<<("hello");
+static const field dynamic willBeString = const core::bool::fromEnvironment("foo") ?{core::Object} 42.42 : "hello";
+static const field dynamic binaryOnStringWithStringOK = self::willBeString{dynamic}.+(" world");
+static const field dynamic binaryOnStringWithInt = self::willBeString{dynamic}.+(self::willBeInt);
+static const field dynamic binaryOnStringWithStringBad = self::willBeString{dynamic}.-(" world");
+static field core::int x;
+static const field core::int x1 = self::x = self::x.{core::num::-}(1){(core::num) → core::int};
+static const field core::int x2 = self::x = self::x.{core::num::+}(1){(core::num) → core::int};
+static const field core::int x3 = let final core::int #t4 = self::x in let final core::int #t5 = self::x = #t4.{core::num::-}(1){(core::num) → core::int} in #t4;
+static const field core::int x4 = let final core::int #t6 = self::x in let final core::int #t7 = self::x = #t6.{core::num::+}(1){(core::num) → core::int} in #t6;
+static const field core::int y = 1;
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+const y1 = --y;
+             ^";
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+const y2 = ++y;
+             ^";
+static const field core::int y3 = let final core::int #t8 = self::y in let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+const y3 = y--;
+           ^" in #t8;
+static const field core::int y4 = let final core::int #t10 = self::y in let final invalid-type #t11 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+const y4 = y++;
+           ^" in #t10;
+static field self::AbstractClassWithConstructor abstractClassWithConstructor;
+static const field self::ExtendsFoo1 extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+                                      ^^^^^^^^^^^";
+static const field self::ExtendsFoo2 extendsFoo2 = const self::ExtendsFoo2::•();
+static const field self::Foo foo1 = const self::Foo::•(42);
+static const field self::Foo foo2 = const self::Foo::•(42);
+static const field core::bool foosIdentical = core::identical(self::foo1, self::foo2);
+static const field core::bool foosEqual = self::foo1 =={core::Object::==}{(core::Object) → core::bool} self::foo2;
+static const field core::Symbol barFoo = const _in::Symbol::•("Foo");
+static const field core::Symbol barFooEqual = const _in::Symbol::•("Foo=");
+static const field core::Symbol tripleShiftSymbol = const _in::Symbol::•(">>>");
+static const field core::Symbol symbolWithDots = const _in::Symbol::•("I.Have.Dots");
+static const field core::int circularity1 = self::circularity2;
+static const field core::int circularity2 = self::circularity3;
+static const field core::int circularity3 = self::circularity4;
+static const field core::int circularity4 = self::circularity1;
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+const function_const = () {};
+                       ^^";
+static field () → Null function_var;
+static field self::ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage;
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments1 = const self::ClassWithTypeArguments::•<core::int, core::int, core::int>(42, 42, 42);
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments2 = const self::ClassWithTypeArguments::•<dynamic, dynamic, dynamic>(42, 42, 42);
+static const field core::bool classWithTypeArgumentsIdentical = core::identical(self::classWithTypeArguments1, self::classWithTypeArguments2);
+static field self::ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor;
+static field self::ConstClassWithFinalFields2 constClassWithFinalFields;
+static const field core::bool zeroPointZeroIdentical = core::identical(0.0, 0.0);
+static const field core::bool zeroPointZeroIdenticalToZero = core::identical(0.0, 0);
+static const field core::bool zeroIdenticalToZeroPointZero = core::identical(0, 0.0);
+static const field core::bool nanIdentical = core::identical(0.{core::num::/}(0){(core::num) → core::double}, 0.{core::num::/}(0){(core::num) → core::double});
+static const field core::bool zeroPointZeroEqual = 0.0 =={core::num::==}{(core::Object) → core::bool} 0.0;
+static const field core::bool zeroPointZeroEqualToZero = 0.0 =={core::num::==}{(core::Object) → core::bool} 0;
+static const field core::bool zeroEqualToZeroPointZero = 0 =={core::num::==}{(core::Object) → core::bool} 0.0;
+static const field core::bool nanEqual = 0.{core::num::/}(0){(core::num) → core::double} =={core::num::==}{(core::Object) → core::bool} 0.{core::num::/}(0){(core::num) → core::double};
+static const field dynamic willBecomeNull = const core::bool::fromEnvironment("foo") ?{<T extends core::Object? = dynamic>(T%) →? T%} self::id1 : null;
+static const field (core::int) → core::int willBecomeNullToo = (const core::bool::fromEnvironment("foo") ?{dynamic} self::id1<core::int> : self::willBecomeNull) as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → core::int;
+static const field (core::int) → core::int partialInstantiation = (const core::bool::fromEnvironment("foo") ?{dynamic} self::willBecomeNull : self::id1<core::int>) as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → core::int;
+static const field core::bool yBool = true;
+static const field core::bool zBool = !self::yBool;
+static const field core::Object maybeInt = const core::bool::fromEnvironment("foo") ?{core::Object} 42 : true;
+static const field core::bool isItInt = self::maybeInt is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::Object maybeInt2 = self::zBool ?{core::Object} 42 : true;
+static const field core::bool isItInt2 = self::maybeInt2 is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static const field core::int? maybeInt3 = self::zBool ?{core::int?} 42 : null;
+static const field core::bool isItInt3 = self::maybeInt3 is{ForNonNullableByDefault} core::int ?{core::bool} true : false;
+static method id1<T extends core::Object? = dynamic>(self::id1::T% t) → self::id1::T%
+  ;
+static method id2<T extends core::Object? = dynamic>(self::id2::T% t) → self::id2::T%
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: InstanceGet @ org-dartlang-testcase:///various2.dart:111:26 -> IntConstant(5)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:6:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:7:30 -> BoolConstant(false)
+Evaluated: LogicalExpression @ org-dartlang-testcase:///various2.dart:20:29 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:23:39 -> StringConstant("")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:27:7 -> StringConstant("hello")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:31:35 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:35:7 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:38:33 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:42:7 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:46:31 -> BoolConstant(false)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:47:30 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:48:35 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:49:41 -> StringConstant("42")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:53:35 -> BoolConstant(true)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///various2.dart:54:36 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various2.dart:58:41 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various2.dart:59:45 -> BoolConstant(false)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various2.dart:60:39 -> BoolConstant(true)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///various2.dart:61:41 -> BoolConstant(true)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:63:64 -> DoubleConstant(42.42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:64:24 -> DoubleConstant(42.42)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:65:61 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:66:34 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:66:47 -> DoubleConstant(42.42)
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various2.dart:67:43 -> DoubleConstant(84.42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:68:31 -> IntConstant(42)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:70:35 -> StringConstant("hello")
+Evaluated: DynamicInvocation @ org-dartlang-testcase:///various2.dart:71:49 -> StringConstant("hello world")
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:72:31 -> StringConstant("hello")
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:72:46 -> IntConstant(42)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:73:37 -> StringConstant("hello")
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:84:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///various2.dart:84:12 -> IntConstant(1)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:85:12 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///various2.dart:85:12 -> IntConstant(1)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:126:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:127:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:128:28 -> BoolConstant(true)
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:129:24 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: StaticGet @ org-dartlang-testcase:///various2.dart:129:32 -> InstanceConstant(const Foo{Foo.x: 42, Foo.y: 5})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:130:29 -> SymbolConstant(#Foo)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:131:34 -> SymbolConstant(#Foo=)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:132:40 -> SymbolConstant(#>>>)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:133:37 -> SymbolConstant(#I.Have.Dots)
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:155:7 -> InstanceConstant(const ClassWithTypeArguments<int*, int*, int*>{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various2.dart:157:7 -> InstanceConstant(const ClassWithTypeArguments<dynamic, dynamic, dynamic>{})
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:159:1 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:187:32 -> BoolConstant(true)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:188:38 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:189:38 -> BoolConstant(false)
+Evaluated: StaticInvocation @ org-dartlang-testcase:///various2.dart:190:22 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various2.dart:192:32 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various2.dart:193:38 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various2.dart:194:36 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///various2.dart:195:24 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:200:66 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///various2.dart:203:35 -> NullConstant(null)
+Evaluated: AsExpression @ org-dartlang-testcase:///various2.dart:205:35 -> InstantiationConstant(id1<int*>)
+Evaluated: Not @ org-dartlang-testcase:///various2.dart:208:20 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:210:46 -> BoolConstant(true)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:211:38 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:212:25 -> BoolConstant(true)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:213:40 -> BoolConstant(false)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:214:25 -> NullConstant(null)
+Evaluated: ConditionalExpression @ org-dartlang-testcase:///various2.dart:215:40 -> BoolConstant(false)
+Extra constant evaluation: evaluated: 149, effectively constant: 66
diff --git a/pkg/front_end/testcases/general/constants/various2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/various2.dart.weak.transformed.expect
new file mode 100644
index 0000000..9a213d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various2.dart.weak.transformed.expect
@@ -0,0 +1,528 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/various2.dart:162:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const ClassWithNonEmptyConstConstructor() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:76:14: Error: Not a constant expression.
+// const x1 = --x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:77:14: Error: Not a constant expression.
+// const x2 = ++x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Error: Not a constant expression.
+// const x3 = x--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Error: Not a constant expression.
+// const x4 = x++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+// const y1 = --y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+// const y2 = ++y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+// const y3 = y--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+// const y4 = y++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+// const function_const = () {};
+//                        ^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:12:34: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullTrue = barFromEnvOrNull ?? true;
+//                                  ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:13:35: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNullFalse = barFromEnvOrNull ?? false;
+//                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+// const String.fromEnvironment("bar", defaultValue: null);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+// const bool.fromEnvironment("bar", defaultValue: null);
+//                                                 ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+// const int.fromEnvironment("bar", defaultValue: null);
+//                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   @AbstractClass()
+//    ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//   @AbstractClassWithConstructor()
+//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+//                                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+//   const ExtendsFoo2();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:180:14: Error: Not a constant expression.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Error: Not a constant expression.
+//   final z2 = x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+// const AbstractClassWithConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const AbstractClassWithConstructor();
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ClassWithNonEmptyConstConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:100:10: Error: Field 'foo' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object foo;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:103:10: Error: Field 'bar' should be initialized because its type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object bar;
+//          ^^^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// class ExtendsFoo1 extends Foo {
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Error: Constant evaluation error:
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various2.dart:64:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:66:7: Context: While analyzing:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Error: Constant evaluation error:
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various2.dart:68:7: Context: While analyzing:
+// const binaryOnIntWithString = willBeInt << "hello";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Error: Constant evaluation error:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various2.dart:72:7: Context: While analyzing:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Error: Constant evaluation error:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various2.dart:73:7: Context: While analyzing:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:78:13: Error: Constant evaluation error:
+// const x3 = x--;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x3 = x--;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:78:7: Context: While analyzing:
+// const x3 = x--;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:79:13: Error: Constant evaluation error:
+// const x4 = x++;
+//             ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x4 = x++;
+//            ^
+// pkg/front_end/testcases/general/constants/various2.dart:79:7: Context: While analyzing:
+// const x4 = x++;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Error: Constant evaluation error:
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various2.dart:129:12: Context: While analyzing:
+// const bool foosEqual = foo1 == foo2;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Error: Constant evaluation error:
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:26: Context: Constant expression depends on itself.
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various2.dart:135:11: Context: While analyzing:
+// const int circularity1 = circularity2;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:148:7: Error: Constant evaluation error:
+// const ConstClassWithFailingAssertWithEmptyMessage();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:144:64: Context: This assertion failed with message: (empty)
+//   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+//                                                                ^
+//
+// pkg/front_end/testcases/general/constants/various2.dart:185:7: Error: Constant evaluation error:
+// const ConstClassWithFinalFields2();
+//       ^
+// pkg/front_end/testcases/general/constants/various2.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+//   final z2 = x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::AbstractClassWithConstructor
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int;
+}
+class NotAbstractClass extends core::Object {
+  @invalid-expression "Not a constant expression."
+  field core::Object foo = null;
+  @invalid-expression "Not a constant expression."
+  field core::Object bar = null;
+  synthetic constructor •() → self::NotAbstractClass
+    : super core::Object::•()
+    ;
+}
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  final field core::int y;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int}, super core::Object::•()
+    ;
+}
+class ExtendsFoo1 extends self::Foo {
+  synthetic constructor •() → self::ExtendsFoo1
+    : invalid-initializer
+    ;
+}
+class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
+  const constructor •() → self::ExtendsFoo2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^"
+    ;
+}
+class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage
+    : assert(false, ""), super core::Object::•()
+    ;
+}
+class ClassWithTypeArguments<E extends core::Object? = dynamic, F extends core::Object? = dynamic, G extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::ClassWithTypeArguments::E% e, self::ClassWithTypeArguments::F% f, self::ClassWithTypeArguments::G% g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E%, self::ClassWithTypeArguments::F%, self::ClassWithTypeArguments::G%>
+    : super core::Object::•()
+    ;
+}
+class ClassWithNonEmptyConstConstructor extends core::Object {
+  constructor •() → self::ClassWithNonEmptyConstConstructor
+    : super core::Object::•() {
+    core::print("hello");
+  }
+}
+class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
+  final field core::int x = 1;
+  const constructor •() → self::ConstClassWithFinalFields1
+    : super core::Object::•()
+    ;
+}
+class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int y = 1;
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int};
+  final field core::int z2 = self::x;
+  const constructor •() → self::ConstClassWithFinalFields2
+    : super core::Object::•()
+    ;
+}
+static const field core::bool barFromEnv = #C1;
+static const field core::bool hasBarEnv = #C1;
+static const field core::bool barFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool notBarFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool conditionalOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullTrue = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool nullAwareOnNullFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnFalse2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool andOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool orOnNull3 = #C2;
+static const field core::bool orOnNull4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:9:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::String barFromEnvString = #C3;
+static const field core::String barFromEnvOrNullString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::String barFromEnvOrActualString = #C4;
+static const field core::String nullFromEnvString = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool barFromEnvBool = #C1;
+static const field core::bool barFromEnvOrNullBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:33:49: Error: The value 'null' can't be assigned to the parameter type 'bool' because 'bool' is not nullable.
+const bool.fromEnvironment(\"bar\", defaultValue: null);
+                                                ^";
+static const field core::bool barFromEnvOrActualBool = #C2;
+static const field core::bool nullFromEnvBool = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::int barFromEnvInt = #C5;
+static const field core::int barFromEnvOrNullInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:40:48: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+const int.fromEnvironment(\"bar\", defaultValue: null);
+                                               ^";
+static const field core::int barFromEnvOrActualInt = #C6;
+static const field core::int nullFromEnvInt = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:25:51: Error: The value 'null' can't be assigned to the parameter type 'String' because 'String' is not nullable.
+const String.fromEnvironment(\"bar\", defaultValue: null);
+                                                  ^";
+static const field core::bool bazFromEnv = #C1;
+static const field core::bool hasBazEnv = #C2;
+static const field core::int bazFromEnvAsInt = #C6;
+static const field core::String bazFromEnvAsString = #C7;
+static const field core::bool bazTrueFromEnv = #C2;
+static const field core::bool bazFalseFromEnv = #C1;
+static const field core::bool trueBool = #C2;
+static const field core::bool falseBool = #C1;
+static const field core::bool binaryOnBoolCaret = #C2;
+static const field core::bool binaryOnBoolAmpersand = #C1;
+static const field core::bool binaryOnBoolBar = #C2;
+static const field core::bool binaryOnBoolBar2 = #C2;
+static const field dynamic willBeDouble = #C8;
+static const field dynamic binaryOnDouble = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic willBeInt = #C6;
+static const field dynamic binaryOnIntWithDoubleBad = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic binaryOnIntWithDoubleOK = #C9;
+static const field dynamic binaryOnIntWithString = invalid-expression "Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.";
+static const field dynamic willBeString = #C4;
+static const field dynamic binaryOnStringWithStringOK = #C10;
+static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
+static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
+static field core::int x = 1;
+static const field core::int x1 = invalid-expression "Not a constant expression.";
+static const field core::int x2 = invalid-expression "Not a constant expression.";
+static const field core::int x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int y = #C11;
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:82:14: Error: Setter not found: 'y'.
+const y1 = --y;
+             ^";
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:83:14: Error: Setter not found: 'y'.
+const y2 = ++y;
+             ^";
+static const field core::int y3 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:84:12: Error: Setter not found: 'y'.
+const y3 = y--;
+           ^";
+static const field core::int y4 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:85:12: Error: Setter not found: 'y'.
+const y4 = y++;
+           ^";
+static field self::AbstractClassWithConstructor abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:96:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const AbstractClassWithConstructor();
+      ^";
+static const field self::ExtendsFoo1 extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+                                      ^^^^^^^^^^^";
+static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^";
+static const field self::Foo foo1 = #C13;
+static const field self::Foo foo2 = #C13;
+static const field core::bool foosIdentical = #C2;
+static const field core::bool foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/constants/various2.dart'.";
+static const field core::Symbol barFoo = #C14;
+static const field core::Symbol barFooEqual = #C15;
+static const field core::Symbol tripleShiftSymbol = #C16;
+static const field core::Symbol symbolWithDots = #C17;
+static const field core::int circularity1 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity2 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity3 = invalid-expression "Constant expression depends on itself.";
+static const field core::int circularity4 = invalid-expression "Constant expression depends on itself.";
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:140:24: Error: Not a constant expression.
+const function_const = () {};
+                       ^^";
+static field () → Null function_var = () → Null {};
+static field self::ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage = invalid-expression "This assertion failed with message: (empty)";
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments1 = #C18;
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments2 = #C19;
+static const field core::bool classWithTypeArgumentsIdentical = #C1;
+static field self::ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various2.dart:168:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ClassWithNonEmptyConstConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+static field self::ConstClassWithFinalFields2 constClassWithFinalFields = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::bool zeroPointZeroIdentical = #C2;
+static const field core::bool zeroPointZeroIdenticalToZero = #C1;
+static const field core::bool zeroIdenticalToZeroPointZero = #C1;
+static const field core::bool nanIdentical = #C2;
+static const field core::bool zeroPointZeroEqual = #C2;
+static const field core::bool zeroPointZeroEqualToZero = #C2;
+static const field core::bool zeroEqualToZeroPointZero = #C2;
+static const field core::bool nanEqual = #C1;
+static const field dynamic willBecomeNull = #C20;
+static const field (core::int) → core::int willBecomeNullToo = #C20;
+static const field (core::int) → core::int partialInstantiation = #C22;
+static const field core::bool yBool = #C2;
+static const field core::bool zBool = #C1;
+static const field core::Object maybeInt = #C2;
+static const field core::bool isItInt = #C1;
+static const field core::Object maybeInt2 = #C2;
+static const field core::bool isItInt2 = #C1;
+static const field core::int? maybeInt3 = #C20;
+static const field core::bool isItInt3 = #C1;
+static method id1<T extends core::Object? = dynamic>(self::id1::T% t) → self::id1::T%
+  return t;
+static method id2<T extends core::Object? = dynamic>(self::id2::T% t) → self::id2::T%
+  return t;
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = false
+  #C2 = true
+  #C3 = ""
+  #C4 = "hello"
+  #C5 = 0
+  #C6 = 42
+  #C7 = "42"
+  #C8 = 42.42
+  #C9 = 84.42
+  #C10 = "hello world"
+  #C11 = 1
+  #C12 = 5
+  #C13 = self::Foo {x:#C6, y:#C12}
+  #C14 = #Foo
+  #C15 = #Foo=
+  #C16 = #>>>
+  #C17 = #I.Have.Dots
+  #C18 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
+  #C19 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
+  #C20 = null
+  #C21 = static-tearoff self::id1
+  #C22 = instantiation #C21 <core::int*>
+}
+
+Extra constant evaluation status:
+Evaluated: InstanceGet @ org-dartlang-testcase:///various2.dart:111:26 -> IntConstant(5)
+Extra constant evaluation: evaluated: 12, effectively constant: 1
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various2.dart:
+- ExtendsFoo2. (from org-dartlang-testcase:///various2.dart:121:9)
+- Foo. (from org-dartlang-testcase:///various2.dart:109:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various2.dart:144:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various2.dart:151:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various2.dart:177:9)
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/control_flow_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
index d4a4508..52401e8 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.expect
@@ -1758,7 +1758,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
+static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async /* futureValueType= dynamic */ {
   block {
     final core::List<core::int*>* #t236 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
index d4a4508..52401e8 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
@@ -1758,7 +1758,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
+static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async /* futureValueType= dynamic */ {
   block {
     final core::List<core::int*>* #t236 = <core::int*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
index dad114d..aa93492 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.transformed.expect
@@ -1943,7 +1943,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* originally async */ {
+static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
index 746e6cf..2596bcd0 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
@@ -1748,7 +1748,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async {
+static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async /* futureValueType= dynamic */ {
   block {
     final core::List<core::int> #t236 = <core::int>[];
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
index 746e6cf..2596bcd0 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
@@ -1748,7 +1748,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async {
+static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async /* futureValueType= dynamic */ {
   block {
     final core::List<core::int> #t236 = <core::int>[];
     for (core::int i = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; i = i.{core::num::+}(1){(core::num) → core::int})
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
index c300adc..e2cc511 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
@@ -1933,7 +1933,7 @@
       #t235.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t235;
 }
-static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic /* originally async */ {
+static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect
index 05dcdaa..8e9198b 100644
--- a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
@@ -34,33 +37,45 @@
 //   Class<int><int>();
 //                    ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
 //   Class<int>.named;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //                   ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
 //   Class<int>.named<int>;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>();
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -94,10 +109,13 @@
 //   Class<int><int>.named<int>;
 //                  ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int><int>.named<int>;
 //                        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect
index 05dcdaa..8e9198b 100644
--- a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
@@ -34,33 +37,45 @@
 //   Class<int><int>();
 //                    ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
 //   Class<int>.named;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //                   ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
 //   Class<int>.named<int>;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>();
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -94,10 +109,13 @@
 //   Class<int><int>.named<int>;
 //                  ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int><int>.named<int>;
 //                        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect
index 0717dcf..db4e4b7 100644
--- a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.transformed.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
@@ -34,33 +37,45 @@
 //   Class<int><int>();
 //                    ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
 //   Class<int>.named;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>;
 //                   ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
 //   Class<int>.named<int>;
 //              ^^^^^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int>.named<int>();
 //        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -94,10 +109,13 @@
 //   Class<int><int>.named<int>;
 //                  ^
 //
-// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   Class<int><int>.named<int>;
 //                        ^
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
 // Try putting parentheses around one of the comparisons.
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
index 4c629c8..792b410 100644
--- a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
@@ -2,19 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   A() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
 //   A() : super();
 //   ^
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const B() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
 //   const B() : super();
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
index 4c629c8..792b410 100644
--- a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
@@ -2,19 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   A() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
 //   A() : super();
 //   ^
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const B() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
 //   const B() : super();
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
index ce1a0f0..2c1f516 100644
--- a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
@@ -2,19 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   A() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
 //   A() : super();
 //   ^
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const B() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
 //   const B() : super();
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
index 4c629c8..792b410 100644
--- a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
@@ -2,19 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   A() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
 //   A() : super();
 //   ^
 //
-// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const B() : super();
 //   ^
+// pkg/front_end/testcases/general/enum_super_constructor.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
 //   const B() : super();
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart b/pkg/front_end/testcases/general/error_locations/error_location_01.dart
index 63ea655..84034a1 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_01_lib1.dart';
 import 'error_location_01_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline.expect
index 8e25c093..5332212 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_01_lib1.dart';
 import 'error_location_01_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline_modelled.expect
index 8e25c093..5332212 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_01_lib1.dart';
 import 'error_location_01_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
index a1e0f80..ea7891c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_01_lib1.dart" as err;
 import "error_location_01_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect
index a1e0f80..ea7891c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_01_lib1.dart" as err;
 import "error_location_01_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
index 77b03f4..6d0f25c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///error_location_01_lib1.dart";
@@ -7,29 +7,19 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → self2::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 import "org-dartlang-testcase:///error_location_01_lib1.dart";
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
index a1e0f80..ea7891c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_01_lib1.dart" as err;
 import "error_location_01_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_01_lib1.dart
index b8e8190..5ebb8ff 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Foo {
   const Foo(int i) : assert(i > 0);
 }
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01_lib2.dart b/pkg/front_end/testcases/general/error_locations/error_location_01_lib2.dart
index 3ed04eb..e35bf9e 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_01_lib2.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_01_lib1.dart';
 
 bar() {
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart b/pkg/front_end/testcases/general/error_locations/error_location_02.dart
index f860c2b..938b958 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_02_lib1.dart';
 import 'error_location_02_lib2.dart';
 import 'error_location_02_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline.expect
index 7de78f0f..0bb920e 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_02_lib1.dart';
 import 'error_location_02_lib2.dart';
 import 'error_location_02_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline_modelled.expect
index 7de78f0f..0bb920e 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_02_lib1.dart';
 import 'error_location_02_lib2.dart';
 import 'error_location_02_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
index 4b68f2c..0b14e9c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_02_lib1.dart" as err;
 import "dart:core" as core;
@@ -12,30 +12,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -54,9 +44,9 @@
 
 import "org-dartlang-testcase:///error_location_02_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -75,7 +65,7 @@
 
 import "org-dartlang-testcase:///error_location_02_lib2.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect
index 4b68f2c..0b14e9c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_02_lib1.dart" as err;
 import "dart:core" as core;
@@ -12,30 +12,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -54,9 +44,9 @@
 
 import "org-dartlang-testcase:///error_location_02_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -75,7 +65,7 @@
 
 import "org-dartlang-testcase:///error_location_02_lib2.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
index b534db4..d409d76 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///error_location_02_lib1.dart";
@@ -8,41 +8,31 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → self2::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "error_location_02_lib1.dart" as self2;
 
 import "org-dartlang-testcase:///error_location_02_lib1.dart";
 
-static const field self2::Foo* fooField = const self2::Foo::•(0);
+static const field self2::Foo fooField = const self2::Foo::•(0);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self4;
 import "error_location_02_lib1.dart" as self2;
 import "error_location_02_lib2.dart" as self3;
 
 import "org-dartlang-testcase:///error_location_02_lib2.dart";
 
-static const field self2::Foo* fooField2 = self3::fooField;
+static const field self2::Foo fooField2 = self3::fooField;
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
index 4b68f2c..0b14e9c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_02_lib1.dart" as err;
 import "dart:core" as core;
@@ -12,30 +12,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -54,9 +44,9 @@
 
 import "org-dartlang-testcase:///error_location_02_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -75,7 +65,7 @@
 
 import "org-dartlang-testcase:///error_location_02_lib2.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart
index b8e8190..5ebb8ff 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Foo {
   const Foo(int i) : assert(i > 0);
 }
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart b/pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart
index 8369f4f..d526e38 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_02_lib1.dart';
 
 const fooField = const Foo(0);
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart b/pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart
index 6039c84..7123ffc 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_02_lib2.dart';
 
 const fooField2 = fooField;
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart b/pkg/front_end/testcases/general/error_locations/error_location_03.dart
index cb14c398..47bffaf 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_03_lib1.dart';
 import 'error_location_03_lib2.dart';
 import 'error_location_03_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline.expect
index 4dc4182..6ee4f4b 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_03_lib1.dart';
 import 'error_location_03_lib2.dart';
 import 'error_location_03_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline_modelled.expect
index 4dc4182..6ee4f4b 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_03_lib1.dart';
 import 'error_location_03_lib2.dart';
 import 'error_location_03_lib3.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
index a11cbcd..654b898 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_03_lib1.dart" as err;
 import "dart:core" as core;
@@ -13,30 +13,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -55,9 +45,9 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,7 +66,7 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect
index a11cbcd..654b898 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_03_lib1.dart" as err;
 import "dart:core" as core;
@@ -13,30 +13,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -55,9 +45,9 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,7 +66,7 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
index 86c9613..e1cdb6c 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
@@ -8,40 +8,30 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → self2::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "error_location_03_lib1.dart" as self2;
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field self2::Foo* fooField = const self2::Foo::•(0);
+static const field self2::Foo fooField = const self2::Foo::•(0);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self4;
 import "error_location_03_lib1.dart" as self2;
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field self2::Foo* fooField2 = const self2::Foo::•(0);
+static const field self2::Foo fooField2 = const self2::Foo::•(0);
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
index a11cbcd..654b898 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_03_lib1.dart" as err;
 import "dart:core" as core;
@@ -13,30 +13,20 @@
   core::print(invalid-expression "This assertion failed.");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -55,9 +45,9 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+static const field err::Foo fooField = invalid-expression "This assertion failed.";
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,7 +66,7 @@
 
 import "org-dartlang-testcase:///error_location_03_lib1.dart";
 
-static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+static const field err::Foo fooField2 = invalid-expression "This assertion failed.";
 
 
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart
index b8e8190..5ebb8ff 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Foo {
   const Foo(int i) : assert(i > 0);
 }
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart b/pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart
index aa0d530..a889a34 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_03_lib1.dart';
 
 const fooField = const Foo(0);
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart b/pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart
index 508afd4..09a8a3b 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_03_lib1.dart';
 
 const fooField2 = const Foo(0);
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart b/pkg/front_end/testcases/general/error_locations/error_location_04.dart
index b45d3b8..353cc90 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_04_lib1.dart';
 import 'error_location_04_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline.expect
index 3cd6bc2..9dce0c1 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_04_lib1.dart';
 import 'error_location_04_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline_modelled.expect
index 3cd6bc2..9dce0c1 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'error_location_04_lib1.dart';
 import 'error_location_04_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
index 32f4daa..db92d3a 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_04_lib1.dart" as err;
 import "error_location_04_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -52,20 +42,10 @@
 import "org-dartlang-testcase:///error_location_04_lib1.dart";
 
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field err::Foo* x;
-  const constructor •() → err2::Bar*
+  final field err::Foo x;
+  const constructor •() → err2::Bar
     : err2::Bar::x = invalid-expression "This assertion failed.", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method bar() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect
index 32f4daa..db92d3a 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_04_lib1.dart" as err;
 import "error_location_04_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -52,20 +42,10 @@
 import "org-dartlang-testcase:///error_location_04_lib1.dart";
 
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field err::Foo* x;
-  const constructor •() → err2::Bar*
+  final field err::Foo x;
+  const constructor •() → err2::Bar
     : err2::Bar::x = invalid-expression "This assertion failed.", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method bar() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
index c18e587..87da5b2 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///error_location_04_lib1.dart";
@@ -7,29 +7,19 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → self2::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → self2::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 import "error_location_04_lib1.dart" as self2;
@@ -37,20 +27,10 @@
 import "org-dartlang-testcase:///error_location_04_lib1.dart";
 
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field self2::Foo* x;
-  const constructor •() → self3::Bar*
+  final field self2::Foo x;
+  const constructor •() → self3::Bar
     : self3::Bar::x = const self2::Foo::•(0), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method bar() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
index 32f4daa..db92d3a 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "error_location_04_lib1.dart" as err;
 import "error_location_04_lib2.dart" as err2;
@@ -11,30 +11,20 @@
   err2::bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as err;
 import "dart:core" as core;
 
 class Foo extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* i) → err::Foo*
-    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+  const constructor •(core::int i) → err::Foo
+    : assert(i.{core::num::>}(0){(core::num) → core::bool}), super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo() → dynamic {
   new err::Foo::•(0);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -52,20 +42,10 @@
 import "org-dartlang-testcase:///error_location_04_lib1.dart";
 
 class Bar extends core::Object /*hasConstConstructor*/  {
-  final field err::Foo* x;
-  const constructor •() → err2::Bar*
+  final field err::Foo x;
+  const constructor •() → err2::Bar
     : err2::Bar::x = invalid-expression "This assertion failed.", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method bar() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_04_lib1.dart
index b8e8190..5ebb8ff 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Foo {
   const Foo(int i) : assert(i > 0);
 }
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04_lib2.dart b/pkg/front_end/testcases/general/error_locations/error_location_04_lib2.dart
index 5328be8..24de171 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_04_lib2.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'error_location_04_lib1.dart';
 
 class Bar {
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart b/pkg/front_end/testcases/general/error_locations/error_location_05.dart
index 8296347..98a013d 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library error_location_05;
 
 part 'error_location_05_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline.expect
index d3401d0..3097149 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library error_location_05;
 
 part 'error_location_05_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline_modelled.expect
index d3401d0..3097149 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library error_location_05;
 
 part 'error_location_05_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.expect
index c53238d..a94e266 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.expect
@@ -1,4 +1,4 @@
-library error_location_05;
+library error_location_05 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect
index c53238d..a94e266 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library error_location_05;
+library error_location_05 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.outline.expect
index ee7a72e..208ada4 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library error_location_05;
+library error_location_05 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.transformed.expect
index c53238d..a94e266 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library error_location_05;
+library error_location_05 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart
index 2a27e0a..f896142 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 part of error_location_05;
 
 x1(z, {z}) {}
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart b/pkg/front_end/testcases/general/error_locations/error_location_06.dart
index 89e7501..b97ac23 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library error_location_06;
 
 part 'error_location_06_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline.expect
index 89189db..3f290d4 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library error_location_06;
 
 part 'error_location_06_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline_modelled.expect
index 89189db..3f290d4 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library error_location_06;
 
 part 'error_location_06_lib1.dart';
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.expect
index de18361..92245b3 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.expect
@@ -1,4 +1,4 @@
-library error_location_06;
+library error_location_06 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect
index de18361..92245b3 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library error_location_06;
+library error_location_06 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.outline.expect
index 6f0dc86..99cc45b 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library error_location_06;
+library error_location_06 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.transformed.expect
index de18361..92245b3 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library error_location_06;
+library error_location_06 /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart b/pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart
index 88d8d5d..47a8883 100644
--- a/pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // Lots of comment lines that pushes the length of this file beyond that of
 // error_location_06. This in turn causes the (first) 'z' in 'x2' to get an
 // offset that is larger than the largest valid offset in error_location_06.
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart b/pkg/front_end/testcases/general/error_recovery/annotations.dart
index de9241d..0356083 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const annotation = null;
 
 class Annotation {
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.textual_outline.expect
index e3a2446..2894307 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const annotation = null;
 class Annotation {
   final String message;
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.expect
index c6d3c9f..fbb7111 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,52 +14,22 @@
 import "dart:core" as core;
 
 class Annotation extends core::Object /*hasConstConstructor*/  {
-  final field core::String* message;
-  const constructor •(core::String* message) → self::Annotation*
+  final field core::String message;
+  const constructor •(core::String message) → self::Annotation
     : self::Annotation::message = message, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::E*>*
+class A<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m() → dynamic
-    return new self::A::•<self::C*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return new self::A::•<self::C>();
 }
 static const field dynamic annotation = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect
index c6d3c9f..fbb7111 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,52 +14,22 @@
 import "dart:core" as core;
 
 class Annotation extends core::Object /*hasConstConstructor*/  {
-  final field core::String* message;
-  const constructor •(core::String* message) → self::Annotation*
+  final field core::String message;
+  const constructor •(core::String message) → self::Annotation
     : self::Annotation::message = message, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::E*>*
+class A<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m() → dynamic
-    return new self::A::•<self::C*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return new self::A::•<self::C>();
 }
 static const field dynamic annotation = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.outline.expect
index c66c0f8..0177d58 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,50 +14,20 @@
 import "dart:core" as core;
 
 class Annotation extends core::Object /*hasConstConstructor*/  {
-  final field core::String* message;
-  const constructor •(core::String* message) → self::Annotation*
+  final field core::String message;
+  const constructor •(core::String message) → self::Annotation
     : self::Annotation::message = message, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::E*>*
+class A<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::E%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method m() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic annotation = null;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.transformed.expect
index c6d3c9f..fbb7111 100644
--- a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,52 +14,22 @@
 import "dart:core" as core;
 
 class Annotation extends core::Object /*hasConstConstructor*/  {
-  final field core::String* message;
-  const constructor •(core::String* message) → self::Annotation*
+  final field core::String message;
+  const constructor •(core::String message) → self::Annotation
     : self::Annotation::message = message, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<E extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::E*>*
+class A<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::E%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method m() → dynamic
-    return new self::A::•<self::C*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return new self::A::•<self::C>();
 }
 static const field dynamic annotation = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart b/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart
index add537e..fb84c75 100644
--- a/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart
+++ b/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart
@@ -1,5 +1,5 @@
 Future<void> f() => Future.value();
-// @dart=2.9
+
 void g() {
   await f();
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart b/pkg/front_end/testcases/general/error_recovery/class_header.dart
new file mode 100644
index 0000000..b1ef295
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart
@@ -0,0 +1,93 @@
+// 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.
+
+class A extends B with C implements D {}
+class A1 extends B implements D with C {}
+class A2 implements D extends B with C {}
+class A3 implements D with C extends B {}
+class A4 with C implements D extends B {}
+class A5 with C extends B implements D {}
+class A6 extends B with C implements D extends B {}
+class A7 extends B with C implements D implements D {}
+class A8 extends B with C implements D with C {}
+class A9 extends B implements D with C extends B {}
+class A10 extends B implements D with C implements D {}
+class A11 extends B implements D with C with C {}
+class A12 extends B extends B with C implements D {}
+class A13 extends B with C with C implements D {}
+class A14 extends B with C implements D implements D {}
+class A15 with D extends B {}
+class A16 implements D extends B {}
+class A17 implements D with C {}
+class A18 extends {}
+class A19 extends B with {}
+class A20 with {}
+class A21 extends B with C implements {}
+class A22 with C implements {}
+class A23 implements {}
+class A24 extends B extends {}
+class A25 with C with {}
+class A26 implements D implements {}
+
+class N = B with C implements D;
+class N1 = B implements D with C;
+class N2 = implements D extends B with C;
+class N3 = implements D with C extends B;
+class N4 = with C implements D extends B;
+class N5 = with C extends B implements D;
+class N6 = B with C implements D extends B;
+class N7 = B with C implements D implements D;
+class N8 = B with C implements D with C;
+class N9 = B implements D with C extends B;
+class N10 = B implements D with C implements D;
+class N11 = B implements D with C with C;
+class N12 = B extends B with C implements D;
+class N13 = B with C with C implements D;
+class N14 = B with C implements D implements D;
+class N15 = with D extends B;
+class N16 = implements D extends B;
+class N17 = implements D with C;
+class N18 = ;
+class N19 = B with;
+class N20 = with;
+class N21 = B with C implements;
+class N22 = with C implements;
+class N23 = implements;
+class N24 = B extends;
+class N25 = with C with;
+class N26 = implements D implements;
+
+enum E extends B with C implements D { element }
+enum E1 extends B implements D with C { element }
+enum E2 implements D extends B with C { element }
+enum E3 implements D with C extends B { element }
+enum E4 with C implements D extends B { element }
+enum E5 with C extends B implements D { element }
+enum E6 extends B with C implements D extends B { element }
+enum E7 extends B with C implements D implements D { element }
+enum E8 extends B with C implements D with C { element }
+enum E9 extends B implements D with C extends B { element }
+enum E10 extends B implements D with C implements D { element }
+enum E11 extends B implements D with C with C { element }
+enum E12 extends B extends B with C implements D { element }
+enum E13 extends B with C with C implements D { element }
+enum E14 extends B with C implements D implements D { element }
+enum E15 with D extends B { element }
+enum E16 implements D extends B { element }
+enum E17 implements D with C { element }
+enum E18 extends { element }
+enum E19 extends B with { element }
+enum E20 with { element }
+enum E21 extends B with C implements { element }
+enum E22 with C implements { element }
+enum E23 implements { element }
+enum E24 extends B extends { element }
+enum E25 with C with { element }
+enum E26 implements D implements { element }
+
+class B {}
+class C {}
+class D {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/class_header.dart.textual_outline.expect
new file mode 100644
index 0000000..524157d
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart.textual_outline.expect
@@ -0,0 +1,142 @@
+class A extends B with C implements D {}
+class A1 extends B implements D with C {}
+class A2 implements D extends B with C {}
+class A3 implements D with C extends B {}
+class A4 with C implements D extends B {}
+class A5 with C extends B implements D {}
+class A6 extends B with C implements D extends B {}
+class A7 extends B with C implements D implements D {}
+class A8 extends B with C implements D with C {}
+class A9 extends B implements D with C extends B {}
+class A10 extends B implements D with C implements D {}
+class A11 extends B implements D with C with C {}
+class A12 extends B extends B with C implements D {}
+class A13 extends B with C with C implements D {}
+class A14 extends B with C implements D implements D {}
+class A15 with D extends B {}
+class A16 implements D extends B {}
+class A17 implements D with C {}
+class A18 extends {}
+class A19 extends B with {}
+class A20 with {}
+class A21 extends B with C implements {}
+class A22 with C implements {}
+class A23 implements {}
+class A24 extends B extends {}
+class A25 with C with {}
+class A26 implements D implements {}
+class N = B with C implements D;
+class N1 = B withimplements D ;
+with ;
+C;
+class N2 = implements withD ;
+extends ;
+B ;
+with ;
+C;
+class N3 = implements withD ;
+with ;
+C ;
+extends ;
+B;
+class N4 = with C implements D ;
+extends ;
+B;
+class N5 = with C ;
+extends ;
+B implements ;
+D;
+class N6 = B with C implements D ;
+extends ;
+B;
+class N7 = B with C implements D ;
+implements ;
+D;
+class N8 = B with C implements D ;
+with ;
+C;
+class N9 = B withimplements D ;
+with ;
+C ;
+extends ;
+B;
+class N10 = B withimplements D ;
+with ;
+C implements ;
+D;
+class N11 = B withimplements D ;
+with ;
+C ;
+with ;
+C;
+class N12 = B with;
+extends ;
+B ;
+with ;
+C implements ;
+D;
+class N13 = B with C ;
+with ;
+C implements ;
+D;
+class N14 = B with C implements D ;
+implements ;
+D;
+class N15 = with D ;
+extends ;
+B;
+class N16 = implements withD ;
+extends ;
+B;
+class N17 = implements withD ;
+with ;
+C;
+class N18 = with;
+class N19 = B with;
+class N20 = with;
+class N21 = B with C implements;
+class N22 = with C implements;
+class N23 = implementswith;
+class N24 = B with;
+extends;
+class N25 = with C ;
+with;
+class N26 = implements withD implements;
+enum E extends B with C implements D { element }
+enum E1 extends B implements D with C { element }
+enum E2 implements D extends B with C { element }
+enum E3 implements D with C extends B { element }
+enum E4 with C implements D extends B { element }
+enum E5 with C extends B implements D { element }
+enum E6 extends B with C implements D extends B { element }
+enum E7 extends B with C implements D implements D { element }
+enum E8 extends B with C implements D with C { element }
+enum E9 extends B implements D with C extends B { element }
+enum E10 extends B implements D with C implements D { element }
+enum E11 extends B implements D with C with C { element }
+enum E12 {}
+extends ;
+B ;
+extends ;
+B ;
+with ;
+C implements ;
+D (){}
+enum E13 extends B with C with C implements D { element }
+enum E14 extends B with C implements D implements D { element }
+enum E15 with D extends B { element }
+enum E16 implements D extends B { element }
+enum E17 implements D with C { element }
+enum E18 extends { element }
+enum E19 extends B with { element }
+enum E20 with { element }
+enum E21 extends B with C implements { element }
+enum E22 with C implements { element }
+enum E23 implements { element }
+enum E24 extends B extends { element }
+enum E25 with C with { element }
+enum E26 implements D implements { element }
+class B {}
+class C {}
+class D {}
+main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.expect
new file mode 100644
index 0000000..fcda3be
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.expect
@@ -0,0 +1,3356 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A1 extends B implements D with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:23: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                       ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:23: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A3 implements D with C extends B {}
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A3 implements D with C extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A4 with C implements D extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:17: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A5 with C extends B implements D {}
+//                 ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A6 extends B with C implements D extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:40: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A7 extends B with C implements D implements D {}
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:40: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A8 extends B with C implements D with C {}
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A9 extends B implements D with C extends B {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A9 extends B implements D with C extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A10 extends B implements D with C implements D {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A10 extends B implements D with C implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A11 extends B implements D with C with C {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:41: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A11 extends B implements D with C with C {}
+//                                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A12 extends B extends B with C implements D {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:28: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A13 extends B with C with C implements D {}
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A14 extends B with C implements D implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:18: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A15 with D extends B {}
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:24: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A16 implements D extends B {}
+//                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:24: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A17 implements D with C {}
+//                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:23:19: Error: Expected a type, but got '{'.
+// class A18 extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:26: Error: Expected a type, but got '{'.
+// class A19 extends B with {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:25:16: Error: Expected a type, but got '{'.
+// class A20 with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:39: Error: Expected a type, but got '{'.
+// class A21 extends B with C implements {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:29: Error: Expected a type, but got '{'.
+// class A22 with C implements {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:28:22: Error: Expected a type, but got '{'.
+// class A23 implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:29: Error: Expected a type, but got '{'.
+// class A24 extends B extends {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A24 extends B extends {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:23: Error: Expected a type, but got '{'.
+// class A25 with C with {}
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:18: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A25 with C with {}
+//                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:35: Error: Expected a type, but got '{'.
+// class A26 implements D implements {}
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:24: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A26 implements D implements {}
+//                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:14: Error: Expected 'with' before this.
+// class N1 = B implements D with C;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected 'with' before this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Context: Previous declaration of 'with'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: 'C' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Context: Previous declaration of 'C'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected 'with' before this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Context: Previous declaration of 'with'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: 'C' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Context: Previous declaration of 'C'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Context: Previous declaration of 'extends'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: 'B' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Context: Previous declaration of 'B'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:12: Error: Expected a type, but got 'with'.
+// class N4 = with C implements D extends B;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Context: Previous declaration of 'extends'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: 'B' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Context: Previous declaration of 'B'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:12: Error: Expected a type, but got 'with'.
+// class N5 = with C extends B implements D;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' is already declared in this scope.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Context: Previous declaration of 'extends'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Context: Previous declaration of 'extends'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: 'B' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Context: Previous declaration of 'B'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: 'implements' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Context: Previous declaration of 'implements'.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: 'D' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Context: Previous declaration of 'D'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Context: Previous declaration of 'with'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: 'C' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Context: Previous declaration of 'C'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:14: Error: Expected 'with' before this.
+// class N9 = B implements D with C extends B;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Context: Previous declaration of 'with'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: 'C' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Context: Previous declaration of 'C'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Context: Previous declaration of 'extends'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: 'B' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Context: Previous declaration of 'B'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:15: Error: Expected 'with' before this.
+// class N10 = B implements D with C implements D;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Context: Previous declaration of 'with'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: 'implements' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Context: Previous declaration of 'implements'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: 'D' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Context: Previous declaration of 'D'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:15: Error: Expected 'with' before this.
+// class N11 = B implements D with C with C;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Context: Previous declaration of 'with'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Context: Previous declaration of 'C'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected 'with' before this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Context: Previous declaration of 'extends'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: 'B' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Context: Previous declaration of 'B'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: 'implements' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Context: Previous declaration of 'implements'.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: 'D' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Context: Previous declaration of 'D'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Context: Previous declaration of 'with'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: 'implements' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Context: Previous declaration of 'implements'.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: 'D' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Context: Previous declaration of 'D'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: 'implements' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Context: Previous declaration of 'implements'.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: 'D' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Context: Previous declaration of 'D'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:13: Error: Expected a type, but got 'with'.
+// class N15 = with D extends B;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' is already declared in this scope.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Context: Previous declaration of 'extends'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: 'B' is already declared in this scope.
+// class N15 = with D extends B;
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Context: Previous declaration of 'B'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected 'with' before this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' is already declared in this scope.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Context: Previous declaration of 'extends'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: 'B' is already declared in this scope.
+// class N16 = implements D extends B;
+//                                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Context: Previous declaration of 'B'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected 'with' before this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' is already declared in this scope.
+// class N17 = implements D with C;
+//                          ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Context: Previous declaration of 'with'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: 'C' is already declared in this scope.
+// class N17 = implements D with C;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected a type, but got ';'.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected 'with' before this.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:19: Error: Expected a type, but got ';'.
+// class N19 = B with;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:13: Error: Expected a type, but got 'with'.
+// class N20 = with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:17: Error: Expected a type, but got ';'.
+// class N20 = with;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:32: Error: Expected a type, but got ';'.
+// class N21 = B with C implements;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:13: Error: Expected a type, but got 'with'.
+// class N22 = with C implements;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:30: Error: Expected a type, but got ';'.
+// class N22 = with C implements;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:23: Error: Expected 'with' before this.
+// class N23 = implements;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Expected 'with' before this.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: Expected ';' after this.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' is already declared in this scope.
+// class N24 = B extends;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Context: Previous declaration of 'extends'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:13: Error: Expected a type, but got 'with'.
+// class N25 = with C with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: Expected ';' after this.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' is already declared in this scope.
+// class N25 = with C with;
+//                    ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Context: Previous declaration of 'with'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: Expected 'with' before this.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:36: Error: Expected a type, but got ';'.
+// class N26 = implements D implements;
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:8: Error: Unexpected tokens.
+// enum E extends B with C implements D { element }
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:9: Error: Unexpected tokens.
+// enum E1 extends B implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E1 extends B implements D with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:22: Error: Unexpected tokens.
+// enum E2 implements D extends B with C { element }
+//                      ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E2 implements D extends B with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:22: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E3 implements D with C extends B { element }
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:29: Error: Unexpected tokens.
+// enum E3 implements D with C extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:29: Error: Unexpected tokens.
+// enum E4 with C implements D extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:16: Error: Unexpected tokens.
+// enum E5 with C extends B implements D { element }
+//                ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:9: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:39: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:9: Error: Unexpected tokens.
+// enum E7 extends B with C implements D implements D { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:39: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E7 extends B with C implements D implements D { element }
+//                                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:9: Error: Unexpected tokens.
+// enum E8 extends B with C implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:39: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E8 extends B with C implements D with C { element }
+//                                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:9: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E9 extends B implements D with C extends B { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:39: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:10: Error: Unexpected tokens.
+// enum E10 extends B implements D with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:10: Error: Unexpected tokens.
+// enum E11 extends B implements D with C with C { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E11 extends B implements D with C with C { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:40: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E11 extends B implements D with C with C { element }
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected a enum body, but got 'extends'.
+// An enum definition must have a body with at least one constant name.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Context: Previous declaration of 'extends'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Context: Previous declaration of 'B'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Context: Previous declaration of 'extends'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Context: Previous declaration of 'with'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: 'implements' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Context: Previous declaration of 'implements'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: 'D' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Context: Previous declaration of 'D'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:10: Error: Unexpected tokens.
+// enum E13 extends B with C with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:27: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E13 extends B with C with C implements D { element }
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:10: Error: Unexpected tokens.
+// enum E14 extends B with C implements D implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E14 extends B with C implements D implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:17: Error: Unexpected tokens.
+// enum E15 with D extends B { element }
+//                 ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:23: Error: Unexpected tokens.
+// enum E16 implements D extends B { element }
+//                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:23: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E17 implements D with C { element }
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:79:10: Error: Unexpected token 'extends'.
+// enum E18 extends { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:10: Error: Unexpected tokens.
+// enum E19 extends B with { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:25: Error: Expected a type, but got '{'.
+// enum E19 extends B with { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:81:15: Error: Expected a type, but got '{'.
+// enum E20 with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:10: Error: Unexpected tokens.
+// enum E21 extends B with C implements { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:38: Error: Expected a type, but got '{'.
+// enum E21 extends B with C implements { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:28: Error: Expected a type, but got '{'.
+// enum E22 with C implements { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:84:21: Error: Expected a type, but got '{'.
+// enum E23 implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:85:10: Error: Unexpected tokens.
+// enum E24 extends B extends { element }
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:17: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E25 with C with { element }
+//                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:23: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E26 implements D implements { element }
+//                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:89:7: Error: 'B' is already declared in this scope.
+// class B {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:90:7: Error: 'C' is already declared in this scope.
+// class C {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Context: Previous declaration of 'C'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:91:7: Error: 'D' is already declared in this scope.
+// class D {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Context: Previous declaration of 'D'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Error: 'B' isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Error: 'C' isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Error: 'D' isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Error: 'B' isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Error: 'D' isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Error: 'C' isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Error: 'D' isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Error: 'B' isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Error: 'C' isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Error: 'D' isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Error: 'C' isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Error: 'B' isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Error: 'C' isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Error: 'D' isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Error: 'B' isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Error: 'C' isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Error: 'B' isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Error: 'D' isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Error: 'C' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Error: 'D' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Error: 'B' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Error: 'C' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Error: 'B' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Error: 'D' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Error: 'D' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Error: 'C' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Error: 'B' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Error: 'C' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Error: 'B' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Error: 'D' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Error: 'C' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Error: 'D' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Error: 'B' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Error: 'D' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Error: 'B' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Error: 'C' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Error: 'D' isn't a type.
+// class A15 with D extends B {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Context: This isn't a type.
+// class A15 with D extends B {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Error: 'B' isn't a type.
+// class A15 with D extends B {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Context: This isn't a type.
+// class A15 with D extends B {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Error: 'D' isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Error: 'B' isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Error: 'D' isn't a type.
+// class A17 implements D with C {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Context: This isn't a type.
+// class A17 implements D with C {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Error: 'C' isn't a type.
+// class A17 implements D with C {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Context: This isn't a type.
+// class A17 implements D with C {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Error: 'B' isn't a type.
+// class A19 extends B with {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Context: This isn't a type.
+// class A19 extends B with {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Error: 'B' isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Error: 'C' isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Error: 'C' isn't a type.
+// class A22 with C implements {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Context: This isn't a type.
+// class A22 with C implements {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Error: 'B' isn't a type.
+// class A24 extends B extends {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Context: This isn't a type.
+// class A24 extends B extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Error: 'C' isn't a type.
+// class A25 with C with {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Context: This isn't a type.
+// class A25 with C with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Error: 'D' isn't a type.
+// class A26 implements D implements {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Context: This isn't a type.
+// class A26 implements D implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Error: 'B' isn't a type.
+// class N = B with C implements D;
+//           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Context: This isn't a type.
+// class N = B with C implements D;
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Error: 'C' isn't a type.
+// class N = B with C implements D;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Context: This isn't a type.
+// class N = B with C implements D;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Error: 'D' isn't a type.
+// class N = B with C implements D;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Context: This isn't a type.
+// class N = B with C implements D;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Error: 'B' isn't a type.
+// class N1 = B implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Context: This isn't a type.
+// class N1 = B implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: 'D' isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Context: This isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: 'implements' isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: 'D' isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: 'implements' isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: 'D' isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Error: 'C' isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: 'D' isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: 'C' isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: 'B' isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Error: 'B' isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Error: 'C' isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: 'D' isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Error: 'B' isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Error: 'C' isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: 'D' isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Error: 'B' isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Error: 'C' isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: 'D' isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Error: 'B' isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: 'D' isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Error: 'B' isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: 'D' isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: 'C' isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Error: 'B' isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: 'D' isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: 'B' isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: 'C' isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Error: 'B' isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Error: 'B' isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Error: 'C' isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: 'D' isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: 'D' isn't a type.
+// class N15 = with D extends B;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Context: This isn't a type.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: 'implements' isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Context: This isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: 'D' isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Context: This isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: 'implements' isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Context: This isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: 'D' isn't a type.
+// class N17 = implements D with C;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Context: This isn't a type.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Error: 'B' isn't a type.
+// class N19 = B with;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Context: This isn't a type.
+// class N19 = B with;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Error: 'B' isn't a type.
+// class N21 = B with C implements;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Context: This isn't a type.
+// class N21 = B with C implements;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Error: 'C' isn't a type.
+// class N21 = B with C implements;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Context: This isn't a type.
+// class N21 = B with C implements;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Error: 'C' isn't a type.
+// class N22 = with C implements;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Context: This isn't a type.
+// class N22 = with C implements;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: 'implements' isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Context: This isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: 'B' isn't a type.
+// class N24 = B extends;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Context: This isn't a type.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: 'C' isn't a type.
+// class N25 = with C with;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Context: This isn't a type.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: 'implements' isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Context: This isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: 'D' isn't a type.
+// class N26 = implements D implements;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Context: This isn't a type.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Error: 'C' isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Error: 'D' isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Error: 'D' isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Context: This isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Error: 'D' isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Context: This isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Error: 'D' isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Context: This isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Error: 'C' isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Error: 'D' isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Error: 'C' isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Error: 'D' isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Error: 'C' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Error: 'D' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Error: 'C' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Error: 'D' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Error: 'C' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Error: 'D' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Error: 'D' isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Context: This isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Error: 'D' isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Context: This isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Error: 'D' isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Context: This isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: 'C' isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Context: This isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Error: 'C' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Error: 'D' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Error: 'C' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Error: 'D' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Error: 'D' isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Context: This isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Error: 'D' isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Context: This isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Error: 'D' isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Context: This isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Error: 'C' isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Context: This isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Error: 'C' isn't a type.
+// enum E22 with C implements { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Context: This isn't a type.
+// enum E22 with C implements { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Error: 'C' isn't a type.
+// enum E25 with C with { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Context: This isn't a type.
+// enum E25 with C with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Error: 'D' isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Context: This isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:7: Error: The type 'C' can't be mixed in.
+// class A extends B with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:7: Error: The type 'C' can't be mixed in.
+// class A4 with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:7: Error: The type 'C' can't be mixed in.
+// class A5 with C extends B implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:7: Error: The type 'C' can't be mixed in.
+// class A6 extends B with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:7: Error: The type 'C' can't be mixed in.
+// class A7 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:7: Error: The type 'C' can't be mixed in.
+// class A8 extends B with C implements D with C {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:7: Error: The type 'C' can't be mixed in.
+// class A13 extends B with C with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:7: Error: The type 'C' can't be mixed in.
+// class A14 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:7: Error: The type 'D' can't be mixed in.
+// class A15 with D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:7: Error: The type 'C' can't be mixed in.
+// class A21 extends B with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:7: Error: The type 'C' can't be mixed in.
+// class A22 with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:7: Error: The type 'C' can't be mixed in.
+// class A25 with C with {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:7: Error: The type 'C' can't be mixed in.
+// class N = B with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:7: Error: The type 'D' can't be mixed in.
+// class N2 = implements D extends B with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:7: Error: The type 'D' can't be mixed in.
+// class N3 = implements D with C extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:7: Error: The type 'C' can't be mixed in.
+// class N6 = B with C implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:7: Error: The type 'C' can't be mixed in.
+// class N7 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:7: Error: The type 'C' can't be mixed in.
+// class N8 = B with C implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:7: Error: The type 'C' can't be mixed in.
+// class N13 = B with C with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:7: Error: The type 'C' can't be mixed in.
+// class N14 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:7: Error: The type 'D' can't be mixed in.
+// class N16 = implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:7: Error: The type 'D' can't be mixed in.
+// class N17 = implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:7: Error: The type 'C' can't be mixed in.
+// class N21 = B with C implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:7: Error: The type 'D' can't be mixed in.
+// class N26 = implements D implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:6: Error: The type 'C' can't be mixed in.
+// enum E extends B with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:6: Error: The type 'C' can't be mixed in.
+// enum E4 with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:6: Error: The type 'C' can't be mixed in.
+// enum E5 with C extends B implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:6: Error: The type 'C' can't be mixed in.
+// enum E6 extends B with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:6: Error: The type 'C' can't be mixed in.
+// enum E7 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:6: Error: The type 'C' can't be mixed in.
+// enum E8 extends B with C implements D with C { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:6: Error: The type 'C' can't be mixed in.
+// enum E13 extends B with C with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:6: Error: The type 'C' can't be mixed in.
+// enum E14 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:6: Error: The type 'D' can't be mixed in.
+// enum E15 with D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:6: Error: The type 'C' can't be mixed in.
+// enum E21 extends B with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:6: Error: The type 'C' can't be mixed in.
+// enum E22 with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:6: Error: The type 'C' can't be mixed in.
+// enum E25 with C with { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: Can't use 'B' because it is declared more than once.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: Can't use 'C' because it is declared more than once.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: Can't use 'C' because it is declared more than once.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: Can't use 'C' because it is declared more than once.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: Can't use 'C' because it is declared more than once.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Undefined name 'element'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class _A&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&B&C
+    : super core::Object::•()
+    ;
+}
+class A extends self::_A&B&C {
+  synthetic constructor •() → self::A
+    : super self::_A&B&C::•()
+    ;
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+}
+abstract class _A4&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A4&Object&C
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::_A4&Object&C {
+  synthetic constructor •() → self::A4
+    : super self::_A4&Object&C::•()
+    ;
+}
+abstract class _A5&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A5&Object&C
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::_A5&Object&C {
+  synthetic constructor •() → self::A5
+    : super self::_A5&Object&C::•()
+    ;
+}
+abstract class _A6&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A6&B&C
+    : super core::Object::•()
+    ;
+}
+class A6 extends self::_A6&B&C {
+  synthetic constructor •() → self::A6
+    : super self::_A6&B&C::•()
+    ;
+}
+abstract class _A7&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A7&B&C
+    : super core::Object::•()
+    ;
+}
+class A7 extends self::_A7&B&C {
+  synthetic constructor •() → self::A7
+    : super self::_A7&B&C::•()
+    ;
+}
+abstract class _A8&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A8&B&C
+    : super core::Object::•()
+    ;
+}
+class A8 extends self::_A8&B&C {
+  synthetic constructor •() → self::A8
+    : super self::_A8&B&C::•()
+    ;
+}
+class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+}
+class A11 extends core::Object {
+  synthetic constructor •() → self::A11
+    : super core::Object::•()
+    ;
+}
+class A12 extends core::Object {
+  synthetic constructor •() → self::A12
+    : super core::Object::•()
+    ;
+}
+abstract class _A13&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A13&B&C
+    : super core::Object::•()
+    ;
+}
+class A13 extends self::_A13&B&C {
+  synthetic constructor •() → self::A13
+    : super self::_A13&B&C::•()
+    ;
+}
+abstract class _A14&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A14&B&C
+    : super core::Object::•()
+    ;
+}
+class A14 extends self::_A14&B&C {
+  synthetic constructor •() → self::A14
+    : super self::_A14&B&C::•()
+    ;
+}
+abstract class _A15&Object&D extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A15&Object&D
+    : super core::Object::•()
+    ;
+}
+class A15 extends self::_A15&Object&D {
+  synthetic constructor •() → self::A15
+    : super self::_A15&Object&D::•()
+    ;
+}
+class A16 extends core::Object {
+  synthetic constructor •() → self::A16
+    : super core::Object::•()
+    ;
+}
+class A17 extends core::Object {
+  synthetic constructor •() → self::A17
+    : super core::Object::•()
+    ;
+}
+class A18 extends core::Object {
+  synthetic constructor •() → self::A18
+    : super core::Object::•()
+    ;
+}
+class A19 extends core::Object {
+  synthetic constructor •() → self::A19
+    : super core::Object::•()
+    ;
+}
+class A20 extends core::Object {
+  synthetic constructor •() → self::A20
+    : super core::Object::•()
+    ;
+}
+abstract class _A21&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A21&B&C
+    : super core::Object::•()
+    ;
+}
+class A21 extends self::_A21&B&C {
+  synthetic constructor •() → self::A21
+    : super self::_A21&B&C::•()
+    ;
+}
+abstract class _A22&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A22&Object&C
+    : super core::Object::•()
+    ;
+}
+class A22 extends self::_A22&Object&C {
+  synthetic constructor •() → self::A22
+    : super self::_A22&Object&C::•()
+    ;
+}
+class A23 extends core::Object {
+  synthetic constructor •() → self::A23
+    : super core::Object::•()
+    ;
+}
+class A24 extends core::Object {
+  synthetic constructor •() → self::A24
+    : super core::Object::•()
+    ;
+}
+abstract class _A25&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A25&Object&C
+    : super core::Object::•()
+    ;
+}
+class A25 extends self::_A25&Object&C {
+  synthetic constructor •() → self::A25
+    : super self::_A25&Object&C::•()
+    ;
+}
+class A26 extends core::Object {
+  synthetic constructor •() → self::A26
+    : super core::Object::•()
+    ;
+}
+class N extends core::Object {
+  synthetic constructor •() → self::N
+    : super core::Object::•()
+    ;
+}
+class C#8 extends core::Object {
+  synthetic constructor •() → self::C#8
+    : super core::Object::•()
+    ;
+}
+class N2 extends core::Object {
+  synthetic constructor •() → self::N2
+    : super core::Object::•()
+    ;
+}
+class B#10 extends core::Object {
+  synthetic constructor •() → self::B#10
+    : super core::Object::•()
+    ;
+}
+class N3 extends core::Object {
+  synthetic constructor •() → self::N3
+    : super core::Object::•()
+    ;
+}
+class D#7 extends core::Object {
+  synthetic constructor •() → self::D#7
+    : super core::Object::•()
+    ;
+}
+class N6 extends core::Object {
+  synthetic constructor •() → self::N6
+    : super core::Object::•()
+    ;
+}
+class N7 extends core::Object {
+  synthetic constructor •() → self::N7
+    : super core::Object::•()
+    ;
+}
+class N8 extends core::Object {
+  synthetic constructor •() → self::N8
+    : super core::Object::•()
+    ;
+}
+class N13 extends core::Object {
+  synthetic constructor •() → self::N13
+    : super core::Object::•()
+    ;
+}
+class N14 extends core::Object {
+  synthetic constructor •() → self::N14
+    : super core::Object::•()
+    ;
+}
+class N16 extends core::Object {
+  synthetic constructor •() → self::N16
+    : super core::Object::•()
+    ;
+}
+class N17 extends core::Object {
+  synthetic constructor •() → self::N17
+    : super core::Object::•()
+    ;
+}
+class N21 extends core::Object {
+  synthetic constructor •() → self::N21
+    : super core::Object::•()
+    ;
+}
+class N26 extends core::Object {
+  synthetic constructor •() → self::N26
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E extends self::_E&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E element = #C3;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C6;
+  static const field self::E1 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C8;
+  static const field self::E2 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C10;
+  static const field self::E3 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E4&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E4 extends self::_E4&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E4> values = #C12;
+  static const field self::E4 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E5&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E5 extends self::_E5&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E5> values = #C14;
+  static const field self::E5 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E6&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E6 extends self::_E6&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E6> values = #C16;
+  static const field self::E6 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E7&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E7 extends self::_E7&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E7> values = #C18;
+  static const field self::E7 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E8&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E8 extends self::_E8&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E8> values = #C20;
+  static const field self::E8 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C22;
+  static const field self::E9 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C24;
+  static const field self::E10 element = #C23;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C26;
+  static const field self::E11 element = #C25;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C27;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E13&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E13&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E13 extends self::_E13&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E13> values = #C29;
+  static const field self::E13 element = #C28;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super self::_E13&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E14&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E14&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E14 extends self::_E14&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E14> values = #C31;
+  static const field self::E14 element = #C30;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super self::_E14&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E15&_Enum&D extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E15&_Enum&D
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E15 extends self::_E15&_Enum&D /*isEnum*/  {
+  static const field core::List<self::E15> values = #C33;
+  static const field self::E15 element = #C32;
+  const constructor •(core::int index, core::String name) → self::E15
+    : super self::_E15&_Enum&D::•(index, name)
+    ;
+  method toString() → core::String
+    return "E15.${this.{core::_Enum::_name}{core::String}}";
+}
+class E16 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E16> values = #C35;
+  static const field self::E16 element = #C34;
+  const constructor •(core::int index, core::String name) → self::E16
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E16.${this.{core::_Enum::_name}{core::String}}";
+}
+class E17 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E17> values = #C37;
+  static const field self::E17 element = #C36;
+  const constructor •(core::int index, core::String name) → self::E17
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E17.${this.{core::_Enum::_name}{core::String}}";
+}
+class E18 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E18> values = #C39;
+  static const field self::E18 element = #C38;
+  const constructor •(core::int index, core::String name) → self::E18
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E18.${this.{core::_Enum::_name}{core::String}}";
+}
+class E19 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E19> values = #C41;
+  static const field self::E19 element = #C40;
+  const constructor •(core::int index, core::String name) → self::E19
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E19.${this.{core::_Enum::_name}{core::String}}";
+}
+class E20 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E20> values = #C43;
+  static const field self::E20 element = #C42;
+  const constructor •(core::int index, core::String name) → self::E20
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E20.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E21&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E21&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E21 extends self::_E21&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E21> values = #C45;
+  static const field self::E21 element = #C44;
+  const constructor •(core::int index, core::String name) → self::E21
+    : super self::_E21&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E21.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E22&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E22&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E22 extends self::_E22&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E22> values = #C47;
+  static const field self::E22 element = #C46;
+  const constructor •(core::int index, core::String name) → self::E22
+    : super self::_E22&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E22.${this.{core::_Enum::_name}{core::String}}";
+}
+class E23 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E23> values = #C49;
+  static const field self::E23 element = #C48;
+  const constructor •(core::int index, core::String name) → self::E23
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E23.${this.{core::_Enum::_name}{core::String}}";
+}
+class E24 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E24> values = #C51;
+  static const field self::E24 element = #C50;
+  const constructor •(core::int index, core::String name) → self::E24
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E24.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E25&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E25&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E25 extends self::_E25&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E25> values = #C53;
+  static const field self::E25 element = #C52;
+  const constructor •(core::int index, core::String name) → self::E25
+    : super self::_E25&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E25.${this.{core::_Enum::_name}{core::String}}";
+}
+class E26 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E26> values = #C55;
+  static const field self::E26 element = #C54;
+  const constructor •(core::int index, core::String name) → self::E26
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E26.${this.{core::_Enum::_name}{core::String}}";
+}
+static field dynamic with;
+static field dynamic C;
+static field dynamic extends;
+static field dynamic B;
+static field invalid-type implements;
+static field dynamic D;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+  #C5 = self::E1 {index:#C1, _name:#C2}
+  #C6 = <self::E1*>[#C5]
+  #C7 = self::E2 {index:#C1, _name:#C2}
+  #C8 = <self::E2*>[#C7]
+  #C9 = self::E3 {index:#C1, _name:#C2}
+  #C10 = <self::E3*>[#C9]
+  #C11 = self::E4 {index:#C1, _name:#C2}
+  #C12 = <self::E4*>[#C11]
+  #C13 = self::E5 {index:#C1, _name:#C2}
+  #C14 = <self::E5*>[#C13]
+  #C15 = self::E6 {index:#C1, _name:#C2}
+  #C16 = <self::E6*>[#C15]
+  #C17 = self::E7 {index:#C1, _name:#C2}
+  #C18 = <self::E7*>[#C17]
+  #C19 = self::E8 {index:#C1, _name:#C2}
+  #C20 = <self::E8*>[#C19]
+  #C21 = self::E9 {index:#C1, _name:#C2}
+  #C22 = <self::E9*>[#C21]
+  #C23 = self::E10 {index:#C1, _name:#C2}
+  #C24 = <self::E10*>[#C23]
+  #C25 = self::E11 {index:#C1, _name:#C2}
+  #C26 = <self::E11*>[#C25]
+  #C27 = <self::E12*>[]
+  #C28 = self::E13 {index:#C1, _name:#C2}
+  #C29 = <self::E13*>[#C28]
+  #C30 = self::E14 {index:#C1, _name:#C2}
+  #C31 = <self::E14*>[#C30]
+  #C32 = self::E15 {index:#C1, _name:#C2}
+  #C33 = <self::E15*>[#C32]
+  #C34 = self::E16 {index:#C1, _name:#C2}
+  #C35 = <self::E16*>[#C34]
+  #C36 = self::E17 {index:#C1, _name:#C2}
+  #C37 = <self::E17*>[#C36]
+  #C38 = self::E18 {index:#C1, _name:#C2}
+  #C39 = <self::E18*>[#C38]
+  #C40 = self::E19 {index:#C1, _name:#C2}
+  #C41 = <self::E19*>[#C40]
+  #C42 = self::E20 {index:#C1, _name:#C2}
+  #C43 = <self::E20*>[#C42]
+  #C44 = self::E21 {index:#C1, _name:#C2}
+  #C45 = <self::E21*>[#C44]
+  #C46 = self::E22 {index:#C1, _name:#C2}
+  #C47 = <self::E22*>[#C46]
+  #C48 = self::E23 {index:#C1, _name:#C2}
+  #C49 = <self::E23*>[#C48]
+  #C50 = self::E24 {index:#C1, _name:#C2}
+  #C51 = <self::E24*>[#C50]
+  #C52 = self::E25 {index:#C1, _name:#C2}
+  #C53 = <self::E25*>[#C52]
+  #C54 = self::E26 {index:#C1, _name:#C2}
+  #C55 = <self::E26*>[#C54]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_header.dart:
+- E. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _E&_Enum&C. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///class_header.dart:62:6)
+- E2. (from org-dartlang-testcase:///class_header.dart:63:6)
+- E3. (from org-dartlang-testcase:///class_header.dart:64:6)
+- E4. (from org-dartlang-testcase:///class_header.dart:65:6)
+- _E4&_Enum&C. (from org-dartlang-testcase:///class_header.dart:65:6)
+- E5. (from org-dartlang-testcase:///class_header.dart:66:6)
+- _E5&_Enum&C. (from org-dartlang-testcase:///class_header.dart:66:6)
+- E6. (from org-dartlang-testcase:///class_header.dart:67:6)
+- _E6&_Enum&C. (from org-dartlang-testcase:///class_header.dart:67:6)
+- E7. (from org-dartlang-testcase:///class_header.dart:68:6)
+- _E7&_Enum&C. (from org-dartlang-testcase:///class_header.dart:68:6)
+- E8. (from org-dartlang-testcase:///class_header.dart:69:6)
+- _E8&_Enum&C. (from org-dartlang-testcase:///class_header.dart:69:6)
+- E9. (from org-dartlang-testcase:///class_header.dart:70:6)
+- E10. (from org-dartlang-testcase:///class_header.dart:71:6)
+- E11. (from org-dartlang-testcase:///class_header.dart:72:6)
+- E13. (from org-dartlang-testcase:///class_header.dart:74:6)
+- _E13&_Enum&C. (from org-dartlang-testcase:///class_header.dart:74:6)
+- E14. (from org-dartlang-testcase:///class_header.dart:75:6)
+- _E14&_Enum&C. (from org-dartlang-testcase:///class_header.dart:75:6)
+- E15. (from org-dartlang-testcase:///class_header.dart:76:6)
+- _E15&_Enum&D. (from org-dartlang-testcase:///class_header.dart:76:6)
+- E16. (from org-dartlang-testcase:///class_header.dart:77:6)
+- E17. (from org-dartlang-testcase:///class_header.dart:78:6)
+- E18. (from org-dartlang-testcase:///class_header.dart:79:6)
+- E19. (from org-dartlang-testcase:///class_header.dart:80:6)
+- E20. (from org-dartlang-testcase:///class_header.dart:81:6)
+- E21. (from org-dartlang-testcase:///class_header.dart:82:6)
+- _E21&_Enum&C. (from org-dartlang-testcase:///class_header.dart:82:6)
+- E22. (from org-dartlang-testcase:///class_header.dart:83:6)
+- _E22&_Enum&C. (from org-dartlang-testcase:///class_header.dart:83:6)
+- E23. (from org-dartlang-testcase:///class_header.dart:84:6)
+- E24. (from org-dartlang-testcase:///class_header.dart:85:6)
+- E25. (from org-dartlang-testcase:///class_header.dart:86:6)
+- _E25&_Enum&C. (from org-dartlang-testcase:///class_header.dart:86:6)
+- E26. (from org-dartlang-testcase:///class_header.dart:87:6)
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.modular.expect
new file mode 100644
index 0000000..fcda3be
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.modular.expect
@@ -0,0 +1,3356 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A1 extends B implements D with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:23: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                       ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:23: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A3 implements D with C extends B {}
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A3 implements D with C extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A4 with C implements D extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:17: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A5 with C extends B implements D {}
+//                 ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A6 extends B with C implements D extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:40: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A7 extends B with C implements D implements D {}
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:40: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A8 extends B with C implements D with C {}
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A9 extends B implements D with C extends B {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A9 extends B implements D with C extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A10 extends B implements D with C implements D {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A10 extends B implements D with C implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A11 extends B implements D with C with C {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:41: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A11 extends B implements D with C with C {}
+//                                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A12 extends B extends B with C implements D {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:28: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A13 extends B with C with C implements D {}
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A14 extends B with C implements D implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:18: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A15 with D extends B {}
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:24: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A16 implements D extends B {}
+//                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:24: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A17 implements D with C {}
+//                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:23:19: Error: Expected a type, but got '{'.
+// class A18 extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:26: Error: Expected a type, but got '{'.
+// class A19 extends B with {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:25:16: Error: Expected a type, but got '{'.
+// class A20 with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:39: Error: Expected a type, but got '{'.
+// class A21 extends B with C implements {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:29: Error: Expected a type, but got '{'.
+// class A22 with C implements {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:28:22: Error: Expected a type, but got '{'.
+// class A23 implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:29: Error: Expected a type, but got '{'.
+// class A24 extends B extends {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A24 extends B extends {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:23: Error: Expected a type, but got '{'.
+// class A25 with C with {}
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:18: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A25 with C with {}
+//                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:35: Error: Expected a type, but got '{'.
+// class A26 implements D implements {}
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:24: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A26 implements D implements {}
+//                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:14: Error: Expected 'with' before this.
+// class N1 = B implements D with C;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected 'with' before this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Context: Previous declaration of 'with'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: 'C' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Context: Previous declaration of 'C'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected 'with' before this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Context: Previous declaration of 'with'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: 'C' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Context: Previous declaration of 'C'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Context: Previous declaration of 'extends'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: 'B' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Context: Previous declaration of 'B'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:12: Error: Expected a type, but got 'with'.
+// class N4 = with C implements D extends B;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Context: Previous declaration of 'extends'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: 'B' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Context: Previous declaration of 'B'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:12: Error: Expected a type, but got 'with'.
+// class N5 = with C extends B implements D;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' is already declared in this scope.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Context: Previous declaration of 'extends'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Context: Previous declaration of 'extends'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: 'B' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Context: Previous declaration of 'B'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: 'implements' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Context: Previous declaration of 'implements'.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: 'D' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Context: Previous declaration of 'D'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Context: Previous declaration of 'with'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: 'C' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Context: Previous declaration of 'C'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:14: Error: Expected 'with' before this.
+// class N9 = B implements D with C extends B;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Context: Previous declaration of 'with'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: 'C' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Context: Previous declaration of 'C'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Context: Previous declaration of 'extends'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: 'B' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Context: Previous declaration of 'B'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:15: Error: Expected 'with' before this.
+// class N10 = B implements D with C implements D;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Context: Previous declaration of 'with'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: 'implements' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Context: Previous declaration of 'implements'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: 'D' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Context: Previous declaration of 'D'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:15: Error: Expected 'with' before this.
+// class N11 = B implements D with C with C;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Context: Previous declaration of 'with'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Context: Previous declaration of 'C'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected 'with' before this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Context: Previous declaration of 'extends'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: 'B' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Context: Previous declaration of 'B'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: 'implements' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Context: Previous declaration of 'implements'.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: 'D' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Context: Previous declaration of 'D'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Context: Previous declaration of 'with'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: 'implements' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Context: Previous declaration of 'implements'.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: 'D' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Context: Previous declaration of 'D'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: 'implements' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Context: Previous declaration of 'implements'.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: 'D' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Context: Previous declaration of 'D'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:13: Error: Expected a type, but got 'with'.
+// class N15 = with D extends B;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' is already declared in this scope.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Context: Previous declaration of 'extends'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: 'B' is already declared in this scope.
+// class N15 = with D extends B;
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Context: Previous declaration of 'B'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected 'with' before this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' is already declared in this scope.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Context: Previous declaration of 'extends'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: 'B' is already declared in this scope.
+// class N16 = implements D extends B;
+//                                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Context: Previous declaration of 'B'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected 'with' before this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' is already declared in this scope.
+// class N17 = implements D with C;
+//                          ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Context: Previous declaration of 'with'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: 'C' is already declared in this scope.
+// class N17 = implements D with C;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected a type, but got ';'.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected 'with' before this.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:19: Error: Expected a type, but got ';'.
+// class N19 = B with;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:13: Error: Expected a type, but got 'with'.
+// class N20 = with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:17: Error: Expected a type, but got ';'.
+// class N20 = with;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:32: Error: Expected a type, but got ';'.
+// class N21 = B with C implements;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:13: Error: Expected a type, but got 'with'.
+// class N22 = with C implements;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:30: Error: Expected a type, but got ';'.
+// class N22 = with C implements;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:23: Error: Expected 'with' before this.
+// class N23 = implements;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Expected 'with' before this.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: Expected ';' after this.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' is already declared in this scope.
+// class N24 = B extends;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Context: Previous declaration of 'extends'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:13: Error: Expected a type, but got 'with'.
+// class N25 = with C with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: Expected ';' after this.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' is already declared in this scope.
+// class N25 = with C with;
+//                    ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Context: Previous declaration of 'with'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: Expected 'with' before this.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:36: Error: Expected a type, but got ';'.
+// class N26 = implements D implements;
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:8: Error: Unexpected tokens.
+// enum E extends B with C implements D { element }
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:9: Error: Unexpected tokens.
+// enum E1 extends B implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E1 extends B implements D with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:22: Error: Unexpected tokens.
+// enum E2 implements D extends B with C { element }
+//                      ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E2 implements D extends B with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:22: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E3 implements D with C extends B { element }
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:29: Error: Unexpected tokens.
+// enum E3 implements D with C extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:29: Error: Unexpected tokens.
+// enum E4 with C implements D extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:16: Error: Unexpected tokens.
+// enum E5 with C extends B implements D { element }
+//                ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:9: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:39: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:9: Error: Unexpected tokens.
+// enum E7 extends B with C implements D implements D { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:39: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E7 extends B with C implements D implements D { element }
+//                                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:9: Error: Unexpected tokens.
+// enum E8 extends B with C implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:39: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E8 extends B with C implements D with C { element }
+//                                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:9: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E9 extends B implements D with C extends B { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:39: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:10: Error: Unexpected tokens.
+// enum E10 extends B implements D with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:10: Error: Unexpected tokens.
+// enum E11 extends B implements D with C with C { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E11 extends B implements D with C with C { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:40: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E11 extends B implements D with C with C { element }
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected a enum body, but got 'extends'.
+// An enum definition must have a body with at least one constant name.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Context: Previous declaration of 'extends'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Context: Previous declaration of 'B'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Context: Previous declaration of 'extends'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Context: Previous declaration of 'with'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: 'implements' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Context: Previous declaration of 'implements'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: 'D' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Context: Previous declaration of 'D'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:10: Error: Unexpected tokens.
+// enum E13 extends B with C with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:27: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E13 extends B with C with C implements D { element }
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:10: Error: Unexpected tokens.
+// enum E14 extends B with C implements D implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E14 extends B with C implements D implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:17: Error: Unexpected tokens.
+// enum E15 with D extends B { element }
+//                 ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:23: Error: Unexpected tokens.
+// enum E16 implements D extends B { element }
+//                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:23: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E17 implements D with C { element }
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:79:10: Error: Unexpected token 'extends'.
+// enum E18 extends { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:10: Error: Unexpected tokens.
+// enum E19 extends B with { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:25: Error: Expected a type, but got '{'.
+// enum E19 extends B with { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:81:15: Error: Expected a type, but got '{'.
+// enum E20 with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:10: Error: Unexpected tokens.
+// enum E21 extends B with C implements { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:38: Error: Expected a type, but got '{'.
+// enum E21 extends B with C implements { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:28: Error: Expected a type, but got '{'.
+// enum E22 with C implements { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:84:21: Error: Expected a type, but got '{'.
+// enum E23 implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:85:10: Error: Unexpected tokens.
+// enum E24 extends B extends { element }
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:17: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E25 with C with { element }
+//                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:23: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E26 implements D implements { element }
+//                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:89:7: Error: 'B' is already declared in this scope.
+// class B {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:90:7: Error: 'C' is already declared in this scope.
+// class C {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Context: Previous declaration of 'C'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:91:7: Error: 'D' is already declared in this scope.
+// class D {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Context: Previous declaration of 'D'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Error: 'B' isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Error: 'C' isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Error: 'D' isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Error: 'B' isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Error: 'D' isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Error: 'C' isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Error: 'D' isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Error: 'B' isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Error: 'C' isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Error: 'D' isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Error: 'C' isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Error: 'B' isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Error: 'C' isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Error: 'D' isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Error: 'B' isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Error: 'C' isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Error: 'B' isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Error: 'D' isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Error: 'C' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Error: 'D' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Error: 'B' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Error: 'C' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Error: 'B' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Error: 'D' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Error: 'D' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Error: 'C' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Error: 'B' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Error: 'C' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Error: 'B' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Error: 'D' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Error: 'C' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Error: 'D' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Error: 'B' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Error: 'D' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Error: 'B' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Error: 'C' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Error: 'D' isn't a type.
+// class A15 with D extends B {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Context: This isn't a type.
+// class A15 with D extends B {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Error: 'B' isn't a type.
+// class A15 with D extends B {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Context: This isn't a type.
+// class A15 with D extends B {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Error: 'D' isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Error: 'B' isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Error: 'D' isn't a type.
+// class A17 implements D with C {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Context: This isn't a type.
+// class A17 implements D with C {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Error: 'C' isn't a type.
+// class A17 implements D with C {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Context: This isn't a type.
+// class A17 implements D with C {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Error: 'B' isn't a type.
+// class A19 extends B with {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Context: This isn't a type.
+// class A19 extends B with {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Error: 'B' isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Error: 'C' isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Error: 'C' isn't a type.
+// class A22 with C implements {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Context: This isn't a type.
+// class A22 with C implements {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Error: 'B' isn't a type.
+// class A24 extends B extends {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Context: This isn't a type.
+// class A24 extends B extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Error: 'C' isn't a type.
+// class A25 with C with {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Context: This isn't a type.
+// class A25 with C with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Error: 'D' isn't a type.
+// class A26 implements D implements {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Context: This isn't a type.
+// class A26 implements D implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Error: 'B' isn't a type.
+// class N = B with C implements D;
+//           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Context: This isn't a type.
+// class N = B with C implements D;
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Error: 'C' isn't a type.
+// class N = B with C implements D;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Context: This isn't a type.
+// class N = B with C implements D;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Error: 'D' isn't a type.
+// class N = B with C implements D;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Context: This isn't a type.
+// class N = B with C implements D;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Error: 'B' isn't a type.
+// class N1 = B implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Context: This isn't a type.
+// class N1 = B implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: 'D' isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Context: This isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: 'implements' isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: 'D' isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: 'implements' isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: 'D' isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Error: 'C' isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: 'D' isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: 'C' isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: 'B' isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Error: 'B' isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Error: 'C' isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: 'D' isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Error: 'B' isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Error: 'C' isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: 'D' isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Error: 'B' isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Error: 'C' isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: 'D' isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Error: 'B' isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: 'D' isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Error: 'B' isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: 'D' isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: 'C' isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Error: 'B' isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: 'D' isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: 'B' isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: 'C' isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Error: 'B' isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Error: 'B' isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Error: 'C' isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: 'D' isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: 'D' isn't a type.
+// class N15 = with D extends B;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Context: This isn't a type.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: 'implements' isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Context: This isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: 'D' isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Context: This isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: 'implements' isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Context: This isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: 'D' isn't a type.
+// class N17 = implements D with C;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Context: This isn't a type.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Error: 'B' isn't a type.
+// class N19 = B with;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Context: This isn't a type.
+// class N19 = B with;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Error: 'B' isn't a type.
+// class N21 = B with C implements;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Context: This isn't a type.
+// class N21 = B with C implements;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Error: 'C' isn't a type.
+// class N21 = B with C implements;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Context: This isn't a type.
+// class N21 = B with C implements;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Error: 'C' isn't a type.
+// class N22 = with C implements;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Context: This isn't a type.
+// class N22 = with C implements;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: 'implements' isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Context: This isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: 'B' isn't a type.
+// class N24 = B extends;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Context: This isn't a type.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: 'C' isn't a type.
+// class N25 = with C with;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Context: This isn't a type.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: 'implements' isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Context: This isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: 'D' isn't a type.
+// class N26 = implements D implements;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Context: This isn't a type.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Error: 'C' isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Error: 'D' isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Error: 'D' isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Context: This isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Error: 'D' isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Context: This isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Error: 'D' isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Context: This isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Error: 'C' isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Error: 'D' isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Error: 'C' isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Error: 'D' isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Error: 'C' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Error: 'D' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Error: 'C' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Error: 'D' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Error: 'C' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Error: 'D' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Error: 'D' isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Context: This isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Error: 'D' isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Context: This isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Error: 'D' isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Context: This isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: 'C' isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Context: This isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Error: 'C' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Error: 'D' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Error: 'C' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Error: 'D' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Error: 'D' isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Context: This isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Error: 'D' isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Context: This isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Error: 'D' isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Context: This isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Error: 'C' isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Context: This isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Error: 'C' isn't a type.
+// enum E22 with C implements { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Context: This isn't a type.
+// enum E22 with C implements { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Error: 'C' isn't a type.
+// enum E25 with C with { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Context: This isn't a type.
+// enum E25 with C with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Error: 'D' isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Context: This isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:7: Error: The type 'C' can't be mixed in.
+// class A extends B with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:7: Error: The type 'C' can't be mixed in.
+// class A4 with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:7: Error: The type 'C' can't be mixed in.
+// class A5 with C extends B implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:7: Error: The type 'C' can't be mixed in.
+// class A6 extends B with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:7: Error: The type 'C' can't be mixed in.
+// class A7 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:7: Error: The type 'C' can't be mixed in.
+// class A8 extends B with C implements D with C {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:7: Error: The type 'C' can't be mixed in.
+// class A13 extends B with C with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:7: Error: The type 'C' can't be mixed in.
+// class A14 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:7: Error: The type 'D' can't be mixed in.
+// class A15 with D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:7: Error: The type 'C' can't be mixed in.
+// class A21 extends B with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:7: Error: The type 'C' can't be mixed in.
+// class A22 with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:7: Error: The type 'C' can't be mixed in.
+// class A25 with C with {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:7: Error: The type 'C' can't be mixed in.
+// class N = B with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:7: Error: The type 'D' can't be mixed in.
+// class N2 = implements D extends B with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:7: Error: The type 'D' can't be mixed in.
+// class N3 = implements D with C extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:7: Error: The type 'C' can't be mixed in.
+// class N6 = B with C implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:7: Error: The type 'C' can't be mixed in.
+// class N7 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:7: Error: The type 'C' can't be mixed in.
+// class N8 = B with C implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:7: Error: The type 'C' can't be mixed in.
+// class N13 = B with C with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:7: Error: The type 'C' can't be mixed in.
+// class N14 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:7: Error: The type 'D' can't be mixed in.
+// class N16 = implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:7: Error: The type 'D' can't be mixed in.
+// class N17 = implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:7: Error: The type 'C' can't be mixed in.
+// class N21 = B with C implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:7: Error: The type 'D' can't be mixed in.
+// class N26 = implements D implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:6: Error: The type 'C' can't be mixed in.
+// enum E extends B with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:6: Error: The type 'C' can't be mixed in.
+// enum E4 with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:6: Error: The type 'C' can't be mixed in.
+// enum E5 with C extends B implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:6: Error: The type 'C' can't be mixed in.
+// enum E6 extends B with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:6: Error: The type 'C' can't be mixed in.
+// enum E7 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:6: Error: The type 'C' can't be mixed in.
+// enum E8 extends B with C implements D with C { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:6: Error: The type 'C' can't be mixed in.
+// enum E13 extends B with C with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:6: Error: The type 'C' can't be mixed in.
+// enum E14 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:6: Error: The type 'D' can't be mixed in.
+// enum E15 with D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:6: Error: The type 'C' can't be mixed in.
+// enum E21 extends B with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:6: Error: The type 'C' can't be mixed in.
+// enum E22 with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:6: Error: The type 'C' can't be mixed in.
+// enum E25 with C with { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: Can't use 'B' because it is declared more than once.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: Can't use 'C' because it is declared more than once.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: Can't use 'C' because it is declared more than once.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: Can't use 'C' because it is declared more than once.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: Can't use 'C' because it is declared more than once.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Undefined name 'element'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class _A&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&B&C
+    : super core::Object::•()
+    ;
+}
+class A extends self::_A&B&C {
+  synthetic constructor •() → self::A
+    : super self::_A&B&C::•()
+    ;
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+}
+abstract class _A4&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A4&Object&C
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::_A4&Object&C {
+  synthetic constructor •() → self::A4
+    : super self::_A4&Object&C::•()
+    ;
+}
+abstract class _A5&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A5&Object&C
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::_A5&Object&C {
+  synthetic constructor •() → self::A5
+    : super self::_A5&Object&C::•()
+    ;
+}
+abstract class _A6&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A6&B&C
+    : super core::Object::•()
+    ;
+}
+class A6 extends self::_A6&B&C {
+  synthetic constructor •() → self::A6
+    : super self::_A6&B&C::•()
+    ;
+}
+abstract class _A7&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A7&B&C
+    : super core::Object::•()
+    ;
+}
+class A7 extends self::_A7&B&C {
+  synthetic constructor •() → self::A7
+    : super self::_A7&B&C::•()
+    ;
+}
+abstract class _A8&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A8&B&C
+    : super core::Object::•()
+    ;
+}
+class A8 extends self::_A8&B&C {
+  synthetic constructor •() → self::A8
+    : super self::_A8&B&C::•()
+    ;
+}
+class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+}
+class A11 extends core::Object {
+  synthetic constructor •() → self::A11
+    : super core::Object::•()
+    ;
+}
+class A12 extends core::Object {
+  synthetic constructor •() → self::A12
+    : super core::Object::•()
+    ;
+}
+abstract class _A13&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A13&B&C
+    : super core::Object::•()
+    ;
+}
+class A13 extends self::_A13&B&C {
+  synthetic constructor •() → self::A13
+    : super self::_A13&B&C::•()
+    ;
+}
+abstract class _A14&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A14&B&C
+    : super core::Object::•()
+    ;
+}
+class A14 extends self::_A14&B&C {
+  synthetic constructor •() → self::A14
+    : super self::_A14&B&C::•()
+    ;
+}
+abstract class _A15&Object&D extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A15&Object&D
+    : super core::Object::•()
+    ;
+}
+class A15 extends self::_A15&Object&D {
+  synthetic constructor •() → self::A15
+    : super self::_A15&Object&D::•()
+    ;
+}
+class A16 extends core::Object {
+  synthetic constructor •() → self::A16
+    : super core::Object::•()
+    ;
+}
+class A17 extends core::Object {
+  synthetic constructor •() → self::A17
+    : super core::Object::•()
+    ;
+}
+class A18 extends core::Object {
+  synthetic constructor •() → self::A18
+    : super core::Object::•()
+    ;
+}
+class A19 extends core::Object {
+  synthetic constructor •() → self::A19
+    : super core::Object::•()
+    ;
+}
+class A20 extends core::Object {
+  synthetic constructor •() → self::A20
+    : super core::Object::•()
+    ;
+}
+abstract class _A21&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A21&B&C
+    : super core::Object::•()
+    ;
+}
+class A21 extends self::_A21&B&C {
+  synthetic constructor •() → self::A21
+    : super self::_A21&B&C::•()
+    ;
+}
+abstract class _A22&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A22&Object&C
+    : super core::Object::•()
+    ;
+}
+class A22 extends self::_A22&Object&C {
+  synthetic constructor •() → self::A22
+    : super self::_A22&Object&C::•()
+    ;
+}
+class A23 extends core::Object {
+  synthetic constructor •() → self::A23
+    : super core::Object::•()
+    ;
+}
+class A24 extends core::Object {
+  synthetic constructor •() → self::A24
+    : super core::Object::•()
+    ;
+}
+abstract class _A25&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A25&Object&C
+    : super core::Object::•()
+    ;
+}
+class A25 extends self::_A25&Object&C {
+  synthetic constructor •() → self::A25
+    : super self::_A25&Object&C::•()
+    ;
+}
+class A26 extends core::Object {
+  synthetic constructor •() → self::A26
+    : super core::Object::•()
+    ;
+}
+class N extends core::Object {
+  synthetic constructor •() → self::N
+    : super core::Object::•()
+    ;
+}
+class C#8 extends core::Object {
+  synthetic constructor •() → self::C#8
+    : super core::Object::•()
+    ;
+}
+class N2 extends core::Object {
+  synthetic constructor •() → self::N2
+    : super core::Object::•()
+    ;
+}
+class B#10 extends core::Object {
+  synthetic constructor •() → self::B#10
+    : super core::Object::•()
+    ;
+}
+class N3 extends core::Object {
+  synthetic constructor •() → self::N3
+    : super core::Object::•()
+    ;
+}
+class D#7 extends core::Object {
+  synthetic constructor •() → self::D#7
+    : super core::Object::•()
+    ;
+}
+class N6 extends core::Object {
+  synthetic constructor •() → self::N6
+    : super core::Object::•()
+    ;
+}
+class N7 extends core::Object {
+  synthetic constructor •() → self::N7
+    : super core::Object::•()
+    ;
+}
+class N8 extends core::Object {
+  synthetic constructor •() → self::N8
+    : super core::Object::•()
+    ;
+}
+class N13 extends core::Object {
+  synthetic constructor •() → self::N13
+    : super core::Object::•()
+    ;
+}
+class N14 extends core::Object {
+  synthetic constructor •() → self::N14
+    : super core::Object::•()
+    ;
+}
+class N16 extends core::Object {
+  synthetic constructor •() → self::N16
+    : super core::Object::•()
+    ;
+}
+class N17 extends core::Object {
+  synthetic constructor •() → self::N17
+    : super core::Object::•()
+    ;
+}
+class N21 extends core::Object {
+  synthetic constructor •() → self::N21
+    : super core::Object::•()
+    ;
+}
+class N26 extends core::Object {
+  synthetic constructor •() → self::N26
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E extends self::_E&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E element = #C3;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C6;
+  static const field self::E1 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C8;
+  static const field self::E2 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C10;
+  static const field self::E3 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E4&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E4 extends self::_E4&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E4> values = #C12;
+  static const field self::E4 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E5&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E5 extends self::_E5&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E5> values = #C14;
+  static const field self::E5 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E6&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E6 extends self::_E6&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E6> values = #C16;
+  static const field self::E6 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E7&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E7 extends self::_E7&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E7> values = #C18;
+  static const field self::E7 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E8&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E8 extends self::_E8&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E8> values = #C20;
+  static const field self::E8 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C22;
+  static const field self::E9 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C24;
+  static const field self::E10 element = #C23;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C26;
+  static const field self::E11 element = #C25;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C27;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E13&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E13&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E13 extends self::_E13&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E13> values = #C29;
+  static const field self::E13 element = #C28;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super self::_E13&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E14&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E14&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E14 extends self::_E14&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E14> values = #C31;
+  static const field self::E14 element = #C30;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super self::_E14&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E15&_Enum&D extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E15&_Enum&D
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E15 extends self::_E15&_Enum&D /*isEnum*/  {
+  static const field core::List<self::E15> values = #C33;
+  static const field self::E15 element = #C32;
+  const constructor •(core::int index, core::String name) → self::E15
+    : super self::_E15&_Enum&D::•(index, name)
+    ;
+  method toString() → core::String
+    return "E15.${this.{core::_Enum::_name}{core::String}}";
+}
+class E16 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E16> values = #C35;
+  static const field self::E16 element = #C34;
+  const constructor •(core::int index, core::String name) → self::E16
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E16.${this.{core::_Enum::_name}{core::String}}";
+}
+class E17 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E17> values = #C37;
+  static const field self::E17 element = #C36;
+  const constructor •(core::int index, core::String name) → self::E17
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E17.${this.{core::_Enum::_name}{core::String}}";
+}
+class E18 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E18> values = #C39;
+  static const field self::E18 element = #C38;
+  const constructor •(core::int index, core::String name) → self::E18
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E18.${this.{core::_Enum::_name}{core::String}}";
+}
+class E19 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E19> values = #C41;
+  static const field self::E19 element = #C40;
+  const constructor •(core::int index, core::String name) → self::E19
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E19.${this.{core::_Enum::_name}{core::String}}";
+}
+class E20 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E20> values = #C43;
+  static const field self::E20 element = #C42;
+  const constructor •(core::int index, core::String name) → self::E20
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E20.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E21&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E21&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E21 extends self::_E21&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E21> values = #C45;
+  static const field self::E21 element = #C44;
+  const constructor •(core::int index, core::String name) → self::E21
+    : super self::_E21&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E21.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E22&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E22&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E22 extends self::_E22&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E22> values = #C47;
+  static const field self::E22 element = #C46;
+  const constructor •(core::int index, core::String name) → self::E22
+    : super self::_E22&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E22.${this.{core::_Enum::_name}{core::String}}";
+}
+class E23 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E23> values = #C49;
+  static const field self::E23 element = #C48;
+  const constructor •(core::int index, core::String name) → self::E23
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E23.${this.{core::_Enum::_name}{core::String}}";
+}
+class E24 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E24> values = #C51;
+  static const field self::E24 element = #C50;
+  const constructor •(core::int index, core::String name) → self::E24
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E24.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E25&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E25&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E25 extends self::_E25&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E25> values = #C53;
+  static const field self::E25 element = #C52;
+  const constructor •(core::int index, core::String name) → self::E25
+    : super self::_E25&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E25.${this.{core::_Enum::_name}{core::String}}";
+}
+class E26 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E26> values = #C55;
+  static const field self::E26 element = #C54;
+  const constructor •(core::int index, core::String name) → self::E26
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E26.${this.{core::_Enum::_name}{core::String}}";
+}
+static field dynamic with;
+static field dynamic C;
+static field dynamic extends;
+static field dynamic B;
+static field invalid-type implements;
+static field dynamic D;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+  #C5 = self::E1 {index:#C1, _name:#C2}
+  #C6 = <self::E1*>[#C5]
+  #C7 = self::E2 {index:#C1, _name:#C2}
+  #C8 = <self::E2*>[#C7]
+  #C9 = self::E3 {index:#C1, _name:#C2}
+  #C10 = <self::E3*>[#C9]
+  #C11 = self::E4 {index:#C1, _name:#C2}
+  #C12 = <self::E4*>[#C11]
+  #C13 = self::E5 {index:#C1, _name:#C2}
+  #C14 = <self::E5*>[#C13]
+  #C15 = self::E6 {index:#C1, _name:#C2}
+  #C16 = <self::E6*>[#C15]
+  #C17 = self::E7 {index:#C1, _name:#C2}
+  #C18 = <self::E7*>[#C17]
+  #C19 = self::E8 {index:#C1, _name:#C2}
+  #C20 = <self::E8*>[#C19]
+  #C21 = self::E9 {index:#C1, _name:#C2}
+  #C22 = <self::E9*>[#C21]
+  #C23 = self::E10 {index:#C1, _name:#C2}
+  #C24 = <self::E10*>[#C23]
+  #C25 = self::E11 {index:#C1, _name:#C2}
+  #C26 = <self::E11*>[#C25]
+  #C27 = <self::E12*>[]
+  #C28 = self::E13 {index:#C1, _name:#C2}
+  #C29 = <self::E13*>[#C28]
+  #C30 = self::E14 {index:#C1, _name:#C2}
+  #C31 = <self::E14*>[#C30]
+  #C32 = self::E15 {index:#C1, _name:#C2}
+  #C33 = <self::E15*>[#C32]
+  #C34 = self::E16 {index:#C1, _name:#C2}
+  #C35 = <self::E16*>[#C34]
+  #C36 = self::E17 {index:#C1, _name:#C2}
+  #C37 = <self::E17*>[#C36]
+  #C38 = self::E18 {index:#C1, _name:#C2}
+  #C39 = <self::E18*>[#C38]
+  #C40 = self::E19 {index:#C1, _name:#C2}
+  #C41 = <self::E19*>[#C40]
+  #C42 = self::E20 {index:#C1, _name:#C2}
+  #C43 = <self::E20*>[#C42]
+  #C44 = self::E21 {index:#C1, _name:#C2}
+  #C45 = <self::E21*>[#C44]
+  #C46 = self::E22 {index:#C1, _name:#C2}
+  #C47 = <self::E22*>[#C46]
+  #C48 = self::E23 {index:#C1, _name:#C2}
+  #C49 = <self::E23*>[#C48]
+  #C50 = self::E24 {index:#C1, _name:#C2}
+  #C51 = <self::E24*>[#C50]
+  #C52 = self::E25 {index:#C1, _name:#C2}
+  #C53 = <self::E25*>[#C52]
+  #C54 = self::E26 {index:#C1, _name:#C2}
+  #C55 = <self::E26*>[#C54]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_header.dart:
+- E. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _E&_Enum&C. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///class_header.dart:62:6)
+- E2. (from org-dartlang-testcase:///class_header.dart:63:6)
+- E3. (from org-dartlang-testcase:///class_header.dart:64:6)
+- E4. (from org-dartlang-testcase:///class_header.dart:65:6)
+- _E4&_Enum&C. (from org-dartlang-testcase:///class_header.dart:65:6)
+- E5. (from org-dartlang-testcase:///class_header.dart:66:6)
+- _E5&_Enum&C. (from org-dartlang-testcase:///class_header.dart:66:6)
+- E6. (from org-dartlang-testcase:///class_header.dart:67:6)
+- _E6&_Enum&C. (from org-dartlang-testcase:///class_header.dart:67:6)
+- E7. (from org-dartlang-testcase:///class_header.dart:68:6)
+- _E7&_Enum&C. (from org-dartlang-testcase:///class_header.dart:68:6)
+- E8. (from org-dartlang-testcase:///class_header.dart:69:6)
+- _E8&_Enum&C. (from org-dartlang-testcase:///class_header.dart:69:6)
+- E9. (from org-dartlang-testcase:///class_header.dart:70:6)
+- E10. (from org-dartlang-testcase:///class_header.dart:71:6)
+- E11. (from org-dartlang-testcase:///class_header.dart:72:6)
+- E13. (from org-dartlang-testcase:///class_header.dart:74:6)
+- _E13&_Enum&C. (from org-dartlang-testcase:///class_header.dart:74:6)
+- E14. (from org-dartlang-testcase:///class_header.dart:75:6)
+- _E14&_Enum&C. (from org-dartlang-testcase:///class_header.dart:75:6)
+- E15. (from org-dartlang-testcase:///class_header.dart:76:6)
+- _E15&_Enum&D. (from org-dartlang-testcase:///class_header.dart:76:6)
+- E16. (from org-dartlang-testcase:///class_header.dart:77:6)
+- E17. (from org-dartlang-testcase:///class_header.dart:78:6)
+- E18. (from org-dartlang-testcase:///class_header.dart:79:6)
+- E19. (from org-dartlang-testcase:///class_header.dart:80:6)
+- E20. (from org-dartlang-testcase:///class_header.dart:81:6)
+- E21. (from org-dartlang-testcase:///class_header.dart:82:6)
+- _E21&_Enum&C. (from org-dartlang-testcase:///class_header.dart:82:6)
+- E22. (from org-dartlang-testcase:///class_header.dart:83:6)
+- _E22&_Enum&C. (from org-dartlang-testcase:///class_header.dart:83:6)
+- E23. (from org-dartlang-testcase:///class_header.dart:84:6)
+- E24. (from org-dartlang-testcase:///class_header.dart:85:6)
+- E25. (from org-dartlang-testcase:///class_header.dart:86:6)
+- _E25&_Enum&C. (from org-dartlang-testcase:///class_header.dart:86:6)
+- E26. (from org-dartlang-testcase:///class_header.dart:87:6)
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.outline.expect
new file mode 100644
index 0000000..a59f1ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.outline.expect
@@ -0,0 +1,3223 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A1 extends B implements D with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:23: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                       ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:23: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A3 implements D with C extends B {}
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A3 implements D with C extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A4 with C implements D extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:17: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A5 with C extends B implements D {}
+//                 ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A6 extends B with C implements D extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:40: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A7 extends B with C implements D implements D {}
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:40: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A8 extends B with C implements D with C {}
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A9 extends B implements D with C extends B {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A9 extends B implements D with C extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A10 extends B implements D with C implements D {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A10 extends B implements D with C implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A11 extends B implements D with C with C {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:41: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A11 extends B implements D with C with C {}
+//                                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A12 extends B extends B with C implements D {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:28: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A13 extends B with C with C implements D {}
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A14 extends B with C implements D implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:18: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A15 with D extends B {}
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:24: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A16 implements D extends B {}
+//                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:24: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A17 implements D with C {}
+//                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:23:19: Error: Expected a type, but got '{'.
+// class A18 extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:26: Error: Expected a type, but got '{'.
+// class A19 extends B with {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:25:16: Error: Expected a type, but got '{'.
+// class A20 with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:39: Error: Expected a type, but got '{'.
+// class A21 extends B with C implements {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:29: Error: Expected a type, but got '{'.
+// class A22 with C implements {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:28:22: Error: Expected a type, but got '{'.
+// class A23 implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:29: Error: Expected a type, but got '{'.
+// class A24 extends B extends {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A24 extends B extends {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:23: Error: Expected a type, but got '{'.
+// class A25 with C with {}
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:18: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A25 with C with {}
+//                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:35: Error: Expected a type, but got '{'.
+// class A26 implements D implements {}
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:24: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A26 implements D implements {}
+//                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:14: Error: Expected 'with' before this.
+// class N1 = B implements D with C;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected 'with' before this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Context: Previous declaration of 'with'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: 'C' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Context: Previous declaration of 'C'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected 'with' before this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Context: Previous declaration of 'with'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: 'C' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Context: Previous declaration of 'C'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Context: Previous declaration of 'extends'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: 'B' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Context: Previous declaration of 'B'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:12: Error: Expected a type, but got 'with'.
+// class N4 = with C implements D extends B;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Context: Previous declaration of 'extends'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: 'B' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Context: Previous declaration of 'B'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:12: Error: Expected a type, but got 'with'.
+// class N5 = with C extends B implements D;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' is already declared in this scope.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Context: Previous declaration of 'extends'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Context: Previous declaration of 'extends'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: 'B' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Context: Previous declaration of 'B'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: 'implements' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Context: Previous declaration of 'implements'.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: 'D' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Context: Previous declaration of 'D'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Context: Previous declaration of 'with'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: 'C' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Context: Previous declaration of 'C'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:14: Error: Expected 'with' before this.
+// class N9 = B implements D with C extends B;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Context: Previous declaration of 'with'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: 'C' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Context: Previous declaration of 'C'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Context: Previous declaration of 'extends'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: 'B' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Context: Previous declaration of 'B'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:15: Error: Expected 'with' before this.
+// class N10 = B implements D with C implements D;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Context: Previous declaration of 'with'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: 'implements' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Context: Previous declaration of 'implements'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: 'D' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Context: Previous declaration of 'D'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:15: Error: Expected 'with' before this.
+// class N11 = B implements D with C with C;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Context: Previous declaration of 'with'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Context: Previous declaration of 'C'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected 'with' before this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Context: Previous declaration of 'extends'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: 'B' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Context: Previous declaration of 'B'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: 'implements' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Context: Previous declaration of 'implements'.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: 'D' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Context: Previous declaration of 'D'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Context: Previous declaration of 'with'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: 'implements' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Context: Previous declaration of 'implements'.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: 'D' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Context: Previous declaration of 'D'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: 'implements' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Context: Previous declaration of 'implements'.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: 'D' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Context: Previous declaration of 'D'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:13: Error: Expected a type, but got 'with'.
+// class N15 = with D extends B;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' is already declared in this scope.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Context: Previous declaration of 'extends'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: 'B' is already declared in this scope.
+// class N15 = with D extends B;
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Context: Previous declaration of 'B'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected 'with' before this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' is already declared in this scope.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Context: Previous declaration of 'extends'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: 'B' is already declared in this scope.
+// class N16 = implements D extends B;
+//                                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Context: Previous declaration of 'B'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected 'with' before this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' is already declared in this scope.
+// class N17 = implements D with C;
+//                          ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Context: Previous declaration of 'with'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: 'C' is already declared in this scope.
+// class N17 = implements D with C;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected a type, but got ';'.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected 'with' before this.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:19: Error: Expected a type, but got ';'.
+// class N19 = B with;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:13: Error: Expected a type, but got 'with'.
+// class N20 = with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:17: Error: Expected a type, but got ';'.
+// class N20 = with;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:32: Error: Expected a type, but got ';'.
+// class N21 = B with C implements;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:13: Error: Expected a type, but got 'with'.
+// class N22 = with C implements;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:30: Error: Expected a type, but got ';'.
+// class N22 = with C implements;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:23: Error: Expected 'with' before this.
+// class N23 = implements;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Expected 'with' before this.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: Expected ';' after this.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' is already declared in this scope.
+// class N24 = B extends;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Context: Previous declaration of 'extends'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:13: Error: Expected a type, but got 'with'.
+// class N25 = with C with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: Expected ';' after this.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' is already declared in this scope.
+// class N25 = with C with;
+//                    ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Context: Previous declaration of 'with'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: Expected 'with' before this.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:36: Error: Expected a type, but got ';'.
+// class N26 = implements D implements;
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:8: Error: Unexpected tokens.
+// enum E extends B with C implements D { element }
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:9: Error: Unexpected tokens.
+// enum E1 extends B implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E1 extends B implements D with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:22: Error: Unexpected tokens.
+// enum E2 implements D extends B with C { element }
+//                      ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E2 implements D extends B with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:22: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E3 implements D with C extends B { element }
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:29: Error: Unexpected tokens.
+// enum E3 implements D with C extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:29: Error: Unexpected tokens.
+// enum E4 with C implements D extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:16: Error: Unexpected tokens.
+// enum E5 with C extends B implements D { element }
+//                ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:9: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:39: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:9: Error: Unexpected tokens.
+// enum E7 extends B with C implements D implements D { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:39: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E7 extends B with C implements D implements D { element }
+//                                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:9: Error: Unexpected tokens.
+// enum E8 extends B with C implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:39: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E8 extends B with C implements D with C { element }
+//                                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:9: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E9 extends B implements D with C extends B { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:39: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:10: Error: Unexpected tokens.
+// enum E10 extends B implements D with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:10: Error: Unexpected tokens.
+// enum E11 extends B implements D with C with C { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E11 extends B implements D with C with C { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:40: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E11 extends B implements D with C with C { element }
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected a enum body, but got 'extends'.
+// An enum definition must have a body with at least one constant name.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Context: Previous declaration of 'extends'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Context: Previous declaration of 'B'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Context: Previous declaration of 'extends'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Context: Previous declaration of 'with'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: 'implements' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Context: Previous declaration of 'implements'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: 'D' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Context: Previous declaration of 'D'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:10: Error: Unexpected tokens.
+// enum E13 extends B with C with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:27: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E13 extends B with C with C implements D { element }
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:10: Error: Unexpected tokens.
+// enum E14 extends B with C implements D implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E14 extends B with C implements D implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:17: Error: Unexpected tokens.
+// enum E15 with D extends B { element }
+//                 ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:23: Error: Unexpected tokens.
+// enum E16 implements D extends B { element }
+//                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:23: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E17 implements D with C { element }
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:79:10: Error: Unexpected token 'extends'.
+// enum E18 extends { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:10: Error: Unexpected tokens.
+// enum E19 extends B with { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:25: Error: Expected a type, but got '{'.
+// enum E19 extends B with { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:81:15: Error: Expected a type, but got '{'.
+// enum E20 with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:10: Error: Unexpected tokens.
+// enum E21 extends B with C implements { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:38: Error: Expected a type, but got '{'.
+// enum E21 extends B with C implements { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:28: Error: Expected a type, but got '{'.
+// enum E22 with C implements { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:84:21: Error: Expected a type, but got '{'.
+// enum E23 implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:85:10: Error: Unexpected tokens.
+// enum E24 extends B extends { element }
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:17: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E25 with C with { element }
+//                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:23: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E26 implements D implements { element }
+//                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:89:7: Error: 'B' is already declared in this scope.
+// class B {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:90:7: Error: 'C' is already declared in this scope.
+// class C {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Context: Previous declaration of 'C'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:91:7: Error: 'D' is already declared in this scope.
+// class D {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Context: Previous declaration of 'D'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Error: 'B' isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Error: 'C' isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Error: 'D' isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Error: 'B' isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Error: 'D' isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Error: 'C' isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Error: 'D' isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Error: 'B' isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Error: 'C' isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Error: 'D' isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Error: 'C' isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Error: 'B' isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Error: 'C' isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Error: 'D' isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Error: 'B' isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Error: 'C' isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Error: 'B' isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Error: 'D' isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Error: 'C' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Error: 'D' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Error: 'B' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Error: 'C' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Error: 'B' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Error: 'D' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Error: 'D' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Error: 'C' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Error: 'B' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Error: 'C' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Error: 'B' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Error: 'D' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Error: 'C' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Error: 'D' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Error: 'B' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Error: 'D' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Error: 'B' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Error: 'C' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Error: 'D' isn't a type.
+// class A15 with D extends B {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Context: This isn't a type.
+// class A15 with D extends B {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Error: 'B' isn't a type.
+// class A15 with D extends B {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Context: This isn't a type.
+// class A15 with D extends B {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Error: 'D' isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Error: 'B' isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Error: 'D' isn't a type.
+// class A17 implements D with C {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Context: This isn't a type.
+// class A17 implements D with C {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Error: 'C' isn't a type.
+// class A17 implements D with C {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Context: This isn't a type.
+// class A17 implements D with C {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Error: 'B' isn't a type.
+// class A19 extends B with {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Context: This isn't a type.
+// class A19 extends B with {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Error: 'B' isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Error: 'C' isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Error: 'C' isn't a type.
+// class A22 with C implements {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Context: This isn't a type.
+// class A22 with C implements {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Error: 'B' isn't a type.
+// class A24 extends B extends {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Context: This isn't a type.
+// class A24 extends B extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Error: 'C' isn't a type.
+// class A25 with C with {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Context: This isn't a type.
+// class A25 with C with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Error: 'D' isn't a type.
+// class A26 implements D implements {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Context: This isn't a type.
+// class A26 implements D implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Error: 'B' isn't a type.
+// class N = B with C implements D;
+//           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Context: This isn't a type.
+// class N = B with C implements D;
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Error: 'C' isn't a type.
+// class N = B with C implements D;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Context: This isn't a type.
+// class N = B with C implements D;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Error: 'D' isn't a type.
+// class N = B with C implements D;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Context: This isn't a type.
+// class N = B with C implements D;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Error: 'B' isn't a type.
+// class N1 = B implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Context: This isn't a type.
+// class N1 = B implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: 'D' isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Context: This isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: 'implements' isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: 'D' isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: 'implements' isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: 'D' isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Error: 'C' isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: 'D' isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: 'C' isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: 'B' isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Error: 'B' isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Error: 'C' isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: 'D' isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Error: 'B' isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Error: 'C' isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: 'D' isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Error: 'B' isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Error: 'C' isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: 'D' isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Error: 'B' isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: 'D' isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Error: 'B' isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: 'D' isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: 'C' isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Error: 'B' isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: 'D' isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: 'B' isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: 'C' isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Error: 'B' isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Error: 'B' isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Error: 'C' isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: 'D' isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: 'D' isn't a type.
+// class N15 = with D extends B;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Context: This isn't a type.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: 'implements' isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Context: This isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: 'D' isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Context: This isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: 'implements' isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Context: This isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: 'D' isn't a type.
+// class N17 = implements D with C;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Context: This isn't a type.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Error: 'B' isn't a type.
+// class N19 = B with;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Context: This isn't a type.
+// class N19 = B with;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Error: 'B' isn't a type.
+// class N21 = B with C implements;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Context: This isn't a type.
+// class N21 = B with C implements;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Error: 'C' isn't a type.
+// class N21 = B with C implements;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Context: This isn't a type.
+// class N21 = B with C implements;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Error: 'C' isn't a type.
+// class N22 = with C implements;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Context: This isn't a type.
+// class N22 = with C implements;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: 'implements' isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Context: This isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: 'B' isn't a type.
+// class N24 = B extends;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Context: This isn't a type.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: 'C' isn't a type.
+// class N25 = with C with;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Context: This isn't a type.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: 'implements' isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Context: This isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: 'D' isn't a type.
+// class N26 = implements D implements;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Context: This isn't a type.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Error: 'C' isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Error: 'D' isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Error: 'D' isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Context: This isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Error: 'D' isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Context: This isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Error: 'D' isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Context: This isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Error: 'C' isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Error: 'D' isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Error: 'C' isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Error: 'D' isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Error: 'C' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Error: 'D' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Error: 'C' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Error: 'D' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Error: 'C' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Error: 'D' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Error: 'D' isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Context: This isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Error: 'D' isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Context: This isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Error: 'D' isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Context: This isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: 'C' isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Context: This isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Error: 'C' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Error: 'D' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Error: 'C' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Error: 'D' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Error: 'D' isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Context: This isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Error: 'D' isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Context: This isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Error: 'D' isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Context: This isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Error: 'C' isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Context: This isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Error: 'C' isn't a type.
+// enum E22 with C implements { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Context: This isn't a type.
+// enum E22 with C implements { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Error: 'C' isn't a type.
+// enum E25 with C with { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Context: This isn't a type.
+// enum E25 with C with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Error: 'D' isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Context: This isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:7: Error: The type 'C' can't be mixed in.
+// class A extends B with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:7: Error: The type 'C' can't be mixed in.
+// class A4 with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:7: Error: The type 'C' can't be mixed in.
+// class A5 with C extends B implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:7: Error: The type 'C' can't be mixed in.
+// class A6 extends B with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:7: Error: The type 'C' can't be mixed in.
+// class A7 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:7: Error: The type 'C' can't be mixed in.
+// class A8 extends B with C implements D with C {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:7: Error: The type 'C' can't be mixed in.
+// class A13 extends B with C with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:7: Error: The type 'C' can't be mixed in.
+// class A14 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:7: Error: The type 'D' can't be mixed in.
+// class A15 with D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:7: Error: The type 'C' can't be mixed in.
+// class A21 extends B with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:7: Error: The type 'C' can't be mixed in.
+// class A22 with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:7: Error: The type 'C' can't be mixed in.
+// class A25 with C with {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:7: Error: The type 'C' can't be mixed in.
+// class N = B with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:7: Error: The type 'D' can't be mixed in.
+// class N2 = implements D extends B with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:7: Error: The type 'D' can't be mixed in.
+// class N3 = implements D with C extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:7: Error: The type 'C' can't be mixed in.
+// class N6 = B with C implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:7: Error: The type 'C' can't be mixed in.
+// class N7 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:7: Error: The type 'C' can't be mixed in.
+// class N8 = B with C implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:7: Error: The type 'C' can't be mixed in.
+// class N13 = B with C with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:7: Error: The type 'C' can't be mixed in.
+// class N14 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:7: Error: The type 'D' can't be mixed in.
+// class N16 = implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:7: Error: The type 'D' can't be mixed in.
+// class N17 = implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:7: Error: The type 'C' can't be mixed in.
+// class N21 = B with C implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:7: Error: The type 'D' can't be mixed in.
+// class N26 = implements D implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:6: Error: The type 'C' can't be mixed in.
+// enum E extends B with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:6: Error: The type 'C' can't be mixed in.
+// enum E4 with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:6: Error: The type 'C' can't be mixed in.
+// enum E5 with C extends B implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:6: Error: The type 'C' can't be mixed in.
+// enum E6 extends B with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:6: Error: The type 'C' can't be mixed in.
+// enum E7 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:6: Error: The type 'C' can't be mixed in.
+// enum E8 extends B with C implements D with C { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:6: Error: The type 'C' can't be mixed in.
+// enum E13 extends B with C with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:6: Error: The type 'C' can't be mixed in.
+// enum E14 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:6: Error: The type 'D' can't be mixed in.
+// enum E15 with D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:6: Error: The type 'C' can't be mixed in.
+// enum E21 extends B with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:6: Error: The type 'C' can't be mixed in.
+// enum E22 with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:6: Error: The type 'C' can't be mixed in.
+// enum E25 with C with { element }
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class _A&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&B&C
+    ;
+}
+class A extends self::_A&B&C {
+  synthetic constructor •() → self::A
+    ;
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    ;
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    ;
+}
+abstract class _A4&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A4&Object&C
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::_A4&Object&C {
+  synthetic constructor •() → self::A4
+    ;
+}
+abstract class _A5&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A5&Object&C
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::_A5&Object&C {
+  synthetic constructor •() → self::A5
+    ;
+}
+abstract class _A6&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A6&B&C
+    ;
+}
+class A6 extends self::_A6&B&C {
+  synthetic constructor •() → self::A6
+    ;
+}
+abstract class _A7&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A7&B&C
+    ;
+}
+class A7 extends self::_A7&B&C {
+  synthetic constructor •() → self::A7
+    ;
+}
+abstract class _A8&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A8&B&C
+    ;
+}
+class A8 extends self::_A8&B&C {
+  synthetic constructor •() → self::A8
+    ;
+}
+class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    ;
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    ;
+}
+class A11 extends core::Object {
+  synthetic constructor •() → self::A11
+    ;
+}
+class A12 extends core::Object {
+  synthetic constructor •() → self::A12
+    ;
+}
+abstract class _A13&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A13&B&C
+    ;
+}
+class A13 extends self::_A13&B&C {
+  synthetic constructor •() → self::A13
+    ;
+}
+abstract class _A14&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A14&B&C
+    ;
+}
+class A14 extends self::_A14&B&C {
+  synthetic constructor •() → self::A14
+    ;
+}
+abstract class _A15&Object&D extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A15&Object&D
+    : super core::Object::•()
+    ;
+}
+class A15 extends self::_A15&Object&D {
+  synthetic constructor •() → self::A15
+    ;
+}
+class A16 extends core::Object {
+  synthetic constructor •() → self::A16
+    ;
+}
+class A17 extends core::Object {
+  synthetic constructor •() → self::A17
+    ;
+}
+class A18 extends core::Object {
+  synthetic constructor •() → self::A18
+    ;
+}
+class A19 extends core::Object {
+  synthetic constructor •() → self::A19
+    ;
+}
+class A20 extends core::Object {
+  synthetic constructor •() → self::A20
+    ;
+}
+abstract class _A21&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A21&B&C
+    ;
+}
+class A21 extends self::_A21&B&C {
+  synthetic constructor •() → self::A21
+    ;
+}
+abstract class _A22&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A22&Object&C
+    : super core::Object::•()
+    ;
+}
+class A22 extends self::_A22&Object&C {
+  synthetic constructor •() → self::A22
+    ;
+}
+class A23 extends core::Object {
+  synthetic constructor •() → self::A23
+    ;
+}
+class A24 extends core::Object {
+  synthetic constructor •() → self::A24
+    ;
+}
+abstract class _A25&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A25&Object&C
+    : super core::Object::•()
+    ;
+}
+class A25 extends self::_A25&Object&C {
+  synthetic constructor •() → self::A25
+    ;
+}
+class A26 extends core::Object {
+  synthetic constructor •() → self::A26
+    ;
+}
+class N extends core::Object {
+  synthetic constructor •() → self::N
+    ;
+}
+class C#8 extends core::Object {
+  synthetic constructor •() → self::C#8
+    ;
+}
+class N2 extends core::Object {
+  synthetic constructor •() → self::N2
+    ;
+}
+class B#10 extends core::Object {
+  synthetic constructor •() → self::B#10
+    ;
+}
+class N3 extends core::Object {
+  synthetic constructor •() → self::N3
+    ;
+}
+class D#7 extends core::Object {
+  synthetic constructor •() → self::D#7
+    ;
+}
+class N6 extends core::Object {
+  synthetic constructor •() → self::N6
+    ;
+}
+class N7 extends core::Object {
+  synthetic constructor •() → self::N7
+    ;
+}
+class N8 extends core::Object {
+  synthetic constructor •() → self::N8
+    ;
+}
+class N13 extends core::Object {
+  synthetic constructor •() → self::N13
+    ;
+}
+class N14 extends core::Object {
+  synthetic constructor •() → self::N14
+    ;
+}
+class N16 extends core::Object {
+  synthetic constructor •() → self::N16
+    ;
+}
+class N17 extends core::Object {
+  synthetic constructor •() → self::N17
+    ;
+}
+class N21 extends core::Object {
+  synthetic constructor •() → self::N21
+    ;
+}
+class N26 extends core::Object {
+  synthetic constructor •() → self::N26
+    ;
+}
+abstract class _E&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E extends self::_E&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E> values = const <self::E>[self::E::element];
+  static const field self::E element = const self::E::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field self::E1 element = const self::E1::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::element];
+  static const field self::E3 element = const self::E3::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E4&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E4 extends self::_E4&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::element];
+  static const field self::E4 element = const self::E4::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E4
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E5&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E5 extends self::_E5&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::element];
+  static const field self::E5 element = const self::E5::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E5
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E6&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E6 extends self::_E6&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E7&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E7 extends self::_E7&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E8&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E8 extends self::_E8&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = const <self::E11>[self::E11::element];
+  static const field self::E11 element = const self::E11::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = const <self::E12>[];
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E13&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E13&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E13 extends self::_E13&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E13> values = const <self::E13>[self::E13::element];
+  static const field self::E13 element = const self::E13::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E13
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E14&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E14&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E14 extends self::_E14&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E14> values = const <self::E14>[self::E14::element];
+  static const field self::E14 element = const self::E14::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E14
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E15&_Enum&D extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E15&_Enum&D
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E15 extends self::_E15&_Enum&D /*isEnum*/  {
+  static const field core::List<self::E15> values = const <self::E15>[self::E15::element];
+  static const field self::E15 element = const self::E15::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E15
+    ;
+  method toString() → core::String
+    return "E15.${this.{core::_Enum::_name}{core::String}}";
+}
+class E16 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E16> values = const <self::E16>[self::E16::element];
+  static const field self::E16 element = const self::E16::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E16
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E16.${this.{core::_Enum::_name}{core::String}}";
+}
+class E17 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E17> values = const <self::E17>[self::E17::element];
+  static const field self::E17 element = const self::E17::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E17
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E17.${this.{core::_Enum::_name}{core::String}}";
+}
+class E18 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E18> values = const <self::E18>[self::E18::element];
+  static const field self::E18 element = const self::E18::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E18
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E18.${this.{core::_Enum::_name}{core::String}}";
+}
+class E19 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E19> values = const <self::E19>[self::E19::element];
+  static const field self::E19 element = const self::E19::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E19
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E19.${this.{core::_Enum::_name}{core::String}}";
+}
+class E20 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E20> values = const <self::E20>[self::E20::element];
+  static const field self::E20 element = const self::E20::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E20
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E20.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E21&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E21&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E21 extends self::_E21&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E21> values = const <self::E21>[self::E21::element];
+  static const field self::E21 element = const self::E21::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E21
+    ;
+  method toString() → core::String
+    return "E21.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E22&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E22&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E22 extends self::_E22&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E22> values = const <self::E22>[self::E22::element];
+  static const field self::E22 element = const self::E22::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E22
+    ;
+  method toString() → core::String
+    return "E22.${this.{core::_Enum::_name}{core::String}}";
+}
+class E23 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E23> values = const <self::E23>[self::E23::element];
+  static const field self::E23 element = const self::E23::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E23
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E23.${this.{core::_Enum::_name}{core::String}}";
+}
+class E24 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E24> values = const <self::E24>[self::E24::element];
+  static const field self::E24 element = const self::E24::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E24
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E24.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E25&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E25&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E25 extends self::_E25&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E25> values = const <self::E25>[self::E25::element];
+  static const field self::E25 element = const self::E25::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E25
+    ;
+  method toString() → core::String
+    return "E25.${this.{core::_Enum::_name}{core::String}}";
+}
+class E26 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E26> values = const <self::E26>[self::E26::element];
+  static const field self::E26 element = const self::E26::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E26
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E26.${this.{core::_Enum::_name}{core::String}}";
+}
+static field dynamic with;
+static field dynamic C;
+static field dynamic extends;
+static field dynamic B;
+static field invalid-type implements;
+static field dynamic D;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:61:6 -> ListConstant(const <E*>[const E{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:61:40 -> InstanceConstant(const E{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:62:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:62:41 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:63:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:63:41 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:64:6 -> ListConstant(const <E3*>[const E3{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:64:41 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:65:6 -> ListConstant(const <E4*>[const E4{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:65:41 -> InstanceConstant(const E4{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:66:6 -> ListConstant(const <E5*>[const E5{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:66:41 -> InstanceConstant(const E5{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:67:6 -> ListConstant(const <E6*>[const E6{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:67:51 -> InstanceConstant(const E6{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:68:6 -> ListConstant(const <E7*>[const E7{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:68:54 -> InstanceConstant(const E7{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:69:6 -> ListConstant(const <E8*>[const E8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:69:48 -> InstanceConstant(const E8{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:70:6 -> ListConstant(const <E9*>[const E9{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:70:51 -> InstanceConstant(const E9{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:71:6 -> ListConstant(const <E10*>[const E10{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:71:55 -> InstanceConstant(const E10{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:72:6 -> ListConstant(const <E11*>[const E11{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:72:49 -> InstanceConstant(const E11{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:73:6 -> ListConstant(const <E12*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:74:6 -> ListConstant(const <E13*>[const E13{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:74:49 -> InstanceConstant(const E13{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:75:6 -> ListConstant(const <E14*>[const E14{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:75:55 -> InstanceConstant(const E14{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:76:6 -> ListConstant(const <E15*>[const E15{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:76:29 -> InstanceConstant(const E15{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:77:6 -> ListConstant(const <E16*>[const E16{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:77:35 -> InstanceConstant(const E16{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:78:6 -> ListConstant(const <E17*>[const E17{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:78:32 -> InstanceConstant(const E17{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:79:6 -> ListConstant(const <E18*>[const E18{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:79:20 -> InstanceConstant(const E18{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:80:6 -> ListConstant(const <E19*>[const E19{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:80:27 -> InstanceConstant(const E19{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:81:6 -> ListConstant(const <E20*>[const E20{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:81:17 -> InstanceConstant(const E20{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:82:6 -> ListConstant(const <E21*>[const E21{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:82:40 -> InstanceConstant(const E21{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:83:6 -> ListConstant(const <E22*>[const E22{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:83:30 -> InstanceConstant(const E22{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:84:6 -> ListConstant(const <E23*>[const E23{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:84:23 -> InstanceConstant(const E23{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:85:6 -> ListConstant(const <E24*>[const E24{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:85:30 -> InstanceConstant(const E24{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:86:6 -> ListConstant(const <E25*>[const E25{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:86:24 -> InstanceConstant(const E25{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///class_header.dart:87:6 -> ListConstant(const <E26*>[const E26{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///class_header.dart:87:36 -> InstanceConstant(const E26{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 188, effectively constant: 53
diff --git a/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.transformed.expect
new file mode 100644
index 0000000..fcda3be
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/class_header.dart.weak.transformed.expect
@@ -0,0 +1,3356 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A1 extends B implements D with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:23: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                       ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A2 implements D extends B with C {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:23: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A3 implements D with C extends B {}
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A3 implements D with C extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:30: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A4 with C implements D extends B {}
+//                              ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:17: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A5 with C extends B implements D {}
+//                 ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A6 extends B with C implements D extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:40: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A7 extends B with C implements D implements D {}
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:40: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A8 extends B with C implements D with C {}
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:33: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A9 extends B implements D with C extends B {}
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:40: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A9 extends B implements D with C extends B {}
+//                                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A10 extends B implements D with C implements D {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A10 extends B implements D with C implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:34: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A11 extends B implements D with C with C {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:41: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A11 extends B implements D with C with C {}
+//                                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A12 extends B extends B with C implements D {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:28: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A13 extends B with C with C implements D {}
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:41: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A14 extends B with C implements D implements D {}
+//                                         ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:18: Error: The extends clause must be before the with clause.
+// Try moving the extends clause before the with clause.
+// class A15 with D extends B {}
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:24: Error: The extends clause must be before the implements clause.
+// Try moving the extends clause before the implements clause.
+// class A16 implements D extends B {}
+//                        ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:24: Error: The with clause must be before the implements clause.
+// Try moving the with clause before the implements clause.
+// class A17 implements D with C {}
+//                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:23:19: Error: Expected a type, but got '{'.
+// class A18 extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:26: Error: Expected a type, but got '{'.
+// class A19 extends B with {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:25:16: Error: Expected a type, but got '{'.
+// class A20 with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:39: Error: Expected a type, but got '{'.
+// class A21 extends B with C implements {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:29: Error: Expected a type, but got '{'.
+// class A22 with C implements {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:28:22: Error: Expected a type, but got '{'.
+// class A23 implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:29: Error: Expected a type, but got '{'.
+// class A24 extends B extends {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:21: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class A24 extends B extends {}
+//                     ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:23: Error: Expected a type, but got '{'.
+// class A25 with C with {}
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:18: Error: Each class definition can have at most one with clause.
+// Try combining all of the with clauses into a single clause.
+// class A25 with C with {}
+//                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:35: Error: Expected a type, but got '{'.
+// class A26 implements D implements {}
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:24: Error: Each class definition can have at most one implements clause.
+// Try combining all of the implements clauses into a single clause.
+// class A26 implements D implements {}
+//                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:14: Error: Expected 'with' before this.
+// class N1 = B implements D with C;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Error: Expected ';' after this.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected 'with' before this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: Expected ';' after this.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Error: 'with' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:27: Context: Previous declaration of 'with'.
+// class N1 = B implements D with C;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Error: 'C' is already declared in this scope.
+// class N2 = implements D extends B with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:32: Context: Previous declaration of 'C'.
+// class N1 = B implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: The built-in identifier 'implements' can't be used as a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected 'with' before this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Error: 'with' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:35: Context: Previous declaration of 'with'.
+// class N2 = implements D extends B with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Error: 'C' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:40: Context: Previous declaration of 'C'.
+// class N2 = implements D extends B with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: Expected ';' after this.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Error: 'extends' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:25: Context: Previous declaration of 'extends'.
+// class N2 = implements D extends B with C;
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Error: 'B' is already declared in this scope.
+// class N3 = implements D with C extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:33: Context: Previous declaration of 'B'.
+// class N2 = implements D extends B with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:12: Error: Expected a type, but got 'with'.
+// class N4 = with C implements D extends B;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: Expected ';' after this.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Error: 'extends' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:32: Context: Previous declaration of 'extends'.
+// class N3 = implements D with C extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Error: 'B' is already declared in this scope.
+// class N4 = with C implements D extends B;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:40: Context: Previous declaration of 'B'.
+// class N3 = implements D with C extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:12: Error: Expected a type, but got 'with'.
+// class N5 = with C extends B implements D;
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Error: 'extends' is already declared in this scope.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:32: Context: Previous declaration of 'extends'.
+// class N4 = with C implements D extends B;
+//                                ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Error: Expected ';' after this.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: Expected ';' after this.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Error: 'extends' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:19: Context: Previous declaration of 'extends'.
+// class N5 = with C extends B implements D;
+//                   ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Error: 'B' is already declared in this scope.
+// class N6 = B with C implements D extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:40: Context: Previous declaration of 'B'.
+// class N4 = with C implements D extends B;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: Expected ';' after this.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Error: 'implements' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:29: Context: Previous declaration of 'implements'.
+// class N5 = with C extends B implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Error: 'D' is already declared in this scope.
+// class N7 = B with C implements D implements D;
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:40: Context: Previous declaration of 'D'.
+// class N5 = with C extends B implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: Expected ';' after this.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Error: 'with' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:25: Context: Previous declaration of 'with'.
+// class N3 = implements D with C extends B;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Error: 'C' is already declared in this scope.
+// class N8 = B with C implements D with C;
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:30: Context: Previous declaration of 'C'.
+// class N3 = implements D with C extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:14: Error: Expected 'with' before this.
+// class N9 = B implements D with C extends B;
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Error: 'with' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:34: Context: Previous declaration of 'with'.
+// class N8 = B with C implements D with C;
+//                                  ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Error: 'C' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:39: Context: Previous declaration of 'C'.
+// class N8 = B with C implements D with C;
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: Expected ';' after this.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Error: 'extends' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:34: Context: Previous declaration of 'extends'.
+// class N6 = B with C implements D extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Error: 'B' is already declared in this scope.
+// class N9 = B implements D with C extends B;
+//                                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:42: Context: Previous declaration of 'B'.
+// class N6 = B with C implements D extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:15: Error: Expected 'with' before this.
+// class N10 = B implements D with C implements D;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Error: 'with' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:27: Context: Previous declaration of 'with'.
+// class N9 = B implements D with C extends B;
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: Expected ';' after this.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Error: 'implements' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:34: Context: Previous declaration of 'implements'.
+// class N7 = B with C implements D implements D;
+//                                  ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Error: 'D' is already declared in this scope.
+// class N10 = B implements D with C implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:45: Context: Previous declaration of 'D'.
+// class N7 = B with C implements D implements D;
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:15: Error: Expected 'with' before this.
+// class N11 = B implements D with C with C;
+//               ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:28: Context: Previous declaration of 'with'.
+// class N10 = B implements D with C implements D;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:32: Context: Previous declaration of 'C'.
+// class N9 = B implements D with C extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: Expected ';' after this.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Error: 'with' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:28: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Error: 'C' is already declared in this scope.
+// class N11 = B implements D with C with C;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:33: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected 'with' before this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Error: 'extends' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:34: Context: Previous declaration of 'extends'.
+// class N9 = B implements D with C extends B;
+//                                  ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Error: 'B' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:42: Context: Previous declaration of 'B'.
+// class N9 = B implements D with C extends B;
+//                                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Error: 'with' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:35: Context: Previous declaration of 'with'.
+// class N11 = B implements D with C with C;
+//                                   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: Expected ';' after this.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Error: 'implements' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:35: Context: Previous declaration of 'implements'.
+// class N10 = B implements D with C implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Error: 'D' is already declared in this scope.
+// class N12 = B extends B with C implements D;
+//                                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:46: Context: Previous declaration of 'D'.
+// class N10 = B implements D with C implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Error: 'with' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:25: Context: Previous declaration of 'with'.
+// class N12 = B extends B with C implements D;
+//                         ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: Expected ';' after this.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Error: 'implements' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:32: Context: Previous declaration of 'implements'.
+// class N12 = B extends B with C implements D;
+//                                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Error: 'D' is already declared in this scope.
+// class N13 = B with C with C implements D;
+//                                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:43: Context: Previous declaration of 'D'.
+// class N12 = B extends B with C implements D;
+//                                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: Expected ';' after this.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Error: 'implements' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:29: Context: Previous declaration of 'implements'.
+// class N13 = B with C with C implements D;
+//                             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Error: 'D' is already declared in this scope.
+// class N14 = B with C implements D implements D;
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:40: Context: Previous declaration of 'D'.
+// class N13 = B with C with C implements D;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:13: Error: Expected a type, but got 'with'.
+// class N15 = with D extends B;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: Expected ';' after this.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Error: 'extends' is already declared in this scope.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:15: Context: Previous declaration of 'extends'.
+// class N12 = B extends B with C implements D;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Error: 'B' is already declared in this scope.
+// class N15 = with D extends B;
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:23: Context: Previous declaration of 'B'.
+// class N12 = B extends B with C implements D;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected 'with' before this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: Expected ';' after this.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Error: 'extends' is already declared in this scope.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:20: Context: Previous declaration of 'extends'.
+// class N15 = with D extends B;
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Error: 'B' is already declared in this scope.
+// class N16 = implements D extends B;
+//                                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:28: Context: Previous declaration of 'B'.
+// class N15 = with D extends B;
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected 'with' before this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: Expected ';' after this.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Error: 'with' is already declared in this scope.
+// class N17 = implements D with C;
+//                          ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:22: Context: Previous declaration of 'with'.
+// class N13 = B with C with C implements D;
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Error: 'C' is already declared in this scope.
+// class N17 = implements D with C;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:40: Context: Previous declaration of 'C'.
+// class N11 = B implements D with C with C;
+//                                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected a type, but got ';'.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:51:13: Error: Expected 'with' before this.
+// class N18 = ;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:19: Error: Expected a type, but got ';'.
+// class N19 = B with;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:13: Error: Expected a type, but got 'with'.
+// class N20 = with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:53:17: Error: Expected a type, but got ';'.
+// class N20 = with;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:32: Error: Expected a type, but got ';'.
+// class N21 = B with C implements;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:13: Error: Expected a type, but got 'with'.
+// class N22 = with C implements;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:30: Error: Expected a type, but got ';'.
+// class N22 = with C implements;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:23: Error: Expected 'with' before this.
+// class N23 = implements;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Expected 'with' before this.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: Expected ';' after this.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Error: 'extends' is already declared in this scope.
+// class N24 = B extends;
+//               ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:26: Context: Previous declaration of 'extends'.
+// class N16 = implements D extends B;
+//                          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:13: Error: Expected a type, but got 'with'.
+// class N25 = with C with;
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: Expected ';' after this.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Error: 'with' is already declared in this scope.
+// class N25 = with C with;
+//                    ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:26: Context: Previous declaration of 'with'.
+// class N17 = implements D with C;
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: The built-in identifier 'implements' can't be used as a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: Expected 'with' before this.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:36: Error: Expected a type, but got ';'.
+// class N26 = implements D implements;
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:8: Error: Unexpected tokens.
+// enum E extends B with C implements D { element }
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:9: Error: Unexpected tokens.
+// enum E1 extends B implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E1 extends B implements D with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:22: Error: Unexpected tokens.
+// enum E2 implements D extends B with C { element }
+//                      ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E2 implements D extends B with C { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:22: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E3 implements D with C extends B { element }
+//                      ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:29: Error: Unexpected tokens.
+// enum E3 implements D with C extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:29: Error: Unexpected tokens.
+// enum E4 with C implements D extends B { element }
+//                             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:16: Error: Unexpected tokens.
+// enum E5 with C extends B implements D { element }
+//                ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:9: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:39: Error: Unexpected tokens.
+// enum E6 extends B with C implements D extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:9: Error: Unexpected tokens.
+// enum E7 extends B with C implements D implements D { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:39: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E7 extends B with C implements D implements D { element }
+//                                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:9: Error: Unexpected tokens.
+// enum E8 extends B with C implements D with C { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:39: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E8 extends B with C implements D with C { element }
+//                                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:9: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//         ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:32: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E9 extends B implements D with C extends B { element }
+//                                ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:39: Error: Unexpected tokens.
+// enum E9 extends B implements D with C extends B { element }
+//                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:10: Error: Unexpected tokens.
+// enum E10 extends B implements D with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E10 extends B implements D with C implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:10: Error: Unexpected tokens.
+// enum E11 extends B implements D with C with C { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:33: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E11 extends B implements D with C with C { element }
+//                                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:40: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E11 extends B implements D with C with C { element }
+//                                        ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected a enum body, but got 'extends'.
+// An enum definition must have a body with at least one constant name.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:15: Context: Previous declaration of 'extends'.
+// class N24 = B extends;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:34: Context: Previous declaration of 'B'.
+// class N16 = implements D extends B;
+//                                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:20: Error: 'extends' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                    ^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:10: Context: Previous declaration of 'extends'.
+// enum E12 extends B extends B with C implements D { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Error: 'B' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:18: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:30: Error: 'with' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                              ^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:20: Context: Previous declaration of 'with'.
+// class N25 = with C with;
+//                    ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:37: Error: 'implements' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                     ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:35: Context: Previous declaration of 'implements'.
+// class N14 = B with C implements D implements D;
+//                                   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Error: 'D' is already declared in this scope.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:46: Context: Previous declaration of 'D'.
+// class N14 = B with C implements D implements D;
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:10: Error: Unexpected tokens.
+// enum E13 extends B with C with C implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:27: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E13 extends B with C with C implements D { element }
+//                           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:10: Error: Unexpected tokens.
+// enum E14 extends B with C implements D implements D { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:40: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E14 extends B with C implements D implements D { element }
+//                                        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:17: Error: Unexpected tokens.
+// enum E15 with D extends B { element }
+//                 ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:23: Error: Unexpected tokens.
+// enum E16 implements D extends B { element }
+//                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:23: Error: The 'with' clause must come before the 'implements' clause.
+// Try moving the 'with' clause before the 'implements' clause.
+// enum E17 implements D with C { element }
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:79:10: Error: Unexpected token 'extends'.
+// enum E18 extends { element }
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:10: Error: Unexpected tokens.
+// enum E19 extends B with { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:80:25: Error: Expected a type, but got '{'.
+// enum E19 extends B with { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:81:15: Error: Expected a type, but got '{'.
+// enum E20 with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:10: Error: Unexpected tokens.
+// enum E21 extends B with C implements { element }
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:38: Error: Expected a type, but got '{'.
+// enum E21 extends B with C implements { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:28: Error: Expected a type, but got '{'.
+// enum E22 with C implements { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:84:21: Error: Expected a type, but got '{'.
+// enum E23 implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:85:10: Error: Unexpected tokens.
+// enum E24 extends B extends { element }
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:17: Error: Each 'enum' definition can have at most one 'with' clause.
+// Try combining all of the 'with' clauses into a single clause.
+// enum E25 with C with { element }
+//                 ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:23: Error: Each 'enum' definition can have at most one 'implements' clause.
+// Try combining all of the 'implements' clauses into a single clause.
+// enum E26 implements D implements { element }
+//                       ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:89:7: Error: 'B' is already declared in this scope.
+// class B {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:28: Context: Previous declaration of 'B'.
+// enum E12 extends B extends B with C implements D { element }
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:90:7: Error: 'C' is already declared in this scope.
+// class C {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:31: Context: Previous declaration of 'C'.
+// class N17 = implements D with C;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:91:7: Error: 'D' is already declared in this scope.
+// class D {}
+//       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:48: Context: Previous declaration of 'D'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Error: 'B' isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:17: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Error: 'C' isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:24: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Error: 'D' isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:37: Context: This isn't a type.
+// class A extends B with C implements D {}
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Error: 'B' isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:18: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Error: 'D' isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:31: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Error: 'C' isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:6:38: Context: This isn't a type.
+// class A1 extends B implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Error: 'D' isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:21: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Error: 'B' isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:31: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Error: 'C' isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:7:38: Context: This isn't a type.
+// class A2 implements D extends B with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Error: 'D' isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:21: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Error: 'C' isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:28: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Error: 'B' isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:8:38: Context: This isn't a type.
+// class A3 implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Error: 'C' isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:15: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Error: 'D' isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:28: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Error: 'B' isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:38: Context: This isn't a type.
+// class A4 with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Error: 'C' isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:15: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Error: 'B' isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:25: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Error: 'D' isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:38: Context: This isn't a type.
+// class A5 with C extends B implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:18: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Error: 'C' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:25: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Error: 'D' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:38: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Error: 'B' isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:48: Context: This isn't a type.
+// class A6 extends B with C implements D extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Error: 'B' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:18: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Error: 'C' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:25: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:38: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Error: 'D' isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:51: Context: This isn't a type.
+// class A7 extends B with C implements D implements D {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Error: 'B' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:18: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:25: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Error: 'D' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:38: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Error: 'C' isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:45: Context: This isn't a type.
+// class A8 extends B with C implements D with C {}
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:18: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Error: 'D' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:31: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Error: 'C' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:38: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Error: 'B' isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:14:48: Context: This isn't a type.
+// class A9 extends B implements D with C extends B {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Error: 'B' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:19: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:32: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Error: 'C' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:39: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Error: 'D' isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:15:52: Context: This isn't a type.
+// class A10 extends B implements D with C implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Error: 'B' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:19: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Error: 'D' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:32: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:39: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Error: 'C' isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:16:46: Context: This isn't a type.
+// class A11 extends B implements D with C with C {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:19: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Error: 'B' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:29: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Error: 'C' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:36: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Error: 'D' isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:17:49: Context: This isn't a type.
+// class A12 extends B extends B with C implements D {}
+//                                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Error: 'B' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:19: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:26: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Error: 'C' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:33: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Error: 'D' isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:46: Context: This isn't a type.
+// class A13 extends B with C with C implements D {}
+//                                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Error: 'B' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:19: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Error: 'C' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:26: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:39: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Error: 'D' isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:52: Context: This isn't a type.
+// class A14 extends B with C implements D implements D {}
+//                                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Error: 'D' isn't a type.
+// class A15 with D extends B {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:16: Context: This isn't a type.
+// class A15 with D extends B {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Error: 'B' isn't a type.
+// class A15 with D extends B {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:26: Context: This isn't a type.
+// class A15 with D extends B {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Error: 'D' isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:22: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Error: 'B' isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:21:32: Context: This isn't a type.
+// class A16 implements D extends B {}
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Error: 'D' isn't a type.
+// class A17 implements D with C {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:22: Context: This isn't a type.
+// class A17 implements D with C {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Error: 'C' isn't a type.
+// class A17 implements D with C {}
+//                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:22:29: Context: This isn't a type.
+// class A17 implements D with C {}
+//                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Error: 'B' isn't a type.
+// class A19 extends B with {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:24:19: Context: This isn't a type.
+// class A19 extends B with {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Error: 'B' isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:19: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Error: 'C' isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:26: Context: This isn't a type.
+// class A21 extends B with C implements {}
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Error: 'C' isn't a type.
+// class A22 with C implements {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:16: Context: This isn't a type.
+// class A22 with C implements {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Error: 'B' isn't a type.
+// class A24 extends B extends {}
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:29:19: Context: This isn't a type.
+// class A24 extends B extends {}
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Error: 'C' isn't a type.
+// class A25 with C with {}
+//                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:16: Context: This isn't a type.
+// class A25 with C with {}
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Error: 'D' isn't a type.
+// class A26 implements D implements {}
+//                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:31:22: Context: This isn't a type.
+// class A26 implements D implements {}
+//                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Error: 'B' isn't a type.
+// class N = B with C implements D;
+//           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:11: Context: This isn't a type.
+// class N = B with C implements D;
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Error: 'C' isn't a type.
+// class N = B with C implements D;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:18: Context: This isn't a type.
+// class N = B with C implements D;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Error: 'D' isn't a type.
+// class N = B with C implements D;
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:31: Context: This isn't a type.
+// class N = B with C implements D;
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Error: 'B' isn't a type.
+// class N1 = B implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:12: Context: This isn't a type.
+// class N1 = B implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Error: 'D' isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:34:25: Context: This isn't a type.
+// class N1 = B implements D with C;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Error: 'implements' isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:12: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Error: 'D' isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:23: Context: This isn't a type.
+// class N2 = implements D extends B with C;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Error: 'implements' isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:12: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//            ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Error: 'D' isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:23: Context: This isn't a type.
+// class N3 = implements D with C extends B;
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Error: 'C' isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:17: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Error: 'D' isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:37:30: Context: This isn't a type.
+// class N4 = with C implements D extends B;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Error: 'C' isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:17: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: 'B' isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Context: This isn't a type.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Error: 'B' isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:12: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Error: 'C' isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:19: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Error: 'D' isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:32: Context: This isn't a type.
+// class N6 = B with C implements D extends B;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Error: 'B' isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:12: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Error: 'C' isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:19: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Error: 'D' isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:32: Context: This isn't a type.
+// class N7 = B with C implements D implements D;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Error: 'B' isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:12: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Error: 'C' isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:19: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Error: 'D' isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:32: Context: This isn't a type.
+// class N8 = B with C implements D with C;
+//                                ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Error: 'B' isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:12: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Error: 'D' isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:42:25: Context: This isn't a type.
+// class N9 = B implements D with C extends B;
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Error: 'B' isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:13: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Error: 'D' isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:26: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: 'C' isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Context: This isn't a type.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Error: 'B' isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:13: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Error: 'D' isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:44:26: Context: This isn't a type.
+// class N11 = B implements D with C with C;
+//                          ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Error: 'B' isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:13: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: 'C' isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Context: This isn't a type.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Error: 'B' isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:13: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:20: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: 'C' isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Context: This isn't a type.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Error: 'B' isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:13: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Error: 'C' isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:20: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Error: 'D' isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:33: Context: This isn't a type.
+// class N14 = B with C implements D implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Error: 'D' isn't a type.
+// class N15 = with D extends B;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:48:18: Context: This isn't a type.
+// class N15 = with D extends B;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Error: 'implements' isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:13: Context: This isn't a type.
+// class N16 = implements D extends B;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Error: 'D' isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:24: Context: This isn't a type.
+// class N16 = implements D extends B;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Error: 'implements' isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:13: Context: This isn't a type.
+// class N17 = implements D with C;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Error: 'D' isn't a type.
+// class N17 = implements D with C;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:24: Context: This isn't a type.
+// class N17 = implements D with C;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Error: 'B' isn't a type.
+// class N19 = B with;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:52:13: Context: This isn't a type.
+// class N19 = B with;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Error: 'B' isn't a type.
+// class N21 = B with C implements;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:13: Context: This isn't a type.
+// class N21 = B with C implements;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Error: 'C' isn't a type.
+// class N21 = B with C implements;
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:20: Context: This isn't a type.
+// class N21 = B with C implements;
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Error: 'C' isn't a type.
+// class N22 = with C implements;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:55:18: Context: This isn't a type.
+// class N22 = with C implements;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Error: 'implements' isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:56:13: Context: This isn't a type.
+// class N23 = implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Error: 'B' isn't a type.
+// class N24 = B extends;
+//             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:57:13: Context: This isn't a type.
+// class N24 = B extends;
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Error: 'C' isn't a type.
+// class N25 = with C with;
+//                  ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:58:18: Context: This isn't a type.
+// class N25 = with C with;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Error: 'implements' isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:13: Context: This isn't a type.
+// class N26 = implements D implements;
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Error: 'D' isn't a type.
+// class N26 = implements D implements;
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:24: Context: This isn't a type.
+// class N26 = implements D implements;
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Error: 'C' isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:23: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Error: 'D' isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:36: Context: This isn't a type.
+// enum E extends B with C implements D { element }
+//                                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Error: 'D' isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:62:30: Context: This isn't a type.
+// enum E1 extends B implements D with C { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Error: 'D' isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:63:20: Context: This isn't a type.
+// enum E2 implements D extends B with C { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Error: 'D' isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:64:20: Context: This isn't a type.
+// enum E3 implements D with C extends B { element }
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Error: 'C' isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:14: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Error: 'D' isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:27: Context: This isn't a type.
+// enum E4 with C implements D extends B { element }
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Error: 'C' isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:14: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Error: 'D' isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:37: Context: This isn't a type.
+// enum E5 with C extends B implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Error: 'C' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:24: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Error: 'D' isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:37: Context: This isn't a type.
+// enum E6 extends B with C implements D extends B { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Error: 'C' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:24: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Error: 'D' isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:37: Context: This isn't a type.
+// enum E7 extends B with C implements D implements D { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Error: 'C' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:24: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Error: 'D' isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:37: Context: This isn't a type.
+// enum E8 extends B with C implements D with C { element }
+//                                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Error: 'D' isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:70:30: Context: This isn't a type.
+// enum E9 extends B implements D with C extends B { element }
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Error: 'D' isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:71:31: Context: This isn't a type.
+// enum E10 extends B implements D with C implements D { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Error: 'D' isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:72:31: Context: This isn't a type.
+// enum E11 extends B implements D with C with C { element }
+//                               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: 'C' isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Context: This isn't a type.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Error: 'C' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:25: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Error: 'D' isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:45: Context: This isn't a type.
+// enum E13 extends B with C with C implements D { element }
+//                                             ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Error: 'C' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:25: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Error: 'D' isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:38: Context: This isn't a type.
+// enum E14 extends B with C implements D implements D { element }
+//                                      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Error: 'D' isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:15: Context: This isn't a type.
+// enum E15 with D extends B { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Error: 'D' isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:77:21: Context: This isn't a type.
+// enum E16 implements D extends B { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Error: 'D' isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:78:21: Context: This isn't a type.
+// enum E17 implements D with C { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Error: 'C' isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:25: Context: This isn't a type.
+// enum E21 extends B with C implements { element }
+//                         ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Error: 'C' isn't a type.
+// enum E22 with C implements { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:15: Context: This isn't a type.
+// enum E22 with C implements { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Error: 'C' isn't a type.
+// enum E25 with C with { element }
+//               ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:15: Context: This isn't a type.
+// enum E25 with C with { element }
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Error: 'D' isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:87:21: Context: This isn't a type.
+// enum E26 implements D implements { element }
+//                     ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:5:7: Error: The type 'C' can't be mixed in.
+// class A extends B with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:9:7: Error: The type 'C' can't be mixed in.
+// class A4 with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:10:7: Error: The type 'C' can't be mixed in.
+// class A5 with C extends B implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:11:7: Error: The type 'C' can't be mixed in.
+// class A6 extends B with C implements D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:12:7: Error: The type 'C' can't be mixed in.
+// class A7 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:13:7: Error: The type 'C' can't be mixed in.
+// class A8 extends B with C implements D with C {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:18:7: Error: The type 'C' can't be mixed in.
+// class A13 extends B with C with C implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:19:7: Error: The type 'C' can't be mixed in.
+// class A14 extends B with C implements D implements D {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:20:7: Error: The type 'D' can't be mixed in.
+// class A15 with D extends B {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:26:7: Error: The type 'C' can't be mixed in.
+// class A21 extends B with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:27:7: Error: The type 'C' can't be mixed in.
+// class A22 with C implements {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:30:7: Error: The type 'C' can't be mixed in.
+// class A25 with C with {}
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:33:7: Error: The type 'C' can't be mixed in.
+// class N = B with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:35:7: Error: The type 'D' can't be mixed in.
+// class N2 = implements D extends B with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:36:7: Error: The type 'D' can't be mixed in.
+// class N3 = implements D with C extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:39:7: Error: The type 'C' can't be mixed in.
+// class N6 = B with C implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:40:7: Error: The type 'C' can't be mixed in.
+// class N7 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:41:7: Error: The type 'C' can't be mixed in.
+// class N8 = B with C implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:7: Error: The type 'C' can't be mixed in.
+// class N13 = B with C with C implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:47:7: Error: The type 'C' can't be mixed in.
+// class N14 = B with C implements D implements D;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:49:7: Error: The type 'D' can't be mixed in.
+// class N16 = implements D extends B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:50:7: Error: The type 'D' can't be mixed in.
+// class N17 = implements D with C;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:54:7: Error: The type 'C' can't be mixed in.
+// class N21 = B with C implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:59:7: Error: The type 'D' can't be mixed in.
+// class N26 = implements D implements;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:61:6: Error: The type 'C' can't be mixed in.
+// enum E extends B with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:65:6: Error: The type 'C' can't be mixed in.
+// enum E4 with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:66:6: Error: The type 'C' can't be mixed in.
+// enum E5 with C extends B implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:67:6: Error: The type 'C' can't be mixed in.
+// enum E6 extends B with C implements D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:68:6: Error: The type 'C' can't be mixed in.
+// enum E7 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:69:6: Error: The type 'C' can't be mixed in.
+// enum E8 extends B with C implements D with C { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:74:6: Error: The type 'C' can't be mixed in.
+// enum E13 extends B with C with C implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:75:6: Error: The type 'C' can't be mixed in.
+// enum E14 extends B with C implements D implements D { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:76:6: Error: The type 'D' can't be mixed in.
+// enum E15 with D extends B { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:82:6: Error: The type 'C' can't be mixed in.
+// enum E21 extends B with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:83:6: Error: The type 'C' can't be mixed in.
+// enum E22 with C implements { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:86:6: Error: The type 'C' can't be mixed in.
+// enum E25 with C with { element }
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:38:27: Error: Can't use 'B' because it is declared more than once.
+// class N5 = with C extends B implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:43:33: Error: Can't use 'C' because it is declared more than once.
+// class N10 = B implements D with C implements D;
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:45:30: Error: Can't use 'C' because it is declared more than once.
+// class N12 = B extends B with C implements D;
+//                              ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:46:27: Error: Can't use 'C' because it is declared more than once.
+// class N13 = B with C with C implements D;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:35: Error: Can't use 'C' because it is declared more than once.
+// enum E12 extends B extends B with C implements D { element }
+//                                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Expected ';' after this.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/class_header.dart:73:52: Error: Undefined name 'element'.
+// enum E12 extends B extends B with C implements D { element }
+//                                                    ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class _A&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&B&C
+    : super core::Object::•()
+    ;
+}
+class A extends self::_A&B&C {
+  synthetic constructor •() → self::A
+    : super self::_A&B&C::•()
+    ;
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class A3 extends core::Object {
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+}
+abstract class _A4&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A4&Object&C
+    : super core::Object::•()
+    ;
+}
+class A4 extends self::_A4&Object&C {
+  synthetic constructor •() → self::A4
+    : super self::_A4&Object&C::•()
+    ;
+}
+abstract class _A5&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A5&Object&C
+    : super core::Object::•()
+    ;
+}
+class A5 extends self::_A5&Object&C {
+  synthetic constructor •() → self::A5
+    : super self::_A5&Object&C::•()
+    ;
+}
+abstract class _A6&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A6&B&C
+    : super core::Object::•()
+    ;
+}
+class A6 extends self::_A6&B&C {
+  synthetic constructor •() → self::A6
+    : super self::_A6&B&C::•()
+    ;
+}
+abstract class _A7&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A7&B&C
+    : super core::Object::•()
+    ;
+}
+class A7 extends self::_A7&B&C {
+  synthetic constructor •() → self::A7
+    : super self::_A7&B&C::•()
+    ;
+}
+abstract class _A8&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A8&B&C
+    : super core::Object::•()
+    ;
+}
+class A8 extends self::_A8&B&C {
+  synthetic constructor •() → self::A8
+    : super self::_A8&B&C::•()
+    ;
+}
+class A9 extends core::Object {
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+}
+class A11 extends core::Object {
+  synthetic constructor •() → self::A11
+    : super core::Object::•()
+    ;
+}
+class A12 extends core::Object {
+  synthetic constructor •() → self::A12
+    : super core::Object::•()
+    ;
+}
+abstract class _A13&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A13&B&C
+    : super core::Object::•()
+    ;
+}
+class A13 extends self::_A13&B&C {
+  synthetic constructor •() → self::A13
+    : super self::_A13&B&C::•()
+    ;
+}
+abstract class _A14&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A14&B&C
+    : super core::Object::•()
+    ;
+}
+class A14 extends self::_A14&B&C {
+  synthetic constructor •() → self::A14
+    : super self::_A14&B&C::•()
+    ;
+}
+abstract class _A15&Object&D extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A15&Object&D
+    : super core::Object::•()
+    ;
+}
+class A15 extends self::_A15&Object&D {
+  synthetic constructor •() → self::A15
+    : super self::_A15&Object&D::•()
+    ;
+}
+class A16 extends core::Object {
+  synthetic constructor •() → self::A16
+    : super core::Object::•()
+    ;
+}
+class A17 extends core::Object {
+  synthetic constructor •() → self::A17
+    : super core::Object::•()
+    ;
+}
+class A18 extends core::Object {
+  synthetic constructor •() → self::A18
+    : super core::Object::•()
+    ;
+}
+class A19 extends core::Object {
+  synthetic constructor •() → self::A19
+    : super core::Object::•()
+    ;
+}
+class A20 extends core::Object {
+  synthetic constructor •() → self::A20
+    : super core::Object::•()
+    ;
+}
+abstract class _A21&B&C extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A21&B&C
+    : super core::Object::•()
+    ;
+}
+class A21 extends self::_A21&B&C {
+  synthetic constructor •() → self::A21
+    : super self::_A21&B&C::•()
+    ;
+}
+abstract class _A22&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A22&Object&C
+    : super core::Object::•()
+    ;
+}
+class A22 extends self::_A22&Object&C {
+  synthetic constructor •() → self::A22
+    : super self::_A22&Object&C::•()
+    ;
+}
+class A23 extends core::Object {
+  synthetic constructor •() → self::A23
+    : super core::Object::•()
+    ;
+}
+class A24 extends core::Object {
+  synthetic constructor •() → self::A24
+    : super core::Object::•()
+    ;
+}
+abstract class _A25&Object&C extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A25&Object&C
+    : super core::Object::•()
+    ;
+}
+class A25 extends self::_A25&Object&C {
+  synthetic constructor •() → self::A25
+    : super self::_A25&Object&C::•()
+    ;
+}
+class A26 extends core::Object {
+  synthetic constructor •() → self::A26
+    : super core::Object::•()
+    ;
+}
+class N extends core::Object {
+  synthetic constructor •() → self::N
+    : super core::Object::•()
+    ;
+}
+class C#8 extends core::Object {
+  synthetic constructor •() → self::C#8
+    : super core::Object::•()
+    ;
+}
+class N2 extends core::Object {
+  synthetic constructor •() → self::N2
+    : super core::Object::•()
+    ;
+}
+class B#10 extends core::Object {
+  synthetic constructor •() → self::B#10
+    : super core::Object::•()
+    ;
+}
+class N3 extends core::Object {
+  synthetic constructor •() → self::N3
+    : super core::Object::•()
+    ;
+}
+class D#7 extends core::Object {
+  synthetic constructor •() → self::D#7
+    : super core::Object::•()
+    ;
+}
+class N6 extends core::Object {
+  synthetic constructor •() → self::N6
+    : super core::Object::•()
+    ;
+}
+class N7 extends core::Object {
+  synthetic constructor •() → self::N7
+    : super core::Object::•()
+    ;
+}
+class N8 extends core::Object {
+  synthetic constructor •() → self::N8
+    : super core::Object::•()
+    ;
+}
+class N13 extends core::Object {
+  synthetic constructor •() → self::N13
+    : super core::Object::•()
+    ;
+}
+class N14 extends core::Object {
+  synthetic constructor •() → self::N14
+    : super core::Object::•()
+    ;
+}
+class N16 extends core::Object {
+  synthetic constructor •() → self::N16
+    : super core::Object::•()
+    ;
+}
+class N17 extends core::Object {
+  synthetic constructor •() → self::N17
+    : super core::Object::•()
+    ;
+}
+class N21 extends core::Object {
+  synthetic constructor •() → self::N21
+    : super core::Object::•()
+    ;
+}
+class N26 extends core::Object {
+  synthetic constructor •() → self::N26
+    : super core::Object::•()
+    ;
+}
+abstract class _E&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E extends self::_E&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E element = #C3;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C6;
+  static const field self::E1 element = #C5;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C8;
+  static const field self::E2 element = #C7;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C10;
+  static const field self::E3 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E4&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E4&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E4 extends self::_E4&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E4> values = #C12;
+  static const field self::E4 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super self::_E4&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E5&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E5&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E5 extends self::_E5&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E5> values = #C14;
+  static const field self::E5 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super self::_E5&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E6&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E6&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E6 extends self::_E6&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E6> values = #C16;
+  static const field self::E6 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super self::_E6&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E7&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E7&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E7 extends self::_E7&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E7> values = #C18;
+  static const field self::E7 element = #C17;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super self::_E7&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E8&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E8 extends self::_E8&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E8> values = #C20;
+  static const field self::E8 element = #C19;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class E9 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E9> values = #C22;
+  static const field self::E9 element = #C21;
+  const constructor •(core::int index, core::String name) → self::E9
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class E10 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E10> values = #C24;
+  static const field self::E10 element = #C23;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+class E11 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E11> values = #C26;
+  static const field self::E11 element = #C25;
+  const constructor •(core::int index, core::String name) → self::E11
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E11.${this.{core::_Enum::_name}{core::String}}";
+}
+class E12 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E12> values = #C27;
+  const constructor •(core::int index, core::String name) → self::E12
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E12.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E13&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E13&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E13 extends self::_E13&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E13> values = #C29;
+  static const field self::E13 element = #C28;
+  const constructor •(core::int index, core::String name) → self::E13
+    : super self::_E13&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E13.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E14&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E14&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E14 extends self::_E14&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E14> values = #C31;
+  static const field self::E14 element = #C30;
+  const constructor •(core::int index, core::String name) → self::E14
+    : super self::_E14&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E14.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E15&_Enum&D extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E15&_Enum&D
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E15 extends self::_E15&_Enum&D /*isEnum*/  {
+  static const field core::List<self::E15> values = #C33;
+  static const field self::E15 element = #C32;
+  const constructor •(core::int index, core::String name) → self::E15
+    : super self::_E15&_Enum&D::•(index, name)
+    ;
+  method toString() → core::String
+    return "E15.${this.{core::_Enum::_name}{core::String}}";
+}
+class E16 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E16> values = #C35;
+  static const field self::E16 element = #C34;
+  const constructor •(core::int index, core::String name) → self::E16
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E16.${this.{core::_Enum::_name}{core::String}}";
+}
+class E17 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E17> values = #C37;
+  static const field self::E17 element = #C36;
+  const constructor •(core::int index, core::String name) → self::E17
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E17.${this.{core::_Enum::_name}{core::String}}";
+}
+class E18 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E18> values = #C39;
+  static const field self::E18 element = #C38;
+  const constructor •(core::int index, core::String name) → self::E18
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E18.${this.{core::_Enum::_name}{core::String}}";
+}
+class E19 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E19> values = #C41;
+  static const field self::E19 element = #C40;
+  const constructor •(core::int index, core::String name) → self::E19
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E19.${this.{core::_Enum::_name}{core::String}}";
+}
+class E20 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E20> values = #C43;
+  static const field self::E20 element = #C42;
+  const constructor •(core::int index, core::String name) → self::E20
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E20.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E21&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E21&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E21 extends self::_E21&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E21> values = #C45;
+  static const field self::E21 element = #C44;
+  const constructor •(core::int index, core::String name) → self::E21
+    : super self::_E21&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E21.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E22&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E22&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E22 extends self::_E22&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E22> values = #C47;
+  static const field self::E22 element = #C46;
+  const constructor •(core::int index, core::String name) → self::E22
+    : super self::_E22&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E22.${this.{core::_Enum::_name}{core::String}}";
+}
+class E23 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E23> values = #C49;
+  static const field self::E23 element = #C48;
+  const constructor •(core::int index, core::String name) → self::E23
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E23.${this.{core::_Enum::_name}{core::String}}";
+}
+class E24 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E24> values = #C51;
+  static const field self::E24 element = #C50;
+  const constructor •(core::int index, core::String name) → self::E24
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E24.${this.{core::_Enum::_name}{core::String}}";
+}
+abstract class _E25&_Enum&C extends core::_Enum /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E25&_Enum&C
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E25 extends self::_E25&_Enum&C /*isEnum*/  {
+  static const field core::List<self::E25> values = #C53;
+  static const field self::E25 element = #C52;
+  const constructor •(core::int index, core::String name) → self::E25
+    : super self::_E25&_Enum&C::•(index, name)
+    ;
+  method toString() → core::String
+    return "E25.${this.{core::_Enum::_name}{core::String}}";
+}
+class E26 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E26> values = #C55;
+  static const field self::E26 element = #C54;
+  const constructor •(core::int index, core::String name) → self::E26
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E26.${this.{core::_Enum::_name}{core::String}}";
+}
+static field dynamic with;
+static field dynamic C;
+static field dynamic extends;
+static field dynamic B;
+static field invalid-type implements;
+static field dynamic D;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+  #C5 = self::E1 {index:#C1, _name:#C2}
+  #C6 = <self::E1*>[#C5]
+  #C7 = self::E2 {index:#C1, _name:#C2}
+  #C8 = <self::E2*>[#C7]
+  #C9 = self::E3 {index:#C1, _name:#C2}
+  #C10 = <self::E3*>[#C9]
+  #C11 = self::E4 {index:#C1, _name:#C2}
+  #C12 = <self::E4*>[#C11]
+  #C13 = self::E5 {index:#C1, _name:#C2}
+  #C14 = <self::E5*>[#C13]
+  #C15 = self::E6 {index:#C1, _name:#C2}
+  #C16 = <self::E6*>[#C15]
+  #C17 = self::E7 {index:#C1, _name:#C2}
+  #C18 = <self::E7*>[#C17]
+  #C19 = self::E8 {index:#C1, _name:#C2}
+  #C20 = <self::E8*>[#C19]
+  #C21 = self::E9 {index:#C1, _name:#C2}
+  #C22 = <self::E9*>[#C21]
+  #C23 = self::E10 {index:#C1, _name:#C2}
+  #C24 = <self::E10*>[#C23]
+  #C25 = self::E11 {index:#C1, _name:#C2}
+  #C26 = <self::E11*>[#C25]
+  #C27 = <self::E12*>[]
+  #C28 = self::E13 {index:#C1, _name:#C2}
+  #C29 = <self::E13*>[#C28]
+  #C30 = self::E14 {index:#C1, _name:#C2}
+  #C31 = <self::E14*>[#C30]
+  #C32 = self::E15 {index:#C1, _name:#C2}
+  #C33 = <self::E15*>[#C32]
+  #C34 = self::E16 {index:#C1, _name:#C2}
+  #C35 = <self::E16*>[#C34]
+  #C36 = self::E17 {index:#C1, _name:#C2}
+  #C37 = <self::E17*>[#C36]
+  #C38 = self::E18 {index:#C1, _name:#C2}
+  #C39 = <self::E18*>[#C38]
+  #C40 = self::E19 {index:#C1, _name:#C2}
+  #C41 = <self::E19*>[#C40]
+  #C42 = self::E20 {index:#C1, _name:#C2}
+  #C43 = <self::E20*>[#C42]
+  #C44 = self::E21 {index:#C1, _name:#C2}
+  #C45 = <self::E21*>[#C44]
+  #C46 = self::E22 {index:#C1, _name:#C2}
+  #C47 = <self::E22*>[#C46]
+  #C48 = self::E23 {index:#C1, _name:#C2}
+  #C49 = <self::E23*>[#C48]
+  #C50 = self::E24 {index:#C1, _name:#C2}
+  #C51 = <self::E24*>[#C50]
+  #C52 = self::E25 {index:#C1, _name:#C2}
+  #C53 = <self::E25*>[#C52]
+  #C54 = self::E26 {index:#C1, _name:#C2}
+  #C55 = <self::E26*>[#C54]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_header.dart:
+- E. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _E&_Enum&C. (from org-dartlang-testcase:///class_header.dart:61:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E1. (from org-dartlang-testcase:///class_header.dart:62:6)
+- E2. (from org-dartlang-testcase:///class_header.dart:63:6)
+- E3. (from org-dartlang-testcase:///class_header.dart:64:6)
+- E4. (from org-dartlang-testcase:///class_header.dart:65:6)
+- _E4&_Enum&C. (from org-dartlang-testcase:///class_header.dart:65:6)
+- E5. (from org-dartlang-testcase:///class_header.dart:66:6)
+- _E5&_Enum&C. (from org-dartlang-testcase:///class_header.dart:66:6)
+- E6. (from org-dartlang-testcase:///class_header.dart:67:6)
+- _E6&_Enum&C. (from org-dartlang-testcase:///class_header.dart:67:6)
+- E7. (from org-dartlang-testcase:///class_header.dart:68:6)
+- _E7&_Enum&C. (from org-dartlang-testcase:///class_header.dart:68:6)
+- E8. (from org-dartlang-testcase:///class_header.dart:69:6)
+- _E8&_Enum&C. (from org-dartlang-testcase:///class_header.dart:69:6)
+- E9. (from org-dartlang-testcase:///class_header.dart:70:6)
+- E10. (from org-dartlang-testcase:///class_header.dart:71:6)
+- E11. (from org-dartlang-testcase:///class_header.dart:72:6)
+- E13. (from org-dartlang-testcase:///class_header.dart:74:6)
+- _E13&_Enum&C. (from org-dartlang-testcase:///class_header.dart:74:6)
+- E14. (from org-dartlang-testcase:///class_header.dart:75:6)
+- _E14&_Enum&C. (from org-dartlang-testcase:///class_header.dart:75:6)
+- E15. (from org-dartlang-testcase:///class_header.dart:76:6)
+- _E15&_Enum&D. (from org-dartlang-testcase:///class_header.dart:76:6)
+- E16. (from org-dartlang-testcase:///class_header.dart:77:6)
+- E17. (from org-dartlang-testcase:///class_header.dart:78:6)
+- E18. (from org-dartlang-testcase:///class_header.dart:79:6)
+- E19. (from org-dartlang-testcase:///class_header.dart:80:6)
+- E20. (from org-dartlang-testcase:///class_header.dart:81:6)
+- E21. (from org-dartlang-testcase:///class_header.dart:82:6)
+- _E21&_Enum&C. (from org-dartlang-testcase:///class_header.dart:82:6)
+- E22. (from org-dartlang-testcase:///class_header.dart:83:6)
+- _E22&_Enum&C. (from org-dartlang-testcase:///class_header.dart:83:6)
+- E23. (from org-dartlang-testcase:///class_header.dart:84:6)
+- E24. (from org-dartlang-testcase:///class_header.dart:85:6)
+- E25. (from org-dartlang-testcase:///class_header.dart:86:6)
+- _E25&_Enum&C. (from org-dartlang-testcase:///class_header.dart:86:6)
+- E26. (from org-dartlang-testcase:///class_header.dart:87:6)
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart
index 9e6311e..5921c10 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 class Foo {
   get Foo() {
     // Not OK.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.textual_outline.expect
index d6b8a46..2dd5d4c 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   get Foo() {}
   get Foo() : initializer = true {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.expect
index eea597e..8a94da4 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.expect
@@ -1,49 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   get Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() : initializer = true {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   get Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   get Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   get Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   get Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -51,21 +51,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   get Foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect
index eea597e..8a94da4 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect
@@ -1,49 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   get Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() : initializer = true {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   get Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   get Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   get Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   get Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -51,21 +51,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   get Foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.outline.expect
index 771ed79..41c3dd4 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.outline.expect
@@ -1,41 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   get Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() : initializer = true {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   get Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   get Foo.x() {
 //       ^^^^^
 //
@@ -43,20 +43,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     ;
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     ;
   get Foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.transformed.expect
index eea597e..8a94da4 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.transformed.expect
@@ -1,49 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   get Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:10: Error: A getter can't have formal parameters.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:10: Error: A getter can't have formal parameters.
 // Try removing '(...)'.
 //   get Foo() : initializer = true {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:3: Error: Constructors can't be a getter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:3: Error: Constructors can't be a getter.
 // Try removing 'get'.
 //   get Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   get Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   get Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   get Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   get Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -51,21 +51,11 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   get Foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart
index d865bc7..6a532a0 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 class Foo {
   Foo() {
     // OK.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline.expect
index 63048301..2318374 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo() {}
   Foo() : initializer = true {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline_modelled.expect
index 5bd409d..f87cd03 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo() : initializer = true {}
   Foo() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.expect
index 92284b0..1052c44 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.expect
@@ -1,26 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:3: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo() : initializer = true {
 //   ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:3:3: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:2:3: Context: Previous declaration of 'Foo'.
 //   Foo() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:3: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:3: Error: 'Foo.x' is already declared in this scope.
 //   Foo.x() : initializer = true {
 //   ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:9:3: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:8:3: Context: Previous declaration of 'Foo.x'.
 //   Foo.x() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:11: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:11: Error: 'initializer' isn't an instance field of this class.
 //   Foo() : initializer = true {
 //           ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:13: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:13: Error: 'initializer' isn't an instance field of this class.
 //   Foo.x() : initializer = true {
 //             ^^^^^^^^^^^
 //
@@ -28,18 +28,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect
index 92284b0..1052c44 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect
@@ -1,26 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:3: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo() : initializer = true {
 //   ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:3:3: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:2:3: Context: Previous declaration of 'Foo'.
 //   Foo() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:3: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:3: Error: 'Foo.x' is already declared in this scope.
 //   Foo.x() : initializer = true {
 //   ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:9:3: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:8:3: Context: Previous declaration of 'Foo.x'.
 //   Foo.x() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:11: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:11: Error: 'initializer' isn't an instance field of this class.
 //   Foo() : initializer = true {
 //           ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:13: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:13: Error: 'initializer' isn't an instance field of this class.
 //   Foo.x() : initializer = true {
 //             ^^^^^^^^^^^
 //
@@ -28,18 +28,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.outline.expect
index 8c35187..1df5521 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.outline.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:3: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo() : initializer = true {
 //   ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:3:3: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:2:3: Context: Previous declaration of 'Foo'.
 //   Foo() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:3: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:3: Error: 'Foo.x' is already declared in this scope.
 //   Foo.x() : initializer = true {
 //   ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:9:3: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:8:3: Context: Previous declaration of 'Foo.x'.
 //   Foo.x() {
 //   ^^^^^
 //
@@ -20,18 +20,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     ;
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.transformed.expect
index 92284b0..1052c44 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.transformed.expect
@@ -1,26 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:3: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo() : initializer = true {
 //   ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:3:3: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:2:3: Context: Previous declaration of 'Foo'.
 //   Foo() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:3: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:3: Error: 'Foo.x' is already declared in this scope.
 //   Foo.x() : initializer = true {
 //   ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:9:3: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:8:3: Context: Previous declaration of 'Foo.x'.
 //   Foo.x() {
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:11: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:5:11: Error: 'initializer' isn't an instance field of this class.
 //   Foo() : initializer = true {
 //           ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:13: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:11:13: Error: 'initializer' isn't an instance field of this class.
 //   Foo.x() : initializer = true {
 //             ^^^^^^^^^^^
 //
@@ -28,18 +28,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart
index 404a33d..fd9a67c 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 class Foo {
   void Foo() {
     // Not OK.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.textual_outline.expect
index 915667b..694a36de 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   void Foo() {}
   void Foo() : initializer = true {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.expect
index b038f45e2..4ccc13f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.expect
@@ -1,46 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:8: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:8: Error: 'Foo' is already declared in this scope.
 //   void Foo() : initializer = true {
 //        ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:8: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:8: Context: Previous declaration of 'Foo'.
 //   void Foo() {
 //        ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:8: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:8: Error: 'Foo.x' is already declared in this scope.
 //   void Foo.x() : initializer = true {
 //        ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:8: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:8: Context: Previous declaration of 'Foo.x'.
 //   void Foo.x() {
 //        ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:16: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:16: Error: 'initializer' isn't an instance field of this class.
 //   void Foo() : initializer = true {
 //                ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:18: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:18: Error: 'initializer' isn't an instance field of this class.
 //   void Foo.x() : initializer = true {
 //                  ^^^^^^^^^^^
 //
@@ -48,18 +48,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect
index b038f45e2..4ccc13f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect
@@ -1,46 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:8: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:8: Error: 'Foo' is already declared in this scope.
 //   void Foo() : initializer = true {
 //        ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:8: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:8: Context: Previous declaration of 'Foo'.
 //   void Foo() {
 //        ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:8: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:8: Error: 'Foo.x' is already declared in this scope.
 //   void Foo.x() : initializer = true {
 //        ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:8: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:8: Context: Previous declaration of 'Foo.x'.
 //   void Foo.x() {
 //        ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:16: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:16: Error: 'initializer' isn't an instance field of this class.
 //   void Foo() : initializer = true {
 //                ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:18: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:18: Error: 'initializer' isn't an instance field of this class.
 //   void Foo.x() : initializer = true {
 //                  ^^^^^^^^^^^
 //
@@ -48,18 +48,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.outline.expect
index ccf5064..f646a32 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.outline.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:8: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:8: Error: 'Foo' is already declared in this scope.
 //   void Foo() : initializer = true {
 //        ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:8: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:8: Context: Previous declaration of 'Foo'.
 //   void Foo() {
 //        ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:8: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:8: Error: 'Foo.x' is already declared in this scope.
 //   void Foo.x() : initializer = true {
 //        ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:8: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:8: Context: Previous declaration of 'Foo.x'.
 //   void Foo.x() {
 //        ^^^^^
 //
@@ -40,18 +40,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     ;
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.transformed.expect
index b038f45e2..4ccc13f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.transformed.expect
@@ -1,46 +1,46 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:8: Error: 'Foo' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:8: Error: 'Foo' is already declared in this scope.
 //   void Foo() : initializer = true {
 //        ^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:8: Context: Previous declaration of 'Foo'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:2:8: Context: Previous declaration of 'Foo'.
 //   void Foo() {
 //        ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:3: Error: Constructors can't have a return type.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:3: Error: Constructors can't have a return type.
 // Try removing the return type.
 //   void Foo.x() : initializer = true {
 //   ^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:8: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:8: Error: 'Foo.x' is already declared in this scope.
 //   void Foo.x() : initializer = true {
 //        ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:8: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:8:8: Context: Previous declaration of 'Foo.x'.
 //   void Foo.x() {
 //        ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:16: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:5:16: Error: 'initializer' isn't an instance field of this class.
 //   void Foo() : initializer = true {
 //                ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:18: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:11:18: Error: 'initializer' isn't an instance field of this class.
 //   void Foo.x() : initializer = true {
 //                  ^^^^^^^^^^^
 //
@@ -48,18 +48,8 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     : super core::Object::•() {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart
index 9ca2f40..6f5b73e 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 class Foo {
   set Foo() {
     // Not OK.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.textual_outline.expect
index 6ded932..2548477 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   set Foo() {}
   set Foo() : initializer = true {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.expect
index b3eba22..90fd787 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.expect
@@ -1,43 +1,43 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   set Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   set Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   set Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
 //   set Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   set Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   set Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -45,26 +45,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   set Foo(dynamic #synthetic) → void {
-    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
   set Foo() {
          ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect
index b3eba22..90fd787 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect
@@ -1,43 +1,43 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   set Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   set Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   set Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
 //   set Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   set Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   set Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -45,26 +45,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   set Foo(dynamic #synthetic) → void {
-    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
   set Foo() {
          ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.outline.expect
index d80e16c..b130d84 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.outline.expect
@@ -1,31 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   set Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   set Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   set Foo.x() {
 //       ^^^^^
 //
@@ -33,20 +33,10 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
+  constructor •() → self::Foo
     ;
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     ;
   set Foo(dynamic #synthetic) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.transformed.expect
index b3eba22..90fd787 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.transformed.expect
@@ -1,43 +1,43 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:7: Error: A class member can't have the same name as the enclosing class.
 // Try renaming the member.
 //   set Foo() {
 //       ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:3: Error: Constructors can't be a setter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:3: Error: Constructors can't be a setter.
 // Try removing 'set'.
 //   set Foo.x() : initializer = true {
 //   ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:7: Error: 'Foo.x' is already declared in this scope.
 //   set Foo.x() : initializer = true {
 //       ^^^^^
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:7: Context: Previous declaration of 'Foo.x'.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:8:7: Context: Previous declaration of 'Foo.x'.
 //   set Foo.x() {
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
 //   set Foo() {
 //          ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
 //   set Foo() : initializer = true {
 //               ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:11:17: Error: 'initializer' isn't an instance field of this class.
 //   set Foo.x() : initializer = true {
 //                 ^^^^^^^^^^^
 //
@@ -45,26 +45,16 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  constructor •() → self::Foo*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  constructor •() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:5:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {
               ^^^^^^^^^^^" {}
-  constructor x() → self::Foo*
+  constructor x() → self::Foo
     : super core::Object::•() {}
   set Foo(dynamic #synthetic) → void {
-    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:2:10: Error: A setter should have exactly one formal parameter.
   set Foo() {
          ^";
     {}
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart
index b292be3..19771e9 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 main() async {
   await for () {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline_modelled.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
index ef2f7e9..67060c0 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   await for () {}
 //              ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected 'in' before this.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected 'in' before this.
 //   await for () {}
 //              ^
 //
 import self as self;
 
-static method main() → dynamic async {
-  await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^") {
-    invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^";
   }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect
index ef2f7e9..67060c0 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   await for () {}
 //              ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected 'in' before this.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected 'in' before this.
 //   await for () {}
 //              ^
 //
 import self as self;
 
-static method main() → dynamic async {
-  await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^") {
-    invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^";
   }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.outline.expect
index b3304ef..074fe5d 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic async 
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
index e4e75cc..ee95a19 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   await for () {}
 //              ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected 'in' before this.
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: Expected 'in' before this.
 //   await for () {}
 //              ^
 //
@@ -16,13 +16,13 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -33,10 +33,10 @@
       #L1:
       {
         {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^";
-          asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
           try
             #L2:
             while (true) {
@@ -45,7 +45,7 @@
               if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 final dynamic #t3 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
-                  invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+                  invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:2:14: Error: This couldn't be parsed.
   await for () {}
              ^";
                 }
@@ -63,12 +63,12 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart b/pkg/front_end/testcases/general/error_recovery/empty_for.dart
index 63f5b79..3c33ee5 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 main() {
   for () {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
index 35aa6ca..2205f09 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.expect
@@ -1,22 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   for () {}
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:7: Error: Expected ';' after this.
 //   for () {}
 //       ^
 //
 import self as self;
 
 static method main() → dynamic {
-  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
-       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
        ^"; ) {
   }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect
index 35aa6ca..2205f09 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect
@@ -1,22 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   for () {}
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:7: Error: Expected ';' after this.
 //   for () {}
 //       ^
 //
 import self as self;
 
 static method main() → dynamic {
-  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
-       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
        ^"; ) {
   }
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
index 35aa6ca..2205f09 100644
--- a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.transformed.expect
@@ -1,22 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   for () {}
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:7: Error: Expected ';' after this.
 //   for () {}
 //       ^
 //
 import self as self;
 
 static method main() → dynamic {
-  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
-       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:2:8: Error: This couldn't be parsed.
   for () {}
        ^"; ) {
   }
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart
index 0e1486c..41b92d1 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 main() {
   for(int i : [1, 2, 3]) {
     print(i);
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.expect
index 9124332..5635481 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  for (core::int* i in <core::int*>[1, 2, 3]) {
+  for (core::int i in <core::int>[1, 2, 3]) {
     core::print(i);
   }
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect
index 9124332..5635481 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  for (core::int* i in <core::int*>[1, 2, 3]) {
+  for (core::int i in <core::int>[1, 2, 3]) {
     core::print(i);
   }
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.transformed.expect
index 32ce646..ed61129 100644
--- a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 
 static method main() → dynamic {
   {
-    core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+    core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(1, 2, 3).{core::Iterable::iterator}{core::Iterator<core::int>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::int* i = :sync-for-iterator.{core::Iterator::current}{core::int*};
+      core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
       {
         core::print(i);
       }
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_22313.dart b/pkg/front_end/testcases/general/error_recovery/issue_22313.dart
index 3aabb26..c1b9282 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_22313.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_22313.dart
@@ -1,5 +1,5 @@
 class A { }
-// @dart=2.9
+
 class B { }
 
 class Foo extends A, B {
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart
index 3946f39..ed07e7e 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class Key {
   int get a => runtimeType.hashCode xor null.hashCode;
   int get b => runtimeType.hashCode ^ null.hashCode;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline.expect
index e659d27..7cc788c 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Key {
   int get a => runtimeType.hashCode ^ null.hashCode;
   int get b => runtimeType.hashCode ^ null.hashCode;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline_modelled.expect
index 1d34e89..25de27c7 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Key {
   Key(int x, int y)
       : foo = x ^ y,
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
index fa47aba..1b13053 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,77 +76,67 @@
 import "dart:core" as core;
 
 abstract class Key extends core::Object {
-  field core::int* foo;
-  field core::int* bar;
-  constructor •(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  field core::int foo;
+  field core::int bar;
+  constructor •(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  constructor NotDuplicate(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  get a() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get b() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get c() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get a() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get b() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get c() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get d() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get d() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get e() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get f() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get g() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get e() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get f() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get g() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  get h() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get h() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method i(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method j(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method k(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method i(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method j(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method k(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method l(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method l(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method m(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method m(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method n(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method n(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method o(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method p(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method q(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method o(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method p(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method q(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method r(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method r(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method s(core::int* x, core::int* y) → dynamic {
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+  method s(core::int x, core::int y) → dynamic {
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect
index fa47aba..1b13053 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,77 +76,67 @@
 import "dart:core" as core;
 
 abstract class Key extends core::Object {
-  field core::int* foo;
-  field core::int* bar;
-  constructor •(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  field core::int foo;
+  field core::int bar;
+  constructor •(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  constructor NotDuplicate(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  get a() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get b() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get c() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get a() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get b() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get c() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get d() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get d() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get e() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get f() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get g() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get e() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get f() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get g() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  get h() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get h() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method i(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method j(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method k(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method i(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method j(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method k(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method l(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method l(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method m(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method m(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method n(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method n(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method o(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method p(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method q(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method o(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method p(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method q(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method r(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method r(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method s(core::int* x, core::int* y) → dynamic {
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+  method s(core::int x, core::int y) → dynamic {
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.outline.expect
index 3e4746b..803bce2 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,60 +36,50 @@
 import "dart:core" as core;
 
 abstract class Key extends core::Object {
-  field core::int* foo;
-  field core::int* bar;
-  constructor •(core::int* x, core::int* y) → self::Key*
+  field core::int foo;
+  field core::int bar;
+  constructor •(core::int x, core::int y) → self::Key
     ;
-  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
+  constructor NotDuplicate(core::int x, core::int y) → self::Key
     ;
-  get a() → core::int*
+  get a() → core::int
     ;
-  get b() → core::int*
+  get b() → core::int
     ;
-  get c() → core::int*
+  get c() → core::int
     ;
-  get d() → core::int*
+  get d() → core::int
     ;
-  get e() → core::int*
+  get e() → core::int
     ;
-  get f() → core::int*
+  get f() → core::int
     ;
-  get g() → core::int*
+  get g() → core::int
     ;
-  get h() → core::int*
+  get h() → core::int
     ;
-  method i(core::int* x, core::int* y) → core::int*
+  method i(core::int x, core::int y) → core::int
     ;
-  method j(core::int* x, core::int* y) → core::int*
+  method j(core::int x, core::int y) → core::int
     ;
-  method k(core::int* x, core::int* y) → core::int*
+  method k(core::int x, core::int y) → core::int
     ;
-  method l(core::int* x, core::int* y) → core::int*
+  method l(core::int x, core::int y) → core::int
     ;
-  method m(core::int* x, core::int* y) → core::int*
+  method m(core::int x, core::int y) → core::int
     ;
-  method n(core::int* x, core::int* y) → core::int*
+  method n(core::int x, core::int y) → core::int
     ;
-  method o(core::int* x, core::int* y) → core::int*
+  method o(core::int x, core::int y) → core::int
     ;
-  method p(core::int* x, core::int* y) → core::int*
+  method p(core::int x, core::int y) → core::int
     ;
-  method q(core::int* x, core::int* y) → core::int*
+  method q(core::int x, core::int y) → core::int
     ;
-  method r(core::int* x, core::int* y) → core::int*
+  method r(core::int x, core::int y) → core::int
     ;
-  method s(core::int* x, core::int* y) → dynamic
+  method s(core::int x, core::int y) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
index fa47aba..1b13053 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,77 +76,67 @@
 import "dart:core" as core;
 
 abstract class Key extends core::Object {
-  field core::int* foo;
-  field core::int* bar;
-  constructor •(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  field core::int foo;
+  field core::int bar;
+  constructor •(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
-    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
-    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  constructor NotDuplicate(core::int x, core::int y) → self::Key
+    : self::Key::foo = x.{core::int::^}(y){(core::int) → core::int}, self::Key::bar = x.{core::int::^}(y){(core::int) → core::int}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int) → core::int}}");
   }
-  get a() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get b() → core::int*
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
-  get c() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get a() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get b() → core::int
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
+  get c() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get d() → core::int* {
-    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get d() → core::int {
+    return this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}){(core::int) → core::int};
   }
-  get e() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get f() → core::int*
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  get g() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get e() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get f() → core::int
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  get g() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  get h() → core::int* {
-    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get h() → core::int {
+    return 1.{core::num::+}(this.{core::Object::runtimeType}{core::Type}.{core::Type::hashCode}{core::int}){(core::num) → core::int}.{core::int::^}(null.{core::Object::hashCode}{core::int}.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method i(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method j(core::int* x, core::int* y) → core::int*
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
-  method k(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method i(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method j(core::int x, core::int y) → core::int
+    return x.{core::int::^}(y){(core::int) → core::int};
+  method k(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method l(core::int* x, core::int* y) → core::int* {
-    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method l(core::int x, core::int y) → core::int {
+    return x.{core::int::^}(y){(core::int) → core::int};
   }
-  method m(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method m(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method n(core::int* x, core::int* y) → core::int* {
-    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+  method n(core::int x, core::int y) → core::int {
+    core::int z = x.{core::int::^}(y){(core::int) → core::int};
     return z;
   }
-  method o(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method p(core::int* x, core::int* y) → core::int*
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
-  method q(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method o(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method p(core::int x, core::int y) → core::int
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
+  method q(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method r(core::int* x, core::int* y) → core::int* {
-    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method r(core::int x, core::int y) → core::int {
+    return 1.{core::num::+}(x){(core::num) → core::int}.{core::int::^}(y.{core::num::+}(3){(core::num) → core::int}){(core::int) → core::int};
   }
-  method s(core::int* x, core::int* y) → dynamic {
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
-    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+  method s(core::int x, core::int y) → dynamic {
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int) → core::int}, x.{core::int::^}(y){(core::int) → core::int}){(core::int, core::int) → dynamic};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
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_39060.dart b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart
index 0c2621f..b8fb0cdb 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 main() {
   {s A<}>
 }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.expect
index 2504ef6..04a457a 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:4: Error: 's' isn't a type.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:4: Error: 's' isn't a type.
 //   {s A<}>
 //    ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:6: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:6: Error: Expected ';' after this.
 //   {s A<}>
 //      ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: Expected a type, but got '}'.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: Expected a type, but got '}'.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: This couldn't be parsed.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: This couldn't be parsed.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected '[' before this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:1: Error: Expected '[' before this.
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:9: Error: Expected ';' after this.
 //   {s A<}>
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect
index 2504ef6..04a457a 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:4: Error: 's' isn't a type.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:4: Error: 's' isn't a type.
 //   {s A<}>
 //    ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:6: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:6: Error: Expected ';' after this.
 //   {s A<}>
 //      ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: Expected a type, but got '}'.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: Expected a type, but got '}'.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: This couldn't be parsed.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: This couldn't be parsed.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected '[' before this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:1: Error: Expected '[' before this.
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:9: Error: Expected ';' after this.
 //   {s A<}>
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.transformed.expect
index 3684ba3..ed12cce 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.transformed.expect
@@ -1,28 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:4: Error: 's' isn't a type.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:4: Error: 's' isn't a type.
 //   {s A<}>
 //    ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:6: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:6: Error: Expected ';' after this.
 //   {s A<}>
 //      ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: Expected a type, but got '}'.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: Expected a type, but got '}'.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: This couldn't be parsed.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:8: Error: This couldn't be parsed.
 //   {s A<}>
 //        ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected '[' before this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:1: Error: Expected '[' before this.
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:2:9: Error: Expected ';' after this.
 //   {s A<}>
 //         ^
 //
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_01.dart b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart
index 10c2996..8bde84a 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart
@@ -1,2 +1 @@
-// @dart=2.9
 void<int> f() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.textual_outline.expect
index a076dc6..b747ed5 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 void<int> f() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.expect
index 0b3c58e..aa7b23d 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:2:5: Error: Type 'void' can't have type arguments.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:1:5: Error: Type 'void' can't have type arguments.
 // Try removing the type arguments.
 // void<int> f() {}
 //     ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect
index 0b3c58e..aa7b23d 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:2:5: Error: Type 'void' can't have type arguments.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:1:5: Error: Type 'void' can't have type arguments.
 // Try removing the type arguments.
 // void<int> f() {}
 //     ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.outline.expect
index 0a83309..559fd9d 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:2:5: Error: Type 'void' can't have type arguments.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:1:5: Error: Type 'void' can't have type arguments.
 // Try removing the type arguments.
 // void<int> f() {}
 //     ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.transformed.expect
index 0b3c58e..aa7b23d 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:2:5: Error: Type 'void' can't have type arguments.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:1:5: Error: Type 'void' can't have type arguments.
 // Try removing the type arguments.
 // void<int> f() {}
 //     ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart
index b8175f8..58b5740 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart
@@ -1,2 +1 @@
-// @dart=2.9
 dynamic<int> f() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline.expect
index c662bd8..f03cd81 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 dynamic<int> f() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline_modelled.expect
index c662bd8..f03cd81 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 dynamic<int> f() {}
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 f4c6611..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:2:1: Error: Expected 0 type arguments.
+// 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 f4c6611..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:2:1: Error: Expected 0 type arguments.
+// 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 fe7f977..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:2:1: Error: Expected 0 type arguments.
+// 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 f4c6611..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:2:1: Error: Expected 0 type arguments.
+// 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 b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart
index 5fd90be..1a13723 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart
@@ -1,2 +1 @@
-// @dart=2.9
 int<int> f() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline.expect
index c0ee669..26e95ee 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 int<int> f() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline_modelled.expect
index c0ee669..26e95ee 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 int<int> f() {}
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 46d364b..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:2:1: Error: Expected 0 type arguments.
+// 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 46d364b..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:2:1: Error: Expected 0 type arguments.
+// 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 1c02eaa..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:2:1: Error: Expected 0 type arguments.
+// 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 46d364b..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:2:1: Error: Expected 0 type arguments.
+// 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 b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart
index 9ff8598..1a373f5 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart
@@ -1,2 +1 @@
-// @dart=2.9
 Foo<int> f() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline.expect
index 4236150..78a05ec 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 Foo<int> f() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline_modelled.expect
index 4236150..78a05ec 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 Foo<int> f() {}
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 b829820..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
@@ -1,15 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Type 'Foo' not found.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Type 'Foo' not found.
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2: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 b829820..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
@@ -1,15 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Type 'Foo' not found.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Type 'Foo' not found.
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2: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 2c17245..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
@@ -1,15 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Type 'Foo' not found.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Type 'Foo' not found.
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2: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 b829820..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
@@ -1,15 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Type 'Foo' not found.
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Type 'Foo' not found.
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2: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/weekly_bot_83_failure.dart b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart
new file mode 100644
index 0000000..f98757e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart
@@ -0,0 +1,10 @@
+main2() {
+  double x = 42;
+  x.remainder();
+}
+
+main(List<String> args) {
+  if (args.length == 42) {
+    main2();
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect
new file mode 100644
index 0000000..db0697d
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main2() {}
+main(List<String> args) {}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8cb08e1
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main(List<String> args) {}
+main2() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect
new file mode 100644
index 0000000..8e0ea4f
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+//   x.remainder();
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+  x.remainder();
+             ^" in x.{core::double::remainder}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect
new file mode 100644
index 0000000..8e0ea4f
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+//   x.remainder();
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+  x.remainder();
+             ^" in x.{core::double::remainder}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect
new file mode 100644
index 0000000..250a282
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic
+  ;
+static method main(core::List<core::String> args) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect
new file mode 100644
index 0000000..8e0ea4f
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart.weak.transformed.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+//   x.remainder();
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure.dart:3:14: Error: Too few positional arguments: 1 required, 0 given.
+  x.remainder();
+             ^" in x.{core::double::remainder}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart
new file mode 100644
index 0000000..be427e6
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart
@@ -0,0 +1,10 @@
+main2() {
+  double x = 42;
+  x.clamp();
+}
+
+main(List<String> args) {
+  if (args.length == 42) {
+    main2();
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect
new file mode 100644
index 0000000..db0697d
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main2() {}
+main(List<String> args) {}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8cb08e1
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main(List<String> args) {}
+main2() {}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect
new file mode 100644
index 0000000..ff2ca09
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+//   x.clamp();
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+  x.clamp();
+         ^" in x.{core::num::clamp}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect
new file mode 100644
index 0000000..ff2ca09
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+//   x.clamp();
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+  x.clamp();
+         ^" in x.{core::num::clamp}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect
new file mode 100644
index 0000000..250a282
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic
+  ;
+static method main(core::List<core::String> args) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ff2ca09
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart.weak.transformed.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+//   x.clamp();
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main2() → dynamic {
+  core::double x = 42.0;
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/weekly_bot_83_failure_2.dart:3:10: Error: Too few positional arguments: 2 required, 0 given.
+  x.clamp();
+         ^" in x.{core::num::clamp}{<inapplicable>}.(){() → invalid-type};
+}
+static method main(core::List<core::String> args) → dynamic {
+  if(args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    self::main2();
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart
index 8cae069..b32cd47 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart
@@ -1,5 +1,4 @@
 Future<int> f() => Future.value(7);
-// @dart=2.9
 List<int> g() {
   yield f();
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
index c923736..6292ac0 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
 //   yield f();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
 //  - 'List' is from 'dart:core'.
 // List<int> g() {
 //           ^
@@ -18,10 +18,10 @@
 static method f() → asy::Future<core::int>
   return asy::Future::value<core::int>(7);
 static method g() → core::List<core::int> {
-  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
   yield f();
   ^";
-  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
  - 'List' is from 'dart:core'.
 List<int> g() {
           ^" in null;
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect
index c923736..6292ac0 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
 //   yield f();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
 //  - 'List' is from 'dart:core'.
 // List<int> g() {
 //           ^
@@ -18,10 +18,10 @@
 static method f() → asy::Future<core::int>
   return asy::Future::value<core::int>(7);
 static method g() → core::List<core::int> {
-  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
   yield f();
   ^";
-  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
  - 'List' is from 'dart:core'.
 List<int> g() {
           ^" in null;
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
index c923736..6292ac0 100644
--- a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
 //   yield f();
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
 //  - 'List' is from 'dart:core'.
 // List<int> g() {
 //           ^
@@ -18,10 +18,10 @@
 static method f() → asy::Future<core::int>
   return asy::Future::value<core::int>(7);
 static method g() → core::List<core::int> {
-  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
   yield f();
   ^";
-  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:2:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
  - 'List' is from 'dart:core'.
 List<int> g() {
           ^" in null;
diff --git a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/unversioned_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/unversioned_lib.dart
index 5653a37..d57287d 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/unversioned_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/unversioned_lib.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 int? versionedAllowedPackage; // ok
diff --git a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_10_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_10_lib.dart
index 1000b07..d432653 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_10_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_10_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.10
 
 int? versioned_2_10_AllowedPackage; // ok
diff --git a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart
index f8d4466..b3c0c6d 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.8
 
 int? versioned_2_8_AllowedPackage; // error
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_9_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_9_lib.dart
index 2c5bf44..2bf988c 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_9_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_9_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 int? versionedAllowedPackage; // ok
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart b/pkg/front_end/testcases/general/experiment_release_version/main.dart
index 76c745e..40552ae 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'package:allowed_package/unversioned_lib.dart';
 import 'package:allowed_package/versioned_2_8_lib.dart';
 import 'package:allowed_package/versioned_2_9_lib.dart';
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline.expect
index 3d652f5..d918938 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:allowed_package/unversioned_lib.dart';
 import 'package:allowed_package/versioned_2_8_lib.dart';
 import 'package:allowed_package/versioned_2_9_lib.dart';
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline_modelled.expect
index 093f395..9733a7a 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:allowed_package/unversioned_lib.dart';
 import 'package:allowed_package/versioned_2_10_lib.dart';
 import 'package:allowed_package/versioned_2_8_lib.dart';
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.expect
index b77b7a9..53be886 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.expect
@@ -1,39 +1,36 @@
 //
 // Problems outside component:
 //
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the package language version or setting the language version to 2.10 or higher.
 // int? versionedUnallowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versionedAllowedPackage; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:allowed_package/unversioned_lib.dart";
@@ -51,18 +48,7 @@
 
 static method main() → dynamic {}
 
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? unversionedLibrary; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -76,8 +62,8 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 import self as self3;
@@ -93,7 +79,7 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
@@ -106,7 +92,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:8:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_10_Library; // error
 //    ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect
index b77b7a9..53be886 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect
@@ -1,39 +1,36 @@
 //
 // Problems outside component:
 //
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the package language version or setting the language version to 2.10 or higher.
 // int? versionedUnallowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versionedAllowedPackage; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:allowed_package/unversioned_lib.dart";
@@ -51,18 +48,7 @@
 
 static method main() → dynamic {}
 
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? unversionedLibrary; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -76,8 +62,8 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 import self as self3;
@@ -93,7 +79,7 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
@@ -106,7 +92,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:8:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_10_Library; // error
 //    ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.outline.expect
index c3f6a3e..3f5e587 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.outline.expect
@@ -1,39 +1,36 @@
 //
 // Problems outside component:
 //
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// Try removing the package language version or setting the language version to 2.10 or higher.
 // int? versionedUnallowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_AllowedPackage; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? versionedAllowedPackage; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:allowed_package/unversioned_lib.dart";
@@ -52,18 +49,7 @@
 static method main() → dynamic
   ;
 
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? unversionedLibrary; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -77,8 +63,8 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 import self as self3;
@@ -94,7 +80,7 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
@@ -107,7 +93,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:8:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_10_Library; // error
 //    ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.transformed.expect
index ab52108..4d91921 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:allowed_package/unversioned_lib.dart";
@@ -16,18 +16,7 @@
 
 static method main() → dynamic {}
 
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
-// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
-// int? unversionedLibrary; // error
-//    ^
-// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -41,8 +30,8 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_8_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
-// // @dart=2.9
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
 // ^^^^^^^^^^^^
 //
 import self as self3;
@@ -58,7 +47,7 @@
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_9_Library; // error
 //    ^
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
@@ -71,7 +60,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:8:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
 // int? versioned_2_10_Library; // error
 //    ^
diff --git a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart
index 102ec22..10bfda8 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 int? versionedUnallowedPackage; // error
diff --git a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart
index 81ee1c8..ee923a2 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.10
 
 int? versionedAllowedPackage; // error
diff --git a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart
index f8d4466..b3c0c6d 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.8
 
 int? versioned_2_8_AllowedPackage; // error
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
index 46053fa..ff693f6 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 int? versioned_2_9_AllowedPackage; // error
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart
index 280282c..c2b3d3e 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 int? unversionedLibrary; // error
diff --git a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart
index a14c6da..364c0af 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart
@@ -4,4 +4,5 @@
 // @dart=2.9
 // @dart=2.10
 
+
 int? versioned_2_10_Library; // error
diff --git a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart
index 0f72066..83fa3c6 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.8
 
 int? versioned_2_8_Library; // error
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart
index c44e5b8..7a9a3ee 100644
--- a/pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart
+++ b/pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 int? versioned_2_9_Library; // error
\ No newline at end of file
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..309a3aa 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
@@ -2,12 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
-// test(E e) {} // Error.
-//      ^
-//
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // test(E e) {} // Error.
 //      ^
 //
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..309a3aa 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
@@ -2,12 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
-// test(E e) {} // Error.
-//      ^
-//
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // test(E e) {} // Error.
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
index 05bcb32..13024a4 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // test(E e) {} // Error.
 //      ^
 //
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..309a3aa 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
@@ -2,12 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
-// test(E e) {} // Error.
-//      ^
-//
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // test(E e) {} // Error.
 //      ^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
index 1fcab84f..aa67aa6 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
index 1fcab84f..aa67aa6 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
index 9141057..74e110e 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
index 1fcab84f..aa67aa6 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the experimental 'extension-types' language feature to be enabled.
+// Try passing the '--enable-experiment=extension-types' command line option.
 // extension type E on A {} // Error because of 'type'.
 //           ^^^^
 //
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
index 0cdd47c..ec986d0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
index 5cfbd7c..b2bc5d7 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async /* futureValueType= self::TestMixin::T* */ {
     final self::TestMixin::R* response = await fetch;
     self::TestMixin::T* result;
     if(response is self::Response<dynamic>*) {
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect
index 5cfbd7c..b2bc5d7 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async /* futureValueType= self::TestMixin::T* */ {
     final self::TestMixin::R* response = await fetch;
     self::TestMixin::T* result;
     if(response is self::Response<dynamic>*) {
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
index 0dcf16e..55e1b209 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* /* futureValueType= self::TestMixin::T* */ /* originally async */ {
     final asy::_Future<self::TestMixin::T*>* :async_future = new asy::_Future::•<self::TestMixin::T*>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T*>* :return_value;
@@ -113,7 +113,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* futureValueType= core::String* */ /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
     core::String? :return_value;
@@ -182,7 +182,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* futureValueType= core::String* */ /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
     core::String? :return_value;
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
index cc061fb..2aa86e0 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method bar() → asy::Future<dynamic>* async 
+  method bar() → asy::Future<dynamic>* async /* futureValueType= dynamic */ 
     return this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -45,7 +45,7 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  method baz() → asy::Future<core::int*>* async 
+  method baz() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect
index cc061fb..2aa86e0 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method bar() → asy::Future<dynamic>* async 
+  method bar() → asy::Future<dynamic>* async /* futureValueType= dynamic */ 
     return this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -45,7 +45,7 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  method baz() → asy::Future<core::int*>* async 
+  method baz() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
index f83341f..ffa2007 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method bar() → asy::Future<dynamic>* /* originally async */ {
+  method bar() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     FutureOr<dynamic>* :return_value;
@@ -70,7 +70,7 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  method baz() → asy::Future<core::int*>* /* originally async */ {
+  method baz() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.expect b/pkg/front_end/testcases/general/future_return.dart.weak.expect
index 9ec0f18..bdb2a13 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.expect
@@ -31,31 +31,31 @@
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class async 
+static method returnClass() → self::Class async /* futureValueType= core::Object? */ 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class> async 
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method returnFutureOrClass() → FutureOr<self::Class> async 
+static method returnFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method returnClassFromDynamic() → self::Class async 
+static method returnClassFromDynamic() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnDynamic();
-static method returnFutureClassDynamic() → asy::Future<self::Class> async 
+static method returnFutureClassDynamic() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-static method returnFutureOrClassDynamic() → FutureOr<self::Class> async 
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-static method returnClassFromFutureClass() → self::Class async 
+static method returnClassFromFutureClass() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnFutureClass();
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async 
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureClass();
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async 
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureClass();
-static method returnClassFromFutureOrClass() → self::Class async 
+static method returnClassFromFutureOrClass() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnFutureOrClass();
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async 
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureOrClass();
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async 
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureOrClass();
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnClass();
   await self::returnFutureClass();
   await self::returnFutureOrClass();
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect b/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect
index 9ec0f18..bdb2a13 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect
@@ -31,31 +31,31 @@
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class async 
+static method returnClass() → self::Class async /* futureValueType= core::Object? */ 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class> async 
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method returnFutureOrClass() → FutureOr<self::Class> async 
+static method returnFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method returnClassFromDynamic() → self::Class async 
+static method returnClassFromDynamic() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnDynamic();
-static method returnFutureClassDynamic() → asy::Future<self::Class> async 
+static method returnFutureClassDynamic() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-static method returnFutureOrClassDynamic() → FutureOr<self::Class> async 
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
-static method returnClassFromFutureClass() → self::Class async 
+static method returnClassFromFutureClass() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnFutureClass();
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async 
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureClass();
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async 
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureClass();
-static method returnClassFromFutureOrClass() → self::Class async 
+static method returnClassFromFutureOrClass() → self::Class async /* futureValueType= core::Object? */ 
   return self::returnFutureOrClass();
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async 
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureOrClass();
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async 
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async /* futureValueType= self::Class */ 
   return self::returnFutureOrClass();
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnClass();
   await self::returnFutureClass();
   await self::returnFutureOrClass();
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
index 4e5fa39..3614ef4 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class /* originally async */ {
+static method returnClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -59,7 +59,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClass() → asy::Future<self::Class> /* originally async */ {
+static method returnFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   self::Class? :return_value;
@@ -86,7 +86,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClass() → FutureOr<self::Class> /* originally async */ {
+static method returnFutureOrClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   self::Class? :return_value;
@@ -113,7 +113,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromDynamic() → self::Class /* originally async */ {
+static method returnClassFromDynamic() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
@@ -140,7 +140,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassDynamic() → asy::Future<self::Class> /* originally async */ {
+static method returnFutureClassDynamic() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -167,7 +167,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassDynamic() → FutureOr<self::Class> /* originally async */ {
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -194,7 +194,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromFutureClass() → self::Class /* originally async */ {
+static method returnClassFromFutureClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
@@ -221,7 +221,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class> /* originally async */ {
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -248,7 +248,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> /* originally async */ {
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -275,7 +275,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromFutureOrClass() → self::Class /* originally async */ {
+static method returnClassFromFutureOrClass() → self::Class /* futureValueType= core::Object? */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
@@ -302,7 +302,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> /* originally async */ {
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -329,7 +329,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> /* originally async */ {
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> /* futureValueType= self::Class */ /* originally async */ {
   final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   FutureOr<self::Class>? :return_value;
@@ -356,7 +356,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
index c8d8b7d..dbc98d6 100644
--- a/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
@@ -8,7 +8,7 @@
 static field core::List<void> l1 = <void>[self::method()];
 static field core::List<void> l2 = <void>[self::method()];
 static method method() → void {}
-static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async {
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async /* futureValueType= dynamic */ {
   void v1 = self::method();
   void v2 = self::method();
   for (void v3 in iterable) {
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
index c8d8b7d..dbc98d6 100644
--- a/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 static field core::List<void> l1 = <void>[self::method()];
 static field core::List<void> l2 = <void>[self::method()];
 static method method() → void {}
-static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async {
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async /* futureValueType= dynamic */ {
   void v1 = self::method();
   void v2 = self::method();
   for (void v3 in iterable) {
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
index dc58e3d..cc36db2 100644
--- a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
 static field core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
 static field core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
 static method method() → void {}
-static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic /* originally async */ {
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/issue129167943.dart b/pkg/front_end/testcases/general/issue129167943.dart
index 73d1967..c7560ea 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart
+++ b/pkg/front_end/testcases/general/issue129167943.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 abstract class A {}
 
 abstract class B {
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue129167943.dart.textual_outline.expect
index 88e4708..2d33b0a 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {}
 
 abstract class B {
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue129167943.dart.textual_outline_modelled.expect
index c1dd876..3d5bb93 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {}
 
 abstract class B {
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
index dbcaed7..8ec3fec 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
@@ -1,244 +1,94 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(core::num x) → void;
 }
 abstract class C extends core::Object implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D1*
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 class D2 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class D3 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D3*
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D4*
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D5 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D5*
+  synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract set foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(core::num x) → void;
 }
 abstract class G extends core::Object implements self::E {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H1 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H1*
+  synthetic constructor •() → self::H1
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 class H2 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H2*
+  synthetic constructor •() → self::H2
     : super core::Object::•()
     ;
-  set foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class H3 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H3*
+  synthetic constructor •() → self::H3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H4*
+  synthetic constructor •() → self::H4
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H5 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H5*
+  synthetic constructor •() → self::H5
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::num x) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect
index dbcaed7..8ec3fec 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect
@@ -1,244 +1,94 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(core::num x) → void;
 }
 abstract class C extends core::Object implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D1*
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 class D2 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class D3 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D3*
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D4*
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D5 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D5*
+  synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract set foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(core::num x) → void;
 }
 abstract class G extends core::Object implements self::E {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H1 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H1*
+  synthetic constructor •() → self::H1
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 class H2 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H2*
+  synthetic constructor •() → self::H2
     : super core::Object::•()
     ;
-  set foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class H3 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H3*
+  synthetic constructor •() → self::H3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H4*
+  synthetic constructor •() → self::H4
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H5 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H5*
+  synthetic constructor •() → self::H5
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::num x) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
index 6d18c9a..e4d23f9 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
@@ -1,232 +1,82 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(core::num x) → void;
 }
 abstract class C extends core::Object implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D1*
+  synthetic constructor •() → self::D1
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 class D2 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     ;
-  method foo(covariant-by-declaration core::int* x) → void
+  method foo(covariant-by-declaration core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D3 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D3*
+  synthetic constructor •() → self::D3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D4*
+  synthetic constructor •() → self::D4
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D5 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D5*
+  synthetic constructor •() → self::D5
     ;
-  abstract method foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract set foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(core::num x) → void;
 }
 abstract class G extends core::Object implements self::E {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H1 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H1*
+  synthetic constructor •() → self::H1
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 class H2 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H2*
+  synthetic constructor •() → self::H2
     ;
-  set foo(covariant-by-declaration core::int* x) → void
+  set foo(covariant-by-declaration core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class H3 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H3*
+  synthetic constructor •() → self::H3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H4*
+  synthetic constructor •() → self::H4
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H5 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H5*
+  synthetic constructor •() → self::H5
     ;
-  abstract set foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::num x) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
index dbcaed7..8ec3fec 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
@@ -1,244 +1,94 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(core::num x) → void;
 }
 abstract class C extends core::Object implements self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D1*
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 class D2 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D2*
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class D3 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D3*
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D4*
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::int x) → void;
 }
 abstract class D5 extends core::Object implements self::A, self::C, self::B {
-  synthetic constructor •() → self::D5*
+  synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract method foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo(covariant-by-declaration core::num x) → void;
 }
 abstract class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract set foo(core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(core::num x) → void;
 }
 abstract class G extends core::Object implements self::E {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H1 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H1*
+  synthetic constructor •() → self::H1
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 class H2 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H2*
+  synthetic constructor •() → self::H2
     : super core::Object::•()
     ;
-  set foo(covariant-by-declaration core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set foo(covariant-by-declaration core::int x) → void {}
 }
 abstract class H3 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H3*
+  synthetic constructor •() → self::H3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H4*
+  synthetic constructor •() → self::H4
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::int* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::int x) → void;
 }
 abstract class H5 extends core::Object implements self::A, self::E, self::G {
-  synthetic constructor •() → self::H5*
+  synthetic constructor •() → self::H5
     : super core::Object::•()
     ;
-  abstract set foo(covariant-by-declaration core::num* x) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set foo(covariant-by-declaration core::num x) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue31767.dart b/pkg/front_end/testcases/general/issue31767.dart
index 4a9997b..045dced 100644
--- a/pkg/front_end/testcases/general/issue31767.dart
+++ b/pkg/front_end/testcases/general/issue31767.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 import 'issue31767_lib.dart';
diff --git a/pkg/front_end/testcases/general/issue31767.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue31767.dart.textual_outline.expect
index 56c60d9..c0f1050 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.textual_outline.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 import 'issue31767_lib.dart';
 
 StringBuffer sb;
diff --git a/pkg/front_end/testcases/general/issue31767.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue31767.dart.textual_outline_modelled.expect
index 05a7c2e..e349691 100644
--- a/pkg/front_end/testcases/general/issue31767.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue31767.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 import 'issue31767_lib.dart';
 
 StringBuffer sb;
diff --git a/pkg/front_end/testcases/general/issue31767_lib.dart b/pkg/front_end/testcases/general/issue31767_lib.dart
index 2041300..61406fd 100644
--- a/pkg/front_end/testcases/general/issue31767_lib.dart
+++ b/pkg/front_end/testcases/general/issue31767_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 import 'issue31767.dart';
diff --git a/pkg/front_end/testcases/general/issue34515.dart b/pkg/front_end/testcases/general/issue34515.dart
index eeebfc8..829ce3b 100644
--- a/pkg/front_end/testcases/general/issue34515.dart
+++ b/pkg/front_end/testcases/general/issue34515.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import "issue34515_lib1.dart";
 import "issue34515_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/issue34515.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue34515.dart.textual_outline.expect
index 76ca224..0d74c15 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue34515_lib1.dart";
 import "issue34515_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/issue34515.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue34515.dart.textual_outline_modelled.expect
index 51b0be9..608fcf1 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue34515_lib1.dart";
 import "issue34515_lib2.dart";
 
diff --git a/pkg/front_end/testcases/general/issue34515.dart.weak.expect b/pkg/front_end/testcases/general/issue34515.dart.weak.expect
index 6ca6a9d..d92d811 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,51 +17,31 @@
 import "org-dartlang-testcase:///issue34515_lib2.dart";
 
 static method test() → void {
-  let final core::Object* #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(1);
   ^^^^^^^^^^^^^";
-  let final core::Object* #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(\"a\");
   ^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::int* a) → self2::ImportedClass*
+  constructor •(core::int a) → self2::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::String* a) → self3::ImportedClass*
+  constructor •(core::String a) → self3::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect
index 6ca6a9d..d92d811 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,51 +17,31 @@
 import "org-dartlang-testcase:///issue34515_lib2.dart";
 
 static method test() → void {
-  let final core::Object* #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(1);
   ^^^^^^^^^^^^^";
-  let final core::Object* #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(\"a\");
   ^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::int* a) → self2::ImportedClass*
+  constructor •(core::int a) → self2::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::String* a) → self3::ImportedClass*
+  constructor •(core::String a) → self3::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue34515.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34515.dart.weak.outline.expect
index a6f6e10..70e67a5 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue34515_lib1.dart";
@@ -9,40 +9,20 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::int* a) → self2::ImportedClass*
+  constructor •(core::int a) → self2::ImportedClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::String* a) → self3::ImportedClass*
+  constructor •(core::String a) → self3::ImportedClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue34515.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34515.dart.weak.transformed.expect
index 6ca6a9d..d92d811 100644
--- a/pkg/front_end/testcases/general/issue34515.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34515.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,51 +17,31 @@
 import "org-dartlang-testcase:///issue34515_lib2.dart";
 
 static method test() → void {
-  let final core::Object* #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(1);
   ^^^^^^^^^^^^^";
-  let final core::Object* #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  let final core::Object? #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
   ImportedClass(\"a\");
   ^^^^^^^^^^^^^";
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::int* a) → self2::ImportedClass*
+  constructor •(core::int a) → self2::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class ImportedClass extends core::Object {
-  constructor •(core::String* a) → self3::ImportedClass*
+  constructor •(core::String a) → self3::ImportedClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue34515_lib1.dart b/pkg/front_end/testcases/general/issue34515_lib1.dart
index 1777ac3..00f9340 100644
--- a/pkg/front_end/testcases/general/issue34515_lib1.dart
+++ b/pkg/front_end/testcases/general/issue34515_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class ImportedClass {
   ImportedClass(int a);
 }
diff --git a/pkg/front_end/testcases/general/issue34515_lib2.dart b/pkg/front_end/testcases/general/issue34515_lib2.dart
index 7382d3c..2ec64bb 100644
--- a/pkg/front_end/testcases/general/issue34515_lib2.dart
+++ b/pkg/front_end/testcases/general/issue34515_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class ImportedClass {
   ImportedClass(String a);
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart b/pkg/front_end/testcases/general/issue34714.dart
index df43261..918ed93 100644
--- a/pkg/front_end/testcases/general/issue34714.dart
+++ b/pkg/front_end/testcases/general/issue34714.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A<T> {
   factory A() = B; // Should infer B<T>.
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue34714.dart.textual_outline.expect
index 29124ba..82ac1d1 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   factory A() = B;
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue34714.dart.textual_outline_modelled.expect
index 29124ba..82ac1d1 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   factory A() = B;
 }
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
index c0cc024..c16c3c6 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return new self::B::•<self::A::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return new self::B::•<self::A::•::T%>();
 }
-class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect
index c0cc024..c16c3c6 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return new self::B::•<self::A::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return new self::B::•<self::A::•::T%>();
 }
-class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
index 6b16904..ded3fad 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return new self::B::•<self::A::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return new self::B::•<self::A::•::T%>();
 }
-class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
index c0cc024..c16c3c6 100644
--- a/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.transformed.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return new self::B::•<self::A::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return new self::B::•<self::A::•::T%>();
 }
-class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue34899.dart b/pkg/front_end/testcases/general/issue34899.dart
index 6923798..deacf78 100644
--- a/pkg/front_end/testcases/general/issue34899.dart
+++ b/pkg/front_end/testcases/general/issue34899.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo<T> {
   final Future<dynamic> Function() quux;
   T t;
@@ -12,12 +12,12 @@
 }
 
 class Bar {
-  Foo<Baz> qux;
+  Foo<Baz> qux = throw '';
 
   Future<void> quuz() =>
       qux().then((baz) => corge(baz)).then((grault) => garply(grault));
 
-  Grault corge(Baz baz) => null;
+  Grault corge(Baz baz) => throw '';
 
   void garply(Grault grault) {}
 }
diff --git a/pkg/front_end/testcases/general/issue34899.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue34899.dart.textual_outline.expect
index f989a75..1e916aa 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo<T> {
   final Future<dynamic> Function() quux;
   T t;
@@ -7,10 +6,10 @@
 }
 
 class Bar {
-  Foo<Baz> qux;
+  Foo<Baz> qux = throw '';
   Future<void> quuz() =>
       qux().then((baz) => corge(baz)).then((grault) => garply(grault));
-  Grault corge(Baz baz) => null;
+  Grault corge(Baz baz) => throw '';
   void garply(Grault grault) {}
 }
 
diff --git a/pkg/front_end/testcases/general/issue34899.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue34899.dart.textual_outline_modelled.expect
index 1f0bcd0..cda9295 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class Bar {
-  Foo<Baz> qux;
+  Foo<Baz> qux = throw '';
   Future<void> quuz() =>
       qux().then((baz) => corge(baz)).then((grault) => garply(grault));
-  Grault corge(Baz baz) => null;
+  Grault corge(Baz baz) => throw '';
   void garply(Grault grault) {}
 }
 
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
index c1735e3..b7fefe3 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  final field () →* asy::Future<dynamic>* quux;
-  covariant-by-class field self::Foo::T* t;
-  constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field () → asy::Future<dynamic> quux;
+  covariant-by-class field self::Foo::T% t;
+  constructor •(() → asy::Future<dynamic> quux, self::Foo::T% t) → self::Foo<self::Foo::T%>
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
-  method call() → asy::Future<self::Foo::T*>*
-    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call() → asy::Future<self::Foo::T%>
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
-  field self::Foo<self::Baz*>* qux = null;
-  synthetic constructor •() → self::Bar*
+  field self::Foo<self::Baz> qux = throw "";
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method quuz() → asy::Future<void>*
-    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  method corge(self::Baz* baz) → self::Grault*
-    return null;
-  method garply(self::Grault* grault) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method quuz() → asy::Future<void>
+    return this.{self::Bar::qux}{self::Foo<self::Baz>}.{self::Foo::call}(){() → asy::Future<self::Baz>}.{asy::Future::then}<self::Grault>((self::Baz baz) → self::Grault => this.{self::Bar::corge}(baz){(self::Baz) → self::Grault}){((self::Baz) → FutureOr<self::Grault>, {onError: core::Function?}) → asy::Future<self::Grault>}.{asy::Future::then}<void>((self::Grault grault) → void => this.{self::Bar::garply}(grault){(self::Grault) → void}){((self::Grault) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  method corge(self::Baz baz) → self::Grault
+    return throw "";
+  method garply(self::Grault grault) → void {}
 }
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Grault extends core::Object {
-  synthetic constructor •() → self::Grault*
+  synthetic constructor •() → self::Grault
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect
index c1735e3..b7fefe3 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  final field () →* asy::Future<dynamic>* quux;
-  covariant-by-class field self::Foo::T* t;
-  constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field () → asy::Future<dynamic> quux;
+  covariant-by-class field self::Foo::T% t;
+  constructor •(() → asy::Future<dynamic> quux, self::Foo::T% t) → self::Foo<self::Foo::T%>
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
-  method call() → asy::Future<self::Foo::T*>*
-    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call() → asy::Future<self::Foo::T%>
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
-  field self::Foo<self::Baz*>* qux = null;
-  synthetic constructor •() → self::Bar*
+  field self::Foo<self::Baz> qux = throw "";
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method quuz() → asy::Future<void>*
-    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  method corge(self::Baz* baz) → self::Grault*
-    return null;
-  method garply(self::Grault* grault) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method quuz() → asy::Future<void>
+    return this.{self::Bar::qux}{self::Foo<self::Baz>}.{self::Foo::call}(){() → asy::Future<self::Baz>}.{asy::Future::then}<self::Grault>((self::Baz baz) → self::Grault => this.{self::Bar::corge}(baz){(self::Baz) → self::Grault}){((self::Baz) → FutureOr<self::Grault>, {onError: core::Function?}) → asy::Future<self::Grault>}.{asy::Future::then}<void>((self::Grault grault) → void => this.{self::Bar::garply}(grault){(self::Grault) → void}){((self::Grault) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  method corge(self::Baz baz) → self::Grault
+    return throw "";
+  method garply(self::Grault grault) → void {}
 }
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Grault extends core::Object {
-  synthetic constructor •() → self::Grault*
+  synthetic constructor •() → self::Grault
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
index d15bcb7..715285c 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
@@ -1,74 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  final field () →* asy::Future<dynamic>* quux;
-  covariant-by-class field self::Foo::T* t;
-  constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field () → asy::Future<dynamic> quux;
+  covariant-by-class field self::Foo::T% t;
+  constructor •(() → asy::Future<dynamic> quux, self::Foo::T% t) → self::Foo<self::Foo::T%>
     ;
-  method call() → asy::Future<self::Foo::T*>*
+  method call() → asy::Future<self::Foo::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
-  field self::Foo<self::Baz*>* qux;
-  synthetic constructor •() → self::Bar*
+  field self::Foo<self::Baz> qux;
+  synthetic constructor •() → self::Bar
     ;
-  method quuz() → asy::Future<void>*
+  method quuz() → asy::Future<void>
     ;
-  method corge(self::Baz* baz) → self::Grault*
+  method corge(self::Baz baz) → self::Grault
     ;
-  method garply(self::Grault* grault) → void
+  method garply(self::Grault grault) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Grault extends core::Object {
-  synthetic constructor •() → self::Grault*
+  synthetic constructor •() → self::Grault
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
index c1735e3..b7fefe3 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  final field () →* asy::Future<dynamic>* quux;
-  covariant-by-class field self::Foo::T* t;
-  constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field () → asy::Future<dynamic> quux;
+  covariant-by-class field self::Foo::T% t;
+  constructor •(() → asy::Future<dynamic> quux, self::Foo::T% t) → self::Foo<self::Foo::T%>
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
-  method call() → asy::Future<self::Foo::T*>*
-    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call() → asy::Future<self::Foo::T%>
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
-  field self::Foo<self::Baz*>* qux = null;
-  synthetic constructor •() → self::Bar*
+  field self::Foo<self::Baz> qux = throw "";
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method quuz() → asy::Future<void>*
-    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
-  method corge(self::Baz* baz) → self::Grault*
-    return null;
-  method garply(self::Grault* grault) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method quuz() → asy::Future<void>
+    return this.{self::Bar::qux}{self::Foo<self::Baz>}.{self::Foo::call}(){() → asy::Future<self::Baz>}.{asy::Future::then}<self::Grault>((self::Baz baz) → self::Grault => this.{self::Bar::corge}(baz){(self::Baz) → self::Grault}){((self::Baz) → FutureOr<self::Grault>, {onError: core::Function?}) → asy::Future<self::Grault>}.{asy::Future::then}<void>((self::Grault grault) → void => this.{self::Bar::garply}(grault){(self::Grault) → void}){((self::Grault) → FutureOr<void>, {onError: core::Function?}) → asy::Future<void>};
+  method corge(self::Baz baz) → self::Grault
+    return throw "";
+  method garply(self::Grault grault) → void {}
 }
 class Baz extends core::Object {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Grault extends core::Object {
-  synthetic constructor •() → self::Grault*
+  synthetic constructor •() → self::Grault
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart b/pkg/front_end/testcases/general/issue35875.dart
index cdcd28f..27f7a21 100644
--- a/pkg/front_end/testcases/general/issue35875.dart
+++ b/pkg/front_end/testcases/general/issue35875.dart
@@ -1,10 +1,10 @@
 // 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.
-// @dart=2.9
+
 class A {
-  int a;
-  A(int a) {
+  int? a;
+  A(int? a) {
     (this).a = a;
   }
 }
diff --git a/pkg/front_end/testcases/general/issue35875.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue35875.dart.textual_outline.expect
index a1997db..1201844 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
-  int a;
-  A(int a) {}
+  int? a;
+  A(int? a) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue35875.dart.textual_outline_modelled.expect
index 0de1b77..697216b 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
-  A(int a) {}
-  int a;
+  A(int? a) {}
+  int? a;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart.weak.expect b/pkg/front_end/testcases/general/issue35875.dart.weak.expect
index fe26450..9e0ce1e 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.weak.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  constructor •(core::int* a) → self::A*
+  field core::int? a = null;
+  constructor •(core::int? a) → self::A
     : super core::Object::•() {
     this.{self::A::a} = a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect
index fe26450..9e0ce1e 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  constructor •(core::int* a) → self::A*
+  field core::int? a = null;
+  constructor •(core::int? a) → self::A
     : super core::Object::•() {
     this.{self::A::a} = a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue35875.dart.weak.outline.expect
index f25c2ca..a5aedf8 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a;
-  constructor •(core::int* a) → self::A*
+  field core::int? a;
+  constructor •(core::int? a) → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue35875.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue35875.dart.weak.transformed.expect
index fe26450..9e0ce1e 100644
--- a/pkg/front_end/testcases/general/issue35875.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue35875.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* a = null;
-  constructor •(core::int* a) → self::A*
+  field core::int? a = null;
+  constructor •(core::int? a) → self::A
     : super core::Object::•() {
     this.{self::A::a} = a;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue37027.dart b/pkg/front_end/testcases/general/issue37027.dart
index 1da79e2..6272d62 100644
--- a/pkg/front_end/testcases/general/issue37027.dart
+++ b/pkg/front_end/testcases/general/issue37027.dart
@@ -1,9 +1,10 @@
 // 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.
+
 class C {
   final Set<int> s;
   C(List<int> ell) : s = {for (var e in ell) if (e.isOdd) 2 * e};
 }
-// @dart=2.9
+
 main() {}
diff --git a/pkg/front_end/testcases/general/issue37381.dart b/pkg/front_end/testcases/general/issue37381.dart
index aabaf7f..9424045 100644
--- a/pkg/front_end/testcases/general/issue37381.dart
+++ b/pkg/front_end/testcases/general/issue37381.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // This test checks that the bug reported at http://dartbug.com/37381 is fixed.
 
 class A<X> {
diff --git a/pkg/front_end/testcases/general/issue37381.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue37381.dart.textual_outline.expect
index 8b08987..0e78f9c 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {
   R f<R>(R Function<X>(A<X>) f) => f<X>(this);
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue37381.dart.textual_outline_modelled.expect
index 8b08987..0e78f9c 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {
   R f<R>(R Function<X>(A<X>) f) => f<X>(this);
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.expect
index 8ec0e22..b0dd96a 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
-    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<R extends core::Object? = dynamic>(<X extends core::Object? = dynamic>(self::A<X%>) → self::A::f::R% f) → self::A::f::R%
+    return f<self::A::X%>(this){(self::A<self::A::X%>) → self::A::f::R%};
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::int*>();
-  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
+  self::A<core::num> a = new self::A::•<core::int>();
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect
index 8ec0e22..b0dd96a 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
-    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<R extends core::Object? = dynamic>(<X extends core::Object? = dynamic>(self::A<X%>) → self::A::f::R% f) → self::A::f::R%
+    return f<self::A::X%>(this){(self::A<self::A::X%>) → self::A::f::R%};
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::int*>();
-  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
+  self::A<core::num> a = new self::A::•<core::int>();
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.outline.expect
index a22155d..5f94281 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     ;
-  method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
+  method f<R extends core::Object? = dynamic>(<X extends core::Object? = dynamic>(self::A<X%>) → self::A::f::R% f) → self::A::f::R%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
index 8ec0e22..b0dd96a 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
-    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<R extends core::Object? = dynamic>(<X extends core::Object? = dynamic>(self::A<X%>) → self::A::f::R% f) → self::A::f::R%
+    return f<self::A::X%>(this){(self::A<self::A::X%>) → self::A::f::R%};
 }
 static method main() → dynamic {
-  self::A<core::num*>* a = new self::A::•<core::int*>();
-  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
+  self::A<core::num> a = new self::A::•<core::int>();
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue37753.dart b/pkg/front_end/testcases/general/issue37753.dart
index f653337..d55dc2f 100644
--- a/pkg/front_end/testcases/general/issue37753.dart
+++ b/pkg/front_end/testcases/general/issue37753.dart
@@ -2,8 +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.
 
-// @dart = 2.9
-
 // Regression test for https://github.com/dart-lang/sdk/issues/37753.
 // A missing piece of transform logic caused nested sync* set to a variable
 // to not get transformed, which would either fail an assert or crash.
diff --git a/pkg/front_end/testcases/general/issue37753.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue37753.dart.textual_outline.expect
index 771fd22..9598357 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 Iterable<int> getElements() sync* {}
 main() => print(getElements());
diff --git a/pkg/front_end/testcases/general/issue37753.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue37753.dart.textual_outline_modelled.expect
index 771fd22..9598357 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 Iterable<int> getElements() sync* {}
 main() => print(getElements());
diff --git a/pkg/front_end/testcases/general/issue37753.dart.weak.expect b/pkg/front_end/testcases/general/issue37753.dart.weak.expect
index 8ce1e9b..a0ac6b6 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.weak.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getElements() → core::Iterable<core::int*>* sync* {
-  core::Iterable<core::int*>* elements;
-  elements = (() → core::Iterable<core::int*>* sync* {
+static method getElements() → core::Iterable<core::int> sync* {
+  core::Iterable<core::int> elements;
+  elements = (() → core::Iterable<core::int> sync* {
     yield 7;
-  })(){() →* core::Iterable<core::int*>*};
+  })(){() → core::Iterable<core::int>};
   yield* elements;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect
index 8ce1e9b..a0ac6b6 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getElements() → core::Iterable<core::int*>* sync* {
-  core::Iterable<core::int*>* elements;
-  elements = (() → core::Iterable<core::int*>* sync* {
+static method getElements() → core::Iterable<core::int> sync* {
+  core::Iterable<core::int> elements;
+  elements = (() → core::Iterable<core::int> sync* {
     yield 7;
-  })(){() →* core::Iterable<core::int*>*};
+  })(){() → core::Iterable<core::int>};
   yield* elements;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue37753.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue37753.dart.weak.outline.expect
index 2032eab..fa2f690 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getElements() → core::Iterable<core::int*>* sync* 
+static method getElements() → core::Iterable<core::int> sync* 
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue37753.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37753.dart.weak.transformed.expect
index 7321092..64d5279 100644
--- a/pkg/front_end/testcases/general/issue37753.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37753.dart.weak.transformed.expect
@@ -1,19 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method getElements() → core::Iterable<core::int*>* /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+static method getElements() → core::Iterable<core::int> /* originally sync* */ {
+  function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {
-        core::Iterable<core::int*>* elements;
-        elements = (() → core::Iterable<core::int*>* /* originally sync* */ {
-          function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-            core::int* :await_jump_var = 0;
+        core::Iterable<core::int> elements;
+        elements = (() → core::Iterable<core::int> /* originally sync* */ {
+          function :sync_op_gen() → (core::_SyncIterator<dynamic>?, dynamic, dynamic) → core::bool* {
+            core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
-            function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+            function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
               {
                 {
                   :iterator.{core::_SyncIterator::_current} = 7;
@@ -24,8 +24,8 @@
             }
             return :sync_op;
           }
-          return new core::_SyncIterable::•<core::int*>(:sync_op_gen);
-        })(){() →* core::Iterable<core::int*>*};
+          return new core::_SyncIterable::•<core::int>(:sync_op_gen);
+        })(){() → core::Iterable<core::int>};
         {
           :iterator.{core::_SyncIterator::_yieldEachIterable} = elements;
           [yield] true;
@@ -35,7 +35,7 @@
     }
     return :sync_op;
   }
-  return new core::_SyncIterable::•<core::int*>(:sync_op_gen);
+  return new core::_SyncIterable::•<core::int>(:sync_op_gen);
 }
 static method main() → dynamic
   return core::print(self::getElements());
diff --git a/pkg/front_end/testcases/general/issue37776.dart b/pkg/front_end/testcases/general/issue37776.dart
index 600c1f5..49b4f52 100644
--- a/pkg/front_end/testcases/general/issue37776.dart
+++ b/pkg/front_end/testcases/general/issue37776.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // This test checks that the bug reported at http://dartbug.com/37776 is fixed.
 
 class X {
diff --git a/pkg/front_end/testcases/general/issue37776.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue37776.dart.textual_outline.expect
index 48496d9..fe9bbfe 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class X {
   const X.foo();
 }
diff --git a/pkg/front_end/testcases/general/issue37776.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue37776.dart.textual_outline_modelled.expect
index 48496d9..fe9bbfe 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class X {
   const X.foo();
 }
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.expect
index 7840a4b..67447b5 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,34 +17,14 @@
 import "dart:core" as core;
 
 class X#1 extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X#1*
+  const constructor foo() → self::X#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X*
+  const constructor foo() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect
index 7840a4b..67447b5 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,34 +17,14 @@
 import "dart:core" as core;
 
 class X#1 extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X#1*
+  const constructor foo() → self::X#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X*
+  const constructor foo() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.outline.expect
index 81a519a..5ed6ff8 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,34 +13,14 @@
 import "dart:core" as core;
 
 class X#1 extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X#1*
+  const constructor foo() → self::X#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X*
+  const constructor foo() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
index 7840a4b..67447b5 100644
--- a/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,34 +17,14 @@
 import "dart:core" as core;
 
 class X#1 extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X#1*
+  const constructor foo() → self::X#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object /*hasConstConstructor*/  {
-  const constructor foo() → self::X*
+  const constructor foo() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {
   invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
index 3d3ebd1..be3108a 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.expect
@@ -26,7 +26,7 @@
     return;
     ^" in null;
   }
-  function f2() → invalid-type async {
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {
     return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
     return;
     ^" in null;
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect
index 3d3ebd1..be3108a 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect
@@ -26,7 +26,7 @@
     return;
     ^" in null;
   }
-  function f2() → invalid-type async {
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {
     return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
     return;
     ^" in null;
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
index 5073c13..0726288 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     return;
     ^" in null;
   }
-  function f2() → invalid-type /* originally async */ {
+  function f2() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
index 2de98d4..7681572 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.expect
@@ -24,18 +24,18 @@
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {}
-  function f2() → invalid-type async {}
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {}
   function f3() → core::int {
     return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int f3() {}
   ^" in null;
   }
-  function f4() → asy::Future<core::int> async {
+  function f4() → asy::Future<core::int> async /* futureValueType= core::int */ {
     return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   Future<int> f4() async {}
   ^" in null;
   }
 };
-static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async => await f;
+static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async /* futureValueType= dynamic */ => await f;
 static field (dynamic) → dynamic c = (dynamic f) → dynamic => f;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect
index 2de98d4..7681572 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect
@@ -24,18 +24,18 @@
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {}
-  function f2() → invalid-type async {}
+  function f2() → invalid-type async /* futureValueType= invalid-type */ {}
   function f3() → core::int {
     return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   int f3() {}
   ^" in null;
   }
-  function f4() → asy::Future<core::int> async {
+  function f4() → asy::Future<core::int> async /* futureValueType= core::int */ {
     return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   Future<int> f4() async {}
   ^" in null;
   }
 };
-static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async => await f;
+static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async /* futureValueType= dynamic */ => await f;
 static field (dynamic) → dynamic c = (dynamic f) → dynamic => f;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
index d67c665..8beb24a 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
 
 static field () → Null a = () → Null {
   function f1() → invalid-type {}
-  function f2() → invalid-type /* originally async */ {
+  function f2() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -53,7 +53,7 @@
   int f3() {}
   ^" in null;
   }
-  function f4() → asy::Future<core::int> /* originally async */ {
+  function f4() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     FutureOr<core::int>? :return_value;
@@ -83,7 +83,7 @@
     return :async_future;
   }
 };
-static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> /* originally async */ {
+static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/general/issue38812.dart b/pkg/front_end/testcases/general/issue38812.dart
index eba2ba6..9d26308 100644
--- a/pkg/front_end/testcases/general/issue38812.dart
+++ b/pkg/front_end/testcases/general/issue38812.dart
@@ -1,7 +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.
-// @dart=2.9
+
 typedef G<X> = void Function();
 
 class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>> {}
diff --git a/pkg/front_end/testcases/general/issue38812.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue38812.dart.textual_outline.expect
index 5b18a25..f69b6fc 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef G<X> = void Function();
 
 class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>> {}
diff --git a/pkg/front_end/testcases/general/issue38812.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue38812.dart.textual_outline_modelled.expect
index ef0531c..f0058f6 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends G<A<Y, X>>, Y extends G<A<X, Y>>> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue38812.dart.weak.expect b/pkg/front_end/testcases/general/issue38812.dart.weak.expect
index 1bcd793..7a83fef 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<unrelated X extends core::Object* = dynamic> = () →* void;
-class A<X extends () →* void, Y extends () →* void> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*, self::A::Y*>*
+typedef G<unrelated X extends core::Object? = dynamic> = () → void;
+class A<X extends () → void, Y extends () → void> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X, self::A::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<() →* void, () →* void>();
+  new self::A::•<() → void, () → void>();
 }
diff --git a/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect
index 1bcd793..7a83fef 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<unrelated X extends core::Object* = dynamic> = () →* void;
-class A<X extends () →* void, Y extends () →* void> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*, self::A::Y*>*
+typedef G<unrelated X extends core::Object? = dynamic> = () → void;
+class A<X extends () → void, Y extends () → void> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X, self::A::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<() →* void, () →* void>();
+  new self::A::•<() → void, () → void>();
 }
diff --git a/pkg/front_end/testcases/general/issue38812.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue38812.dart.weak.outline.expect
index d9a199c..a50b799 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<unrelated X extends core::Object* = dynamic> = () →* void;
-class A<X extends () →* void, Y extends () →* void> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*, self::A::Y*>*
+typedef G<unrelated X extends core::Object? = dynamic> = () → void;
+class A<X extends () → void, Y extends () → void> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X, self::A::Y>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue38812.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38812.dart.weak.transformed.expect
index 1bcd793..7a83fef 100644
--- a/pkg/front_end/testcases/general/issue38812.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38812.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef G<unrelated X extends core::Object* = dynamic> = () →* void;
-class A<X extends () →* void, Y extends () →* void> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*, self::A::Y*>*
+typedef G<unrelated X extends core::Object? = dynamic> = () → void;
+class A<X extends () → void, Y extends () → void> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X, self::A::Y>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::A::•<() →* void, () →* void>();
+  new self::A::•<() → void, () → void>();
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart b/pkg/front_end/testcases/general/issue38938.dart
index ff65f62..5f76015 100644
--- a/pkg/front_end/testcases/general/issue38938.dart
+++ b/pkg/front_end/testcases/general/issue38938.dart
@@ -1,10 +1,10 @@
 // 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.
-// @dart=2.9
+
 class A {
-  int v;
-  int v;
+  int? v;
+  int? v;
   A(this.v);
   A.second();
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue38938.dart.textual_outline.expect
index 4358745..65c652c 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
-  int v;
-  int v;
+  int? v;
+  int? v;
   A(this.v);
   A.second();
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue38938.dart.textual_outline_modelled.expect
index a1d2ccd..50e19e2 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
   A(this.v);
   A.second();
-  int v;
-  int v;
+  int? v;
+  int? v;
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
index 2ed9c3f..6736f12 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue38938.dart:7:7: Error: 'v' is already declared in this scope.
-//   int v;
-//       ^
-// pkg/front_end/testcases/general/issue38938.dart:6:7: Context: Previous declaration of 'v'.
-//   int v;
-//       ^
+// pkg/front_end/testcases/general/issue38938.dart:7:8: Error: 'v' is already declared in this scope.
+//   int? v;
+//        ^
+// pkg/front_end/testcases/general/issue38938.dart:6:8: Context: Previous declaration of 'v'.
+//   int? v;
+//        ^
 //
 // pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
 //   A(this.v);
@@ -17,23 +17,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  constructor •(core::int* v) → self::A*
+  field core::int? v = null;
+  constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
-  constructor second() → self::A*
+  constructor second() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
index 2ed9c3f..6736f12 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue38938.dart:7:7: Error: 'v' is already declared in this scope.
-//   int v;
-//       ^
-// pkg/front_end/testcases/general/issue38938.dart:6:7: Context: Previous declaration of 'v'.
-//   int v;
-//       ^
+// pkg/front_end/testcases/general/issue38938.dart:7:8: Error: 'v' is already declared in this scope.
+//   int? v;
+//        ^
+// pkg/front_end/testcases/general/issue38938.dart:6:8: Context: Previous declaration of 'v'.
+//   int? v;
+//        ^
 //
 // pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
 //   A(this.v);
@@ -17,23 +17,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  constructor •(core::int* v) → self::A*
+  field core::int? v = null;
+  constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
-  constructor second() → self::A*
+  constructor second() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.outline.expect
index b5f3744..8a64757 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue38938.dart:7:7: Error: 'v' is already declared in this scope.
-//   int v;
-//       ^
-// pkg/front_end/testcases/general/issue38938.dart:6:7: Context: Previous declaration of 'v'.
-//   int v;
-//       ^
+// pkg/front_end/testcases/general/issue38938.dart:7:8: Error: 'v' is already declared in this scope.
+//   int? v;
+//        ^
+// pkg/front_end/testcases/general/issue38938.dart:6:8: Context: Previous declaration of 'v'.
+//   int? v;
+//        ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v;
-  constructor •(core::int* v) → self::A*
+  field core::int? v;
+  constructor •(core::int? v) → self::A
     ;
-  constructor second() → self::A*
+  constructor second() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
index 2ed9c3f..6736f12 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue38938.dart:7:7: Error: 'v' is already declared in this scope.
-//   int v;
-//       ^
-// pkg/front_end/testcases/general/issue38938.dart:6:7: Context: Previous declaration of 'v'.
-//   int v;
-//       ^
+// pkg/front_end/testcases/general/issue38938.dart:7:8: Error: 'v' is already declared in this scope.
+//   int? v;
+//        ^
+// pkg/front_end/testcases/general/issue38938.dart:6:8: Context: Previous declaration of 'v'.
+//   int? v;
+//        ^
 //
 // pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
 //   A(this.v);
@@ -17,23 +17,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  constructor •(core::int* v) → self::A*
+  field core::int? v = null;
+  constructor •(core::int? v) → self::A
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
-  constructor second() → self::A*
+  constructor second() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38943.dart b/pkg/front_end/testcases/general/issue38943.dart
index 2db3c96..1d86b19 100644
--- a/pkg/front_end/testcases/general/issue38943.dart
+++ b/pkg/front_end/testcases/general/issue38943.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class D<X extends void Function()> {
   factory D.foo() => new D._();
   D._() {}
diff --git a/pkg/front_end/testcases/general/issue38943.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue38943.dart.textual_outline.expect
index c666e23..f78c92f 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class D<X extends void Function()> {
   factory D.foo() => new D._();
   D._() {}
diff --git a/pkg/front_end/testcases/general/issue38943.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue38943.dart.textual_outline_modelled.expect
index 3767f32..256c973 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class D<X extends void Function()> {
   D._() {}
   factory D.foo() => new D._();
diff --git a/pkg/front_end/testcases/general/issue38943.dart.weak.expect b/pkg/front_end/testcases/general/issue38943.dart.weak.expect
index c723406..29dd3c5 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends () →* void> extends core::Object {
-  constructor _() → self::D<self::D::X*>*
+class D<X extends () → void> extends core::Object {
+  constructor _() → self::D<self::D::X>
     : super core::Object::•() {}
-  static factory foo<X extends () →* void>() → self::D<self::D::foo::X*>*
-    return new self::D::_<self::D::foo::X*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory foo<X extends () → void>() → self::D<self::D::foo::X>
+    return new self::D::_<self::D::foo::X>();
 }
 static method main() → dynamic {
-  core::print(self::D::foo<() →* void>());
+  core::print(self::D::foo<() → void>());
 }
diff --git a/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect
index c723406..29dd3c5 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends () →* void> extends core::Object {
-  constructor _() → self::D<self::D::X*>*
+class D<X extends () → void> extends core::Object {
+  constructor _() → self::D<self::D::X>
     : super core::Object::•() {}
-  static factory foo<X extends () →* void>() → self::D<self::D::foo::X*>*
-    return new self::D::_<self::D::foo::X*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory foo<X extends () → void>() → self::D<self::D::foo::X>
+    return new self::D::_<self::D::foo::X>();
 }
 static method main() → dynamic {
-  core::print(self::D::foo<() →* void>());
+  core::print(self::D::foo<() → void>());
 }
diff --git a/pkg/front_end/testcases/general/issue38943.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue38943.dart.weak.outline.expect
index 7c3fcaf..bc85f88 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends () →* void> extends core::Object {
-  constructor _() → self::D<self::D::X*>*
+class D<X extends () → void> extends core::Object {
+  constructor _() → self::D<self::D::X>
     ;
-  static factory foo<X extends () →* void>() → self::D<self::D::foo::X*>*
+  static factory foo<X extends () → void>() → self::D<self::D::foo::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue38943.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38943.dart.weak.transformed.expect
index c723406..29dd3c5 100644
--- a/pkg/front_end/testcases/general/issue38943.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38943.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class D<X extends () →* void> extends core::Object {
-  constructor _() → self::D<self::D::X*>*
+class D<X extends () → void> extends core::Object {
+  constructor _() → self::D<self::D::X>
     : super core::Object::•() {}
-  static factory foo<X extends () →* void>() → self::D<self::D::foo::X*>*
-    return new self::D::_<self::D::foo::X*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory foo<X extends () → void>() → self::D<self::D::foo::X>
+    return new self::D::_<self::D::foo::X>();
 }
 static method main() → dynamic {
-  core::print(self::D::foo<() →* void>());
+  core::print(self::D::foo<() → void>());
 }
diff --git a/pkg/front_end/testcases/general/issue38944.dart b/pkg/front_end/testcases/general/issue38944.dart
index c467d0d..a0b7f42 100644
--- a/pkg/front_end/testcases/general/issue38944.dart
+++ b/pkg/front_end/testcases/general/issue38944.dart
@@ -1,6 +1,6 @@
 // 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.
-// @dart=2.9
+
 class A<Q> {}
 class B<X> extends Object with A<void Function<Y extends X>()> {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue38944.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue38944.dart.textual_outline.expect
index 47092ea..279bc70 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<Q> {}
 
 class B<X> extends Object with A<void Function<Y extends X>()> {}
diff --git a/pkg/front_end/testcases/general/issue38944.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue38944.dart.textual_outline_modelled.expect
index 47092ea..279bc70 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<Q> {}
 
 class B<X> extends Object with A<void Function<Y extends X>()> {}
diff --git a/pkg/front_end/testcases/general/issue38944.dart.weak.expect b/pkg/front_end/testcases/general/issue38944.dart.weak.expect
index 6ac58de..4f9c07c 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,38 +9,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<Q extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::Q*>*
+class A<Q extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::Q%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _B&Object&A<X extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X*>*
+abstract class _B&Object&A<X extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic> extends self::_B&Object&A<self::B::X*> {
-  synthetic constructor •() → self::B<self::B::X*>*
+class B<X extends core::Object? = dynamic> extends self::_B&Object&A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect
index 6ac58de..4f9c07c 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,38 +9,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<Q extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::Q*>*
+class A<Q extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::Q%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _B&Object&A<X extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X*>*
+abstract class _B&Object&A<X extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic> extends self::_B&Object&A<self::B::X*> {
-  synthetic constructor •() → self::B<self::B::X*>*
+class B<X extends core::Object? = dynamic> extends self::_B&Object&A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38944.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue38944.dart.weak.outline.expect
index 2ccc972..902d393 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,36 +9,16 @@
 import self as self;
 import "dart:core" as core;
 
-class A<Q extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::Q*>*
+class A<Q extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::Q%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _B&Object&A<X extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X*>*
+abstract class _B&Object&A<X extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic> extends self::_B&Object&A<self::B::X*> {
-  synthetic constructor •() → self::B<self::B::X*>*
+class B<X extends core::Object? = dynamic> extends self::_B&Object&A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38944.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38944.dart.weak.transformed.expect
index 6ac58de..4f9c07c 100644
--- a/pkg/front_end/testcases/general/issue38944.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38944.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,38 +9,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<Q extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::Q*>*
+class A<Q extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::Q%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _B&Object&A<X extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X*>*
+abstract class _B&Object&A<X extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<X extends core::Object* = dynamic> extends self::_B&Object&A<self::B::X*> {
-  synthetic constructor •() → self::B<self::B::X*>*
+class B<X extends core::Object? = dynamic> extends self::_B&Object&A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue38961.dart b/pkg/front_end/testcases/general/issue38961.dart
index 00864c2..b98ae94 100644
--- a/pkg/front_end/testcases/general/issue38961.dart
+++ b/pkg/front_end/testcases/general/issue38961.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class C {
   dynamic x = this;
   var x = this;
diff --git a/pkg/front_end/testcases/general/issue38961.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue38961.dart.textual_outline.expect
index f67e4a5..f38f3d3 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   dynamic x = this;
   var x = this;
diff --git a/pkg/front_end/testcases/general/issue38961.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue38961.dart.textual_outline_modelled.expect
index f67e4a5..f38f3d3 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   dynamic x = this;
   var x = this;
diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.expect
index a588600..0b9c61a 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,17 +22,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect
index a588600..0b9c61a 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,17 +22,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.outline.expect
index 01a97d1..6b1474b 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,16 +14,6 @@
 
 class C extends core::Object {
   field dynamic x;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect
index a588600..0b9c61a 100644
--- a/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38961.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,17 +22,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue39344.dart b/pkg/front_end/testcases/general/issue39344.dart
index a86b905..6029631 100644
--- a/pkg/front_end/testcases/general/issue39344.dart
+++ b/pkg/front_end/testcases/general/issue39344.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
 
-List<B> xs;
-List<List<B>> xss;
+late List<B> xs;
+late List<List<B>> xss;
 
 class Class<T extends A> {
   void method1a(T t) {
diff --git a/pkg/front_end/testcases/general/issue39344.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue39344.dart.textual_outline.expect
index 27aa1fa..baee03e 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
-List<B> xs;
-List<List<B>> xss;
+late List<B> xs;
+late List<List<B>> xss;
 
 class Class<T extends A> {
   void method1a(T t) {}
diff --git a/pkg/front_end/testcases/general/issue39344.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue39344.dart.textual_outline_modelled.expect
index bc21bce..5eeda1d 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.textual_outline_modelled.expect
@@ -1,18 +1,19 @@
-// @dart = 2.9
-List<B> xs;
-List<List<B>> xss;
-
 class A {}
-
 class B extends A {}
-
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+List<B> xs;
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+List<List<B>> xss;
 class Class<T extends A> {
   void method1a(T t) {}
   void method1b(T t) {}
   void method2a(T t) {}
   void method2b(T t) {}
 }
-
 void errors() {}
 void main() {}
 void throws(void Function() f) {}
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
index fd2787d..b41852a 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,97 +18,77 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  method method1a(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+  method method1a(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = <self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}];
       self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xs = ys;
-           ^" in ys as{TypeError} core::List<self::B*>*;
+           ^" in ys as{TypeError,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method1b(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+  method method1b(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = <core::List<self::Class::T>>[<self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}]];
       self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xss = yss;
-            ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
+            ^" in yss as{TypeError,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  method method2a(covariant-by-class self::Class::T* t) → void {
+  method method2a(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = <self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}];
       alias = ys;
-      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method2b(covariant-by-class self::Class::T* t) → void {
+  method method2b(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = <core::List<self::Class::T>>[<self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}]];
       alias = yss;
-      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B*>* xs;
-static field core::List<core::List<self::B*>*>* xss;
+late static field core::List<self::B> xs;
+late static field core::List<core::List<self::B>> xss;
 static method main() → void {
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2a}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2b}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
 }
 static method errors() → void {
-  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
-  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A>().{self::Class::method1a}(new self::B::•()){(self::A) → void};
+  new self::Class::•<self::A>().{self::Class::method1b}(new self::B::•()){(self::A) → void};
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
     return;
   }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect
index fd2787d..b41852a 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,97 +18,77 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  method method1a(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+  method method1a(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = <self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}];
       self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xs = ys;
-           ^" in ys as{TypeError} core::List<self::B*>*;
+           ^" in ys as{TypeError,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method1b(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+  method method1b(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = <core::List<self::Class::T>>[<self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}]];
       self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xss = yss;
-            ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
+            ^" in yss as{TypeError,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  method method2a(covariant-by-class self::Class::T* t) → void {
+  method method2a(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = <self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}];
       alias = ys;
-      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method2b(covariant-by-class self::Class::T* t) → void {
+  method method2b(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = <core::List<self::Class::T>>[<self::Class::T>[t{self::Class::T & self::B /* '!' & '!' = '!' */}]];
       alias = yss;
-      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B*>* xs;
-static field core::List<core::List<self::B*>*>* xss;
+late static field core::List<self::B> xs;
+late static field core::List<core::List<self::B>> xss;
 static method main() → void {
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2a}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2b}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
 }
 static method errors() → void {
-  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
-  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A>().{self::Class::method1a}(new self::B::•()){(self::A) → void};
+  new self::Class::•<self::A>().{self::Class::method1b}(new self::B::•()){(self::A) → void};
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
     return;
   }
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
index 49bc2e6..463057f 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
@@ -1,52 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     ;
-  method method1a(covariant-by-class self::Class::T* t) → void
+  method method1a(covariant-by-class self::Class::T t) → void
     ;
-  method method1b(covariant-by-class self::Class::T* t) → void
+  method method1b(covariant-by-class self::Class::T t) → void
     ;
-  method method2a(covariant-by-class self::Class::T* t) → void
+  method method2a(covariant-by-class self::Class::T t) → void
     ;
-  method method2b(covariant-by-class self::Class::T* t) → void
+  method method2b(covariant-by-class self::Class::T t) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B*>* xs;
-static field core::List<core::List<self::B*>*>* xss;
+late static field core::List<self::B> xs;
+late static field core::List<core::List<self::B>> xss;
 static method main() → void
   ;
 static method errors() → void
   ;
-static method throws(() →* void f) → void
+static method throws(() → void f) → void
   ;
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
index 0e2b847..8febbfe 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,97 +18,77 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  method method1a(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */});
+  method method1a(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = core::_GrowableList::_literal1<self::Class::T>(t{self::Class::T & self::B /* '!' & '!' = '!' */});
       self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xs = ys;
-           ^" in ys as{TypeError} core::List<self::B*>*;
+           ^" in ys as{TypeError,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method1b(covariant-by-class self::Class::T* t) → void {
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = core::_GrowableList::_literal1<core::List<self::Class::T*>*>(core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */}));
+  method method1b(covariant-by-class self::Class::T t) → void {
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = core::_GrowableList::_literal1<core::List<self::Class::T>>(core::_GrowableList::_literal1<self::Class::T>(t{self::Class::T & self::B /* '!' & '!' = '!' */}));
       self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
  - 'List' is from 'dart:core'.
  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
       xss = yss;
-            ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
+            ^" in yss as{TypeError,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  method method2a(covariant-by-class self::Class::T* t) → void {
+  method method2a(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<self::Class::T*>* ys = core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */});
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<self::Class::T> ys = core::_GrowableList::_literal1<self::Class::T>(t{self::Class::T & self::B /* '!' & '!' = '!' */});
       alias = ys;
-      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
+      self::xs = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<self::B>;
     }
   }
-  method method2b(covariant-by-class self::Class::T* t) → void {
+  method method2b(covariant-by-class self::Class::T t) → void {
     dynamic alias;
-    if(t is self::B*) {
-      core::List<core::List<self::Class::T*>*>* yss = core::_GrowableList::_literal1<core::List<self::Class::T*>*>(core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */}));
+    if(t is{ForNonNullableByDefault} self::B) {
+      core::List<core::List<self::Class::T>> yss = core::_GrowableList::_literal1<core::List<self::Class::T>>(core::_GrowableList::_literal1<self::Class::T>(t{self::Class::T & self::B /* '!' & '!' = '!' */}));
       alias = yss;
-      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
+      self::xss = alias as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::List<self::B>>;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::List<self::B*>* xs;
-static field core::List<core::List<self::B*>*>* xss;
+late static field core::List<self::B> xs;
+late static field core::List<core::List<self::B>> xss;
 static method main() → void {
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2a}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
-  self::throws(() → Null {
-    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
-    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  self::throws(() → void {
+    new self::Class::•<self::A>().{self::Class::method2b}(new self::B::•()){(self::A) → void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type});
   });
 }
 static method errors() → void {
-  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
-  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A>().{self::Class::method1a}(new self::B::•()){(self::A) → void};
+  new self::Class::•<self::A>().{self::Class::method1b}(new self::B::•()){(self::A) → void};
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
     return;
   }
diff --git a/pkg/front_end/testcases/general/issue39421.dart b/pkg/front_end/testcases/general/issue39421.dart
index e91ce36..e83ee28 100644
--- a/pkg/front_end/testcases/general/issue39421.dart
+++ b/pkg/front_end/testcases/general/issue39421.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // This is a regression test for http://dartbug.com/39421.
 
 class A {}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue39421.dart.textual_outline.expect
index 57219b5..8ac9791 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class A {}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue39421.dart.textual_outline_modelled.expect
index 57219b5..8ac9791 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class A {}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.weak.expect b/pkg/front_end/testcases/general/issue39421.dart.weak.expect
index cb1d71a..8c5950d 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,55 +24,25 @@
 import "dart:core" as core;
 
 class A#1 extends core::Object {
-  synthetic constructor •() → self::A#1*
+  synthetic constructor •() → self::A#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::List<Null>* a) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::List<Null> a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo(core::List<invalid-type>* a) → dynamic {}
+  method foo(core::List<invalid-type> a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect
index cb1d71a..8c5950d 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,55 +24,25 @@
 import "dart:core" as core;
 
 class A#1 extends core::Object {
-  synthetic constructor •() → self::A#1*
+  synthetic constructor •() → self::A#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::List<Null>* a) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::List<Null> a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo(core::List<invalid-type>* a) → dynamic {}
+  method foo(core::List<invalid-type> a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue39421.dart.weak.outline.expect
index 7f2378b..6e45e4e 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,53 +20,23 @@
 import "dart:core" as core;
 
 class A#1 extends core::Object {
-  synthetic constructor •() → self::A#1*
+  synthetic constructor •() → self::A#1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo(core::List<Null>* a) → dynamic
+  method foo(core::List<Null> a) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo(core::List<invalid-type>* a) → dynamic
+  method foo(core::List<invalid-type> a) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue39421.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39421.dart.weak.transformed.expect
index cb1d71a..8c5950d 100644
--- a/pkg/front_end/testcases/general/issue39421.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39421.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -24,55 +24,25 @@
 import "dart:core" as core;
 
 class A#1 extends core::Object {
-  synthetic constructor •() → self::A#1*
+  synthetic constructor •() → self::A#1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method foo(core::List<Null>* a) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(core::List<Null> a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo(core::List<invalid-type>* a) → dynamic {}
+  method foo(core::List<invalid-type> a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue39817.dart b/pkg/front_end/testcases/general/issue39817.dart
index aba9ee1..6dcfcce 100644
--- a/pkg/front_end/testcases/general/issue39817.dart
+++ b/pkg/front_end/testcases/general/issue39817.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // This is a regression test for http://dartbug.com/39817.
 
 foo() {
diff --git a/pkg/front_end/testcases/general/issue40242.dart b/pkg/front_end/testcases/general/issue40242.dart
index 1e4a836..afd8f73 100644
--- a/pkg/front_end/testcases/general/issue40242.dart
+++ b/pkg/front_end/testcases/general/issue40242.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class C {}
 
 extension E on C {
diff --git a/pkg/front_end/testcases/general/issue40242.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue40242.dart.textual_outline.expect
index b5194c1..4b76f91 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {}
 
 extension E on C {
diff --git a/pkg/front_end/testcases/general/issue40242.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue40242.dart.textual_outline_modelled.expect
index 519f8af..91844c5 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {}
 
 errors() {}
diff --git a/pkg/front_end/testcases/general/issue40242.dart.weak.expect b/pkg/front_end/testcases/general/issue40242.dart.weak.expect
index 69ece96a..cd16aae 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,30 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(lowered final self::C* #this) → dynamic {
+static method E|errors(lowered final self::C #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
     this = new C();
     ^^^^";
 }
-static method E|get#errors(lowered final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C #this) → () → dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic {
-  final self::C* c1 = new self::C::•();
+  final self::C c1 = new self::C::•();
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:15:3: Error: Can't assign to the final variable 'c1'.
   c1 = new C();
   ^^";
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:16:3: Error: Can't assign to a type literal.
   C = Object;
   ^";
-  self::C* c2;
+  self::C c2;
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:18:6: Error: Can't assign to a parenthesized expression.
   (c2) = new C();
      ^";
diff --git a/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect
index 69ece96a..cd16aae 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,30 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(lowered final self::C* #this) → dynamic {
+static method E|errors(lowered final self::C #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
     this = new C();
     ^^^^";
 }
-static method E|get#errors(lowered final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C #this) → () → dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic {
-  final self::C* c1 = new self::C::•();
+  final self::C c1 = new self::C::•();
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:15:3: Error: Can't assign to the final variable 'c1'.
   c1 = new C();
   ^^";
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:16:3: Error: Can't assign to a type literal.
   C = Object;
   ^";
-  self::C* c2;
+  self::C c2;
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:18:6: Error: Can't assign to a parenthesized expression.
   (c2) = new C();
      ^";
diff --git a/pkg/front_end/testcases/general/issue40242.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue40242.dart.weak.outline.expect
index 09336b0..98b7dfa 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(lowered final self::C* #this) → dynamic
+static method E|errors(lowered final self::C #this) → dynamic
   ;
-static method E|get#errors(lowered final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C #this) → () → dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue40242.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40242.dart.weak.transformed.expect
index 69ece96a..cd16aae 100644
--- a/pkg/front_end/testcases/general/issue40242.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40242.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,30 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method errors = self::E|errors;
   tearoff errors = self::E|get#errors;
 }
-static method E|errors(lowered final self::C* #this) → dynamic {
+static method E|errors(lowered final self::C #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
     this = new C();
     ^^^^";
 }
-static method E|get#errors(lowered final self::C* #this) → () →* dynamic
+static method E|get#errors(lowered final self::C #this) → () → dynamic
   return () → dynamic => self::E|errors(#this);
 static method errors() → dynamic {
-  final self::C* c1 = new self::C::•();
+  final self::C c1 = new self::C::•();
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:15:3: Error: Can't assign to the final variable 'c1'.
   c1 = new C();
   ^^";
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:16:3: Error: Can't assign to a type literal.
   C = Object;
   ^";
-  self::C* c2;
+  self::C c2;
   invalid-expression "pkg/front_end/testcases/general/issue40242.dart:18:6: Error: Can't assign to a parenthesized expression.
   (c2) = new C();
      ^";
diff --git a/pkg/front_end/testcases/general/issue40428.dart b/pkg/front_end/testcases/general/issue40428.dart
index 1fc3e08..f24cb23 100644
--- a/pkg/front_end/testcases/general/issue40428.dart
+++ b/pkg/front_end/testcases/general/issue40428.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class SuperClass1 {
   final String value;
 
diff --git a/pkg/front_end/testcases/general/issue40428.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue40428.dart.textual_outline.expect
index 8fdd117..4508570 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class SuperClass1 {
   final String value;
   SuperClass1(this.value);
diff --git a/pkg/front_end/testcases/general/issue40428.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue40428.dart.textual_outline_modelled.expect
index b87094b..b9d7f4f 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class SuperClass1 {
   SuperClass1(this.value);
   final String value;
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.expect
index d89d308..d9be0ec 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,59 +14,29 @@
 import "dart:core" as core;
 
 abstract class SuperClass1 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* value) → self::SuperClass1*
+  final field core::String value;
+  constructor •(core::String value) → self::SuperClass1
     : self::SuperClass1::value = value, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class SuperClass2 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* i) → self::SuperClass2*
+  final field core::String value;
+  constructor •(core::String i) → self::SuperClass2
     : self::SuperClass2::value = i, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NamedMixin1 = self::SuperClass1 with self::Mixin {
-  synthetic constructor •(core::String* value) → self::NamedMixin1*
+  synthetic constructor •(core::String value) → self::NamedMixin1
     : super self::SuperClass1::•(value)
     ;
 }
 class NamedMixin2 = self::SuperClass2 with self::Mixin {
-  synthetic constructor •(core::String* i) → self::NamedMixin2*
+  synthetic constructor •(core::String i) → self::NamedMixin2
     : super self::SuperClass2::•(i)
     ;
 }
@@ -77,8 +47,8 @@
 static method errors() → dynamic {
   new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin1(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
   new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin2(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect
index d89d308..d9be0ec 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,59 +14,29 @@
 import "dart:core" as core;
 
 abstract class SuperClass1 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* value) → self::SuperClass1*
+  final field core::String value;
+  constructor •(core::String value) → self::SuperClass1
     : self::SuperClass1::value = value, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class SuperClass2 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* i) → self::SuperClass2*
+  final field core::String value;
+  constructor •(core::String i) → self::SuperClass2
     : self::SuperClass2::value = i, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NamedMixin1 = self::SuperClass1 with self::Mixin {
-  synthetic constructor •(core::String* value) → self::NamedMixin1*
+  synthetic constructor •(core::String value) → self::NamedMixin1
     : super self::SuperClass1::•(value)
     ;
 }
 class NamedMixin2 = self::SuperClass2 with self::Mixin {
-  synthetic constructor •(core::String* i) → self::NamedMixin2*
+  synthetic constructor •(core::String i) → self::NamedMixin2
     : super self::SuperClass2::•(i)
     ;
 }
@@ -77,8 +47,8 @@
 static method errors() → dynamic {
   new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin1(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
   new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin2(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.outline.expect
index 3194a2a..500d223 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.outline.expect
@@ -1,58 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class SuperClass1 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* value) → self::SuperClass1*
+  final field core::String value;
+  constructor •(core::String value) → self::SuperClass1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class SuperClass2 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* i) → self::SuperClass2*
+  final field core::String value;
+  constructor •(core::String i) → self::SuperClass2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NamedMixin1 = self::SuperClass1 with self::Mixin {
-  synthetic constructor •(core::String* value) → self::NamedMixin1*
+  synthetic constructor •(core::String value) → self::NamedMixin1
     : super self::SuperClass1::•(value)
     ;
 }
 class NamedMixin2 = self::SuperClass2 with self::Mixin {
-  synthetic constructor •(core::String* i) → self::NamedMixin2*
+  synthetic constructor •(core::String i) → self::NamedMixin2
     : super self::SuperClass2::•(i)
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
index 5bc89f5..4ef294b 100644
--- a/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,59 +14,29 @@
 import "dart:core" as core;
 
 abstract class SuperClass1 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* value) → self::SuperClass1*
+  final field core::String value;
+  constructor •(core::String value) → self::SuperClass1
     : self::SuperClass1::value = value, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class SuperClass2 extends core::Object {
-  final field core::String* value;
-  constructor •(core::String* i) → self::SuperClass2*
+  final field core::String value;
+  constructor •(core::String i) → self::SuperClass2
     : self::SuperClass2::value = i, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NamedMixin1 extends self::SuperClass1 implements self::Mixin /*isEliminatedMixin*/  {
-  synthetic constructor •(core::String* value) → self::NamedMixin1*
+  synthetic constructor •(core::String value) → self::NamedMixin1
     : super self::SuperClass1::•(value)
     ;
 }
 class NamedMixin2 extends self::SuperClass2 implements self::Mixin /*isEliminatedMixin*/  {
-  synthetic constructor •(core::String* i) → self::NamedMixin2*
+  synthetic constructor •(core::String i) → self::NamedMixin2
     : super self::SuperClass2::•(i)
     ;
 }
@@ -77,8 +47,8 @@
 static method errors() → dynamic {
   new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin1(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
   new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
   new NamedMixin2(0);
-                  ^" in 0 as{TypeError} core::String*);
+                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/general/issue40662.dart b/pkg/front_end/testcases/general/issue40662.dart
index fba166b..a1889fa 100644
--- a/pkg/front_end/testcases/general/issue40662.dart
+++ b/pkg/front_end/testcases/general/issue40662.dart
@@ -1,11 +1,11 @@
 // Copyright (c) 2020, 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.
-//
-// Regression test for https://github.com/dart-lang/sdk/issues/40662.
 
 // @dart=2.9
 
+// Regression test for https://github.com/dart-lang/sdk/issues/40662.
+
 bar(int a, List<int> b) {
   expect(-1, a);
   expect(-1, (b[0] - 2));
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.expect
index dc6a6d8..d376a6f 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.expect
@@ -6,9 +6,9 @@
   self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
   self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
-static method foo(core::int* x) → dynamic async 
+static method foo(core::int* x) → dynamic async /* futureValueType= dynamic */ 
   return self::bar(x.{core::num::-}(1){(core::num*) →* core::int*}, !(x == null) ?{core::List<core::int*>*} <core::int*>[x.{core::num::+}(1){(core::num*) →* core::int*}, x.{core::num::+}(2){(core::num*) →* core::int*}, await null] : null);
-static method main() → void async 
+static method main() → void async /* futureValueType= void */ 
   return await self::foo(0);
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect
index dc6a6d8..d376a6f 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect
@@ -6,9 +6,9 @@
   self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
   self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
-static method foo(core::int* x) → dynamic async 
+static method foo(core::int* x) → dynamic async /* futureValueType= dynamic */ 
   return self::bar(x.{core::num::-}(1){(core::num*) →* core::int*}, !(x == null) ?{core::List<core::int*>*} <core::int*>[x.{core::num::+}(1){(core::num*) →* core::int*}, x.{core::num::+}(2){(core::num*) →* core::int*}, await null] : null);
-static method main() → void async 
+static method main() → void async /* futureValueType= void */ 
   return await self::foo(0);
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
index 4fef8f9..4854611 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
   self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
 }
-static method foo(core::int* x) → dynamic /* originally async */ {
+static method foo(core::int* x) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>* :return_value;
@@ -50,7 +50,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → void /* originally async */ {
+static method main() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>* :return_value;
diff --git a/pkg/front_end/testcases/general/issue40744.dart b/pkg/front_end/testcases/general/issue40744.dart
index 009149f..3d0dbc4 100644
--- a/pkg/front_end/testcases/general/issue40744.dart
+++ b/pkg/front_end/testcases/general/issue40744.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const generatorConfigDefaultJson = <String, dynamic>{'a': 1};
 
 void helper(Map<String, dynamic> input) {
diff --git a/pkg/front_end/testcases/general/issue40744.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue40744.dart.textual_outline.expect
index fbd3bb3..dd27ae6 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const generatorConfigDefaultJson = <String, dynamic>{'a': 1};
 void helper(Map<String, dynamic> input) {}
 void main() {}
diff --git a/pkg/front_end/testcases/general/issue40744.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue40744.dart.textual_outline_modelled.expect
index fbd3bb3..dd27ae6 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const generatorConfigDefaultJson = <String, dynamic>{'a': 1};
 void helper(Map<String, dynamic> input) {}
 void main() {}
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
index cab8593..ccb4fb1 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
-static method helper(core::Map<core::String*, dynamic>* input) → void {
+static const field core::Map<core::String, dynamic> generatorConfigDefaultJson = #C3;
+static method helper(core::Map<core::String, dynamic> input) → void {
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  final core::Map<core::String, Null> nullValueMap = core::Map::fromEntries<core::String, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::map}<core::MapEntry<core::String, Null>>((core::MapEntry<core::String, dynamic> e) → core::MapEntry<core::String, Null> => new core::MapEntry::_<core::String, Null>(e.{core::MapEntry::key}{core::String}, null)){((core::MapEntry<core::String, dynamic>) → core::MapEntry<core::String, Null>) → core::Iterable<core::MapEntry<core::String, Null>>});
   self::helper(nullValueMap);
 }
 
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect
index cab8593..ccb4fb1 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
-static method helper(core::Map<core::String*, dynamic>* input) → void {
+static const field core::Map<core::String, dynamic> generatorConfigDefaultJson = #C3;
+static method helper(core::Map<core::String, dynamic> input) → void {
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  final core::Map<core::String, Null> nullValueMap = core::Map::fromEntries<core::String, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::map}<core::MapEntry<core::String, Null>>((core::MapEntry<core::String, dynamic> e) → core::MapEntry<core::String, Null> => new core::MapEntry::_<core::String, Null>(e.{core::MapEntry::key}{core::String}, null)){((core::MapEntry<core::String, dynamic>) → core::MapEntry<core::String, Null>) → core::Iterable<core::MapEntry<core::String, Null>>});
   self::helper(nullValueMap);
 }
 
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
index 5acf79e..6391fcb 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = const <core::String*, dynamic>{"a": 1};
-static method helper(core::Map<core::String*, dynamic>* input) → void
+static const field core::Map<core::String, dynamic> generatorConfigDefaultJson = const <core::String, dynamic>{"a": 1};
+static method helper(core::Map<core::String, dynamic> input) → void
   ;
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
index cab8593..ccb4fb1 100644
--- a/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
-static method helper(core::Map<core::String*, dynamic>* input) → void {
+static const field core::Map<core::String, dynamic> generatorConfigDefaultJson = #C3;
+static method helper(core::Map<core::String, dynamic> input) → void {
   core::print(input);
 }
 static method main() → void {
-  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  final core::Map<core::String, Null> nullValueMap = core::Map::fromEntries<core::String, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::map}<core::MapEntry<core::String, Null>>((core::MapEntry<core::String, dynamic> e) → core::MapEntry<core::String, Null> => new core::MapEntry::_<core::String, Null>(e.{core::MapEntry::key}{core::String}, null)){((core::MapEntry<core::String, dynamic>) → core::MapEntry<core::String, Null>) → core::Iterable<core::MapEntry<core::String, Null>>});
   self::helper(nullValueMap);
 }
 
diff --git a/pkg/front_end/testcases/general/issue40982.dart b/pkg/front_end/testcases/general/issue40982.dart
index 814de11..ed06fc3 100644
--- a/pkg/front_end/testcases/general/issue40982.dart
+++ b/pkg/front_end/testcases/general/issue40982.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect
index 0e31b42a..d0c04bf 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect
index 155c775..eeaccee 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.weak.expect b/pkg/front_end/testcases/general/issue40982.dart.weak.expect
index 9eb651c..ddecd50 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,91 +14,61 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
-  static const field core::int* value = #C1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static const field core::int value = #C1;
 }
 abstract class _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C1&A&B*
+  const synthetic constructor •() → self::_C1&A&B
     : super self::A::•()
     ;
 }
 class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
-  const constructor •() → self::C1*
+  const constructor •() → self::C1
     : super self::_C1&A&B::•()
     ;
 }
 class C2 = self::A with self::B /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C2*
+  const synthetic constructor •() → self::C2
     : super self::A::•()
     ;
 }
 class C3 extends self::C2 /*hasConstConstructor*/  {
-  const constructor •() → self::C3*
+  const constructor •() → self::C3
     : super self::C2::•()
     ;
 }
 abstract class D extends core::Object /*isMixinDeclaration*/  {
-  field core::int* value = 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  field core::int value = 1;
 }
 abstract class _E1&A&D = self::A with self::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_E1&A&D*
+  synthetic constructor •() → self::_E1&A&D
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
-  const constructor •() → self::E1*
+  const constructor •() → self::E1
     : super self::_E1&A&D::•()
     ;
 }
 class E2 = self::A with self::D {
-  synthetic constructor •() → self::E2*
+  synthetic constructor •() → self::E2
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
-  const constructor •() → self::E3*
+  const constructor •() → self::E3
     : super self::E2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect
index 9eb651c..ddecd50 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,91 +14,61 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
-  static const field core::int* value = #C1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static const field core::int value = #C1;
 }
 abstract class _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C1&A&B*
+  const synthetic constructor •() → self::_C1&A&B
     : super self::A::•()
     ;
 }
 class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
-  const constructor •() → self::C1*
+  const constructor •() → self::C1
     : super self::_C1&A&B::•()
     ;
 }
 class C2 = self::A with self::B /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C2*
+  const synthetic constructor •() → self::C2
     : super self::A::•()
     ;
 }
 class C3 extends self::C2 /*hasConstConstructor*/  {
-  const constructor •() → self::C3*
+  const constructor •() → self::C3
     : super self::C2::•()
     ;
 }
 abstract class D extends core::Object /*isMixinDeclaration*/  {
-  field core::int* value = 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  field core::int value = 1;
 }
 abstract class _E1&A&D = self::A with self::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_E1&A&D*
+  synthetic constructor •() → self::_E1&A&D
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
-  const constructor •() → self::E1*
+  const constructor •() → self::E1
     : super self::_E1&A&D::•()
     ;
 }
 class E2 = self::A with self::D {
-  synthetic constructor •() → self::E2*
+  synthetic constructor •() → self::E2
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
-  const constructor •() → self::E3*
+  const constructor •() → self::E3
     : super self::E2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue40982.dart.weak.outline.expect
index 90a0ef0..bc71b00 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,91 +14,61 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
-  static const field core::int* value = 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static const field core::int value = 1;
 }
 abstract class _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C1&A&B*
+  const synthetic constructor •() → self::_C1&A&B
     : super self::A::•()
     ;
 }
 class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
-  const constructor •() → self::C1*
+  const constructor •() → self::C1
     : super self::_C1&A&B::•()
     ;
 }
 class C2 = self::A with self::B /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::C2*
+  const synthetic constructor •() → self::C2
     : super self::A::•()
     ;
 }
 class C3 extends self::C2 /*hasConstConstructor*/  {
-  const constructor •() → self::C3*
+  const constructor •() → self::C3
     : super self::C2::•()
     ;
 }
 abstract class D extends core::Object /*isMixinDeclaration*/  {
-  field core::int* value;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  field core::int value;
 }
 abstract class _E1&A&D = self::A with self::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_E1&A&D*
+  synthetic constructor •() → self::_E1&A&D
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
-  const constructor •() → self::E1*
+  const constructor •() → self::E1
     : super self::_E1&A&D::•()
     ;
 }
 class E2 = self::A with self::D {
-  synthetic constructor •() → self::E2*
+  synthetic constructor •() → self::E2
     : super self::A::•()
     ;
-  mixin-super-stub get value() → core::int*
+  mixin-super-stub get value() → core::int
     return super.{self::D::value};
-  mixin-super-stub set value(core::int* value) → void
+  mixin-super-stub set value(core::int value) → void
     return super.{self::D::value} = value;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
-  const constructor •() → self::E3*
+  const constructor •() → self::E3
     : super self::E2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue40982.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue40982.dart.weak.transformed.expect
index 76c2d617..b3fceab 100644
--- a/pkg/front_end/testcases/general/issue40982.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40982.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,87 +14,57 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
-  static const field core::int* value = #C1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static const field core::int value = #C1;
 }
 abstract class _C1&A&B extends self::A implements self::B /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  static const field core::int* value = #C1;
-  const synthetic constructor •() → self::_C1&A&B*
+  static const field core::int value = #C1;
+  const synthetic constructor •() → self::_C1&A&B
     : super self::A::•()
     ;
 }
 class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
-  const constructor •() → self::C1*
+  const constructor •() → self::C1
     : super self::_C1&A&B::•()
     ;
 }
 class C2 extends self::A implements self::B /*isEliminatedMixin,hasConstConstructor*/  {
-  static const field core::int* value = #C1;
-  const synthetic constructor •() → self::C2*
+  static const field core::int value = #C1;
+  const synthetic constructor •() → self::C2
     : super self::A::•()
     ;
 }
 class C3 extends self::C2 /*hasConstConstructor*/  {
-  const constructor •() → self::C3*
+  const constructor •() → self::C3
     : super self::C2::•()
     ;
 }
 abstract class D extends core::Object /*isMixinDeclaration*/  {
-  field core::int* value = 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  field core::int value = 1;
 }
 abstract class _E1&A&D extends self::A implements self::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  field core::int* value = 1;
-  synthetic constructor •() → self::_E1&A&D*
+  field core::int value = 1;
+  synthetic constructor •() → self::_E1&A&D
     : super self::A::•()
     ;
 }
 class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
-  const constructor •() → self::E1*
+  const constructor •() → self::E1
     : super self::_E1&A&D::•()
     ;
 }
 class E2 extends self::A implements self::D /*isEliminatedMixin*/  {
-  field core::int* value = 1;
-  synthetic constructor •() → self::E2*
+  field core::int value = 1;
+  synthetic constructor •() → self::E2
     : super self::A::•()
     ;
 }
 class E3 extends self::E2 /*hasConstConstructor*/  {
-  const constructor •() → self::E3*
+  const constructor •() → self::E3
     : super self::E2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41070.dart b/pkg/front_end/testcases/general/issue41070.dart
index 0ce6f26..3129cb6 100644
--- a/pkg/front_end/testcases/general/issue41070.dart
+++ b/pkg/front_end/testcases/general/issue41070.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class Mixin {}
 
 class Base {
diff --git a/pkg/front_end/testcases/general/issue41070.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41070.dart.textual_outline.expect
index bf2cc1b..6b9ed3f 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Mixin {}
 
 class Base {
diff --git a/pkg/front_end/testcases/general/issue41070.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41070.dart.textual_outline_modelled.expect
index 228bca5..6d28195 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Mixin {}
 
 class Application = Base with Mixin;
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.expect
index d159c73..a93c83e 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object /*hasConstConstructor*/  {
-  final field core::int* x;
-  const constructor •(core::int* x) → self::Base*
+  final field core::int x;
+  const constructor •(core::int x) → self::Base
     : self::Base::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Application = self::Base with self::Mixin /*hasConstConstructor*/  {
-  const synthetic constructor •(core::int* x) → self::Application*
+  const synthetic constructor •(core::int x) → self::Application
     : super self::Base::•(x)
     ;
 }
 static method main() → dynamic {
-  self::expect(42, #C2.{self::Base::x}{core::int*});
+  self::expect(42, #C2.{self::Base::x}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect
index d159c73..a93c83e 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object /*hasConstConstructor*/  {
-  final field core::int* x;
-  const constructor •(core::int* x) → self::Base*
+  final field core::int x;
+  const constructor •(core::int x) → self::Base
     : self::Base::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Application = self::Base with self::Mixin /*hasConstConstructor*/  {
-  const synthetic constructor •(core::int* x) → self::Application*
+  const synthetic constructor •(core::int x) → self::Application
     : super self::Base::•(x)
     ;
 }
 static method main() → dynamic {
-  self::expect(42, #C2.{self::Base::x}{core::int*});
+  self::expect(42, #C2.{self::Base::x}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.outline.expect
index 8212504..ed7bc38 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object /*hasConstConstructor*/  {
-  final field core::int* x;
-  const constructor •(core::int* x) → self::Base*
+  final field core::int x;
+  const constructor •(core::int x) → self::Base
     : self::Base::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Application = self::Base with self::Mixin /*hasConstConstructor*/  {
-  const synthetic constructor •(core::int* x) → self::Application*
+  const synthetic constructor •(core::int x) → self::Application
     : super self::Base::•(x)
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
index 655d5ae..c16b436 100644
--- a/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.transformed.expect
@@ -1,48 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Base extends core::Object /*hasConstConstructor*/  {
-  final field core::int* x;
-  const constructor •(core::int* x) → self::Base*
+  final field core::int x;
+  const constructor •(core::int x) → self::Base
     : self::Base::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Application extends self::Base implements self::Mixin /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •(core::int* x) → self::Application*
+  const synthetic constructor •(core::int x) → self::Application
     : super self::Base::•(x)
     ;
 }
 static method main() → dynamic {
-  self::expect(42, #C2.{self::Base::x}{core::int*});
+  self::expect(42, #C2.{self::Base::x}{core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/issue41210a.dart b/pkg/front_end/testcases/general/issue41210a.dart
index f736a24..78cfc3c 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart
+++ b/pkg/front_end/testcases/general/issue41210a.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 abstract class Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
index 64edca2..599fc0f 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
index 9c3d871..d6c9646 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B implements Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
index f270273..8913730 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210a.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -16,184 +16,94 @@
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> self::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect
index f270273..8913730 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210a.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -16,184 +16,94 @@
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> self::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
index 3333d00..22ccaee 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210a.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210a.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210a.dart:23:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210a.dart:21:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -16,172 +16,82 @@
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = "hello"}) → core::String*
+  method method(core::num i, {core::String s = "hello"}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> self::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart b/pkg/front_end/testcases/general/issue41210a_no_error.dart
index e78b1fe..b838aa9 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 abstract class Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline.expect
index ed1f176..c01fb18 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline_modelled.expect
index 224797a..801b25e 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B implements Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
index daf4b8e..2913f38 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
@@ -1,153 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect
index daf4b8e..2913f38 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect
@@ -1,153 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
index 0a5819f..016588f 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
@@ -1,147 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = "hello"}) → core::String*
+  method method(core::num i, {core::String s = "hello"}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{self::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
index 9d9b4f1..fcfe4b1 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
@@ -1,153 +1,73 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → self::Interface*
+  synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements self::Interface {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class _E&Object&A extends core::Object implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D extends self::_E&Object&A implements self::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class F extends core::Object implements self::Interface {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A extends core::Object implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F extends self::_G&Object&A implements self::F /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart b/pkg/front_end/testcases/general/issue41210b/issue41210.dart
index eb5a4ef..08bd4e4 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'issue41210_lib.dart';
 
 class C with A, B {} // error
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
index f023db9..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class C with A, B {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
index f023db9..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class C with A, B {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
index bb04fa2..78f61b7 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -19,189 +19,99 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect
index d12bb3b..075d118 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -19,91 +19,61 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
index 3657882..b1a2e3a 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
-// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Context: This is the overridden method ('method').
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:7:7: Context: This is the overridden method ('method').
 // class C with A, B {} // error
 //       ^
 //
@@ -19,180 +19,90 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart
index 78d8a27..08bd4e4 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'issue41210_lib.dart';
 
 class C with A, B {} // error
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect
index f023db9..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class C with A, B {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect
index f023db9..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class C with A, B {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
index 038d724..5fecb3a 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
@@ -19,189 +19,99 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect
index 038d724..5fecb3a 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
@@ -19,189 +19,99 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&A&B::•()
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {
-  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num) → core::String});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
index 1f7c974..8eb69ab 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
 // class C with A, B {} // error
 //       ^
-// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:18:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
 //   String method(num i);
 //          ^
 // pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
@@ -19,178 +19,88 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A*
+  const synthetic constructor •() → self::_C&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&A&B*
+  const synthetic constructor •() → self::_C&Object&A&B
     : super self::_C&Object&A::•()
     ;
-  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+  abstract mixin-stub method method(core::num i) → core::String; -> iss::B::method
 }
 class C extends self::_C&Object&A&B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = "hello"}) → core::String*
+  method method(core::num i, {core::String s = "hello"}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart b/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
index 04f13b4..a209b30 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 abstract class Interface {
   String method(num i);
 }
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart
index ccafb03..6251793 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'issue41210_lib.dart';
 
 class E with A, D {} // ok
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline.expect
index 7d7c3ca..c7e36dd 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class E with A, D {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline_modelled.expect
index 7d7c3ca..c7e36dd 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class E with A, D {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
index 9691295..209ae3c 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,159 +6,79 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect
index 20cd047..ada1c5a 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,58 +6,38 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
index 90aecca..27dd1bc 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,153 +6,73 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
index 8aae15b..0b715cf 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,159 +6,79 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
     return s;
 }
 abstract class _E&Object&A&D extends self::_E&Object&A implements iss::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
     return s;
 }
 abstract class _G&Object&A&F extends self::_G&Object&A implements iss::F /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart
index ccafb03..6251793 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'issue41210_lib.dart';
 
 class E with A, D {} // ok
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline.expect
index 7d7c3ca..c7e36dd 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class E with A, D {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline_modelled.expect
index 7d7c3ca..c7e36dd 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue41210_lib.dart';
 
 class E with A, D {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
index cf99014..209ae3c 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,159 +6,79 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect
index cf99014..209ae3c 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,159 +6,79 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s = #C1}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
index ac90189..1488b8d 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,151 +6,71 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
 abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+  mixin-super-stub method method(core::num i, {core::String s}) → core::String
     return super.{iss::A::method}(i, s: s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = "hello"}) → core::String*
+  method method(core::num i, {core::String s = "hello"}) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
index 079856d..0b715cf 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "issue41210_lib.dart" as iss;
@@ -6,159 +6,79 @@
 import "org-dartlang-testcase:///issue41210_lib.dart";
 
 abstract class _E&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A*
+  const synthetic constructor •() → self::_E&Object&A
     : super core::Object::•()
     ;
-  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _E&Object&A&D extends self::_E&Object&A implements iss::D /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_E&Object&A&D*
+  const synthetic constructor •() → self::_E&Object&A&D
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num i, {core::String s = #C1}) → core::String
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::_E&Object&A&D::•()
     ;
 }
 abstract class _G&Object&A extends core::Object implements iss::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A*
+  const synthetic constructor •() → self::_G&Object&A
     : super core::Object::•()
     ;
-  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num* i, {core::String* s = #C1}) → core::String*
+  method /* from org-dartlang-testcase:///issue41210_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _G&Object&A&F extends self::_G&Object&A implements iss::F /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_G&Object&A&F*
+  const synthetic constructor •() → self::_G&Object&A&F
     : super self::_G&Object&A::•()
     ;
 }
 class G extends self::_G&Object&A&F {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super self::_G&Object&A&F::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 abstract class Interface extends core::Object {
-  synthetic constructor •() → iss::Interface*
+  synthetic constructor •() → iss::Interface
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class Interface2 extends core::Object {
-  synthetic constructor •() → iss::Interface2*
+  synthetic constructor •() → iss::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant-by-declaration core::int* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
-  method method(core::num* i, {core::String* s = #C1}) → core::String*
+  method method(core::num i, {core::String s = #C1}) → core::String
     return s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::B*
+  synthetic constructor •() → iss::B
     : super core::Object::•()
     ;
-  abstract method method(core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method method(core::num i) → core::String;
 }
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
-  synthetic constructor •() → iss::D*
+  synthetic constructor •() → iss::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements iss::Interface {
-  synthetic constructor •() → iss::F*
+  synthetic constructor •() → iss::F
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue42610.dart b/pkg/front_end/testcases/general/issue42610.dart
index 0eb9586..7c7bd32 100644
--- a/pkg/front_end/testcases/general/issue42610.dart
+++ b/pkg/front_end/testcases/general/issue42610.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 void test() {
   #final;
   final x;
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
index 44db974..735e2ff 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// pkg/front_end/testcases/general/issue42610.dart:8:4: Error: 'final' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   #final;
 //    ^^^^^
 //
-// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final x;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const y;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final int z;
 //             ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const int w;
 //             ^
@@ -32,19 +32,19 @@
 
 static method test() → void {
   #C1;
-  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final x;
         ^";
-  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const y;
         ^";
-  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final int z;
             ^";
-  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const int w;
             ^";
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect
index 44db974..735e2ff 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// pkg/front_end/testcases/general/issue42610.dart:8:4: Error: 'final' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   #final;
 //    ^^^^^
 //
-// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final x;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const y;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final int z;
 //             ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const int w;
 //             ^
@@ -32,19 +32,19 @@
 
 static method test() → void {
   #C1;
-  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final x;
         ^";
-  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const y;
         ^";
-  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final int z;
             ^";
-  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const int w;
             ^";
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
index 44db974..735e2ff 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// pkg/front_end/testcases/general/issue42610.dart:8:4: Error: 'final' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   #final;
 //    ^^^^^
 //
-// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final x;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const y;
 //         ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   final int z;
 //             ^
 //
-// pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+// pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 // Try adding an initializer ('= expression') to the declaration.
 //   const int w;
 //             ^
@@ -32,19 +32,19 @@
 
 static method test() → void {
   #C1;
-  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:9: Error: The final variable 'x' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final x;
         ^";
-  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:9: Error: The const variable 'y' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const y;
         ^";
-  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:11:13: Error: The final variable 'z' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   final int z;
             ^";
-  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:12:13: Error: The const variable 'w' must be initialized.
 Try adding an initializer ('= expression') to the declaration.
   const int w;
             ^";
diff --git a/pkg/front_end/testcases/general/issue42610b.dart b/pkg/front_end/testcases/general/issue42610b.dart
new file mode 100644
index 0000000..d1bfafc
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.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 test() {
+  #final;
+  final x;
+  const y;
+  final int z;
+  const int w;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue42610b.dart.textual_outline.expect
new file mode 100644
index 0000000..41786bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void test() {}
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue42610b.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0e0980f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+void main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.weak.expect b/pkg/front_end/testcases/general/issue42610b.dart.weak.expect
new file mode 100644
index 0000000..3d48f0d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.weak.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42610b.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   #final;
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const y;
+//         ^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const int w;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #C1;
+  final dynamic x;
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int z;
+  const core::int w = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42610b.dart.weak.modular.expect
new file mode 100644
index 0000000..3d48f0d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42610b.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   #final;
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const y;
+//         ^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const int w;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #C1;
+  final dynamic x;
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int z;
+  const core::int w = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue42610b.dart.weak.outline.expect
new file mode 100644
index 0000000..b6809aa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.weak.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method test() → void
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue42610b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42610b.dart.weak.transformed.expect
new file mode 100644
index 0000000..3d48f0d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610b.dart.weak.transformed.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42610b.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   #final;
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const y;
+//         ^
+//
+// pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const int w;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #C1;
+  final dynamic x;
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int z;
+  const core::int w = invalid-expression "pkg/front_end/testcases/general/issue42610b.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42615.dart b/pkg/front_end/testcases/general/issue42615.dart
index 9aeea55..5ee7bb8 100644
--- a/pkg/front_end/testcases/general/issue42615.dart
+++ b/pkg/front_end/testcases/general/issue42615.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 import 'dart:async';
 
 class Class<T> {
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.expect
index 08aafe4..4590283 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.expect
@@ -22,7 +22,7 @@
 static method method() → dynamic
   return null;
 static method main() → dynamic {
-  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
+  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async /* futureValueType= core::List<dynamic>* */ => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect
index 08aafe4..4590283 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect
@@ -22,7 +22,7 @@
 static method method() → dynamic
   return null;
 static method main() → dynamic {
-  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
+  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async /* futureValueType= core::List<dynamic>* */ => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
index 3d98e0c..a5d9155 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
 static method method() → dynamic
   return null;
 static method main() → dynamic {
-  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* /* originally async */ {
+  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* /* futureValueType= core::List<dynamic>* */ /* originally async */ {
     final asy::_Future<core::List<dynamic>*>* :async_future = new asy::_Future::•<core::List<dynamic>*>();
     core::bool* :is_sync = false;
     FutureOr<core::List<dynamic>*>* :return_value;
diff --git a/pkg/front_end/testcases/general/issue42694.dart b/pkg/front_end/testcases/general/issue42694.dart
index fa6f914..95e5875 100644
--- a/pkg/front_end/testcases/general/issue42694.dart
+++ b/pkg/front_end/testcases/general/issue42694.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class A {
   void set setter(int value);
 }
diff --git a/pkg/front_end/testcases/general/issue42694.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue42694.dart.textual_outline.expect
index 44d643c..6d5d6ad 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   void set setter(int value);
 }
diff --git a/pkg/front_end/testcases/general/issue42694.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue42694.dart.textual_outline_modelled.expect
index 44d643c..6d5d6ad 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   void set setter(int value);
 }
diff --git a/pkg/front_end/testcases/general/issue42694.dart.weak.expect b/pkg/front_end/testcases/general/issue42694.dart.weak.expect
index f8b3fdc..5be2cc6 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set setter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set setter(core::int value) → void;
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get setter() → core::int*
+  get setter() → core::int
     return throw "";
-  set setter(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect
index f8b3fdc..5be2cc6 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set setter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set setter(core::int value) → void;
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get setter() → core::int*
+  get setter() → core::int
     return throw "";
-  set setter(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42694.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue42694.dart.weak.outline.expect
index 1b716ec..8ebfe87 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set setter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set setter(core::int value) → void;
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get setter() → core::int*
+  get setter() → core::int
     ;
-  set setter(core::int* value) → void
+  set setter(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue42694.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42694.dart.weak.transformed.expect
index f8b3fdc..5be2cc6 100644
--- a/pkg/front_end/testcases/general/issue42694.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42694.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set setter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set setter(core::int value) → void;
 }
 class B extends core::Object implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get setter() → core::int*
+  get setter() → core::int
     return throw "";
-  set setter(core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42997.dart b/pkg/front_end/testcases/general/issue42997.dart
index 7da576e..1b1ee96 100644
--- a/pkg/front_end/testcases/general/issue42997.dart
+++ b/pkg/front_end/testcases/general/issue42997.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Regression test for issue 42997
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue42997.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue42997.dart.textual_outline.expect
index fd6313c..22509e9 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 PropertyState();
 class PropertyState<I, O> {
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
index b11e219..85c075a 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,8 +46,8 @@
 import self as self;
 import "dart:core" as core;
 
-class PropertyState#1<I extends core::Object* = dynamic, O extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I*, self::PropertyState#1::O*>*
+class PropertyState#1<I extends core::Object? = dynamic, O extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I%, self::PropertyState#1::O%>
     : super core::Object::•()
     ;
   method dispose() → void {
@@ -68,16 +68,6 @@
                                         ^^^^^" in this{<unresolved>}.state))
       ;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 static abstract method PropertyState() → dynamic;
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect
index b11e219..85c075a 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,8 +46,8 @@
 import self as self;
 import "dart:core" as core;
 
-class PropertyState#1<I extends core::Object* = dynamic, O extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I*, self::PropertyState#1::O*>*
+class PropertyState#1<I extends core::Object? = dynamic, O extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I%, self::PropertyState#1::O%>
     : super core::Object::•()
     ;
   method dispose() → void {
@@ -68,16 +68,6 @@
                                         ^^^^^" in this{<unresolved>}.state))
       ;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 static abstract method PropertyState() → dynamic;
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.outline.expect
index f307379..347c54f 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,21 +17,11 @@
 import self as self;
 import "dart:core" as core;
 
-class PropertyState#1<I extends core::Object* = dynamic, O extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I*, self::PropertyState#1::O*>*
+class PropertyState#1<I extends core::Object? = dynamic, O extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I%, self::PropertyState#1::O%>
     ;
   method dispose() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
index b11e219..85c075a 100644
--- a/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -46,8 +46,8 @@
 import self as self;
 import "dart:core" as core;
 
-class PropertyState#1<I extends core::Object* = dynamic, O extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I*, self::PropertyState#1::O*>*
+class PropertyState#1<I extends core::Object? = dynamic, O extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I%, self::PropertyState#1::O%>
     : super core::Object::•()
     ;
   method dispose() → void {
@@ -68,16 +68,6 @@
                                         ^^^^^" in this{<unresolved>}.state))
       ;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 static abstract method PropertyState() → dynamic;
diff --git a/pkg/front_end/testcases/general/issue43290.dart b/pkg/front_end/testcases/general/issue43290.dart
index d3ad455..c1af4ba 100644
--- a/pkg/front_end/testcases/general/issue43290.dart
+++ b/pkg/front_end/testcases/general/issue43290.dart
@@ -1,11 +1,11 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Class {
   final int length;
 
-  const Class({this.length});
+  const Class({this.length: 0});
 
   method1a() {
     const Class(length: this.length);
diff --git a/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect
index 7d3329f..14991b0 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class Class {
   final int length;
-  const Class({this.length});
+  const Class({this.length: 0});
   method1a() {}
   method1b() {}
   method2a() {}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect
index 8de10005..f80d7f1 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class Class {
-  const Class({this.length});
+  const Class({this.length: 0});
   final int length;
   method1a() {}
   method1b() {}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.weak.expect b/pkg/front_end/testcases/general/issue43290.dart.weak.expect
index 436e5dd..74e725c 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,8 +48,8 @@
 import "dart:core" as core;
 
 class Class extends core::Object /*hasConstConstructor*/  {
-  final field core::int* length;
-  const constructor •({core::int* length = #C1}) → self::Class*
+  final field core::int length;
+  const constructor •({core::int length = #C1}) → self::Class
     : self::Class::length = length, super core::Object::•()
     ;
   method method1a() → dynamic {
@@ -59,24 +59,14 @@
     invalid-expression "Not a constant expression.";
   }
   method method2a() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
   method method2b() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = 0
 }
diff --git a/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect
index 436e5dd..74e725c 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,8 +48,8 @@
 import "dart:core" as core;
 
 class Class extends core::Object /*hasConstConstructor*/  {
-  final field core::int* length;
-  const constructor •({core::int* length = #C1}) → self::Class*
+  final field core::int length;
+  const constructor •({core::int length = #C1}) → self::Class
     : self::Class::length = length, super core::Object::•()
     ;
   method method1a() → dynamic {
@@ -59,24 +59,14 @@
     invalid-expression "Not a constant expression.";
   }
   method method2a() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
   method method2b() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = 0
 }
diff --git a/pkg/front_end/testcases/general/issue43290.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue43290.dart.weak.outline.expect
index 51f0c9f..5b46fa4 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object /*hasConstConstructor*/  {
-  final field core::int* length;
-  const constructor •({core::int* length}) → self::Class*
+  final field core::int length;
+  const constructor •({core::int length = 0}) → self::Class
     : self::Class::length = length, super core::Object::•()
     ;
   method method1a() → dynamic
@@ -15,16 +15,6 @@
     ;
   method method2b() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue43290.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43290.dart.weak.transformed.expect
index 436e5dd..74e725c 100644
--- a/pkg/front_end/testcases/general/issue43290.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43290.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,8 +48,8 @@
 import "dart:core" as core;
 
 class Class extends core::Object /*hasConstConstructor*/  {
-  final field core::int* length;
-  const constructor •({core::int* length = #C1}) → self::Class*
+  final field core::int length;
+  const constructor •({core::int length = #C1}) → self::Class
     : self::Class::length = length, super core::Object::•()
     ;
   method method1a() → dynamic {
@@ -59,24 +59,14 @@
     invalid-expression "Not a constant expression.";
   }
   method method2a() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
   method method2b() → dynamic {
-    const core::int* a = invalid-expression "Not a constant expression.";
+    const core::int a = invalid-expression "Not a constant expression.";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
 constants  {
-  #C1 = null
+  #C1 = 0
 }
diff --git a/pkg/front_end/testcases/general/issue43363.dart b/pkg/front_end/testcases/general/issue43363.dart
index e85b599..86d91ec 100644
--- a/pkg/front_end/testcases/general/issue43363.dart
+++ b/pkg/front_end/testcases/general/issue43363.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class E {
   final int x;
   final int y;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
index abcc490..f2bf39e 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class E {
   final int x;
   final int y;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
index b4cfb49..42b4c7d 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,27 +34,17 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  final field core::int* x;
-  final field core::int* y = null;
-  constructor •() → self::E*
+  final field core::int x;
+  final field core::int y = null;
+  constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
               this.y = 6;
                    ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
index b4cfb49..42b4c7d 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,27 +34,17 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  final field core::int* x;
-  final field core::int* y = null;
-  constructor •() → self::E*
+  final field core::int x;
+  final field core::int y = null;
+  constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
               this.y = 6;
                    ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.outline.expect
index e44f548..6489545 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,22 +26,12 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •() → self::E*
+  final field core::int x;
+  final field core::int y;
+  constructor •() → self::E
     ;
-  constructor named() → self::E*
+  constructor named() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
index b4cfb49..42b4c7d 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,27 +34,17 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  final field core::int* x;
-  final field core::int* y = null;
-  constructor •() → self::E*
+  final field core::int x;
+  final field core::int y = null;
+  constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
               this.y = 6;
                    ^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart b/pkg/front_end/testcases/general/issue43975.dart
index 8511b80..929affa 100644
--- a/pkg/front_end/testcases/general/issue43975.dart
+++ b/pkg/front_end/testcases/general/issue43975.dart
@@ -1,6 +1,6 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 typedef F = void Function<X extends F>() Function();
 void main() {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect
index 7bf4086..ccb87d9 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef F = void Function<X extends F>() Function();
 void main() {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect
index 7bf4086..ccb87d9 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef F = void Function<X extends F>() Function();
 void main() {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.weak.expect b/pkg/front_end/testcases/general/issue43975.dart.weak.expect
index a1da936..8d7db11 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect
index a1da936..8d7db11 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/issue43975.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue43975.dart.weak.outline.expect
index a61aa23..a710114 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/issue43975.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43975.dart.weak.transformed.expect
index a1da936..8d7db11 100644
--- a/pkg/front_end/testcases/general/issue43975.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43975.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/issue44347.dart b/pkg/front_end/testcases/general/issue44347.dart
index 074b4e5..0389b03 100644
--- a/pkg/front_end/testcases/general/issue44347.dart
+++ b/pkg/front_end/testcases/general/issue44347.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 test() {
   Set<int>.();
 }
diff --git a/pkg/front_end/testcases/general/issue44347.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue44347.dart.textual_outline.expect
index 001308b..ec6b9e0 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/issue44347.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue44347.dart.textual_outline_modelled.expect
index 38df08d..f67dbb0 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 test() {}
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.expect
index 0fce86b..bd718d5 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.expect
@@ -1,18 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
-//   Set<int>.();
-//      ^
-//
-// pkg/front_end/testcases/general/issue44347.dart:8:13: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/issue44347.dart:6:13: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   Set<int>.();
 //             ^
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+// pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 // Try inserting an identifier before '('.
 //   Set<int>.();
 //            ^
@@ -20,7 +15,7 @@
 import self as self;
 
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   Set<int>.();
            ^";
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect
index 0fce86b..bd718d5 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect
@@ -1,18 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
-//   Set<int>.();
-//      ^
-//
-// pkg/front_end/testcases/general/issue44347.dart:8:13: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/issue44347.dart:6:13: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   Set<int>.();
 //             ^
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+// pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 // Try inserting an identifier before '('.
 //   Set<int>.();
 //            ^
@@ -20,7 +15,7 @@
 import self as self;
 
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   Set<int>.();
            ^";
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.outline.expect
index a29647d..64923de 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
index 0fce86b..bd718d5 100644
--- a/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.transformed.expect
@@ -1,18 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
-//   Set<int>.();
-//      ^
-//
-// pkg/front_end/testcases/general/issue44347.dart:8:13: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/issue44347.dart:6:13: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   Set<int>.();
 //             ^
 //
-// pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+// pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 // Try inserting an identifier before '('.
 //   Set<int>.();
 //            ^
@@ -20,7 +15,7 @@
 import self as self;
 
 static method test() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:6:12: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   Set<int>.();
            ^";
diff --git a/pkg/front_end/testcases/general/issue44476.dart b/pkg/front_end/testcases/general/issue44476.dart
index 809de5b..d8459e2 100644
--- a/pkg/front_end/testcases/general/issue44476.dart
+++ b/pkg/front_end/testcases/general/issue44476.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A<X extends int> {}
 
 foo(A<num> x) {
diff --git a/pkg/front_end/testcases/general/issue44476.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue44476.dart.textual_outline.expect
index 1681940..c3257fc 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends int> {}
 
 foo(A<num> x) {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue44476.dart.textual_outline_modelled.expect
index 1681940..c3257fc 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends int> {}
 
 foo(A<num> x) {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.expect
index 645587c..0f8715b 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -61,28 +61,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo(self::A<core::num*>* x) → dynamic {
-  function bar(self::A<core::num*>* y) → Null {
-    function barbar(self::A<core::num*>* yy) → Null
+static method foo(self::A<core::num> x) → dynamic {
+  function bar(self::A<core::num> y) → Null {
+    function barbar(self::A<core::num> yy) → Null
       return null;
   }
-  (self::A<core::num*>*) →* Null baz = (self::A<core::num*>* z) → Null {
-    (self::A<core::num*>*) →* Null bazbaz = (self::A<core::num*>* zz) → Null => null;
+  (self::A<core::num>) → Null baz = (self::A<core::num> z) → Null {
+    (self::A<core::num>) → Null bazbaz = (self::A<core::num> zz) → Null => null;
   };
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
index 645587c..0f8715b 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -61,28 +61,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo(self::A<core::num*>* x) → dynamic {
-  function bar(self::A<core::num*>* y) → Null {
-    function barbar(self::A<core::num*>* yy) → Null
+static method foo(self::A<core::num> x) → dynamic {
+  function bar(self::A<core::num> y) → Null {
+    function barbar(self::A<core::num> yy) → Null
       return null;
   }
-  (self::A<core::num*>*) →* Null baz = (self::A<core::num*>* z) → Null {
-    (self::A<core::num*>*) →* Null bazbaz = (self::A<core::num*>* zz) → Null => null;
+  (self::A<core::num>) → Null baz = (self::A<core::num> z) → Null {
+    (self::A<core::num>) → Null bazbaz = (self::A<core::num> zz) → Null => null;
   };
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
index 2131965..ab893e2 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,21 +13,11 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo(self::A<core::num*>* x) → dynamic
+static method foo(self::A<core::num> x) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
index 645587c..0f8715b 100644
--- a/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -61,28 +61,18 @@
 import self as self;
 import "dart:core" as core;
 
-class A<X extends core::int*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo(self::A<core::num*>* x) → dynamic {
-  function bar(self::A<core::num*>* y) → Null {
-    function barbar(self::A<core::num*>* yy) → Null
+static method foo(self::A<core::num> x) → dynamic {
+  function bar(self::A<core::num> y) → Null {
+    function barbar(self::A<core::num> yy) → Null
       return null;
   }
-  (self::A<core::num*>*) →* Null baz = (self::A<core::num*>* z) → Null {
-    (self::A<core::num*>*) →* Null bazbaz = (self::A<core::num*>* zz) → Null => null;
+  (self::A<core::num>) → Null baz = (self::A<core::num> z) → Null {
+    (self::A<core::num>) → Null bazbaz = (self::A<core::num> zz) → Null => null;
   };
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44654.dart b/pkg/front_end/testcases/general/issue44654.dart
index ad48c45..267e879 100644
--- a/pkg/front_end/testcases/general/issue44654.dart
+++ b/pkg/front_end/testcases/general/issue44654.dart
@@ -1,8 +1,8 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
-// @dart = 2.9
 
 void test2() {
   String string = null;
diff --git a/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect
index d7c0d32..a95637c 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.textual_outline.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 void test2() {}
 void main() {}
 void checkFirstLineHasPosition(StackTrace stackTrace) {}
diff --git a/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect
index 3d04f91..95b5598 100644
--- a/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue44654.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 void checkFirstLineHasPosition(StackTrace stackTrace) {}
 void main() {}
 void test2() {}
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart b/pkg/front_end/testcases/general/issue45101/main.dart
index 171b59b..d1ac63e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart
+++ b/pkg/front_end/testcases/general/issue45101/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline_modelled.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
index d517647..c62cfe1 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
 
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 import "dart:_internal";
 
-class _ArraySize<T extends core::Object* = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T*> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
-  final field core::int* foo;
-  const constructor •(core::int* foo) → self2::_ArraySize<self2::_ArraySize::T*>*
+class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
+  final field core::int foo;
+  const constructor •(core::int foo) → self2::_ArraySize<self2::_ArraySize::T%>
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 @#C4
-class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5];
+class Array<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%>
+    return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
index d517647..c62cfe1 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
 
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 import "dart:_internal";
 
-class _ArraySize<T extends core::Object* = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T*> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
-  final field core::int* foo;
-  const constructor •(core::int* foo) → self2::_ArraySize<self2::_ArraySize::T*>*
+class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
+  final field core::int foo;
+  const constructor •(core::int foo) → self2::_ArraySize<self2::_ArraySize::T%>
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 @#C4
-class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5];
+class Array<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%>
+    return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index f06670d..4f32ae7 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
@@ -6,52 +6,32 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 import "dart:_internal";
 
-class _ArraySize<T extends core::Object* = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T*> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
-  final field core::int* foo;
-  const constructor •(core::int* foo) → self2::_ArraySize<self2::_ArraySize::T*>*
+class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
+  final field core::int foo;
+  const constructor •(core::int foo) → self2::_ArraySize<self2::_ArraySize::T%>
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @_in::patch
 @core::pragma::_("vm:entry-point")
-class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
+class Array<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self2::Array::•]/*isLegacy*/;
   @_in::patch
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%>
+    return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:10:1 -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
 Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:6:7 -> ConstructorTearOffConstant(Array.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///origin_lib.dart:5:7 -> ConstructorTearOffConstant(Array.)
 Extra constant evaluation: evaluated: 8, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
index d517647..c62cfe1 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.transformed.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
 
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
 import "dart:_internal";
 
-class _ArraySize<T extends core::Object* = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T*> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
-  final field core::int* foo;
-  const constructor •(core::int* foo) → self2::_ArraySize<self2::_ArraySize::T*>*
+class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
+  final field core::int foo;
+  const constructor •(core::int foo) → self2::_ArraySize<self2::_ArraySize::T%>
     : self2::_ArraySize::foo = foo, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @#C1
 @#C4
-class Array<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5];
+class Array<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
-    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%>
+    return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/issue45101/origin_lib.dart b/pkg/front_end/testcases/general/issue45101/origin_lib.dart
index 2aabe5a..d5c2f46 100644
--- a/pkg/front_end/testcases/general/issue45101/origin_lib.dart
+++ b/pkg/front_end/testcases/general/issue45101/origin_lib.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 class Array<T> {
   external const factory Array(int foo);
diff --git a/pkg/front_end/testcases/general/issue45101/patch_lib.dart b/pkg/front_end/testcases/general/issue45101/patch_lib.dart
index b5a1fd5..c8a6e85 100644
--- a/pkg/front_end/testcases/general/issue45101/patch_lib.dart
+++ b/pkg/front_end/testcases/general/issue45101/patch_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // ignore: import_internal_library
 import 'dart:_internal';
 
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart b/pkg/front_end/testcases/general/issue45598_2.dart
index 61a731e..7d615c3 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart
+++ b/pkg/front_end/testcases/general/issue45598_2.dart
@@ -2,10 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.9
-
 foo(Map<String, String> m) {
-  void bar<X extends Z, Y, Z>({Map<Y, Z> m}) {}
+  void bar<X extends Z, Y, Z>({required Map<Y, Z> m}) {}
   bar(m: m);
 }
 
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline.expect
index 983b1d0..853274f 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo(Map<String, String> m) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline_modelled.expect
index 983b1d0..853274f 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo(Map<String, String> m) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
index eff30fa..f0813ae 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
-  function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
-  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
+static method foo(core::Map<core::String, core::String> m) → dynamic {
+  function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect
index eff30fa..f0813ae 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
-  function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
-  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
+static method foo(core::Map<core::String, core::String> m) → dynamic {
+  function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.outline.expect
index 9efffa9a..1e7263b 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::Map<core::String*, core::String*>* m) → dynamic
+static method foo(core::Map<core::String, core::String> m) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
index eff30fa..f0813ae 100644
--- a/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
-  function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
-  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
+static method foo(core::Map<core::String, core::String> m) → dynamic {
+  function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart b/pkg/front_end/testcases/general/issue45660_2.dart
new file mode 100644
index 0000000..434fdc4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T Function<T extends num>(T) extendsNumReturnArg = <S extends num>(S s) => s;
+
+functionInvocations() {
+  extendsNumReturnArg/*<Null>*/(null);
+  extendsNumReturnArg/*<String>*/("");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline.expect
new file mode 100644
index 0000000..363627b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+T Function<T extends num>(T) extendsNumReturnArg = <S extends num>(S s) => s;
+functionInvocations() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..363627b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+T Function<T extends num>(T) extendsNumReturnArg = <S extends num>(S s) => s;
+functionInvocations() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.weak.expect b/pkg/front_end/testcases/general/issue45660_2.dart.weak.expect
new file mode 100644
index 0000000..b4ba3a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.weak.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:8:22: Error: Inferred type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<Null>*/(null);
+//                      ^
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:9:22: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<String>*/("");
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::num = dynamic>(T) → T extendsNumReturnArg = <S extends core::num>(S s) → S => s;
+static method functionInvocations() → dynamic {
+  self::extendsNumReturnArg<Null>(null){(Null) → Null};
+  self::extendsNumReturnArg<core::String>(""){(core::String) → core::String};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45660_2.dart.weak.modular.expect
new file mode 100644
index 0000000..b4ba3a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:8:22: Error: Inferred type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<Null>*/(null);
+//                      ^
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:9:22: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<String>*/("");
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::num = dynamic>(T) → T extendsNumReturnArg = <S extends core::num>(S s) → S => s;
+static method functionInvocations() → dynamic {
+  self::extendsNumReturnArg<Null>(null){(Null) → Null};
+  self::extendsNumReturnArg<core::String>(""){(core::String) → core::String};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45660_2.dart.weak.outline.expect
new file mode 100644
index 0000000..33986f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::num = dynamic>(T) → T extendsNumReturnArg;
+static method functionInvocations() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue45660_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45660_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..b4ba3a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660_2.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:8:22: Error: Inferred type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<Null>*/(null);
+//                      ^
+//
+// pkg/front_end/testcases/general/issue45660_2.dart:9:22: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<String>*/("");
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::num = dynamic>(T) → T extendsNumReturnArg = <S extends core::num>(S s) → S => s;
+static method functionInvocations() → dynamic {
+  self::extendsNumReturnArg<Null>(null){(Null) → Null};
+  self::extendsNumReturnArg<core::String>(""){(core::String) → core::String};
+}
+static method main() → dynamic {}
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/issue46719.dart.weak.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
index 449b259..3fb8261 100644
--- a/pkg/front_end/testcases/general/issue46719.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.expect
@@ -26,24 +26,33 @@
 //   self.m<String>.applyAndPrint(['three']);
 //                  ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<int>.applyAndPrint([2]);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<String>.applyAndPrint(['three']);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
 //   A.named.toString();
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   A<int>.named.toString();
 //    ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
 //   A<int>.named.toString();
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect
index 449b259..3fb8261 100644
--- a/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect
@@ -26,24 +26,33 @@
 //   self.m<String>.applyAndPrint(['three']);
 //                  ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<int>.applyAndPrint([2]);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<String>.applyAndPrint(['three']);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
 //   A.named.toString();
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   A<int>.named.toString();
 //    ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
 //   A<int>.named.toString();
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
index 68480b5..f46b021 100644
--- a/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.transformed.expect
@@ -26,24 +26,33 @@
 //   self.m<String>.applyAndPrint(['three']);
 //                  ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<int>.applyAndPrint([2]);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   self.A.n<String>.applyAndPrint(['three']);
 //           ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
 //   A.named.toString();
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   A<int>.named.toString();
 //    ^
+// pkg/front_end/testcases/general/issue46719.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
 //   A<int>.named.toString();
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.expect
index eb4a9a3..23b5061 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.expect
@@ -13,13 +13,13 @@
 static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
   return throw 42;
 static method bar(core::String? y) → dynamic {}
-static method test(self::A<core::String> a) → dynamic async {
-  final core::String? x = await(() → asy::Future<core::String?> async {
+static method test(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
+  final core::String? x = await(() → asy::Future<core::String?> async /* futureValueType= core::String? */ {
     return self::foo<core::String>(a);
   })(){() → asy::Future<core::String?>};
   self::bar(x);
 }
-static method test2(self::A<core::String> a) → dynamic async {
+static method test2(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
   return self::foo<core::String>(a);
 }
 static method test3(self::A<core::String> a) → dynamic {
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect
index eb4a9a3..23b5061 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect
@@ -13,13 +13,13 @@
 static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
   return throw 42;
 static method bar(core::String? y) → dynamic {}
-static method test(self::A<core::String> a) → dynamic async {
-  final core::String? x = await(() → asy::Future<core::String?> async {
+static method test(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
+  final core::String? x = await(() → asy::Future<core::String?> async /* futureValueType= core::String? */ {
     return self::foo<core::String>(a);
   })(){() → asy::Future<core::String?>};
   self::bar(x);
 }
-static method test2(self::A<core::String> a) → dynamic async {
+static method test2(self::A<core::String> a) → dynamic async /* futureValueType= dynamic */ {
   return self::foo<core::String>(a);
 }
 static method test3(self::A<core::String> a) → dynamic {
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
index 184f658..5209384 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
   return throw 42;
 static method bar(core::String? y) → dynamic {}
-static method test(self::A<core::String> a) → dynamic /* originally async */ {
+static method test(self::A<core::String> a) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -27,7 +27,7 @@
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper((() → asy::Future<core::String?> /* originally async */ {
+        [yield] let dynamic #t1 = asy::_awaitHelper((() → asy::Future<core::String?> /* futureValueType= core::String? */ /* originally async */ {
           final asy::_Future<core::String?> :async_future = new asy::_Future::•<core::String?>();
           core::bool* :is_sync = false;
           FutureOr<core::String?>? :return_value;
@@ -69,7 +69,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test2(self::A<core::String> a) → dynamic /* originally async */ {
+static method test2(self::A<core::String> a) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
index 706562c..0be5e5b 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.transformed.expect
@@ -10,17 +10,17 @@
 }
 class Settings extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
-  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+  static factory •({@#C3 self::Sidebar sidebar = #C2}) → self::Settings
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
   static factory •() → self::Sidebar
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
-  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C2}) → self::_SSettings
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -30,7 +30,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
   static factory •() → self::_SSidebar
     return new self::_$_SSidebar::•();
 }
@@ -45,10 +45,9 @@
   #C1 = constructor-tearoff self::Settings::•
   #C2 = self::_$_SSidebar {}
   #C3 = self::Default {defaultValue:#C2}
-  #C4 = null
-  #C5 = constructor-tearoff self::Sidebar::•
-  #C6 = constructor-tearoff self::_SSettings::•
-  #C7 = constructor-tearoff self::_SSidebar::•
+  #C4 = constructor-tearoff self::Sidebar::•
+  #C5 = constructor-tearoff self::_SSettings::•
+  #C6 = constructor-tearoff self::_SSidebar::•
 }
 
 
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.expect
index abd22ad..da93591 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async {
+static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async /* futureValueType= core::int */ {
   if(x is{ForNonNullableByDefault} asy::Future<core::int>) {
     return x{self::foo::X% & asy::Future<core::int> /* '%' & '!' = '!' */};
   }
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect
index abd22ad..da93591 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async {
+static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async /* futureValueType= core::int */ {
   if(x is{ForNonNullableByDefault} asy::Future<core::int>) {
     return x{self::foo::X% & asy::Future<core::int> /* '%' & '!' = '!' */};
   }
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
index 1e3ff27..745e0b9 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> /* originally async */ {
+static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
   final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
   core::bool* :is_sync = false;
   FutureOr<core::int>? :return_value;
diff --git a/pkg/front_end/testcases/general/issue47495.dart b/pkg/front_end/testcases/general/issue47495.dart
index 53c19c1..fcef9ee 100644
--- a/pkg/front_end/testcases/general/issue47495.dart
+++ b/pkg/front_end/testcases/general/issue47495.dart
@@ -2,9 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
+// @dart=2.13
 
 class S {}
+
 class M {}
 
 typedef SAlias = S;
diff --git a/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect
index c7f3471..d5c68b3 100644
--- a/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue47495.dart.textual_outline.expect
@@ -1,6 +1,8 @@
-// @dart = 2.9
+// @dart = 2.13
 class S {}
+
 class M {}
+
 typedef SAlias = S;
 typedef MAlias = M;
 class C = SAlias with MAlias;
diff --git a/pkg/front_end/testcases/general/issue47495.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue47495.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f8cb0e4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+// @dart = 2.13
+class C = SAlias with MAlias;
+
+class M {}
+
+class S {}
+
+main() {}
+typedef MAlias = M;
+typedef SAlias = S;
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.expect
index aeebd16..bb6f57a 100644
--- a/pkg/front_end/testcases/general/issue47495.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.expect
@@ -1,70 +1,22 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
-// typedef SAlias = S;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
-// typedef MAlias = M;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
-// class C = SAlias with MAlias;
-//       ^
-// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
-// typedef MAlias = M;
-//         ^
-//
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef SAlias = invalid-type;
-typedef MAlias = invalid-type;
+typedef SAlias = self::S;
+typedef MAlias = self::M;
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends core::Object {
-  synthetic constructor •() → self::C*
-    : super core::Object::•()
+class C = self::S with self::M {
+  synthetic constructor •() → self::C
+    : super self::S::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect
index aeebd16..bb6f57a 100644
--- a/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect
@@ -1,70 +1,22 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
-// typedef SAlias = S;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
-// typedef MAlias = M;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
-// class C = SAlias with MAlias;
-//       ^
-// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
-// typedef MAlias = M;
-//         ^
-//
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef SAlias = invalid-type;
-typedef MAlias = invalid-type;
+typedef SAlias = self::S;
+typedef MAlias = self::M;
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends core::Object {
-  synthetic constructor •() → self::C*
-    : super core::Object::•()
+class C = self::S with self::M {
+  synthetic constructor •() → self::C
+    : super self::S::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect
index 697ca5b..d437b4a 100644
--- a/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.outline.expect
@@ -1,68 +1,21 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
-// typedef SAlias = S;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
-// typedef MAlias = M;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
-// class C = SAlias with MAlias;
-//       ^
-// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
-// typedef MAlias = M;
-//         ^
-//
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef SAlias = invalid-type;
-typedef MAlias = invalid-type;
+typedef SAlias = self::S;
+typedef MAlias = self::M;
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends core::Object {
-  synthetic constructor •() → self::C*
+class C = self::S with self::M {
+  synthetic constructor •() → self::C
+    : super self::S::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect
index aeebd16..a9933ce 100644
--- a/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.transformed.expect
@@ -1,70 +1,22 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
-// typedef SAlias = S;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
-// typedef MAlias = M;
-//                ^
-//
-// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
-// class C = SAlias with MAlias;
-//       ^
-// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
-// typedef MAlias = M;
-//         ^
-//
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef SAlias = invalid-type;
-typedef MAlias = invalid-type;
+typedef SAlias = self::S;
+typedef MAlias = self::M;
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C extends core::Object {
-  synthetic constructor •() → self::C*
-    : super core::Object::•()
+class C extends self::S implements self::M /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::C
+    : super self::S::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
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/issue48347.dart.weak.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
index 555e190..4925232d 100644
--- a/pkg/front_end/testcases/general/issue48347.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
@@ -4,7 +4,7 @@
 
 import "dart:async";
 
-static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async /* futureValueType= dynamic */ {
   await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
   }
 }
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
index 555e190..4925232d 100644
--- a/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 
 import "dart:async";
 
-static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async /* futureValueType= dynamic */ {
   await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
   }
 }
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
index 80b72a9..cb2e8b2 100644
--- a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "dart:async";
 
-static method test(asy::StreamController<void> _eventStreamController) → dynamic /* originally async */ {
+static method test(asy::StreamController<void> _eventStreamController) → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/general/issue48373.dart b/pkg/front_end/testcases/general/issue48373.dart
new file mode 100644
index 0000000..4b95346
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart
@@ -0,0 +1,10 @@
+// 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 fn<T, S>(T? t, S? s) {
+  var x = [t!, s!];
+  List<Object> y = x; // Ok.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48373.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48373.dart.textual_outline.expect
new file mode 100644
index 0000000..2854a9f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+void fn<T, S>(T? t, S? s) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48373.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48373.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fada1de
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void fn<T, S>(T? t, S? s) {}
diff --git a/pkg/front_end/testcases/general/issue48373.dart.weak.expect b/pkg/front_end/testcases/general/issue48373.dart.weak.expect
new file mode 100644
index 0000000..79628fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.weak.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method fn<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::fn::T? t, self::fn::S? s) → void {
+  core::List<core::Object> x = <core::Object>[t!, s!];
+  core::List<core::Object> y = x;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48373.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48373.dart.weak.modular.expect
new file mode 100644
index 0000000..79628fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method fn<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::fn::T? t, self::fn::S? s) → void {
+  core::List<core::Object> x = <core::Object>[t!, s!];
+  core::List<core::Object> y = x;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48373.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48373.dart.weak.outline.expect
new file mode 100644
index 0000000..9427480
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method fn<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::fn::T? t, self::fn::S? s) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48373.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48373.dart.weak.transformed.expect
new file mode 100644
index 0000000..0a0e052
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48373.dart.weak.transformed.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method fn<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::fn::T? t, self::fn::S? s) → void {
+  core::List<core::Object> x = core::_GrowableList::_literal2<core::Object>(t!, s!);
+  core::List<core::Object> y = x;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.expect
index 565652d..9b35946 100644
--- a/pkg/front_end/testcases/general/issue48487.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   void test() {
 //   ^
+// pkg/front_end/testcases/general/issue48487.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect
index 565652d..9b35946 100644
--- a/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   void test() {
 //   ^
+// pkg/front_end/testcases/general/issue48487.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect
index cbcf888..56e3e53 100644
--- a/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   void test() {
 //   ^
+// pkg/front_end/testcases/general/issue48487.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect
index 565652d..9b35946 100644
--- a/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   void test() {
 //   ^
+// pkg/front_end/testcases/general/issue48487.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.expect
index 050d4dd..444b382 100644
--- a/pkg/front_end/testcases/general/issue48487b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const T.named();
 //   ^
+// pkg/front_end/testcases/general/issue48487b.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect
index 050d4dd..444b382 100644
--- a/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const T.named();
 //   ^
+// pkg/front_end/testcases/general/issue48487b.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect
index ef043fd..5c0a1c4 100644
--- a/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const T.named();
 //   ^
+// pkg/front_end/testcases/general/issue48487b.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect
index 050d4dd..444b382 100644
--- a/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/issue48487b.dart:9:3: Error: The 'enhanced-enums' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
 //   const T.named();
 //   ^
+// pkg/front_end/testcases/general/issue48487b.dart:5:1: Context: This is the annotation that opts out this library from the 'enhanced-enums' language feature.
+// // @dart=2.16
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue48548.dart b/pkg/front_end/testcases/general/issue48548.dart
new file mode 100644
index 0000000..52be292
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart
@@ -0,0 +1,31 @@
+// 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.
+
+abstract class A {
+  int get value;
+  factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+  final int value;
+  _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+
+void main(List<String> args) {
+  expect(0, A().value);
+  expect(0, A.new().value);
+  expect(0, _new().value);
+  expect(0, (A.new)().value);
+  expect(0, _AImpl().value);
+  expect(0, _AImpl.new().value);
+  expect(0, _newImpl().value);
+  expect(0, (_AImpl.new)().value);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
new file mode 100644
index 0000000..a9c9cef
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+abstract class A {
+  int get value;
+  factory A({int value}) = _AImpl;
+}
+
+class _AImpl implements A {
+  final int value;
+  _AImpl({this.value = 0});
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+void main(List<String> args) {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0c47551
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+abstract class A {
+  factory A({int value}) = _AImpl;
+  int get value;
+}
+
+class _AImpl implements A {
+  _AImpl({this.value = 0});
+  final int value;
+}
+
+const _new = A.new;
+const _newImpl = _AImpl.new;
+expect(expected, actual) {}
+void main(List<String> args) {}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
new file mode 100644
index 0000000..3119c74
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = 0}) → self::_AImpl
+    ;
+}
+static const field ({value: core::int}) → self::A _new = self::A::•;
+static const field ({value: core::int}) → self::_AImpl _newImpl = self::_AImpl::•;
+static method main(core::List<core::String> args) → void
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:5:16 -> ConstructorTearOffConstant(A.)
+Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///issue48548.dart:15:14 -> RedirectingFactoryTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///issue48548.dart:16:18 -> ConstructorTearOffConstant(_AImpl.)
+Extra constant evaluation: evaluated: 6, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
new file mode 100644
index 0000000..5077524
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48548.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get value() → core::int;
+  static factory •({core::int value = #C2}) → self::A
+    return new self::_AImpl::•(value: value);
+}
+class _AImpl extends core::Object implements self::A {
+  final field core::int value;
+  constructor •({core::int value = #C2}) → self::_AImpl
+    : self::_AImpl::value = value, super core::Object::•()
+    ;
+}
+static const field ({value: core::int}) → self::A _new = #C3;
+static const field ({value: core::int}) → self::_AImpl _newImpl = #C4;
+static method main(core::List<core::String> args) → void {
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, #C3(){({value: core::int}) → self::A}.{self::A::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, new self::_AImpl::•().{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+  self::expect(0, #C4(){({value: core::int}) → self::_AImpl}.{self::_AImpl::value}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = 0
+  #C3 = redirecting-factory-tearoff self::A::•
+  #C4 = constructor-tearoff self::_AImpl::•
+}
diff --git a/pkg/front_end/testcases/general/literals.dart b/pkg/front_end/testcases/general/literals.dart
index 0d637cc..561b82c 100644
--- a/pkg/front_end/testcases/general/literals.dart
+++ b/pkg/front_end/testcases/general/literals.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 testString() {
   print("a");
 }
diff --git a/pkg/front_end/testcases/general/literals.dart.textual_outline.expect b/pkg/front_end/testcases/general/literals.dart.textual_outline.expect
index 23ee3bf..8732e5c8 100644
--- a/pkg/front_end/testcases/general/literals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/literals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 testString() {}
 testInt() {}
 testBool() {}
diff --git a/pkg/front_end/testcases/general/literals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/literals.dart.textual_outline_modelled.expect
index 1125de1..e45ac05 100644
--- a/pkg/front_end/testcases/general/literals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/literals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 testBool() {}
 testDouble() {}
diff --git a/pkg/front_end/testcases/general/literals.dart.weak.expect b/pkg/front_end/testcases/general/literals.dart.weak.expect
index 8ef3e48..2bbe155 100644
--- a/pkg/front_end/testcases/general/literals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/literals.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -20,11 +20,11 @@
 }
 static method testList() → dynamic {
   core::print(<dynamic>[]);
-  core::print(<core::String*>["a", "b"]);
+  core::print(<core::String>["a", "b"]);
 }
 static method testMap() → dynamic {
   core::print(<dynamic, dynamic>{});
-  core::print(<core::String*, core::String*>{"a": "b"});
+  core::print(<core::String, core::String>{"a": "b"});
 }
 static method testSymbol() → dynamic {
   core::print(#C1);
diff --git a/pkg/front_end/testcases/general/literals.dart.weak.modular.expect b/pkg/front_end/testcases/general/literals.dart.weak.modular.expect
index 8ef3e48..2bbe155 100644
--- a/pkg/front_end/testcases/general/literals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/literals.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -20,11 +20,11 @@
 }
 static method testList() → dynamic {
   core::print(<dynamic>[]);
-  core::print(<core::String*>["a", "b"]);
+  core::print(<core::String>["a", "b"]);
 }
 static method testMap() → dynamic {
   core::print(<dynamic, dynamic>{});
-  core::print(<core::String*, core::String*>{"a": "b"});
+  core::print(<core::String, core::String>{"a": "b"});
 }
 static method testSymbol() → dynamic {
   core::print(#C1);
diff --git a/pkg/front_end/testcases/general/literals.dart.weak.outline.expect b/pkg/front_end/testcases/general/literals.dart.weak.outline.expect
index ffc79f2..7c2a464 100644
--- a/pkg/front_end/testcases/general/literals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/literals.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method testString() → dynamic
diff --git a/pkg/front_end/testcases/general/literals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/literals.dart.weak.transformed.expect
index ae7c90f..9a94341 100644
--- a/pkg/front_end/testcases/general/literals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/literals.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -20,11 +20,11 @@
 }
 static method testList() → dynamic {
   core::print(core::_GrowableList::•<dynamic>(0));
-  core::print(core::_GrowableList::_literal2<core::String*>("a", "b"));
+  core::print(core::_GrowableList::_literal2<core::String>("a", "b"));
 }
 static method testMap() → dynamic {
   core::print(<dynamic, dynamic>{});
-  core::print(<core::String*, core::String*>{"a": "b"});
+  core::print(<core::String, core::String>{"a": "b"});
 }
 static method testSymbol() → dynamic {
   core::print(#C1);
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart b/pkg/front_end/testcases/general/local_generic_function.dart
index 05ec927..a251f14 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart
+++ b/pkg/front_end/testcases/general/local_generic_function.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 main() {
   T f<T>(List<T> l) => l[0];
   var x = f([0]);
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline.expect b/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
index b22d5a7..bfb45dd 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
-    return l.{core::List::[]}(0){(core::int*) →* T*};
-  core::int* x = f<core::int*>(<core::int*>[0]){(core::List<core::int*>*) →* core::int*};
+  function f<T extends core::Object? = dynamic>(core::List<T%> l) → T%
+    return l.{core::List::[]}(0){(core::int) → T%};
+  core::int x = f<core::int>(<core::int>[0]){(core::List<core::int>) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect
index b22d5a7..bfb45dd 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
-    return l.{core::List::[]}(0){(core::int*) →* T*};
-  core::int* x = f<core::int*>(<core::int*>[0]){(core::List<core::int*>*) →* core::int*};
+  function f<T extends core::Object? = dynamic>(core::List<T%> l) → T%
+    return l.{core::List::[]}(0){(core::int) → T%};
+  core::int x = f<core::int>(<core::int>[0]){(core::List<core::int>) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.outline.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
index 6c7e013..4ad80c1 100644
--- a/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
-    return l.{core::List::[]}(0){(core::int*) →* T*};
-  core::int* x = f<core::int*>(core::_GrowableList::_literal1<core::int*>(0)){(core::List<core::int*>*) →* core::int*};
+  function f<T extends core::Object? = dynamic>(core::List<T%> l) → T%
+    return l.{core::List::[]}(0){(core::int) → T%};
+  core::int x = f<core::int>(core::_GrowableList::_literal1<core::int>(0)){(core::List<core::int>) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart
index 23b431a..6a3864c 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Test for potentially slow compilation of long typedef dependency chains.
 
 typedef Foo01<X, Y, Z> = void Function(Null);
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline.expect
index 716cfd0..22729bf 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef Foo01<X, Y, Z> = void Function(Null);
 typedef Foo02<X, Y, Z> = void Function(Foo01<X, Y, Z>);
 typedef Foo03<X, Y, Z> = void Function(Foo02<X, Y, Z>);
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline_modelled.expect
index ab48f3f..20e1848 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef Foo01<X, Y, Z> = void Function(Null);
 typedef Foo02<X, Y, Z> = void Function(Foo01<X, Y, Z>);
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.expect
index 10636b1..4bcf146 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo01<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (Null) →* void;
-typedef Foo02<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((Null) →* void) →* void;
-typedef Foo03<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((Null) →* void) →* void) →* void;
-typedef Foo04<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((Null) →* void) →* void) →* void) →* void;
-typedef Foo05<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((Null) →* void) →* void) →* void) →* void) →* void;
-typedef Foo06<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((Null) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo07<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo08<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo09<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo10<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo11<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo12<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo13<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo14<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo15<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo16<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo17<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo18<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo19<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo20<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo01<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (Null) → void;
+typedef Foo02<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((Null) → void) → void;
+typedef Foo03<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((Null) → void) → void) → void;
+typedef Foo04<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((Null) → void) → void) → void) → void;
+typedef Foo05<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((Null) → void) → void) → void) → void) → void;
+typedef Foo06<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((Null) → void) → void) → void) → void) → void) → void;
+typedef Foo07<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((Null) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo08<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo09<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo10<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo11<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo12<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo13<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo14<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo15<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo16<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo17<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo18<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo19<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo20<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect
index 10636b1..4bcf146 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo01<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (Null) →* void;
-typedef Foo02<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((Null) →* void) →* void;
-typedef Foo03<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((Null) →* void) →* void) →* void;
-typedef Foo04<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((Null) →* void) →* void) →* void) →* void;
-typedef Foo05<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((Null) →* void) →* void) →* void) →* void) →* void;
-typedef Foo06<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((Null) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo07<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo08<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo09<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo10<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo11<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo12<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo13<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo14<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo15<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo16<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo17<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo18<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo19<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo20<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo01<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (Null) → void;
+typedef Foo02<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((Null) → void) → void;
+typedef Foo03<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((Null) → void) → void) → void;
+typedef Foo04<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((Null) → void) → void) → void) → void;
+typedef Foo05<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((Null) → void) → void) → void) → void) → void;
+typedef Foo06<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((Null) → void) → void) → void) → void) → void) → void;
+typedef Foo07<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((Null) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo08<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo09<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo10<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo11<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo12<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo13<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo14<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo15<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo16<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo17<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo18<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo19<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo20<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.outline.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.outline.expect
index 15cb773..5985e90 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.outline.expect
@@ -1,26 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo01<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (Null) →* void;
-typedef Foo02<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((Null) →* void) →* void;
-typedef Foo03<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((Null) →* void) →* void) →* void;
-typedef Foo04<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((Null) →* void) →* void) →* void) →* void;
-typedef Foo05<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((Null) →* void) →* void) →* void) →* void) →* void;
-typedef Foo06<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((Null) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo07<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo08<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo09<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo10<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo11<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo12<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo13<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo14<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo15<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo16<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo17<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo18<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo19<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo20<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo01<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (Null) → void;
+typedef Foo02<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((Null) → void) → void;
+typedef Foo03<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((Null) → void) → void) → void;
+typedef Foo04<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((Null) → void) → void) → void) → void;
+typedef Foo05<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((Null) → void) → void) → void) → void) → void;
+typedef Foo06<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((Null) → void) → void) → void) → void) → void) → void;
+typedef Foo07<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((Null) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo08<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo09<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo10<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo11<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo12<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo13<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo14<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo15<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo16<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo17<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo18<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo19<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo20<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.transformed.expect
index 10636b1..4bcf146 100644
--- a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.transformed.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Foo01<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (Null) →* void;
-typedef Foo02<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((Null) →* void) →* void;
-typedef Foo03<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((Null) →* void) →* void) →* void;
-typedef Foo04<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((Null) →* void) →* void) →* void) →* void;
-typedef Foo05<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((Null) →* void) →* void) →* void) →* void) →* void;
-typedef Foo06<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((Null) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo07<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo08<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo09<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo10<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo11<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo12<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo13<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo14<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo15<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo16<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo17<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo18<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo19<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
-typedef Foo20<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo01<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (Null) → void;
+typedef Foo02<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((Null) → void) → void;
+typedef Foo03<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((Null) → void) → void) → void;
+typedef Foo04<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((Null) → void) → void) → void) → void;
+typedef Foo05<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((Null) → void) → void) → void) → void) → void;
+typedef Foo06<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((Null) → void) → void) → void) → void) → void) → void;
+typedef Foo07<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((Null) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo08<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo09<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo10<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo11<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo12<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo13<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo14<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo15<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo16<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo17<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo18<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo19<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = (((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
+typedef Foo20<unrelated X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic, unrelated Z extends core::Object? = dynamic> = ((((((((((((((((((((Null) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
index ce6b7bb..59758e9 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class3 = Super with Mixin;
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class4 = Super with Mixin;
 //                ^^^^^
 //
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
index ce6b7bb..59758e9 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class3 = Super with Mixin;
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class4 = Super with Mixin;
 //                ^^^^^
 //
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
index 614ee32..f9bd2c2 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class3 = Super with Mixin;
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class4 = Super with Mixin;
 //                ^^^^^
 //
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
index 7f71bca..f8d864b 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
@@ -2,23 +2,23 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:8:1: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class1 {}
-//       ^^^^^
+// ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:9:10: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class2 {}
-//                ^^^^^
+//          ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // macro class Class3 = Super with Mixin;
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the experimental 'macros' language feature to be enabled.
+// Try passing the '--enable-experiment=macros' command line option.
 // abstract macro class Class4 = Super with Mixin;
 //                ^^^^^
 //
diff --git a/pkg/front_end/testcases/general/magic_const.dart b/pkg/front_end/testcases/general/magic_const.dart
index a409685..276245e 100644
--- a/pkg/front_end/testcases/general/magic_const.dart
+++ b/pkg/front_end/testcases/general/magic_const.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 /// Test that we produce a compile-time error when magic constness would
 /// otherwise apply.
 // TODO(ahe): Update this test when we implement magic constness correctly.
diff --git a/pkg/front_end/testcases/general/magic_const.dart.textual_outline.expect b/pkg/front_end/testcases/general/magic_const.dart.textual_outline.expect
index 039d732..63982d2 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Constant {
   const Constant();
 }
diff --git a/pkg/front_end/testcases/general/magic_const.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/magic_const.dart.textual_outline_modelled.expect
index cb84be0..98f38df 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Constant {
   const Constant();
 }
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.expect
index 60dcd8b..4746b81 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,34 +30,14 @@
 import "dart:core" as core;
 
 class Constant extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Constant*
+  const constructor •() → self::Constant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotConstant extends core::Object {
-  synthetic constructor •() → self::NotConstant*
+  synthetic constructor •() → self::NotConstant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect
index 60dcd8b..4746b81 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,34 +30,14 @@
 import "dart:core" as core;
 
 class Constant extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Constant*
+  const constructor •() → self::Constant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotConstant extends core::Object {
-  synthetic constructor •() → self::NotConstant*
+  synthetic constructor •() → self::NotConstant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
index 9cad368..758656e 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Constant extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Constant*
+  const constructor •() → self::Constant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotConstant extends core::Object {
-  synthetic constructor •() → self::NotConstant*
+  synthetic constructor •() → self::NotConstant
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo({dynamic a, dynamic b, dynamic c}) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
index e6298bf..bb758cd 100644
--- a/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,34 +30,14 @@
 import "dart:core" as core;
 
 class Constant extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Constant*
+  const constructor •() → self::Constant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NotConstant extends core::Object {
-  synthetic constructor •() → self::NotConstant*
+  synthetic constructor •() → self::NotConstant
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/main_declaration.dart b/pkg/front_end/testcases/general/main_declaration.dart
index 8ec5e43..2a6b05a 100644
--- a/pkg/front_end/testcases/general/main_declaration.dart
+++ b/pkg/front_end/testcases/general/main_declaration.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 import 'main_declaration_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/main_declaration_lib.dart b/pkg/front_end/testcases/general/main_declaration_lib.dart
index cb3971a..5edc834 100644
--- a/pkg/front_end/testcases/general/main_declaration_lib.dart
+++ b/pkg/front_end/testcases/general/main_declaration_lib.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 // This would be an invalid main declaration in a null safe library.
 main(String args) {}
diff --git a/pkg/front_end/testcases/general/many_errors.dart b/pkg/front_end/testcases/general/many_errors.dart
index 27ac04a..8e24483 100644
--- a/pkg/front_end/testcases/general/many_errors.dart
+++ b/pkg/front_end/testcases/general/many_errors.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 class A {
   final x = null;
 
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
index 48ce15f..3bb36fb 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.expect
@@ -2,49 +2,49 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:10:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const A.named1() sync* {}
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:1: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:1: Error: An external or native method can't have a body.
 // external foo(String x) {
 // ^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: New expression is not a constant expression.
+// pkg/front_end/testcases/general/many_errors.dart:12:26: Error: New expression is not a constant expression.
 //   const A.named2() : x = new Object();
 //                          ^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: 'x' is a final instance variable that was initialized at the declaration.
 //   const A.named2() : x = new Object();
 //                        ^
-// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
+// pkg/front_end/testcases/general/many_errors.dart:8:9: Context: 'x' was initialized here.
 //   final x = null;
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const A.named2() : x = new Object();
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
 //   const A.named1() sync* {}
 //                          ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 // external foo(String x) {
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   const AbstractClass.id();
 //         ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const AbstractClass.id();
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+// pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
 //  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
 //   (new C()?.b ??= new B()).b;
@@ -56,11 +56,11 @@
 class A extends core::Object /*hasConstConstructor*/  {
   final field dynamic x = null;
   constructor named1() → self::A*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
   const A.named1() sync* {}
                          ^" {}
   const constructor named2() → self::A*
-    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const A.named2() : x = new Object();
                        ^", super core::Object::•()
@@ -123,7 +123,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 external static method foo(core::String* x) → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 external foo(String x) {
                        ^";
   {
@@ -131,11 +131,11 @@
   }
 }
 static method m() → dynamic {
-  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const AbstractClass.id();
         ^";
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
   (new C()?.b ??= new B()).b;
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect
index 48ce15f..3bb36fb 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect
@@ -2,49 +2,49 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:10:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const A.named1() sync* {}
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:1: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:1: Error: An external or native method can't have a body.
 // external foo(String x) {
 // ^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: New expression is not a constant expression.
+// pkg/front_end/testcases/general/many_errors.dart:12:26: Error: New expression is not a constant expression.
 //   const A.named2() : x = new Object();
 //                          ^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: 'x' is a final instance variable that was initialized at the declaration.
 //   const A.named2() : x = new Object();
 //                        ^
-// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
+// pkg/front_end/testcases/general/many_errors.dart:8:9: Context: 'x' was initialized here.
 //   final x = null;
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const A.named2() : x = new Object();
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
 //   const A.named1() sync* {}
 //                          ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 // external foo(String x) {
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   const AbstractClass.id();
 //         ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const AbstractClass.id();
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+// pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
 //  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
 //   (new C()?.b ??= new B()).b;
@@ -56,11 +56,11 @@
 class A extends core::Object /*hasConstConstructor*/  {
   final field dynamic x = null;
   constructor named1() → self::A*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
   const A.named1() sync* {}
                          ^" {}
   const constructor named2() → self::A*
-    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const A.named2() : x = new Object();
                        ^", super core::Object::•()
@@ -123,7 +123,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 external static method foo(core::String* x) → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 external foo(String x) {
                        ^";
   {
@@ -131,11 +131,11 @@
   }
 }
 static method m() → dynamic {
-  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const AbstractClass.id();
         ^";
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
   (new C()?.b ??= new B()).b;
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.outline.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.outline.expect
index 623c813..627708a1 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.outline.expect
@@ -2,27 +2,27 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:10:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const A.named1() sync* {}
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:1: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:1: Error: An external or native method can't have a body.
 // external foo(String x) {
 // ^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: New expression is not a constant expression.
+// pkg/front_end/testcases/general/many_errors.dart:12:26: Error: New expression is not a constant expression.
 //   const A.named2() : x = new Object();
 //                          ^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: 'x' is a final instance variable that was initialized at the declaration.
 //   const A.named2() : x = new Object();
 //                        ^
-// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
+// pkg/front_end/testcases/general/many_errors.dart:8:9: Context: 'x' was initialized here.
 //   final x = null;
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const A.named2() : x = new Object();
 //                        ^
@@ -35,7 +35,7 @@
   constructor named1() → self::A*
     ;
   const constructor named2() → self::A*
-    : final dynamic #t1 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+    : final dynamic #t1 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const A.named2() : x = new Object();
                        ^", super core::Object::•()
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
index 48ce15f..3bb36fb 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.transformed.expect
@@ -2,49 +2,49 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:3: Error: A const constructor can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:10:3: Error: A const constructor can't have a body.
 // Try removing either the 'const' keyword or the body.
 //   const A.named1() sync* {}
 //   ^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:1: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:1: Error: An external or native method can't have a body.
 // external foo(String x) {
 // ^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: New expression is not a constant expression.
+// pkg/front_end/testcases/general/many_errors.dart:12:26: Error: New expression is not a constant expression.
 //   const A.named2() : x = new Object();
 //                          ^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: 'x' is a final instance variable that was initialized at the declaration.
 //   const A.named2() : x = new Object();
 //                        ^
-// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
+// pkg/front_end/testcases/general/many_errors.dart:8:9: Context: 'x' was initialized here.
 //   final x = null;
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const A.named2() : x = new Object();
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
 //   const A.named1() sync* {}
 //                          ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+// pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 // external foo(String x) {
 //                        ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
 //   const AbstractClass.id();
 //         ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 // Try using a constructor or factory that is 'const'.
 //   const AbstractClass.id();
 //         ^
 //
-// pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+// pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
 //  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
 //   (new C()?.b ??= new B()).b;
@@ -56,11 +56,11 @@
 class A extends core::Object /*hasConstConstructor*/  {
   final field dynamic x = null;
   constructor named1() → self::A*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
   const A.named1() sync* {}
                          ^" {}
   const constructor named2() → self::A*
-    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:12:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const A.named2() : x = new Object();
                        ^", super core::Object::•()
@@ -123,7 +123,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 external static method foo(core::String* x) → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:15:24: Error: An external or native method can't have a body.
 external foo(String x) {
                        ^";
   {
@@ -131,11 +131,11 @@
   }
 }
 static method m() → dynamic {
-  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:30:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
 Try using a constructor or factory that is 'const'.
   const AbstractClass.id();
         ^";
-  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:31:28: Error: The getter 'b' isn't defined for the class 'B'.
  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
   (new C()?.b ??= new B()).b;
diff --git a/pkg/front_end/testcases/general/many_errors2.dart b/pkg/front_end/testcases/general/many_errors2.dart
new file mode 100644
index 0000000..3408e7a
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart
@@ -0,0 +1,32 @@
+// 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.
+
+class A {
+  final x = null;
+
+  const A.named1() sync* {}
+
+  const A.named2() : x = new Object();
+}
+
+external foo(String x) {
+  return x.length;
+}
+
+class B {}
+
+class C {
+  late B b;
+}
+
+abstract class AbstractClass {
+  const AbstractClass.id();
+}
+
+m() {
+  const AbstractClass.id();
+  (new C().b ??= new B()).b;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/many_errors2.dart.textual_outline.expect b/pkg/front_end/testcases/general/many_errors2.dart.textual_outline.expect
new file mode 100644
index 0000000..555c12a
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class A {
+  final x = null;
+  const A.named1() sync* {}
+  const A.named2() : x = new Object();
+}
+external foo(String x) {}
+class B {}
+class C {
+  late
+  B b;
+}
+abstract class AbstractClass {
+  const AbstractClass.id();
+}
+m() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/many_errors2.dart.weak.expect b/pkg/front_end/testcases/general/many_errors2.dart.weak.expect
new file mode 100644
index 0000000..b462ffa
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart.weak.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A.named1() sync* {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:1: Error: An external or native method can't have a body.
+// external foo(String x) {
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:26: Error: New expression is not a constant expression.
+//   const A.named2() : x = new Object();
+//                          ^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+//   const A.named2() : x = new Object();
+//                        ^
+// pkg/front_end/testcases/general/many_errors2.dart:6:9: Context: 'x' was initialized here.
+//   final x = null;
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A.named2() : x = new Object();
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+//   const A.named1() sync* {}
+//                          ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+// external foo(String x) {
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   const AbstractClass.id();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const AbstractClass.id();
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:12: Warning: Operand of null-aware operation '??=' has type 'B' which excludes null.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+//   (new C().b ??= new B()).b;
+//            ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   (new C().b ??= new B()).b;
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x = null;
+  constructor named1() → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+  const A.named1() sync* {}
+                         ^" {}
+  const constructor named2() → self::A
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A.named2() : x = new Object();
+                       ^", super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  late field self::B b;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends core::Object /*hasConstConstructor*/  {
+  const constructor id() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+external static method foo(core::String x) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+external foo(String x) {
+                       ^";
+  {
+    return x.{core::String::length}{core::int};
+  }
+}
+static method m() → dynamic {
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const AbstractClass.id();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+ - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  (new C().b ??= new B()).b;
+                          ^" in (let final self::C #t3 = new self::C::•() in let final self::B #t4 = #t3.{self::C::b}{self::B} in #t4 == null ?{self::B} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/many_errors2.dart.weak.modular.expect b/pkg/front_end/testcases/general/many_errors2.dart.weak.modular.expect
new file mode 100644
index 0000000..b462ffa
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A.named1() sync* {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:1: Error: An external or native method can't have a body.
+// external foo(String x) {
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:26: Error: New expression is not a constant expression.
+//   const A.named2() : x = new Object();
+//                          ^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+//   const A.named2() : x = new Object();
+//                        ^
+// pkg/front_end/testcases/general/many_errors2.dart:6:9: Context: 'x' was initialized here.
+//   final x = null;
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A.named2() : x = new Object();
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+//   const A.named1() sync* {}
+//                          ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+// external foo(String x) {
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   const AbstractClass.id();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const AbstractClass.id();
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:12: Warning: Operand of null-aware operation '??=' has type 'B' which excludes null.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+//   (new C().b ??= new B()).b;
+//            ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   (new C().b ??= new B()).b;
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x = null;
+  constructor named1() → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+  const A.named1() sync* {}
+                         ^" {}
+  const constructor named2() → self::A
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A.named2() : x = new Object();
+                       ^", super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  late field self::B b;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends core::Object /*hasConstConstructor*/  {
+  const constructor id() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+external static method foo(core::String x) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+external foo(String x) {
+                       ^";
+  {
+    return x.{core::String::length}{core::int};
+  }
+}
+static method m() → dynamic {
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const AbstractClass.id();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+ - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  (new C().b ??= new B()).b;
+                          ^" in (let final self::C #t3 = new self::C::•() in let final self::B #t4 = #t3.{self::C::b}{self::B} in #t4 == null ?{self::B} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/many_errors2.dart.weak.outline.expect b/pkg/front_end/testcases/general/many_errors2.dart.weak.outline.expect
new file mode 100644
index 0000000..65c668f
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart.weak.outline.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A.named1() sync* {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:1: Error: An external or native method can't have a body.
+// external foo(String x) {
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:26: Error: New expression is not a constant expression.
+//   const A.named2() : x = new Object();
+//                          ^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+//   const A.named2() : x = new Object();
+//                        ^
+// pkg/front_end/testcases/general/many_errors2.dart:6:9: Context: 'x' was initialized here.
+//   final x = null;
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A.named2() : x = new Object();
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x = null;
+  constructor named1() → self::A
+    ;
+  const constructor named2() → self::A
+    : final dynamic #t1 = throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A.named2() : x = new Object();
+                       ^", super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends core::Object {
+  late field self::B b;
+  synthetic constructor •() → self::C
+    ;
+}
+abstract class AbstractClass extends core::Object /*hasConstConstructor*/  {
+  const constructor id() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+external static method foo(core::String x) → dynamic;
+static method m() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/many_errors2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/many_errors2.dart.weak.transformed.expect
new file mode 100644
index 0000000..b462ffa
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors2.dart.weak.transformed.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A.named1() sync* {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:1: Error: An external or native method can't have a body.
+// external foo(String x) {
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:26: Error: New expression is not a constant expression.
+//   const A.named2() : x = new Object();
+//                          ^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+//   const A.named2() : x = new Object();
+//                        ^
+// pkg/front_end/testcases/general/many_errors2.dart:6:9: Context: 'x' was initialized here.
+//   final x = null;
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A.named2() : x = new Object();
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+//   const A.named1() sync* {}
+//                          ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+// external foo(String x) {
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   const AbstractClass.id();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const AbstractClass.id();
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:12: Warning: Operand of null-aware operation '??=' has type 'B' which excludes null.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+//   (new C().b ??= new B()).b;
+//            ^
+//
+// pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   (new C().b ??= new B()).b;
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x = null;
+  constructor named1() → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+  const A.named1() sync* {}
+                         ^" {}
+  const constructor named2() → self::A
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A.named2() : x = new Object();
+                       ^", super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  late field self::B b;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends core::Object /*hasConstConstructor*/  {
+  const constructor id() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+external static method foo(core::String x) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:13:24: Error: An external or native method can't have a body.
+external foo(String x) {
+                       ^";
+  {
+    return x.{core::String::length}{core::int};
+  }
+}
+static method m() → dynamic {
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const AbstractClass.id();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/many_errors2.dart:29:27: Error: The getter 'b' isn't defined for the class 'B'.
+ - 'B' is from 'pkg/front_end/testcases/general/many_errors2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  (new C().b ??= new B()).b;
+                          ^" in (let final self::C #t3 = new self::C::•() in let final self::B #t4 = #t3.{self::C::b}{self::B} in #t4 == null ?{self::B} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart b/pkg/front_end/testcases/general/metadata_enum.dart
index d8f5441..e31a3ce 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart
+++ b/pkg/front_end/testcases/general/metadata_enum.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const a = null;
 
 @a
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
index fcf0e3c..4cd3089 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a = null;
 
 @a
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
index fcf0e3c..4cd3089 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a = null;
 
 @a
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
index cb38609..1732e11 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -1,29 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C11;
-  static const field self::E* E1 = #C4;
-  static const field self::E* E2 = #C7;
-  static const field self::E* E3 = #C10;
-  const constructor •(core::int* index, core::String* name) → self::E*
+  static const field core::List<self::E> values = #C11;
+  static const field self::E E1 = #C4;
+  static const field self::E E2 = #C7;
+  static const field self::E E3 = #C10;
+  const constructor •(core::int index, core::String name) → self::E
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
index cb38609..1732e11 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
@@ -1,29 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C11;
-  static const field self::E* E1 = #C4;
-  static const field self::E* E2 = #C7;
-  static const field self::E* E3 = #C10;
-  const constructor •(core::int* index, core::String* name) → self::E*
+  static const field core::List<self::E> values = #C11;
+  static const field self::E E1 = #C4;
+  static const field self::E E2 = #C7;
+  static const field self::E E3 = #C10;
+  const constructor •(core::int index, core::String name) → self::E
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
index 09a1c26..8cd295c 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
@@ -1,29 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @self::a
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = const <self::E*>[self::E::E1, self::E::E2, self::E::E3];
-  static const field self::E* E1 = const self::E::•(0, "E1");
-  static const field self::E* E2 = const self::E::•(1, "E2");
-  static const field self::E* E3 = const self::E::•(2, "E3");
-  const constructor •(core::int* index, core::String* name) → self::E*
+  static const field core::List<self::E> values = const <self::E>[self::E::E1, self::E::E2, self::E::E3];
+  static const field self::E E1 = const self::E::•(0, "E1");
+  static const field self::E E2 = const self::E::•(1, "E2");
+  static const field self::E E3 = const self::E::•(2, "E3");
+  const constructor •(core::int index, core::String name) → self::E
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = null;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index cb38609..1732e11 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
@@ -1,29 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class E extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::E*>* values = #C11;
-  static const field self::E* E1 = #C4;
-  static const field self::E* E2 = #C7;
-  static const field self::E* E3 = #C10;
-  const constructor •(core::int* index, core::String* name) → self::E*
+  static const field core::List<self::E> values = #C11;
+  static const field self::E E1 = #C4;
+  static const field self::E E2 = #C7;
+  static const field self::E E3 = #C10;
+  const constructor •(core::int index, core::String name) → self::E
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  abstract member-signature get index() → core::int*; -> core::_Enum::index
-  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart
index bd1fa26..1861f85 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const a = null;
 
 @a
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline.expect
index aed1297..525a405 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a = null;
 @a
 class C = D with E;
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline_modelled.expect
index 10a58d2..8c1c5b9 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @a
 class C = D with E;
 
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.expect
index 02845a0..8acc1e5 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class C = self::D with self::E {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect
index 02845a0..8acc1e5 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class C = self::D with self::E {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.outline.expect
index 537845c..1a6c17a 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @self::a
 class C = self::D with self::E {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = null;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.transformed.expect
index 51c5bf3..8686f7a 100644
--- a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 class C extends self::D implements self::E /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static const field dynamic a = #C1;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart
index 60aebf5..4cd3ccd 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.6
+// @dart=2.9
 
 class A<X extends num> {
   void f<Y extends X>(Y y) {}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect
index 29b47f8..2f01f98 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline.expect
@@ -1,4 +1,4 @@
-// @dart = 2.6
+// @dart = 2.9
 class A<X extends num> {
   void f<Y extends X>(Y y) {}
 }
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect
index 29b47f8..2f01f98 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.textual_outline_modelled.expect
@@ -1,4 +1,4 @@
-// @dart = 2.6
+// @dart = 2.9
 class A<X extends num> {
   void f<Y extends X>(Y y) {}
 }
diff --git a/pkg/front_end/testcases/general/micro.dart b/pkg/front_end/testcases/general/micro.dart
index 483abd29..cfcb2fc 100644
--- a/pkg/front_end/testcases/general/micro.dart
+++ b/pkg/front_end/testcases/general/micro.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 staticMethod() {
   return "sdfg";
 }
diff --git a/pkg/front_end/testcases/general/micro.dart.textual_outline.expect b/pkg/front_end/testcases/general/micro.dart.textual_outline.expect
index 229392f..1c27a80 100644
--- a/pkg/front_end/testcases/general/micro.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/micro.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 staticMethod() {}
 
 class Foo {
diff --git a/pkg/front_end/testcases/general/micro.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/micro.dart.textual_outline_modelled.expect
index 87285db..0ec1840 100644
--- a/pkg/front_end/testcases/general/micro.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/micro.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Bar {
   ExternalValue externalInstanceMethod();
 }
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.expect b/pkg/front_end/testcases/general/micro.dart.weak.expect
index 8bd8f18..bcea300 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.expect
@@ -1,130 +1,60 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method instanceMethod() → dynamic {
     return 123;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ExternalValue extends core::Object {
-  synthetic constructor •() → self::ExternalValue*
+  synthetic constructor •() → self::ExternalValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method externalInstanceMethod() → self::ExternalValue*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Box*
+  synthetic constructor •() → self::Box
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FinalBox extends core::Object {
   final field dynamic finalField;
-  constructor •(dynamic finalField) → self::FinalBox*
+  constructor •(dynamic finalField) → self::FinalBox
     : self::FinalBox::finalField = finalField, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SubFinalBox extends self::FinalBox {
-  constructor •(dynamic value) → self::SubFinalBox*
+  constructor •(dynamic value) → self::SubFinalBox
     : super self::FinalBox::•(value)
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver1*
+  synthetic constructor •() → self::DynamicReceiver1
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class DynamicReceiver2 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver2*
+  synthetic constructor •() → self::DynamicReceiver2
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method staticMethod() → dynamic {
   return "sdfg";
 }
-external static method externalStatic() → core::bool*;
-external static method createBar() → self::Bar*;
+external static method externalStatic() → core::bool;
+external static method createBar() → self::Bar;
 static method stringArgument(dynamic x) → dynamic {}
 static method intArgument(dynamic x) → dynamic {}
 static method makeDynamicCall(dynamic receiver) → void {
@@ -132,20 +62,20 @@
 }
 static method main() → dynamic {
   dynamic x = self::staticMethod();
-  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
-  core::bool* z = self::externalStatic();
-  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() → dynamic};
+  core::bool z = self::externalStatic();
+  self::ExternalValue w = self::createBar().{self::Bar::externalInstanceMethod}(){() → self::ExternalValue};
   self::stringArgument("sdfg");
   self::intArgument(42);
-  self::Box* box = new self::Box::•();
+  self::Box box = new self::Box::•();
   box.{self::Box::field} = "sdfg";
   dynamic a = box.{self::Box::field}{dynamic};
-  self::FinalBox* finalBox = new self::FinalBox::•("dfg");
+  self::FinalBox finalBox = new self::FinalBox::•("dfg");
   dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
-  self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
+  self::SubFinalBox subBox = new self::SubFinalBox::•("dfg");
   dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
   self::makeDynamicCall(new self::DynamicReceiver1::•());
   self::makeDynamicCall(new self::DynamicReceiver2::•());
-  core::List<core::String*>* list = <core::String*>["string"];
-  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
+  core::List<core::String> list = <core::String>["string"];
+  core::String d = list.{core::List::[]}(0){(core::int) → core::String};
 }
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.modular.expect b/pkg/front_end/testcases/general/micro.dart.weak.modular.expect
index 8bd8f18..bcea300 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.modular.expect
@@ -1,130 +1,60 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method instanceMethod() → dynamic {
     return 123;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ExternalValue extends core::Object {
-  synthetic constructor •() → self::ExternalValue*
+  synthetic constructor •() → self::ExternalValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method externalInstanceMethod() → self::ExternalValue*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Box*
+  synthetic constructor •() → self::Box
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FinalBox extends core::Object {
   final field dynamic finalField;
-  constructor •(dynamic finalField) → self::FinalBox*
+  constructor •(dynamic finalField) → self::FinalBox
     : self::FinalBox::finalField = finalField, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SubFinalBox extends self::FinalBox {
-  constructor •(dynamic value) → self::SubFinalBox*
+  constructor •(dynamic value) → self::SubFinalBox
     : super self::FinalBox::•(value)
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver1*
+  synthetic constructor •() → self::DynamicReceiver1
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class DynamicReceiver2 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver2*
+  synthetic constructor •() → self::DynamicReceiver2
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method staticMethod() → dynamic {
   return "sdfg";
 }
-external static method externalStatic() → core::bool*;
-external static method createBar() → self::Bar*;
+external static method externalStatic() → core::bool;
+external static method createBar() → self::Bar;
 static method stringArgument(dynamic x) → dynamic {}
 static method intArgument(dynamic x) → dynamic {}
 static method makeDynamicCall(dynamic receiver) → void {
@@ -132,20 +62,20 @@
 }
 static method main() → dynamic {
   dynamic x = self::staticMethod();
-  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
-  core::bool* z = self::externalStatic();
-  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() → dynamic};
+  core::bool z = self::externalStatic();
+  self::ExternalValue w = self::createBar().{self::Bar::externalInstanceMethod}(){() → self::ExternalValue};
   self::stringArgument("sdfg");
   self::intArgument(42);
-  self::Box* box = new self::Box::•();
+  self::Box box = new self::Box::•();
   box.{self::Box::field} = "sdfg";
   dynamic a = box.{self::Box::field}{dynamic};
-  self::FinalBox* finalBox = new self::FinalBox::•("dfg");
+  self::FinalBox finalBox = new self::FinalBox::•("dfg");
   dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
-  self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
+  self::SubFinalBox subBox = new self::SubFinalBox::•("dfg");
   dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
   self::makeDynamicCall(new self::DynamicReceiver1::•());
   self::makeDynamicCall(new self::DynamicReceiver2::•());
-  core::List<core::String*>* list = <core::String*>["string"];
-  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
+  core::List<core::String> list = <core::String>["string"];
+  core::String d = list.{core::List::[]}(0){(core::int) → core::String};
 }
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.outline.expect b/pkg/front_end/testcases/general/micro.dart.weak.outline.expect
index 2d4939b..1741ac7 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.outline.expect
@@ -1,122 +1,52 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
   method instanceMethod() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ExternalValue extends core::Object {
-  synthetic constructor •() → self::ExternalValue*
+  synthetic constructor •() → self::ExternalValue
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  abstract method externalInstanceMethod() → self::ExternalValue*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::Box*
+  synthetic constructor •() → self::Box
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FinalBox extends core::Object {
   final field dynamic finalField;
-  constructor •(dynamic finalField) → self::FinalBox*
+  constructor •(dynamic finalField) → self::FinalBox
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SubFinalBox extends self::FinalBox {
-  constructor •(dynamic value) → self::SubFinalBox*
+  constructor •(dynamic value) → self::SubFinalBox
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver1*
+  synthetic constructor •() → self::DynamicReceiver1
     ;
   method dynamicallyCalled(dynamic x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class DynamicReceiver2 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver2*
+  synthetic constructor •() → self::DynamicReceiver2
     ;
   method dynamicallyCalled(dynamic x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method staticMethod() → dynamic
   ;
-external static method externalStatic() → core::bool*;
-external static method createBar() → self::Bar*;
+external static method externalStatic() → core::bool;
+external static method createBar() → self::Bar;
 static method stringArgument(dynamic x) → dynamic
   ;
 static method intArgument(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect b/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
index 23f0c21..c2aee71 100644
--- a/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/micro.dart.weak.transformed.expect
@@ -1,130 +1,60 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method instanceMethod() → dynamic {
     return 123;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ExternalValue extends core::Object {
-  synthetic constructor •() → self::ExternalValue*
+  synthetic constructor •() → self::ExternalValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method externalInstanceMethod() → self::ExternalValue*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Box*
+  synthetic constructor •() → self::Box
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FinalBox extends core::Object {
   final field dynamic finalField;
-  constructor •(dynamic finalField) → self::FinalBox*
+  constructor •(dynamic finalField) → self::FinalBox
     : self::FinalBox::finalField = finalField, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class SubFinalBox extends self::FinalBox {
-  constructor •(dynamic value) → self::SubFinalBox*
+  constructor •(dynamic value) → self::SubFinalBox
     : super self::FinalBox::•(value)
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver1*
+  synthetic constructor •() → self::DynamicReceiver1
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class DynamicReceiver2 extends core::Object {
-  synthetic constructor •() → self::DynamicReceiver2*
+  synthetic constructor •() → self::DynamicReceiver2
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method staticMethod() → dynamic {
   return "sdfg";
 }
-external static method externalStatic() → core::bool*;
-external static method createBar() → self::Bar*;
+external static method externalStatic() → core::bool;
+external static method createBar() → self::Bar;
 static method stringArgument(dynamic x) → dynamic {}
 static method intArgument(dynamic x) → dynamic {}
 static method makeDynamicCall(dynamic receiver) → void {
@@ -132,20 +62,20 @@
 }
 static method main() → dynamic {
   dynamic x = self::staticMethod();
-  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
-  core::bool* z = self::externalStatic();
-  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() → dynamic};
+  core::bool z = self::externalStatic();
+  self::ExternalValue w = self::createBar().{self::Bar::externalInstanceMethod}(){() → self::ExternalValue};
   self::stringArgument("sdfg");
   self::intArgument(42);
-  self::Box* box = new self::Box::•();
+  self::Box box = new self::Box::•();
   box.{self::Box::field} = "sdfg";
   dynamic a = box.{self::Box::field}{dynamic};
-  self::FinalBox* finalBox = new self::FinalBox::•("dfg");
+  self::FinalBox finalBox = new self::FinalBox::•("dfg");
   dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
-  self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
+  self::SubFinalBox subBox = new self::SubFinalBox::•("dfg");
   dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
   self::makeDynamicCall(new self::DynamicReceiver1::•());
   self::makeDynamicCall(new self::DynamicReceiver2::•());
-  core::List<core::String*>* list = core::_GrowableList::_literal1<core::String*>("string");
-  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
+  core::List<core::String> list = core::_GrowableList::_literal1<core::String>("string");
+  core::String d = list.{core::List::[]}(0){(core::int) → core::String};
 }
diff --git a/pkg/front_end/testcases/general/minimum_int.dart b/pkg/front_end/testcases/general/minimum_int.dart
index fdba274..4b5a61c 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart
+++ b/pkg/front_end/testcases/general/minimum_int.dart
@@ -1,2 +1 @@
-// @dart=2.9
 main() => print(-9223372036854775808);
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.textual_outline.expect b/pkg/front_end/testcases/general/minimum_int.dart.textual_outline.expect
index 30ce5d2..4b5a61c 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() => print(-9223372036854775808);
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/minimum_int.dart.textual_outline_modelled.expect
index 30ce5d2..4b5a61c 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() => print(-9223372036854775808);
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
index 65f7c38..e9ffb8f 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
+  return core::print(-9223372036854775808.{core::int::unary-}(){() → core::int});
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect
index 65f7c38..e9ffb8f 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
+  return core::print(-9223372036854775808.{core::int::unary-}(){() → core::int});
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.outline.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
index 349fd7e..3fc6ee1 100644
--- a/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic
-  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
+  return core::print(-9223372036854775808.{core::int::unary-}(){() → core::int});
 
 
 Extra constant evaluation status:
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///minimum_int.dart:2:17 -> IntConstant(-9223372036854775808)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///minimum_int.dart:1:17 -> IntConstant(-9223372036854775808)
 Extra constant evaluation: evaluated: 2, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart b/pkg/front_end/testcases/general/missing_constructor.dart
index 16bb61f..190d24c 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart
+++ b/pkg/front_end/testcases/general/missing_constructor.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Super {
   Super._();
 }
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline.expect
index a70ca4f5..021aaf9 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Super {
   Super._();
 }
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline_modelled.expect
index ebcb150..44085f9 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bad {
   Bad.bar() : this.baz();
   Bad.foo() : this();
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.weak.expect b/pkg/front_end/testcases/general/missing_constructor.dart.weak.expect
index 12e92e5..73616ce 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,81 +30,51 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor _() → self::Super*
+  constructor _() → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
-  constructor •() → self::Sub*
+  constructor •() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
-  constructor foo() → self::Sub*
+  constructor foo() → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
-  constructor foo() → self::Bad*
+  constructor foo() → self::Bad
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
-  constructor bar() → self::Bad*
+  constructor bar() → self::Bad
     : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:15: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
               ^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _MixinApplication&Super&M = self::Super with self::M /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_MixinApplication&Super&M*
+  synthetic constructor _() → self::_MixinApplication&Super&M
     : super self::Super::_()
     ;
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
-  constructor •() → self::MixinApplication*
+  constructor •() → self::MixinApplication
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
-  constructor foo() → self::MixinApplication*
+  constructor foo() → self::MixinApplication
     : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect
index 12e92e5..73616ce 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,81 +30,51 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor _() → self::Super*
+  constructor _() → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
-  constructor •() → self::Sub*
+  constructor •() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
-  constructor foo() → self::Sub*
+  constructor foo() → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
-  constructor foo() → self::Bad*
+  constructor foo() → self::Bad
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
-  constructor bar() → self::Bad*
+  constructor bar() → self::Bad
     : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:15: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
               ^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _MixinApplication&Super&M = self::Super with self::M /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_MixinApplication&Super&M*
+  synthetic constructor _() → self::_MixinApplication&Super&M
     : super self::Super::_()
     ;
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
-  constructor •() → self::MixinApplication*
+  constructor •() → self::MixinApplication
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
-  constructor foo() → self::MixinApplication*
+  constructor foo() → self::MixinApplication
     : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/missing_constructor.dart.weak.outline.expect
index ec0437b..17112b2 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.weak.outline.expect
@@ -1,66 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor _() → self::Super*
+  constructor _() → self::Super
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
-  constructor •() → self::Sub*
+  constructor •() → self::Sub
     ;
-  constructor foo() → self::Sub*
+  constructor foo() → self::Sub
     ;
 }
 class Bad extends core::Object {
-  constructor foo() → self::Bad*
+  constructor foo() → self::Bad
     ;
-  constructor bar() → self::Bad*
+  constructor bar() → self::Bad
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _MixinApplication&Super&M = self::Super with self::M /*isAnonymousMixin*/  {
-  synthetic constructor _() → self::_MixinApplication&Super&M*
+  synthetic constructor _() → self::_MixinApplication&Super&M
     : super self::Super::_()
     ;
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
-  constructor •() → self::MixinApplication*
+  constructor •() → self::MixinApplication
     ;
-  constructor foo() → self::MixinApplication*
+  constructor foo() → self::MixinApplication
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/missing_constructor.dart.weak.transformed.expect
index 5aab9ad..9c91118 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,81 +30,51 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor _() → self::Super*
+  constructor _() → self::Super
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Super {
-  constructor •() → self::Sub*
+  constructor •() → self::Sub
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
-  constructor foo() → self::Sub*
+  constructor foo() → self::Sub
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
-  constructor foo() → self::Bad*
+  constructor foo() → self::Bad
     : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
-  constructor bar() → self::Bad*
+  constructor bar() → self::Bad
     : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:15: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
               ^^^^"
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _MixinApplication&Super&M extends self::Super implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor _() → self::_MixinApplication&Super&M*
+  synthetic constructor _() → self::_MixinApplication&Super&M
     : super self::Super::_()
     ;
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
-  constructor •() → self::MixinApplication*
+  constructor •() → self::MixinApplication
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
-  constructor foo() → self::MixinApplication*
+  constructor foo() → self::MixinApplication
     : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart b/pkg/front_end/testcases/general/missing_toplevel.dart
index bf3f72c..cde0887 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart
@@ -1,13 +1,13 @@
 // 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.
-// @dart=2.9
+
 class EmptyClass {}
 
 var emptyClass = new EmptyClass();
 
 class ClassWithProperty {
-  EmptyClass property;
+  EmptyClass property = new EmptyClass();
 }
 
 var classWithProperty = new ClassWithProperty();
@@ -19,7 +19,7 @@
 var classWithIndexSet = new ClassWithIndexSet();
 
 class ClassWithIndexGet {
-  int operator [](int index) => 42;
+  int? operator [](int index) => 42;
 }
 
 var classWithIndexGet = new ClassWithIndexGet();
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline.expect
index bb6e0a8..c12e1ea 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class EmptyClass {}
 
 var emptyClass = new EmptyClass();
 
 class ClassWithProperty {
-  EmptyClass property;
+  EmptyClass property = new EmptyClass();
 }
 
 var classWithProperty = new ClassWithProperty();
@@ -16,7 +15,7 @@
 var classWithIndexSet = new ClassWithIndexSet();
 
 class ClassWithIndexGet {
-  int operator [](int index) => 42;
+  int? operator [](int index) => 42;
 }
 
 var classWithIndexGet = new ClassWithIndexGet();
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline_modelled.expect
index 3541a60..4a2f886 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class ClassWithIndexGet {
-  int operator [](int index) => 42;
+  int? operator [](int index) => 42;
 }
 
 class ClassWithIndexSet {
@@ -8,7 +7,7 @@
 }
 
 class ClassWithProperty {
-  EmptyClass property;
+  EmptyClass property = new EmptyClass();
 }
 
 class EmptyClass {}
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
index e4cac82..740b003 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,94 +36,54 @@
 import "dart:core" as core;
 
 class EmptyClass extends core::Object {
-  synthetic constructor •() → self::EmptyClass*
+  synthetic constructor •() → self::EmptyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithProperty extends core::Object {
-  field self::EmptyClass* property = null;
-  synthetic constructor •() → self::ClassWithProperty*
+  field self::EmptyClass property = new self::EmptyClass::•();
+  synthetic constructor •() → self::ClassWithProperty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithIndexSet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexSet*
+  synthetic constructor •() → self::ClassWithIndexSet
     : super core::Object::•()
     ;
-  operator []=(core::int* index, core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, core::int value) → void {}
 }
 class ClassWithIndexGet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexGet*
+  synthetic constructor •() → self::ClassWithIndexGet
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::int*
+  operator [](core::int index) → core::int?
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::EmptyClass* emptyClass = new self::EmptyClass::•();
-static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
-static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
-static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
+static field self::EmptyClass emptyClass = new self::EmptyClass::•();
+static field self::ClassWithProperty classWithProperty = new self::ClassWithProperty::•();
+static field self::ClassWithIndexSet classWithIndexSet = new self::ClassWithIndexSet::•();
+static field self::ClassWithIndexGet classWithIndexGet = new self::ClassWithIndexGet::•();
+static field dynamic missingBinary = let final self::ClassWithProperty #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2) as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass}{<unresolved>}.+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} self::EmptyClass;
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet #t2 = self::classWithIndexSet in let final core::int #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int, core::int) → void} in #t5 : #t4;
+static field core::int missingIndexSet = let final self::ClassWithIndexGet #t7 = self::classWithIndexGet in let final core::int #t8 = 0 in let final core::int? #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int) → core::int?} in #t9 == null ?{core::int} let final core::int #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
-                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9{core::int};
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 var missingPropertyGet = emptyClass.property;
                                     ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
-static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
+static field core::int missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 var missingPropertySet = emptyClass.property = 42;
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect
index e4cac82..740b003 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,94 +36,54 @@
 import "dart:core" as core;
 
 class EmptyClass extends core::Object {
-  synthetic constructor •() → self::EmptyClass*
+  synthetic constructor •() → self::EmptyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithProperty extends core::Object {
-  field self::EmptyClass* property = null;
-  synthetic constructor •() → self::ClassWithProperty*
+  field self::EmptyClass property = new self::EmptyClass::•();
+  synthetic constructor •() → self::ClassWithProperty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithIndexSet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexSet*
+  synthetic constructor •() → self::ClassWithIndexSet
     : super core::Object::•()
     ;
-  operator []=(core::int* index, core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, core::int value) → void {}
 }
 class ClassWithIndexGet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexGet*
+  synthetic constructor •() → self::ClassWithIndexGet
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::int*
+  operator [](core::int index) → core::int?
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::EmptyClass* emptyClass = new self::EmptyClass::•();
-static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
-static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
-static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
+static field self::EmptyClass emptyClass = new self::EmptyClass::•();
+static field self::ClassWithProperty classWithProperty = new self::ClassWithProperty::•();
+static field self::ClassWithIndexSet classWithIndexSet = new self::ClassWithIndexSet::•();
+static field self::ClassWithIndexGet classWithIndexGet = new self::ClassWithIndexGet::•();
+static field dynamic missingBinary = let final self::ClassWithProperty #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2) as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass}{<unresolved>}.+(2) as{TypeError,ForDynamic,ForNonNullableByDefault} self::EmptyClass;
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet #t2 = self::classWithIndexSet in let final core::int #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int, core::int) → void} in #t5 : #t4;
+static field core::int missingIndexSet = let final self::ClassWithIndexGet #t7 = self::classWithIndexGet in let final core::int #t8 = 0 in let final core::int? #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int) → core::int?} in #t9 == null ?{core::int} let final core::int #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
-                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9{core::int};
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 var missingPropertyGet = emptyClass.property;
                                     ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
-static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
+static field core::int missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 var missingPropertySet = emptyClass.property = 42;
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.outline.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.outline.expect
index b92887e..da89361 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.outline.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class EmptyClass extends core::Object {
-  synthetic constructor •() → self::EmptyClass*
+  synthetic constructor •() → self::EmptyClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithProperty extends core::Object {
-  field self::EmptyClass* property;
-  synthetic constructor •() → self::ClassWithProperty*
+  field self::EmptyClass property;
+  synthetic constructor •() → self::ClassWithProperty
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithIndexSet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexSet*
+  synthetic constructor •() → self::ClassWithIndexSet
     ;
-  operator []=(core::int* index, core::int* value) → void
+  operator []=(core::int index, core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithIndexGet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexGet*
+  synthetic constructor •() → self::ClassWithIndexGet
     ;
-  operator [](core::int* index) → core::int*
+  operator [](core::int index) → core::int?
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::EmptyClass* emptyClass;
-static field self::ClassWithProperty* classWithProperty;
-static field self::ClassWithIndexSet* classWithIndexSet;
-static field self::ClassWithIndexGet* classWithIndexGet;
+static field self::EmptyClass emptyClass;
+static field self::ClassWithProperty classWithProperty;
+static field self::ClassWithIndexSet classWithIndexSet;
+static field self::ClassWithIndexGet classWithIndexGet;
 static field dynamic missingBinary;
 static field dynamic missingIndexGet;
-static field core::int* missingIndexSet;
+static field core::int missingIndexSet;
 static field dynamic missingPropertyGet;
-static field core::int* missingPropertySet;
+static field core::int missingPropertySet;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
index 92a8aa8..c5135f9 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,94 +36,54 @@
 import "dart:core" as core;
 
 class EmptyClass extends core::Object {
-  synthetic constructor •() → self::EmptyClass*
+  synthetic constructor •() → self::EmptyClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithProperty extends core::Object {
-  field self::EmptyClass* property = null;
-  synthetic constructor •() → self::ClassWithProperty*
+  field self::EmptyClass property = new self::EmptyClass::•();
+  synthetic constructor •() → self::ClassWithProperty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassWithIndexSet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexSet*
+  synthetic constructor •() → self::ClassWithIndexSet
     : super core::Object::•()
     ;
-  operator []=(core::int* index, core::int* value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  operator []=(core::int index, core::int value) → void {}
 }
 class ClassWithIndexGet extends core::Object {
-  synthetic constructor •() → self::ClassWithIndexGet*
+  synthetic constructor •() → self::ClassWithIndexGet
     : super core::Object::•()
     ;
-  operator [](core::int* index) → core::int*
+  operator [](core::int index) → core::int?
     return 42;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field self::EmptyClass* emptyClass = new self::EmptyClass::•();
-static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
-static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
-static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
+static field self::EmptyClass emptyClass = new self::EmptyClass::•();
+static field self::ClassWithProperty classWithProperty = new self::ClassWithProperty::•();
+static field self::ClassWithIndexSet classWithIndexSet = new self::ClassWithIndexSet::•();
+static field self::ClassWithIndexGet classWithIndexGet = new self::ClassWithIndexGet::•();
+static field dynamic missingBinary = let final self::ClassWithProperty #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
-                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2);
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final invalid-type #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass}{<unresolved>}.+(2);
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet #t2 = self::classWithIndexSet in let final core::int #t3 = 0 in let final invalid-type #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
-                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int, core::int) → void} in #t5 : #t4;
+static field core::int missingIndexSet = let final self::ClassWithIndexGet #t7 = self::classWithIndexGet in let final core::int #t8 = 0 in let final core::int? #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int) → core::int?} in #t9 == null ?{core::int} let final core::int #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
-                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9{core::int};
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 var missingPropertyGet = emptyClass.property;
                                     ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
-static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
+static field core::int missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 var missingPropertySet = emptyClass.property = 42;
@@ -137,4 +97,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///missing_toplevel.dart:28:48 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///missing_toplevel.dart:29:41 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///missing_toplevel.dart:29:48 -> IntConstant(2)
-Extra constant evaluation: evaluated: 37, effectively constant: 5
+Extra constant evaluation: evaluated: 38, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/mixin.dart b/pkg/front_end/testcases/general/mixin.dart
index 4d44070..833d32a 100644
--- a/pkg/front_end/testcases/general/mixin.dart
+++ b/pkg/front_end/testcases/general/mixin.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class B extends Object with M1, M2 {
   B(value);
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin.dart.textual_outline.expect
index 6403bda..74bf0c0 100644
--- a/pkg/front_end/testcases/general/mixin.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B extends Object with M1, M2 {
   B(value);
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin.dart.textual_outline_modelled.expect
index 2202aec..4fd20a5 100644
--- a/pkg/front_end/testcases/general/mixin.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class G1<T> {
   m() => print(T);
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.expect b/pkg/front_end/testcases/general/mixin.dart.weak.expect
index 9ec9ad2d..1c3e0d3 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.expect
@@ -1,142 +1,82 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _B&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1*
+  const synthetic constructor •() → self::_B&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1&M2*
+  const synthetic constructor •() → self::_B&Object&M1&M2
     : super self::_B&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
-  constructor •(dynamic value) → self::B*
+  constructor •(dynamic value) → self::B
     : super self::_B&Object&M1&M2::•()
     ;
 }
 abstract class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M2");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
-  constructor •(dynamic value) → self::C*
+  constructor •(dynamic value) → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
-abstract class G1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G1<self::G1::T*>*
+abstract class G1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G1<self::G1::T%>
     : super core::Object::•()
     ;
   method m() → dynamic
-    return core::print(self::G1::T*);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return core::print(self::G1::T%);
 }
-abstract class _D&Object&G1<S extends core::Object* = dynamic> = core::Object with self::G1<self::_D&Object&G1::S*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
+abstract class _D&Object&G1<S extends core::Object? = dynamic> = core::Object with self::G1<self::_D&Object&G1::S%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S%>
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::G1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::_D&Object&G1<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::_D&Object&G1::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
-  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
-  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() → dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() → dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::int>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::List<core::int>>().{self::_D&Object&G1::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect
index 9ec9ad2d..1c3e0d3 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect
@@ -1,142 +1,82 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _B&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1*
+  const synthetic constructor •() → self::_B&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1&M2*
+  const synthetic constructor •() → self::_B&Object&M1&M2
     : super self::_B&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
-  constructor •(dynamic value) → self::B*
+  constructor •(dynamic value) → self::B
     : super self::_B&Object&M1&M2::•()
     ;
 }
 abstract class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M2");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
-  constructor •(dynamic value) → self::C*
+  constructor •(dynamic value) → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
-abstract class G1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G1<self::G1::T*>*
+abstract class G1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G1<self::G1::T%>
     : super core::Object::•()
     ;
   method m() → dynamic
-    return core::print(self::G1::T*);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return core::print(self::G1::T%);
 }
-abstract class _D&Object&G1<S extends core::Object* = dynamic> = core::Object with self::G1<self::_D&Object&G1::S*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
+abstract class _D&Object&G1<S extends core::Object? = dynamic> = core::Object with self::G1<self::_D&Object&G1::S%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S%>
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::G1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::_D&Object&G1<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::_D&Object&G1::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
-  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
-  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() → dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() → dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::int>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::List<core::int>>().{self::_D&Object&G1::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin.dart.weak.outline.expect
index e09c2b0..4259774 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.outline.expect
@@ -1,130 +1,70 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _B&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1*
+  const synthetic constructor •() → self::_B&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1&M2*
+  const synthetic constructor •() → self::_B&Object&M1&M2
     : super self::_B&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class B extends self::_B&Object&M1&M2 {
-  constructor •(dynamic value) → self::B*
+  constructor •(dynamic value) → self::B
     ;
 }
 abstract class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     ;
   method m() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     ;
   method m() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::M2::m}();
 }
 class C extends self::_C&Object&M1&M2 {
-  constructor •(dynamic value) → self::C*
+  constructor •(dynamic value) → self::C
     ;
 }
-abstract class G1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G1<self::G1::T*>*
+abstract class G1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G1<self::G1::T%>
     ;
   method m() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class _D&Object&G1<S extends core::Object* = dynamic> = core::Object with self::G1<self::_D&Object&G1::S*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
+abstract class _D&Object&G1<S extends core::Object? = dynamic> = core::Object with self::G1<self::_D&Object&G1::S%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S%>
     : super core::Object::•()
     ;
   mixin-super-stub method m() → dynamic
     return super.{self::G1::m}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::_D&Object&G1<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
index fe35f14..8541d2b 100644
--- a/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.transformed.expect
@@ -1,142 +1,82 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _B&Object&M1 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1*
+  const synthetic constructor •() → self::_B&Object&M1
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&Object&M1&M2 extends self::_B&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&M1&M2*
+  const synthetic constructor •() → self::_B&Object&M1&M2
     : super self::_B&Object&M1::•()
     ;
   method m() → dynamic
     return core::print("M2");
 }
 class B extends self::_B&Object&M1&M2 {
-  constructor •(dynamic value) → self::B*
+  constructor •(dynamic value) → self::B
     : super self::_B&Object&M1&M2::•()
     ;
 }
 abstract class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M2");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
   method m() → dynamic
     return core::print("M2");
 }
 class C extends self::_C&Object&M1&M2 {
-  constructor •(dynamic value) → self::C*
+  constructor •(dynamic value) → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
-abstract class G1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G1<self::G1::T*>*
+abstract class G1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G1<self::G1::T%>
     : super core::Object::•()
     ;
   method m() → dynamic
-    return core::print(self::G1::T*);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return core::print(self::G1::T%);
 }
-abstract class _D&Object&G1<S extends core::Object* = dynamic> extends core::Object implements self::G1<self::_D&Object&G1::S*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
+abstract class _D&Object&G1<S extends core::Object? = dynamic> extends core::Object implements self::G1<self::_D&Object&G1::S%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S%>
     : super core::Object::•()
     ;
   method m() → dynamic
-    return core::print(self::_D&Object&G1::S*);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return core::print(self::_D&Object&G1::S%);
 }
-class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::_D&Object&G1<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::_D&Object&G1::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
-  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
-  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
-  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() → dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() → dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::int>().{self::_D&Object&G1::m}(){() → dynamic};
+  new self::D::•<core::List<core::int>>().{self::_D&Object&G1::m}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart
index 838b2ea..ae79ed2 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Mixin {}
 
 class Super {
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline.expect
index 1304dc7..ee10660 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Mixin {}
 
 class Super {
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline_modelled.expect
index 9e5b6b3..44e6390 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class = Super with Mixin;
 
 class Mixin {}
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
index c6579d8..0457c7e 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,38 +10,18 @@
 import "dart:core" as core;
 
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Super extends core::Object {
-  field core::int* field = 42;
-  constructor •(core::int* field) → self::Super*
+  field core::int field = 42;
+  constructor •(core::int field) → self::Super
     : self::Super::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class = self::Super with self::Mixin {
-  synthetic constructor •(core::int* field) → self::Class*
+  synthetic constructor •(core::int field) → self::Class
     : super self::Super::•(field)
     ;
 }
@@ -51,5 +31,5 @@
 static method error() → dynamic {
   new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   new Class('');
-            ^" in "" as{TypeError} core::int*);
+            ^" in "" as{TypeError,ForNonNullableByDefault} core::int);
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect
index c6579d8..0457c7e 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,38 +10,18 @@
 import "dart:core" as core;
 
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Super extends core::Object {
-  field core::int* field = 42;
-  constructor •(core::int* field) → self::Super*
+  field core::int field = 42;
+  constructor •(core::int field) → self::Super
     : self::Super::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class = self::Super with self::Mixin {
-  synthetic constructor •(core::int* field) → self::Class*
+  synthetic constructor •(core::int field) → self::Class
     : super self::Super::•(field)
     ;
 }
@@ -51,5 +31,5 @@
 static method error() → dynamic {
   new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   new Class('');
-            ^" in "" as{TypeError} core::int*);
+            ^" in "" as{TypeError,ForNonNullableByDefault} core::int);
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.outline.expect
index 1a998b0..190974c 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Super extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Super*
+  field core::int field;
+  constructor •(core::int field) → self::Super
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class = self::Super with self::Mixin {
-  synthetic constructor •(core::int* field) → self::Class*
+  synthetic constructor •(core::int field) → self::Class
     : super self::Super::•(field)
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
index f060c5f..a5d18f6 100644
--- a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,38 +10,18 @@
 import "dart:core" as core;
 
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Super extends core::Object {
-  field core::int* field = 42;
-  constructor •(core::int* field) → self::Super*
+  field core::int field = 42;
+  constructor •(core::int field) → self::Super
     : self::Super::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
-  synthetic constructor •(core::int* field) → self::Class*
+  synthetic constructor •(core::int field) → self::Class
     : super self::Super::•(field)
     ;
 }
@@ -51,5 +31,5 @@
 static method error() → dynamic {
   new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
   new Class('');
-            ^" in "" as{TypeError} core::int*);
+            ^" in "" as{TypeError,ForNonNullableByDefault} core::int);
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_lub.dart b/pkg/front_end/testcases/general/mixin_application_lub.dart
index 52ff709..e3c7ef8 100644
--- a/pkg/front_end/testcases/general/mixin_application_lub.dart
+++ b/pkg/front_end/testcases/general/mixin_application_lub.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 class Diagnosticable {}
 
 // Originally the existence of this (unused) class (which has an anonymous mixin
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart b/pkg/front_end/testcases/general/mixin_application_lub_2.dart
new file mode 100644
index 0000000..a8fb6a5
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart
@@ -0,0 +1,31 @@
+// 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.
+
+class Diagnosticable {}
+
+// Originally the existence of this (unused) class (which has an anonymous mixin
+// that matches that of `State<T>`) caused an error in the VM's mixin
+// deduplication code. This was due to the inferred type for `var x = a ?? b`
+// was the anonymous mixin application that got removed during deduplication.
+//
+// See https://github.com/flutter/flutter/issues/55345
+class SomeClass with Diagnosticable {}
+
+class State<T> with Diagnosticable {}
+
+class StateA extends State {}
+
+class StateB extends State<int> {}
+
+StateA? a = StateA();
+StateB b = StateB();
+
+foo<T>(T x) {
+  print(T);
+}
+
+main() {
+  var x = a ?? b;
+  foo(x);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline.expect
new file mode 100644
index 0000000..098847f
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class Diagnosticable {}
+
+class SomeClass with Diagnosticable {}
+
+class State<T> with Diagnosticable {}
+
+class StateA extends State {}
+
+class StateB extends State<int> {}
+
+StateA? a = StateA();
+StateB b = StateB();
+foo<T>(T x) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..af624a8
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+StateA? a = StateA();
+StateB b = StateB();
+
+class Diagnosticable {}
+
+class SomeClass with Diagnosticable {}
+
+class State<T> with Diagnosticable {}
+
+class StateA extends State {}
+
+class StateB extends State<int> {}
+
+foo<T>(T x) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.expect
new file mode 100644
index 0000000..2ded7f4
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Diagnosticable extends core::Object {
+  synthetic constructor •() → self::Diagnosticable
+    : super core::Object::•()
+    ;
+}
+abstract class _SomeClass&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_SomeClass&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class SomeClass extends self::_SomeClass&Object&Diagnosticable {
+  synthetic constructor •() → self::SomeClass
+    : super self::_SomeClass&Object&Diagnosticable::•()
+    ;
+}
+abstract class _State&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_State&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class State<T extends core::Object? = dynamic> extends self::_State&Object&Diagnosticable {
+  synthetic constructor •() → self::State<self::State::T%>
+    : super self::_State&Object&Diagnosticable::•()
+    ;
+}
+class StateA extends self::State<dynamic> {
+  synthetic constructor •() → self::StateA
+    : super self::State::•()
+    ;
+}
+class StateB extends self::State<core::int> {
+  synthetic constructor •() → self::StateB
+    : super self::State::•()
+    ;
+}
+static field self::StateA? a = new self::StateA::•();
+static field self::StateB b = new self::StateB::•();
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → dynamic {
+  core::print(self::foo::T%);
+}
+static method main() → dynamic {
+  self::Diagnosticable x = let final self::StateA? #t1 = self::a in #t1 == null ?{self::Diagnosticable} self::b : #t1{self::StateA};
+  self::foo<self::Diagnosticable>(x);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.modular.expect
new file mode 100644
index 0000000..2ded7f4
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Diagnosticable extends core::Object {
+  synthetic constructor •() → self::Diagnosticable
+    : super core::Object::•()
+    ;
+}
+abstract class _SomeClass&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_SomeClass&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class SomeClass extends self::_SomeClass&Object&Diagnosticable {
+  synthetic constructor •() → self::SomeClass
+    : super self::_SomeClass&Object&Diagnosticable::•()
+    ;
+}
+abstract class _State&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_State&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class State<T extends core::Object? = dynamic> extends self::_State&Object&Diagnosticable {
+  synthetic constructor •() → self::State<self::State::T%>
+    : super self::_State&Object&Diagnosticable::•()
+    ;
+}
+class StateA extends self::State<dynamic> {
+  synthetic constructor •() → self::StateA
+    : super self::State::•()
+    ;
+}
+class StateB extends self::State<core::int> {
+  synthetic constructor •() → self::StateB
+    : super self::State::•()
+    ;
+}
+static field self::StateA? a = new self::StateA::•();
+static field self::StateB b = new self::StateB::•();
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → dynamic {
+  core::print(self::foo::T%);
+}
+static method main() → dynamic {
+  self::Diagnosticable x = let final self::StateA? #t1 = self::a in #t1 == null ?{self::Diagnosticable} self::b : #t1{self::StateA};
+  self::foo<self::Diagnosticable>(x);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.outline.expect
new file mode 100644
index 0000000..86ec65e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Diagnosticable extends core::Object {
+  synthetic constructor •() → self::Diagnosticable
+    ;
+}
+abstract class _SomeClass&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_SomeClass&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class SomeClass extends self::_SomeClass&Object&Diagnosticable {
+  synthetic constructor •() → self::SomeClass
+    ;
+}
+abstract class _State&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_State&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class State<T extends core::Object? = dynamic> extends self::_State&Object&Diagnosticable {
+  synthetic constructor •() → self::State<self::State::T%>
+    ;
+}
+class StateA extends self::State<dynamic> {
+  synthetic constructor •() → self::StateA
+    ;
+}
+class StateB extends self::State<core::int> {
+  synthetic constructor •() → self::StateB
+    ;
+}
+static field self::StateA? a;
+static field self::StateB b;
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..30ac36f
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub_2.dart.weak.transformed.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Diagnosticable extends core::Object {
+  synthetic constructor •() → self::Diagnosticable
+    : super core::Object::•()
+    ;
+}
+abstract class _SomeClass&Object&Diagnosticable extends core::Object implements self::Diagnosticable /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_SomeClass&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class SomeClass extends self::_SomeClass&Object&Diagnosticable {
+  synthetic constructor •() → self::SomeClass
+    : super self::_SomeClass&Object&Diagnosticable::•()
+    ;
+}
+abstract class _State&Object&Diagnosticable extends core::Object implements self::Diagnosticable /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_State&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+}
+class State<T extends core::Object? = dynamic> extends self::_State&Object&Diagnosticable {
+  synthetic constructor •() → self::State<self::State::T%>
+    : super self::_State&Object&Diagnosticable::•()
+    ;
+}
+class StateA extends self::State<dynamic> {
+  synthetic constructor •() → self::StateA
+    : super self::State::•()
+    ;
+}
+class StateB extends self::State<core::int> {
+  synthetic constructor •() → self::StateB
+    : super self::State::•()
+    ;
+}
+static field self::StateA? a = new self::StateA::•();
+static field self::StateB b = new self::StateB::•();
+static method foo<T extends core::Object? = dynamic>(self::foo::T% x) → dynamic {
+  core::print(self::foo::T%);
+}
+static method main() → dynamic {
+  self::Diagnosticable x = let final self::StateA? #t1 = self::a in #t1 == null ?{self::Diagnosticable} self::b : #t1{self::StateA};
+  self::foo<self::Diagnosticable>(x);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart b/pkg/front_end/testcases/general/mixin_application_override.dart
index adfdcab..30b4f19 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Test error messages for invalid override in a mixin application.
 
 class S {
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline.expect
index 0e11e73..ee4aef8 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class S {
   foo([x]) {}
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline_modelled.expect
index 7875500..6187ae6 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A0 = S with M;
 class A0X = S with M, MX;
 class A1 = S with M1, M;
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.expect
index 56cdffa..7d32765 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -126,283 +126,233 @@
 import "dart:core" as core;
 
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
   method foo([dynamic x = #C1]) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MX extends core::Object {
-  synthetic constructor •() → self::MX*
+  synthetic constructor •() → self::MX
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A0 = self::S with self::M {
-  synthetic constructor •() → self::A0*
+  synthetic constructor •() → self::A0
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1&S&M1*
+  synthetic constructor •() → self::_A1&S&M1
     : super self::S::•()
     ;
 }
 class A1 = self::_A1&S&M1 with self::M {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1*
+  synthetic constructor •() → self::_A2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1&M2*
+  synthetic constructor •() → self::_A2&S&M1&M2
     : super self::_A2&S&M1::•()
     ;
 }
 class A2 = self::_A2&S&M1&M2 with self::M {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A0X&S&M*
+  synthetic constructor •() → self::_A0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A0X = self::_A0X&S&M with self::MX {
-  synthetic constructor •() → self::A0X*
+  synthetic constructor •() → self::A0X
     : super self::_A0X&S&M::•()
     ;
 }
 abstract class _A1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1*
+  synthetic constructor •() → self::_A1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1&M*
+  synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
-  synthetic constructor •() → self::A1X*
+  synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
 }
 abstract class _A2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1*
+  synthetic constructor •() → self::_A2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2*
+  synthetic constructor •() → self::_A2X&S&M1&M2
     : super self::_A2X&S&M1::•()
     ;
 }
 abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2&M*
+  synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
-  synthetic constructor •() → self::A2X*
+  synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
 }
 abstract class _B0&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0&S&M*
+  synthetic constructor •() → self::_B0&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B0 extends self::_B0&S&M {
-  synthetic constructor •() → self::B0*
+  synthetic constructor •() → self::B0
     : super self::_B0&S&M::•()
     ;
 }
 abstract class _B1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1*
+  synthetic constructor •() → self::_B1&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1&M*
+  synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B1 extends self::_B1&S&M1&M {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super self::_B1&S&M1&M::•()
     ;
 }
 abstract class _B2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1*
+  synthetic constructor •() → self::_B2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2*
+  synthetic constructor •() → self::_B2&S&M1&M2
     : super self::_B2&S&M1::•()
     ;
 }
 abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2&M*
+  synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B2 extends self::_B2&S&M1&M2&M {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     : super self::_B2&S&M1&M2&M::•()
     ;
 }
 abstract class _B0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M*
+  synthetic constructor •() → self::_B0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M&MX*
+  synthetic constructor •() → self::_B0X&S&M&MX
     : super self::_B0X&S&M::•()
     ;
 }
 class B0X extends self::_B0X&S&M&MX {
-  synthetic constructor •() → self::B0X*
+  synthetic constructor •() → self::B0X
     : super self::_B0X&S&M&MX::•()
     ;
 }
 abstract class _B1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1*
+  synthetic constructor •() → self::_B1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M*
+  synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M&MX*
+  synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
-  synthetic constructor •() → self::B1X*
+  synthetic constructor •() → self::B1X
     : super self::_B1X&S&M1&M&MX::•()
     ;
 }
 abstract class _B2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1*
+  synthetic constructor •() → self::_B2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2*
+  synthetic constructor •() → self::_B2X&S&M1&M2
     : super self::_B2X&S&M1::•()
     ;
 }
 abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
-  synthetic constructor •() → self::B2X*
+  synthetic constructor •() → self::B2X
     : super self::_B2X&S&M1&M2&M&MX::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect
index 56cdffa..7d32765 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -126,283 +126,233 @@
 import "dart:core" as core;
 
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
   method foo([dynamic x = #C1]) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MX extends core::Object {
-  synthetic constructor •() → self::MX*
+  synthetic constructor •() → self::MX
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A0 = self::S with self::M {
-  synthetic constructor •() → self::A0*
+  synthetic constructor •() → self::A0
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1&S&M1*
+  synthetic constructor •() → self::_A1&S&M1
     : super self::S::•()
     ;
 }
 class A1 = self::_A1&S&M1 with self::M {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1*
+  synthetic constructor •() → self::_A2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1&M2*
+  synthetic constructor •() → self::_A2&S&M1&M2
     : super self::_A2&S&M1::•()
     ;
 }
 class A2 = self::_A2&S&M1&M2 with self::M {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A0X&S&M*
+  synthetic constructor •() → self::_A0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A0X = self::_A0X&S&M with self::MX {
-  synthetic constructor •() → self::A0X*
+  synthetic constructor •() → self::A0X
     : super self::_A0X&S&M::•()
     ;
 }
 abstract class _A1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1*
+  synthetic constructor •() → self::_A1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1&M*
+  synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
-  synthetic constructor •() → self::A1X*
+  synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
 }
 abstract class _A2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1*
+  synthetic constructor •() → self::_A2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2*
+  synthetic constructor •() → self::_A2X&S&M1&M2
     : super self::_A2X&S&M1::•()
     ;
 }
 abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2&M*
+  synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
-  synthetic constructor •() → self::A2X*
+  synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
 }
 abstract class _B0&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0&S&M*
+  synthetic constructor •() → self::_B0&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B0 extends self::_B0&S&M {
-  synthetic constructor •() → self::B0*
+  synthetic constructor •() → self::B0
     : super self::_B0&S&M::•()
     ;
 }
 abstract class _B1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1*
+  synthetic constructor •() → self::_B1&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1&M*
+  synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B1 extends self::_B1&S&M1&M {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super self::_B1&S&M1&M::•()
     ;
 }
 abstract class _B2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1*
+  synthetic constructor •() → self::_B2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2*
+  synthetic constructor •() → self::_B2&S&M1&M2
     : super self::_B2&S&M1::•()
     ;
 }
 abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2&M*
+  synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B2 extends self::_B2&S&M1&M2&M {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     : super self::_B2&S&M1&M2&M::•()
     ;
 }
 abstract class _B0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M*
+  synthetic constructor •() → self::_B0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M&MX*
+  synthetic constructor •() → self::_B0X&S&M&MX
     : super self::_B0X&S&M::•()
     ;
 }
 class B0X extends self::_B0X&S&M&MX {
-  synthetic constructor •() → self::B0X*
+  synthetic constructor •() → self::B0X
     : super self::_B0X&S&M&MX::•()
     ;
 }
 abstract class _B1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1*
+  synthetic constructor •() → self::_B1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M*
+  synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M&MX*
+  synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
-  synthetic constructor •() → self::B1X*
+  synthetic constructor •() → self::B1X
     : super self::_B1X&S&M1&M&MX::•()
     ;
 }
 abstract class _B2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1*
+  synthetic constructor •() → self::_B2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2*
+  synthetic constructor •() → self::_B2X&S&M1&M2
     : super self::_B2X&S&M1::•()
     ;
 }
 abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
-  synthetic constructor •() → self::B2X*
+  synthetic constructor •() → self::B2X
     : super self::_B2X&S&M1&M2&M&MX::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
index db60ecb..a0a1070 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -126,275 +126,225 @@
 import "dart:core" as core;
 
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     ;
   method foo([dynamic x]) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MX extends core::Object {
-  synthetic constructor •() → self::MX*
+  synthetic constructor •() → self::MX
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A0 = self::S with self::M {
-  synthetic constructor •() → self::A0*
+  synthetic constructor •() → self::A0
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1&S&M1*
+  synthetic constructor •() → self::_A1&S&M1
     : super self::S::•()
     ;
 }
 class A1 = self::_A1&S&M1 with self::M {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super self::_A1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1*
+  synthetic constructor •() → self::_A2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2&S&M1&M2*
+  synthetic constructor •() → self::_A2&S&M1&M2
     : super self::_A2&S&M1::•()
     ;
 }
 class A2 = self::_A2&S&M1&M2 with self::M {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super self::_A2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A0X&S&M*
+  synthetic constructor •() → self::_A0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A0X = self::_A0X&S&M with self::MX {
-  synthetic constructor •() → self::A0X*
+  synthetic constructor •() → self::A0X
     : super self::_A0X&S&M::•()
     ;
 }
 abstract class _A1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1*
+  synthetic constructor •() → self::_A1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A1X&S&M1&M*
+  synthetic constructor •() → self::_A1X&S&M1&M
     : super self::_A1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A1X = self::_A1X&S&M1&M with self::MX {
-  synthetic constructor •() → self::A1X*
+  synthetic constructor •() → self::A1X
     : super self::_A1X&S&M1&M::•()
     ;
 }
 abstract class _A2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1*
+  synthetic constructor •() → self::_A2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2*
+  synthetic constructor •() → self::_A2X&S&M1&M2
     : super self::_A2X&S&M1::•()
     ;
 }
 abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A2X&S&M1&M2&M*
+  synthetic constructor •() → self::_A2X&S&M1&M2&M
     : super self::_A2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class A2X = self::_A2X&S&M1&M2&M with self::MX {
-  synthetic constructor •() → self::A2X*
+  synthetic constructor •() → self::A2X
     : super self::_A2X&S&M1&M2&M::•()
     ;
 }
 abstract class _B0&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0&S&M*
+  synthetic constructor •() → self::_B0&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B0 extends self::_B0&S&M {
-  synthetic constructor •() → self::B0*
+  synthetic constructor •() → self::B0
     ;
 }
 abstract class _B1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1*
+  synthetic constructor •() → self::_B1&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1&S&M1&M*
+  synthetic constructor •() → self::_B1&S&M1&M
     : super self::_B1&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B1 extends self::_B1&S&M1&M {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     ;
 }
 abstract class _B2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1*
+  synthetic constructor •() → self::_B2&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2*
+  synthetic constructor •() → self::_B2&S&M1&M2
     : super self::_B2&S&M1::•()
     ;
 }
 abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2&S&M1&M2&M*
+  synthetic constructor •() → self::_B2&S&M1&M2&M
     : super self::_B2&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 class B2 extends self::_B2&S&M1&M2&M {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     ;
 }
 abstract class _B0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M*
+  synthetic constructor •() → self::_B0X&S&M
     : super self::S::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B0X&S&M&MX*
+  synthetic constructor •() → self::_B0X&S&M&MX
     : super self::_B0X&S&M::•()
     ;
 }
 class B0X extends self::_B0X&S&M&MX {
-  synthetic constructor •() → self::B0X*
+  synthetic constructor •() → self::B0X
     ;
 }
 abstract class _B1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1*
+  synthetic constructor •() → self::_B1X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M*
+  synthetic constructor •() → self::_B1X&S&M1&M
     : super self::_B1X&S&M1::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B1X&S&M1&M&MX*
+  synthetic constructor •() → self::_B1X&S&M1&M&MX
     : super self::_B1X&S&M1&M::•()
     ;
 }
 class B1X extends self::_B1X&S&M1&M&MX {
-  synthetic constructor •() → self::B1X*
+  synthetic constructor •() → self::B1X
     ;
 }
 abstract class _B2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1*
+  synthetic constructor •() → self::_B2X&S&M1
     : super self::S::•()
     ;
 }
 abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2*
+  synthetic constructor •() → self::_B2X&S&M1&M2
     : super self::_B2X&S&M1::•()
     ;
 }
 abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M
     : super self::_B2X&S&M1&M2::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
 }
 abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
+  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
     : super self::_B2X&S&M1&M2&M::•()
     ;
 }
 class B2X extends self::_B2X&S&M1&M2&M&MX {
-  synthetic constructor •() → self::B2X*
+  synthetic constructor •() → self::B2X
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart b/pkg/front_end/testcases/general/mixin_conflicts.dart
index 70cf203..6afebe0 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // This class has no problems.
 class M {
   foo() {}
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline.expect
index 2819465..5f79e28 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class M {
   foo() {}
 }
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline_modelled.expect
index 96f1a87..b2ad75b 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class C3 extends Object with M2 {}
 
 abstract class M2 implements M {
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.expect
index 94fa4c4..2171271 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,151 +34,71 @@
 import "dart:core" as core;
 
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N = core::Object with self::M /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N*
+  const synthetic constructor •() → self::N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&N = core::Object with self::N /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&N*
+  const synthetic constructor •() → self::_C&Object&N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::_C&Object&N {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&N::•()
     ;
 }
 abstract class M2 extends core::Object implements self::M {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N2 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N2*
+  const synthetic constructor •() → self::N2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N3 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N3*
+  const synthetic constructor •() → self::N3
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C2&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C2&Object&M2*
+  const synthetic constructor •() → self::_C2&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends self::_C2&Object&M2 {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super self::_C2&Object&M2::•()
     ;
 }
 abstract class _C3&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&M2*
+  const synthetic constructor •() → self::_C3&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C3 extends self::_C3&Object&M2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect
index 94fa4c4..2171271 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,151 +34,71 @@
 import "dart:core" as core;
 
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N = core::Object with self::M /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N*
+  const synthetic constructor •() → self::N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&N = core::Object with self::N /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&N*
+  const synthetic constructor •() → self::_C&Object&N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::_C&Object&N {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&N::•()
     ;
 }
 abstract class M2 extends core::Object implements self::M {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N2 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N2*
+  const synthetic constructor •() → self::N2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N3 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N3*
+  const synthetic constructor •() → self::N3
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C2&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C2&Object&M2*
+  const synthetic constructor •() → self::_C2&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends self::_C2&Object&M2 {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super self::_C2&Object&M2::•()
     ;
 }
 abstract class _C3&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&M2*
+  const synthetic constructor •() → self::_C3&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C3 extends self::_C3&Object&M2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.outline.expect
index ffe0ebf..57ca611 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,149 +34,69 @@
 import "dart:core" as core;
 
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N = core::Object with self::M /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N*
+  const synthetic constructor •() → self::N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&N = core::Object with self::N /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&N*
+  const synthetic constructor •() → self::_C&Object&N
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{self::M::foo}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::_C&Object&N {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 abstract class M2 extends core::Object implements self::M {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     ;
   method bar() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N2 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N2*
+  const synthetic constructor •() → self::N2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N3 = core::Object with self::M2 /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::N3*
+  const synthetic constructor •() → self::N3
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C2&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C2&Object&M2*
+  const synthetic constructor •() → self::_C2&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends self::_C2&Object&M2 {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
 }
 abstract class _C3&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&M2*
+  const synthetic constructor •() → self::_C3&Object&M2
     : super core::Object::•()
     ;
   mixin-super-stub method bar() → dynamic
     return super.{self::M2::bar}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C3 extends self::_C3&Object&M2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.transformed.expect
index fb7371c..badca39 100644
--- a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -34,145 +34,65 @@
 import "dart:core" as core;
 
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N extends core::Object implements self::M /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::N*
+  const synthetic constructor •() → self::N
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&N extends core::Object implements self::N /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&N*
+  const synthetic constructor •() → self::_C&Object&N
     : super core::Object::•()
     ;
   method foo() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::_C&Object&N {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&N::•()
     ;
 }
 abstract class M2 extends core::Object implements self::M {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class N2 extends core::Object implements self::M2 /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::N2*
+  const synthetic constructor •() → self::N2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N3 extends core::Object implements self::M2 /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::N3*
+  const synthetic constructor •() → self::N3
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C2&Object&M2 extends core::Object implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C2&Object&M2*
+  const synthetic constructor •() → self::_C2&Object&M2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C2 extends self::_C2&Object&M2 {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super self::_C2&Object&M2::•()
     ;
 }
 abstract class _C3&Object&M2 extends core::Object implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&M2*
+  const synthetic constructor •() → self::_C3&Object&M2
     : super core::Object::•()
     ;
   method bar() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C3 extends self::_C3&Object&M2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&M2::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart
index 2e9efab..011cb34 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline.expect
index 86ae68a..d671b85 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline_modelled.expect
index e69ebaf..452b24b 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
index 813bde3..beed00c 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,63 +12,43 @@
 
 import "package:expect/expect.dart";
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field core::String* trace;
-  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field core::String trace;
+  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T%>
     : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D = self::C<core::String*> with self::M {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D*
+class D = self::C<core::String> with self::M {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D
     : super self::C::•(a: a, b: b)
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
-abstract class _F&C&M = self::C<core::int*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M*
+abstract class _F&C&M = self::C<core::int> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M
     : super self::C::•(a: a, b: b)
     ;
 }
 class F extends self::_F&C&M {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::_F&C&M::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect
index 813bde3..beed00c 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,63 +12,43 @@
 
 import "package:expect/expect.dart";
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field core::String* trace;
-  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field core::String trace;
+  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T%>
     : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D = self::C<core::String*> with self::M {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D*
+class D = self::C<core::String> with self::M {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D
     : super self::C::•(a: a, b: b)
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
-abstract class _F&C&M = self::C<core::int*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M*
+abstract class _F&C&M = self::C<core::int> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M
     : super self::C::•(a: a, b: b)
     ;
 }
 class F extends self::_F&C&M {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::_F&C&M::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
index 4244473..d5065f7 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,51 +11,31 @@
 
 import "package:expect/expect.dart";
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field core::String* trace;
-  constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field core::String trace;
+  constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D = self::C<core::String*> with self::M {
-  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::D*
+class D = self::C<core::String> with self::M {
+  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::D
     : super self::C::•(a: a, b: b)
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
 }
-abstract class _F&C&M = self::C<core::int*> with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::_F&C&M*
+abstract class _F&C&M = self::C<core::int> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •({dynamic a = 0, dynamic b = invalid-type}) → self::_F&C&M
     : super self::C::•(a: a, b: b)
     ;
 }
 class F extends self::_F&C&M {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
index ee8735c..98df2eb 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,63 +12,43 @@
 
 import "package:expect/expect.dart";
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  field core::String* trace;
-  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field core::String trace;
+  constructor •({dynamic a = #C1, dynamic b = #C2}) → self::C<self::C::T%>
     : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class D extends self::C<core::String*> implements self::M /*isEliminatedMixin*/  {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D*
+class D extends self::C<core::String> implements self::M /*isEliminatedMixin*/  {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D
     : super self::C::•(a: a, b: b)
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
 }
-abstract class _F&C&M extends self::C<core::int*> implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M*
+abstract class _F&C&M extends self::C<core::int> implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::_F&C&M
     : super self::C::•(a: a, b: b)
     ;
 }
 class F extends self::_F&C&M {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::_F&C&M::•()
     ;
 }
 static method main() → dynamic {
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
-  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart b/pkg/front_end/testcases/general/mixin_covariant.dart
index 77b9cdb..c32fcd5 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart
@@ -1,36 +1,36 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Derived from language_2/covariant_override/tear_off_type_test
 
 // If a parameter is directly or indirectly a covariant override, its type in
-// the method tear-off should become Object.
+// the method tear-off should become Object?.
 
-typedef void TakeInts(int a, int b, int c, int d, int e);
-typedef void TakeObjectsAndInts(Object a, int b, Object c, int d, int e);
-typedef void TakeObjects(Object a, Object b, Object c, Object d, Object e);
+typedef void TakeInts(int? a, int? b, int? c, int? d, int? e);
+typedef void TakeObjectsAndInts(Object? a, int? b, Object? c, int? d, int? e);
+typedef void TakeObjects(Object? a, Object? b, Object? c, Object? d, Object? e);
 
-typedef void TakeOptionalInts([int a, int b, int c, int d]);
-typedef void TakeOptionalObjectsAndInts([Object a, int b, Object c, int d]);
+typedef void TakeOptionalInts([int? a, int? b, int? c, int? d]);
+typedef void TakeOptionalObjectsAndInts([Object? a, int? b, Object? c, int? d]);
 
-typedef void TakeNamedInts({int a, int b, int c, int d});
-typedef void TakeNamedObjectsAndInts({Object a, int b, Object c, int d});
+typedef void TakeNamedInts({int? a, int? b, int? c, int? d});
+typedef void TakeNamedObjectsAndInts({Object? a, int? b, Object? c, int? d});
 
 class M1 {
-  method(covariant int a, int b) {}
+  method(covariant int? a, int? b) {}
 }
 
 class M2 {
-  method(int a, covariant int b) {}
+  method(int? a, covariant int? b) {}
 }
 
 class C extends Object with M1, M2 {}
 
 class Direct {
-  void positional(covariant int a, int b, covariant int c, int d, int e) {}
-  void optional([covariant int a, int b, covariant int c, int d]) {}
-  void named({covariant int a, int b, covariant int c, int d}) {}
+  void positional(covariant int? a, int? b, covariant int? c, int? d, int? e) {}
+  void optional([covariant int? a, int? b, covariant int? c, int? d]) {}
+  void named({covariant int? a, int? b, covariant int? c, int? d}) {}
 }
 
 class Inherited extends Direct {}
@@ -38,59 +38,59 @@
 // ---
 
 class Override1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Override2 extends Override1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Override3 extends Override2 {
-  void method(int a, int b, int c, int d, int e) {}
+  void method(int? a, int? b, int? c, int? d, int? e) {}
 }
 
 // ---
 
 abstract class Implement1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Implement2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class Implement3 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Implement4 implements Implement3 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Implement5 implements Implement1, Implement2, Implement4 {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
 // ---
 
 class Interface1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Interface2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class Mixin1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Mixin2 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Superclass {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
 class Mixed extends Superclass
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline.expect
index 5f9d48c..1dbfd18 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline.expect
@@ -1,80 +1,79 @@
-// @dart = 2.9
-typedef void TakeInts(int a, int b, int c, int d, int e);
-typedef void TakeObjectsAndInts(Object a, int b, Object c, int d, int e);
-typedef void TakeObjects(Object a, Object b, Object c, Object d, Object e);
-typedef void TakeOptionalInts([int a, int b, int c, int d]);
-typedef void TakeOptionalObjectsAndInts([Object a, int b, Object c, int d]);
-typedef void TakeNamedInts({int a, int b, int c, int d});
-typedef void TakeNamedObjectsAndInts({Object a, int b, Object c, int d});
+typedef void TakeInts(int? a, int? b, int? c, int? d, int? e);
+typedef void TakeObjectsAndInts(Object? a, int? b, Object? c, int? d, int? e);
+typedef void TakeObjects(Object? a, Object? b, Object? c, Object? d, Object? e);
+typedef void TakeOptionalInts([int? a, int? b, int? c, int? d]);
+typedef void TakeOptionalObjectsAndInts([Object? a, int? b, Object? c, int? d]);
+typedef void TakeNamedInts({int? a, int? b, int? c, int? d});
+typedef void TakeNamedObjectsAndInts({Object? a, int? b, Object? c, int? d});
 
 class M1 {
-  method(covariant int a, int b) {}
+  method(covariant int? a, int? b) {}
 }
 
 class M2 {
-  method(int a, covariant int b) {}
+  method(int? a, covariant int? b) {}
 }
 
 class C extends Object with M1, M2 {}
 
 class Direct {
-  void positional(covariant int a, int b, covariant int c, int d, int e) {}
-  void optional([covariant int a, int b, covariant int c, int d]) {}
-  void named({covariant int a, int b, covariant int c, int d}) {}
+  void positional(covariant int? a, int? b, covariant int? c, int? d, int? e) {}
+  void optional([covariant int? a, int? b, covariant int? c, int? d]) {}
+  void named({covariant int? a, int? b, covariant int? c, int? d}) {}
 }
 
 class Inherited extends Direct {}
 
 class Override1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Override2 extends Override1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Override3 extends Override2 {
-  void method(int a, int b, int c, int d, int e) {}
+  void method(int? a, int? b, int? c, int? d, int? e) {}
 }
 
 abstract class Implement1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Implement2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class Implement3 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Implement4 implements Implement3 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Implement5 implements Implement1, Implement2, Implement4 {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
 class Interface1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Interface2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class Mixin1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Mixin2 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Superclass {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
 class Mixed extends Superclass
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline_modelled.expect
index bd45a1d..c0534c1 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.textual_outline_modelled.expect
@@ -1,48 +1,47 @@
-// @dart = 2.9
 abstract class Implement1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class C extends Object with M1, M2 {}
 
 class Direct {
-  void named({covariant int a, int b, covariant int c, int d}) {}
-  void optional([covariant int a, int b, covariant int c, int d]) {}
-  void positional(covariant int a, int b, covariant int c, int d, int e) {}
+  void named({covariant int? a, int? b, covariant int? c, int? d}) {}
+  void optional([covariant int? a, int? b, covariant int? c, int? d]) {}
+  void positional(covariant int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Implement2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class Implement3 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Implement4 implements Implement3 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Implement5 implements Implement1, Implement2, Implement4 {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
 class Inherited extends Direct {}
 
 class Interface1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Interface2 {
-  void method(int a, covariant int b, int c, int d, int e) {}
+  void method(int? a, covariant int? b, int? c, int? d, int? e) {}
 }
 
 class M1 {
-  method(covariant int a, int b) {}
+  method(covariant int? a, int? b) {}
 }
 
 class M2 {
-  method(int a, covariant int b) {}
+  method(int? a, covariant int? b) {}
 }
 
 class Mixed extends Superclass
@@ -50,36 +49,36 @@
     implements Interface1, Interface2 {}
 
 class Mixin1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Mixin2 {
-  void method(int a, int b, int c, covariant int d, int e) {}
+  void method(int? a, int? b, int? c, covariant int? d, int? e) {}
 }
 
 class Override1 {
-  void method(covariant int a, int b, int c, int d, int e) {}
+  void method(covariant int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Override2 extends Override1 {
-  void method(int a, int b, covariant int c, int d, int e) {}
+  void method(int? a, int? b, covariant int? c, int? d, int? e) {}
 }
 
 class Override3 extends Override2 {
-  void method(int a, int b, int c, int d, int e) {}
+  void method(int? a, int? b, int? c, int? d, int? e) {}
 }
 
 class Superclass {
-  void method(int a, int b, int c, int d, covariant int e) {}
+  void method(int? a, int? b, int? c, int? d, covariant int? e) {}
 }
 
-typedef void TakeInts(int a, int b, int c, int d, int e);
-typedef void TakeNamedInts({int a, int b, int c, int d});
-typedef void TakeNamedObjectsAndInts({Object a, int b, Object c, int d});
-typedef void TakeObjects(Object a, Object b, Object c, Object d, Object e);
-typedef void TakeObjectsAndInts(Object a, int b, Object c, int d, int e);
-typedef void TakeOptionalInts([int a, int b, int c, int d]);
-typedef void TakeOptionalObjectsAndInts([Object a, int b, Object c, int d]);
+typedef void TakeInts(int? a, int? b, int? c, int? d, int? e);
+typedef void TakeNamedInts({int? a, int? b, int? c, int? d});
+typedef void TakeNamedObjectsAndInts({Object? a, int? b, Object? c, int? d});
+typedef void TakeObjects(Object? a, Object? b, Object? c, Object? d, Object? e);
+typedef void TakeObjectsAndInts(Object? a, int? b, Object? c, int? d, int? e);
+typedef void TakeOptionalInts([int? a, int? b, int? c, int? d]);
+typedef void TakeOptionalObjectsAndInts([Object? a, int? b, Object? c, int? d]);
 void isTrue(bool value) {}
 void main() {}
 void testDirect() {}
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
index 503a71e..a1fcbe0 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
@@ -1,305 +1,155 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef TakeInts = (core::int*, core::int*, core::int*, core::int*, core::int*) →* void;
-typedef TakeObjectsAndInts = (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void;
-typedef TakeObjects = (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void;
-typedef TakeOptionalInts = ([core::int*, core::int*, core::int*, core::int*]) →* void;
-typedef TakeOptionalObjectsAndInts = ([core::Object*, core::int*, core::Object*, core::int*]) →* void;
-typedef TakeNamedInts = ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void;
-typedef TakeNamedObjectsAndInts = ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void;
+typedef TakeInts = (core::int?, core::int?, core::int?, core::int?, core::int?) → void;
+typedef TakeObjectsAndInts = (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void;
+typedef TakeObjects = (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void;
+typedef TakeOptionalInts = ([core::int?, core::int?, core::int?, core::int?]) → void;
+typedef TakeOptionalObjectsAndInts = ([core::Object?, core::int?, core::Object?, core::int?]) → void;
+typedef TakeNamedInts = ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void;
+typedef TakeNamedObjectsAndInts = ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void;
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic {}
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b) → dynamic {}
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int? a, core::int? b) → dynamic
     return super.{self::M1::method}(a, b);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
 class Direct extends core::Object {
-  synthetic constructor •() → self::Direct*
+  synthetic constructor •() → self::Direct
     : super core::Object::•()
     ;
-  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
-  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
+  method optional([covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1]) → void {}
+  method named({covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1}) → void {}
 }
 class Inherited extends self::Direct {
-  synthetic constructor •() → self::Inherited*
+  synthetic constructor •() → self::Inherited
     : super self::Direct::•()
     ;
 }
 class Override1 extends core::Object {
-  synthetic constructor •() → self::Override1*
+  synthetic constructor •() → self::Override1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override2 extends self::Override1 {
-  synthetic constructor •() → self::Override2*
+  synthetic constructor •() → self::Override2
     : super self::Override1::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override3 extends self::Override2 {
-  synthetic constructor •() → self::Override3*
+  synthetic constructor •() → self::Override3
     : super self::Override2::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 abstract class Implement1 extends core::Object {
-  synthetic constructor •() → self::Implement1*
+  synthetic constructor •() → self::Implement1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement2 extends core::Object {
-  synthetic constructor •() → self::Implement2*
+  synthetic constructor •() → self::Implement2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement3 extends core::Object {
-  synthetic constructor •() → self::Implement3*
+  synthetic constructor •() → self::Implement3
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement4 extends core::Object implements self::Implement3 {
-  synthetic constructor •() → self::Implement4*
+  synthetic constructor •() → self::Implement4
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
-  synthetic constructor •() → self::Implement5*
+  synthetic constructor •() → self::Implement5
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin1 extends core::Object {
-  synthetic constructor •() → self::Mixin1*
+  synthetic constructor •() → self::Mixin1
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin2 extends core::Object {
-  synthetic constructor •() → self::Mixin2*
+  synthetic constructor •() → self::Mixin2
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
-  synthetic constructor •() → self::Mixed*
+  synthetic constructor •() → self::Mixed
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
@@ -310,46 +160,46 @@
   self::testMixed();
 }
 static method testDirect() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Direct::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Direct::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Direct::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testInherited() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Inherited::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Inherited::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Inherited::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testOverridden() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method2 = new self::Override2::•().{self::Override2::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method3 = new self::Override3::•().{self::Override3::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
 }
 static method testImplemented() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Implement5::•().{self::Implement5::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
 static method testMixed() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Mixed::•().{self::Mixed::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
-static method isTrue(core::bool* value) → void {
+static method isTrue(core::bool value) → void {
   if(!value)
     throw "Expected true";
 }
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect
index 503a71e..a1fcbe0 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect
@@ -1,305 +1,155 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef TakeInts = (core::int*, core::int*, core::int*, core::int*, core::int*) →* void;
-typedef TakeObjectsAndInts = (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void;
-typedef TakeObjects = (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void;
-typedef TakeOptionalInts = ([core::int*, core::int*, core::int*, core::int*]) →* void;
-typedef TakeOptionalObjectsAndInts = ([core::Object*, core::int*, core::Object*, core::int*]) →* void;
-typedef TakeNamedInts = ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void;
-typedef TakeNamedObjectsAndInts = ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void;
+typedef TakeInts = (core::int?, core::int?, core::int?, core::int?, core::int?) → void;
+typedef TakeObjectsAndInts = (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void;
+typedef TakeObjects = (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void;
+typedef TakeOptionalInts = ([core::int?, core::int?, core::int?, core::int?]) → void;
+typedef TakeOptionalObjectsAndInts = ([core::Object?, core::int?, core::Object?, core::int?]) → void;
+typedef TakeNamedInts = ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void;
+typedef TakeNamedObjectsAndInts = ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void;
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic {}
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b) → dynamic {}
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int? a, core::int? b) → dynamic
     return super.{self::M1::method}(a, b);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
 class Direct extends core::Object {
-  synthetic constructor •() → self::Direct*
+  synthetic constructor •() → self::Direct
     : super core::Object::•()
     ;
-  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
-  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
+  method optional([covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1]) → void {}
+  method named({covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1}) → void {}
 }
 class Inherited extends self::Direct {
-  synthetic constructor •() → self::Inherited*
+  synthetic constructor •() → self::Inherited
     : super self::Direct::•()
     ;
 }
 class Override1 extends core::Object {
-  synthetic constructor •() → self::Override1*
+  synthetic constructor •() → self::Override1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override2 extends self::Override1 {
-  synthetic constructor •() → self::Override2*
+  synthetic constructor •() → self::Override2
     : super self::Override1::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override3 extends self::Override2 {
-  synthetic constructor •() → self::Override3*
+  synthetic constructor •() → self::Override3
     : super self::Override2::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 abstract class Implement1 extends core::Object {
-  synthetic constructor •() → self::Implement1*
+  synthetic constructor •() → self::Implement1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement2 extends core::Object {
-  synthetic constructor •() → self::Implement2*
+  synthetic constructor •() → self::Implement2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement3 extends core::Object {
-  synthetic constructor •() → self::Implement3*
+  synthetic constructor •() → self::Implement3
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement4 extends core::Object implements self::Implement3 {
-  synthetic constructor •() → self::Implement4*
+  synthetic constructor •() → self::Implement4
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
-  synthetic constructor •() → self::Implement5*
+  synthetic constructor •() → self::Implement5
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin1 extends core::Object {
-  synthetic constructor •() → self::Mixin1*
+  synthetic constructor •() → self::Mixin1
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin2 extends core::Object {
-  synthetic constructor •() → self::Mixin2*
+  synthetic constructor •() → self::Mixin2
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
-  synthetic constructor •() → self::Mixed*
+  synthetic constructor •() → self::Mixed
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
@@ -310,46 +160,46 @@
   self::testMixed();
 }
 static method testDirect() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Direct::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Direct::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Direct::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testInherited() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Inherited::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Inherited::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Inherited::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testOverridden() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method2 = new self::Override2::•().{self::Override2::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method3 = new self::Override3::•().{self::Override3::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
 }
 static method testImplemented() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Implement5::•().{self::Implement5::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
 static method testMixed() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Mixed::•().{self::Mixed::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
-static method isTrue(core::bool* value) → void {
+static method isTrue(core::bool value) → void {
   if(!value)
     throw "Expected true";
 }
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
index cb1a866..40e7e6a 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
@@ -1,304 +1,154 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef TakeInts = (core::int*, core::int*, core::int*, core::int*, core::int*) →* void;
-typedef TakeObjectsAndInts = (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void;
-typedef TakeObjects = (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void;
-typedef TakeOptionalInts = ([core::int*, core::int*, core::int*, core::int*]) →* void;
-typedef TakeOptionalObjectsAndInts = ([core::Object*, core::int*, core::Object*, core::int*]) →* void;
-typedef TakeNamedInts = ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void;
-typedef TakeNamedObjectsAndInts = ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void;
+typedef TakeInts = (core::int?, core::int?, core::int?, core::int?, core::int?) → void;
+typedef TakeObjectsAndInts = (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void;
+typedef TakeObjects = (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void;
+typedef TakeOptionalInts = ([core::int?, core::int?, core::int?, core::int?]) → void;
+typedef TakeOptionalObjectsAndInts = ([core::Object?, core::int?, core::Object?, core::int?]) → void;
+typedef TakeNamedInts = ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void;
+typedef TakeNamedObjectsAndInts = ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void;
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
+  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic
+  method method(core::int? a, covariant-by-declaration core::int? b) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int? a, core::int? b) → dynamic
     return super.{self::M1::method}(a, b);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class Direct extends core::Object {
-  synthetic constructor •() → self::Direct*
+  synthetic constructor •() → self::Direct
     ;
-  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
+  method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
-  method optional([covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d]) → void
+  method optional([covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d]) → void
     ;
-  method named({covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d}) → void
+  method named({covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d}) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Inherited extends self::Direct {
-  synthetic constructor •() → self::Inherited*
+  synthetic constructor •() → self::Inherited
     ;
 }
 class Override1 extends core::Object {
-  synthetic constructor •() → self::Override1*
+  synthetic constructor •() → self::Override1
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Override2 extends self::Override1 {
-  synthetic constructor •() → self::Override2*
+  synthetic constructor •() → self::Override2
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
 }
 class Override3 extends self::Override2 {
-  synthetic constructor •() → self::Override3*
+  synthetic constructor •() → self::Override3
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
 }
 abstract class Implement1 extends core::Object {
-  synthetic constructor •() → self::Implement1*
+  synthetic constructor •() → self::Implement1
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Implement2 extends core::Object {
-  synthetic constructor •() → self::Implement2*
+  synthetic constructor •() → self::Implement2
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Implement3 extends core::Object {
-  synthetic constructor •() → self::Implement3*
+  synthetic constructor •() → self::Implement3
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Implement4 extends core::Object implements self::Implement3 {
-  synthetic constructor •() → self::Implement4*
+  synthetic constructor •() → self::Implement4
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
-  synthetic constructor •() → self::Implement5*
+  synthetic constructor •() → self::Implement5
     ;
-  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin1 extends core::Object {
-  synthetic constructor •() → self::Mixin1*
+  synthetic constructor •() → self::Mixin1
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin2 extends core::Object {
-  synthetic constructor •() → self::Mixin2*
+  synthetic constructor •() → self::Mixin2
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void
+  method method(core::int? a, core::int? b, core::int? c, covariant-by-declaration core::int? d, core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
+  method method(core::int? a, core::int? b, core::int? c, core::int? d, covariant-by-declaration core::int? e) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
-  synthetic constructor •() → self::Mixed*
+  synthetic constructor •() → self::Mixed
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void
@@ -313,5 +163,5 @@
   ;
 static method testMixed() → void
   ;
-static method isTrue(core::bool* value) → void
+static method isTrue(core::bool value) → void
   ;
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
index 29fba4a..89e3789 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
@@ -1,301 +1,151 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef TakeInts = (core::int*, core::int*, core::int*, core::int*, core::int*) →* void;
-typedef TakeObjectsAndInts = (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void;
-typedef TakeObjects = (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void;
-typedef TakeOptionalInts = ([core::int*, core::int*, core::int*, core::int*]) →* void;
-typedef TakeOptionalObjectsAndInts = ([core::Object*, core::int*, core::Object*, core::int*]) →* void;
-typedef TakeNamedInts = ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void;
-typedef TakeNamedObjectsAndInts = ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void;
+typedef TakeInts = (core::int?, core::int?, core::int?, core::int?, core::int?) → void;
+typedef TakeObjectsAndInts = (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void;
+typedef TakeObjects = (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void;
+typedef TakeOptionalInts = ([core::int?, core::int?, core::int?, core::int?]) → void;
+typedef TakeOptionalObjectsAndInts = ([core::Object?, core::int?, core::Object?, core::int?]) → void;
+typedef TakeNamedInts = ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void;
+typedef TakeNamedObjectsAndInts = ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void;
 class M1 extends core::Object {
-  synthetic constructor •() → self::M1*
+  synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic {}
 }
 class M2 extends core::Object {
-  synthetic constructor •() → self::M2*
+  synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b) → dynamic {}
 }
 abstract class _C&Object&M1 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1*
+  const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b) → dynamic {}
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C&Object&M1&M2*
+  const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic {}
+  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b) → dynamic {}
 }
 class C extends self::_C&Object&M1&M2 {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&M1&M2::•()
     ;
 }
 class Direct extends core::Object {
-  synthetic constructor •() → self::Direct*
+  synthetic constructor •() → self::Direct
     : super core::Object::•()
     ;
-  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
-  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method positional(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
+  method optional([covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1]) → void {}
+  method named({covariant-by-declaration core::int? a = #C1, core::int? b = #C1, covariant-by-declaration core::int? c = #C1, core::int? d = #C1}) → void {}
 }
 class Inherited extends self::Direct {
-  synthetic constructor •() → self::Inherited*
+  synthetic constructor •() → self::Inherited
     : super self::Direct::•()
     ;
 }
 class Override1 extends core::Object {
-  synthetic constructor •() → self::Override1*
+  synthetic constructor •() → self::Override1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override2 extends self::Override1 {
-  synthetic constructor •() → self::Override2*
+  synthetic constructor •() → self::Override2
     : super self::Override1::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Override3 extends self::Override2 {
-  synthetic constructor •() → self::Override3*
+  synthetic constructor •() → self::Override3
     : super self::Override2::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 abstract class Implement1 extends core::Object {
-  synthetic constructor •() → self::Implement1*
+  synthetic constructor •() → self::Implement1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement2 extends core::Object {
-  synthetic constructor •() → self::Implement2*
+  synthetic constructor •() → self::Implement2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement3 extends core::Object {
-  synthetic constructor •() → self::Implement3*
+  synthetic constructor •() → self::Implement3
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Implement4 extends core::Object implements self::Implement3 {
-  synthetic constructor •() → self::Implement4*
+  synthetic constructor •() → self::Implement4
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
-  synthetic constructor •() → self::Implement5*
+  synthetic constructor •() → self::Implement5
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
-  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(covariant-by-declaration core::int? a, core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Interface2 extends core::Object {
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, covariant-by-declaration core::int? b, core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin1 extends core::Object {
-  synthetic constructor •() → self::Mixin1*
+  synthetic constructor •() → self::Mixin1
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, core::int? e) → void {}
 }
 class Mixin2 extends core::Object {
-  synthetic constructor •() → self::Mixin2*
+  synthetic constructor •() → self::Mixin2
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, covariant-by-declaration core::int? d, core::int? e) → void {}
 }
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method method(core::int? a, core::int? b, core::int? c, core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1 extends self::Superclass implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 extends self::_Mixed&Superclass&Mixin1 implements self::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
+  method method(core::int? a, core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void {}
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
-  synthetic constructor •() → self::Mixed*
+  synthetic constructor •() → self::Mixed
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int? a, covariant-by-declaration core::int? b, covariant-by-declaration core::int? c, covariant-by-declaration core::int? d, covariant-by-declaration core::int? e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
@@ -306,46 +156,46 @@
   self::testMixed();
 }
 static method testDirect() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Direct::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Direct::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Direct::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testInherited() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
-  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
-  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
-  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
-  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
-  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void positional = new self::Inherited::•().{self::Direct::positional}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(positional is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(positional is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  ([core::int?, core::int?, core::int?, core::int?]) → void optional = new self::Inherited::•().{self::Direct::optional}{([core::int?, core::int?, core::int?, core::int?]) → void};
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::int?, core::int?, core::int?, core::int?]) → void);
+  self::isTrue(optional is{ForNonNullableByDefault} ([core::Object?, core::int?, core::Object?, core::int?]) → void);
+  ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void named = new self::Inherited::•().{self::Direct::named}{({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void};
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::int?, b: core::int?, c: core::int?, d: core::int?}) → void);
+  self::isTrue(named is{ForNonNullableByDefault} ({a: core::Object?, b: core::int?, c: core::Object?, d: core::int?}) → void);
 }
 static method testOverridden() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method2 = new self::Override2::•().{self::Override2::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method2 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method3 = new self::Override3::•().{self::Override3::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method3 is{ForNonNullableByDefault} (core::Object?, core::int?, core::Object?, core::int?, core::int?) → void);
 }
 static method testImplemented() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Implement5::•().{self::Implement5::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
 static method testMixed() → void {
-  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
-  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
-  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+  (core::int?, core::int?, core::int?, core::int?, core::int?) → void method = new self::Mixed::•().{self::Mixed::method}{(core::int?, core::int?, core::int?, core::int?, core::int?) → void};
+  self::isTrue(method is{ForNonNullableByDefault} (core::int?, core::int?, core::int?, core::int?, core::int?) → void);
+  self::isTrue(method is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?, core::Object?, core::Object?) → void);
 }
-static method isTrue(core::bool* value) → void {
+static method isTrue(core::bool value) → void {
   if(!value)
     throw "Expected true";
 }
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart b/pkg/front_end/testcases/general/mixin_covariant2.dart
index 51720ec..8454114 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Superclass {
   String method1(num argument1, num argument2) => "Superclass";
   String method2(num argument1, num argument2) => "Superclass";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline.expect
index 4e542eb..6f22d96 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Superclass {
   String method1(num argument1, num argument2) => "Superclass";
   String method2(num argument1, num argument2) => "Superclass";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline_modelled.expect
index ba9c54c..9f3d0b4 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class extends Superclass with Mixin {}
 
 class Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
index 8a65e36..ebd8305 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
@@ -1,98 +1,78 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method2(core::num* argument1, core::num* argument2) → core::String*
+  method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
-  method method3(core::num* argument1, core::num* argument2) → core::String*
+  method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Superclass&Mixin*
+  synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Superclass&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
-  self::Superclass* s = c;
-  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
-  self::Mixin* m = c;
-  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect
index 8a65e36..ebd8305 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect
@@ -1,98 +1,78 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method2(core::num* argument1, core::num* argument2) → core::String*
+  method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
-  method method3(core::num* argument1, core::num* argument2) → core::String*
+  method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Superclass&Mixin*
+  synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Superclass&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
-  self::Superclass* s = c;
-  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
-  self::Mixin* m = c;
-  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
index 64d87c4..a2ed6ce 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
@@ -1,71 +1,51 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     ;
-  method method2(core::num* argument1, core::num* argument2) → core::String*
+  method method2(core::num argument1, core::num argument2) → core::String
     ;
-  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     ;
-  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     ;
-  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     ;
-  method method3(core::num* argument1, core::num* argument2) → core::String*
+  method method3(core::num argument1, core::num argument2) → core::String
     ;
-  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Superclass&Mixin*
+  synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
 }
 static method main() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → void
   ;
-static method throws(() →* void f) → void
+static method throws(() → void f) → void
   ;
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
index 11ed4b8..2122e28 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
@@ -1,98 +1,78 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  synthetic constructor •() → self::Superclass*
+  synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method2(core::num* argument1, core::num* argument2) → core::String*
+  method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Mixin extends core::Object {
-  synthetic constructor •() → self::Mixin*
+  synthetic constructor •() → self::Mixin
     : super core::Object::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
-  method method3(core::num* argument1, core::num* argument2) → core::String*
+  method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Class&Superclass&Mixin extends self::Superclass implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Superclass&Mixin*
+  synthetic constructor •() → self::_Class&Superclass&Mixin
     : super self::Superclass::•()
     ;
-  method method1(core::num* argument1, core::num* argument2) → core::String*
+  method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
-  method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+  method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return "Mixin";
 }
 class Class extends self::_Class&Superclass&Mixin {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Superclass&Mixin::•()
     ;
 }
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
-  self::Superclass* s = c;
-  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
-  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
-  self::Mixin* m = c;
-  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
-  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
 }
 static method expect(dynamic expected, dynamic actual) → void {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
-static method throws(() →* void f) → void {
+static method throws(() → void f) → void {
   try {
-    f(){() →* void};
+    f(){() → void};
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart b/pkg/front_end/testcases/general/mixin_from_patch/main.dart
index 70c5990..9a64949 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'dart:test';
 
 main() {
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline_modelled.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
index 964cf88..05b2295 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -11,7 +11,7 @@
   new test::SubClass::unpatched();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -27,60 +27,40 @@
 
 @#C1
 class Class extends core::Object {
-  constructor _internal({core::bool* value = #C2}) → test::Class*
+  constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
     ;
   @#C1
-  constructor patched() → test::Class*
+  constructor patched() → test::Class
     : this test::Class::_internal()
     ;
-  constructor unpatched() → test::Class*
+  constructor unpatched() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _SubClass&Class&Mixin = test::Class with test::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor patched() → test::_SubClass&Class&Mixin*
+  synthetic constructor patched() → test::_SubClass&Class&Mixin
     : super test::Class::patched()
     ;
-  synthetic constructor unpatched() → test::_SubClass&Class&Mixin*
+  synthetic constructor unpatched() → test::_SubClass&Class&Mixin
     : super test::Class::unpatched()
     ;
-  synthetic constructor _internal({core::bool* value = #C2}) → test::_SubClass&Class&Mixin*
+  synthetic constructor _internal({core::bool value = #C2}) → test::_SubClass&Class&Mixin
     : super test::Class::_internal(value: value)
     ;
 }
 @#C1
 class SubClass extends test::_SubClass&Class&Mixin {
-  constructor _internal() → test::SubClass*
+  constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
     ;
   @#C1
-  constructor patched() → test::SubClass*
+  constructor patched() → test::SubClass
     : this test::SubClass::_internal()
     ;
-  constructor unpatched() → test::SubClass*
+  constructor unpatched() → test::SubClass
     : super test::_SubClass&Class&Mixin::unpatched()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
index 964cf88..05b2295 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -11,7 +11,7 @@
   new test::SubClass::unpatched();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -27,60 +27,40 @@
 
 @#C1
 class Class extends core::Object {
-  constructor _internal({core::bool* value = #C2}) → test::Class*
+  constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
     ;
   @#C1
-  constructor patched() → test::Class*
+  constructor patched() → test::Class
     : this test::Class::_internal()
     ;
-  constructor unpatched() → test::Class*
+  constructor unpatched() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _SubClass&Class&Mixin = test::Class with test::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor patched() → test::_SubClass&Class&Mixin*
+  synthetic constructor patched() → test::_SubClass&Class&Mixin
     : super test::Class::patched()
     ;
-  synthetic constructor unpatched() → test::_SubClass&Class&Mixin*
+  synthetic constructor unpatched() → test::_SubClass&Class&Mixin
     : super test::Class::unpatched()
     ;
-  synthetic constructor _internal({core::bool* value = #C2}) → test::_SubClass&Class&Mixin*
+  synthetic constructor _internal({core::bool value = #C2}) → test::_SubClass&Class&Mixin
     : super test::Class::_internal(value: value)
     ;
 }
 @#C1
 class SubClass extends test::_SubClass&Class&Mixin {
-  constructor _internal() → test::SubClass*
+  constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
     ;
   @#C1
-  constructor patched() → test::SubClass*
+  constructor patched() → test::SubClass
     : this test::SubClass::_internal()
     ;
-  constructor unpatched() → test::SubClass*
+  constructor unpatched() → test::SubClass
     : super test::_SubClass&Class&Mixin::unpatched()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
index bffd38a..3673867 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:_internal" as _in;
 import "dart:core" as core;
@@ -15,55 +15,35 @@
 
 @_in::patch
 class Class extends core::Object {
-  constructor _internal({core::bool* value = false}) → self2::Class*
+  constructor _internal({core::bool value = false}) → self2::Class
     ;
   @_in::patch
-  external constructor patched() → self2::Class*
+  external constructor patched() → self2::Class
     ;
-  constructor unpatched() → self2::Class*
+  constructor unpatched() → self2::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _SubClass&Class&Mixin = self2::Class with self2::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor patched() → self2::_SubClass&Class&Mixin*
+  synthetic constructor patched() → self2::_SubClass&Class&Mixin
     : super self2::Class::patched()
     ;
-  synthetic constructor unpatched() → self2::_SubClass&Class&Mixin*
+  synthetic constructor unpatched() → self2::_SubClass&Class&Mixin
     : super self2::Class::unpatched()
     ;
-  synthetic constructor _internal({core::bool* value = false}) → self2::_SubClass&Class&Mixin*
+  synthetic constructor _internal({core::bool value = false}) → self2::_SubClass&Class&Mixin
     : super self2::Class::_internal(value: value)
     ;
 }
 @_in::patch
 class SubClass extends self2::_SubClass&Class&Mixin {
-  constructor _internal() → self2::SubClass*
+  constructor _internal() → self2::SubClass
     ;
   @_in::patch
-  external constructor patched() → self2::SubClass*
+  external constructor patched() → self2::SubClass
     ;
-  constructor unpatched() → self2::SubClass*
+  constructor unpatched() → self2::SubClass
     ;
 }
 
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.transformed.expect
index 354d733..a940761 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -11,7 +11,7 @@
   new test::SubClass::unpatched();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -27,60 +27,40 @@
 
 @#C1
 class Class extends core::Object {
-  constructor _internal({core::bool* value = #C2}) → test::Class*
+  constructor _internal({core::bool value = #C2}) → test::Class
     : super core::Object::•()
     ;
   @#C1
-  constructor patched() → test::Class*
+  constructor patched() → test::Class
     : this test::Class::_internal()
     ;
-  constructor unpatched() → test::Class*
+  constructor unpatched() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _SubClass&Class&Mixin extends test::Class implements test::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor patched() → test::_SubClass&Class&Mixin*
+  synthetic constructor patched() → test::_SubClass&Class&Mixin
     : super test::Class::patched()
     ;
-  synthetic constructor unpatched() → test::_SubClass&Class&Mixin*
+  synthetic constructor unpatched() → test::_SubClass&Class&Mixin
     : super test::Class::unpatched()
     ;
-  synthetic constructor _internal({core::bool* value = #C2}) → test::_SubClass&Class&Mixin*
+  synthetic constructor _internal({core::bool value = #C2}) → test::_SubClass&Class&Mixin
     : super test::Class::_internal(value: value)
     ;
 }
 @#C1
 class SubClass extends test::_SubClass&Class&Mixin {
-  constructor _internal() → test::SubClass*
+  constructor _internal() → test::SubClass
     : super test::_SubClass&Class&Mixin::_internal(value: true)
     ;
   @#C1
-  constructor patched() → test::SubClass*
+  constructor patched() → test::SubClass
     : this test::SubClass::_internal()
     ;
-  constructor unpatched() → test::SubClass*
+  constructor unpatched() → test::SubClass
     : super test::_SubClass&Class&Mixin::unpatched()
     ;
 }
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/origin_lib.dart b/pkg/front_end/testcases/general/mixin_from_patch/origin_lib.dart
index e8e141d..3a9ea31 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/origin_lib.dart
+++ b/pkg/front_end/testcases/general/mixin_from_patch/origin_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Class {
   external Class.patched();
 
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/patch_lib.dart b/pkg/front_end/testcases/general/mixin_from_patch/patch_lib.dart
index 8e32303..5eb5e41 100644
--- a/pkg/front_end/testcases/general/mixin_from_patch/patch_lib.dart
+++ b/pkg/front_end/testcases/general/mixin_from_patch/patch_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // ignore: import_internal_library
 import 'dart:_internal';
 
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart
index 7e4d936..890f7b5 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2018, 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.md file.
+
 // @dart=2.9
+
 class A {}
 
 class C<T extends A> {
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart
new file mode 100644
index 0000000..2cd6db2
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart
@@ -0,0 +1,24 @@
+// 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.md file.
+
+class A {}
+
+class C<T extends A> {
+  late T _field;
+
+  foo(T x) {
+    _field = x;
+  }
+}
+
+class D extends C<B> {}
+
+class Foo extends Object with C<B> {}
+
+class B extends A {}
+
+main() {
+  var foo = new Foo();
+  foo.foo(new B());
+}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline.expect
new file mode 100644
index 0000000..1c97b57
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class A {}
+
+class C<T extends A> {
+  late T _field;
+  foo(T x) {}
+}
+
+class D extends C<B> {}
+
+class Foo extends Object with C<B> {}
+
+class B extends A {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f367e69
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class A {}
+class B extends A {}
+class C<T extends A> {
+  ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+  T _field;
+  foo(T x) {}
+}
+class D extends C<B> {}
+class Foo extends Object with C<B> {}
+main() {}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.expect
new file mode 100644
index 0000000..ef14d3e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class C<T extends self::A> extends core::Object {
+  late covariant-by-class field self::C::T _field;
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::C::T x) → dynamic {
+    this.{self::C::_field} = x;
+  }
+}
+class D extends self::C<self::B> {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+}
+abstract class _Foo&Object&C = core::Object with self::C<self::B> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Object&C
+    : super core::Object::•()
+    ;
+  mixin-super-stub get _field() → self::B
+    return super.{self::C::_field};
+  mixin-super-stub set _field(covariant-by-class self::B value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(covariant-by-class self::B x) → dynamic
+    return super.{self::C::foo}(x);
+}
+class Foo extends self::_Foo&Object&C {
+  synthetic constructor •() → self::Foo
+    : super self::_Foo&Object&C::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B) → dynamic};
+}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.modular.expect
new file mode 100644
index 0000000..ef14d3e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class C<T extends self::A> extends core::Object {
+  late covariant-by-class field self::C::T _field;
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::C::T x) → dynamic {
+    this.{self::C::_field} = x;
+  }
+}
+class D extends self::C<self::B> {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+}
+abstract class _Foo&Object&C = core::Object with self::C<self::B> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Object&C
+    : super core::Object::•()
+    ;
+  mixin-super-stub get _field() → self::B
+    return super.{self::C::_field};
+  mixin-super-stub set _field(covariant-by-class self::B value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(covariant-by-class self::B x) → dynamic
+    return super.{self::C::foo}(x);
+}
+class Foo extends self::_Foo&Object&C {
+  synthetic constructor •() → self::Foo
+    : super self::_Foo&Object&C::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B) → dynamic};
+}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.outline.expect
new file mode 100644
index 0000000..9a6b3bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class C<T extends self::A> extends core::Object {
+  late covariant-by-class field self::C::T _field;
+  synthetic constructor •() → self::C<self::C::T>
+    ;
+  method foo(covariant-by-class self::C::T x) → dynamic
+    ;
+}
+class D extends self::C<self::B> {
+  synthetic constructor •() → self::D
+    ;
+}
+abstract class _Foo&Object&C = core::Object with self::C<self::B> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Object&C
+    : super core::Object::•()
+    ;
+  mixin-super-stub get _field() → self::B
+    return super.{self::C::_field};
+  mixin-super-stub set _field(covariant-by-class self::B value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(covariant-by-class self::B x) → dynamic
+    return super.{self::C::foo}(x);
+}
+class Foo extends self::_Foo&Object&C {
+  synthetic constructor •() → self::Foo
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a68dbaf
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field2.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class C<T extends self::A> extends core::Object {
+  late covariant-by-class field self::C::T _field;
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::C::T x) → dynamic {
+    this.{self::C::_field} = x;
+  }
+}
+class D extends self::C<self::B> {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+}
+abstract class _Foo&Object&C extends core::Object implements self::C<self::B> /*isAnonymousMixin,isEliminatedMixin*/  {
+  late covariant-by-class field self::B _field;
+  synthetic constructor •() → self::_Foo&Object&C
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::B x) → dynamic {
+    this.{self::C::_field} = x;
+  }
+}
+class Foo extends self::_Foo&Object&C {
+  synthetic constructor •() → self::Foo
+    : super self::_Foo&Object&C::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B) → dynamic};
+}
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart b/pkg/front_end/testcases/general/mixin_interface_conflict.dart
index 5382f6e..767bf52 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class B {
   int get n => 1;
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline.expect
index 49f94cd..d373953 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B {
   int get n => 1;
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline_modelled.expect
index c6ed9f3..e2a50a1 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class B {
   int get n => 1;
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.expect
index 194538f..7cbf184 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,53 +17,23 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get n() → core::int*
+  get n() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get n() → core::double*
+  get n() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _M&B&C extends core::Object implements self::B, self::C /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M&B&C*
+  synthetic constructor •() → self::_M&B&C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends self::_M&B&C /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect
index 194538f..7cbf184 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,53 +17,23 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get n() → core::int*
+  get n() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get n() → core::double*
+  get n() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _M&B&C extends core::Object implements self::B, self::C /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M&B&C*
+  synthetic constructor •() → self::_M&B&C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends self::_M&B&C /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.outline.expect
index e77f24e..5ff43cf 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,50 +17,20 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get n() → core::int*
+  get n() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  get n() → core::double*
+  get n() → core::double
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _M&B&C extends core::Object implements self::B, self::C /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M&B&C*
+  synthetic constructor •() → self::_M&B&C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends self::_M&B&C /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.transformed.expect
index 194538f..7cbf184 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,53 +17,23 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get n() → core::int*
+  get n() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get n() → core::double*
+  get n() → core::double
     return 2.0;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _M&B&C extends core::Object implements self::B, self::C /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_M&B&C*
+  synthetic constructor •() → self::_M&B&C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class M extends self::_M&B&C /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart b/pkg/front_end/testcases/general/mixin_stubs.dart
index 22e5bb1..59f0691 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class Super {
   void concreteExtendsConcreteMixin() {}
   void concreteExtendsAbstractMixin() {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect
index 4f42b33..9a72527 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Super {
   void concreteExtendsConcreteMixin() {}
   void concreteExtendsAbstractMixin() {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect
index 44714c6..b8362ad 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class ClassEqMixin = Super with Mixin;
 abstract class ClassEqMixinClass = Super with MixinClass;
 
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
index 32aae43..6132859 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
   method concreteExtendsAbstractMixin() → void {}
   abstract method abstractExtendsConcreteMixin() → void;
   abstract method abstractExtendsAbstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class MixinClass extends core::Object {
-  synthetic constructor •() → self::MixinClass*
+  synthetic constructor •() → self::MixinClass
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -31,16 +21,6 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   method concreteExtendsConcreteMixin() → void {}
@@ -49,19 +29,9 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ClassEqMixinClass = self::Super with self::MixinClass {
-  synthetic constructor •() → self::ClassEqMixinClass*
+  synthetic constructor •() → self::ClassEqMixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -75,7 +45,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -89,12 +59,12 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
-  synthetic constructor •() → self::ClassExtendsMixinClass*
+  synthetic constructor •() → self::ClassExtendsMixinClass
     : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
     ;
 }
 abstract class ClassEqMixin = self::Super with self::Mixin {
-  synthetic constructor •() → self::ClassEqMixin*
+  synthetic constructor •() → self::ClassEqMixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -108,7 +78,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -122,21 +92,21 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
-  synthetic constructor •() → self::ClassExtendsMixin*
+  synthetic constructor •() → self::ClassExtendsMixin
     : super self::_ClassExtendsMixin&Super&Mixin::•()
     ;
 }
 abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
-  synthetic constructor •() → self::SubclassEqMixinClass*
+  synthetic constructor •() → self::SubclassEqMixinClass
     : super self::ClassEqMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() → void};
     super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixinClass::concreteMixin}();
@@ -144,16 +114,16 @@
   }
 }
 abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
-  synthetic constructor •() → self::SubclassExtendsMixinClass*
+  synthetic constructor •() → self::SubclassExtendsMixinClass
     : super self::ClassExtendsMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -161,16 +131,16 @@
   }
 }
 abstract class SubclassEqMixin extends self::ClassEqMixin {
-  synthetic constructor •() → self::SubclassEqMixin*
+  synthetic constructor •() → self::SubclassEqMixin
     : super self::ClassEqMixin::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractMixin}(){() → void};
     super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixin::concreteMixin}();
@@ -178,16 +148,16 @@
   }
 }
 abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
-  synthetic constructor •() → self::SubclassExtendsMixin*
+  synthetic constructor •() → self::SubclassExtendsMixin
     : super self::ClassExtendsMixin::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect
index 32aae43..6132859 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
   method concreteExtendsAbstractMixin() → void {}
   abstract method abstractExtendsConcreteMixin() → void;
   abstract method abstractExtendsAbstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class MixinClass extends core::Object {
-  synthetic constructor •() → self::MixinClass*
+  synthetic constructor •() → self::MixinClass
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -31,16 +21,6 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   method concreteExtendsConcreteMixin() → void {}
@@ -49,19 +29,9 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ClassEqMixinClass = self::Super with self::MixinClass {
-  synthetic constructor •() → self::ClassEqMixinClass*
+  synthetic constructor •() → self::ClassEqMixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -75,7 +45,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -89,12 +59,12 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
-  synthetic constructor •() → self::ClassExtendsMixinClass*
+  synthetic constructor •() → self::ClassExtendsMixinClass
     : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
     ;
 }
 abstract class ClassEqMixin = self::Super with self::Mixin {
-  synthetic constructor •() → self::ClassEqMixin*
+  synthetic constructor •() → self::ClassEqMixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -108,7 +78,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -122,21 +92,21 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
-  synthetic constructor •() → self::ClassExtendsMixin*
+  synthetic constructor •() → self::ClassExtendsMixin
     : super self::_ClassExtendsMixin&Super&Mixin::•()
     ;
 }
 abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
-  synthetic constructor •() → self::SubclassEqMixinClass*
+  synthetic constructor •() → self::SubclassEqMixinClass
     : super self::ClassEqMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() → void};
     super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixinClass::concreteMixin}();
@@ -144,16 +114,16 @@
   }
 }
 abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
-  synthetic constructor •() → self::SubclassExtendsMixinClass*
+  synthetic constructor •() → self::SubclassExtendsMixinClass
     : super self::ClassExtendsMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -161,16 +131,16 @@
   }
 }
 abstract class SubclassEqMixin extends self::ClassEqMixin {
-  synthetic constructor •() → self::SubclassEqMixin*
+  synthetic constructor •() → self::SubclassEqMixin
     : super self::ClassEqMixin::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractMixin}(){() → void};
     super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixin::concreteMixin}();
@@ -178,16 +148,16 @@
   }
 }
 abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
-  synthetic constructor •() → self::SubclassExtendsMixin*
+  synthetic constructor •() → self::SubclassExtendsMixin
     : super self::ClassExtendsMixin::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.outline.expect
index 8f9542d..781d4f5 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     ;
   method concreteExtendsConcreteMixin() → void
     ;
@@ -11,19 +11,9 @@
     ;
   abstract method abstractExtendsConcreteMixin() → void;
   abstract method abstractExtendsAbstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class MixinClass extends core::Object {
-  synthetic constructor •() → self::MixinClass*
+  synthetic constructor •() → self::MixinClass
     ;
   method concreteExtendsConcreteMixin() → void
     ;
@@ -34,16 +24,6 @@
     ;
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   method concreteExtendsConcreteMixin() → void
@@ -55,19 +35,9 @@
     ;
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ClassEqMixinClass = self::Super with self::MixinClass {
-  synthetic constructor •() → self::ClassEqMixinClass*
+  synthetic constructor •() → self::ClassEqMixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -81,7 +51,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -95,11 +65,11 @@
   abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
 }
 abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
-  synthetic constructor •() → self::ClassExtendsMixinClass*
+  synthetic constructor •() → self::ClassExtendsMixinClass
     ;
 }
 abstract class ClassEqMixin = self::Super with self::Mixin {
-  synthetic constructor •() → self::ClassEqMixin*
+  synthetic constructor •() → self::ClassEqMixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -113,7 +83,7 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin
     : super self::Super::•()
     ;
   mixin-super-stub method concreteExtendsConcreteMixin() → void
@@ -127,29 +97,29 @@
   abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
 }
 abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
-  synthetic constructor •() → self::ClassExtendsMixin*
+  synthetic constructor •() → self::ClassExtendsMixin
     ;
 }
 abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
-  synthetic constructor •() → self::SubclassEqMixinClass*
+  synthetic constructor •() → self::SubclassEqMixinClass
     ;
   method method() → dynamic
     ;
 }
 abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
-  synthetic constructor •() → self::SubclassExtendsMixinClass*
+  synthetic constructor •() → self::SubclassExtendsMixinClass
     ;
   method method() → dynamic
     ;
 }
 abstract class SubclassEqMixin extends self::ClassEqMixin {
-  synthetic constructor •() → self::SubclassEqMixin*
+  synthetic constructor •() → self::SubclassEqMixin
     ;
   method method() → dynamic
     ;
 }
 abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
-  synthetic constructor •() → self::SubclassExtendsMixin*
+  synthetic constructor •() → self::SubclassExtendsMixin
     ;
   method method() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
index 3b87509..1350fad 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
   method concreteExtendsAbstractMixin() → void {}
   abstract method abstractExtendsConcreteMixin() → void;
   abstract method abstractExtendsAbstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class MixinClass extends core::Object {
-  synthetic constructor •() → self::MixinClass*
+  synthetic constructor •() → self::MixinClass
     : super core::Object::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -31,16 +21,6 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   method concreteExtendsConcreteMixin() → void {}
@@ -49,19 +29,9 @@
   method abstractExtendsConcreteMixin() → void {}
   abstract method abstractExtendsAbstractMixin() → void;
   abstract method abstractMixin() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class ClassEqMixinClass extends self::Super implements self::MixinClass /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::ClassEqMixinClass*
+  synthetic constructor •() → self::ClassEqMixinClass
     : super self::Super::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -72,7 +42,7 @@
   abstract method abstractMixin() → void;
 }
 abstract class _ClassExtendsMixinClass&Super&MixinClass extends self::Super implements self::MixinClass /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass
     : super self::Super::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -83,12 +53,12 @@
   abstract method abstractMixin() → void;
 }
 abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
-  synthetic constructor •() → self::ClassExtendsMixinClass*
+  synthetic constructor •() → self::ClassExtendsMixinClass
     : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
     ;
 }
 abstract class ClassEqMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::ClassEqMixin*
+  synthetic constructor •() → self::ClassEqMixin
     : super self::Super::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -99,7 +69,7 @@
   abstract method abstractMixin() → void;
 }
 abstract class _ClassExtendsMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin
     : super self::Super::•()
     ;
   method concreteExtendsConcreteMixin() → void {}
@@ -110,21 +80,21 @@
   abstract method abstractMixin() → void;
 }
 abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
-  synthetic constructor •() → self::ClassExtendsMixin*
+  synthetic constructor •() → self::ClassExtendsMixin
     : super self::_ClassExtendsMixin&Super&Mixin::•()
     ;
 }
 abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
-  synthetic constructor •() → self::SubclassEqMixinClass*
+  synthetic constructor •() → self::SubclassEqMixinClass
     : super self::ClassEqMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() → void};
     super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixinClass::concreteMixin}();
@@ -132,16 +102,16 @@
   }
 }
 abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
-  synthetic constructor •() → self::SubclassExtendsMixinClass*
+  synthetic constructor •() → self::SubclassExtendsMixinClass
     : super self::ClassExtendsMixinClass::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -149,16 +119,16 @@
   }
 }
 abstract class SubclassEqMixin extends self::ClassEqMixin {
-  synthetic constructor •() → self::SubclassEqMixin*
+  synthetic constructor •() → self::SubclassEqMixin
     : super self::ClassEqMixin::•()
     ;
   method method() → dynamic {
-    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::concreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::ClassEqMixin::abstractMixin}(){() → void};
     super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::ClassEqMixin::concreteMixin}();
@@ -166,16 +136,16 @@
   }
 }
 abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
-  synthetic constructor •() → self::SubclassExtendsMixin*
+  synthetic constructor •() → self::SubclassExtendsMixin
     : super self::ClassExtendsMixin::•()
     ;
   method method() → dynamic {
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
-    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() → void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() → void};
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
     super.{self::Super::concreteExtendsAbstractMixin}();
     super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart b/pkg/front_end/testcases/general/mixin_super_repeated.dart
index f8fcad7..e9453fd 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class M {
   var m;
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
index 9975f5c..e92d32e 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class M {
   var m;
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
index 5f64874..2d9c4d4 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class M {
   var m;
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
index 526ec74..5ed308d 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M extends core::Object {
   field dynamic m = null;
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N extends self::M {
-  synthetic constructor •() → self::N*
+  synthetic constructor •() → self::N
     : super self::M::•()
     ;
   set superM(dynamic value) → void {
@@ -29,22 +19,12 @@
     return super.{self::M::m};
 }
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Named&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M*
+  synthetic constructor •() → self::_Named&S&M
     : super self::S::•()
     ;
   mixin-super-stub get m() → dynamic
@@ -53,7 +33,7 @@
     return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M&N*
+  synthetic constructor •() → self::_Named&S&M&N
     : super self::_Named&S&M::•()
     ;
   mixin-super-stub get superM() → dynamic
@@ -62,7 +42,7 @@
     return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
-  synthetic constructor •() → self::Named*
+  synthetic constructor •() → self::Named
     : super self::_Named&S&M&N::•()
     ;
   mixin-super-stub get m() → dynamic
@@ -71,13 +51,13 @@
     return super.{self::M::m} = value;
 }
 static method main() → dynamic {
-  self::Named* named = new self::Named::•();
+  self::Named named = new self::Named::•();
   named.{self::Named::m} = 42;
   named.{self::_Named&S&M&N::superM} = 87;
-  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
index 526ec74..5ed308d 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M extends core::Object {
   field dynamic m = null;
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N extends self::M {
-  synthetic constructor •() → self::N*
+  synthetic constructor •() → self::N
     : super self::M::•()
     ;
   set superM(dynamic value) → void {
@@ -29,22 +19,12 @@
     return super.{self::M::m};
 }
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Named&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M*
+  synthetic constructor •() → self::_Named&S&M
     : super self::S::•()
     ;
   mixin-super-stub get m() → dynamic
@@ -53,7 +33,7 @@
     return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M&N*
+  synthetic constructor •() → self::_Named&S&M&N
     : super self::_Named&S&M::•()
     ;
   mixin-super-stub get superM() → dynamic
@@ -62,7 +42,7 @@
     return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
-  synthetic constructor •() → self::Named*
+  synthetic constructor •() → self::Named
     : super self::_Named&S&M&N::•()
     ;
   mixin-super-stub get m() → dynamic
@@ -71,13 +51,13 @@
     return super.{self::M::m} = value;
 }
 static method main() → dynamic {
-  self::Named* named = new self::Named::•();
+  self::Named named = new self::Named::•();
   named.{self::Named::m} = 42;
   named.{self::_Named&S&M&N::superM} = 87;
-  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
index 1a4626c..48f57f8 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M extends core::Object {
   field dynamic m;
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N extends self::M {
-  synthetic constructor •() → self::N*
+  synthetic constructor •() → self::N
     ;
   set superM(dynamic value) → void
     ;
@@ -26,21 +16,11 @@
     ;
 }
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Named&S&M = self::S with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M*
+  synthetic constructor •() → self::_Named&S&M
     : super self::S::•()
     ;
   mixin-super-stub get m() → dynamic
@@ -49,7 +29,7 @@
     return super.{self::M::m} = value;
 }
 abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Named&S&M&N*
+  synthetic constructor •() → self::_Named&S&M&N
     : super self::_Named&S&M::•()
     ;
   mixin-super-stub get superM() → dynamic
@@ -58,7 +38,7 @@
     return super.{self::N::superM} = value;
 }
 class Named = self::_Named&S&M&N with self::M {
-  synthetic constructor •() → self::Named*
+  synthetic constructor •() → self::Named
     : super self::_Named&S&M&N::•()
     ;
   mixin-super-stub get m() → dynamic
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
index e0aa9ba..94d7058 100644
--- a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M extends core::Object {
   field dynamic m = null;
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class N extends self::M {
-  synthetic constructor •() → self::N*
+  synthetic constructor •() → self::N
     : super self::M::•()
     ;
   set superM(dynamic value) → void {
@@ -29,28 +19,18 @@
     return super.{self::M::m};
 }
 class S extends core::Object {
-  synthetic constructor •() → self::S*
+  synthetic constructor •() → self::S
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _Named&S&M extends self::S implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
   field dynamic m = null;
-  synthetic constructor •() → self::_Named&S&M*
+  synthetic constructor •() → self::_Named&S&M
     : super self::S::•()
     ;
 }
 abstract class _Named&S&M&N extends self::_Named&S&M implements self::N /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Named&S&M&N*
+  synthetic constructor •() → self::_Named&S&M&N
     : super self::_Named&S&M::•()
     ;
   get superM() → dynamic
@@ -61,18 +41,18 @@
 }
 class Named extends self::_Named&S&M&N implements self::M /*isEliminatedMixin*/  {
   field dynamic m = null;
-  synthetic constructor •() → self::Named*
+  synthetic constructor •() → self::Named
     : super self::_Named&S&M&N::•()
     ;
 }
 static method main() → dynamic {
-  self::Named* named = new self::Named::•();
+  self::Named named = new self::Named::•();
   named.{self::Named::m} = 42;
   named.{self::_Named&S&M&N::superM} = 87;
-  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 42)) {
     throw "Bad mixin translation of set:superM";
   }
-  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object) → core::bool} 87)) {
     throw "Bad mixin translation of get:superM";
   }
 }
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart b/pkg/front_end/testcases/general/mixin_with_static_member.dart
index 2737bb4..954d649 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart
@@ -1,15 +1,15 @@
 // 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.
-// @dart=2.9
+
 class A extends B with M {}
 
 class B {
-  final Object m = null;
+  final Object m = new Object();
 }
 
 class M {
-  static Object m() => null;
+  static Object m() => new Object();
 }
 
 main() {
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline.expect
index 4b1e84f..460aed5 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 class A extends B with M {}
 
 class B {
-  final Object m = null;
+  final Object m = new Object();
 }
 
 class M {
-  static Object m() => null;
+  static Object m() => new Object();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline_modelled.expect
index 4b1e84f..460aed5 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 class A extends B with M {}
 
 class B {
-  final Object m = null;
+  final Object m = new Object();
 }
 
 class M {
-  static Object m() => null;
+  static Object m() => new Object();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.expect
index e89e537..bfa8188 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _A&B&M = self::B with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&B&M*
+  synthetic constructor •() → self::_A&B&M
     : super self::B::•()
     ;
 }
 class A extends self::_A&B&M {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&B&M::•()
     ;
 }
 class B extends core::Object {
-  final field core::Object* m = null;
-  synthetic constructor •() → self::B*
+  final field core::Object m = new core::Object::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  static method m() → core::Object*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method m() → core::Object
+    return new core::Object::•();
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect
index e89e537..bfa8188 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _A&B&M = self::B with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&B&M*
+  synthetic constructor •() → self::_A&B&M
     : super self::B::•()
     ;
 }
 class A extends self::_A&B&M {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&B&M::•()
     ;
 }
 class B extends core::Object {
-  final field core::Object* m = null;
-  synthetic constructor •() → self::B*
+  final field core::Object m = new core::Object::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  static method m() → core::Object*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method m() → core::Object
+    return new core::Object::•();
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.outline.expect
index 8799c3a..2b5e162 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.outline.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _A&B&M = self::B with self::M /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A&B&M*
+  synthetic constructor •() → self::_A&B&M
     : super self::B::•()
     ;
 }
 class A extends self::_A&B&M {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
 }
 class B extends core::Object {
-  final field core::Object* m;
-  synthetic constructor •() → self::B*
+  final field core::Object m;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     ;
-  static method m() → core::Object*
+  static method m() → core::Object
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.transformed.expect
index 29e0464..d81db03 100644
--- a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.transformed.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class _A&B&M extends self::B implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A&B&M*
+  synthetic constructor •() → self::_A&B&M
     : super self::B::•()
     ;
-  static method m() → core::Object*
-    return null;
+  static method m() → core::Object
+    return new core::Object::•();
 }
 class A extends self::_A&B&M {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::_A&B&M::•()
     ;
 }
 class B extends core::Object {
-  final field core::Object* m = null;
-  synthetic constructor •() → self::B*
+  final field core::Object m = new core::Object::•();
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class M extends core::Object {
-  synthetic constructor •() → self::M*
+  synthetic constructor •() → self::M
     : super core::Object::•()
     ;
-  static method m() → core::Object*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method m() → core::Object
+    return new core::Object::•();
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart b/pkg/front_end/testcases/general/named_function_scope.dart
index 0a78452..bfb0a73 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart
+++ b/pkg/front_end/testcases/general/named_function_scope.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class T {}
 
 class V {}
@@ -53,17 +53,17 @@
   }
   {
     T t;
-    T T() {}
+    T T() => throw '';
   }
   {
-    T T() {}
+    T T() => throw '';
   }
   {
     T t;
-    T T(T t) {}
+    T T(T t) => t;
   }
   {
-    T T(T t) {}
+    T T(T t) => t;
   }
   {
     void T(T t) {}
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline.expect b/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline.expect
index 9fe26ce..b05a61b 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class T {}
 
 class V {}
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline_modelled.expect
index 9fe26ce..b05a61b 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class T {}
 
 class V {}
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
index 8ae3c40..18cd85e 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -50,31 +50,31 @@
 //               ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:55:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:59:5: Context: Previous use of 'T'.
-//     T T() {}
+//     T T() => throw '';
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:62:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:66:5: Context: Previous use of 'T'.
-//     T T(T t) {}
+//     T T(T t) => t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:69:12: Error: 'T' isn't a type.
@@ -85,38 +85,18 @@
 import "dart:core" as core;
 
 class T extends core::Object {
-  synthetic constructor •() → self::T*
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class V extends core::Object {
-  synthetic constructor •() → self::V*
+  synthetic constructor •() → self::V
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::T* t;
-  self::V* v;
+  self::T t;
+  self::V v;
   {
     function T() → Null {}
   }
@@ -124,68 +104,72 @@
     dynamic v;
   }
   {
-    self::T* t;
-    () →* Null x = let final () →* Null T = () → Null {} in T;
+    self::T t;
+    () → Null x = let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
     var V;
         ^";
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
     var V = null;
         ^" in null;
   }
   {
-    () →* Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () → Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () →* Null T = () → Null {} in T;
+              ^" in let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
+    self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
       ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object? = dynamic>() → Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
+            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
index 8ae3c40..18cd85e 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -50,31 +50,31 @@
 //               ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:55:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:59:5: Context: Previous use of 'T'.
-//     T T() {}
+//     T T() => throw '';
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:62:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:66:5: Context: Previous use of 'T'.
-//     T T(T t) {}
+//     T T(T t) => t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:69:12: Error: 'T' isn't a type.
@@ -85,38 +85,18 @@
 import "dart:core" as core;
 
 class T extends core::Object {
-  synthetic constructor •() → self::T*
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class V extends core::Object {
-  synthetic constructor •() → self::V*
+  synthetic constructor •() → self::V
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::T* t;
-  self::V* v;
+  self::T t;
+  self::V v;
   {
     function T() → Null {}
   }
@@ -124,68 +104,72 @@
     dynamic v;
   }
   {
-    self::T* t;
-    () →* Null x = let final () →* Null T = () → Null {} in T;
+    self::T t;
+    () → Null x = let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
     var V;
         ^";
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
     var V = null;
         ^" in null;
   }
   {
-    () →* Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () → Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () →* Null T = () → Null {} in T;
+              ^" in let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
+    self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
       ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object? = dynamic>() → Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
+            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.outline.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.outline.expect
index 7d88d26..6730729 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.outline.expect
@@ -1,34 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class T extends core::Object {
-  synthetic constructor •() → self::T*
+  synthetic constructor •() → self::T
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class V extends core::Object {
-  synthetic constructor •() → self::V*
+  synthetic constructor •() → self::V
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
index c14d8e6..b2b67d2 100644
--- a/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -50,31 +50,31 @@
 //               ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:55:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T() {}
+//     T T() => throw '';
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:59:5: Context: Previous use of 'T'.
-//     T T() {}
+//     T T() => throw '';
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:62:5: Context: Previous use of 'T'.
 //     T t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-//     T T(T t) {}
+//     T T(T t) => t;
 //       ^
 // pkg/front_end/testcases/general/named_function_scope.dart:66:5: Context: Previous use of 'T'.
-//     T T(T t) {}
+//     T T(T t) => t;
 //     ^
 //
 // pkg/front_end/testcases/general/named_function_scope.dart:69:12: Error: 'T' isn't a type.
@@ -85,38 +85,18 @@
 import "dart:core" as core;
 
 class T extends core::Object {
-  synthetic constructor •() → self::T*
+  synthetic constructor •() → self::T
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class V extends core::Object {
-  synthetic constructor •() → self::V*
+  synthetic constructor •() → self::V
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method test() → dynamic {
-  self::T* t;
-  self::V* v;
+  self::T t;
+  self::V v;
   {
     function T() → Null {}
   }
@@ -124,68 +104,72 @@
     dynamic v;
   }
   {
-    self::T* t;
-    () →* Null x = let final () →* Null T = () → Null {} in T;
+    self::T t;
+    () → Null x = let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
     var V;
         ^";
   }
   {
-    self::V* v;
+    self::V v;
     invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
     var V = null;
         ^" in null;
   }
   {
-    () →* Null x = let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    () → Null x = let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
     var x = T T() {};
-              ^" in let final () →* Null T = () → Null {} in T;
+              ^" in let final () → Null T = () → Null {} in T;
   }
   {
-    self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
+    self::V V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
     V V;
       ^";
   }
   {
-    <T extends core::Object* = dynamic>() →* Null x = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    <T extends core::Object? = dynamic>() → Null x = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
     var x = T<T>() {};
-            ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
+            ^" in let final <T extends core::Object? = dynamic>() → Null T = <T extends core::Object? = dynamic>() → Null {} in T;
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T() {}
+    T T() => throw '';
       ^";
-      function T() → self::T* {}
+      function T() → self::T
+        return throw "";
     }
   }
   {
-    self::T* t;
+    self::T t;
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
     {
       invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
-    T T(T t) {}
+    T T(T t) => t;
       ^";
-      function T(self::T* t) → self::T* {}
+      function T(self::T t) → self::T
+        return t;
     }
   }
   {
diff --git a/pkg/front_end/testcases/general/named_parameters.dart b/pkg/front_end/testcases/general/named_parameters.dart
index a2685613..a1892c6 100644
--- a/pkg/front_end/testcases/general/named_parameters.dart
+++ b/pkg/front_end/testcases/general/named_parameters.dart
@@ -1,10 +1,10 @@
 // Copyright (c) 2016, 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.
+
 class Superclass {
   foo({alpha, beta}) {}
   bar({beta, alpha}) {}
-// @dart=2.9
   namedCallback(callback({String alpha, int beta})) {
     callback(alpha: 'one', beta: 2);
     callback(beta: 1, alpha: 'two');
diff --git a/pkg/front_end/testcases/general/native_as_name.dart b/pkg/front_end/testcases/general/native_as_name.dart
index 02e4156..f22c361a 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart
+++ b/pkg/front_end/testcases/general/native_as_name.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 main() {
   print(new W().native);
   print(new X().native());
@@ -29,5 +29,5 @@
 
 class Z {
   set native(String s) => f = s;
-  String f;
+  String? f;
 }
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.textual_outline.expect b/pkg/front_end/testcases/general/native_as_name.dart.textual_outline.expect
index 30a7550..7617a87 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 
 class W {
@@ -21,5 +20,5 @@
 
 class Z {
   set native(String s) => f = s;
-  String f;
+  String? f;
 }
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/native_as_name.dart.textual_outline_modelled.expect
index 0517e7f..d44851f 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Y1 {
   String get native;
 }
@@ -18,7 +17,7 @@
 }
 
 class Z {
-  String f;
+  String? f;
   set native(String s) => f = s;
 }
 
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
index f85423d..236f30c 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.expect
@@ -1,89 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class W extends core::Object {
-  field core::String* native;
-  constructor •() → self::W*
+  field core::String native;
+  constructor •() → self::W
     : self::W::native = "field", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method native() → core::String*
+  method native() → core::String
     return "method";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Y1 extends core::Object {
-  synthetic constructor •() → self::Y1*
+  synthetic constructor •() → self::Y1
     : super core::Object::•()
     ;
-  abstract get native() → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get native() → core::String;
 }
 class Y2 extends self::Y1 {
-  synthetic constructor •() → self::Y2*
+  synthetic constructor •() → self::Y2
     : super self::Y1::•()
     ;
   @#C1
-  get native() → core::String*
+  get native() → core::String
     return "getter";
 }
 class Z extends core::Object {
-  field core::String* f = null;
-  synthetic constructor •() → self::Z*
+  field core::String? f = null;
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  set native(core::String* s) → void
+  set native(core::String s) → void
     return this.{self::Z::f} = s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::W::•().{self::W::native}{core::String*});
-  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
-  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
-  core::print((let final self::Z* #t1 = new self::Z::•() in block {
+  core::print(new self::W::•().{self::W::native}{core::String});
+  core::print(new self::X::•().{self::X::native}(){() → core::String});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String});
+  core::print((let final self::Z #t1 = new self::Z::•() in block {
     #t1.{self::Z::native} = "setter";
-  } =>#t1).{self::Z::f}{core::String*});
+  } =>#t1).{self::Z::f}{core::String?});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect
index f85423d..236f30c 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect
@@ -1,89 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class W extends core::Object {
-  field core::String* native;
-  constructor •() → self::W*
+  field core::String native;
+  constructor •() → self::W
     : self::W::native = "field", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method native() → core::String*
+  method native() → core::String
     return "method";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Y1 extends core::Object {
-  synthetic constructor •() → self::Y1*
+  synthetic constructor •() → self::Y1
     : super core::Object::•()
     ;
-  abstract get native() → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get native() → core::String;
 }
 class Y2 extends self::Y1 {
-  synthetic constructor •() → self::Y2*
+  synthetic constructor •() → self::Y2
     : super self::Y1::•()
     ;
   @#C1
-  get native() → core::String*
+  get native() → core::String
     return "getter";
 }
 class Z extends core::Object {
-  field core::String* f = null;
-  synthetic constructor •() → self::Z*
+  field core::String? f = null;
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  set native(core::String* s) → void
+  set native(core::String s) → void
     return this.{self::Z::f} = s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::W::•().{self::W::native}{core::String*});
-  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
-  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
-  core::print((let final self::Z* #t1 = new self::Z::•() in block {
+  core::print(new self::W::•().{self::W::native}{core::String});
+  core::print(new self::X::•().{self::X::native}(){() → core::String});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String});
+  core::print((let final self::Z #t1 = new self::Z::•() in block {
     #t1.{self::Z::native} = "setter";
-  } =>#t1).{self::Z::f}{core::String*});
+  } =>#t1).{self::Z::f}{core::String?});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.outline.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.outline.expect
index 27aedb4..bbae0cc 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.outline.expect
@@ -1,76 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class W extends core::Object {
-  field core::String* native;
-  constructor •() → self::W*
+  field core::String native;
+  constructor •() → self::W
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     ;
-  method native() → core::String*
+  method native() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Y1 extends core::Object {
-  synthetic constructor •() → self::Y1*
+  synthetic constructor •() → self::Y1
     ;
-  abstract get native() → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get native() → core::String;
 }
 class Y2 extends self::Y1 {
-  synthetic constructor •() → self::Y2*
+  synthetic constructor •() → self::Y2
     ;
   @core::override
-  get native() → core::String*
+  get native() → core::String
     ;
 }
 class Z extends core::Object {
-  field core::String* f;
-  synthetic constructor •() → self::Z*
+  field core::String? f;
+  synthetic constructor •() → self::Z
     ;
-  set native(core::String* s) → void
+  set native(core::String s) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
index f85423d..236f30c 100644
--- a/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.transformed.expect
@@ -1,89 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class W extends core::Object {
-  field core::String* native;
-  constructor •() → self::W*
+  field core::String native;
+  constructor •() → self::W
     : self::W::native = "field", super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method native() → core::String*
+  method native() → core::String
     return "method";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Y1 extends core::Object {
-  synthetic constructor •() → self::Y1*
+  synthetic constructor •() → self::Y1
     : super core::Object::•()
     ;
-  abstract get native() → core::String*;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get native() → core::String;
 }
 class Y2 extends self::Y1 {
-  synthetic constructor •() → self::Y2*
+  synthetic constructor •() → self::Y2
     : super self::Y1::•()
     ;
   @#C1
-  get native() → core::String*
+  get native() → core::String
     return "getter";
 }
 class Z extends core::Object {
-  field core::String* f = null;
-  synthetic constructor •() → self::Z*
+  field core::String? f = null;
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  set native(core::String* s) → void
+  set native(core::String s) → void
     return this.{self::Z::f} = s;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::print(new self::W::•().{self::W::native}{core::String*});
-  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
-  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
-  core::print((let final self::Z* #t1 = new self::Z::•() in block {
+  core::print(new self::W::•().{self::W::native}{core::String});
+  core::print(new self::X::•().{self::X::native}(){() → core::String});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String});
+  core::print((let final self::Z #t1 = new self::Z::•() in block {
     #t1.{self::Z::native} = "setter";
-  } =>#t1).{self::Z::f}{core::String*});
+  } =>#t1).{self::Z::f}{core::String?});
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart
index 915e7dc..e797b0e 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 const int foo = const int.fromEnvironment("fisk");
 
 class A {
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline.expect
index 31ede27..0bad45d 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int foo = const int.fromEnvironment("fisk");
 
 class A {
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline_modelled.expect
index 6e81cb6..c2ae67e 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A(this.bar);
   final int bar;
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.expect
index ddcf830..e401da0 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.expect
@@ -1,58 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  final field core::int* bar;
-  const constructor •(core::int* bar) → self::A*
+  final field core::int bar;
+  const constructor •(core::int bar) → self::A
     : self::A::bar = bar, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object /*hasConstConstructor*/  {
-  final field self::A* baz;
-  const constructor •(self::A* baz) → self::B*
+  final field self::A baz;
+  const constructor •(self::A baz) → self::B
     : self::B::baz = baz, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
     new self::B::•(new self::A::•(#C1));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* foo = #C1;
+static const field core::int foo = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect
index ddcf830..e401da0 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect
@@ -1,58 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  final field core::int* bar;
-  const constructor •(core::int* bar) → self::A*
+  final field core::int bar;
+  const constructor •(core::int bar) → self::A
     : self::A::bar = bar, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object /*hasConstConstructor*/  {
-  final field self::A* baz;
-  const constructor •(self::A* baz) → self::B*
+  final field self::A baz;
+  const constructor •(self::A baz) → self::B
     : self::B::baz = baz, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
     new self::B::•(new self::A::•(#C1));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* foo = #C1;
+static const field core::int foo = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
index 2c8cde5..fdbe3e3 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.outline.expect
@@ -1,56 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  final field core::int* bar;
-  const constructor •(core::int* bar) → self::A*
+  final field core::int bar;
+  const constructor •(core::int bar) → self::A
     : self::A::bar = bar, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object /*hasConstConstructor*/  {
-  final field self::A* baz;
-  const constructor •(self::A* baz) → self::B*
+  final field self::A baz;
+  const constructor •(self::A baz) → self::B
     : self::B::baz = baz, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method fun() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* foo = const core::int::fromEnvironment("fisk");
+static const field core::int foo = const core::int::fromEnvironment("fisk");
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.transformed.expect
index ddcf830..e401da0 100644
--- a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.transformed.expect
@@ -1,58 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  final field core::int* bar;
-  const constructor •(core::int* bar) → self::A*
+  final field core::int bar;
+  const constructor •(core::int bar) → self::A
     : self::A::bar = bar, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object /*hasConstConstructor*/  {
-  final field self::A* baz;
-  const constructor •(self::A* baz) → self::B*
+  final field self::A baz;
+  const constructor •(self::A baz) → self::B
     : self::B::baz = baz, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method fun() → dynamic {
     new self::B::•(new self::A::•(#C1));
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* foo = #C1;
+static const field core::int foo = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nested_property_set.dart b/pkg/front_end/testcases/general/nested_property_set.dart
index 52559f0..ba6989b 100644
--- a/pkg/front_end/testcases/general/nested_property_set.dart
+++ b/pkg/front_end/testcases/general/nested_property_set.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 class NumField {
   num field;
 }
diff --git a/pkg/front_end/testcases/general/nested_variable_set.dart b/pkg/front_end/testcases/general/nested_variable_set.dart
index b0fc13d..915afb3 100644
--- a/pkg/front_end/testcases/general/nested_variable_set.dart
+++ b/pkg/front_end/testcases/general/nested_variable_set.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 main() {
   int intLocal1;
   int intLocal2;
diff --git a/pkg/front_end/testcases/general/nested_variance.dart b/pkg/front_end/testcases/general/nested_variance.dart
index 94f1a05..c1d23d3 100644
--- a/pkg/front_end/testcases/general/nested_variance.dart
+++ b/pkg/front_end/testcases/general/nested_variance.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // Testing that i2b and checks for correct super-boundedness are applied
 // to type arguments, taking the variance of type parameters into account.
 
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart b/pkg/front_end/testcases/general/nested_variance2.dart
new file mode 100644
index 0000000..e5d8f3c
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart
@@ -0,0 +1,242 @@
+// 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.
+
+// Testing that i2b and checks for correct super-boundedness are applied
+// to type arguments, taking the variance of type parameters into account.
+
+// Standard type comparison support.
+
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw '';
+
+// Material specific to this test.
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+
+class Acov<X extends Fcov<Y>, Y> {}
+
+class Acon<X extends Fcon<Y>, Y> {}
+
+class Ainv<X extends Finv<Y>, Y> {}
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class AcovBound<X extends FcovBound<Y>, Y extends num> {}
+
+class AconBound<X extends FconBound<Y>, Y extends num> {}
+
+class AinvBound<X extends FinvBound<Y>, Y extends num> {}
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+
+class AcovCyclicBound<X extends FcovCyclicBound<Y>, Y extends A<Y>> {}
+
+class AconCyclicBound<X extends FconCyclicBound<Y>, Y extends A<Y>> {}
+
+class AinvCyclicBound<X extends FinvCyclicBound<Y>, Y extends A<Y>> {}
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AconCyclicCoBound<X extends FconCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class B<X> {}
+
+void testTypeAliasAsTypeArgument(
+  Acov source1,
+  Acon source2,
+  Ainv source3,
+  AcovBound source4,
+  AconBound source5,
+  AinvBound source6,
+  AcovCyclicBound source7,
+  AconCyclicBound source8,
+  AcovCyclicCoBound source10,
+  AconCyclicCoBound source11,
+) {
+  // I2b: Use bounds (Fcov<Y>, dynamic), then replace covariant occurrence
+  // (of `Y` in `Acov<Fcov<Y>, _>`) by `Y`s value `dynamic`. Resulting type
+  // `Acov<Fcov<dynamic>, dynamic>` is regular-bounded.
+  var fsource1 = toF(source1);
+  F<Acov<Fcov<dynamic>, dynamic>> target1 = fsource1;
+
+  // I2b: Use bounds (Fcon<Y>, dynamic), then replace contravariant occurrence
+  // (of `Y` in `Acon<Fcon<Y>, _>`) by `Null`. Resulting type
+  // is super-bounded: Acon<Fcon<Object>, Null> is regular-bounded.
+  var fsource2 = toF(source2);
+  F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+
+  // I2b: Use bounds (Finv<Y>, dynamic) then replace invariant occurrence
+  // (of `Y` in `Ainv<Finv<Y>, _>`) by `Y`s value `dynamic`. Resulting type
+  // `Ainv<Finv<dynamic>, dynamic>` is regular-bounded.
+  var fsource3 = toF(source3);
+  F<Ainv<Finv<dynamic>, dynamic>> target3 = fsource3;
+
+  // I2b: Use bounds (FcovBound<Y>, num), then replace covariant occurrence
+  // (of `Y` in `AcovBound<FcovBound<Y>, _>`) by `Y`s value `num`.
+  // Resulting type `AcovBound<FcovBound<num>, num>` is regular-bounded.
+  var fsource4 = toF(source4);
+  F<AcovBound<FcovBound<num>, num>> target4 = fsource4;
+
+  // I2b: Use bounds (FconBound<Y>, num), then replace contravariant occurrence
+  // of `Y` in `AconBound<FconBound<Y>, _>` by `Never`. Resulting type is
+  // super-bounded: AconBound<FconBound<Object>, num> is regular-bounded.
+  var fsource5 = toF(source5);
+  F<AconBound<FconBound<Never>, num>> target5 = fsource5;
+
+  // I2b: Use bounds (FinvBound<Y>, num), then replace invariant occurrence
+  // of `Y` in `AinvBound<FinvBound<Y>, _>` by `Y`s value `num`. Resulting
+  // type `AinvBound<FinvBound<num>, num>` is regular-bounded.
+  var fsource6 = toF(source6);
+  F<AinvBound<FinvBound<num>, num>> target6 = fsource6;
+
+  // I2b: Use bounds (FcovCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AcovCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace covariant occurrence of `Y` in
+  // `AcovCyclicBound<FcovCyclicBound<Y>, _>` by `Y`s value `A<dynamic>`.
+  // Resulting type `AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>>`
+  // is regular-bounded.
+  var fsource7 = toF(source7);
+  F<AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>> target7 =
+      fsource7;
+
+  // I2b: Use bounds (FconCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AconCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace contravariant occurrence of `Y` in
+  // `AconCyclicBound<FconCyclicBound<Y>, _>` by `Never`.
+  // Resulting type `AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>>` is
+  // super-bounded because `AconCyclicBound<FconCyclicBound<Object>, A<Null>>>`
+  // is regular-bounded.
+  var fsource8 = toF(source8);
+  F<AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>> target8 = fsource8;
+
+  // I2b: Use bounds (FinvCyclicBound<Y>, A<Y>), then break cycle {Y} by
+  // replacing covariant occurrence of `Y` in `AinvCyclicBound<_, A<Y>>`
+  // by `dynamic`; then replace invariant occurrence of `Y` in
+  // `AinvCyclicBound<FinvCyclicBound<Y>, _>` by `Y`s value `A<dynamic>`.
+  // Resulting type `AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>>`
+  // looks regular-bounded, but contains `FinvCyclicBound<A<dynamic>>` which
+  // is not well-bounded.
+  AinvCyclicBound source9 = throw ''; //# 01: compile-time error
+  // var fsource9 = toF(source9);
+  // F<AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>> target9 =
+  //     fsource9;
+
+  // I2b: Use bounds (FcovCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AcovCyclicCoBound<_, Function(Y)>` by `Never`; then replace covariant
+  // occurrence of `Y` in `AcovCyclicCoBound<FcovCyclicCoBound<Y>, _>` by `Y`s
+  // value `Function(Never)`. Resulting type
+  // `AcovCyclicCoBound<FcovCyclicCoBound<Function(Null)>, Function(Null)>`
+  // is regular-bounded, with subterm `FcovCyclicCoBound<Function(Never)>` which
+  // is super-bounded because `FcovCyclicCoBound<Function(Object)>` is
+  // regular-bounded.
+  var fsource10 = toF(source10);
+  F<AcovCyclicCoBound<FcovCyclicCoBound<Function(Never)>, Function(Never)>>
+      target10 = fsource10;
+
+  // I2b: Use bounds (FconCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AconCyclicCoBound<_, Function(Y)>` by `Never`; then replace contravariant
+  // occurrence of `Y` in `AconCyclicCoBound<FconCyclicCoBound<Y>, _>` by
+  // `Never`. Resulting type
+  // `AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>` is
+  // super-bounded because
+  // `AconCyclicCoBound<FconCyclicCoBound<Object>, Function(Object)>` is
+  // regular-bounded.
+  var fsource11 = toF(source11);
+  F<AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>> target11 =
+      fsource11;
+
+  // I2b: Use bounds (FinvCyclicCoBound<Y>, Function(Y)), then break cycle {Y}
+  // by replacing contravariant occurrence of `Y` in
+  // `AinvCyclicCoBound<_, Function(Y)>` by `Null`; then replace invariant
+  // occurrence of `Y` in `AinvCyclicCoBound<FinvCyclicCoBound<Y>, _>` by `Y`s
+  // value `Function(Null)`.
+  // Resulting type
+  // `AinvCyclicCoBound<FinvCyclicCoBound<Function(Null)>, Function(Null)>>`
+  // looks regular-bounded, but contains `FinvCyclicCoBound<Function(Null)>`
+  // which is not well-bounded.
+  AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+  // var fsource12 = toF(source12);
+  // F<AinvCyclicCoBound<FinvCyclicCoBound<Function(Null)>, Function(Null)>>
+  //     target12 = fsource12;
+}
+
+void testNested(
+  B<Acov> source1,
+  B<Acon> source2,
+  B<Ainv> source3,
+  B<AcovBound> source4,
+  B<AconBound> source5,
+  B<AinvBound> source6,
+  B<AcovCyclicBound> source7,
+  B<AconCyclicBound> source8,
+  B<AcovCyclicCoBound> source10,
+  B<AconCyclicCoBound> source11,
+) {
+  // Everything gets the same treatment when the cases from `testTopLevel`
+  // are duplicated at the nested level in a covariant position.
+
+  var fsource1 = toF(source1);
+  F<B<Acov<Fcov<dynamic>, dynamic>>> target1 = fsource1;
+
+  var fsource2 = toF(source2);
+  F<B<Acon<Fcon<Never>, dynamic>>> target2 = fsource2;
+
+  var fsource3 = toF(source3);
+  F<B<Ainv<Finv<dynamic>, dynamic>>> target3 = fsource3;
+
+  var fsource4 = toF(source4);
+  F<B<AcovBound<FcovBound<num>, num>>> target4 = fsource4;
+
+  var fsource5 = toF(source5);
+  F<B<AconBound<FconBound<Never>, num>>> target5 = fsource5;
+
+  var fsource6 = toF(source6);
+  F<B<AinvBound<FinvBound<num>, num>>> target6 = fsource6;
+
+  var fsource7 = toF(source7);
+  F<B<AcovCyclicBound<FcovCyclicBound<A<dynamic>>, A<dynamic>>>> target7 =
+      fsource7;
+
+  var fsource8 = toF(source8);
+  F<B<AconCyclicBound<FconCyclicBound<Never>, A<dynamic>>>> target8 = fsource8;
+
+  B<AinvCyclicBound> source9 = throw ''; //# 03: compile-time error
+  // var fsource9 = toF(source9);
+  // F<B<AinvCyclicBound<FinvCyclicBound<A<dynamic>>, A<dynamic>>>> target9 =
+  //    fsource9;
+
+  var fsource10 = toF(source10);
+  F<B<AcovCyclicCoBound<FcovCyclicCoBound<Function(Never)>, Function(Never)>>>
+      target10 = fsource10;
+
+  var fsource11 = toF(source11);
+  F<B<AconCyclicCoBound<FconCyclicCoBound<Never>, Function(Never)>>> target11 =
+      fsource11;
+
+  B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+  // var fsource12 = toF(source12);
+  // F<B<AinvCyclicCoBound<FinvCyclicCoBound<Function(Null)>, Function(Null)>>>
+  //     target12 = fsource12;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline.expect b/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline.expect
new file mode 100644
index 0000000..68a9030
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline.expect
@@ -0,0 +1,74 @@
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw '';
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+
+class Acov<X extends Fcov<Y>, Y> {}
+
+class Acon<X extends Fcon<Y>, Y> {}
+
+class Ainv<X extends Finv<Y>, Y> {}
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class AcovBound<X extends FcovBound<Y>, Y extends num> {}
+
+class AconBound<X extends FconBound<Y>, Y extends num> {}
+
+class AinvBound<X extends FinvBound<Y>, Y extends num> {}
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+
+class AcovCyclicBound<X extends FcovCyclicBound<Y>, Y extends A<Y>> {}
+
+class AconCyclicBound<X extends FconCyclicBound<Y>, Y extends A<Y>> {}
+
+class AinvCyclicBound<X extends FinvCyclicBound<Y>, Y extends A<Y>> {}
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AconCyclicCoBound<X extends FconCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class B<X> {}
+
+void testTypeAliasAsTypeArgument(
+  Acov source1,
+  Acon source2,
+  Ainv source3,
+  AcovBound source4,
+  AconBound source5,
+  AinvBound source6,
+  AcovCyclicBound source7,
+  AconCyclicBound source8,
+  AcovCyclicCoBound source10,
+  AconCyclicCoBound source11,
+) {}
+void testNested(
+  B<Acov> source1,
+  B<Acon> source2,
+  B<Ainv> source3,
+  B<AcovBound> source4,
+  B<AconBound> source5,
+  B<AinvBound> source6,
+  B<AcovCyclicBound> source7,
+  B<AconCyclicBound> source8,
+  B<AcovCyclicCoBound> source10,
+  B<AconCyclicCoBound> source11,
+) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b9ddca8
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.textual_outline_modelled.expect
@@ -0,0 +1,71 @@
+F<X> toF<X>(X x) => throw '';
+
+class A<X> {}
+
+class Acon<X extends Fcon<Y>, Y> {}
+
+class AconBound<X extends FconBound<Y>, Y extends num> {}
+
+class AconCyclicBound<X extends FconCyclicBound<Y>, Y extends A<Y>> {}
+
+class AconCyclicCoBound<X extends FconCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class Acov<X extends Fcov<Y>, Y> {}
+
+class AcovBound<X extends FcovBound<Y>, Y extends num> {}
+
+class AcovCyclicBound<X extends FcovCyclicBound<Y>, Y extends A<Y>> {}
+
+class AcovCyclicCoBound<X extends FcovCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class Ainv<X extends Finv<Y>, Y> {}
+
+class AinvBound<X extends FinvBound<Y>, Y extends num> {}
+
+class AinvCyclicBound<X extends FinvCyclicBound<Y>, Y extends A<Y>> {}
+
+class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+}
+
+class B<X> {}
+
+main() {}
+typedef F<X> = void Function<Y extends X>();
+typedef Fcon<X> = Function(X);
+typedef FconBound<X extends num> = Function(X);
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef Fcov<X> = X Function();
+typedef FcovBound<X extends num> = X Function();
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef Finv<X> = X Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+void testNested(
+  B<Acov> source1,
+  B<Acon> source2,
+  B<Ainv> source3,
+  B<AcovBound> source4,
+  B<AconBound> source5,
+  B<AinvBound> source6,
+  B<AcovCyclicBound> source7,
+  B<AconCyclicBound> source8,
+  B<AcovCyclicCoBound> source10,
+  B<AconCyclicCoBound> source11,
+) {}
+void testTypeAliasAsTypeArgument(
+  Acov source1,
+  Acon source2,
+  Ainv source3,
+  AcovBound source4,
+  AconBound source5,
+  AinvBound source6,
+  AcovCyclicBound source7,
+  AconCyclicBound source8,
+  AcovCyclicCoBound source10,
+  AconCyclicCoBound source11,
+) {}
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect
new file mode 100644
index 0000000..8c5790b
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+//  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+//                                          ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class Acov<X extends () → self::Acov::Y% = () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acov<self::Acov::X, self::Acov::Y%>
+    : super core::Object::•()
+    ;
+}
+class Acon<X extends (self::Acon::Y%) → dynamic = (Never) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acon<self::Acon::X, self::Acon::Y%>
+    : super core::Object::•()
+    ;
+}
+class Ainv<X extends (self::Ainv::Y%) → self::Ainv::Y% = (dynamic) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ainv<self::Ainv::X, self::Ainv::Y%>
+    : super core::Object::•()
+    ;
+}
+class AcovBound<X extends () → self::AcovBound::Y = () → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AcovBound<self::AcovBound::X, self::AcovBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconBound<X extends (self::AconBound::Y) → dynamic = (Never) → dynamic, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AconBound<self::AconBound::X, self::AconBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvBound<X extends (self::AinvBound::Y) → self::AinvBound::Y = (core::num) → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AinvBound<self::AinvBound::X, self::AinvBound::Y>
+    : super core::Object::•()
+    ;
+}
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicBound<X extends () → self::AcovCyclicBound::Y = () → self::A<dynamic>, Y extends self::A<self::AcovCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicBound<self::AcovCyclicBound::X, self::AcovCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicBound<X extends (self::AconCyclicBound::Y) → dynamic = (Never) → dynamic, Y extends self::A<self::AconCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AconCyclicBound<self::AconCyclicBound::X, self::AconCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicBound<X extends (self::AinvCyclicBound::Y) → self::AinvCyclicBound::Y = (self::A<dynamic>) → self::A<dynamic>, Y extends self::A<self::AinvCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicBound<self::AinvCyclicBound::X, self::AinvCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicCoBound<X extends () → self::AcovCyclicCoBound::Y = () → (Never) → dynamic, Y extends (self::AcovCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicCoBound<self::AcovCyclicCoBound::X, self::AcovCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic, Y extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AconCyclicCoBound<self::AconCyclicCoBound::X, self::AconCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y) → self::AinvCyclicCoBound::Y = ((Never) → dynamic) → (Never) → dynamic, Y extends (self::AinvCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicCoBound<self::AinvCyclicCoBound::X, self::AinvCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTypeAliasAsTypeArgument(self::Acov<() → dynamic, dynamic> source1, self::Acon<(Never) → dynamic, dynamic> source2, self::Ainv<(dynamic) → dynamic, dynamic> source3, self::AcovBound<() → core::num, core::num> source4, self::AconBound<(Never) → dynamic, core::num> source5, self::AinvBound<(core::num) → core::num, core::num> source6, self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> source7, self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> source8, self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> source10, self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> source11) → void {
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void fsource1 = self::toF<self::Acov<() → dynamic, dynamic>>(source1);
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::Acon<(Never) → dynamic, dynamic> = dynamic>() → void fsource2 = self::toF<self::Acon<(Never) → dynamic, dynamic>>(source2);
+  <Y extends self::Acon<(Null) → dynamic, dynamic> = dynamic>() → void target2 = invalid-expression "pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+ - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+  F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+                                         ^" in fsource2 as{TypeError,ForNonNullableByDefault} <Y extends self::Acon<(Null) → dynamic, dynamic> = dynamic>() → void;
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void fsource3 = self::toF<self::Ainv<(dynamic) → dynamic, dynamic>>(source3);
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void fsource4 = self::toF<self::AcovBound<() → core::num, core::num>>(source4);
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void fsource5 = self::toF<self::AconBound<(Never) → dynamic, core::num>>(source5);
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void target5 = fsource5;
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void fsource6 = self::toF<self::AinvBound<(core::num) → core::num, core::num>>(source6);
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>(source7);
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void fsource8 = self::toF<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>(source8);
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void target8 = fsource8;
+  self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>> source9 = throw "";
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>(source10);
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource11 = self::toF<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>(source11);
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void target11 = fsource11;
+  self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic> source12 = throw "";
+}
+static method testNested(self::B<self::Acov<() → dynamic, dynamic>> source1, self::B<self::Acon<(Never) → dynamic, dynamic>> source2, self::B<self::Ainv<(dynamic) → dynamic, dynamic>> source3, self::B<self::AcovBound<() → core::num, core::num>> source4, self::B<self::AconBound<(Never) → dynamic, core::num>> source5, self::B<self::AinvBound<(core::num) → core::num, core::num>> source6, self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> source7, self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> source8, self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> source10, self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> source11) → void {
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void fsource1 = self::toF<self::B<self::Acov<() → dynamic, dynamic>>>(source1);
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void fsource2 = self::toF<self::B<self::Acon<(Never) → dynamic, dynamic>>>(source2);
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void fsource3 = self::toF<self::B<self::Ainv<(dynamic) → dynamic, dynamic>>>(source3);
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void fsource4 = self::toF<self::B<self::AcovBound<() → core::num, core::num>>>(source4);
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void fsource5 = self::toF<self::B<self::AconBound<(Never) → dynamic, core::num>>>(source5);
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void fsource6 = self::toF<self::B<self::AinvBound<(core::num) → core::num, core::num>>>(source6);
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void fsource7 = self::toF<self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>>(source7);
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void fsource8 = self::toF<self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>>(source8);
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void target8 = fsource8;
+  self::B<self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>>> source9 = throw "";
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource10 = self::toF<self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>>(source10);
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource11 = self::toF<self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>>(source11);
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target11 = fsource11;
+  self::B<self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic>> source12 = throw "";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect
new file mode 100644
index 0000000..8c5790b
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.modular.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+//  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+//                                          ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class Acov<X extends () → self::Acov::Y% = () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acov<self::Acov::X, self::Acov::Y%>
+    : super core::Object::•()
+    ;
+}
+class Acon<X extends (self::Acon::Y%) → dynamic = (Never) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acon<self::Acon::X, self::Acon::Y%>
+    : super core::Object::•()
+    ;
+}
+class Ainv<X extends (self::Ainv::Y%) → self::Ainv::Y% = (dynamic) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ainv<self::Ainv::X, self::Ainv::Y%>
+    : super core::Object::•()
+    ;
+}
+class AcovBound<X extends () → self::AcovBound::Y = () → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AcovBound<self::AcovBound::X, self::AcovBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconBound<X extends (self::AconBound::Y) → dynamic = (Never) → dynamic, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AconBound<self::AconBound::X, self::AconBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvBound<X extends (self::AinvBound::Y) → self::AinvBound::Y = (core::num) → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AinvBound<self::AinvBound::X, self::AinvBound::Y>
+    : super core::Object::•()
+    ;
+}
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicBound<X extends () → self::AcovCyclicBound::Y = () → self::A<dynamic>, Y extends self::A<self::AcovCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicBound<self::AcovCyclicBound::X, self::AcovCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicBound<X extends (self::AconCyclicBound::Y) → dynamic = (Never) → dynamic, Y extends self::A<self::AconCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AconCyclicBound<self::AconCyclicBound::X, self::AconCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicBound<X extends (self::AinvCyclicBound::Y) → self::AinvCyclicBound::Y = (self::A<dynamic>) → self::A<dynamic>, Y extends self::A<self::AinvCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicBound<self::AinvCyclicBound::X, self::AinvCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicCoBound<X extends () → self::AcovCyclicCoBound::Y = () → (Never) → dynamic, Y extends (self::AcovCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicCoBound<self::AcovCyclicCoBound::X, self::AcovCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic, Y extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AconCyclicCoBound<self::AconCyclicCoBound::X, self::AconCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y) → self::AinvCyclicCoBound::Y = ((Never) → dynamic) → (Never) → dynamic, Y extends (self::AinvCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicCoBound<self::AinvCyclicCoBound::X, self::AinvCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTypeAliasAsTypeArgument(self::Acov<() → dynamic, dynamic> source1, self::Acon<(Never) → dynamic, dynamic> source2, self::Ainv<(dynamic) → dynamic, dynamic> source3, self::AcovBound<() → core::num, core::num> source4, self::AconBound<(Never) → dynamic, core::num> source5, self::AinvBound<(core::num) → core::num, core::num> source6, self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> source7, self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> source8, self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> source10, self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> source11) → void {
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void fsource1 = self::toF<self::Acov<() → dynamic, dynamic>>(source1);
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::Acon<(Never) → dynamic, dynamic> = dynamic>() → void fsource2 = self::toF<self::Acon<(Never) → dynamic, dynamic>>(source2);
+  <Y extends self::Acon<(Null) → dynamic, dynamic> = dynamic>() → void target2 = invalid-expression "pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+ - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+  F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+                                         ^" in fsource2 as{TypeError,ForNonNullableByDefault} <Y extends self::Acon<(Null) → dynamic, dynamic> = dynamic>() → void;
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void fsource3 = self::toF<self::Ainv<(dynamic) → dynamic, dynamic>>(source3);
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void fsource4 = self::toF<self::AcovBound<() → core::num, core::num>>(source4);
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void fsource5 = self::toF<self::AconBound<(Never) → dynamic, core::num>>(source5);
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void target5 = fsource5;
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void fsource6 = self::toF<self::AinvBound<(core::num) → core::num, core::num>>(source6);
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>(source7);
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void fsource8 = self::toF<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>(source8);
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void target8 = fsource8;
+  self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>> source9 = throw "";
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>(source10);
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource11 = self::toF<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>(source11);
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void target11 = fsource11;
+  self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic> source12 = throw "";
+}
+static method testNested(self::B<self::Acov<() → dynamic, dynamic>> source1, self::B<self::Acon<(Never) → dynamic, dynamic>> source2, self::B<self::Ainv<(dynamic) → dynamic, dynamic>> source3, self::B<self::AcovBound<() → core::num, core::num>> source4, self::B<self::AconBound<(Never) → dynamic, core::num>> source5, self::B<self::AinvBound<(core::num) → core::num, core::num>> source6, self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> source7, self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> source8, self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> source10, self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> source11) → void {
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void fsource1 = self::toF<self::B<self::Acov<() → dynamic, dynamic>>>(source1);
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void fsource2 = self::toF<self::B<self::Acon<(Never) → dynamic, dynamic>>>(source2);
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void fsource3 = self::toF<self::B<self::Ainv<(dynamic) → dynamic, dynamic>>>(source3);
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void fsource4 = self::toF<self::B<self::AcovBound<() → core::num, core::num>>>(source4);
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void fsource5 = self::toF<self::B<self::AconBound<(Never) → dynamic, core::num>>>(source5);
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void fsource6 = self::toF<self::B<self::AinvBound<(core::num) → core::num, core::num>>>(source6);
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void fsource7 = self::toF<self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>>(source7);
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void fsource8 = self::toF<self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>>(source8);
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void target8 = fsource8;
+  self::B<self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>>> source9 = throw "";
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource10 = self::toF<self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>>(source10);
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource11 = self::toF<self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>>(source11);
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target11 = fsource11;
+  self::B<self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic>> source12 = throw "";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.outline.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.outline.expect
new file mode 100644
index 0000000..0cf1a6b
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.outline.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class Acov<X extends () → self::Acov::Y% = () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acov<self::Acov::X, self::Acov::Y%>
+    ;
+}
+class Acon<X extends (self::Acon::Y%) → dynamic = (Never) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acon<self::Acon::X, self::Acon::Y%>
+    ;
+}
+class Ainv<X extends (self::Ainv::Y%) → self::Ainv::Y% = (dynamic) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ainv<self::Ainv::X, self::Ainv::Y%>
+    ;
+}
+class AcovBound<X extends () → self::AcovBound::Y = () → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AcovBound<self::AcovBound::X, self::AcovBound::Y>
+    ;
+}
+class AconBound<X extends (self::AconBound::Y) → dynamic = (Never) → dynamic, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AconBound<self::AconBound::X, self::AconBound::Y>
+    ;
+}
+class AinvBound<X extends (self::AinvBound::Y) → self::AinvBound::Y = (core::num) → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AinvBound<self::AinvBound::X, self::AinvBound::Y>
+    ;
+}
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+}
+class AcovCyclicBound<X extends () → self::AcovCyclicBound::Y = () → self::A<dynamic>, Y extends self::A<self::AcovCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicBound<self::AcovCyclicBound::X, self::AcovCyclicBound::Y>
+    ;
+}
+class AconCyclicBound<X extends (self::AconCyclicBound::Y) → dynamic = (Never) → dynamic, Y extends self::A<self::AconCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AconCyclicBound<self::AconCyclicBound::X, self::AconCyclicBound::Y>
+    ;
+}
+class AinvCyclicBound<X extends (self::AinvCyclicBound::Y) → self::AinvCyclicBound::Y = (self::A<dynamic>) → self::A<dynamic>, Y extends self::A<self::AinvCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicBound<self::AinvCyclicBound::X, self::AinvCyclicBound::Y>
+    ;
+}
+class AcovCyclicCoBound<X extends () → self::AcovCyclicCoBound::Y = () → (Never) → dynamic, Y extends (self::AcovCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicCoBound<self::AcovCyclicCoBound::X, self::AcovCyclicCoBound::Y>
+    ;
+}
+class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic, Y extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AconCyclicCoBound<self::AconCyclicCoBound::X, self::AconCyclicCoBound::Y>
+    ;
+}
+class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y) → self::AinvCyclicCoBound::Y = ((Never) → dynamic) → (Never) → dynamic, Y extends (self::AinvCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicCoBound<self::AinvCyclicCoBound::X, self::AinvCyclicCoBound::Y>
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  ;
+static method testTypeAliasAsTypeArgument(self::Acov<() → dynamic, dynamic> source1, self::Acon<(Never) → dynamic, dynamic> source2, self::Ainv<(dynamic) → dynamic, dynamic> source3, self::AcovBound<() → core::num, core::num> source4, self::AconBound<(Never) → dynamic, core::num> source5, self::AinvBound<(core::num) → core::num, core::num> source6, self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> source7, self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> source8, self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> source10, self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> source11) → void
+  ;
+static method testNested(self::B<self::Acov<() → dynamic, dynamic>> source1, self::B<self::Acon<(Never) → dynamic, dynamic>> source2, self::B<self::Ainv<(dynamic) → dynamic, dynamic>> source3, self::B<self::AcovBound<() → core::num, core::num>> source4, self::B<self::AconBound<(Never) → dynamic, core::num>> source5, self::B<self::AinvBound<(core::num) → core::num, core::num>> source6, self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> source7, self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> source8, self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> source10, self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> source11) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect
new file mode 100644
index 0000000..77f1c4c
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance2.dart.weak.transformed.expect
@@ -0,0 +1,203 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:177:21: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   AinvCyclicCoBound source12 = throw ''; //# 02: compile-time error
+//                     ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+//  - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//   F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+//                                          ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(Y)' of the type variable 'Y' on 'AinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:57:57: Context: This is the type variable whose bound isn't conformed to.
+// class AinvCyclicCoBound<X extends FinvCyclicCoBound<Y>, Y extends Function(Y)> {
+//                                                         ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'AinvCyclicCoBound<dynamic Function(Never) Function(dynamic Function(Never)), dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Error: Type argument 'dynamic Function(Never)' doesn't conform to the bound 'dynamic Function(X)' of the type variable 'X' on 'FinvCyclicCoBound'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+// pkg/front_end/testcases/general/nested_variance2.dart:49:27: Context: This is the type variable whose bound isn't conformed to.
+// typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+//                           ^
+// pkg/front_end/testcases/general/nested_variance2.dart:236:24: Context: If you want 'FinvCyclicCoBound<dynamic Function(Never)>' to be a super-bounded type, note that the inverted type 'B<AinvCyclicCoBound<FinvCyclicCoBound<Never Function(Never)>, Never Function(Object?)>>' must then satisfy its bounds, which it does not.
+//  - 'B' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'AinvCyclicCoBound' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+//  - 'Object' is from 'dart:core'.
+//   B<AinvCyclicCoBound> source12 = throw ''; //# 04: compile-time error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class Acov<X extends () → self::Acov::Y% = () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acov<self::Acov::X, self::Acov::Y%>
+    : super core::Object::•()
+    ;
+}
+class Acon<X extends (self::Acon::Y%) → dynamic = (Never) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acon<self::Acon::X, self::Acon::Y%>
+    : super core::Object::•()
+    ;
+}
+class Ainv<X extends (self::Ainv::Y%) → self::Ainv::Y% = (dynamic) → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ainv<self::Ainv::X, self::Ainv::Y%>
+    : super core::Object::•()
+    ;
+}
+class AcovBound<X extends () → self::AcovBound::Y = () → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AcovBound<self::AcovBound::X, self::AcovBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconBound<X extends (self::AconBound::Y) → dynamic = (Never) → dynamic, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AconBound<self::AconBound::X, self::AconBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvBound<X extends (self::AinvBound::Y) → self::AinvBound::Y = (core::num) → core::num, Y extends core::num> extends core::Object {
+  synthetic constructor •() → self::AinvBound<self::AinvBound::X, self::AinvBound::Y>
+    : super core::Object::•()
+    ;
+}
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicBound<X extends () → self::AcovCyclicBound::Y = () → self::A<dynamic>, Y extends self::A<self::AcovCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicBound<self::AcovCyclicBound::X, self::AcovCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicBound<X extends (self::AconCyclicBound::Y) → dynamic = (Never) → dynamic, Y extends self::A<self::AconCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AconCyclicBound<self::AconCyclicBound::X, self::AconCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicBound<X extends (self::AinvCyclicBound::Y) → self::AinvCyclicBound::Y = (self::A<dynamic>) → self::A<dynamic>, Y extends self::A<self::AinvCyclicBound::Y> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicBound<self::AinvCyclicBound::X, self::AinvCyclicBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AcovCyclicCoBound<X extends () → self::AcovCyclicCoBound::Y = () → (Never) → dynamic, Y extends (self::AcovCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicCoBound<self::AcovCyclicCoBound::X, self::AcovCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic, Y extends (self::AconCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AconCyclicCoBound<self::AconCyclicCoBound::X, self::AconCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y) → self::AinvCyclicCoBound::Y = ((Never) → dynamic) → (Never) → dynamic, Y extends (self::AinvCyclicCoBound::Y) → dynamic = (Never) → dynamic> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicCoBound<self::AinvCyclicCoBound::X, self::AinvCyclicCoBound::Y>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTypeAliasAsTypeArgument(self::Acov<() → dynamic, dynamic> source1, self::Acon<(Never) → dynamic, dynamic> source2, self::Ainv<(dynamic) → dynamic, dynamic> source3, self::AcovBound<() → core::num, core::num> source4, self::AconBound<(Never) → dynamic, core::num> source5, self::AinvBound<(core::num) → core::num, core::num> source6, self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> source7, self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> source8, self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> source10, self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> source11) → void {
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void fsource1 = self::toF<self::Acov<() → dynamic, dynamic>>(source1);
+  <Y extends self::Acov<() → dynamic, dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::Acon<(Never) → dynamic, dynamic> = dynamic>() → void fsource2 = self::toF<self::Acon<(Never) → dynamic, dynamic>>(source2);
+  <Y extends self::Acon<(Null) → dynamic, dynamic> = dynamic>() → void target2 = invalid-expression "pkg/front_end/testcases/general/nested_variance2.dart:84:42: Error: A value of type 'void Function<Y extends Acon<dynamic Function(Never), dynamic>>()' can't be assigned to a variable of type 'void Function<Y extends Acon<dynamic Function(Null), dynamic>>()' because 'Null' is nullable and 'Never' isn't.
+ - 'Acon' is from 'pkg/front_end/testcases/general/nested_variance2.dart'.
+  F<Acon<Fcon<Null>, dynamic>> target2 = fsource2;
+                                         ^" in fsource2;
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void fsource3 = self::toF<self::Ainv<(dynamic) → dynamic, dynamic>>(source3);
+  <Y extends self::Ainv<(dynamic) → dynamic, dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void fsource4 = self::toF<self::AcovBound<() → core::num, core::num>>(source4);
+  <Y extends self::AcovBound<() → core::num, core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void fsource5 = self::toF<self::AconBound<(Never) → dynamic, core::num>>(source5);
+  <Y extends self::AconBound<(Never) → dynamic, core::num> = dynamic>() → void target5 = fsource5;
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void fsource6 = self::toF<self::AinvBound<(core::num) → core::num, core::num>>(source6);
+  <Y extends self::AinvBound<(core::num) → core::num, core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>(source7);
+  <Y extends self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void fsource8 = self::toF<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>(source8);
+  <Y extends self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>> = dynamic>() → void target8 = fsource8;
+  self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>> source9 = throw "";
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>(source10);
+  <Y extends self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void fsource11 = self::toF<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>(source11);
+  <Y extends self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic> = dynamic>() → void target11 = fsource11;
+  self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic> source12 = throw "";
+}
+static method testNested(self::B<self::Acov<() → dynamic, dynamic>> source1, self::B<self::Acon<(Never) → dynamic, dynamic>> source2, self::B<self::Ainv<(dynamic) → dynamic, dynamic>> source3, self::B<self::AcovBound<() → core::num, core::num>> source4, self::B<self::AconBound<(Never) → dynamic, core::num>> source5, self::B<self::AinvBound<(core::num) → core::num, core::num>> source6, self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> source7, self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> source8, self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> source10, self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> source11) → void {
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void fsource1 = self::toF<self::B<self::Acov<() → dynamic, dynamic>>>(source1);
+  <Y extends self::B<self::Acov<() → dynamic, dynamic>> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void fsource2 = self::toF<self::B<self::Acon<(Never) → dynamic, dynamic>>>(source2);
+  <Y extends self::B<self::Acon<(Never) → dynamic, dynamic>> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void fsource3 = self::toF<self::B<self::Ainv<(dynamic) → dynamic, dynamic>>>(source3);
+  <Y extends self::B<self::Ainv<(dynamic) → dynamic, dynamic>> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void fsource4 = self::toF<self::B<self::AcovBound<() → core::num, core::num>>>(source4);
+  <Y extends self::B<self::AcovBound<() → core::num, core::num>> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void fsource5 = self::toF<self::B<self::AconBound<(Never) → dynamic, core::num>>>(source5);
+  <Y extends self::B<self::AconBound<(Never) → dynamic, core::num>> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void fsource6 = self::toF<self::B<self::AinvBound<(core::num) → core::num, core::num>>>(source6);
+  <Y extends self::B<self::AinvBound<(core::num) → core::num, core::num>> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void fsource7 = self::toF<self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>>>(source7);
+  <Y extends self::B<self::AcovCyclicBound<() → self::A<dynamic>, self::A<dynamic>>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void fsource8 = self::toF<self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>>>(source8);
+  <Y extends self::B<self::AconCyclicBound<(Never) → dynamic, self::A<dynamic>>> = dynamic>() → void target8 = fsource8;
+  self::B<self::AinvCyclicBound<(self::A<dynamic>) → self::A<dynamic>, self::A<dynamic>>> source9 = throw "";
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource10 = self::toF<self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>>>(source10);
+  <Y extends self::B<self::AcovCyclicCoBound<() → (Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void fsource11 = self::toF<self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>>>(source11);
+  <Y extends self::B<self::AconCyclicCoBound<(Never) → dynamic, (Never) → dynamic>> = dynamic>() → void target11 = fsource11;
+  self::B<self::AinvCyclicCoBound<((Never) → dynamic) → (Never) → dynamic, (Never) → dynamic>> source12 = throw "";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect
index 01083e9..45d5195 100644
--- a/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.expect
@@ -12,211 +12,322 @@
 //   int new = 42; // error
 //       ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C() : super.new(); // error
 //               ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.named() : this.new(); // error
 //                    ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   external int new; // error
 //                ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new<int>(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new = 87; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new = 87; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new = 87; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new; // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new<int>(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new; // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new<int>(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new<int>(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new; // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new<int>(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new; // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
 //   unresolved.new; // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
 //   unresolved.new(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new<int>(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
 //   unresolved.new<int>(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
 //   C.new; // error
 //     ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new(); // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect
index 01083e9..45d5195 100644
--- a/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect
@@ -12,211 +12,322 @@
 //   int new = 42; // error
 //       ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C() : super.new(); // error
 //               ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.named() : this.new(); // error
 //                    ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   external int new; // error
 //                ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new<int>(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new = 87; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new = 87; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new = 87; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new; // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new<int>(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new; // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new<int>(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new<int>(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new; // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new<int>(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new; // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
 //   unresolved.new; // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
 //   unresolved.new(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new<int>(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
 //   unresolved.new<int>(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
 //   C.new; // error
 //     ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new(); // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect
index 6772b34..2524607 100644
--- a/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.outline.expect
@@ -12,15 +12,21 @@
 //   int new = 42; // error
 //       ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C() : super.new(); // error
 //               ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.named() : this.new(); // error
 //                    ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect
index 0ecdf2a..b831757 100644
--- a/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.transformed.expect
@@ -12,211 +12,322 @@
 //   int new = 42; // error
 //       ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C() : super.new(); // error
 //               ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.named() : this.new(); // error
 //                    ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
 // Try renaming this to be an identifier that isn't a keyword.
 //   external int new; // error
 //                ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new<int>(); // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //     this.new = 87; // error
 //          ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   new C().new = 87; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   c.new = 87; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new; // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo.new<int>(); // error
 //       ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo?.new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   foo..new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new; // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   (foo).new<int>(); // error
 //         ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new; // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix1.new<int>(); // error
 //           ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new; // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   prefix2.c.new<int>(); // error
 //             ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new; // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   E(0).new<int>(); // error
 //        ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new; // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
 //   unresolved.new; // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
 //   unresolved.new(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   unresolved.new<int>(); // error
 //              ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
 //   unresolved.new<int>(); // error
 //   ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new; // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
 //   C.new; // error
 //     ^^^
 //
-// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   C.new(); // error
 //     ^^^
+// pkg/front_end/testcases/general/new_as_selector.dart:5:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.14
+// ^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart b/pkg/front_end/testcases/general/no_such_method_forwarder.dart
index b2938fc..2d3319a 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class X {
   void _foo() async {
     await null;
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline.expect
index bf31270..1caa183 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class X {
   void _foo() async {}
   void foo() => _foo();
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline_modelled.expect
index bf31270..1caa183 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class X {
   void _foo() async {}
   void foo() => _foo();
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
index 2fd6b9d..21cedca 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.expect
@@ -1,52 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method _foo() → void async {
+  method _foo() → void async /* futureValueType= void */ {
     await null;
     core::print("hello");
   }
   method foo() → void
-    return this.{self::X::_foo}(){() →* void};
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::X::_foo}(){() → void};
 }
 class Y extends core::Object implements self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → void {
+  method noSuchMethod(core::Invocation _) → void {
     core::print("Hello from noSuchMethod");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
 }
 static method main() → dynamic {
-  self::Y* y = new self::Y::•();
-  y.{self::X::foo}(){() →* void};
+  self::Y y = new self::Y::•();
+  y.{self::X::foo}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect
index 2fd6b9d..21cedca 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect
@@ -1,52 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method _foo() → void async {
+  method _foo() → void async /* futureValueType= void */ {
     await null;
     core::print("hello");
   }
   method foo() → void
-    return this.{self::X::_foo}(){() →* void};
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::X::_foo}(){() → void};
 }
 class Y extends core::Object implements self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → void {
+  method noSuchMethod(core::Invocation _) → void {
     core::print("Hello from noSuchMethod");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
 }
 static method main() → dynamic {
-  self::Y* y = new self::Y::•();
-  y.{self::X::foo}(){() →* void};
+  self::Y y = new self::Y::•();
+  y.{self::X::foo}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
index a58f8ef..d466ed3 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.outline.expect
@@ -1,55 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     ;
   method _foo() → void async 
     ;
   method foo() → void
     ;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends core::Object implements self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     ;
-  method noSuchMethod(core::Invocation* _) → void
+  method noSuchMethod(core::Invocation _) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → void};
 }
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> SymbolConstant(#_foo)
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> SymbolConstant(#foo)
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:13:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> SymbolConstant(#_foo)
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> SymbolConstant(#foo)
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:11:8 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 16, effectively constant: 8
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index ad020a3..f3c06a2 100644
--- a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 import "dart:_internal" as _in;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  method _foo() → void /* originally async */ {
-    final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  method _foo() → void /* futureValueType= void */ /* originally async */ {
+    final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
+    (dynamic) → dynamic :async_op_then;
+    (core::Object, core::StackTrace) → dynamic :async_op_error;
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
@@ -28,52 +28,33 @@
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   method foo() → void
-    return this.{self::X::_foo}(){() →* void};
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::X::_foo}(){() → void};
 }
 class Y extends core::Object implements self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → void {
+  method noSuchMethod(core::Invocation _) → void {
     core::print("Hello from noSuchMethod");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method _foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
   no-such-method-forwarder method foo() → void
-    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → void};
 }
 static method main() → dynamic {
-  self::Y* y = new self::Y::•();
-  y.{self::X::foo}(){() →* void};
+  self::Y y = new self::Y::•();
+  y.{self::X::foo}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart b/pkg/front_end/testcases/general/no_such_method_private_setter.dart
index 88c4614..9d026b5 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import './no_such_method_private_setter_lib.dart';
 
 // `Bar' contains a private setter `_x'. The generated Kernel code for `Foo'
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline.expect
index b9a6d13..8aa3b3b 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './no_such_method_private_setter_lib.dart';
 
 class Foo implements Bar {}
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline_modelled.expect
index b9a6d13..8aa3b3b 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './no_such_method_private_setter_lib.dart';
 
 class Foo implements Bar {}
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
index 180ea5a..ad96a5d 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "no_such_method_private_setter_lib.dart" as no_;
@@ -6,49 +6,36 @@
 import "org-dartlang-testcase:///no_such_method_private_setter_lib.dart";
 
 class Foo extends core::Object implements no_::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
-  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   no_::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart:8:7: Error: Field '_x' should be initialized because its type 'int' doesn't allow null.
+//   int _x;
+//       ^^
+//
 import self as no_;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  field core::int* _x = null;
-  synthetic constructor •() → no_::Bar*
+  field core::int _x = null;
+  synthetic constructor •() → no_::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(no_::Bar* bar) → void {
+static method baz(no_::Bar bar) → void {
   return;
 }
 
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect
index 180ea5a..ad96a5d 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "no_such_method_private_setter_lib.dart" as no_;
@@ -6,49 +6,36 @@
 import "org-dartlang-testcase:///no_such_method_private_setter_lib.dart";
 
 class Foo extends core::Object implements no_::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
-  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   no_::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart:8:7: Error: Field '_x' should be initialized because its type 'int' doesn't allow null.
+//   int _x;
+//       ^^
+//
 import self as no_;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  field core::int* _x = null;
-  synthetic constructor •() → no_::Bar*
+  field core::int _x = null;
+  synthetic constructor •() → no_::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(no_::Bar* bar) → void {
+static method baz(no_::Bar bar) → void {
   return;
 }
 
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
index 882f03b..9750dcc 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "no_such_method_private_setter_lib.dart" as no_;
@@ -6,46 +6,26 @@
 import "org-dartlang-testcase:///no_such_method_private_setter_lib.dart";
 
 class Foo extends core::Object implements no_::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
-  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_x=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as no_;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  field core::int* _x;
-  synthetic constructor •() → no_::Bar*
+  field core::int _x;
+  synthetic constructor •() → no_::Bar
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(no_::Bar* bar) → void
+static method baz(no_::Bar bar) → void
   ;
 
 
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
index bc8c75f..48b88df 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "no_such_method_private_setter_lib.dart" as no_;
@@ -6,49 +6,36 @@
 import "org-dartlang-testcase:///no_such_method_private_setter_lib.dart";
 
 class Foo extends core::Object implements no_::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
-  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {
   no_::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart:8:7: Error: Field '_x' should be initialized because its type 'int' doesn't allow null.
+//   int _x;
+//       ^^
+//
 import self as no_;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  field core::int* _x = null;
-  synthetic constructor •() → no_::Bar*
+  field core::int _x = null;
+  synthetic constructor •() → no_::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(no_::Bar* bar) → void {
+static method baz(no_::Bar bar) → void {
   return;
 }
 
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart b/pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart
index c2d04f0..b4f3e2c 100644
--- a/pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Companion library to no_such_method_private_setter.dart.
 
 class Bar {
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart b/pkg/front_end/testcases/general/non_covariant_checks.dart
index 17c1225..a46e84f 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart
@@ -1,7 +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.
-// @dart=2.9
+
 /*@testedFeatures=checks*/
 
 class C<T> {
@@ -16,7 +16,7 @@
         field9 = ((void Function(T) f) => field1),
         field10 = ((T Function(T) f) {}),
         field11 = ((T Function(T) f) => field1),
-        field12 = <S extends T>() => null,
+        field12 = <S extends T>() => throw '',
         field13 = <S extends T>(S s) {},
         field14 = <S extends T>(S s) => s,
         field15 = ((S Function<S extends T>() f) {});
@@ -185,26 +185,26 @@
   c.field1;
   c.field2;
   try {
-    c. /*@ checkReturn=(num*) ->* void */ field3;
+    c. /*@checkReturn=(num) -> void*/ field3;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(num*) ->* num* */ field4;
+    c. /*@checkReturn=(num) -> num*/ field4;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   c.field5;
   try {
-    c. /*@ checkReturn=(() ->* num*) ->* void */ field6;
+    c. /*@checkReturn=(() -> num) -> void*/ field6;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(() ->* num*) ->* num* */ field7;
+    c. /*@checkReturn=(() -> num) -> num*/ field7;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
@@ -212,37 +212,37 @@
   c.field8;
   c.field9;
   try {
-    c. /*@ checkReturn=((num*) ->* num*) ->* void */ field10;
+    c. /*@checkReturn=((num) -> num) -> void*/ field10;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=((num*) ->* num*) ->* num* */ field11;
+    c. /*@checkReturn=((num) -> num) -> num*/ field11;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>() ->* S* */ field12;
+    c. /*@checkReturn=<S extends num = dynamic>() -> S*/ field12;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>(S*) ->* void */ field13;
+    c. /*@checkReturn=<S extends num = dynamic>(S) -> void*/ field13;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>(S*) ->* S* */ field14;
+    c. /*@checkReturn=<S extends num = dynamic>(S) -> S*/ field14;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(<S extends num* = dynamic>() ->* S*) ->* void */ field15;
+    c. /*@checkReturn=(<S extends num = dynamic>() -> S) -> void*/ field15;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
@@ -251,26 +251,26 @@
   c.getter1;
   c.getter2;
   try {
-    c. /*@ checkReturn=(num*) ->* void */ getter3;
+    c. /*@checkReturn=(num) -> void*/ getter3;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(num*) ->* num* */ getter4;
+    c. /*@checkReturn=(num) -> num*/ getter4;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   c.getter5;
   try {
-    c. /*@ checkReturn=(() ->* num*) ->* void */ getter6;
+    c. /*@checkReturn=(() -> num) -> void*/ getter6;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(() ->* num*) ->* num* */ getter7;
+    c. /*@checkReturn=(() -> num) -> num*/ getter7;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
@@ -278,37 +278,37 @@
   c.getter8;
   c.getter9;
   try {
-    c. /*@ checkReturn=((num*) ->* num*) ->* void */ getter10;
+    c. /*@checkReturn=((num) -> num) -> void*/ getter10;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=((num*) ->* num*) ->* num* */ getter11;
+    c. /*@checkReturn=((num) -> num) -> num*/ getter11;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>() ->* S* */ getter12;
+    c. /*@checkReturn=<S extends num = dynamic>() -> S*/ getter12;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>(S*) ->* void */ getter13;
+    c. /*@checkReturn=<S extends num = dynamic>(S) -> void*/ getter13;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=<S extends num* = dynamic>(S*) ->* S* */ getter14;
+    c. /*@checkReturn=<S extends num = dynamic>(S) -> S*/ getter14;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    c. /*@ checkReturn=(<S extends num* = dynamic>() ->* S*) ->* void */ getter15;
+    c. /*@checkReturn=(<S extends num = dynamic>() -> S) -> void*/ getter15;
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
@@ -371,7 +371,7 @@
     print(e);
   }
   try {
-    c.setter12 = <S extends num>() => null;
+    c.setter12 = <S extends num>() => throw '';
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
@@ -452,7 +452,7 @@
     print(e);
   }
   try {
-    c.method12(<S extends num>() => null);
+    c.method12(<S extends num>() => throw '');
     throw 'TypeError expected';
   } on TypeError catch (e) {
     print(e);
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline.expect
index e25dc03..9c7f737 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   C(this.field1)
       : field2 = (() => field1),
@@ -11,7 +10,7 @@
         field9 = ((void Function(T) f) => field1),
         field10 = ((T Function(T) f) {}),
         field11 = ((T Function(T) f) => field1),
-        field12 = <S extends T>() => null,
+        field12 = <S extends T>() => throw '',
         field13 = <S extends T>(S s) {},
         field14 = <S extends T>(S s) => s,
         field15 = ((S Function<S extends T>() f) {});
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline_modelled.expect
index 506de49..f9b68a1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   C(this.field1)
       : field2 = (() => field1),
@@ -11,7 +10,7 @@
         field9 = ((void Function(T) f) => field1),
         field10 = ((T Function(T) f) {}),
         field11 = ((T Function(T) f) => field1),
-        field12 = <S extends T>() => null,
+        field12 = <S extends T>() => throw '',
         field13 = <S extends T>(S s) {},
         field14 = <S extends T>(S s) => s,
         field15 = ((S Function<S extends T>() f) {});
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
index 5f06498..f80ffa1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
@@ -1,493 +1,483 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* field1;
-  covariant-by-class field () →* self::C::T* field2;
-  field (self::C::T*) →* void field3;
-  covariant-by-class field (self::C::T*) →* self::C::T* field4;
-  covariant-by-class field () →* () →* self::C::T* field5;
-  field (() →* self::C::T*) →* void field6;
-  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
-  covariant-by-class field ((self::C::T*) →* void) →* void field8;
-  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
-  constructor •(self::C::T* field1) → self::C<self::C::T*>*
-    : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% field1;
+  covariant-by-class field () → self::C::T% field2;
+  field (self::C::T%) → void field3;
+  covariant-by-class field (self::C::T%) → self::C::T% field4;
+  covariant-by-class field () → () → self::C::T% field5;
+  field (() → self::C::T%) → void field6;
+  covariant-by-class field (() → self::C::T%) → self::C::T% field7;
+  covariant-by-class field ((self::C::T%) → void) → void field8;
+  covariant-by-class field ((self::C::T%) → void) → self::C::T% field9;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → void field10;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → self::C::T% field11;
+  covariant-by-class field <S extends self::C::T% = dynamic>() → S% field12;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → void field13;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → S% field14;
+  covariant-by-class field (<S extends self::C::T% = dynamic>() → S%) → void field15;
+  constructor •(self::C::T% field1) → self::C<self::C::T%>
+    : self::C::field1 = field1, self::C::field2 = () → self::C::T% => field1, self::C::field3 = (self::C::T% t) → void {}, self::C::field4 = (self::C::T% t) → self::C::T% => t, self::C::field5 = () → () → self::C::T% => () → self::C::T% => field1, self::C::field6 = (() → self::C::T% f) → void {}, self::C::field7 = (() → self::C::T% f) → self::C::T% => field1, self::C::field8 = ((self::C::T%) → void f) → void {}, self::C::field9 = ((self::C::T%) → void f) → self::C::T% => field1, self::C::field10 = ((self::C::T%) → self::C::T% f) → void {}, self::C::field11 = ((self::C::T%) → self::C::T% f) → self::C::T% => field1, self::C::field12 = <S extends self::C::T%>() → Never => throw "", self::C::field13 = <S extends self::C::T%>(S% s) → void {}, self::C::field14 = <S extends self::C::T%>(S% s) → S% => s, self::C::field15 = (<S extends self::C::T%>() → S% f) → void {}, super core::Object::•()
     ;
-  get getter1() → self::C::T*
-    return this.{self::C::field1}{self::C::T*};
-  get getter2() → () →* self::C::T*
-    return this.{self::C::field2}{() →* self::C::T*};
-  get getter3() → (self::C::T*) →* void
-    return this.{self::C::field3}{(self::C::T*) →* void};
-  get getter4() → (self::C::T*) →* self::C::T*
-    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
-  get getter5() → () →* () →* self::C::T*
-    return this.{self::C::field5}{() →* () →* self::C::T*};
-  get getter6() → (() →* self::C::T*) →* void
-    return this.{self::C::field6}{(() →* self::C::T*) →* void};
-  get getter7() → (() →* self::C::T*) →* self::C::T*
-    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
-  get getter8() → ((self::C::T*) →* void) →* void
-    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
-  get getter9() → ((self::C::T*) →* void) →* self::C::T*
-    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
-  get getter10() → ((self::C::T*) →* self::C::T*) →* void
-    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
-  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
-    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
-  get getter12() → <S extends self::C::T* = dynamic>() →* S*
-    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
-  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
-    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
-  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
-    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
-  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
-    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
-  set setter1(covariant-by-class self::C::T* value) → void {
+  get getter1() → self::C::T%
+    return this.{self::C::field1}{self::C::T%};
+  get getter2() → () → self::C::T%
+    return this.{self::C::field2}{() → self::C::T%};
+  get getter3() → (self::C::T%) → void
+    return this.{self::C::field3}{(self::C::T%) → void};
+  get getter4() → (self::C::T%) → self::C::T%
+    return this.{self::C::field4}{(self::C::T%) → self::C::T%};
+  get getter5() → () → () → self::C::T%
+    return this.{self::C::field5}{() → () → self::C::T%};
+  get getter6() → (() → self::C::T%) → void
+    return this.{self::C::field6}{(() → self::C::T%) → void};
+  get getter7() → (() → self::C::T%) → self::C::T%
+    return this.{self::C::field7}{(() → self::C::T%) → self::C::T%};
+  get getter8() → ((self::C::T%) → void) → void
+    return this.{self::C::field8}{((self::C::T%) → void) → void};
+  get getter9() → ((self::C::T%) → void) → self::C::T%
+    return this.{self::C::field9}{((self::C::T%) → void) → self::C::T%};
+  get getter10() → ((self::C::T%) → self::C::T%) → void
+    return this.{self::C::field10}{((self::C::T%) → self::C::T%) → void};
+  get getter11() → ((self::C::T%) → self::C::T%) → self::C::T%
+    return this.{self::C::field11}{((self::C::T%) → self::C::T%) → self::C::T%};
+  get getter12() → <S extends self::C::T% = dynamic>() → S%
+    return this.{self::C::field12}{<S extends self::C::T% = dynamic>() → S%};
+  get getter13() → <S extends self::C::T% = dynamic>(S%) → void
+    return this.{self::C::field13}{<S extends self::C::T% = dynamic>(S%) → void};
+  get getter14() → <S extends self::C::T% = dynamic>(S%) → S%
+    return this.{self::C::field14}{<S extends self::C::T% = dynamic>(S%) → S%};
+  get getter15() → (<S extends self::C::T% = dynamic>() → S%) → void
+    return this.{self::C::field15}{(<S extends self::C::T% = dynamic>() → S%) → void};
+  set setter1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  set setter2(covariant-by-class () →* self::C::T* value) → void {
+  set setter2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  set setter3((self::C::T*) →* void value) → void {
+  set setter3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  set setter4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
+  set setter5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  set setter6((() →* self::C::T*) →* void value) → void {
+  set setter6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  set setter7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  set setter8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  set setter9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  set setter10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  set setter11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  set setter12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  set setter13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  set setter14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  set setter15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  method method1(covariant-by-class self::C::T* value) → void {
+  method method1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  method method2(covariant-by-class () →* self::C::T* value) → void {
+  method method2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  method method3((self::C::T*) →* void value) → void {
+  method method3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  method method4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
+  method method5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  method method6((() →* self::C::T*) →* void value) → void {
+  method method6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  method method7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  method method8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  method method9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  method method10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  method method11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  method method12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  method method13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  method method14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  method method15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::num*>* c = new self::C::•<core::int*>(0);
-  c.{self::C::field1}{core::num*};
-  c.{self::C::field2}{() →* core::num*};
+  self::C<core::num> c = new self::C::•<core::int>(0);
+  c.{self::C::field1}{core::num};
+  c.{self::C::field2}{() → core::num};
   try {
-    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::field3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::field4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field5}{() →* () →* core::num*};
+  c.{self::C::field5}{() → () → core::num};
   try {
-    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::field6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::field7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field8}{((core::num*) →* void) →* void};
-  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::field8}{((core::num) → void) → void};
+  c.{self::C::field9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter1}{core::num*};
-  c.{self::C::getter2}{() →* core::num*};
+  c.{self::C::getter1}{core::num};
+  c.{self::C::getter2}{() → core::num};
   try {
-    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::getter3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::getter4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter5}{() →* () →* core::num*};
+  c.{self::C::getter5}{() → () → core::num};
   try {
-    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::getter6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter8}{((core::num*) →* void) →* void};
-  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::getter8}{((core::num) → void) → void};
+  c.{self::C::getter9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
     c.{self::C::setter1} = 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter2} = () → core::double* => 0.5;
+    c.{self::C::setter2} = () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter3} = (core::num* n) → Null {};
+  c.{self::C::setter3} = (core::num n) → void {};
   try {
-    c.{self::C::setter4} = (core::num* n) → core::double* => 0.5;
+    c.{self::C::setter4} = (core::num n) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter5} = () → () →* core::double* => () → core::double* => 0.5;
+    c.{self::C::setter5} = () → () → core::double => () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter6} = (() →* core::num* f) → Null {};
+  c.{self::C::setter6} = (() → core::num f) → void {};
   try {
-    c.{self::C::setter7} = (() →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter7} = (() → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter8} = ((core::double*) →* void f) → Null {};
+    c.{self::C::setter8} = ((core::double) → void f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter9} = ((core::double*) →* void f) → core::double* => 0.5;
+    c.{self::C::setter9} = ((core::double) → void f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter10} = ((core::double*) →* core::num* f) → Null {};
+    c.{self::C::setter10} = ((core::double) → core::num f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter11} = ((core::double*) →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter11} = ((core::double) → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter12} = <S extends core::num*>() → Null => null;
+    c.{self::C::setter12} = <S extends core::num>() → Never => throw "";
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter13} = <S extends core::num*>(S* s) → Null {};
+    c.{self::C::setter13} = <S extends core::num>(S s) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter14} = <S extends core::num*>(S* s) → S* => s;
+    c.{self::C::setter14} = <S extends core::num>(S s) → S => s;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter15} = (<S extends core::num*>() →* S* f) → Null {};
+    c.{self::C::setter15} = (<S extends core::num>() → S f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method1}(0.5){(core::num*) →* void};
+    c.{self::C::method1}(0.5){(core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
+    c.{self::C::method2}(() → core::double => 0.5){(() → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
+  c.{self::C::method3}((core::num n) → void {}){((core::num) → void) → void};
   try {
-    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
+    c.{self::C::method4}((core::num n) → core::double => 0.5){((core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
+    c.{self::C::method5}(() → () → core::double => () → core::double => 0.5){(() → () → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
+  c.{self::C::method6}((() → core::num f) → void {}){((() → core::num) → void) → void};
   try {
-    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
+    c.{self::C::method7}((() → core::num f) → core::double => 0.5){((() → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
+    c.{self::C::method8}(((core::double) → void f) → void {}){(((core::num) → void) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
+    c.{self::C::method9}(((core::double) → void f) → core::double => 0.5){(((core::num) → void) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
+    c.{self::C::method10}(((core::double) → core::num f) → void {}){(((core::num) → core::num) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
+    c.{self::C::method11}(((core::double) → core::num f) → core::double => 0.5){(((core::num) → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
+    c.{self::C::method12}(<S extends core::num>() → Never => throw ""){(<S extends core::num = dynamic>() → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
+    c.{self::C::method13}(<S extends core::num>(S s) → void {}){(<S extends core::num = dynamic>(S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
+    c.{self::C::method14}(<S extends core::num>(S s) → S => s){(<S extends core::num = dynamic>(S) → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
+    c.{self::C::method15}((<S extends core::num>() → S f) → void {}){((<S extends core::num = dynamic>() → S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
 }
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect
index 5f06498..f80ffa1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect
@@ -1,493 +1,483 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* field1;
-  covariant-by-class field () →* self::C::T* field2;
-  field (self::C::T*) →* void field3;
-  covariant-by-class field (self::C::T*) →* self::C::T* field4;
-  covariant-by-class field () →* () →* self::C::T* field5;
-  field (() →* self::C::T*) →* void field6;
-  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
-  covariant-by-class field ((self::C::T*) →* void) →* void field8;
-  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
-  constructor •(self::C::T* field1) → self::C<self::C::T*>*
-    : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% field1;
+  covariant-by-class field () → self::C::T% field2;
+  field (self::C::T%) → void field3;
+  covariant-by-class field (self::C::T%) → self::C::T% field4;
+  covariant-by-class field () → () → self::C::T% field5;
+  field (() → self::C::T%) → void field6;
+  covariant-by-class field (() → self::C::T%) → self::C::T% field7;
+  covariant-by-class field ((self::C::T%) → void) → void field8;
+  covariant-by-class field ((self::C::T%) → void) → self::C::T% field9;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → void field10;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → self::C::T% field11;
+  covariant-by-class field <S extends self::C::T% = dynamic>() → S% field12;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → void field13;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → S% field14;
+  covariant-by-class field (<S extends self::C::T% = dynamic>() → S%) → void field15;
+  constructor •(self::C::T% field1) → self::C<self::C::T%>
+    : self::C::field1 = field1, self::C::field2 = () → self::C::T% => field1, self::C::field3 = (self::C::T% t) → void {}, self::C::field4 = (self::C::T% t) → self::C::T% => t, self::C::field5 = () → () → self::C::T% => () → self::C::T% => field1, self::C::field6 = (() → self::C::T% f) → void {}, self::C::field7 = (() → self::C::T% f) → self::C::T% => field1, self::C::field8 = ((self::C::T%) → void f) → void {}, self::C::field9 = ((self::C::T%) → void f) → self::C::T% => field1, self::C::field10 = ((self::C::T%) → self::C::T% f) → void {}, self::C::field11 = ((self::C::T%) → self::C::T% f) → self::C::T% => field1, self::C::field12 = <S extends self::C::T%>() → Never => throw "", self::C::field13 = <S extends self::C::T%>(S% s) → void {}, self::C::field14 = <S extends self::C::T%>(S% s) → S% => s, self::C::field15 = (<S extends self::C::T%>() → S% f) → void {}, super core::Object::•()
     ;
-  get getter1() → self::C::T*
-    return this.{self::C::field1}{self::C::T*};
-  get getter2() → () →* self::C::T*
-    return this.{self::C::field2}{() →* self::C::T*};
-  get getter3() → (self::C::T*) →* void
-    return this.{self::C::field3}{(self::C::T*) →* void};
-  get getter4() → (self::C::T*) →* self::C::T*
-    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
-  get getter5() → () →* () →* self::C::T*
-    return this.{self::C::field5}{() →* () →* self::C::T*};
-  get getter6() → (() →* self::C::T*) →* void
-    return this.{self::C::field6}{(() →* self::C::T*) →* void};
-  get getter7() → (() →* self::C::T*) →* self::C::T*
-    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
-  get getter8() → ((self::C::T*) →* void) →* void
-    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
-  get getter9() → ((self::C::T*) →* void) →* self::C::T*
-    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
-  get getter10() → ((self::C::T*) →* self::C::T*) →* void
-    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
-  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
-    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
-  get getter12() → <S extends self::C::T* = dynamic>() →* S*
-    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
-  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
-    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
-  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
-    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
-  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
-    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
-  set setter1(covariant-by-class self::C::T* value) → void {
+  get getter1() → self::C::T%
+    return this.{self::C::field1}{self::C::T%};
+  get getter2() → () → self::C::T%
+    return this.{self::C::field2}{() → self::C::T%};
+  get getter3() → (self::C::T%) → void
+    return this.{self::C::field3}{(self::C::T%) → void};
+  get getter4() → (self::C::T%) → self::C::T%
+    return this.{self::C::field4}{(self::C::T%) → self::C::T%};
+  get getter5() → () → () → self::C::T%
+    return this.{self::C::field5}{() → () → self::C::T%};
+  get getter6() → (() → self::C::T%) → void
+    return this.{self::C::field6}{(() → self::C::T%) → void};
+  get getter7() → (() → self::C::T%) → self::C::T%
+    return this.{self::C::field7}{(() → self::C::T%) → self::C::T%};
+  get getter8() → ((self::C::T%) → void) → void
+    return this.{self::C::field8}{((self::C::T%) → void) → void};
+  get getter9() → ((self::C::T%) → void) → self::C::T%
+    return this.{self::C::field9}{((self::C::T%) → void) → self::C::T%};
+  get getter10() → ((self::C::T%) → self::C::T%) → void
+    return this.{self::C::field10}{((self::C::T%) → self::C::T%) → void};
+  get getter11() → ((self::C::T%) → self::C::T%) → self::C::T%
+    return this.{self::C::field11}{((self::C::T%) → self::C::T%) → self::C::T%};
+  get getter12() → <S extends self::C::T% = dynamic>() → S%
+    return this.{self::C::field12}{<S extends self::C::T% = dynamic>() → S%};
+  get getter13() → <S extends self::C::T% = dynamic>(S%) → void
+    return this.{self::C::field13}{<S extends self::C::T% = dynamic>(S%) → void};
+  get getter14() → <S extends self::C::T% = dynamic>(S%) → S%
+    return this.{self::C::field14}{<S extends self::C::T% = dynamic>(S%) → S%};
+  get getter15() → (<S extends self::C::T% = dynamic>() → S%) → void
+    return this.{self::C::field15}{(<S extends self::C::T% = dynamic>() → S%) → void};
+  set setter1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  set setter2(covariant-by-class () →* self::C::T* value) → void {
+  set setter2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  set setter3((self::C::T*) →* void value) → void {
+  set setter3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  set setter4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
+  set setter5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  set setter6((() →* self::C::T*) →* void value) → void {
+  set setter6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  set setter7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  set setter8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  set setter9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  set setter10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  set setter11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  set setter12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  set setter13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  set setter14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  set setter15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  method method1(covariant-by-class self::C::T* value) → void {
+  method method1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  method method2(covariant-by-class () →* self::C::T* value) → void {
+  method method2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  method method3((self::C::T*) →* void value) → void {
+  method method3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  method method4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
+  method method5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  method method6((() →* self::C::T*) →* void value) → void {
+  method method6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  method method7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  method method8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  method method9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  method method10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  method method11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  method method12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  method method13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  method method14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  method method15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::num*>* c = new self::C::•<core::int*>(0);
-  c.{self::C::field1}{core::num*};
-  c.{self::C::field2}{() →* core::num*};
+  self::C<core::num> c = new self::C::•<core::int>(0);
+  c.{self::C::field1}{core::num};
+  c.{self::C::field2}{() → core::num};
   try {
-    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::field3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::field4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field5}{() →* () →* core::num*};
+  c.{self::C::field5}{() → () → core::num};
   try {
-    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::field6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::field7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field8}{((core::num*) →* void) →* void};
-  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::field8}{((core::num) → void) → void};
+  c.{self::C::field9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter1}{core::num*};
-  c.{self::C::getter2}{() →* core::num*};
+  c.{self::C::getter1}{core::num};
+  c.{self::C::getter2}{() → core::num};
   try {
-    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::getter3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::getter4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter5}{() →* () →* core::num*};
+  c.{self::C::getter5}{() → () → core::num};
   try {
-    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::getter6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter8}{((core::num*) →* void) →* void};
-  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::getter8}{((core::num) → void) → void};
+  c.{self::C::getter9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
     c.{self::C::setter1} = 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter2} = () → core::double* => 0.5;
+    c.{self::C::setter2} = () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter3} = (core::num* n) → Null {};
+  c.{self::C::setter3} = (core::num n) → void {};
   try {
-    c.{self::C::setter4} = (core::num* n) → core::double* => 0.5;
+    c.{self::C::setter4} = (core::num n) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter5} = () → () →* core::double* => () → core::double* => 0.5;
+    c.{self::C::setter5} = () → () → core::double => () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter6} = (() →* core::num* f) → Null {};
+  c.{self::C::setter6} = (() → core::num f) → void {};
   try {
-    c.{self::C::setter7} = (() →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter7} = (() → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter8} = ((core::double*) →* void f) → Null {};
+    c.{self::C::setter8} = ((core::double) → void f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter9} = ((core::double*) →* void f) → core::double* => 0.5;
+    c.{self::C::setter9} = ((core::double) → void f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter10} = ((core::double*) →* core::num* f) → Null {};
+    c.{self::C::setter10} = ((core::double) → core::num f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter11} = ((core::double*) →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter11} = ((core::double) → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter12} = <S extends core::num*>() → Null => null;
+    c.{self::C::setter12} = <S extends core::num>() → Never => throw "";
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter13} = <S extends core::num*>(S* s) → Null {};
+    c.{self::C::setter13} = <S extends core::num>(S s) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter14} = <S extends core::num*>(S* s) → S* => s;
+    c.{self::C::setter14} = <S extends core::num>(S s) → S => s;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter15} = (<S extends core::num*>() →* S* f) → Null {};
+    c.{self::C::setter15} = (<S extends core::num>() → S f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method1}(0.5){(core::num*) →* void};
+    c.{self::C::method1}(0.5){(core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
+    c.{self::C::method2}(() → core::double => 0.5){(() → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
+  c.{self::C::method3}((core::num n) → void {}){((core::num) → void) → void};
   try {
-    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
+    c.{self::C::method4}((core::num n) → core::double => 0.5){((core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
+    c.{self::C::method5}(() → () → core::double => () → core::double => 0.5){(() → () → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
+  c.{self::C::method6}((() → core::num f) → void {}){((() → core::num) → void) → void};
   try {
-    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
+    c.{self::C::method7}((() → core::num f) → core::double => 0.5){((() → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
+    c.{self::C::method8}(((core::double) → void f) → void {}){(((core::num) → void) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
+    c.{self::C::method9}(((core::double) → void f) → core::double => 0.5){(((core::num) → void) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
+    c.{self::C::method10}(((core::double) → core::num f) → void {}){(((core::num) → core::num) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
+    c.{self::C::method11}(((core::double) → core::num f) → core::double => 0.5){(((core::num) → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
+    c.{self::C::method12}(<S extends core::num>() → Never => throw ""){(<S extends core::num = dynamic>() → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
+    c.{self::C::method13}(<S extends core::num>(S s) → void {}){(<S extends core::num = dynamic>(S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
+    c.{self::C::method14}(<S extends core::num>(S s) → S => s){(<S extends core::num = dynamic>(S) → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
+    c.{self::C::method15}((<S extends core::num>() → S f) → void {}){((<S extends core::num = dynamic>() → S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
 }
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
index 0280a26..f9f7a84 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
@@ -1,125 +1,115 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* field1;
-  covariant-by-class field () →* self::C::T* field2;
-  field (self::C::T*) →* void field3;
-  covariant-by-class field (self::C::T*) →* self::C::T* field4;
-  covariant-by-class field () →* () →* self::C::T* field5;
-  field (() →* self::C::T*) →* void field6;
-  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
-  covariant-by-class field ((self::C::T*) →* void) →* void field8;
-  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
-  constructor •(self::C::T* field1) → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% field1;
+  covariant-by-class field () → self::C::T% field2;
+  field (self::C::T%) → void field3;
+  covariant-by-class field (self::C::T%) → self::C::T% field4;
+  covariant-by-class field () → () → self::C::T% field5;
+  field (() → self::C::T%) → void field6;
+  covariant-by-class field (() → self::C::T%) → self::C::T% field7;
+  covariant-by-class field ((self::C::T%) → void) → void field8;
+  covariant-by-class field ((self::C::T%) → void) → self::C::T% field9;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → void field10;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → self::C::T% field11;
+  covariant-by-class field <S extends self::C::T% = dynamic>() → S% field12;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → void field13;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → S% field14;
+  covariant-by-class field (<S extends self::C::T% = dynamic>() → S%) → void field15;
+  constructor •(self::C::T% field1) → self::C<self::C::T%>
     ;
-  get getter1() → self::C::T*
+  get getter1() → self::C::T%
     ;
-  get getter2() → () →* self::C::T*
+  get getter2() → () → self::C::T%
     ;
-  get getter3() → (self::C::T*) →* void
+  get getter3() → (self::C::T%) → void
     ;
-  get getter4() → (self::C::T*) →* self::C::T*
+  get getter4() → (self::C::T%) → self::C::T%
     ;
-  get getter5() → () →* () →* self::C::T*
+  get getter5() → () → () → self::C::T%
     ;
-  get getter6() → (() →* self::C::T*) →* void
+  get getter6() → (() → self::C::T%) → void
     ;
-  get getter7() → (() →* self::C::T*) →* self::C::T*
+  get getter7() → (() → self::C::T%) → self::C::T%
     ;
-  get getter8() → ((self::C::T*) →* void) →* void
+  get getter8() → ((self::C::T%) → void) → void
     ;
-  get getter9() → ((self::C::T*) →* void) →* self::C::T*
+  get getter9() → ((self::C::T%) → void) → self::C::T%
     ;
-  get getter10() → ((self::C::T*) →* self::C::T*) →* void
+  get getter10() → ((self::C::T%) → self::C::T%) → void
     ;
-  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
+  get getter11() → ((self::C::T%) → self::C::T%) → self::C::T%
     ;
-  get getter12() → <S extends self::C::T* = dynamic>() →* S*
+  get getter12() → <S extends self::C::T% = dynamic>() → S%
     ;
-  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
+  get getter13() → <S extends self::C::T% = dynamic>(S%) → void
     ;
-  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
+  get getter14() → <S extends self::C::T% = dynamic>(S%) → S%
     ;
-  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
+  get getter15() → (<S extends self::C::T% = dynamic>() → S%) → void
     ;
-  set setter1(covariant-by-class self::C::T* value) → void
+  set setter1(covariant-by-class self::C::T% value) → void
     ;
-  set setter2(covariant-by-class () →* self::C::T* value) → void
+  set setter2(covariant-by-class () → self::C::T% value) → void
     ;
-  set setter3((self::C::T*) →* void value) → void
+  set setter3((self::C::T%) → void value) → void
     ;
-  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void
+  set setter4(covariant-by-class (self::C::T%) → self::C::T% value) → void
     ;
-  set setter5(covariant-by-class () →* () →* self::C::T* value) → void
+  set setter5(covariant-by-class () → () → self::C::T% value) → void
     ;
-  set setter6((() →* self::C::T*) →* void value) → void
+  set setter6((() → self::C::T%) → void value) → void
     ;
-  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void
+  set setter7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void
     ;
-  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void
+  set setter8(covariant-by-class ((self::C::T%) → void) → void value) → void
     ;
-  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void
+  set setter9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void
     ;
-  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void
+  set setter10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void
     ;
-  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
+  set setter11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void
     ;
-  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void
+  set setter12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void
     ;
-  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void
+  set setter13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void
     ;
-  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void
+  set setter14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void
     ;
-  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
+  set setter15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void
     ;
-  method method1(covariant-by-class self::C::T* value) → void
+  method method1(covariant-by-class self::C::T% value) → void
     ;
-  method method2(covariant-by-class () →* self::C::T* value) → void
+  method method2(covariant-by-class () → self::C::T% value) → void
     ;
-  method method3((self::C::T*) →* void value) → void
+  method method3((self::C::T%) → void value) → void
     ;
-  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void
+  method method4(covariant-by-class (self::C::T%) → self::C::T% value) → void
     ;
-  method method5(covariant-by-class () →* () →* self::C::T* value) → void
+  method method5(covariant-by-class () → () → self::C::T% value) → void
     ;
-  method method6((() →* self::C::T*) →* void value) → void
+  method method6((() → self::C::T%) → void value) → void
     ;
-  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void
+  method method7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void
     ;
-  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void
+  method method8(covariant-by-class ((self::C::T%) → void) → void value) → void
     ;
-  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void
+  method method9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void
     ;
-  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void
+  method method10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void
     ;
-  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
+  method method11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void
     ;
-  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void
+  method method12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void
     ;
-  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void
+  method method13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void
     ;
-  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void
+  method method14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void
     ;
-  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
+  method method15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
index 5f06498..f80ffa1 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
@@ -1,493 +1,483 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::C::T* field1;
-  covariant-by-class field () →* self::C::T* field2;
-  field (self::C::T*) →* void field3;
-  covariant-by-class field (self::C::T*) →* self::C::T* field4;
-  covariant-by-class field () →* () →* self::C::T* field5;
-  field (() →* self::C::T*) →* void field6;
-  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
-  covariant-by-class field ((self::C::T*) →* void) →* void field8;
-  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
-  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
-  constructor •(self::C::T* field1) → self::C<self::C::T*>*
-    : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::C::T% field1;
+  covariant-by-class field () → self::C::T% field2;
+  field (self::C::T%) → void field3;
+  covariant-by-class field (self::C::T%) → self::C::T% field4;
+  covariant-by-class field () → () → self::C::T% field5;
+  field (() → self::C::T%) → void field6;
+  covariant-by-class field (() → self::C::T%) → self::C::T% field7;
+  covariant-by-class field ((self::C::T%) → void) → void field8;
+  covariant-by-class field ((self::C::T%) → void) → self::C::T% field9;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → void field10;
+  covariant-by-class field ((self::C::T%) → self::C::T%) → self::C::T% field11;
+  covariant-by-class field <S extends self::C::T% = dynamic>() → S% field12;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → void field13;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → S% field14;
+  covariant-by-class field (<S extends self::C::T% = dynamic>() → S%) → void field15;
+  constructor •(self::C::T% field1) → self::C<self::C::T%>
+    : self::C::field1 = field1, self::C::field2 = () → self::C::T% => field1, self::C::field3 = (self::C::T% t) → void {}, self::C::field4 = (self::C::T% t) → self::C::T% => t, self::C::field5 = () → () → self::C::T% => () → self::C::T% => field1, self::C::field6 = (() → self::C::T% f) → void {}, self::C::field7 = (() → self::C::T% f) → self::C::T% => field1, self::C::field8 = ((self::C::T%) → void f) → void {}, self::C::field9 = ((self::C::T%) → void f) → self::C::T% => field1, self::C::field10 = ((self::C::T%) → self::C::T% f) → void {}, self::C::field11 = ((self::C::T%) → self::C::T% f) → self::C::T% => field1, self::C::field12 = <S extends self::C::T%>() → Never => throw "", self::C::field13 = <S extends self::C::T%>(S% s) → void {}, self::C::field14 = <S extends self::C::T%>(S% s) → S% => s, self::C::field15 = (<S extends self::C::T%>() → S% f) → void {}, super core::Object::•()
     ;
-  get getter1() → self::C::T*
-    return this.{self::C::field1}{self::C::T*};
-  get getter2() → () →* self::C::T*
-    return this.{self::C::field2}{() →* self::C::T*};
-  get getter3() → (self::C::T*) →* void
-    return this.{self::C::field3}{(self::C::T*) →* void};
-  get getter4() → (self::C::T*) →* self::C::T*
-    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
-  get getter5() → () →* () →* self::C::T*
-    return this.{self::C::field5}{() →* () →* self::C::T*};
-  get getter6() → (() →* self::C::T*) →* void
-    return this.{self::C::field6}{(() →* self::C::T*) →* void};
-  get getter7() → (() →* self::C::T*) →* self::C::T*
-    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
-  get getter8() → ((self::C::T*) →* void) →* void
-    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
-  get getter9() → ((self::C::T*) →* void) →* self::C::T*
-    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
-  get getter10() → ((self::C::T*) →* self::C::T*) →* void
-    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
-  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
-    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
-  get getter12() → <S extends self::C::T* = dynamic>() →* S*
-    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
-  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
-    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
-  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
-    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
-  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
-    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
-  set setter1(covariant-by-class self::C::T* value) → void {
+  get getter1() → self::C::T%
+    return this.{self::C::field1}{self::C::T%};
+  get getter2() → () → self::C::T%
+    return this.{self::C::field2}{() → self::C::T%};
+  get getter3() → (self::C::T%) → void
+    return this.{self::C::field3}{(self::C::T%) → void};
+  get getter4() → (self::C::T%) → self::C::T%
+    return this.{self::C::field4}{(self::C::T%) → self::C::T%};
+  get getter5() → () → () → self::C::T%
+    return this.{self::C::field5}{() → () → self::C::T%};
+  get getter6() → (() → self::C::T%) → void
+    return this.{self::C::field6}{(() → self::C::T%) → void};
+  get getter7() → (() → self::C::T%) → self::C::T%
+    return this.{self::C::field7}{(() → self::C::T%) → self::C::T%};
+  get getter8() → ((self::C::T%) → void) → void
+    return this.{self::C::field8}{((self::C::T%) → void) → void};
+  get getter9() → ((self::C::T%) → void) → self::C::T%
+    return this.{self::C::field9}{((self::C::T%) → void) → self::C::T%};
+  get getter10() → ((self::C::T%) → self::C::T%) → void
+    return this.{self::C::field10}{((self::C::T%) → self::C::T%) → void};
+  get getter11() → ((self::C::T%) → self::C::T%) → self::C::T%
+    return this.{self::C::field11}{((self::C::T%) → self::C::T%) → self::C::T%};
+  get getter12() → <S extends self::C::T% = dynamic>() → S%
+    return this.{self::C::field12}{<S extends self::C::T% = dynamic>() → S%};
+  get getter13() → <S extends self::C::T% = dynamic>(S%) → void
+    return this.{self::C::field13}{<S extends self::C::T% = dynamic>(S%) → void};
+  get getter14() → <S extends self::C::T% = dynamic>(S%) → S%
+    return this.{self::C::field14}{<S extends self::C::T% = dynamic>(S%) → S%};
+  get getter15() → (<S extends self::C::T% = dynamic>() → S%) → void
+    return this.{self::C::field15}{(<S extends self::C::T% = dynamic>() → S%) → void};
+  set setter1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  set setter2(covariant-by-class () →* self::C::T* value) → void {
+  set setter2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  set setter3((self::C::T*) →* void value) → void {
+  set setter3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  set setter4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
+  set setter5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  set setter6((() →* self::C::T*) →* void value) → void {
+  set setter6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  set setter7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  set setter8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  set setter9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  set setter10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  set setter11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  set setter12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  set setter13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  set setter14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  set setter15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  method method1(covariant-by-class self::C::T* value) → void {
+  method method1(covariant-by-class self::C::T% value) → void {
     this.{self::C::field1} = value;
   }
-  method method2(covariant-by-class () →* self::C::T* value) → void {
+  method method2(covariant-by-class () → self::C::T% value) → void {
     this.{self::C::field2} = value;
   }
-  method method3((self::C::T*) →* void value) → void {
+  method method3((self::C::T%) → void value) → void {
     this.{self::C::field3} = value;
   }
-  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+  method method4(covariant-by-class (self::C::T%) → self::C::T% value) → void {
     this.{self::C::field4} = value;
   }
-  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
+  method method5(covariant-by-class () → () → self::C::T% value) → void {
     this.{self::C::field5} = value;
   }
-  method method6((() →* self::C::T*) →* void value) → void {
+  method method6((() → self::C::T%) → void value) → void {
     this.{self::C::field6} = value;
   }
-  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+  method method7(covariant-by-class (() → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field7} = value;
   }
-  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+  method method8(covariant-by-class ((self::C::T%) → void) → void value) → void {
     this.{self::C::field8} = value;
   }
-  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+  method method9(covariant-by-class ((self::C::T%) → void) → self::C::T% value) → void {
     this.{self::C::field9} = value;
   }
-  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+  method method10(covariant-by-class ((self::C::T%) → self::C::T%) → void value) → void {
     this.{self::C::field10} = value;
   }
-  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  method method11(covariant-by-class ((self::C::T%) → self::C::T%) → self::C::T% value) → void {
     this.{self::C::field11} = value;
   }
-  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+  method method12(covariant-by-class <S extends self::C::T% = dynamic>() → S% value) → void {
     this.{self::C::field12} = value;
   }
-  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  method method13(covariant-by-class <S extends self::C::T% = dynamic>(S%) → void value) → void {
     this.{self::C::field13} = value;
   }
-  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  method method14(covariant-by-class <S extends self::C::T% = dynamic>(S%) → S% value) → void {
     this.{self::C::field14} = value;
   }
-  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  method method15(covariant-by-class (<S extends self::C::T% = dynamic>() → S%) → void value) → void {
     this.{self::C::field15} = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::C<core::num*>* c = new self::C::•<core::int*>(0);
-  c.{self::C::field1}{core::num*};
-  c.{self::C::field2}{() →* core::num*};
+  self::C<core::num> c = new self::C::•<core::int>(0);
+  c.{self::C::field1}{core::num};
+  c.{self::C::field2}{() → core::num};
   try {
-    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::field3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::field4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field5}{() →* () →* core::num*};
+  c.{self::C::field5}{() → () → core::num};
   try {
-    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::field6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::field7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::field8}{((core::num*) →* void) →* void};
-  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::field8}{((core::num) → void) → void};
+  c.{self::C::field9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::field10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::field11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::field12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::field13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::field14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::field15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter1}{core::num*};
-  c.{self::C::getter2}{() →* core::num*};
+  c.{self::C::getter1}{core::num};
+  c.{self::C::getter2}{() → core::num};
   try {
-    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    c.{self::C::getter3}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    c.{self::C::getter4}{(core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter5}{() →* () →* core::num*};
+  c.{self::C::getter5}{() → () → core::num};
   try {
-    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    c.{self::C::getter6}{(() → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    c.{self::C::getter7}{(() → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (() → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::getter8}{((core::num*) →* void) →* void};
-  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
+  c.{self::C::getter8}{((core::num) → void) → void};
+  c.{self::C::getter9}{((core::num) → void) → core::num};
   try {
-    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    c.{self::C::getter10}{((core::num) → core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    c.{self::C::getter11}{((core::num) → core::num) → core::num} as{TypeError,CovarianceCheck,ForNonNullableByDefault} ((core::num) → core::num) → core::num;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    c.{self::C::getter12}{<S extends core::num = dynamic>() → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>() → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    c.{self::C::getter13}{<S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    c.{self::C::getter14}{<S extends core::num = dynamic>(S) → S} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → S;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    c.{self::C::getter15}{(<S extends core::num = dynamic>() → S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (<S extends core::num = dynamic>() → S) → void;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
     c.{self::C::setter1} = 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter2} = () → core::double* => 0.5;
+    c.{self::C::setter2} = () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter3} = (core::num* n) → Null {};
+  c.{self::C::setter3} = (core::num n) → void {};
   try {
-    c.{self::C::setter4} = (core::num* n) → core::double* => 0.5;
+    c.{self::C::setter4} = (core::num n) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter5} = () → () →* core::double* => () → core::double* => 0.5;
+    c.{self::C::setter5} = () → () → core::double => () → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::setter6} = (() →* core::num* f) → Null {};
+  c.{self::C::setter6} = (() → core::num f) → void {};
   try {
-    c.{self::C::setter7} = (() →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter7} = (() → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter8} = ((core::double*) →* void f) → Null {};
+    c.{self::C::setter8} = ((core::double) → void f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter9} = ((core::double*) →* void f) → core::double* => 0.5;
+    c.{self::C::setter9} = ((core::double) → void f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter10} = ((core::double*) →* core::num* f) → Null {};
+    c.{self::C::setter10} = ((core::double) → core::num f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter11} = ((core::double*) →* core::num* f) → core::double* => 0.5;
+    c.{self::C::setter11} = ((core::double) → core::num f) → core::double => 0.5;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter12} = <S extends core::num*>() → Null => null;
+    c.{self::C::setter12} = <S extends core::num>() → Never => throw "";
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter13} = <S extends core::num*>(S* s) → Null {};
+    c.{self::C::setter13} = <S extends core::num>(S s) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter14} = <S extends core::num*>(S* s) → S* => s;
+    c.{self::C::setter14} = <S extends core::num>(S s) → S => s;
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::setter15} = (<S extends core::num*>() →* S* f) → Null {};
+    c.{self::C::setter15} = (<S extends core::num>() → S f) → void {};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method1}(0.5){(core::num*) →* void};
+    c.{self::C::method1}(0.5){(core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
+    c.{self::C::method2}(() → core::double => 0.5){(() → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
+  c.{self::C::method3}((core::num n) → void {}){((core::num) → void) → void};
   try {
-    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
+    c.{self::C::method4}((core::num n) → core::double => 0.5){((core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
+    c.{self::C::method5}(() → () → core::double => () → core::double => 0.5){(() → () → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
-  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
+  c.{self::C::method6}((() → core::num f) → void {}){((() → core::num) → void) → void};
   try {
-    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
+    c.{self::C::method7}((() → core::num f) → core::double => 0.5){((() → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
+    c.{self::C::method8}(((core::double) → void f) → void {}){(((core::num) → void) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
+    c.{self::C::method9}(((core::double) → void f) → core::double => 0.5){(((core::num) → void) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
+    c.{self::C::method10}(((core::double) → core::num f) → void {}){(((core::num) → core::num) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
+    c.{self::C::method11}(((core::double) → core::num f) → core::double => 0.5){(((core::num) → core::num) → core::num) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
+    c.{self::C::method12}(<S extends core::num>() → Never => throw ""){(<S extends core::num = dynamic>() → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
+    c.{self::C::method13}(<S extends core::num>(S s) → void {}){(<S extends core::num = dynamic>(S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
+    c.{self::C::method14}(<S extends core::num>(S s) → S => s){(<S extends core::num = dynamic>(S) → S) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
+    c.{self::C::method15}((<S extends core::num>() → S f) → void {}){((<S extends core::num = dynamic>() → S) → void) → void};
     throw "TypeError expected";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
 }
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart b/pkg/front_end/testcases/general/nsm_covariance.dart
index 15b27f7..3ee3063 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import 'nsm_covariance_lib.dart';
 
 abstract class D1 implements A<int>, B {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect
index fb21efe..9419fb3 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'nsm_covariance_lib.dart';
 
 abstract class D1 implements A<int>, B {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect
index fb21efe..9419fb3 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'nsm_covariance_lib.dart';
 
 abstract class D1 implements A<int>, B {}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
index ac4c6e4..5fc1606 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
@@ -1,229 +1,133 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "nsm_covariance_lib.dart" as nsm;
 
 import "org-dartlang-testcase:///nsm_covariance_lib.dart";
 
-abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D1*
+abstract class D1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D2*
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D3*
+class D3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D4*
+class D4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as nsm;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → nsm::A<nsm::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → nsm::A<nsm::A::T%>
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
-  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
-  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
-  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
+  abstract method _method2({core::int a = #C1, core::int b = #C1, covariant-by-class nsm::A::T% c = #C1, covariant-by-class nsm::A::T% d = #C1}) → void;
+  abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
+  abstract method _method4({core::int a = #C1, covariant-by-class nsm::A::T% b = #C1}) → void;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → nsm::B*
+  synthetic constructor •() → nsm::B
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
-  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
-  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
-  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
+  abstract method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, core::int c = #C1, covariant-by-declaration core::int d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
+  abstract method _method4({covariant-by-declaration core::int a = #C1, core::int b = #C1}) → void;
 }
-abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C1*
+abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C2*
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C3*
+class C3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C4*
+class C4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect
index ac4c6e4..5fc1606 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect
@@ -1,229 +1,133 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "nsm_covariance_lib.dart" as nsm;
 
 import "org-dartlang-testcase:///nsm_covariance_lib.dart";
 
-abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D1*
+abstract class D1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D2*
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D3*
+class D3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D4*
+class D4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as nsm;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → nsm::A<nsm::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → nsm::A<nsm::A::T%>
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
-  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
-  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
-  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
+  abstract method _method2({core::int a = #C1, core::int b = #C1, covariant-by-class nsm::A::T% c = #C1, covariant-by-class nsm::A::T% d = #C1}) → void;
+  abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
+  abstract method _method4({core::int a = #C1, covariant-by-class nsm::A::T% b = #C1}) → void;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → nsm::B*
+  synthetic constructor •() → nsm::B
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
-  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
-  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
-  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
+  abstract method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, core::int c = #C1, covariant-by-declaration core::int d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
+  abstract method _method4({covariant-by-declaration core::int a = #C1, core::int b = #C1}) → void;
 }
-abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C1*
+abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C2*
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C3*
+class C3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C4*
+class C4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index 6352cee..6ab71bf 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -1,262 +1,166 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "nsm_covariance_lib.dart" as nsm;
 
 import "org-dartlang-testcase:///nsm_covariance_lib.dart";
 
-abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D1*
+abstract class D1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void;
 }
-abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D2*
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void;
 }
-class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D3*
+class D3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D3
     ;
   @core::override
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation) → dynamic};
 }
-class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D4*
+class D4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D4
     ;
   @core::override
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as nsm;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → nsm::A<nsm::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → nsm::A<nsm::A::T%>
     ;
-  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
-  abstract method _method2({core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d}) → void;
-  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
-  abstract method _method4({core::int* a, covariant-by-class nsm::A::T* b}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
+  abstract method _method2({core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d}) → void;
+  abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
+  abstract method _method4({core::int a, covariant-by-class nsm::A::T% b}) → void;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → nsm::B*
+  synthetic constructor •() → nsm::B
     ;
-  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
-  abstract method _method2({core::int* a, covariant-by-declaration core::int* b, core::int* c, covariant-by-declaration core::int* d}) → void;
-  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
-  abstract method _method4({covariant-by-declaration core::int* a, core::int* b}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
+  abstract method _method2({core::int a, covariant-by-declaration core::int b, core::int c, covariant-by-declaration core::int d}) → void;
+  abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
+  abstract method _method4({covariant-by-declaration core::int a, core::int b}) → void;
 }
-abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C1*
+abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void;
 }
-abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C2*
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void;
 }
-class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C3*
+class C3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C3
     ;
   @core::override
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation) → dynamic};
 }
-class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C4*
+class C4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C4
     ;
   @core::override
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a, covariant-by-class core::int b}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation) → dynamic};
 }
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:14:4 -> InstanceConstant(const _Override{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method1)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method2)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#a)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#b)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#c)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#d)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method3)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#_method4)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> ListConstant(const <dynamic>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#a)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:13:7 -> SymbolConstant(#b)
-Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:19:4 -> InstanceConstant(const _Override{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method1)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method2)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <dynamic>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#a)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#b)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#c)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#d)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method3)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#_method4)
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> ListConstant(const <dynamic>[])
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#a)
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:18:7 -> SymbolConstant(#b)
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:12:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:11:7 -> SymbolConstant(#b)
+Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance.dart:17:4 -> InstanceConstant(const _Override{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#b)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#c)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#d)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#_method4)
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> ListConstant(const <dynamic>[])
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#a)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance.dart:16:7 -> SymbolConstant(#b)
 Evaluated: StaticGet @ org-dartlang-testcase:///nsm_covariance_lib.dart:24:4 -> InstanceConstant(const _Override{})
 Evaluated: SymbolLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> SymbolConstant(#_method1)
 Evaluated: ListLiteral @ org-dartlang-testcase:///nsm_covariance_lib.dart:23:7 -> ListConstant(const <Type*>[])
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
index 60a0535..7e269dc 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
@@ -1,229 +1,133 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "nsm_covariance_lib.dart" as nsm;
 
 import "org-dartlang-testcase:///nsm_covariance_lib.dart";
 
-abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D1*
+abstract class D1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D2*
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → self::D3*
+class D3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → self::D3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → self::D4*
+class D4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as nsm;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → nsm::A<nsm::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → nsm::A<nsm::A::T%>
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
-  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
-  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
-  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int a, core::int b, covariant-by-class nsm::A::T% c, covariant-by-class nsm::A::T% d) → void;
+  abstract method _method2({core::int a = #C1, core::int b = #C1, covariant-by-class nsm::A::T% c = #C1, covariant-by-class nsm::A::T% d = #C1}) → void;
+  abstract method _method3(core::int a, covariant-by-class nsm::A::T% b) → void;
+  abstract method _method4({core::int a = #C1, covariant-by-class nsm::A::T% b = #C1}) → void;
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → nsm::B*
+  synthetic constructor •() → nsm::B
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
-  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
-  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
-  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method _method1(core::int x, covariant-by-declaration core::int y, core::int z, covariant-by-declaration core::int w) → void;
+  abstract method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, core::int c = #C1, covariant-by-declaration core::int d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int x, core::int y) → void;
+  abstract method _method4({covariant-by-declaration core::int a = #C1, core::int b = #C1}) → void;
 }
-abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C1*
+abstract class C1 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C2*
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void;
+  abstract forwarding-stub method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void;
 }
-class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
-  synthetic constructor •() → nsm::C3*
+class C3 extends core::Object implements nsm::A<core::int>, nsm::B {
+  synthetic constructor •() → nsm::C3
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int a, covariant-by-declaration core::int b, covariant-by-class core::int c, covariant-by-declaration covariant-by-class core::int d) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int a, covariant-by-class core::int b) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
-class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
-  synthetic constructor •() → nsm::C4*
+class C4 extends core::Object implements nsm::B, nsm::A<core::int> {
+  synthetic constructor •() → nsm::C4
     : super core::Object::•()
     ;
   @#C2
-  method noSuchMethod(core::Invocation* invocation) → dynamic
+  method noSuchMethod(core::Invocation invocation) → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
-    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method1(core::int x, covariant-by-declaration core::int y, covariant-by-class core::int z, covariant-by-declaration covariant-by-class core::int w) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method2({core::int a = #C1, covariant-by-declaration core::int b = #C1, covariant-by-class core::int c = #C1, covariant-by-declaration covariant-by-class core::int d = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int x, covariant-by-class core::int y) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int a = #C1, covariant-by-class core::int b = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation) → dynamic};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/nsm_covariance_lib.dart b/pkg/front_end/testcases/general/nsm_covariance_lib.dart
index 9f7f193..1afd545 100644
--- a/pkg/front_end/testcases/general/nsm_covariance_lib.dart
+++ b/pkg/front_end/testcases/general/nsm_covariance_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class A<T> {
   void _method1(int a, int b, T c, T d);
   void _method2({int a, int b, T c, T d});
diff --git a/pkg/front_end/testcases/general/null_aware.dart b/pkg/front_end/testcases/general/null_aware.dart
index 68064d0..332c09b 100644
--- a/pkg/front_end/testcases/general/null_aware.dart
+++ b/pkg/front_end/testcases/general/null_aware.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 class Foo {
   int field;
   static int staticField;
diff --git a/pkg/front_end/testcases/general/null_aware2.dart b/pkg/front_end/testcases/general/null_aware2.dart
new file mode 100644
index 0000000..466502d
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2016, 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.
+
+class Foo {
+  int field;
+  static int staticField;
+}
+
+test() {
+  Foo foo = new Foo();
+  foo?.field = 5;
+  Foo?.staticField = 5;
+  foo.field ??= 5;
+  Foo.staticField ??= 5;
+  foo?.field ??= 5;
+  Foo?.staticField ??= 5;
+
+  int intValue = foo.field ?? 6;
+  num numValue = foo.field ?? 4.5;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/general/null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..a379924
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class Foo {
+  int field;
+  static int staticField;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..677ce23
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class Foo {
+  int field;
+  static int staticField;
+}
+
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.weak.expect b/pkg/front_end/testcases/general/null_aware2.dart.weak.expect
new file mode 100644
index 0000000..6e6083c
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware2.dart:7:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:13:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField = 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField ??= 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:12:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field = 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:14:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   foo.field ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:15:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo.staticField ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:16:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field ??= 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:8: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo?.staticField ??= 5;
+//        ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:19:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   int intValue = foo.field ?? 6;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:20:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   num numValue = foo.field ?? 4.5;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:6:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int field = null;
+  static field core::int staticField = null;
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
+  self::Foo::staticField = 5;
+  let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
+  core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..6e6083c
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware2.dart:7:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:13:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField = 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField ??= 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:12:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field = 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:14:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   foo.field ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:15:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo.staticField ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:16:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field ??= 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:8: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo?.staticField ??= 5;
+//        ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:19:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   int intValue = foo.field ?? 6;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:20:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   num numValue = foo.field ?? 4.5;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:6:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int field = null;
+  static field core::int staticField = null;
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
+  self::Foo::staticField = 5;
+  let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
+  core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..4d37bab
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware2.dart:7:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int field;
+  static field core::int staticField;
+  synthetic constructor •() → self::Foo
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..6e6083c
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware2.dart:7:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:13:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField = 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:3: Warning: The class 'Foo' cannot be null.
+// Try replacing '?.' with '.'
+//   Foo?.staticField ??= 5;
+//   ^^^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:12:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field = 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:14:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   foo.field ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:15:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo.staticField ??= 5;
+//       ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:16:3: Warning: Operand of null-aware operation '?.' has type 'Foo' which excludes null.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/null_aware2.dart'.
+//   foo?.field ??= 5;
+//   ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:17:8: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Foo?.staticField ??= 5;
+//        ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:19:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   int intValue = foo.field ?? 6;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:20:22: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   num numValue = foo.field ?? 4.5;
+//                      ^
+//
+// pkg/front_end/testcases/general/null_aware2.dart:6:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int field = null;
+  static field core::int staticField = null;
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  let final self::Foo #t1 = foo in #t1 == null ?{core::int?} null : #t1.{self::Foo::field} = 5;
+  self::Foo::staticField = 5;
+  let final self::Foo #t2 = foo in #t2.{self::Foo::field}{core::int} == null ?{core::int} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  let final self::Foo #t3 = foo in #t3 == null ?{core::int?} null : #t3.{self::Foo::field}{core::int} == null ?{core::int} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int} self::Foo::staticField = 5 : null;
+  core::int intValue = let final core::int #t4 = foo.{self::Foo::field}{core::int} in #t4 == null ?{core::int} 6 : #t4;
+  core::num numValue = let final core::int #t5 = foo.{self::Foo::field}{core::int} in #t5 == null ?{core::num} 4.5 : #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart b/pkg/front_end/testcases/general/null_aware_for_in.dart
index 73cd74f..5a93b8e 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Class {}
 
 main() {
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline.expect
index 790b6d3..52b290c 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline_modelled.expect
index 790b6d3..52b290c 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
index 46f5652..7ca9a24 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      self::Class c = #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect
index 46f5652..7ca9a24 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic o;
   if(false) {
-    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
-      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      self::Class c = #t1 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
     }
   }
 }
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.outline.expect
index 7ea3238..3e20e89 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
index eef17d5..b8db0af 100644
--- a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.transformed.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   dynamic o;
   if(false) {
     {
-      core::Iterator<dynamic>* :sync-for-iterator = ((let final dynamic #t1 = o in #t1 == null ?{dynamic} null : #t1{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      core::Iterator<dynamic> :sync-for-iterator = ((let final dynamic #t1 = o in #t1 == null ?{dynamic} null : #t1{dynamic}.iterable) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
         final dynamic #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
-          self::Class* c = #t2 as{TypeError,ForDynamic} self::Class*;
+          self::Class c = #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
         }
       }
     }
diff --git a/pkg/front_end/testcases/general/null_aware_postfix.dart b/pkg/front_end/testcases/general/null_aware_postfix.dart
index 0f52747..8479a5e 100644
--- a/pkg/front_end/testcases/general/null_aware_postfix.dart
+++ b/pkg/front_end/testcases/general/null_aware_postfix.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 class A {
   B b;
 }
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart b/pkg/front_end/testcases/general/null_aware_postfix2.dart
new file mode 100644
index 0000000..0c98c37
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart
@@ -0,0 +1,21 @@
+// 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.
+
+class A {
+  B b;
+
+  A(this.b);
+}
+
+class B {
+  C operator +(int i) => new C();
+}
+
+class C extends B {}
+
+main() {
+  A? a;
+  a?.b++;
+  B? c = a?.b++;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline.expect
new file mode 100644
index 0000000..bcb8bc4
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+class A {
+  B b;
+  A(this.b);
+}
+
+class B {
+  C operator +(int i) => new C();
+}
+
+class C extends B {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a045743
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class A {
+  A(this.b);
+  B b;
+}
+
+class B {
+  C operator +(int i) => new C();
+}
+
+class C extends B {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.expect
new file mode 100644
index 0000000..bc5d862
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B b;
+  constructor •(self::B b) → self::A
+    : self::A::b = b, super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator +(core::int i) → self::C
+    return new self::C::•();
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {
+  self::A? a;
+  let final self::A? #t1 = a in #t1 == null ?{self::B?} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B}.{self::B::+}(1){(core::int) → self::C};
+  self::B? c = let final self::A? #t2 = a in #t2 == null ?{self::B?} null : let final self::B #t3 = #t2.{self::A::b}{self::B} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int) → self::C} in #t3;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.modular.expect
new file mode 100644
index 0000000..bc5d862
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B b;
+  constructor •(self::B b) → self::A
+    : self::A::b = b, super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator +(core::int i) → self::C
+    return new self::C::•();
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {
+  self::A? a;
+  let final self::A? #t1 = a in #t1 == null ?{self::B?} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B}.{self::B::+}(1){(core::int) → self::C};
+  self::B? c = let final self::A? #t2 = a in #t2 == null ?{self::B?} null : let final self::B #t3 = #t2.{self::A::b}{self::B} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int) → self::C} in #t3;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.outline.expect
new file mode 100644
index 0000000..5e14f93
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B b;
+  constructor •(self::B b) → self::A
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+  operator +(core::int i) → self::C
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.transformed.expect
new file mode 100644
index 0000000..bc5d862
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix2.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B b;
+  constructor •(self::B b) → self::A
+    : self::A::b = b, super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator +(core::int i) → self::C
+    return new self::C::•();
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {
+  self::A? a;
+  let final self::A? #t1 = a in #t1 == null ?{self::B?} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B}.{self::B::+}(1){(core::int) → self::C};
+  self::B? c = let final self::A? #t2 = a in #t2 == null ?{self::B?} null : let final self::B #t3 = #t2.{self::A::b}{self::B} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int) → self::C} in #t3;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart b/pkg/front_end/testcases/general/null_aware_spread.dart
index 09070318..d6ec296 100644
--- a/pkg/front_end/testcases/general/null_aware_spread.dart
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 nullAwareListSpread(List<String> list) {
   list = ['foo', ...?list];
 }
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart b/pkg/front_end/testcases/general/null_aware_spread2.dart
new file mode 100644
index 0000000..10c4426
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart
@@ -0,0 +1,21 @@
+// 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.
+
+nullAwareListSpread(List<String>? list) {
+  list = ['foo', ...?list];
+}
+
+nullAwareSetSpread(Set<String>? set) {
+  set = {'foo', ...?set};
+}
+
+nullAwareMapSpread(Map<int, String>? map) {
+  map = {0: 'foo', ...?map};
+}
+
+main() {
+  nullAwareListSpread(null);
+  nullAwareSetSpread(null);
+  nullAwareMapSpread(null);
+}
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline.expect
new file mode 100644
index 0000000..b0017a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+nullAwareListSpread(List<String>? list) {}
+nullAwareSetSpread(Set<String>? set) {}
+nullAwareMapSpread(Map<int, String>? map) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..618d2d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+main() {}
+nullAwareListSpread(List<String>? list) {}
+nullAwareMapSpread(Map<int, String>? map) {}
+nullAwareSetSpread(Set<String>? set) {}
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect
new file mode 100644
index 0000000..0eaed6c
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method nullAwareListSpread(core::List<core::String>? list) → dynamic {
+  list = block {
+    final core::List<core::String> #t1 = <core::String>["foo"];
+    final core::Iterable<core::String>? #t2 = list;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t1;
+}
+static method nullAwareSetSpread(core::Set<core::String>? set) → dynamic {
+  set = block {
+    final core::Set<core::String> #t3 = col::LinkedHashSet::•<core::String>();
+    #t3.{core::Set::add}{Invariant}("foo"){(core::String) → core::bool};
+    final core::Iterable<core::String>? #t4 = set;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+}
+static method nullAwareMapSpread(core::Map<core::int, core::String>? map) → dynamic {
+  map = block {
+    final core::Map<core::int, core::String> #t5 = <core::int, core::String>{};
+    #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int, core::String) → void};
+    final core::Map<core::int, core::String>? #t6 = map;
+    if(!(#t6 == null))
+      for (final core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
+        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int}, #t7.{core::MapEntry::value}{core::String}){(core::int, core::String) → void};
+  } =>#t5;
+}
+static method main() → dynamic {
+  self::nullAwareListSpread(null);
+  self::nullAwareSetSpread(null);
+  self::nullAwareMapSpread(null);
+}
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect
new file mode 100644
index 0000000..0eaed6c
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method nullAwareListSpread(core::List<core::String>? list) → dynamic {
+  list = block {
+    final core::List<core::String> #t1 = <core::String>["foo"];
+    final core::Iterable<core::String>? #t2 = list;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t1;
+}
+static method nullAwareSetSpread(core::Set<core::String>? set) → dynamic {
+  set = block {
+    final core::Set<core::String> #t3 = col::LinkedHashSet::•<core::String>();
+    #t3.{core::Set::add}{Invariant}("foo"){(core::String) → core::bool};
+    final core::Iterable<core::String>? #t4 = set;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+}
+static method nullAwareMapSpread(core::Map<core::int, core::String>? map) → dynamic {
+  map = block {
+    final core::Map<core::int, core::String> #t5 = <core::int, core::String>{};
+    #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int, core::String) → void};
+    final core::Map<core::int, core::String>? #t6 = map;
+    if(!(#t6 == null))
+      for (final core::MapEntry<core::int, core::String> #t7 in #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>})
+        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int}, #t7.{core::MapEntry::value}{core::String}){(core::int, core::String) → void};
+  } =>#t5;
+}
+static method main() → dynamic {
+  self::nullAwareListSpread(null);
+  self::nullAwareSetSpread(null);
+  self::nullAwareMapSpread(null);
+}
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.outline.expect
new file mode 100644
index 0000000..2e3c9c5
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.outline.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method nullAwareListSpread(core::List<core::String>? list) → dynamic
+  ;
+static method nullAwareSetSpread(core::Set<core::String>? set) → dynamic
+  ;
+static method nullAwareMapSpread(core::Map<core::int, core::String>? map) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.transformed.expect
new file mode 100644
index 0000000..57a3fe5
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread2.dart.weak.transformed.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method nullAwareListSpread(core::List<core::String>? list) → dynamic {
+  list = block {
+    final core::List<core::String> #t1 = core::_GrowableList::_literal1<core::String>("foo");
+    final core::Iterable<core::String>? #t2 = list;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t1;
+}
+static method nullAwareSetSpread(core::Set<core::String>? set) → dynamic {
+  set = block {
+    final core::Set<core::String> #t3 = new col::_CompactLinkedHashSet::•<core::String>();
+    #t3.{core::Set::add}{Invariant}("foo"){(core::String) → core::bool};
+    final core::Iterable<core::String>? #t4 = set;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+}
+static method nullAwareMapSpread(core::Map<core::int, core::String>? map) → dynamic {
+  map = block {
+    final core::Map<core::int, core::String> #t5 = <core::int, core::String>{};
+    #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int, core::String) → void};
+    final core::Map<core::int, core::String>? #t6 = map;
+    if(!(#t6 == null)) {
+      core::Iterator<core::MapEntry<core::int, core::String>> :sync-for-iterator = #t6{core::Map<core::int, core::String>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::String>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::String>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::int, core::String> #t7 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::String>};
+        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int}, #t7.{core::MapEntry::value}{core::String}){(core::int, core::String) → void};
+      }
+    }
+  } =>#t5;
+}
+static method main() → dynamic {
+  self::nullAwareListSpread(null);
+  self::nullAwareSetSpread(null);
+  self::nullAwareMapSpread(null);
+}
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart
index e766ae0..6b48e73 100644
--- a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 int? i;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.expect
index 9f0d253..b2edbb8 100644
--- a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 // int? i;
 //    ^
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect
index 9f0d253..b2edbb8 100644
--- a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 // int? i;
 //    ^
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.outline.expect
index f60a7c1..15ded13 100644
--- a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.outline.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 // int? i;
 //    ^
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.transformed.expect
index 9f0d253..b2edbb8 100644
--- a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:4: Error: Null safety features are disabled for this library.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:7:4: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
 // int? i;
 //    ^
-// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
 // // @dart=2.9
 // ^^^^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart b/pkg/front_end/testcases/general/operator_method_not_found.dart
index 2275e69..c54c358 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class Foo {
 }
 
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline.expect
index ceba071..a467bf8 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline_modelled.expect
index ceba071..a467bf8 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
index eb609ae..7f39609 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -206,22 +206,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
@@ -242,7 +232,7 @@
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^" in foo{<unresolved>}.>=(2));
-  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
+  core::print(foo =={core::Object::==}{(core::Object) → core::bool} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
@@ -298,7 +288,7 @@
 Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^" in foo{<unresolved>}.>>(2));
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo #t1 = foo in let final core::int #t2 = 2 in let final core::int #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
@@ -330,7 +320,7 @@
         ^"{<invalid>}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
-        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
+        ^" =={core::Object::==}{(core::Object) → core::bool} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
         ^"{<invalid>}.+(foo));
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect
index eb609ae..7f39609 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -206,22 +206,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
@@ -242,7 +232,7 @@
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^" in foo{<unresolved>}.>=(2));
-  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
+  core::print(foo =={core::Object::==}{(core::Object) → core::bool} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
@@ -298,7 +288,7 @@
 Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^" in foo{<unresolved>}.>>(2));
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo #t1 = foo in let final core::int #t2 = 2 in let final core::int #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
@@ -330,7 +320,7 @@
         ^"{<invalid>}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
-        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
+        ^" =={core::Object::==}{(core::Object) → core::bool} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
         ^"{<invalid>}.+(foo));
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.outline.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.outline.expect
index bb0c2dc..bdd8315 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
index 13d310d..add53a6 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -206,22 +206,12 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '<' operator.
@@ -242,7 +232,7 @@
 Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^" in foo{<unresolved>}.>=(2));
-  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
+  core::print(foo =={core::Object::==}{(core::Object) → core::bool} 2);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '-' operator.
@@ -298,7 +288,7 @@
 Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^" in foo{<unresolved>}.>>(2));
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo #t1 = foo in let final core::int #t2 = 2 in let final core::int #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
 Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
@@ -330,7 +320,7 @@
         ^"{<invalid>}.>=(foo));
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
   print(==foo);
-        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
+        ^" =={core::Object::==}{(core::Object) → core::bool} foo);
   core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
   print(+foo);
         ^"{<invalid>}.+(foo));
diff --git a/pkg/front_end/testcases/general/operators.dart b/pkg/front_end/testcases/general/operators.dart
index 37b4cf3..e28636c 100644
--- a/pkg/front_end/testcases/general/operators.dart
+++ b/pkg/front_end/testcases/general/operators.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Operators {
   operator +(other) => null;
   operator &(other) => null;
@@ -9,7 +9,7 @@
   operator |(other) => null;
   operator ^(other) => null;
   operator /(other) => null;
-  operator ==(other) => null;
+  operator ==(other) => true;
   operator >(other) => null;
   operator >=(other) => null;
   operator [](index) => null;
diff --git a/pkg/front_end/testcases/general/operators.dart.textual_outline.expect b/pkg/front_end/testcases/general/operators.dart.textual_outline.expect
index 409d968..cf978f3 100644
--- a/pkg/front_end/testcases/general/operators.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/operators.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Operators {
   operator +(other) => null;
   operator &(other) => null;
@@ -6,7 +5,7 @@
   operator |(other) => null;
   operator ^(other) => null;
   operator /(other) => null;
-  operator ==(other) => null;
+  operator ==(other) => true;
   operator >(other) => null;
   operator >=(other) => null;
   operator [](index) => null;
diff --git a/pkg/front_end/testcases/general/operators.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/operators.dart.textual_outline_modelled.expect
index 73cbab6..bab579d 100644
--- a/pkg/front_end/testcases/general/operators.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/operators.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Operators {
   operator %(other) => null;
   operator &(other) => null;
@@ -10,7 +9,7 @@
   operator <(other) => null;
   operator <<(other) => null;
   operator <=(other) => null;
-  operator ==(other) => null;
+  operator ==(other) => true;
   operator >(other) => null;
   operator >=(other) => null;
   operator >>(other) => null;
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.expect b/pkg/front_end/testcases/general/operators.dart.weak.expect
index 8796e3d4..dd1cbd2 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  synthetic constructor •() → self::Operators*
+  synthetic constructor •() → self::Operators
     : super core::Object::•()
     ;
   operator +(dynamic other) → dynamic
@@ -18,8 +18,8 @@
     return null;
   operator /(dynamic other) → dynamic
     return null;
-  operator ==(dynamic other) → core::bool*
-    return null;
+  operator ==(core::Object other) → core::bool
+    return true;
   operator >(dynamic other) → dynamic
     return null;
   operator >=(dynamic other) → dynamic
@@ -45,37 +45,28 @@
     return null;
   operator unary-() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
-  self::Operators* a = new self::Operators::•();
-  self::Operators* b = new self::Operators::•();
-  a.{self::Operators::+}(b){(dynamic) →* dynamic};
-  a.{self::Operators::&}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~}(){() →* dynamic};
-  a.{self::Operators::|}(b){(dynamic) →* dynamic};
-  a.{self::Operators::^}(b){(dynamic) →* dynamic};
-  a.{self::Operators::/}(b){(dynamic) →* dynamic};
-  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
-  a.{self::Operators::>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
-  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
-  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::*}(b){(dynamic) →* dynamic};
-  a.{self::Operators::%}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::-}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
-  a.{self::Operators::unary-}(){() →* dynamic};
+  self::Operators a = new self::Operators::•();
+  self::Operators b = new self::Operators::•();
+  a.{self::Operators::+}(b){(dynamic) → dynamic};
+  a.{self::Operators::&}(b){(dynamic) → dynamic};
+  a.{self::Operators::~}(){() → dynamic};
+  a.{self::Operators::|}(b){(dynamic) → dynamic};
+  a.{self::Operators::^}(b){(dynamic) → dynamic};
+  a.{self::Operators::/}(b){(dynamic) → dynamic};
+  a =={self::Operators::==}{(core::Object) → core::bool} b;
+  a.{self::Operators::>}(b){(dynamic) → dynamic};
+  a.{self::Operators::>=}(b){(dynamic) → dynamic};
+  a.{self::Operators::[]}(0){(dynamic) → dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) → void};
+  a.{self::Operators::<<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<=}(b){(dynamic) → dynamic};
+  a.{self::Operators::*}(b){(dynamic) → dynamic};
+  a.{self::Operators::%}(b){(dynamic) → dynamic};
+  a.{self::Operators::>>}(b){(dynamic) → dynamic};
+  a.{self::Operators::-}(b){(dynamic) → dynamic};
+  a.{self::Operators::~/}(b){(dynamic) → dynamic};
+  a.{self::Operators::unary-}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.modular.expect b/pkg/front_end/testcases/general/operators.dart.weak.modular.expect
index 8796e3d4..dd1cbd2 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  synthetic constructor •() → self::Operators*
+  synthetic constructor •() → self::Operators
     : super core::Object::•()
     ;
   operator +(dynamic other) → dynamic
@@ -18,8 +18,8 @@
     return null;
   operator /(dynamic other) → dynamic
     return null;
-  operator ==(dynamic other) → core::bool*
-    return null;
+  operator ==(core::Object other) → core::bool
+    return true;
   operator >(dynamic other) → dynamic
     return null;
   operator >=(dynamic other) → dynamic
@@ -45,37 +45,28 @@
     return null;
   operator unary-() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
-  self::Operators* a = new self::Operators::•();
-  self::Operators* b = new self::Operators::•();
-  a.{self::Operators::+}(b){(dynamic) →* dynamic};
-  a.{self::Operators::&}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~}(){() →* dynamic};
-  a.{self::Operators::|}(b){(dynamic) →* dynamic};
-  a.{self::Operators::^}(b){(dynamic) →* dynamic};
-  a.{self::Operators::/}(b){(dynamic) →* dynamic};
-  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
-  a.{self::Operators::>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
-  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
-  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::*}(b){(dynamic) →* dynamic};
-  a.{self::Operators::%}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::-}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
-  a.{self::Operators::unary-}(){() →* dynamic};
+  self::Operators a = new self::Operators::•();
+  self::Operators b = new self::Operators::•();
+  a.{self::Operators::+}(b){(dynamic) → dynamic};
+  a.{self::Operators::&}(b){(dynamic) → dynamic};
+  a.{self::Operators::~}(){() → dynamic};
+  a.{self::Operators::|}(b){(dynamic) → dynamic};
+  a.{self::Operators::^}(b){(dynamic) → dynamic};
+  a.{self::Operators::/}(b){(dynamic) → dynamic};
+  a =={self::Operators::==}{(core::Object) → core::bool} b;
+  a.{self::Operators::>}(b){(dynamic) → dynamic};
+  a.{self::Operators::>=}(b){(dynamic) → dynamic};
+  a.{self::Operators::[]}(0){(dynamic) → dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) → void};
+  a.{self::Operators::<<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<=}(b){(dynamic) → dynamic};
+  a.{self::Operators::*}(b){(dynamic) → dynamic};
+  a.{self::Operators::%}(b){(dynamic) → dynamic};
+  a.{self::Operators::>>}(b){(dynamic) → dynamic};
+  a.{self::Operators::-}(b){(dynamic) → dynamic};
+  a.{self::Operators::~/}(b){(dynamic) → dynamic};
+  a.{self::Operators::unary-}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.outline.expect b/pkg/front_end/testcases/general/operators.dart.weak.outline.expect
index d6c0166..9f33f6c 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  synthetic constructor •() → self::Operators*
+  synthetic constructor •() → self::Operators
     ;
   operator +(dynamic other) → dynamic
     ;
@@ -17,7 +17,7 @@
     ;
   operator /(dynamic other) → dynamic
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     ;
   operator >(dynamic other) → dynamic
     ;
@@ -45,15 +45,6 @@
     ;
   operator unary-() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect b/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
index 8796e3d4..dd1cbd2 100644
--- a/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/operators.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  synthetic constructor •() → self::Operators*
+  synthetic constructor •() → self::Operators
     : super core::Object::•()
     ;
   operator +(dynamic other) → dynamic
@@ -18,8 +18,8 @@
     return null;
   operator /(dynamic other) → dynamic
     return null;
-  operator ==(dynamic other) → core::bool*
-    return null;
+  operator ==(core::Object other) → core::bool
+    return true;
   operator >(dynamic other) → dynamic
     return null;
   operator >=(dynamic other) → dynamic
@@ -45,37 +45,28 @@
     return null;
   operator unary-() → dynamic
     return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main(dynamic arguments) → dynamic {
-  self::Operators* a = new self::Operators::•();
-  self::Operators* b = new self::Operators::•();
-  a.{self::Operators::+}(b){(dynamic) →* dynamic};
-  a.{self::Operators::&}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~}(){() →* dynamic};
-  a.{self::Operators::|}(b){(dynamic) →* dynamic};
-  a.{self::Operators::^}(b){(dynamic) →* dynamic};
-  a.{self::Operators::/}(b){(dynamic) →* dynamic};
-  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
-  a.{self::Operators::>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
-  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
-  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<}(b){(dynamic) →* dynamic};
-  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
-  a.{self::Operators::*}(b){(dynamic) →* dynamic};
-  a.{self::Operators::%}(b){(dynamic) →* dynamic};
-  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
-  a.{self::Operators::-}(b){(dynamic) →* dynamic};
-  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
-  a.{self::Operators::unary-}(){() →* dynamic};
+  self::Operators a = new self::Operators::•();
+  self::Operators b = new self::Operators::•();
+  a.{self::Operators::+}(b){(dynamic) → dynamic};
+  a.{self::Operators::&}(b){(dynamic) → dynamic};
+  a.{self::Operators::~}(){() → dynamic};
+  a.{self::Operators::|}(b){(dynamic) → dynamic};
+  a.{self::Operators::^}(b){(dynamic) → dynamic};
+  a.{self::Operators::/}(b){(dynamic) → dynamic};
+  a =={self::Operators::==}{(core::Object) → core::bool} b;
+  a.{self::Operators::>}(b){(dynamic) → dynamic};
+  a.{self::Operators::>=}(b){(dynamic) → dynamic};
+  a.{self::Operators::[]}(0){(dynamic) → dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) → void};
+  a.{self::Operators::<<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<}(b){(dynamic) → dynamic};
+  a.{self::Operators::<=}(b){(dynamic) → dynamic};
+  a.{self::Operators::*}(b){(dynamic) → dynamic};
+  a.{self::Operators::%}(b){(dynamic) → dynamic};
+  a.{self::Operators::>>}(b){(dynamic) → dynamic};
+  a.{self::Operators::-}(b){(dynamic) → dynamic};
+  a.{self::Operators::~/}(b){(dynamic) → dynamic};
+  a.{self::Operators::unary-}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/optional.dart b/pkg/front_end/testcases/general/optional.dart
index badb36d..0d2e08a 100644
--- a/pkg/front_end/testcases/general/optional.dart
+++ b/pkg/front_end/testcases/general/optional.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo {
   method(x, [y, z]) {
     return "string";
@@ -16,7 +16,7 @@
 external External createExternal();
 
 abstract class Listener {
-  void event(String input, [int x, int y]);
+  void event(String input, [int? x, int? y]);
 }
 
 class TestListener extends Listener {
diff --git a/pkg/front_end/testcases/general/optional.dart.textual_outline.expect b/pkg/front_end/testcases/general/optional.dart.textual_outline.expect
index 4ac3d19..7ca31bf 100644
--- a/pkg/front_end/testcases/general/optional.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/optional.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   method(x, [y, z]) {}
 }
@@ -11,7 +10,7 @@
 external External createExternal();
 
 abstract class Listener {
-  void event(String input, [int x, int y]);
+  void event(String input, [int? x, int? y]);
 }
 
 class TestListener extends Listener {
diff --git a/pkg/front_end/testcases/general/optional.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/optional.dart.textual_outline_modelled.expect
index 5c35035..79bbd86 100644
--- a/pkg/front_end/testcases/general/optional.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/optional.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 abstract class External {
   String externalMethod(int x, [int y, int z]);
   void listen(Listener listener);
 }
 
 abstract class Listener {
-  void event(String input, [int x, int y]);
+  void event(String input, [int? x, int? y]);
 }
 
 class ExtendedListener extends Listener {
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.expect b/pkg/front_end/testcases/general/optional.dart.weak.expect
index 6ca451d..36aa8b1 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,115 +30,75 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method method(dynamic x, [dynamic y = #C1, dynamic z = #C1]) → dynamic {
     return "string";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class External extends core::Object {
-  synthetic constructor •() → self::External*
+  synthetic constructor •() → self::External
     : super core::Object::•()
     ;
-  abstract method externalMethod(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → core::String*;
-  abstract method listen(self::Listener* listener) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalMethod(core::int x, [core::int y = #C1, core::int z = #C1]) → core::String;
+  abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  synthetic constructor •() → self::Listener*
+  synthetic constructor •() → self::Listener
     : super core::Object::•()
     ;
-  abstract method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void;
 }
 class TestListener extends self::Listener {
-  synthetic constructor •() → self::TestListener*
+  synthetic constructor •() → self::TestListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void {}
 }
 class ExtendedListener extends self::Listener {
-  synthetic constructor •() → self::ExtendedListener*
+  synthetic constructor •() → self::ExtendedListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1, dynamic z = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1, dynamic z = #C1]) → void {}
 }
 class InvalidListener extends core::Object {
-  synthetic constructor •() → self::InvalidListener*
+  synthetic constructor •() → self::InvalidListener
     : super core::Object::•()
     ;
   method event(dynamic input, [dynamic x = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-external static method createExternal() → self::External*;
+external static method createExternal() → self::External;
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
-  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
-  self::External* extern = self::createExternal();
-  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
-  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
-  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
+  self::Foo foo = new self::Foo::•();
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) → dynamic};
+  self::External extern = self::createExternal();
+  core::String string4 = extern.{self::External::externalMethod}(1){(core::int, [core::int, core::int]) → core::String};
+  core::String string5 = extern.{self::External::externalMethod}(1, 2){(core::int, [core::int, core::int]) → core::String};
+  core::String string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int, [core::int, core::int]) → core::String};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener) → void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener) → void};
   extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
   extern.listen(new InvalidListener());
-                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
+                    ^" in new self::InvalidListener::•() as{TypeError,ForNonNullableByDefault} self::Listener){(self::Listener) → void};
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = foo.method();
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing2 = foo.method(1, 2, 3, 4);
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
   invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = extern.externalMethod();
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing4 = extern.externalMethod(1, 2, 3, 4);
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.modular.expect b/pkg/front_end/testcases/general/optional.dart.weak.modular.expect
index 6ca451d..36aa8b1 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,115 +30,75 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method method(dynamic x, [dynamic y = #C1, dynamic z = #C1]) → dynamic {
     return "string";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class External extends core::Object {
-  synthetic constructor •() → self::External*
+  synthetic constructor •() → self::External
     : super core::Object::•()
     ;
-  abstract method externalMethod(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → core::String*;
-  abstract method listen(self::Listener* listener) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalMethod(core::int x, [core::int y = #C1, core::int z = #C1]) → core::String;
+  abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  synthetic constructor •() → self::Listener*
+  synthetic constructor •() → self::Listener
     : super core::Object::•()
     ;
-  abstract method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void;
 }
 class TestListener extends self::Listener {
-  synthetic constructor •() → self::TestListener*
+  synthetic constructor •() → self::TestListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void {}
 }
 class ExtendedListener extends self::Listener {
-  synthetic constructor •() → self::ExtendedListener*
+  synthetic constructor •() → self::ExtendedListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1, dynamic z = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1, dynamic z = #C1]) → void {}
 }
 class InvalidListener extends core::Object {
-  synthetic constructor •() → self::InvalidListener*
+  synthetic constructor •() → self::InvalidListener
     : super core::Object::•()
     ;
   method event(dynamic input, [dynamic x = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-external static method createExternal() → self::External*;
+external static method createExternal() → self::External;
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
-  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
-  self::External* extern = self::createExternal();
-  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
-  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
-  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
+  self::Foo foo = new self::Foo::•();
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) → dynamic};
+  self::External extern = self::createExternal();
+  core::String string4 = extern.{self::External::externalMethod}(1){(core::int, [core::int, core::int]) → core::String};
+  core::String string5 = extern.{self::External::externalMethod}(1, 2){(core::int, [core::int, core::int]) → core::String};
+  core::String string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int, [core::int, core::int]) → core::String};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener) → void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener) → void};
   extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
   extern.listen(new InvalidListener());
-                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
+                    ^" in new self::InvalidListener::•() as{TypeError,ForNonNullableByDefault} self::Listener){(self::Listener) → void};
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = foo.method();
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing2 = foo.method(1, 2, 3, 4);
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
   invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = extern.externalMethod();
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing4 = extern.externalMethod(1, 2, 3, 4);
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
index 319a00f..0d055ce 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.outline.expect
@@ -1,82 +1,42 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
   method method(dynamic x, [dynamic y, dynamic z]) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class External extends core::Object {
-  synthetic constructor •() → self::External*
+  synthetic constructor •() → self::External
     ;
-  abstract method externalMethod(core::int* x, [core::int* y, core::int* z]) → core::String*;
-  abstract method listen(self::Listener* listener) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
+  abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  synthetic constructor •() → self::Listener*
+  synthetic constructor •() → self::Listener
     ;
-  abstract method event(core::String* input, [core::int* x, core::int* y]) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method event(core::String input, [core::int? x, core::int? y]) → void;
 }
 class TestListener extends self::Listener {
-  synthetic constructor •() → self::TestListener*
+  synthetic constructor •() → self::TestListener
     ;
-  method event(core::String* input, [core::int* x, core::int* y]) → void
+  method event(core::String input, [core::int? x, core::int? y]) → void
     ;
 }
 class ExtendedListener extends self::Listener {
-  synthetic constructor •() → self::ExtendedListener*
+  synthetic constructor •() → self::ExtendedListener
     ;
-  method event(core::String* input, [core::int* x, core::int* y, dynamic z]) → void
+  method event(core::String input, [core::int? x, core::int? y, dynamic z]) → void
     ;
 }
 class InvalidListener extends core::Object {
-  synthetic constructor •() → self::InvalidListener*
+  synthetic constructor •() → self::InvalidListener
     ;
   method event(dynamic input, [dynamic x]) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-external static method createExternal() → self::External*;
+external static method createExternal() → self::External;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect b/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect
index 6ca451d..36aa8b1 100644
--- a/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/optional.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -30,115 +30,75 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method method(dynamic x, [dynamic y = #C1, dynamic z = #C1]) → dynamic {
     return "string";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class External extends core::Object {
-  synthetic constructor •() → self::External*
+  synthetic constructor •() → self::External
     : super core::Object::•()
     ;
-  abstract method externalMethod(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → core::String*;
-  abstract method listen(self::Listener* listener) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method externalMethod(core::int x, [core::int y = #C1, core::int z = #C1]) → core::String;
+  abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  synthetic constructor •() → self::Listener*
+  synthetic constructor •() → self::Listener
     : super core::Object::•()
     ;
-  abstract method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void;
 }
 class TestListener extends self::Listener {
-  synthetic constructor •() → self::TestListener*
+  synthetic constructor •() → self::TestListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1]) → void {}
 }
 class ExtendedListener extends self::Listener {
-  synthetic constructor •() → self::ExtendedListener*
+  synthetic constructor •() → self::ExtendedListener
     : super self::Listener::•()
     ;
-  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1, dynamic z = #C1]) → void {}
+  method event(core::String input, [core::int? x = #C1, core::int? y = #C1, dynamic z = #C1]) → void {}
 }
 class InvalidListener extends core::Object {
-  synthetic constructor •() → self::InvalidListener*
+  synthetic constructor •() → self::InvalidListener
     : super core::Object::•()
     ;
   method event(dynamic input, [dynamic x = #C1]) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-external static method createExternal() → self::External*;
+external static method createExternal() → self::External;
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
-  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
-  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
-  self::External* extern = self::createExternal();
-  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
-  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
-  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
-  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
+  self::Foo foo = new self::Foo::•();
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) → dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) → dynamic};
+  self::External extern = self::createExternal();
+  core::String string4 = extern.{self::External::externalMethod}(1){(core::int, [core::int, core::int]) → core::String};
+  core::String string5 = extern.{self::External::externalMethod}(1, 2){(core::int, [core::int, core::int]) → core::String};
+  core::String string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int, [core::int, core::int]) → core::String};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener) → void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener) → void};
   extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
   extern.listen(new InvalidListener());
-                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
+                    ^" in new self::InvalidListener::•() as{TypeError,ForNonNullableByDefault} self::Listener){(self::Listener) → void};
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
   var nothing1 = foo.method();
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing2 = foo.method(1, 2, 3, 4);
-                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
   invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
   var nothing3 = extern.externalMethod();
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   var nothing4 = extern.externalMethod(1, 2, 3, 4);
-                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) → invalid-type};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/override.dart b/pkg/front_end/testcases/general/override.dart
index 0b4421a..03f9c9f 100644
--- a/pkg/front_end/testcases/general/override.dart
+++ b/pkg/front_end/testcases/general/override.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo {}
 
 class Bar extends Foo {}
diff --git a/pkg/front_end/testcases/general/override.dart.textual_outline.expect b/pkg/front_end/testcases/general/override.dart.textual_outline.expect
index 081b011..272b930 100644
--- a/pkg/front_end/testcases/general/override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {}
 
 class Bar extends Foo {}
diff --git a/pkg/front_end/testcases/general/override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override.dart.textual_outline_modelled.expect
index 5d96ffa..ef2c070 100644
--- a/pkg/front_end/testcases/general/override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar extends Foo {}
 
 class Base {
diff --git a/pkg/front_end/testcases/general/override.dart.weak.expect b/pkg/front_end/testcases/general/override.dart.weak.expect
index 2ce1243..7991685 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.expect
@@ -1,55 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Foo::•()
     ;
 }
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Foo::•();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Bar::•();
   }
 }
-static method main(core::List<core::String*>* args) → dynamic {
-  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
-  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
+static method main(core::List<core::String> args) → dynamic {
+  self::Base object = args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Base} new self::Base::•() : new self::Sub::•();
+  self::Foo a = object.{self::Base::method}(){() → self::Foo};
   core::print(a);
 }
diff --git a/pkg/front_end/testcases/general/override.dart.weak.modular.expect b/pkg/front_end/testcases/general/override.dart.weak.modular.expect
index 2ce1243..7991685 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.modular.expect
@@ -1,55 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Foo::•()
     ;
 }
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Foo::•();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Bar::•();
   }
 }
-static method main(core::List<core::String*>* args) → dynamic {
-  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
-  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
+static method main(core::List<core::String> args) → dynamic {
+  self::Base object = args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Base} new self::Base::•() : new self::Sub::•();
+  self::Foo a = object.{self::Base::method}(){() → self::Foo};
   core::print(a);
 }
diff --git a/pkg/front_end/testcases/general/override.dart.weak.outline.expect b/pkg/front_end/testcases/general/override.dart.weak.outline.expect
index d64628d..71c62cc 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.outline.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
 }
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     ;
-  method method() → self::Foo*
+  method method() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     ;
-  method method() → self::Foo*
+  method method() → self::Foo
     ;
 }
-static method main(core::List<core::String*>* args) → dynamic
+static method main(core::List<core::String> args) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/override.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
index 2ce1243..7991685 100644
--- a/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override.dart.weak.transformed.expect
@@ -1,55 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends self::Foo {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Foo::•()
     ;
 }
 class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Foo::•();
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Sub extends self::Base {
-  synthetic constructor •() → self::Sub*
+  synthetic constructor •() → self::Sub
     : super self::Base::•()
     ;
-  method method() → self::Foo* {
+  method method() → self::Foo {
     return new self::Bar::•();
   }
 }
-static method main(core::List<core::String*>* args) → dynamic {
-  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
-  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
+static method main(core::List<core::String> args) → dynamic {
+  self::Base object = args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} 0 ?{self::Base} new self::Base::•() : new self::Sub::•();
+  self::Foo a = object.{self::Base::method}(){() → self::Foo};
   core::print(a);
 }
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart
index 1aabd7e..a855dd5 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart
@@ -1,29 +1,29 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
 
 class C {
   void set x(A value) {}
-  B get y => null;
+  B get y => throw '';
 }
 
 class D extends C {
   void set x(value) {} // Inferred type: A
-  get y => null; // Inferred type: B
+  get y => throw ''; // Inferred type: B
 }
 
 class E extends D {
   void set x(A value) {} // Ok
-  B get y => null; // Ok
+  B get y => throw ''; // Ok
 }
 
 class F extends D {
   void set x(B value) {}
-  A get y => null;
+  A get y => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline.expect
index 905b367..777dc0b 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline.expect
@@ -1,26 +1,25 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
   void set x(A value) {}
-  B get y => null;
+  B get y => throw '';
 }
 
 class D extends C {
   void set x(value) {}
-  get y => null;
+  get y => throw '';
 }
 
 class E extends D {
   void set x(A value) {}
-  B get y => null;
+  B get y => throw '';
 }
 
 class F extends D {
   void set x(B value) {}
-  A get y => null;
+  A get y => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline_modelled.expect
index e6a1048..a9ea376 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.textual_outline_modelled.expect
@@ -1,25 +1,24 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
-  B get y => null;
+  B get y => throw '';
   void set x(A value) {}
 }
 
 class D extends C {
-  get y => null;
+  get y => throw '';
   void set x(value) {}
 }
 
 class E extends D {
-  B get y => null;
+  B get y => throw '';
   void set x(A value) {}
 }
 
 class F extends D {
-  A get y => null;
+  A get y => throw '';
   void set x(B value) {}
 }
 
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.expect
index 181c1db..aac1b94 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 // Change to a subtype of 'B'.
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
-//   get y => null; // Inferred type: B
+//   get y => throw ''; // Inferred type: B
 //       ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
@@ -26,65 +26,45 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::D::•()
     ;
-  set x(self::B* value) → void {}
-  get y() → self::A*
-    return null;
+  set x(self::B value) → void {}
+  get y() → self::A
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect
index 181c1db..aac1b94 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 // Change to a subtype of 'B'.
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
-//   get y => null; // Inferred type: B
+//   get y => throw ''; // Inferred type: B
 //       ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
@@ -26,65 +26,45 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(self::A value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::D::•()
     ;
-  set x(self::B* value) → void {}
-  get y() → self::A*
-    return null;
+  set x(self::B value) → void {}
+  get y() → self::A
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.outline.expect
index 8d25095..9d8be24 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
 // Change to a subtype of 'B'.
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
-//   get y => null; // Inferred type: B
+//   get y => throw ''; // Inferred type: B
 //       ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
@@ -26,63 +26,43 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set x(self::A* value) → void
+  set x(self::A value) → void
     ;
-  get y() → self::B*
+  get y() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set x(self::A* value) → void
+  set x(self::A value) → void
     ;
-  get y() → self::B*
+  get y() → self::B
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  set x(self::A* value) → void
+  set x(self::A value) → void
     ;
-  get y() → self::B*
+  get y() → self::B
     ;
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  set x(self::B* value) → void
+  set x(self::B value) → void
     ;
-  get y() → self::A*
+  get y() → self::A
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart b/pkg/front_end/testcases/general/override_check_accessor_basic.dart
index a68326b..2157464 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart
@@ -1,24 +1,24 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
 
 class C {
   void set x(A value) {}
-  A get y => null;
+  A get y => throw '';
 }
 
 class D extends C {
   void set x(Object value) {} // Ok
-  B get y => null; // Ok
+  B get y => throw ''; // Ok
 }
 
 class E extends C {
   void set x(B value) {}
-  Object get y => null;
+  Object get y => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline.expect
index af6849d..13b6a43 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline.expect
@@ -1,21 +1,20 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
   void set x(A value) {}
-  A get y => null;
+  A get y => throw '';
 }
 
 class D extends C {
   void set x(Object value) {}
-  B get y => null;
+  B get y => throw '';
 }
 
 class E extends C {
   void set x(B value) {}
-  Object get y => null;
+  Object get y => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline_modelled.expect
index 2e4ff3e..0e700d4 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.textual_outline_modelled.expect
@@ -1,20 +1,19 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
-  A get y => null;
+  A get y => throw '';
   void set x(A value) {}
 }
 
 class D extends C {
-  B get y => null;
+  B get y => throw '';
   void set x(Object value) {}
 }
 
 class E extends C {
-  Object get y => null;
+  Object get y => throw '';
   void set x(B value) {}
 }
 
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.expect
index d576b70..7f32945 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
 // Change to a subtype of 'A'.
-//   Object get y => null;
+//   Object get y => throw '';
 //              ^
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
@@ -26,57 +26,37 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::A*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(self::A value) → void {}
+  get y() → self::A
+    return throw "";
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(core::Object* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(core::Object value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  set x(self::B* value) → void {}
-  get y() → core::Object*
-    return null;
+  set x(self::B value) → void {}
+  get y() → core::Object
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect
index d576b70..7f32945 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
 // Change to a subtype of 'A'.
-//   Object get y => null;
+//   Object get y => throw '';
 //              ^
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
@@ -26,57 +26,37 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  set x(self::A* value) → void {}
-  get y() → self::A*
-    return null;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set x(self::A value) → void {}
+  get y() → self::A
+    return throw "";
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(core::Object* value) → void {}
-  get y() → self::B*
-    return null;
+  set x(core::Object value) → void {}
+  get y() → self::B
+    return throw "";
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  set x(self::B* value) → void {}
-  get y() → core::Object*
-    return null;
+  set x(self::B value) → void {}
+  get y() → core::Object
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.outline.expect
index dc600f1..a6651d0 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,10 +6,10 @@
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
 // Change to a subtype of 'A'.
-//   Object get y => null;
+//   Object get y => throw '';
 //              ^
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
-//   A get y => null;
+//   A get y => throw '';
 //         ^
 //
 // pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
@@ -26,55 +26,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  set x(self::A* value) → void
+  set x(self::A value) → void
     ;
-  get y() → self::A*
+  get y() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  set x(core::Object* value) → void
+  set x(core::Object value) → void
     ;
-  get y() → self::B*
+  get y() → self::B
     ;
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  set x(self::B* value) → void
+  set x(self::B value) → void
     ;
-  get y() → core::Object*
+  get y() → core::Object
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart b/pkg/front_end/testcases/general/override_check_after_inference.dart
index 91a39cb..e818940 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline.expect
index 3566c9f..b2c8457 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline_modelled.expect
index 3566c9f..b2c8457 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.expect
index f6a987f..827bd7e 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,57 +16,37 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(self::A* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::A x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(self::A* x) → void {}
+  method f(self::A x) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(self::A* x) → void {}
+  method f(self::A x) → void {}
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::D::•()
     ;
-  method f(self::B* x) → void {}
+  method f(self::B x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect
index f6a987f..827bd7e 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,57 +16,37 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f(self::A* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f(self::A x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f(self::A* x) → void {}
+  method f(self::A x) → void {}
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  method f(self::A* x) → void {}
+  method f(self::A x) → void {}
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::D::•()
     ;
-  method f(self::B* x) → void {}
+  method f(self::B x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.outline.expect
index 8b53cde..30f23cf 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,55 +16,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f(self::A* x) → void
+  method f(self::A x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method f(self::A* x) → void
+  method f(self::A x) → void
     ;
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  method f(self::A* x) → void
+  method f(self::A x) → void
     ;
 }
 class F extends self::D {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  method f(self::B* x) → void
+  method f(self::B x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart b/pkg/front_end/testcases/general/override_check_basic.dart
index acc74f9..04774f6 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart
+++ b/pkg/front_end/testcases/general/override_check_basic.dart
@@ -1,30 +1,30 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
 
 class C {
   void f1(A x) {}
-  void f2([A x]) {}
-  void f3({A x}) {}
-  A f4() {}
+  void f2([A? x]) {}
+  void f3({A? x}) {}
+  A? f4() {}
 }
 
 class D extends C {
   void f1(Object x) {} // Ok
-  void f2([Object x]) {} // Ok
-  void f3({Object x}) {} // Ok
-  B f4() {} // Ok
+  void f2([Object? x]) {} // Ok
+  void f3({Object? x}) {} // Ok
+  B? f4() {} // Ok
 }
 
 class E extends C {
   void f1(B x) {}
-  void f2([B x]) {}
-  void f3({B x}) {}
-  Object f4() {}
+  void f2([B? x]) {}
+  void f3({B? x}) {}
+  Object? f4() {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline.expect
index 1b10878..aca06e2 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline.expect
@@ -1,27 +1,26 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
   void f1(A x) {}
-  void f2([A x]) {}
-  void f3({A x}) {}
-  A f4() {}
+  void f2([A? x]) {}
+  void f3({A? x}) {}
+  A? f4() {}
 }
 
 class D extends C {
   void f1(Object x) {}
-  void f2([Object x]) {}
-  void f3({Object x}) {}
-  B f4() {}
+  void f2([Object? x]) {}
+  void f3({Object? x}) {}
+  B? f4() {}
 }
 
 class E extends C {
   void f1(B x) {}
-  void f2([B x]) {}
-  void f3({B x}) {}
-  Object f4() {}
+  void f2([B? x]) {}
+  void f3({B? x}) {}
+  Object? f4() {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline_modelled.expect
index 91af33b..7b3ae98 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.textual_outline_modelled.expect
@@ -1,27 +1,26 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
 
 class C {
-  A f4() {}
+  A? f4() {}
   void f1(A x) {}
-  void f2([A x]) {}
-  void f3({A x}) {}
+  void f2([A? x]) {}
+  void f3({A? x}) {}
 }
 
 class D extends C {
-  B f4() {}
+  B? f4() {}
   void f1(Object x) {}
-  void f2([Object x]) {}
-  void f3({Object x}) {}
+  void f2([Object? x]) {}
+  void f3({Object? x}) {}
 }
 
 class E extends C {
-  Object f4() {}
+  Object? f4() {}
   void f1(B x) {}
-  void f2([B x]) {}
-  void f3({B x}) {}
+  void f2([B? x]) {}
+  void f3({B? x}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.expect
index e19c0a4..01ec495 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,95 +12,75 @@
 //   void f1(A x) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+// pkg/front_end/testcases/general/override_check_basic.dart:25:15: Error: The parameter 'x' of the method 'E.f2' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f2'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f2([B x]) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f2([B? x]) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
-//   void f2([A x]) {}
+//   void f2([A? x]) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+// pkg/front_end/testcases/general/override_check_basic.dart:26:15: Error: The parameter 'x' of the method 'E.f3' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f3'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f3({B x}) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f3({B? x}) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
-//   void f3({A x}) {}
+//   void f3({A? x}) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+// pkg/front_end/testcases/general/override_check_basic.dart:27:11: Error: The return type of the method 'E.f4' is 'Object?', which does not match the return type, 'A?', of the overridden method, 'C.f4'.
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a subtype of 'A'.
-//   Object f4() {}
-//          ^
-// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
-//   A f4() {}
-//     ^
+// Change to a subtype of 'A?'.
+//   Object? f4() {}
+//           ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:6: Context: This is the overridden method ('f4').
+//   A? f4() {}
+//      ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f1(self::A* x) → void {}
-  method f2([self::A* x = #C1]) → void {}
-  method f3({self::A* x = #C1}) → void {}
-  method f4() → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(self::A x) → void {}
+  method f2([self::A? x = #C1]) → void {}
+  method f3({self::A? x = #C1}) → void {}
+  method f4() → self::A? {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(core::Object* x) → void {}
-  method f2([core::Object* x = #C1]) → void {}
-  method f3({core::Object* x = #C1}) → void {}
-  method f4() → self::B* {}
+  method f1(core::Object x) → void {}
+  method f2([core::Object? x = #C1]) → void {}
+  method f3({core::Object? x = #C1}) → void {}
+  method f4() → self::B? {}
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f1(self::B* x) → void {}
-  method f2([self::B* x = #C1]) → void {}
-  method f3({self::B* x = #C1}) → void {}
-  method f4() → core::Object* {}
+  method f1(self::B x) → void {}
+  method f2([self::B? x = #C1]) → void {}
+  method f3({self::B? x = #C1}) → void {}
+  method f4() → core::Object? {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect
index e19c0a4..01ec495 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,95 +12,75 @@
 //   void f1(A x) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+// pkg/front_end/testcases/general/override_check_basic.dart:25:15: Error: The parameter 'x' of the method 'E.f2' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f2'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f2([B x]) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f2([B? x]) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
-//   void f2([A x]) {}
+//   void f2([A? x]) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+// pkg/front_end/testcases/general/override_check_basic.dart:26:15: Error: The parameter 'x' of the method 'E.f3' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f3'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f3({B x}) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f3({B? x}) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
-//   void f3({A x}) {}
+//   void f3({A? x}) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+// pkg/front_end/testcases/general/override_check_basic.dart:27:11: Error: The return type of the method 'E.f4' is 'Object?', which does not match the return type, 'A?', of the overridden method, 'C.f4'.
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a subtype of 'A'.
-//   Object f4() {}
-//          ^
-// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
-//   A f4() {}
-//     ^
+// Change to a subtype of 'A?'.
+//   Object? f4() {}
+//           ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:6: Context: This is the overridden method ('f4').
+//   A? f4() {}
+//      ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f1(self::A* x) → void {}
-  method f2([self::A* x = #C1]) → void {}
-  method f3({self::A* x = #C1}) → void {}
-  method f4() → self::A* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(self::A x) → void {}
+  method f2([self::A? x = #C1]) → void {}
+  method f3({self::A? x = #C1}) → void {}
+  method f4() → self::A? {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(core::Object* x) → void {}
-  method f2([core::Object* x = #C1]) → void {}
-  method f3({core::Object* x = #C1}) → void {}
-  method f4() → self::B* {}
+  method f1(core::Object x) → void {}
+  method f2([core::Object? x = #C1]) → void {}
+  method f3({core::Object? x = #C1}) → void {}
+  method f4() → self::B? {}
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::C::•()
     ;
-  method f1(self::B* x) → void {}
-  method f2([self::B* x = #C1]) → void {}
-  method f3({self::B* x = #C1}) → void {}
-  method f4() → core::Object* {}
+  method f1(self::B x) → void {}
+  method f2([self::B? x = #C1]) → void {}
+  method f3({self::B? x = #C1}) → void {}
+  method f4() → core::Object? {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
index 6cf4efa..50f0b43 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,101 +12,81 @@
 //   void f1(A x) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+// pkg/front_end/testcases/general/override_check_basic.dart:25:15: Error: The parameter 'x' of the method 'E.f2' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f2'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f2([B x]) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f2([B? x]) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
-//   void f2([A x]) {}
+//   void f2([A? x]) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+// pkg/front_end/testcases/general/override_check_basic.dart:26:15: Error: The parameter 'x' of the method 'E.f3' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f3'.
 //  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
-//   void f3({B x}) {}
-//              ^
+// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
+//   void f3({B? x}) {}
+//               ^
 // pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
-//   void f3({A x}) {}
+//   void f3({A? x}) {}
 //        ^
 //
-// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+// pkg/front_end/testcases/general/override_check_basic.dart:27:11: Error: The return type of the method 'E.f4' is 'Object?', which does not match the return type, 'A?', of the overridden method, 'C.f4'.
 //  - 'Object' is from 'dart:core'.
 //  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
-// Change to a subtype of 'A'.
-//   Object f4() {}
-//          ^
-// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
-//   A f4() {}
-//     ^
+// Change to a subtype of 'A?'.
+//   Object? f4() {}
+//           ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:6: Context: This is the overridden method ('f4').
+//   A? f4() {}
+//      ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f1(self::A* x) → void
+  method f1(self::A x) → void
     ;
-  method f2([self::A* x]) → void
+  method f2([self::A? x]) → void
     ;
-  method f3({self::A* x}) → void
+  method f3({self::A? x}) → void
     ;
-  method f4() → self::A*
+  method f4() → self::A?
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method f1(core::Object* x) → void
+  method f1(core::Object x) → void
     ;
-  method f2([core::Object* x]) → void
+  method f2([core::Object? x]) → void
     ;
-  method f3({core::Object* x}) → void
+  method f3({core::Object? x}) → void
     ;
-  method f4() → self::B*
+  method f4() → self::B?
     ;
 }
 class E extends self::C {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  method f1(self::B* x) → void
+  method f1(self::B x) → void
     ;
-  method f2([self::B* x]) → void
+  method f2([self::B? x]) → void
     ;
-  method f3({self::B* x}) → void
+  method f3({self::B? x}) → void
     ;
-  method f4() → core::Object*
+  method f4() → core::Object?
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart
index 3813c09..3058fbf 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // This test checks that an override of a generic method is allowed in case of
 // correctly defined f-bounded type variables.
 
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline.expect
index 6c7d0ca..eaac90c 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo<T extends Foo<T>> {}
 
 abstract class Bar {
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline_modelled.expect
index 7d0123c..cdebc76 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Bar {
   void fisk<S extends Foo<S>>();
 }
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.expect
index ed9f7b4..3f2545a 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends self::Foo<self::Foo::T*>* = self::Foo<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::Foo<self::Foo::T> = self::Foo<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method fisk<S extends self::Foo<self::Bar::fisk::S*>* = self::Foo<dynamic>*>() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S> = self::Foo<dynamic>>() → void;
 }
 class Hest extends core::Object implements self::Bar {
-  synthetic constructor •() → self::Hest*
+  synthetic constructor •() → self::Hest
     : super core::Object::•()
     ;
   @#C1
-  method fisk<U extends self::Foo<self::Hest::fisk::U*>* = self::Foo<dynamic>*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method fisk<U extends self::Foo<self::Hest::fisk::U> = self::Foo<dynamic>>() → void {}
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect
index ed9f7b4..3f2545a 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends self::Foo<self::Foo::T*>* = self::Foo<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::Foo<self::Foo::T> = self::Foo<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method fisk<S extends self::Foo<self::Bar::fisk::S*>* = self::Foo<dynamic>*>() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S> = self::Foo<dynamic>>() → void;
 }
 class Hest extends core::Object implements self::Bar {
-  synthetic constructor •() → self::Hest*
+  synthetic constructor •() → self::Hest
     : super core::Object::•()
     ;
   @#C1
-  method fisk<U extends self::Foo<self::Hest::fisk::U*>* = self::Foo<dynamic>*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method fisk<U extends self::Foo<self::Hest::fisk::U> = self::Foo<dynamic>>() → void {}
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.outline.expect
index 0242ff5..4da40e5 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.outline.expect
@@ -1,52 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends self::Foo<self::Foo::T*>* = self::Foo<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::Foo<self::Foo::T> = self::Foo<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  abstract method fisk<S extends self::Foo<self::Bar::fisk::S*>* = self::Foo<dynamic>*>() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S> = self::Foo<dynamic>>() → void;
 }
 class Hest extends core::Object implements self::Bar {
-  synthetic constructor •() → self::Hest*
+  synthetic constructor •() → self::Hest
     ;
   @core::override
-  method fisk<U extends self::Foo<self::Hest::fisk::U*>* = self::Foo<dynamic>*>() → void
+  method fisk<U extends self::Foo<self::Hest::fisk::U> = self::Foo<dynamic>>() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.transformed.expect
index ed9f7b4..3f2545a 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.transformed.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends self::Foo<self::Foo::T*>* = self::Foo<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+class Foo<T extends self::Foo<self::Foo::T> = self::Foo<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract method fisk<S extends self::Foo<self::Bar::fisk::S*>* = self::Foo<dynamic>*>() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S> = self::Foo<dynamic>>() → void;
 }
 class Hest extends core::Object implements self::Bar {
-  synthetic constructor •() → self::Hest*
+  synthetic constructor •() → self::Hest
     : super core::Object::•()
     ;
   @#C1
-  method fisk<U extends self::Foo<self::Hest::fisk::U*>* = self::Foo<dynamic>*>() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method fisk<U extends self::Foo<self::Hest::fisk::U> = self::Foo<dynamic>>() → void {}
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart b/pkg/front_end/testcases/general/override_check_two_substitutions.dart
index 096bff7..5f5ea0f 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A<T> {
   void f<U>(Map<T, U> m) {}
 }
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline.expect
index b13a767..9548980 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   void f<U>(Map<T, U> m) {}
 }
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline_modelled.expect
index b13a767..9548980 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   void f<U>(Map<T, U> m) {}
 }
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
index 54a4764..6f82627 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(covariant-by-class core::Map<self::A::T%, self::A::f::U%> m) → void {}
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
+  method f<V extends core::Object? = dynamic>(covariant-by-class core::Map<core::String, self::B::f::V%> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect
index 54a4764..6f82627 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(covariant-by-class core::Map<self::A::T%, self::A::f::U%> m) → void {}
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
+  method f<V extends core::Object? = dynamic>(covariant-by-class core::Map<core::String, self::B::f::V%> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
index cf3b6b2..458fe57 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void
+  method f<U extends core::Object? = dynamic>(covariant-by-class core::Map<self::A::T%, self::A::f::U%> m) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     ;
-  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void
+  method f<V extends core::Object? = dynamic>(covariant-by-class core::Map<core::String, self::B::f::V%> m) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
index 54a4764..6f82627 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f<U extends core::Object? = dynamic>(covariant-by-class core::Map<self::A::T%, self::A::f::U%> m) → void {}
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
+  method f<V extends core::Object? = dynamic>(covariant-by-class core::Map<core::String, self::B::f::V%> m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart
index 4f7466b..09df2e39 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline.expect
index f024389..1c8bfe2 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline_modelled.expect
index f024389..1c8bfe2 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
index ceabd22..36b4cca 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,55 +25,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f1(covariant-by-declaration self::A* x) → void {}
-  method f2(self::A* x) → void {}
-  method f3(covariant-by-declaration self::A* x) → void {}
-  method f4(self::A* x) → void {}
-  method f5(covariant-by-declaration self::A* x) → void {}
-  method f6(covariant-by-declaration self::B* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-declaration self::A x) → void {}
+  method f2(self::A x) → void {}
+  method f3(covariant-by-declaration self::A x) → void {}
+  method f4(self::A x) → void {}
+  method f5(covariant-by-declaration self::A x) → void {}
+  method f6(covariant-by-declaration self::B x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant-by-declaration self::B* x) → void {}
-  method f2(covariant-by-declaration self::B* x) → void {}
-  method f3(covariant-by-declaration self::B* x) → void {}
-  method f4(self::B* x) → void {}
-  method f5(covariant-by-declaration core::String* x) → void {}
-  method f6(covariant-by-declaration self::A* x) → void {}
+  method f1(covariant-by-declaration self::B x) → void {}
+  method f2(covariant-by-declaration self::B x) → void {}
+  method f3(covariant-by-declaration self::B x) → void {}
+  method f4(self::B x) → void {}
+  method f5(covariant-by-declaration core::String x) → void {}
+  method f6(covariant-by-declaration self::A x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect
index ceabd22..36b4cca 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,55 +25,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method f1(covariant-by-declaration self::A* x) → void {}
-  method f2(self::A* x) → void {}
-  method f3(covariant-by-declaration self::A* x) → void {}
-  method f4(self::A* x) → void {}
-  method f5(covariant-by-declaration self::A* x) → void {}
-  method f6(covariant-by-declaration self::B* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method f1(covariant-by-declaration self::A x) → void {}
+  method f2(self::A x) → void {}
+  method f3(covariant-by-declaration self::A x) → void {}
+  method f4(self::A x) → void {}
+  method f5(covariant-by-declaration self::A x) → void {}
+  method f6(covariant-by-declaration self::B x) → void {}
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method f1(covariant-by-declaration self::B* x) → void {}
-  method f2(covariant-by-declaration self::B* x) → void {}
-  method f3(covariant-by-declaration self::B* x) → void {}
-  method f4(self::B* x) → void {}
-  method f5(covariant-by-declaration core::String* x) → void {}
-  method f6(covariant-by-declaration self::A* x) → void {}
+  method f1(covariant-by-declaration self::B x) → void {}
+  method f2(covariant-by-declaration self::B x) → void {}
+  method f3(covariant-by-declaration self::B x) → void {}
+  method f4(self::B x) → void {}
+  method f5(covariant-by-declaration core::String x) → void {}
+  method f6(covariant-by-declaration self::A x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
index 4d18123..a77e8b4 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,63 +25,43 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method f1(covariant-by-declaration self::A* x) → void
+  method f1(covariant-by-declaration self::A x) → void
     ;
-  method f2(self::A* x) → void
+  method f2(self::A x) → void
     ;
-  method f3(covariant-by-declaration self::A* x) → void
+  method f3(covariant-by-declaration self::A x) → void
     ;
-  method f4(self::A* x) → void
+  method f4(self::A x) → void
     ;
-  method f5(covariant-by-declaration self::A* x) → void
+  method f5(covariant-by-declaration self::A x) → void
     ;
-  method f6(covariant-by-declaration self::B* x) → void
+  method f6(covariant-by-declaration self::B x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method f1(covariant-by-declaration self::B* x) → void
+  method f1(covariant-by-declaration self::B x) → void
     ;
-  method f2(covariant-by-declaration self::B* x) → void
+  method f2(covariant-by-declaration self::B x) → void
     ;
-  method f3(covariant-by-declaration self::B* x) → void
+  method f3(covariant-by-declaration self::B x) → void
     ;
-  method f4(self::B* x) → void
+  method f4(self::B x) → void
     ;
-  method f5(covariant-by-declaration core::String* x) → void
+  method f5(covariant-by-declaration core::String x) → void
     ;
-  method f6(covariant-by-declaration self::A* x) → void
+  method f6(covariant-by-declaration self::A x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
index f15fb92..8035f1d 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class A {
   num get getterFromGetter;
 
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline.expect
index d64503e..d720f29 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   num get getterFromGetter;
   set setterFromSetter(num value);
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline_modelled.expect
index cda97df..81cac22 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A {
   num get getterFromGetter;
   num get getterFromGetterWithSetterConflict;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.expect
index a188410..f8ad4ec 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.expect
@@ -1,117 +1,77 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract set getterFromSetter(core::num* value) → void;
-  abstract get setterFromGetter() → core::num*;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract set getterFromSetter(core::num value) → void;
+  abstract get setterFromGetter() → core::num;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set getterFromGetterWithSetterConflict(dynamic num) → void;
-  abstract get setterFromSetterWithGetterConflict() → core::num*;
+  abstract get setterFromSetterWithGetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic num) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::int* value) → void;
-  abstract get setterFromGetter() → core::int*;
-  abstract get setterFromSetterWithGetterConflict() → core::int*;
-  abstract set getterFromGetterWithSetterConflict(core::int* value) → void;
-  abstract set getterFromSetter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::int value) → void;
+  abstract get setterFromGetter() → core::int;
+  abstract get setterFromSetterWithGetterConflict() → core::int;
+  abstract set getterFromGetterWithSetterConflict(core::int value) → void;
+  abstract set getterFromSetter(core::int value) → void;
 }
 abstract class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
 }
 abstract class D extends self::A implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 abstract class E extends core::Object implements self::A {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class F extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect
index a188410..f8ad4ec 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect
@@ -1,117 +1,77 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract set getterFromSetter(core::num* value) → void;
-  abstract get setterFromGetter() → core::num*;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract set getterFromSetter(core::num value) → void;
+  abstract get setterFromGetter() → core::num;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set getterFromGetterWithSetterConflict(dynamic num) → void;
-  abstract get setterFromSetterWithGetterConflict() → core::num*;
+  abstract get setterFromSetterWithGetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic num) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::int* value) → void;
-  abstract get setterFromGetter() → core::int*;
-  abstract get setterFromSetterWithGetterConflict() → core::int*;
-  abstract set getterFromGetterWithSetterConflict(core::int* value) → void;
-  abstract set getterFromSetter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::int value) → void;
+  abstract get setterFromGetter() → core::int;
+  abstract get setterFromSetterWithGetterConflict() → core::int;
+  abstract set getterFromGetterWithSetterConflict(core::int value) → void;
+  abstract set getterFromSetter(core::int value) → void;
 }
 abstract class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
 }
 abstract class D extends self::A implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 abstract class E extends core::Object implements self::A {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class F extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.outline.expect
index 0cc2e71..3a91293 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.outline.expect
@@ -1,112 +1,72 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract set getterFromSetter(core::num* value) → void;
-  abstract get setterFromGetter() → core::num*;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract set getterFromSetter(core::num value) → void;
+  abstract get setterFromGetter() → core::num;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set getterFromGetterWithSetterConflict(dynamic num) → void;
-  abstract get setterFromSetterWithGetterConflict() → core::num*;
+  abstract get setterFromSetterWithGetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic num) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::int* value) → void;
-  abstract get setterFromGetter() → core::int*;
-  abstract get setterFromSetterWithGetterConflict() → core::int*;
-  abstract set getterFromGetterWithSetterConflict(core::int* value) → void;
-  abstract set getterFromSetter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::int value) → void;
+  abstract get setterFromGetter() → core::int;
+  abstract get setterFromSetterWithGetterConflict() → core::int;
+  abstract set getterFromGetterWithSetterConflict(core::int value) → void;
+  abstract set getterFromSetter(core::int value) → void;
 }
 abstract class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
 }
 abstract class D extends self::A implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 abstract class E extends core::Object implements self::A {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class F extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.transformed.expect
index a188410..f8ad4ec 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.transformed.expect
@@ -1,117 +1,77 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract set getterFromSetter(core::num* value) → void;
-  abstract get setterFromGetter() → core::num*;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract set getterFromSetter(core::num value) → void;
+  abstract get setterFromGetter() → core::num;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set getterFromGetterWithSetterConflict(dynamic num) → void;
-  abstract get setterFromSetterWithGetterConflict() → core::num*;
+  abstract get setterFromSetterWithGetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic num) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::int* value) → void;
-  abstract get setterFromGetter() → core::int*;
-  abstract get setterFromSetterWithGetterConflict() → core::int*;
-  abstract set getterFromGetterWithSetterConflict(core::int* value) → void;
-  abstract set getterFromSetter(core::int* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::int value) → void;
+  abstract get setterFromGetter() → core::int;
+  abstract get setterFromSetterWithGetterConflict() → core::int;
+  abstract set getterFromGetterWithSetterConflict(core::int value) → void;
+  abstract set getterFromSetter(core::int value) → void;
 }
 abstract class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
 }
 abstract class D extends self::A implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 abstract class E extends core::Object implements self::A {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::num*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::num* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::num;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::num value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class F extends core::Object implements self::A, self::B {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract get getterFromGetter() → core::int*;
-  abstract set setterFromSetter(core::num* value) → void;
-  abstract get getterFromSetter() → core::num*;
-  abstract set setterFromGetter(core::int* value) → void;
-  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract get getterFromGetter() → core::int;
+  abstract set setterFromSetter(core::num value) → void;
+  abstract get getterFromSetter() → core::num;
+  abstract set setterFromGetter(core::int value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num;
   abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
-  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
-  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature get setterFromGetter() → core::int; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int; -> self::B::setterFromSetterWithGetterConflict
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart b/pkg/front_end/testcases/general/override_inference_for_setters.dart
index 97ffd7f..f93d2f8 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart
@@ -1,9 +1,9 @@
 // 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.
-// @dart=2.9
+
 class B {
-  num get foo => null;
+  num get foo => throw '';
   set foo(dynamic newFoo) {}
 }
 
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline.expect
index 7fc47a9..79021a6 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class B {
-  num get foo => null;
+  num get foo => throw '';
   set foo(dynamic newFoo) {}
 }
 
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline_modelled.expect
index fcd1a6e..d8b60cf 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A extends B {
   set foo(newFoo) {}
 }
 
 class B {
-  num get foo => null;
+  num get foo => throw '';
   set foo(dynamic newFoo) {}
 }
 
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.expect
index 845e3fb..fbc6483 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get foo() → core::num*
-    return null;
+  get foo() → core::num
+    return throw "";
   set foo(dynamic newFoo) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::B::•()
     ;
   set foo(dynamic newFoo) → void {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect
index 845e3fb..fbc6483 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get foo() → core::num*
-    return null;
+  get foo() → core::num
+    return throw "";
   set foo(dynamic newFoo) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::B::•()
     ;
   set foo(dynamic newFoo) → void {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.outline.expect
index 77549aa..b3cbd65 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get foo() → core::num*
+  get foo() → core::num
     ;
   set foo(dynamic newFoo) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   set foo(dynamic newFoo) → void
     ;
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.transformed.expect
index 845e3fb..fbc6483 100644
--- a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get foo() → core::num*
-    return null;
+  get foo() → core::num
+    return throw "";
   set foo(dynamic newFoo) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A extends self::B {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super self::B::•()
     ;
   set foo(dynamic newFoo) → void {}
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart
index 54278d0..b2e98ef 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart
@@ -1,35 +1,35 @@
 // 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.
-// @dart=2.9
+
 // The test checks that override-based inference for named parameters isn't
 // affected by the name-based ordering of the parameters.
 
 class A {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 class B extends A {
-  foo({c = true, bool a}) {}
+  foo({c = true, bool? a}) {}
 }
 
 class C extends B {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 // A1, B1, and C1 are similar to A, B, and C, only they have the names of the
 // named parameters swapped, to test that the alternative ordering works.
 
 class A1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 class B1 extends A1 {
-  foo({a = true, bool c}) {}
+  foo({a = true, bool? c}) {}
 }
 
 class C1 extends B1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline.expect
index c73e09b..5585831 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline.expect
@@ -1,26 +1,25 @@
-// @dart = 2.9
 class A {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 class B extends A {
-  foo({c = true, bool a}) {}
+  foo({c = true, bool? a}) {}
 }
 
 class C extends B {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 class A1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 class B1 extends A1 {
-  foo({a = true, bool c}) {}
+  foo({a = true, bool? c}) {}
 }
 
 class C1 extends B1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline_modelled.expect
index f418728..683b2b2 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.textual_outline_modelled.expect
@@ -1,26 +1,25 @@
-// @dart = 2.9
 class A {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 class A1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 class B extends A {
-  foo({c = true, bool a}) {}
+  foo({c = true, bool? a}) {}
 }
 
 class B1 extends A1 {
-  foo({a = true, bool c}) {}
+  foo({a = true, bool? c}) {}
 }
 
 class C extends B {
-  foo({bool c = true, bool a}) {}
+  foo({bool? c = true, bool? a}) {}
 }
 
 class C1 extends B1 {
-  foo({bool a = true, bool c}) {}
+  foo({bool? a = true, bool? c}) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.expect
index 6e67b60..bca16bc 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.expect
@@ -1,62 +1,42 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class B1 extends self::A1 {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super self::A1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class C1 extends self::B1 {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super self::B1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect
index 6e67b60..bca16bc 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect
@@ -1,62 +1,42 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class B1 extends self::A1 {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super self::A1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class C1 extends self::B1 {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super self::B1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
index f3f9552..17f1de7 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.outline.expect
@@ -1,61 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method foo({core::bool* c = true, core::bool* a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a}) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo({core::bool* c = true, core::bool* a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a}) → dynamic
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo({core::bool* c = true, core::bool* a}) → dynamic
+  method foo({core::bool? c = true, core::bool? a}) → dynamic
     ;
 }
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     ;
-  method foo({core::bool* a = true, core::bool* c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c}) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B1 extends self::A1 {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     ;
-  method foo({core::bool* a = true, core::bool* c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c}) → dynamic
     ;
 }
 class C1 extends self::B1 {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
-  method foo({core::bool* a = true, core::bool* c}) → dynamic
+  method foo({core::bool? a = true, core::bool? c}) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.transformed.expect
index 6e67b60..bca16bc 100644
--- a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.transformed.expect
@@ -1,62 +1,42 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  method foo({core::bool? c = #C1, core::bool? a = #C2}) → dynamic {}
 }
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class B1 extends self::A1 {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super self::A1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 class C1 extends self::B1 {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super self::B1::•()
     ;
-  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  method foo({core::bool? a = #C1, core::bool? c = #C2}) → dynamic {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart b/pkg/front_end/testcases/general/override_setter_with_field.dart
index 28626d7..1f52173 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart
@@ -2,14 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.9
-
 abstract class A {
-  void set x(Object y);
+  void set x(Object? y);
 }
 
 class B implements A {
-  int x;
+  int? x;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline.expect
index cdfa723..bff631c 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 abstract class A {
-  void set x(Object y);
+  void set x(Object? y);
 }
 
 class B implements A {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline_modelled.expect
index cdfa723..bff631c 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 abstract class A {
-  void set x(Object y);
+  void set x(Object? y);
 }
 
 class B implements A {
-  int x;
+  int? x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
index 765d23f..2178ddb 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+// pkg/front_end/testcases/general/override_setter_with_field.dart:10:8: Error: The field 'B.x' has type 'int?', which does not match the corresponding type, 'Object?', in the overridden setter, 'A.x'.
 //  - 'Object' is from 'dart:core'.
-//   int x;
-//       ^
-// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
-//   void set x(Object y);
+//   int? x;
+//        ^
+// pkg/front_end/testcases/general/override_setter_with_field.dart:6:12: Context: This is the overridden method ('x').
+//   void set x(Object? y);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::Object? y) → void;
 }
 class B extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::B*
+  field core::int? x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::B::•().{self::B::x} = 5;
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect
index 765d23f..2178ddb 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+// pkg/front_end/testcases/general/override_setter_with_field.dart:10:8: Error: The field 'B.x' has type 'int?', which does not match the corresponding type, 'Object?', in the overridden setter, 'A.x'.
 //  - 'Object' is from 'dart:core'.
-//   int x;
-//       ^
-// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
-//   void set x(Object y);
+//   int? x;
+//        ^
+// pkg/front_end/testcases/general/override_setter_with_field.dart:6:12: Context: This is the overridden method ('x').
+//   void set x(Object? y);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract set x(core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::Object? y) → void;
 }
 class B extends core::Object implements self::A {
-  field core::int* x = null;
-  synthetic constructor •() → self::B*
+  field core::int? x = null;
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::B::•().{self::B::x} = 5;
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
index f7419b7..9a21541 100644
--- a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.outline.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+// pkg/front_end/testcases/general/override_setter_with_field.dart:10:8: Error: The field 'B.x' has type 'int?', which does not match the corresponding type, 'Object?', in the overridden setter, 'A.x'.
 //  - 'Object' is from 'dart:core'.
-//   int x;
-//       ^
-// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
-//   void set x(Object y);
+//   int? x;
+//        ^
+// pkg/front_end/testcases/general/override_setter_with_field.dart:6:12: Context: This is the overridden method ('x').
+//   void set x(Object? y);
 //            ^
 //
 import self as self;
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract set x(core::Object* y) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract set x(core::Object? y) → void;
 }
 class B extends core::Object implements self::A {
-  field core::int* x;
-  synthetic constructor •() → self::B*
+  field core::int? x;
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart b/pkg/front_end/testcases/general/part_as_entry_point.dart
index e8acce1..0b9dc66 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 part of "part_as_entry_point_lib.dart";
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline.expect
index 18055f6..07ab488 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 part of "part_as_entry_point_lib.dart";
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline_modelled.expect
index 18055f6..07ab488 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 part of "part_as_entry_point_lib.dart";
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.expect
index b77b0c2..23f6859 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect
index b77b0c2..23f6859 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.outline.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.outline.expect
index 1d93518..37da5bf 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 part part_as_entry_point.dart;
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.transformed.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.transformed.expect
index b77b0c2..23f6859 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/part_as_entry_point_lib.dart b/pkg/front_end/testcases/general/part_as_entry_point_lib.dart
index 9c9cfeb..a2f5430 100644
--- a/pkg/front_end/testcases/general/part_as_entry_point_lib.dart
+++ b/pkg/front_end/testcases/general/part_as_entry_point_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 part "part_as_entry_point.dart";
 
 main() {
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart b/pkg/front_end/testcases/general/part_not_part_of.dart
index bea2751..a4d4873 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'part_not_part_of_lib2.dart';
 
 @override
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline.expect
index fbc4b33..d7c7da3 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_not_part_of_lib2.dart';
 @override
 part 'part_not_part_of_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline_modelled.expect
index fbc4b33..d7c7da3 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_not_part_of_lib2.dart';
 @override
 part 'part_not_part_of_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.expect
index f22e87e..9a38cd5 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_not_part_of_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "part_not_part_of_lib1.dart" as par;
 
@@ -25,7 +25,7 @@
   par::methodFromLib1();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as par;
 
 static method methodFromLib1() → dynamic {}
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect
index f22e87e..9a38cd5 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_not_part_of_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "part_not_part_of_lib1.dart" as par;
 
@@ -25,7 +25,7 @@
   par::methodFromLib1();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as par;
 
 static method methodFromLib1() → dynamic {}
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.outline.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.outline.expect
index 022180b..fceafb0 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 import "org-dartlang-testcase:///part_not_part_of_lib1.dart";
@@ -22,7 +22,7 @@
 static method methodFromLib2() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method methodFromLib1() → dynamic
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.transformed.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.transformed.expect
index f22e87e..9a38cd5 100644
--- a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_not_part_of_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "part_not_part_of_lib1.dart" as par;
 
@@ -25,7 +25,7 @@
   par::methodFromLib1();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as par;
 
 static method methodFromLib1() → dynamic {}
diff --git a/pkg/front_end/testcases/general/part_not_part_of_lib1.dart b/pkg/front_end/testcases/general/part_not_part_of_lib1.dart
index 8701d03..90bd84b 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_lib1.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of_lib1.dart
@@ -1,5 +1,5 @@
 // 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.
-// @dart=2.9
+
 methodFromLib1() {}
diff --git a/pkg/front_end/testcases/general/part_not_part_of_lib2.dart b/pkg/front_end/testcases/general/part_not_part_of_lib2.dart
index 46ab23d..1dfb49c 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_lib2.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import "part_not_part_of_lib1.dart";
 
 methodFromLib2() {
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart
index e34f76d..e7efc6c 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'part_not_part_of_same_named_library_lib2.dart';
 
 @override
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline.expect
index fa5241c..bf4aa7d 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_not_part_of_same_named_library_lib2.dart';
 @override
 part 'part_not_part_of_same_named_library_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline_modelled.expect
index fa5241c..bf4aa7d 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_not_part_of_same_named_library_lib2.dart';
 @override
 part 'part_not_part_of_same_named_library_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.expect
index 2048308..15322a0 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 part part_not_part_of_same_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_not_part_of_same_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect
index 2048308..15322a0 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 part part_not_part_of_same_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_not_part_of_same_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.outline.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.outline.expect
index 65071a6..881d153 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 static method main() → dynamic
   ;
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_not_part_of_same_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.transformed.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.transformed.expect
index 2048308..15322a0 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,7 +16,7 @@
 part part_not_part_of_same_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library foo;
+library foo /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_not_part_of_same_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart b/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart
index e2df909..1e32330 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 part of foo;
 
 methodFromLib1() {}
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib2.dart b/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib2.dart
index e7861ee..11ce0fa 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib2.dart
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library foo;
 
 part "part_not_part_of_same_named_library_lib1.dart";
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart
index c16dbf3..07ccc7a 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart
@@ -1,7 +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.
-// @dart=2.9
+
 import 'part_part_of_different_unnamed_library_lib2.dart';
 
 @override
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline.expect
index a2beef6..a400a31 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_part_of_different_unnamed_library_lib2.dart';
 @override
 part 'part_part_of_different_unnamed_library_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline_modelled.expect
index a2beef6..a400a31 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'part_part_of_different_unnamed_library_lib2.dart';
 @override
 part 'part_part_of_different_unnamed_library_lib1.dart';
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.expect
index 693c671..ba85695 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_different_unnamed_library_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_different_unnamed_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect
index 693c671..ba85695 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_different_unnamed_library_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_different_unnamed_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.outline.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.outline.expect
index bcd74cd..3283da8 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_different_unnamed_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.transformed.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.transformed.expect
index 693c671..ba85695 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_different_unnamed_library_lib1.dart;
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_different_unnamed_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart
index 7068275..d507d77 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 part of "part_part_of_different_unnamed_library_lib2.dart";
 
 methodFromLib1() {}
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart
index 3c777f7..e7e7b29 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 part "part_part_of_different_unnamed_library_lib1.dart";
 
 methodFromLib2() {
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart
index f1ecf5a..c084850 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library foo;
 
 import 'part_part_of_differently_named_library_lib2.dart';
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline.expect
index e806f6d..2897172 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library foo;
 
 import 'part_part_of_differently_named_library_lib2.dart';
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline_modelled.expect
index e806f6d..2897172 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library foo;
 
 import 'part_part_of_differently_named_library_lib2.dart';
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.expect
index 0ec56bd..246fe04 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_differently_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library bar;
+library bar /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_differently_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect
index 0ec56bd..246fe04 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_differently_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library bar;
+library bar /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_differently_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.outline.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.outline.expect
index 4f277c37..6802243 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 static method main() → dynamic
   ;
 
-library bar;
+library bar /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_differently_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.transformed.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.transformed.expect
index 0ec56bd..246fe04 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library foo;
+library foo /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,7 +15,7 @@
 part part_part_of_differently_named_library_lib1.dart;
 static method main() → dynamic {}
 
-library bar;
+library bar /*isNonNullableByDefault*/;
 import self as self2;
 
 part part_part_of_differently_named_library_lib1.dart;
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart b/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart
index 4d7357d..2b7c83b 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart
@@ -1,7 +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.
-// @dart=2.9
+
 part of bar;
 
 methodFromLib1() {}
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib2.dart b/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib2.dart
index a702ba3..cccf8e2 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib2.dart
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library_lib2.dart
@@ -1,7 +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.
-// @dart=2.9
+
 library bar;
 
 part "part_part_of_differently_named_library_lib1.dart";
diff --git a/pkg/front_end/testcases/general/platform.dart b/pkg/front_end/testcases/general/platform.dart
index 2951246..0d4cc33 100644
--- a/pkg/front_end/testcases/general/platform.dart
+++ b/pkg/front_end/testcases/general/platform.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 main() {}
diff --git a/pkg/front_end/testcases/general/platform.dart.textual_outline.expect b/pkg/front_end/testcases/general/platform.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/platform.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/platform.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/platform.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/platform.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/platform.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/platform.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/platform.dart.weak.expect b/pkg/front_end/testcases/general/platform.dart.weak.expect
index bef6d48..500f9de 100644
--- a/pkg/front_end/testcases/general/platform.dart.weak.expect
+++ b/pkg/front_end/testcases/general/platform.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/platform.dart.weak.modular.expect b/pkg/front_end/testcases/general/platform.dart.weak.modular.expect
index bef6d48..500f9de 100644
--- a/pkg/front_end/testcases/general/platform.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/platform.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/platform.dart.weak.outline.expect b/pkg/front_end/testcases/general/platform.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/platform.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/platform.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/platform.dart.weak.transformed.expect b/pkg/front_end/testcases/general/platform.dart.weak.transformed.expect
index bef6d48..500f9de 100644
--- a/pkg/front_end/testcases/general/platform.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/platform.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart
index 050382d..6e0cb95 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'dart:test';
 
 main() {
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline_modelled.expect
index 9ededd9..3c9c90e 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:test';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
index fa5d4ba..9d1966a 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -8,7 +8,7 @@
   new test::Class::•();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,19 +44,9 @@
 
 @#C1
 class Class extends core::Object {
-  synthetic constructor •() → test::Class*
+  synthetic constructor •() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
index fa5d4ba..9d1966a 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -8,7 +8,7 @@
   new test::Class::•();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,19 +44,9 @@
 
 @#C1
 class Class extends core::Object {
-  synthetic constructor •() → test::Class*
+  synthetic constructor •() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
index 8724812..0f22267 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:test";
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -42,18 +42,8 @@
 
 @_in::patch
 class Class extends core::Object {
-  synthetic constructor •() → self2::Class*
+  synthetic constructor •() → self2::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.transformed.expect
index fa5d4ba..9d1966a 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:test" as test;
 
@@ -8,7 +8,7 @@
   new test::Class::•();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,19 +44,9 @@
 
 @#C1
 class Class extends core::Object {
-  synthetic constructor •() → test::Class*
+  synthetic constructor •() → test::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart b/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart
index a2cf6ba..5db6a48 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import ':a';
 export ':b';
 
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart b/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart
index c293bdf..b898ab1 100644
--- a/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // ignore: import_internal_library
 import 'dart:_internal';
 
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart b/pkg/front_end/testcases/general/prefer_baseclass.dart
index 49eeb46..394322b 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline.expect
index 969d47c..27c1d98 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline_modelled.expect
index 4e0cebf..47e2b29 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class AB1 extends A implements B {}
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.expect
index 8785424..1634b2d 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.expect
@@ -1,54 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class AB1 extends self::A implements self::B {
-  synthetic constructor •() → self::AB1*
+  synthetic constructor •() → self::AB1
     : super self::A::•()
     ;
 }
 class AB2 extends self::A implements self::B {
-  synthetic constructor •() → self::AB2*
+  synthetic constructor •() → self::AB2
     : super self::A::•()
     ;
 }
 class BA1 extends self::B implements self::A {
-  synthetic constructor •() → self::BA1*
+  synthetic constructor •() → self::BA1
     : super self::B::•()
     ;
 }
 class BA2 extends self::B implements self::A {
-  synthetic constructor •() → self::BA2*
+  synthetic constructor •() → self::BA2
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect
index 8785424..1634b2d 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect
@@ -1,54 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class AB1 extends self::A implements self::B {
-  synthetic constructor •() → self::AB1*
+  synthetic constructor •() → self::AB1
     : super self::A::•()
     ;
 }
 class AB2 extends self::A implements self::B {
-  synthetic constructor •() → self::AB2*
+  synthetic constructor •() → self::AB2
     : super self::A::•()
     ;
 }
 class BA1 extends self::B implements self::A {
-  synthetic constructor •() → self::BA1*
+  synthetic constructor •() → self::BA1
     : super self::B::•()
     ;
 }
 class BA2 extends self::B implements self::A {
-  synthetic constructor •() → self::BA2*
+  synthetic constructor •() → self::BA2
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.outline.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.outline.expect
index 1d5764a..32f946c 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.outline.expect
@@ -1,49 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class AB1 extends self::A implements self::B {
-  synthetic constructor •() → self::AB1*
+  synthetic constructor •() → self::AB1
     ;
 }
 class AB2 extends self::A implements self::B {
-  synthetic constructor •() → self::AB2*
+  synthetic constructor •() → self::AB2
     ;
 }
 class BA1 extends self::B implements self::A {
-  synthetic constructor •() → self::BA1*
+  synthetic constructor •() → self::BA1
     ;
 }
 class BA2 extends self::B implements self::A {
-  synthetic constructor •() → self::BA2*
+  synthetic constructor •() → self::BA2
     ;
 }
 static method takeSubclassOfA(dynamic obj) → dynamic
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.transformed.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.transformed.expect
index 8785424..1634b2d 100644
--- a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.transformed.expect
@@ -1,54 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class AB1 extends self::A implements self::B {
-  synthetic constructor •() → self::AB1*
+  synthetic constructor •() → self::AB1
     : super self::A::•()
     ;
 }
 class AB2 extends self::A implements self::B {
-  synthetic constructor •() → self::AB2*
+  synthetic constructor •() → self::AB2
     : super self::A::•()
     ;
 }
 class BA1 extends self::B implements self::A {
-  synthetic constructor •() → self::BA1*
+  synthetic constructor •() → self::BA1
     : super self::B::•()
     ;
 }
 class BA2 extends self::B implements self::A {
-  synthetic constructor •() → self::BA2*
+  synthetic constructor •() → self::BA2
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart b/pkg/front_end/testcases/general/private_method_tearoff.dart
index 4bf35bc..71b8217 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import './private_method_tearoff_lib.dart';
 
 // `Bar' contains a private method `_f'. The function `baz' is declared in the
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline.expect
index 359b608..929342c 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './private_method_tearoff_lib.dart';
 
 class Foo implements Bar {}
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline_modelled.expect
index 3ba34a1..2092d9c 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './private_method_tearoff_lib.dart';
 
 class Baz extends Foo {}
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
index ca1fea0..74f9325 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "private_method_tearoff_lib.dart" as pri;
@@ -6,24 +6,14 @@
 import "org-dartlang-testcase:///private_method_tearoff_lib.dart";
 
 class Foo extends core::Object implements pri::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 class Baz extends self::Foo {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Foo::•()
     ;
 }
@@ -31,28 +21,18 @@
   pri::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pri::Bar*
+  synthetic constructor •() → pri::Bar
     : super core::Object::•()
     ;
   method _f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pri::Bar* bar) → void {
-  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pri::Bar bar) → void {
+  core::print("${bar.{pri::Bar::_f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect
index ca1fea0..74f9325 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "private_method_tearoff_lib.dart" as pri;
@@ -6,24 +6,14 @@
 import "org-dartlang-testcase:///private_method_tearoff_lib.dart";
 
 class Foo extends core::Object implements pri::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 class Baz extends self::Foo {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Foo::•()
     ;
 }
@@ -31,28 +21,18 @@
   pri::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pri::Bar*
+  synthetic constructor •() → pri::Bar
     : super core::Object::•()
     ;
   method _f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pri::Bar* bar) → void {
-  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pri::Bar bar) → void {
+  core::print("${bar.{pri::Bar::_f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
index 384c64d..a8acd44 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "private_method_tearoff_lib.dart" as pri;
@@ -6,49 +6,29 @@
 import "org-dartlang-testcase:///private_method_tearoff_lib.dart";
 
 class Foo extends core::Object implements pri::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#_f, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#_f, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 class Baz extends self::Foo {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pri::Bar*
+  synthetic constructor •() → pri::Bar
     ;
   method _f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pri::Bar* bar) → void
+static method baz(pri::Bar bar) → void
   ;
 
 
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
index ca1fea0..74f9325 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "private_method_tearoff_lib.dart" as pri;
@@ -6,24 +6,14 @@
 import "org-dartlang-testcase:///private_method_tearoff_lib.dart";
 
 class Foo extends core::Object implements pri::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
-    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 class Baz extends self::Foo {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Foo::•()
     ;
 }
@@ -31,28 +21,18 @@
   pri::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pri::Bar*
+  synthetic constructor •() → pri::Bar
     : super core::Object::•()
     ;
   method _f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pri::Bar* bar) → void {
-  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pri::Bar bar) → void {
+  core::print("${bar.{pri::Bar::_f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/private_method_tearoff_lib.dart b/pkg/front_end/testcases/general/private_method_tearoff_lib.dart
index a2a6594..0cbfb17 100644
--- a/pkg/front_end/testcases/general/private_method_tearoff_lib.dart
+++ b/pkg/front_end/testcases/general/private_method_tearoff_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Companion library for private_method_tearoff.dart.
 
 class Bar {
diff --git a/pkg/front_end/testcases/general/promoted_access.dart b/pkg/front_end/testcases/general/promoted_access.dart
index 841f79f..fc2e133 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart
+++ b/pkg/front_end/testcases/general/promoted_access.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 class Class<T> {
   method(T o) {
     if (o is Class) {
diff --git a/pkg/front_end/testcases/general/promoted_null_aware_access.dart b/pkg/front_end/testcases/general/promoted_null_aware_access.dart
index 3e023f0..b5eb8f3 100644
--- a/pkg/front_end/testcases/general/promoted_null_aware_access.dart
+++ b/pkg/front_end/testcases/general/promoted_null_aware_access.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 method<T>(T o) {
   if (o is String) {
     o?.length;
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart b/pkg/front_end/testcases/general/public_method_tearoff.dart
index 6130e86..1d304cc 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import './public_method_tearoff_lib.dart';
 
 // `Bar' contains a public method `f'. The function `baz' is declared in the
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline.expect
index 6aee2c2..e266da1 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './public_method_tearoff_lib.dart';
 
 class Foo extends Bar {}
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline_modelled.expect
index 6aee2c2..e266da1 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import './public_method_tearoff_lib.dart';
 
 class Foo extends Bar {}
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
index 6fc1a72..be0c9bc 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "public_method_tearoff_lib.dart" as pub;
 
 import "org-dartlang-testcase:///public_method_tearoff_lib.dart";
 
 class Foo extends pub::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super pub::Bar::•()
     ;
 }
@@ -13,26 +13,16 @@
   pub::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pub;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pub::Bar*
+  synthetic constructor •() → pub::Bar
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pub::Bar* bar) → void {
-  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pub::Bar bar) → void {
+  core::print("${bar.{pub::Bar::f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect
index 6fc1a72..be0c9bc 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "public_method_tearoff_lib.dart" as pub;
 
 import "org-dartlang-testcase:///public_method_tearoff_lib.dart";
 
 class Foo extends pub::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super pub::Bar::•()
     ;
 }
@@ -13,26 +13,16 @@
   pub::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pub;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pub::Bar*
+  synthetic constructor •() → pub::Bar
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pub::Bar* bar) → void {
-  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pub::Bar bar) → void {
+  core::print("${bar.{pub::Bar::f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.outline.expect
index db658c6..26864eb 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.outline.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "public_method_tearoff_lib.dart" as pub;
 
 import "org-dartlang-testcase:///public_method_tearoff_lib.dart";
 
 class Foo extends pub::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
 }
 static method main() → void
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pub;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pub::Bar*
+  synthetic constructor •() → pub::Bar
     ;
   method f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pub::Bar* bar) → void
+static method baz(pub::Bar bar) → void
   ;
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
index 6fc1a72..be0c9bc 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "public_method_tearoff_lib.dart" as pub;
 
 import "org-dartlang-testcase:///public_method_tearoff_lib.dart";
 
 class Foo extends pub::Bar {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super pub::Bar::•()
     ;
 }
@@ -13,26 +13,16 @@
   pub::baz(new self::Foo::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pub;
 import "dart:core" as core;
 
 class Bar extends core::Object {
-  synthetic constructor •() → pub::Bar*
+  synthetic constructor •() → pub::Bar
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method baz(pub::Bar* bar) → void {
-  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+static method baz(pub::Bar bar) → void {
+  core::print("${bar.{pub::Bar::f}{() → void}.{core::Object::runtimeType}{core::Type}}");
 }
diff --git a/pkg/front_end/testcases/general/public_method_tearoff_lib.dart b/pkg/front_end/testcases/general/public_method_tearoff_lib.dart
index 529518e..ceaf0ca 100644
--- a/pkg/front_end/testcases/general/public_method_tearoff_lib.dart
+++ b/pkg/front_end/testcases/general/public_method_tearoff_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Companion library for public_method_tearoff.dart.
 
 class Bar {
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart b/pkg/front_end/testcases/general/pure_index_expressions.dart
index 89c6ab9..975089a 100644
--- a/pkg/front_end/testcases/general/pure_index_expressions.dart
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // @dart=2.9
 
 extension Extension on int {
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline.expect b/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline.expect
index cf0da0c..a529cd5 100644
--- a/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 extension Extension on int {
   Class operator [](Class cls) => new Class();
   void operator []=(Class cls, Class value) {}
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline_modelled.expect
index 312c040..f0fb925 100644
--- a/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.9
 class Class {
   Class operator +(Class cls) => cls;
   Class operator [](Class cls) => new Class();
diff --git a/pkg/front_end/testcases/general/qualified.dart b/pkg/front_end/testcases/general/qualified.dart
index d6e418b..d347bca 100644
--- a/pkg/front_end/testcases/general/qualified.dart
+++ b/pkg/front_end/testcases/general/qualified.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 library test.qualified.main;
 
 import "qualified_lib.dart" as lib;
@@ -10,7 +10,7 @@
 
 class Bad extends lib.Missing {
   lib.Missing method() {}
-  factory WrongName() {}
+  factory WrongName() => throw '';
 }
 
 class WithMixin extends lib.Supertype with lib.Mixin {}
diff --git a/pkg/front_end/testcases/general/qualified.dart.textual_outline.expect b/pkg/front_end/testcases/general/qualified.dart.textual_outline.expect
index a0263ec..e2cbafa 100644
--- a/pkg/front_end/testcases/general/qualified.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test.qualified.main;
 
 import "qualified_lib.dart" as lib;
@@ -6,7 +5,7 @@
 
 class Bad extends lib.Missing {
   lib.Missing method() {}
-  factory WrongName() {}
+  factory WrongName() => throw '';
 }
 
 class WithMixin extends lib.Supertype with lib.Mixin {}
diff --git a/pkg/front_end/testcases/general/qualified.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/qualified.dart.textual_outline_modelled.expect
index 5840afa..27a6e23 100644
--- a/pkg/front_end/testcases/general/qualified.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 library test.qualified.main;
 
 import "qualified_lib.dart" as lib;
 part "qualified_part.dart";
 
 class Bad extends lib.Missing {
-  factory WrongName() {}
+  factory WrongName() => throw '';
   lib.Missing method() {}
 }
 
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 59d3ddb..be3713b 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -1,9 +1,9 @@
-library test.qualified.main;
+library test.qualified.main /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
-//   factory WrongName() {}
+//   factory WrongName() => throw '';
 //           ^^^^^^^^^
 // pkg/front_end/testcases/general/qualified.dart:11:7: Context: The name of the enclosing class is 'Bad'.
 // class Bad extends lib.Missing {
@@ -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();
 //         ^
@@ -33,132 +33,83 @@
 part qualified_part.dart;
 class Bad extends core::Object {
   method method() → invalid-type {}
-  static factory WrongName() → self::Bad* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory WrongName() → self::Bad
+    return throw "";
 }
 abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
+  synthetic constructor •() → self::_WithMixin&Supertype&Mixin
     : super lib::Supertype::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
-  synthetic constructor •() → self::WithMixin*
+  synthetic constructor •() → self::WithMixin
     : super self::_WithMixin&Supertype&Mixin::•()
     ;
 }
 class IllegalSupertype extends core::Object {
-  synthetic constructor •() → self::IllegalSupertype*
+  synthetic constructor •() → self::IllegalSupertype
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  constructor a() → self::C<self::C::T*>*
+  constructor a() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    return lib::C::b<self::C::b::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory b<T extends core::Object? = dynamic>() → self::C<self::C::b::T%>
+    return lib::C::b<self::C::b::T%>();
 }
 static method main() → dynamic {
-  new self::C::•<core::String*>();
-  new self::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::•<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
-  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
+  new self::C::•<core::String>();
+  new self::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::•<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() → dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() → dynamic};
   new self::IllegalSupertype::•();
 }
 
-library test.qualified.lib;
+library test.qualified.lib /*isNonNullableByDefault*/;
 import self as lib;
 import "dart:core" as core;
 import "qualified.dart" as self;
 
 import "org-dartlang-testcase:///qualified.dart" as main;
 
-typedef VoidFunction = () →* void;
-class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → lib::C<lib::C::T*>*
+typedef VoidFunction = () → void;
+class C<T extends core::Object? = dynamic> extends self::C<lib::C::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  constructor a() → lib::C<lib::C::T*>*
+  constructor a() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    return new lib::C::a<lib::C::b::T*>();
+  static factory b<T extends core::Object? = dynamic>() → lib::C<lib::C::b::T%>
+    return new lib::C::a<lib::C::b::T%>();
 }
 class Supertype extends core::Object {
-  synthetic constructor •() → lib::Supertype*
+  synthetic constructor •() → lib::Supertype
     : super core::Object::•()
     ;
   method supertypeMethod() → dynamic {
     core::print("I'm supertypeMethod form lib.Supertype");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → lib::Mixin*
+  synthetic constructor •() → lib::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic {
     core::print("I'm Mixin.foo");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
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 59d3ddb..be3713b 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library test.qualified.main;
+library test.qualified.main /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
-//   factory WrongName() {}
+//   factory WrongName() => throw '';
 //           ^^^^^^^^^
 // pkg/front_end/testcases/general/qualified.dart:11:7: Context: The name of the enclosing class is 'Bad'.
 // class Bad extends lib.Missing {
@@ -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();
 //         ^
@@ -33,132 +33,83 @@
 part qualified_part.dart;
 class Bad extends core::Object {
   method method() → invalid-type {}
-  static factory WrongName() → self::Bad* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory WrongName() → self::Bad
+    return throw "";
 }
 abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
+  synthetic constructor •() → self::_WithMixin&Supertype&Mixin
     : super lib::Supertype::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
-  synthetic constructor •() → self::WithMixin*
+  synthetic constructor •() → self::WithMixin
     : super self::_WithMixin&Supertype&Mixin::•()
     ;
 }
 class IllegalSupertype extends core::Object {
-  synthetic constructor •() → self::IllegalSupertype*
+  synthetic constructor •() → self::IllegalSupertype
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  constructor a() → self::C<self::C::T*>*
+  constructor a() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    return lib::C::b<self::C::b::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory b<T extends core::Object? = dynamic>() → self::C<self::C::b::T%>
+    return lib::C::b<self::C::b::T%>();
 }
 static method main() → dynamic {
-  new self::C::•<core::String*>();
-  new self::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::•<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
-  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
+  new self::C::•<core::String>();
+  new self::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::•<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() → dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() → dynamic};
   new self::IllegalSupertype::•();
 }
 
-library test.qualified.lib;
+library test.qualified.lib /*isNonNullableByDefault*/;
 import self as lib;
 import "dart:core" as core;
 import "qualified.dart" as self;
 
 import "org-dartlang-testcase:///qualified.dart" as main;
 
-typedef VoidFunction = () →* void;
-class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → lib::C<lib::C::T*>*
+typedef VoidFunction = () → void;
+class C<T extends core::Object? = dynamic> extends self::C<lib::C::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  constructor a() → lib::C<lib::C::T*>*
+  constructor a() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    return new lib::C::a<lib::C::b::T*>();
+  static factory b<T extends core::Object? = dynamic>() → lib::C<lib::C::b::T%>
+    return new lib::C::a<lib::C::b::T%>();
 }
 class Supertype extends core::Object {
-  synthetic constructor •() → lib::Supertype*
+  synthetic constructor •() → lib::Supertype
     : super core::Object::•()
     ;
   method supertypeMethod() → dynamic {
     core::print("I'm supertypeMethod form lib.Supertype");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → lib::Mixin*
+  synthetic constructor •() → lib::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic {
     core::print("I'm Mixin.foo");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
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 57448e6..822ff06 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library test.qualified.main;
+library test.qualified.main /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
-//   factory WrongName() {}
+//   factory WrongName() => throw '';
 //           ^^^^^^^^^
 // pkg/front_end/testcases/general/qualified.dart:11:7: Context: The name of the enclosing class is 'Bad'.
 // class Bad extends lib.Missing {
@@ -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();
 //         ^
@@ -34,114 +34,64 @@
 class Bad extends core::Object {
   method method() → invalid-type
     ;
-  static factory WrongName() → self::Bad*
+  static factory WrongName() → self::Bad
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
+  synthetic constructor •() → self::_WithMixin&Supertype&Mixin
     : super lib::Supertype::•()
     ;
   mixin-super-stub method foo() → dynamic
     return super.{lib::Mixin::foo}();
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
-  synthetic constructor •() → self::WithMixin*
+  synthetic constructor •() → self::WithMixin
     ;
 }
 class IllegalSupertype extends core::Object {
-  synthetic constructor •() → self::IllegalSupertype*
+  synthetic constructor •() → self::IllegalSupertype
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[self::C::b];
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+  static final field dynamic _redirecting# = <dynamic>[self::C::b]/*isLegacy*/;
+  constructor •() → self::C<self::C::T%>
     ;
-  constructor a() → self::C<self::C::T*>*
+  constructor a() → self::C<self::C::T%>
     ;
-  static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    return lib::C::b<self::C::b::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory b<T extends core::Object? = dynamic>() → self::C<self::C::b::T%>
+    return lib::C::b<self::C::b::T%>();
 }
 static method main() → dynamic
   ;
 
-library test.qualified.lib;
+library test.qualified.lib /*isNonNullableByDefault*/;
 import self as lib;
 import "dart:core" as core;
 import "qualified.dart" as self;
 
 import "org-dartlang-testcase:///qualified.dart" as main;
 
-typedef VoidFunction = () →* void;
-class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[lib::C::b];
-  constructor •() → lib::C<lib::C::T*>*
+typedef VoidFunction = () → void;
+class C<T extends core::Object? = dynamic> extends self::C<lib::C::T%> {
+  static final field dynamic _redirecting# = <dynamic>[lib::C::b]/*isLegacy*/;
+  constructor •() → lib::C<lib::C::T%>
     ;
-  constructor a() → lib::C<lib::C::T*>*
+  constructor a() → lib::C<lib::C::T%>
     ;
-  static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    return new lib::C::a<lib::C::b::T*>();
+  static factory b<T extends core::Object? = dynamic>() → lib::C<lib::C::b::T%>
+    return new lib::C::a<lib::C::b::T%>();
 }
 class Supertype extends core::Object {
-  synthetic constructor •() → lib::Supertype*
+  synthetic constructor •() → lib::Supertype
     ;
   method supertypeMethod() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → lib::Mixin*
+  synthetic constructor •() → lib::Mixin
     ;
   method foo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 
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 83dac20..74e7869 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library test.qualified.main;
+library test.qualified.main /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
-//   factory WrongName() {}
+//   factory WrongName() => throw '';
 //           ^^^^^^^^^
 // pkg/front_end/testcases/general/qualified.dart:11:7: Context: The name of the enclosing class is 'Bad'.
 // class Bad extends lib.Missing {
@@ -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();
 //         ^
@@ -33,20 +33,11 @@
 part qualified_part.dart;
 class Bad extends core::Object {
   method method() → invalid-type {}
-  static factory WrongName() → self::Bad* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory WrongName() → self::Bad
+    return throw "";
 }
 abstract class _WithMixin&Supertype&Mixin extends lib::Supertype implements lib::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
+  synthetic constructor •() → self::_WithMixin&Supertype&Mixin
     : super lib::Supertype::•()
     ;
   method /* from org-dartlang-testcase:///qualified_lib.dart */ foo() → dynamic {
@@ -54,112 +45,72 @@
   }
 }
 class WithMixin extends self::_WithMixin&Supertype&Mixin {
-  synthetic constructor •() → self::WithMixin*
+  synthetic constructor •() → self::WithMixin
     : super self::_WithMixin&Supertype&Mixin::•()
     ;
 }
 class IllegalSupertype extends core::Object {
-  synthetic constructor •() → self::IllegalSupertype*
+  synthetic constructor •() → self::IllegalSupertype
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  constructor a() → self::C<self::C::T*>*
+  constructor a() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
-    return lib::C::b<self::C::b::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory b<T extends core::Object? = dynamic>() → self::C<self::C::b::T%>
+    return lib::C::b<self::C::b::T%>();
 }
 static method main() → dynamic {
-  new self::C::•<core::String*>();
-  new self::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::•<core::String*>();
-  new lib::C::a<core::String*>();
-  new lib::C::a<core::String*>();
-  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
-  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
+  new self::C::•<core::String>();
+  new self::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::•<core::String>();
+  new lib::C::a<core::String>();
+  new lib::C::a<core::String>();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() → dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() → dynamic};
   new self::IllegalSupertype::•();
 }
 
-library test.qualified.lib;
+library test.qualified.lib /*isNonNullableByDefault*/;
 import self as lib;
 import "dart:core" as core;
 import "qualified.dart" as self;
 
 import "org-dartlang-testcase:///qualified.dart" as main;
 
-typedef VoidFunction = () →* void;
-class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor •() → lib::C<lib::C::T*>*
+typedef VoidFunction = () → void;
+class C<T extends core::Object? = dynamic> extends self::C<lib::C::T%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  constructor a() → lib::C<lib::C::T*>*
+  constructor a() → lib::C<lib::C::T%>
     : super self::C::•()
     ;
-  static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
-    return new lib::C::a<lib::C::b::T*>();
+  static factory b<T extends core::Object? = dynamic>() → lib::C<lib::C::b::T%>
+    return new lib::C::a<lib::C::b::T%>();
 }
 class Supertype extends core::Object {
-  synthetic constructor •() → lib::Supertype*
+  synthetic constructor •() → lib::Supertype
     : super core::Object::•()
     ;
   method supertypeMethod() → dynamic {
     core::print("I'm supertypeMethod form lib.Supertype");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Mixin extends core::Object {
-  synthetic constructor •() → lib::Mixin*
+  synthetic constructor •() → lib::Mixin
     : super core::Object::•()
     ;
   method foo() → dynamic {
     core::print("I'm Mixin.foo");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/qualified_lib.dart b/pkg/front_end/testcases/general/qualified_lib.dart
index abeef31..ae00a71 100644
--- a/pkg/front_end/testcases/general/qualified_lib.dart
+++ b/pkg/front_end/testcases/general/qualified_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 library test.qualified.lib;
 
 import "qualified.dart" as main;
diff --git a/pkg/front_end/testcases/general/qualified_part.dart b/pkg/front_end/testcases/general/qualified_part.dart
index 70ec895..370335a 100644
--- a/pkg/front_end/testcases/general/qualified_part.dart
+++ b/pkg/front_end/testcases/general/qualified_part.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 part of test.qualified.main;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart b/pkg/front_end/testcases/general/redirecting_constructor.dart
index d993dc3..72b53b6 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {
   A();
   factory A.fisk() = B;
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline.expect
index 16cde0a..2e2eb1f 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A();
   factory A.fisk() = B;
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline_modelled.expect
index 16cde0a..2e2eb1f 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A();
   factory A.fisk() = B;
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
index 293f8a2..5f462b3 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory fisk() → self::A*
+  static factory fisk() → self::A
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect
index 293f8a2..5f462b3 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory fisk() → self::A*
+  static factory fisk() → self::A
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
index 2ae8aaa..51530bf 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::fisk];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::fisk]/*isLegacy*/;
+  constructor •() → self::A
     ;
-  static factory fisk() → self::A*
+  static factory fisk() → self::A
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
index 293f8a2..5f462b3 100644
--- a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory fisk() → self::A*
+  static factory fisk() → self::A
     return new self::B::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart b/pkg/front_end/testcases/general/redirecting_default_values.dart
new file mode 100644
index 0000000..322fc25
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart
@@ -0,0 +1,23 @@
+// 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.
+
+class Class {
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+
+  Class.named({int a = 0, int b = 42});
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
new file mode 100644
index 0000000..85004fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class Class {
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+  Class.named({int a = 0, int b = 42});
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c7ca7ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class Class {
+  Class.named({int a = 0, int b = 42});
+  Class.positional([int a = 0, int b = 42]);
+  factory Class.redirect1a() = Class.positional;
+  factory Class.redirect1b() = Class.named;
+  factory Class.redirect2a(int a) = Class.positional;
+  factory Class.redirect2b({int a}) = Class.named;
+  factory Class.redirect3a([int a]) = Class.positional;
+  factory Class.redirect3b({int b}) = Class.named;
+  factory Class.redirect4a(int a, [int b]) = Class.positional;
+  factory Class.redirect4b({int a, int b}) = Class.named;
+  factory Class.redirect5a([int a, int b]) = Class.positional;
+  factory Class.redirect5b({int b, int a}) = Class.named;
+  factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+  factory Class.redirect6b({int a = 1, int b}) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
new file mode 100644
index 0000000..cbca85f
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.outline.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect1a, self::Class::redirect2a, self::Class::redirect3a, self::Class::redirect4a, self::Class::redirect5a, self::Class::redirect6a, self::Class::redirect1b, self::Class::redirect2b, self::Class::redirect3b, self::Class::redirect4b, self::Class::redirect5b, self::Class::redirect6b]/*isLegacy*/;
+  constructor positional([core::int a = 0, core::int b = 42]) → self::Class
+    ;
+  constructor named({core::int a = 0, core::int b = 42}) → self::Class
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a, [core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a, core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a, core::int b]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a, core::int b}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b, core::int a}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a, core::int b}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6a)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect1b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect2b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect3b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect4b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect5b)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_default_values.dart:5:7 -> ConstructorTearOffConstant(Class.redirect6b)
+Extra constant evaluation: evaluated: 41, effectively constant: 12
diff --git a/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
new file mode 100644
index 0000000..f08d181
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_default_values.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:12:44: Error: Can't have a default value here because any default values of 'Class.positional' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6a([int a, int b = 2]) = Class.positional;
+//                                            ^
+//
+// pkg/front_end/testcases/general/redirecting_default_values.dart:20:37: Error: Can't have a default value here because any default values of 'Class.named' would be used instead.
+// Try removing the default value.
+//   factory Class.redirect6b({int a = 1, int b}) = Class.named;
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8, #C9, #C10, #C11, #C12]/*isLegacy*/;
+  constructor positional([core::int a = #C13, core::int b = #C14]) → self::Class
+    : super core::Object::•()
+    ;
+  constructor named({core::int a = #C13, core::int b = #C14}) → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect1a() → self::Class
+    return new self::Class::positional();
+  static factory redirect2a(core::int a = #C13) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect3a([core::int a = #C13]) → self::Class
+    return new self::Class::positional(a);
+  static factory redirect4a(core::int a = #C13, [core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect5a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect6a([core::int a = #C13, core::int b = #C14]) → self::Class
+    return new self::Class::positional(a, b);
+  static factory redirect1b() → self::Class
+    return new self::Class::named();
+  static factory redirect2b({core::int a = #C13}) → self::Class
+    return new self::Class::named(a: a);
+  static factory redirect3b({core::int b = #C14}) → self::Class
+    return new self::Class::named(b: b);
+  static factory redirect4b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+  static factory redirect5b({core::int b = #C14, core::int a = #C13}) → self::Class
+    return new self::Class::named(b: b, a: a);
+  static factory redirect6b({core::int a = #C13, core::int b = #C14}) → self::Class
+    return new self::Class::named(a: a, b: b);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect1a
+  #C2 = constructor-tearoff self::Class::redirect2a
+  #C3 = constructor-tearoff self::Class::redirect3a
+  #C4 = constructor-tearoff self::Class::redirect4a
+  #C5 = constructor-tearoff self::Class::redirect5a
+  #C6 = constructor-tearoff self::Class::redirect6a
+  #C7 = constructor-tearoff self::Class::redirect1b
+  #C8 = constructor-tearoff self::Class::redirect2b
+  #C9 = constructor-tearoff self::Class::redirect3b
+  #C10 = constructor-tearoff self::Class::redirect4b
+  #C11 = constructor-tearoff self::Class::redirect5b
+  #C12 = constructor-tearoff self::Class::redirect6b
+  #C13 = 0
+  #C14 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart b/pkg/front_end/testcases/general/redirecting_factory.dart
index 6e8e39c..af4e16d 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class FooBase<Tf> {
   int get x;
   factory FooBase(int x) = Foo<Tf>;
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline.expect
index d84ae38..b6e0d0a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class FooBase<Tf> {
   int get x;
   factory FooBase(int x) = Foo<Tf>;
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline_modelled.expect
index 5fa0044..3f02151 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Foo<T> implements FooBase {
   factory Foo(int x) = Bar<String, T>;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
index ba2466c..27e2e84 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,60 +11,30 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get x() → core::int*;
-  static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
+abstract class FooBase<Tf extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get x() → core::int;
+  static factory •<Tf extends core::Object? = dynamic>(core::int x) → self::FooBase<self::FooBase::•::Tf%>
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
                            ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object implements self::FooBase<dynamic> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(core::int x) → self::Foo<self::Foo::•::T%>
+    return new self::Bar::•<core::String, self::Foo::•::T%>(x);
 }
-class Bar<Sb extends core::Object* = dynamic, Tb extends core::Object* = dynamic> extends core::Object implements self::Foo<self::Bar::Tb*> {
-  field core::int* x;
-  constructor •(core::int* x) → self::Bar<self::Bar::Sb*, self::Bar::Tb*>*
+class Bar<Sb extends core::Object? = dynamic, Tb extends core::Object? = dynamic> extends core::Object implements self::Foo<self::Bar::Tb%> {
+  field core::int x;
+  constructor •(core::int x) → self::Bar<self::Bar::Sb%, self::Bar::Tb%>
     : self::Bar::x = x, super core::Object::•() {
-    core::print("Bar<${self::Bar::Sb*},${self::Bar::Tb*}>");
+    core::print("Bar<${self::Bar::Sb%},${self::Bar::Tb%}>");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Builder<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Builder<self::Builder::X*>*
+class Builder<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Builder<self::Builder::X%>
     : super core::Object::•()
     ;
   method method() → dynamic {
@@ -74,94 +44,34 @@
   factory FooBase(int x) = Foo<Tf>;
                            ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C3];
-  static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCase<A extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  static factory •<A extends core::Object? = dynamic, B extends core::Object? = dynamic>() → self::SimpleCase<self::SimpleCase::•::A%, self::SimpleCase::•::B%>
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A%, self::SimpleCase::•::B%>();
 }
-class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4];
-  static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCaseImpl<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai%, self::SimpleCaseImpl::Bi%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static factory •<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>();
 }
-class SimpleCaseImpl2<Ai2 extends core::Object* = dynamic, Bi2 extends core::Object* = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*> {
-  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*>*
+class SimpleCaseImpl2<Ai2 extends core::Object? = dynamic, Bi2 extends core::Object? = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%> {
+  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Base<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Base<self::Base::M*>*
+class Base<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mixin<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Mixin<self::Mixin::M*>*
+class Mixin<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Mixin<self::Mixin::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mix<M extends core::Object* = dynamic> = self::Base<self::Mix::M*> with self::Mixin<self::Mix::M*> {
-  synthetic constructor •() → self::Mix<self::Mix::M*>*
+class Mix<M extends core::Object? = dynamic> = self::Base<self::Mix::M%> with self::Mixin<self::Mix::M%> {
+  synthetic constructor •() → self::Mix<self::Mix::M%>
     : super self::Base::•()
     ;
 }
@@ -170,9 +80,9 @@
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
-                           ^".{self::FooBase::x}{core::int*});
-  new self::SimpleCaseImpl2::•<core::int*, core::double*>();
-  new self::Mix::•<core::double*>();
+                           ^".{self::FooBase::x}{core::int});
+  new self::SimpleCaseImpl2::•<core::int, core::double>();
+  new self::Mix::•<core::double>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect
index ba2466c..27e2e84 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,60 +11,30 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get x() → core::int*;
-  static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
+abstract class FooBase<Tf extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get x() → core::int;
+  static factory •<Tf extends core::Object? = dynamic>(core::int x) → self::FooBase<self::FooBase::•::Tf%>
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
                            ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object implements self::FooBase<dynamic> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(core::int x) → self::Foo<self::Foo::•::T%>
+    return new self::Bar::•<core::String, self::Foo::•::T%>(x);
 }
-class Bar<Sb extends core::Object* = dynamic, Tb extends core::Object* = dynamic> extends core::Object implements self::Foo<self::Bar::Tb*> {
-  field core::int* x;
-  constructor •(core::int* x) → self::Bar<self::Bar::Sb*, self::Bar::Tb*>*
+class Bar<Sb extends core::Object? = dynamic, Tb extends core::Object? = dynamic> extends core::Object implements self::Foo<self::Bar::Tb%> {
+  field core::int x;
+  constructor •(core::int x) → self::Bar<self::Bar::Sb%, self::Bar::Tb%>
     : self::Bar::x = x, super core::Object::•() {
-    core::print("Bar<${self::Bar::Sb*},${self::Bar::Tb*}>");
+    core::print("Bar<${self::Bar::Sb%},${self::Bar::Tb%}>");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Builder<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Builder<self::Builder::X*>*
+class Builder<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Builder<self::Builder::X%>
     : super core::Object::•()
     ;
   method method() → dynamic {
@@ -74,94 +44,34 @@
   factory FooBase(int x) = Foo<Tf>;
                            ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C3];
-  static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCase<A extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  static factory •<A extends core::Object? = dynamic, B extends core::Object? = dynamic>() → self::SimpleCase<self::SimpleCase::•::A%, self::SimpleCase::•::B%>
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A%, self::SimpleCase::•::B%>();
 }
-class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4];
-  static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCaseImpl<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai%, self::SimpleCaseImpl::Bi%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static factory •<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>();
 }
-class SimpleCaseImpl2<Ai2 extends core::Object* = dynamic, Bi2 extends core::Object* = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*> {
-  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*>*
+class SimpleCaseImpl2<Ai2 extends core::Object? = dynamic, Bi2 extends core::Object? = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%> {
+  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Base<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Base<self::Base::M*>*
+class Base<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mixin<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Mixin<self::Mixin::M*>*
+class Mixin<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Mixin<self::Mixin::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mix<M extends core::Object* = dynamic> = self::Base<self::Mix::M*> with self::Mixin<self::Mix::M*> {
-  synthetic constructor •() → self::Mix<self::Mix::M*>*
+class Mix<M extends core::Object? = dynamic> = self::Base<self::Mix::M%> with self::Mixin<self::Mix::M%> {
+  synthetic constructor •() → self::Mix<self::Mix::M%>
     : super self::Base::•()
     ;
 }
@@ -170,9 +80,9 @@
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
-                           ^".{self::FooBase::x}{core::int*});
-  new self::SimpleCaseImpl2::•<core::int*, core::double*>();
-  new self::Mix::•<core::double*>();
+                           ^".{self::FooBase::x}{core::int});
+  new self::SimpleCaseImpl2::•<core::int, core::double>();
+  new self::Mix::•<core::double>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
index 6978627..cff6670 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,146 +11,56 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•];
-  abstract get x() → core::int*;
-  static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
+abstract class FooBase<Tf extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::FooBase::•]/*isLegacy*/;
+  abstract get x() → core::int;
+  static factory •<Tf extends core::Object? = dynamic>(core::int x) → self::FooBase<self::FooBase::•::Tf%>
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
                            ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
-  static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object implements self::FooBase<dynamic> {
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(core::int x) → self::Foo<self::Foo::•::T%>
+    return new self::Bar::•<core::String, self::Foo::•::T%>(x);
 }
-class Bar<Sb extends core::Object* = dynamic, Tb extends core::Object* = dynamic> extends core::Object implements self::Foo<self::Bar::Tb*> {
-  field core::int* x;
-  constructor •(core::int* x) → self::Bar<self::Bar::Sb*, self::Bar::Tb*>*
+class Bar<Sb extends core::Object? = dynamic, Tb extends core::Object? = dynamic> extends core::Object implements self::Foo<self::Bar::Tb%> {
+  field core::int x;
+  constructor •(core::int x) → self::Bar<self::Bar::Sb%, self::Bar::Tb%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Builder<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Builder<self::Builder::X*>*
+class Builder<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Builder<self::Builder::X%>
     ;
   method method() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•];
-  static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCase<A extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCase::•]/*isLegacy*/;
+  static factory •<A extends core::Object? = dynamic, B extends core::Object? = dynamic>() → self::SimpleCase<self::SimpleCase::•::A%, self::SimpleCase::•::B%>
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A%, self::SimpleCase::•::B%>();
 }
-class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•];
-  static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCaseImpl<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai%, self::SimpleCaseImpl::Bi%> {
+  static final field dynamic _redirecting# = <dynamic>[self::SimpleCaseImpl::•]/*isLegacy*/;
+  static factory •<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>();
 }
-class SimpleCaseImpl2<Ai2 extends core::Object* = dynamic, Bi2 extends core::Object* = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*> {
-  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*>*
+class SimpleCaseImpl2<Ai2 extends core::Object? = dynamic, Bi2 extends core::Object? = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%> {
+  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Base<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Base<self::Base::M*>*
+class Base<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::M%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mixin<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Mixin<self::Mixin::M*>*
+class Mixin<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Mixin<self::Mixin::M%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mix<M extends core::Object* = dynamic> = self::Base<self::Mix::M*> with self::Mixin<self::Mix::M*> {
-  synthetic constructor •() → self::Mix<self::Mix::M*>*
+class Mix<M extends core::Object? = dynamic> = self::Base<self::Mix::M%> with self::Mixin<self::Mix::M%> {
+  synthetic constructor •() → self::Mix<self::Mix::M%>
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
index 025c11c..793a07e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,60 +11,30 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  abstract get x() → core::int*;
-  static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
+abstract class FooBase<Tf extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  abstract get x() → core::int;
+  static factory •<Tf extends core::Object? = dynamic>(core::int x) → self::FooBase<self::FooBase::•::Tf%>
     return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
                            ^";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
-    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object implements self::FooBase<dynamic> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(core::int x) → self::Foo<self::Foo::•::T%>
+    return new self::Bar::•<core::String, self::Foo::•::T%>(x);
 }
-class Bar<Sb extends core::Object* = dynamic, Tb extends core::Object* = dynamic> extends core::Object implements self::Foo<self::Bar::Tb*> {
-  field core::int* x;
-  constructor •(core::int* x) → self::Bar<self::Bar::Sb*, self::Bar::Tb*>*
+class Bar<Sb extends core::Object? = dynamic, Tb extends core::Object? = dynamic> extends core::Object implements self::Foo<self::Bar::Tb%> {
+  field core::int x;
+  constructor •(core::int x) → self::Bar<self::Bar::Sb%, self::Bar::Tb%>
     : self::Bar::x = x, super core::Object::•() {
-    core::print("Bar<${self::Bar::Sb*},${self::Bar::Tb*}>");
+    core::print("Bar<${self::Bar::Sb%},${self::Bar::Tb%}>");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Builder<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Builder<self::Builder::X*>*
+class Builder<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Builder<self::Builder::X%>
     : super core::Object::•()
     ;
   method method() → dynamic {
@@ -74,94 +44,34 @@
   factory FooBase(int x) = Foo<Tf>;
                            ^";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C3];
-  static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
-    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCase<A extends core::Object? = dynamic, B extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  static factory •<A extends core::Object? = dynamic, B extends core::Object? = dynamic>() → self::SimpleCase<self::SimpleCase::•::A%, self::SimpleCase::•::B%>
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A%, self::SimpleCase::•::B%>();
 }
-class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
-  static final field dynamic _redirecting# = <dynamic>[#C4];
-  static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
-    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class SimpleCaseImpl<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai%, self::SimpleCaseImpl::Bi%> {
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static factory •<Ai extends core::Object? = dynamic, Bi extends core::Object? = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai%, self::SimpleCaseImpl::•::Bi%>();
 }
-class SimpleCaseImpl2<Ai2 extends core::Object* = dynamic, Bi2 extends core::Object* = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*> {
-  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*>*
+class SimpleCaseImpl2<Ai2 extends core::Object? = dynamic, Bi2 extends core::Object? = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%> {
+  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2%, self::SimpleCaseImpl2::Bi2%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Base<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Base<self::Base::M*>*
+class Base<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mixin<M extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Mixin<self::Mixin::M*>*
+class Mixin<M extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Mixin<self::Mixin::M%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Mix<M extends core::Object* = dynamic> extends self::Base<self::Mix::M*> implements self::Mixin<self::Mix::M*> /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::Mix<self::Mix::M*>*
+class Mix<M extends core::Object? = dynamic> extends self::Base<self::Mix::M%> implements self::Mixin<self::Mix::M%> /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Mix<self::Mix::M%>
     : super self::Base::•()
     ;
 }
@@ -170,9 +80,9 @@
  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
   factory FooBase(int x) = Foo<Tf>;
-                           ^".{self::FooBase::x}{core::int*});
-  new self::SimpleCaseImpl2::•<core::int*, core::double*>();
-  new self::Mix::•<core::double*>();
+                           ^".{self::FooBase::x}{core::int});
+  new self::SimpleCaseImpl2::•<core::int, core::double>();
+  new self::Mix::•<core::double>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart
index 9ffa473..ad9409e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The purpose of this test is to check the representation of redirecting
 // factory constructors in a case of a redirecting chain.
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline.expect
index f0d752d..f7ca084 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.chain_test;
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline_modelled.expect
index f0d752d..f7ca084 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.chain_test;
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
index e86259e..d6b5891 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.expect
@@ -1,26 +1,16 @@
-library redirecting_factory_constructors.chain_test;
+library redirecting_factory_constructors.chain_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory first() → self::A*
+  static factory first() → self::A
     return new self::A::•();
-  static factory second() → self::A*
+  static factory second() → self::A
     return self::A::first();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect
index e86259e..d6b5891 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect
@@ -1,26 +1,16 @@
-library redirecting_factory_constructors.chain_test;
+library redirecting_factory_constructors.chain_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory first() → self::A*
+  static factory first() → self::A
     return new self::A::•();
-  static factory second() → self::A*
+  static factory second() → self::A
     return self::A::first();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
index 8eeb6bc..ae46768 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library redirecting_factory_constructors.chain_test;
+library redirecting_factory_constructors.chain_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second]/*isLegacy*/;
+  constructor •() → self::A
     ;
-  static factory first() → self::A*
+  static factory first() → self::A
     return new self::A::•();
-  static factory second() → self::A*
+  static factory second() → self::A
     return self::A::first();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
index e86259e..d6b5891 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.transformed.expect
@@ -1,26 +1,16 @@
-library redirecting_factory_constructors.chain_test;
+library redirecting_factory_constructors.chain_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory first() → self::A*
+  static factory first() → self::A
     return new self::A::•();
-  static factory second() → self::A*
+  static factory second() → self::A
     return self::A::first();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart
index 5564e78..8d904fd 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // This test checks that the type inference implementation correctly uses least
 // closure of the inferred type arguments in invocations of 'const' redirecting
 // factory constructors in case there are type variables in them.
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline.expect
index 61acaeb..1eae718 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class _X<T> {
   const factory _X() = _Y<T>;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline_modelled.expect
index 7ad545b..71b737f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   A(this.x);
   _X<T> x;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index 3dc0b99..580833f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -1,68 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    return new self::_Y::•<self::_X::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class _X<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%>
+    return new self::_Y::•<self::_X::•::T%>();
 }
-class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::_X<self::A::T*>* x;
-  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_X<self::A::T%> x;
+  constructor •(self::_X<self::A::T%> x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
-  if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>};
+  if(!(x is{ForNonNullableByDefault} self::_Y<Null>)) {
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type}}, but `_Y<Null>` expected";
   }
 }
 
 constants  {
   #C1 = constructor-tearoff self::_X::•
-  #C2 = self::_Y<Null> {}
+  #C2 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect
index 3dc0b99..580833f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect
@@ -1,68 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    return new self::_Y::•<self::_X::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class _X<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%>
+    return new self::_Y::•<self::_X::•::T%>();
 }
-class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::_X<self::A::T*>* x;
-  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_X<self::A::T%> x;
+  constructor •(self::_X<self::A::T%> x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
-  if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>};
+  if(!(x is{ForNonNullableByDefault} self::_Y<Null>)) {
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type}}, but `_Y<Null>` expected";
   }
 }
 
 constants  {
   #C1 = constructor-tearoff self::_X::•
-  #C2 = self::_Y<Null> {}
+  #C2 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
index 23c7bac..a3aa00a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
@@ -1,54 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::_X::•];
-  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    return new self::_Y::•<self::_X::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class _X<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::_X::•]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%>
+    return new self::_Y::•<self::_X::•::T%>();
 }
-class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::_X<self::A::T*>* x;
-  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_X<self::A::T%> x;
+  constructor •(self::_X<self::A::T%> x) → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index 3dc0b99..580833f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -1,68 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _X<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
-    return new self::_Y::•<self::_X::•::T*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class _X<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%>
+    return new self::_Y::•<self::_X::•::T%>();
 }
-class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class A<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::_X<self::A::T*>* x;
-  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_X<self::A::T%> x;
+  constructor •(self::_X<self::A::T%> x) → self::A<self::A::T%>
     : self::A::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A<self::B::T%> {
+  constructor •() → self::B<self::B::T%>
     : super self::A::•(#C2)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
-  if(!(x is self::_Y<Null>*)) {
-    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>};
+  if(!(x is{ForNonNullableByDefault} self::_Y<Null>)) {
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type}}, but `_Y<Null>` expected";
   }
 }
 
 constants  {
   #C1 = constructor-tearoff self::_X::•
-  #C2 = self::_Y<Null> {}
+  #C2 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.expect
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
index 4a74b87..1dd09f3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
   constructor •([core::int field = #C2]) → self::A
     : self::A::field = field, super core::Object::•()
     ;
-  static factory redirect([core::int field]) → self::A
+  static factory redirect([core::int field = #C2]) → self::A
     return new self::A::•(field);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
index 4f4319e..41d3f4f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.expect
@@ -3,19 +3,21 @@
 import self as self;
 import "dart:core" as core;
 
+@#C1
 import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+@#C1
 export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
 
 @#C1
 part redirecting_factory_invocation_metadata_lib.dart;
 @#C1
-typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
 @#C1
-typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
 @#C1
-typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
 @#C1
-typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
   static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect
index 4f4319e..41d3f4f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect
@@ -3,19 +3,21 @@
 import self as self;
 import "dart:core" as core;
 
+@#C1
 import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+@#C1
 export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
 
 @#C1
 part redirecting_factory_invocation_metadata_lib.dart;
 @#C1
-typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
 @#C1
-typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
 @#C1
-typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
 @#C1
-typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
   static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
index 4f4319e..41d3f4f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.transformed.expect
@@ -3,19 +3,21 @@
 import self as self;
 import "dart:core" as core;
 
+@#C1
 import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+@#C1
 export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
 
 @#C1
 part redirecting_factory_invocation_metadata_lib.dart;
 @#C1
-typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, [self::Class<dynamic>]) → dynamic;
 @#C1
-typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(self::Class<dynamic>, {o2: self::Class<dynamic>}) → dynamic;
 @#C1
-typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, [dynamic]) → void;
 @#C1
-typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (dynamic, {o2: dynamic}) → void;
 @#C1
 class Const extends core::Object /*hasConstConstructor*/  {
   static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart
index d25c571..1107f18 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 // This test checks that annotations on redirecting factories and their formals
 // aren't skipped by the compiler and are observable in its output.
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline.expect
index a9cc41f..d486790 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const forParameter = 1;
 const forFactoryItself = 2;
 const anotherForParameter = 3;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline_modelled.expect
index 83e49dd..72b47ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   Foo.named(p);
   @forFactoryItself
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
index 9b12539..b05ebf3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor named(dynamic p) → self::Foo*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor named(dynamic p) → self::Foo
     : super core::Object::•()
     ;
   @#C2
-  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo
     return new self::Foo::named(p);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C3;
-static const field core::int* forFactoryItself = #C2;
-static const field core::int* anotherForParameter = #C4;
+static const field core::int forParameter = #C3;
+static const field core::int forFactoryItself = #C2;
+static const field core::int anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect
index 9b12539..b05ebf3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor named(dynamic p) → self::Foo*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor named(dynamic p) → self::Foo
     : super core::Object::•()
     ;
   @#C2
-  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo
     return new self::Foo::named(p);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C3;
-static const field core::int* forFactoryItself = #C2;
-static const field core::int* anotherForParameter = #C4;
+static const field core::int forParameter = #C3;
+static const field core::int forFactoryItself = #C2;
+static const field core::int anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
index 69d94af..06537eb 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.outline.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::Foo::•];
-  constructor named(dynamic p) → self::Foo*
+  static final field dynamic _redirecting# = <dynamic>[self::Foo::•]/*isLegacy*/;
+  constructor named(dynamic p) → self::Foo
     ;
   @self::forFactoryItself
-  static factory •(dynamic p) → self::Foo*
+  static factory •(dynamic p) → self::Foo
     return new self::Foo::named(p);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = 1;
-static const field core::int* forFactoryItself = 2;
-static const field core::int* anotherForParameter = 3;
+static const field core::int forParameter = 1;
+static const field core::int forFactoryItself = 2;
+static const field core::int anotherForParameter = 3;
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_metadata.dart:15:4 -> IntConstant(2)
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_metadata.dart:14:7 -> ConstructorTearOffConstant(Foo.)
+Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_metadata.dart:13:4 -> IntConstant(2)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirecting_factory_metadata.dart:12:7 -> ConstructorTearOffConstant(Foo.)
 Extra constant evaluation: evaluated: 5, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
index 9b12539..b05ebf3 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor named(dynamic p) → self::Foo*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor named(dynamic p) → self::Foo
     : super core::Object::•()
     ;
   @#C2
-  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo
     return new self::Foo::named(p);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static const field core::int* forParameter = #C3;
-static const field core::int* forFactoryItself = #C2;
-static const field core::int* anotherForParameter = #C4;
+static const field core::int forParameter = #C3;
+static const field core::int forFactoryItself = #C2;
+static const field core::int anotherForParameter = #C4;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart
index e1b8569..0598023 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The purpose of this test is to check the representation of redirecting
 // factory constructors on a simple case.
 
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline.expect
index a1e883f4..bbefe2c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.simple_test;
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline_modelled.expect
index a1e883f4..bbefe2c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.simple_test;
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
index f2a4360..d9ae044 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.expect
@@ -1,24 +1,14 @@
-library redirecting_factory_constructors.simple_test;
+library redirecting_factory_constructors.simple_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
+  static factory redir() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect
index f2a4360..d9ae044 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library redirecting_factory_constructors.simple_test;
+library redirecting_factory_constructors.simple_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
+  static factory redir() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
index 20fd71c..aa6c274 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library redirecting_factory_constructors.simple_test;
+library redirecting_factory_constructors.simple_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
+  constructor •() → self::A
     ;
-  static factory redir() → self::A*
+  static factory redir() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
index f2a4360..d9ae044 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library redirecting_factory_constructors.simple_test;
+library redirecting_factory_constructors.simple_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
+  static factory redir() → self::A
     return new self::A::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   new self::A::•();
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart
index 7df8a6e..611df4c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The purpose of this test is to check the representation of redirecting
 // factory constructors in the case when the redirection target has type
 // arguments supplied by the redirecting factory constructor.
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline.expect
index dfaace1..50ddae4 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeargs_test;
 
 class X {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline_modelled.expect
index b1ac84e..d52aa92 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeargs_test;
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
index 16c46e9..dd93c57 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.expect
@@ -1,52 +1,32 @@
-library redirecting_factory_constructors.typeargs_test;
+library redirecting_factory_constructors.typeargs_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
-    return new self::B::•<self::Y*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir() → self::A
+    return new self::B::•<self::Y>();
 }
-class B<T extends self::X*> extends self::A {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends self::X> extends self::A {
+  constructor •() → self::B<self::B::T>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•<self::Y*>();
+  new self::B::•<self::Y>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect
index 16c46e9..dd93c57 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect
@@ -1,52 +1,32 @@
-library redirecting_factory_constructors.typeargs_test;
+library redirecting_factory_constructors.typeargs_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
-    return new self::B::•<self::Y*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir() → self::A
+    return new self::B::•<self::Y>();
 }
-class B<T extends self::X*> extends self::A {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends self::X> extends self::A {
+  constructor •() → self::B<self::B::T>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•<self::Y*>();
+  new self::B::•<self::Y>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
index 024a135..c7abba0 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.outline.expect
@@ -1,44 +1,24 @@
-library redirecting_factory_constructors.typeargs_test;
+library redirecting_factory_constructors.typeargs_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
+  constructor •() → self::A
     ;
-  static factory redir() → self::A*
-    return new self::B::•<self::Y*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir() → self::A
+    return new self::B::•<self::Y>();
 }
-class B<T extends self::X*> extends self::A {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends self::X> extends self::A {
+  constructor •() → self::B<self::B::T>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
index 16c46e9..dd93c57 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.transformed.expect
@@ -1,52 +1,32 @@
-library redirecting_factory_constructors.typeargs_test;
+library redirecting_factory_constructors.typeargs_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
 class A extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A*
-    return new self::B::•<self::Y*>();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir() → self::A
+    return new self::B::•<self::Y>();
 }
-class B<T extends self::X*> extends self::A {
-  constructor •() → self::B<self::B::T*>*
+class B<T extends self::X> extends self::A {
+  constructor •() → self::B<self::B::T>
     : super self::A::•()
     ;
 }
 static method main() → dynamic {
-  new self::B::•<self::Y*>();
+  new self::B::•<self::Y>();
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart
index 3094ddc..967771f 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The purpose of this test is to check the representation of redirecting
 // factory constructors in the case when type parameters of the enclosing class
 // are used in type annotations of the parameters of the redirecting factory
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline.expect
index 44e29ab..e04255c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeparam_test;
 
 class A<T, S> {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline_modelled.expect
index 44e29ab..e04255c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeparam_test;
 
 class A<T, S> {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
index 469f2af..40bf17a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.expect
@@ -1,27 +1,17 @@
-library redirecting_factory_constructors.typeparam_test;
+library redirecting_factory_constructors.typeparam_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<core::int*, core::String*>(42, "foobar");
+  new self::A::•<core::int, core::String>(42, "foobar");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect
index 469f2af..40bf17a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library redirecting_factory_constructors.typeparam_test;
+library redirecting_factory_constructors.typeparam_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<core::int*, core::String*>(42, "foobar");
+  new self::A::•<core::int, core::String>(42, "foobar");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
index 795e0a9..6b35ffc 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library redirecting_factory_constructors.typeparam_test;
+library redirecting_factory_constructors.typeparam_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
index 469f2af..40bf17a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library redirecting_factory_constructors.typeparam_test;
+library redirecting_factory_constructors.typeparam_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<core::int*, core::String*>(42, "foobar");
+  new self::A::•<core::int, core::String>(42, "foobar");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart
index 3de706f..102c03a 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The purpose of this test is to check the representation of redirecting
 // factory constructors in the case when type parameters of the enclosing class
 // are used in type annotations of the parameters of the redirecting factory
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline.expect
index c1ebcd6..e6ad16e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeparambounds_test;
 
 class X {}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline_modelled.expect
index ec53c69..036a788 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library redirecting_factory_constructors.typeparambounds_test;
 
 class A<T, S extends T> {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
index 98d4e12..62b93ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.expect
@@ -1,47 +1,27 @@
-library redirecting_factory_constructors.typeparambounds_test;
+library redirecting_factory_constructors.typeparambounds_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
-class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends self::A::T% = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends self::A::redir::T% = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
+  new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect
index 98d4e12..62b93ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect
@@ -1,47 +1,27 @@
-library redirecting_factory_constructors.typeparambounds_test;
+library redirecting_factory_constructors.typeparambounds_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
-class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends self::A::T% = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends self::A::redir::T% = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
+  new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
index ef67ff4..99a077c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.outline.expect
@@ -1,41 +1,21 @@
-library redirecting_factory_constructors.typeparambounds_test;
+library redirecting_factory_constructors.typeparambounds_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     ;
 }
-class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::redir];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends self::A::T% = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::redir]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends self::A::redir::T% = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
index 98d4e12..62b93ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.transformed.expect
@@ -1,47 +1,27 @@
-library redirecting_factory_constructors.typeparambounds_test;
+library redirecting_factory_constructors.typeparambounds_test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class X extends core::Object {
-  synthetic constructor •() → self::X*
+  synthetic constructor •() → self::X
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends self::X {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super self::X::•()
     ;
 }
-class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+class A<T extends core::Object? = dynamic, S extends self::A::T% = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::A::T% t, self::A::S% s) → self::A<self::A::T%, self::A::S%>
     : super core::Object::•()
     ;
-  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
-    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory redir<T extends core::Object? = dynamic, S extends self::A::redir::T% = dynamic>(self::A::redir::T% t, self::A::redir::S% s) → self::A<self::A::redir::T%, self::A::redir::S%>
+    return new self::A::•<self::A::redir::T%, self::A::redir::S%>(t, s);
 }
 static method main() → dynamic {
-  new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
+  new self::A::•<self::X, self::Y>(new self::X::•(), new self::Y::•());
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart
new file mode 100644
index 0000000..1227d68
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2018, 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.
+
+// The test checks that types of arguments of redirecting initializers are
+// checked against the corresponding formal parameter types of the redirection
+// targets, and the downcasts are inserted where appropriate.
+
+class X {}
+
+class Foo<T extends X> {
+  T x;
+  Foo.fromX(X _init) : this._internal(x: _init);
+  Foo.fromT(T _init) : this._internal(x: _init);
+  Foo._internal({required this.x});
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline.expect
new file mode 100644
index 0000000..384bb91
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class X {}
+
+class Foo<T extends X> {
+  T x;
+  Foo.fromX(X _init) : this._internal(x: _init);
+  Foo.fromT(T _init) : this._internal(x: _init);
+  Foo._internal({required this.x});
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..593848b
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class Foo<T extends X> {
+  Foo._internal({required this.x});
+  Foo.fromT(T _init) : this._internal(x: _init);
+  Foo.fromX(X _init) : this._internal(x: _init);
+  T x;
+}
+
+class X {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.expect
new file mode 100644
index 0000000..43afede
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+//  - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+//   Foo.fromX(X _init) : this._internal(x: _init);
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X
+    : super core::Object::•()
+    ;
+}
+class Foo<T extends self::X> extends core::Object {
+  covariant-by-class field self::Foo::T x;
+  constructor fromX(self::X _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+ - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+  Foo.fromX(X _init) : this._internal(x: _init);
+                                         ^" in _init as{TypeError,ForNonNullableByDefault} Never)
+    ;
+  constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: _init)
+    ;
+  constructor _internal({required self::Foo::T x = #C1}) → self::Foo<self::Foo::T>
+    : self::Foo::x = x, super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.modular.expect
new file mode 100644
index 0000000..43afede
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+//  - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+//   Foo.fromX(X _init) : this._internal(x: _init);
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X
+    : super core::Object::•()
+    ;
+}
+class Foo<T extends self::X> extends core::Object {
+  covariant-by-class field self::Foo::T x;
+  constructor fromX(self::X _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+ - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+  Foo.fromX(X _init) : this._internal(x: _init);
+                                         ^" in _init as{TypeError,ForNonNullableByDefault} Never)
+    ;
+  constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: _init)
+    ;
+  constructor _internal({required self::Foo::T x = #C1}) → self::Foo<self::Foo::T>
+    : self::Foo::x = x, super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
new file mode 100644
index 0000000..8972be7
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X
+    ;
+}
+class Foo<T extends self::X> extends core::Object {
+  covariant-by-class field self::Foo::T x;
+  constructor fromX(self::X _init) → self::Foo<self::Foo::T>
+    ;
+  constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
+    ;
+  constructor _internal({required self::Foo::T x}) → self::Foo<self::Foo::T>
+    ;
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.transformed.expect
new file mode 100644
index 0000000..43afede
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart.weak.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+//  - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+//   Foo.fromX(X _init) : this._internal(x: _init);
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X
+    : super core::Object::•()
+    ;
+}
+class Foo<T extends self::X> extends core::Object {
+  covariant-by-class field self::Foo::T x;
+  constructor fromX(self::X _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart:13:42: Error: The argument type 'X' can't be assigned to the parameter type 'T'.
+ - 'X' is from 'pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable2.dart'.
+  Foo.fromX(X _init) : this._internal(x: _init);
+                                         ^" in _init as{TypeError,ForNonNullableByDefault} Never)
+    ;
+  constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
+    : this self::Foo::_internal(x: _init)
+    ;
+  constructor _internal({required self::Foo::T x = #C1}) → self::Foo<self::Foo::T>
+    : self::Foo::x = x, super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart
index b4aeab5..9218e07 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 // The test checks that types of arguments of redirecting initializers are
 // checked against the corresponding formal parameter types of the redirection
 // targets, and the downcasts are inserted where appropriate.
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart
index d5147d5..0c64722 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // The test checks that types of arguments of redirecting initializers are
 // checked against the corresponding formal parameter types of the redirection
 // targets, and the compile-time error is emitted in the case they are not
@@ -10,7 +10,7 @@
 class Foo<T> {
   T x;
   Foo.from(String _init) : this._internal(x: _init);
-  Foo._internal({this.x});
+  Foo._internal({required this.x});
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline.expect
index d5f3567..f0b2948 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class Foo<T> {
   T x;
   Foo.from(String _init) : this._internal(x: _init);
-  Foo._internal({this.x});
+  Foo._internal({required this.x});
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline_modelled.expect
index 423187d..e7ad045 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class Foo<T> {
-  Foo._internal({this.x});
+  Foo._internal({required this.x});
   Foo.from(String _init) : this._internal(x: _init);
   T x;
 }
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
index 6c401a6..34b5cf4 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,26 +9,16 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Foo::T* x;
-  constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Foo::T% x;
+  constructor from(core::String _init) → self::Foo<self::Foo::T%>
     : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
-                                             ^" in _init as{TypeError} Never)
+                                             ^" in _init as{TypeError,ForNonNullableByDefault} Never)
     ;
-  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
+  constructor _internal({required self::Foo::T% x = #C1}) → self::Foo<self::Foo::T%>
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect
index 6c401a6..34b5cf4 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,26 +9,16 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Foo::T* x;
-  constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Foo::T% x;
+  constructor from(core::String _init) → self::Foo<self::Foo::T%>
     : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
-                                             ^" in _init as{TypeError} Never)
+                                             ^" in _init as{TypeError,ForNonNullableByDefault} Never)
     ;
-  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
+  constructor _internal({required self::Foo::T% x = #C1}) → self::Foo<self::Foo::T%>
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
index 1126f00..5e288fa 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Foo::T* x;
-  constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Foo::T% x;
+  constructor from(core::String _init) → self::Foo<self::Foo::T%>
     ;
-  constructor _internal({self::Foo::T* x}) → self::Foo<self::Foo::T*>*
+  constructor _internal({required self::Foo::T% x}) → self::Foo<self::Foo::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
index 6c401a6..34b5cf4 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,26 +9,16 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::Foo::T* x;
-  constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Foo::T% x;
+  constructor from(core::String _init) → self::Foo<self::Foo::T%>
     : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
-                                             ^" in _init as{TypeError} Never)
+                                             ^" in _init as{TypeError,ForNonNullableByDefault} Never)
     ;
-  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
+  constructor _internal({required self::Foo::T% x = #C1}) → self::Foo<self::Foo::T%>
     : self::Foo::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void {}
 
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart
index 7d7ffec..57d54c1 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart
@@ -2,8 +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.md file.
 
-// @dart=2.9
-
 // The test checks that type arguments of the target of redirection factory
 // constructors are preserved throughout the chain of redirections.
 
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline.expect
index 35675e5..772fcd2 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class A<T> {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline_modelled.expect
index b3c31ee..6f267ca 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class A<T> {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
index 273bd861..8414860 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::num*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::num>();
 }
-class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::String>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
+  exp::Expect::equals("${new self::C::•<core::int, core::num, core::String>()}", "int,num,String");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect
index 273bd861..8414860 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::num*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::num>();
 }
-class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::String>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
+  exp::Expect::equals("${new self::C::•<core::int, core::num, core::String>()}", "int,num,String");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
index 4a31e13..f6649ec 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.outline.expect
@@ -1,37 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
-  constructor empty() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::num*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::num>();
 }
-class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::String>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
 }
 static method main() → dynamic
@@ -39,6 +29,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:12:7 -> ConstructorTearOffConstant(A.)
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:17:7 -> ConstructorTearOffConstant(B.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:10:7 -> ConstructorTearOffConstant(A.)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///redirection_chain_type_arguments.dart:15:7 -> ConstructorTearOffConstant(B.)
 Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
index 273bd861..8414860 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.transformed.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::num*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::num>();
 }
-class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::String>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
+  exp::Expect::equals("${new self::C::•<core::int, core::num, core::String>()}", "int,num,String");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart
index 51e5f08..9389f2f 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, 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.md file.
-// @dart=2.9
+
 // The test checks that dependencies of type arguments of targets of redirecting
 // factories on type parameters of the corresponding classes are respected in
 // the resulting type arguments of redirecting factories invocations.
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline.expect
index c51fbab..29e8862 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 abstract class A<T> {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline_modelled.expect
index 1ba84ec..7040eb4 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 abstract class A<T> {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
index 516d00c..78b125f 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::List<self::A::•::T%>>();
 }
-abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+abstract class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::Map<self::B::•::U%, self::B::•::W%>>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
+  exp::Expect::equals("${new self::C::•<core::int, core::List<core::int>, core::Map<core::int, core::List<core::int>>>()}", "int,List<int>,Map<int, List<int>>");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect
index 516d00c..78b125f 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::List<self::A::•::T%>>();
 }
-abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+abstract class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::Map<self::B::•::U%, self::B::•::W%>>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
+  exp::Expect::equals("${new self::C::•<core::int, core::List<core::int>, core::Map<core::int, core::List<core::int>>>()}", "int,List<int>,Map<int, List<int>>");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
index 2736c94..67895ce 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.outline.expect
@@ -1,37 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
-  constructor empty() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::List<self::A::•::T%>>();
 }
-abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[self::B::•];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+abstract class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[self::B::•]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::Map<self::B::•::U%, self::B::•::W%>>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
index 516d00c..78b125f 100644
--- a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.transformed.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
 
 import "package:expect/expect.dart";
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  constructor empty() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor empty() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
-    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+    return self::B::•<self::A::•::T%, core::List<self::A::•::T%>>();
 }
-abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
-  static final field dynamic _redirecting# = <dynamic>[#C2];
-  constructor empty() → self::B<self::B::U*, self::B::W*>*
+abstract class B<U extends core::Object? = dynamic, W extends core::Object? = dynamic> extends self::A<self::B::U%> {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor empty() → self::B<self::B::U%, self::B::W%>
     : super self::A::empty()
     ;
-  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
-    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
+  static factory •<U extends core::Object? = dynamic, W extends core::Object? = dynamic>() → self::B<self::B::•::U%, self::B::•::W%>
+    return new self::C::•<self::B::•::U%, self::B::•::W%, core::Map<self::B::•::U%, self::B::•::W%>>();
 }
-class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
-  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+class C<V extends core::Object? = dynamic, S extends core::Object? = dynamic, R extends core::Object? = dynamic> extends self::B<self::C::V%, self::C::S%> {
+  constructor •() → self::C<self::C::V%, self::C::S%, self::C::R%>
     : super self::B::empty()
     ;
-  method toString() → core::String*
-    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+  method toString() → core::String
+    return "${self::C::V%},${self::C::S%},${self::C::R%}";
 }
 static method main() → dynamic {
-  exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
+  exp::Expect::equals("${new self::C::•<core::int, core::List<core::int>, core::Map<core::int, core::List<core::int>>>()}", "int,List<int>,Map<int, List<int>>");
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart b/pkg/front_end/testcases/general/redirection_type_arguments.dart
index f5e6692..043daa1 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, 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.md file.
-// @dart=2.9
+
 // The test checks that type arguments of the target of redirection factory
 // constructors are preserved.
 
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline.expect
index 14800fb..10ae984 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline_modelled.expect
index 2895a46..561ace4 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class A {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
index be27ced..2819621 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor empty() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A*
-    return new self::B::•<core::String*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •() → self::A
+    return new self::B::•<core::String>();
 }
-class B<T extends core::Object* = dynamic> extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::T%>
     : super self::A::empty()
     ;
-  method toString() → core::String*
-    return "${self::B::T*}";
+  method toString() → core::String
+    return "${self::B::T%}";
 }
 static method main() → void {
   exp::Expect::equals("${#C2}", "String");
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect
index be27ced..2819621 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor empty() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A*
-    return new self::B::•<core::String*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •() → self::A
+    return new self::B::•<core::String>();
 }
-class B<T extends core::Object* = dynamic> extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::T%>
     : super self::A::empty()
     ;
-  method toString() → core::String*
-    return "${self::B::T*}";
+  method toString() → core::String
+    return "${self::B::T%}";
 }
 static method main() → void {
   exp::Expect::equals("${#C2}", "String");
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
index 7640720..55d96b0 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[self::A::•];
-  const constructor empty() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[self::A::•]/*isLegacy*/;
+  const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A*
-    return new self::B::•<core::String*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •() → self::A
+    return new self::B::•<core::String>();
 }
-class B<T extends core::Object* = dynamic> extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::T%>
     : super self::A::empty()
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
index be27ced..2819621 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class A extends core::Object /*hasConstConstructor*/  {
-  static final field dynamic _redirecting# = <dynamic>[#C1];
-  const constructor empty() → self::A*
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A*
-    return new self::B::•<core::String*>();
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static factory •() → self::A
+    return new self::B::•<core::String>();
 }
-class B<T extends core::Object* = dynamic> extends self::A /*hasConstConstructor*/  {
-  const constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::T%>
     : super self::A::empty()
     ;
-  method toString() → core::String*
-    return "${self::B::T*}";
+  method toString() → core::String
+    return "${self::B::T%}";
 }
 static method main() → void {
   exp::Expect::equals("${#C2}", "String");
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart b/pkg/front_end/testcases/general/regression_flutter51828.dart
index 9dabce8..3d161f3 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // This is a regression test for https://github.com/flutter/flutter/issues/51828
 // which failed due bad reuse/typing of temp. vars. in the async transform.
 
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline.expect
index 531b2cb..10f8088 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   Future<void> foo(x) async {}
 }
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline_modelled.expect
index 531b2cb..10f8088 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   Future<void> foo(x) async {}
 }
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
index 7cc953e..314e556 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(dynamic x) → asy::Future<void>* async {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method bar(dynamic x) → asy::Future<void>* async {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method bar(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
-static method main() → dynamic async 
-  return <asy::Future<void>*>[new self::A::•().{self::A::foo}(await null){(dynamic) →* asy::Future<void>*}, new self::B::•().{self::B::bar}(await null){(dynamic) →* asy::Future<void>*}];
+static method main() → dynamic async /* futureValueType= dynamic */ 
+  return <asy::Future<void>>[new self::A::•().{self::A::foo}(await null){(dynamic) → asy::Future<void>}, new self::B::•().{self::B::bar}(await null){(dynamic) → asy::Future<void>}];
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect
index 7cc953e..314e556 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(dynamic x) → asy::Future<void>* async {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method bar(dynamic x) → asy::Future<void>* async {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method bar(dynamic x) → asy::Future<void> async /* futureValueType= void */ {}
 }
-static method main() → dynamic async 
-  return <asy::Future<void>*>[new self::A::•().{self::A::foo}(await null){(dynamic) →* asy::Future<void>*}, new self::B::•().{self::B::bar}(await null){(dynamic) →* asy::Future<void>*}];
+static method main() → dynamic async /* futureValueType= dynamic */ 
+  return <asy::Future<void>>[new self::A::•().{self::A::foo}(await null){(dynamic) → asy::Future<void>}, new self::B::•().{self::B::bar}(await null){(dynamic) → asy::Future<void>}];
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.outline.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.outline.expect
index 22ce718..fa8b321 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method foo(dynamic x) → asy::Future<void>* async 
+  method foo(dynamic x) → asy::Future<void> async 
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method bar(dynamic x) → asy::Future<void>* async 
+  method bar(dynamic x) → asy::Future<void> async 
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic async 
   ;
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
index a6a1585..1fe23ba 100644
--- a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.transformed.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 import "dart:_internal" as _in;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method foo(dynamic x) → asy::Future<void>* /* originally async */ {
-    final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
+  method foo(dynamic x) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
+    final asy::_Future<void> :async_future = new asy::_Future::•<void>();
     core::bool* :is_sync = false;
     void :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
+    (dynamic) → dynamic :async_op_then;
+    (core::Object, core::StackTrace) → dynamic :async_op_error;
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
@@ -23,37 +23,27 @@
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method bar(dynamic x) → asy::Future<void>* /* originally async */ {
-    final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
+  method bar(dynamic x) → asy::Future<void> /* futureValueType= void */ /* originally async */ {
+    final asy::_Future<void> :async_future = new asy::_Future::•<void>();
     core::bool* :is_sync = false;
     void :return_value;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
+    (dynamic) → dynamic :async_op_then;
+    (core::Object, core::StackTrace) → dynamic :async_op_error;
+    core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
@@ -62,36 +52,26 @@
         asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(null, null){() →* dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  self::B* :async_temporary_0;
+  self::B :async_temporary_0;
   dynamic :async_temporary_1;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -99,21 +79,21 @@
       {
         :async_temporary_1 = new self::A::•();
         [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) →* asy::Future<void>*};
+        :async_temporary_1 = _in::unsafeCast<self::A>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) → asy::Future<void>};
         :async_temporary_0 = new self::B::•();
         [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
-        :return_value = core::_GrowableList::_literal2<asy::Future<void>*>(_in::unsafeCast<asy::Future<void>*>(:async_temporary_1), _in::unsafeCast<self::B*>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) →* asy::Future<void>*});
+        :return_value = core::_GrowableList::_literal2<asy::Future<void>>(_in::unsafeCast<asy::Future<void>>(:async_temporary_1), _in::unsafeCast<self::B>(:async_temporary_0).{self::B::bar}(_in::unsafeCast<Null>(:result_or_exception)){(dynamic) → asy::Future<void>});
         break #L3;
       }
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart
index 91c2303..754c94e 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
+// @dart=2.13
+
 // This test checks that generic function types are rejected with an appropriate
 // compile-time error message if encountered in bounds of type variables.
 
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline.expect
index cded83b..8c0eea5 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.13
 class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline_modelled.expect
index cded83b..8c0eea5 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.textual_outline_modelled.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.13
 class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.expect
index dcd7a33..ec2f6c1 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:10:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends <TypeY extends core::Object* = dynamic>(TypeY*) →* TypeY* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>(TypeY%) → TypeY% = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect
index dcd7a33..ec2f6c1 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:10:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends <TypeY extends core::Object* = dynamic>(TypeY*) →* TypeY* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>(TypeY%) → TypeY% = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.outline.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.outline.expect
index 7cd79c3..ea03424 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:10:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends <TypeY extends core::Object* = dynamic>(TypeY*) →* TypeY* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>(TypeY%) → TypeY% = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.transformed.expect
index dcd7a33..ec2f6c1 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.transformed.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:10:12: Error: Type variables can't have generic function types in their bounds.
 // class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
 //            ^^^^^
 //
 import self as self;
 import "dart:core" as core;
 
-class Hest<TypeX extends <TypeY extends core::Object* = dynamic>(TypeY*) →* TypeY* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+class Hest<TypeX extends <TypeY extends core::Object? = dynamic>(TypeY%) → TypeY% = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart b/pkg/front_end/testcases/general/return_async_promoted.dart
new file mode 100644
index 0000000..c6560d3
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.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.
+
+import 'return_async_promoted_lib.dart';
+
+void main() {
+  var f = <T>(o) async => o is int ? o : throw '';
+  var g = () async => legacy();
+}
+
+int? nullable() => null;
+int? nonNullable() => 0;
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline.expect
new file mode 100644
index 0000000..b960f98
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+import 'return_async_promoted_lib.dart';
+
+void main() {}
+int? nullable() => null;
+int? nonNullable() => 0;
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..311eaa7
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+import 'return_async_promoted_lib.dart';
+
+int? nonNullable() => 0;
+int? nullable() => null;
+void main() {}
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.expect
new file mode 100644
index 0000000..1ed7164
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted_lib.dart" as ret;
+
+import "org-dartlang-testcase:///return_async_promoted_lib.dart";
+
+static method main() → void {
+  <T extends core::Object? = dynamic>(dynamic) → asy::Future<core::int> f = <T extends core::Object? = dynamic>(dynamic o) → asy::Future<core::int> async /* futureValueType= core::int */ => o is{ForNonNullableByDefault} core::int ?{core::int} o{core::int} : throw "";
+  () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int* */ => ret::legacy();
+}
+static method nullable() → core::int?
+  return null;
+static method nonNullable() → core::int?
+  return 0;
+
+library;
+import self as ret;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted.dart" as self;
+
+import "org-dartlang-testcase:///return_async_promoted.dart";
+
+static method legacy() → core::int* {
+  <T extends core::Object* = dynamic>(dynamic) →* asy::Future<core::int*>* f = <T extends core::Object* = dynamic>(dynamic o) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => o is core::int* ?{core::int*} o{core::int*} : throw "";
+  () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nullable();
+  () →* asy::Future<core::int*>* h = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nonNullable();
+  return null;
+}
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.modular.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.modular.expect
new file mode 100644
index 0000000..1ed7164
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted_lib.dart" as ret;
+
+import "org-dartlang-testcase:///return_async_promoted_lib.dart";
+
+static method main() → void {
+  <T extends core::Object? = dynamic>(dynamic) → asy::Future<core::int> f = <T extends core::Object? = dynamic>(dynamic o) → asy::Future<core::int> async /* futureValueType= core::int */ => o is{ForNonNullableByDefault} core::int ?{core::int} o{core::int} : throw "";
+  () → asy::Future<core::int> g = () → asy::Future<core::int> async /* futureValueType= core::int* */ => ret::legacy();
+}
+static method nullable() → core::int?
+  return null;
+static method nonNullable() → core::int?
+  return 0;
+
+library;
+import self as ret;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted.dart" as self;
+
+import "org-dartlang-testcase:///return_async_promoted.dart";
+
+static method legacy() → core::int* {
+  <T extends core::Object* = dynamic>(dynamic) →* asy::Future<core::int*>* f = <T extends core::Object* = dynamic>(dynamic o) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => o is core::int* ?{core::int*} o{core::int*} : throw "";
+  () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nullable();
+  () →* asy::Future<core::int*>* h = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::nonNullable();
+  return null;
+}
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.outline.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.outline.expect
new file mode 100644
index 0000000..d14947e
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///return_async_promoted_lib.dart";
+
+static method main() → void
+  ;
+static method nullable() → core::int?
+  ;
+static method nonNullable() → core::int?
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///return_async_promoted.dart";
+
+static method legacy() → core::int*
+  ;
diff --git a/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect
new file mode 100644
index 0000000..9e92a56
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted.dart.weak.transformed.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted_lib.dart" as ret;
+
+import "org-dartlang-testcase:///return_async_promoted_lib.dart";
+
+static method main() → void {
+  <T extends core::Object? = dynamic>(dynamic) → asy::Future<core::int> f = <T extends core::Object? = dynamic>(dynamic o) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
+    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
+    core::bool* :is_sync = false;
+    core::int? :return_value;
+    (dynamic) → dynamic :async_op_then;
+    (core::Object, core::StackTrace) → dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L1:
+        {
+          :return_value = o is{ForNonNullableByDefault} core::int ?{core::int} o{core::int} : throw "";
+          break #L1;
+        }
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+      }
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_op(null, null){() → dynamic};
+    :is_sync = true;
+    return :async_future;
+  };
+  () → asy::Future<core::int> g = () → asy::Future<core::int> /* futureValueType= core::int* */ /* originally async */ {
+    final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
+    core::bool* :is_sync = false;
+    core::int? :return_value;
+    (dynamic) → dynamic :async_op_then;
+    (core::Object, core::StackTrace) → dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L2:
+        {
+          :return_value = ret::legacy();
+          break #L2;
+        }
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+      }
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_op(null, null){() → dynamic};
+    :is_sync = true;
+    return :async_future;
+  };
+}
+static method nullable() → core::int?
+  return null;
+static method nonNullable() → core::int?
+  return 0;
+
+library;
+import self as ret;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "return_async_promoted.dart" as self;
+
+import "org-dartlang-testcase:///return_async_promoted.dart";
+
+static method legacy() → core::int* {
+  <T extends core::Object* = dynamic>(dynamic) →* asy::Future<core::int*>* f = <T extends core::Object* = dynamic>(dynamic o) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
+    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
+    core::bool* :is_sync = false;
+    core::int? :return_value;
+    (dynamic) →* dynamic :async_op_then;
+    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
+    core::int* :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L3:
+        {
+          :return_value = o is core::int* ?{core::int*} o{core::int*} : throw "";
+          break #L3;
+        }
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+      }
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_op(null, null){() →* dynamic};
+    :is_sync = true;
+    return :async_future;
+  };
+  () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
+    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
+    core::bool* :is_sync = false;
+    core::int? :return_value;
+    (dynamic) →* dynamic :async_op_then;
+    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
+    core::int* :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L4:
+        {
+          :return_value = self::nullable();
+          break #L4;
+        }
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+      }
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_op(null, null){() →* dynamic};
+    :is_sync = true;
+    return :async_future;
+  };
+  () →* asy::Future<core::int*>* h = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
+    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
+    core::bool* :is_sync = false;
+    core::int? :return_value;
+    (dynamic) →* dynamic :async_op_then;
+    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
+    core::int* :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L5:
+        {
+          :return_value = self::nonNullable();
+          break #L5;
+        }
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+        asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+      }
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_op(null, null){() →* dynamic};
+    :is_sync = true;
+    return :async_future;
+  };
+  return null;
+}
diff --git a/pkg/front_end/testcases/general/return_async_promoted_lib.dart b/pkg/front_end/testcases/general/return_async_promoted_lib.dart
new file mode 100644
index 0000000..e04de19
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_async_promoted_lib.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// @dart=2.9
+
+import 'return_async_promoted.dart';
+
+int legacy() {
+  var f = <T>(o) async => o is int ? o : throw '';
+  var g = () async => nullable();
+  var h = () async => nonNullable();
+  return null;
+}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart
index ad85c13..f30bd53 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 bool f(List x) {
   return x.expand((y) {
     // Since y has type dynamic, y.split(',') has type dynamic, so an implicit
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline.expect
index d583be0..fcee7cc 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bool f(List x) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline_modelled.expect
index d583be0..fcee7cc 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 bool f(List x) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
index 7704535..d5c71eb 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f(core::List<dynamic>* x) → core::bool* {
-  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
+static method f(core::List<dynamic> x) → core::bool {
+  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic> {
+    return y{dynamic}.split(",") as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>;
+  }){((dynamic) → core::Iterable<dynamic>) → core::Iterable<dynamic>}.{core::Iterable::any}((dynamic y) → core::bool => y =={core::Object::==}{(core::Object) → core::bool} "z"){((dynamic) → core::bool) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect
index 7704535..d5c71eb 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f(core::List<dynamic>* x) → core::bool* {
-  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
+static method f(core::List<dynamic> x) → core::bool {
+  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic> {
+    return y{dynamic}.split(",") as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>;
+  }){((dynamic) → core::Iterable<dynamic>) → core::Iterable<dynamic>}.{core::Iterable::any}((dynamic y) → core::bool => y =={core::Object::==}{(core::Object) → core::bool} "z"){((dynamic) → core::bool) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.outline.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.outline.expect
index bd4829a..03fb14c 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f(core::List<dynamic>* x) → core::bool*
+static method f(core::List<dynamic> x) → core::bool
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
index 7704535..d5c71eb 100644
--- a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.transformed.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f(core::List<dynamic>* x) → core::bool* {
-  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
-    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
-  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
+static method f(core::List<dynamic> x) → core::bool {
+  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic> {
+    return y{dynamic}.split(",") as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>;
+  }){((dynamic) → core::Iterable<dynamic>) → core::Iterable<dynamic>}.{core::Iterable::any}((dynamic y) → core::bool => y =={core::Object::==}{(core::Object) → core::bool} "z"){((dynamic) → core::bool) → core::bool};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart b/pkg/front_end/testcases/general/sdk_diagnostic.dart
index d341fc5..f8f4723 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class C extends Iterable<Object> {
   // Missing implementation of [iterator] leads to diagnostic which refers to
   // the SDK. This test is intended to test that such references are displayed
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline.expect
index a63a4d4..1a2b8fa 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C extends Iterable<Object> {}
 
 test() {}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline_modelled.expect
index 0bd2569..23c1a60 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C extends Iterable<Object> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
index 7131789..20c715f 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,47 +26,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C extends core::Iterable<core::Object*> {
-  synthetic constructor •() → self::C*
+class C extends core::Iterable<core::Object> {
+  synthetic constructor •() → self::C
     : super core::Iterable::•()
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::Object*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::Object*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
@@ -74,9 +37,3 @@
        ^";
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect
index 7131789..20c715f 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,47 +26,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C extends core::Iterable<core::Object*> {
-  synthetic constructor •() → self::C*
+class C extends core::Iterable<core::Object> {
+  synthetic constructor •() → self::C
     : super core::Iterable::•()
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::Object*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::Object*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
@@ -74,9 +37,3 @@
        ^";
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
index 3c5b61f..b08de4b 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,46 +19,9 @@
 import self as self;
 import "dart:core" as core;
 
-class C extends core::Iterable<core::Object*> {
-  synthetic constructor •() → self::C*
+class C extends core::Iterable<core::Object> {
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable}) → core::List<core::Object*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::Object*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
index 7131789..20c715f 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,47 +26,10 @@
 import self as self;
 import "dart:core" as core;
 
-class C extends core::Iterable<core::Object*> {
-  synthetic constructor •() → self::C*
+class C extends core::Iterable<core::Object> {
+  synthetic constructor •() → self::C
     : super core::Iterable::•()
     ;
-  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
-  abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
-  abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
-  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
-  abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
-  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
-  abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
-  abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
-  abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
-  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
-  abstract member-signature method any((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::any
-  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::Object*>*; -> core::Iterable::toList
-  abstract member-signature method toSet() → core::Set<core::Object*>*; -> core::Iterable::toSet
-  abstract member-signature get length() → core::int*; -> core::Iterable::length
-  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
-  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
-  abstract member-signature method take(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::take
-  abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
-  abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
-  abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
-  abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
-  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
@@ -74,9 +37,3 @@
        ^";
 }
 static method main() → dynamic {}
-
-constants  {
-  #C1 = ""
-  #C2 = true
-  #C3 = null
-}
diff --git a/pkg/front_end/testcases/general/spread_collection.dart b/pkg/front_end/testcases/general/spread_collection.dart
index 5cdf7b0..569f62b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart
+++ b/pkg/front_end/testcases/general/spread_collection.dart
@@ -1,22 +1,25 @@
 // 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.
-// @dart=2.9
+
+List<int>? nullableList = [3];
+Map<int, int>? nullableMap = {3: 3};
+
 main() {
   final aList = <int>[
     1,
     ...[2],
-    ...?[3]
+    ...?nullableList
   ];
   final aMap = <int, int>{
     1: 1,
     ...{2: 2},
-    ...?{3: 3}
+    ...?nullableMap
   };
   final aSet = <int>{
     1,
     ...[2],
-    ...?[3]
+    ...?nullableList
   };
   final aSetOrMap = {...foo()};
 
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.textual_outline.expect b/pkg/front_end/testcases/general/spread_collection.dart.textual_outline.expect
index 4da36bc..058a0e1 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.textual_outline.expect
@@ -1,3 +1,4 @@
-// @dart = 2.9
+List<int>? nullableList = [3];
+Map<int, int>? nullableMap = {3: 3};
 main() {}
 foo() => null;
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/spread_collection.dart.textual_outline_modelled.expect
index 0dadf4a..90935b5 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
-// @dart = 2.9
+List<int>? nullableList = [3];
+Map<int, int>? nullableMap = {3: 3};
 foo() => null;
 main() {}
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
index 6948e05..958f9f7 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   final aSetOrMap = {...foo()};
 //                     ^
@@ -11,33 +11,35 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
+static field core::List<core::int>? nullableList = <core::int>[3];
+static field core::Map<core::int, core::int>? nullableMap = <core::int, core::int>{3: 3};
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = <core::int*>[1];
-    #t1.{core::List::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t2 = <core::int*>[3];
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = <core::int>[1];
+    #t1.{core::List::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t2 = self::nullableList;
     if(!(#t2 == null))
-      #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::int*>*) →* void};
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t1;
-  final core::Map<core::int*, core::int*>* aMap = block {
-    final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int*, core::int*) →* void};
-    for (final core::MapEntry<core::int*, core::int*>* #t4 in <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-    final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
+  final core::Map<core::int, core::int> aMap = block {
+    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
+    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    for (final core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t5 = self::nullableMap;
     if(!(#t5 == null))
-      for (final core::MapEntry<core::int*, core::int*>* #t6 in #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+      for (final core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t3;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    #t7.{core::Set::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t8 = <core::int*>[3];
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
+    #t7.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t8 = self::nullableList;
     if(!(#t8 == null))
-      #t7.{core::Set::addAll}{Invariant}(#t8){(core::Iterable<core::int*>*) →* void};
+      #t7.{core::Set::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t7;
-  final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+  final Never aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   final aSetOrMap = {...foo()};
                     ^";
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
index 6948e05..958f9f7 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   final aSetOrMap = {...foo()};
 //                     ^
@@ -11,33 +11,35 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
+static field core::List<core::int>? nullableList = <core::int>[3];
+static field core::Map<core::int, core::int>? nullableMap = <core::int, core::int>{3: 3};
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = <core::int*>[1];
-    #t1.{core::List::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t2 = <core::int*>[3];
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = <core::int>[1];
+    #t1.{core::List::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t2 = self::nullableList;
     if(!(#t2 == null))
-      #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::int*>*) →* void};
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t1;
-  final core::Map<core::int*, core::int*>* aMap = block {
-    final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int*, core::int*) →* void};
-    for (final core::MapEntry<core::int*, core::int*>* #t4 in <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-    final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
+  final core::Map<core::int, core::int> aMap = block {
+    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
+    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    for (final core::MapEntry<core::int, core::int> #t4 in <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t5 = self::nullableMap;
     if(!(#t5 == null))
-      for (final core::MapEntry<core::int*, core::int*>* #t6 in #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
-        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+      for (final core::MapEntry<core::int, core::int> #t6 in #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
   } =>#t3;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    #t7.{core::Set::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t8 = <core::int*>[3];
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
+    #t7.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(<core::int>[2]){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t8 = self::nullableList;
     if(!(#t8 == null))
-      #t7.{core::Set::addAll}{Invariant}(#t8){(core::Iterable<core::int*>*) →* void};
+      #t7.{core::Set::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t7;
-  final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+  final Never aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   final aSetOrMap = {...foo()};
                     ^";
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.outline.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.outline.expect
index 4c2eb20..46e25f5 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.outline.expect
@@ -1,6 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
+static field core::List<core::int>? nullableList;
+static field core::Map<core::int, core::int>? nullableMap;
 static method main() → dynamic
   ;
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
index 29f6481..e9f240b 100644
--- a/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   final aSetOrMap = {...foo()};
 //                     ^
@@ -11,42 +11,44 @@
 import "dart:core" as core;
 import "dart:collection" as col;
 
+static field core::List<core::int>? nullableList = core::_GrowableList::_literal1<core::int>(3);
+static field core::Map<core::int, core::int>? nullableMap = <core::int, core::int>{3: 3};
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1);
-    #t1.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(2)){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t2 = core::_GrowableList::_literal1<core::int*>(3);
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = core::_GrowableList::_literal1<core::int>(1);
+    #t1.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(2)){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t2 = self::nullableList;
     if(!(#t2 == null))
-      #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::int*>*) →* void};
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t1;
-  final core::Map<core::int*, core::int*>* aMap = block {
-    final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
-    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int*, core::int*) →* void};
+  final core::Map<core::int, core::int> aMap = block {
+    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
+    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
     {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = <core::int, core::int>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::int*, core::int*>* #t4 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
-        #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+        final core::MapEntry<core::int, core::int> #t4 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
+        #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int}, #t4.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
-    final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
+    final core::Map<core::int, core::int>? #t5 = self::nullableMap;
     if(!(#t5 == null)) {
-      core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int*, core::int*>>*};
+      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t5{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::int, core::int>>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::MapEntry<core::int*, core::int*>* #t6 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int*, core::int*>};
-        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+        final core::MapEntry<core::int, core::int> #t6 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int>};
+        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int}, #t6.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
       }
     }
   } =>#t3;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t7 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t7.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    #t7.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(2)){(core::Iterable<core::int*>*) →* void};
-    final core::Iterable<core::int*>* #t8 = core::_GrowableList::_literal1<core::int*>(3);
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t7 = new col::_CompactLinkedHashSet::•<core::int>();
+    #t7.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t7.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(2)){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t8 = self::nullableList;
     if(!(#t8 == null))
-      #t7.{core::Set::addAll}{Invariant}(#t8){(core::Iterable<core::int*>*) →* void};
+      #t7.{core::Set::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
   } =>#t7;
-  final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+  final Never aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:24:21: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   final aSetOrMap = {...foo()};
                     ^";
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart b/pkg/front_end/testcases/general/spread_collection_inference.dart
index bb1790d..6829547 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // This test case checks that inference works for spread collections, and that
 // the errors are reported when necessary.
 
@@ -18,94 +20,94 @@
   Map<int, num> mapIntNum = <int, num>{42: 42};
   List<num> listNum = <num>[42];
 
-  var /*@ type=List<dynamic>* */ lhs10 = /*@ typeArgs=dynamic */ [
+  var /*@type=List<dynamic>**/ lhs10 = /*@ typeArgs=dynamic */ [
     ...
     /*@ typeArgs=dynamic */ []
   ];
 
-  var /*@ type=Set<dynamic>* */ set10 = <dynamic>{
+  var /*@type=Set<dynamic>**/ set10 = <dynamic>{
     ... /*@ typeArgs=dynamic */ []
   };
 
-  var /*@ type=Map<dynamic, dynamic>* */ map10 = <dynamic, dynamic>{
+  var /*@type=Map<dynamic, dynamic>**/ map10 = <dynamic, dynamic>{
     ...
     /*@ typeArgs=dynamic, dynamic */ {}
   };
 
-  var /*@ type=Map<dynamic, dynamic>* */ map10ambiguous =
+  var /*@type=Map<dynamic, dynamic>**/ map10ambiguous =
       /*@ typeArgs=dynamic, dynamic */ {
     ... /*@ typeArgs=dynamic, dynamic */ {}
   };
 
-  var /*@ type=List<int*>* */ lhs20 = /*@ typeArgs=int* */ [...spread];
+  var /*@type=List<int*>**/ lhs20 = /*@typeArgs=int**/ [...spread];
 
-  var /*@ type=Set<int*>* */ set20 = /*@ typeArgs=int* */ {...spread, 42};
+  var /*@type=Set<int*>**/ set20 = /*@typeArgs=int**/ {...spread, 42};
 
-  var /*@ type=Set<int*>* */ set20ambiguous = /*@ typeArgs=int* */ {...spread};
+  var /*@type=Set<int*>**/ set20ambiguous = /*@typeArgs=int**/ {...spread};
 
-  var /*@ type=Map<String*, int*>* */ map20 = /*@ typeArgs=String*, int* */
+  var /*@type=Map<String*, int*>**/ map20 = /*@typeArgs=String*, int**/
       {...mapSpread, "baz": 42};
 
-  var /*@ type=Map<String*, int*>* */ map20ambiguous = /*@ typeArgs=String*, int* */
+  var /*@type=Map<String*, int*>**/ map20ambiguous = /*@typeArgs=String*, int**/
       {...mapSpread};
 
-  var /*@ type=List<dynamic>* */ lhs21 = /*@ typeArgs=dynamic */ [
+  var /*@type=List<dynamic>**/ lhs21 = /*@ typeArgs=dynamic */ [
     ...(spread as dynamic)
   ];
 
-  var /*@ type=Set<dynamic>* */ set21 = /*@ typeArgs=dynamic */ {
+  var /*@type=Set<dynamic>**/ set21 = /*@ typeArgs=dynamic */ {
     ...(spread as dynamic),
     42
   };
 
-  var /*@ type=Map<dynamic, dynamic>* */ map21 = /*@ typeArgs=dynamic, dynamic */
+  var /*@type=Map<dynamic, dynamic>**/ map21 = /*@ typeArgs=dynamic, dynamic */
       {...(mapSpread as dynamic), "baz": 42};
 
   dynamic map21ambiguous = {...(mapSpread as dynamic)};
 
-  List<int> lhs22 = /*@ typeArgs=int* */ [... /*@ typeArgs=int* */ []];
+  List<int> lhs22 = /*@typeArgs=int**/ [... /*@typeArgs=int**/ []];
 
-  Set<int> set22 = /*@ typeArgs=int* */ {... /*@ typeArgs=int* */ [], 42};
+  Set<int> set22 = /*@typeArgs=int**/ {... /*@typeArgs=int**/ [], 42};
 
-  Set<int> set22ambiguous = /*@ typeArgs=int* */ {... /*@ typeArgs=int* */ []};
+  Set<int> set22ambiguous = /*@typeArgs=int**/ {... /*@typeArgs=int**/ []};
 
-  Map<String, int> map22 = /*@ typeArgs=String*, int* */
-      {... /*@ typeArgs=String*, int* */ {}};
+  Map<String, int> map22 = /*@typeArgs=String*, int**/
+      {... /*@typeArgs=String*, int**/ {}};
 
-  List<List<int>> lhs23 = /*@ typeArgs=List<int*>* */ [
-    ... /*@ typeArgs=List<int*>* */
-    [/*@ typeArgs=int* */ []]
+  List<List<int>> lhs23 = /*@typeArgs=List<int*>**/ [
+    ... /*@typeArgs=List<int*>**/
+    [/*@typeArgs=int**/ []]
   ];
 
-  Set<List<int>> set23 = /*@ typeArgs=List<int*>* */ {
-    ... /*@ typeArgs=List<int*>* */
-    [/*@ typeArgs=int* */ []],
+  Set<List<int>> set23 = /*@typeArgs=List<int*>**/ {
+    ... /*@typeArgs=List<int*>**/
+    [/*@typeArgs=int**/ []],
     <int>[42]
   };
 
-  Set<List<int>> set23ambiguous = /*@ typeArgs=List<int*>* */
+  Set<List<int>> set23ambiguous = /*@typeArgs=List<int*>**/
       {
-    ... /*@ typeArgs=List<int*>* */ [/*@ typeArgs=int* */ []]
+    ... /*@typeArgs=List<int*>**/ [/*@typeArgs=int**/ []]
   };
 
-  Map<String, List<int>> map23 = /*@ typeArgs=String*, List<int*>* */
+  Map<String, List<int>> map23 = /*@typeArgs=String*, List<int*>**/
       {
-    ... /*@ typeArgs=String*, List<int*>* */ {"baz": /*@ typeArgs=int* */ [] }
+    ... /*@typeArgs=String*, List<int*>**/ {"baz": /*@typeArgs=int**/ [] }
   };
 
   dynamic map24ambiguous = {...spread, ...mapSpread};
 
-  int lhs30 = /*@ typeArgs=int* */ [...spread];
+  int lhs30 = /*@typeArgs=int**/ [...spread];
 
-  int set30 = /*@ typeArgs=int* */ {...spread, 42};
+  int set30 = /*@typeArgs=int**/ {...spread, 42};
 
-  int set30ambiguous = /*@ typeArgs=int* */
+  int set30ambiguous = /*@typeArgs=int**/
       {...spread};
 
-  int map30 = /*@ typeArgs=String*, int* */
+  int map30 = /*@typeArgs=String*, int**/
       {...mapSpread, "baz": 42};
 
-  int map30ambiguous = /*@ typeArgs=String*, int* */
+  int map30ambiguous = /*@typeArgs=String*, int**/
       {...mapSpread};
 
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
@@ -132,7 +134,7 @@
 
   Set<int> set70 = <int>{...null};
 
-  var /*@ type=Set<dynamic>* */ set71ambiguous = /*@ typeArgs=dynamic */
+  var /*@type=Set<dynamic>**/ set71ambiguous = /*@ typeArgs=dynamic */
       {
     ...null,
     ... /*@ typeArgs=dynamic */
@@ -145,13 +147,13 @@
 
   Set<int> set80 = <int>{...?null};
 
-  var /*@ type=Set<dynamic>* */ set81ambiguous = /*@ typeArgs=dynamic */
+  var /*@type=Set<dynamic>**/ set81ambiguous = /*@ typeArgs=dynamic */
       {...?null, ... /*@ typeArgs=dynamic */ []};
 
   Map<String, int> map80 = <String, int>{...?null};
 
-  var /*@ type=Map<String*, int*>* */ map90 = <String, int>{
-    ... /*@ typeArgs=String*, int* */ bar()
+  var /*@type=Map<String*, int*>**/ map90 = <String, int>{
+    ... /*@typeArgs=String*, int**/ bar()
   };
 
   List<int> list100 = <int>[...listNum];
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
index 470fbda..57142b1 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.expect
@@ -2,93 +2,93 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   dynamic map21ambiguous = {...(mapSpread as dynamic)};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   dynamic map24ambiguous = {...spread, ...mapSpread};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 //  - 'List' is from 'dart:core'.
-//   int lhs30 = /*@ typeArgs=int* */ [...spread];
-//                                    ^
+//   int lhs30 = /*@typeArgs=int**/ [...spread];
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
-//   int set30 = /*@ typeArgs=int* */ {...spread, 42};
-//                                    ^
+//   int set30 = /*@typeArgs=int**/ {...spread, 42};
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
 //       {...spread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread, "baz": 42};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   List<String> lhs60 = <String>[...spread];
 //                                    ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   Set<String> set60 = <String>{...spread};
 //                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
 //   Map<int, int> map60 = <int, int>{...mapSpread};
 //                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
 //   Map<String, String> map61 = <String, String>{...mapSpread};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
 //   List<int> lhs70 = <int>[...null];
 //                              ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
 //   Set<int> set70 = <int>{...null};
 //                             ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
 //     ...null,
 //        ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
 //   Map<String, int> map70 = <String, int>{...null};
 //                                             ^
 //
@@ -159,7 +159,7 @@
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
-  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   dynamic map21ambiguous = {...(mapSpread as dynamic)};
                            ^";
@@ -201,23 +201,23 @@
     for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
-  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
                            ^";
-  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
-  int lhs30 = /*@ typeArgs=int* */ [...spread];
-                                   ^" in ( block {
+  int lhs30 = /*@typeArgs=int**/ [...spread];
+                                 ^" in ( block {
     final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
   } =>#t34) as{TypeError} core::int*;
-  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
-  int set30 = /*@ typeArgs=int* */ {...spread, 42};
-                                   ^" in ( block {
+  int set30 = /*@typeArgs=int**/ {...spread, 42};
+                                 ^" in ( block {
     final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
     #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t35) as{TypeError} core::int*;
-  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
       {...spread};
       ^" in ( block {
@@ -227,7 +227,7 @@
       #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
     }
   } =>#t36) as{TypeError} core::int*;
-  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
@@ -236,7 +236,7 @@
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t39) as{TypeError} core::int*;
-  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
@@ -244,57 +244,57 @@
     for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t41) as{TypeError} core::int*;
-  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^"];
   core::Set<dynamic>* set40 = block {
     final core::Set<dynamic>* #t43 = col::LinkedHashSet::•<dynamic>();
-    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t43;
-  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                       ^": null};
-  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                      ^"];
   core::Set<dynamic>* set50 = block {
     final core::Set<dynamic>* #t44 = col::LinkedHashSet::•<dynamic>();
-    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t44;
-  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                       ^": null};
-  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   List<String> lhs60 = <String>[...spread];
                                    ^"];
   core::Set<core::String*>* set60 = block {
     final core::Set<core::String*>* #t45 = col::LinkedHashSet::•<core::String*>();
-    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
                                   ^"){(core::String*) →* core::bool*};
   } =>#t45;
-  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
                                       ^": null};
-  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
   Map<String, String> map61 = <String, String>{...mapSpread};
                                                   ^"};
-  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
   List<int> lhs70 = <int>[...null];
                              ^"];
   core::Set<core::int*>* set70 = block {
     final core::Set<core::int*>* #t46 = col::LinkedHashSet::•<core::int*>();
-    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
                             ^"){(core::int*) →* core::bool*};
   } =>#t46;
   core::Set<dynamic>* set71ambiguous = block {
     final core::Set<dynamic>* #t47 = col::LinkedHashSet::•<dynamic>();
-    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
     for (final dynamic #t48 in <dynamic>[]) {
@@ -302,7 +302,7 @@
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
     }
   } =>#t47;
-  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
   Map<String, int> map70 = <String, int>{...null};
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
index 470fbda..57142b1 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
@@ -2,93 +2,93 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   dynamic map21ambiguous = {...(mapSpread as dynamic)};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   dynamic map24ambiguous = {...spread, ...mapSpread};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 //  - 'List' is from 'dart:core'.
-//   int lhs30 = /*@ typeArgs=int* */ [...spread];
-//                                    ^
+//   int lhs30 = /*@typeArgs=int**/ [...spread];
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
-//   int set30 = /*@ typeArgs=int* */ {...spread, 42};
-//                                    ^
+//   int set30 = /*@typeArgs=int**/ {...spread, 42};
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
 //       {...spread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread, "baz": 42};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   List<String> lhs60 = <String>[...spread];
 //                                    ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   Set<String> set60 = <String>{...spread};
 //                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
 //   Map<int, int> map60 = <int, int>{...mapSpread};
 //                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
 //   Map<String, String> map61 = <String, String>{...mapSpread};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
 //   List<int> lhs70 = <int>[...null];
 //                              ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
 //   Set<int> set70 = <int>{...null};
 //                             ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
 //     ...null,
 //        ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
 //   Map<String, int> map70 = <String, int>{...null};
 //                                             ^
 //
@@ -159,7 +159,7 @@
       #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
-  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   dynamic map21ambiguous = {...(mapSpread as dynamic)};
                            ^";
@@ -201,23 +201,23 @@
     for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
       #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
   } =>#t32;
-  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
                            ^";
-  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
-  int lhs30 = /*@ typeArgs=int* */ [...spread];
-                                   ^" in ( block {
+  int lhs30 = /*@typeArgs=int**/ [...spread];
+                                 ^" in ( block {
     final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
   } =>#t34) as{TypeError} core::int*;
-  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
-  int set30 = /*@ typeArgs=int* */ {...spread, 42};
-                                   ^" in ( block {
+  int set30 = /*@typeArgs=int**/ {...spread, 42};
+                                 ^" in ( block {
     final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
     #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t35) as{TypeError} core::int*;
-  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
       {...spread};
       ^" in ( block {
@@ -227,7 +227,7 @@
       #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
     }
   } =>#t36) as{TypeError} core::int*;
-  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
@@ -236,7 +236,7 @@
       #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t39) as{TypeError} core::int*;
-  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
@@ -244,57 +244,57 @@
     for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
       #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
   } =>#t41) as{TypeError} core::int*;
-  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^"];
   core::Set<dynamic>* set40 = block {
     final core::Set<dynamic>* #t43 = col::LinkedHashSet::•<dynamic>();
-    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t43;
-  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                       ^": null};
-  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                      ^"];
   core::Set<dynamic>* set50 = block {
     final core::Set<dynamic>* #t44 = col::LinkedHashSet::•<dynamic>();
-    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t44;
-  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                       ^": null};
-  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   List<String> lhs60 = <String>[...spread];
                                    ^"];
   core::Set<core::String*>* set60 = block {
     final core::Set<core::String*>* #t45 = col::LinkedHashSet::•<core::String*>();
-    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
                                   ^"){(core::String*) →* core::bool*};
   } =>#t45;
-  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
                                       ^": null};
-  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
   Map<String, String> map61 = <String, String>{...mapSpread};
                                                   ^"};
-  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
   List<int> lhs70 = <int>[...null];
                              ^"];
   core::Set<core::int*>* set70 = block {
     final core::Set<core::int*>* #t46 = col::LinkedHashSet::•<core::int*>();
-    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
                             ^"){(core::int*) →* core::bool*};
   } =>#t46;
   core::Set<dynamic>* set71ambiguous = block {
     final core::Set<dynamic>* #t47 = col::LinkedHashSet::•<dynamic>();
-    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
     for (final dynamic #t48 in <dynamic>[]) {
@@ -302,7 +302,7 @@
       #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
     }
   } =>#t47;
-  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
   Map<String, int> map70 = <String, int>{...null};
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
index a1ed2c2..fe13a59 100644
--- a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.transformed.expect
@@ -2,93 +2,93 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 // Try providing type arguments for the literal explicitly to disambiguate it.
 //   dynamic map21ambiguous = {...(mapSpread as dynamic)};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   dynamic map24ambiguous = {...spread, ...mapSpread};
 //                            ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
 //  - 'List' is from 'dart:core'.
-//   int lhs30 = /*@ typeArgs=int* */ [...spread];
-//                                    ^
+//   int lhs30 = /*@typeArgs=int**/ [...spread];
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
-//   int set30 = /*@ typeArgs=int* */ {...spread, 42};
-//                                    ^
+//   int set30 = /*@typeArgs=int**/ {...spread, 42};
+//                                  ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
 //  - 'Set' is from 'dart:core'.
 //       {...spread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread, "baz": 42};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
 //  - 'Map' is from 'dart:core'.
 //       {...mapSpread};
 //       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
 //                                      ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
 //   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
 //                                     ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
 //   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
 //                                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   List<String> lhs60 = <String>[...spread];
 //                                    ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
 //   Set<String> set60 = <String>{...spread};
 //                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
 //   Map<int, int> map60 = <int, int>{...mapSpread};
 //                                       ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
 //   Map<String, String> map61 = <String, String>{...mapSpread};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
 //   List<int> lhs70 = <int>[...null];
 //                              ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
 //   Set<int> set70 = <int>{...null};
 //                             ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
 //     ...null,
 //        ^
 //
-// pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+// pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
 //   Map<String, int> map70 = <String, int>{...null};
 //                                             ^
 //
@@ -190,7 +190,7 @@
     }
     #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
   } =>#t18;
-  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:66:28: Error: Not enough type information to disambiguate between literal set and literal map.
 Try providing type arguments for the literal explicitly to disambiguate it.
   dynamic map21ambiguous = {...(mapSpread as dynamic)};
                            ^";
@@ -254,23 +254,23 @@
       }
     }
   } =>#t32;
-  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   dynamic map24ambiguous = {...spread, ...mapSpread};
                            ^";
-  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:34: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
-  int lhs30 = /*@ typeArgs=int* */ [...spread];
-                                   ^" in ( block {
+  int lhs30 = /*@typeArgs=int**/ [...spread];
+                                 ^" in ( block {
     final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
   } =>#t34) as{TypeError} core::int*;
-  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:102:34: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
-  int set30 = /*@ typeArgs=int* */ {...spread, 42};
-                                   ^" in ( block {
+  int set30 = /*@typeArgs=int**/ {...spread, 42};
+                                 ^" in ( block {
     final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
     #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t35) as{TypeError} core::int*;
-  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:105:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
  - 'Set' is from 'dart:core'.
       {...spread};
       ^" in ( block {
@@ -286,7 +286,7 @@
       }
     }
   } =>#t36) as{TypeError} core::int*;
-  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:108:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread, \"baz\": 42};
       ^" in ( block {
@@ -300,7 +300,7 @@
     }
     #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
   } =>#t39) as{TypeError} core::int*;
-  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
  - 'Map' is from 'dart:core'.
       {...mapSpread};
       ^" in ( block {
@@ -313,57 +313,57 @@
       }
     }
   } =>#t41) as{TypeError} core::int*;
-  core::List<dynamic>* lhs40 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs40 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
                                      ^");
   core::Set<dynamic>* set40 = block {
     final core::Set<dynamic>* #t43 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t43;
-  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
                                                       ^": null};
-  core::List<dynamic>* lhs50 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  core::List<dynamic>* lhs50 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
                                      ^");
   core::Set<dynamic>* set50 = block {
     final core::Set<dynamic>* #t44 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
                                     ^"){(dynamic) →* core::bool*};
   } =>#t44;
-  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
                                                       ^": null};
-  core::List<core::String*>* lhs60 = core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  core::List<core::String*>* lhs60 = core::_GrowableList::_literal1<core::String*>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   List<String> lhs60 = <String>[...spread];
                                    ^");
   core::Set<core::String*>* set60 = block {
     final core::Set<core::String*>* #t45 = new col::_CompactLinkedHashSet::•<core::String*>();
-    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
   Set<String> set60 = <String>{...spread};
                                   ^"){(core::String*) →* core::bool*};
   } =>#t45;
-  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
   Map<int, int> map60 = <int, int>{...mapSpread};
                                       ^": null};
-  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
   Map<String, String> map61 = <String, String>{...mapSpread};
                                                   ^"};
-  core::List<core::int*>* lhs70 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+  core::List<core::int*>* lhs70 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:30: Error: Can't spread a value with static type 'Null'.
   List<int> lhs70 = <int>[...null];
                              ^");
   core::Set<core::int*>* set70 = block {
     final core::Set<core::int*>* #t46 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:135:29: Error: Can't spread a value with static type 'Null'.
   Set<int> set70 = <int>{...null};
                             ^"){(core::int*) →* core::bool*};
   } =>#t46;
   core::Set<dynamic>* set71ambiguous = block {
     final core::Set<dynamic>* #t47 = new col::_CompactLinkedHashSet::•<dynamic>();
-    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:139:8: Error: Can't spread a value with static type 'Null'.
     ...null,
        ^"){(dynamic) →* core::bool*};
     {
@@ -377,7 +377,7 @@
       }
     }
   } =>#t47;
-  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:144:45: Error: Can't spread a value with static type 'Null'.
   Map<String, int> map70 = <String, int>{...null};
                                             ^": null};
   core::List<core::int*>* lhs80 = block {
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart b/pkg/front_end/testcases/general/spread_collection_inference2.dart
new file mode 100644
index 0000000..d642c27
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart
@@ -0,0 +1,162 @@
+// 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.
+
+// This test case checks that inference works for spread collections, and that
+// the errors are reported when necessary.
+
+/*@testedFeatures=inference*/
+
+Map<K, V> bar<K, V>() => throw '';
+
+foo(dynamic dynVar) {
+  List<int> spread = <int>[1, 2, 3];
+  Map<String, int> mapSpread = <String, int>{"foo": 4, "bar": 2};
+  int notSpreadInt = 42;
+  int Function()? notSpreadFunction = null;
+  // Note that all values are actually ints.
+  Map<int, num> mapIntNum = <int, num>{42: 42};
+  List<num> listNum = <num>[42];
+
+  var /*@type=List<dynamic>*/ lhs10 = /*@ typeArgs=dynamic */ [
+    ... /*@ typeArgs=dynamic */ []
+  ];
+
+  var /*@type=Set<dynamic>*/ set10 = <dynamic>{... /*@ typeArgs=dynamic */ []};
+
+  var /*@type=Map<dynamic, dynamic>*/ map10 = <dynamic, dynamic>{
+    ... /*@ typeArgs=dynamic, dynamic */ {}
+  };
+
+  var /*@type=Map<dynamic, dynamic>*/ map10ambiguous =
+      /*@ typeArgs=dynamic, dynamic */ {
+    ... /*@ typeArgs=dynamic, dynamic */ {}
+  };
+
+  var /*@type=List<int>*/ lhs20 = /*@typeArgs=int*/ [...spread];
+
+  var /*@type=Set<int>*/ set20 = /*@typeArgs=int*/ {...spread, 42};
+
+  var /*@type=Set<int>*/ set20ambiguous = /*@typeArgs=int*/ {...spread};
+
+  var /*@type=Map<String, int>*/ map20 = /*@typeArgs=String, int*/
+      {...mapSpread, "baz": 42};
+
+  var /*@type=Map<String, int>*/ map20ambiguous = /*@typeArgs=String, int*/
+      {...mapSpread};
+
+  var /*@type=List<dynamic>*/ lhs21 = /*@ typeArgs=dynamic */ [
+    ...(spread as dynamic)
+  ];
+
+  var /*@type=Set<dynamic>*/ set21 = /*@ typeArgs=dynamic */ {
+    ...(spread as dynamic),
+    42
+  };
+
+  var /*@type=Map<dynamic, dynamic>*/ map21 = /*@ typeArgs=dynamic, dynamic */
+      {...(mapSpread as dynamic), "baz": 42};
+
+  dynamic map21ambiguous = {...(mapSpread as dynamic)};
+
+  List<int> lhs22 = /*@typeArgs=int*/ [... /*@typeArgs=int*/ []];
+
+  Set<int> set22 = /*@typeArgs=int*/ {... /*@typeArgs=int*/ [], 42};
+
+  Set<int> set22ambiguous = /*@typeArgs=int*/ {... /*@typeArgs=int*/ []};
+
+  Map<String, int> map22 = /*@typeArgs=String, int*/
+      {... /*@typeArgs=String, int*/ {}};
+
+  List<List<int>> lhs23 = /*@typeArgs=List<int>*/ [
+    ... /*@typeArgs=List<int>*/
+    [/*@typeArgs=int*/ []]
+  ];
+
+  Set<List<int>> set23 = /*@typeArgs=List<int>*/ {
+    ... /*@typeArgs=List<int>*/
+    [/*@typeArgs=int*/ []],
+    <int>[42]
+  };
+
+  Set<List<int>> set23ambiguous = /*@typeArgs=List<int>*/
+      {
+    ... /*@typeArgs=List<int>*/ [/*@typeArgs=int*/ []]
+  };
+
+  Map<String, List<int>> map23 = /*@typeArgs=String, List<int>*/
+      {
+    ... /*@typeArgs=String, List<int>*/ {"baz": /*@typeArgs=int*/ [] }
+  };
+
+  dynamic map24ambiguous = {...spread, ...mapSpread};
+
+  int lhs30 = /*@typeArgs=int*/ [...spread];
+
+  int set30 = /*@typeArgs=int*/ {...spread, 42};
+
+  int set30ambiguous = /*@typeArgs=int*/
+      {...spread};
+
+  int map30 = /*@typeArgs=String, int*/
+      {...mapSpread, "baz": 42};
+
+  int map30ambiguous = /*@typeArgs=String, int*/
+      {...mapSpread};
+
+  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+
+  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+
+  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+
+  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+
+  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+
+  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+
+  List<String> lhs60 = <String>[...spread];
+
+  Set<String> set60 = <String>{...spread};
+
+  Map<int, int> map60 = <int, int>{...mapSpread};
+
+  Map<String, String> map61 = <String, String>{...mapSpread};
+
+  List<int> lhs70 = <int>[...null];
+
+  Set<int> set70 = <int>{...null};
+
+  var /*@type=Set<dynamic>*/ set71ambiguous = /*@ typeArgs=dynamic */
+      {
+    ...null,
+    ... /*@ typeArgs=dynamic */
+    []
+  };
+
+  Map<String, int> map70 = <String, int>{...null};
+
+  List<int> lhs80 = <int>[...?null];
+
+  Set<int> set80 = <int>{...?null};
+
+  var /*@type=Set<dynamic>*/ set81ambiguous = /*@ typeArgs=dynamic */
+      {...?null, ... /*@ typeArgs=dynamic */ []};
+
+  Map<String, int> map80 = <String, int>{...?null};
+
+  var /*@type=Map<String, int>*/ map90 = <String, int>{
+    ... /*@typeArgs=String, int*/ bar()
+  };
+
+  List<int> list100 = <int>[...listNum];
+
+  Map<num, int> map100 = <num, int>{...mapIntNum};
+
+  List<int> list110 = <int>[...dynVar];
+
+  Map<num, int> map110 = <num, int>{...dynVar};
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..1bf0e63
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+Map<K, V> bar<K, V>() => throw '';
+foo(dynamic dynVar) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1bf0e63
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+Map<K, V> bar<K, V>() => throw '';
+foo(dynamic dynVar) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect
new file mode 100644
index 0000000..a27706e
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.expect
@@ -0,0 +1,383 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   dynamic map21ambiguous = {...(mapSpread as dynamic)};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   dynamic map24ambiguous = {...spread, ...mapSpread};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+//  - 'List' is from 'dart:core'.
+//   int lhs30 = /*@typeArgs=int*/ [...spread];
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//   int set30 = /*@typeArgs=int*/ {...spread, 42};
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//       {...spread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread, "baz": 42};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   List<String> lhs60 = <String>[...spread];
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   Set<String> set60 = <String>{...spread};
+//                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+//   Map<int, int> map60 = <int, int>{...mapSpread};
+//                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+//   Map<String, String> map61 = <String, String>{...mapSpread};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+//   List<int> lhs70 = <int>[...null];
+//                              ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+//   Set<int> set70 = <int>{...null};
+//                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+//     ...null,
+//        ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+//   Map<String, int> map70 = <String, int>{...null};
+//                                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+//   List<int> list100 = <int>[...listNum];
+//                                ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+//   Map<num, int> map100 = <num, int>{...mapIntNum};
+//                                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method bar<K extends core::Object? = dynamic, V extends core::Object? = dynamic>() → core::Map<self::bar::K%, self::bar::V%>
+  return throw "";
+static method foo(dynamic dynVar) → dynamic {
+  core::List<core::int> spread = <core::int>[1, 2, 3];
+  core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
+  core::int notSpreadInt = 42;
+  () →? core::int notSpreadFunction = null;
+  core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
+  core::List<core::num> listNum = <core::num>[42];
+  core::List<dynamic> lhs10 = block {
+    final core::List<dynamic> #t1 = core::List::of<dynamic>(<dynamic>[]);
+  } =>#t1;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::of<dynamic>(<dynamic>[]);
+  } =>#t2;
+  core::Map<dynamic, dynamic> map10 = block {
+    final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  } =>#t3;
+  core::Map<dynamic, dynamic> map10ambiguous = block {
+    final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  } =>#t5;
+  core::List<core::int> lhs20 = block {
+    final core::List<core::int> #t7 = core::List::of<core::int>(spread);
+  } =>#t7;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t8 = col::LinkedHashSet::of<core::int>(spread);
+    #t8.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t8;
+  core::Set<core::int> set20ambiguous = block {
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t10 in spread) {
+      final core::int #t11 = #t10 as{TypeError,ForNonNullableByDefault} core::int;
+      #t9.{core::Set::add}{Invariant}(#t11){(core::int) → core::bool};
+    }
+  } =>#t9;
+  core::Map<core::String, core::int> map20 = block {
+    final core::Map<core::String, core::int> #t12 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+    #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t12;
+  core::Map<core::String, core::int> map20ambiguous = block {
+    final core::Map<core::String, core::int> #t14 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t14;
+  core::List<dynamic> lhs21 = block {
+    final core::List<dynamic> #t16 = core::List::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+  } =>#t16;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t17 = col::LinkedHashSet::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+    #t17.{core::Set::add}{Invariant}(42){(dynamic) → core::bool};
+  } =>#t17;
+  core::Map<dynamic, dynamic> map21 = block {
+    final core::Map<dynamic, dynamic> #t18 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
+  } =>#t18;
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  dynamic map21ambiguous = {...(mapSpread as dynamic)};
+                           ^";
+  core::List<core::int> lhs22 = block {
+    final core::List<core::int> #t20 = core::List::of<core::int>(<core::int>[]);
+  } =>#t20;
+  core::Set<core::int> set22 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::of<core::int>(<core::int>[]);
+    #t21.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t21;
+  core::Set<core::int> set22ambiguous = block {
+    final core::Set<core::int> #t22 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t23 in <core::int>[]) {
+      final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
+      #t22.{core::Set::add}{Invariant}(#t24){(core::int) → core::bool};
+    }
+  } =>#t22;
+  core::Map<core::String, core::int> map22 = block {
+    final core::Map<core::String, core::int> #t25 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String}, #t26.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t25;
+  core::List<core::List<core::int>> lhs23 = block {
+    final core::List<core::List<core::int>> #t27 = core::List::of<core::List<core::int>>(<core::List<core::int>>[<core::int>[]]);
+  } =>#t27;
+  core::Set<core::List<core::int>> set23 = block {
+    final core::Set<core::List<core::int>> #t28 = col::LinkedHashSet::of<core::List<core::int>>(<core::List<core::int>>[<core::int>[]]);
+    #t28.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → core::bool};
+  } =>#t28;
+  core::Set<core::List<core::int>> set23ambiguous = block {
+    final core::Set<core::List<core::int>> #t29 = col::LinkedHashSet::•<core::List<core::int>>();
+    for (final dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
+      final core::List<core::int> #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+      #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int>) → core::bool};
+    }
+  } =>#t29;
+  core::Map<core::String, core::List<core::int>> map23 = block {
+    final core::Map<core::String, core::List<core::int>> #t32 = <core::String, core::List<core::int>>{};
+    for (final core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
+      #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>}){(core::String, core::List<core::int>) → void};
+  } =>#t32;
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = {...spread, ...mapSpread};
+                           ^";
+  core::int lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ - 'List' is from 'dart:core'.
+  int lhs30 = /*@typeArgs=int*/ [...spread];
+                                ^" in ( block {
+    final core::List<core::int> #t34 = core::List::of<core::int>(spread);
+  } =>#t34) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+  int set30 = /*@typeArgs=int*/ {...spread, 42};
+                                ^" in ( block {
+    final core::Set<core::int> #t35 = col::LinkedHashSet::of<core::int>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t35) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+      {...spread};
+      ^" in ( block {
+    final core::Set<core::int> #t36 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t37 in spread) {
+      final core::int #t38 = #t37 as{TypeError,ForNonNullableByDefault} core::int;
+      #t36.{core::Set::add}{Invariant}(#t38){(core::int) → core::bool};
+    }
+  } =>#t36) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread, \"baz\": 42};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t39 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String}, #t40.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t39) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t41 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String}, #t42.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t41) as{TypeError,ForNonNullableByDefault} core::int;
+  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+                                     ^"];
+  core::Set<dynamic> set40 = block {
+    final core::Set<dynamic> #t43 = col::LinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t43;
+  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+                                                      ^": null};
+  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+                                     ^"];
+  core::Set<dynamic> set50 = block {
+    final core::Set<dynamic> #t44 = col::LinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t44;
+  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+                                                      ^": null};
+  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  List<String> lhs60 = <String>[...spread];
+                                   ^"];
+  core::Set<core::String> set60 = block {
+    final core::Set<core::String> #t45 = col::LinkedHashSet::•<core::String>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  Set<String> set60 = <String>{...spread};
+                                  ^"){(core::String) → core::bool};
+  } =>#t45;
+  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  Map<int, int> map60 = <int, int>{...mapSpread};
+                                      ^": null};
+  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  Map<String, String> map61 = <String, String>{...mapSpread};
+                                                  ^"};
+  core::List<core::int> lhs70 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+  List<int> lhs70 = <int>[...null];
+                             ^"];
+  core::Set<core::int> set70 = block {
+    final core::Set<core::int> #t46 = col::LinkedHashSet::•<core::int>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+  Set<int> set70 = <int>{...null};
+                            ^"){(core::int) → core::bool};
+  } =>#t46;
+  core::Set<dynamic> set71ambiguous = block {
+    final core::Set<dynamic> #t47 = col::LinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+    ...null,
+       ^"){(dynamic) → core::bool};
+    for (final dynamic #t48 in <dynamic>[]) {
+      final dynamic #t49 = #t48 as{TypeError,ForNonNullableByDefault} dynamic;
+      #t47.{core::Set::add}{Invariant}(#t49){(dynamic) → core::bool};
+    }
+  } =>#t47;
+  core::Map<core::String, core::int> map70 = <core::String, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+  Map<String, int> map70 = <String, int>{...null};
+                                            ^": null};
+  core::List<core::int> lhs80 = block {
+    final core::List<core::int> #t50 = <core::int>[];
+    final core::Iterable<core::int>? #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t50;
+  core::Set<core::int> set80 = block {
+    final core::Set<core::int> #t52 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<dynamic> set81ambiguous = block {
+    final core::Set<dynamic> #t54 = col::LinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>? #t55 = null;
+    if(!(#t55 == null))
+      for (final dynamic #t56 in #t55{core::Iterable<dynamic>}) {
+        final dynamic #t57 = #t56 as{TypeError,ForNonNullableByDefault} dynamic;
+        #t54.{core::Set::add}{Invariant}(#t57){(dynamic) → core::bool};
+      }
+    for (final dynamic #t58 in <dynamic>[]) {
+      final dynamic #t59 = #t58 as{TypeError,ForNonNullableByDefault} dynamic;
+      #t54.{core::Set::add}{Invariant}(#t59){(dynamic) → core::bool};
+    }
+  } =>#t54;
+  core::Map<core::String, core::int> map80 = block {
+    final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
+    final core::Map<core::String, core::int>? #t61 = null;
+    if(!(#t61 == null))
+      for (final core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String}, #t62.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t60;
+  core::Map<core::String, core::int> map90 = block {
+    final core::Map<core::String, core::int> #t63 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String}, #t64.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t63;
+  core::List<core::int> list100 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+  List<int> list100 = <int>[...listNum];
+                               ^"];
+  core::Map<core::num, core::int> map100 = <core::num, core::int>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+  Map<num, int> map100 = <num, int>{...mapIntNum};
+                                       ^"};
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t65 = <core::int>[];
+    for (final dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
+      #t65.{core::List::add}{Invariant}(#t67){(core::int) → void};
+    }
+  } =>#t65;
+  core::Map<core::num, core::int> map110 = block {
+    final core::Map<core::num, core::int> #t68 = <core::num, core::int>{};
+    for (final core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
+      final core::num #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::num;
+      final core::int #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+      #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num, core::int) → void};
+    }
+  } =>#t68;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect
new file mode 100644
index 0000000..a27706e
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.modular.expect
@@ -0,0 +1,383 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   dynamic map21ambiguous = {...(mapSpread as dynamic)};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   dynamic map24ambiguous = {...spread, ...mapSpread};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+//  - 'List' is from 'dart:core'.
+//   int lhs30 = /*@typeArgs=int*/ [...spread];
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//   int set30 = /*@typeArgs=int*/ {...spread, 42};
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//       {...spread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread, "baz": 42};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   List<String> lhs60 = <String>[...spread];
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   Set<String> set60 = <String>{...spread};
+//                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+//   Map<int, int> map60 = <int, int>{...mapSpread};
+//                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+//   Map<String, String> map61 = <String, String>{...mapSpread};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+//   List<int> lhs70 = <int>[...null];
+//                              ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+//   Set<int> set70 = <int>{...null};
+//                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+//     ...null,
+//        ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+//   Map<String, int> map70 = <String, int>{...null};
+//                                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+//   List<int> list100 = <int>[...listNum];
+//                                ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+//   Map<num, int> map100 = <num, int>{...mapIntNum};
+//                                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method bar<K extends core::Object? = dynamic, V extends core::Object? = dynamic>() → core::Map<self::bar::K%, self::bar::V%>
+  return throw "";
+static method foo(dynamic dynVar) → dynamic {
+  core::List<core::int> spread = <core::int>[1, 2, 3];
+  core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
+  core::int notSpreadInt = 42;
+  () →? core::int notSpreadFunction = null;
+  core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
+  core::List<core::num> listNum = <core::num>[42];
+  core::List<dynamic> lhs10 = block {
+    final core::List<dynamic> #t1 = core::List::of<dynamic>(<dynamic>[]);
+  } =>#t1;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::of<dynamic>(<dynamic>[]);
+  } =>#t2;
+  core::Map<dynamic, dynamic> map10 = block {
+    final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  } =>#t3;
+  core::Map<dynamic, dynamic> map10ambiguous = block {
+    final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  } =>#t5;
+  core::List<core::int> lhs20 = block {
+    final core::List<core::int> #t7 = core::List::of<core::int>(spread);
+  } =>#t7;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t8 = col::LinkedHashSet::of<core::int>(spread);
+    #t8.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t8;
+  core::Set<core::int> set20ambiguous = block {
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t10 in spread) {
+      final core::int #t11 = #t10 as{TypeError,ForNonNullableByDefault} core::int;
+      #t9.{core::Set::add}{Invariant}(#t11){(core::int) → core::bool};
+    }
+  } =>#t9;
+  core::Map<core::String, core::int> map20 = block {
+    final core::Map<core::String, core::int> #t12 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+    #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t12;
+  core::Map<core::String, core::int> map20ambiguous = block {
+    final core::Map<core::String, core::int> #t14 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t14;
+  core::List<dynamic> lhs21 = block {
+    final core::List<dynamic> #t16 = core::List::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+  } =>#t16;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t17 = col::LinkedHashSet::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+    #t17.{core::Set::add}{Invariant}(42){(dynamic) → core::bool};
+  } =>#t17;
+  core::Map<dynamic, dynamic> map21 = block {
+    final core::Map<dynamic, dynamic> #t18 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic> #t19 in ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
+  } =>#t18;
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  dynamic map21ambiguous = {...(mapSpread as dynamic)};
+                           ^";
+  core::List<core::int> lhs22 = block {
+    final core::List<core::int> #t20 = core::List::of<core::int>(<core::int>[]);
+  } =>#t20;
+  core::Set<core::int> set22 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::of<core::int>(<core::int>[]);
+    #t21.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t21;
+  core::Set<core::int> set22ambiguous = block {
+    final core::Set<core::int> #t22 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t23 in <core::int>[]) {
+      final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
+      #t22.{core::Set::add}{Invariant}(#t24){(core::int) → core::bool};
+    }
+  } =>#t22;
+  core::Map<core::String, core::int> map22 = block {
+    final core::Map<core::String, core::int> #t25 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t26 in <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String}, #t26.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t25;
+  core::List<core::List<core::int>> lhs23 = block {
+    final core::List<core::List<core::int>> #t27 = core::List::of<core::List<core::int>>(<core::List<core::int>>[<core::int>[]]);
+  } =>#t27;
+  core::Set<core::List<core::int>> set23 = block {
+    final core::Set<core::List<core::int>> #t28 = col::LinkedHashSet::of<core::List<core::int>>(<core::List<core::int>>[<core::int>[]]);
+    #t28.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → core::bool};
+  } =>#t28;
+  core::Set<core::List<core::int>> set23ambiguous = block {
+    final core::Set<core::List<core::int>> #t29 = col::LinkedHashSet::•<core::List<core::int>>();
+    for (final dynamic #t30 in <core::List<core::int>>[<core::int>[]]) {
+      final core::List<core::int> #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+      #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int>) → core::bool};
+    }
+  } =>#t29;
+  core::Map<core::String, core::List<core::int>> map23 = block {
+    final core::Map<core::String, core::List<core::int>> #t32 = <core::String, core::List<core::int>>{};
+    for (final core::MapEntry<core::String, core::List<core::int>> #t33 in <core::String, core::List<core::int>>{"baz": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>})
+      #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>}){(core::String, core::List<core::int>) → void};
+  } =>#t32;
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = {...spread, ...mapSpread};
+                           ^";
+  core::int lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ - 'List' is from 'dart:core'.
+  int lhs30 = /*@typeArgs=int*/ [...spread];
+                                ^" in ( block {
+    final core::List<core::int> #t34 = core::List::of<core::int>(spread);
+  } =>#t34) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+  int set30 = /*@typeArgs=int*/ {...spread, 42};
+                                ^" in ( block {
+    final core::Set<core::int> #t35 = col::LinkedHashSet::of<core::int>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t35) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+      {...spread};
+      ^" in ( block {
+    final core::Set<core::int> #t36 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t37 in spread) {
+      final core::int #t38 = #t37 as{TypeError,ForNonNullableByDefault} core::int;
+      #t36.{core::Set::add}{Invariant}(#t38){(core::int) → core::bool};
+    }
+  } =>#t36) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread, \"baz\": 42};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t39 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String}, #t40.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t39) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t41 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String}, #t42.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t41) as{TypeError,ForNonNullableByDefault} core::int;
+  core::List<dynamic> lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+                                     ^"];
+  core::Set<dynamic> set40 = block {
+    final core::Set<dynamic> #t43 = col::LinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t43;
+  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+                                                      ^": null};
+  core::List<dynamic> lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+                                     ^"];
+  core::Set<dynamic> set50 = block {
+    final core::Set<dynamic> #t44 = col::LinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t44;
+  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+                                                      ^": null};
+  core::List<core::String> lhs60 = <core::String>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  List<String> lhs60 = <String>[...spread];
+                                   ^"];
+  core::Set<core::String> set60 = block {
+    final core::Set<core::String> #t45 = col::LinkedHashSet::•<core::String>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  Set<String> set60 = <String>{...spread};
+                                  ^"){(core::String) → core::bool};
+  } =>#t45;
+  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  Map<int, int> map60 = <int, int>{...mapSpread};
+                                      ^": null};
+  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  Map<String, String> map61 = <String, String>{...mapSpread};
+                                                  ^"};
+  core::List<core::int> lhs70 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+  List<int> lhs70 = <int>[...null];
+                             ^"];
+  core::Set<core::int> set70 = block {
+    final core::Set<core::int> #t46 = col::LinkedHashSet::•<core::int>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+  Set<int> set70 = <int>{...null};
+                            ^"){(core::int) → core::bool};
+  } =>#t46;
+  core::Set<dynamic> set71ambiguous = block {
+    final core::Set<dynamic> #t47 = col::LinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+    ...null,
+       ^"){(dynamic) → core::bool};
+    for (final dynamic #t48 in <dynamic>[]) {
+      final dynamic #t49 = #t48 as{TypeError,ForNonNullableByDefault} dynamic;
+      #t47.{core::Set::add}{Invariant}(#t49){(dynamic) → core::bool};
+    }
+  } =>#t47;
+  core::Map<core::String, core::int> map70 = <core::String, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+  Map<String, int> map70 = <String, int>{...null};
+                                            ^": null};
+  core::List<core::int> lhs80 = block {
+    final core::List<core::int> #t50 = <core::int>[];
+    final core::Iterable<core::int>? #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t50;
+  core::Set<core::int> set80 = block {
+    final core::Set<core::int> #t52 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<dynamic> set81ambiguous = block {
+    final core::Set<dynamic> #t54 = col::LinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>? #t55 = null;
+    if(!(#t55 == null))
+      for (final dynamic #t56 in #t55{core::Iterable<dynamic>}) {
+        final dynamic #t57 = #t56 as{TypeError,ForNonNullableByDefault} dynamic;
+        #t54.{core::Set::add}{Invariant}(#t57){(dynamic) → core::bool};
+      }
+    for (final dynamic #t58 in <dynamic>[]) {
+      final dynamic #t59 = #t58 as{TypeError,ForNonNullableByDefault} dynamic;
+      #t54.{core::Set::add}{Invariant}(#t59){(dynamic) → core::bool};
+    }
+  } =>#t54;
+  core::Map<core::String, core::int> map80 = block {
+    final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
+    final core::Map<core::String, core::int>? #t61 = null;
+    if(!(#t61 == null))
+      for (final core::MapEntry<core::String, core::int> #t62 in #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String}, #t62.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t60;
+  core::Map<core::String, core::int> map90 = block {
+    final core::Map<core::String, core::int> #t63 = <core::String, core::int>{};
+    for (final core::MapEntry<core::String, core::int> #t64 in self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+      #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String}, #t64.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t63;
+  core::List<core::int> list100 = <core::int>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+  List<int> list100 = <int>[...listNum];
+                               ^"];
+  core::Map<core::num, core::int> map100 = <core::num, core::int>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+  Map<num, int> map100 = <num, int>{...mapIntNum};
+                                       ^"};
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t65 = <core::int>[];
+    for (final dynamic #t66 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
+      #t65.{core::List::add}{Invariant}(#t67){(core::int) → void};
+    }
+  } =>#t65;
+  core::Map<core::num, core::int> map110 = block {
+    final core::Map<core::num, core::int> #t68 = <core::num, core::int>{};
+    for (final core::MapEntry<dynamic, dynamic> #t69 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}) {
+      final core::num #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::num;
+      final core::int #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+      #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num, core::int) → void};
+    }
+  } =>#t68;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..52e6295
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method bar<K extends core::Object? = dynamic, V extends core::Object? = dynamic>() → core::Map<self::bar::K%, self::bar::V%>
+  ;
+static method foo(dynamic dynVar) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect
new file mode 100644
index 0000000..9bdd143
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference2.dart.weak.transformed.expect
@@ -0,0 +1,490 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   dynamic map21ambiguous = {...(mapSpread as dynamic)};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   dynamic map24ambiguous = {...spread, ...mapSpread};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+//  - 'List' is from 'dart:core'.
+//   int lhs30 = /*@typeArgs=int*/ [...spread];
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//   int set30 = /*@typeArgs=int*/ {...spread, 42};
+//                                 ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//       {...spread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread, "baz": 42};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   List<String> lhs60 = <String>[...spread];
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   Set<String> set60 = <String>{...spread};
+//                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+//   Map<int, int> map60 = <int, int>{...mapSpread};
+//                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+//   Map<String, String> map61 = <String, String>{...mapSpread};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+//   List<int> lhs70 = <int>[...null];
+//                              ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+//   Set<int> set70 = <int>{...null};
+//                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+//     ...null,
+//        ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+//   Map<String, int> map70 = <String, int>{...null};
+//                                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+//   List<int> list100 = <int>[...listNum];
+//                                ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+//   Map<num, int> map100 = <num, int>{...mapIntNum};
+//                                        ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method bar<K extends core::Object? = dynamic, V extends core::Object? = dynamic>() → core::Map<self::bar::K%, self::bar::V%>
+  return throw "";
+static method foo(dynamic dynVar) → dynamic {
+  core::List<core::int> spread = core::_GrowableList::_literal3<core::int>(1, 2, 3);
+  core::Map<core::String, core::int> mapSpread = <core::String, core::int>{"foo": 4, "bar": 2};
+  core::int notSpreadInt = 42;
+  () →? core::int notSpreadFunction = null;
+  core::Map<core::int, core::num> mapIntNum = <core::int, core::num>{42: 42};
+  core::List<core::num> listNum = core::_GrowableList::_literal1<core::num>(42);
+  core::List<dynamic> lhs10 = block {
+    final core::List<dynamic> #t1 = core::List::of<dynamic>(core::_GrowableList::•<dynamic>(0));
+  } =>#t1;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t2 = col::LinkedHashSet::of<dynamic>(core::_GrowableList::•<dynamic>(0));
+  } =>#t2;
+  core::Map<dynamic, dynamic> map10 = block {
+    final core::Map<dynamic, dynamic> #t3 = <dynamic, dynamic>{};
+    {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<dynamic, dynamic> #t4 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+        #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+      }
+    }
+  } =>#t3;
+  core::Map<dynamic, dynamic> map10ambiguous = block {
+    final core::Map<dynamic, dynamic> #t5 = <dynamic, dynamic>{};
+    {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<dynamic, dynamic> #t6 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+        #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+      }
+    }
+  } =>#t5;
+  core::List<core::int> lhs20 = block {
+    final core::List<core::int> #t7 = core::List::of<core::int>(spread);
+  } =>#t7;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t8 = col::LinkedHashSet::of<core::int>(spread);
+    #t8.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t8;
+  core::Set<core::int> set20ambiguous = block {
+    final core::Set<core::int> #t9 = new col::_CompactLinkedHashSet::•<core::int>();
+    {
+      core::Iterator<core::int> :sync-for-iterator = spread.{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t10 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          final core::int #t11 = #t10 as{TypeError,ForNonNullableByDefault} core::int;
+          #t9.{core::Set::add}{Invariant}(#t11){(core::int) → core::bool};
+        }
+      }
+    }
+  } =>#t9;
+  core::Map<core::String, core::int> map20 = block {
+    final core::Map<core::String, core::int> #t12 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t13 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String}, #t13.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+    #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t12;
+  core::Map<core::String, core::int> map20ambiguous = block {
+    final core::Map<core::String, core::int> #t14 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t15 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+  } =>#t14;
+  core::List<dynamic> lhs21 = block {
+    final core::List<dynamic> #t16 = core::List::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+  } =>#t16;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t17 = col::LinkedHashSet::of<dynamic>((spread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>);
+    #t17.{core::Set::add}{Invariant}(42){(dynamic) → core::bool};
+  } =>#t17;
+  core::Map<dynamic, dynamic> map21 = block {
+    final core::Map<dynamic, dynamic> #t18 = <dynamic, dynamic>{};
+    {
+      core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = ((mapSpread as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<dynamic, dynamic>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<dynamic, dynamic> #t19 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+      }
+    }
+    #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) → void};
+  } =>#t18;
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:60:28: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  dynamic map21ambiguous = {...(mapSpread as dynamic)};
+                           ^";
+  core::List<core::int> lhs22 = block {
+    final core::List<core::int> #t20 = core::List::of<core::int>(core::_GrowableList::•<core::int>(0));
+  } =>#t20;
+  core::Set<core::int> set22 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::of<core::int>(core::_GrowableList::•<core::int>(0));
+    #t21.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t21;
+  core::Set<core::int> set22ambiguous = block {
+    final core::Set<core::int> #t22 = new col::_CompactLinkedHashSet::•<core::int>();
+    {
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::•<core::int>(0).{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t23 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
+          #t22.{core::Set::add}{Invariant}(#t24){(core::int) → core::bool};
+        }
+      }
+    }
+  } =>#t22;
+  core::Map<core::String, core::int> map22 = block {
+    final core::Map<core::String, core::int> #t25 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = <core::String, core::int>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t26 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String}, #t26.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+  } =>#t25;
+  core::List<core::List<core::int>> lhs23 = block {
+    final core::List<core::List<core::int>> #t27 = core::List::of<core::List<core::int>>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)));
+  } =>#t27;
+  core::Set<core::List<core::int>> set23 = block {
+    final core::Set<core::List<core::int>> #t28 = col::LinkedHashSet::of<core::List<core::int>>(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)));
+    #t28.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → core::bool};
+  } =>#t28;
+  core::Set<core::List<core::int>> set23ambiguous = block {
+    final core::Set<core::List<core::int>> #t29 = new col::_CompactLinkedHashSet::•<core::List<core::int>>();
+    {
+      core::Iterator<core::List<core::int>> :sync-for-iterator = core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0)).{core::Iterable::iterator}{core::Iterator<core::List<core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t30 = :sync-for-iterator.{core::Iterator::current}{core::List<core::int>};
+        {
+          final core::List<core::int> #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::List<core::int>;
+          #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int>) → core::bool};
+        }
+      }
+    }
+  } =>#t29;
+  core::Map<core::String, core::List<core::int>> map23 = block {
+    final core::Map<core::String, core::List<core::int>> #t32 = <core::String, core::List<core::int>>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>>> :sync-for-iterator = <core::String, core::List<core::int>>{"baz": core::_GrowableList::•<core::int>(0)}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::List<core::int>>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::List<core::int>> #t33 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>>};
+        #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String}, #t33.{core::MapEntry::value}{core::List<core::int>}){(core::String, core::List<core::int>) → void};
+      }
+    }
+  } =>#t32;
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:92:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = {...spread, ...mapSpread};
+                           ^";
+  core::int lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:94:33: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ - 'List' is from 'dart:core'.
+  int lhs30 = /*@typeArgs=int*/ [...spread];
+                                ^" in ( block {
+    final core::List<core::int> #t34 = core::List::of<core::int>(spread);
+  } =>#t34) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:96:33: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+  int set30 = /*@typeArgs=int*/ {...spread, 42};
+                                ^" in ( block {
+    final core::Set<core::int> #t35 = col::LinkedHashSet::of<core::int>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t35) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:99:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+      {...spread};
+      ^" in ( block {
+    final core::Set<core::int> #t36 = new col::_CompactLinkedHashSet::•<core::int>();
+    {
+      core::Iterator<core::int> :sync-for-iterator = spread.{core::Iterable::iterator}{core::Iterator<core::int>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t37 = :sync-for-iterator.{core::Iterator::current}{core::int};
+        {
+          final core::int #t38 = #t37 as{TypeError,ForNonNullableByDefault} core::int;
+          #t36.{core::Set::add}{Invariant}(#t38){(core::int) → core::bool};
+        }
+      }
+    }
+  } =>#t36) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:102:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread, \"baz\": 42};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t39 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t40 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String}, #t40.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String, core::int) → void};
+  } =>#t39) as{TypeError,ForNonNullableByDefault} core::int;
+  core::int map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:105:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread};
+      ^" in ( block {
+    final core::Map<core::String, core::int> #t41 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t42 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String}, #t42.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+  } =>#t41) as{TypeError,ForNonNullableByDefault} core::int;
+  core::List<dynamic> lhs40 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:107:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+                                     ^");
+  core::Set<dynamic> set40 = block {
+    final core::Set<dynamic> #t43 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:109:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t43;
+  core::Map<dynamic, dynamic> map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:111:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+                                                      ^": null};
+  core::List<dynamic> lhs50 = core::_GrowableList::_literal1<dynamic>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:113:38: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+                                     ^");
+  core::Set<dynamic> set50 = block {
+    final core::Set<dynamic> #t44 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:115:37: Error: Unexpected type 'int Function()?' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+                                    ^"){(dynamic) → core::bool};
+  } =>#t44;
+  core::Map<dynamic, dynamic> map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:117:55: Error: Unexpected type 'int Function()?' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+                                                      ^": null};
+  core::List<core::String> lhs60 = core::_GrowableList::_literal1<core::String>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:119:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  List<String> lhs60 = <String>[...spread];
+                                   ^");
+  core::Set<core::String> set60 = block {
+    final core::Set<core::String> #t45 = new col::_CompactLinkedHashSet::•<core::String>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:121:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  Set<String> set60 = <String>{...spread};
+                                  ^"){(core::String) → core::bool};
+  } =>#t45;
+  core::Map<core::int, core::int> map60 = <core::int, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:123:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  Map<int, int> map60 = <int, int>{...mapSpread};
+                                      ^": null};
+  core::Map<core::String, core::String> map61 = <core::String, core::String>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:125:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  Map<String, String> map61 = <String, String>{...mapSpread};
+                                                  ^"};
+  core::List<core::int> lhs70 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:127:30: Error: Can't spread a value with static type 'Null'.
+  List<int> lhs70 = <int>[...null];
+                             ^");
+  core::Set<core::int> set70 = block {
+    final core::Set<core::int> #t46 = new col::_CompactLinkedHashSet::•<core::int>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:129:29: Error: Can't spread a value with static type 'Null'.
+  Set<int> set70 = <int>{...null};
+                            ^"){(core::int) → core::bool};
+  } =>#t46;
+  core::Set<dynamic> set71ambiguous = block {
+    final core::Set<dynamic> #t47 = new col::_CompactLinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:133:8: Error: Can't spread a value with static type 'Null'.
+    ...null,
+       ^"){(dynamic) → core::bool};
+    {
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t48 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final dynamic #t49 = #t48 as{TypeError,ForNonNullableByDefault} dynamic;
+          #t47.{core::Set::add}{Invariant}(#t49){(dynamic) → core::bool};
+        }
+      }
+    }
+  } =>#t47;
+  core::Map<core::String, core::int> map70 = <core::String, core::int>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:138:45: Error: Can't spread a value with static type 'Null'.
+  Map<String, int> map70 = <String, int>{...null};
+                                            ^": null};
+  core::List<core::int> lhs80 = block {
+    final core::List<core::int> #t50 = core::_GrowableList::•<core::int>(0);
+    final core::Iterable<core::int>? #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t50;
+  core::Set<core::int> set80 = block {
+    final core::Set<core::int> #t52 = new col::_CompactLinkedHashSet::•<core::int>();
+    final core::Iterable<core::int>? #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<dynamic> set81ambiguous = block {
+    final core::Set<dynamic> #t54 = new col::_CompactLinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>? #t55 = null;
+    if(!(#t55 == null)) {
+      core::Iterator<dynamic> :sync-for-iterator = #t55{core::Iterable<dynamic>}.{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t56 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final dynamic #t57 = #t56 as{TypeError,ForNonNullableByDefault} dynamic;
+          #t54.{core::Set::add}{Invariant}(#t57){(dynamic) → core::bool};
+        }
+      }
+    }
+    {
+      core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t58 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final dynamic #t59 = #t58 as{TypeError,ForNonNullableByDefault} dynamic;
+          #t54.{core::Set::add}{Invariant}(#t59){(dynamic) → core::bool};
+        }
+      }
+    }
+  } =>#t54;
+  core::Map<core::String, core::int> map80 = block {
+    final core::Map<core::String, core::int> #t60 = <core::String, core::int>{};
+    final core::Map<core::String, core::int>? #t61 = null;
+    if(!(#t61 == null)) {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = #t61{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t62 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String}, #t62.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+  } =>#t60;
+  core::Map<core::String, core::int> map90 = block {
+    final core::Map<core::String, core::int> #t63 = <core::String, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::String, core::int>> :sync-for-iterator = self::bar<core::String, core::int>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::int> #t64 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int>};
+        #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String}, #t64.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+      }
+    }
+  } =>#t63;
+  core::List<core::int> list100 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:153:32: Error: Can't assign spread elements of type 'num' to collection elements of type 'int'.
+  List<int> list100 = <int>[...listNum];
+                               ^");
+  core::Map<core::num, core::int> map100 = <core::num, core::int>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference2.dart:155:40: Error: Can't assign spread entry values of type 'num' to map entry values of type 'int'.
+  Map<num, int> map100 = <num, int>{...mapIntNum};
+                                       ^"};
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t65 = core::_GrowableList::•<core::int>(0);
+    {
+      core::Iterator<dynamic> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final dynamic #t66 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
+          #t65.{core::List::add}{Invariant}(#t67){(core::int) → void};
+        }
+      }
+    }
+  } =>#t65;
+  core::Map<core::num, core::int> map110 = block {
+    final core::Map<core::num, core::int> #t68 = <core::num, core::int>{};
+    {
+      core::Iterator<core::MapEntry<core::num, core::int>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::num, core::int>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::num, core::int>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<dynamic, dynamic> #t69 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::num, core::int>};
+        {
+          final core::num #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::num;
+          final core::int #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int;
+          #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num, core::int) → void};
+        }
+      }
+    }
+  } =>#t68;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/statements.dart b/pkg/front_end/testcases/general/statements.dart
index 6121514..e12e2fc 100644
--- a/pkg/front_end/testcases/general/statements.dart
+++ b/pkg/front_end/testcases/general/statements.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 foo() {
   try {
     return;
diff --git a/pkg/front_end/testcases/general/statements.dart.textual_outline.expect b/pkg/front_end/testcases/general/statements.dart.textual_outline.expect
index b23d16d..2431514 100644
--- a/pkg/front_end/testcases/general/statements.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/statements.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo() {}
 bar(d) async* {}
 main() {}
diff --git a/pkg/front_end/testcases/general/statements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/statements.dart.textual_outline_modelled.expect
index 77069be..3453492 100644
--- a/pkg/front_end/testcases/general/statements.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/statements.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bar(d) async* {}
 foo() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.expect b/pkg/front_end/testcases/general/statements.dart.weak.expect
index 8d3c256..8e6804c 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -12,9 +12,9 @@
   }
 }
 static method bar(dynamic d) → dynamic async* {
-  await for (dynamic x in d as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  await for (dynamic x in d as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
     yield x;
-    yield* x as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+    yield* x as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
   }
 }
 static method main() → dynamic {
@@ -26,10 +26,10 @@
     void x = core::print("Hello from do-while!");
   }
   while (false)
-  for (core::String* s in <core::String*>["Hello from for-in!"]) {
+  for (core::String s in <core::String>["Hello from for-in!"]) {
     core::print(s);
   }
-  for (core::String* s in <core::String*>["Hello from for-in without block!"])
+  for (core::String s in <core::String>["Hello from for-in without block!"])
     core::print(s);
   dynamic s;
   for (final dynamic #t1 in <dynamic>["Hello from for-in without decl!"]) {
@@ -45,15 +45,15 @@
     try {
       throw "Hello from rethrow!";
     }
-    on dynamic catch(final dynamic e) {
+    on core::Object catch(final core::Object e) {
       rethrow;
     }
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   self::foo();
-  core::bool* done = false;
+  core::bool done = false;
   while (!done) {
     done = true;
     core::print("Hello from while!");
@@ -64,7 +64,7 @@
   try {
     assert(false, "Hello from assert!");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   #L1:
@@ -128,13 +128,13 @@
         continue #L11;
       }
   }
-  core::int* i = 0;
+  core::int i = 0;
   #L13:
   do
     #L14:
     {
       core::print("Hello from do-while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L14;
       break #L13;
     }
@@ -145,7 +145,7 @@
     #L16:
     {
       core::print("Hello from while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L16;
       break #L15;
     }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.modular.expect b/pkg/front_end/testcases/general/statements.dart.weak.modular.expect
index 8d3c256..8e6804c 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -12,9 +12,9 @@
   }
 }
 static method bar(dynamic d) → dynamic async* {
-  await for (dynamic x in d as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+  await for (dynamic x in d as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>) {
     yield x;
-    yield* x as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+    yield* x as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
   }
 }
 static method main() → dynamic {
@@ -26,10 +26,10 @@
     void x = core::print("Hello from do-while!");
   }
   while (false)
-  for (core::String* s in <core::String*>["Hello from for-in!"]) {
+  for (core::String s in <core::String>["Hello from for-in!"]) {
     core::print(s);
   }
-  for (core::String* s in <core::String*>["Hello from for-in without block!"])
+  for (core::String s in <core::String>["Hello from for-in without block!"])
     core::print(s);
   dynamic s;
   for (final dynamic #t1 in <dynamic>["Hello from for-in without decl!"]) {
@@ -45,15 +45,15 @@
     try {
       throw "Hello from rethrow!";
     }
-    on dynamic catch(final dynamic e) {
+    on core::Object catch(final core::Object e) {
       rethrow;
     }
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   self::foo();
-  core::bool* done = false;
+  core::bool done = false;
   while (!done) {
     done = true;
     core::print("Hello from while!");
@@ -64,7 +64,7 @@
   try {
     assert(false, "Hello from assert!");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   #L1:
@@ -128,13 +128,13 @@
         continue #L11;
       }
   }
-  core::int* i = 0;
+  core::int i = 0;
   #L13:
   do
     #L14:
     {
       core::print("Hello from do-while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L14;
       break #L13;
     }
@@ -145,7 +145,7 @@
     #L16:
     {
       core::print("Hello from while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L16;
       break #L15;
     }
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.outline.expect b/pkg/front_end/testcases/general/statements.dart.weak.outline.expect
index d66ca8e..233d838 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
index 522ac94..012142b 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -13,11 +13,11 @@
   }
 }
 static method bar(dynamic d) → dynamic /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>* :controller;
+  asy::_AsyncStarStreamController<dynamic>? :controller;
   dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -30,8 +30,8 @@
         #L1:
         {
           {
-            asy::Stream<dynamic>* :stream = d as{TypeError,ForDynamic} asy::Stream<dynamic>*;
-            asy::_StreamIterator<dynamic>* :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+            asy::Stream<dynamic> :stream = d as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>;
+            asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
             try
               #L2:
               while (true) {
@@ -44,7 +44,7 @@
                       return null;
                     else
                       [yield] null;
-                    if(:controller.{asy::_AsyncStarStreamController::addStream}(x as{TypeError,ForDynamic} asy::Stream<dynamic>*){(asy::Stream<dynamic>) → core::bool})
+                    if(:controller.{asy::_AsyncStarStreamController::addStream}(x as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<dynamic>){(asy::Stream<dynamic>) → core::bool})
                       return null;
                     else
                       [yield] null;
@@ -62,7 +62,7 @@
         }
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
       }
     finally {
@@ -84,24 +84,24 @@
   }
   while (false)
   {
-    core::Iterator<core::String*>* :sync-for-iterator = core::_GrowableList::_literal1<core::String*>("Hello from for-in!").{core::Iterable::iterator}{core::Iterator<core::String*>*};
+    core::Iterator<core::String> :sync-for-iterator = core::_GrowableList::_literal1<core::String>("Hello from for-in!").{core::Iterable::iterator}{core::Iterator<core::String>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::String* s = :sync-for-iterator.{core::Iterator::current}{core::String*};
+      core::String s = :sync-for-iterator.{core::Iterator::current}{core::String};
       {
         core::print(s);
       }
     }
   }
   {
-    core::Iterator<core::String*>* :sync-for-iterator = core::_GrowableList::_literal1<core::String*>("Hello from for-in without block!").{core::Iterable::iterator}{core::Iterator<core::String*>*};
+    core::Iterator<core::String> :sync-for-iterator = core::_GrowableList::_literal1<core::String>("Hello from for-in without block!").{core::Iterable::iterator}{core::Iterator<core::String>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::String* s = :sync-for-iterator.{core::Iterator::current}{core::String*};
+      core::String s = :sync-for-iterator.{core::Iterator::current}{core::String};
       core::print(s);
     }
   }
   dynamic s;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl!").{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl!").{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -111,7 +111,7 @@
     }
   }
   {
-    core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl and block!").{core::Iterable::iterator}{core::Iterator<dynamic>*};
+    core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::_literal1<dynamic>("Hello from for-in without decl and block!").{core::Iterable::iterator}{core::Iterator<dynamic>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
       final dynamic #t5 = :sync-for-iterator.{core::Iterator::current}{dynamic};
       {
@@ -125,15 +125,15 @@
     try {
       throw "Hello from rethrow!";
     }
-    on dynamic catch(final dynamic e) {
+    on core::Object catch(final core::Object e) {
       rethrow;
     }
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   self::foo();
-  core::bool* done = false;
+  core::bool done = false;
   while (!done) {
     done = true;
     core::print("Hello from while!");
@@ -144,7 +144,7 @@
   try {
     assert(false, "Hello from assert!");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print(e);
   }
   #L3:
@@ -208,13 +208,13 @@
         continue #L13;
       }
   }
-  core::int* i = 0;
+  core::int i = 0;
   #L15:
   do
     #L16:
     {
       core::print("Hello from do-while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L16;
       break #L15;
     }
@@ -225,7 +225,7 @@
     #L18:
     {
       core::print("Hello from while!");
-      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+      if((i = i.{core::num::+}(1){(core::num) → core::int}).{core::num::<}(3){(core::num) → core::bool})
         break #L18;
       break #L17;
     }
diff --git a/pkg/front_end/testcases/general/static_setter.dart b/pkg/front_end/testcases/general/static_setter.dart
index e773018..4a9392b 100644
--- a/pkg/front_end/testcases/general/static_setter.dart
+++ b/pkg/front_end/testcases/general/static_setter.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo {}
 
 set foo(x) {}
diff --git a/pkg/front_end/testcases/general/static_setter.dart.textual_outline.expect b/pkg/front_end/testcases/general/static_setter.dart.textual_outline.expect
index 73b630c..e45f3a8 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {}
 
 set foo(x) {}
diff --git a/pkg/front_end/testcases/general/static_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/static_setter.dart.textual_outline_modelled.expect
index 73ad9d4..cad463e 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/static_setter.dart.weak.expect b/pkg/front_end/testcases/general/static_setter.dart.weak.expect
index 33c8de3..1429577 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.weak.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static set foo(dynamic x) → void {}
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect
index 33c8de3..1429577 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static set foo(dynamic x) → void {}
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/static_setter.dart.weak.outline.expect b/pkg/front_end/testcases/general/static_setter.dart.weak.outline.expect
index 950e232..f2d4094 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.weak.outline.expect
@@ -1,20 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static set foo(dynamic x) → void
   ;
diff --git a/pkg/front_end/testcases/general/static_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/static_setter.dart.weak.transformed.expect
index 33c8de3..1429577 100644
--- a/pkg/front_end/testcases/general/static_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/static_setter.dart.weak.transformed.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static set foo(dynamic x) → void {}
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/store_load.dart b/pkg/front_end/testcases/general/store_load.dart
index 1edbe1c8..7f8e421 100644
--- a/pkg/front_end/testcases/general/store_load.dart
+++ b/pkg/front_end/testcases/general/store_load.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class Foo {
   var _field;
 }
diff --git a/pkg/front_end/testcases/general/store_load.dart.textual_outline.expect b/pkg/front_end/testcases/general/store_load.dart.textual_outline.expect
index d97c46e..12677c1 100644
--- a/pkg/front_end/testcases/general/store_load.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   var _field;
 }
diff --git a/pkg/front_end/testcases/general/store_load.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/store_load.dart.textual_outline_modelled.expect
index aeef11b..d24c44c 100644
--- a/pkg/front_end/testcases/general/store_load.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar {
   var _field;
 }
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.expect b/pkg/front_end/testcases/general/store_load.dart.weak.expect
index b5b20a2..5fe805c 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.expect
@@ -1,75 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooValue extends core::Object {
-  synthetic constructor •() → self::FooValue*
+  synthetic constructor •() → self::FooValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class BarValue extends core::Object {
-  synthetic constructor •() → self::BarValue*
+  synthetic constructor •() → self::BarValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   foo.{self::Foo::_field} = new self::FooValue::•();
   dynamic fooValue = foo.{self::Foo::_field}{dynamic};
   core::print(fooValue);
-  self::Bar* bar = new self::Bar::•();
+  self::Bar bar = new self::Bar::•();
   bar.{self::Bar::_field} = new self::BarValue::•();
   dynamic barValue = bar.{self::Bar::_field}{dynamic};
   core::print(barValue);
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect b/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect
index b5b20a2..5fe805c 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect
@@ -1,75 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooValue extends core::Object {
-  synthetic constructor •() → self::FooValue*
+  synthetic constructor •() → self::FooValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class BarValue extends core::Object {
-  synthetic constructor •() → self::BarValue*
+  synthetic constructor •() → self::BarValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   foo.{self::Foo::_field} = new self::FooValue::•();
   dynamic fooValue = foo.{self::Foo::_field}{dynamic};
   core::print(fooValue);
-  self::Bar* bar = new self::Bar::•();
+  self::Bar bar = new self::Bar::•();
   bar.{self::Bar::_field} = new self::BarValue::•();
   dynamic barValue = bar.{self::Bar::_field}{dynamic};
   core::print(barValue);
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.outline.expect b/pkg/front_end/testcases/general/store_load.dart.weak.outline.expect
index 6aaf967..8e799c2 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.outline.expect
@@ -1,64 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
   field dynamic _field;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooValue extends core::Object {
-  synthetic constructor •() → self::FooValue*
+  synthetic constructor •() → self::FooValue
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
   field dynamic _field;
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class BarValue extends core::Object {
-  synthetic constructor •() → self::BarValue*
+  synthetic constructor •() → self::BarValue
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect b/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
index b5b20a2..5fe805c 100644
--- a/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.transformed.expect
@@ -1,75 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class FooValue extends core::Object {
-  synthetic constructor •() → self::FooValue*
+  synthetic constructor •() → self::FooValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
   field dynamic _field = null;
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class BarValue extends core::Object {
-  synthetic constructor •() → self::BarValue*
+  synthetic constructor •() → self::BarValue
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::Foo* foo = new self::Foo::•();
+  self::Foo foo = new self::Foo::•();
   foo.{self::Foo::_field} = new self::FooValue::•();
   dynamic fooValue = foo.{self::Foo::_field}{dynamic};
   core::print(fooValue);
-  self::Bar* bar = new self::Bar::•();
+  self::Bar bar = new self::Bar::•();
   bar.{self::Bar::_field} = new self::BarValue::•();
   dynamic barValue = bar.{self::Bar::_field}{dynamic};
   core::print(barValue);
diff --git a/pkg/front_end/testcases/general/stream_future.dart b/pkg/front_end/testcases/general/stream_future.dart
index 213cc5d..8904ea0 100644
--- a/pkg/front_end/testcases/general/stream_future.dart
+++ b/pkg/front_end/testcases/general/stream_future.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'dart:async';
 
 class Class {}
diff --git a/pkg/front_end/testcases/general/stream_future.dart.textual_outline.expect b/pkg/front_end/testcases/general/stream_future.dart.textual_outline.expect
index 58da8eb..b720b02 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 class Class {}
diff --git a/pkg/front_end/testcases/general/stream_future.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/stream_future.dart.textual_outline_modelled.expect
index 3799403..38f650e 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 Class returnClass() => new Class();
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.expect
index 2914b7b..b91c3c3 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,42 +15,32 @@
 import "dart:async";
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class*
+static method returnClass() → self::Class
   return new self::Class::•();
-static method returnFutureDynamic() → asy::Future<dynamic>* async 
+static method returnFutureDynamic() → asy::Future<dynamic> async /* futureValueType= dynamic */ 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method error() → asy::Stream<FutureOr<self::Class*>*>* async* {
+static method error() → asy::Stream<FutureOr<self::Class>> async* {
   yield invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
-        ^" in self::returnFutureDynamic() as{TypeError} FutureOr<self::Class*>*;
+        ^" in self::returnFutureDynamic() as{TypeError,ForNonNullableByDefault} FutureOr<self::Class>;
 }
-static method stream() → asy::Stream<FutureOr<self::Class*>*>* async* {
-  yield self::returnDynamic() as{TypeError,ForDynamic} FutureOr<self::Class*>*;
+static method stream() → asy::Stream<FutureOr<self::Class>> async* {
+  yield self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
   yield self::returnClass();
   yield self::returnFutureClass();
 }
-static method main() → dynamic async {
-  await for (FutureOr<self::Class*>* cls in self::stream()) {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await for (FutureOr<self::Class>cls in self::stream()) {
     core::print(cls);
   }
 }
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect
index 2914b7b..b91c3c3 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,42 +15,32 @@
 import "dart:async";
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class*
+static method returnClass() → self::Class
   return new self::Class::•();
-static method returnFutureDynamic() → asy::Future<dynamic>* async 
+static method returnFutureDynamic() → asy::Future<dynamic> async /* futureValueType= dynamic */ 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async /* futureValueType= self::Class */ 
   return new self::Class::•();
-static method error() → asy::Stream<FutureOr<self::Class*>*>* async* {
+static method error() → asy::Stream<FutureOr<self::Class>> async* {
   yield invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
-        ^" in self::returnFutureDynamic() as{TypeError} FutureOr<self::Class*>*;
+        ^" in self::returnFutureDynamic() as{TypeError,ForNonNullableByDefault} FutureOr<self::Class>;
 }
-static method stream() → asy::Stream<FutureOr<self::Class*>*>* async* {
-  yield self::returnDynamic() as{TypeError,ForDynamic} FutureOr<self::Class*>*;
+static method stream() → asy::Stream<FutureOr<self::Class>> async* {
+  yield self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
   yield self::returnClass();
   yield self::returnFutureClass();
 }
-static method main() → dynamic async {
-  await for (FutureOr<self::Class*>* cls in self::stream()) {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  await for (FutureOr<self::Class>cls in self::stream()) {
     core::print(cls);
   }
 }
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.outline.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.outline.expect
index f45cc85..cc394d3 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,30 +6,20 @@
 import "dart:async";
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method returnDynamic() → dynamic
   ;
-static method returnClass() → self::Class*
+static method returnClass() → self::Class
   ;
-static method returnFutureDynamic() → asy::Future<dynamic>* async 
+static method returnFutureDynamic() → asy::Future<dynamic> async 
   ;
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async 
   ;
-static method error() → asy::Stream<FutureOr<self::Class*>*>* async* 
+static method error() → asy::Stream<FutureOr<self::Class>> async* 
   ;
-static method stream() → asy::Stream<FutureOr<self::Class*>*>* async* 
+static method stream() → asy::Stream<FutureOr<self::Class>> async* 
   ;
 static method main() → dynamic async 
   ;
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
index 7730f84..5f23e4e 100644
--- a/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,31 +16,21 @@
 import "dart:async";
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method returnDynamic() → dynamic
   return new self::Class::•();
-static method returnClass() → self::Class*
+static method returnClass() → self::Class
   return new self::Class::•();
-static method returnFutureDynamic() → asy::Future<dynamic>* /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method returnFutureDynamic() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -52,22 +42,22 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClass() → asy::Future<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureClass() → asy::Future<self::Class> /* futureValueType= self::Class */ /* originally async */ {
+  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
   self::Class? :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -79,21 +69,21 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method error() → asy::Stream<FutureOr<self::Class*>*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<FutureOr<self::Class*>*>* :controller;
+static method error() → asy::Stream<FutureOr<self::Class>> /* originally async* */ {
+  asy::_AsyncStarStreamController<FutureOr<self::Class>>? :controller;
   dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -106,14 +96,14 @@
  - 'Future' is from 'dart:async'.
  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
   yield returnFutureDynamic();
-        ^" in self::returnFutureDynamic() as{TypeError} FutureOr<self::Class*>*){(FutureOr<self::Class*>*) → core::bool})
+        ^" in self::returnFutureDynamic() as{TypeError,ForNonNullableByDefault} FutureOr<self::Class>){(FutureOr<self::Class>) → core::bool})
             return null;
           else
             [yield] null;
         }
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
       }
     finally {
@@ -121,16 +111,16 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class*>*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class*>*>};
+  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class>>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class>>};
   return :controller_stream;
 }
-static method stream() → asy::Stream<FutureOr<self::Class*>*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<FutureOr<self::Class*>*>* :controller;
+static method stream() → asy::Stream<FutureOr<self::Class>> /* originally async* */ {
+  asy::_AsyncStarStreamController<FutureOr<self::Class>>? :controller;
   dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -139,22 +129,22 @@
       try {
         #L4:
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnDynamic() as{TypeError,ForDynamic} FutureOr<self::Class*>*){(FutureOr<self::Class*>*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>){(FutureOr<self::Class>) → core::bool})
             return null;
           else
             [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnClass()){(FutureOr<self::Class*>*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnClass()){(FutureOr<self::Class>) → core::bool})
             return null;
           else
             [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnFutureClass()){(FutureOr<self::Class*>*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}(self::returnFutureClass()){(FutureOr<self::Class>) → core::bool})
             return null;
           else
             [yield] null;
         }
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
       }
     finally {
@@ -162,17 +152,17 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class*>*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class*>*>};
+  :controller = new asy::_AsyncStarStreamController::•<FutureOr<self::Class>>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<FutureOr<self::Class>>};
   return :controller_stream;
 }
-static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -183,15 +173,15 @@
       #L5:
       {
         {
-          asy::Stream<FutureOr<self::Class*>*>* :stream = self::stream();
-          asy::_StreamIterator<FutureOr<self::Class*>*>* :for-iterator = new asy::_StreamIterator::•<FutureOr<self::Class*>*>(:stream);
+          asy::Stream<FutureOr<self::Class>> :stream = self::stream();
+          asy::_StreamIterator<FutureOr<self::Class>>? :for-iterator = new asy::_StreamIterator::•<FutureOr<self::Class>>(:stream);
           try
             #L6:
             while (true) {
               dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
               [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error) in null;
               if(_in::unsafeCast<core::bool>(:result_or_exception)) {
-                FutureOr<self::Class*>* cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class*>*};
+                FutureOr<self::Class>cls = :for-iterator.{asy::_StreamIterator::current}{FutureOr<self::Class>};
                 {
                   core::print(cls);
                 }
@@ -200,7 +190,7 @@
                 break #L6;
             }
           finally
-            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class*>*>?} == null)) {
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<FutureOr<self::Class>>?} == null)) {
               [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
               :result_or_exception;
             }
@@ -209,12 +199,12 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/stringliteral.dart b/pkg/front_end/testcases/general/stringliteral.dart
index 52791ab..bb1bc643 100644
--- a/pkg/front_end/testcases/general/stringliteral.dart
+++ b/pkg/front_end/testcases/general/stringliteral.dart
@@ -1,11 +1,12 @@
 // Copyright (c) 2016, 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.
+
 var color = 'brown';
 var thing = 'lazy dog';
 var phrase = "The quick $color fox\njumped over the $thing.\n";
 var adjacent = '$color$color$color';
 var linebreaks = '$color\n$color\n$color';
 var other = '$color\n is \n$color';
-// @dart=2.9
+
 main() {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart b/pkg/front_end/testcases/general/super_access_in_initializer.dart
index ee351d0..2bab9f4 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Super {
   bool get property => true;
 
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect
index 90a2cf1..5548e99 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Super {
   bool get property => true;
   Super(bool value);
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect
index 94cf602..b009d58 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class extends Super {
   Class(bool value)
       : assert(property),
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
index 651a9c4..f632d17 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,25 +22,15 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor •(core::bool* value) → self::Super*
+  constructor •(core::bool value) → self::Super
     : super core::Object::•()
     ;
-  get property() → core::bool*
+  get property() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends self::Super {
-  field core::bool* field;
-  constructor •(core::bool* value) → self::Class*
+  field core::bool field;
+  constructor •(core::bool value) → self::Class
     : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
       : assert(property),
                ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
@@ -49,7 +39,7 @@
         super(property);
               ^^^^^^^^")
     ;
-  constructor redirect() → self::Class*
+  constructor redirect() → self::Class
     : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
   Class.redirect() : this(property);
                           ^^^^^^^^")
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect
index 651a9c4..f632d17 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,25 +22,15 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor •(core::bool* value) → self::Super*
+  constructor •(core::bool value) → self::Super
     : super core::Object::•()
     ;
-  get property() → core::bool*
+  get property() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends self::Super {
-  field core::bool* field;
-  constructor •(core::bool* value) → self::Class*
+  field core::bool field;
+  constructor •(core::bool value) → self::Class
     : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
       : assert(property),
                ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
@@ -49,7 +39,7 @@
         super(property);
               ^^^^^^^^")
     ;
-  constructor redirect() → self::Class*
+  constructor redirect() → self::Class
     : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
   Class.redirect() : this(property);
                           ^^^^^^^^")
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.outline.expect
index 3b22099..0dda552 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor •(core::bool* value) → self::Super*
+  constructor •(core::bool value) → self::Super
     ;
-  get property() → core::bool*
+  get property() → core::bool
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends self::Super {
-  field core::bool* field;
-  constructor •(core::bool* value) → self::Class*
+  field core::bool field;
+  constructor •(core::bool value) → self::Class
     ;
-  constructor redirect() → self::Class*
+  constructor redirect() → self::Class
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
index 651a9c4..f632d17 100644
--- a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,25 +22,15 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  constructor •(core::bool* value) → self::Super*
+  constructor •(core::bool value) → self::Super
     : super core::Object::•()
     ;
-  get property() → core::bool*
+  get property() → core::bool
     return true;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends self::Super {
-  field core::bool* field;
-  constructor •(core::bool* value) → self::Class*
+  field core::bool field;
+  constructor •(core::bool value) → self::Class
     : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
       : assert(property),
                ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
@@ -49,7 +39,7 @@
         super(property);
               ^^^^^^^^")
     ;
-  constructor redirect() → self::Class*
+  constructor redirect() → self::Class
     : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
   Class.redirect() : this(property);
                           ^^^^^^^^")
diff --git a/pkg/front_end/testcases/general/super_call.dart b/pkg/front_end/testcases/general/super_call.dart
index 0ba2666..fe0edf0 100644
--- a/pkg/front_end/testcases/general/super_call.dart
+++ b/pkg/front_end/testcases/general/super_call.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class A {
   int call(int x) => x * 2;
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_call.dart.textual_outline.expect
index c9282f5..08fd0e2 100644
--- a/pkg/front_end/testcases/general/super_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int call(int x) => x * 2;
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_call.dart.textual_outline_modelled.expect
index c9282f5..08fd0e2 100644
--- a/pkg/front_end/testcases/general/super_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int call(int x) => x * 2;
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.expect b/pkg/front_end/testcases/general/super_call.dart.weak.expect
index 1e7e27c..895bf30 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(2){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call(core::int x) → core::int
+    return x.{core::num::*}(2){(core::num) → core::int};
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(3){(core::num*) →* core::int*};
-  method call_super() → core::int* {
+  method call(core::int x) → core::int
+    return x.{core::num::*}(3){(core::num) → core::int};
+  method call_super() → core::int {
     return super.{self::A::call}(5);
   }
 }
 static method main() → dynamic {
-  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
+  assert(new self::B::•().{self::B::call_super}(){() → core::int} =={core::num::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect
index 1e7e27c..895bf30 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(2){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call(core::int x) → core::int
+    return x.{core::num::*}(2){(core::num) → core::int};
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(3){(core::num*) →* core::int*};
-  method call_super() → core::int* {
+  method call(core::int x) → core::int
+    return x.{core::num::*}(3){(core::num) → core::int};
+  method call_super() → core::int {
     return super.{self::A::call}(5);
   }
 }
 static method main() → dynamic {
-  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
+  assert(new self::B::•().{self::B::call_super}(){() → core::int} =={core::num::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_call.dart.weak.outline.expect
index 5ec03c1..0fcdffb 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method call(core::int* x) → core::int*
+  method call(core::int x) → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method call(core::int* x) → core::int*
+  method call(core::int x) → core::int
     ;
-  method call_super() → core::int*
+  method call_super() → core::int
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
index 1e7e27c..895bf30 100644
--- a/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.transformed.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(2){(core::num*) →* core::int*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method call(core::int x) → core::int
+    return x.{core::num::*}(2){(core::num) → core::int};
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  method call(core::int* x) → core::int*
-    return x.{core::num::*}(3){(core::num*) →* core::int*};
-  method call_super() → core::int* {
+  method call(core::int x) → core::int
+    return x.{core::num::*}(3){(core::num) → core::int};
+  method call_super() → core::int {
     return super.{self::A::call}(5);
   }
 }
 static method main() → dynamic {
-  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
+  assert(new self::B::•().{self::B::call_super}(){() → core::int} =={core::num::==}{(core::Object) → core::bool} 10);
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart b/pkg/front_end/testcases/general/super_nsm.dart
index b94b99e..d4cfc6d 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart
+++ b/pkg/front_end/testcases/general/super_nsm.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class I {
   interfaceMethod();
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.textual_outline.expect
index c9c9e06..39c0416 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class I {
   interfaceMethod();
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_nsm.dart.textual_outline_modelled.expect
index f127290..8dcf482 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class I {
   interfaceMethod();
 }
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
index 671d437..214ac1e 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.expect
@@ -1,53 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method interfaceMethod() → dynamic;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "C";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "D";
   method dMethod() → dynamic
     return super.{self::C::interfaceMethod}();
 }
 static method main() → dynamic {
-  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
-  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
+  dynamic result = new self::D::•().{self::D::dMethod}(){() → dynamic};
+  if(!(result =={core::Object::==}{(core::Object) → core::bool} "D"))
     throw "Expected 'D' but got: '${result}'";
 }
 
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect
index 671d437..214ac1e 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect
@@ -1,53 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method interfaceMethod() → dynamic;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "C";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "D";
   method dMethod() → dynamic
     return super.{self::C::interfaceMethod}();
 }
 static method main() → dynamic {
-  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
-  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
+  dynamic result = new self::D::•().{self::D::dMethod}(){() → dynamic};
+  if(!(result =={core::Object::==}{(core::Object) → core::bool} "D"))
     throw "Expected 'D' but got: '${result}'";
 }
 
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
index 436dba3..a2bcec4 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.outline.expect
@@ -1,43 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
   abstract method interfaceMethod() → dynamic;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   method dMethod() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
index 671d437..214ac1e 100644
--- a/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.transformed.expect
@@ -1,53 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method interfaceMethod() → dynamic;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends core::Object implements self::I {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "C";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder method interfaceMethod() → dynamic
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return "D";
   method dMethod() → dynamic
     return super.{self::C::interfaceMethod}();
 }
 static method main() → dynamic {
-  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
-  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
+  dynamic result = new self::D::•().{self::D::dMethod}(){() → dynamic};
+  if(!(result =={core::Object::==}{(core::Object) → core::bool} "D"))
     throw "Expected 'D' but got: '${result}'";
 }
 
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart b/pkg/front_end/testcases/general/super_set_abstract.dart
index a77248f..2bc0c7d 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class SuperClass {
   void set setter(int o) {}
 }
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect
index c75d50d..0310022 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class SuperClass {
   void set setter(int o) {}
 }
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect
index 11095ba..2833ed3 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Class extends SuperClass {
   void set setter(Object o);
 }
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
index 096efc9..3585745 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,35 +10,25 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::int* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  abstract set setter(core::Object* o) → void;
+  abstract set setter(core::Object o) → void;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(core::Object* o) → void {
+  set setter(core::Object o) → void {
     super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     super.setter = '\$o';
-                       ^" in "${o}" as{TypeError} core::int*;
+                       ^" in "${o}" as{TypeError,ForNonNullableByDefault} core::int;
   }
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect
index 096efc9..3585745 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,35 +10,25 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::int* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  abstract set setter(core::Object* o) → void;
+  abstract set setter(core::Object o) → void;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(core::Object* o) → void {
+  set setter(core::Object o) → void {
     super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     super.setter = '\$o';
-                       ^" in "${o}" as{TypeError} core::int*;
+                       ^" in "${o}" as{TypeError,ForNonNullableByDefault} core::int;
   }
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.outline.expect
index 265157d..8a4084c 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     ;
-  set setter(core::int* o) → void
+  set setter(core::int o) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract set setter(core::Object* o) → void;
+  abstract set setter(core::Object o) → void;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     ;
-  set setter(core::Object* o) → void
+  set setter(core::Object o) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
index 096efc9..3585745 100644
--- a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,35 +10,25 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::int* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::int o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  abstract set setter(core::Object* o) → void;
+  abstract set setter(core::Object o) → void;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(core::Object* o) → void {
+  set setter(core::Object o) → void {
     super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     super.setter = '\$o';
-                       ^" in "${o}" as{TypeError} core::int*;
+                       ^" in "${o}" as{TypeError,ForNonNullableByDefault} core::int;
   }
 }
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart b/pkg/front_end/testcases/general/super_set_covariant.dart
index a7d4d45..f2e1229 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class SuperClass {
   void set setter(Object o) {}
 }
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect
index f611304..8a079ae 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class SuperClass {
   void set setter(Object o) {}
 }
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect
index 8ec925e..b6f108c 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Class extends SuperClass {
   void set setter(covariant int o);
 }
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
index fede2f5..8b391e4 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::Object* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::Object o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::Object o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(covariant-by-declaration core::int* o) → void {
+  set setter(covariant-by-declaration core::int o) → void {
     super.{self::Class::setter} = "${o}";
   }
 }
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect
index fede2f5..8b391e4 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::Object* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::Object o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::Object o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(covariant-by-declaration core::int* o) → void {
+  set setter(covariant-by-declaration core::int o) → void {
     super.{self::Class::setter} = "${o}";
   }
 }
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
index 84045f4..c2a93cb 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     ;
-  set setter(core::Object* o) → void
+  set setter(core::Object o) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::Object o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     ;
-  set setter(covariant-by-declaration core::int* o) → void
+  set setter(covariant-by-declaration core::int o) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
index fede2f5..8b391e4 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  set setter(core::Object* o) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set setter(core::Object o) → void {}
 }
 abstract class Class extends self::SuperClass {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::Object o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
-  synthetic constructor •() → self::SubClass*
+  synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  set setter(covariant-by-declaration core::int* o) → void {
+  set setter(covariant-by-declaration core::int o) → void {
     super.{self::Class::setter} = "${o}";
   }
 }
diff --git a/pkg/front_end/testcases/general/tabs.dart b/pkg/front_end/testcases/general/tabs.dart
index 32b56da..17daaf4 100644
--- a/pkg/front_end/testcases/general/tabs.dart
+++ b/pkg/front_end/testcases/general/tabs.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Test that error messages are indented correctly
 // in the presence of tabs.
 
diff --git a/pkg/front_end/testcases/general/tabs.dart.textual_outline.expect b/pkg/front_end/testcases/general/tabs.dart.textual_outline.expect
index 001308b..ec6b9e0 100644
--- a/pkg/front_end/testcases/general/tabs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/tabs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/tabs.dart.textual_outline_modelled.expect
index 38df08d..f67dbb0 100644
--- a/pkg/front_end/testcases/general/tabs.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 test() {}
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.expect b/pkg/front_end/testcases/general/tabs.dart.weak.expect
index c69fb6b..75f5781 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect b/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect
index c69fb6b..75f5781 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.outline.expect b/pkg/front_end/testcases/general/tabs.dart.weak.outline.expect
index a29647d..64923de 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
index c69fb6b..75f5781 100644
--- a/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/this_field_call.dart b/pkg/front_end/testcases/general/this_field_call.dart
index b7b47d6..8b26b24 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart
+++ b/pkg/front_end/testcases/general/this_field_call.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A<T> {
   void Function(T) f;
   A(this.f);
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/this_field_call.dart.textual_outline.expect
index 116a8da..eb3e361 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   void Function(T) f;
   A(this.f);
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/this_field_call.dart.textual_outline_modelled.expect
index 4b5395b..b5116cc 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   A(this.f);
   foo(T x) => this.f(x);
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
index 1156174..0512ad4 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}{(self::A::T%) → void}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect
index 1156174..0512ad4 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}{(self::A::T%) → void}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
index 5ef3cd8..71acb0c 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T% x) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
index 1156174..0512ad4 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  field (self::A::T*) →* void f;
-  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field (self::A::T%) → void f;
+  constructor •((self::A::T%) → void f) → self::A<self::A::T%>
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(covariant-by-class self::A::T* x) → dynamic
-    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo(covariant-by-class self::A::T% x) → dynamic
+    return let final self::A::T% #t1 = x in this.{self::A::f}{(self::A::T%) → void}(#t1){(self::A::T%) → void};
 }
 static method main() → dynamic {
-  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+  new self::A::•<core::int>((core::int x) → void {}).{self::A::foo}(3){(core::int) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart b/pkg/front_end/testcases/general/three_typedefs_loop.dart
index da2c06d..d4f0110 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart
@@ -1,7 +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.
-// @dart=2.9
+
 // The test for recursive typedef declaration involving multiple typedefs.
 
 typedef Foo<T> = void Function(Bar<T>);
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline.expect
index 37b7fd2..0e6af39 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef Foo<T> = void Function(Bar<T>);
 typedef Bar<T> = void Function(Baz<T>);
 typedef Baz<T> = void Function(Foo<T>);
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline_modelled.expect
index 3164897..d241b1c 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef Bar<T> = void Function(Baz<T>);
 typedef Baz<T> = void Function(Foo<T>);
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.expect
index bd2fff9..5a5dbe0 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
-typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
-typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
+typedef Foo<unrelated T extends core::Object? = dynamic> = invalid-type;
+typedef Bar<unrelated T extends core::Object? = dynamic> = ((invalid-type) → void) → void;
+typedef Baz<unrelated T extends core::Object? = dynamic> = (invalid-type) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect
index bd2fff9..5a5dbe0 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
-typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
-typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
+typedef Foo<unrelated T extends core::Object? = dynamic> = invalid-type;
+typedef Bar<unrelated T extends core::Object? = dynamic> = ((invalid-type) → void) → void;
+typedef Baz<unrelated T extends core::Object? = dynamic> = (invalid-type) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.outline.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.outline.expect
index f030616..c40c627 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,8 +13,8 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
-typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
-typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
+typedef Foo<unrelated T extends core::Object? = dynamic> = invalid-type;
+typedef Bar<unrelated T extends core::Object? = dynamic> = ((invalid-type) → void) → void;
+typedef Baz<unrelated T extends core::Object? = dynamic> = (invalid-type) → void;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.transformed.expect
index bd2fff9..5a5dbe0 100644
--- a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,7 +13,7 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
-typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
-typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
+typedef Foo<unrelated T extends core::Object? = dynamic> = invalid-type;
+typedef Bar<unrelated T extends core::Object? = dynamic> = ((invalid-type) → void) → void;
+typedef Baz<unrelated T extends core::Object? = dynamic> = (invalid-type) → void;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart b/pkg/front_end/testcases/general/top_level_accessors.dart
index dc770bb..a0dbc51 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 library top_level_accessors;
 
 part 'top_level_accessors_part.dart';
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline.expect
index 679edd0..184dba8 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library top_level_accessors;
 
 part 'top_level_accessors_part.dart';
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline_modelled.expect
index 679edd0..184dba8 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library top_level_accessors;
 
 part 'top_level_accessors_part.dart';
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.expect
index 9898bf6..837a217 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.expect
@@ -1,12 +1,12 @@
-library top_level_accessors;
+library top_level_accessors /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 part top_level_accessors_part.dart;
-static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int* code) → void {
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void {
   core::print(code);
 }
-static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int*
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   return 0;
 static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic {
   self::exitCode = 42;
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect
index 9898bf6..837a217 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect
@@ -1,12 +1,12 @@
-library top_level_accessors;
+library top_level_accessors /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 part top_level_accessors_part.dart;
-static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int* code) → void {
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void {
   core::print(code);
 }
-static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int*
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   return 0;
 static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic {
   self::exitCode = 42;
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.outline.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.outline.expect
index bbdb2a7..298c657 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library top_level_accessors;
+library top_level_accessors /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 part top_level_accessors_part.dart;
-static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int* code) → void
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void
   ;
-static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int*
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   ;
 static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.transformed.expect
index 9898bf6..837a217 100644
--- a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library top_level_accessors;
+library top_level_accessors /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 part top_level_accessors_part.dart;
-static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int* code) → void {
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int code) → void {
   core::print(code);
 }
-static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int*
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int
   return 0;
 static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic {
   self::exitCode = 42;
diff --git a/pkg/front_end/testcases/general/top_level_accessors_part.dart b/pkg/front_end/testcases/general/top_level_accessors_part.dart
index e7d124c..6aeed08 100644
--- a/pkg/front_end/testcases/general/top_level_accessors_part.dart
+++ b/pkg/front_end/testcases/general/top_level_accessors_part.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 part of top_level_accessors;
 
 void set exitCode(int code) {
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart b/pkg/front_end/testcases/general/top_level_variance2.dart
new file mode 100644
index 0000000..f9f1b69
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart
@@ -0,0 +1,163 @@
+// 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.
+
+// Testing that instantiate-to-bound and super-bounded types take the
+// variance of formal type parameters into account when a type alias is
+// used as a raw type.
+
+// Standard type comparison support.
+
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw '';
+
+// Material specific to this test.
+
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class B<X> {}
+
+void testTopLevel(
+    Fcov source1,
+    Fcon source2,
+    Finv source3,
+    FcovBound source4,
+    FconBound source5,
+    FinvBound source6,
+    FcovCyclicBound source7,
+    FconCyclicBound source8,
+    FcovCyclicCoBound source10,
+    FconCyclicCoBound source11,
+    FinvCyclicCoBound source12) {
+  // I2b initial value for a covariant type parameter w/o bound: dynamic.
+  var fsource1 = toF(source1);
+  F<Fcov<dynamic>> target1 = fsource1;
+
+  // I2b initial value for a contravariant type parameter w/o bound: dynamic.
+  var fsource2 = toF(source2);
+  F<Fcon<dynamic>> target2 = fsource2;
+
+  // I2b initial value for an invariant type parameter w/o bound: dynamic.
+  var fsource3 = toF(source3);
+  F<Finv<dynamic>> target3 = fsource3;
+
+  // I2b initial value for a covariant type parameter: bound.
+  var fsource4 = toF(source4);
+  F<FcovBound<num>> target4 = fsource4;
+
+  // I2b initial value for a contravariant type parameter: bound.
+  var fsource5 = toF(source5);
+  F<FconBound<num>> target5 = fsource5;
+
+  // I2b initial value for an invariant type parameter: bound.
+  var fsource6 = toF(source6);
+  F<FinvBound<num>> target6 = fsource6;
+
+  // I2b for a covariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing covariant occurrence by `dynamic`. Resulting type
+  // is super-bounded: FcovCyclicBound<A<Null>> is regular-bounded.
+  var fsource7 = toF(source7);
+  F<FcovCyclicBound<A<dynamic>>> target7 = fsource7;
+
+  // I2b for a contravariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing contravariant occurrence by `Never`. Resulting type
+  // is super-bounded: FconCyclicBound<A<Object>> is regular-bounded.
+  var fsource8 = toF(source8);
+  F<FconCyclicBound<A<Never>>> target8 = fsource8;
+
+  // I2b for an invariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing invariant occurrence by `dynamic`. Resulting type is
+  // _not_ super-bounded: FinvCyclicBound<A<dynamic>> not regular-bounded.
+  FinvCyclicBound source9; //# 01: compile-time error
+  // var fsource9 = toF(source9);
+  // F<FinvCyclicBound<A<dynamic>>> target9 = fsource9;
+
+  // I2b for a covariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing contravariant occurrence by `Never`. Resulting type
+  // is super-bounded: FcovCyclicBound<Function(Object)> is regular-bounded.
+  var fsource10 = toF(source10);
+  F<FcovCyclicCoBound<Function(Never)>> target10 = fsource10;
+
+  // I2b for a contravariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing covariant occurrence by `dynamic`. Resulting type
+  // FconCyclicCoBound<Function(dynamic)> is regular-bounded.
+  var fsource11 = toF(source11);
+  F<FconCyclicCoBound<Function(dynamic)>> target11 = fsource11;
+
+  // I2b for an invariant type parameter w F-bound: Use bound, then break
+  // cycle by replacing invariant occurrence by `dynamic`. Resulting type
+  // F<FinvCyclicCoBound<Function(dynamic)>> is regular-bounded.
+  var fsource12 = toF(source12);
+  F<FinvCyclicCoBound<Function(dynamic)>> target12 = fsource12;
+}
+
+void testNested(
+    B<Fcov> source1,
+    B<Fcon> source2,
+    B<Finv> source3,
+    B<FcovBound> source4,
+    B<FconBound> source5,
+    B<FinvBound> source6,
+    B<FcovCyclicBound> source7,
+    B<FconCyclicBound> source8,
+    B<FcovCyclicCoBound> source10,
+    B<FconCyclicCoBound> source11,
+    B<FinvCyclicCoBound> source12) {
+  // Everything gets the same treatment when the cases from
+  // `testTopLevel` are duplicated at the nested level.
+
+  var fsource1 = toF(source1);
+  F<B<Fcov<dynamic>>> target1 = fsource1;
+
+  var fsource2 = toF(source2);
+  F<B<Fcon<dynamic>>> target2 = fsource2;
+
+  var fsource3 = toF(source3);
+  F<B<Finv<dynamic>>> target3 = fsource3;
+
+  var fsource4 = toF(source4);
+  F<B<FcovBound<num>>> target4 = fsource4;
+
+  var fsource5 = toF(source5);
+  F<B<FconBound<num>>> target5 = fsource5;
+
+  var fsource6 = toF(source6);
+  F<B<FinvBound<num>>> target6 = fsource6;
+
+  var fsource7 = toF(source7);
+  F<B<FcovCyclicBound<A<dynamic>>>> target7 = fsource7;
+
+  var fsource8 = toF(source8);
+  F<B<FconCyclicBound<A<Never>>>> target8 = fsource8;
+
+  B<FinvCyclicBound> source9; //# 02: compile-time error
+  // var fsource9 = toF(source9);
+  // F<B<FinvCyclicBound<A<dynamic>>>> target9 = fsource9;
+
+  var fsource10 = toF(source10);
+  F<B<FcovCyclicCoBound<Function(Never)>>> target10 = fsource10;
+
+  var fsource11 = toF(source11);
+  F<B<FconCyclicCoBound<Function(dynamic)>>> target11 = fsource11;
+
+  var fsource12 = toF(source12);
+  F<B<FinvCyclicCoBound<Function(dynamic)>>> target12 = fsource12;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline.expect
new file mode 100644
index 0000000..cc6feb2
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline.expect
@@ -0,0 +1,45 @@
+typedef F<X> = void Function<Y extends X>();
+F<X> toF<X>(X x) => throw '';
+typedef Fcov<X> = X Function();
+typedef Fcon<X> = Function(X);
+typedef Finv<X> = X Function(X);
+typedef FcovBound<X extends num> = X Function();
+typedef FconBound<X extends num> = Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+
+class A<X> {}
+
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+
+class B<X> {}
+
+void testTopLevel(
+    Fcov source1,
+    Fcon source2,
+    Finv source3,
+    FcovBound source4,
+    FconBound source5,
+    FinvBound source6,
+    FcovCyclicBound source7,
+    FconCyclicBound source8,
+    FcovCyclicCoBound source10,
+    FconCyclicCoBound source11,
+    FinvCyclicCoBound source12) {}
+void testNested(
+    B<Fcov> source1,
+    B<Fcon> source2,
+    B<Finv> source3,
+    B<FcovBound> source4,
+    B<FconBound> source5,
+    B<FinvBound> source6,
+    B<FcovCyclicBound> source7,
+    B<FconCyclicBound> source8,
+    B<FcovCyclicCoBound> source10,
+    B<FconCyclicCoBound> source11,
+    B<FinvCyclicCoBound> source12) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..688697a
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.textual_outline_modelled.expect
@@ -0,0 +1,44 @@
+F<X> toF<X>(X x) => throw '';
+
+class A<X> {}
+
+class B<X> {}
+
+main() {}
+typedef F<X> = void Function<Y extends X>();
+typedef Fcon<X> = Function(X);
+typedef FconBound<X extends num> = Function(X);
+typedef FconCyclicBound<X extends A<X>> = Function(X);
+typedef FconCyclicCoBound<X extends Function(X)> = Function(X);
+typedef Fcov<X> = X Function();
+typedef FcovBound<X extends num> = X Function();
+typedef FcovCyclicBound<X extends A<X>> = X Function();
+typedef FcovCyclicCoBound<X extends Function(X)> = X Function();
+typedef Finv<X> = X Function(X);
+typedef FinvBound<X extends num> = X Function(X);
+typedef FinvCyclicBound<X extends A<X>> = X Function(X);
+typedef FinvCyclicCoBound<X extends Function(X)> = X Function(X);
+void testNested(
+    B<Fcov> source1,
+    B<Fcon> source2,
+    B<Finv> source3,
+    B<FcovBound> source4,
+    B<FconBound> source5,
+    B<FinvBound> source6,
+    B<FcovCyclicBound> source7,
+    B<FconCyclicBound> source8,
+    B<FcovCyclicCoBound> source10,
+    B<FconCyclicCoBound> source11,
+    B<FinvCyclicCoBound> source12) {}
+void testTopLevel(
+    Fcov source1,
+    Fcon source2,
+    Finv source3,
+    FcovBound source4,
+    FconBound source5,
+    FinvBound source6,
+    FcovCyclicBound source7,
+    FconCyclicBound source8,
+    FcovCyclicCoBound source10,
+    FconCyclicCoBound source11,
+    FinvCyclicCoBound source12) {}
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.weak.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.expect
new file mode 100644
index 0000000..85c9d46
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTopLevel(() → dynamic source1, (dynamic) → dynamic source2, (dynamic) → dynamic source3, () → core::num source4, (core::num) → dynamic source5, (core::num) → core::num source6, () → self::A<dynamic> source7, (self::A<Never>) → dynamic source8, () → (Never) → dynamic source10, ((dynamic) → dynamic) → dynamic source11, ((dynamic) → dynamic) → (dynamic) → dynamic source12) → void {
+  <Y extends () → dynamic = dynamic>() → void fsource1 = self::toF<() → dynamic>(source1);
+  <Y extends () → dynamic = dynamic>() → void target1 = fsource1;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource2 = self::toF<(dynamic) → dynamic>(source2);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target2 = fsource2;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource3 = self::toF<(dynamic) → dynamic>(source3);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target3 = fsource3;
+  <Y extends () → core::num = dynamic>() → void fsource4 = self::toF<() → core::num>(source4);
+  <Y extends () → core::num = dynamic>() → void target4 = fsource4;
+  <Y extends (core::num) → dynamic = dynamic>() → void fsource5 = self::toF<(core::num) → dynamic>(source5);
+  <Y extends (core::num) → dynamic = dynamic>() → void target5 = fsource5;
+  <Y extends (core::num) → core::num = dynamic>() → void fsource6 = self::toF<(core::num) → core::num>(source6);
+  <Y extends (core::num) → core::num = dynamic>() → void target6 = fsource6;
+  <Y extends () → self::A<dynamic> = dynamic>() → void fsource7 = self::toF<() → self::A<dynamic>>(source7);
+  <Y extends () → self::A<dynamic> = dynamic>() → void target7 = fsource7;
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void fsource8 = self::toF<(self::A<Never>) → dynamic>(source8);
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void target8 = fsource8;
+  (self::A<dynamic>) → self::A<dynamic> source9;
+  <Y extends () → (Never) → dynamic = dynamic>() → void fsource10 = self::toF<() → (Never) → dynamic>(source10);
+  <Y extends () → (Never) → dynamic = dynamic>() → void target10 = fsource10;
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void fsource11 = self::toF<((dynamic) → dynamic) → dynamic>(source11);
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void target11 = fsource11;
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void fsource12 = self::toF<((dynamic) → dynamic) → (dynamic) → dynamic>(source12);
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void target12 = fsource12;
+}
+static method testNested(self::B<() → dynamic> source1, self::B<(dynamic) → dynamic> source2, self::B<(dynamic) → dynamic> source3, self::B<() → core::num> source4, self::B<(core::num) → dynamic> source5, self::B<(core::num) → core::num> source6, self::B<() → self::A<dynamic>> source7, self::B<(self::A<Never>) → dynamic> source8, self::B<() → (Never) → dynamic> source10, self::B<((dynamic) → dynamic) → dynamic> source11, self::B<((dynamic) → dynamic) → (dynamic) → dynamic> source12) → void {
+  <Y extends self::B<() → dynamic> = dynamic>() → void fsource1 = self::toF<self::B<() → dynamic>>(source1);
+  <Y extends self::B<() → dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource2 = self::toF<self::B<(dynamic) → dynamic>>(source2);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource3 = self::toF<self::B<(dynamic) → dynamic>>(source3);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<() → core::num> = dynamic>() → void fsource4 = self::toF<self::B<() → core::num>>(source4);
+  <Y extends self::B<() → core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void fsource5 = self::toF<self::B<(core::num) → dynamic>>(source5);
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void fsource6 = self::toF<self::B<(core::num) → core::num>>(source6);
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::B<() → self::A<dynamic>>>(source7);
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void fsource8 = self::toF<self::B<(self::A<Never>) → dynamic>>(source8);
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void target8 = fsource8;
+  self::B<(self::A<dynamic>) → self::A<dynamic>> source9;
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::B<() → (Never) → dynamic>>(source10);
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void fsource11 = self::toF<self::B<((dynamic) → dynamic) → dynamic>>(source11);
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void target11 = fsource11;
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void fsource12 = self::toF<self::B<((dynamic) → dynamic) → (dynamic) → dynamic>>(source12);
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void target12 = fsource12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.modular.expect
new file mode 100644
index 0000000..85c9d46
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.modular.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTopLevel(() → dynamic source1, (dynamic) → dynamic source2, (dynamic) → dynamic source3, () → core::num source4, (core::num) → dynamic source5, (core::num) → core::num source6, () → self::A<dynamic> source7, (self::A<Never>) → dynamic source8, () → (Never) → dynamic source10, ((dynamic) → dynamic) → dynamic source11, ((dynamic) → dynamic) → (dynamic) → dynamic source12) → void {
+  <Y extends () → dynamic = dynamic>() → void fsource1 = self::toF<() → dynamic>(source1);
+  <Y extends () → dynamic = dynamic>() → void target1 = fsource1;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource2 = self::toF<(dynamic) → dynamic>(source2);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target2 = fsource2;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource3 = self::toF<(dynamic) → dynamic>(source3);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target3 = fsource3;
+  <Y extends () → core::num = dynamic>() → void fsource4 = self::toF<() → core::num>(source4);
+  <Y extends () → core::num = dynamic>() → void target4 = fsource4;
+  <Y extends (core::num) → dynamic = dynamic>() → void fsource5 = self::toF<(core::num) → dynamic>(source5);
+  <Y extends (core::num) → dynamic = dynamic>() → void target5 = fsource5;
+  <Y extends (core::num) → core::num = dynamic>() → void fsource6 = self::toF<(core::num) → core::num>(source6);
+  <Y extends (core::num) → core::num = dynamic>() → void target6 = fsource6;
+  <Y extends () → self::A<dynamic> = dynamic>() → void fsource7 = self::toF<() → self::A<dynamic>>(source7);
+  <Y extends () → self::A<dynamic> = dynamic>() → void target7 = fsource7;
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void fsource8 = self::toF<(self::A<Never>) → dynamic>(source8);
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void target8 = fsource8;
+  (self::A<dynamic>) → self::A<dynamic> source9;
+  <Y extends () → (Never) → dynamic = dynamic>() → void fsource10 = self::toF<() → (Never) → dynamic>(source10);
+  <Y extends () → (Never) → dynamic = dynamic>() → void target10 = fsource10;
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void fsource11 = self::toF<((dynamic) → dynamic) → dynamic>(source11);
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void target11 = fsource11;
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void fsource12 = self::toF<((dynamic) → dynamic) → (dynamic) → dynamic>(source12);
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void target12 = fsource12;
+}
+static method testNested(self::B<() → dynamic> source1, self::B<(dynamic) → dynamic> source2, self::B<(dynamic) → dynamic> source3, self::B<() → core::num> source4, self::B<(core::num) → dynamic> source5, self::B<(core::num) → core::num> source6, self::B<() → self::A<dynamic>> source7, self::B<(self::A<Never>) → dynamic> source8, self::B<() → (Never) → dynamic> source10, self::B<((dynamic) → dynamic) → dynamic> source11, self::B<((dynamic) → dynamic) → (dynamic) → dynamic> source12) → void {
+  <Y extends self::B<() → dynamic> = dynamic>() → void fsource1 = self::toF<self::B<() → dynamic>>(source1);
+  <Y extends self::B<() → dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource2 = self::toF<self::B<(dynamic) → dynamic>>(source2);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource3 = self::toF<self::B<(dynamic) → dynamic>>(source3);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<() → core::num> = dynamic>() → void fsource4 = self::toF<self::B<() → core::num>>(source4);
+  <Y extends self::B<() → core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void fsource5 = self::toF<self::B<(core::num) → dynamic>>(source5);
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void fsource6 = self::toF<self::B<(core::num) → core::num>>(source6);
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::B<() → self::A<dynamic>>>(source7);
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void fsource8 = self::toF<self::B<(self::A<Never>) → dynamic>>(source8);
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void target8 = fsource8;
+  self::B<(self::A<dynamic>) → self::A<dynamic>> source9;
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::B<() → (Never) → dynamic>>(source10);
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void fsource11 = self::toF<self::B<((dynamic) → dynamic) → dynamic>>(source11);
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void target11 = fsource11;
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void fsource12 = self::toF<self::B<((dynamic) → dynamic) → (dynamic) → dynamic>>(source12);
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void target12 = fsource12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.weak.outline.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.outline.expect
new file mode 100644
index 0000000..9cacf36
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.outline.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  ;
+static method testTopLevel(() → dynamic source1, (dynamic) → dynamic source2, (dynamic) → dynamic source3, () → core::num source4, (core::num) → dynamic source5, (core::num) → core::num source6, () → self::A<dynamic> source7, (self::A<Never>) → dynamic source8, () → (Never) → dynamic source10, ((dynamic) → dynamic) → dynamic source11, ((dynamic) → dynamic) → (dynamic) → dynamic source12) → void
+  ;
+static method testNested(self::B<() → dynamic> source1, self::B<(dynamic) → dynamic> source2, self::B<(dynamic) → dynamic> source3, self::B<() → core::num> source4, self::B<(core::num) → dynamic> source5, self::B<(core::num) → core::num> source6, self::B<() → self::A<dynamic>> source7, self::B<(self::A<Never>) → dynamic> source8, self::B<() → (Never) → dynamic> source10, self::B<((dynamic) → dynamic) → dynamic> source11, self::B<((dynamic) → dynamic) → (dynamic) → dynamic> source12) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/top_level_variance2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.transformed.expect
new file mode 100644
index 0000000..85c9d46
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance2.dart.weak.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+typedef Fcov<X extends core::Object? = dynamic> = () → X%;
+typedef Fcon<contravariant X extends core::Object? = dynamic> = (X%) → dynamic;
+typedef Finv<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef FcovBound<X extends core::num> = () → X;
+typedef FconBound<contravariant X extends core::num> = (X) → dynamic;
+typedef FinvBound<invariant X extends core::num> = (X) → X;
+typedef FcovCyclicBound<X extends self::A<X> = self::A<dynamic>> = () → X;
+typedef FconCyclicBound<contravariant X extends self::A<X> = self::A<Never>> = (X) → dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X> = self::A<dynamic>> = (X) → X;
+typedef FcovCyclicCoBound<X extends (X) → dynamic = (Never) → dynamic> = () → X;
+typedef FconCyclicCoBound<contravariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X) → dynamic = (dynamic) → dynamic> = (X) → X;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method toF<X extends core::Object? = dynamic>(self::toF::X% x) → <Y extends self::toF::X% = dynamic>() → void
+  return throw "";
+static method testTopLevel(() → dynamic source1, (dynamic) → dynamic source2, (dynamic) → dynamic source3, () → core::num source4, (core::num) → dynamic source5, (core::num) → core::num source6, () → self::A<dynamic> source7, (self::A<Never>) → dynamic source8, () → (Never) → dynamic source10, ((dynamic) → dynamic) → dynamic source11, ((dynamic) → dynamic) → (dynamic) → dynamic source12) → void {
+  <Y extends () → dynamic = dynamic>() → void fsource1 = self::toF<() → dynamic>(source1);
+  <Y extends () → dynamic = dynamic>() → void target1 = fsource1;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource2 = self::toF<(dynamic) → dynamic>(source2);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target2 = fsource2;
+  <Y extends (dynamic) → dynamic = dynamic>() → void fsource3 = self::toF<(dynamic) → dynamic>(source3);
+  <Y extends (dynamic) → dynamic = dynamic>() → void target3 = fsource3;
+  <Y extends () → core::num = dynamic>() → void fsource4 = self::toF<() → core::num>(source4);
+  <Y extends () → core::num = dynamic>() → void target4 = fsource4;
+  <Y extends (core::num) → dynamic = dynamic>() → void fsource5 = self::toF<(core::num) → dynamic>(source5);
+  <Y extends (core::num) → dynamic = dynamic>() → void target5 = fsource5;
+  <Y extends (core::num) → core::num = dynamic>() → void fsource6 = self::toF<(core::num) → core::num>(source6);
+  <Y extends (core::num) → core::num = dynamic>() → void target6 = fsource6;
+  <Y extends () → self::A<dynamic> = dynamic>() → void fsource7 = self::toF<() → self::A<dynamic>>(source7);
+  <Y extends () → self::A<dynamic> = dynamic>() → void target7 = fsource7;
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void fsource8 = self::toF<(self::A<Never>) → dynamic>(source8);
+  <Y extends (self::A<Never>) → dynamic = dynamic>() → void target8 = fsource8;
+  (self::A<dynamic>) → self::A<dynamic> source9;
+  <Y extends () → (Never) → dynamic = dynamic>() → void fsource10 = self::toF<() → (Never) → dynamic>(source10);
+  <Y extends () → (Never) → dynamic = dynamic>() → void target10 = fsource10;
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void fsource11 = self::toF<((dynamic) → dynamic) → dynamic>(source11);
+  <Y extends ((dynamic) → dynamic) → dynamic = dynamic>() → void target11 = fsource11;
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void fsource12 = self::toF<((dynamic) → dynamic) → (dynamic) → dynamic>(source12);
+  <Y extends ((dynamic) → dynamic) → (dynamic) → dynamic = dynamic>() → void target12 = fsource12;
+}
+static method testNested(self::B<() → dynamic> source1, self::B<(dynamic) → dynamic> source2, self::B<(dynamic) → dynamic> source3, self::B<() → core::num> source4, self::B<(core::num) → dynamic> source5, self::B<(core::num) → core::num> source6, self::B<() → self::A<dynamic>> source7, self::B<(self::A<Never>) → dynamic> source8, self::B<() → (Never) → dynamic> source10, self::B<((dynamic) → dynamic) → dynamic> source11, self::B<((dynamic) → dynamic) → (dynamic) → dynamic> source12) → void {
+  <Y extends self::B<() → dynamic> = dynamic>() → void fsource1 = self::toF<self::B<() → dynamic>>(source1);
+  <Y extends self::B<() → dynamic> = dynamic>() → void target1 = fsource1;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource2 = self::toF<self::B<(dynamic) → dynamic>>(source2);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target2 = fsource2;
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void fsource3 = self::toF<self::B<(dynamic) → dynamic>>(source3);
+  <Y extends self::B<(dynamic) → dynamic> = dynamic>() → void target3 = fsource3;
+  <Y extends self::B<() → core::num> = dynamic>() → void fsource4 = self::toF<self::B<() → core::num>>(source4);
+  <Y extends self::B<() → core::num> = dynamic>() → void target4 = fsource4;
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void fsource5 = self::toF<self::B<(core::num) → dynamic>>(source5);
+  <Y extends self::B<(core::num) → dynamic> = dynamic>() → void target5 = fsource5;
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void fsource6 = self::toF<self::B<(core::num) → core::num>>(source6);
+  <Y extends self::B<(core::num) → core::num> = dynamic>() → void target6 = fsource6;
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void fsource7 = self::toF<self::B<() → self::A<dynamic>>>(source7);
+  <Y extends self::B<() → self::A<dynamic>> = dynamic>() → void target7 = fsource7;
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void fsource8 = self::toF<self::B<(self::A<Never>) → dynamic>>(source8);
+  <Y extends self::B<(self::A<Never>) → dynamic> = dynamic>() → void target8 = fsource8;
+  self::B<(self::A<dynamic>) → self::A<dynamic>> source9;
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void fsource10 = self::toF<self::B<() → (Never) → dynamic>>(source10);
+  <Y extends self::B<() → (Never) → dynamic> = dynamic>() → void target10 = fsource10;
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void fsource11 = self::toF<self::B<((dynamic) → dynamic) → dynamic>>(source11);
+  <Y extends self::B<((dynamic) → dynamic) → dynamic> = dynamic>() → void target11 = fsource11;
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void fsource12 = self::toF<self::B<((dynamic) → dynamic) → (dynamic) → dynamic>>(source12);
+  <Y extends self::B<((dynamic) → dynamic) → (dynamic) → dynamic> = dynamic>() → void target12 = fsource12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance_test.dart b/pkg/front_end/testcases/general/top_level_variance_test.dart
index 69a8f4d..c08e99b 100644
--- a/pkg/front_end/testcases/general/top_level_variance_test.dart
+++ b/pkg/front_end/testcases/general/top_level_variance_test.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 // Testing that instantiate-to-bound and super-bounded types take the
 // variance of formal type parameters into account when a type alias is
 // used as a raw type.
@@ -160,7 +162,4 @@
   F<B<FinvCyclicCoBound<Function(dynamic)>>> target12 = fsource12;
 }
 
-main() {
-  testTopLevel();
-  testNested();
-}
+main() {}
diff --git a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.expect b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.expect
index c61d2e4..c3f3efa 100644
--- a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.expect
@@ -119,7 +119,4 @@
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void fsource12 = self::toF<self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>*>(source12);
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void target12 = fsource12;
 }
-static method main() → dynamic {
-  self::testTopLevel();
-  self::testNested();
-}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect
index c61d2e4..c3f3efa 100644
--- a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect
@@ -119,7 +119,4 @@
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void fsource12 = self::toF<self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>*>(source12);
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void target12 = fsource12;
 }
-static method main() → dynamic {
-  self::testTopLevel();
-  self::testNested();
-}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.transformed.expect
index c61d2e4..c3f3efa 100644
--- a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.transformed.expect
@@ -119,7 +119,4 @@
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void fsource12 = self::toF<self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>*>(source12);
   <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void target12 = fsource12;
 }
-static method main() → dynamic {
-  self::testTopLevel();
-  self::testNested();
-}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart b/pkg/front_end/testcases/general/type_literal_as_metadata.dart
index e1a7a9f..1eafeef 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline.expect
index 0c2f948..54f0474 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline_modelled.expect
index 0c2f948..54f0474 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.expect
index 6039ee4..efd2822 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,36 +10,16 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
 @A
  ^"
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect
index 6039ee4..efd2822 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,36 +10,16 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
 @A
  ^"
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
index 49f26e6..da077fb 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,36 +10,16 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
 @A
- ^" in self::A*
+ ^" in self::A
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.transformed.expect
index 6039ee4..efd2822 100644
--- a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,36 +10,16 @@
 import "dart:core" as core;
 
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::A*
+  const constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 @invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
 @A
  ^"
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_of_null.dart b/pkg/front_end/testcases/general/type_of_null.dart
index 752287b..8a89e24 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart
+++ b/pkg/front_end/testcases/general/type_of_null.dart
@@ -1,31 +1,31 @@
 // 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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
-T map<T>(T Function() f1, T Function() f2) {}
+T map<T>(T Function() f1, T Function() f2) => throw '';
 
 id<T>(T t) => t;
 
 Null foo() => null;
 
-main() {
-  /*@ typeArgs=Null */ map(/*@ returnType=Null */ () {},
-      /*@ returnType=Null */ () => throw "hello");
-  /*@ typeArgs=Null */ map(/*@ returnType=Null */ () => throw "hello",
-      /*@ returnType=Null */ () {});
+test() {
+  /*@ typeArgs=Null */ map(
+      /*@ returnType=Null */ () {}, /*@returnType=Never*/ () => throw "hello");
+  /*@ typeArgs=Null */ map(
+      /*@returnType=Never*/ () => throw "hello", /*@ returnType=Null */ () {});
   Null Function() f = /*@ returnType=Null */ () {};
-  /*@ typeArgs=Null */ map(
-      foo, /*@ returnType=Null */ () => throw "hello");
-  /*@ typeArgs=Null */ map(
-      /*@ returnType=Null */ () => throw "hello", foo);
+  /*@ typeArgs=Null */ map(foo, /*@returnType=Never*/ () => throw "hello");
+  /*@ typeArgs=Null */ map(/*@returnType=Never*/ () => throw "hello", foo);
   /*@ typeArgs=Null */ map(/*@ returnType=Null */ () {
     return null;
-  }, /*@ returnType=Null */ () => throw "hello");
+  }, /*@returnType=Never*/ () => throw "hello");
 
-  /*@ typeArgs=Null */ map(/*@ returnType=Null */ () => throw "hello",
+  /*@ typeArgs=Null */ map(/*@returnType=Never*/ () => throw "hello",
       /*@ returnType=Null */ () {
     return null;
   });
-  /*@ typeArgs=() ->* Null */ id(/*@ returnType=Null */ () {});
+  /*@typeArgs=() -> Null*/ id(/*@ returnType=Null */ () {});
 }
+
+main() {}
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_of_null.dart.textual_outline.expect
index 117df44..a453890 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.textual_outline.expect
@@ -1,5 +1,5 @@
-// @dart = 2.9
-T map<T>(T Function() f1, T Function() f2) {}
+T map<T>(T Function() f1, T Function() f2) => throw '';
 id<T>(T t) => t;
 Null foo() => null;
+test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_of_null.dart.textual_outline_modelled.expect
index bfde047..231e22d 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.textual_outline_modelled.expect
@@ -1,5 +1,5 @@
-// @dart = 2.9
 Null foo() => null;
-T map<T>(T Function() f1, T Function() f2) {}
+T map<T>(T Function() f1, T Function() f2) => throw '';
 id<T>(T t) => t;
 main() {}
+test() {}
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.weak.expect b/pkg/front_end/testcases/general/type_of_null.dart.weak.expect
index 4f0b860..84c9c74 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.weak.expect
@@ -1,26 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method map<T extends core::Object* = dynamic>(() →* self::map::T* f1, () →* self::map::T* f2) → self::map::T* {}
-static method id<T extends core::Object* = dynamic>(self::id::T* t) → dynamic
+static method map<T extends core::Object? = dynamic>(() → self::map::T% f1, () → self::map::T% f2) → self::map::T%
+  return throw "";
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → dynamic
   return t;
 static method foo() → Null
   return null;
-static method main() → dynamic {
-  self::map<Null>(() → Null {}, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {});
-  () →* Null f = () → Null {};
-  self::map<Null>(#C1, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", #C1);
+static method test() → dynamic {
+  self::map<Null>(() → Null {}, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {});
+  () → Null f = () → Null {};
+  self::map<Null>(#C1, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", #C1);
   self::map<Null>(() → Null {
     return null;
-  }, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {
+  }, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {
     return null;
   });
-  self::id<() →* Null>(() → Null {});
+  self::id<() → Null>(() → Null {});
 }
+static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::foo
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect
index 4f0b860..84c9c74 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect
@@ -1,26 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method map<T extends core::Object* = dynamic>(() →* self::map::T* f1, () →* self::map::T* f2) → self::map::T* {}
-static method id<T extends core::Object* = dynamic>(self::id::T* t) → dynamic
+static method map<T extends core::Object? = dynamic>(() → self::map::T% f1, () → self::map::T% f2) → self::map::T%
+  return throw "";
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → dynamic
   return t;
 static method foo() → Null
   return null;
-static method main() → dynamic {
-  self::map<Null>(() → Null {}, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {});
-  () →* Null f = () → Null {};
-  self::map<Null>(#C1, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", #C1);
+static method test() → dynamic {
+  self::map<Null>(() → Null {}, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {});
+  () → Null f = () → Null {};
+  self::map<Null>(#C1, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", #C1);
   self::map<Null>(() → Null {
     return null;
-  }, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {
+  }, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {
     return null;
   });
-  self::id<() →* Null>(() → Null {});
+  self::id<() → Null>(() → Null {});
 }
+static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::foo
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_of_null.dart.weak.outline.expect
index b7c00566..72ae809 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.weak.outline.expect
@@ -1,12 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method map<T extends core::Object* = dynamic>(() →* self::map::T* f1, () →* self::map::T* f2) → self::map::T*
+static method map<T extends core::Object? = dynamic>(() → self::map::T% f1, () → self::map::T% f2) → self::map::T%
   ;
-static method id<T extends core::Object* = dynamic>(self::id::T* t) → dynamic
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → dynamic
   ;
 static method foo() → Null
   ;
+static method test() → dynamic
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_of_null.dart.weak.transformed.expect
index 4f0b860..84c9c74 100644
--- a/pkg/front_end/testcases/general/type_of_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_of_null.dart.weak.transformed.expect
@@ -1,26 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method map<T extends core::Object* = dynamic>(() →* self::map::T* f1, () →* self::map::T* f2) → self::map::T* {}
-static method id<T extends core::Object* = dynamic>(self::id::T* t) → dynamic
+static method map<T extends core::Object? = dynamic>(() → self::map::T% f1, () → self::map::T% f2) → self::map::T%
+  return throw "";
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → dynamic
   return t;
 static method foo() → Null
   return null;
-static method main() → dynamic {
-  self::map<Null>(() → Null {}, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {});
-  () →* Null f = () → Null {};
-  self::map<Null>(#C1, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", #C1);
+static method test() → dynamic {
+  self::map<Null>(() → Null {}, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {});
+  () → Null f = () → Null {};
+  self::map<Null>(#C1, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", #C1);
   self::map<Null>(() → Null {
     return null;
-  }, () → Null => throw "hello");
-  self::map<Null>(() → Null => throw "hello", () → Null {
+  }, () → Never => throw "hello");
+  self::map<Null>(() → Never => throw "hello", () → Null {
     return null;
   });
-  self::id<() →* Null>(() → Null {});
+  self::id<() → Null>(() → Null {});
 }
+static method main() → dynamic {}
 
 constants  {
   #C1 = static-tearoff self::foo
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart
index 8b645f8..0284905 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart
@@ -1,14 +1,14 @@
 // 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.
-// @dart=2.9
+
 abstract class Foo<T> {
   List<T> get list;
   void setList<T>(List<T> value);
 }
 
 class Bar implements Foo<int> {
-  List<int> list;
+  late List<int> list;
   void setList<int>(List<int> value) {
     list = value;
   }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline.expect
index 16d1105..9465953 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 abstract class Foo<T> {
   List<T> get list;
   void setList<T>(List<T> value);
 }
 
 class Bar implements Foo<int> {
-  List<int> list;
+  late List<int> list;
   void setList<int>(List<int> value) {}
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline_modelled.expect
index 16d1105..beb5eea 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.textual_outline_modelled.expect
@@ -1,10 +1,11 @@
-// @dart = 2.9
 abstract class Foo<T> {
   List<T> get list;
   void setList<T>(List<T> value);
 }
-
 class Bar implements Foo<int> {
+  ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
   List<int> list;
   void setList<int>(List<int> value) {}
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
index ea169b3..6618b46 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,44 +12,24 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  abstract get list() → core::List<self::Foo::T*>*;
-  abstract method setList<T extends core::Object* = dynamic>(core::List<self::Foo::setList::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get list() → core::List<self::Foo::T%>;
+  abstract method setList<T extends core::Object? = dynamic>(core::List<self::Foo::setList::T%> value) → void;
 }
-class Bar extends core::Object implements self::Foo<core::int*> {
-  field core::List<core::int*>* list = null;
-  synthetic constructor •() → self::Bar*
+class Bar extends core::Object implements self::Foo<core::int> {
+  late field core::List<core::int> list;
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
+  method setList<int extends core::Object? = dynamic>(core::List<self::Bar::setList::int%> value) → void {
     this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
  - 'List' is from 'dart:core'.
  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
  - 'int/*2*/' is from 'dart:core'.
     list = value;
-           ^" in value as{TypeError} core::List<core::int*>*;
+           ^" in value as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect
index ea169b3..6618b46 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,44 +12,24 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  abstract get list() → core::List<self::Foo::T*>*;
-  abstract method setList<T extends core::Object* = dynamic>(core::List<self::Foo::setList::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get list() → core::List<self::Foo::T%>;
+  abstract method setList<T extends core::Object? = dynamic>(core::List<self::Foo::setList::T%> value) → void;
 }
-class Bar extends core::Object implements self::Foo<core::int*> {
-  field core::List<core::int*>* list = null;
-  synthetic constructor •() → self::Bar*
+class Bar extends core::Object implements self::Foo<core::int> {
+  late field core::List<core::int> list;
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
+  method setList<int extends core::Object? = dynamic>(core::List<self::Bar::setList::int%> value) → void {
     this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
  - 'List' is from 'dart:core'.
  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
  - 'int/*2*/' is from 'dart:core'.
     list = value;
-           ^" in value as{TypeError} core::List<core::int*>*;
+           ^" in value as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.outline.expect
index c0e0f1c..95c0159 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     ;
-  abstract get list() → core::List<self::Foo::T*>*;
-  abstract method setList<T extends core::Object* = dynamic>(core::List<self::Foo::setList::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get list() → core::List<self::Foo::T%>;
+  abstract method setList<T extends core::Object? = dynamic>(core::List<self::Foo::setList::T%> value) → void;
 }
-class Bar extends core::Object implements self::Foo<core::int*> {
-  field core::List<core::int*>* list;
-  synthetic constructor •() → self::Bar*
+class Bar extends core::Object implements self::Foo<core::int> {
+  late field core::List<core::int> list;
+  synthetic constructor •() → self::Bar
     ;
-  method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void
+  method setList<int extends core::Object? = dynamic>(core::List<self::Bar::setList::int%> value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
index ea169b3..6618b46 100644
--- a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,44 +12,24 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Foo<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Foo<self::Foo::T*>*
+abstract class Foo<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  abstract get list() → core::List<self::Foo::T*>*;
-  abstract method setList<T extends core::Object* = dynamic>(core::List<self::Foo::setList::T*>* value) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract get list() → core::List<self::Foo::T%>;
+  abstract method setList<T extends core::Object? = dynamic>(core::List<self::Foo::setList::T%> value) → void;
 }
-class Bar extends core::Object implements self::Foo<core::int*> {
-  field core::List<core::int*>* list = null;
-  synthetic constructor •() → self::Bar*
+class Bar extends core::Object implements self::Foo<core::int> {
+  late field core::List<core::int> list;
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
+  method setList<int extends core::Object? = dynamic>(core::List<self::Bar::setList::int%> value) → void {
     this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
  - 'List' is from 'dart:core'.
  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
  - 'int/*2*/' is from 'dart:core'.
     list = value;
-           ^" in value as{TypeError} core::List<core::int*>*;
+           ^" in value as{TypeError,ForNonNullableByDefault} core::List<core::int>;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart
index b089e04..465d0bf 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart
@@ -1,40 +1,60 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo<U> {
-  static U foo1() { return null; }
-  static List<U> foo1Prime() { return null; }
-  static void foo2(U x) { return null; }
-  static void foo2Prime(List<U> x) { return null; }
+  static U foo1() {
+    return null;
+  }
+
+  static List<U> foo1Prime() {
+    throw '';
+  }
+
+  static void foo2(U x) {}
+  static void foo2Prime(List<U> x) {}
   static void foo3() {
     U foo4;
     List<U> foo4Prime;
     void foo5(U y) => print(y);
     void foo5Prime(List<U> y) => print(y);
     U foo6() => null;
-    List<U> foo6Prime() => null;
-    void Function (U y) foo7 = (U y) => y;
-    void Function (List<U> y) foo7Prime = (List<U> y) => y;
+    List<U> foo6Prime() => throw '';
+    void Function(U y) foo7 = (U y) => y;
+    void Function(List<U> y) foo7Prime = (List<U> y) => y;
   }
-  static U Function() foo8() { return null; }
-  static List<U> Function() foo8Prime() { return null; }
-  static void Function(U) foo9() { return null; }
-  static void Function(List<U>) foo9Prime() { return null; }
-  static void foo10(U Function()) { return null; }
-  static void foo10Prime(List<U> Function()) { return null; }
+
+  static U Function() foo8() {
+    throw '';
+  }
+
+  static List<U> Function() foo8Prime() {
+    throw '';
+  }
+
+  static void Function(U) foo9() {}
+  static void Function(List<U>) foo9Prime() {}
+  static void foo10(U Function()) {}
+
+  static void foo10Prime(List<U> Function()) {}
+
   // old syntax: variable named "U" of a function called 'Function'.
-  static void foo11(void Function(U)) { return null; }
-  static void foo12(void Function(U) b) { return null; }
-  static void foo12Prime(void Function(List<U>) b) { return null; }
+  static void foo11(void Function(U)) {}
+
+  static void foo12(void Function(U) b) {}
+
+  static void foo12Prime(void Function(List<U>) b) {}
+
   // old syntax: variable named "b" of type "U" of a function called 'Function'.
-  static void foo13(void Function(U b)) { return null; }
+  static void foo13(void Function(U b)) {}
+
   // old syntax: variable named "b" of type "List<U>" of a function called 'Function'.
-  static void foo13Prime(void Function(List<U> b)) { return null; }
-  static U foo14 = null;
-  static List<U> foo14Prime = null;
-  static U Function(U) foo15 = null;
-  static List<U> Function(List<U>) foo15Prime = null;
+  static void foo13Prime(void Function(List<U> b)) {}
+
+  static late U foo14;
+  static late List<U> foo14Prime;
+  static late U Function(U) foo15;
+  static late List<U> Function(List<U>) foo15Prime;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline.expect
index a03a987..2967ac1 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo<U> {
   static U foo1() {}
   static List<U> foo1Prime() {}
@@ -16,10 +15,13 @@
   static void foo12Prime(void Function(List<U>) b) {}
   static void foo13(void Function(U b)) {}
   static void foo13Prime(void Function(List<U> b)) {}
-  static U foo14 = null;
-  static List<U> foo14Prime = null;
-  static U Function(U) foo15 = null;
-  static List<U> Function(List<U>) foo15Prime = null;
+  static late U ;
+  foo14;
+  static late List<U> (){}
+  foo14Prime;
+  static late U ;
+  Function(U) foo15;
+  static late List<U> (){}
+  Function(List<U>) foo15Prime;
 }
-
 main() {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline_modelled.expect
index fdfccad..531ae41 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo<U> {
   static List<U> Function() foo8Prime() {}
   static List<U> Function(List<U>) foo15Prime = null;
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.expect
index cb0d959..8f2941a 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.expect
@@ -1,206 +1,174 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:27:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:39:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:44:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:46:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:49:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:52:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:54:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:55:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:19:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:5: Error: Type variables can't be used in static members.
 //     U foo6() => null;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<U extends core::Object* = dynamic> extends core::Object {
-  static field invalid-type foo14 = null;
-  static field core::List<invalid-type>* foo14Prime = null;
-  static field (invalid-type) →* invalid-type foo15 = null;
-  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime = null;
-  synthetic constructor •() → self::Foo<self::Foo::U*>*
+class Foo<U extends core::Object? = dynamic> extends core::Object {
+  late static field invalid-type foo14;
+  late static field core::List<invalid-type> foo14Prime;
+  late static field (invalid-type) → invalid-type foo15;
+  late static field (core::List<invalid-type>) → core::List<invalid-type> foo15Prime;
+  synthetic constructor •() → self::Foo<self::Foo::U%>
     : super core::Object::•()
     ;
   static method foo1() → invalid-type {
     return null;
   }
-  static method foo1Prime() → core::List<invalid-type>* {
-    return null;
+  static method foo1Prime() → core::List<invalid-type> {
+    throw "";
   }
-  static method foo2(invalid-type x) → void {
-    return null;
-  }
-  static method foo2Prime(core::List<invalid-type>* x) → void {
-    return null;
-  }
+  static method foo2(invalid-type x) → void {}
+  static method foo2Prime(core::List<invalid-type> x) → void {}
   static method foo3() → void {
     invalid-type foo4;
-    core::List<invalid-type>* foo4Prime;
+    core::List<invalid-type> foo4Prime;
     function foo5(invalid-type y) → void
       return core::print(y);
-    function foo5Prime(core::List<invalid-type>* y) → void
+    function foo5Prime(core::List<invalid-type> y) → void
       return core::print(y);
     function foo6() → invalid-type
       return null;
-    function foo6Prime() → core::List<invalid-type>*
-      return null;
-    (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-    (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    function foo6Prime() → core::List<invalid-type>
+      return throw "";
+    (invalid-type) → void foo7 = (invalid-type y) → void => y;
+    (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
   }
-  static method foo8() → () →* invalid-type {
-    return null;
+  static method foo8() → () → invalid-type {
+    throw "";
   }
-  static method foo8Prime() → () →* core::List<invalid-type>* {
-    return null;
+  static method foo8Prime() → () → core::List<invalid-type> {
+    throw "";
   }
-  static method foo9() → (invalid-type) →* void {
-    return null;
-  }
-  static method foo9Prime() → (core::List<invalid-type>*) →* void {
-    return null;
-  }
-  static method foo10(() →* invalid-type Function) → void {
-    return null;
-  }
-  static method foo10Prime(() →* core::List<invalid-type>* Function) → void {
-    return null;
-  }
-  static method foo11((dynamic) →* void Function) → void {
-    return null;
-  }
-  static method foo12((invalid-type) →* void b) → void {
-    return null;
-  }
-  static method foo12Prime((core::List<invalid-type>*) →* void b) → void {
-    return null;
-  }
-  static method foo13((invalid-type) →* void Function) → void {
-    return null;
-  }
-  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-    return null;
-  }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method foo9() → (invalid-type) → void {}
+  static method foo9Prime() → (core::List<invalid-type>) → void {}
+  static method foo10(() → invalid-type Function) → void {}
+  static method foo10Prime(() → core::List<invalid-type> Function) → void {}
+  static method foo11((dynamic) → void Function) → void {}
+  static method foo12((invalid-type) → void b) → void {}
+  static method foo12Prime((core::List<invalid-type>) → void b) → void {}
+  static method foo13((invalid-type) → void Function) → void {}
+  static method foo13Prime((core::List<invalid-type>) → void Function) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect
index cb0d959..8f2941a 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect
@@ -1,206 +1,174 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:27:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:39:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:44:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:46:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:49:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:52:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:54:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:55:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:19:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:5: Error: Type variables can't be used in static members.
 //     U foo6() => null;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<U extends core::Object* = dynamic> extends core::Object {
-  static field invalid-type foo14 = null;
-  static field core::List<invalid-type>* foo14Prime = null;
-  static field (invalid-type) →* invalid-type foo15 = null;
-  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime = null;
-  synthetic constructor •() → self::Foo<self::Foo::U*>*
+class Foo<U extends core::Object? = dynamic> extends core::Object {
+  late static field invalid-type foo14;
+  late static field core::List<invalid-type> foo14Prime;
+  late static field (invalid-type) → invalid-type foo15;
+  late static field (core::List<invalid-type>) → core::List<invalid-type> foo15Prime;
+  synthetic constructor •() → self::Foo<self::Foo::U%>
     : super core::Object::•()
     ;
   static method foo1() → invalid-type {
     return null;
   }
-  static method foo1Prime() → core::List<invalid-type>* {
-    return null;
+  static method foo1Prime() → core::List<invalid-type> {
+    throw "";
   }
-  static method foo2(invalid-type x) → void {
-    return null;
-  }
-  static method foo2Prime(core::List<invalid-type>* x) → void {
-    return null;
-  }
+  static method foo2(invalid-type x) → void {}
+  static method foo2Prime(core::List<invalid-type> x) → void {}
   static method foo3() → void {
     invalid-type foo4;
-    core::List<invalid-type>* foo4Prime;
+    core::List<invalid-type> foo4Prime;
     function foo5(invalid-type y) → void
       return core::print(y);
-    function foo5Prime(core::List<invalid-type>* y) → void
+    function foo5Prime(core::List<invalid-type> y) → void
       return core::print(y);
     function foo6() → invalid-type
       return null;
-    function foo6Prime() → core::List<invalid-type>*
-      return null;
-    (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-    (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    function foo6Prime() → core::List<invalid-type>
+      return throw "";
+    (invalid-type) → void foo7 = (invalid-type y) → void => y;
+    (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
   }
-  static method foo8() → () →* invalid-type {
-    return null;
+  static method foo8() → () → invalid-type {
+    throw "";
   }
-  static method foo8Prime() → () →* core::List<invalid-type>* {
-    return null;
+  static method foo8Prime() → () → core::List<invalid-type> {
+    throw "";
   }
-  static method foo9() → (invalid-type) →* void {
-    return null;
-  }
-  static method foo9Prime() → (core::List<invalid-type>*) →* void {
-    return null;
-  }
-  static method foo10(() →* invalid-type Function) → void {
-    return null;
-  }
-  static method foo10Prime(() →* core::List<invalid-type>* Function) → void {
-    return null;
-  }
-  static method foo11((dynamic) →* void Function) → void {
-    return null;
-  }
-  static method foo12((invalid-type) →* void b) → void {
-    return null;
-  }
-  static method foo12Prime((core::List<invalid-type>*) →* void b) → void {
-    return null;
-  }
-  static method foo13((invalid-type) →* void Function) → void {
-    return null;
-  }
-  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-    return null;
-  }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method foo9() → (invalid-type) → void {}
+  static method foo9Prime() → (core::List<invalid-type>) → void {}
+  static method foo10(() → invalid-type Function) → void {}
+  static method foo10Prime(() → core::List<invalid-type> Function) → void {}
+  static method foo11((dynamic) → void Function) → void {}
+  static method foo12((invalid-type) → void b) → void {}
+  static method foo12Prime((core::List<invalid-type>) → void b) → void {}
+  static method foo13((invalid-type) → void Function) → void {}
+  static method foo13Prime((core::List<invalid-type>) → void Function) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.outline.expect
index 64cbbb3..94b0c97 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.outline.expect
@@ -1,139 +1,129 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:27:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:39:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:44:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:46:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:49:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:52:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:54:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:55:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<U extends core::Object* = dynamic> extends core::Object {
-  static field invalid-type foo14;
-  static field core::List<invalid-type>* foo14Prime;
-  static field (invalid-type) →* invalid-type foo15;
-  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime;
-  synthetic constructor •() → self::Foo<self::Foo::U*>*
+class Foo<U extends core::Object? = dynamic> extends core::Object {
+  late static field invalid-type foo14;
+  late static field core::List<invalid-type> foo14Prime;
+  late static field (invalid-type) → invalid-type foo15;
+  late static field (core::List<invalid-type>) → core::List<invalid-type> foo15Prime;
+  synthetic constructor •() → self::Foo<self::Foo::U%>
     ;
   static method foo1() → invalid-type
     ;
-  static method foo1Prime() → core::List<invalid-type>*
+  static method foo1Prime() → core::List<invalid-type>
     ;
   static method foo2(invalid-type x) → void
     ;
-  static method foo2Prime(core::List<invalid-type>* x) → void
+  static method foo2Prime(core::List<invalid-type> x) → void
     ;
   static method foo3() → void
     ;
-  static method foo8() → () →* invalid-type
+  static method foo8() → () → invalid-type
     ;
-  static method foo8Prime() → () →* core::List<invalid-type>*
+  static method foo8Prime() → () → core::List<invalid-type>
     ;
-  static method foo9() → (invalid-type) →* void
+  static method foo9() → (invalid-type) → void
     ;
-  static method foo9Prime() → (core::List<invalid-type>*) →* void
+  static method foo9Prime() → (core::List<invalid-type>) → void
     ;
-  static method foo10(() →* invalid-type Function) → void
+  static method foo10(() → invalid-type Function) → void
     ;
-  static method foo10Prime(() →* core::List<invalid-type>* Function) → void
+  static method foo10Prime(() → core::List<invalid-type> Function) → void
     ;
-  static method foo11((dynamic) →* void Function) → void
+  static method foo11((dynamic) → void Function) → void
     ;
-  static method foo12((invalid-type) →* void b) → void
+  static method foo12((invalid-type) → void b) → void
     ;
-  static method foo12Prime((core::List<invalid-type>*) →* void b) → void
+  static method foo12Prime((core::List<invalid-type>) → void b) → void
     ;
-  static method foo13((invalid-type) →* void Function) → void
+  static method foo13((invalid-type) → void Function) → void
     ;
-  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void
+  static method foo13Prime((core::List<invalid-type>) → void Function) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.transformed.expect
index cb0d959..8f2941a 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.transformed.expect
@@ -1,206 +1,174 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:27:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:39:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:44:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:46:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:49:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:52:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:54:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:55:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:56:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:57:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:19:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:5: Error: Type variables can't be used in static members.
 //     U foo6() => null;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-class Foo<U extends core::Object* = dynamic> extends core::Object {
-  static field invalid-type foo14 = null;
-  static field core::List<invalid-type>* foo14Prime = null;
-  static field (invalid-type) →* invalid-type foo15 = null;
-  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime = null;
-  synthetic constructor •() → self::Foo<self::Foo::U*>*
+class Foo<U extends core::Object? = dynamic> extends core::Object {
+  late static field invalid-type foo14;
+  late static field core::List<invalid-type> foo14Prime;
+  late static field (invalid-type) → invalid-type foo15;
+  late static field (core::List<invalid-type>) → core::List<invalid-type> foo15Prime;
+  synthetic constructor •() → self::Foo<self::Foo::U%>
     : super core::Object::•()
     ;
   static method foo1() → invalid-type {
     return null;
   }
-  static method foo1Prime() → core::List<invalid-type>* {
-    return null;
+  static method foo1Prime() → core::List<invalid-type> {
+    throw "";
   }
-  static method foo2(invalid-type x) → void {
-    return null;
-  }
-  static method foo2Prime(core::List<invalid-type>* x) → void {
-    return null;
-  }
+  static method foo2(invalid-type x) → void {}
+  static method foo2Prime(core::List<invalid-type> x) → void {}
   static method foo3() → void {
     invalid-type foo4;
-    core::List<invalid-type>* foo4Prime;
+    core::List<invalid-type> foo4Prime;
     function foo5(invalid-type y) → void
       return core::print(y);
-    function foo5Prime(core::List<invalid-type>* y) → void
+    function foo5Prime(core::List<invalid-type> y) → void
       return core::print(y);
     function foo6() → invalid-type
       return null;
-    function foo6Prime() → core::List<invalid-type>*
-      return null;
-    (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-    (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    function foo6Prime() → core::List<invalid-type>
+      return throw "";
+    (invalid-type) → void foo7 = (invalid-type y) → void => y;
+    (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
   }
-  static method foo8() → () →* invalid-type {
-    return null;
+  static method foo8() → () → invalid-type {
+    throw "";
   }
-  static method foo8Prime() → () →* core::List<invalid-type>* {
-    return null;
+  static method foo8Prime() → () → core::List<invalid-type> {
+    throw "";
   }
-  static method foo9() → (invalid-type) →* void {
-    return null;
-  }
-  static method foo9Prime() → (core::List<invalid-type>*) →* void {
-    return null;
-  }
-  static method foo10(() →* invalid-type Function) → void {
-    return null;
-  }
-  static method foo10Prime(() →* core::List<invalid-type>* Function) → void {
-    return null;
-  }
-  static method foo11((dynamic) →* void Function) → void {
-    return null;
-  }
-  static method foo12((invalid-type) →* void b) → void {
-    return null;
-  }
-  static method foo12Prime((core::List<invalid-type>*) →* void b) → void {
-    return null;
-  }
-  static method foo13((invalid-type) →* void Function) → void {
-    return null;
-  }
-  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-    return null;
-  }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  static method foo9() → (invalid-type) → void {}
+  static method foo9Prime() → (core::List<invalid-type>) → void {}
+  static method foo10(() → invalid-type Function) → void {}
+  static method foo10Prime(() → core::List<invalid-type> Function) → void {}
+  static method foo11((dynamic) → void Function) → void {}
+  static method foo12((invalid-type) → void b) → void {}
+  static method foo12Prime((core::List<invalid-type>) → void b) → void {}
+  static method foo13((invalid-type) → void Function) → void {}
+  static method foo13Prime((core::List<invalid-type>) → void Function) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart
index eaa9410..a3710ed 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart
@@ -1,40 +1,64 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 extension Foo<U> on List {
-  static U foo1() { return null; }
-  static List<U> foo1Prime() { return null; }
-  static void foo2(U x) { return null; }
-  static void foo2Prime(List<U> x) { return null; }
+  static U foo1() {
+    throw '';
+  }
+
+  static List<U> foo1Prime() {
+    throw '';
+  }
+
+  static void foo2(U x) {}
+
+  static void foo2Prime(List<U> x) {}
+
   static void foo3() {
     U foo4;
     List<U> foo4Prime;
     void foo5(U y) => print(y);
     void foo5Prime(List<U> y) => print(y);
-    U foo6() => null;
-    List<U> foo6Prime() => null;
-    void Function (U y) foo7 = (U y) => y;
-    void Function (List<U> y) foo7Prime = (List<U> y) => y;
+    U foo6() => throw '';
+    List<U> foo6Prime() => throw '';
+    void Function(U y) foo7 = (U y) => y;
+    void Function(List<U> y) foo7Prime = (List<U> y) => y;
   }
-  static U Function() foo8() { return null; }
-  static List<U> Function() foo8Prime() { return null; }
-  static void Function(U) foo9() { return null; }
-  static void Function(List<U>) foo9Prime() { return null; }
-  static void foo10(U Function()) { return null; }
-  static void foo10Prime(List<U> Function()) { return null; }
+
+  static U Function() foo8() {
+    throw '';
+  }
+
+  static List<U> Function() foo8Prime() {
+    throw '';
+  }
+
+  static void Function(U) foo9() {}
+
+  static void Function(List<U>) foo9Prime() {}
+
+  static void foo10(U Function()) {}
+
+  static void foo10Prime(List<U> Function()) {}
+
   // old syntax: variable named "U" of a function called 'Function'.
-  static void foo11(void Function(U)) { return null; }
-  static void foo12(void Function(U) b) { return null; }
-  static void foo12Prime(void Function(List<U>) b) { return null; }
+  static void foo11(void Function(U)) {}
+
+  static void foo12(void Function(U) b) {}
+
+  static void foo12Prime(void Function(List<U>) b) {}
+
   // old syntax: variable named "b" of type "U" of a function called 'Function'.
-  static void foo13(void Function(U b)) { return null; }
+  static void foo13(void Function(U b)) {}
+
   // old syntax: variable named "b" of type "List<U>" of a function called 'Function'.
-  static void foo13Prime(void Function(List<U> b)) { return null; }
-  static U foo14 = null;
-  static List<U> foo14Prime = null;
-  static U Function(U) foo15 = null;
-  static List<U> Function(List<U>) foo15Prime = null;
+  static void foo13Prime(void Function(List<U> b)) {}
+
+  static late U foo14;
+  static late List<U> foo14Prime;
+  static late U Function(U) foo15;
+  static late List<U> Function(List<U>) foo15Prime;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline.expect
index 1fd65fd..650cef8 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Foo<U> on List {
   static U foo1() {}
   static List<U> foo1Prime() {}
@@ -16,10 +15,13 @@
   static void foo12Prime(void Function(List<U>) b) {}
   static void foo13(void Function(U b)) {}
   static void foo13Prime(void Function(List<U> b)) {}
-  static U foo14 = null;
-  static List<U> foo14Prime = null;
-  static U Function(U) foo15 = null;
-  static List<U> Function(List<U>) foo15Prime = null;
+  static late U ;
+  foo14;
+  static late List<U> (){}
+  foo14Prime;
+  static late U ;
+  Function(U) foo15;
+  static late List<U> (){}
+  Function(List<U>) foo15Prime;
 }
-
 main() {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline_modelled.expect
index c76c6e7..72cd4cf 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Foo<U> on List {
   static List<U> Function() foo8Prime() {}
   static List<U> Function(List<U>) foo15Prime = null;
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.expect
index d4e95b2..5a2f4c6 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.expect
@@ -1,131 +1,131 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:39:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:41:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:43:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:48:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:50:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:53:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:56:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:58:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:59:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:19:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:15:5: Error: Type variables can't be used in static members.
-//     U foo6() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:5: Error: Type variables can't be used in static members.
+//     U foo6() => throw '';
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
+extension Foo<U extends core::Object? = dynamic> on core::List<dynamic> {
   static method foo1 = self::Foo|foo1;
   static method foo1Prime = self::Foo|foo1Prime;
   static method foo2 = self::Foo|foo2;
@@ -147,67 +147,45 @@
   static field foo15 = self::Foo|foo15;
   static field foo15Prime = self::Foo|foo15Prime;
 }
-static field invalid-type Foo|foo14 = null;
-static field core::List<invalid-type>* Foo|foo14Prime = null;
-static field (invalid-type) →* invalid-type Foo|foo15 = null;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime = null;
+late static field invalid-type Foo|foo14;
+late static field core::List<invalid-type> Foo|foo14Prime;
+late static field (invalid-type) → invalid-type Foo|foo15;
+late static field (core::List<invalid-type>) → core::List<invalid-type> Foo|foo15Prime;
 static method Foo|foo1() → invalid-type {
-  return null;
+  throw "";
 }
-static method Foo|foo1Prime() → core::List<invalid-type>* {
-  return null;
+static method Foo|foo1Prime() → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo2(invalid-type x) → void {
-  return null;
-}
-static method Foo|foo2Prime(core::List<invalid-type>* x) → void {
-  return null;
-}
+static method Foo|foo2(invalid-type x) → void {}
+static method Foo|foo2Prime(core::List<invalid-type> x) → void {}
 static method Foo|foo3() → void {
   invalid-type foo4;
-  core::List<invalid-type>* foo4Prime;
+  core::List<invalid-type> foo4Prime;
   function foo5(invalid-type y) → void
     return core::print(y);
-  function foo5Prime(core::List<invalid-type>* y) → void
+  function foo5Prime(core::List<invalid-type> y) → void
     return core::print(y);
   function foo6() → invalid-type
-    return null;
-  function foo6Prime() → core::List<invalid-type>*
-    return null;
-  (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-  (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    return throw "";
+  function foo6Prime() → core::List<invalid-type>
+    return throw "";
+  (invalid-type) → void foo7 = (invalid-type y) → void => y;
+  (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
 }
-static method Foo|foo8() → () →* invalid-type {
-  return null;
+static method Foo|foo8() → () → invalid-type {
+  throw "";
 }
-static method Foo|foo8Prime() → () →* core::List<invalid-type>* {
-  return null;
+static method Foo|foo8Prime() → () → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo9() → (invalid-type) →* void {
-  return null;
-}
-static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void {
-  return null;
-}
-static method Foo|foo10(() →* invalid-type Function) → void {
-  return null;
-}
-static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void {
-  return null;
-}
-static method Foo|foo11((dynamic) →* void Function) → void {
-  return null;
-}
-static method Foo|foo12((invalid-type) →* void b) → void {
-  return null;
-}
-static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void {
-  return null;
-}
-static method Foo|foo13((invalid-type) →* void Function) → void {
-  return null;
-}
-static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-  return null;
-}
+static method Foo|foo9() → (invalid-type) → void {}
+static method Foo|foo9Prime() → (core::List<invalid-type>) → void {}
+static method Foo|foo10(() → invalid-type Function) → void {}
+static method Foo|foo10Prime(() → core::List<invalid-type> Function) → void {}
+static method Foo|foo11((dynamic) → void Function) → void {}
+static method Foo|foo12((invalid-type) → void b) → void {}
+static method Foo|foo12Prime((core::List<invalid-type>) → void b) → void {}
+static method Foo|foo13((invalid-type) → void Function) → void {}
+static method Foo|foo13Prime((core::List<invalid-type>) → void Function) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect
index d4e95b2..5a2f4c6 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect
@@ -1,131 +1,131 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:39:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:41:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:43:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:48:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:50:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:53:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:56:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:58:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:59:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:19:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:15:5: Error: Type variables can't be used in static members.
-//     U foo6() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:5: Error: Type variables can't be used in static members.
+//     U foo6() => throw '';
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
+extension Foo<U extends core::Object? = dynamic> on core::List<dynamic> {
   static method foo1 = self::Foo|foo1;
   static method foo1Prime = self::Foo|foo1Prime;
   static method foo2 = self::Foo|foo2;
@@ -147,67 +147,45 @@
   static field foo15 = self::Foo|foo15;
   static field foo15Prime = self::Foo|foo15Prime;
 }
-static field invalid-type Foo|foo14 = null;
-static field core::List<invalid-type>* Foo|foo14Prime = null;
-static field (invalid-type) →* invalid-type Foo|foo15 = null;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime = null;
+late static field invalid-type Foo|foo14;
+late static field core::List<invalid-type> Foo|foo14Prime;
+late static field (invalid-type) → invalid-type Foo|foo15;
+late static field (core::List<invalid-type>) → core::List<invalid-type> Foo|foo15Prime;
 static method Foo|foo1() → invalid-type {
-  return null;
+  throw "";
 }
-static method Foo|foo1Prime() → core::List<invalid-type>* {
-  return null;
+static method Foo|foo1Prime() → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo2(invalid-type x) → void {
-  return null;
-}
-static method Foo|foo2Prime(core::List<invalid-type>* x) → void {
-  return null;
-}
+static method Foo|foo2(invalid-type x) → void {}
+static method Foo|foo2Prime(core::List<invalid-type> x) → void {}
 static method Foo|foo3() → void {
   invalid-type foo4;
-  core::List<invalid-type>* foo4Prime;
+  core::List<invalid-type> foo4Prime;
   function foo5(invalid-type y) → void
     return core::print(y);
-  function foo5Prime(core::List<invalid-type>* y) → void
+  function foo5Prime(core::List<invalid-type> y) → void
     return core::print(y);
   function foo6() → invalid-type
-    return null;
-  function foo6Prime() → core::List<invalid-type>*
-    return null;
-  (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-  (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    return throw "";
+  function foo6Prime() → core::List<invalid-type>
+    return throw "";
+  (invalid-type) → void foo7 = (invalid-type y) → void => y;
+  (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
 }
-static method Foo|foo8() → () →* invalid-type {
-  return null;
+static method Foo|foo8() → () → invalid-type {
+  throw "";
 }
-static method Foo|foo8Prime() → () →* core::List<invalid-type>* {
-  return null;
+static method Foo|foo8Prime() → () → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo9() → (invalid-type) →* void {
-  return null;
-}
-static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void {
-  return null;
-}
-static method Foo|foo10(() →* invalid-type Function) → void {
-  return null;
-}
-static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void {
-  return null;
-}
-static method Foo|foo11((dynamic) →* void Function) → void {
-  return null;
-}
-static method Foo|foo12((invalid-type) →* void b) → void {
-  return null;
-}
-static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void {
-  return null;
-}
-static method Foo|foo13((invalid-type) →* void Function) → void {
-  return null;
-}
-static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-  return null;
-}
+static method Foo|foo9() → (invalid-type) → void {}
+static method Foo|foo9Prime() → (core::List<invalid-type>) → void {}
+static method Foo|foo10(() → invalid-type Function) → void {}
+static method Foo|foo10Prime(() → core::List<invalid-type> Function) → void {}
+static method Foo|foo11((dynamic) → void Function) → void {}
+static method Foo|foo12((invalid-type) → void b) → void {}
+static method Foo|foo12Prime((core::List<invalid-type>) → void b) → void {}
+static method Foo|foo13((invalid-type) → void Function) → void {}
+static method Foo|foo13Prime((core::List<invalid-type>) → void Function) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.outline.expect
index 03ea969..fad69a5 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.outline.expect
@@ -1,91 +1,91 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:39:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:41:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:43:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:48:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:50:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:53:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:56:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:58:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:59:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
+extension Foo<U extends core::Object? = dynamic> on core::List<dynamic> {
   static method foo1 = self::Foo|foo1;
   static method foo1Prime = self::Foo|foo1Prime;
   static method foo2 = self::Foo|foo2;
@@ -107,41 +107,41 @@
   static field foo15 = self::Foo|foo15;
   static field foo15Prime = self::Foo|foo15Prime;
 }
-static field invalid-type Foo|foo14;
-static field core::List<invalid-type>* Foo|foo14Prime;
-static field (invalid-type) →* invalid-type Foo|foo15;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime;
+late static field invalid-type Foo|foo14;
+late static field core::List<invalid-type> Foo|foo14Prime;
+late static field (invalid-type) → invalid-type Foo|foo15;
+late static field (core::List<invalid-type>) → core::List<invalid-type> Foo|foo15Prime;
 static method Foo|foo1() → invalid-type
   ;
-static method Foo|foo1Prime() → core::List<invalid-type>*
+static method Foo|foo1Prime() → core::List<invalid-type>
   ;
 static method Foo|foo2(invalid-type x) → void
   ;
-static method Foo|foo2Prime(core::List<invalid-type>* x) → void
+static method Foo|foo2Prime(core::List<invalid-type> x) → void
   ;
 static method Foo|foo3() → void
   ;
-static method Foo|foo8() → () →* invalid-type
+static method Foo|foo8() → () → invalid-type
   ;
-static method Foo|foo8Prime() → () →* core::List<invalid-type>*
+static method Foo|foo8Prime() → () → core::List<invalid-type>
   ;
-static method Foo|foo9() → (invalid-type) →* void
+static method Foo|foo9() → (invalid-type) → void
   ;
-static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void
+static method Foo|foo9Prime() → (core::List<invalid-type>) → void
   ;
-static method Foo|foo10(() →* invalid-type Function) → void
+static method Foo|foo10(() → invalid-type Function) → void
   ;
-static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void
+static method Foo|foo10Prime(() → core::List<invalid-type> Function) → void
   ;
-static method Foo|foo11((dynamic) →* void Function) → void
+static method Foo|foo11((dynamic) → void Function) → void
   ;
-static method Foo|foo12((invalid-type) →* void b) → void
+static method Foo|foo12((invalid-type) → void b) → void
   ;
-static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void
+static method Foo|foo12Prime((core::List<invalid-type>) → void b) → void
   ;
-static method Foo|foo13((invalid-type) →* void Function) → void
+static method Foo|foo13((invalid-type) → void Function) → void
   ;
-static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void
+static method Foo|foo13Prime((core::List<invalid-type>) → void Function) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.transformed.expect
index d4e95b2..5a2f4c6 100644
--- a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.transformed.expect
@@ -1,131 +1,131 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
-//   static U foo1() { return null; }
+//   static U foo1() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
-//   static List<U> foo1Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:10:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
-//   static void foo2(U x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) {}
 //                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
-//   static void foo2Prime(List<U> x) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) {}
 //                              ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
-//   static U Function() foo8() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() {
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
-//   static List<U> Function() foo8Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() {
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
-//   static void Function(U) foo9() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() {}
 //                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
-//   static void Function(List<U>) foo9Prime() { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:39:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() {}
 //                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
-//   static void foo10(U Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:41:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) {}
 //                     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
-//   static void foo10Prime(List<U> Function()) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:43:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) {}
 //                               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
-//   static void foo12(void Function(U) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:48:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
-//   static void foo12Prime(void Function(List<U>) b) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:50:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
-//   static void foo13(void Function(U b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:53:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) {}
 //                                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
-//   static void foo13Prime(void Function(List<U> b)) { return null; }
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:56:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) {}
 //                                             ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
-//   static U foo14 = null;
-//          ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
-//   static List<U> foo14Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:58:15: Error: Type variables can't be used in static members.
+//   static late U foo14;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//          ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:59:20: Error: Type variables can't be used in static members.
+//   static late List<U> foo14Prime;
+//                    ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
-//   static U Function(U) foo15 = null;
-//                     ^
-//
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:15: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
-//   static List<U> Function(List<U>) foo15Prime = null;
-//                                ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:60:26: Error: Type variables can't be used in static members.
+//   static late U Function(U) foo15;
+//                          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:11:5: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:20: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:61:37: Error: Type variables can't be used in static members.
+//   static late List<U> Function(List<U>) foo15Prime;
+//                                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:19:5: Error: Type variables can't be used in static members.
 //     U foo4;
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:12:10: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
 //     List<U> foo4Prime;
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:13:15: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
 //     void foo5(U y) => print(y);
 //               ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:25: Error: Type variables can't be used in static members.
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:25: Error: Type variables can't be used in static members.
 //     void foo5Prime(List<U> y) => print(y);
 //                         ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:15:5: Error: Type variables can't be used in static members.
-//     U foo6() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:5: Error: Type variables can't be used in static members.
+//     U foo6() => throw '';
 //     ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:10: Error: Type variables can't be used in static members.
-//     List<U> foo6Prime() => null;
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => throw '';
 //          ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:20: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                    ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:19: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                   ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:33: Error: Type variables can't be used in static members.
-//     void Function (U y) foo7 = (U y) => y;
-//                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:32: Error: Type variables can't be used in static members.
+//     void Function(U y) foo7 = (U y) => y;
+//                                ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:25: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                         ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:24: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                        ^
 //
-// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:49: Error: Type variables can't be used in static members.
-//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
-//                                                 ^
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:26:48: Error: Type variables can't be used in static members.
+//     void Function(List<U> y) foo7Prime = (List<U> y) => y;
+//                                                ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
+extension Foo<U extends core::Object? = dynamic> on core::List<dynamic> {
   static method foo1 = self::Foo|foo1;
   static method foo1Prime = self::Foo|foo1Prime;
   static method foo2 = self::Foo|foo2;
@@ -147,67 +147,45 @@
   static field foo15 = self::Foo|foo15;
   static field foo15Prime = self::Foo|foo15Prime;
 }
-static field invalid-type Foo|foo14 = null;
-static field core::List<invalid-type>* Foo|foo14Prime = null;
-static field (invalid-type) →* invalid-type Foo|foo15 = null;
-static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime = null;
+late static field invalid-type Foo|foo14;
+late static field core::List<invalid-type> Foo|foo14Prime;
+late static field (invalid-type) → invalid-type Foo|foo15;
+late static field (core::List<invalid-type>) → core::List<invalid-type> Foo|foo15Prime;
 static method Foo|foo1() → invalid-type {
-  return null;
+  throw "";
 }
-static method Foo|foo1Prime() → core::List<invalid-type>* {
-  return null;
+static method Foo|foo1Prime() → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo2(invalid-type x) → void {
-  return null;
-}
-static method Foo|foo2Prime(core::List<invalid-type>* x) → void {
-  return null;
-}
+static method Foo|foo2(invalid-type x) → void {}
+static method Foo|foo2Prime(core::List<invalid-type> x) → void {}
 static method Foo|foo3() → void {
   invalid-type foo4;
-  core::List<invalid-type>* foo4Prime;
+  core::List<invalid-type> foo4Prime;
   function foo5(invalid-type y) → void
     return core::print(y);
-  function foo5Prime(core::List<invalid-type>* y) → void
+  function foo5Prime(core::List<invalid-type> y) → void
     return core::print(y);
   function foo6() → invalid-type
-    return null;
-  function foo6Prime() → core::List<invalid-type>*
-    return null;
-  (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
-  (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+    return throw "";
+  function foo6Prime() → core::List<invalid-type>
+    return throw "";
+  (invalid-type) → void foo7 = (invalid-type y) → void => y;
+  (core::List<invalid-type>) → void foo7Prime = (core::List<invalid-type> y) → void => y;
 }
-static method Foo|foo8() → () →* invalid-type {
-  return null;
+static method Foo|foo8() → () → invalid-type {
+  throw "";
 }
-static method Foo|foo8Prime() → () →* core::List<invalid-type>* {
-  return null;
+static method Foo|foo8Prime() → () → core::List<invalid-type> {
+  throw "";
 }
-static method Foo|foo9() → (invalid-type) →* void {
-  return null;
-}
-static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void {
-  return null;
-}
-static method Foo|foo10(() →* invalid-type Function) → void {
-  return null;
-}
-static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void {
-  return null;
-}
-static method Foo|foo11((dynamic) →* void Function) → void {
-  return null;
-}
-static method Foo|foo12((invalid-type) →* void b) → void {
-  return null;
-}
-static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void {
-  return null;
-}
-static method Foo|foo13((invalid-type) →* void Function) → void {
-  return null;
-}
-static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void {
-  return null;
-}
+static method Foo|foo9() → (invalid-type) → void {}
+static method Foo|foo9Prime() → (core::List<invalid-type>) → void {}
+static method Foo|foo10(() → invalid-type Function) → void {}
+static method Foo|foo10Prime(() → core::List<invalid-type> Function) → void {}
+static method Foo|foo11((dynamic) → void Function) → void {}
+static method Foo|foo12((invalid-type) → void b) → void {}
+static method Foo|foo12Prime((core::List<invalid-type>) → void b) → void {}
+static method Foo|foo13((invalid-type) → void Function) → void {}
+static method Foo|foo13Prime((core::List<invalid-type>) → void Function) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart
index 1dbc620..c056d2b 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart
@@ -1,4 +1,3 @@
-// @dart=2.9
 dynamic<int> f() {}
 main() {
   f();
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline.expect
index 769bfb1..e628591 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 dynamic<int> f() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline_modelled.expect
index 769bfb1..e628591 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 dynamic<int> f() {}
 main() {}
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 bdb4a9f..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:2:1: Error: Expected 0 type arguments.
+// 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 bdb4a9f..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:2:1: Error: Expected 0 type arguments.
+// 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 2d32896..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:2:1: Error: Expected 0 type arguments.
+// 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 bdb4a9f..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
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:2:1: Error: Expected 0 type arguments.
+// 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_void.dart b/pkg/front_end/testcases/general/type_parameters_on_void.dart
index 49f9028..a6f1ff0 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_void.dart
+++ b/pkg/front_end/testcases/general/type_parameters_on_void.dart
@@ -1,5 +1,4 @@
 void<int> f() {}
-// @dart=2.9
 main() {
   f();
 }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart b/pkg/front_end/testcases/general/type_variable_as_super.dart
index 032fcc4..dbcfaaa 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class A<T> extends T {}
 
 abstract class B<T> extends T {
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline.expect
index 896bc60..1fb7f08 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A<T> extends T {}
 
 abstract class B<T> extends T {
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline_modelled.expect
index 896bc60..1fb7f08 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A<T> extends T {}
 
 abstract class B<T> extends T {
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 aac4117..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
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // 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();
@@ -25,50 +25,20 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("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 aac4117..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
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // 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();
@@ -25,50 +25,20 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("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 2d14c5b..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
@@ -1,63 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // 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;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
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 aac4117..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
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // 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();
@@ -25,50 +25,20 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
   throw new core::AbstractClassInstantiationError::•("A");
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart b/pkg/front_end/testcases/general/type_variable_bound_access.dart
index b98b8d5..7eb2d87 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart
@@ -1,7 +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.
-// @dart=2.9
+
 class DynamicClass<T extends dynamic, S extends T> {
   T field1;
   T field2;
@@ -31,6 +31,9 @@
   X4 field4;
   X5 field5;
 
+  Class(this.field0, this.field1, this.field2, this.field3, this.field4,
+      this.field5);
+
   method() {
     field0.isEven;
     field1.isEven;
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline.expect
index ff1f9ff..35263ba 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class DynamicClass<T extends dynamic, S extends T> {
   T field1;
   T field2;
@@ -22,6 +21,8 @@
   X3 field3;
   X4 field4;
   X5 field5;
+  Class(this.field0, this.field1, this.field2, this.field3, this.field4,
+      this.field5);
   method() {}
 }
 
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline_modelled.expect
index 3eb942a..4c4a9d8 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.textual_outline_modelled.expect
@@ -1,6 +1,7 @@
-// @dart = 2.9
 class Class<X5 extends X4, X4 extends X3, X3 extends X2, X2 extends X1,
     X1 extends X0, X0 extends int> {
+  Class(this.field0, this.field1, this.field2, this.field3, this.field4,
+      this.field5);
   X0 field0;
   X1 field1;
   X2 field2;
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
index c281ff0..9190815 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,79 +10,49 @@
 import self as self;
 import "dart:core" as core;
 
-class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  covariant-by-class field self::DynamicClass::T* field1;
-  covariant-by-class field self::DynamicClass::T* field2;
-  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+class DynamicClass<T extends dynamic, S extends self::DynamicClass::T% = dynamic> extends core::Object {
+  covariant-by-class field self::DynamicClass::T% field1;
+  covariant-by-class field self::DynamicClass::T% field2;
+  constructor •(self::DynamicClass::T% field1, self::DynamicClass::T% field2) → self::DynamicClass<self::DynamicClass::T%, self::DynamicClass::S%>
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
   method method() → dynamic
-    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T%}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T%});
 }
-class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  covariant-by-class field self::NumClass::T* field1;
-  covariant-by-class field self::NumClass::S* field2;
-  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+class NumClass<T extends core::num, S extends self::NumClass::T = core::num> extends core::Object {
+  covariant-by-class field self::NumClass::T field1;
+  covariant-by-class field self::NumClass::S field2;
+  constructor •(self::NumClass::T field1, self::NumClass::S field2) → self::NumClass<self::NumClass::T, self::NumClass::S>
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
-  method method1() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
-  method method2() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+  method method1() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S}){(core::num) → core::num};
+  method method2() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S}{<unresolved>}.length as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
 }
-class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  covariant-by-class field self::Class::X0* field0 = null;
-  covariant-by-class field self::Class::X1* field1 = null;
-  covariant-by-class field self::Class::X2* field2 = null;
-  covariant-by-class field self::Class::X3* field3 = null;
-  covariant-by-class field self::Class::X4* field4 = null;
-  covariant-by-class field self::Class::X5* field5 = null;
-  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
-    : super core::Object::•()
+class Class<X5 extends self::Class::X4 = core::int, X4 extends self::Class::X3 = core::int, X3 extends self::Class::X2 = core::int, X2 extends self::Class::X1 = core::int, X1 extends self::Class::X0 = core::int, X0 extends core::int> extends core::Object {
+  covariant-by-class field self::Class::X0 field0;
+  covariant-by-class field self::Class::X1 field1;
+  covariant-by-class field self::Class::X2 field2;
+  covariant-by-class field self::Class::X3 field3;
+  covariant-by-class field self::Class::X4 field4;
+  covariant-by-class field self::Class::X5 field5;
+  constructor •(self::Class::X0 field0, self::Class::X1 field1, self::Class::X2 field2, self::Class::X3 field3, self::Class::X4 field4, self::Class::X5 field5) → self::Class<self::Class::X5, self::Class::X4, self::Class::X3, self::Class::X2, self::Class::X1, self::Class::X0>
+    : self::Class::field0 = field0, self::Class::field1 = field1, self::Class::field2 = field2, self::Class::field3 = field3, self::Class::field4 = field4, self::Class::field5 = field5, super core::Object::•()
     ;
   method method() → dynamic {
-    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field0}{self::Class::X0}.{core::int::isEven}{core::bool};
+    this.{self::Class::field1}{self::Class::X1}.{core::int::isEven}{core::bool};
+    this.{self::Class::field2}{self::Class::X2}.{core::int::isEven}{core::bool};
+    this.{self::Class::field3}{self::Class::X3}.{core::int::isEven}{core::bool};
+    this.{self::Class::field4}{self::Class::X4}.{core::int::isEven}{core::bool};
+    this.{self::Class::field5}{self::Class::X5}.{core::int::isEven}{core::bool};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
-  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
+  new self::DynamicClass::•<core::num, core::int>(0.5, 2).{self::DynamicClass::method}(){() → dynamic};
+  new self::NumClass::•<core::num, core::double>(2, 0.5).{self::NumClass::method1}(){() → core::num};
 }
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect
index c281ff0..9190815 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,79 +10,49 @@
 import self as self;
 import "dart:core" as core;
 
-class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  covariant-by-class field self::DynamicClass::T* field1;
-  covariant-by-class field self::DynamicClass::T* field2;
-  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+class DynamicClass<T extends dynamic, S extends self::DynamicClass::T% = dynamic> extends core::Object {
+  covariant-by-class field self::DynamicClass::T% field1;
+  covariant-by-class field self::DynamicClass::T% field2;
+  constructor •(self::DynamicClass::T% field1, self::DynamicClass::T% field2) → self::DynamicClass<self::DynamicClass::T%, self::DynamicClass::S%>
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
   method method() → dynamic
-    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T%}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T%});
 }
-class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  covariant-by-class field self::NumClass::T* field1;
-  covariant-by-class field self::NumClass::S* field2;
-  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+class NumClass<T extends core::num, S extends self::NumClass::T = core::num> extends core::Object {
+  covariant-by-class field self::NumClass::T field1;
+  covariant-by-class field self::NumClass::S field2;
+  constructor •(self::NumClass::T field1, self::NumClass::S field2) → self::NumClass<self::NumClass::T, self::NumClass::S>
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
-  method method1() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
-  method method2() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+  method method1() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S}){(core::num) → core::num};
+  method method2() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S}{<unresolved>}.length as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
 }
-class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  covariant-by-class field self::Class::X0* field0 = null;
-  covariant-by-class field self::Class::X1* field1 = null;
-  covariant-by-class field self::Class::X2* field2 = null;
-  covariant-by-class field self::Class::X3* field3 = null;
-  covariant-by-class field self::Class::X4* field4 = null;
-  covariant-by-class field self::Class::X5* field5 = null;
-  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
-    : super core::Object::•()
+class Class<X5 extends self::Class::X4 = core::int, X4 extends self::Class::X3 = core::int, X3 extends self::Class::X2 = core::int, X2 extends self::Class::X1 = core::int, X1 extends self::Class::X0 = core::int, X0 extends core::int> extends core::Object {
+  covariant-by-class field self::Class::X0 field0;
+  covariant-by-class field self::Class::X1 field1;
+  covariant-by-class field self::Class::X2 field2;
+  covariant-by-class field self::Class::X3 field3;
+  covariant-by-class field self::Class::X4 field4;
+  covariant-by-class field self::Class::X5 field5;
+  constructor •(self::Class::X0 field0, self::Class::X1 field1, self::Class::X2 field2, self::Class::X3 field3, self::Class::X4 field4, self::Class::X5 field5) → self::Class<self::Class::X5, self::Class::X4, self::Class::X3, self::Class::X2, self::Class::X1, self::Class::X0>
+    : self::Class::field0 = field0, self::Class::field1 = field1, self::Class::field2 = field2, self::Class::field3 = field3, self::Class::field4 = field4, self::Class::field5 = field5, super core::Object::•()
     ;
   method method() → dynamic {
-    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field0}{self::Class::X0}.{core::int::isEven}{core::bool};
+    this.{self::Class::field1}{self::Class::X1}.{core::int::isEven}{core::bool};
+    this.{self::Class::field2}{self::Class::X2}.{core::int::isEven}{core::bool};
+    this.{self::Class::field3}{self::Class::X3}.{core::int::isEven}{core::bool};
+    this.{self::Class::field4}{self::Class::X4}.{core::int::isEven}{core::bool};
+    this.{self::Class::field5}{self::Class::X5}.{core::int::isEven}{core::bool};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
-  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
+  new self::DynamicClass::•<core::num, core::int>(0.5, 2).{self::DynamicClass::method}(){() → dynamic};
+  new self::NumClass::•<core::num, core::double>(2, 0.5).{self::NumClass::method1}(){() → core::num};
 }
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
index adae324..e2accc2 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
@@ -1,66 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  covariant-by-class field self::DynamicClass::T* field1;
-  covariant-by-class field self::DynamicClass::T* field2;
-  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+class DynamicClass<T extends dynamic, S extends self::DynamicClass::T% = dynamic> extends core::Object {
+  covariant-by-class field self::DynamicClass::T% field1;
+  covariant-by-class field self::DynamicClass::T% field2;
+  constructor •(self::DynamicClass::T% field1, self::DynamicClass::T% field2) → self::DynamicClass<self::DynamicClass::T%, self::DynamicClass::S%>
     ;
   method method() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  covariant-by-class field self::NumClass::T* field1;
-  covariant-by-class field self::NumClass::S* field2;
-  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+class NumClass<T extends core::num, S extends self::NumClass::T = core::num> extends core::Object {
+  covariant-by-class field self::NumClass::T field1;
+  covariant-by-class field self::NumClass::S field2;
+  constructor •(self::NumClass::T field1, self::NumClass::S field2) → self::NumClass<self::NumClass::T, self::NumClass::S>
     ;
-  method method1() → core::num*
+  method method1() → core::num
     ;
-  method method2() → core::num*
+  method method2() → core::num
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  covariant-by-class field self::Class::X0* field0;
-  covariant-by-class field self::Class::X1* field1;
-  covariant-by-class field self::Class::X2* field2;
-  covariant-by-class field self::Class::X3* field3;
-  covariant-by-class field self::Class::X4* field4;
-  covariant-by-class field self::Class::X5* field5;
-  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
+class Class<X5 extends self::Class::X4 = core::int, X4 extends self::Class::X3 = core::int, X3 extends self::Class::X2 = core::int, X2 extends self::Class::X1 = core::int, X1 extends self::Class::X0 = core::int, X0 extends core::int> extends core::Object {
+  covariant-by-class field self::Class::X0 field0;
+  covariant-by-class field self::Class::X1 field1;
+  covariant-by-class field self::Class::X2 field2;
+  covariant-by-class field self::Class::X3 field3;
+  covariant-by-class field self::Class::X4 field4;
+  covariant-by-class field self::Class::X5 field5;
+  constructor •(self::Class::X0 field0, self::Class::X1 field1, self::Class::X2 field2, self::Class::X3 field3, self::Class::X4 field4, self::Class::X5 field5) → self::Class<self::Class::X5, self::Class::X4, self::Class::X3, self::Class::X2, self::Class::X1, self::Class::X0>
     ;
   method method() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
index 05cc13b..2af94e2 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,79 +10,49 @@
 import self as self;
 import "dart:core" as core;
 
-class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  covariant-by-class field self::DynamicClass::T* field1;
-  covariant-by-class field self::DynamicClass::T* field2;
-  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+class DynamicClass<T extends dynamic, S extends self::DynamicClass::T% = dynamic> extends core::Object {
+  covariant-by-class field self::DynamicClass::T% field1;
+  covariant-by-class field self::DynamicClass::T% field2;
+  constructor •(self::DynamicClass::T% field1, self::DynamicClass::T% field2) → self::DynamicClass<self::DynamicClass::T%, self::DynamicClass::S%>
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
   method method() → dynamic
-    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T%}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T%});
 }
-class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  covariant-by-class field self::NumClass::T* field1;
-  covariant-by-class field self::NumClass::S* field2;
-  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+class NumClass<T extends core::num, S extends self::NumClass::T = core::num> extends core::Object {
+  covariant-by-class field self::NumClass::T field1;
+  covariant-by-class field self::NumClass::S field2;
+  constructor •(self::NumClass::T field1, self::NumClass::S field2) → self::NumClass<self::NumClass::T, self::NumClass::S>
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
-  method method1() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
-  method method2() → core::num*
-    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+  method method1() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S}){(core::num) → core::num};
+  method method2() → core::num
+    return this.{self::NumClass::field1}{self::NumClass::T}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
   num method2() => field1 + field2.length;
-                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length){(core::num*) →* core::num*};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S}{<unresolved>}.length){(core::num) → core::num};
 }
-class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  covariant-by-class field self::Class::X0* field0 = null;
-  covariant-by-class field self::Class::X1* field1 = null;
-  covariant-by-class field self::Class::X2* field2 = null;
-  covariant-by-class field self::Class::X3* field3 = null;
-  covariant-by-class field self::Class::X4* field4 = null;
-  covariant-by-class field self::Class::X5* field5 = null;
-  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
-    : super core::Object::•()
+class Class<X5 extends self::Class::X4 = core::int, X4 extends self::Class::X3 = core::int, X3 extends self::Class::X2 = core::int, X2 extends self::Class::X1 = core::int, X1 extends self::Class::X0 = core::int, X0 extends core::int> extends core::Object {
+  covariant-by-class field self::Class::X0 field0;
+  covariant-by-class field self::Class::X1 field1;
+  covariant-by-class field self::Class::X2 field2;
+  covariant-by-class field self::Class::X3 field3;
+  covariant-by-class field self::Class::X4 field4;
+  covariant-by-class field self::Class::X5 field5;
+  constructor •(self::Class::X0 field0, self::Class::X1 field1, self::Class::X2 field2, self::Class::X3 field3, self::Class::X4 field4, self::Class::X5 field5) → self::Class<self::Class::X5, self::Class::X4, self::Class::X3, self::Class::X2, self::Class::X1, self::Class::X0>
+    : self::Class::field0 = field0, self::Class::field1 = field1, self::Class::field2 = field2, self::Class::field3 = field3, self::Class::field4 = field4, self::Class::field5 = field5, super core::Object::•()
     ;
   method method() → dynamic {
-    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
-    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field0}{self::Class::X0}.{core::int::isEven}{core::bool};
+    this.{self::Class::field1}{self::Class::X1}.{core::int::isEven}{core::bool};
+    this.{self::Class::field2}{self::Class::X2}.{core::int::isEven}{core::bool};
+    this.{self::Class::field3}{self::Class::X3}.{core::int::isEven}{core::bool};
+    this.{self::Class::field4}{self::Class::X4}.{core::int::isEven}{core::bool};
+    this.{self::Class::field5}{self::Class::X5}.{core::int::isEven}{core::bool};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
-  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
+  new self::DynamicClass::•<core::num, core::int>(0.5, 2).{self::DynamicClass::method}(){() → dynamic};
+  new self::NumClass::•<core::num, core::double>(2, 0.5).{self::NumClass::method1}(){() → core::num};
 }
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_prefix.dart b/pkg/front_end/testcases/general/type_variable_prefix.dart
index 9e32d32..3e5d27d5 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import "dart:core" as T;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline.expect
index ee21503..17664d53 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart:core" as T;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline_modelled.expect
index ee21503..17664d53 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart:core" as T;
 
 class C<T> {
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
index 20eabce..20a0ee4 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
@@ -11,24 +11,14 @@
 
 import "dart:core" as T;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method method() → invalid-type
     return "Hello, World!";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
+  core::String s = new self::C::•<dynamic>().{self::C::method}(){() → invalid-type};
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect
index 20eabce..20a0ee4 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
@@ -11,24 +11,14 @@
 
 import "dart:core" as T;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method method() → invalid-type
     return "Hello, World!";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
+  core::String s = new self::C::•<dynamic>().{self::C::method}(){() → invalid-type};
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
index 17c7da5..6fbcab0 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
@@ -11,21 +11,11 @@
 
 import "dart:core" as T;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
   method method() → invalid-type
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
index 20eabce..20a0ee4 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^^^^^^^^
 //
@@ -11,24 +11,14 @@
 
 import "dart:core" as T;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
   method method() → invalid-type
     return "Hello, World!";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
+  core::String s = new self::C::•<dynamic>().{self::C::method}(){() → invalid-type};
   core::print(s);
 }
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/general/type_variable_uses.dart b/pkg/front_end/testcases/general/type_variable_uses.dart
index 2c70dea..2bdaa6d 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class C<T> {
   const C();
   static C<T> staticMethod() {
@@ -14,6 +14,7 @@
     const <C<T>>[];
     const <Object>[T];
     const <Object>[const C<T>()];
+    throw '';
   }
 
   C<T> instanceMethod() {
@@ -26,6 +27,7 @@
     const <C<T>>[];
     const <Object>[T];
     const <Object>[const C<T>()];
+    throw '';
   }
 }
 
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline.expect
index 7c69cd1..4ea252b 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   const C();
   static C<T> staticMethod() {}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline_modelled.expect
index 701ccee..d8414ce 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {
   C<T> instanceMethod() {}
   const C();
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
index 4fbbbaa..62ddb4f 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -42,65 +42,57 @@
 //     const <Object>[const C<T>()];
 //                            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
 //     const C<T>();
 //             ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
 //     const <T>[];
 //            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
 //     const <C<T>>[];
 //              ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
 //     const <Object>[T];
 //                    ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
 //     const <Object>[const C<T>()];
 //                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<invalid-type>* {
+  static method staticMethod() → self::C<invalid-type> {
     core::print(#C1);
     invalid-type t;
-    self::C<invalid-type>* l;
-    self::C<self::C<invalid-type>*>* ll;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  method instanceMethod() → self::C<self::C::T*>* {
-    core::print(self::C::T*);
-    self::C::T* t;
-    self::C<self::C::T*>* l;
-    self::C<self::C<self::C::T*>*>* ll;
+  method instanceMethod() → self::C<self::C::T%> {
+    core::print(self::C::T%);
+    self::C::T% t;
+    self::C<self::C::T%> l;
+    self::C<self::C<self::C::T%>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
index 4fbbbaa..62ddb4f 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -42,65 +42,57 @@
 //     const <Object>[const C<T>()];
 //                            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
 //     const C<T>();
 //             ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
 //     const <T>[];
 //            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
 //     const <C<T>>[];
 //              ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
 //     const <Object>[T];
 //                    ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
 //     const <Object>[const C<T>()];
 //                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<invalid-type>* {
+  static method staticMethod() → self::C<invalid-type> {
     core::print(#C1);
     invalid-type t;
-    self::C<invalid-type>* l;
-    self::C<self::C<invalid-type>*>* ll;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  method instanceMethod() → self::C<self::C::T*>* {
-    core::print(self::C::T*);
-    self::C::T* t;
-    self::C<self::C::T*>* l;
-    self::C<self::C<self::C::T*>*>* ll;
+  method instanceMethod() → self::C<self::C::T%> {
+    core::print(self::C::T%);
+    self::C::T% t;
+    self::C<self::C::T%> l;
+    self::C<self::C<self::C::T%>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
index 6825fba..3bab67d 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,24 +9,14 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<invalid-type>*
+  static method staticMethod() → self::C<invalid-type>
     ;
-  method instanceMethod() → self::C<self::C::T*>*
+  method instanceMethod() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
index 4fbbbaa..62ddb4f 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -42,65 +42,57 @@
 //     const <Object>[const C<T>()];
 //                            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:13: Error: Type variables can't be used as constants.
 //     const C<T>();
 //             ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:26:12: Error: Type variables can't be used as constants.
 //     const <T>[];
 //            ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:27:14: Error: Type variables can't be used as constants.
 //     const <C<T>>[];
 //              ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:28:20: Error: Type variables can't be used as constants.
 //     const <Object>[T];
 //                    ^
 //
-// pkg/front_end/testcases/general/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+// pkg/front_end/testcases/general/type_variable_uses.dart:29:28: Error: Type variables can't be used as constants.
 //     const <Object>[const C<T>()];
 //                            ^
 //
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  static method staticMethod() → self::C<invalid-type>* {
+  static method staticMethod() → self::C<invalid-type> {
     core::print(#C1);
     invalid-type t;
-    self::C<invalid-type>* l;
-    self::C<self::C<invalid-type>*>* ll;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  method instanceMethod() → self::C<self::C::T*>* {
-    core::print(self::C::T*);
-    self::C::T* t;
-    self::C<self::C::T*>* l;
-    self::C<self::C<self::C::T*>*>* ll;
+  method instanceMethod() → self::C<self::C::T%> {
+    core::print(self::C::T%);
+    self::C::T% t;
+    self::C<self::C::T%> l;
+    self::C<self::C<self::C::T%>> ll;
     #C2;
     #C3;
     #C4;
     #C5;
     #C6;
+    throw "";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/typedef.dart b/pkg/front_end/testcases/general/typedef.dart
index 6f0832c..44de722 100644
--- a/pkg/front_end/testcases/general/typedef.dart
+++ b/pkg/front_end/testcases/general/typedef.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 typedef _NullaryFunction();
 typedef _UnaryFunction(args);
 typedef _BinaryFunction(args, message);
diff --git a/pkg/front_end/testcases/general/typedef.dart.textual_outline.expect b/pkg/front_end/testcases/general/typedef.dart.textual_outline.expect
index 065fb43..f652ebb 100644
--- a/pkg/front_end/testcases/general/typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef _NullaryFunction();
 typedef _UnaryFunction(args);
 typedef _BinaryFunction(args, message);
diff --git a/pkg/front_end/testcases/general/typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/typedef.dart.textual_outline_modelled.expect
index c349c47..7714b6b 100644
--- a/pkg/front_end/testcases/general/typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 typedef _BinaryFunction(args, message);
 typedef _NullaryFunction();
diff --git a/pkg/front_end/testcases/general/typedef.dart.weak.expect b/pkg/front_end/testcases/general/typedef.dart.weak.expect
index 2b36abf..bca1c7e 100644
--- a/pkg/front_end/testcases/general/typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef _NullaryFunction = () →* dynamic;
-typedef _UnaryFunction = (dynamic) →* dynamic;
-typedef _BinaryFunction = (dynamic, dynamic) →* dynamic;
+typedef _NullaryFunction = () → dynamic;
+typedef _UnaryFunction = (dynamic) → dynamic;
+typedef _BinaryFunction = (dynamic, dynamic) → dynamic;
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print(#C1 is (dynamic) →* dynamic);
-  core::print(#C1 is (dynamic, dynamic) →* dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic) → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic, dynamic) → dynamic);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect
index 2b36abf..bca1c7e 100644
--- a/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef _NullaryFunction = () →* dynamic;
-typedef _UnaryFunction = (dynamic) →* dynamic;
-typedef _BinaryFunction = (dynamic, dynamic) →* dynamic;
+typedef _NullaryFunction = () → dynamic;
+typedef _UnaryFunction = (dynamic) → dynamic;
+typedef _BinaryFunction = (dynamic, dynamic) → dynamic;
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print(#C1 is (dynamic) →* dynamic);
-  core::print(#C1 is (dynamic, dynamic) →* dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic) → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic, dynamic) → dynamic);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/typedef.dart.weak.outline.expect b/pkg/front_end/testcases/general/typedef.dart.weak.outline.expect
index b50eefb..96cf42b 100644
--- a/pkg/front_end/testcases/general/typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
-typedef _NullaryFunction = () →* dynamic;
-typedef _UnaryFunction = (dynamic) →* dynamic;
-typedef _BinaryFunction = (dynamic, dynamic) →* dynamic;
+typedef _NullaryFunction = () → dynamic;
+typedef _UnaryFunction = (dynamic) → dynamic;
+typedef _BinaryFunction = (dynamic, dynamic) → dynamic;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/general/typedef.dart.weak.transformed.expect
index 9f48e47..8eb05b0 100644
--- a/pkg/front_end/testcases/general/typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/typedef.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef _NullaryFunction = () →* dynamic;
-typedef _UnaryFunction = (dynamic) →* dynamic;
-typedef _BinaryFunction = (dynamic, dynamic) →* dynamic;
+typedef _NullaryFunction = () → dynamic;
+typedef _UnaryFunction = (dynamic) → dynamic;
+typedef _BinaryFunction = (dynamic, dynamic) → dynamic;
 static method main() → dynamic {
-  core::print(#C1 is () →* dynamic);
-  core::print(#C1 is (dynamic) →* dynamic);
-  core::print(#C1 is (dynamic, dynamic) →* dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} () → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic) → dynamic);
+  core::print(#C1 is{ForNonNullableByDefault} (dynamic, dynamic) → dynamic);
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/undefined.dart b/pkg/front_end/testcases/general/undefined.dart
index bbecb3d..6e2fc23 100644
--- a/pkg/front_end/testcases/general/undefined.dart
+++ b/pkg/front_end/testcases/general/undefined.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class C {
   var x;
   void f() {}
diff --git a/pkg/front_end/testcases/general/undefined.dart.textual_outline.expect b/pkg/front_end/testcases/general/undefined.dart.textual_outline.expect
index a50bbc9..7c1f7be 100644
--- a/pkg/front_end/testcases/general/undefined.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   var x;
   void f() {}
diff --git a/pkg/front_end/testcases/general/undefined.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/undefined.dart.textual_outline_modelled.expect
index a67bda8..6775e59 100644
--- a/pkg/front_end/testcases/general/undefined.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   var x;
   void f() {}
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.expect b/pkg/front_end/testcases/general/undefined.dart.weak.expect
index 0c68639..85934aa 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,29 +25,19 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x}{dynamic};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
     ^" in c{<unresolved>}.y;
-  c.{self::C::f}(){() →* void};
+  c.{self::C::f}(){() → void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect b/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect
index 0c68639..85934aa 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,29 +25,19 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x}{dynamic};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
     ^" in c{<unresolved>}.y;
-  c.{self::C::f}(){() →* void};
+  c.{self::C::f}(){() → void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.outline.expect b/pkg/front_end/testcases/general/undefined.dart.weak.outline.expect
index 83a27aa..4bf3b58 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic x;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method f() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void
+static method test(self::C c) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
index 0c68639..85934aa 100644
--- a/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,29 +25,19 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method f() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x}{dynamic};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
   c.y;
     ^" in c{<unresolved>}.y;
-  c.{self::C::f}(){() →* void};
+  c.{self::C::f}(){() → void};
   invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'g'.
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart
index 5f79f34..c6b5b4d 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class C {
   void set x(value) {}
 }
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline.expect
index f484bf2..627bd18 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   void set x(value) {}
 }
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline_modelled.expect
index 88ced95..b1044c0 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   void set x(value) {}
 }
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
index fdcdf1e..c17f0b6 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,29 +18,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C* #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
     ^" in #t1{<unresolved>}.x{dynamic}.+(1);
-  let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect
index fdcdf1e..c17f0b6 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,29 +18,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C* #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
     ^" in #t1{<unresolved>}.x{dynamic}.+(1);
-  let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.outline.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.outline.expect
index 93a68f8..5fe30f0 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   set x(dynamic value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void
+static method test(self::C c) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
index fdcdf1e..c17f0b6 100644
--- a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,29 +18,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method test(self::C* c) → void {
+static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C* #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x += 1;
     ^" in #t1{<unresolved>}.x{dynamic}.+(1);
-  let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
+  let final self::C #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
   c.x ??= 1;
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart b/pkg/front_end/testcases/general/uninitialized_fields.dart
index 01f5986..126f6a3 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart
@@ -2,30 +2,28 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart=2.9
-
 class Uninitialized {
-  int x;
+  int? x;
 }
 
 class PartiallyInitialized {
-  int x;
+  int? x;
   PartiallyInitialized(this.x);
   PartiallyInitialized.noInitializer();
 }
 
 class Initialized {
-  int x;
+  int? x;
   Initialized(this.x);
 }
 
 class Forwarding {
-  int x;
+  int? x;
   Forwarding.initialize(this.x);
-  Forwarding(int arg) : this.initialize(arg);
+  Forwarding(int? arg) : this.initialize(arg);
 }
 
-int uninitializedTopLevel;
-int initializedTopLevel = 4;
+int? uninitializedTopLevel;
+int? initializedTopLevel = 4;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline.expect
index cab3882..7cdf9cb 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline.expect
@@ -1,25 +1,24 @@
-// @dart = 2.9
 class Uninitialized {
-  int x;
+  int? x;
 }
 
 class PartiallyInitialized {
-  int x;
+  int? x;
   PartiallyInitialized(this.x);
   PartiallyInitialized.noInitializer();
 }
 
 class Initialized {
-  int x;
+  int? x;
   Initialized(this.x);
 }
 
 class Forwarding {
-  int x;
+  int? x;
   Forwarding.initialize(this.x);
-  Forwarding(int arg) : this.initialize(arg);
+  Forwarding(int? arg) : this.initialize(arg);
 }
 
-int uninitializedTopLevel;
-int initializedTopLevel = 4;
+int? uninitializedTopLevel;
+int? initializedTopLevel = 4;
 main() {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline_modelled.expect
index 5d156f2..b147ef4 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.textual_outline_modelled.expect
@@ -1,25 +1,24 @@
-// @dart = 2.9
 class Forwarding {
-  Forwarding(int arg) : this.initialize(arg);
+  Forwarding(int? arg) : this.initialize(arg);
   Forwarding.initialize(this.x);
-  int x;
+  int? x;
 }
 
 class Initialized {
   Initialized(this.x);
-  int x;
+  int? x;
 }
 
 class PartiallyInitialized {
   PartiallyInitialized(this.x);
   PartiallyInitialized.noInitializer();
-  int x;
+  int? x;
 }
 
 class Uninitialized {
-  int x;
+  int? x;
 }
 
-int initializedTopLevel = 4;
-int uninitializedTopLevel;
+int? initializedTopLevel = 4;
+int? uninitializedTopLevel;
 main() {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.expect
index 66c109b..d8926dc 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.expect
@@ -1,77 +1,37 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Uninitialized extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::Uninitialized*
+  field core::int? x = null;
+  synthetic constructor •() → self::Uninitialized
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class PartiallyInitialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::PartiallyInitialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::PartiallyInitialized
     : self::PartiallyInitialized::x = x, super core::Object::•()
     ;
-  constructor noInitializer() → self::PartiallyInitialized*
+  constructor noInitializer() → self::PartiallyInitialized
     : self::PartiallyInitialized::x = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Initialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::Initialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::Initialized
     : self::Initialized::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Forwarding extends core::Object {
-  field core::int* x;
-  constructor initialize(core::int* x) → self::Forwarding*
+  field core::int? x;
+  constructor initialize(core::int? x) → self::Forwarding
     : self::Forwarding::x = x, super core::Object::•()
     ;
-  constructor •(core::int* arg) → self::Forwarding*
+  constructor •(core::int? arg) → self::Forwarding
     : this self::Forwarding::initialize(arg)
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* uninitializedTopLevel;
-static field core::int* initializedTopLevel = 4;
+static field core::int? uninitializedTopLevel;
+static field core::int? initializedTopLevel = 4;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect
index 66c109b..d8926dc 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect
@@ -1,77 +1,37 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Uninitialized extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::Uninitialized*
+  field core::int? x = null;
+  synthetic constructor •() → self::Uninitialized
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class PartiallyInitialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::PartiallyInitialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::PartiallyInitialized
     : self::PartiallyInitialized::x = x, super core::Object::•()
     ;
-  constructor noInitializer() → self::PartiallyInitialized*
+  constructor noInitializer() → self::PartiallyInitialized
     : self::PartiallyInitialized::x = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Initialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::Initialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::Initialized
     : self::Initialized::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Forwarding extends core::Object {
-  field core::int* x;
-  constructor initialize(core::int* x) → self::Forwarding*
+  field core::int? x;
+  constructor initialize(core::int? x) → self::Forwarding
     : self::Forwarding::x = x, super core::Object::•()
     ;
-  constructor •(core::int* arg) → self::Forwarding*
+  constructor •(core::int? arg) → self::Forwarding
     : this self::Forwarding::initialize(arg)
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* uninitializedTopLevel;
-static field core::int* initializedTopLevel = 4;
+static field core::int? uninitializedTopLevel;
+static field core::int? initializedTopLevel = 4;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.outline.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.outline.expect
index 0c30a7d..e34e8bb 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.outline.expect
@@ -1,72 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Uninitialized extends core::Object {
-  field core::int* x;
-  synthetic constructor •() → self::Uninitialized*
+  field core::int? x;
+  synthetic constructor •() → self::Uninitialized
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class PartiallyInitialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::PartiallyInitialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::PartiallyInitialized
     ;
-  constructor noInitializer() → self::PartiallyInitialized*
+  constructor noInitializer() → self::PartiallyInitialized
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Initialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::Initialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::Initialized
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Forwarding extends core::Object {
-  field core::int* x;
-  constructor initialize(core::int* x) → self::Forwarding*
+  field core::int? x;
+  constructor initialize(core::int? x) → self::Forwarding
     ;
-  constructor •(core::int* arg) → self::Forwarding*
+  constructor •(core::int? arg) → self::Forwarding
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* uninitializedTopLevel;
-static field core::int* initializedTopLevel;
+static field core::int? uninitializedTopLevel;
+static field core::int? initializedTopLevel;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.transformed.expect
index 66c109b..d8926dc 100644
--- a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.transformed.expect
@@ -1,77 +1,37 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Uninitialized extends core::Object {
-  field core::int* x = null;
-  synthetic constructor •() → self::Uninitialized*
+  field core::int? x = null;
+  synthetic constructor •() → self::Uninitialized
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class PartiallyInitialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::PartiallyInitialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::PartiallyInitialized
     : self::PartiallyInitialized::x = x, super core::Object::•()
     ;
-  constructor noInitializer() → self::PartiallyInitialized*
+  constructor noInitializer() → self::PartiallyInitialized
     : self::PartiallyInitialized::x = null, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Initialized extends core::Object {
-  field core::int* x;
-  constructor •(core::int* x) → self::Initialized*
+  field core::int? x;
+  constructor •(core::int? x) → self::Initialized
     : self::Initialized::x = x, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Forwarding extends core::Object {
-  field core::int* x;
-  constructor initialize(core::int* x) → self::Forwarding*
+  field core::int? x;
+  constructor initialize(core::int? x) → self::Forwarding
     : self::Forwarding::x = x, super core::Object::•()
     ;
-  constructor •(core::int* arg) → self::Forwarding*
+  constructor •(core::int? arg) → self::Forwarding
     : this self::Forwarding::initialize(arg)
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static field core::int* uninitializedTopLevel;
-static field core::int* initializedTopLevel = 4;
+static field core::int? uninitializedTopLevel;
+static field core::int? initializedTopLevel = 4;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart b/pkg/front_end/testcases/general/unsound_promotion.dart
index ac9a1e3..4cdbeab 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
index e5a07f2..15dae9c 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.expect
@@ -2,12 +2,12 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/unsound_promotion.dart:21:16: Error: Inferred type argument 'S' doesn't conform to the bound 'A' of the type variable 'T' on 'g'.
+// pkg/front_end/testcases/general/unsound_promotion.dart:23:16: Error: Inferred type argument 'S' doesn't conform to the bound 'A' of the type variable 'T' on 'g'.
 //  - 'A' is from 'pkg/front_end/testcases/general/unsound_promotion.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //     var list = g(s);
 //                ^
-// pkg/front_end/testcases/general/unsound_promotion.dart:13:11: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/unsound_promotion.dart:15:11: Context: This is the type variable whose bound isn't conformed to.
 // List<T> g<T extends A>(T t) {
 //           ^
 //
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect
index e5a07f2..15dae9c 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect
@@ -2,12 +2,12 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/unsound_promotion.dart:21:16: Error: Inferred type argument 'S' doesn't conform to the bound 'A' of the type variable 'T' on 'g'.
+// pkg/front_end/testcases/general/unsound_promotion.dart:23:16: Error: Inferred type argument 'S' doesn't conform to the bound 'A' of the type variable 'T' on 'g'.
 //  - 'A' is from 'pkg/front_end/testcases/general/unsound_promotion.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
 //     var list = g(s);
 //                ^
-// pkg/front_end/testcases/general/unsound_promotion.dart:13:11: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/unsound_promotion.dart:15:11: Context: This is the type variable whose bound isn't conformed to.
 // List<T> g<T extends A>(T t) {
 //           ^
 //
diff --git a/pkg/front_end/testcases/general/unused_methods.dart b/pkg/front_end/testcases/general/unused_methods.dart
index a70db6e..5d2c38c 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart
+++ b/pkg/front_end/testcases/general/unused_methods.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class UnusedClass {
   UnusedClass() {
     print('Unused');
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.textual_outline.expect b/pkg/front_end/testcases/general/unused_methods.dart.textual_outline.expect
index 443ea22..d30480d 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class UnusedClass {
   UnusedClass() {}
 }
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/unused_methods.dart.textual_outline_modelled.expect
index 4a09745..fe88e83 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class UsedAsBaseClass {
   void calledFromB() {}
   void calledFromSubclass() {}
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
index 060120a..30afbfa 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.expect
@@ -1,85 +1,45 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class UnusedClass extends core::Object {
-  constructor •() → self::UnusedClass*
+  constructor •() → self::UnusedClass
     : super core::Object::•() {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class UsedAsBaseClass extends core::Object {
-  synthetic constructor •() → self::UsedAsBaseClass*
+  synthetic constructor •() → self::UsedAsBaseClass
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
   method calledFromB() → void {
-    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() → void};
   }
   method calledFromSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class UsedAsInterface extends core::Object {
-  synthetic constructor •() → self::UsedAsInterface*
+  synthetic constructor •() → self::UsedAsInterface
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  synthetic constructor •() → self::InstantiatedButMethodsUnused*
+  synthetic constructor •() → self::InstantiatedButMethodsUnused
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassA*
+  synthetic constructor •() → self::ClassA
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
@@ -87,26 +47,26 @@
   }
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassB*
+  synthetic constructor •() → self::ClassB
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
     core::print("B");
-    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromB}(){() → void};
   }
   method calledFromSubclass() → void {}
 }
-static method baseClassCall(self::UsedAsBaseClass* object) → void {
-  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
+static method baseClassCall(self::UsedAsBaseClass object) → void {
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() → void};
 }
-static method interfaceCall(self::UsedAsInterface* object) → void {
-  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
+static method interfaceCall(self::UsedAsInterface object) → void {
+  object.{self::UsedAsInterface::usedInSubclass}(){() → void};
 }
-static method exactCallA(self::ClassA* object) → void {
-  object.{self::ClassA::usedInSubclass}(){() →* void};
+static method exactCallA(self::ClassA object) → void {
+  object.{self::ClassA::usedInSubclass}(){() → void};
 }
-static method exactCallB(self::ClassB* object) → void {
-  object.{self::ClassB::usedInSubclass}(){() →* void};
+static method exactCallB(self::ClassB object) → void {
+  object.{self::ClassB::usedInSubclass}(){() → void};
 }
 static method unusedTopLevel() → dynamic {
   core::print("Unused");
@@ -114,11 +74,11 @@
 static method usedTopLevel() → dynamic {}
 static method main() → dynamic {
   self::usedTopLevel();
-  self::ClassA* a = new self::ClassA::•();
+  self::ClassA a = new self::ClassA::•();
   self::exactCallA(a);
   self::baseClassCall(a);
   self::interfaceCall(a);
-  self::ClassB* b = new self::ClassB::•();
+  self::ClassB b = new self::ClassB::•();
   self::exactCallB(b);
   self::baseClassCall(b);
   self::interfaceCall(b);
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect
index 060120a..30afbfa 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect
@@ -1,85 +1,45 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class UnusedClass extends core::Object {
-  constructor •() → self::UnusedClass*
+  constructor •() → self::UnusedClass
     : super core::Object::•() {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class UsedAsBaseClass extends core::Object {
-  synthetic constructor •() → self::UsedAsBaseClass*
+  synthetic constructor •() → self::UsedAsBaseClass
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
   method calledFromB() → void {
-    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() → void};
   }
   method calledFromSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class UsedAsInterface extends core::Object {
-  synthetic constructor •() → self::UsedAsInterface*
+  synthetic constructor •() → self::UsedAsInterface
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  synthetic constructor •() → self::InstantiatedButMethodsUnused*
+  synthetic constructor •() → self::InstantiatedButMethodsUnused
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassA*
+  synthetic constructor •() → self::ClassA
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
@@ -87,26 +47,26 @@
   }
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassB*
+  synthetic constructor •() → self::ClassB
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
     core::print("B");
-    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromB}(){() → void};
   }
   method calledFromSubclass() → void {}
 }
-static method baseClassCall(self::UsedAsBaseClass* object) → void {
-  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
+static method baseClassCall(self::UsedAsBaseClass object) → void {
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() → void};
 }
-static method interfaceCall(self::UsedAsInterface* object) → void {
-  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
+static method interfaceCall(self::UsedAsInterface object) → void {
+  object.{self::UsedAsInterface::usedInSubclass}(){() → void};
 }
-static method exactCallA(self::ClassA* object) → void {
-  object.{self::ClassA::usedInSubclass}(){() →* void};
+static method exactCallA(self::ClassA object) → void {
+  object.{self::ClassA::usedInSubclass}(){() → void};
 }
-static method exactCallB(self::ClassB* object) → void {
-  object.{self::ClassB::usedInSubclass}(){() →* void};
+static method exactCallB(self::ClassB object) → void {
+  object.{self::ClassB::usedInSubclass}(){() → void};
 }
 static method unusedTopLevel() → dynamic {
   core::print("Unused");
@@ -114,11 +74,11 @@
 static method usedTopLevel() → dynamic {}
 static method main() → dynamic {
   self::usedTopLevel();
-  self::ClassA* a = new self::ClassA::•();
+  self::ClassA a = new self::ClassA::•();
   self::exactCallA(a);
   self::baseClassCall(a);
   self::interfaceCall(a);
-  self::ClassB* b = new self::ClassB::•();
+  self::ClassB b = new self::ClassB::•();
   self::exactCallB(b);
   self::baseClassCall(b);
   self::interfaceCall(b);
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.outline.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.outline.expect
index 1ddee56..7014eb3 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class UnusedClass extends core::Object {
-  constructor •() → self::UnusedClass*
+  constructor •() → self::UnusedClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class UsedAsBaseClass extends core::Object {
-  synthetic constructor •() → self::UsedAsBaseClass*
+  synthetic constructor •() → self::UsedAsBaseClass
     ;
   method usedInSubclass() → void
     ;
@@ -25,70 +15,40 @@
     ;
   method calledFromSubclass() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class UsedAsInterface extends core::Object {
-  synthetic constructor •() → self::UsedAsInterface*
+  synthetic constructor •() → self::UsedAsInterface
     ;
   method usedInSubclass() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  synthetic constructor •() → self::InstantiatedButMethodsUnused*
+  synthetic constructor •() → self::InstantiatedButMethodsUnused
     ;
   method usedInSubclass() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassA*
+  synthetic constructor •() → self::ClassA
     ;
   method usedInSubclass() → void
     ;
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassB*
+  synthetic constructor •() → self::ClassB
     ;
   method usedInSubclass() → void
     ;
   method calledFromSubclass() → void
     ;
 }
-static method baseClassCall(self::UsedAsBaseClass* object) → void
+static method baseClassCall(self::UsedAsBaseClass object) → void
   ;
-static method interfaceCall(self::UsedAsInterface* object) → void
+static method interfaceCall(self::UsedAsInterface object) → void
   ;
-static method exactCallA(self::ClassA* object) → void
+static method exactCallA(self::ClassA object) → void
   ;
-static method exactCallB(self::ClassB* object) → void
+static method exactCallB(self::ClassB object) → void
   ;
 static method unusedTopLevel() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
index 060120a..30afbfa 100644
--- a/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.transformed.expect
@@ -1,85 +1,45 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class UnusedClass extends core::Object {
-  constructor •() → self::UnusedClass*
+  constructor •() → self::UnusedClass
     : super core::Object::•() {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class UsedAsBaseClass extends core::Object {
-  synthetic constructor •() → self::UsedAsBaseClass*
+  synthetic constructor •() → self::UsedAsBaseClass
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
   method calledFromB() → void {
-    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() → void};
   }
   method calledFromSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class UsedAsInterface extends core::Object {
-  synthetic constructor •() → self::UsedAsInterface*
+  synthetic constructor •() → self::UsedAsInterface
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  synthetic constructor •() → self::InstantiatedButMethodsUnused*
+  synthetic constructor •() → self::InstantiatedButMethodsUnused
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
     core::print("Unused");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassA*
+  synthetic constructor •() → self::ClassA
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
@@ -87,26 +47,26 @@
   }
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  synthetic constructor •() → self::ClassB*
+  synthetic constructor •() → self::ClassB
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
     core::print("B");
-    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
+    this.{self::UsedAsBaseClass::calledFromB}(){() → void};
   }
   method calledFromSubclass() → void {}
 }
-static method baseClassCall(self::UsedAsBaseClass* object) → void {
-  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
+static method baseClassCall(self::UsedAsBaseClass object) → void {
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() → void};
 }
-static method interfaceCall(self::UsedAsInterface* object) → void {
-  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
+static method interfaceCall(self::UsedAsInterface object) → void {
+  object.{self::UsedAsInterface::usedInSubclass}(){() → void};
 }
-static method exactCallA(self::ClassA* object) → void {
-  object.{self::ClassA::usedInSubclass}(){() →* void};
+static method exactCallA(self::ClassA object) → void {
+  object.{self::ClassA::usedInSubclass}(){() → void};
 }
-static method exactCallB(self::ClassB* object) → void {
-  object.{self::ClassB::usedInSubclass}(){() →* void};
+static method exactCallB(self::ClassB object) → void {
+  object.{self::ClassB::usedInSubclass}(){() → void};
 }
 static method unusedTopLevel() → dynamic {
   core::print("Unused");
@@ -114,11 +74,11 @@
 static method usedTopLevel() → dynamic {}
 static method main() → dynamic {
   self::usedTopLevel();
-  self::ClassA* a = new self::ClassA::•();
+  self::ClassA a = new self::ClassA::•();
   self::exactCallA(a);
   self::baseClassCall(a);
   self::interfaceCall(a);
-  self::ClassB* b = new self::ClassB::•();
+  self::ClassB b = new self::ClassB::•();
   self::exactCallB(b);
   self::baseClassCall(b);
   self::interfaceCall(b);
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart b/pkg/front_end/testcases/general/var_as_type_name.dart
index dc79310..21030cd 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart
@@ -1,9 +1,9 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {
-  Map<String, var> m;
+  Map<String, var>? m;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.textual_outline.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.textual_outline.expect
index d013230..97f695e 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.textual_outline.expect
@@ -1,5 +1,4 @@
-// @dart = 2.9
 class A {
-  Map<String, var> m;
+  Map<String, var>? m;
 }
 main() {}
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.expect
index 4673e3d..d7d3382 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.expect
@@ -1,39 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: The keyword 'var' can't be used as a type name.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: 'var' isn't a type.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::Map<core::String*, invalid-type>* m = null;
-  synthetic constructor •() → self::A*
+  field core::Map<core::String, invalid-type>? m = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::m} = null;
 }
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect
index 4673e3d..d7d3382 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect
@@ -1,39 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: The keyword 'var' can't be used as a type name.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: 'var' isn't a type.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::Map<core::String*, invalid-type>* m = null;
-  synthetic constructor •() → self::A*
+  field core::Map<core::String, invalid-type>? m = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::m} = null;
 }
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.outline.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.outline.expect
index 4d3b219..926d61d 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: The keyword 'var' can't be used as a type name.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::Map<core::String*, invalid-type>* m;
-  synthetic constructor •() → self::A*
+  field core::Map<core::String, invalid-type>? m;
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.transformed.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.transformed.expect
index 4673e3d..d7d3382 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.transformed.expect
@@ -1,39 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: The keyword 'var' can't be used as a type name.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 // pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: 'var' isn't a type.
-//   Map<String, var> m;
+//   Map<String, var>? m;
 //               ^^^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::Map<core::String*, invalid-type>* m = null;
-  synthetic constructor •() → self::A*
+  field core::Map<core::String, invalid-type>? m = null;
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   a.{self::A::m} = null;
 }
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart b/pkg/front_end/testcases/general/vm_type_ops.dart
index dea0537..04f3785 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 // Copied from pkg/vm/testcases/bytecode/type_ops.dart
 
 class A<T> {}
@@ -51,14 +51,14 @@
   }
 }
 
-List<Iterable> globalVar;
+late List<Iterable> globalVar;
 
 void foo5(x) {
   globalVar = x;
 }
 
 class E<P extends String> {
-  factory E() => null;
+  factory E() => throw '';
   void foo6<T extends P, U extends List<T>>(Map<T, U> map) {}
 }
 
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline.expect
index ab65d0d..89d2735 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B extends A<String> {}
@@ -15,11 +14,11 @@
   Map<P, Q> foo4(w) {}
 }
 
-List<Iterable> globalVar;
+late List<Iterable> globalVar;
 void foo5(x) {}
 
 class E<P extends String> {
-  factory E() => null;
+  factory E() => throw '';
   void foo6<T extends P, U extends List<T>>(Map<T, U> map) {}
 }
 
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline_modelled.expect
index fbadedf..7720cab 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.textual_outline_modelled.expect
@@ -1,17 +1,6 @@
-// @dart = 2.9
-List<Iterable> globalVar;
-
-abstract class F<T> {
-  void foo7<Q extends T>(Q a, covariant num b, T c);
-  void foo8<Q extends T>(Q a, covariant num b, T c);
-}
-
 class A<T> {}
-
 class B extends A<String> {}
-
 class C<T1, T2, T3> extends B {}
-
 class D<P, Q> extends C<int, Q, P> {
   D(tt) : foo = tt;
   Map<P, Q> foo;
@@ -19,20 +8,24 @@
   foo2(y) {}
   foo3<T1, T2>(z) {}
 }
-
+foo1(x) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+List<Iterable> globalVar;
+abstract class F<T> {
+  void foo7<Q extends T>(Q a, covariant num b, T c);
+  void foo8<Q extends T>(Q a, covariant num b, T c);
+}
 class E<P extends String> {
-  factory E() => null;
+  factory E() => throw '';
   void foo6<T extends P, U extends List<T>>(Map<T, U> map) {}
 }
-
 class G<T> {
   void foo7<Q extends T>(Q a, int b, T c) {}
 }
-
 class H<T> extends G<T> implements F<T> {
   void foo8<Q extends T>(Q a, int b, T c) {}
 }
-
-foo1(x) {}
 main() {}
 void foo5(x) {}
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
index 47d6412f..17dd908 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
@@ -1,127 +1,87 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic, T3 extends core::Object* = dynamic> extends self::B {
-  synthetic constructor •() → self::C<self::C::T1*, self::C::T2*, self::C::T3*>*
+class C<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic> extends self::B {
+  synthetic constructor •() → self::C<self::C::T1%, self::C::T2%, self::C::T3%>
     : super self::B::•()
     ;
 }
-class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
-  constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
-    : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
+class D<P extends core::Object? = dynamic, Q extends core::Object? = dynamic> extends self::C<core::int, self::D::Q%, self::D::P%> {
+  covariant-by-class field core::Map<self::D::P%, self::D::Q%> foo;
+  constructor •(dynamic tt) → self::D<self::D::P%, self::D::Q%>
+    : self::D::foo = tt as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>, super self::C::•()
     ;
   method foo2(dynamic y) → dynamic {
-    if(y is self::A<self::D::P*>*) {
+    if(y is{ForNonNullableByDefault} self::A<self::D::P%>) {
       core::print("21");
     }
-    if(y is self::C<dynamic, self::D::Q*, core::List<self::D::P*>*>*) {
+    if(y is{ForNonNullableByDefault} self::C<dynamic, self::D::Q%, core::List<self::D::P%>>) {
       core::print("22");
     }
-    this.{self::D::foo} = y as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+    this.{self::D::foo} = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
-  method foo3<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic>(dynamic z) → dynamic {
-    if(z is self::A<self::D::foo3::T1*>*) {
+  method foo3<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(dynamic z) → dynamic {
+    if(z is{ForNonNullableByDefault} self::A<self::D::foo3::T1%>) {
       core::print("31");
     }
-    if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
+    if(z is{ForNonNullableByDefault} self::C<core::Map<self::D::foo3::T1%, self::D::P%>, core::List<self::D::foo3::T2%>, self::D::Q%>) {
       core::print("32");
     }
-    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
+    return (z as{ForNonNullableByDefault} core::Map<self::D::foo3::T2%, self::D::Q%>).{core::Map::values}{core::Iterable<self::D::Q%>};
   }
-  method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
-    core::List<core::Map<self::D::P*, self::D::Q*>*>* list = <core::Map<self::D::P*, self::D::Q*>*>[w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*];
-    return w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+  method foo4(dynamic w) → core::Map<self::D::P%, self::D::Q%> {
+    core::List<core::Map<self::D::P%, self::D::Q%>> list = <core::Map<self::D::P%, self::D::Q%>>[w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>];
+    return w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
 }
-class E<P extends core::String*> extends core::Object {
-  static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
-    return null;
-  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class E<P extends core::String> extends core::Object {
+  static factory •<P extends core::String>() → self::E<self::E::•::P>
+    return throw "";
+  method foo6<covariant-by-class T extends self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void {}
 }
-abstract class F<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::T*>*
+abstract class F<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::T%>
     : super core::Object::•()
     ;
-  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo7<covariant-by-class Q extends self::F::T%>(self::F::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T%>(self::F::foo8::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
 }
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo7<covariant-by-class Q extends self::G::T%>(self::G::foo7::Q% a, core::int b, covariant-by-class self::G::T% c) → void {}
 }
-class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
-  synthetic constructor •() → self::H<self::H::T*>*
+class H<T extends core::Object? = dynamic> extends self::G<self::H::T%> implements self::F<self::H::T%> {
+  synthetic constructor •() → self::H<self::H::T%>
     : super self::G::•()
     ;
-  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
-  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
-    return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
+  method foo8<covariant-by-class Q extends self::H::T%>(self::H::foo8::Q% a, covariant-by-declaration core::int b, covariant-by-class self::H::T% c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T%>(self::H::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::H::T% c) → void
+    return super.{self::G::foo7}<self::H::foo7::Q%>(a, b as core::int, c);
 }
-static field core::List<core::Iterable<dynamic>*>* globalVar;
+late static field core::List<core::Iterable<dynamic>> globalVar;
 static method foo1(dynamic x) → dynamic {
-  if(x is self::B*) {
+  if(x is{ForNonNullableByDefault} self::B) {
     core::print("11");
   }
-  if(x is self::C<core::int*, core::Object*, dynamic>*) {
+  if(x is{ForNonNullableByDefault} self::C<core::int, core::Object, dynamic>) {
     core::print("12");
   }
-  return x as self::A<core::int*>*;
+  return x as{ForNonNullableByDefault} self::A<core::int>;
 }
 static method foo5(dynamic x) → void {
-  self::globalVar = x as{TypeError,ForDynamic} core::List<core::Iterable<dynamic>*>*;
+  self::globalVar = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::Iterable<dynamic>>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect
index 47d6412f..17dd908 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect
@@ -1,127 +1,87 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic, T3 extends core::Object* = dynamic> extends self::B {
-  synthetic constructor •() → self::C<self::C::T1*, self::C::T2*, self::C::T3*>*
+class C<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic> extends self::B {
+  synthetic constructor •() → self::C<self::C::T1%, self::C::T2%, self::C::T3%>
     : super self::B::•()
     ;
 }
-class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
-  constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
-    : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
+class D<P extends core::Object? = dynamic, Q extends core::Object? = dynamic> extends self::C<core::int, self::D::Q%, self::D::P%> {
+  covariant-by-class field core::Map<self::D::P%, self::D::Q%> foo;
+  constructor •(dynamic tt) → self::D<self::D::P%, self::D::Q%>
+    : self::D::foo = tt as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>, super self::C::•()
     ;
   method foo2(dynamic y) → dynamic {
-    if(y is self::A<self::D::P*>*) {
+    if(y is{ForNonNullableByDefault} self::A<self::D::P%>) {
       core::print("21");
     }
-    if(y is self::C<dynamic, self::D::Q*, core::List<self::D::P*>*>*) {
+    if(y is{ForNonNullableByDefault} self::C<dynamic, self::D::Q%, core::List<self::D::P%>>) {
       core::print("22");
     }
-    this.{self::D::foo} = y as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+    this.{self::D::foo} = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
-  method foo3<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic>(dynamic z) → dynamic {
-    if(z is self::A<self::D::foo3::T1*>*) {
+  method foo3<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(dynamic z) → dynamic {
+    if(z is{ForNonNullableByDefault} self::A<self::D::foo3::T1%>) {
       core::print("31");
     }
-    if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
+    if(z is{ForNonNullableByDefault} self::C<core::Map<self::D::foo3::T1%, self::D::P%>, core::List<self::D::foo3::T2%>, self::D::Q%>) {
       core::print("32");
     }
-    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
+    return (z as{ForNonNullableByDefault} core::Map<self::D::foo3::T2%, self::D::Q%>).{core::Map::values}{core::Iterable<self::D::Q%>};
   }
-  method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
-    core::List<core::Map<self::D::P*, self::D::Q*>*>* list = <core::Map<self::D::P*, self::D::Q*>*>[w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*];
-    return w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+  method foo4(dynamic w) → core::Map<self::D::P%, self::D::Q%> {
+    core::List<core::Map<self::D::P%, self::D::Q%>> list = <core::Map<self::D::P%, self::D::Q%>>[w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>];
+    return w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
 }
-class E<P extends core::String*> extends core::Object {
-  static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
-    return null;
-  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class E<P extends core::String> extends core::Object {
+  static factory •<P extends core::String>() → self::E<self::E::•::P>
+    return throw "";
+  method foo6<covariant-by-class T extends self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void {}
 }
-abstract class F<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::T*>*
+abstract class F<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::T%>
     : super core::Object::•()
     ;
-  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo7<covariant-by-class Q extends self::F::T%>(self::F::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T%>(self::F::foo8::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
 }
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo7<covariant-by-class Q extends self::G::T%>(self::G::foo7::Q% a, core::int b, covariant-by-class self::G::T% c) → void {}
 }
-class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
-  synthetic constructor •() → self::H<self::H::T*>*
+class H<T extends core::Object? = dynamic> extends self::G<self::H::T%> implements self::F<self::H::T%> {
+  synthetic constructor •() → self::H<self::H::T%>
     : super self::G::•()
     ;
-  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
-  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
-    return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
+  method foo8<covariant-by-class Q extends self::H::T%>(self::H::foo8::Q% a, covariant-by-declaration core::int b, covariant-by-class self::H::T% c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T%>(self::H::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::H::T% c) → void
+    return super.{self::G::foo7}<self::H::foo7::Q%>(a, b as core::int, c);
 }
-static field core::List<core::Iterable<dynamic>*>* globalVar;
+late static field core::List<core::Iterable<dynamic>> globalVar;
 static method foo1(dynamic x) → dynamic {
-  if(x is self::B*) {
+  if(x is{ForNonNullableByDefault} self::B) {
     core::print("11");
   }
-  if(x is self::C<core::int*, core::Object*, dynamic>*) {
+  if(x is{ForNonNullableByDefault} self::C<core::int, core::Object, dynamic>) {
     core::print("12");
   }
-  return x as self::A<core::int*>*;
+  return x as{ForNonNullableByDefault} self::A<core::int>;
 }
 static method foo5(dynamic x) → void {
-  self::globalVar = x as{TypeError,ForDynamic} core::List<core::Iterable<dynamic>*>*;
+  self::globalVar = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::Iterable<dynamic>>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
index 1f5d785..a5cbf1b 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
@@ -1,97 +1,57 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
 }
-class C<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic, T3 extends core::Object* = dynamic> extends self::B {
-  synthetic constructor •() → self::C<self::C::T1*, self::C::T2*, self::C::T3*>*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     ;
 }
-class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
-  constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
+class C<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic> extends self::B {
+  synthetic constructor •() → self::C<self::C::T1%, self::C::T2%, self::C::T3%>
+    ;
+}
+class D<P extends core::Object? = dynamic, Q extends core::Object? = dynamic> extends self::C<core::int, self::D::Q%, self::D::P%> {
+  covariant-by-class field core::Map<self::D::P%, self::D::Q%> foo;
+  constructor •(dynamic tt) → self::D<self::D::P%, self::D::Q%>
     ;
   method foo2(dynamic y) → dynamic
     ;
-  method foo3<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic>(dynamic z) → dynamic
+  method foo3<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(dynamic z) → dynamic
     ;
-  method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>*
+  method foo4(dynamic w) → core::Map<self::D::P%, self::D::Q%>
     ;
 }
-class E<P extends core::String*> extends core::Object {
-  static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
+class E<P extends core::String> extends core::Object {
+  static factory •<P extends core::String>() → self::E<self::E::•::P>
     ;
-  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void
+  method foo6<covariant-by-class T extends self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-abstract class F<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::T*>*
+abstract class F<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::T%>
     ;
-  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo7<covariant-by-class Q extends self::F::T%>(self::F::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T%>(self::F::foo8::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
 }
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     ;
-  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void
+  method foo7<covariant-by-class Q extends self::G::T%>(self::G::foo7::Q% a, core::int b, covariant-by-class self::G::T% c) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
-  synthetic constructor •() → self::H<self::H::T*>*
+class H<T extends core::Object? = dynamic> extends self::G<self::H::T%> implements self::F<self::H::T%> {
+  synthetic constructor •() → self::H<self::H::T%>
     ;
-  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void
+  method foo8<covariant-by-class Q extends self::H::T%>(self::H::foo8::Q% a, covariant-by-declaration core::int b, covariant-by-class self::H::T% c) → void
     ;
-  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
-    return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T%>(self::H::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::H::T% c) → void
+    return super.{self::G::foo7}<self::H::foo7::Q%>(a, b as core::int, c);
 }
-static field core::List<core::Iterable<dynamic>*>* globalVar;
+late static field core::List<core::Iterable<dynamic>> globalVar;
 static method foo1(dynamic x) → dynamic
   ;
 static method foo5(dynamic x) → void
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
index 96a4931..4df369e 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
@@ -1,127 +1,87 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B extends self::A<core::String*> {
-  synthetic constructor •() → self::B*
+class B extends self::A<core::String> {
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class C<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic, T3 extends core::Object* = dynamic> extends self::B {
-  synthetic constructor •() → self::C<self::C::T1*, self::C::T2*, self::C::T3*>*
+class C<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic, T3 extends core::Object? = dynamic> extends self::B {
+  synthetic constructor •() → self::C<self::C::T1%, self::C::T2%, self::C::T3%>
     : super self::B::•()
     ;
 }
-class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
-  constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
-    : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
+class D<P extends core::Object? = dynamic, Q extends core::Object? = dynamic> extends self::C<core::int, self::D::Q%, self::D::P%> {
+  covariant-by-class field core::Map<self::D::P%, self::D::Q%> foo;
+  constructor •(dynamic tt) → self::D<self::D::P%, self::D::Q%>
+    : self::D::foo = tt as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>, super self::C::•()
     ;
   method foo2(dynamic y) → dynamic {
-    if(y is self::A<self::D::P*>*) {
+    if(y is{ForNonNullableByDefault} self::A<self::D::P%>) {
       core::print("21");
     }
-    if(y is self::C<dynamic, self::D::Q*, core::List<self::D::P*>*>*) {
+    if(y is{ForNonNullableByDefault} self::C<dynamic, self::D::Q%, core::List<self::D::P%>>) {
       core::print("22");
     }
-    this.{self::D::foo} = y as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+    this.{self::D::foo} = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
-  method foo3<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic>(dynamic z) → dynamic {
-    if(z is self::A<self::D::foo3::T1*>*) {
+  method foo3<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(dynamic z) → dynamic {
+    if(z is{ForNonNullableByDefault} self::A<self::D::foo3::T1%>) {
       core::print("31");
     }
-    if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
+    if(z is{ForNonNullableByDefault} self::C<core::Map<self::D::foo3::T1%, self::D::P%>, core::List<self::D::foo3::T2%>, self::D::Q%>) {
       core::print("32");
     }
-    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
+    return (z as{ForNonNullableByDefault} core::Map<self::D::foo3::T2%, self::D::Q%>).{core::Map::values}{core::Iterable<self::D::Q%>};
   }
-  method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
-    core::List<core::Map<self::D::P*, self::D::Q*>*>* list = core::_GrowableList::_literal1<core::Map<self::D::P*, self::D::Q*>*>(w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*);
-    return w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+  method foo4(dynamic w) → core::Map<self::D::P%, self::D::Q%> {
+    core::List<core::Map<self::D::P%, self::D::Q%>> list = core::_GrowableList::_literal1<core::Map<self::D::P%, self::D::Q%>>(w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>);
+    return w as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<self::D::P%, self::D::Q%>;
   }
 }
-class E<P extends core::String*> extends core::Object {
-  static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
-    return null;
-  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+class E<P extends core::String> extends core::Object {
+  static factory •<P extends core::String>() → self::E<self::E::•::P>
+    return throw "";
+  method foo6<covariant-by-class T extends self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void {}
 }
-abstract class F<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::F<self::F::T*>*
+abstract class F<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::T%>
     : super core::Object::•()
     ;
-  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method foo7<covariant-by-class Q extends self::F::T%>(self::F::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T%>(self::F::foo8::Q% a, covariant-by-declaration core::num b, covariant-by-class self::F::T% c) → void;
 }
-class G<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T%>
     : super core::Object::•()
     ;
-  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method foo7<covariant-by-class Q extends self::G::T%>(self::G::foo7::Q% a, core::int b, covariant-by-class self::G::T% c) → void {}
 }
-class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
-  synthetic constructor •() → self::H<self::H::T*>*
+class H<T extends core::Object? = dynamic> extends self::G<self::H::T%> implements self::F<self::H::T%> {
+  synthetic constructor •() → self::H<self::H::T%>
     : super self::G::•()
     ;
-  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
-  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
-    return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
+  method foo8<covariant-by-class Q extends self::H::T%>(self::H::foo8::Q% a, covariant-by-declaration core::int b, covariant-by-class self::H::T% c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T%>(self::H::foo7::Q% a, covariant-by-declaration core::num b, covariant-by-class self::H::T% c) → void
+    return super.{self::G::foo7}<self::H::foo7::Q%>(a, b as core::int, c);
 }
-static field core::List<core::Iterable<dynamic>*>* globalVar;
+late static field core::List<core::Iterable<dynamic>> globalVar;
 static method foo1(dynamic x) → dynamic {
-  if(x is self::B*) {
+  if(x is{ForNonNullableByDefault} self::B) {
     core::print("11");
   }
-  if(x is self::C<core::int*, core::Object*, dynamic>*) {
+  if(x is{ForNonNullableByDefault} self::C<core::int, core::Object, dynamic>) {
     core::print("12");
   }
-  return x as self::A<core::int*>*;
+  return x as{ForNonNullableByDefault} self::A<core::int>;
 }
 static method foo5(dynamic x) → void {
-  self::globalVar = x as{TypeError,ForDynamic} core::List<core::Iterable<dynamic>*>*;
+  self::globalVar = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::Iterable<dynamic>>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/void_methods.dart b/pkg/front_end/testcases/general/void_methods.dart
index a313fb6..5e8d6f7 100644
--- a/pkg/front_end/testcases/general/void_methods.dart
+++ b/pkg/front_end/testcases/general/void_methods.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class Foo {
   List list = [1, 2, 3];
   set first(x) => list[0] = x;
diff --git a/pkg/front_end/testcases/general/void_methods.dart.textual_outline.expect b/pkg/front_end/testcases/general/void_methods.dart.textual_outline.expect
index bf49b71..a23d97f 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   List list = [1, 2, 3];
   set first(x) => list[0] = x;
diff --git a/pkg/front_end/testcases/general/void_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/void_methods.dart.textual_outline_modelled.expect
index 4637b10..f5f0084 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   List list = [1, 2, 3];
   operator []=(x, y) => list[x] = y;
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.expect
index dff46ae..7442dc4 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::List<dynamic>* list = <dynamic>[1, 2, 3];
-  synthetic constructor •() → self::Foo*
+  field core::List<dynamic> list = <dynamic>[1, 2, 3];
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
+    return let final core::List<dynamic> #t1 = this.{self::Foo::list}{core::List<dynamic>} in let final core::int #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, dynamic) → void} in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
+    return let final core::List<dynamic> #t5 = this.{self::Foo::list}{core::List<dynamic>} in let final dynamic #t6 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int, dynamic) → void} in #t7;
   method clear() → void
-    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::Foo::list}{core::List<dynamic>}.{core::List::clear}(){() → void};
 }
 static method main() → dynamic {
   new self::Foo::•().{self::Foo::first} = 4;
-  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::clear}(){() →* void};
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::clear}(){() → void};
 }
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect
index dff46ae..7442dc4 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::List<dynamic>* list = <dynamic>[1, 2, 3];
-  synthetic constructor •() → self::Foo*
+  field core::List<dynamic> list = <dynamic>[1, 2, 3];
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
+    return let final core::List<dynamic> #t1 = this.{self::Foo::list}{core::List<dynamic>} in let final core::int #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, dynamic) → void} in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
+    return let final core::List<dynamic> #t5 = this.{self::Foo::list}{core::List<dynamic>} in let final dynamic #t6 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int, dynamic) → void} in #t7;
   method clear() → void
-    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::Foo::list}{core::List<dynamic>}.{core::List::clear}(){() → void};
 }
 static method main() → dynamic {
   new self::Foo::•().{self::Foo::first} = 4;
-  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::clear}(){() →* void};
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::clear}(){() → void};
 }
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.outline.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.outline.expect
index af66f5b..7fdf48c 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::List<dynamic>* list;
-  synthetic constructor •() → self::Foo*
+  field core::List<dynamic> list;
+  synthetic constructor •() → self::Foo
     ;
   set first(dynamic x) → void
     ;
@@ -12,16 +12,6 @@
     ;
   method clear() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
index a6dfbf8..cb19514 100644
--- a/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.transformed.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field core::List<dynamic>* list = core::_GrowableList::_literal3<dynamic>(1, 2, 3);
-  synthetic constructor •() → self::Foo*
+  field core::List<dynamic> list = core::_GrowableList::_literal3<dynamic>(1, 2, 3);
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   set first(dynamic x) → void
-    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
+    return let final core::List<dynamic> #t1 = this.{self::Foo::list}{core::List<dynamic>} in let final core::int #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int, dynamic) → void} in #t3;
   operator []=(dynamic x, dynamic y) → void
-    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
+    return let final core::List<dynamic> #t5 = this.{self::Foo::list}{core::List<dynamic>} in let final core::int #t6 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int, dynamic) → void} in #t7;
   method clear() → void
-    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+    return this.{self::Foo::list}{core::List<dynamic>}.{core::List::clear}(){() → void};
 }
 static method main() → dynamic {
   new self::Foo::•().{self::Foo::first} = 4;
-  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::clear}(){() →* void};
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::clear}(){() → void};
 }
 
 
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart b/pkg/front_end/testcases/general/warn_unresolved_sends.dart
index 92e87a5..ba78add 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class C {
   var superField;
   superMethod() {}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline.expect
index 55d70d6..9862754 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   var superField;
   superMethod() {}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline_modelled.expect
index 0d861b4..73c7281 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   get getterOnly => null;
   get setterOnly => null;
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
index 300333f2..3ea613a 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -43,7 +43,7 @@
 
 class C extends core::Object {
   field dynamic superField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method superMethod() → dynamic {}
@@ -53,20 +53,10 @@
   get getterOnly() → dynamic
     return null;
   set getterOnly(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
   field dynamic field = null;
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   set setterOnly(dynamic _) → void {}
@@ -78,8 +68,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -88,8 +78,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -128,7 +118,7 @@
 }
 class E extends self::D {
   field dynamic missingField = null;
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
   method missingMethod() → void {}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect
index 300333f2..3ea613a 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -43,7 +43,7 @@
 
 class C extends core::Object {
   field dynamic superField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method superMethod() → dynamic {}
@@ -53,20 +53,10 @@
   get getterOnly() → dynamic
     return null;
   set getterOnly(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
   field dynamic field = null;
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   set setterOnly(dynamic _) → void {}
@@ -78,8 +68,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -88,8 +78,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -128,7 +118,7 @@
 }
 class E extends self::D {
   field dynamic missingField = null;
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
   method missingMethod() → void {}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.outline.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.outline.expect
index ef5e55a..7b5f46b 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
   field dynamic superField;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method superMethod() → dynamic
     ;
@@ -16,20 +16,10 @@
     ;
   set getterOnly(dynamic _) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
   field dynamic field;
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   set setterOnly(dynamic _) → void
     ;
@@ -42,7 +32,7 @@
 }
 class E extends self::D {
   field dynamic missingField;
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
   method missingMethod() → void
     ;
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
index 300333f2..3ea613a 100644
--- a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -43,7 +43,7 @@
 
 class C extends core::Object {
   field dynamic superField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method superMethod() → dynamic {}
@@ -53,20 +53,10 @@
   get getterOnly() → dynamic
     return null;
   set getterOnly(dynamic _) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends self::C {
   field dynamic field = null;
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   set setterOnly(dynamic _) → void {}
@@ -78,8 +68,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -88,8 +78,8 @@
     this.{self::C::superField}{dynamic};
     this.{self::D::field} = 0;
     this.{self::C::superField} = 0;
-    this.{self::D::method}(){() →* dynamic};
-    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::D::method}(){() → dynamic};
+    this.{self::C::superMethod}(){() → dynamic};
     this.{self::C::setterOnly}{dynamic};
     this.{self::D::setterOnly} = 0;
     this.{self::D::getterOnly}{dynamic};
@@ -128,7 +118,7 @@
 }
 class E extends self::D {
   field dynamic missingField = null;
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
   method missingMethod() → void {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart
index fd3815d..dd3af5d9 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 class A<X extends int> {}
 
 class B {
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
index a688b79..145ed00 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:8:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
 //          ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:9:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> staticFieldOfA; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
 //             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
 //                ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
 //                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
index a688b79..145ed00 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:8:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
 //          ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:9:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> staticFieldOfA; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
 //             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
 //                ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
 //                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
index f1bac31..401ed4e 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.outline.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:8:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
 //          ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:9:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> staticFieldOfA; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
 //             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
 //                ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
 //                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
index a688b79..145ed00 100644
--- a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.transformed.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:8:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:10:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fieldOfA; // Error.
 //          ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:9:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:11:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> staticFieldOfA; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 // extension E<X extends A<num>> // Error.
 //             ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   static A<num> fieldOfE; // Error.
 //                 ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
 //   A<num> fooOfE() => null; // Error.
 //                ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:18:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void barOfE(A<num> a) {} // Error.
 //                      ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:19:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
 //   void bazOfE<Y extends A<num>>() {} // Error.
 //               ^
-// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends int> {}
 //         ^
 //
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart
new file mode 100644
index 0000000..3eca954
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2020, 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.
+
+class A<X extends int> {}
+
+class B {
+  A<num>? fieldOfA; // Error.
+  static A<num>? staticFieldOfA; // Error.
+}
+
+extension E<X extends A<num>> // Error.
+    on A {
+  static A<num>? fieldOfE; // Error.
+  A<num>? fooOfE() => null; // Error.
+  void barOfE(A<num> a) {} // Error.
+  void bazOfE<Y extends A<num>>() {} // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline.expect
new file mode 100644
index 0000000..84ddb17
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class A<X extends int> {}
+
+class B {
+  A<num>? fieldOfA;
+  static A<num>? staticFieldOfA;
+}
+
+extension E<X extends A<num>> on A {
+  static A<num>? fieldOfE;
+  A<num>? fooOfE() => null;
+  void barOfE(A<num> a) {}
+  void bazOfE<Y extends A<num>>() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8a06cad
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A<X extends int> {}
+
+class B {
+  A<num>? fieldOfA;
+  static A<num>? staticFieldOfA;
+}
+
+extension E<X extends A<num>> on A {
+  A<num>? fooOfE() => null;
+  static A<num>? fieldOfE;
+  void barOfE(A<num> a) {}
+  void bazOfE<Y extends A<num>>() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect
new file mode 100644
index 0000000..c19f798
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//           ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  field self::A<core::num>? fieldOfA = null;
+  static field self::A<core::num>? staticFieldOfA = null;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+extension E<X extends self::A<core::num>> on self::A<core::int> {
+  static field fieldOfE = self::E|fieldOfE;
+  method fooOfE = self::E|fooOfE;
+  tearoff fooOfE = self::E|get#fooOfE;
+  method barOfE = self::E|barOfE;
+  tearoff barOfE = self::E|get#barOfE;
+  method bazOfE = self::E|bazOfE;
+  tearoff bazOfE = self::E|get#bazOfE;
+}
+static field self::A<core::num>? E|fieldOfE;
+static method E|fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → self::A<core::num>?
+  return null;
+static method E|get#fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → () → self::A<core::num>?
+  return () → self::A<core::num>? => self::E|fooOfE<self::E|get#fooOfE::X>(#this);
+static method E|barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this, self::A<core::num> a) → void {}
+static method E|get#barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → (self::A<core::num>) → void
+  return (self::A<core::num> a) → void => self::E|barOfE<self::E|get#barOfE::X>(#this, a);
+static method E|bazOfE<X extends self::A<core::num>, Y extends self::A<core::num>>(lowered final self::A<core::int> #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → <Y extends self::A<core::num>>() → void
+  return <Y extends self::A<core::num>>() → void => self::E|bazOfE<self::E|get#bazOfE::X, Y>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect
new file mode 100644
index 0000000..c19f798
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.modular.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//           ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  field self::A<core::num>? fieldOfA = null;
+  static field self::A<core::num>? staticFieldOfA = null;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+extension E<X extends self::A<core::num>> on self::A<core::int> {
+  static field fieldOfE = self::E|fieldOfE;
+  method fooOfE = self::E|fooOfE;
+  tearoff fooOfE = self::E|get#fooOfE;
+  method barOfE = self::E|barOfE;
+  tearoff barOfE = self::E|get#barOfE;
+  method bazOfE = self::E|bazOfE;
+  tearoff bazOfE = self::E|get#bazOfE;
+}
+static field self::A<core::num>? E|fieldOfE;
+static method E|fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → self::A<core::num>?
+  return null;
+static method E|get#fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → () → self::A<core::num>?
+  return () → self::A<core::num>? => self::E|fooOfE<self::E|get#fooOfE::X>(#this);
+static method E|barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this, self::A<core::num> a) → void {}
+static method E|get#barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → (self::A<core::num>) → void
+  return (self::A<core::num> a) → void => self::E|barOfE<self::E|get#barOfE::X>(#this, a);
+static method E|bazOfE<X extends self::A<core::num>, Y extends self::A<core::num>>(lowered final self::A<core::int> #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → <Y extends self::A<core::num>>() → void
+  return <Y extends self::A<core::num>>() → void => self::E|bazOfE<self::E|get#bazOfE::X, Y>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect
new file mode 100644
index 0000000..ed99e3a
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.outline.expect
@@ -0,0 +1,97 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//           ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    ;
+}
+class B extends core::Object {
+  field self::A<core::num>? fieldOfA;
+  static field self::A<core::num>? staticFieldOfA;
+  synthetic constructor •() → self::B
+    ;
+}
+extension E<X extends self::A<core::num>> on self::A<core::int> {
+  static field fieldOfE = self::E|fieldOfE;
+  method fooOfE = self::E|fooOfE;
+  tearoff fooOfE = self::E|get#fooOfE;
+  method barOfE = self::E|barOfE;
+  tearoff barOfE = self::E|get#barOfE;
+  method bazOfE = self::E|bazOfE;
+  tearoff bazOfE = self::E|get#bazOfE;
+}
+static field self::A<core::num>? E|fieldOfE;
+static method E|fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → self::A<core::num>?
+  ;
+static method E|get#fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → () → self::A<core::num>?
+  return () → self::A<core::num>? => self::E|fooOfE<self::E|get#fooOfE::X>(#this);
+static method E|barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this, self::A<core::num> a) → void
+  ;
+static method E|get#barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → (self::A<core::num>) → void
+  return (self::A<core::num> a) → void => self::E|barOfE<self::E|get#barOfE::X>(#this, a);
+static method E|bazOfE<X extends self::A<core::num>, Y extends self::A<core::num>>(lowered final self::A<core::int> #this) → void
+  ;
+static method E|get#bazOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → <Y extends self::A<core::num>>() → void
+  return <Y extends self::A<core::num>>() → void => self::E|bazOfE<self::E|get#bazOfE::X, Y>(#this);
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect
new file mode 100644
index 0000000..c19f798
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart.weak.transformed.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:8:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fieldOfA; // Error.
+//           ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:9:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? staticFieldOfA; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:14:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num>? fieldOfE; // Error.
+//                  ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:15:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num>? fooOfE() => null; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline2.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  field self::A<core::num>? fieldOfA = null;
+  static field self::A<core::num>? staticFieldOfA = null;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+extension E<X extends self::A<core::num>> on self::A<core::int> {
+  static field fieldOfE = self::E|fieldOfE;
+  method fooOfE = self::E|fooOfE;
+  tearoff fooOfE = self::E|get#fooOfE;
+  method barOfE = self::E|barOfE;
+  tearoff barOfE = self::E|get#barOfE;
+  method bazOfE = self::E|bazOfE;
+  tearoff bazOfE = self::E|get#bazOfE;
+}
+static field self::A<core::num>? E|fieldOfE;
+static method E|fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → self::A<core::num>?
+  return null;
+static method E|get#fooOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → () → self::A<core::num>?
+  return () → self::A<core::num>? => self::E|fooOfE<self::E|get#fooOfE::X>(#this);
+static method E|barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this, self::A<core::num> a) → void {}
+static method E|get#barOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → (self::A<core::num>) → void
+  return (self::A<core::num> a) → void => self::E|barOfE<self::E|get#barOfE::X>(#this, a);
+static method E|bazOfE<X extends self::A<core::num>, Y extends self::A<core::num>>(lowered final self::A<core::int> #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num>>(lowered final self::A<core::int> #this) → <Y extends self::A<core::num>>() → void
+  return <Y extends self::A<core::num>>() → void => self::E|bazOfE<self::E|get#bazOfE::X, Y>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart
index 2332f9c..37e1db0 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'main_lib.dart';
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline.expect
index ca22c81..085740d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib.dart';
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline_modelled.expect
index ca22c81..085740d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib.dart';
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.expect
index 252b247..cb2c7ff 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.expect
@@ -1,35 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib.dart" as mai;
 
 import "org-dartlang-testcase:///main_lib.dart";
 
 class B extends mai::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super mai::A::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → mai::A*
+  synthetic constructor •() → mai::A
     : super core::Object::•()
     ;
   @#C1
-  abstract method noSuchMethod(core::Invocation* invocation) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect
index f1e3ba3..af0f39a 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib.dart" as mai;
 
 import "org-dartlang-testcase:///main_lib.dart";
 
 class B extends mai::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super mai::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.outline.expect
index f520722..3818b16 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.outline.expect
@@ -1,34 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib.dart" as mai;
 
 import "org-dartlang-testcase:///main_lib.dart";
 
 class B extends mai::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → mai::A*
+  synthetic constructor •() → mai::A
     ;
   @#C1
-  abstract method noSuchMethod(core::Invocation* invocation) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.transformed.expect
index 252b247..cb2c7ff 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.transformed.expect
@@ -1,35 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib.dart" as mai;
 
 import "org-dartlang-testcase:///main_lib.dart";
 
 class B extends mai::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super mai::A::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → mai::A*
+  synthetic constructor •() → mai::A
     : super core::Object::•()
     ;
   @#C1
-  abstract method noSuchMethod(core::Invocation* invocation) → dynamic;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main_lib.dart b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main_lib.dart
index 3b4fe56..f02f058 100644
--- a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 class A {
   @override
   noSuchMethod(Invocation invocation);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart
index 40c340f..f678004 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'extension_from_dill_lib.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline.expect
index 480afbd..76f9b18 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'extension_from_dill_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline_modelled.expect
index 480afbd..76f9b18 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'extension_from_dill_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.expect
index aa7decf..c577819 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "extension_from_dill_lib2.dart" as ext;
 
@@ -8,7 +8,7 @@
   ext::Extension|foo("");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "extension_from_dill_lib2.dart" as ext;
 additionalExports = (ext::Extension)
@@ -16,15 +16,15 @@
 export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as ext;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(lowered final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String #this) → dynamic
   return 42;
-static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String #this) → () → dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect
index 85f323d..b863b85 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "extension_from_dill_lib2.dart" as ext;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.outline.expect
index 3c9cb35..7067eb7 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///extension_from_dill_lib.dart";
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "extension_from_dill_lib2.dart" as ext;
 additionalExports = (ext::Extension)
@@ -14,15 +14,15 @@
 export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as ext;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(lowered final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String #this) → dynamic
   ;
-static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String #this) → () → dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.transformed.expect
index aa7decf..c577819 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "extension_from_dill_lib2.dart" as ext;
 
@@ -8,7 +8,7 @@
   ext::Extension|foo("");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "extension_from_dill_lib2.dart" as ext;
 additionalExports = (ext::Extension)
@@ -16,15 +16,15 @@
 export "org-dartlang-testcase:///extension_from_dill_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as ext;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method foo = ext::Extension|foo;
   tearoff foo = ext::Extension|get#foo;
 }
-static method Extension|foo(lowered final core::String* #this) → dynamic
+static method Extension|foo(lowered final core::String #this) → dynamic
   return 42;
-static method Extension|get#foo(lowered final core::String* #this) → () →* dynamic
+static method Extension|get#foo(lowered final core::String #this) → () → dynamic
   return () → dynamic => ext::Extension|foo(#this);
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart
index 3703720..8d058b3 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 export 'extension_from_dill_lib2.dart';
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart
index b0e671a..baf81eb 100644
--- a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill_lib2.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 extension Extension on String {
   foo() => 42;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/const_lib.dart b/pkg/front_end/testcases/general/with_dependencies/issue43538/const_lib.dart
index d66d12c..f1dbca9 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/const_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/const_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class A {
   const A({
     this.d = 3.14,
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart
index a821a38..a73de4b 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'const_lib.dart';
 
 const crossModule = B();
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline.expect
index a012e33..d57e7dc 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'const_lib.dart';
 
 const crossModule = B();
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline_modelled.expect
index ab711ec..63f830f 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'const_lib.dart';
 
 const crossModule = B();
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
index aa18aac..bb96ac5 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.expect
@@ -1,49 +1,39 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "const_lib.dart" as con;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///const_lib.dart";
 
-static const field con::B* crossModule = #C3;
+static const field con::B crossModule = #C3;
 static method main() → dynamic {
-  self::expect(2.71, #C3.{con::A::d}{core::double*});
-  self::expect("default", #C3.{con::A::s}{core::String*});
+  self::expect(2.71, #C3.{con::A::d}{core::double});
+  self::expect("default", #C3.{con::A::s}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  final field core::double* d;
-  final field core::String* s;
-  const constructor •({core::double* d = #C4, core::String* s = #C2}) → con::A*
+  final field core::double d;
+  final field core::String s;
+  const constructor •({core::double d = #C4, core::String s = #C2}) → con::A
     : con::A::d = d, con::A::s = s, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&A&M extends con::A implements con::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •({core::double* d = #C4, core::String* s = #C2}) → con::_B&A&M*
+  const synthetic constructor •({core::double d = #C4, core::String s = #C2}) → con::_B&A&M
     : super con::A::•(d: d, s: s)
     ;
   method m1() → dynamic {}
 }
 class B extends con::_B&A&M /*hasConstConstructor*/  {
-  const constructor •({core::double* d = #C1}) → con::B*
+  const constructor •({core::double d = #C1}) → con::B
     : super con::_B&A&M::•(d: d)
     ;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect
index c6ae209..ba5a448 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "const_lib.dart" as con;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///const_lib.dart";
 
-static const field con::B* crossModule = #C3;
+static const field con::B crossModule = #C3;
 static method main() → dynamic {
-  self::expect(2.71, #C3.{con::A::d}{core::double*});
-  self::expect("default", #C3.{con::A::s}{core::String*});
+  self::expect(2.71, #C3.{con::A::d}{core::double});
+  self::expect("default", #C3.{con::A::s}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.outline.expect
index a6664b4..d45ece4 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.outline.expect
@@ -1,45 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "const_lib.dart" as con;
 
 import "org-dartlang-testcase:///const_lib.dart";
 
-static const field con::B* crossModule = const con::B::•();
+static const field con::B crossModule = const con::B::•();
 static method main() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  final field core::double* d;
-  final field core::String* s;
-  const constructor •({core::double* d = #C1, core::String* s = #C2}) → con::A*
+  final field core::double d;
+  final field core::String s;
+  const constructor •({core::double d = #C1, core::String s = #C2}) → con::A
     : con::A::d = d, con::A::s = s, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&A&M extends con::A implements con::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •({core::double* d = #C1, core::String* s = #C2}) → con::_B&A&M*
+  const synthetic constructor •({core::double d = #C1, core::String s = #C2}) → con::_B&A&M
     : super con::A::•(d: d, s: s)
     ;
   method m1() → dynamic
     ;
 }
 class B extends con::_B&A&M /*hasConstConstructor*/  {
-  const constructor •({core::double* d = #C3}) → con::B*
+  const constructor •({core::double d = #C3}) → con::B
     : super con::_B&A&M::•(d: d)
     ;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
index aa18aac..bb96ac5 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.transformed.expect
@@ -1,49 +1,39 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "const_lib.dart" as con;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///const_lib.dart";
 
-static const field con::B* crossModule = #C3;
+static const field con::B crossModule = #C3;
 static method main() → dynamic {
-  self::expect(2.71, #C3.{con::A::d}{core::double*});
-  self::expect("default", #C3.{con::A::s}{core::String*});
+  self::expect(2.71, #C3.{con::A::d}{core::double});
+  self::expect("default", #C3.{con::A::s}{core::String});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as con;
 import "dart:core" as core;
 
 abstract class A extends core::Object /*hasConstConstructor*/  {
-  final field core::double* d;
-  final field core::String* s;
-  const constructor •({core::double* d = #C4, core::String* s = #C2}) → con::A*
+  final field core::double d;
+  final field core::String s;
+  const constructor •({core::double d = #C4, core::String s = #C2}) → con::A
     : con::A::d = d, con::A::s = s, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class _B&A&M extends con::A implements con::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •({core::double* d = #C4, core::String* s = #C2}) → con::_B&A&M*
+  const synthetic constructor •({core::double d = #C4, core::String s = #C2}) → con::_B&A&M
     : super con::A::•(d: d, s: s)
     ;
   method m1() → dynamic {}
 }
 class B extends con::_B&A&M /*hasConstConstructor*/  {
-  const constructor •({core::double* d = #C1}) → con::B*
+  const constructor •({core::double d = #C1}) → con::B
     : super con::_B&A&M::•(d: d)
     ;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart
index 0e9dfeb..3e9e915 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
+// @dart=2.12
+
 import "issue_43084_lib.dart";
 
 main() {
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline.expect
index 9591f62..2f5aaa7 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.12
 import "issue_43084_lib.dart";
 
 main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline_modelled.expect
index 9591f62..2f5aaa7 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.textual_outline_modelled.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.12
 import "issue_43084_lib.dart";
 
 main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
index a408b7e..1796d07 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
 //   Bar<int> x = new Bar<int>();
 //                    ^^^
 //
@@ -12,36 +12,26 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method main() → dynamic {
-  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
   Bar<int> x = new Bar<int>();
                    ^^^";
   core::print(x);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:8:16: Error: Can't create typedef from non-function type.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:10:16: Error: Can't create typedef from non-function type.
 // typedef Bar<X> = Foo<X>;
 //                ^
 //
 import self as self2;
 import "dart:core" as core;
 
-typedef Bar<unrelated X extends core::Object* = dynamic> = invalid-type;
-class Foo<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self2::Foo<self2::Foo::X*>*
+typedef Bar<unrelated X extends core::Object? = dynamic> = invalid-type;
+class Foo<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self2::Foo<self2::Foo::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect
index d7417c6..1d74cbd 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
 //   Bar<int> x = new Bar<int>();
 //                    ^^^
 //
@@ -12,7 +12,7 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method main() → dynamic {
-  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
   Bar<int> x = new Bar<int>();
                    ^^^";
   core::print(x);
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.outline.expect
index 0cd02ea..abbbf26 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_43084_lib.dart";
@@ -6,29 +6,19 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:8:16: Error: Can't create typedef from non-function type.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:10:16: Error: Can't create typedef from non-function type.
 // typedef Bar<X> = Foo<X>;
 //                ^
 //
 import self as self2;
 import "dart:core" as core;
 
-typedef Bar<unrelated X extends core::Object* = dynamic> = invalid-type;
-class Foo<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self2::Foo<self2::Foo::X*>*
+typedef Bar<unrelated X extends core::Object? = dynamic> = invalid-type;
+class Foo<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self2::Foo<self2::Foo::X%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
index a408b7e..1796d07 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
 //   Bar<int> x = new Bar<int>();
 //                    ^^^
 //
@@ -12,36 +12,26 @@
 import "org-dartlang-testcase:///issue_43084_lib.dart";
 
 static method main() → dynamic {
-  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:10:20: Error: Couldn't find constructor 'Bar'.
   Bar<int> x = new Bar<int>();
                    ^^^";
   core::print(x);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:8:16: Error: Can't create typedef from non-function type.
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart:10:16: Error: Can't create typedef from non-function type.
 // typedef Bar<X> = Foo<X>;
 //                ^
 //
 import self as self2;
 import "dart:core" as core;
 
-typedef Bar<unrelated X extends core::Object* = dynamic> = invalid-type;
-class Foo<X extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self2::Foo<self2::Foo::X*>*
+typedef Bar<unrelated X extends core::Object? = dynamic> = invalid-type;
+class Foo<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self2::Foo<self2::Foo::X%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart
index 647ad1d..ec17edd 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084_lib.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
+// @dart=2.12
+
 class Foo<X> {
 }
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart
index d2b59cd..b4a113d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import "issue_43084_lib.dart";
 
 test() {
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline.expect
index 7d463a1..14d741d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_43084_lib.dart";
 
 test() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline_modelled.expect
index 3881e5a..ce7dcd7 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "issue_43084_lib.dart";
 
 main() {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
index 6ce7aaa..c629301 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
-typedef F = () →* dynamic;
+typedef F = () → dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect
index 1854736..df42dcf 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.outline.expect
index 8451c8931..2c46c7a 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue_43084_lib.dart";
@@ -8,7 +8,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
-typedef F = () →* dynamic;
+typedef F = () → dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
index 6ce7aaa..c629301 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
-typedef F = () →* dynamic;
+typedef F = () → dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084_lib.dart b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084_lib.dart
index bc47337..43f8523 100644
--- a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084_lib.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 typedef F = Function();
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart
index 2029f44..9f8234d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline.expect
index 3bbec562..9887e21 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline_modelled.expect
index 3bbec562..9887e21 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
index 3a36e05..08d2d59 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,105 +8,77 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix2::D::x}();
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends mix::B implements mix::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → mix::_Foo&B&D*
+  synthetic constructor •() → mix::_Foo&B&D
     : super mix::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
@@ -115,64 +87,36 @@
   }
 }
 class Foo extends mix::_Foo&B&D {
-  synthetic constructor •() → mix::Foo*
+  synthetic constructor •() → mix::Foo
     : super mix::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix::C {
-  synthetic constructor •() → mix::B*
+  synthetic constructor •() → mix::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix::C*
+  synthetic constructor •() → mix::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix::C {
-  synthetic constructor •() → mix::D*
+  synthetic constructor •() → mix::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect
index fc924c0..28fa3da 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,92 +8,64 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix2::D::x}();
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.outline.expect
index 027e58d..6e11fb9 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -7,134 +7,78 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = self2::B with self2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self2::_Foo&B&D*
+  synthetic constructor •() → self2::_Foo&B&D
     : super self2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{self2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{self2::D::x}();
 }
 class Foo extends self2::_Foo&B&D {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::Foo
     ;
 }
 abstract class B extends core::Object implements self2::C {
-  synthetic constructor •() → self2::B*
+  synthetic constructor •() → self2::B
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::C
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements self2::C {
-  synthetic constructor •() → self2::D*
+  synthetic constructor •() → self2::D
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends self3::B implements self3::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self3::_Foo&B&D*
+  synthetic constructor •() → self3::_Foo&B&D
     : super self3::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
 }
 class Foo extends self3::_Foo&B&D {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::Foo
     ;
 }
 abstract class B extends core::Object implements self3::C {
-  synthetic constructor •() → self3::B*
+  synthetic constructor •() → self3::B
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::C
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements self3::C {
-  synthetic constructor •() → self3::D*
+  synthetic constructor •() → self3::D
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
index 5649484..7525847 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,29 +8,29 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends mix2::B implements mix2::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
@@ -39,77 +39,49 @@
   }
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends mix::B implements mix::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → mix::_Foo&B&D*
+  synthetic constructor •() → mix::_Foo&B&D
     : super mix::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
@@ -118,64 +90,36 @@
   }
 }
 class Foo extends mix::_Foo&B&D {
-  synthetic constructor •() → mix::Foo*
+  synthetic constructor •() → mix::Foo
     : super mix::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix::C {
-  synthetic constructor •() → mix::B*
+  synthetic constructor •() → mix::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix::C*
+  synthetic constructor •() → mix::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix::C {
-  synthetic constructor •() → mix::D*
+  synthetic constructor •() → mix::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart
index 2029f44..9f8234d 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline.expect
index 3bbec562..9887e21 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline_modelled.expect
index 3bbec562..9887e21 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "mixin_from_dill_lib1.dart" as lib1;
 import "mixin_from_dill_lib2.dart" as lib2;
 
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
index 787fde3..137cd67 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,168 +8,112 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix::B with mix::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix::_Foo&B&D*
+  synthetic constructor •() → mix::_Foo&B&D
     : super mix::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix::D::x}();
 }
 class Foo extends mix::_Foo&B&D {
-  synthetic constructor •() → mix::Foo*
+  synthetic constructor •() → mix::Foo
     : super mix::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix::C {
-  synthetic constructor •() → mix::B*
+  synthetic constructor •() → mix::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix::C*
+  synthetic constructor •() → mix::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix::C {
-  synthetic constructor •() → mix::D*
+  synthetic constructor •() → mix::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix2::D::x}();
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect
index 787fde3..137cd67 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,168 +8,112 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix::B with mix::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix::_Foo&B&D*
+  synthetic constructor •() → mix::_Foo&B&D
     : super mix::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix::D::x}();
 }
 class Foo extends mix::_Foo&B&D {
-  synthetic constructor •() → mix::Foo*
+  synthetic constructor •() → mix::Foo
     : super mix::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix::C {
-  synthetic constructor •() → mix::B*
+  synthetic constructor •() → mix::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix::C*
+  synthetic constructor •() → mix::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix::C {
-  synthetic constructor •() → mix::D*
+  synthetic constructor •() → mix::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{mix2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{mix2::D::x}();
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.outline.expect
index 4c58fa2..3fcb337 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
@@ -7,134 +7,78 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = self2::B with self2::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self2::_Foo&B&D*
+  synthetic constructor •() → self2::_Foo&B&D
     : super self2::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{self2::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{self2::D::x}();
 }
 class Foo extends self2::_Foo&B&D {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::Foo
     ;
 }
 abstract class B extends core::Object implements self2::C {
-  synthetic constructor •() → self2::B*
+  synthetic constructor •() → self2::B
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::C
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements self2::C {
-  synthetic constructor •() → self2::D*
+  synthetic constructor •() → self2::D
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 abstract class _Foo&B&D = self3::B with self3::D /*isAnonymousMixin*/  {
-  synthetic constructor •() → self3::_Foo&B&D*
+  synthetic constructor •() → self3::_Foo&B&D
     : super self3::B::•()
     ;
-  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+  mixin-super-stub operator ==(core::Object dynamic) → core::bool
     return super.{self3::D::==}(dynamic);
   mixin-super-stub method x() → void
     return super.{self3::D::x}();
 }
 class Foo extends self3::_Foo&B&D {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::Foo
     ;
 }
 abstract class B extends core::Object implements self3::C {
-  synthetic constructor •() → self3::B*
+  synthetic constructor •() → self3::B
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::C
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements self3::C {
-  synthetic constructor •() → self3::D*
+  synthetic constructor •() → self3::D
     ;
-  operator ==(dynamic dynamic) → core::bool*
+  operator ==(core::Object dynamic) → core::bool
     ;
   method x() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
index f100680..45c1fab 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "mixin_from_dill_lib1.dart" as mix;
 import "dart:core" as core;
@@ -8,29 +8,29 @@
 import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
 
 static method main() → dynamic {
-  mix::Foo* foo1 = new mix::Foo::•();
+  mix::Foo foo1 = new mix::Foo::•();
   if(foo1 == null)
     throw "what?";
-  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+  if(!(foo1 =={mix::_Foo&B&D::==}{(core::Object) → core::bool} foo1))
     throw "what?";
-  foo1.{mix::_Foo&B&D::x}(){() →* void};
-  mix2::Foo* foo2 = new mix2::Foo::•();
+  foo1.{mix::_Foo&B&D::x}(){() → void};
+  mix2::Foo foo2 = new mix2::Foo::•();
   if(foo2 == null)
     throw "what?";
-  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(core::Object) → core::bool} foo2))
     throw "what?";
-  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+  foo2.{mix2::_Foo&B&D::x}(){() → void};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends mix::B implements mix::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → mix::_Foo&B&D*
+  synthetic constructor •() → mix::_Foo&B&D
     : super mix::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
@@ -39,77 +39,49 @@
   }
 }
 class Foo extends mix::_Foo&B&D {
-  synthetic constructor •() → mix::Foo*
+  synthetic constructor •() → mix::Foo
     : super mix::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix::C {
-  synthetic constructor •() → mix::B*
+  synthetic constructor •() → mix::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix::C*
+  synthetic constructor •() → mix::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix::C {
-  synthetic constructor •() → mix::D*
+  synthetic constructor •() → mix::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mix2;
 import "dart:core" as core;
 
 abstract class _Foo&B&D extends mix2::B implements mix2::D /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → mix2::_Foo&B&D*
+  synthetic constructor •() → mix2::_Foo&B&D
     : super mix2::B::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
@@ -118,64 +90,36 @@
   }
 }
 class Foo extends mix2::_Foo&B&D {
-  synthetic constructor •() → mix2::Foo*
+  synthetic constructor •() → mix2::Foo
     : super mix2::_Foo&B&D::•()
     ;
 }
 abstract class B extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::B*
+  synthetic constructor •() → mix2::B
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("B.==");
     return true;
   }
   method x() → void {
     core::print("B.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C extends core::Object {
-  synthetic constructor •() → mix2::C*
+  synthetic constructor •() → mix2::C
     : super core::Object::•()
     ;
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D extends core::Object implements mix2::C {
-  synthetic constructor •() → mix2::D*
+  synthetic constructor •() → mix2::D
     : super core::Object::•()
     ;
-  operator ==(dynamic dynamic) → core::bool* {
+  operator ==(core::Object dynamic) → core::bool {
     core::print("D.==");
     return true;
   }
   method x() → void {
     core::print("D.x");
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib1.dart b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib1.dart
index f123e40..38ee449 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib1.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib1.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class Foo extends B with D {}
 abstract class B implements C {
   bool operator==(dynamic) {
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib2.dart b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib2.dart
index f123e40..38ee449 100644
--- a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib2.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill_lib2.dart
@@ -2,8 +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.
 
-// @dart=2.9
-
 class Foo extends B with D {}
 abstract class B implements C {
   bool operator==(dynamic) {
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart
index e540b74..5a443a4 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline.expect
index 7b65d90..33ce9da 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline_modelled.expect
index 7b65d90..33ce9da 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
index 68cbb20..9c874d1 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,71 +19,41 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     : super core::Object::•()
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     : super stu2::EvenFileB::•()
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     : super core::Object::•()
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect
index 02192bf..55489d4 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
index b35d702..482db91 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,67 +19,37 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void
     ;
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
index 68cbb20..9c874d1 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,71 +19,41 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     : super core::Object::•()
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     : super stu2::EvenFileB::•()
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     : super core::Object::•()
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart
index e540b74..5a443a4 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline.expect
index 7b65d90..33ce9da 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline_modelled.expect
index 7b65d90..33ce9da 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'stub_or_not_lib1.dart';
 
 class ProblemClass extends Foo {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
index 68cbb20..9c874d1 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,71 +19,41 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     : super core::Object::•()
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     : super stu2::EvenFileB::•()
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     : super core::Object::•()
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect
index 68cbb20..9c874d1 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,71 +19,41 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     : super core::Object::•()
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     : super stu2::EvenFileB::•()
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     : super core::Object::•()
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
index b35d702..482db91 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     ;
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,67 +19,37 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void
     ;
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
index 68cbb20..9c874d1 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "stub_or_not_lib1.dart" as stu;
 
 import "org-dartlang-testcase:///stub_or_not_lib1.dart";
 
 class ProblemClass extends stu::Foo {
-  synthetic constructor •() → self::ProblemClass*
+  synthetic constructor •() → self::ProblemClass
     : super stu::Foo::•()
     ;
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu;
 import "dart:core" as core;
 import "stub_or_not_lib2.dart" as stu2;
@@ -19,71 +19,41 @@
 import "org-dartlang-testcase:///stub_or_not_lib2.dart";
 
 abstract class Qux extends core::Object implements stu2::EventFileA {
-  synthetic constructor •() → stu::Qux*
+  synthetic constructor •() → stu::Qux
     : super core::Object::•()
     ;
-  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void {}
 }
 class EvenFileBPrime extends stu2::EvenFileB {
-  synthetic constructor •() → stu::EvenFileBPrime*
+  synthetic constructor •() → stu::EvenFileBPrime
     : super stu2::EvenFileB::•()
     ;
 }
 abstract class Baz extends stu::Qux {
-  synthetic constructor •() → stu::Baz*
+  synthetic constructor •() → stu::Baz
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
-  synthetic constructor •() → stu::Foo*
+  synthetic constructor •() → stu::Foo
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB entry) → void; -> stu::Qux::handleEvent
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as stu2;
 import "dart:core" as core;
 
 abstract class EventFileA extends core::Object {
-  synthetic constructor •() → stu2::EventFileA*
+  synthetic constructor •() → stu2::EventFileA
     : super core::Object::•()
     ;
-  abstract method handleEvent(stu2::EvenFileB* entry) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract method handleEvent(stu2::EvenFileB entry) → void;
 }
 class EvenFileB extends core::Object {
-  synthetic constructor •() → stu2::EvenFileB*
+  synthetic constructor •() → stu2::EvenFileB
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib1.dart b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib1.dart
index 07c2343..ae62042 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib1.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib1.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 import 'stub_or_not_lib2.dart';
 
 abstract class Qux implements EventFileA {
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib2.dart b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib2.dart
index 3286464..9a30c0e 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib2.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not_lib2.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 abstract class EventFileA {
   void handleEvent(EvenFileB entry);
 }
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart
index 4e03138..9007356 100644
--- a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart
@@ -1,6 +1,6 @@
 import "variance_from_dill_lib.dart";
 typedef G<T> = Function(F<T>);
-// @dart=2.9
+
 main() {
   print(G);
 }
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.expect
index 321193c..17247a3 100644
--- a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.expect
@@ -9,11 +9,11 @@
   core::print(#C1);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
+typedef F<unrelated T extends core::Object? = dynamic> = () → dynamic;
 
 constants  {
   #C1 = TypeLiteralConstant((() →* dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.outline.expect
index 396339f..7516e23 100644
--- a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.outline.expect
@@ -8,8 +8,8 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
+typedef F<unrelated T extends core::Object? = dynamic> = () → dynamic;
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.transformed.expect
index 321193c..17247a3 100644
--- a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.transformed.expect
@@ -9,11 +9,11 @@
   core::print(#C1);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-typedef F<unrelated T extends core::Object* = dynamic> = () →* dynamic;
+typedef F<unrelated T extends core::Object? = dynamic> = () → dynamic;
 
 constants  {
   #C1 = TypeLiteralConstant((() →* dynamic) →* dynamic)
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart
index 17a28f9..3c62f22 100644
--- a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill_lib.dart
@@ -1,2 +1 @@
-// @dart=2.9
 typedef F<T> = Function();
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
index 8967db1..e04acb1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "org-dartlang-test:///libA.dart" as libA {
 
-  static method whatever() → dynamic /* originally async */ {
+  static method whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -53,7 +53,7 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
index 0cfec60..56a2eb1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
@@ -1,7 +1,7 @@
 main = main::main;
 library from "org-dartlang-test:///libA.dart" as libA {
 
-  static method whatever() → dynamic /* originally async */ {
+  static method whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -53,7 +53,7 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
index da879b3..31712ce 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
@@ -19,7 +19,7 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -48,7 +48,7 @@
     :is_sync = true;
     return :async_future;
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* originally async */ {
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
index 44e9e46..37f43e7 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
@@ -19,7 +19,7 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -48,7 +48,7 @@
     :is_sync = true;
     return :async_future;
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* originally async */ {
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
index ca8efcb..9d36a28 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
@@ -19,7 +19,7 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -49,7 +49,7 @@
     :is_sync = true;
     return :async_future;
   }
-  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* originally async */ {
+  static method /* from org-dartlang-test:///myPart.dart */ whatever() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic>* :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
index 8c98fe7..b64cce3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
@@ -39,6 +39,7 @@
   ffi::unsized,
   ffi::sizeOf,
   ffi::Dart_NativeMessageHandler,
+  ffi::NativeFinalizerFunction,
   ffi::Abi,
   ffi::AbiSpecificInteger,
   ffi::AbiSpecificIntegerArray,
@@ -51,6 +52,7 @@
   ffi::Bool,
   ffi::BoolArray,
   ffi::BoolPointer,
+  ffi::Char,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -81,6 +83,7 @@
   ffi::Long,
   ffi::LongLong,
   ffi::NativeApi,
+  ffi::NativeFinalizer,
   ffi::NativeFunction,
   ffi::NativeFunctionPointer,
   ffi::NativePort,
@@ -129,6 +132,7 @@
   ffi::unsized,
   ffi::sizeOf,
   ffi::Dart_NativeMessageHandler,
+  ffi::NativeFinalizerFunction,
   ffi::Abi,
   ffi::AbiSpecificInteger,
   ffi::AbiSpecificIntegerArray,
@@ -141,6 +145,7 @@
   ffi::Bool,
   ffi::BoolArray,
   ffi::BoolPointer,
+  ffi::Char,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -171,6 +176,7 @@
   ffi::Long,
   ffi::LongLong,
   ffi::NativeApi,
+  ffi::NativeFinalizer,
   ffi::NativeFunction,
   ffi::NativeFunctionPointer,
   ffi::NativePort,
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
index 820c44b..e760406 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
@@ -39,6 +39,7 @@
   ffi::unsized,
   ffi::sizeOf,
   ffi::Dart_NativeMessageHandler,
+  ffi::NativeFinalizerFunction,
   ffi::Abi,
   ffi::AbiSpecificInteger,
   ffi::AbiSpecificIntegerArray,
@@ -51,6 +52,7 @@
   ffi::Bool,
   ffi::BoolArray,
   ffi::BoolPointer,
+  ffi::Char,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -81,6 +83,7 @@
   ffi::Long,
   ffi::LongLong,
   ffi::NativeApi,
+  ffi::NativeFinalizer,
   ffi::NativeFunction,
   ffi::NativeFunctionPointer,
   ffi::NativePort,
@@ -129,6 +132,7 @@
   ffi::unsized,
   ffi::sizeOf,
   ffi::Dart_NativeMessageHandler,
+  ffi::NativeFinalizerFunction,
   ffi::Abi,
   ffi::AbiSpecificInteger,
   ffi::AbiSpecificIntegerArray,
@@ -141,6 +145,7 @@
   ffi::Bool,
   ffi::BoolArray,
   ffi::BoolPointer,
+  ffi::Char,
   ffi::DartRepresentationOf,
   ffi::Dart_CObject,
   ffi::Double,
@@ -171,6 +176,7 @@
   ffi::Long,
   ffi::LongLong,
   ffi::NativeApi,
+  ffi::NativeFinalizer,
   ffi::NativeFunction,
   ffi::NativeFunctionPointer,
   ffi::NativePort,
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/incremental/super_key.yaml b/pkg/front_end/testcases/incremental/super_key.yaml
new file mode 100644
index 0000000..df78096
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml
@@ -0,0 +1,49 @@
+# Copyright (c) 2020, 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.md file.
+
+type: newworld
+target: DDC
+trackWidgetCreation: true
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import 'package:flutter/src/widgets/framework.dart';
+      flutter/lib/src/widgets/framework.dart: |
+        abstract class Bar {
+          const Bar();
+        }
+        abstract class Widget extends Bar {
+          const Widget();
+        }
+        class Key {}
+        class StatefulWidget extends Widget {
+          final Key? key;
+        
+          const StatefulWidget({this.key});
+        }
+      .dart_tool/package_config.json: |
+        {
+          "configVersion": 2,
+          "packages": [
+            {
+              "name": "flutter",
+              "rootUri": "../flutter",
+              "packageUri": "lib/"
+            }
+          ]
+        }
+    expectedLibraryCount: 2
+  - entry: main.dart
+    worldType: updated
+    invalidate:
+      - main.dart
+    expectInitializeFromDill: false
+    sources:
+      main.dart: |
+        import 'package:flutter/src/widgets/framework.dart';
+        class GalleryApp extends StatefulWidget {
+          const GalleryApp({super.key});
+        }
+    expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect b/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect
new file mode 100644
index 0000000..e84e96d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect
@@ -0,0 +1,37 @@
+main = <No Member>;
+library from "package:flutter/src/widgets/framework.dart" as fra {
+
+  abstract class Bar extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → fra::Bar
+      : super dart.core::Object::•()
+      ;
+  }
+  abstract class Widget extends fra::Bar /*hasConstConstructor*/  {
+    const constructor •() → fra::Widget
+      : super fra::Bar::•()
+      ;
+  }
+  class Key extends dart.core::Object {
+    synthetic constructor •() → fra::Key
+      : super dart.core::Object::•()
+      ;
+    static method _#new#tearOff() → fra::Key
+      return new fra::Key::•();
+  }
+  class StatefulWidget extends fra::Widget /*hasConstConstructor*/  {
+    final field fra::Key? key;
+    const constructor •({fra::Key? key = #C1}) → fra::StatefulWidget
+      : fra::StatefulWidget::key = key, super fra::Widget::•()
+      ;
+    static method _#new#tearOff({fra::Key? key = #C1}) → fra::StatefulWidget
+      return new fra::StatefulWidget::•(key: key);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "package:flutter/src/widgets/framework.dart";
+
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect b/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect
new file mode 100644
index 0000000..09116a0
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect
@@ -0,0 +1,44 @@
+main = <No Member>;
+library from "package:flutter/src/widgets/framework.dart" as fra {
+
+  abstract class Bar extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → fra::Bar
+      : super dart.core::Object::•()
+      ;
+  }
+  abstract class Widget extends fra::Bar /*hasConstConstructor*/  {
+    const constructor •() → fra::Widget
+      : super fra::Bar::•()
+      ;
+  }
+  class Key extends dart.core::Object {
+    synthetic constructor •() → fra::Key
+      : super dart.core::Object::•()
+      ;
+    static method _#new#tearOff() → fra::Key
+      return new fra::Key::•();
+  }
+  class StatefulWidget extends fra::Widget /*hasConstConstructor*/  {
+    final field fra::Key? key;
+    const constructor •({fra::Key? key = #C1}) → fra::StatefulWidget
+      : fra::StatefulWidget::key = key, super fra::Widget::•()
+      ;
+    static method _#new#tearOff({fra::Key? key = #C1}) → fra::StatefulWidget
+      return new fra::StatefulWidget::•(key: key);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "package:flutter/src/widgets/framework.dart";
+
+  class GalleryApp extends fra::StatefulWidget /*hasConstConstructor*/  {
+    const constructor •({fra::Key? key = #C1}) → main::GalleryApp
+      : super fra::StatefulWidget::•(key: key)
+      ;
+    static method _#new#tearOff({fra::Key? key}) → main::GalleryApp
+      return new main::GalleryApp::•(key: key);
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.expect
index 3d172fc..73e7931 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.expect
@@ -25,7 +25,7 @@
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
   abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
-static method test() → void async {
+static method test() → void async /* futureValueType= void */ {
   core::int* x0;
   asy::Future<core::int*>* x1;
   asy::Future<asy::Future<core::int*>*>* x2;
@@ -36,25 +36,25 @@
   FutureOr<FutureOr<core::int*>*>* x7;
   FutureOr<self::MyFuture*>* x8;
   self::MyFuture* x9;
-  function test0() → asy::Future<core::int*>* async 
+  function test0() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x0;
-  function test1() → asy::Future<core::int*>* async 
+  function test1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x1;
-  function test2() → asy::Future<asy::Future<core::int*>*>* async 
+  function test2() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
     return x2;
-  function test3() → asy::Future<FutureOr<core::int*>*>* async 
+  function test3() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
     return x3;
-  function test4() → asy::Future<self::MyFuture*>* async 
+  function test4() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
     return x4;
-  function test5() → asy::Future<core::int*>* async 
+  function test5() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x5;
-  function test6() → asy::Future<asy::Future<core::int*>*>* async 
+  function test6() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
     return x6;
-  function test7() → asy::Future<FutureOr<core::int*>*>* async 
+  function test7() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
     return x7;
-  function test8() → asy::Future<self::MyFuture*>* async 
+  function test8() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
     return x8;
-  function test9() → asy::Future<core::int*>* async 
+  function test9() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x9;
   core::int* y0 = await x0;
   core::int* y1 = await x1;
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect
index 3d172fc..73e7931 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect
@@ -25,7 +25,7 @@
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
   abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
-static method test() → void async {
+static method test() → void async /* futureValueType= void */ {
   core::int* x0;
   asy::Future<core::int*>* x1;
   asy::Future<asy::Future<core::int*>*>* x2;
@@ -36,25 +36,25 @@
   FutureOr<FutureOr<core::int*>*>* x7;
   FutureOr<self::MyFuture*>* x8;
   self::MyFuture* x9;
-  function test0() → asy::Future<core::int*>* async 
+  function test0() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x0;
-  function test1() → asy::Future<core::int*>* async 
+  function test1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x1;
-  function test2() → asy::Future<asy::Future<core::int*>*>* async 
+  function test2() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
     return x2;
-  function test3() → asy::Future<FutureOr<core::int*>*>* async 
+  function test3() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
     return x3;
-  function test4() → asy::Future<self::MyFuture*>* async 
+  function test4() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
     return x4;
-  function test5() → asy::Future<core::int*>* async 
+  function test5() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x5;
-  function test6() → asy::Future<asy::Future<core::int*>*>* async 
+  function test6() → asy::Future<asy::Future<core::int*>*>* async /* futureValueType= asy::Future<core::int*>* */ 
     return x6;
-  function test7() → asy::Future<FutureOr<core::int*>*>* async 
+  function test7() → asy::Future<FutureOr<core::int*>*>* async /* futureValueType= FutureOr<core::int*>* */ 
     return x7;
-  function test8() → asy::Future<self::MyFuture*>* async 
+  function test8() → asy::Future<self::MyFuture*>* async /* futureValueType= self::MyFuture* */ 
     return x8;
-  function test9() → asy::Future<core::int*>* async 
+  function test9() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return x9;
   core::int* y0 = await x0;
   core::int* y1 = await x1;
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
index 1e14f9c..e66b45d 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
   abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
-static method test() → void /* originally async */ {
+static method test() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -49,7 +49,7 @@
         FutureOr<FutureOr<core::int*>*>* x7;
         FutureOr<self::MyFuture*>* x8;
         self::MyFuture* x9;
-        function test0() → asy::Future<core::int*>* /* originally async */ {
+        function test0() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
           final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
           core::bool* :is_sync = false;
           core::int? :return_value;
@@ -76,7 +76,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test1() → asy::Future<core::int*>* /* originally async */ {
+        function test1() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
           final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
           core::bool* :is_sync = false;
           FutureOr<core::int*>* :return_value;
@@ -103,7 +103,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test2() → asy::Future<asy::Future<core::int*>*>* /* originally async */ {
+        function test2() → asy::Future<asy::Future<core::int*>*>* /* futureValueType= asy::Future<core::int*>* */ /* originally async */ {
           final asy::_Future<asy::Future<core::int*>*>* :async_future = new asy::_Future::•<asy::Future<core::int*>*>();
           core::bool* :is_sync = false;
           FutureOr<asy::Future<core::int*>*>* :return_value;
@@ -130,7 +130,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test3() → asy::Future<FutureOr<core::int*>*>* /* originally async */ {
+        function test3() → asy::Future<FutureOr<core::int*>*>* /* futureValueType= FutureOr<core::int*>* */ /* originally async */ {
           final asy::_Future<FutureOr<core::int*>*>* :async_future = new asy::_Future::•<FutureOr<core::int*>*>();
           core::bool* :is_sync = false;
           FutureOr<FutureOr<core::int*>*>* :return_value;
@@ -157,7 +157,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test4() → asy::Future<self::MyFuture*>* /* originally async */ {
+        function test4() → asy::Future<self::MyFuture*>* /* futureValueType= self::MyFuture* */ /* originally async */ {
           final asy::_Future<self::MyFuture*>* :async_future = new asy::_Future::•<self::MyFuture*>();
           core::bool* :is_sync = false;
           FutureOr<self::MyFuture*>* :return_value;
@@ -184,7 +184,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test5() → asy::Future<core::int*>* /* originally async */ {
+        function test5() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
           final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
           core::bool* :is_sync = false;
           FutureOr<core::int*>* :return_value;
@@ -211,7 +211,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test6() → asy::Future<asy::Future<core::int*>*>* /* originally async */ {
+        function test6() → asy::Future<asy::Future<core::int*>*>* /* futureValueType= asy::Future<core::int*>* */ /* originally async */ {
           final asy::_Future<asy::Future<core::int*>*>* :async_future = new asy::_Future::•<asy::Future<core::int*>*>();
           core::bool* :is_sync = false;
           FutureOr<asy::Future<core::int*>*>* :return_value;
@@ -238,7 +238,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test7() → asy::Future<FutureOr<core::int*>*>* /* originally async */ {
+        function test7() → asy::Future<FutureOr<core::int*>*>* /* futureValueType= FutureOr<core::int*>* */ /* originally async */ {
           final asy::_Future<FutureOr<core::int*>*>* :async_future = new asy::_Future::•<FutureOr<core::int*>*>();
           core::bool* :is_sync = false;
           FutureOr<FutureOr<core::int*>*>* :return_value;
@@ -265,7 +265,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test8() → asy::Future<self::MyFuture*>* /* originally async */ {
+        function test8() → asy::Future<self::MyFuture*>* /* futureValueType= self::MyFuture* */ /* originally async */ {
           final asy::_Future<self::MyFuture*>* :async_future = new asy::_Future::•<self::MyFuture*>();
           core::bool* :is_sync = false;
           FutureOr<self::MyFuture*>* :return_value;
@@ -292,7 +292,7 @@
           :is_sync = true;
           return :async_future;
         }
-        function test9() → asy::Future<core::int*>* /* originally async */ {
+        function test9() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
           final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
           core::bool* :is_sync = false;
           FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
index 7974c45..366738b 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static field asy::Future<core::int*>* futureInt = null;
 static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
index 7974c45..366738b 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
@@ -7,7 +7,7 @@
 
 static field asy::Future<core::int*>* futureInt = null;
 static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
index 15fb18d..2324c89 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static field asy::Future<core::int*>* futureInt = null;
 static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* originally async */ {
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
index 6e90053..dcce00c 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async => 0;
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
index 6e90053..dcce00c 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async => 0;
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 0;
 static method main() → dynamic {
   self::f;
 }
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
index 7e432e9..d92144a 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* /* originally async */ {
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   core::int? :return_value;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
index a44a6a9..5454d59 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static field FutureOr<core::int*>* futureOrInt = null;
 static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureOrInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
index a44a6a9..5454d59 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
@@ -7,7 +7,7 @@
 
 static field FutureOr<core::int*>* futureOrInt = null;
 static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureOrInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async /* futureValueType= core::int* */ => self::futureOrInt;
 static method main() → dynamic {
   self::f;
   self::g;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
index de99cb2..23c7b00 100644
--- a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 
 static field FutureOr<core::int*>* futureOrInt = null;
 static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
-static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* originally async */ {
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
index f19d465..c2fcd34 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect
index f19d465..c2fcd34 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
index c321e3e..68357cb 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* originally async */ {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
     final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
     core::bool* :is_sync = false;
     FutureOr<core::num*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
index 419ef81..a28c927 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return 1;
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect
index 419ef81..a28c927 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return 1;
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
index 81cc3b1..6dd1245 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* originally async */ {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
     final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
     core::bool* :is_sync = false;
     core::num? :return_value;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
index 3af04ad..f4a674b 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect
index 3af04ad..f4a674b 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async /* futureValueType= core::num* */ {
     if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
       return asy::Future::value<core::int*>(1);
     }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
index e5f6a32..ff44989 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 import "dart:math" show Random;
 
 static method test() → dynamic {
-  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* originally async */ {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* /* futureValueType= core::num* */ /* originally async */ {
     final asy::_Future<core::num*>* :async_future = new asy::_Future::•<core::num*>();
     core::bool* :is_sync = false;
     FutureOr<core::num*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
index 729dbe7..2d31d8e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.expect
@@ -5,8 +5,8 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
-  () →* asy::Future<Null>* f = () → asy::Future<Null>* async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
     return null;
   };
   asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
index 729dbe7..2d31d8e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
@@ -5,8 +5,8 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
-  () →* asy::Future<Null>* f = () → asy::Future<Null>* async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  () →* asy::Future<Null>* f = () → asy::Future<Null>* async /* futureValueType= Null */ {
     return null;
   };
   asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
index 2f60494..82fc16a 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "dart:async";
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -19,7 +19,7 @@
     try {
       #L1:
       {
-        () →* asy::Future<Null>* f = () → asy::Future<Null>* /* originally async */ {
+        () →* asy::Future<Null>* f = () → asy::Future<Null>* /* futureValueType= Null */ /* originally async */ {
           final asy::_Future<Null>* :async_future = new asy::_Future::•<Null>();
           core::bool* :is_sync = false;
           FutureOr<Null>* :return_value;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
index a85a79c..9a6dc27 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
     yield null;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
index a85a79c..9a6dc27 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
     yield null;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
index 6f20ea7..d81d2c2 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "dart:async";
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
index 1a5ac1a..031ded2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async {
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   dynamic d;
   core::List<core::int*>* l0 = await<core::int*>[d as{TypeError,ForDynamic} core::int*];
   core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
index 1a5ac1a..031ded2 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* async {
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   dynamic d;
   core::List<core::int*>* l0 = await<core::int*>[d as{TypeError,ForDynamic} core::int*];
   core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
index 9b64f1c..7a300f3 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 
 import "dart:async";
 
-static method main() → asy::Future<dynamic>* /* originally async */ {
+static method main() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
index e2d0f6d..6d06f17 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
@@ -58,7 +58,7 @@
 }
 static method F<T extends core::Object* = dynamic>() → self::F::T*
   return null;
-static method f() → asy::Future<dynamic>* async {
+static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   dynamic d;
   core::Object* o;
   for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
@@ -86,7 +86,7 @@
     o = #t4;
   }
 }
-static method main() → asy::Future<dynamic>* async {
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   for (core::int* x in <core::int*>[1, 2, 3]) {
   }
   for (core::num* x in <core::num*>[1, 2, 3]) {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
index e2d0f6d..6d06f17 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
@@ -58,7 +58,7 @@
 }
 static method F<T extends core::Object* = dynamic>() → self::F::T*
   return null;
-static method f() → asy::Future<dynamic>* async {
+static method f() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   dynamic d;
   core::Object* o;
   for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
@@ -86,7 +86,7 @@
     o = #t4;
   }
 }
-static method main() → asy::Future<dynamic>* async {
+static method main() → asy::Future<dynamic>* async /* futureValueType= dynamic */ {
   for (core::int* x in <core::int*>[1, 2, 3]) {
   }
   for (core::num* x in <core::num*>[1, 2, 3]) {
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
index 70f5a69..a0160b8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
@@ -59,7 +59,7 @@
 }
 static method F<T extends core::Object* = dynamic>() → self::F::T*
   return null;
-static method f() → asy::Future<dynamic>* /* originally async */ {
+static method f() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -238,7 +238,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → asy::Future<dynamic>* /* originally async */ {
+static method main() → asy::Future<dynamic>* /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.expect
index 93ecd39..34ecf11 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::Object* o;
   for (dynamic x in o as{TypeError} core::Iterable<dynamic>*) {
   }
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect
index 93ecd39..34ecf11 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::Object* o;
   for (dynamic x in o as{TypeError} core::Iterable<dynamic>*) {
   }
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
index d8e4b15..258db25 100644
--- a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
index 3472083..806622d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
index 3472083..806622d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index 1b0b3a6..5c43118 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
index caba7e5..3239514 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
index caba7e5..3239514 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 2945796..a14d3e6 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
index 1efc406..9bbf98e 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
index 1efc406..9bbf98e 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index d075aa1..e39900a 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
index eaff2a5..f4d9ecd 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
index eaff2a5..f4d9ecd 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index ecea355..3d41dfa 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<dynamic>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
index 955cbb3..0a41e1a 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
index 955cbb3..0a41e1a 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index 4c59d38..cce1d0b 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
     return new self::MyFuture::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
index 438bfac..c12d5d2 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
index 438bfac..c12d5d2 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
@@ -34,20 +34,20 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return await asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 3;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index fdde079..36a0f77 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   asy::Future<dynamic>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -64,7 +64,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -93,7 +93,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -120,7 +120,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -151,7 +151,7 @@
   asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
     return asy::Future::value<core::int*>(3);
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
@@ -178,7 +178,7 @@
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
index 816b3ee..e736a28 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect
index 816b3ee..e736a28 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index ca269fc..0fbde92 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
index 11b74949..389affa 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect
index 11b74949..389affa 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index d41c46d..b88ca68 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
index 11b63b1..73dfd35 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect
index 11b63b1..73dfd35 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index 353cbcc..6a05bbf 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
index cc3ada3..d79b102 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect
index cc3ada3..d79b102 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index fa9b07f..34c2ea5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<core::bool*>* f;
-  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
index 83acf25..6989a48 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect
index 83acf25..6989a48 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index 862a146..c47ee35 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
index 0c2809d..4d22096 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect
index 0c2809d..4d22096 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
   asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index 51cd23d..9c16fa5 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   asy::Future<core::bool*>* f;
-  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -71,7 +71,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
index 39e82e2..2dfc365 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (let final core::int* #t2 = await x in #t2 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect
index 39e82e2..2dfc365 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect
@@ -34,8 +34,8 @@
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async /* futureValueType= core::int* */ {
     return (let final core::int* #t2 = await x in #t2 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
   asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index 59febc8..83b6d1e 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 }
 static method test() → void {
   self::MyFuture<core::int*>* f;
-  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -72,7 +72,7 @@
     :is_sync = true;
     return :async_future;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
-  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* /* originally async */ {
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
index dcdc4a1..162aade 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
@@ -32,12 +32,12 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* async {
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* async 
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-static method g3(core::bool* x) → asy::Future<core::int*>* async {
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   core::Object* y = x ?{core::Object*} 42 : asy::Future::value<core::int*>(42);
   return y as{TypeError} FutureOr<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect
index dcdc4a1..162aade 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect
@@ -32,12 +32,12 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* async {
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* async 
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
   return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-static method g3(core::bool* x) → asy::Future<core::int*>* async {
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   core::Object* y = x ?{core::Object*} 42 : asy::Future::value<core::int*>(42);
   return y as{TypeError} FutureOr<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index ea1b07f..e561f29 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g1(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
@@ -59,7 +59,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g2(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
@@ -86,7 +86,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g3(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
index 1c0791d..8bebe17 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
@@ -32,12 +32,12 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* async {
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* async 
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-static method g3(core::bool* x) → asy::Future<core::int*>* async {
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   core::Object* y = x ?{core::Object*} 42 : new self::MyFuture::value<dynamic>(42);
   return y as{TypeError} FutureOr<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect
index 1c0791d..8bebe17 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect
@@ -32,12 +32,12 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* async {
+static method g1(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* async 
+static method g2(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
   return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
-static method g3(core::bool* x) → asy::Future<core::int*>* async {
+static method g3(core::bool* x) → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
   core::Object* y = x ?{core::Object*} 42 : new self::MyFuture::value<dynamic>(42);
   return y as{TypeError} FutureOr<core::int*>*;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index 110e697..042521a 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -32,7 +32,7 @@
   no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
-static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g1(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
@@ -59,7 +59,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g2(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g2(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
@@ -86,7 +86,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
+static method g3(core::bool* x) → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
   final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
   core::bool* :is_sync = false;
   FutureOr<core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index ccef45f..cc96345 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -44,10 +44,10 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
index ccef45f..cc96345 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
@@ -44,10 +44,10 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 8d75a91..4d9373c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -44,7 +44,7 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   core::List<core::int*>? :return_value;
@@ -71,7 +71,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   FutureOr<core::List<core::int*>*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
index 09bd9c2..ddc2463 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
@@ -35,10 +35,10 @@
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
index 09bd9c2..ddc2463 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
@@ -35,10 +35,10 @@
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index c18f5d9..b24c57d 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 static field self::MyFuture<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   core::List<core::int*>? :return_value;
@@ -62,7 +62,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   FutureOr<core::List<core::int*>*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index 36b2fa5..a49daa8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -44,10 +44,10 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
index 36b2fa5..a49daa8 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
@@ -44,10 +44,10 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index e17a236..feef12c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -44,7 +44,7 @@
         new /*@ typeArgs=int* */ Future.value('hi'));
                                               ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   core::List<core::int*>? :return_value;
@@ -71,7 +71,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   FutureOr<core::List<core::int*>*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
index 5ecc3e7..dcf9785 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
@@ -35,10 +35,10 @@
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
index 5ecc3e7..dcf9785 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
@@ -35,10 +35,10 @@
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* async {
+static method g2() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return <core::int*>[3];
 }
-static method g3() → asy::Future<core::List<core::int*>*>* async {
+static method g3() → asy::Future<core::List<core::int*>*>* async /* futureValueType= core::List<core::int*>* */ {
   return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 87fe01a..685b7cb 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -35,7 +35,7 @@
 static field asy::Future<dynamic>* f;
 static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
 static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => core::_GrowableList::_literal1<core::int*>(3)){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
-static method g2() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g2() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   core::List<core::int*>? :return_value;
@@ -62,7 +62,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method g3() → asy::Future<core::List<core::int*>*>* /* originally async */ {
+static method g3() → asy::Future<core::List<core::int*>*>* /* futureValueType= core::List<core::int*>* */ /* originally async */ {
   final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
   core::bool* :is_sync = false;
   FutureOr<core::List<core::int*>*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
index 05e3e74..d938457 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.expect
@@ -20,7 +20,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async {
+static method foo() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<core::List<self::A*>*>* f1 = null;
   asy::Future<core::List<self::A*>*>* f2 = null;
   core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
index 05e3e74..d938457 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
@@ -20,7 +20,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic async {
+static method foo() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<core::List<self::A*>*>* f1 = null;
   asy::Future<core::List<self::A*>*>* f2 = null;
   core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
index 719fe87..0664c85 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-static method foo() → dynamic /* originally async */ {
+static method foo() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
index 8b0d132..9fb7dae 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.expect
@@ -7,7 +7,7 @@
 
 static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
   return x;
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<core::String*>* f;
   core::String* s = await self::id<FutureOr<core::String*>*>(f);
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
index 8b0d132..9fb7dae 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
@@ -7,7 +7,7 @@
 
 static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
   return x;
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<core::String*>* f;
   core::String* s = await self::id<FutureOr<core::String*>*>(f);
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
index 289f3bf..ee68309 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
 
 static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
   return x;
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
index f663f65..8c17d48 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.expect
@@ -30,7 +30,7 @@
     : super self::A::•()
     ;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
   asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
   core::List<asy::Future<self::A*>*>* lll = <asy::Future<self::A*>*>[b, c];
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
index f663f65..8c17d48 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
@@ -30,7 +30,7 @@
     : super self::A::•()
     ;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
   asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
   core::List<asy::Future<self::A*>*>* lll = <asy::Future<self::A*>*>[b, c];
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
index 0045a57..7d0a74b 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
     : super self::A::•()
     ;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
index eb05a20..9486b2b 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.expect
@@ -6,12 +6,12 @@
 static method test() → dynamic {
   function f0() → core::int*
     return 42;
-  function f1() → asy::Future<core::int*>* async 
+  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return 42;
   function f2() → core::int* {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* async {
+  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 42;
   }
   function f4() → core::Iterable<core::int*>* sync* {
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
index eb05a20..9486b2b 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
@@ -6,12 +6,12 @@
 static method test() → dynamic {
   function f0() → core::int*
     return 42;
-  function f1() → asy::Future<core::int*>* async 
+  function f1() → asy::Future<core::int*>* async /* futureValueType= core::int* */ 
     return 42;
   function f2() → core::int* {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* async {
+  function f3() → asy::Future<core::int*>* async /* futureValueType= core::int* */ {
     return 42;
   }
   function f4() → core::Iterable<core::int*>* sync* {
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
index afb8f44..f5a8bb3 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
 static method test() → dynamic {
   function f0() → core::int*
     return 42;
-  function f1() → asy::Future<core::int*>* /* originally async */ {
+  function f1() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -36,7 +36,7 @@
   function f2() → core::int* {
     return 42;
   }
-  function f3() → asy::Future<core::int*>* /* originally async */ {
+  function f3() → asy::Future<core::int*>* /* futureValueType= core::int* */ /* originally async */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
     core::int? :return_value;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
index c16146f..0acd6fd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
     await for (core::String* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -76,7 +76,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
     await for (self::Baz::T* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -146,7 +146,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
   await for (self::Foo* x in myStream) {
     core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
index c16146f..0acd6fd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic async {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async /* futureValueType= dynamic */ {
     await for (core::String* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -76,7 +76,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic async {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async /* futureValueType= dynamic */ {
     await for (self::Baz::T* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -146,7 +146,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
   await for (self::Foo* x in myStream) {
     core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index f060c75..170116d 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Bar::T* t) → dynamic /* originally async */ {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -124,7 +124,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(covariant-by-class self::Baz::S* t) → dynamic /* originally async */ {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -241,7 +241,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
index 421e71c..67f213e 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.expect
@@ -18,7 +18,7 @@
   function a() → (core::int*) →* core::int* {
     return (core::int* x) → core::int* => x;
   }
-  function b() → asy::Future<(core::int*) →* core::int*>* async {
+  function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
     return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
index 421e71c..67f213e 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
@@ -18,7 +18,7 @@
   function a() → (core::int*) →* core::int* {
     return (core::int* x) → core::int* => x;
   }
-  function b() → asy::Future<(core::int*) →* core::int*>* async {
+  function b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
     return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 285cb47..fbcd719 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   function a() → (core::int*) →* core::int* {
     return (core::int* x) → core::int* => x;
   }
-  function b() → asy::Future<(core::int*) →* core::int*>* /* originally async */ {
+  function b() → asy::Future<(core::int*) →* core::int*>* /* futureValueType= (core::int*) →* core::int* */ /* originally async */ {
     final asy::_Future<(core::int*) →* core::int*>* :async_future = new asy::_Future::•<(core::int*) →* core::int*>();
     core::bool* :is_sync = false;
     FutureOr<(core::int*) →* core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
index 3ca6230..f7164a5 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.expect
@@ -17,7 +17,7 @@
 static method a() → (core::int*) →* core::int* {
   return (core::int* x) → core::int* => x;
 }
-static method b() → asy::Future<(core::int*) →* core::int*>* async {
+static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
   return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
index 3ca6230..f7164a5 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
@@ -17,7 +17,7 @@
 static method a() → (core::int*) →* core::int* {
   return (core::int* x) → core::int* => x;
 }
-static method b() → asy::Future<(core::int*) →* core::int*>* async {
+static method b() → asy::Future<(core::int*) →* core::int*>* async /* futureValueType= (core::int*) →* core::int* */ {
   return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
  - 'Future' is from 'dart:async'.
   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
index d7f66be..84ea22c 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
 static method a() → (core::int*) →* core::int* {
   return (core::int* x) → core::int* => x;
 }
-static method b() → asy::Future<(core::int*) →* core::int*>* /* originally async */ {
+static method b() → asy::Future<(core::int*) →* core::int*>* /* futureValueType= (core::int*) →* core::int* */ /* originally async */ {
   final asy::_Future<(core::int*) →* core::int*>* :async_future = new asy::_Future::•<(core::int*) →* core::int*>();
   core::bool* :is_sync = false;
   FutureOr<(core::int*) →* core::int*>* :return_value;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
index 14f27fa..cc03693 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
index 14f27fa..cc03693 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
index 2fae640..a1a2465 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.outline.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
index ede8dae..de03af4 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.transformed.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
index 1d604ce..9bf3b40 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
index 1d604ce..9bf3b40 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
index 3275c50..229b708 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.outline.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
index 621f372..d7ccceb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.transformed.expect
@@ -2,10 +2,13 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
 //           ^
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
index 727e04a..63943b6 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::String* s;
   for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
index 727e04a..63943b6 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
@@ -26,7 +26,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::String* s;
   for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
index 2eaaf2a..71aadc6 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
index e195507..5c4c5e0 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.expect
@@ -42,7 +42,7 @@
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::Iterable<self::A*>* iterable;
   asy::Stream<self::A*>* stream;
   self::A* a;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
index e195507..5c4c5e0 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
@@ -42,7 +42,7 @@
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::Iterable<self::A*>* iterable;
   asy::Stream<self::A*>* stream;
   self::A* a;
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
index 703f7d8..c30707e 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.transformed.expect
@@ -43,7 +43,7 @@
 }
 static method f<T extends core::Object* = dynamic>() → self::f::T*
   return null;
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index dac68ea..d3a7d53 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -130,13 +130,13 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   lowered core::String? #s1;
   function #s1#get() → core::String
     return let final core::String? #t6 = #s1 in #t6 == null ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
@@ -153,7 +153,7 @@
     return #s2 = s2#param;
   lowered core::Function? #f;
   function #f#get() → core::Function
-    return let final core::Function? #t8 = #f in #t8 == null ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t8{core::Function};
+    return let final core::Function? #t8 = #f in #t8 == null ?{core::Function} #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest() : #t8{core::Function};
   function #f#set(core::Function f#param) → dynamic
     return #f = f#param;
 }
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 5595103..e452424 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -136,7 +136,7 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic /* originally async */ {
+static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -190,7 +190,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method fisk() → dynamic /* originally async */ {
+static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -218,7 +218,7 @@
           return #s2 = s2#param;
         lowered core::Function? #f;
         function #f#get() → core::Function
-          return let final core::Function? #t11 = #f in #t11 == null ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
+          return let final core::Function? #t11 = #f in #t11 == null ?{core::Function} #f = () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 74e414d..7d779ec 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -150,13 +150,13 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   lowered core::String? #s1;
   lowered core::bool #s1#isSet = false;
   function #s1#get() → core::String {
@@ -191,7 +191,7 @@
   lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
-      #f = () → asy::Future<dynamic> async => await self::hest();
+      #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
       #f#isSet = true;
     }
     return #f{core::Function};
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
index 74e414d..7d779ec 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
@@ -150,13 +150,13 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   lowered core::String? #s1;
   lowered core::bool #s1#isSet = false;
   function #s1#get() → core::String {
@@ -191,7 +191,7 @@
   lowered core::bool #f#isSet = false;
   function #f#get() → core::Function {
     if(!#f#isSet) {
-      #f = () → asy::Future<dynamic> async => await self::hest();
+      #f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
       #f#isSet = true;
     }
     return #f{core::Function};
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 7d0a057..73b9804 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -156,7 +156,7 @@
       #t5.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t5;
 }
-static method hest() → dynamic /* originally async */ {
+static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -210,7 +210,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method fisk() → dynamic /* originally async */ {
+static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -256,7 +256,7 @@
         lowered core::bool #f#isSet = false;
         function #f#get() → core::Function {
           if(!#f#isSet) {
-            #f = () → asy::Future<dynamic> /* originally async */ {
+            #f = () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
               final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
               core::bool* :is_sync = false;
               FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart b/pkg/front_end/testcases/macros/multiple_imports.dart
new file mode 100644
index 0000000..71e46d3
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.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.
+
+@Const(2)
+import 'dart:async';
+
+@Const(3)
+import augment 'multiple_imports_lib.dart';
+
+FutureOr<void> main() {
+  method();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.strong.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.strong.expect
new file mode 100644
index 0000000..bb8a142
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.strong.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+@#C2
+@#C4
+import "dart:math";
+@#C6
+@#C8
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void> {
+  self::method();
+}
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic {
+  math::Random::•();
+  #C10.{con::JsonCodec::encoder}{con::JsonEncoder};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::Const {field:#C1}
+  #C3 = 2
+  #C4 = self::Const {field:#C3}
+  #C5 = 1
+  #C6 = self::Const {field:#C5}
+  #C7 = 3
+  #C8 = self::Const {field:#C7}
+  #C9 = null
+  #C10 = con::JsonCodec {_reviver:#C9, _toEncodable:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///multiple_imports.dart:
+- Const. (from org-dartlang-testcase:///multiple_imports_lib.dart:18:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.strong.transformed.expect
new file mode 100644
index 0000000..bb8a142
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.strong.transformed.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+@#C2
+@#C4
+import "dart:math";
+@#C6
+@#C8
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void> {
+  self::method();
+}
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic {
+  math::Random::•();
+  #C10.{con::JsonCodec::encoder}{con::JsonEncoder};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::Const {field:#C1}
+  #C3 = 2
+  #C4 = self::Const {field:#C3}
+  #C5 = 1
+  #C6 = self::Const {field:#C5}
+  #C7 = 3
+  #C8 = self::Const {field:#C7}
+  #C9 = null
+  #C10 = con::JsonCodec {_reviver:#C9, _toEncodable:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///multiple_imports.dart:
+- Const. (from org-dartlang-testcase:///multiple_imports_lib.dart:18:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.textual_outline.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.textual_outline.expect
new file mode 100644
index 0000000..bc18faf
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+@Const(2)
+import 'dart:async';
+@Const(3)
+import augment 'multiple_imports_lib.dart';
+FutureOr<void> main() {}
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.weak.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.expect
new file mode 100644
index 0000000..bb8a142
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+@#C2
+@#C4
+import "dart:math";
+@#C6
+@#C8
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void> {
+  self::method();
+}
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic {
+  math::Random::•();
+  #C10.{con::JsonCodec::encoder}{con::JsonEncoder};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::Const {field:#C1}
+  #C3 = 2
+  #C4 = self::Const {field:#C3}
+  #C5 = 1
+  #C6 = self::Const {field:#C5}
+  #C7 = 3
+  #C8 = self::Const {field:#C7}
+  #C9 = null
+  #C10 = con::JsonCodec {_reviver:#C9, _toEncodable:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///multiple_imports.dart:
+- Const. (from org-dartlang-testcase:///multiple_imports_lib.dart:18:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.weak.modular.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.modular.expect
new file mode 100644
index 0000000..bb8a142
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+@#C2
+@#C4
+import "dart:math";
+@#C6
+@#C8
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void> {
+  self::method();
+}
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic {
+  math::Random::•();
+  #C10.{con::JsonCodec::encoder}{con::JsonEncoder};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::Const {field:#C1}
+  #C3 = 2
+  #C4 = self::Const {field:#C3}
+  #C5 = 1
+  #C6 = self::Const {field:#C5}
+  #C7 = 3
+  #C8 = self::Const {field:#C7}
+  #C9 = null
+  #C10 = con::JsonCodec {_reviver:#C9, _toEncodable:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///multiple_imports.dart:
+- Const. (from org-dartlang-testcase:///multiple_imports_lib.dart:18:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.weak.outline.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.outline.expect
new file mode 100644
index 0000000..bdcb1f0
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math";
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void>
+  ;
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/multiple_imports.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.transformed.expect
new file mode 100644
index 0000000..bb8a142
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports.dart.weak.transformed.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+import "dart:convert" as con;
+
+@#C2
+@#C4
+import "dart:math";
+@#C6
+@#C8
+import "dart:convert";
+import "dart:async";
+import "org-dartlang-testcase:///multiple_imports.dart";
+
+class Const extends core::Object /*hasConstConstructor*/  { // from org-dartlang-testcase:///multiple_imports_lib.dart
+  final field core::int field;
+  const constructor •(core::int field) → self::Const
+    : self::Const::field = field, super core::Object::•()
+    ;
+}
+static method main() → FutureOr<void> {
+  self::method();
+}
+static method /* from org-dartlang-testcase:///multiple_imports_lib.dart */ method() → dynamic {
+  math::Random::•();
+  #C10.{con::JsonCodec::encoder}{con::JsonEncoder};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::Const {field:#C1}
+  #C3 = 2
+  #C4 = self::Const {field:#C3}
+  #C5 = 1
+  #C6 = self::Const {field:#C5}
+  #C7 = 3
+  #C8 = self::Const {field:#C7}
+  #C9 = null
+  #C10 = con::JsonCodec {_reviver:#C9, _toEncodable:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///multiple_imports.dart:
+- Const. (from org-dartlang-testcase:///multiple_imports_lib.dart:18:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/macros/multiple_imports_lib.dart b/pkg/front_end/testcases/macros/multiple_imports_lib.dart
new file mode 100644
index 0000000..80db5fc
--- /dev/null
+++ b/pkg/front_end/testcases/macros/multiple_imports_lib.dart
@@ -0,0 +1,19 @@
+// 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.
+
+@Const(0)
+import 'dart:math';
+@Const(1)
+import 'dart:convert';
+
+method() {
+  new Random();
+  json.encoder;
+}
+
+class Const {
+  final int field;
+
+  const Const(this.field);
+}
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index b40f872..a3e7ee6 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -6,6 +6,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -29,8 +31,8 @@
 general/getter_vs_setter_type: TypeCheckError
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
index 1f4c1bb..e2e0194 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
@@ -261,7 +261,7 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -364,7 +364,7 @@
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index 2b23c4c..1bb1cc7 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -272,7 +272,7 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> /* originally async */ {
+  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
     core::bool* :is_sync = false;
     FutureOr<self::A>? :return_value;
@@ -406,7 +406,7 @@
     return null; // Error.
            ^" in let Null #t15 = null in #t15 == null ?{self::A} #t15 as{TypeError,ForNonNullableByDefault} self::A : #t15{self::A};
   }
-  function local() → FutureOr<self::A> /* originally async */ {
+  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
     core::bool* :is_sync = false;
     FutureOr<self::A>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
index 1f4c1bb..e2e0194 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
@@ -261,7 +261,7 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -364,7 +364,7 @@
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect
index 1f4c1bb..e2e0194 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect
@@ -261,7 +261,7 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -364,7 +364,7 @@
     return null; // Error.
            ^" in null as{TypeError,ForNonNullableByDefault} self::A;
   }
-  function local() → FutureOr<self::A> async {
+  function local() → FutureOr<self::A> async /* futureValueType= self::A */ {
     if(true) {
       return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 90f48aa..2268408 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -272,7 +272,7 @@
         break #L1;
       }
   }
-  function local() → FutureOr<self::A> /* originally async */ {
+  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
     core::bool* :is_sync = false;
     FutureOr<self::A>? :return_value;
@@ -406,7 +406,7 @@
     return null; // Error.
            ^" in null;
   }
-  function local() → FutureOr<self::A> /* originally async */ {
+  function local() → FutureOr<self::A> /* futureValueType= self::A */ /* originally async */ {
     final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
     core::bool* :is_sync = false;
     FutureOr<self::A>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.expect
index e5c093e..143b766 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.expect
@@ -25,5 +25,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
index de205ad..0ce631d 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.strong.transformed.expect
@@ -52,5 +52,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.expect
index ec86fcc..69afb57 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.expect
@@ -25,5 +25,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect
index ec86fcc..69afb57 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect
@@ -25,5 +25,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
index 77e3dbf..6f63e04 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.transformed.expect
@@ -52,5 +52,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
index f82c29d..67f064e2 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.expect
@@ -33,5 +33,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
index d5ddd95..c8f0636 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.strong.transformed.expect
@@ -84,5 +84,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
index d33f1a0..2a5a6bf 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.expect
@@ -33,5 +33,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect
index d33f1a0..2a5a6bf 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect
@@ -33,5 +33,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
index 6a4db26..82be0e6 100644
--- a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.transformed.expect
@@ -84,5 +84,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
-- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:141:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index 5ed98d4..9026d7f 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async /* futureValueType= self::TestMixin::T% */ {
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 2c07b45..5244f7f 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* futureValueType= self::TestMixin::T% */ /* originally async */ {
     final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T%>? :return_value;
@@ -73,7 +73,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     core::String? :return_value;
@@ -132,7 +132,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     core::String? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index 5ed98d4..9026d7f 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async /* futureValueType= self::TestMixin::T% */ {
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect
index 5ed98d4..9026d7f 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async /* futureValueType= self::TestMixin::T% */ {
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index 2c07b45..5244f7f 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* futureValueType= self::TestMixin::T% */ /* originally async */ {
     final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T%>? :return_value;
@@ -73,7 +73,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     core::String? :return_value;
@@ -132,7 +132,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     core::String? :return_value;
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/nnbd/issue41108.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
index 3874c5a..cfff8d6 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.expect
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
index 3911f56..b0a1eca 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
index 3874c5a..cfff8d6 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.expect
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect
index 3874c5a..cfff8d6 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect
@@ -11,7 +11,7 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
  - 'List' is from 'dart:core'.
   List y = await l(); // should be a List?
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
index c8d68d4..af4fa89 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
index 467d91a..b7109c8 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
   core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
   core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
index 5a8290a..b91c2a7 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
index 467d91a..b7109c8 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
   core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
   core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect
index 467d91a..b7109c8 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
   core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
   core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
index 5a8290a..b91c2a7 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
index 5fca931..fad7dab 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
@@ -55,22 +55,22 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return self::throwing();
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     throw v;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return throw v;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => self::throwing();
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => self::throwing();
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     self::throwing();
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return self::throwing();
   };
 }
-static method errors() → void async {
+static method errors() → void async /* futureValueType= void */ {
   (core::int) → core::String x2 = (core::int v) → core::String {
     try {
       throw v;
@@ -111,7 +111,7 @@
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       throw v;
     }
@@ -121,7 +121,7 @@
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return throw v;
     }
@@ -131,7 +131,7 @@
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       self::throwing();
     }
@@ -141,7 +141,7 @@
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return self::throwing();
     }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index 8190be5..38b54a6 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -55,7 +55,7 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return self::throwing();
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -82,7 +82,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     Never? :return_value;
@@ -108,7 +108,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -135,7 +135,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -162,7 +162,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     Never? :return_value;
@@ -188,7 +188,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -216,7 +216,7 @@
     return :async_future;
   };
 }
-static method errors() → void /* originally async */ {
+static method errors() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -268,7 +268,7 @@
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
-        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -302,7 +302,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -337,7 +337,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -371,7 +371,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
index 9940f1b..f8ca0c2 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
@@ -56,22 +56,22 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     throw v;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return throw v;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
 }
-static method errors() → void async {
+static method errors() → void async /* futureValueType= void */ {
   (core::int) → core::String x2 = (core::int v) → core::String {
     try {
       throw v;
@@ -112,7 +112,7 @@
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       throw v;
     }
@@ -122,7 +122,7 @@
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return throw v;
     }
@@ -132,7 +132,7 @@
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
@@ -142,7 +142,7 @@
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect
index 9940f1b..f8ca0c2 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect
@@ -56,22 +56,22 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     throw v;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return throw v;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async /* futureValueType= Never */ {
     return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
 }
-static method errors() → void async {
+static method errors() → void async /* futureValueType= void */ {
   (core::int) → core::String x2 = (core::int v) → core::String {
     try {
       throw v;
@@ -112,7 +112,7 @@
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       throw v;
     }
@@ -122,7 +122,7 @@
   Future<String> Function(int) y2 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return throw v;
     }
@@ -132,7 +132,7 @@
   Future<String> Function(int) y3 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
@@ -142,7 +142,7 @@
   Future<String> Function(int) y5 = (int v) async /* error */ {
                                     ^" in null;
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async /* futureValueType= core::String */ {
     try {
       return let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index 69eb4d9..c6419e0 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
   (core::int) → core::String x6 = (core::int v) → Never {
     return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
   };
-  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -83,7 +83,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     Never? :return_value;
@@ -109,7 +109,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -136,7 +136,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -163,7 +163,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     Never? :return_value;
@@ -189,7 +189,7 @@
     :is_sync = true;
     return :async_future;
   };
-  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* originally async */ {
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> /* futureValueType= Never */ /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
     FutureOr<Never>? :return_value;
@@ -217,7 +217,7 @@
     return :async_future;
   };
 }
-static method errors() → void /* originally async */ {
+static method errors() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -269,7 +269,7 @@
   String Function(int) x6 = (int v) /* error */ {
                             ^" in null;
         };
-        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -303,7 +303,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -338,7 +338,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
@@ -372,7 +372,7 @@
           :is_sync = true;
           return :async_future;
         };
-        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* originally async */ {
+        (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> /* futureValueType= core::String */ /* originally async */ {
           final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
           core::bool* :is_sync = false;
           FutureOr<core::String>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
index 6b82704..030ca78 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
@@ -33,19 +33,19 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> async {
+static method getFutureNull() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   return null;
 }
-static method getFutureBool() → asy::Future<core::bool> async {
+static method getFutureBool() → asy::Future<core::bool> async /* futureValueType= core::bool */ {
   return true;
 }
-static method test1() → asy::Future<core::bool> async 
+static method test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> async 
+static method test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -54,16 +54,16 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> async 
+static method test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return self::getFutureBool();
-static method test() → dynamic async {
-  function test1() → asy::Future<core::bool> async 
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test2() → asy::Future<core::bool>
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  function test4() → asy::Future<core::bool> async 
+  function test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -72,23 +72,23 @@
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   function test6() → asy::Future<core::bool>
     return self::getFutureBool();
-  function test7() → asy::Future<core::bool> async 
+  function test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return self::getFutureBool();
   asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                   ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                         ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async /* futureValueType= core::bool */ => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 6e2c362..5c6560a 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> /* originally async */ {
+static method getFutureNull() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
@@ -60,7 +60,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method getFutureBool() → asy::Future<core::bool> /* originally async */ {
+static method getFutureBool() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   core::bool? :return_value;
@@ -87,7 +87,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test1() → asy::Future<core::bool> /* originally async */ {
+static method test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -120,7 +120,7 @@
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> /* originally async */ {
+static method test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -156,7 +156,7 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> /* originally async */ {
+static method test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -183,7 +183,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -195,7 +195,7 @@
     try {
       #L6:
       {
-        function test1() → asy::Future<core::bool> /* originally async */ {
+        function test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -228,7 +228,7 @@
           return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         function test3() → core::bool
           return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Future<core::bool> /* originally async */ {
+        function test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -264,7 +264,7 @@
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         function test6() → asy::Future<core::bool>
           return self::getFutureBool();
-        function test7() → asy::Future<core::bool> /* originally async */ {
+        function test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -294,7 +294,7 @@
         asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> /* originally async */ {
+                                                   ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
           final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           FutureOr<dynamic>? :return_value;
@@ -328,7 +328,7 @@
         asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> /* originally async */ {
+                                                         ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
           final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           FutureOr<dynamic>? :return_value;
@@ -362,7 +362,7 @@
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* originally async */ {
+        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
index 6b82704..030ca78 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
@@ -33,19 +33,19 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> async {
+static method getFutureNull() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   return null;
 }
-static method getFutureBool() → asy::Future<core::bool> async {
+static method getFutureBool() → asy::Future<core::bool> async /* futureValueType= core::bool */ {
   return true;
 }
-static method test1() → asy::Future<core::bool> async 
+static method test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> async 
+static method test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -54,16 +54,16 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> async 
+static method test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return self::getFutureBool();
-static method test() → dynamic async {
-  function test1() → asy::Future<core::bool> async 
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test2() → asy::Future<core::bool>
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  function test4() → asy::Future<core::bool> async 
+  function test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -72,23 +72,23 @@
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   function test6() → asy::Future<core::bool>
     return self::getFutureBool();
-  function test7() → asy::Future<core::bool> async 
+  function test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return self::getFutureBool();
   asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                   ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                         ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async /* futureValueType= core::bool */ => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect
index 6b82704..030ca78 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect
@@ -33,19 +33,19 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> async {
+static method getFutureNull() → asy::Future<dynamic> async /* futureValueType= dynamic */ {
   return null;
 }
-static method getFutureBool() → asy::Future<core::bool> async {
+static method getFutureBool() → asy::Future<core::bool> async /* futureValueType= core::bool */ {
   return true;
 }
-static method test1() → asy::Future<core::bool> async 
+static method test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test2() → asy::Future<core::bool>
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> async 
+static method test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
 static method test5() → asy::Future<core::bool>
   return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -54,16 +54,16 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> async 
+static method test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
   return self::getFutureBool();
-static method test() → dynamic async {
-  function test1() → asy::Future<core::bool> async 
+static method test() → dynamic async /* futureValueType= dynamic */ {
+  function test1() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test2() → asy::Future<core::bool>
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   function test3() → core::bool
     return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-  function test4() → asy::Future<core::bool> async 
+  function test4() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
   function test5() → asy::Future<core::bool>
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
@@ -72,23 +72,23 @@
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   function test6() → asy::Future<core::bool>
     return self::getFutureBool();
-  function test7() → asy::Future<core::bool> async 
+  function test7() → asy::Future<core::bool> async /* futureValueType= core::bool */ 
     return self::getFutureBool();
   asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                   ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
   core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+                                                         ^" in (() → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
   asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async /* futureValueType= core::bool */ => self::getFutureBool())(){() → asy::Future<core::bool>};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 6e2c362..5c6560a 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
 
 static method getNull() → dynamic
   return null;
-static method getFutureNull() → asy::Future<dynamic> /* originally async */ {
+static method getFutureNull() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>? :return_value;
@@ -60,7 +60,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method getFutureBool() → asy::Future<core::bool> /* originally async */ {
+static method getFutureBool() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   core::bool? :return_value;
@@ -87,7 +87,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test1() → asy::Future<core::bool> /* originally async */ {
+static method test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -120,7 +120,7 @@
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test3() → core::bool
   return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-static method test4() → asy::Future<core::bool> /* originally async */ {
+static method test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -156,7 +156,7 @@
                         ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
 static method test6() → asy::Future<core::bool>
   return self::getFutureBool();
-static method test7() → asy::Future<core::bool> /* originally async */ {
+static method test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
   final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
   core::bool* :is_sync = false;
   FutureOr<core::bool>? :return_value;
@@ -183,7 +183,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -195,7 +195,7 @@
     try {
       #L6:
       {
-        function test1() → asy::Future<core::bool> /* originally async */ {
+        function test1() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -228,7 +228,7 @@
           return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
         function test3() → core::bool
           return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
-        function test4() → asy::Future<core::bool> /* originally async */ {
+        function test4() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -264,7 +264,7 @@
                           ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         function test6() → asy::Future<core::bool>
           return self::getFutureBool();
-        function test7() → asy::Future<core::bool> /* originally async */ {
+        function test7() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
@@ -294,7 +294,7 @@
         asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var1 = (() async => await getNull())(); // error
-                                                   ^" in (() → asy::Future<dynamic> /* originally async */ {
+                                                   ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
           final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           FutureOr<dynamic>? :return_value;
@@ -328,7 +328,7 @@
         asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
  - 'Future' is from 'dart:async'.
   Future<bool> var4 = (() async => await getFutureNull())(); // error
-                                                         ^" in (() → asy::Future<dynamic> /* originally async */ {
+                                                         ^" in (() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
           final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           FutureOr<dynamic>? :return_value;
@@ -362,7 +362,7 @@
   Future<bool> var5 = (() => getFutureNull())(); // error
                                              ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
         asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
-        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* originally async */ {
+        asy::Future<core::bool> var7 = (() → asy::Future<core::bool> /* futureValueType= core::bool */ /* originally async */ {
           final asy::_Future<core::bool> :async_future = new asy::_Future::•<core::bool>();
           core::bool* :is_sync = false;
           FutureOr<core::bool>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
index 89bdcad..a8a9162 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.expect
@@ -71,7 +71,7 @@
 static method test7() → core::Iterable<core::bool> sync* {
   yield* self::getIterableBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → core::Iterable<core::bool> sync* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
index 06df3f0..815faef 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -142,7 +142,7 @@
   }
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
index 89bdcad..a8a9162 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.expect
@@ -71,7 +71,7 @@
 static method test7() → core::Iterable<core::bool> sync* {
   yield* self::getIterableBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → core::Iterable<core::bool> sync* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect
index 89bdcad..a8a9162 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect
@@ -71,7 +71,7 @@
 static method test7() → core::Iterable<core::bool> sync* {
   yield* self::getIterableBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → core::Iterable<core::bool> sync* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
index 06df3f0..815faef 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -142,7 +142,7 @@
   }
   return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
index 54bbc93..a6f6ba7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.expect
@@ -72,7 +72,7 @@
 static method test7() → asy::Stream<core::bool> async* {
   yield* self::getStreamBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → asy::Stream<core::bool> async* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
index ce8b32e..cfc0b05 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -222,7 +222,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
   return :controller_stream;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
index 54bbc93..a6f6ba7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.expect
@@ -72,7 +72,7 @@
 static method test7() → asy::Stream<core::bool> async* {
   yield* self::getStreamBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → asy::Stream<core::bool> async* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect
index 54bbc93..a6f6ba7 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect
@@ -72,7 +72,7 @@
 static method test7() → asy::Stream<core::bool> async* {
   yield* self::getStreamBool();
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   function test1() → asy::Stream<core::bool> async* {
     yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   }
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
index ce8b32e..cfc0b05 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -222,7 +222,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::bool>};
   return :controller_stream;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect
index d7d296d..bab6d364 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.expect
@@ -13,13 +13,13 @@
 import self as self;
 import "dart:async" as asy;
 
-static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnFutureOfVoid() → asy::Future<void> async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void async {}
-static method test() → dynamic async {
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method test() → dynamic async /* futureValueType= dynamic */ {
   await self::returnVoid();
   await self::returnVoidAsync();
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnFutureOfVoid();
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
index 675b14d..756e88b 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
+static method returnFutureOfVoid() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -40,7 +40,7 @@
   return :async_future;
 }
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* originally async */ {
+static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -64,7 +64,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -94,7 +94,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect
index d7d296d..bab6d364 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.expect
@@ -13,13 +13,13 @@
 import self as self;
 import "dart:async" as asy;
 
-static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnFutureOfVoid() → asy::Future<void> async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void async {}
-static method test() → dynamic async {
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method test() → dynamic async /* futureValueType= dynamic */ {
   await self::returnVoid();
   await self::returnVoidAsync();
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnFutureOfVoid();
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect
index d7d296d..bab6d364 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect
@@ -13,13 +13,13 @@
 import self as self;
 import "dart:async" as asy;
 
-static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnFutureOfVoid() → asy::Future<void> async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void async {}
-static method test() → dynamic async {
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method test() → dynamic async /* futureValueType= dynamic */ {
   await self::returnVoid();
   await self::returnVoidAsync();
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnFutureOfVoid();
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
index 675b14d..756e88b 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
+static method returnFutureOfVoid() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -40,7 +40,7 @@
   return :async_future;
 }
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* originally async */ {
+static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -64,7 +64,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -94,7 +94,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index d7f0e7d..6b5ec79 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -33,7 +33,7 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
@@ -43,7 +43,7 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^" in (await t).{core::num::+}(1){(core::num) → core::num};
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index 1c73ad9..271e82e 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -34,7 +34,7 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* originally async */ {
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
     core::num? :return_value;
@@ -70,7 +70,7 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* originally async */ {
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
     FutureOr<core::num>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index d7f0e7d..6b5ec79 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -33,7 +33,7 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
@@ -43,7 +43,7 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^" in (await t).{core::num::+}(1){(core::num) → core::num};
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect
index d7f0e7d..6b5ec79 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect
@@ -33,7 +33,7 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return (await t).{core::num::+}(1){(core::num) → core::num};
   };
 }
@@ -43,7 +43,7 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* futureValueType= core::num */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
     return (await t) + 1; // error
                      ^" in (await t).{core::num::+}(1){(core::num) → core::num};
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index 1c73ad9..271e82e 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -34,7 +34,7 @@
   <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
     return s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* originally async */ {
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
     core::num? :return_value;
@@ -70,7 +70,7 @@
     return s + 1; // error
              ^" in s.{core::num::+}(1){(core::num) → core::num};
   };
-  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* originally async */ {
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> /* futureValueType= core::num */ /* originally async */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
     FutureOr<core::num>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
index aaf931d..04de009 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
@@ -5,7 +5,7 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> async {
+static method fn() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
   core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
index 2b136de..e9c16e6 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> /* originally async */ {
+static method fn() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
index aaf931d..04de009 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
@@ -5,7 +5,7 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> async {
+static method fn() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
   core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect
index aaf931d..04de009 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect
@@ -5,7 +5,7 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> async {
+static method fn() → asy::Future<core::Object> async /* futureValueType= core::Object */ {
   core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
index 74c0365..717c3ef 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 
 static method getNull() → dynamic
   return null;
-static method fn() → asy::Future<core::Object> /* originally async */ {
+static method fn() → asy::Future<core::Object> /* futureValueType= core::Object */ /* originally async */ {
   final asy::_Future<core::Object> :async_future = new asy::_Future::•<core::Object>();
   core::bool* :is_sync = false;
   FutureOr<core::Object>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index 8563b46..64a0fed 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -37,12 +37,12 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
index e5489e1..229b2a9 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -53,7 +53,7 @@
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ /* originally async */ {
           final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
           core::bool* :is_sync = false;
           FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index 8563b46..64a0fed 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -37,12 +37,12 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect
index 8563b46..64a0fed 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect
@@ -37,12 +37,12 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic async {
+static method test() → dynamic async /* futureValueType= dynamic */ {
   asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
  - 'Future' is from 'dart:async'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
index e5489e1..229b2a9 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
 }
-static method test() → dynamic /* originally async */ {
+static method test() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -53,7 +53,7 @@
  - 'Future' is from 'dart:async'.
  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* futureValueType= self::Divergent<self::Divergent<self::Divergent<core::int>>> */ /* originally async */ {
           final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
           core::bool* :is_sync = false;
           FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
index 3e6d749..8bf045e 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
   (dynamic _) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _) → asy::Future<core::int?> async {
+  (dynamic _) → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 199ae9b..057b001 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -20,7 +20,7 @@
           if(b)
             return 42;
         };
-        (dynamic _) → asy::Future<core::int?> /* originally async */ {
+        (dynamic _) → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
           final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
           core::bool* :is_sync = false;
           core::int? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
index 3e6d749..8bf045e 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
   (dynamic _) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _) → asy::Future<core::int?> async {
+  (dynamic _) → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect
index 3e6d749..8bf045e 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
   (dynamic _) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _) → asy::Future<core::int?> async {
+  (dynamic _) → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index 199ae9b..057b001 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:async" as asy;
 import "dart:core" as core;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -20,7 +20,7 @@
           if(b)
             return 42;
         };
-        (dynamic _) → asy::Future<core::int?> /* originally async */ {
+        (dynamic _) → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
           final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
           core::bool* :is_sync = false;
           core::int? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
index 150af53..8429111 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.expect
@@ -11,7 +11,7 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
   FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
index 0bf212b..65142ef 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
index 150af53..8429111 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.expect
@@ -11,7 +11,7 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
   FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect
index 150af53..8429111 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect
@@ -11,7 +11,7 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
   FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
     self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
index 0bf212b..65142ef 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
@@ -12,7 +12,7 @@
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
   return value;
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index 63fc71a..ef843ca 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -116,20 +116,20 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
                    ^^^^^";
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
+  late core::Function f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index c26058b..f0900fa 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -123,7 +123,7 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic /* originally async */ {
+static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -177,7 +177,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method fisk() → dynamic /* originally async */ {
+static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -200,7 +200,7 @@
                              ^^^^^"}${#C1}";
         late core::String s2 = #s2#initializer(){() → core::String};
         function #f#initializer() → core::Function
-          return () → asy::Future<dynamic> /* originally async */ {
+          return () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 63fc71a..ef843ca 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -116,20 +116,20 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
                    ^^^^^";
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
+  late core::Function f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect
index 63fc71a..ef843ca 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect
@@ -116,20 +116,20 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic async {
+static method hest() → dynamic async /* futureValueType= dynamic */ {
   await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
     core::print(s);
   }
   return "hest";
 }
-static method fisk() → dynamic async {
+static method fisk() → dynamic async /* futureValueType= dynamic */ {
   late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
   late String s1 = await hest();
                    ^^^^^";
   late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
   late String s2 = '\${fisk}\${await hest()}\${fisk}';
                              ^^^^^"}${#C1}";
-  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
+  late core::Function f = () → asy::Future<dynamic> async /* futureValueType= dynamic */ => await self::hest();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index c26058b..f0900fa 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -123,7 +123,7 @@
       #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
 }
-static method hest() → dynamic /* originally async */ {
+static method hest() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -177,7 +177,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method fisk() → dynamic /* originally async */ {
+static method fisk() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -200,7 +200,7 @@
                              ^^^^^"}${#C1}";
         late core::String s2 = #s2#initializer(){() → core::String};
         function #f#initializer() → core::Function
-          return () → asy::Future<dynamic> /* originally async */ {
+          return () → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
             final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
             core::bool* :is_sync = false;
             FutureOr<dynamic>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
index ce2f50d..efe6e98 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
@@ -8,21 +8,21 @@
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> async {
+static method allYield() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield2();
 }
-static method allYield2() → asy::Future<void> async {
+static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield3();
 }
-static method allYield3() → asy::Future<void> async {
+static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   self::throwSync();
 }
-static method customErrorZone() → asy::Future<void> async {
+static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
   final asy::Completer<void> completer = asy::Completer::•<void>();
-  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
     await self::allYield();
     completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
   }, (core::Object e, core::StackTrace s) → void {
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index 8e3b2c1..53360c1 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> /* originally async */ {
+static method allYield() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -39,7 +39,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method allYield2() → asy::Future<void> /* originally async */ {
+static method allYield2() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -69,7 +69,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method allYield3() → asy::Future<void> /* originally async */ {
+static method allYield3() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -98,7 +98,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method customErrorZone() → asy::Future<void> /* originally async */ {
+static method customErrorZone() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   FutureOr<void>? :return_value;
@@ -111,7 +111,7 @@
       #L4:
       {
         final asy::Completer<void> completer = asy::Completer::•<void>();
-        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* originally async */ {
+        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
           final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
           core::bool* :is_sync = false;
           Null :return_value;
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
index ce2f50d..efe6e98 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
@@ -8,21 +8,21 @@
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> async {
+static method allYield() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield2();
 }
-static method allYield2() → asy::Future<void> async {
+static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield3();
 }
-static method allYield3() → asy::Future<void> async {
+static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   self::throwSync();
 }
-static method customErrorZone() → asy::Future<void> async {
+static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
   final asy::Completer<void> completer = asy::Completer::•<void>();
-  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
     await self::allYield();
     completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
   }, (core::Object e, core::StackTrace s) → void {
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect
index ce2f50d..efe6e98 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect
@@ -8,21 +8,21 @@
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> async {
+static method allYield() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield2();
 }
-static method allYield2() → asy::Future<void> async {
+static method allYield2() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   await self::allYield3();
 }
-static method allYield3() → asy::Future<void> async {
+static method allYield3() → asy::Future<void> async /* futureValueType= void */ {
   await 0;
   self::throwSync();
 }
-static method customErrorZone() → asy::Future<void> async {
+static method customErrorZone() → asy::Future<void> async /* futureValueType= void */ {
   final asy::Completer<void> completer = asy::Completer::•<void>();
-  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async /* futureValueType= Null */ {
     await self::allYield();
     completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
   }, (core::Object e, core::StackTrace s) → void {
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index 8e3b2c1..53360c1 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
 static method throwSync() → asy::Future<void> {
   throw "";
 }
-static method allYield() → asy::Future<void> /* originally async */ {
+static method allYield() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -39,7 +39,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method allYield2() → asy::Future<void> /* originally async */ {
+static method allYield2() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -69,7 +69,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method allYield3() → asy::Future<void> /* originally async */ {
+static method allYield3() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -98,7 +98,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method customErrorZone() → asy::Future<void> /* originally async */ {
+static method customErrorZone() → asy::Future<void> /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   FutureOr<void>? :return_value;
@@ -111,7 +111,7 @@
       #L4:
       {
         final asy::Completer<void> completer = asy::Completer::•<void>();
-        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* originally async */ {
+        asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
           final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
           core::bool* :is_sync = false;
           Null :return_value;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index 918c16c..99358d9 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -91,19 +91,19 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> async {}
-static method returnAsync2() → FutureOr<dynamic> async {}
-static method returnAsync3() → FutureOr<core::int> async {
+static method returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
   return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
 }
-static method returnAsync4() → FutureOr<core::int?> async {}
-static method returnAsync5() → dynamic async {}
-static method returnAsync6() → asy::Future<core::int?> async {
+static method returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+static method returnAsync5() → dynamic async /* futureValueType= dynamic */ {}
+static method returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
   return null;
 }
-static method returnAsync7() → asy::Future<core::int?> async {}
+static method returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
 static method yieldSync() → core::Iterable<dynamic> sync* {}
 static method yieldAsync() → asy::Stream<dynamic> async* {}
 static method caseReturn1(self::Enum e) → self::Enum {
@@ -160,19 +160,19 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> async {}
-  function returnAsync2() → FutureOr<dynamic> async {}
-  function returnAsync3() → FutureOr<core::int> async {
+  function returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
-  function returnAsync4() → FutureOr<core::int?> async {}
-  function returnAsync5() → asy::Future<Null> async {}
-  function returnAsync6() → asy::Future<core::int?> async {
+  function returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+  function returnAsync5() → asy::Future<Null> async /* futureValueType= Null */ {}
+  function returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     return null;
   }
-  function returnAsync7() → asy::Future<core::int?> async {}
+  function returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
   function yieldSync() → core::Iterable<dynamic> sync* {}
   function yieldAsync() → asy::Stream<dynamic> async* {}
   function caseReturn1(self::Enum e) → self::Enum {
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index f464a2f..6200c9f 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -91,7 +91,7 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
+static method returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -115,7 +115,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync2() → FutureOr<dynamic> /* originally async */ {
+static method returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -139,7 +139,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync3() → FutureOr<core::int> /* originally async */ {
+static method returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
   final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
   core::bool* :is_sync = false;
   FutureOr<core::int>? :return_value;
@@ -168,7 +168,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync4() → FutureOr<core::int?> /* originally async */ {
+static method returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   core::int? :return_value;
@@ -192,7 +192,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync5() → dynamic /* originally async */ {
+static method returnAsync5() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -216,7 +216,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync6() → asy::Future<core::int?> /* originally async */ {
+static method returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   FutureOr<core::int?>? :return_value;
@@ -243,7 +243,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync7() → asy::Future<core::int?> /* originally async */ {
+static method returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   core::int? :return_value;
@@ -359,7 +359,7 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> /* originally async */ {
+  function returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -383,7 +383,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync2() → FutureOr<dynamic> /* originally async */ {
+  function returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -407,7 +407,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync3() → FutureOr<core::int> /* originally async */ {
+  function returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     FutureOr<core::int>? :return_value;
@@ -436,7 +436,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync4() → FutureOr<core::int?> /* originally async */ {
+  function returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -460,7 +460,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync5() → asy::Future<Null> /* originally async */ {
+  function returnAsync5() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
     final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
     core::bool* :is_sync = false;
     Null :return_value;
@@ -484,7 +484,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync6() → asy::Future<core::int?> /* originally async */ {
+  function returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     FutureOr<core::int?>? :return_value;
@@ -511,7 +511,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync7() → asy::Future<core::int?> /* originally async */ {
+  function returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     core::int? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index 60fc699..015e678 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -92,19 +92,19 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> async {}
-static method returnAsync2() → FutureOr<dynamic> async {}
-static method returnAsync3() → FutureOr<core::int> async {
+static method returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
   return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
 }
-static method returnAsync4() → FutureOr<core::int?> async {}
-static method returnAsync5() → dynamic async {}
-static method returnAsync6() → asy::Future<core::int?> async {
+static method returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+static method returnAsync5() → dynamic async /* futureValueType= dynamic */ {}
+static method returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
   return null;
 }
-static method returnAsync7() → asy::Future<core::int?> async {}
+static method returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
 static method yieldSync() → core::Iterable<dynamic> sync* {}
 static method yieldAsync() → asy::Stream<dynamic> async* {}
 static method caseReturn1(self::Enum e) → self::Enum {
@@ -164,19 +164,19 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> async {}
-  function returnAsync2() → FutureOr<dynamic> async {}
-  function returnAsync3() → FutureOr<core::int> async {
+  function returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
-  function returnAsync4() → FutureOr<core::int?> async {}
-  function returnAsync5() → asy::Future<Null> async {}
-  function returnAsync6() → asy::Future<core::int?> async {
+  function returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+  function returnAsync5() → asy::Future<Null> async /* futureValueType= Null */ {}
+  function returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     return null;
   }
-  function returnAsync7() → asy::Future<core::int?> async {}
+  function returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
   function yieldSync() → core::Iterable<dynamic> sync* {}
   function yieldAsync() → asy::Stream<dynamic> async* {}
   function caseReturn1(self::Enum e) → self::Enum {
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
index 60fc699..015e678 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
@@ -92,19 +92,19 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> async {}
-static method returnAsync2() → FutureOr<dynamic> async {}
-static method returnAsync3() → FutureOr<core::int> async {
+static method returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+static method returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
   return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
 FutureOr<int> returnAsync3() async {} // error
               ^" in null;
 }
-static method returnAsync4() → FutureOr<core::int?> async {}
-static method returnAsync5() → dynamic async {}
-static method returnAsync6() → asy::Future<core::int?> async {
+static method returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+static method returnAsync5() → dynamic async /* futureValueType= dynamic */ {}
+static method returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
   return null;
 }
-static method returnAsync7() → asy::Future<core::int?> async {}
+static method returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
 static method yieldSync() → core::Iterable<dynamic> sync* {}
 static method yieldAsync() → asy::Stream<dynamic> async* {}
 static method caseReturn1(self::Enum e) → self::Enum {
@@ -164,19 +164,19 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> async {}
-  function returnAsync2() → FutureOr<dynamic> async {}
-  function returnAsync3() → FutureOr<core::int> async {
+  function returnAsync1() → asy::Future<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync2() → FutureOr<dynamic> async /* futureValueType= dynamic */ {}
+  function returnAsync3() → FutureOr<core::int> async /* futureValueType= core::int */ {
     return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
   FutureOr<int> returnAsync3() async {} // error
   ^" in null;
   }
-  function returnAsync4() → FutureOr<core::int?> async {}
-  function returnAsync5() → asy::Future<Null> async {}
-  function returnAsync6() → asy::Future<core::int?> async {
+  function returnAsync4() → FutureOr<core::int?> async /* futureValueType= core::int? */ {}
+  function returnAsync5() → asy::Future<Null> async /* futureValueType= Null */ {}
+  function returnAsync6() → asy::Future<core::int?> async /* futureValueType= core::int? */ {
     return null;
   }
-  function returnAsync7() → asy::Future<core::int?> async {}
+  function returnAsync7() → asy::Future<core::int?> async /* futureValueType= core::int? */ {}
   function yieldSync() → core::Iterable<dynamic> sync* {}
   function yieldAsync() → asy::Stream<dynamic> async* {}
   function caseReturn1(self::Enum e) → self::Enum {
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 09a90f2..43cc638 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -92,7 +92,7 @@
 String returnMixed(bool b) /*error*/ {
        ^" in null;
 }
-static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
+static method returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -116,7 +116,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync2() → FutureOr<dynamic> /* originally async */ {
+static method returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -140,7 +140,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync3() → FutureOr<core::int> /* originally async */ {
+static method returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
   final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
   core::bool* :is_sync = false;
   FutureOr<core::int>? :return_value;
@@ -169,7 +169,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync4() → FutureOr<core::int?> /* originally async */ {
+static method returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   core::int? :return_value;
@@ -193,7 +193,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync5() → dynamic /* originally async */ {
+static method returnAsync5() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -217,7 +217,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync6() → asy::Future<core::int?> /* originally async */ {
+static method returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   FutureOr<core::int?>? :return_value;
@@ -244,7 +244,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method returnAsync7() → asy::Future<core::int?> /* originally async */ {
+static method returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
   final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
   core::bool* :is_sync = false;
   core::int? :return_value;
@@ -363,7 +363,7 @@
   String returnMixed(bool b) /* error */ {
   ^" in null;
   }
-  function returnAsync1() → asy::Future<dynamic> /* originally async */ {
+  function returnAsync1() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -387,7 +387,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync2() → FutureOr<dynamic> /* originally async */ {
+  function returnAsync2() → FutureOr<dynamic> /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     dynamic :return_value;
@@ -411,7 +411,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync3() → FutureOr<core::int> /* originally async */ {
+  function returnAsync3() → FutureOr<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     FutureOr<core::int>? :return_value;
@@ -440,7 +440,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync4() → FutureOr<core::int?> /* originally async */ {
+  function returnAsync4() → FutureOr<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -464,7 +464,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync5() → asy::Future<Null> /* originally async */ {
+  function returnAsync5() → asy::Future<Null> /* futureValueType= Null */ /* originally async */ {
     final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
     core::bool* :is_sync = false;
     Null :return_value;
@@ -488,7 +488,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync6() → asy::Future<core::int?> /* originally async */ {
+  function returnAsync6() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     FutureOr<core::int?>? :return_value;
@@ -515,7 +515,7 @@
     :is_sync = true;
     return :async_future;
   }
-  function returnAsync7() → asy::Future<core::int?> /* originally async */ {
+  function returnAsync7() → asy::Future<core::int?> /* futureValueType= core::int? */ /* originally async */ {
     final asy::_Future<core::int?> :async_future = new asy::_Future::•<core::int?>();
     core::bool* :is_sync = false;
     core::int? :return_value;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect
index fd8e4a3..6608d90 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:async" as asy;
 
-static method returnFutureOfVoid() → asy::Future<void>* async {}
+static method returnFutureOfVoid() → asy::Future<void>* async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void async {}
-static method main() → dynamic async {
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnVoid();
   await self::returnFutureOfVoid();
   await self::returnVoidAsync();
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect
index fd8e4a3..6608d90 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect
@@ -2,10 +2,10 @@
 import self as self;
 import "dart:async" as asy;
 
-static method returnFutureOfVoid() → asy::Future<void>* async {}
+static method returnFutureOfVoid() → asy::Future<void>* async /* futureValueType= void */ {}
 static method returnVoid() → void {}
-static method returnVoidAsync() → void async {}
-static method main() → dynamic async {
+static method returnVoidAsync() → void async /* futureValueType= void */ {}
+static method main() → dynamic async /* futureValueType= dynamic */ {
   await self::returnVoid();
   await self::returnFutureOfVoid();
   await self::returnVoidAsync();
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
index 19c9552..5dcce49 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method returnFutureOfVoid() → asy::Future<void>* /* originally async */ {
+static method returnFutureOfVoid() → asy::Future<void>* /* futureValueType= void */ /* originally async */ {
   final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
   void :return_value;
@@ -29,7 +29,7 @@
   return :async_future;
 }
 static method returnVoid() → void {}
-static method returnVoidAsync() → void /* originally async */ {
+static method returnVoidAsync() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -53,7 +53,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.expect
index bebc221..f52e2c9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.expect
@@ -7,7 +7,7 @@
 import "org-dartlang-testcase:///typedef_from_opt_in_lib.dart";
 
 static method method1() → (typ::Request*) →* FutureOr<typ::Response*>*
-  return (typ::Request* r) → asy::Future<typ::Response*>* async => new typ::Response::•();
+  return (typ::Request* r) → asy::Future<typ::Response*>* async /* futureValueType= typ::Response* */ => new typ::Response::•();
 static method method2() → (core::int*) →* core::int*
   return (core::int* r) → core::int* => 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect
index bebc221..f52e2c9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect
@@ -7,7 +7,7 @@
 import "org-dartlang-testcase:///typedef_from_opt_in_lib.dart";
 
 static method method1() → (typ::Request*) →* FutureOr<typ::Response*>*
-  return (typ::Request* r) → asy::Future<typ::Response*>* async => new typ::Response::•();
+  return (typ::Request* r) → asy::Future<typ::Response*>* async /* futureValueType= typ::Response* */ => new typ::Response::•();
 static method method2() → (core::int*) →* core::int*
   return (core::int* r) → core::int* => 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
index 055f5af..05711ed 100644
--- a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
 import "org-dartlang-testcase:///typedef_from_opt_in_lib.dart";
 
 static method method1() → (typ::Request*) →* FutureOr<typ::Response*>*
-  return (typ::Request* r) → asy::Future<typ::Response*>* /* originally async */ {
+  return (typ::Request* r) → asy::Future<typ::Response*>* /* futureValueType= typ::Response* */ /* originally async */ {
     final asy::_Future<typ::Response*>* :async_future = new asy::_Future::•<typ::Response*>();
     core::bool* :is_sync = false;
     typ::Response? :return_value;
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/outline.status b/pkg/front_end/testcases/outline.status
index 3e52ebe..a5ff68d 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -2,8 +2,10 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE.md file.
 
+enhanced_enums/declared_hashcode: TypeCheckError
 const_functions/const_functions_const_factory: VerificationError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_index: TypeCheckError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -22,8 +24,8 @@
 general/crashes/crash_06/main: Crash
 general/getter_vs_setter_type: TypeCheckError
 general/implement_semi_stub: TypeCheckError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/issue41210a: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
index 749bace..5c448ec 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
 //   print("\u00"); // Bad Unicode escape, must have 4 hex digits.
 //          ^^^^
 //
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
index 749bace..5c448ec 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
 //   print("\u00"); // Bad Unicode escape, must have 4 hex digits.
 //          ^^^^
 //
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
index 749bace..5c448ec 100644
--- a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
 //   print("\u00"); // Bad Unicode escape, must have 4 hex digits.
 //          ^^^^
 //
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
index 50a886c..3444c42 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.expect
@@ -7,7 +7,6 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
 typedef Handle = invalid-type;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
index 50a886c..3444c42 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
@@ -7,7 +7,6 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
 typedef Handle = invalid-type;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
index 74c6c6a..dc3f69b 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.outline.expect
@@ -7,7 +7,6 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
 typedef Handle = invalid-type;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
index 50a886c..3444c42 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.transformed.expect
@@ -7,7 +7,6 @@
 //                ^
 //
 import self as self;
-import "dart:core" as core;
 
 typedef Handle = invalid-type;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
index bc17959..6917875 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.expect
@@ -22,10 +22,13 @@
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
+// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
index bc17959..6917875 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
@@ -22,10 +22,13 @@
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
+// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
index bc17959..6917875 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.transformed.expect
@@ -22,10 +22,13 @@
 // type T = Map<A, B>
 //                 ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 // type T = Map<A, B>
 //             ^
+// pkg/front_end/testcases/regress/issue_31188.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
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_34403.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
index cb1b2fd..a31d72a 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.expect
@@ -12,10 +12,13 @@
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -37,10 +40,13 @@
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -62,10 +68,13 @@
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -87,10 +96,13 @@
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
index cb1b2fd..a31d72a 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
@@ -12,10 +12,13 @@
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -37,10 +40,13 @@
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -62,10 +68,13 @@
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -87,10 +96,13 @@
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
index cb1b2fd..a31d72a 100644
--- a/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.transformed.expect
@@ -12,10 +12,13 @@
 //   var c2 = new C.bar<int>();
 //                  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var c3 = C<String>.bar<int>();
 //             ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -37,10 +40,13 @@
 //   const d2 = const D.foo<int>();
 //                      ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const d3 = D<String>.foo<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -62,10 +68,13 @@
 //   var e2 = new p.E.bar<int>();
 //                    ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   var e3 = p.E<String>.bar<int>();
 //               ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
@@ -87,10 +96,13 @@
 //   const f2 = const p.F.foo<int>();
 //                        ^^^
 //
-// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: The 'constructor-tearoffs' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.15 or higher.
 //   const f3 = p.F<String>.foo<int>();
 //                 ^
+// pkg/front_end/testcases/regress/issue_34403.dart:4:1: Context: This is the annotation that opts out this library from the 'constructor-tearoffs' language feature.
+// // @dart=2.9
+// ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
 // Try removing the type arguments or placing them after the class name.
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 ad3a1ce..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;
 
@@ -57,12 +49,12 @@
   return null;
 }
 static method Future<List extends core::Object* = dynamic>() → invalid-type {}
-static method f2() → dynamic async 
+static method f2() → dynamic async /* futureValueType= dynamic */ 
   return null;
-static method f3() → invalid-type async {
+static method f3() → invalid-type async /* futureValueType= invalid-type */ {
   return null;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::print(self::f1());
   core::print(await self::f2());
   core::print(await self::f3());
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 ad3a1ce..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;
 
@@ -57,12 +49,12 @@
   return null;
 }
 static method Future<List extends core::Object* = dynamic>() → invalid-type {}
-static method f2() → dynamic async 
+static method f2() → dynamic async /* futureValueType= dynamic */ 
   return null;
-static method f3() → invalid-type async {
+static method f3() → invalid-type async /* futureValueType= invalid-type */ {
   return null;
 }
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::print(self::f1());
   core::print(await self::f2());
   core::print(await self::f3());
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 4463725..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;
@@ -59,7 +51,7 @@
   return null;
 }
 static method Future<List extends core::Object* = dynamic>() → invalid-type {}
-static method f2() → dynamic /* originally async */ {
+static method f2() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>* :return_value;
@@ -86,7 +78,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method f3() → invalid-type /* originally async */ {
+static method f3() → invalid-type /* futureValueType= invalid-type */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   FutureOr<dynamic>* :return_value;
@@ -113,7 +105,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
index c92257e..668dece 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.expect
@@ -18,8 +18,8 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method main() → dynamic async {
-  function f_async() → core::int* async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  function f_async() → core::int* async /* futureValueType= core::int* */ {
     return 42;
   }
   core::print(await f_async(){() →* core::int*});
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
index c92257e..668dece 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
@@ -18,8 +18,8 @@
 import "dart:core" as core;
 import "dart:async" as asy;
 
-static method main() → dynamic async {
-  function f_async() → core::int* async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
+  function f_async() → core::int* async /* futureValueType= core::int* */ {
     return 42;
   }
   core::print(await f_async(){() →* core::int*});
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
index 2048398..9edac46 100644
--- a/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -35,7 +35,7 @@
     try {
       #L1:
       {
-        function f_async() → core::int* /* originally async */ {
+        function f_async() → core::int* /* futureValueType= core::int* */ /* originally async */ {
           final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
           dynamic :return_value;
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/testcases/set_literals/disambiguation_rule.dart.weak.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
index d565d03..358bace 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.expect
@@ -52,7 +52,7 @@
 import "dart:async" show FutureOr;
 import "dart:collection" show LinkedHashMap, LinkedHashSet;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::Map<core::int*, core::bool*>* m = <core::int*, core::bool*>{};
   core::Set<core::int*>* s = block {
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
@@ -85,17 +85,17 @@
   col::LinkedHashSet<core::int*>* flhs2 = await self::lhsfun2();
   col::LinkedHashMap<core::int*, core::bool*>* flhm2 = await self::lhmfun2();
 }
-static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async 
+static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async /* futureValueType= core::Map<core::int*, core::bool*>* */ 
   return <core::int*, core::bool*>{};
-static method setfun() → asy::Future<core::Set<core::int*>*>* async 
+static method setfun() → asy::Future<core::Set<core::int*>*>* async /* futureValueType= core::Set<core::int*>* */ 
   return block {
     final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
   } =>#t4;
-static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async 
+static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async /* futureValueType= core::Iterable<core::int*>* */ 
   return block {
     final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
   } =>#t5;
-static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async 
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async /* futureValueType= col::LinkedHashSet<core::int*>* */ 
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
@@ -105,7 +105,7 @@
                                              ^" in block {
     final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
   } =>#t6;
-static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async 
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ 
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
index d565d03..358bace 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
@@ -52,7 +52,7 @@
 import "dart:async" show FutureOr;
 import "dart:collection" show LinkedHashMap, LinkedHashSet;
 
-static method main() → dynamic async {
+static method main() → dynamic async /* futureValueType= dynamic */ {
   core::Map<core::int*, core::bool*>* m = <core::int*, core::bool*>{};
   core::Set<core::int*>* s = block {
     final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
@@ -85,17 +85,17 @@
   col::LinkedHashSet<core::int*>* flhs2 = await self::lhsfun2();
   col::LinkedHashMap<core::int*, core::bool*>* flhm2 = await self::lhmfun2();
 }
-static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async 
+static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async /* futureValueType= core::Map<core::int*, core::bool*>* */ 
   return <core::int*, core::bool*>{};
-static method setfun() → asy::Future<core::Set<core::int*>*>* async 
+static method setfun() → asy::Future<core::Set<core::int*>*>* async /* futureValueType= core::Set<core::int*>* */ 
   return block {
     final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
   } =>#t4;
-static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async 
+static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async /* futureValueType= core::Iterable<core::int*>* */ 
   return block {
     final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
   } =>#t5;
-static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async 
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async /* futureValueType= col::LinkedHashSet<core::int*>* */ 
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
  - 'Future' is from 'dart:async'.
  - 'Set' is from 'dart:core'.
@@ -105,7 +105,7 @@
                                              ^" in block {
     final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
   } =>#t6;
-static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async 
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ 
   return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
  - 'Future' is from 'dart:async'.
  - 'Map' is from 'dart:core'.
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
index 1578723..b7585e0 100644
--- a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.transformed.expect
@@ -53,7 +53,7 @@
 import "dart:async" show FutureOr;
 import "dart:collection" show LinkedHashMap, LinkedHashSet;
 
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -120,7 +120,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* /* originally async */ {
+static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* /* futureValueType= core::Map<core::int*, core::bool*>* */ /* originally async */ {
   final asy::_Future<core::Map<core::int*, core::bool*>*>* :async_future = new asy::_Future::•<core::Map<core::int*, core::bool*>*>();
   core::bool* :is_sync = false;
   core::Map<core::int*, core::bool*>? :return_value;
@@ -147,7 +147,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method setfun() → asy::Future<core::Set<core::int*>*>* /* originally async */ {
+static method setfun() → asy::Future<core::Set<core::int*>*>* /* futureValueType= core::Set<core::int*>* */ /* originally async */ {
   final asy::_Future<core::Set<core::int*>*>* :async_future = new asy::_Future::•<core::Set<core::int*>*>();
   core::bool* :is_sync = false;
   core::Set<core::int*>? :return_value;
@@ -176,7 +176,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* /* originally async */ {
+static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* /* futureValueType= core::Iterable<core::int*>* */ /* originally async */ {
   final asy::_Future<core::Iterable<core::int*>*>* :async_future = new asy::_Future::•<core::Iterable<core::int*>*>();
   core::bool* :is_sync = false;
   core::Iterable<core::int*>? :return_value;
@@ -205,7 +205,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* /* originally async */ {
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* /* futureValueType= col::LinkedHashSet<core::int*>* */ /* originally async */ {
   final asy::_Future<col::LinkedHashSet<core::int*>*>* :async_future = new asy::_Future::•<col::LinkedHashSet<core::int*>*>();
   core::bool* :is_sync = false;
   FutureOr<col::LinkedHashSet<core::int*>*>* :return_value;
@@ -240,7 +240,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* /* originally async */ {
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* /* futureValueType= col::LinkedHashMap<core::int*, core::bool*>* */ /* originally async */ {
   final asy::_Future<col::LinkedHashMap<core::int*, core::bool*>*>* :async_future = new asy::_Future::•<col::LinkedHashMap<core::int*, core::bool*>*>();
   core::bool* :is_sync = false;
   FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>* :return_value;
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index f57bbdf..4d3af5e 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -15,6 +15,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart b/pkg/front_end/testcases/super_parameters/issue48642.dart
new file mode 100644
index 0000000..9ee576b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart
@@ -0,0 +1,91 @@
+// 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.
+
+class Test {
+  Test.foo() {}
+  factory Test.bar() => new Test.foo();
+}
+
+class A1 {
+  A1({x, y});
+}
+
+class B1 extends A1 {
+  B1.foo({super.x}) : super(y: new Test.foo());
+  B1.bar({super.x}) : super(y: new Test.bar());
+}
+
+class A2 {
+  A2(x, {y});
+}
+
+class B2 extends A2 {
+  B2.foo(super.x) : super(y: new Test.foo());
+  B2.bar(super.x) : super(y: new Test.bar());
+}
+
+class A3 {
+  A3(x, {y});
+}
+
+class B3 extends A3 {
+  B3.foo({super.y}) : super(new Test.foo());
+  B3.bar({super.y}) : super(new Test.bar());
+}
+
+class A4 {
+  const A4({x, y});
+}
+
+class B4 extends A4 {
+  B4.foo({super.x}) : super(y: new Test.foo());
+  B4.bar({super.x}) : super(y: new Test.bar());
+}
+
+class A5 {
+  const A5(x, {y});
+}
+
+class B5 extends A5 {
+  B5.foo(super.x) : super(y: new Test.foo());
+  B5.bar(super.x) : super(y: new Test.bar());
+}
+
+class A6 {
+  const A6(x, {y});
+}
+
+class B6 extends A6 {
+  B6.foo({super.y}) : super(new Test.foo());
+  B6.bar({super.y}) : super(new Test.bar());
+}
+
+class A7 {
+  const A7({x, y});
+}
+
+class B7 extends A7 {
+  const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+}
+
+class A8 {
+  const A8(x, {y});
+}
+
+class B8 extends A8 {
+  const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+}
+
+class A9 {
+  const A9(x, {y});
+}
+
+class B9 extends A9 {
+  const B9.foo({super.y}) : super(new Test.foo()); // Error.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect
new file mode 100644
index 0000000..61ae4bf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.expect
@@ -0,0 +1,183 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    : super core::Object::•() {}
+  static factory bar() → self::Test
+    return new self::Test::foo();
+}
+class A1 extends core::Object {
+  constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    : super self::A2::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B2
+    : super self::A2::•(x, y: self::Test::bar())
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y = #C1}) → self::B3
+    : super self::A3::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B3
+    : super self::A3::•(self::Test::bar(), y: y)
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    : super self::A5::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B5
+    : super self::A5::•(x, y: self::Test::bar())
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y = #C1}) → self::B6
+    : super self::A6::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B6
+    : super self::A6::•(self::Test::bar(), y: y)
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y = #C1}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y = #C1}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect
new file mode 100644
index 0000000..61ae4bf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.strong.transformed.expect
@@ -0,0 +1,183 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    : super core::Object::•() {}
+  static factory bar() → self::Test
+    return new self::Test::foo();
+}
+class A1 extends core::Object {
+  constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    : super self::A2::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B2
+    : super self::A2::•(x, y: self::Test::bar())
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y = #C1}) → self::B3
+    : super self::A3::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B3
+    : super self::A3::•(self::Test::bar(), y: y)
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    : super self::A5::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B5
+    : super self::A5::•(x, y: self::Test::bar())
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y = #C1}) → self::B6
+    : super self::A6::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B6
+    : super self::A6::•(self::Test::bar(), y: y)
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y = #C1}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y = #C1}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline.expect
new file mode 100644
index 0000000..3024153
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline.expect
@@ -0,0 +1,87 @@
+class Test {
+  Test.foo() {}
+  factory Test.bar() => new Test.foo();
+}
+
+class A1 {
+  A1({x, y});
+}
+
+class B1 extends A1 {
+  B1.foo({super.x}) : super(y: new Test.foo());
+  B1.bar({super.x}) : super(y: new Test.bar());
+}
+
+class A2 {
+  A2(x, {y});
+}
+
+class B2 extends A2 {
+  B2.foo(super.x) : super(y: new Test.foo());
+  B2.bar(super.x) : super(y: new Test.bar());
+}
+
+class A3 {
+  A3(x, {y});
+}
+
+class B3 extends A3 {
+  B3.foo({super.y}) : super(new Test.foo());
+  B3.bar({super.y}) : super(new Test.bar());
+}
+
+class A4 {
+  const A4({x, y});
+}
+
+class B4 extends A4 {
+  B4.foo({super.x}) : super(y: new Test.foo());
+  B4.bar({super.x}) : super(y: new Test.bar());
+}
+
+class A5 {
+  const A5(x, {y});
+}
+
+class B5 extends A5 {
+  B5.foo(super.x) : super(y: new Test.foo());
+  B5.bar(super.x) : super(y: new Test.bar());
+}
+
+class A6 {
+  const A6(x, {y});
+}
+
+class B6 extends A6 {
+  B6.foo({super.y}) : super(new Test.foo());
+  B6.bar({super.y}) : super(new Test.bar());
+}
+
+class A7 {
+  const A7({x, y});
+}
+
+class B7 extends A7 {
+  const B7.foo({super.x}) : super(y: new Test.foo());
+  const B7.bar({super.x}) : super(y: new Test.bar());
+}
+
+class A8 {
+  const A8(x, {y});
+}
+
+class B8 extends A8 {
+  const B8.foo(super.x) : super(y: new Test.foo());
+  const B8.bar(super.x) : super(y: new Test.bar());
+}
+
+class A9 {
+  const A9(x, {y});
+}
+
+class B9 extends A9 {
+  const B9.foo({super.y}) : super(new Test.foo());
+  const B9.bar({super.y}) : super(new Test.bar());
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..74dd0fe
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.textual_outline_modelled.expect
@@ -0,0 +1,87 @@
+class A1 {
+  A1({x, y});
+}
+
+class A2 {
+  A2(x, {y});
+}
+
+class A3 {
+  A3(x, {y});
+}
+
+class A4 {
+  const A4({x, y});
+}
+
+class A5 {
+  const A5(x, {y});
+}
+
+class A6 {
+  const A6(x, {y});
+}
+
+class A7 {
+  const A7({x, y});
+}
+
+class A8 {
+  const A8(x, {y});
+}
+
+class A9 {
+  const A9(x, {y});
+}
+
+class B1 extends A1 {
+  B1.bar({super.x}) : super(y: new Test.bar());
+  B1.foo({super.x}) : super(y: new Test.foo());
+}
+
+class B2 extends A2 {
+  B2.bar(super.x) : super(y: new Test.bar());
+  B2.foo(super.x) : super(y: new Test.foo());
+}
+
+class B3 extends A3 {
+  B3.bar({super.y}) : super(new Test.bar());
+  B3.foo({super.y}) : super(new Test.foo());
+}
+
+class B4 extends A4 {
+  B4.bar({super.x}) : super(y: new Test.bar());
+  B4.foo({super.x}) : super(y: new Test.foo());
+}
+
+class B5 extends A5 {
+  B5.bar(super.x) : super(y: new Test.bar());
+  B5.foo(super.x) : super(y: new Test.foo());
+}
+
+class B6 extends A6 {
+  B6.bar({super.y}) : super(new Test.bar());
+  B6.foo({super.y}) : super(new Test.foo());
+}
+
+class B7 extends A7 {
+  const B7.bar({super.x}) : super(y: new Test.bar());
+  const B7.foo({super.x}) : super(y: new Test.foo());
+}
+
+class B8 extends A8 {
+  const B8.bar(super.x) : super(y: new Test.bar());
+  const B8.foo(super.x) : super(y: new Test.foo());
+}
+
+class B9 extends A9 {
+  const B9.bar({super.y}) : super(new Test.bar());
+  const B9.foo({super.y}) : super(new Test.foo());
+}
+
+class Test {
+  Test.foo() {}
+  factory Test.bar() => new Test.foo();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.expect
new file mode 100644
index 0000000..61ae4bf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.expect
@@ -0,0 +1,183 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    : super core::Object::•() {}
+  static factory bar() → self::Test
+    return new self::Test::foo();
+}
+class A1 extends core::Object {
+  constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    : super self::A2::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B2
+    : super self::A2::•(x, y: self::Test::bar())
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y = #C1}) → self::B3
+    : super self::A3::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B3
+    : super self::A3::•(self::Test::bar(), y: y)
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    : super self::A5::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B5
+    : super self::A5::•(x, y: self::Test::bar())
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y = #C1}) → self::B6
+    : super self::A6::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B6
+    : super self::A6::•(self::Test::bar(), y: y)
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y = #C1}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y = #C1}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.modular.expect
new file mode 100644
index 0000000..61ae4bf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.modular.expect
@@ -0,0 +1,183 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    : super core::Object::•() {}
+  static factory bar() → self::Test
+    return new self::Test::foo();
+}
+class A1 extends core::Object {
+  constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    : super self::A2::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B2
+    : super self::A2::•(x, y: self::Test::bar())
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y = #C1}) → self::B3
+    : super self::A3::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B3
+    : super self::A3::•(self::Test::bar(), y: y)
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    : super self::A5::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B5
+    : super self::A5::•(x, y: self::Test::bar())
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y = #C1}) → self::B6
+    : super self::A6::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B6
+    : super self::A6::•(self::Test::bar(), y: y)
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y = #C1}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y = #C1}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
new file mode 100644
index 0000000..0c84a13
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.outline.expect
@@ -0,0 +1,165 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    ;
+  static factory bar() → self::Test
+    ;
+}
+class A1 extends core::Object {
+  constructor •({dynamic x, dynamic y}) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x}) → self::B1
+    ;
+  constructor bar({dynamic x}) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y}) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    ;
+  constructor bar(dynamic x) → self::B2
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y}) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y}) → self::B3
+    ;
+  constructor bar({dynamic y}) → self::B3
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x, dynamic y}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x}) → self::B4
+    ;
+  constructor bar({dynamic x}) → self::B4
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    ;
+  constructor bar(dynamic x) → self::B5
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y}) → self::B6
+    ;
+  constructor bar({dynamic y}) → self::B6
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x, dynamic y}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.transformed.expect
new file mode 100644
index 0000000..61ae4bf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48642.dart.weak.transformed.expect
@@ -0,0 +1,183 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:69:38: Error: New expression is not a constant expression.
+//   const B7.foo({super.x}) : super(y: new Test.foo()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:38: Error: New expression is not a constant expression.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                      ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:78:36: Error: New expression is not a constant expression.
+//   const B8.foo(super.x) : super(y: new Test.foo()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:36: Error: New expression is not a constant expression.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                    ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:87:35: Error: New expression is not a constant expression.
+//   const B9.foo({super.y}) : super(new Test.foo()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:35: Error: New expression is not a constant expression.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                   ^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+//                                          ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B9.bar({super.y}) : super(new Test.bar()); // Error.
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  constructor foo() → self::Test
+    : super core::Object::•() {}
+  static factory bar() → self::Test
+    return new self::Test::foo();
+}
+class A1 extends core::Object {
+  constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor foo({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B1
+    : super self::A1::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A2 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor foo(dynamic x) → self::B2
+    : super self::A2::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B2
+    : super self::A2::•(x, y: self::Test::bar())
+    ;
+}
+class A3 extends core::Object {
+  constructor •(dynamic x, {dynamic y = #C1}) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor foo({dynamic y = #C1}) → self::B3
+    : super self::A3::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B3
+    : super self::A3::•(self::Test::bar(), y: y)
+    ;
+}
+class A4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor foo({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: new self::Test::foo(), x: x)
+    ;
+  constructor bar({dynamic x = #C1}) → self::B4
+    : super self::A4::•(y: self::Test::bar(), x: x)
+    ;
+}
+class A5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor foo(dynamic x) → self::B5
+    : super self::A5::•(x, y: new self::Test::foo())
+    ;
+  constructor bar(dynamic x) → self::B5
+    : super self::A5::•(x, y: self::Test::bar())
+    ;
+}
+class A6 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor foo({dynamic y = #C1}) → self::B6
+    : super self::A6::•(new self::Test::foo(), y: y)
+    ;
+  constructor bar({dynamic y = #C1}) → self::B6
+    : super self::A6::•(self::Test::bar(), y: y)
+    ;
+}
+class A7 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1, dynamic y = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 /*hasConstConstructor*/  {
+  const constructor foo({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: new self::Test::foo(), x: x)
+    ;
+  const constructor bar({dynamic x = #C1}) → self::B7
+    : super self::A7::•(y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:70:42: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B7.bar({super.x}) : super(y: new Test.bar()); // Error.
+                                         ^", x: x)
+    ;
+}
+class A8 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A8
+    : super core::Object::•()
+    ;
+}
+class B8 extends self::A8 /*hasConstConstructor*/  {
+  const constructor foo(dynamic x) → self::B8
+    : super self::A8::•(x, y: new self::Test::foo())
+    ;
+  const constructor bar(dynamic x) → self::B8
+    : super self::A8::•(x, y: invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:79:40: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B8.bar(super.x) : super(y: new Test.bar()); // Error.
+                                       ^")
+    ;
+}
+class A9 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic x, {dynamic y = #C1}) → self::A9
+    : super core::Object::•()
+    ;
+}
+class B9 extends self::A9 /*hasConstConstructor*/  {
+  const constructor foo({dynamic y = #C1}) → self::B9
+    : super self::A9::•(new self::Test::foo(), y: y)
+    ;
+  const constructor bar({dynamic y = #C1}) → self::B9
+    : super self::A9::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue48642.dart:88:39: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B9.bar({super.y}) : super(new Test.bar()); // Error.
+                                      ^", y: y)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart b/pkg/front_end/testcases/super_parameters/issue48708.dart
new file mode 100644
index 0000000..5b2395d
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart
@@ -0,0 +1,23 @@
+// 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.
+
+class A {}
+
+class Mixin {}
+
+abstract class B<D> {
+  B({
+    required this.field,
+  });
+
+  final D field;
+}
+
+class C extends B<A> with Mixin {
+  C({
+    required super.field,
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
new file mode 100644
index 0000000..05ade25
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field = #C1}) → self::B<self::B::D%>
+    : self::B::field = field, super core::Object::•()
+    ;
+}
+abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field = #C1}) → self::C
+    : super self::_C&B&Mixin::•(field: field)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
new file mode 100644
index 0000000..f71d862
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.strong.transformed.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field = #C1}) → self::B<self::B::D%>
+    : self::B::field = field, super core::Object::•()
+    ;
+}
+abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field = #C1}) → self::C
+    : super self::_C&B&Mixin::•(field: field)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline.expect
new file mode 100644
index 0000000..963c4ca
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+class A {}
+
+class Mixin {}
+
+abstract class B<D> {
+  B({
+    required this.field,
+  });
+  final D field;
+}
+
+class C extends B<A> with Mixin {
+  C({
+    required super.field,
+  });
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..429733e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+abstract class B<D> {
+  B({
+    required this.field,
+  });
+  final D field;
+}
+
+class A {}
+
+class C extends B<A> with Mixin {
+  C({
+    required super.field,
+  });
+}
+
+class Mixin {}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
new file mode 100644
index 0000000..05ade25
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field = #C1}) → self::B<self::B::D%>
+    : self::B::field = field, super core::Object::•()
+    ;
+}
+abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field = #C1}) → self::C
+    : super self::_C&B&Mixin::•(field: field)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
new file mode 100644
index 0000000..05ade25
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field = #C1}) → self::B<self::B::D%>
+    : self::B::field = field, super core::Object::•()
+    ;
+}
+abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field = #C1}) → self::C
+    : super self::_C&B&Mixin::•(field: field)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
new file mode 100644
index 0000000..4a28ead1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field}) → self::B<self::B::D%>
+    ;
+}
+abstract class _C&B&Mixin = self::B<self::A> with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •({self::A field}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field}) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
new file mode 100644
index 0000000..f71d862
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48708.dart.weak.transformed.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class B<D extends core::Object? = dynamic> extends core::Object {
+  final field self::B::D% field;
+  constructor •({required self::B::D% field = #C1}) → self::B<self::B::D%>
+    : self::B::field = field, super core::Object::•()
+    ;
+}
+abstract class _C&B&Mixin extends self::B<self::A> implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •({self::A field = #C1}) → self::_C&B&Mixin
+    : super self::B::•(field: field)
+    ;
+}
+class C extends self::_C&B&Mixin {
+  constructor •({required self::A field = #C1}) → self::C
+    : super self::_C&B&Mixin::•(field: field)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart b/pkg/front_end/testcases/super_parameters/issue48714.dart
new file mode 100644
index 0000000..f813a85
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart
@@ -0,0 +1,16 @@
+// 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.
+
+class Base {
+  int value;
+  Base(this.value);
+}
+
+class Extended extends Base {
+  Extended.one(final super.value); // Ok.
+  Extended.two(var super.value); // Error.
+  Extended.three(const super.value); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.expect
new file mode 100644
index 0000000..fb8c1e75
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:12:16: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   Extended.two(var super.value); // Error.
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    : self::Base::value = value, super core::Object::•()
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor two(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor three(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.transformed.expect
new file mode 100644
index 0000000..fb8c1e75
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.strong.transformed.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:12:16: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   Extended.two(var super.value); // Error.
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    : self::Base::value = value, super core::Object::•()
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor two(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor three(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.textual_outline.expect
new file mode 100644
index 0000000..c5daa03
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class Base {
+  int value;
+  Base(this.value);
+}
+class Extended extends Base {
+  Extended.one(final super.value);
+  Extended.two(var super.value);
+  Extended.three(const super.value);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.expect
new file mode 100644
index 0000000..fb8c1e75
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:12:16: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   Extended.two(var super.value); // Error.
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    : self::Base::value = value, super core::Object::•()
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor two(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor three(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.modular.expect
new file mode 100644
index 0000000..fb8c1e75
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:12:16: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   Extended.two(var super.value); // Error.
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    : self::Base::value = value, super core::Object::•()
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor two(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor three(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.outline.expect
new file mode 100644
index 0000000..288205c
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.outline.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    ;
+  constructor two(core::int value) → self::Extended
+    ;
+  constructor three(core::int value) → self::Extended
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.transformed.expect
new file mode 100644
index 0000000..fb8c1e75
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48714.dart.weak.transformed.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:13:18: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   Extended.three(const super.value); // Error.
+//                  ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/issue48714.dart:12:16: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   Extended.two(var super.value); // Error.
+//                ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int value;
+  constructor •(core::int value) → self::Base
+    : self::Base::value = value, super core::Object::•()
+    ;
+}
+class Extended extends self::Base {
+  constructor one(final core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor two(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+  constructor three(core::int value) → self::Extended
+    : super self::Base::•(value)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart b/pkg/front_end/testcases/super_parameters/no_coercions.dart
new file mode 100644
index 0000000..942256b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart
@@ -0,0 +1,82 @@
+// 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.
+
+class A1 {
+  A1(int x);
+}
+
+class B1 extends A1 {
+  B1.one(dynamic super.x); // Error.
+  B1.two(dynamic super.x) : super(); // Error.
+}
+
+class A2 {
+  A2({required String x});
+}
+
+class B2 extends A2 {
+  B2.one({required dynamic super.x}); // Error.
+  B2.two({required dynamic super.x}) : super(); // Error.
+}
+
+class A3 {
+  A3(num Function(double) f);
+}
+
+class B3 extends A3 {
+  B3.one(X Function<X>(double) super.f); // Error.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+}
+
+class A4 {
+  A4({required num Function(double) f});
+}
+
+class B4 extends A4 {
+  B4.one({required X Function<X>(double) super.f}); // Error.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+}
+
+abstract class C5 {
+  String call(int x, num y);
+}
+
+class A5 {
+  A5(String Function(int, num) f);
+}
+
+class B5 extends A5 {
+  B5.one(C5 super.f); // Error.
+  B5.two(C5 super.f) : super(); // Error.
+}
+
+class A6 {
+  A6({required String Function(int, num) f});
+}
+
+class B6 extends A6 {
+  B6.one({required C5 super.f}); // Error.
+  B6.two({required C5 super.f}) : super(); // Error.
+}
+
+class A7 {
+  A7({required int x1,
+      required int x2,
+      required bool Function(Object) f1,
+      required bool Function(Object) f2,
+      required void Function(dynamic) g1,
+      required void Function(dynamic) g2});
+}
+
+class B7 extends A7 {
+  B7({required dynamic super.x1, // Error.
+      required dynamic x2,
+      required X Function<X>(Object) super.f1, // Error.
+      required X Function<X>(Object) f2,
+      required void Function<X>(X) super.g1, // Error.
+      required void Function<X>(X) g2}) :
+    super(x2: x2, f2: f2, g2: g2); // Ok.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.expect
new file mode 100644
index 0000000..1d154d8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.one(dynamic super.x); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.two(dynamic super.x) : super(); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.one({required dynamic super.x}); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.two({required dynamic super.x}) : super(); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.one(X Function<X>(double) super.f); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.two(X Function<X>(double) super.f) : super(); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.one({required X Function<X>(double) super.f}); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.one(C5 super.f); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.two(C5 super.f) : super(); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.one({required C5 super.f}); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.two({required C5 super.f}) : super(); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B7({required dynamic super.x1, // Error.
+//                              ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+//       required X Function<X>(Object) super.f1, // Error.
+//                                            ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+//       required void Function<X>(X) super.g1, // Error.
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.one(dynamic super.x); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+  constructor two(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.two(dynamic super.x) : super(); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.one({required dynamic super.x}); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+  constructor two({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.two({required dynamic super.x}) : super(); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.one(X Function<X>(double) super.f); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.one({required X Function<X>(double) super.f}); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    : super core::Object::•()
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.one(C5 super.f); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.two(C5 super.f) : super(); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.one({required C5 super.f}); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.two({required C5 super.f}) : super(); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1 = #C1, required core::int x2 = #C1, required (core::Object) → core::bool f1 = #C1, required (core::Object) → core::bool f2 = #C1, required (dynamic) → void g1 = #C1, required (dynamic) → void g2 = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1 = #C1, required dynamic x2 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = #C1, required <X extends core::Object? = dynamic>(X%) → void g1 = #C1, required <X extends core::Object? = dynamic>(X%) → void g2 = #C1}) → self::B7
+    : super self::A7::•(x2: x2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, f2: f2<core::bool>, g2: g2<dynamic>, x1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B7({required dynamic super.x1, // Error.
+                             ^" in x1 as{TypeError,ForNonNullableByDefault} core::int, f1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+ - 'Object' is from 'dart:core'.
+      required X Function<X>(Object) super.f1, // Error.
+                                           ^" in f1 as{TypeError,ForNonNullableByDefault} (core::Object) → core::bool, g1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+      required void Function<X>(X) super.g1, // Error.
+                                         ^" in g1 as{TypeError,ForNonNullableByDefault} (dynamic) → void)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.transformed.expect
new file mode 100644
index 0000000..1d154d8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.strong.transformed.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.one(dynamic super.x); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.two(dynamic super.x) : super(); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.one({required dynamic super.x}); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.two({required dynamic super.x}) : super(); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.one(X Function<X>(double) super.f); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.two(X Function<X>(double) super.f) : super(); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.one({required X Function<X>(double) super.f}); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.one(C5 super.f); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.two(C5 super.f) : super(); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.one({required C5 super.f}); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.two({required C5 super.f}) : super(); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B7({required dynamic super.x1, // Error.
+//                              ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+//       required X Function<X>(Object) super.f1, // Error.
+//                                            ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+//       required void Function<X>(X) super.g1, // Error.
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.one(dynamic super.x); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+  constructor two(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.two(dynamic super.x) : super(); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.one({required dynamic super.x}); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+  constructor two({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.two({required dynamic super.x}) : super(); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.one(X Function<X>(double) super.f); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.one({required X Function<X>(double) super.f}); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    : super core::Object::•()
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.one(C5 super.f); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.two(C5 super.f) : super(); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.one({required C5 super.f}); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.two({required C5 super.f}) : super(); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1 = #C1, required core::int x2 = #C1, required (core::Object) → core::bool f1 = #C1, required (core::Object) → core::bool f2 = #C1, required (dynamic) → void g1 = #C1, required (dynamic) → void g2 = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1 = #C1, required dynamic x2 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = #C1, required <X extends core::Object? = dynamic>(X%) → void g1 = #C1, required <X extends core::Object? = dynamic>(X%) → void g2 = #C1}) → self::B7
+    : super self::A7::•(x2: x2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, f2: f2<core::bool>, g2: g2<dynamic>, x1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B7({required dynamic super.x1, // Error.
+                             ^" in x1 as{TypeError,ForNonNullableByDefault} core::int, f1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+ - 'Object' is from 'dart:core'.
+      required X Function<X>(Object) super.f1, // Error.
+                                           ^" in f1 as{TypeError,ForNonNullableByDefault} (core::Object) → core::bool, g1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+      required void Function<X>(X) super.g1, // Error.
+                                         ^" in g1 as{TypeError,ForNonNullableByDefault} (dynamic) → void)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline.expect
new file mode 100644
index 0000000..80093ec
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline.expect
@@ -0,0 +1,80 @@
+class A1 {
+  A1(int x);
+}
+
+class B1 extends A1 {
+  B1.one(dynamic super.x);
+  B1.two(dynamic super.x) : super();
+}
+
+class A2 {
+  A2({required String x});
+}
+
+class B2 extends A2 {
+  B2.one({required dynamic super.x});
+  B2.two({required dynamic super.x}) : super();
+}
+
+class A3 {
+  A3(num Function(double) f);
+}
+
+class B3 extends A3 {
+  B3.one(X Function<X>(double) super.f);
+  B3.two(X Function<X>(double) super.f) : super();
+}
+
+class A4 {
+  A4({required num Function(double) f});
+}
+
+class B4 extends A4 {
+  B4.one({required X Function<X>(double) super.f});
+  B4.two({required X Function<X>(double) super.f}) : super();
+}
+
+abstract class C5 {
+  String call(int x, num y);
+}
+
+class A5 {
+  A5(String Function(int, num) f);
+}
+
+class B5 extends A5 {
+  B5.one(C5 super.f);
+  B5.two(C5 super.f) : super();
+}
+
+class A6 {
+  A6({required String Function(int, num) f});
+}
+
+class B6 extends A6 {
+  B6.one({required C5 super.f});
+  B6.two({required C5 super.f}) : super();
+}
+
+class A7 {
+  A7(
+      {required int x1,
+      required int x2,
+      required bool Function(Object) f1,
+      required bool Function(Object) f2,
+      required void Function(dynamic) g1,
+      required void Function(dynamic) g2});
+}
+
+class B7 extends A7 {
+  B7(
+      {required dynamic super.x1,
+      required dynamic x2,
+      required X Function<X>(Object) super.f1,
+      required X Function<X>(Object) f2,
+      required void Function<X>(X) super.g1,
+      required void Function<X>(X) g2})
+      : super(x2: x2, f2: f2, g2: g2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d6b43c6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.textual_outline_modelled.expect
@@ -0,0 +1,80 @@
+abstract class C5 {
+  String call(int x, num y);
+}
+
+class A1 {
+  A1(int x);
+}
+
+class A2 {
+  A2({required String x});
+}
+
+class A3 {
+  A3(num Function(double) f);
+}
+
+class A4 {
+  A4({required num Function(double) f});
+}
+
+class A5 {
+  A5(String Function(int, num) f);
+}
+
+class A6 {
+  A6({required String Function(int, num) f});
+}
+
+class A7 {
+  A7(
+      {required int x1,
+      required int x2,
+      required bool Function(Object) f1,
+      required bool Function(Object) f2,
+      required void Function(dynamic) g1,
+      required void Function(dynamic) g2});
+}
+
+class B1 extends A1 {
+  B1.one(dynamic super.x);
+  B1.two(dynamic super.x) : super();
+}
+
+class B2 extends A2 {
+  B2.one({required dynamic super.x});
+  B2.two({required dynamic super.x}) : super();
+}
+
+class B3 extends A3 {
+  B3.one(X Function<X>(double) super.f);
+  B3.two(X Function<X>(double) super.f) : super();
+}
+
+class B4 extends A4 {
+  B4.one({required X Function<X>(double) super.f});
+  B4.two({required X Function<X>(double) super.f}) : super();
+}
+
+class B5 extends A5 {
+  B5.one(C5 super.f);
+  B5.two(C5 super.f) : super();
+}
+
+class B6 extends A6 {
+  B6.one({required C5 super.f});
+  B6.two({required C5 super.f}) : super();
+}
+
+class B7 extends A7 {
+  B7(
+      {required dynamic super.x1,
+      required dynamic x2,
+      required X Function<X>(Object) super.f1,
+      required X Function<X>(Object) f2,
+      required void Function<X>(X) super.g1,
+      required void Function<X>(X) g2})
+      : super(x2: x2, f2: f2, g2: g2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.expect
new file mode 100644
index 0000000..1d154d8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.one(dynamic super.x); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.two(dynamic super.x) : super(); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.one({required dynamic super.x}); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.two({required dynamic super.x}) : super(); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.one(X Function<X>(double) super.f); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.two(X Function<X>(double) super.f) : super(); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.one({required X Function<X>(double) super.f}); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.one(C5 super.f); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.two(C5 super.f) : super(); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.one({required C5 super.f}); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.two({required C5 super.f}) : super(); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B7({required dynamic super.x1, // Error.
+//                              ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+//       required X Function<X>(Object) super.f1, // Error.
+//                                            ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+//       required void Function<X>(X) super.g1, // Error.
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.one(dynamic super.x); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+  constructor two(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.two(dynamic super.x) : super(); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.one({required dynamic super.x}); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+  constructor two({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.two({required dynamic super.x}) : super(); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.one(X Function<X>(double) super.f); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.one({required X Function<X>(double) super.f}); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    : super core::Object::•()
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.one(C5 super.f); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.two(C5 super.f) : super(); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.one({required C5 super.f}); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.two({required C5 super.f}) : super(); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1 = #C1, required core::int x2 = #C1, required (core::Object) → core::bool f1 = #C1, required (core::Object) → core::bool f2 = #C1, required (dynamic) → void g1 = #C1, required (dynamic) → void g2 = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1 = #C1, required dynamic x2 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = #C1, required <X extends core::Object? = dynamic>(X%) → void g1 = #C1, required <X extends core::Object? = dynamic>(X%) → void g2 = #C1}) → self::B7
+    : super self::A7::•(x2: x2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, f2: f2<core::bool>, g2: g2<dynamic>, x1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B7({required dynamic super.x1, // Error.
+                             ^" in x1 as{TypeError,ForNonNullableByDefault} core::int, f1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+ - 'Object' is from 'dart:core'.
+      required X Function<X>(Object) super.f1, // Error.
+                                           ^" in f1 as{TypeError,ForNonNullableByDefault} (core::Object) → core::bool, g1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+      required void Function<X>(X) super.g1, // Error.
+                                         ^" in g1 as{TypeError,ForNonNullableByDefault} (dynamic) → void)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.modular.expect
new file mode 100644
index 0000000..1d154d8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.modular.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.one(dynamic super.x); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.two(dynamic super.x) : super(); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.one({required dynamic super.x}); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.two({required dynamic super.x}) : super(); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.one(X Function<X>(double) super.f); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.two(X Function<X>(double) super.f) : super(); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.one({required X Function<X>(double) super.f}); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.one(C5 super.f); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.two(C5 super.f) : super(); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.one({required C5 super.f}); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.two({required C5 super.f}) : super(); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B7({required dynamic super.x1, // Error.
+//                              ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+//       required X Function<X>(Object) super.f1, // Error.
+//                                            ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+//       required void Function<X>(X) super.g1, // Error.
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.one(dynamic super.x); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+  constructor two(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.two(dynamic super.x) : super(); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.one({required dynamic super.x}); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+  constructor two({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.two({required dynamic super.x}) : super(); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.one(X Function<X>(double) super.f); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.one({required X Function<X>(double) super.f}); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    : super core::Object::•()
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.one(C5 super.f); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.two(C5 super.f) : super(); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.one({required C5 super.f}); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.two({required C5 super.f}) : super(); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1 = #C1, required core::int x2 = #C1, required (core::Object) → core::bool f1 = #C1, required (core::Object) → core::bool f2 = #C1, required (dynamic) → void g1 = #C1, required (dynamic) → void g2 = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1 = #C1, required dynamic x2 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = #C1, required <X extends core::Object? = dynamic>(X%) → void g1 = #C1, required <X extends core::Object? = dynamic>(X%) → void g2 = #C1}) → self::B7
+    : super self::A7::•(x2: x2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, f2: f2<core::bool>, g2: g2<dynamic>, x1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B7({required dynamic super.x1, // Error.
+                             ^" in x1 as{TypeError,ForNonNullableByDefault} core::int, f1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+ - 'Object' is from 'dart:core'.
+      required X Function<X>(Object) super.f1, // Error.
+                                           ^" in f1 as{TypeError,ForNonNullableByDefault} (core::Object) → core::bool, g1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+      required void Function<X>(X) super.g1, // Error.
+                                         ^" in g1 as{TypeError,ForNonNullableByDefault} (dynamic) → void)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
new file mode 100644
index 0000000..7a8c89a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.outline.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    ;
+  constructor two(dynamic x) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x}) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x}) → self::B2
+    ;
+  constructor two({required dynamic x}) → self::B2
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f}) → self::A4
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f}) → self::B4
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    ;
+  constructor two(self::C5 f) → self::B5
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f}) → self::A6
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f}) → self::B6
+    ;
+  constructor two({required self::C5 f}) → self::B6
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1, required core::int x2, required (core::Object) → core::bool f1, required (core::Object) → core::bool f2, required (dynamic) → void g1, required (dynamic) → void g2}) → self::A7
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1, required dynamic x2, required <X extends core::Object? = dynamic>(core::Object) → X% f1, required <X extends core::Object? = dynamic>(core::Object) → X% f2, required <X extends core::Object? = dynamic>(X%) → void g1, required <X extends core::Object? = dynamic>(X%) → void g2}) → self::B7
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.transformed.expect
new file mode 100644
index 0000000..1d154d8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/no_coercions.dart.weak.transformed.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.one(dynamic super.x); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B1.two(dynamic super.x) : super(); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.one({required dynamic super.x}); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+//   B2.two({required dynamic super.x}) : super(); // Error.
+//                                  ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.one(X Function<X>(double) super.f); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B3.two(X Function<X>(double) super.f) : super(); // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.one({required X Function<X>(double) super.f}); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+//   B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+//                                                ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.one(C5 super.f); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B5.two(C5 super.f) : super(); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.one({required C5 super.f}); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+//  - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+//   B6.two({required C5 super.f}) : super(); // Error.
+//                             ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+//   B7({required dynamic super.x1, // Error.
+//                              ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+//       required X Function<X>(Object) super.f1, // Error.
+//                                            ^
+//
+// pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+//       required void Function<X>(X) super.g1, // Error.
+//                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  constructor •(core::int x) → self::A1
+    : super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor one(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:10:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.one(dynamic super.x); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+  constructor two(dynamic x) → self::B1
+    : super self::A1::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:11:24: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B1.two(dynamic super.x) : super(); // Error.
+                       ^" in x as{TypeError,ForNonNullableByDefault} core::int)
+    ;
+}
+class A2 extends core::Object {
+  constructor •({required core::String x = #C1}) → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor one({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:19:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.one({required dynamic super.x}); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+  constructor two({required dynamic x = #C1}) → self::B2
+    : super self::A2::•(x: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:20:34: Error: The argument type 'dynamic' can't be assigned to the parameter type 'String'.
+  B2.two({required dynamic super.x}) : super(); // Error.
+                                 ^" in x as{TypeError,ForNonNullableByDefault} core::String)
+    ;
+}
+class A3 extends core::Object {
+  constructor •((core::double) → core::num f) → self::A3
+    : super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor one(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:28:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.one(X Function<X>(double) super.f); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two(<X extends core::Object? = dynamic>(core::double) → X% f) → self::B3
+    : super self::A3::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:29:38: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B3.two(X Function<X>(double) super.f) : super(); // Error.
+                                     ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+class A4 extends core::Object {
+  constructor •({required (core::double) → core::num f = #C1}) → self::A4
+    : super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor one({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:37:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.one({required X Function<X>(double) super.f}); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+  constructor two({required <X extends core::Object? = dynamic>(core::double) → X% f = #C1}) → self::B4
+    : super self::A4::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:38:48: Error: The argument type 'X Function<X>(double)' can't be assigned to the parameter type 'num Function(double)'.
+  B4.two({required X Function<X>(double) super.f}) : super(); // Error.
+                                               ^" in f as{TypeError,ForNonNullableByDefault} (core::double) → core::num)
+    ;
+}
+abstract class C5 extends core::Object {
+  synthetic constructor •() → self::C5
+    : super core::Object::•()
+    ;
+  abstract method call(core::int x, core::num y) → core::String;
+}
+class A5 extends core::Object {
+  constructor •((core::int, core::num) → core::String f) → self::A5
+    : super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor one(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:50:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.one(C5 super.f); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two(self::C5 f) → self::B5
+    : super self::A5::•(invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:51:19: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B5.two(C5 super.f) : super(); // Error.
+                  ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A6 extends core::Object {
+  constructor •({required (core::int, core::num) → core::String f = #C1}) → self::A6
+    : super core::Object::•()
+    ;
+}
+class B6 extends self::A6 {
+  constructor one({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:59:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.one({required C5 super.f}); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+  constructor two({required self::C5 f = #C1}) → self::B6
+    : super self::A6::•(f: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:60:29: Error: The argument type 'C5' can't be assigned to the parameter type 'String Function(int, num)'.
+ - 'C5' is from 'pkg/front_end/testcases/super_parameters/no_coercions.dart'.
+  B6.two({required C5 super.f}) : super(); // Error.
+                            ^" in f as{TypeError,ForNonNullableByDefault} (core::int, core::num) → core::String)
+    ;
+}
+class A7 extends core::Object {
+  constructor •({required core::int x1 = #C1, required core::int x2 = #C1, required (core::Object) → core::bool f1 = #C1, required (core::Object) → core::bool f2 = #C1, required (dynamic) → void g1 = #C1, required (dynamic) → void g2 = #C1}) → self::A7
+    : super core::Object::•()
+    ;
+}
+class B7 extends self::A7 {
+  constructor •({required dynamic x1 = #C1, required dynamic x2 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f1 = #C1, required <X extends core::Object? = dynamic>(core::Object) → X% f2 = #C1, required <X extends core::Object? = dynamic>(X%) → void g1 = #C1, required <X extends core::Object? = dynamic>(X%) → void g2 = #C1}) → self::B7
+    : super self::A7::•(x2: x2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, f2: f2<core::bool>, g2: g2<dynamic>, x1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:73:30: Error: The argument type 'dynamic' can't be assigned to the parameter type 'int'.
+  B7({required dynamic super.x1, // Error.
+                             ^" in x1 as{TypeError,ForNonNullableByDefault} core::int, f1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:75:44: Error: The argument type 'X Function<X>(Object)' can't be assigned to the parameter type 'bool Function(Object)'.
+ - 'Object' is from 'dart:core'.
+      required X Function<X>(Object) super.f1, // Error.
+                                           ^" in f1 as{TypeError,ForNonNullableByDefault} (core::Object) → core::bool, g1: invalid-expression "pkg/front_end/testcases/super_parameters/no_coercions.dart:77:42: Error: The argument type 'void Function<X>(X)' can't be assigned to the parameter type 'void Function(dynamic)'.
+      required void Function<X>(X) super.g1, // Error.
+                                         ^" in g1 as{TypeError,ForNonNullableByDefault} (dynamic) → void)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart b/pkg/front_end/testcases/super_parameters/opt_out.dart
new file mode 100644
index 0000000..97fd985
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart
@@ -0,0 +1,17 @@
+// 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.
+
+// @dart=2.15
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(super.field);
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.expect
new file mode 100644
index 0000000..01b7cb5
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.field);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.field);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.transformed.expect
new file mode 100644
index 0000000..01b7cb5
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.strong.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.field);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.field);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.textual_outline.expect
new file mode 100644
index 0000000..8f960f9
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+// @dart = 2.15
+class A {
+  int field;
+  A(this.field);
+}
+class B extends A {
+  B(super.field);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.expect
new file mode 100644
index 0000000..01b7cb5
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.field);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.field);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..01b7cb5
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.field);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.field);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.outline.expect
new file mode 100644
index 0000000..5ee0fad
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.outline.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.transformed.expect
new file mode 100644
index 0000000..01b7cb5
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/opt_out.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:5: Error: The 'super-parameters' language feature is disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.17 or higher.
+//   B(super.field);
+//     ^^^^^
+// pkg/front_end/testcases/super_parameters/opt_out.dart:5:1: Context: This is the annotation that opts out this library from the 'super-parameters' language feature.
+// // @dart=2.15
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.field);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/opt_out.dart:14:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.field);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart b/pkg/front_end/testcases/super_parameters/super_key/main.dart
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect
new file mode 100644
index 0000000..816dc6b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
new file mode 100644
index 0000000..76d37eb
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart b/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart
new file mode 100644
index 0000000..f6ee73d
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart
@@ -0,0 +1,7 @@
+class Key {}
+
+class StatefulWidget {
+  final Key? key;
+
+  const StatefulWidget({this.key});
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/test.options b/pkg/front_end/testcases/super_parameters/super_key/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart
new file mode 100644
index 0000000..929cace
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart
@@ -0,0 +1,20 @@
+// 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.
+
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+foo(super.x) {}
+
+class C {
+  void set foo(super.value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..a3a7ee1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+foo(super.x) {}
+
+class C {
+  void set foo(super.value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cac06dc
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+class C {
+  void set foo(super.value) {}
+}
+
+foo(super.x) {}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..c86aa1b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    ;
+  static factory foo(dynamic x) → self::B
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  set foo(dynamic value) → void
+    ;
+}
+static method foo(dynamic x) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart b/pkg/front_end/testcases/super_parameters/var_before_super.dart
new file mode 100644
index 0000000..fa8a129
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.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.
+
+class A {
+  A(String x);
+}
+
+class B extends A {
+  B(var super.x);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.expect
new file mode 100644
index 0000000..f804642
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/var_before_super.dart:10:5: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   B(var super.x);
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    : super self::A::•(x)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.transformed.expect
new file mode 100644
index 0000000..f804642
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.strong.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/var_before_super.dart:10:5: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   B(var super.x);
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    : super self::A::•(x)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.textual_outline.expect
new file mode 100644
index 0000000..6057c59
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class A {
+  A(String x);
+}
+class B extends A {
+  B(var super.x);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.expect
new file mode 100644
index 0000000..f804642
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/var_before_super.dart:10:5: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   B(var super.x);
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    : super self::A::•(x)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.modular.expect
new file mode 100644
index 0000000..f804642
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/var_before_super.dart:10:5: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   B(var super.x);
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    : super self::A::•(x)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.outline.expect
new file mode 100644
index 0000000..18e4945
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.transformed.expect
new file mode 100644
index 0000000..f804642
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/var_before_super.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/var_before_super.dart:10:5: Error: Can't have modifier 'var' here.
+// Try removing 'var'.
+//   B(var super.x);
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::String x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String x) → self::B
+    : super self::A::•(x)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 9a22f85..2a12a528 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -8,9 +8,11 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
-enhanced_enums/simple_mixins: RuntimeError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/named_arguments_anywhere/issue48276: TextSerializationFailure # Issue 47524.
 enhanced_enums/named_arguments_anywhere/redirecting_constructor: TextSerializationFailure # Issue 47524.
+enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -38,8 +40,8 @@
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError
 general/covariant_field: TypeCheckError
-general/covariant_generic: RuntimeError
 general/covariant_generic2: RuntimeError
+general/covariant_generic: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -81,8 +83,8 @@
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 6b47db9..fab8f81 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -28,7 +28,6 @@
 constructor_tearoffs/new_as_selector: FormatterCrash
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
-enhanced_enums/entries_with_type_arguments: FormatterCrash
 enhanced_enums/recovery_in_elements: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
@@ -59,12 +58,14 @@
 general/constants/non_const_constructor: FormatterCrash
 general/constants/number_folds: FormatterCrash
 general/constants/number_folds_opt_out: FormatterCrash
+general/constants/various2: FormatterCrash
 general/constants/various: FormatterCrash
 general/constructor_initializer_invalid: FormatterCrash
 general/covariant_generic2: FormatterCrash
 general/duplicated_declarations: FormatterCrash
 general/enum_super_constructor: FormatterCrash
 general/error_recovery/annotations: FormatterCrash
+general/error_recovery/class_header: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_general.crash: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_get.crash: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_return_type.crash: FormatterCrash
@@ -91,7 +92,6 @@
 general/issue43363: FormatterCrash
 general/issue45490: FormatterCrash
 general/issue45700.crash: FormatterCrash
-general/issue47495: FormatterCrash
 general/issue47728_2: FormatterCrash
 general/issue47728_3: FormatterCrash
 general/issue47922: FormatterCrash
@@ -99,12 +99,17 @@
 general/issue48487b: FormatterCrash
 general/issue_46886: FormatterCrash
 general/macro_class: FormatterCrash
+general/many_errors2: FormatterCrash
 general/many_errors: FormatterCrash
 general/missing_prefix_name: FormatterCrash
+general/mixin_inherited_setter_for_mixed_in_field2: FormatterCrash
 general/new_as_selector: FormatterCrash
 general/null_aware_super: FormatterCrash
 general/null_safety_invalid_experiment: FormatterCrash
 general/null_safety_invalid_experiment_and_language_version: FormatterCrash
+general/type_parameter_type_named_int: FormatterCrash
+general/type_parameter_usage_in_static_method_in_class: FormatterCrash
+general/type_parameter_usage_in_static_method_in_extension: FormatterCrash
 general/type_parameters_on_void: FormatterCrash
 general/type_variable_in_static_context: FormatterCrash
 general/var_as_type_name: FormatterCrash
@@ -149,6 +154,7 @@
 macros/class_members: FormatterCrash
 macros/inject_constructor: FormatterCrash
 macros/macro_class: FormatterCrash
+macros/multiple_imports: FormatterCrash
 nnbd/abstract_field_errors: FormatterCrash
 nnbd/covariant_late_field: FormatterCrash
 nnbd/duplicates_instance: FormatterCrash
@@ -211,6 +217,9 @@
 regress/issue_41265.crash: FormatterCrash
 super_parameters/issue47741: FormatterCrash
 super_parameters/issue47922: FormatterCrash
+super_parameters/issue48714: FormatterCrash
+super_parameters/opt_out: FormatterCrash
+super_parameters/var_before_super: FormatterCrash
 triple_shift/invalid_operator: FormatterCrash
 variance/class_type_parameter_modifier: FormatterCrash
 variance/generic_covariance_sound_variance: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 89d1295..e28929c 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -23,6 +23,8 @@
 
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
+enhanced_enums/declared_hashcode: TypeCheckError
+enhanced_enums/declared_index: TypeCheckError
 enhanced_enums/simple_mixins: RuntimeError
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
@@ -51,8 +53,8 @@
 general/cascade: RuntimeError
 general/constructor_initializer_invalid: RuntimeError # Fails execution after recovery
 general/covariant_field: TypeCheckError
-general/covariant_generic: RuntimeError
 general/covariant_generic2: RuntimeError
+general/covariant_generic: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -94,8 +96,8 @@
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
-general/infer_field_from_multiple: TypeCheckError
 general/infer_field_from_multiple2: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/invocations: TypeCheckError
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index c25a9d9..0b67866 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -466,8 +466,9 @@
       "test/extensions/data/",
       "test/id_testing/data/",
       "test/language_versioning/data/",
-      "test/macro_application/data/",
-      "test/macros/data/",
+      "test/macros/application/data/",
+      "test/macros/declaration/data/",
+      "test/macros/incremental/data/",
       "test/patching/data",
       "test/predicates/data",
       "test/static_types/data/",
diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
index e321747..7b29209 100644
--- a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
+++ b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
@@ -120,36 +120,185 @@
 
   sb.write('''
 
-enum ExperimentalFlag {
+/// An experiment flag including its fixed properties.
+class ExperimentalFlag {
+  /// The name of this flag as used in the --enable-experiment option.
+  final String name;
+
+  /// `true` if this experimental feature is enabled by default.
+  ///
+  /// When `true`, the feature can still be disabled in individual libraries
+  /// with a language version below the [experimentEnabledVersion], and if not
+  /// [isExpired], the feature can also be disabled by using a 'no-' prefix
+  /// in the --enable-experiment option.
+  final bool isEnabledByDefault;
+
+  /// `true` if this feature can no longer be changed using the
+  /// --enable-experiment option.
+  ///
+  /// Libraries can still opt out of the feature by using a language version
+  /// below the [experimentEnabledVersion].
+  final bool isExpired;
+  final Version enabledVersion;
+
+  /// The minimum version that supports this feature.
+  ///
+  /// If the feature is not enabled by default, this is the current language
+  /// version.
+  final Version experimentEnabledVersion;
+
+  /// The minimum version that supports this feature in allowed libraries.
+  ///
+  /// Allowed libraries are specified in
+  /// 
+  ///    sdk/lib/_internal/allowed_experiments.json
+  final Version experimentReleasedVersion;
+
+  const ExperimentalFlag(
+      {required this.name,
+      required this.isEnabledByDefault,
+      required this.isExpired,
+      required this.enabledVersion,
+      required this.experimentEnabledVersion,
+      required this.experimentReleasedVersion});
 ''');
   for (String key in keys) {
-    sb.writeln('  ${keyToIdentifier(key)},');
+    String identifier = keyToIdentifier(key);
+    int enabledInMajor;
+    int enabledInMinor;
+    String? enabledIn =
+        getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
+    if (enabledIn == null) {
+      enabledInMajor = currentVersionMajor;
+      enabledInMinor = currentVersionMinor;
+    } else {
+      List<String> split = enabledIn.split(".");
+      enabledInMajor = int.parse(split[0]);
+      enabledInMinor = int.parse(split[1]);
+    }
+    bool? expired = (features[key] as YamlMap)['expired'];
+    bool shipped = (features[key] as YamlMap)['enabledIn'] != null;
+    if (shipped) {
+      if (expired == false) {
+        throw 'Cannot mark shipped feature "$key" as "expired: false"';
+      }
+    }
+    int releaseMajor;
+    int releaseMinor;
+    String? experimentalReleaseVersion = getAsVersionNumberString(
+        (features[key] as YamlMap)['experimentalReleaseVersion']);
+    if (experimentalReleaseVersion != null) {
+      List<String> split = experimentalReleaseVersion.split(".");
+      releaseMajor = int.parse(split[0]);
+      releaseMinor = int.parse(split[1]);
+    } else if (enabledIn != null) {
+      List<String> split = enabledIn.split(".");
+      releaseMajor = int.parse(split[0]);
+      releaseMinor = int.parse(split[1]);
+    } else {
+      releaseMajor = currentVersionMajor;
+      releaseMinor = currentVersionMinor;
+    }
+
+    sb.writeln('''
+  static const ExperimentalFlag ${identifier} =
+    const ExperimentalFlag(
+      name: '$key',
+      isEnabledByDefault: $shipped,
+      isExpired: ${expired == true},
+      enabledVersion: const Version($enabledInMajor, $enabledInMinor),
+      experimentEnabledVersion: const Version($enabledInMajor, $enabledInMinor),
+      experimentReleasedVersion: const Version($releaseMajor, $releaseMinor));
+''');
+  }
+  sb.write('''
+}
+''');
+
+  sb.write('''
+/// Interface for accessing the global state of experimental features. 
+class GlobalFeatures {
+  final Map<ExperimentalFlag, bool> explicitExperimentalFlags;
+  final AllowedExperimentalFlags? allowedExperimentalFlags;
+  final Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting;
+  final Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting;
+  final Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting;
+
+  GlobalFeatures(this.explicitExperimentalFlags,
+      {this.allowedExperimentalFlags,
+      this.defaultExperimentFlagsForTesting,
+      this.experimentEnabledVersionForTesting,
+      this.experimentReleasedVersionForTesting});
+
+  GlobalFeature _computeGlobalFeature(ExperimentalFlag flag) {
+    return new GlobalFeature(
+        flag,
+        isExperimentEnabled(flag,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags));
+  }
+
+  LibraryFeature _computeLibraryFeature(
+      ExperimentalFlag flag, Uri canonicalUri, Version libraryVersion) {
+    return new LibraryFeature(
+        flag,
+        isExperimentEnabledInLibrary(flag, canonicalUri,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags),
+        getExperimentEnabledVersionInLibrary(
+            flag, canonicalUri, explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            experimentEnabledVersionForTesting:
+                experimentEnabledVersionForTesting,
+            experimentReleasedVersionForTesting:
+                experimentReleasedVersionForTesting),
+        isExperimentEnabledInLibraryByVersion(
+            flag, canonicalUri, libraryVersion,
+            defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
+            explicitExperimentalFlags: explicitExperimentalFlags,
+            allowedExperimentalFlags: allowedExperimentalFlags));
+  }
+''');
+  for (String key in keys) {
+    String identifier = keyToIdentifier(key);
+    sb.write('''
+
+  GlobalFeature? _${identifier};
+  GlobalFeature get ${identifier} =>
+      _${identifier} ??= _computeGlobalFeature(ExperimentalFlag.${identifier});    
+''');
   }
   sb.write('''
 }
 
+/// Interface for accessing the state of experimental features within a
+/// specific library.
+class LibraryFeatures {
+  final GlobalFeatures globalFeatures;
+  final Uri canonicalUri;
+  final Version libraryVersion;
+
+  LibraryFeatures(this.globalFeatures, this.canonicalUri, this.libraryVersion);
+''');
+  for (String key in keys) {
+    String identifier = keyToIdentifier(key);
+    sb.write('''
+
+  LibraryFeature? _${identifier};
+  LibraryFeature get ${identifier} => _${identifier} ??= globalFeatures
+      ._computeLibraryFeature(
+          ExperimentalFlag.${identifier},
+          canonicalUri,
+          libraryVersion);
+''');
+  }
+  sb.write('''
+}
 ''');
 
-  for (String key in keys) {
-    int major;
-    int minor;
-    String? enabledIn =
-        getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
-    if (enabledIn == null) {
-      major = currentVersionMajor;
-      minor = currentVersionMinor;
-    } else {
-      List<String> split = enabledIn.split(".");
-      major = int.parse(split[0]);
-      minor = int.parse(split[1]);
-    }
-    sb.writeln('  const Version enable'
-        '${keyToIdentifier(key, upperCaseFirst: true)}'
-        'Version = const Version($major, $minor);');
-  }
-
   sb.write('''
-
 ExperimentalFlag? parseExperimentalFlag(String flag) {
   switch (flag) {
 ''');
@@ -161,78 +310,15 @@
   return null;
 }
 
-const Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
+final Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
 ''');
   for (String key in keys) {
-    bool? expired = (features[key] as YamlMap)['expired'];
-    bool shipped = (features[key] as YamlMap)['enabledIn'] != null;
-    sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: ${shipped},');
-    if (shipped) {
-      if (expired == false) {
-        throw 'Cannot mark shipped feature "$key" as "expired: false"';
-      }
-    }
+    sb.writeln('''
+  ExperimentalFlag.${keyToIdentifier(key)}:
+      ExperimentalFlag.${keyToIdentifier(key)}.isEnabledByDefault,''');
   }
   sb.write('''
 };
-
-const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
-''');
-  for (String key in keys) {
-    bool expired = (features[key] as YamlMap)['expired'] == true;
-    sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: ${expired},');
-  }
-  sb.write('''
-};
-
-const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
-''');
-  for (String key in keys) {
-    int major;
-    int minor;
-    String? enabledIn =
-        getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
-    if (enabledIn != null) {
-      List<String> split = enabledIn.split(".");
-      major = int.parse(split[0]);
-      minor = int.parse(split[1]);
-    } else {
-      major = currentVersionMajor;
-      minor = currentVersionMinor;
-    }
-    sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: '
-        'const Version($major, $minor),');
-  }
-  sb.write('''
-};
-
-const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
-''');
-  for (String key in keys) {
-    int major;
-    int minor;
-    String? enabledIn =
-        getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
-    String? experimentalReleaseVersion = getAsVersionNumberString(
-        (features[key] as YamlMap)['experimentalReleaseVersion']);
-    if (experimentalReleaseVersion != null) {
-      List<String> split = experimentalReleaseVersion.split(".");
-      major = int.parse(split[0]);
-      minor = int.parse(split[1]);
-    } else if (enabledIn != null) {
-      List<String> split = enabledIn.split(".");
-      major = int.parse(split[0]);
-      minor = int.parse(split[1]);
-    } else {
-      major = currentVersionMajor;
-      minor = currentVersionMinor;
-    }
-    sb.writeln('  ExperimentalFlag.${keyToIdentifier(key)}: '
-        'const Version($major, $minor),');
-  }
-  sb.write('''
-};
-
 ''');
 
   Uri allowListFile = computeAllowListFile(repoDir);
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 834aa12..9979dcb 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -128,9 +128,6 @@
   },
   'Typedef': {
     'typeParameters': FieldRule(isDeclaration: true),
-    'typeParametersOfFunctionType': FieldRule(isDeclaration: false),
-    'positionalParameters': FieldRule(isDeclaration: false),
-    'namedParameters': FieldRule(isDeclaration: false),
   },
   'TypedefTearOff': {
     'typeParameters': FieldRule(isDeclaration: true),
@@ -177,6 +174,7 @@
   },
   'FunctionType': {
     'typeParameters': FieldRule(isDeclaration: true),
+    '_typedefType': FieldRule(name: 'typedefType'),
   },
   'TypeParameterType': {
     'parameter': FieldRule(isDeclaration: false),
diff --git a/pkg/front_end/tool/fasta.dart b/pkg/front_end/tool/fasta.dart
index 14f8503..20ed126 100644
--- a/pkg/front_end/tool/fasta.dart
+++ b/pkg/front_end/tool/fasta.dart
@@ -4,7 +4,19 @@
 
 import 'dart:io';
 
+import "package:testing/src/run_tests.dart" as run_tests;
+import 'package:kernel/src/tool/dump.dart' as dump;
 import '../test/utils/io_utils.dart' show computeRepoDir;
+import '_fasta/abcompile.dart' as abcompile;
+import '_fasta/compile.dart' as compile;
+import '_fasta/compile_platform.dart' as compile_platform;
+import '_fasta/generate_experimental_flags.dart' as generate_experimental_flags;
+import '_fasta/generate_messages.dart' as generate_messages;
+import '_fasta/log_analyzer.dart' as log_analyzer;
+import '_fasta/log_collector.dart' as log_collector;
+import '_fasta/outline.dart' as outline;
+import '_fasta/parser.dart' as parser;
+import '_fasta/scanner.dart' as scanner;
 
 final String repoDir = computeRepoDir();
 
@@ -35,65 +47,98 @@
   String command = args[index++];
   List<String> remainingArguments = args.skip(index).toList();
 
+  dynamic Function(List<String>) mainFunction;
+
   switch (command) {
     case 'abcompile':
+      mainFunction = abcompile.main;
       script = '${toolDir}/abcompile.dart';
       break;
     case 'compile':
+      mainFunction = compile.main;
       script = '${toolDir}/compile.dart';
       break;
     case 'compile-platform':
+      mainFunction = compile_platform.main;
       script = '${toolDir}/compile_platform.dart';
       break;
     case 'log':
+      mainFunction = log_analyzer.main;
       script = '${toolDir}/log_analyzer.dart';
       break;
     case 'logd':
+      mainFunction = log_collector.main;
       script = '${toolDir}/log_collector.dart';
       break;
     case 'outline':
+      mainFunction = outline.main;
       script = '${toolDir}/outline.dart';
       break;
     case 'parser':
+      mainFunction = parser.main;
       script = '${toolDir}/parser.dart';
       break;
     case 'scanner':
+      mainFunction = scanner.main;
       script = '${toolDir}/scanner.dart';
       break;
     case 'dump-ir':
+      mainFunction = dump.main;
       script = '${kernelBin}/dump.dart';
       if (remainingArguments.isEmpty || remainingArguments.length > 2) {
         stop("Usage: $command dillFile [output]");
       }
       break;
     case 'testing':
+      mainFunction = run_tests.main;
       script = '${repoDir}/pkg/testing/bin/testing.dart';
       scriptArguments.add('--config=${repoDir}/pkg/front_end/testing.json');
       break;
     case 'generate-messages':
+      mainFunction = generate_messages.main;
       script = '${toolDir}/generate_messages.dart';
       break;
     case 'generate-experimental-flags':
+      mainFunction = generate_experimental_flags.main;
       script = '${toolDir}/generate_experimental_flags.dart';
       break;
     default:
       stop("'$command' isn't a valid subcommand.");
   }
 
-  List<String> arguments = [];
-  arguments.addAll(extraVmArguments);
-  arguments.add('--enable-asserts');
-  arguments.add(script);
-  arguments.addAll(remainingArguments);
-  arguments.addAll(scriptArguments);
+  if (extraVmArguments.isNotEmpty || !assertsEnabled) {
+    List<String> arguments = [];
+    arguments.addAll(extraVmArguments);
+    arguments.add('--enable-asserts');
+    arguments.add(script);
+    arguments.addAll(remainingArguments);
+    arguments.addAll(scriptArguments);
 
-  print('Running: ${dartVm} ${arguments.join(' ')}');
-  Process process = await Process.start(dartVm, arguments,
-      mode: ProcessStartMode.inheritStdio);
-  exitCode = await process.exitCode;
+    print('Running: ${dartVm} ${arguments.join(' ')}');
+    Process process = await Process.start(dartVm, arguments,
+        mode: ProcessStartMode.inheritStdio);
+    exitCode = await process.exitCode;
+  } else {
+    // Run within the same VM if no VM arguments are provided.
+    List<String> arguments = [];
+    arguments.addAll(remainingArguments);
+    arguments.addAll(scriptArguments);
+
+    print('Calling: ${script} ${arguments.join(' ')}');
+    await mainFunction(arguments);
+  }
 }
 
 Never stop(String message) {
   stderr.write(message);
   exit(2);
 }
+
+final bool assertsEnabled = () {
+  try {
+    assert(false);
+    return false;
+  } catch (_) {
+    return true;
+  }
+}();
diff --git a/pkg/frontend_server/bin/frontend_server_starter.dart b/pkg/frontend_server/bin/frontend_server_starter.dart
index 2113752..82b6fb8 100644
--- a/pkg/frontend_server/bin/frontend_server_starter.dart
+++ b/pkg/frontend_server/bin/frontend_server_starter.dart
@@ -1,3 +1,4 @@
+// @dart = 2.9
 library frontend_server;
 
 import 'dart:async';
diff --git a/pkg/frontend_server/lib/compute_kernel.dart b/pkg/frontend_server/lib/compute_kernel.dart
index e9aac60..e51cafc 100644
--- a/pkg/frontend_server/lib/compute_kernel.dart
+++ b/pkg/frontend_server/lib/compute_kernel.dart
@@ -7,16 +7,22 @@
 /// A library to invoke the CFE to compute kernel summary files.
 ///
 /// Used by `utils/bazel/kernel_worker.dart`.
-
 import 'dart:async';
 import 'dart:io';
 
+import 'package:_fe_analyzer_shared/src/macros/executor/isolated_executor.dart'
+    as isolatedExecutor;
+import 'package:_fe_analyzer_shared/src/macros/executor/process_executor.dart'
+    as processExecutor;
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart'
+    show SerializationMode;
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
 import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
 import 'package:front_end/src/api_unstable/bazel_worker.dart' as fe;
+import 'package:front_end/src/fasta/kernel/macro/macro.dart';
 import 'package:kernel/ast.dart' show Component, Library, Reference;
 import 'package:kernel/target/targets.dart';
 import 'package:vm/target/flutter.dart';
@@ -94,7 +100,22 @@
       help: 'Sets the verbosity level used for filtering messages during '
           'compilation.',
       allowed: fe.Verbosity.allowedValues,
-      allowedHelp: fe.Verbosity.allowedValuesHelp);
+      allowedHelp: fe.Verbosity.allowedValuesHelp)
+  ..addMultiOption('precompiled-macro',
+      help: 'Configuration for precompiled macro binaries or kernel files.\n'
+          'Must be used in combination with --precompiled-macro-format.\n'
+          'The expected format of this option is as follows: '
+          '<macro-library-uri>;<absolute-path-to-binary>\nFor example: '
+          '--precompiled-macro="package:some_macro/some_macro.dart;'
+          '/path/to/compiled/macro"')
+  ..addOption('precompiled-macro-format',
+      help: 'The format for precompiled macros.',
+      allowed: ['aot', 'kernel'],
+      defaultsTo: 'aot')
+  ..addOption('macro-serialization-mode',
+      help: 'The serialization mode for communicating with macros.',
+      allowed: ['bytedata', 'json'],
+      defaultsTo: 'bytedata');
 
 class ComputeKernelResult {
   final bool succeeded;
@@ -273,6 +294,50 @@
         nnbdMode: nnbdMode);
   }
 
+  // Either set up or reset the state for macros based on experiment status.
+  // TODO: Make this a part of `initializeCompiler`, if/when we want to make it
+  // more widely supported.
+  if (state.processedOpts.globalFeatures.macros.isEnabled) {
+    enableMacros = true;
+    forceEnableMacros = true;
+
+    SerializationMode serializationMode;
+    switch (parsedArgs['macro-serialization-mode']) {
+      case 'json':
+        serializationMode = SerializationMode.jsonServer;
+        break;
+      case 'bytedata':
+        serializationMode = SerializationMode.byteDataServer;
+        break;
+      default:
+        throw ArgumentError('Unrecognized macro serialization mode '
+            '${parsedArgs['macro-serialization-mode']}');
+    }
+
+    var format = parsedArgs['precompiled-macro-format'];
+    switch (format) {
+      case 'kernel':
+        state.options.macroExecutorProvider =
+            () => isolatedExecutor.start(serializationMode);
+        break;
+      case 'aot':
+        state.options.macroExecutorProvider = () => processExecutor.start(
+            serializationMode, processExecutor.CommunicationChannel.socket);
+        break;
+      default:
+        throw ArgumentError('Unrecognized precompiled macro format $format');
+    }
+    var precompiledMacroUris = state.options.precompiledMacroUris = {};
+    for (var parts in (parsedArgs['precompiled-macro'] as List<String>)
+        .map((arg) => arg.split(';'))) {
+      precompiledMacroUris[Uri.parse(parts[0])] = toUri(parts[1]);
+    }
+  } else {
+    enableMacros = false;
+    forceEnableMacros = false;
+    state.options.precompiledMacroUris = {};
+  }
+
   void onDiagnostic(fe.DiagnosticMessage message) {
     if (fe.Verbosity.shouldPrint(verbosity, message)) {
       fe.printDiagnosticMessage(message, out.writeln);
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index bcfd799..2a303b8 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
 library frontend_server;
 
 import 'dart:async';
@@ -520,7 +521,7 @@
     }
 
     if (nullSafety == null &&
-        compilerOptions.isExperimentEnabled(ExperimentalFlag.nonNullable)) {
+        compilerOptions.globalFeatures.nonNullable.isEnabled) {
       await autoDetectNullSafetyMode(_mainSource, compilerOptions);
     }
 
diff --git a/pkg/frontend_server/lib/src/javascript_bundle.dart b/pkg/frontend_server/lib/src/javascript_bundle.dart
index d39ee75..00ddccb 100644
--- a/pkg/frontend_server/lib/src/javascript_bundle.dart
+++ b/pkg/frontend_server/lib/src/javascript_bundle.dart
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
 import 'dart:convert';
 import 'dart:io';
 
diff --git a/pkg/frontend_server/lib/src/strong_components.dart b/pkg/frontend_server/lib/src/strong_components.dart
index 4c010a8..0711f2d 100644
--- a/pkg/frontend_server/lib/src/strong_components.dart
+++ b/pkg/frontend_server/lib/src/strong_components.dart
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
 import 'package:kernel/ast.dart';
 import 'package:kernel/util/graph.dart';
 
diff --git a/pkg/frontend_server/pubspec.yaml b/pkg/frontend_server/pubspec.yaml
index a3c97a6..62f7446 100644
--- a/pkg/frontend_server/pubspec.yaml
+++ b/pkg/frontend_server/pubspec.yaml
@@ -4,10 +4,12 @@
 publish_to: none
 
 environment:
-  sdk: "^2.7.0"
+  sdk: "^2.15.0"
 
 dependencies:
   args: ^2.0.0
+  _fe_analyzer_shared:
+    path: ../_fe_analyzer_shared
   build_integration:
     path: ../build_integration
   compiler:
diff --git a/pkg/frontend_server/test/frontend_server_flutter.dart b/pkg/frontend_server/test/frontend_server_flutter.dart
index 78c9a7b..e0132b3 100644
--- a/pkg/frontend_server/test/frontend_server_flutter.dart
+++ b/pkg/frontend_server/test/frontend_server_flutter.dart
@@ -1,3 +1,4 @@
+// @dart = 2.9
 import 'dart:async' show StreamController;
 import 'dart:convert' show utf8, LineSplitter;
 import 'dart:io' show Directory, File, FileSystemEntity, IOSink, exitCode;
diff --git a/pkg/frontend_server/test/frontend_server_flutter_suite.dart b/pkg/frontend_server/test/frontend_server_flutter_suite.dart
index 36ae561..0a6b249 100644
--- a/pkg/frontend_server/test/frontend_server_flutter_suite.dart
+++ b/pkg/frontend_server/test/frontend_server_flutter_suite.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
+// @dart = 2.9
 import 'dart:async' show StreamSubscription, Timer;
 import 'dart:convert' show jsonEncode;
 import 'dart:io' show File, exitCode;
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 1d7e607..d34b067 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -1,3 +1,4 @@
+// @dart = 2.9
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/pkg/frontend_server/test/src/javascript_bundle_test.dart b/pkg/frontend_server/test/src/javascript_bundle_test.dart
index 69a7156..488e986 100644
--- a/pkg/frontend_server/test/src/javascript_bundle_test.dart
+++ b/pkg/frontend_server/test/src/javascript_bundle_test.dart
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
 import 'dart:convert';
 import 'dart:io';
 
diff --git a/pkg/frontend_server/test/src/strong_components_test.dart b/pkg/frontend_server/test/src/strong_components_test.dart
index 9bb6596..2281e82 100644
--- a/pkg/frontend_server/test/src/strong_components_test.dart
+++ b/pkg/frontend_server/test/src/strong_components_test.dart
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// @dart = 2.9
 import 'package:frontend_server/src/strong_components.dart';
 import 'package:kernel/ast.dart';
 import 'package:test/test.dart';
diff --git a/pkg/js_ast/analysis_options.yaml b/pkg/js_ast/analysis_options.yaml
new file mode 100644
index 0000000..a1888bc
--- /dev/null
+++ b/pkg/js_ast/analysis_options.yaml
@@ -0,0 +1,16 @@
+# 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.
+
+analyzer:
+  errors:
+    todo: ignore
+    # Allow deprecated calls from within the same package
+    deprecated_member_use_from_same_package: ignore
+
+linter:
+  rules:
+    - annotate_overrides
+    - prefer_final_fields
+    - prefer_if_null_operators
+    - prefer_null_aware_operators
diff --git a/pkg/js_ast/lib/js_ast.dart b/pkg/js_ast/lib/js_ast.dart
index 1958f19..8f75c74 100644
--- a/pkg/js_ast/lib/js_ast.dart
+++ b/pkg/js_ast/lib/js_ast.dart
@@ -2,14 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.10
+
 library js_ast;
 
-import 'src/precedence.dart';
-import 'src/characters.dart' as charCodes;
-import 'src/strings.dart';
-
-part 'src/nodes.dart';
-part 'src/builder.dart';
-part 'src/printer.dart';
-part 'src/template.dart';
-part 'src/equivalence_visitor.dart';
+export 'src/nodes.dart';
+export 'src/builder.dart';
+export 'src/printer.dart';
+export 'src/template.dart';
+export 'src/equivalence_visitor.dart';
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index 83bb11f..cd92fab 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -2,21 +2,28 @@
 // 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.
 
-// Utilities for building JS ASTs at runtime.  Contains a builder class
-// and a parser that parses part of the language.
+// @dart=2.15
 
-part of js_ast;
+/// Utilities for building JS ASTs at runtime. Contains a builder class and a
+/// parser that parses part of the language.
+library js_ast.builder;
 
-/// Global template manager.  We should aim to have a fixed number of
-/// templates. This implies that we do not use js('xxx') to parse text that is
-/// constructed from values that depend on names in the Dart program.
+import 'characters.dart' as charCodes;
+import 'nodes.dart';
+import 'template.dart';
+
+/// Global template manager.
 ///
-/// TODO(sra): Find the remaining places where js('xxx') used to parse an
-/// unbounded number of expression, or institute a cache policy.
+/// We should aim to have a fixed number of templates. This implies that we do
+/// not use js('xxx') to parse text that is constructed from values that depend
+/// on names in the Dart program.
+// TODO(sra): Find the remaining places where js('xxx') used to parse an
+// unbounded number of expression, or institute a cache policy.
 TemplateManager templateManager = TemplateManager();
 
-/// [js] is a singleton instance of JsBuilder.  JsBuilder is a set of
-/// conveniences for constructing JavaScript ASTs.
+/// [js] is a singleton instance of JsBuilder.
+///
+/// JsBuilder is a set of conveniences for constructing JavaScript ASTs.
 ///
 /// [string] and [number] are used to create leaf AST nodes:
 ///
@@ -33,7 +40,7 @@
 ///     js('window.alert("hello")')  -->  window.alert("hello")
 ///
 /// The input text can contain placeholders `#` that are replaced with provided
-/// arguments.  A single argument can be passed directly:
+/// arguments. A single argument can be passed directly:
 ///
 ///     js('window.alert(#)', s)   -->  window.alert("hello")
 ///
@@ -42,7 +49,7 @@
 ///     js('# + #', [s, s])  -->  "hello" + "hello"
 ///
 /// The [statement] method constructs a Statement AST, but is otherwise like the
-/// [call] method.  This constructs a Return AST:
+/// [call] method. This constructs a Return AST:
 ///
 ///     var ret = js.statement('return #;', n);  -->  return 123;
 ///
@@ -56,7 +63,7 @@
 ///       return 123;
 ///
 /// If the placeholder is not followed by a semicolon, it is part of an
-/// expression.  Here the placeholder is in the position of the function in a
+/// expression. Here the placeholder is in the position of the function in a
 /// function call:
 ///
 ///     var vFoo = new VariableUse('foo');
@@ -67,18 +74,18 @@
 ///
 /// Generally, a placeholder in an expression position requires an Expression
 /// AST as an argument and a placeholder in a statement position requires a
-/// Statement AST.  An expression will be converted to a Statement if needed by
-/// creating an ExpressionStatement.  A String argument will be converted into a
+/// Statement AST. An expression will be converted to a Statement if needed by
+/// creating an ExpressionStatement. A String argument will be converted into a
 /// VariableUse and requires that the string is a JavaScript identifier.
 ///
 ///     js('# + 1', vFoo)       -->  foo + 1
 ///     js('# + 1', 'foo')      -->  foo + 1
 ///     js('# + 1', 'foo.bar')  -->  assertion failure
 ///
-/// Some placeholder positions are _splicing contexts_.  A function argument list is
-/// a splicing expression context.  A placeholder in a splicing expression context
-/// can take a single Expression (or String, converted to VariableUse) or an
-/// Iterable of Expressions (and/or Strings).
+/// Some placeholder positions are _splicing contexts_. A function argument list
+/// is a splicing expression context. A placeholder in a splicing expression
+/// context can take a single Expression (or String, converted to VariableUse)
+/// or an Iterable of Expressions (and/or Strings).
 ///
 ///     // non-splicing argument:
 ///     js('#(#)', ['say', s])        -->  say("hello")
@@ -94,14 +101,14 @@
 ///     js('foo(#, #, 1)', [ [], [s, n]])        -->  foo("hello", 123, 1)
 ///     js('foo(#, #, 1)', [ [], [] ])           -->  foo(1)
 ///
-/// The generation of a compile-time optional argument expression can be chosen by
-/// providing an empty or singleton list.
+/// The generation of a compile-time optional argument expression can be chosen
+/// by providing an empty or singleton list.
 ///
 /// In addition to Expressions and Statements, there are Parameters, which occur
 /// only in the parameter list of a function expression or declaration.
 /// Placeholders in parameter positions behave like placeholders in Expression
-/// positions, except only Parameter AST nodes are permitted.  String arguments for
-/// parameter placeholders are converted to Parameter AST nodes.
+/// positions, except only Parameter AST nodes are permitted. String arguments
+/// for parameter placeholders are converted to Parameter AST nodes.
 ///
 ///     var pFoo = new Parameter('foo')
 ///     js('function(#) { return #; }', [pFoo, vFoo])
@@ -113,7 +120,7 @@
 ///     js('function(#) { return #; }', [vFoo, vFoo]) --> error
 ///     js('function(#) { return #; }', [pFoo, pFoo]) --> error
 ///
-/// The parameter context is a splicing context.  When combined with the
+/// The parameter context is a splicing context. When combined with the
 /// context-sensitive conversion of Strings, this simplifies the construction of
 /// trampoline-like functions:
 ///
@@ -122,10 +129,10 @@
 ///     -->
 ///     function(a, b) { return f(this, a, b); }
 ///
-/// A statement placeholder in a Block is also in a splicing context.  In addition
-/// to splicing Iterables, statement placeholders in a Block will also splice a
-/// Block or an EmptyStatement.  This flattens nested blocks and allows blocks to be
-/// appended.
+/// A statement placeholder in a Block is also in a splicing context. In
+/// addition to splicing Iterables, statement placeholders in a Block will also
+/// splice a Block or an EmptyStatement. This flattens nested blocks and allows
+/// blocks to be appended.
 ///
 ///     var b1 = js.statement('{ 1; 2; }');
 ///     var sEmpty = new Emptystatement();
@@ -133,8 +140,9 @@
 ///     -->
 ///     { 1; 2; 1; 2; }
 ///
-/// A placeholder in the context of an if-statement condition also accepts a Dart
-/// bool argument, which selects the then-part or else-part of the if-statement:
+/// A placeholder in the context of an if-statement condition also accepts a
+/// Dart bool argument, which selects the then-part or else-part of the
+/// if-statement:
 ///
 ///     js.statement('if (#) return;', vFoo)   -->  if (foo) return;
 ///     js.statement('if (#) return;', true)   -->  return;
@@ -142,8 +150,8 @@
 ///     var eTrue = new LiteralBool(true);
 ///     js.statement('if (#) return;', eTrue)  -->  if (true) return;
 ///
-/// Combined with block splicing, if-statement condition context placeholders allows
-/// the creation of templates that select code depending on variables.
+/// Combined with block splicing, if-statement condition context placeholders
+/// allows the creation of templates that select code depending on variables.
 ///
 ///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', true)
 ///     --> { 1; 2; 5; }
@@ -151,10 +159,10 @@
 ///     js.statement('{ 1; if (#) 2; else { 3; 4; } 5;}', false)
 ///     --> { 1; 3; 4; 5; }
 ///
-/// A placeholder following a period in a property access is in a property access
-/// context.  This is just like an expression context, except String arguments are
-/// converted to JavaScript property accesses.  In JavaScript, `a.b` is short-hand
-/// for `a["b"]`:
+/// A placeholder following a period in a property access is in a property
+/// access context. This is just like an expression context, except String
+/// arguments are converted to JavaScript property accesses. In JavaScript,
+/// `a.b` is short-hand for `a["b"]`:
 ///
 ///     js('a[#]', vFoo)  -->  a[foo]
 ///     js('a[#]', s)     -->  a.hello    (i.e. a["hello"]).
@@ -175,10 +183,9 @@
 ///
 /// What is not implemented:
 ///
-///  -  Array initializers and object initializers could support splicing.  In the
-///     array case, we would need some way to know if an ArrayInitializer argument
-///     should be splice or is intended as a single value.
-///
+///  -  Array initializers and object initializers could support splicing. In
+///     the array case, we would need some way to know if an ArrayInitializer
+///     argument should be splice or is intended as a single value.
 const JsBuilder js = JsBuilder();
 
 class JsBuilder {
@@ -188,24 +195,24 @@
   ///
   /// See the MiniJsParser class.
   ///
-  /// [arguments] can be a single [Node] (e.g. an [Expression] or [Statement]) or
-  /// a list of [Node]s, which will be interpolated into the source at the '#'
-  /// signs.
+  /// [arguments] can be a single [Node] (e.g. an [Expression] or [Statement])
+  /// or a list of [Node]s, which will be interpolated into the source at the
+  /// '#' signs.
   Expression call(String source, [var arguments]) {
     Template template = _findExpressionTemplate(source);
-    if (arguments == null) return template.instantiate([]);
+    arguments ??= [];
     // We allow a single argument to be given directly.
     if (arguments is! List && arguments is! Map) arguments = [arguments];
-    return template.instantiate(arguments);
+    return template.instantiate(arguments) as Expression;
   }
 
   /// Parses a JavaScript Statement, otherwise just like [call].
   Statement statement(String source, [var arguments]) {
     Template template = _findStatementTemplate(source);
-    if (arguments == null) return template.instantiate([]);
+    arguments ??= [];
     // We allow a single argument to be given directly.
     if (arguments is! List && arguments is! Map) arguments = [arguments];
-    return template.instantiate(arguments);
+    return template.instantiate(arguments) as Statement;
   }
 
   /// Parses JavaScript written in the `JS` foreign instruction.
@@ -224,7 +231,7 @@
   }
 
   Template _findExpressionTemplate(String source) {
-    Template template = templateManager.lookupExpressionTemplate(source);
+    Template? template = templateManager.lookupExpressionTemplate(source);
     if (template == null) {
       MiniJsParser parser = MiniJsParser(source);
       Expression expression = parser.expression();
@@ -234,7 +241,7 @@
   }
 
   Template _findStatementTemplate(String source) {
-    Template template = templateManager.lookupStatementTemplate(source);
+    Template? template = templateManager.lookupStatementTemplate(source);
     if (template == null) {
       MiniJsParser parser = MiniJsParser(source);
       Statement statement = parser.statement();
@@ -264,14 +271,14 @@
     return Template(source, statement, isExpression: false, forceCopy: false);
   }
 
-  /// Create an Expression template which has [ast] as the result.  This is used
+  /// Create an Expression template which has [ast] as the result. This is used
   /// to wrap a generated AST in a zero-argument Template so it can be passed to
   /// context that expects a template.
-  Template expressionTemplateYielding(Node ast) {
+  Template expressionTemplateYielding(Expression ast) {
     return Template.withExpressionResult(ast);
   }
 
-  Template statementTemplateYielding(Node ast) {
+  Template statementTemplateYielding(Statement ast) {
     return Template.withStatementResult(ast);
   }
 
@@ -356,6 +363,7 @@
   final MiniJsParser parser;
   final String message;
 
+  @override
   String toString() {
     int pos = parser.lastPosition;
 
@@ -378,7 +386,7 @@
 }
 
 /// Mini JavaScript parser for tiny snippets of code that we want to make into
-/// AST nodes.  Handles:
+/// AST nodes. Handles:
 /// * identifiers.
 /// * dot access.
 /// * method calls.
@@ -397,20 +405,16 @@
 /// Literal strings are passed through to the final JS source code unchanged,
 /// including the choice of surrounding quotes, so if you parse
 /// r'var x = "foo\n\"bar\""' you will end up with
-///   var x = "foo\n\"bar\"" in the final program.  \x and \u escapes are not
+///   var x = "foo\n\"bar\"" in the final program. \x and \u escapes are not
 /// allowed in string and regexp literals because the machinery for checking
 /// their correctness is rather involved.
 class MiniJsParser {
-  MiniJsParser(this.src)
-      : lastCategory = NONE,
-        lastToken = null,
-        lastPosition = 0,
-        position = 0 {
+  MiniJsParser(this.src) {
     getToken();
   }
 
   int lastCategory = NONE;
-  String lastToken = null;
+  String lastToken = '';
   int lastPosition = 0;
   int position = 0;
   bool skippedNewline = false; // skipped newline in last getToken?
@@ -676,7 +680,7 @@
 
     if (position == src.length) {
       lastCategory = NONE;
-      lastToken = null;
+      lastToken = '';
       lastPosition = position;
       return;
     }
@@ -737,7 +741,7 @@
         if (lastToken == '=>') {
           lastCategory = ARROW;
         } else {
-          int binaryPrecedence = BINARY_PRECEDENCE[lastToken];
+          int? binaryPrecedence = BINARY_PRECEDENCE[lastToken];
           if (binaryPrecedence == null &&
               !UNARY_OPERATORS.contains(lastToken)) {
             error("Unknown operator");
@@ -789,7 +793,7 @@
     return false;
   }
 
-  void error(message) {
+  Never error(message) {
     throw MiniJsParserError(this, message);
   }
 
@@ -848,7 +852,7 @@
         expectCategory(COMMA);
       }
       return ArrayInitializer(values);
-    } else if (last != null && last.startsWith("/")) {
+    } else if (last.startsWith("/")) {
       String regexp = getRegExp(lastPosition);
       getToken();
       String flags = lastToken;
@@ -863,7 +867,6 @@
       return expression;
     } else {
       error("Expected primary expression");
-      return null;
     }
   }
 
@@ -875,7 +878,7 @@
     return parseFun();
   }
 
-  Expression parseFun() {
+  Fun parseFun() {
     List<Parameter> params = [];
     expectCategory(LPAREN);
     if (!acceptCategory(RPAREN)) {
@@ -949,7 +952,7 @@
       Expression value = parseAssignment();
       return Property(propertyName, value);
     } else {
-      Expression fun = parseFun();
+      final fun = parseFun();
       return MethodDefinition(propertyName, fun);
     }
   }
@@ -1064,27 +1067,29 @@
 
   Expression parseBinary(int maxPrecedence) {
     Expression lhs = parseUnaryLow();
-    int minPrecedence;
-    String lastSymbol;
-    Expression rhs; // This is null first time around.
+    Expression? rhs; // This is null first time around.
+    late int minPrecedence;
+    late String lastSymbol;
+
     while (true) {
-      String symbol = lastToken;
-      if (lastCategory != SYMBOL ||
-          !BINARY_PRECEDENCE.containsKey(symbol) ||
-          BINARY_PRECEDENCE[symbol] > maxPrecedence) {
-        break;
-      }
+      final symbol = lastToken;
+      if (lastCategory != SYMBOL) break;
+      final symbolPrecedence = BINARY_PRECEDENCE[symbol];
+      if (symbolPrecedence == null) break;
+      if (symbolPrecedence > maxPrecedence) break;
+
       expectCategory(SYMBOL);
-      if (rhs == null || BINARY_PRECEDENCE[symbol] >= minPrecedence) {
+      if (rhs == null || symbolPrecedence >= minPrecedence) {
         if (rhs != null) lhs = Binary(lastSymbol, lhs, rhs);
-        minPrecedence = BINARY_PRECEDENCE[symbol];
+        minPrecedence = symbolPrecedence;
         rhs = parseUnaryLow();
         lastSymbol = symbol;
       } else {
-        Expression higher = parseBinary(BINARY_PRECEDENCE[symbol]);
+        Expression higher = parseBinary(symbolPrecedence);
         rhs = Binary(symbol, rhs, higher);
       }
     }
+
     if (rhs == null) return lhs;
     return Binary(lastSymbol, lhs, rhs);
   }
@@ -1171,7 +1176,7 @@
     var initialization = <VariableInitialization>[];
 
     void declare(Declaration declaration) {
-      Expression initializer = null;
+      Expression? initializer = null;
       if (acceptString("=")) {
         initializer = parseAssignment();
       }
@@ -1316,7 +1321,7 @@
     return Throw(expression);
   }
 
-  Statement parseBreakOrContinue(constructor) {
+  Statement parseBreakOrContinue(Statement Function(String?) constructor) {
     var identifier = lastToken;
     if (!skippedNewline && acceptCategory(ALPHA)) {
       expectSemicolon();
@@ -1347,13 +1352,13 @@
     //
     //     for (var variable in Expression) Statement
     //
-    Statement finishFor(Expression init) {
-      Expression condition = null;
+    Statement finishFor(Expression? init) {
+      Expression? condition = null;
       if (!acceptCategory(SEMICOLON)) {
         condition = parseExpression();
         expectCategory(SEMICOLON);
       }
-      Expression update = null;
+      Expression? update = null;
       if (!acceptCategory(RPAREN)) {
         update = parseExpression();
         expectCategory(RPAREN);
@@ -1405,16 +1410,16 @@
 
   Statement parseFunctionDeclaration() {
     Declaration name = parseVariableDeclaration();
-    Expression fun = parseFun();
+    Fun fun = parseFun();
     return FunctionDeclaration(name, fun);
   }
 
   Statement parseTry() {
     expectCategory(LBRACE);
     Block body = parseBlock();
-    Catch catchPart = null;
+    Catch? catchPart = null;
     if (acceptString('catch')) catchPart = parseCatch();
-    Block finallyPart = null;
+    Block? finallyPart = null;
     if (acceptString('finally')) {
       expectCategory(LBRACE);
       finallyPart = parseBlock();
@@ -1425,7 +1430,7 @@
   }
 
   SwitchClause parseSwitchClause() {
-    Expression expression = null;
+    Expression? expression = null;
     if (acceptString('case')) {
       expression = parseExpression();
       expectCategory(COLON);
@@ -1435,7 +1440,7 @@
       }
       expectCategory(COLON);
     }
-    List statements = <Statement>[];
+    List<Statement> statements = [];
     while (lastCategory != RBRACE &&
         lastToken != 'case' &&
         lastToken != 'default') {
diff --git a/pkg/js_ast/lib/src/characters.dart b/pkg/js_ast/lib/src/characters.dart
index 5fd1196..aaa068d 100644
--- a/pkg/js_ast/lib/src/characters.dart
+++ b/pkg/js_ast/lib/src/characters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.15
+
 library js_character_codes;
 
 const int $EOF = 0;
diff --git a/pkg/js_ast/lib/src/equivalence_visitor.dart b/pkg/js_ast/lib/src/equivalence_visitor.dart
index b1a150b..5f67e72 100644
--- a/pkg/js_ast/lib/src/equivalence_visitor.dart
+++ b/pkg/js_ast/lib/src/equivalence_visitor.dart
@@ -2,7 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of js_ast;
+// @dart=2.15
+
+library js_ast.equivalence_visitor;
+
+import 'nodes.dart';
 
 /// Visitor that computes whether two [Node]s are structurally equivalent.
 class EquivalenceVisitor implements NodeVisitor1<bool, Node> {
@@ -11,17 +15,17 @@
   /// Called when [node1] and [node2] are not equivalent.
   ///
   /// Override this to collect or report information on the inequivalent nodes.
-  bool failAt(Node node1, Node node2) => false;
+  bool failAt(Node? node1, Node? node2) => false;
 
   /// Returns whether the non-node values [value1] and [value2] are equivalent.
-  bool testValues(Node node1, Object value1, Node node2, Object value2) =>
+  bool testValues(Node node1, Object? value1, Node node2, Object? value2) =>
       value1 == value2;
 
   /// Returns whether the labels [label1] and [label2] are equivalent.
-  bool testLabels(Node node1, String label1, Node node2, String label2) =>
+  bool testLabels(Node node1, String? label1, Node node2, String? label2) =>
       label1 == label2;
 
-  bool testNodes(Node node1, Node node2) {
+  bool testNodes(Node? node1, Node? node2) {
     if (identical(node1, node2)) return true;
     if (node1 == null || node2 == null) return failAt(node1, node2);
     return node1.accept1(this, node2);
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart
index 7c62eab..6d5d5ac 100644
--- a/pkg/js_ast/lib/src/nodes.dart
+++ b/pkg/js_ast/lib/src/nodes.dart
@@ -2,7 +2,12 @@
 // 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.
 
-part of js_ast;
+// @dart=2.15
+
+library js_ast.nodes;
+
+import 'precedence.dart';
+import 'printer.dart';
 
 abstract class NodeVisitor<T> {
   T visitProgram(Program node);
@@ -89,118 +94,185 @@
   const BaseVisitor();
 
   T visitNode(Node node);
+  @override
   T visitComment(Comment node);
 
+  @override
   T visitProgram(Program node) => visitNode(node);
 
   T visitStatement(Statement node) => visitNode(node);
   T visitLoop(Loop node) => visitStatement(node);
   T visitJump(Statement node) => visitStatement(node);
 
+  @override
   T visitBlock(Block node) => visitStatement(node);
+  @override
   T visitExpressionStatement(ExpressionStatement node) => visitStatement(node);
+  @override
   T visitEmptyStatement(EmptyStatement node) => visitStatement(node);
+  @override
   T visitIf(If node) => visitStatement(node);
+  @override
   T visitFor(For node) => visitLoop(node);
+  @override
   T visitForIn(ForIn node) => visitLoop(node);
+  @override
   T visitWhile(While node) => visitLoop(node);
+  @override
   T visitDo(Do node) => visitLoop(node);
+  @override
   T visitContinue(Continue node) => visitJump(node);
+  @override
   T visitBreak(Break node) => visitJump(node);
+  @override
   T visitReturn(Return node) => visitJump(node);
+  @override
   T visitThrow(Throw node) => visitJump(node);
+  @override
   T visitTry(Try node) => visitStatement(node);
+  @override
   T visitSwitch(Switch node) => visitStatement(node);
+  @override
   T visitFunctionDeclaration(FunctionDeclaration node) => visitStatement(node);
+  @override
   T visitLabeledStatement(LabeledStatement node) => visitStatement(node);
+  @override
   T visitLiteralStatement(LiteralStatement node) => visitStatement(node);
 
+  @override
   T visitCatch(Catch node) => visitNode(node);
+  @override
   T visitCase(Case node) => visitNode(node);
+  @override
   T visitDefault(Default node) => visitNode(node);
 
   T visitExpression(Expression node) => visitNode(node);
   T visitVariableReference(VariableReference node) => visitExpression(node);
 
+  @override
   T visitLiteralExpression(LiteralExpression node) => visitExpression(node);
+  @override
   T visitVariableDeclarationList(VariableDeclarationList node) =>
       visitExpression(node);
+  @override
   T visitAssignment(Assignment node) => visitExpression(node);
+  @override
   T visitVariableInitialization(VariableInitialization node) =>
       visitExpression(node);
 
+  @override
   T visitConditional(Conditional node) => visitExpression(node);
+  @override
   T visitNew(New node) => visitExpression(node);
+  @override
   T visitCall(Call node) => visitExpression(node);
+  @override
   T visitBinary(Binary node) => visitExpression(node);
+  @override
   T visitPrefix(Prefix node) => visitExpression(node);
+  @override
   T visitPostfix(Postfix node) => visitExpression(node);
+  @override
   T visitAccess(PropertyAccess node) => visitExpression(node);
 
+  @override
   T visitVariableUse(VariableUse node) => visitVariableReference(node);
+  @override
   T visitVariableDeclaration(VariableDeclaration node) =>
       visitVariableReference(node);
+  @override
   T visitParameter(Parameter node) => visitVariableDeclaration(node);
+  @override
   T visitThis(This node) => visitParameter(node);
 
+  @override
   T visitNamedFunction(NamedFunction node) => visitExpression(node);
   T visitFunctionExpression(FunctionExpression node) => visitExpression(node);
+  @override
   T visitFun(Fun node) => visitFunctionExpression(node);
+  @override
   T visitArrowFunction(ArrowFunction node) => visitFunctionExpression(node);
 
   T visitToken(DeferredToken node) => visitExpression(node);
 
+  @override
   T visitDeferredStatement(DeferredStatement node) => visitStatement(node);
+  @override
   T visitDeferredExpression(DeferredExpression node) => visitExpression(node);
+  @override
   T visitDeferredNumber(DeferredNumber node) => visitToken(node);
+  @override
   T visitDeferredString(DeferredString node) => visitToken(node);
 
   T visitLiteral(Literal node) => visitExpression(node);
 
+  @override
   T visitLiteralBool(LiteralBool node) => visitLiteral(node);
+  @override
   T visitLiteralString(LiteralString node) => visitLiteral(node);
+  @override
   T visitLiteralNumber(LiteralNumber node) => visitLiteral(node);
+  @override
   T visitLiteralNull(LiteralNull node) => visitLiteral(node);
 
+  @override
   T visitStringConcatenation(StringConcatenation node) => visitLiteral(node);
 
+  @override
   T visitName(Name node) => visitNode(node);
 
+  @override
   T visitParentheses(Parentheses node) => visitExpression(node);
 
+  @override
   T visitArrayInitializer(ArrayInitializer node) => visitExpression(node);
+  @override
   T visitArrayHole(ArrayHole node) => visitExpression(node);
+  @override
   T visitObjectInitializer(ObjectInitializer node) => visitExpression(node);
+  @override
   T visitProperty(Property node) => visitNode(node);
+  @override
   T visitMethodDefinition(MethodDefinition node) => visitNode(node);
+  @override
   T visitRegExpLiteral(RegExpLiteral node) => visitExpression(node);
 
   T visitInterpolatedNode(InterpolatedNode node) => visitNode(node);
 
+  @override
   T visitInterpolatedExpression(InterpolatedExpression node) =>
       visitInterpolatedNode(node);
+  @override
   T visitInterpolatedLiteral(InterpolatedLiteral node) =>
       visitInterpolatedNode(node);
+  @override
   T visitInterpolatedParameter(InterpolatedParameter node) =>
       visitInterpolatedNode(node);
+  @override
   T visitInterpolatedSelector(InterpolatedSelector node) =>
       visitInterpolatedNode(node);
+  @override
   T visitInterpolatedStatement(InterpolatedStatement node) =>
       visitInterpolatedNode(node);
+  @override
   T visitInterpolatedDeclaration(InterpolatedDeclaration node) {
     return visitInterpolatedNode(node);
   }
 
+  @override
   T visitAwait(Await node) => visitExpression(node);
+  @override
   T visitDartYield(DartYield node) => visitStatement(node);
 }
 
 class BaseVisitorVoid extends BaseVisitor<void> {
+  @override
   void visitNode(Node node) {
     node.visitChildren(this);
   }
 
   // Ignore comments by default.
+  @override
   void visitComment(Comment node) {}
 }
 
@@ -289,131 +361,198 @@
   const BaseVisitor1();
 
   R visitNode(Node node, A arg);
+  @override
   R visitComment(Comment node, A arg);
 
+  @override
   R visitProgram(Program node, A arg) => visitNode(node, arg);
 
   R visitStatement(Statement node, A arg) => visitNode(node, arg);
   R visitLoop(Loop node, A arg) => visitStatement(node, arg);
   R visitJump(Statement node, A arg) => visitStatement(node, arg);
 
+  @override
   R visitBlock(Block node, A arg) => visitStatement(node, arg);
+  @override
   R visitExpressionStatement(ExpressionStatement node, A arg) =>
       visitStatement(node, arg);
+  @override
   R visitEmptyStatement(EmptyStatement node, A arg) =>
       visitStatement(node, arg);
+  @override
   R visitIf(If node, A arg) => visitStatement(node, arg);
+  @override
   R visitFor(For node, A arg) => visitLoop(node, arg);
+  @override
   R visitForIn(ForIn node, A arg) => visitLoop(node, arg);
+  @override
   R visitWhile(While node, A arg) => visitLoop(node, arg);
+  @override
   R visitDo(Do node, A arg) => visitLoop(node, arg);
+  @override
   R visitContinue(Continue node, A arg) => visitJump(node, arg);
+  @override
   R visitBreak(Break node, A arg) => visitJump(node, arg);
+  @override
   R visitReturn(Return node, A arg) => visitJump(node, arg);
+  @override
   R visitThrow(Throw node, A arg) => visitJump(node, arg);
+  @override
   R visitTry(Try node, A arg) => visitStatement(node, arg);
+  @override
   R visitSwitch(Switch node, A arg) => visitStatement(node, arg);
+  @override
   R visitFunctionDeclaration(FunctionDeclaration node, A arg) =>
       visitStatement(node, arg);
+  @override
   R visitLabeledStatement(LabeledStatement node, A arg) =>
       visitStatement(node, arg);
+  @override
   R visitLiteralStatement(LiteralStatement node, A arg) =>
       visitStatement(node, arg);
 
+  @override
   R visitCatch(Catch node, A arg) => visitNode(node, arg);
+  @override
   R visitCase(Case node, A arg) => visitNode(node, arg);
+  @override
   R visitDefault(Default node, A arg) => visitNode(node, arg);
 
   R visitExpression(Expression node, A arg) => visitNode(node, arg);
   R visitVariableReference(VariableReference node, A arg) =>
       visitExpression(node, arg);
 
+  @override
   R visitLiteralExpression(LiteralExpression node, A arg) =>
       visitExpression(node, arg);
+  @override
   R visitVariableDeclarationList(VariableDeclarationList node, A arg) =>
       visitExpression(node, arg);
+  @override
   R visitAssignment(Assignment node, A arg) => visitExpression(node, arg);
+  @override
   R visitVariableInitialization(VariableInitialization node, A arg) =>
       visitExpression(node, arg);
 
+  @override
   R visitConditional(Conditional node, A arg) => visitExpression(node, arg);
+  @override
   R visitNew(New node, A arg) => visitExpression(node, arg);
+  @override
   R visitCall(Call node, A arg) => visitExpression(node, arg);
+  @override
   R visitBinary(Binary node, A arg) => visitExpression(node, arg);
+  @override
   R visitPrefix(Prefix node, A arg) => visitExpression(node, arg);
+  @override
   R visitPostfix(Postfix node, A arg) => visitExpression(node, arg);
+  @override
   R visitAccess(PropertyAccess node, A arg) => visitExpression(node, arg);
 
+  @override
   R visitVariableUse(VariableUse node, A arg) =>
       visitVariableReference(node, arg);
+  @override
   R visitVariableDeclaration(VariableDeclaration node, A arg) =>
       visitVariableReference(node, arg);
+  @override
   R visitParameter(Parameter node, A arg) =>
       visitVariableDeclaration(node, arg);
+  @override
   R visitThis(This node, A arg) => visitParameter(node, arg);
 
+  @override
   R visitNamedFunction(NamedFunction node, A arg) => visitExpression(node, arg);
+  @override
   R visitFun(Fun node, A arg) => visitExpression(node, arg);
+  @override
   R visitArrowFunction(ArrowFunction node, A arg) => visitExpression(node, arg);
 
   R visitToken(DeferredToken node, A arg) => visitExpression(node, arg);
 
+  @override
   R visitDeferredStatement(DeferredStatement node, A arg) =>
       visitStatement(node, arg);
+  @override
   R visitDeferredExpression(DeferredExpression node, A arg) =>
       visitExpression(node, arg);
+  @override
   R visitDeferredNumber(DeferredNumber node, A arg) => visitToken(node, arg);
+  @override
   R visitDeferredString(DeferredString node, A arg) => visitToken(node, arg);
 
   R visitLiteral(Literal node, A arg) => visitExpression(node, arg);
 
+  @override
   R visitLiteralBool(LiteralBool node, A arg) => visitLiteral(node, arg);
+  @override
   R visitLiteralString(LiteralString node, A arg) => visitLiteral(node, arg);
+  @override
   R visitLiteralNumber(LiteralNumber node, A arg) => visitLiteral(node, arg);
+  @override
   R visitLiteralNull(LiteralNull node, A arg) => visitLiteral(node, arg);
 
+  @override
   R visitStringConcatenation(StringConcatenation node, A arg) =>
       visitLiteral(node, arg);
 
+  @override
   R visitName(Name node, A arg) => visitNode(node, arg);
 
+  @override
   R visitParentheses(Parentheses node, A arg) => visitExpression(node, arg);
 
+  @override
   R visitArrayInitializer(ArrayInitializer node, A arg) =>
       visitExpression(node, arg);
+  @override
   R visitArrayHole(ArrayHole node, A arg) => visitExpression(node, arg);
+  @override
   R visitObjectInitializer(ObjectInitializer node, A arg) =>
       visitExpression(node, arg);
+  @override
   R visitProperty(Property node, A arg) => visitNode(node, arg);
+  @override
   R visitMethodDefinition(MethodDefinition node, A arg) => visitNode(node, arg);
+  @override
   R visitRegExpLiteral(RegExpLiteral node, A arg) => visitExpression(node, arg);
 
   R visitInterpolatedNode(InterpolatedNode node, A arg) => visitNode(node, arg);
 
+  @override
   R visitInterpolatedExpression(InterpolatedExpression node, A arg) =>
       visitInterpolatedNode(node, arg);
+  @override
   R visitInterpolatedLiteral(InterpolatedLiteral node, A arg) =>
       visitInterpolatedNode(node, arg);
+  @override
   R visitInterpolatedParameter(InterpolatedParameter node, A arg) =>
       visitInterpolatedNode(node, arg);
+  @override
   R visitInterpolatedSelector(InterpolatedSelector node, A arg) =>
       visitInterpolatedNode(node, arg);
+  @override
   R visitInterpolatedStatement(InterpolatedStatement node, A arg) =>
       visitInterpolatedNode(node, arg);
+  @override
   R visitInterpolatedDeclaration(InterpolatedDeclaration node, A arg) {
     return visitInterpolatedNode(node, arg);
   }
 
+  @override
   R visitAwait(Await node, A arg) => visitExpression(node, arg);
+  @override
   R visitDartYield(DartYield node, A arg) => visitStatement(node, arg);
 }
 
 class BaseVisitor1Void<A> extends BaseVisitor1<void, A> {
+  @override
   void visitNode(Node node, A arg) {
     node.visitChildren1(this, arg);
   }
 
   // Ignore comments by default.
+  @override
   void visitComment(Comment node, A arg) {}
 }
 
@@ -424,9 +563,9 @@
 }
 
 abstract class Node {
-  JavaScriptNodeSourceInformation get sourceInformation => _sourceInformation;
+  JavaScriptNodeSourceInformation? get sourceInformation => _sourceInformation;
 
-  JavaScriptNodeSourceInformation _sourceInformation;
+  JavaScriptNodeSourceInformation? _sourceInformation;
 
   T accept<T>(NodeVisitor<T> visitor);
   void visitChildren<T>(NodeVisitor<T> visitor);
@@ -434,8 +573,10 @@
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg);
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg);
 
-  /// Shallow clone of node.  Does not clone positions since the only use of
-  /// this private method is create a copy with a new position.
+  /// Shallow clone of node.
+  ///
+  /// Does not clone positions since the only use of this private method is
+  /// create a copy with a new position.
   Node _clone();
 
   /// Returns a node equivalent to [this], but with new source position and end
@@ -477,38 +618,48 @@
   final List<Statement> body;
   Program(this.body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitProgram(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitProgram(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Statement statement in body) statement.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Statement statement in body) statement.accept1(visitor, arg);
   }
 
+  @override
   Program _clone() => Program(body);
 }
 
 abstract class Statement extends Node {
+  @override
   Statement toStatement() => this;
 }
 
 /// Interface for a deferred [Statement] value. An implementation has to provide
 /// a value via the [statement] getter the latest when the ast is printed.
 abstract class DeferredStatement extends Statement {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDeferredStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     statement.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     statement.accept1(visitor, arg);
   }
@@ -523,57 +674,70 @@
 
   Block.empty() : this.statements = [];
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBlock(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitBlock(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Statement statement in statements) statement.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Statement statement in statements) statement.accept1(visitor, arg);
   }
 
+  @override
   Block _clone() => Block(statements);
 }
 
 class ExpressionStatement extends Statement {
   final Expression expression;
 
-  ExpressionStatement(this.expression) {
-    assert(this.expression != null);
-  }
+  ExpressionStatement(this.expression);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitExpressionStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitExpressionStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     expression.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     expression.accept1(visitor, arg);
   }
 
+  @override
   ExpressionStatement _clone() => ExpressionStatement(expression);
 }
 
 class EmptyStatement extends Statement {
   EmptyStatement();
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitEmptyStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitEmptyStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   EmptyStatement _clone() => EmptyStatement();
 }
 
@@ -588,58 +752,67 @@
 
   bool get hasElse => otherwise is! EmptyStatement;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitIf(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitIf(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     condition.accept(visitor);
     then.accept(visitor);
     otherwise.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     condition.accept1(visitor, arg);
     then.accept1(visitor, arg);
     otherwise.accept1(visitor, arg);
   }
 
+  @override
   If _clone() => If(condition, then, otherwise);
 }
 
 abstract class Loop extends Statement {
   final Statement body;
-
   Loop(this.body);
 }
 
 class For extends Loop {
-  final Expression init;
-  final Expression condition;
-  final Expression update;
+  final Expression? init;
+  final Expression? condition;
+  final Expression? update;
 
   For(this.init, this.condition, this.update, Statement body) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitFor(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitFor(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
-    if (init != null) init.accept(visitor);
-    if (condition != null) condition.accept(visitor);
-    if (update != null) update.accept(visitor);
+    init?.accept(visitor);
+    condition?.accept(visitor);
+    update?.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
-    if (init != null) init.accept1(visitor, arg);
-    if (condition != null) condition.accept1(visitor, arg);
-    if (update != null) update.accept1(visitor, arg);
+    init?.accept1(visitor, arg);
+    condition?.accept1(visitor, arg);
+    update?.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   For _clone() => For(init, condition, update, body);
 }
 
@@ -651,46 +824,56 @@
 
   ForIn(this.leftHandSide, this.object, Statement body) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitForIn(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitForIn(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     leftHandSide.accept(visitor);
     object.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     leftHandSide.accept1(visitor, arg);
     object.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   ForIn _clone() => ForIn(leftHandSide, object, body);
 }
 
 class While extends Loop {
-  final Node condition;
+  final Expression condition;
 
   While(this.condition, Statement body) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitWhile(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitWhile(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     condition.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     condition.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   While _clone() => While(condition, body);
 }
 
@@ -699,76 +882,99 @@
 
   Do(Statement body, this.condition) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDo(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDo(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     body.accept(visitor);
     condition.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     body.accept1(visitor, arg);
     condition.accept1(visitor, arg);
   }
 
+  @override
   Do _clone() => Do(body, condition);
 }
 
 class Continue extends Statement {
-  final String targetLabel; // Can be null.
+  /// Name of the label L for `continue L;` or `null` for `continue;`.
+  final String? targetLabel;
 
   Continue(this.targetLabel);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitContinue(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitContinue(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   Continue _clone() => Continue(targetLabel);
 }
 
 class Break extends Statement {
-  final String targetLabel; // Can be null.
+  /// Name of the label L for `break L;` or `null` for `break;`.
+  final String? targetLabel;
 
   Break(this.targetLabel);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBreak(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitBreak(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   Break _clone() => Break(targetLabel);
 }
 
 class Return extends Statement {
-  final Expression value; // Can be null.
+  /// The expression for `return expression;`, or `null` for `return;`.
+  final Expression? value;
 
   Return([this.value = null]);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitReturn(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitReturn(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
-    if (value != null) value.accept(visitor);
+    value?.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
-    if (value != null) value.accept1(visitor, arg);
+    value?.accept1(visitor, arg);
   }
 
+  @override
   Return _clone() => Return(value);
 }
 
@@ -777,48 +983,58 @@
 
   Throw(this.expression);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitThrow(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitThrow(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     expression.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     expression.accept1(visitor, arg);
   }
 
+  @override
   Throw _clone() => Throw(expression);
 }
 
 class Try extends Statement {
   final Block body;
-  final Catch catchPart; // Can be null if [finallyPart] is non-null.
-  final Block finallyPart; // Can be null if [catchPart] is non-null.
+  final Catch? catchPart; // Can be null if [finallyPart] is non-null.
+  final Block? finallyPart; // Can be null if [catchPart] is non-null.
 
   Try(this.body, this.catchPart, this.finallyPart) {
     assert(catchPart != null || finallyPart != null);
   }
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitTry(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitTry(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     body.accept(visitor);
-    if (catchPart != null) catchPart.accept(visitor);
-    if (finallyPart != null) finallyPart.accept(visitor);
+    catchPart?.accept(visitor);
+    finallyPart?.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     body.accept1(visitor, arg);
-    if (catchPart != null) catchPart.accept1(visitor, arg);
-    if (finallyPart != null) finallyPart.accept1(visitor, arg);
+    catchPart?.accept1(visitor, arg);
+    finallyPart?.accept1(visitor, arg);
   }
 
+  @override
   Try _clone() => Try(body, catchPart, finallyPart);
 }
 
@@ -828,21 +1044,26 @@
 
   Catch(this.declaration, this.body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitCatch(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitCatch(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     declaration.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     declaration.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   Catch _clone() => Catch(declaration, body);
 }
 
@@ -852,21 +1073,26 @@
 
   Switch(this.key, this.cases);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitSwitch(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitSwitch(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     key.accept(visitor);
     for (SwitchClause clause in cases) clause.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     key.accept1(visitor, arg);
     for (SwitchClause clause in cases) clause.accept1(visitor, arg);
   }
 
+  @override
   Switch _clone() => Switch(key, cases);
 }
 
@@ -881,40 +1107,50 @@
 
   Case(this.expression, Block body) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitCase(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitCase(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     expression.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     expression.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   Case _clone() => Case(expression, body);
 }
 
 class Default extends SwitchClause {
   Default(Block body) : super(body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDefault(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDefault(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     body.accept1(visitor, arg);
   }
 
+  @override
   Default _clone() => Default(body);
 }
 
@@ -924,21 +1160,26 @@
 
   FunctionDeclaration(this.name, this.function);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitFunctionDeclaration(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitFunctionDeclaration(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     name.accept(visitor);
     function.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     name.accept1(visitor, arg);
     function.accept1(visitor, arg);
   }
 
+  @override
   FunctionDeclaration _clone() => FunctionDeclaration(name, function);
 }
 
@@ -948,19 +1189,24 @@
 
   LabeledStatement(this.label, this.body);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLabeledStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLabeledStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     body.accept1(visitor, arg);
   }
 
+  @override
   LabeledStatement _clone() => LabeledStatement(label, body);
 }
 
@@ -969,20 +1215,25 @@
 
   LiteralStatement(this.code);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   LiteralStatement _clone() => LiteralStatement(code);
 }
 
-// Not a real JavaScript node, but represents the yield statement from a dart
-// program translated to JavaScript.
+/// Not a real JavaScript node, but represents the yield statement from a dart
+/// program translated to JavaScript.
 class DartYield extends Statement {
   final Expression expression;
 
@@ -990,19 +1241,24 @@
 
   DartYield(this.expression, this.hasStar);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDartYield(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDartYield(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     expression.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     expression.accept1(visitor, arg);
   }
 
+  @override
   DartYield _clone() => DartYield(expression, hasStar);
 }
 
@@ -1011,6 +1267,7 @@
   // have precedence depending on how the deferred node is resolved.
   int get precedenceLevel;
 
+  @override
   Statement toStatement() => ExpressionStatement(this);
 }
 
@@ -1025,17 +1282,21 @@
 // that is used. How should the printer know if an occurrence of a Name is meant
 // to be a Literal or a Declaration (which includes a VariableUse)?
 abstract class Name extends Literal implements Declaration, Parameter {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitName(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitName(this, arg);
 
+  @override
   Name _clone();
 
   /// Returns the text of this name.
   ///
   /// May throw if the text has not been decided. Typically the text is decided
   /// in some finalization phase that happens before the AST is printed.
+  @override
   String get name;
 
   /// Returns a unique [key] for this name.
@@ -1044,13 +1305,14 @@
   /// consumption. As such, it might be long or cryptic.
   String get key;
 
+  @override
   bool get allowRename => false;
 }
 
 class LiteralStringFromName extends LiteralString {
   final Name name;
 
-  LiteralStringFromName(this.name) : super(null) {
+  LiteralStringFromName(this.name) : super('') {
     ArgumentError.checkNotNull(name, 'name');
   }
 
@@ -1060,10 +1322,12 @@
   @override
   String get value => name.name;
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     name.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     name.accept1(visitor, arg);
   }
@@ -1073,24 +1337,29 @@
   final String template;
   LiteralExpression(this.template);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralExpression(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralExpression(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   LiteralExpression _clone() => LiteralExpression(template);
 
   // Code that uses LiteralExpression must take care of operator precedences,
   // and put parenthesis if needed.
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
-/// [VariableDeclarationList] is a subclass of [Expression] to simplify the
-/// AST.
+/// [VariableDeclarationList] is a subclass of [Expression] to simplify the AST.
 class VariableDeclarationList extends Expression {
   final List<VariableInitialization> declarations;
 
@@ -1101,26 +1370,32 @@
 
   VariableDeclarationList(this.declarations, {this.indentSplits = true});
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitVariableDeclarationList(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableDeclarationList(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (VariableInitialization declaration in declarations) {
       declaration.accept(visitor);
     }
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (VariableInitialization declaration in declarations) {
       declaration.accept1(visitor, arg);
     }
   }
 
+  @override
   VariableDeclarationList _clone() => VariableDeclarationList(declarations);
 
+  @override
   int get precedenceLevel => EXPRESSION;
 }
 
@@ -1131,54 +1406,65 @@
 
   Parentheses(this.enclosed);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitParentheses(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitParentheses(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     enclosed.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     enclosed.accept1(visitor, arg);
   }
 
+  @override
   Parentheses _clone() => Parentheses(enclosed);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
 class Assignment extends Expression {
   final Expression leftHandSide;
-  final String op; // Null, if the assignment is not compound.
+  final String? op; // `null` if the assignment is not compound.
   final Expression value;
 
-  Assignment(leftHandSide, value) : this.compound(leftHandSide, null, value);
+  Assignment(this.leftHandSide, this.value) : op = null;
 
   // If `this.op == null` this will be a non-compound assignment.
-  Assignment.compound(this.leftHandSide, this.op, this.value)
-      : assert(value != null);
+  Assignment.compound(this.leftHandSide, this.op, this.value);
 
+  @override
   int get precedenceLevel => ASSIGNMENT;
 
   bool get isCompound => op != null;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAssignment(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitAssignment(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     leftHandSide.accept(visitor);
     value.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     leftHandSide.accept1(visitor, arg);
     value.accept1(visitor, arg);
   }
 
+  @override
   Assignment _clone() => Assignment.compound(leftHandSide, op, value);
 }
 
@@ -1186,28 +1472,35 @@
   // TODO(sra): Can [VariableInitialization] be a non-expression?
 
   final Declaration declaration;
-  final Expression value; // [value] may be null.
+  // The initializing value can be missing, e.g. for `a` in `var a, b=1;`.
+  final Expression? value;
 
   VariableInitialization(this.declaration, this.value);
 
+  @override
   int get precedenceLevel => ASSIGNMENT;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitVariableInitialization(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableInitialization(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     declaration.accept(visitor);
     value?.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     declaration.accept1(visitor, arg);
     value?.accept1(visitor, arg);
   }
 
+  @override
   VariableInitialization _clone() => VariableInitialization(declaration, value);
 }
 
@@ -1218,25 +1511,31 @@
 
   Conditional(this.condition, this.then, this.otherwise);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitConditional(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitConditional(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     condition.accept(visitor);
     then.accept(visitor);
     otherwise.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     condition.accept1(visitor, arg);
     then.accept1(visitor, arg);
     otherwise.accept1(visitor, arg);
   }
 
+  @override
   Conditional _clone() => Conditional(condition, then, otherwise);
 
+  @override
   int get precedenceLevel => ASSIGNMENT;
 }
 
@@ -1245,15 +1544,18 @@
   List<Expression> arguments;
 
   Call(this.target, this.arguments,
-      {JavaScriptNodeSourceInformation sourceInformation}) {
+      {JavaScriptNodeSourceInformation? sourceInformation}) {
     this._sourceInformation = sourceInformation;
   }
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitCall(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitCall(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     target.accept(visitor);
     for (Expression arg in arguments) {
@@ -1261,6 +1563,7 @@
     }
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     target.accept1(visitor, arg);
     for (Expression arg in arguments) {
@@ -1268,19 +1571,24 @@
     }
   }
 
+  @override
   Call _clone() => Call(target, arguments);
 
+  @override
   int get precedenceLevel => CALL;
 }
 
 class New extends Call {
   New(Expression cls, List<Expression> arguments) : super(cls, arguments);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitNew(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitNew(this, arg);
 
+  @override
   New _clone() => New(target, arguments);
 }
 
@@ -1291,25 +1599,32 @@
 
   Binary(this.op, this.left, this.right);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitBinary(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitBinary(this, arg);
 
+  @override
   Binary _clone() => Binary(op, left, right);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     left.accept(visitor);
     right.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     left.accept1(visitor, arg);
     right.accept1(visitor, arg);
   }
 
+  @override
   bool get isCommaOperator => op == ',';
 
+  @override
   int get precedenceLevel {
     // TODO(floitsch): switch to constant map.
     switch (op) {
@@ -1360,21 +1675,27 @@
 
   Prefix(this.op, this.argument);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitPrefix(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitPrefix(this, arg);
 
+  @override
   Prefix _clone() => Prefix(op, argument);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     argument.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     argument.accept1(visitor, arg);
   }
 
+  @override
   int get precedenceLevel => UNARY;
 }
 
@@ -1384,21 +1705,27 @@
 
   Postfix(this.op, this.argument);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitPostfix(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitPostfix(this, arg);
 
+  @override
   Postfix _clone() => Postfix(op, argument);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     argument.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     argument.accept1(visitor, arg);
   }
 
+  @override
   int get precedenceLevel => UNARY;
 }
 
@@ -1411,25 +1738,33 @@
     assert(_identifierRE.hasMatch(name), "Non-identifier name '$name'");
   }
 
+  @override
   T accept<T>(NodeVisitor<T> visitor);
 
+  @override
   int get precedenceLevel => PRIMARY;
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 }
 
 class VariableUse extends VariableReference {
   VariableUse(String name) : super(name);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitVariableUse(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableUse(this, arg);
 
+  @override
   VariableUse _clone() => VariableUse(name);
 
+  @override
   String toString() => 'VariableUse($name)';
 }
 
@@ -1438,33 +1773,42 @@
 
   VariableDeclaration(String name, {this.allowRename = true}) : super(name);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitVariableDeclaration(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitVariableDeclaration(this, arg);
 
+  @override
   VariableDeclaration _clone() => VariableDeclaration(name);
 }
 
 class Parameter extends VariableDeclaration {
   Parameter(String name) : super(name);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitParameter(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitParameter(this, arg);
 
+  @override
   Parameter _clone() => Parameter(name);
 }
 
 class This extends Parameter {
   This() : super("this");
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitThis(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitThis(this, arg);
 
+  @override
   This _clone() => This();
 }
 
@@ -1474,30 +1818,36 @@
 
   NamedFunction(this.name, this.function);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitNamedFunction(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitNamedFunction(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     name.accept(visitor);
     function.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     name.accept1(visitor, arg);
     function.accept1(visitor, arg);
   }
 
+  @override
   NamedFunction _clone() => NamedFunction(name, function);
 
+  @override
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
 
 abstract class FunctionExpression extends Expression {
-  Node body;
-  List<Parameter> params;
-  AsyncModifier asyncModifier;
+  Node get body;
+  List<Parameter> get params;
+  AsyncModifier get asyncModifier;
 }
 
 class Fun extends FunctionExpression {
@@ -1510,23 +1860,29 @@
 
   Fun(this.params, this.body, {this.asyncModifier = AsyncModifier.sync});
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitFun(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitFun(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Parameter param in params) param.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Parameter param in params) param.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   Fun _clone() => Fun(params, body, asyncModifier: asyncModifier);
 
+  @override
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
 
@@ -1546,25 +1902,31 @@
       {this.asyncModifier = AsyncModifier.sync,
       this.implicitReturnAllowed = true});
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrowFunction(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitArrowFunction(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Parameter param in params) param.accept(visitor);
     body.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Parameter param in params) param.accept1(visitor, arg);
     body.accept1(visitor, arg);
   }
 
+  @override
   ArrowFunction _clone() => ArrowFunction(params, body,
       asyncModifier: asyncModifier,
       implicitReturnAllowed: implicitReturnAllowed);
 
+  @override
   int get precedenceLevel => ASSIGNMENT;
 }
 
@@ -1575,7 +1937,7 @@
   final String description;
 
   const AsyncModifier(this.index, this.description,
-      {this.isAsync, this.isYielding});
+      {required this.isAsync, required this.isYielding});
 
   static const AsyncModifier sync =
       AsyncModifier(0, "sync", isAsync: false, isYielding: false);
@@ -1588,6 +1950,7 @@
 
   static const List<AsyncModifier> values = [sync, async, asyncStar, syncStar];
 
+  @override
   String toString() => description;
 }
 
@@ -1603,23 +1966,29 @@
   PropertyAccess.indexed(this.receiver, int index)
       : selector = LiteralNumber('$index');
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAccess(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitAccess(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     receiver.accept(visitor);
     selector.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     receiver.accept1(visitor, arg);
     selector.accept1(visitor, arg);
   }
 
+  @override
   PropertyAccess _clone() => PropertyAccess(receiver, selector);
 
+  @override
   int get precedenceLevel => LEFT_HAND_SIDE;
 }
 
@@ -1628,36 +1997,45 @@
 /// [DeferredToken] is not limited to templates but may also occur in
 /// fully instantiated asts.
 abstract class DeferredToken extends Expression {
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   DeferredToken _clone() => this;
 }
 
 /// Interface for a deferred integer value. An implementation has to provide
 /// a value via the [value] getter the latest when the ast is printed.
 abstract class DeferredNumber extends DeferredToken implements Literal {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredNumber(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDeferredNumber(this, arg);
 
   int get value;
 
+  @override
   int get precedenceLevel => value.isNegative ? UNARY : PRIMARY;
 }
 
 /// Interface for a deferred string value. An implementation has to provide
 /// a value via the [value] getter the latest when the ast is printed.
 abstract class DeferredString extends DeferredToken implements Literal {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredString(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDeferredString(this, arg);
 
   String get value;
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
@@ -1666,8 +2044,10 @@
 /// Also, [precedenceLevel] has to return the same value that
 /// [value.precedenceLevel] returns once [value] is bound to an [Expression].
 abstract class DeferredExpression extends DeferredToken {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredExpression(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitDeferredExpression(this, arg);
 
@@ -1675,10 +2055,13 @@
 }
 
 abstract class Literal extends Expression {
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
@@ -1687,24 +2070,30 @@
 
   LiteralBool(this.value);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralBool(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralBool(this, arg);
 
   // [visitChildren] inherited from [Literal].
 
+  @override
   LiteralBool _clone() => LiteralBool(value);
 }
 
 class LiteralNull extends Literal {
   LiteralNull();
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNull(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralNull(this, arg);
 
+  @override
   LiteralNull _clone() => LiteralNull();
 }
 
@@ -1718,11 +2107,14 @@
   /// printer's settings.
   LiteralString(this.value);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralString(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralString(this, arg);
 
+  @override
   LiteralString _clone() => LiteralString(value);
 
   @override
@@ -1758,19 +2150,24 @@
   /// concatenated string.
   StringConcatenation(this.parts);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitStringConcatenation(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitStringConcatenation(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Literal part in parts) part.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Literal part in parts) part.accept1(visitor, arg);
   }
 
+  @override
   StringConcatenation _clone() => StringConcatenation(this.parts);
 }
 
@@ -1779,13 +2176,17 @@
 
   LiteralNumber(this.value);
 
+  @override
   int get precedenceLevel => value.startsWith('-') ? UNARY : PRIMARY;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNumber(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitLiteralNumber(this, arg);
 
+  @override
   LiteralNumber _clone() => LiteralNumber(value);
 }
 
@@ -1794,38 +2195,50 @@
 
   ArrayInitializer(this.elements) : assert(!elements.contains(null));
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayInitializer(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitArrayInitializer(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Expression element in elements) element.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Expression element in elements) element.accept1(visitor, arg);
   }
 
+  @override
   ArrayInitializer _clone() => ArrayInitializer(elements);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
 /// An empty place in an [ArrayInitializer].
 /// For example the list [1, , , 2] would contain two holes.
 class ArrayHole extends Expression {
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayHole(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitArrayHole(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   ArrayHole _clone() => ArrayHole();
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
@@ -1840,22 +2253,28 @@
   /// If false print each property on a seperate line.
   ObjectInitializer(this.properties, {this.isOneLiner = true});
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitObjectInitializer(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitObjectInitializer(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     for (Property init in properties) init.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     for (Property init in properties) init.accept1(visitor, arg);
   }
 
+  @override
   ObjectInitializer _clone() =>
       ObjectInitializer(properties, isOneLiner: isOneLiner);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
@@ -1866,21 +2285,26 @@
   Property(this.name, this.value)
       : assert(name is Literal || name is DeferredExpression);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitProperty(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitProperty(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {
     name.accept(visitor);
     value.accept(visitor);
   }
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {
     name.accept1(visitor, arg);
     value.accept1(visitor, arg);
   }
 
+  @override
   Property _clone() => Property(name, value);
 }
 
@@ -1897,6 +2321,7 @@
   @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitMethodDefinition(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitMethodDefinition(this, arg);
 
@@ -1926,125 +2351,166 @@
 }
 
 class InterpolatedExpression extends Expression with InterpolatedNode {
+  @override
   final nameOrPosition;
 
   InterpolatedExpression(this.nameOrPosition);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedExpression(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedExpression(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedExpression _clone() => InterpolatedExpression(nameOrPosition);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
 class InterpolatedLiteral extends Literal with InterpolatedNode {
+  @override
   final nameOrPosition;
 
   InterpolatedLiteral(this.nameOrPosition);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedLiteral(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedLiteral(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedLiteral _clone() => InterpolatedLiteral(nameOrPosition);
 }
 
 class InterpolatedParameter extends Expression
     with InterpolatedNode
     implements Parameter {
+  @override
   final nameOrPosition;
 
   InterpolatedParameter(this.nameOrPosition);
 
+  @override
   String get name {
     throw "InterpolatedParameter.name must not be invoked";
   }
 
+  @override
   bool get allowRename => false;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedParameter(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedParameter(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedParameter _clone() => InterpolatedParameter(nameOrPosition);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
 class InterpolatedSelector extends Expression with InterpolatedNode {
+  @override
   final nameOrPosition;
 
   InterpolatedSelector(this.nameOrPosition);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedSelector(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedSelector(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedSelector _clone() => InterpolatedSelector(nameOrPosition);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
 class InterpolatedStatement extends Statement with InterpolatedNode {
+  @override
   final nameOrPosition;
 
   InterpolatedStatement(this.nameOrPosition);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedStatement(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedStatement(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedStatement _clone() => InterpolatedStatement(nameOrPosition);
 }
 
 class InterpolatedDeclaration extends Expression
     with InterpolatedNode
     implements Declaration {
+  @override
   final nameOrPosition;
 
   InterpolatedDeclaration(this.nameOrPosition);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) =>
       visitor.visitInterpolatedDeclaration(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitInterpolatedDeclaration(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   InterpolatedDeclaration _clone() {
     return InterpolatedDeclaration(nameOrPosition);
   }
@@ -2057,25 +2523,33 @@
 }
 
 /// [RegExpLiteral]s, despite being called "Literal", do not inherit from
-/// [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
-/// are thus not in the same category as numbers or strings.
+/// [Literal].
+///
+/// Indeed, regular expressions in JavaScript have a side-effect and are thus
+/// not in the same category as numbers or strings.
 class RegExpLiteral extends Expression {
   /// Contains the pattern and the flags.
   final String pattern;
 
   RegExpLiteral(this.pattern);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitRegExpLiteral(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitRegExpLiteral(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 
+  @override
   RegExpLiteral _clone() => RegExpLiteral(pattern);
 
+  @override
   int get precedenceLevel => PRIMARY;
 }
 
@@ -2089,18 +2563,24 @@
 
   Await(this.expression);
 
+  @override
   int get precedenceLevel => UNARY;
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitAwait(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitAwait(this, arg);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) => expression.accept(visitor);
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       expression.accept1(visitor, arg);
 
+  @override
   Await _clone() => Await(expression);
 }
 
@@ -2113,20 +2593,26 @@
 
   Comment(this.comment);
 
+  @override
   T accept<T>(NodeVisitor<T> visitor) => visitor.visitComment(this);
 
+  @override
   R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) =>
       visitor.visitComment(this, arg);
 
+  @override
   Comment _clone() => Comment(comment);
 
+  @override
   void visitChildren<T>(NodeVisitor<T> visitor) {}
 
+  @override
   void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {}
 }
 
-/// Returns the value of [node] if it is a [DeferredExpression]. Otherwise
-/// returns the [node] itself.
+/// Returns the value of [node] if it is a [DeferredExpression].
+///
+/// Otherwise returns the [node] itself.
 Node undefer(Node node) {
   return node is DeferredExpression ? undefer(node.value) : node;
 }
diff --git a/pkg/js_ast/lib/src/precedence.dart b/pkg/js_ast/lib/src/precedence.dart
index 222f4a8..19c5c9f 100644
--- a/pkg/js_ast/lib/src/precedence.dart
+++ b/pkg/js_ast/lib/src/precedence.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.15
+
 library precedence;
 
 const EXPRESSION = 0;
diff --git a/pkg/js_ast/lib/src/printer.dart b/pkg/js_ast/lib/src/printer.dart
index 562107f..67d0f9b 100644
--- a/pkg/js_ast/lib/src/printer.dart
+++ b/pkg/js_ast/lib/src/printer.dart
@@ -2,7 +2,14 @@
 // 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.
 
-part of js_ast;
+// @dart=2.15
+
+library js_ast.printer;
+
+import 'characters.dart' as charCodes;
+import 'nodes.dart';
+import 'precedence.dart';
+import 'strings.dart';
 
 class JavaScriptPrintingOptions {
   final bool utf8;
@@ -44,7 +51,7 @@
   ///
   /// [enterNode] is called in post-traversal order.
   void exitNode(
-      Node node, int startPosition, int endPosition, int closingPosition) {}
+      Node node, int startPosition, int endPosition, int? closingPosition) {}
 
   /// Should return `true` if the printing tolerates unfinalized deferred AST
   /// nodes.
@@ -55,6 +62,7 @@
 class SimpleJavaScriptPrintingContext extends JavaScriptPrintingContext {
   final StringBuffer buffer = StringBuffer();
 
+  @override
   void emit(String string) {
     buffer.write(string);
   }
@@ -63,6 +71,7 @@
 }
 
 class _DebugJavaScriptPrintingContext extends SimpleJavaScriptPrintingContext {
+  @override
   bool get isDebugContext => true;
 }
 
@@ -143,11 +152,10 @@
     if (!shouldCompressOutput) out(" ", isWhitespace: true);
   }
 
-  String lastAddedString = null;
+  String lastAddedString = '\u0000';
 
   int get lastCharCode {
-    if (lastAddedString == null) return 0;
-    assert(lastAddedString.length != 0);
+    assert(lastAddedString.isNotEmpty);
     return lastAddedString.codeUnitAt(lastAddedString.length - 1);
   }
 
@@ -220,7 +228,7 @@
     }
   }
 
-  EnterExitNode currentNode;
+  EnterExitNode? currentNode;
 
   void _emit(String text) {
     context.emit(text);
@@ -237,7 +245,7 @@
   }
 
   void enterNode() {
-    currentNode.addToNode(context, _charCount);
+    currentNode!.addToNode(context, _charCount);
   }
 
   void endNode(Node node) {
@@ -246,8 +254,8 @@
         endNode(node.value);
       }
     }
-    assert(currentNode.node == node);
-    currentNode = currentNode.exitNode(context, _charCount);
+    assert(currentNode!.node == node);
+    currentNode = currentNode!.exitNode(context, _charCount);
   }
 
   void visit(Node node) {
@@ -256,8 +264,8 @@
     endNode(node);
   }
 
-  void visitCommaSeparated(List<Node> nodes, int hasRequiredType,
-      {bool newInForInit, bool newAtStatementBegin}) {
+  void visitCommaSeparated(List<Expression> nodes, int hasRequiredType,
+      {required bool newInForInit, required bool newAtStatementBegin}) {
     for (int i = 0; i < nodes.length; i++) {
       if (i != 0) {
         atStatementBegin = false;
@@ -273,7 +281,7 @@
     nodes.forEach(visit);
   }
 
-  Node _undefer(Node node) {
+  Expression _undefer(Expression node) {
     if (isDebugContext && !node.isFinalized) return node;
     if (node is DeferredExpression) return _undefer(node.value);
     return node;
@@ -296,7 +304,8 @@
     return result;
   }
 
-  bool blockBody(Statement body, {bool needsSeparation, bool needsNewline}) {
+  bool blockBody(Statement body,
+      {required bool needsSeparation, required bool needsNewline}) {
     if (body is Block) {
       spaceOut();
       blockOut(body, shouldIndent: false, needsNewline: needsNewline);
@@ -331,7 +340,8 @@
     }
   }
 
-  int blockOut(Block node, {bool shouldIndent, bool needsNewline}) {
+  int blockOut(Block node,
+      {required bool shouldIndent, required bool needsNewline}) {
     if (shouldIndent) indent();
     startNode(node);
     out("{");
@@ -418,19 +428,19 @@
     spaceOut();
     out("(");
     if (loop.init != null) {
-      visitNestedExpression(loop.init, EXPRESSION,
+      visitNestedExpression(loop.init!, EXPRESSION,
           newInForInit: true, newAtStatementBegin: false);
     }
     out(";");
     if (loop.condition != null) {
       spaceOut();
-      visitNestedExpression(loop.condition, EXPRESSION,
+      visitNestedExpression(loop.condition!, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     out(";");
     if (loop.update != null) {
       spaceOut();
-      visitNestedExpression(loop.update, EXPRESSION,
+      visitNestedExpression(loop.update!, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     out(")");
@@ -506,16 +516,17 @@
 
   @override
   void visitReturn(Return node) {
-    if (node.value == null) {
+    final value = node.value;
+    if (value == null) {
       outIndent("return");
     } else {
       outIndent("return");
       pendingSpace = true;
-      visitNestedExpression(node.value, EXPRESSION,
+      visitNestedExpression(value, EXPRESSION,
           newInForInit: false, newAtStatementBegin: false);
     }
     // Set the closing position to be before the optional semicolon.
-    currentNode.closingPosition = _charCount;
+    currentNode!.closingPosition = _charCount;
     outSemicolonLn();
   }
 
@@ -546,12 +557,12 @@
     outIndent("try");
     blockBody(node.body, needsSeparation: true, needsNewline: false);
     if (node.catchPart != null) {
-      visit(node.catchPart);
+      visit(node.catchPart!);
     }
     if (node.finallyPart != null) {
       spaceOut();
       out("finally");
-      blockBody(node.finallyPart, needsSeparation: true, needsNewline: true);
+      blockBody(node.finallyPart!, needsSeparation: true, needsNewline: true);
     } else {
       lineOut();
     }
@@ -625,7 +636,7 @@
     blockBody(body, needsSeparation: false, needsNewline: true);
   }
 
-  int functionOut(Fun fun, Node name, VarCollector vars) {
+  int functionOut(Fun fun, Expression? name, VarCollector vars) {
     out("function");
     if (name != null) {
       out(" ");
@@ -635,10 +646,8 @@
     }
     localNamer.enterScope(vars);
     out("(");
-    if (fun.params != null) {
-      visitCommaSeparated(fun.params, PRIMARY,
-          newInForInit: false, newAtStatementBegin: false);
-    }
+    visitCommaSeparated(fun.params, PRIMARY,
+        newInForInit: false, newAtStatementBegin: false);
     out(")");
     switch (fun.asyncModifier) {
       case AsyncModifier.sync:
@@ -669,14 +678,14 @@
     vars.visitFunctionDeclaration(declaration);
     indent();
     startNode(declaration.function);
-    currentNode.closingPosition =
+    currentNode!.closingPosition =
         functionOut(declaration.function, declaration.name, vars);
     endNode(declaration.function);
     lineOut();
   }
 
   visitNestedExpression(Expression node, int requiredPrecedence,
-      {bool newInForInit, bool newAtStatementBegin}) {
+      {required bool newInForInit, required bool newAtStatementBegin}) {
     int precedenceLevel =
         (isDebugContext && !node.isFinalized) ? CALL : node.precedenceLevel;
     bool needsParentheses =
@@ -707,7 +716,7 @@
   @override
   visitVariableDeclarationList(VariableDeclarationList list) {
     out("var ");
-    List<Node> nodes = list.declarations;
+    final nodes = list.declarations;
     if (inForInit) {
       visitCommaSeparated(nodes, ASSIGNMENT,
           newInForInit: inForInit, newAtStatementBegin: false);
@@ -720,7 +729,7 @@
       }
       bool lastWasBig = false;
       for (int i = 0; i < nodes.length; i++) {
-        Node node = nodes[i];
+        Expression node = nodes[i];
         bool thisIsBig = !_isSmallInitialization(node);
         if (i > 0) {
           atStatementBegin = false;
@@ -745,8 +754,7 @@
   bool _isSmallInitialization(Node node) {
     if (node is VariableInitialization) {
       if (node.value == null) return true;
-      Node value = _undefer(node.value);
-      if (value == null) return true;
+      Node value = _undefer(node.value!);
       if (value is This) return true;
       if (value is LiteralNull) return true;
       if (value is LiteralNumber) return true;
@@ -758,7 +766,7 @@
     return false;
   }
 
-  void _outputIncDec(String op, Expression variable, [Expression alias]) {
+  void _outputIncDec(String op, Expression variable, [Expression? alias]) {
     if (op == '+') {
       if (lastCharCode == charCodes.$PLUS) out(" ", isWhitespace: true);
       out('++');
@@ -777,24 +785,23 @@
     /// To print assignments like `a = a + 1` and `a = a + b` compactly as
     /// `++a` and `a += b` in the face of [DeferredExpression]s we detect the
     /// pattern of the undeferred assignment.
-    String op = assignment.op;
+    String? op = assignment.op;
     Node leftHandSide = _undefer(assignment.leftHandSide);
-    Node value = assignment.value;
-    Node rightHandSide = value == null ? value : _undefer(value);
+    Node rightHandSide = _undefer(assignment.value);
     if ((op == '+' || op == '-') &&
         leftHandSide is VariableUse &&
         rightHandSide is LiteralNumber &&
         rightHandSide.value == "1") {
       // Output 'a += 1' as '++a' and 'a -= 1' as '--a'.
-      _outputIncDec(op, assignment.leftHandSide);
+      _outputIncDec(op!, assignment.leftHandSide);
       return;
     }
     if (!assignment.isCompound &&
         leftHandSide is VariableUse &&
         rightHandSide is Binary) {
-      Node rLeft = _undefer(rightHandSide.left);
-      Node rRight = _undefer(rightHandSide.right);
-      String op = rightHandSide.op;
+      Expression rLeft = _undefer(rightHandSide.left);
+      Expression rRight = _undefer(rightHandSide.right);
+      String? op = rightHandSide.op;
       if (op == '+' ||
           op == '-' ||
           op == '/' ||
@@ -828,14 +835,13 @@
     }
     visitNestedExpression(assignment.leftHandSide, CALL,
         newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
-    if (value != null) {
-      spaceOut();
-      if (op != null) out(op);
-      out("=");
-      spaceOut();
-      visitNestedExpression(value, ASSIGNMENT,
-          newInForInit: inForInit, newAtStatementBegin: false);
-    }
+
+    spaceOut();
+    if (op != null) out(op);
+    out("=");
+    spaceOut();
+    visitNestedExpression(assignment.value, ASSIGNMENT,
+        newInForInit: inForInit, newAtStatementBegin: false);
   }
 
   @override
@@ -846,7 +852,7 @@
       spaceOut();
       out("=");
       spaceOut();
-      visitNestedExpression(initialization.value, ASSIGNMENT,
+      visitNestedExpression(initialization.value!, ASSIGNMENT,
           newInForInit: inForInit, newAtStatementBegin: false);
     }
   }
@@ -969,6 +975,8 @@
         rightPrecedenceRequirement = UNARY;
         break;
       default:
+        leftPrecedenceRequirement = EXPRESSION;
+        rightPrecedenceRequirement = EXPRESSION;
         context.error("Forgot operator: $op");
     }
 
@@ -1104,7 +1112,7 @@
     out(']');
   }
 
-  void _dotString(Node selector, Node receiver, String selectorValue,
+  void _dotString(Node selector, Expression receiver, String selectorValue,
       {bool assumeValid = false}) {
     if (assumeValid || isValidJavaScriptId(selectorValue)) {
       if (_undefer(receiver) is LiteralNumber &&
@@ -1127,41 +1135,41 @@
     VarCollector vars = VarCollector();
     vars.visitNamedFunction(namedFunction);
     startNode(namedFunction.function);
-    int closingPosition = currentNode.closingPosition =
+    int closingPosition = currentNode!.closingPosition =
         functionOut(namedFunction.function, namedFunction.name, vars);
     endNode(namedFunction.function);
     // Use closing position of `namedFunction.function` as the closing position
     // of the named function itself.
-    currentNode.closingPosition = closingPosition;
+    currentNode!.closingPosition = closingPosition;
   }
 
   @override
   void visitFun(Fun fun) {
     VarCollector vars = VarCollector();
     vars.visitFun(fun);
-    currentNode.closingPosition = functionOut(fun, null, vars);
+    currentNode!.closingPosition = functionOut(fun, null, vars);
   }
 
   @override
   void visitArrowFunction(ArrowFunction fun) {
     VarCollector vars = VarCollector();
     vars.visitArrowFunction(fun);
-    currentNode.closingPosition = arrowFunctionOut(fun, vars);
+    currentNode!.closingPosition = arrowFunctionOut(fun, vars);
   }
 
+  static bool _isIdentifierParameter(Node node) => node is VariableReference;
+
   int arrowFunctionOut(ArrowFunction fun, VarCollector vars) {
     // TODO: support static, get/set, async, and generators.
     localNamer.enterScope(vars);
     final List<Parameter> params = fun.params;
-    if (params.length == 1 && params.first is VariableReference) {
+    if (params.length == 1 && _isIdentifierParameter(params.first)) {
       visitNestedExpression(params.single, ASSIGNMENT,
           newInForInit: false, newAtStatementBegin: false);
     } else {
       out("(");
-      if (params != null) {
-        visitCommaSeparated(fun.params, PRIMARY,
-            newInForInit: false, newAtStatementBegin: false);
-      }
+      visitCommaSeparated(fun.params, PRIMARY,
+          newInForInit: false, newAtStatementBegin: false);
       out(")");
     }
     spaceOut();
@@ -1175,7 +1183,7 @@
     if (fun.implicitReturnAllowed && body is Block) {
       final statement = unwrapBlockIfSingleStatement(body);
       if (statement is Return) {
-        body = statement.value;
+        body = statement.value!;
       }
     }
     if (body is Block) {
@@ -1187,7 +1195,7 @@
       // https://tc39.github.io/ecma262/#sec-arrow-function-definitions
       bool needsParens = body is ObjectInitializer;
       if (needsParens) out("(");
-      visitNestedExpression(body, ASSIGNMENT,
+      visitNestedExpression(body as Expression, ASSIGNMENT,
           newInForInit: false, newAtStatementBegin: false);
       if (needsParens) out(")");
       closingPosition = _charCount;
@@ -1337,7 +1345,7 @@
     out("{");
     indentMore();
     for (int i = 0; i < properties.length; i++) {
-      Node value = properties[i].value;
+      Expression value = properties[i].value;
       if (isOneLiner && exitOneLinerMode(value)) isOneLiner = false;
       if (i != 0) {
         out(",");
@@ -1372,7 +1380,7 @@
     VarCollector vars = VarCollector();
     vars.visitMethodDefinition(node);
     startNode(node.function);
-    currentNode.closingPosition = methodOut(node, vars);
+    currentNode!.closingPosition = methodOut(node, vars);
     endNode(node.function);
   }
 
@@ -1381,10 +1389,8 @@
     Fun fun = node.function;
     localNamer.enterScope(vars);
     out("(");
-    if (fun.params != null) {
-      visitCommaSeparated(fun.params, PRIMARY,
-          newInForInit: false, newAtStatementBegin: false);
-    }
+    visitCommaSeparated(fun.params, PRIMARY,
+        newInForInit: false, newAtStatementBegin: false);
     out(")");
     spaceOut();
     int closingPosition =
@@ -1579,41 +1585,46 @@
   void collectVarsInFunction(FunctionExpression fun) {
     if (!nested) {
       nested = true;
-      if (fun.params != null) {
-        for (int i = 0; i < fun.params.length; i++) {
-          params.add(fun.params[i].name);
-        }
+      for (int i = 0; i < fun.params.length; i++) {
+        params.add(fun.params[i].name);
       }
       fun.body.accept(this);
       nested = false;
     }
   }
 
+  @override
   void visitFunctionDeclaration(FunctionDeclaration declaration) {
     // Note that we don't bother collecting the name of the function.
     collectVarsInFunction(declaration.function);
   }
 
+  @override
   void visitNamedFunction(NamedFunction namedFunction) {
     // Note that we don't bother collecting the name of the function.
     collectVarsInFunction(namedFunction.function);
   }
 
+  @override
   void visitMethodDefinition(MethodDefinition method) {
     // Note that we don't bother collecting the name of the function.
     collectVarsInFunction(method.function);
   }
 
+  @override
   void visitFun(Fun fun) {
     collectVarsInFunction(fun);
   }
 
+  @override
   void visitArrowFunction(ArrowFunction fun) {
     collectVarsInFunction(fun);
   }
 
+  @override
   void visitThis(This node) {}
 
+  @override
   void visitComment(Comment node) {
     if (node.comment.contains(disableVariableMinificationPattern)) {
       enableRenaming = false;
@@ -1622,6 +1633,7 @@
     }
   }
 
+  @override
   void visitVariableDeclaration(VariableDeclaration decl) {
     if (enableRenaming && decl.allowRename) vars.add(decl.name);
   }
@@ -1634,53 +1646,79 @@
 
   DanglingElseVisitor(this.context);
 
+  @override
   bool visitProgram(Program node) => false;
 
+  @override
   bool visitNode(Node node) {
     context.error("Forgot node: $node");
     return true;
   }
 
+  @override
   bool visitComment(Comment node) => true;
 
+  @override
   bool visitBlock(Block node) => false;
+  @override
   bool visitExpressionStatement(ExpressionStatement node) => false;
+  @override
   bool visitEmptyStatement(EmptyStatement node) => false;
+  @override
   bool visitDeferredStatement(DeferredStatement node) {
     return node.statement.accept(this);
   }
 
+  @override
   bool visitIf(If node) {
     if (!node.hasElse) return true;
     return node.otherwise.accept(this);
   }
 
+  @override
   bool visitFor(For node) => node.body.accept(this);
+  @override
   bool visitForIn(ForIn node) => node.body.accept(this);
+  @override
   bool visitWhile(While node) => node.body.accept(this);
+  @override
   bool visitDo(Do node) => false;
+  @override
   bool visitContinue(Continue node) => false;
+  @override
   bool visitBreak(Break node) => false;
+  @override
   bool visitReturn(Return node) => false;
+  @override
   bool visitThrow(Throw node) => false;
+  @override
   bool visitTry(Try node) {
     if (node.finallyPart != null) {
-      return node.finallyPart.accept(this);
+      return node.finallyPart!.accept(this);
     } else {
-      return node.catchPart.accept(this);
+      return node.catchPart!.accept(this);
     }
   }
 
+  @override
   bool visitCatch(Catch node) => node.body.accept(this);
+  @override
   bool visitSwitch(Switch node) => false;
+  @override
   bool visitCase(Case node) => false;
+  @override
   bool visitDefault(Default node) => false;
+  @override
   bool visitFunctionDeclaration(FunctionDeclaration node) => false;
+  @override
   bool visitLabeledStatement(LabeledStatement node) => node.body.accept(this);
+  @override
   bool visitLiteralStatement(LiteralStatement node) => true;
 
+  @override
   bool visitDartYield(DartYield node) => false;
 
+  @override
   bool visitExpression(Expression node) => false;
 }
 
@@ -1693,10 +1731,15 @@
 }
 
 class IdentityNamer implements LocalNamer {
+  @override
   String getName(String oldName) => oldName;
+  @override
   String declareVariable(String oldName) => oldName;
+  @override
   String declareParameter(String oldName) => oldName;
+  @override
   void enterScope(VarCollector vars) {}
+  @override
   void leaveScope() {}
 }
 
@@ -1709,6 +1752,7 @@
 
   MinifyRenamer();
 
+  @override
   void enterScope(VarCollector vars) {
     maps.add({});
     variableNumberStack.add(variableNumber);
@@ -1717,12 +1761,14 @@
     vars.forEachParam(declareParameter);
   }
 
+  @override
   void leaveScope() {
     maps.removeLast();
     variableNumber = variableNumberStack.removeLast();
     parameterNumber = parameterNumberStack.removeLast();
   }
 
+  @override
   String getName(String oldName) {
     // Go from inner scope to outer looking for mapping of name.
     for (int i = maps.length - 1; i >= 0; i--) {
@@ -1750,6 +1796,7 @@
   // that we give up trying to be nice to the compression algorithm and just
   // use the same namespace for arguments and variables, starting with A, and
   // moving on to a0, a1, etc.
+  @override
   String declareVariable(String oldName) {
     if (avoidRenaming(oldName)) return oldName;
     var newName;
@@ -1764,6 +1811,7 @@
     return newName;
   }
 
+  @override
   String declareParameter(String oldName) {
     if (avoidRenaming(oldName)) return oldName;
     var newName;
@@ -1823,30 +1871,28 @@
 
 /// Information pertaining the enter and exit callbacks for [node].
 class EnterExitNode {
-  final EnterExitNode parent;
+  final EnterExitNode? parent;
   final Node node;
 
-  int startPosition;
-  int closingPosition;
+  int? startPosition;
+  int? closingPosition;
 
   EnterExitNode(this.parent, this.node);
 
   void addToNode(JavaScriptPrintingContext context, int position) {
     if (startPosition == null) {
       // [position] is the start position of [node].
-      if (parent != null) {
-        // This might be the start position of the parent as well.
-        parent.addToNode(context, position);
-      }
+      // This might be the start position of the parent as well.
+      parent?.addToNode(context, position);
       startPosition = position;
       context.enterNode(node, position);
     }
   }
 
-  EnterExitNode exitNode(JavaScriptPrintingContext context, int position) {
+  EnterExitNode? exitNode(JavaScriptPrintingContext context, int position) {
     // Enter must happen before exit.
     addToNode(context, position);
-    context.exitNode(node, startPosition, position, closingPosition);
+    context.exitNode(node, startPosition!, position, closingPosition);
     return parent;
   }
 }
diff --git a/pkg/js_ast/lib/src/strings.dart b/pkg/js_ast/lib/src/strings.dart
index 91c2bae..871eea7 100644
--- a/pkg/js_ast/lib/src/strings.dart
+++ b/pkg/js_ast/lib/src/strings.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.15
+
 // Utilities for converting between JavaScript source-code Strings and the
 // String value they represent.
 
@@ -15,7 +17,7 @@
   /// [true] if contents require no escaping with the preferred quoting.
   final bool simple;
 
-  const StringToSourceKind({this.doubleQuotes, this.simple});
+  const StringToSourceKind({required this.doubleQuotes, required this.simple});
 
   String get quote => doubleQuotes ? '"' : "'";
 }
@@ -23,7 +25,7 @@
 class StringToSource {
   const StringToSource();
 
-  static StringToSourceKind analyze(String value, {/*required*/ bool utf8}) {
+  static StringToSourceKind analyze(String value, {required bool utf8}) {
     final ascii = !utf8;
     int singleQuotes = 0;
     int doubleQuotes = 0;
@@ -73,9 +75,9 @@
 
   static void writeString(
       StringBuffer sb, String string, StringToSourceKind kind,
-      {/*required*/ bool utf8}) {
+      {required bool utf8}) {
     for (int rune in string.runes) {
-      String escape = _irregularEscape(rune, kind.doubleQuotes);
+      String? escape = _irregularEscape(rune, kind.doubleQuotes);
       if (escape != null) {
         sb.write(escape);
         continue;
@@ -109,7 +111,7 @@
 
   static bool _isUnpairedSurrogate(int code) => (code & 0xFFFFF800) == 0xD800;
 
-  static String _irregularEscape(int code, bool useDoubleQuotes) {
+  static String? _irregularEscape(int code, bool useDoubleQuotes) {
     switch (code) {
       case charCodes.$SQ:
         return useDoubleQuotes ? r"'" : r"\'";
diff --git a/pkg/js_ast/lib/src/template.dart b/pkg/js_ast/lib/src/template.dart
index bdcf3c0..662ff13 100644
--- a/pkg/js_ast/lib/src/template.dart
+++ b/pkg/js_ast/lib/src/template.dart
@@ -2,7 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of js_ast;
+// @dart=2.15
+
+library js_ast.template;
+
+import 'nodes.dart';
 
 class TemplateManager {
   Map<String, Template> expressionTemplates = {};
@@ -10,7 +14,7 @@
 
   TemplateManager();
 
-  Template lookupExpressionTemplate(String source) {
+  Template? lookupExpressionTemplate(String source) {
     return expressionTemplates[source];
   }
 
@@ -21,7 +25,7 @@
     return template;
   }
 
-  Template lookupStatementTemplate(String source) {
+  Template? lookupStatementTemplate(String source) {
     return statementTemplates[source];
   }
 
@@ -34,70 +38,80 @@
 }
 
 /// A Template is created with JavaScript AST containing placeholders (interface
-/// InterpolatedNode).  The [instantiate] method creates an AST that looks like
-/// the original with the placeholders replaced by the arguments to
-/// [instantiate].
+/// InterpolatedNode).
+///
+/// The [instantiate] method creates an AST that looks like the original with
+/// the placeholders replaced by the arguments to [instantiate].
 class Template {
-  final String source;
+  final String? source;
   final bool isExpression;
   final bool forceCopy;
   final Node ast;
 
-  Instantiator instantiator;
+  final Instantiator instantiator;
 
-  int positionalArgumentCount = -1;
+  final int positionalArgumentCount;
 
-  // Null, unless there are named holes.
-  List<String> holeNames;
-  bool get isPositional => holeNames == null;
+  // Names of named holes, empty if there are no named holes.
+  final List<String> holeNames;
 
-  Template(this.source, this.ast,
-      {this.isExpression = true, this.forceCopy = false}) {
-    assert(this.isExpression ? ast is Expression : ast is Statement);
-    _compile();
+  bool get isPositional => holeNames.isEmpty;
+
+  Template._(this.source, this.ast,
+      {required this.instantiator,
+      required this.isExpression,
+      required this.forceCopy,
+      required this.positionalArgumentCount,
+      this.holeNames = const []});
+
+  factory Template(String? source, Node ast,
+      {bool isExpression = true, bool forceCopy = false}) {
+    assert(isExpression ? ast is Expression : ast is Statement);
+
+    final generator = InstantiatorGeneratorVisitor(forceCopy);
+    final instantiator = generator.compile(ast);
+    final positionalArgumentCount = generator.analysis.count;
+    final names = generator.analysis.holeNames;
+    final holeNames = names.toList(growable: false);
+
+    return Template._(source, ast,
+        instantiator: instantiator,
+        isExpression: isExpression,
+        forceCopy: forceCopy,
+        positionalArgumentCount: positionalArgumentCount,
+        holeNames: holeNames);
   }
 
-  Template.withExpressionResult(this.ast)
-      : source = null,
-        isExpression = true,
-        forceCopy = false {
-    assert(ast is Expression);
-    assert(_checkNoPlaceholders());
-    positionalArgumentCount = 0;
-    instantiator = (arguments) => ast;
+  factory Template.withExpressionResult(Expression ast) {
+    assert(_checkNoPlaceholders(ast));
+    return Template._(null, ast,
+        instantiator: (arguments) => ast,
+        isExpression: true,
+        forceCopy: false,
+        positionalArgumentCount: 0);
   }
 
-  Template.withStatementResult(this.ast)
-      : source = null,
-        isExpression = false,
-        forceCopy = false {
-    assert(ast is Statement);
-    assert(_checkNoPlaceholders());
-    positionalArgumentCount = 0;
-    instantiator = (arguments) => ast;
+  factory Template.withStatementResult(Statement ast) {
+    assert(_checkNoPlaceholders(ast));
+    return Template._(null, ast,
+        instantiator: (arguments) => ast,
+        isExpression: false,
+        forceCopy: false,
+        positionalArgumentCount: 0);
   }
 
-  bool _checkNoPlaceholders() {
+  static bool _checkNoPlaceholders(Node ast) {
     InstantiatorGeneratorVisitor generator =
         InstantiatorGeneratorVisitor(false);
     generator.compile(ast);
     return generator.analysis.count == 0;
   }
 
-  void _compile() {
-    InstantiatorGeneratorVisitor generator =
-        InstantiatorGeneratorVisitor(forceCopy);
-    instantiator = generator.compile(ast);
-    positionalArgumentCount = generator.analysis.count;
-    Set<String> names = generator.analysis.holeNames;
-    holeNames = names.toList(growable: false);
-  }
-
   /// Instantiates the template with the given [arguments].
   ///
   /// This method fills in the holes with the given arguments. The [arguments]
   /// must be either a [List] or a [Map].
-  Node instantiate(var arguments) {
+  Node instantiate(Object arguments) {
     if (arguments is List) {
       if (arguments.length != positionalArgumentCount) {
         throw 'Wrong number of template arguments, given ${arguments.length}, '
@@ -106,31 +120,35 @@
       }
       return instantiator(arguments);
     }
-    assert(arguments is Map);
-    if (holeNames.length < arguments.length) {
-      // This search is in O(n), but we only do it in case of an error, and the
-      // number of holes should be quite limited.
-      String unusedNames =
-          arguments.keys.where((name) => !holeNames.contains(name)).join(", ");
-      throw "Template arguments has unused mappings: $unusedNames";
+    if (arguments is Map) {
+      if (holeNames.length < arguments.length) {
+        // This search is in O(n), but we only do it in case of an error, and the
+        // number of holes should be quite limited.
+        String unusedNames = arguments.keys
+            .where((name) => !holeNames.contains(name))
+            .join(", ");
+        throw "Template arguments has unused mappings: $unusedNames";
+      }
+      if (!holeNames.every((String name) => arguments.containsKey(name))) {
+        String notFound =
+            holeNames.where((name) => !arguments.containsKey(name)).join(", ");
+        throw "Template arguments is missing mappings for: $notFound";
+      }
+      return instantiator(arguments);
     }
-    if (!holeNames.every((String name) => arguments.containsKey(name))) {
-      String notFound =
-          holeNames.where((name) => !arguments.containsKey(name)).join(", ");
-      throw "Template arguments is missing mappings for: $notFound";
-    }
-    return instantiator(arguments);
+    throw ArgumentError.value(arguments, 'arguments', 'Must be a List or Map');
   }
 }
 
 /// An Instantiator is a Function that generates a JS AST tree or List of
-/// trees. [arguments] is a List for positional templates, or Map for named
-/// templates.
+/// trees.
+///
+/// [arguments] is a List for positional templates, or Map for named templates.
 typedef Instantiator = /*Node|Iterable<Node>*/ Function(dynamic arguments);
 
-/// InstantiatorGeneratorVisitor compiles a template.  This class compiles a tree
-/// containing [InterpolatedNode]s into a function that will create a copy of the
-/// tree with the interpolated nodes substituted with provided values.
+/// InstantiatorGeneratorVisitor compiles a template.  This class compiles a
+/// tree containing [InterpolatedNode]s into a function that will create a copy
+/// of the tree with the interpolated nodes substituted with provided values.
 class InstantiatorGeneratorVisitor implements NodeVisitor<Instantiator> {
   final bool forceCopy;
 
@@ -145,12 +163,12 @@
     return result;
   }
 
-  static error(String message) {
+  static Never error(String message) {
     throw message;
   }
 
   static Instantiator same(Node node) => (arguments) => node;
-  static Node makeNull(arguments) => null;
+  static Null makeNull(arguments) => null;
 
   Instantiator visit(Node node) {
     if (forceCopy || analysis.containsInterpolatedNodes(node)) {
@@ -159,7 +177,7 @@
     return same(node);
   }
 
-  Instantiator visitNullable(Node node) {
+  Instantiator visitNullable(Node? node) {
     if (node == null) return makeNull;
     return visit(node);
   }
@@ -185,6 +203,7 @@
     return VariableDeclaration(value);
   }
 
+  @override
   Instantiator visitInterpolatedExpression(InterpolatedExpression node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
@@ -196,6 +215,7 @@
     };
   }
 
+  @override
   Instantiator visitInterpolatedDeclaration(InterpolatedDeclaration node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
@@ -226,6 +246,7 @@
     return visit(node);
   }
 
+  @override
   Instantiator visitInterpolatedLiteral(InterpolatedLiteral node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
@@ -235,6 +256,7 @@
     };
   }
 
+  @override
   Instantiator visitInterpolatedParameter(InterpolatedParameter node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
@@ -252,6 +274,7 @@
     };
   }
 
+  @override
   Instantiator visitInterpolatedSelector(InterpolatedSelector node) {
     // A selector is an expression, as in `a[selector]`.
     // A String argument converted into a LiteralString, so `a.#` with argument
@@ -266,6 +289,7 @@
     };
   }
 
+  @override
   Instantiator visitInterpolatedStatement(InterpolatedStatement node) {
     var nameOrPosition = node.nameOrPosition;
     return (arguments) {
@@ -295,50 +319,43 @@
     return visit(node);
   }
 
+  @override
   Instantiator visitProgram(Program node) {
     List<Instantiator> instantiators =
         node.body.map(visitSplayableStatement).toList();
     return (arguments) {
-      List<Statement> statements = [];
-      void add(node) {
-        if (node is EmptyStatement) return;
-        if (node is Iterable) {
-          statements.addAll(node);
-        } else {
-          statements.add(node.toStatement());
-        }
-      }
-
-      for (Instantiator instantiator in instantiators) {
-        add(instantiator(arguments));
-      }
-      return Program(statements);
+      return Program(splayStatements(instantiators, arguments));
     };
   }
 
+  List<Statement> splayStatements(List<Instantiator> instantiators, arguments) {
+    var statements = <Statement>[];
+    for (var instantiator in instantiators) {
+      final node = instantiator(arguments);
+      if (node is EmptyStatement) continue;
+      if (node is Iterable) {
+        statements.addAll(node as Iterable<Statement>);
+      } else if (node is Block /*&& !node.isScope*/) {
+        statements.addAll(node.statements);
+      } else if (node is Statement) {
+        statements.add(node);
+      } else {
+        error('Not splayable as statement: $node');
+      }
+    }
+    return statements;
+  }
+
+  @override
   Instantiator visitBlock(Block node) {
     List<Instantiator> instantiators =
         node.statements.map(visitSplayableStatement).toList();
     return (arguments) {
-      List<Statement> statements = [];
-      void add(node) {
-        if (node is EmptyStatement) return;
-        if (node is Iterable) {
-          statements.addAll(node);
-        } else if (node is Block) {
-          statements.addAll(node.statements);
-        } else {
-          statements.add(node.toStatement());
-        }
-      }
-
-      for (Instantiator instantiator in instantiators) {
-        add(instantiator(arguments));
-      }
-      return Block(statements);
+      return Block(splayStatements(instantiators, arguments));
     };
   }
 
+  @override
   Instantiator visitExpressionStatement(ExpressionStatement node) {
     Instantiator buildExpression = visit(node.expression);
     return (arguments) {
@@ -346,44 +363,41 @@
     };
   }
 
+  @override
   Instantiator visitEmptyStatement(EmptyStatement node) =>
       (arguments) => EmptyStatement();
 
+  @override
   Instantiator visitIf(If node) {
-    if (node.condition is InterpolatedExpression) {
-      return visitIfConditionalCompilation(node);
+    final condition = node.condition;
+    if (condition is InterpolatedExpression) {
+      return visitIfConditionalCompilation(node, condition);
     } else {
       return visitIfNormal(node);
     }
   }
 
-  Instantiator visitIfConditionalCompilation(If node) {
-    // Special version of visitInterpolatedExpression that permits bools.
-    compileCondition(InterpolatedExpression node) {
-      var nameOrPosition = node.nameOrPosition;
-      return (arguments) {
-        var value = arguments[nameOrPosition];
-        if (value is bool) return value;
-        if (value is Expression) return value;
-        if (value is String) return convertStringToVariableUse(value);
-        throw error('Interpolated value #$nameOrPosition '
-            'is not an Expression: $value');
-      };
-    }
-
-    var makeCondition = compileCondition(node.condition);
+  Instantiator visitIfConditionalCompilation(
+      If node, InterpolatedExpression condition) {
+    final nameOrPosition = condition.nameOrPosition;
     Instantiator makeThen = visit(node.then);
     Instantiator makeOtherwise = visit(node.otherwise);
     return (arguments) {
-      var condition = makeCondition(arguments);
-      if (condition is bool) {
-        if (condition == true) {
-          return makeThen(arguments);
-        } else {
-          return makeOtherwise(arguments);
-        }
+      // Allow booleans to be used for conditional compilation.
+      var value = arguments[nameOrPosition];
+      if (value is bool) {
+        return value ? makeThen(arguments) : makeOtherwise(arguments);
       }
-      return If(condition, makeThen(arguments), makeOtherwise(arguments));
+      Expression newCondition;
+      if (value is Expression) {
+        newCondition = value;
+      } else if (value is String) {
+        newCondition = convertStringToVariableUse(value);
+      } else {
+        error('Interpolated value #$nameOrPosition '
+            'is not an Expression: $value');
+      }
+      return If(newCondition, makeThen(arguments), makeOtherwise(arguments));
     };
   }
 
@@ -397,6 +411,7 @@
     };
   }
 
+  @override
   Instantiator visitFor(For node) {
     Instantiator makeInit = visitNullable(node.init);
     Instantiator makeCondition = visitNullable(node.condition);
@@ -408,6 +423,7 @@
     };
   }
 
+  @override
   Instantiator visitForIn(ForIn node) {
     Instantiator makeLeftHandSide = visit(node.leftHandSide);
     Instantiator makeObject = visit(node.object);
@@ -422,6 +438,7 @@
     throw UnimplementedError('$this.$name');
   }
 
+  @override
   Instantiator visitWhile(While node) {
     Instantiator makeCondition = visit(node.condition);
     Instantiator makeBody = visit(node.body);
@@ -430,6 +447,7 @@
     };
   }
 
+  @override
   Instantiator visitDo(Do node) {
     Instantiator makeBody = visit(node.body);
     Instantiator makeCondition = visit(node.condition);
@@ -438,26 +456,32 @@
     };
   }
 
+  @override
   Instantiator visitContinue(Continue node) =>
       (arguments) => Continue(node.targetLabel);
 
+  @override
   Instantiator visitBreak(Break node) => (arguments) => Break(node.targetLabel);
 
+  @override
   Instantiator visitReturn(Return node) {
     Instantiator makeExpression = visitNullable(node.value);
     return (arguments) => Return(makeExpression(arguments));
   }
 
+  @override
   Instantiator visitDartYield(DartYield node) {
     Instantiator makeExpression = visit(node.expression);
     return (arguments) => DartYield(makeExpression(arguments), node.hasStar);
   }
 
+  @override
   Instantiator visitThrow(Throw node) {
     Instantiator makeExpression = visit(node.expression);
     return (arguments) => Throw(makeExpression(arguments));
   }
 
+  @override
   Instantiator visitTry(Try node) {
     Instantiator makeBody = visit(node.body);
     Instantiator makeCatch = visitNullable(node.catchPart);
@@ -466,6 +490,7 @@
         Try(makeBody(arguments), makeCatch(arguments), makeFinally(arguments));
   }
 
+  @override
   Instantiator visitCatch(Catch node) {
     Instantiator makeDeclaration = visit(node.declaration);
     Instantiator makeBody = visit(node.body);
@@ -473,6 +498,7 @@
         Catch(makeDeclaration(arguments), makeBody(arguments));
   }
 
+  @override
   Instantiator visitSwitch(Switch node) {
     Instantiator makeKey = visit(node.key);
     Iterable<Instantiator> makeCases = node.cases.map(visit);
@@ -485,6 +511,7 @@
     };
   }
 
+  @override
   Instantiator visitCase(Case node) {
     Instantiator makeExpression = visit(node.expression);
     Instantiator makeBody = visit(node.body);
@@ -493,6 +520,7 @@
     };
   }
 
+  @override
   Instantiator visitDefault(Default node) {
     Instantiator makeBody = visit(node.body);
     return (arguments) {
@@ -500,6 +528,7 @@
     };
   }
 
+  @override
   Instantiator visitFunctionDeclaration(FunctionDeclaration node) {
     Instantiator makeName = visit(node.name);
     Instantiator makeFunction = visit(node.function);
@@ -507,16 +536,20 @@
         FunctionDeclaration(makeName(arguments), makeFunction(arguments));
   }
 
+  @override
   Instantiator visitLabeledStatement(LabeledStatement node) {
     Instantiator makeBody = visit(node.body);
     return (arguments) => LabeledStatement(node.label, makeBody(arguments));
   }
 
+  @override
   Instantiator visitLiteralStatement(LiteralStatement node) =>
       TODO('visitLiteralStatement');
+  @override
   Instantiator visitLiteralExpression(LiteralExpression node) =>
       TODO('visitLiteralExpression');
 
+  @override
   Instantiator visitVariableDeclarationList(VariableDeclarationList node) {
     List<Instantiator> declarationMakers =
         node.declarations.map(visit).toList();
@@ -530,16 +563,18 @@
     };
   }
 
+  @override
   Instantiator visitAssignment(Assignment node) {
     Instantiator makeLeftHandSide = visit(node.leftHandSide);
-    String op = node.op;
-    Instantiator makeValue = visitNullable(node.value);
+    String? op = node.op;
+    Instantiator makeValue = visit(node.value);
     return (arguments) {
       return Assignment.compound(
           makeLeftHandSide(arguments), op, makeValue(arguments));
     };
   }
 
+  @override
   Instantiator visitVariableInitialization(VariableInitialization node) {
     Instantiator makeDeclaration = visit(node.declaration);
     Instantiator makeValue = visitNullable(node.value);
@@ -549,6 +584,7 @@
     };
   }
 
+  @override
   Instantiator visitConditional(Conditional cond) {
     Instantiator makeCondition = visit(cond.condition);
     Instantiator makeThen = visit(cond.then);
@@ -557,9 +593,11 @@
         makeThen(arguments), makeOtherwise(arguments));
   }
 
+  @override
   Instantiator visitNew(New node) =>
       handleCallOrNew(node, (target, arguments) => New(target, arguments));
 
+  @override
   Instantiator visitCall(Call node) =>
       handleCallOrNew(node, (target, arguments) => Call(target, arguments));
 
@@ -572,19 +610,12 @@
     // copying.
     return (arguments) {
       Node target = makeTarget(arguments);
-      List<Expression> callArguments = [];
-      for (Instantiator instantiator in argumentMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          callArguments.addAll(result);
-        } else {
-          callArguments.add(result);
-        }
-      }
+      List<Expression> callArguments = splay(argumentMakers, arguments);
       return finish(target, callArguments.toList(growable: false));
     };
   }
 
+  @override
   Instantiator visitBinary(Binary node) {
     Instantiator makeLeft = visit(node.left);
     Instantiator makeRight = visit(node.right);
@@ -592,29 +623,36 @@
     return (arguments) => Binary(op, makeLeft(arguments), makeRight(arguments));
   }
 
+  @override
   Instantiator visitPrefix(Prefix node) {
     Instantiator makeOperand = visit(node.argument);
     String op = node.op;
     return (arguments) => Prefix(op, makeOperand(arguments));
   }
 
+  @override
   Instantiator visitPostfix(Postfix node) {
     Instantiator makeOperand = visit(node.argument);
     String op = node.op;
     return (arguments) => Postfix(op, makeOperand(arguments));
   }
 
+  @override
   Instantiator visitVariableUse(VariableUse node) =>
       (arguments) => VariableUse(node.name);
 
+  @override
   Instantiator visitThis(This node) => (arguments) => This();
 
+  @override
   Instantiator visitVariableDeclaration(VariableDeclaration node) =>
       (arguments) => VariableDeclaration(node.name);
 
+  @override
   Instantiator visitParameter(Parameter node) =>
       (arguments) => Parameter(node.name);
 
+  @override
   Instantiator visitAccess(PropertyAccess node) {
     Instantiator makeReceiver = visit(node.receiver);
     Instantiator makeSelector = visit(node.selector);
@@ -622,6 +660,7 @@
         PropertyAccess(makeReceiver(arguments), makeSelector(arguments));
   }
 
+  @override
   Instantiator visitNamedFunction(NamedFunction node) {
     Instantiator makeDeclaration = visit(node.name);
     Instantiator makeFunction = visit(node.function);
@@ -629,78 +668,97 @@
         NamedFunction(makeDeclaration(arguments), makeFunction(arguments));
   }
 
+  @override
   Instantiator visitFun(Fun node) {
     List<Instantiator> paramMakers = node.params.map(visitSplayable).toList();
     Instantiator makeBody = visit(node.body);
     // TODO(sra): Avoid copying params if no interpolation or forced copying.
     return (arguments) {
-      List<Parameter> params = [];
-      for (Instantiator instantiator in paramMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          params.addAll(result);
-        } else {
-          params.add(result);
-        }
-      }
-      Statement body = makeBody(arguments);
+      List<Parameter> params = splayParameters(paramMakers, arguments);
+      Block body = makeBody(arguments);
       return Fun(params, body);
     };
   }
 
+  @override
   Instantiator visitArrowFunction(ArrowFunction node) {
     List<Instantiator> paramMakers = node.params.map(visitSplayable).toList();
     Instantiator makeBody = visit(node.body);
     // TODO(sra): Avoid copying params if no interpolation or forced copying.
     return (arguments) {
-      List<Parameter> params = [];
-      for (Instantiator instantiator in paramMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          params.addAll(result);
-        } else {
-          params.add(result);
-        }
-      }
+      List<Parameter> params = splayParameters(paramMakers, arguments);
       // Either a Block or Expression.
       Node body = makeBody(arguments);
       return ArrowFunction(params, body);
     };
   }
 
+  List<Parameter> splayParameters(List<Instantiator> instantiators, arguments) {
+    // TODO(sra): This will be different when parameters include destructuring
+    // and default values.
+    return splay<Parameter>(instantiators, arguments);
+  }
+
+  List<T> splay<T>(Iterable<Instantiator> instantiators, arguments) {
+    List<T> results = [];
+    for (Instantiator instantiator in instantiators) {
+      var result = instantiator(arguments);
+      if (result is Iterable) {
+        for (final item in result) {
+          results.add(item as T);
+        }
+      } else {
+        results.add(result as T);
+      }
+    }
+    return results;
+  }
+
+  @override
   Instantiator visitDeferredExpression(DeferredExpression node) => same(node);
 
+  @override
   Instantiator visitDeferredStatement(DeferredStatement node) => same(node);
 
+  @override
   Instantiator visitDeferredNumber(DeferredNumber node) => same(node);
 
+  @override
   Instantiator visitDeferredString(DeferredString node) => (arguments) => node;
 
+  @override
   Instantiator visitLiteralBool(LiteralBool node) =>
       (arguments) => LiteralBool(node.value);
 
+  @override
   Instantiator visitLiteralString(LiteralString node) =>
       (arguments) => LiteralString(node.value);
 
+  @override
   Instantiator visitLiteralNumber(LiteralNumber node) =>
       (arguments) => LiteralNumber(node.value);
 
+  @override
   Instantiator visitLiteralNull(LiteralNull node) =>
       (arguments) => LiteralNull();
 
+  @override
   Instantiator visitStringConcatenation(StringConcatenation node) {
     List<Instantiator> partMakers =
         node.parts.map(visit).toList(growable: false);
     return (arguments) {
-      List<Literal> parts = partMakers
-          .map((Instantiator instantiator) => instantiator(arguments))
-          .toList(growable: false);
+      List<Literal> parts = [
+        for (final instantiator in partMakers)
+          instantiator(arguments) as Literal
+      ];
       return StringConcatenation(parts);
     };
   }
 
+  @override
   Instantiator visitName(Name node) => same(node);
 
+  @override
   Instantiator visitParentheses(Parentheses node) {
     Instantiator makeEnclosed = visit(node.enclosed);
     return (arguments) {
@@ -709,6 +767,7 @@
     };
   }
 
+  @override
   Instantiator visitArrayInitializer(ArrayInitializer node) {
     // TODO(sra): Implement splicing?
     List<Instantiator> elementMakers =
@@ -722,28 +781,23 @@
     };
   }
 
+  @override
   Instantiator visitArrayHole(ArrayHole node) {
     return (arguments) => ArrayHole();
   }
 
+  @override
   Instantiator visitObjectInitializer(ObjectInitializer node) {
     List<Instantiator> propertyMakers =
         node.properties.map(visitSplayable).toList();
     bool isOneLiner = node.isOneLiner;
     return (arguments) {
-      List<Property> properties = [];
-      for (Instantiator instantiator in propertyMakers) {
-        var result = instantiator(arguments);
-        if (result is Iterable) {
-          properties.addAll(result);
-        } else {
-          properties.add(result);
-        }
-      }
+      List<Property> properties = splay(propertyMakers, arguments);
       return ObjectInitializer(properties, isOneLiner: isOneLiner);
     };
   }
 
+  @override
   Instantiator visitProperty(Property node) {
     Instantiator makeName = visit(node.name);
     Instantiator makeValue = visit(node.value);
@@ -752,6 +806,7 @@
     };
   }
 
+  @override
   Instantiator visitMethodDefinition(MethodDefinition node) {
     Instantiator makeName = visit(node.name);
     Instantiator makeFunction = visit(node.function);
@@ -760,11 +815,14 @@
     };
   }
 
+  @override
   Instantiator visitRegExpLiteral(RegExpLiteral node) =>
       (arguments) => RegExpLiteral(node.pattern);
 
+  @override
   Instantiator visitComment(Comment node) => TODO('visitComment');
 
+  @override
   Instantiator visitAwait(Await node) {
     Instantiator makeExpression = visit(node.expression);
     return (arguments) {
@@ -789,12 +847,14 @@
     node.accept(this);
   }
 
+  @override
   void visitNode(Node node) {
     int before = count;
     node.visitChildren(this);
     if (count != before) containsInterpolatedNode.add(node);
   }
 
+  @override
   visitInterpolatedNode(InterpolatedNode node) {
     containsInterpolatedNode.add(node);
     if (node.isNamed) holeNames.add(node.nameOrPosition);
diff --git a/pkg/js_ast/test/deferred_expression_test.dart b/pkg/js_ast/test/deferred_expression_test.dart
index 29fc4d1..6415b7ed 100644
--- a/pkg/js_ast/test/deferred_expression_test.dart
+++ b/pkg/js_ast/test/deferred_expression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.10
+
 import 'package:expect/expect.dart';
 import 'package:js_ast/js_ast.dart';
 
@@ -112,6 +114,7 @@
 }
 
 class _DeferredExpression extends DeferredExpression {
+  @override
   final Expression value;
 
   _DeferredExpression(this.value);
@@ -162,11 +165,13 @@
 
   _Position(this.startPosition, this.endPosition, this.closingPosition);
 
+  @override
   int get hashCode =>
       13 * startPosition.hashCode +
       17 * endPosition.hashCode +
       19 * closingPosition.hashCode;
 
+  @override
   bool operator ==(Object other) {
     if (identical(this, other)) return true;
     return other is _Position &&
@@ -175,6 +180,7 @@
         closingPosition == other.closingPosition;
   }
 
+  @override
   String toString() {
     return '_Position(start=$startPosition,'
         'end=$endPosition,closing=$closingPosition)';
diff --git a/pkg/js_ast/test/deferred_statement_test.dart b/pkg/js_ast/test/deferred_statement_test.dart
index 9628cdf..9bba39a 100644
--- a/pkg/js_ast/test/deferred_statement_test.dart
+++ b/pkg/js_ast/test/deferred_statement_test.dart
@@ -2,10 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.10
+
 import 'package:expect/expect.dart';
 import 'package:js_ast/js_ast.dart';
 
 class _DeferredStatement extends DeferredStatement {
+  @override
   final Statement statement;
 
   _DeferredStatement(this.statement);
diff --git a/pkg/js_ast/test/printer_callback_test.dart b/pkg/js_ast/test/printer_callback_test.dart
index a54ddbc..cfd56b9 100644
--- a/pkg/js_ast/test/printer_callback_test.dart
+++ b/pkg/js_ast/test/printer_callback_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.10
+
 // Note: This test relies on LF line endings in the source file.
 
 // Test that JS printer callbacks occur when expected.
@@ -166,7 +168,9 @@
 ];
 
 class FixedName extends Name {
+  @override
   final String name;
+  @override
   String get key => name;
 
   FixedName(this.name);
@@ -207,6 +211,7 @@
 
   String tag(int value) => '@$value';
 
+  @override
   void enterNode(Node node, int startPosition) {
     int value = id(node);
     if (mode == TestMode.ENTER) {
@@ -214,6 +219,7 @@
     }
   }
 
+  @override
   void exitNode(
       Node node, int startPosition, int endPosition, int delimiterPosition) {
     int value = id(node);
@@ -224,6 +230,7 @@
     }
   }
 
+  @override
   String getText() {
     String text = super.getText();
     int offset = 0;
diff --git a/pkg/js_ast/test/string_escape_test.dart b/pkg/js_ast/test/string_escape_test.dart
index 78bc758..1b0ce74 100644
--- a/pkg/js_ast/test/string_escape_test.dart
+++ b/pkg/js_ast/test/string_escape_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.10
+
 library js_ast.string_escape_test;
 
 import 'package:js_ast/js_ast.dart';
diff --git a/pkg/kernel/bin/dump.dart b/pkg/kernel/bin/dump.dart
index 0f901a2..6ef167a 100755
--- a/pkg/kernel/bin/dump.dart
+++ b/pkg/kernel/bin/dump.dart
@@ -3,30 +3,4 @@
 // 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:io';
-
-import 'package:kernel/kernel.dart';
-import 'package:kernel/src/tool/command_line_util.dart';
-
-void usage() {
-  print("Prints a dill file as a textual format.");
-  print("");
-  print("Usage: dart <script> dillFile.dill [output]");
-  print("");
-  print("The first given argument should be an existing file");
-  print("that is valid to load as a dill file.");
-  print("");
-  print("The second argument is optional.");
-  print("If given, output will be written to this file.");
-  print("If not given, output will be written to standard out.");
-  exit(1);
-}
-
-void main(List<String> args) {
-  CommandLineHelper.requireVariableArgumentCount([1, 2], args, usage);
-  CommandLineHelper.requireFileExists(args[0]);
-  var binary = CommandLineHelper.tryLoadDill(args[0]);
-  writeComponentToText(binary,
-      path: args.length > 1 ? args[1] : null,
-      showOffsets: const bool.fromEnvironment("showOffsets"));
-}
+export 'package:kernel/src/tool/dump.dart';
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 3df728f..b3f1a41 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 76;
+  UInt32 formatVersion = 77;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -288,9 +288,6 @@
   List<Expression> annotations;
   List<TypeParameter> typeParameters;
   DartType type;
-  List<TypeParameter> typeParametersOfFunctionType;
-  List<VariableDeclarationPlain> positionalParameters;
-  List<VariableDeclarationPlain> namedParameters;
 }
 
 type Combinator {
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index cbf0d44..c98194e 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -840,14 +840,6 @@
   // TODO(johnniwinther): Make this non-nullable.
   DartType? type;
 
-  // The following fields describe parameters of the underlying type when
-  // that is a function type.  They are needed to keep such attributes as names
-  // and annotations. When the underlying type is not a function type, they are
-  // empty.
-  final List<TypeParameter> typeParametersOfFunctionType;
-  final List<VariableDeclaration> positionalParameters;
-  final List<VariableDeclaration> namedParameters;
-
   Typedef(this.name, this.type,
       {Reference? reference,
       required this.fileUri,
@@ -858,16 +850,8 @@
       // ignore: unnecessary_null_comparison
       : assert(fileUri != null),
         this.typeParameters = typeParameters ?? <TypeParameter>[],
-        this.typeParametersOfFunctionType =
-            typeParametersOfFunctionType ?? <TypeParameter>[],
-        this.positionalParameters =
-            positionalParameters ?? <VariableDeclaration>[],
-        this.namedParameters = namedParameters ?? <VariableDeclaration>[],
         super(reference) {
     setParents(this.typeParameters, this);
-    setParents(this.typeParametersOfFunctionType, this);
-    setParents(this.positionalParameters, this);
-    setParents(this.namedParameters, this);
   }
 
   Library get enclosingLibrary => parent as Library;
@@ -883,9 +867,6 @@
     visitList(annotations, v);
     visitList(typeParameters, v);
     type?.accept(v);
-    visitList(typeParametersOfFunctionType, v);
-    visitList(positionalParameters, v);
-    visitList(namedParameters, v);
   }
 
   @override
@@ -895,9 +876,6 @@
     if (type != null) {
       type = v.visitDartType(type!);
     }
-    v.transformList(typeParametersOfFunctionType, this);
-    v.transformList(positionalParameters, this);
-    v.transformList(namedParameters, this);
   }
 
   @override
@@ -912,9 +890,6 @@
         type = newType;
       }
     }
-    v.transformTypeParameterList(typeParametersOfFunctionType, this);
-    v.transformVariableDeclarationList(positionalParameters, this);
-    v.transformVariableDeclarationList(namedParameters, this);
   }
 
   @override
@@ -3673,6 +3648,10 @@
   /// here the return types are `Future<Foo>` and `FutureOr<Foo>` for `method1`
   /// and `method2`, respectively, but the future value type is in both cases
   /// `Foo`.
+  ///
+  /// For pre-nnbd libraries, this is set to `flatten(T)` of the return type
+  /// `T`, which can be seen as the pre-nnbd equivalent of the future value
+  /// type.
   DartType? futureValueType;
 
   void Function()? lazyBuilder;
@@ -11199,8 +11178,7 @@
   @override
   final Nullability declaredNullability;
 
-  /// The [Typedef] this function type is created for.
-  final TypedefType? typedefType;
+  TypedefType? _typedefType;
 
   final DartType returnType;
 
@@ -11212,15 +11190,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/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index e067807..8952e40 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1340,13 +1340,6 @@
     node.annotations = readAnnotationList(node);
     readAndPushTypeParameterList(node.typeParameters, node);
     DartType type = readDartType();
-    readAndPushTypeParameterList(node.typeParametersOfFunctionType, node);
-    node.positionalParameters.clear();
-    node.positionalParameters.addAll(readAndPushVariableDeclarationList());
-    setParents(node.positionalParameters, node);
-    node.namedParameters.clear();
-    node.namedParameters.addAll(readAndPushVariableDeclarationList());
-    setParents(node.namedParameters, node);
     typeParameterStack.length = 0;
     variableStack.length = 0;
     node.fileOffset = fileOffset;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index dc9ece8..c048177 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1166,12 +1166,6 @@
     writeNodeList(node.typeParameters);
     writeNode(node.type!);
 
-    enterScope(typeParameters: node.typeParametersOfFunctionType);
-    writeNodeList(node.typeParametersOfFunctionType);
-    writeVariableDeclarationList(node.positionalParameters);
-    writeVariableDeclarationList(node.namedParameters);
-
-    leaveScope(typeParameters: node.typeParametersOfFunctionType);
     leaveScope(typeParameters: node.typeParameters, variableScope: true);
     leaveScope(memberScope: true);
   }
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index a8a29ff..39dbd8c 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -176,7 +176,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 76;
+  static const int BinaryFormatVersion = 77;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 43d7c32..c69fe09 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -594,6 +594,8 @@
     List<VariableDeclaration> positional =
         node.positionalParameters.map(clone).toList();
     List<VariableDeclaration> named = node.namedParameters.map(clone).toList();
+    final DartType? futureValueType =
+        node.futureValueType != null ? visitType(node.futureValueType!) : null;
     return new FunctionNode(cloneFunctionNodeBody(node),
         typeParameters: typeParameters,
         positionalParameters: positional,
@@ -601,7 +603,8 @@
         requiredParameterCount: node.requiredParameterCount,
         returnType: visitType(node.returnType),
         asyncMarker: node.asyncMarker,
-        dartAsyncMarker: node.dartAsyncMarker)
+        dartAsyncMarker: node.dartAsyncMarker,
+        futureValueType: futureValueType)
       ..fileEndOffset = _cloneFileOffset(node.fileEndOffset);
   }
 
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index 9e8ae3f..3f11abc 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -1436,15 +1436,6 @@
     if (!checkTypedef_type(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
-    if (!checkTypedef_typeParametersOfFunctionType(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkTypedef_positionalParameters(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkTypedef_namedParameters(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkTypedef_reference(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4634,30 +4625,6 @@
     return visitor.checkNodes(node.type, other.type, 'type');
   }
 
-  bool checkTypedef_typeParametersOfFunctionType(
-      EquivalenceVisitor visitor, Typedef node, Typedef other) {
-    return visitor.checkLists(
-        node.typeParametersOfFunctionType,
-        other.typeParametersOfFunctionType,
-        visitor.checkDeclarations,
-        'typeParametersOfFunctionType');
-  }
-
-  bool checkTypedef_positionalParameters(
-      EquivalenceVisitor visitor, Typedef node, Typedef other) {
-    return visitor.checkLists(
-        node.positionalParameters,
-        other.positionalParameters,
-        visitor.checkDeclarations,
-        'positionalParameters');
-  }
-
-  bool checkTypedef_namedParameters(
-      EquivalenceVisitor visitor, Typedef node, Typedef other) {
-    return visitor.checkLists(node.namedParameters, other.namedParameters,
-        visitor.checkDeclarations, 'namedParameters');
-  }
-
   bool checkTypedef_reference(
       EquivalenceVisitor visitor, Typedef node, Typedef other) {
     return checkNamedNode_reference(visitor, node, other);
diff --git a/pkg/kernel/lib/src/standard_bounds.dart b/pkg/kernel/lib/src/standard_bounds.dart
index 9dc32175..6da56b3 100644
--- a/pkg/kernel/lib/src/standard_bounds.dart
+++ b/pkg/kernel/lib/src/standard_bounds.dart
@@ -1223,12 +1223,12 @@
       //     where B1a is the greatest closure of B1 with respect to X1,
       //     as defined in [inference.md].
       if (isSubtypeOf(type1, type2, SubtypeCheckMode.withNullabilities)) {
-        return type2.withDeclaredNullability(uniteNullabilities(
-            type1.declaredNullability, type2.declaredNullability));
+        return type2.withDeclaredNullability(
+            uniteNullabilities(type1.declaredNullability, type2.nullability));
       }
       if (isSubtypeOf(type2, type1, SubtypeCheckMode.withNullabilities)) {
-        return type1.withDeclaredNullability(uniteNullabilities(
-            type1.declaredNullability, type2.declaredNullability));
+        return type1.withDeclaredNullability(
+            uniteNullabilities(type1.declaredNullability, type2.nullability));
       }
       NullabilityAwareTypeVariableEliminator eliminator =
           new NullabilityAwareTypeVariableEliminator(
@@ -1244,7 +1244,7 @@
           .withDeclaredNullability(uniteNullabilities(
               type1.declaredNullability,
               uniteNullabilities(type1.parameter.bound.declaredNullability,
-                  type2.declaredNullability)));
+                  type2.nullability)));
     } else {
       // UP(X1 & B1, T2) =
       //   T2 if X1 <: T2
@@ -1274,8 +1274,7 @@
               type2,
               clientLibrary)
           .withDeclaredNullability(uniteNullabilities(
-              type1.promotedBound!.declaredNullability,
-              type2.declaredNullability));
+              type1.promotedBound!.declaredNullability, type2.nullability));
     }
   }
 
diff --git a/pkg/kernel/lib/src/tool/dump.dart b/pkg/kernel/lib/src/tool/dump.dart
new file mode 100644
index 0000000..dff0851
--- /dev/null
+++ b/pkg/kernel/lib/src/tool/dump.dart
@@ -0,0 +1,31 @@
+// 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:io';
+
+import '../../kernel.dart';
+import 'command_line_util.dart';
+
+void usage() {
+  print("Prints a dill file as a textual format.");
+  print("");
+  print("Usage: dart <script> dillFile.dill [output]");
+  print("");
+  print("The first given argument should be an existing file");
+  print("that is valid to load as a dill file.");
+  print("");
+  print("The second argument is optional.");
+  print("If given, output will be written to this file.");
+  print("If not given, output will be written to standard out.");
+  exit(1);
+}
+
+void main(List<String> args) {
+  CommandLineHelper.requireVariableArgumentCount([1, 2], args, usage);
+  CommandLineHelper.requireFileExists(args[0]);
+  Component binary = CommandLineHelper.tryLoadDill(args[0]);
+  writeComponentToText(binary,
+      path: args.length > 1 ? args[1] : null,
+      showOffsets: const bool.fromEnvironment("showOffsets"));
+}
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index 330d683..4fcb938 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -372,7 +372,8 @@
       (importer.isScheme("package") &&
           importer.path.startsWith("dart_internal/"));
 
-  /// Whether the `native` language extension is supported within [library].
+  /// Whether the `native` language extension is supported within the library
+  /// with the given import [uri].
   ///
   /// The `native` language extension is not part of the language specification,
   /// it means something else to each target, and it is enabled under different
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 7f0ce5d..46969af 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -787,6 +787,11 @@
     if (function.asyncMarker != AsyncMarker.Sync) {
       writeSpaced(getAsyncMarkerKeyword(function.asyncMarker));
     }
+    if (function.futureValueType != null) {
+      writeSpaced("/* futureValueType=");
+      writeNode(function.futureValueType);
+      writeSpaced("*/");
+    }
     if (function.dartAsyncMarker != AsyncMarker.Sync &&
         function.dartAsyncMarker != function.asyncMarker) {
       writeSpaced("/* originally");
@@ -848,9 +853,7 @@
     }
   }
 
-  void writeFunctionType(FunctionType node,
-      {List<VariableDeclaration>? typedefPositional,
-      List<VariableDeclaration>? typedefNamed}) {
+  void writeFunctionType(FunctionType node) {
     if (state == WORD) {
       ensureSpace();
     }
@@ -858,38 +861,14 @@
     writeSymbol('(');
     List<DartType> positional = node.positionalParameters;
 
-    bool parametersAnnotated = false;
-    if (typedefPositional != null) {
-      for (VariableDeclaration formal in typedefPositional) {
-        parametersAnnotated =
-            parametersAnnotated || formal.annotations.length > 0;
-      }
-    }
-    if (typedefNamed != null) {
-      for (VariableDeclaration formal in typedefNamed) {
-        parametersAnnotated =
-            parametersAnnotated || formal.annotations.length > 0;
-      }
-    }
-
-    if (parametersAnnotated && typedefPositional != null) {
-      writeList(typedefPositional.take(node.requiredParameterCount),
-          writeVariableDeclaration);
-    } else {
-      writeList(positional.take(node.requiredParameterCount), writeType);
-    }
+    writeList(positional.take(node.requiredParameterCount), writeType);
 
     if (node.requiredParameterCount < positional.length) {
       if (node.requiredParameterCount > 0) {
         writeComma();
       }
       writeSymbol('[');
-      if (parametersAnnotated && typedefPositional != null) {
-        writeList(typedefPositional.skip(node.requiredParameterCount),
-            writeVariableDeclaration);
-      } else {
-        writeList(positional.skip(node.requiredParameterCount), writeType);
-      }
+      writeList(positional.skip(node.requiredParameterCount), writeType);
       writeSymbol(']');
     }
     if (node.namedParameters.isNotEmpty) {
@@ -897,11 +876,7 @@
         writeComma();
       }
       writeSymbol('{');
-      if (parametersAnnotated && typedefNamed != null) {
-        writeList(typedefNamed, writeVariableDeclaration);
-      } else {
-        writeList(node.namedParameters, visitNamedType);
-      }
+      writeList(node.namedParameters, visitNamedType);
       writeSymbol('}');
     }
     writeSymbol(')');
@@ -1478,9 +1453,7 @@
     writeSpaced('=');
     DartType? type = node.type;
     if (type is FunctionType) {
-      writeFunctionType(type,
-          typedefPositional: node.positionalParameters,
-          typedefNamed: node.namedParameters);
+      writeFunctionType(type);
     } else {
       writeNode(type);
     }
@@ -1989,6 +1962,7 @@
 
   @override
   void visitLibraryDependency(LibraryDependency node) {
+    writeAnnotationList(node.annotations);
     writeIndentation();
     writeWord(node.isImport ? 'import' : 'export');
     String uriString;
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 051bc3a..d9f95f6 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -282,8 +282,7 @@
     assert(state == null);
     typedefState[node] = TypedefState.BeingChecked;
     Set<TypeParameter> savedTypeParameters = typeParametersInScope;
-    typeParametersInScope = node.typeParameters.toSet()
-      ..addAll(node.typeParametersOfFunctionType);
+    typeParametersInScope = node.typeParameters.toSet();
     TreeNode? savedParent = currentParent;
     currentParent = node;
     // Visit children without checking the parent pointer on the typedef itself
@@ -440,7 +439,6 @@
     AsyncMarker savedAsyncMarker = currentAsyncMarker;
     currentAsyncMarker = node.asyncMarker;
     if (!isOutline &&
-        currentMember!.isNonNullableByDefault &&
         node.asyncMarker == AsyncMarker.Async &&
         node.futureValueType == null) {
       problem(node,
diff --git a/pkg/modular_test/lib/src/pipeline.dart b/pkg/modular_test/lib/src/pipeline.dart
index c55f2f9..7e10bac 100644
--- a/pkg/modular_test/lib/src/pipeline.dart
+++ b/pkg/modular_test/lib/src/pipeline.dart
@@ -42,12 +42,20 @@
   /// Whether this step is only executed on the main module.
   final bool onlyOnMain;
 
+  /// Whether this step is only exceuted on the SDK.
+  final bool onlyOnSdk;
+
+  /// Whether this step is not executed on the SDK.
+  final bool notOnSdk;
+
   ModularStep(
       {this.needsSources: true,
       this.dependencyDataNeeded: const [],
       this.moduleDataNeeded: const [],
       this.resultData,
-      this.onlyOnMain: false});
+      this.onlyOnMain: false,
+      this.onlyOnSdk: false,
+      this.notOnSdk: false});
 
   /// Notifies that the step was not executed, but cached instead.
   void notifyCached(Module module) {}
@@ -77,6 +85,11 @@
   }
 
   void _validate() {
+    // Whether or not two steps run on mutually exclusive input data.
+    bool areMutuallyExclusive(S a, S b) {
+      return (a.onlyOnSdk && b.notOnSdk) || (b.onlyOnSdk && a.notOnSdk);
+    }
+
     // Ensure that steps consume only data that was produced by previous steps
     // or by the same step on a dependency.
     Map<DataId, S> previousKinds = {};
@@ -86,7 +99,8 @@
             "'${step.runtimeType}' needs to declare what data it produces.");
       }
       for (var resultKind in step.resultData) {
-        if (previousKinds.containsKey(resultKind)) {
+        if (previousKinds.containsKey(resultKind) &&
+            !areMutuallyExclusive(step, previousKinds[resultKind])) {
           _validationError("Cannot produce the same data on two modular steps."
               " '$resultKind' was previously produced by "
               "'${previousKinds[resultKind].runtimeType}' but "
@@ -140,7 +154,9 @@
       deps.addAll(transitiveDependencies[dependency]);
     }
 
-    if (step.onlyOnMain && !module.isMain) return;
+    if ((step.onlyOnMain && !module.isMain) ||
+        (step.onlyOnSdk && !module.isSdk) ||
+        (step.notOnSdk && module.isSdk)) return;
     // Include only requested data from transitive dependencies.
     Map<Module, Set<DataId>> visibleData = {};
 
diff --git a/pkg/modular_test/test/io_pipeline_test.dart b/pkg/modular_test/test/io_pipeline_test.dart
index db980f8..8176201 100644
--- a/pkg/modular_test/test/io_pipeline_test.dart
+++ b/pkg/modular_test/test/io_pipeline_test.dart
@@ -107,6 +107,8 @@
   List<DataId> get moduleDataNeeded => const [];
   List<DataId> get resultData => [resultId];
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   SourceOnlyStep(this.action, this.resultId, this.needsSources);
 
@@ -137,6 +139,8 @@
   final DataId resultId;
   final DataId inputId;
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   ModuleDataStep(this.action, this.inputId, this.resultId, bool requestInput)
       : moduleDataNeeded = requestInput ? [inputId] : [];
@@ -166,6 +170,8 @@
   final DataId result2Id;
   final DataId inputId;
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   TwoOutputStep(
       this.action1, this.action2, this.inputId, this.result1Id, this.result2Id);
@@ -198,6 +204,8 @@
   final DataId depId;
   final DataId resultId;
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   LinkStep(this.action, this.inputId, this.depId, this.resultId,
       bool requestDependencies)
@@ -230,6 +238,8 @@
   final DataId depId;
   final DataId resultId;
   bool get onlyOnMain => true;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   MainOnlyStep(this.action, this.inputId, this.depId, this.resultId,
       bool requestDependencies)
diff --git a/pkg/modular_test/test/memory_pipeline_test.dart b/pkg/modular_test/test/memory_pipeline_test.dart
index 1d4da36..95ba01d 100644
--- a/pkg/modular_test/test/memory_pipeline_test.dart
+++ b/pkg/modular_test/test/memory_pipeline_test.dart
@@ -86,6 +86,8 @@
   List<DataId> get moduleDataNeeded => const [];
   List<DataId> get resultData => [resultId];
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   SourceOnlyStep(this.action, this.resultId, this.needsSources);
 
@@ -114,6 +116,8 @@
   final DataId resultId;
   final DataId inputId;
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   ModuleDataStep(this.action, this.inputId, this.resultId, bool requestInput)
       : moduleDataNeeded = requestInput ? [inputId] : [];
@@ -144,6 +148,8 @@
   final DataId result2Id;
   final DataId inputId;
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   TwoOutputStep(
       this.action1, this.action2, this.inputId, this.result1Id, this.result2Id);
@@ -177,6 +183,8 @@
   final DataId resultId;
   List<DataId> get resultData => [resultId];
   bool get onlyOnMain => false;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   LinkStep(this.action, this.inputId, this.depId, this.resultId,
       bool requestDependencies)
@@ -208,6 +216,8 @@
   final DataId resultId;
   List<DataId> get resultData => [resultId];
   bool get onlyOnMain => true;
+  bool get onlyOnSdk => false;
+  bool get notOnSdk => false;
 
   MainOnlyStep(this.action, this.inputId, this.depId, this.resultId,
       bool requestDependencies)
diff --git a/pkg/native_stack_traces/bin/decode.dart b/pkg/native_stack_traces/bin/decode.dart
index a7ca956..12c61ef 100644
--- a/pkg/native_stack_traces/bin/decode.dart
+++ b/pkg/native_stack_traces/bin/decode.dart
@@ -244,9 +244,9 @@
     final addr = dwarf.virtualAddressOf(offset);
     final frames = dwarf
         .callInfoFor(addr, includeInternalFrames: verbose)
-        ?.map((CallInfo c) => '  ' + c.toString());
+        ?.map((CallInfo c) => '  $c');
     final addrString =
-        addr > 0 ? '0x' + addr.toRadixString(16) : addr.toString();
+        addr > 0 ? '0x${addr.toRadixString(16)}' : addr.toString();
     print('For virtual address $addrString:');
     if (frames == null) {
       print('  Invalid virtual address.');
@@ -283,7 +283,7 @@
       .transform(utf8.decoder)
       .transform(const LineSplitter())
       .transform(DwarfStackTraceDecoder(dwarf, includeInternalFrames: verbose))
-      .map((s) => s + '\n')
+      .map((s) => '$s\n')
       .transform(utf8.encoder);
 
   await output.addStream(convertedStream);
diff --git a/pkg/native_stack_traces/lib/src/dwarf.dart b/pkg/native_stack_traces/lib/src/dwarf.dart
index 06ace82..93a2af4 100644
--- a/pkg/native_stack_traces/lib/src/dwarf.dart
+++ b/pkg/native_stack_traces/lib/src/dwarf.dart
@@ -165,7 +165,7 @@
       case _AttributeForm.flag:
         return value.toString();
       case _AttributeForm.address:
-        return '0x' + paddedHex(value as int, unit?.header.addressSize ?? 0);
+        return '0x${paddedHex(value as int, unit?.header.addressSize ?? 0)}';
       case _AttributeForm.sectionOffset:
         return paddedHex(value as int, 4);
       case _AttributeForm.constant:
@@ -274,6 +274,7 @@
 class DebugInformationEntry {
   // The index of the entry in the abbreviation table for this DIE.
   final int code;
+  // ignore: library_private_types_in_public_api
   final Map<_Attribute, Object> attributes;
   final Map<int, DebugInformationEntry> children;
 
@@ -310,8 +311,10 @@
     return null;
   }
 
+  // ignore: library_private_types_in_public_api
   bool containsKey(_AttributeName name) => _namedAttribute(name) != null;
 
+  // ignore: library_private_types_in_public_api
   Object? operator [](_AttributeName name) => attributes[_namedAttribute(name)];
 
   int? get sectionOffset => this[_AttributeName.statementList] as int?;
@@ -408,7 +411,7 @@
           ..write(' (at offset 0x')
           ..write(paddedHex(offset))
           ..writeln('):');
-        child.writeToStringBuffer(buffer, unit: unit, indent: indent + '  ');
+        child.writeToStringBuffer(buffer, unit: unit, indent: '$indent  ');
       }
     }
   }
@@ -426,13 +429,16 @@
   final int version;
   final int abbreviationsOffset;
   final int addressSize;
+  // ignore: library_private_types_in_public_api
   final _AbbreviationsTable abbreviations;
 
   CompilationUnitHeader._(this.size, this.version, this.abbreviationsOffset,
       this.addressSize, this.abbreviations);
 
   static CompilationUnitHeader? fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTables) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTables) {
     final size = _initialLengthValue(reader);
     // An empty unit is an ending marker.
     if (size == 0) return null;
@@ -481,7 +487,9 @@
   CompilationUnit._(this.header, this.referenceTable);
 
   static CompilationUnit? fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTables) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTables) {
     final header =
         CompilationUnitHeader.fromReader(reader, abbreviationsTables);
     if (header == null) return null;
@@ -553,7 +561,9 @@
   DebugInfo._(this.units);
 
   static DebugInfo fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTable) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTable) {
     final units = reader
         .readRepeated(
             (r) => CompilationUnit.fromReader(reader, abbreviationsTable))
diff --git a/pkg/nnbd_migration/analysis_options.yaml b/pkg/nnbd_migration/analysis_options.yaml
index 7f93d4a..b03bab6 100644
--- a/pkg/nnbd_migration/analysis_options.yaml
+++ b/pkg/nnbd_migration/analysis_options.yaml
@@ -1,4 +1,4 @@
-include: package:pedantic/analysis_options.1.9.0.yaml
+include: package:lints/recommended.yaml
 
 analyzer:
   errors:
@@ -6,6 +6,12 @@
     always_declare_return_types: ignore
     # There are currently 60 violations.
     annotate_overrides: ignore
+    # A number of class names mix UpperCamelCase with underscores.
+    camel_case_types: ignore
+    # This package freely and frequently imports implementation from analyzer.
+    implementation_imports: ignore
+    # Our test methods are named with snake_case.
+    non_constant_identifier_names: ignore
     # There are currently 200 violations.
     omit_local_variable_types: ignore
     # There are currently 20 violations.
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index afb9bd9..4326006 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -48,7 +48,7 @@
     var path = unitElement.source.fullName;
     var offset = element.nameOffset;
 
-    var location = unitElement.lineInfo!.getLocation(offset);
+    var location = unitElement.lineInfo.getLocation(offset);
     return CodeReference(path, offset, location.lineNumber,
         location.columnNumber, _computeElementFullName(element));
   }
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index 2a30f55..a6bd912 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -896,7 +896,7 @@
     logger.stdout(ansi.emphasized('Re-analyzing project...'));
 
     _dartFixListener!.reset();
-    _fixCodeProcessor!.prepareToRerun();
+    await _fixCodeProcessor!.prepareToRerun();
     var analysisResult = await _fixCodeProcessor!.runFirstPhase();
     if (analysisResult.hasErrors && !options.ignoreErrors!) {
       _logErrors(analysisResult);
@@ -997,10 +997,11 @@
 
   bool get isPreviewServerRunning => _task?.isPreviewServerRunning ?? false;
 
-  void prepareToRerun() {
+  Future<void> prepareToRerun() async {
     var driver = context.driver;
     pathsToProcess = _migrationCli.computePathsToProcess(context);
     pathsToProcess.forEach(driver.changeFile);
+    await driver.applyPendingFileChanges();
   }
 
   /// Call the supplied [process] function to process each compilation unit.
diff --git a/pkg/nnbd_migration/lib/nnbd_migration.dart b/pkg/nnbd_migration/lib/nnbd_migration.dart
index c549d2d..191a1e5 100644
--- a/pkg/nnbd_migration/lib/nnbd_migration.dart
+++ b/pkg/nnbd_migration/lib/nnbd_migration.dart
@@ -189,12 +189,15 @@
 
   /// A formal parameter needs to have a required keyword added.
   factory NullabilityFixDescription.addRequired(
-          String? className, String? functionName, String paramName) =>
-      NullabilityFixDescription._(
-        appliedMessage: "Add 'required' keyword to parameter '$paramName' in " +
-            (className == null ? functionName! : "'$className.$functionName'"),
-        kind: NullabilityFixKind.addRequired,
-      );
+      String? className, String? functionName, String paramName) {
+    var paramContainerName =
+        className == null ? functionName! : "'$className.$functionName'";
+    return NullabilityFixDescription._(
+      appliedMessage: "Add 'required' keyword to parameter '$paramName' in "
+          '$paramContainerName',
+      kind: NullabilityFixKind.addRequired,
+    );
+  }
 
   /// An explicit type needs to be added.
   factory NullabilityFixDescription.addType(String typeText) =>
diff --git a/pkg/nnbd_migration/lib/src/decorated_type.dart b/pkg/nnbd_migration/lib/src/decorated_type.dart
index b32a622..3139e2a 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type.dart
@@ -218,6 +218,10 @@
   }
 
   @override
+  // TODO(srawlins): Override `hashCode` in this class. It should be based on
+  // [node] and [type], but there is more logic, as seen below in the use of
+  // [RenamedDecoratedFunctionTypes.match].
+  // ignore: hash_and_equals
   bool operator ==(Object other) {
     if (other is DecoratedType) {
       if (!identical(node, other.node)) return false;
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 5784c34..013e482 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -522,12 +522,14 @@
     if (operatorType == TokenType.EQ_EQ || operatorType == TokenType.BANG_EQ) {
       var leftType = _dispatch(leftOperand)!;
       _graph.connectDummy(leftType.node, DummyOrigin(source, node));
-      _flowAnalysis!.equalityOp_rightBegin(leftOperand, leftType);
+      var equalityInfo =
+          _flowAnalysis!.equalityOperand_end(leftOperand, leftType);
       var rightType = _dispatch(rightOperand)!;
       _graph.connectDummy(rightType.node, DummyOrigin(source, node));
       bool notEqual = operatorType == TokenType.BANG_EQ;
-      _flowAnalysis!
-          .equalityOp_end(node, rightOperand, rightType, notEqual: notEqual);
+      _flowAnalysis!.equalityOperation_end(node, equalityInfo,
+          _flowAnalysis!.equalityOperand_end(rightOperand, rightType),
+          notEqual: notEqual);
 
       void buildNullConditionInfo(NullLiteral nullLiteral,
           Expression otherOperand, NullabilityNode? otherNode) {
@@ -2010,7 +2012,7 @@
           var overriddenElements = _inheritanceManager.getOverridden2(
               enclosingElement,
               Name(enclosingElement.library.source.uri,
-                  declaredElement.name + '='));
+                  '${declaredElement.name}='));
           for (var overriddenElement
               in overriddenElements ?? <ExecutableElement>[]) {
             _handleFieldOverriddenDeclaration(
diff --git a/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart b/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
index 83e0fd0..17a82d9 100644
--- a/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/non_nullable_fix.dart
@@ -191,10 +191,11 @@
     // This method may be called multiple times, for example during a re-run.
     // But the preview server should only be started once.
     if (_server == null) {
-      var wrappedApplyHookWithShutdown = () {
+      void wrappedApplyHookWithShutdown() {
         shutdownServer();
         applyHook();
-      };
+      }
+
       _server = HttpPreviewServer(state, rerun, wrappedApplyHookWithShutdown,
           bindAddress, preferredPort, _logger);
       _server!.serveHttp();
@@ -261,7 +262,7 @@
         packageMap['languageVersion'] = _intendedLanguageVersion;
         // Pub appears to always use a two-space indent. This will minimize the
         // diff between the previous text and the new text.
-        var newText = JsonEncoder.withIndent('  ').convert(configMap) + '\n';
+        var newText = '${JsonEncoder.withIndent('  ').convert(configMap)}\n';
 
         // TODO(srawlins): This is inelegant. We add an "edit" which replaces
         // the entire content of the package config file with new content, while
diff --git a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
index 2616d26..2253e01 100644
--- a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart
@@ -7708,384 +7708,351 @@
 ''';
 
 String? _migration_js;
-// migration_dart md5 is '14d25a61d6f2ddb7ec83f7e257afa33d'
+// migration_dart md5 is '19616174bc5ae1ef476f65dbf94db0ae'
 String _migration_js_base64 = '''
 KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgcz1P
 YmplY3Qua2V5cyhhKQpmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHE9c1tyXQpiW3FdPWFb
-cV19fWZ1bmN0aW9uIG1peGluUHJvcGVydGllcyhhLGIpe3ZhciBzPU9iamVjdC5rZXlzKGEpCmZvcih2
-YXIgcj0wO3I8cy5sZW5ndGg7cisrKXt2YXIgcT1zW3JdCmlmKCFiLmhhc093blByb3BlcnR5KHEpKWJb
-cV09YVtxXX19dmFyIHo9ZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbigpe30Kcy5wcm90b3R5cGU9e3A6
-e319CnZhciByPW5ldyBzKCkKaWYoIShyLl9fcHJvdG9fXyYmci5fX3Byb3RvX18ucD09PXMucHJvdG90
-eXBlLnApKXJldHVybiBmYWxzZQp0cnl7aWYodHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJnR5
-cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50PT0ic3RyaW5nIiYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRl
-eE9mKCJDaHJvbWUvIik+PTApcmV0dXJuIHRydWUKaWYodHlwZW9mIHZlcnNpb249PSJmdW5jdGlvbiIm
-JnZlcnNpb24ubGVuZ3RoPT0wKXt2YXIgcT12ZXJzaW9uKCkKaWYoL15cZCtcLlxkK1wuXGQrXC5cZCsk
-Ly50ZXN0KHEpKXJldHVybiB0cnVlfX1jYXRjaChwKXt9cmV0dXJuIGZhbHNlfSgpCmZ1bmN0aW9uIHNl
-dEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeShhKXtmdW5jdGlvbiB0KCl7fTtpZih0eXBlb2YgdC5uYW1l
-PT0ic3RyaW5nIilyZXR1cm4KZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciByPWFbc10KdmFy
-IHE9T2JqZWN0LmtleXMocikKZm9yKHZhciBwPTA7cDxxLmxlbmd0aDtwKyspe3ZhciBvPXFbcF0KdmFy
-IG49cltvXQppZih0eXBlb2Ygbj09ImZ1bmN0aW9uIiluLm5hbWU9b319fWZ1bmN0aW9uIGluaGVyaXQo
-YSxiKXthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hCmEucHJvdG90eXBlWyIkaSIrYS5uYW1lXT1hCmlm
-KGIhPW51bGwpe2lmKHope2EucHJvdG90eXBlLl9fcHJvdG9fXz1iLnByb3RvdHlwZQpyZXR1cm59dmFy
-IHM9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSkKY29weVByb3BlcnRpZXMoYS5wcm90b3R5cGUscykK
-YS5wcm90b3R5cGU9c319ZnVuY3Rpb24gaW5oZXJpdE1hbnkoYSxiKXtmb3IodmFyIHM9MDtzPGIubGVu
-Z3RoO3MrKylpbmhlcml0KGJbc10sYSl9ZnVuY3Rpb24gbWl4aW4oYSxiKXttaXhpblByb3BlcnRpZXMo
-Yi5wcm90b3R5cGUsYS5wcm90b3R5cGUpCmEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWF9ZnVuY3Rpb24g
-bGF6eU9sZChhLGIsYyxkKXt2YXIgcz1hCmFbYl09cwphW2NdPWZ1bmN0aW9uKCl7YVtjXT1mdW5jdGlv
-bigpe0guYWcoYil9CnZhciByCnZhciBxPWQKdHJ5e2lmKGFbYl09PT1zKXtyPWFbYl09cQpyPWFbYl09
-ZCgpfWVsc2Ugcj1hW2JdfWZpbmFsbHl7aWYocj09PXEpYVtiXT1udWxsCmFbY109ZnVuY3Rpb24oKXty
-ZXR1cm4gdGhpc1tiXX19cmV0dXJuIHJ9fWZ1bmN0aW9uIGxhenkoYSxiLGMsZCl7dmFyIHM9YQphW2Jd
-PXMKYVtjXT1mdW5jdGlvbigpe2lmKGFbYl09PT1zKWFbYl09ZCgpCmFbY109ZnVuY3Rpb24oKXtyZXR1
-cm4gdGhpc1tiXX0KcmV0dXJuIGFbYl19fWZ1bmN0aW9uIGxhenlGaW5hbChhLGIsYyxkKXt2YXIgcz1h
-CmFbYl09cwphW2NdPWZ1bmN0aW9uKCl7aWYoYVtiXT09PXMpe3ZhciByPWQoKQppZihhW2JdIT09cylI
-LkZQKGIpCmFbYl09cn1hW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19CnJldHVybiBhW2JdfX1m
-dW5jdGlvbiBtYWtlQ29uc3RMaXN0KGEpe2EuaW1tdXRhYmxlJGxpc3Q9QXJyYXkKYS5maXhlZCRsZW5n
-dGg9QXJyYXkKcmV0dXJuIGF9ZnVuY3Rpb24gY29udmVydFRvRmFzdE9iamVjdChhKXtmdW5jdGlvbiB0
-KCl7fXQucHJvdG90eXBlPWEKbmV3IHQoKQpyZXR1cm4gYX1mdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0
-T2JqZWN0KGEpe2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7KytzKWNvbnZlcnRUb0Zhc3RPYmplY3QoYVtz
-XSl9dmFyIHk9MApmdW5jdGlvbiBpbnN0YW5jZVRlYXJPZmZHZXR0ZXIoYSxiKXt2YXIgcz1iLmZzWzBd
-CmlmKGEpcmV0dXJuIG5ldyBGdW5jdGlvbigicGFyYW1ldGVycywgY3JlYXRlVGVhck9mZkNsYXNzLCBj
-YWNoZSIsInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIrcyt5KysrIihyZWNlaXZlcikgeyIrImlmIChj
-YWNoZSA9PT0gbnVsbCkgY2FjaGUgPSBjcmVhdGVUZWFyT2ZmQ2xhc3MocGFyYW1ldGVycyk7IisicmV0
-dXJuIG5ldyBjYWNoZShyZWNlaXZlciwgdGhpcyk7IisifSIpKGIsSC5VMixudWxsKQplbHNlIHJldHVy
-biBuZXcgRnVuY3Rpb24oInBhcmFtZXRlcnMsIGNyZWF0ZVRlYXJPZmZDbGFzcywgY2FjaGUiLCJyZXR1
-cm4gZnVuY3Rpb24gdGVhck9mZl8iK3MreSsrKyIoKSB7IisiaWYgKGNhY2hlID09PSBudWxsKSBjYWNo
-ZSA9IGNyZWF0ZVRlYXJPZmZDbGFzcyhwYXJhbWV0ZXJzKTsiKyJyZXR1cm4gbmV3IGNhY2hlKHRoaXMs
-IG51bGwpOyIrIn0iKShiLEguVTIsbnVsbCl9ZnVuY3Rpb24gc3RhdGljVGVhck9mZkdldHRlcihhKXt2
-YXIgcz1udWxsCnJldHVybiBmdW5jdGlvbigpe2lmKHM9PT1udWxsKXM9SC5VMihhKS5wcm90b3R5cGUK
-cmV0dXJuIHN9fXZhciB4PTAKZnVuY3Rpb24gdGVhck9mZlBhcmFtZXRlcnMoYSxiLGMsZCxlLGYsZyxo
-LGksail7aWYodHlwZW9mIGg9PSJudW1iZXIiKWgrPXgKcmV0dXJue2NvOmEsaVM6YixpSTpjLHJDOmQs
-ZFY6ZSxjczpmLGZzOmcsZlQ6aCxhSTppfHwwLG5EQTpqfX1mdW5jdGlvbiBpbnN0YWxsU3RhdGljVGVh
-ck9mZihhLGIsYyxkLGUsZixnLGgpe3ZhciBzPXRlYXJPZmZQYXJhbWV0ZXJzKGEsdHJ1ZSxmYWxzZSxj
-LGQsZSxmLGcsaCxmYWxzZSkKdmFyIHI9c3RhdGljVGVhck9mZkdldHRlcihzKQphW2JdPXJ9ZnVuY3Rp
-b24gaW5zdGFsbEluc3RhbmNlVGVhck9mZihhLGIsYyxkLGUsZixnLGgsaSxqKXtjPSEhYwp2YXIgcz10
-ZWFyT2ZmUGFyYW1ldGVycyhhLGZhbHNlLGMsZCxlLGYsZyxoLGksISFqKQp2YXIgcj1pbnN0YW5jZVRl
-YXJPZmZHZXR0ZXIoYyxzKQphW2JdPXJ9ZnVuY3Rpb24gc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRh
-ZyhhKXt2YXIgcz12LmludGVyY2VwdG9yc0J5VGFnCmlmKCFzKXt2LmludGVyY2VwdG9yc0J5VGFnPWEK
-cmV0dXJufWNvcHlQcm9wZXJ0aWVzKGEscyl9ZnVuY3Rpb24gc2V0T3JVcGRhdGVMZWFmVGFncyhhKXt2
-YXIgcz12LmxlYWZUYWdzCmlmKCFzKXt2LmxlYWZUYWdzPWEKcmV0dXJufWNvcHlQcm9wZXJ0aWVzKGEs
-cyl9ZnVuY3Rpb24gdXBkYXRlVHlwZXMoYSl7dmFyIHM9di50eXBlcwp2YXIgcj1zLmxlbmd0aApzLnB1
-c2guYXBwbHkocyxhKQpyZXR1cm4gcn1mdW5jdGlvbiB1cGRhdGVIb2xkZXIoYSxiKXtjb3B5UHJvcGVy
-dGllcyhiLGEpCnJldHVybiBhfXZhciBodW5rSGVscGVycz1mdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9u
-KGEsYixjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyxoLGkpe3JldHVybiBpbnN0YWxsSW5zdGFuY2VU
-ZWFyT2ZmKGYsZyxhLGIsYyxkLFtoXSxpLGUsZmFsc2UpfX0scj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1
-cm4gZnVuY3Rpb24oZSxmLGcsaCl7cmV0dXJuIGluc3RhbGxTdGF0aWNUZWFyT2ZmKGUsZixhLGIsYyxb
-Z10saCxkKX19CnJldHVybntpbmhlcml0OmluaGVyaXQsaW5oZXJpdE1hbnk6aW5oZXJpdE1hbnksbWl4
-aW46bWl4aW4saW5zdGFsbFN0YXRpY1RlYXJPZmY6aW5zdGFsbFN0YXRpY1RlYXJPZmYsaW5zdGFsbElu
-c3RhbmNlVGVhck9mZjppbnN0YWxsSW5zdGFuY2VUZWFyT2ZmLF9pbnN0YW5jZV8wdTpzKDAsMCxudWxs
-LFsiJDAiXSwwKSxfaW5zdGFuY2VfMXU6cygwLDEsbnVsbCxbIiQxIl0sMCksX2luc3RhbmNlXzJ1OnMo
-MCwyLG51bGwsWyIkMiJdLDApLF9pbnN0YW5jZV8waTpzKDEsMCxudWxsLFsiJDAiXSwwKSxfaW5zdGFu
-Y2VfMWk6cygxLDEsbnVsbCxbIiQxIl0sMCksX2luc3RhbmNlXzJpOnMoMSwyLG51bGwsWyIkMiJdLDAp
-LF9zdGF0aWNfMDpyKDAsbnVsbCxbIiQwIl0sMCksX3N0YXRpY18xOnIoMSxudWxsLFsiJDEiXSwwKSxf
-c3RhdGljXzI6cigyLG51bGwsWyIkMiJdLDApLG1ha2VDb25zdExpc3Q6bWFrZUNvbnN0TGlzdCxsYXp5
-OmxhenksbGF6eUZpbmFsOmxhenlGaW5hbCxsYXp5T2xkOmxhenlPbGQsdXBkYXRlSG9sZGVyOnVwZGF0
-ZUhvbGRlcixjb252ZXJ0VG9GYXN0T2JqZWN0OmNvbnZlcnRUb0Zhc3RPYmplY3Qsc2V0RnVuY3Rpb25O
-YW1lc0lmTmVjZXNzYXJ5OnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSx1cGRhdGVUeXBlczp1cGRh
-dGVUeXBlcyxzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnOnNldE9yVXBkYXRlSW50ZXJjZXB0b3Jz
-QnlUYWcsc2V0T3JVcGRhdGVMZWFmVGFnczpzZXRPclVwZGF0ZUxlYWZUYWdzfX0oKQpmdW5jdGlvbiBp
-bml0aWFsaXplRGVmZXJyZWRIdW5rKGEpe3g9di50eXBlcy5sZW5ndGgKYShodW5rSGVscGVycyx2LHcs
-JCl9dmFyIEI9ewp3Uigpe3JldHVybiBuZXcgQi5xcCgiIiwiIiwiIixDLkR4KX0sCllmKGEpe3ZhciBz
-LHIscSxwLG8sbixtLGwsaz1ILmsoYS5xKDAsInJlZ2lvbnMiKSksaj1ILmsoYS5xKDAsIm5hdmlnYXRp
-b25Db250ZW50IikpLGk9SC5rKGEucSgwLCJzb3VyY2VDb2RlIikpLGg9UC5GbCh0Lk4sdC5mNCkKZm9y
-KHM9dC5HLmEoYS5xKDAsImVkaXRzIikpLHM9cy5nUHUocykscz1zLmdtKHMpLHI9dC5hLHE9dC5naTtz
-LkYoKTspe3A9cy5nbCgpCm89cC5hCm49SC5RSShbXSxxKQpmb3IocD1KLklUKHIuYShwLmIpKTtwLkYo
-KTspe209cC5nbCgpCmw9Si5VNihtKQpuLnB1c2gobmV3IEIuajgoSC5VYyhsLnEobSwibGluZSIpKSxI
-LmsobC5xKG0sImV4cGxhbmF0aW9uIikpLEguVWMobC5xKG0sIm9mZnNldCIpKSkpfWguWTUoMCxvLG4p
-fXJldHVybiBuZXcgQi5xcChrLGosaSxoKX0sCmo4OmZ1bmN0aW9uIGo4KGEsYixjKXt0aGlzLmE9YQp0
-aGlzLmI9Ygp0aGlzLmM9Y30sCnFwOmZ1bmN0aW9uIHFwKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEK
-Xy5iPWIKXy5jPWMKXy5kPWR9LApmdjpmdW5jdGlvbiBmdigpe30sCk9TKGEpe3ZhciBzCmlmKCEoYT49
-NjUmJmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIKZWxzZSBzPSEwCnJldHVybiBzfSwKWXUoYSxiKXt2YXIg
-cz1hLmxlbmd0aCxyPWIrMgppZihzPHIpcmV0dXJuITEKaWYoIUIuT1MoQy54Qi5PKGEsYikpKXJldHVy
-biExCmlmKEMueEIuTyhhLGIrMSkhPT01OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4g
-Qy54Qi5PKGEscik9PT00N319LEM9e30sRD17CmFiKCl7dmFyIHMscixxLHAsbz1udWxsCnRyeXtvPVAu
-dW8oKX1jYXRjaChzKXtpZih0Lmc4LmIoSC5SdShzKSkpe3I9JC5GZgppZihyIT1udWxsKXJldHVybiBy
-CnRocm93IHN9ZWxzZSB0aHJvdyBzfWlmKEouUk0obywkLkk2KSl7cj0kLkZmCnIudG9TdHJpbmcKcmV0
-dXJuIHJ9JC5JNj1vCmlmKCQuSGsoKT09JC5FYigpKXI9JC5GZj1vLlpJKCIuIikudygwKQplbHNle3E9
-by50NCgpCnA9cS5sZW5ndGgtMQpyPSQuRmY9cD09PTA/cTpDLnhCLk5qKHEsMCxwKX1yZXR1cm4gcn19
-LEU9e09GOmZ1bmN0aW9uIE9GKGEsYixjKXt0aGlzLmQ9YQp0aGlzLmU9Ygp0aGlzLmY9Y319LEY9e3J1
-OmZ1bmN0aW9uIHJ1KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxI
-PXtGSzpmdW5jdGlvbiBGSygpe30sCkdKKGEsYixjKXtpZihiLkMoImJRPDA+IikuYihhKSlyZXR1cm4g
-bmV3IEgub2woYSxiLkMoIkA8MD4iKS5LcShjKS5DKCJvbDwxLDI+IikpCnJldHVybiBuZXcgSC5aeShh
-LGIuQygiQDwwPiIpLktxKGMpLkMoIlp5PDEsMj4iKSl9LApqKGEpe3JldHVybiBuZXcgSC5jKCJGaWVs
-ZCAnIithKyInIGhhcyBiZWVuIGFzc2lnbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4iKX0sCm9vKGEp
-e3ZhciBzLHI9YV40OAppZihyPD05KXJldHVybiByCnM9YXwzMgppZig5Nzw9cyYmczw9MTAyKXJldHVy
-biBzLTg3CnJldHVybi0xfSwKY2IoYSxiLGMpe3JldHVybiBhfSwKcUMoYSxiLGMsZCl7UC5rMShiLCJz
-dGFydCIpCmlmKGMhPW51bGwpe1AuazEoYywiZW5kIikKaWYoYj5jKUgudihQLlRFKGIsMCxjLCJzdGFy
-dCIsbnVsbCkpfXJldHVybiBuZXcgSC5uSChhLGIsYyxkLkMoIm5IPDA+IikpfSwKSzEoYSxiLGMsZCl7
-aWYodC5VLmIoYSkpcmV0dXJuIG5ldyBILnh5KGEsYixjLkMoIkA8MD4iKS5LcShkKS5DKCJ4eTwxLDI+
-IikpCnJldHVybiBuZXcgSC5pMShhLGIsYy5DKCJAPDA+IikuS3EoZCkuQygiaTE8MSwyPiIpKX0sCmJL
-KGEsYixjKXtpZih0LlUuYihhKSl7UC5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgSC5kNShhLGIsYy5D
-KCJkNTwwPiIpKX1QLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBILkFNKGEsYixjLkMoIkFNPDA+Iikp
-fSwKV3AoKXtyZXR1cm4gbmV3IFAubGooIk5vIGVsZW1lbnQiKX0sCkFtKCl7cmV0dXJuIG5ldyBQLmxq
-KCJUb28gbWFueSBlbGVtZW50cyIpfSwKYXIoKXtyZXR1cm4gbmV3IFAubGooIlRvbyBmZXcgZWxlbWVu
-dHMiKX0sCkJSOmZ1bmN0aW9uIEJSKCl7fSwKZVQ6ZnVuY3Rpb24gZVQoYSxiKXt0aGlzLmE9YQp0aGlz
-LiR0aT1ifSwKWnk6ZnVuY3Rpb24gWnkoYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKb2w6ZnVuY3Rp
-b24gb2woYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKVXE6ZnVuY3Rpb24gVXEoKXt9LApqVjpmdW5j
-dGlvbiBqVihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApjOmZ1bmN0aW9uIGMoYSl7dGhpcy5hPWF9
-LApxajpmdW5jdGlvbiBxaihhKXt0aGlzLmE9YX0sCmJROmZ1bmN0aW9uIGJRKCl7fSwKYUw6ZnVuY3Rp
-b24gYUwoKXt9LApuSDpmdW5jdGlvbiBuSChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8u
-Yz1jCl8uJHRpPWR9LAphNzpmdW5jdGlvbiBhNyhhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9Ygpf
-LmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKaTE6ZnVuY3Rpb24gaTEoYSxiLGMpe3RoaXMuYT1hCnRoaXMu
-Yj1iCnRoaXMuJHRpPWN9LAp4eTpmdW5jdGlvbiB4eShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp
-cy4kdGk9Y30sCk1IOmZ1bmN0aW9uIE1IKGEsYixjKXt2YXIgXz10aGlzCl8uYT1udWxsCl8uYj1hCl8u
-Yz1iCl8uJHRpPWN9LApsSjpmdW5jdGlvbiBsSihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4k
-dGk9Y30sClU1OmZ1bmN0aW9uIFU1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwK
-U086ZnVuY3Rpb24gU08oYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApBTTpmdW5j
-dGlvbiBBTShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCmQ1OmZ1bmN0aW9uIGQ1
-KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKVTE6ZnVuY3Rpb24gVTEoYSxiLGMp
-e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApNQjpmdW5jdGlvbiBNQihhKXt0aGlzLiR0aT1h
-fSwKRnU6ZnVuY3Rpb24gRnUoYSl7dGhpcy4kdGk9YX0sCnU2OmZ1bmN0aW9uIHU2KGEsYil7dGhpcy5h
-PWEKdGhpcy4kdGk9Yn0sCkpCOmZ1bmN0aW9uIEpCKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sClNV
-OmZ1bmN0aW9uIFNVKCl7fSwKUmU6ZnVuY3Rpb24gUmUoKXt9LAp3MjpmdW5jdGlvbiB3Migpe30sCnd2
-OmZ1bmN0aW9uIHd2KGEpe3RoaXMuYT1hfSwKUUM6ZnVuY3Rpb24gUUMoKXt9LApkYygpe3Rocm93IEgu
-YihQLkw0KCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBNYXAiKSl9LApOUShhKXt2YXIgcyxyPXYu
-bWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIhPW51bGwpcmV0dXJuIHIKcz0ibWluaWZpZWQ6IithCnJl
-dHVybiBzfSwKd1YoYSxiKXt2YXIgcwppZihiIT1udWxsKXtzPWIueAppZihzIT1udWxsKXJldHVybiBz
-fXJldHVybiB0LmFVLmIoYSl9LApFaihhKXt2YXIgcwppZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJu
-IGEKaWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihhIT09MClyZXR1cm4iIithfWVsc2UgaWYoITA9PT1h
-KXJldHVybiJ0cnVlIgplbHNlIGlmKCExPT09YSlyZXR1cm4iZmFsc2UiCmVsc2UgaWYoYT09bnVsbCly
-ZXR1cm4ibnVsbCIKcz1KLncoYSkKcmV0dXJuIHN9LAplUShhKXt2YXIgcz1hLiRpZGVudGl0eUhhc2gK
-aWYocz09bnVsbCl7cz1NYXRoLnJhbmRvbSgpKjB4M2ZmZmZmZmZ8MAphLiRpZGVudGl0eUhhc2g9c31y
-ZXR1cm4gc30sCkhwKGEsYil7dmFyIHMscixxLHAsbyxuPW51bGwsbT0vXlxzKlsrLV0/KCgweFthLWYw
-LTldKyl8KFxkKyl8KFthLXowLTldKykpXHMqJC9pLmV4ZWMoYSkKaWYobT09bnVsbClyZXR1cm4gbgpp
-ZigzPj1tLmxlbmd0aClyZXR1cm4gSC5PSChtLDMpCnM9bVszXQppZihiPT1udWxsKXtpZihzIT1udWxs
-KXJldHVybiBwYXJzZUludChhLDEwKQppZihtWzJdIT1udWxsKXJldHVybiBwYXJzZUludChhLDE2KQpy
-ZXR1cm4gbn1pZihiPDJ8fGI+MzYpdGhyb3cgSC5iKFAuVEUoYiwyLDM2LCJyYWRpeCIsbikpCmlmKGI9
-PT0xMCYmcyE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxMCkKaWYoYjwxMHx8cz09bnVsbCl7cj1iPD0x
-MD80NytiOjg2K2IKcT1tWzFdCmZvcihwPXEubGVuZ3RoLG89MDtvPHA7KytvKWlmKChDLnhCLlcocSxv
-KXwzMik+cilyZXR1cm4gbn1yZXR1cm4gcGFyc2VJbnQoYSxiKX0sCmxoKGEpe3JldHVybiBILkg1KGEp
-fSwKSDUoYSl7dmFyIHMscixxLHAKaWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJuIEguZG0oSC56Syhh
-KSxudWxsKQppZihKLmlhKGEpPT09Qy5Pa3x8dC5iSS5iKGEpKXtzPUMuTzQoYSkKcj1zIT09Ik9iamVj
-dCImJnMhPT0iIgppZihyKXJldHVybiBzCnE9YS5jb25zdHJ1Y3RvcgppZih0eXBlb2YgcT09ImZ1bmN0
-aW9uIil7cD1xLm5hbWUKaWYodHlwZW9mIHA9PSJzdHJpbmciKXI9cCE9PSJPYmplY3QiJiZwIT09IiIK
-ZWxzZSByPSExCmlmKHIpcmV0dXJuIHB9fXJldHVybiBILmRtKEgueksoYSksbnVsbCl9LApNMCgpe2lm
-KCEhc2VsZi5sb2NhdGlvbilyZXR1cm4gc2VsZi5sb2NhdGlvbi5ocmVmCnJldHVybiBudWxsfSwKZnco
-YSxiLGMpe3ZhciBzLHIscSxwCmlmKGM8PTUwMCYmYj09PTAmJmM9PT1hLmxlbmd0aClyZXR1cm4gU3Ry
-aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpCmZvcihzPWIscj0iIjtzPGM7cz1xKXtxPXMrNTAw
-CnA9cTxjP3E6YwpyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYS5zdWJhcnJheShzLHAp
-KX1yZXR1cm4gcn0sCkx3KGEpe3ZhciBzCmlmKDA8PWEpe2lmKGE8PTY1NTM1KXJldHVybiBTdHJpbmcu
-ZnJvbUNoYXJDb2RlKGEpCmlmKGE8PTExMTQxMTEpe3M9YS02NTUzNgpyZXR1cm4gU3RyaW5nLmZyb21D
-aGFyQ29kZSgoQy5qbi53RyhzLDEwKXw1NTI5Nik+Pj4wLHMmMTAyM3w1NjMyMCl9fXRocm93IEguYihQ
-LlRFKGEsMCwxMTE0MTExLG51bGwsbnVsbCkpfSwKbzIoYSl7aWYoYS5kYXRlPT09dm9pZCAwKWEuZGF0
-ZT1uZXcgRGF0ZShhLmEpCnJldHVybiBhLmRhdGV9LAp0SihhKXt2YXIgcz1ILm8yKGEpLmdldEZ1bGxZ
-ZWFyKCkrMApyZXR1cm4gc30sCk5TKGEpe3ZhciBzPUgubzIoYSkuZ2V0TW9udGgoKSsxCnJldHVybiBz
-fSwKakEoYSl7dmFyIHM9SC5vMihhKS5nZXREYXRlKCkrMApyZXR1cm4gc30sCklYKGEpe3ZhciBzPUgu
-bzIoYSkuZ2V0SG91cnMoKSswCnJldHVybiBzfSwKY2goYSl7dmFyIHM9SC5vMihhKS5nZXRNaW51dGVz
-KCkrMApyZXR1cm4gc30sCkpkKGEpe3ZhciBzPUgubzIoYSkuZ2V0U2Vjb25kcygpKzAKcmV0dXJuIHN9
-LApvMShhKXt2YXIgcz1ILm8yKGEpLmdldE1pbGxpc2Vjb25kcygpKzAKcmV0dXJuIHN9LAp6byhhLGIs
-Yyl7dmFyIHMscixxPXt9CnEuYT0wCnM9W10Kcj1bXQpxLmE9Yi5sZW5ndGgKQy5ObS5GVihzLGIpCnEu
-Yj0iIgppZihjIT1udWxsJiYhYy5nbDAoYykpYy5LKDAsbmV3IEguQ2oocSxyLHMpKQoiIitxLmEKcmV0
-dXJuIEouSnkoYSxuZXcgSC5MSShDLlRlLDAscyxyLDApKX0sCkVrKGEsYixjKXt2YXIgcyxyLHE9Yz09
-bnVsbHx8Yy5nbDAoYykKaWYocSl7cz1iLmxlbmd0aAppZihzPT09MCl7aWYoISFhLiQwKXJldHVybiBh
-LiQwKCl9ZWxzZSBpZihzPT09MSl7aWYoISFhLiQxKXJldHVybiBhLiQxKGJbMF0pfWVsc2UgaWYocz09
-PTIpe2lmKCEhYS4kMilyZXR1cm4gYS4kMihiWzBdLGJbMV0pfWVsc2UgaWYocz09PTMpe2lmKCEhYS4k
-MylyZXR1cm4gYS4kMyhiWzBdLGJbMV0sYlsyXSl9ZWxzZSBpZihzPT09NCl7aWYoISFhLiQ0KXJldHVy
-biBhLiQ0KGJbMF0sYlsxXSxiWzJdLGJbM10pfWVsc2UgaWYocz09PTUpaWYoISFhLiQ1KXJldHVybiBh
-LiQ1KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSkKcj1hWyIiKyIkIitzXQppZihyIT1udWxsKXJldHVy
-biByLmFwcGx5KGEsYil9cmV0dXJuIEguWlQoYSxiLGMpfSwKWlQoYSxiLGMpe3ZhciBzLHIscSxwLG8s
-bixtLGwsayxqLGksaCxnLGY9Yi5sZW5ndGgsZT1hLiRSCmlmKGY8ZSlyZXR1cm4gSC56byhhLGIsYykK
-cz1hLiRECnI9cz09bnVsbApxPSFyP3MoKTpudWxsCnA9Si5pYShhKQpvPXAuJEMKaWYodHlwZW9mIG89
-PSJzdHJpbmciKW89cFtvXQppZihyKXtpZihjIT1udWxsJiZjLmdvcihjKSlyZXR1cm4gSC56byhhLGIs
-YykKaWYoZj09PWUpcmV0dXJuIG8uYXBwbHkoYSxiKQpyZXR1cm4gSC56byhhLGIsYyl9aWYoQXJyYXku
-aXNBcnJheShxKSl7aWYoYyE9bnVsbCYmYy5nb3IoYykpcmV0dXJuIEguem8oYSxiLGMpCm49ZStxLmxl
-bmd0aAppZihmPm4pcmV0dXJuIEguem8oYSxiLG51bGwpCmlmKGY8bil7bT1xLnNsaWNlKGYtZSkKbD1Q
-LlkxKGIsITAsdC56KQpDLk5tLkZWKGwsbSl9ZWxzZSBsPWIKcmV0dXJuIG8uYXBwbHkoYSxsKX1lbHNl
-e2lmKGY+ZSlyZXR1cm4gSC56byhhLGIsYykKbD1QLlkxKGIsITAsdC56KQprPU9iamVjdC5rZXlzKHEp
-CmlmKGM9PW51bGwpZm9yKHI9ay5sZW5ndGgsaj0wO2o8ay5sZW5ndGg7ay5sZW5ndGg9PT1yfHwoMCxI
-LmxrKShrKSwrK2ope2k9cVtILm4oa1tqXSldCmlmKEMuTnY9PT1pKXJldHVybiBILnpvKGEsbCxjKQpD
-Lk5tLmkobCxpKX1lbHNle2ZvcihyPWsubGVuZ3RoLGg9MCxqPTA7ajxrLmxlbmd0aDtrLmxlbmd0aD09
-PXJ8fCgwLEgubGspKGspLCsrail7Zz1ILm4oa1tqXSkKaWYoYy54NChnKSl7KytoCkMuTm0uaShsLGMu
-cSgwLGcpKX1lbHNle2k9cVtnXQppZihDLk52PT09aSlyZXR1cm4gSC56byhhLGwsYykKQy5ObS5pKGws
-aSl9fWlmKGghPT1jLmdBKGMpKXJldHVybiBILnpvKGEsbCxjKX1yZXR1cm4gby5hcHBseShhLGwpfX0s
-CnBZKGEpe3Rocm93IEguYihILnRMKGEpKX0sCk9IKGEsYil7aWYoYT09bnVsbClKLkhtKGEpCnRocm93
-IEguYihILnUoYSxiKSl9LAp1KGEsYil7dmFyIHMscj0iaW5kZXgiCmlmKCFILm9rKGIpKXJldHVybiBu
-ZXcgUC5BVCghMCxiLHIsbnVsbCkKcz1ILklaKEouSG0oYSkpCmlmKGI8MHx8Yj49cylyZXR1cm4gUC5D
-ZihiLGEscixudWxsLHMpCnJldHVybiBQLk83KGIscil9LAphdShhLGIsYyl7aWYoYT5jKXJldHVybiBQ
-LlRFKGEsMCxjLCJzdGFydCIsbnVsbCkKaWYoYiE9bnVsbClpZihiPGF8fGI+YylyZXR1cm4gUC5URShi
-LGEsYywiZW5kIixudWxsKQpyZXR1cm4gbmV3IFAuQVQoITAsYiwiZW5kIixudWxsKX0sCnRMKGEpe3Jl
-dHVybiBuZXcgUC5BVCghMCxhLG51bGwsbnVsbCl9LApiKGEpe3ZhciBzLHIKaWYoYT09bnVsbClhPW5l
-dyBQLkYoKQpzPW5ldyBFcnJvcigpCnMuZGFydEV4Y2VwdGlvbj1hCnI9SC5oCmlmKCJkZWZpbmVQcm9w
-ZXJ0eSIgaW4gT2JqZWN0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkocywibWVzc2FnZSIse2dldDpyfSkK
-cy5uYW1lPSIifWVsc2Ugcy50b1N0cmluZz1yCnJldHVybiBzfSwKaCgpe3JldHVybiBKLncodGhpcy5k
-YXJ0RXhjZXB0aW9uKX0sCnYoYSl7dGhyb3cgSC5iKGEpfSwKbGsoYSl7dGhyb3cgSC5iKFAuYTQoYSkp
-fSwKY00oYSl7dmFyIHMscixxLHAsbyxuCmE9SC5lQShhLnJlcGxhY2UoU3RyaW5nKHt9KSwiJHJlY2Vp
-dmVyJCIpKQpzPWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHM9PW51bGwpcz1ILlFJKFtd
-LHQucykKcj1zLmluZGV4T2YoIlxcJGFyZ3VtZW50c1xcJCIpCnE9cy5pbmRleE9mKCJcXCRhcmd1bWVu
-dHNFeHByXFwkIikKcD1zLmluZGV4T2YoIlxcJGV4cHJcXCQiKQpvPXMuaW5kZXhPZigiXFwkbWV0aG9k
-XFwkIikKbj1zLmluZGV4T2YoIlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBILmY5KGEucmVwbGFj
-ZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzXFxcXFxcJCIsImciKSwiKCg/Onh8W154XSkqKSIp
-LnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwkIiwiZyIpLCIoKD86
-eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkZXhwclxcXFxcXCQiLCJnIiksIigo
-Pzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRtZXRob2RcXFxcXFwkIiwiZyIp
-LCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkcmVjZWl2ZXJcXFxcXFwk
-IiwiZyIpLCIoKD86eHxbXnhdKSopIikscixxLHAsbyxuKX0sClM3KGEpe3JldHVybiBmdW5jdGlvbigk
-ZXhwciQpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7JGV4cHIkLiRtZXRob2Qk
-KCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KGEpfSwKTWooYSl7cmV0
-dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4kbWV0aG9kJH1jYXRjaChzKXtyZXR1cm4gcy5t
-ZXNzYWdlfX0oYSl9LApUMyhhLGIpe3ZhciBzPWI9PW51bGwscj1zP251bGw6Yi5tZXRob2QKcmV0dXJu
-IG5ldyBILmF6KGEscixzP251bGw6Yi5yZWNlaXZlcil9LApSdShhKXtpZihhPT1udWxsKXJldHVybiBu
-ZXcgSC50ZShhKQppZihhIGluc3RhbmNlb2YgSC5icSlyZXR1cm4gSC50VyhhLHQuSy5hKGEuYSkpCmlm
-KHR5cGVvZiBhIT09Im9iamVjdCIpcmV0dXJuIGEKaWYoImRhcnRFeGNlcHRpb24iIGluIGEpcmV0dXJu
-IEgudFcoYSxhLmRhcnRFeGNlcHRpb24pCnJldHVybiBILnRsKGEpfSwKdFcoYSxiKXtpZih0LnIuYihi
-KSlpZihiLiR0aHJvd25Kc0Vycm9yPT1udWxsKWIuJHRocm93bkpzRXJyb3I9YQpyZXR1cm4gYn0sCnRs
-KGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsCmlmKCEoIm1lc3NhZ2UiIGlu
-IGEpKXJldHVybiBhCnM9YS5tZXNzYWdlCmlmKCJudW1iZXIiIGluIGEmJnR5cGVvZiBhLm51bWJlcj09
-Im51bWJlciIpe3I9YS5udW1iZXIKcT1yJjY1NTM1CmlmKChDLmpuLndHKHIsMTYpJjgxOTEpPT09MTAp
-c3dpdGNoKHEpe2Nhc2UgNDM4OnJldHVybiBILnRXKGEsSC5UMyhILkVqKHMpKyIgKEVycm9yICIrcSsi
-KSIsZSkpCmNhc2UgNDQ1OmNhc2UgNTAwNzpwPUguRWoocykrIiAoRXJyb3IgIitxKyIpIgpyZXR1cm4g
-SC50VyhhLG5ldyBILlcwKHAsZSkpfX1pZihhIGluc3RhbmNlb2YgVHlwZUVycm9yKXtvPSQuU24oKQpu
-PSQubHEoKQptPSQuTjkoKQpsPSQuaUkoKQprPSQuVU4oKQpqPSQuWmgoKQppPSQuck4oKQokLmMzKCkK
-aD0kLkhLKCkKZz0kLnIxKCkKZj1vLnFTKHMpCmlmKGYhPW51bGwpcmV0dXJuIEgudFcoYSxILlQzKEgu
-bihzKSxmKSkKZWxzZXtmPW4ucVMocykKaWYoZiE9bnVsbCl7Zi5tZXRob2Q9ImNhbGwiCnJldHVybiBI
-LnRXKGEsSC5UMyhILm4ocyksZikpfWVsc2V7Zj1tLnFTKHMpCmlmKGY9PW51bGwpe2Y9bC5xUyhzKQpp
-ZihmPT1udWxsKXtmPWsucVMocykKaWYoZj09bnVsbCl7Zj1qLnFTKHMpCmlmKGY9PW51bGwpe2Y9aS5x
-UyhzKQppZihmPT1udWxsKXtmPWwucVMocykKaWYoZj09bnVsbCl7Zj1oLnFTKHMpCmlmKGY9PW51bGwp
-e2Y9Zy5xUyhzKQpwPWYhPW51bGx9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEw
-fWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwCmlmKHApe0gubihzKQpyZXR1cm4gSC50VyhhLG5l
-dyBILlcwKHMsZj09bnVsbD9lOmYubWV0aG9kKSl9fX1yZXR1cm4gSC50VyhhLG5ldyBILnZWKHR5cGVv
-ZiBzPT0ic3RyaW5nIj9zOiIiKSl9aWYoYSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe2lmKHR5cGVvZiBz
-PT0ic3RyaW5nIiYmcy5pbmRleE9mKCJjYWxsIHN0YWNrIikhPT0tMSlyZXR1cm4gbmV3IFAuS1koKQpz
-PWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gU3RyaW5nKGIpfWNhdGNoKGQpe31yZXR1cm4gbnVsbH0oYSkK
-cmV0dXJuIEgudFcoYSxuZXcgUC5BVCghMSxlLGUsdHlwZW9mIHM9PSJzdHJpbmciP3MucmVwbGFjZSgv
-XlJhbmdlRXJyb3I6XHMqLywiIik6cykpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9yPT0iZnVuY3Rpb24i
-JiZhIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcilpZih0eXBlb2Ygcz09InN0cmluZyImJnM9PT0idG9v
-IG11Y2ggcmVjdXJzaW9uIilyZXR1cm4gbmV3IFAuS1koKQpyZXR1cm4gYX0sCnRzKGEpe3ZhciBzCmlm
-KGEgaW5zdGFuY2VvZiBILmJxKXJldHVybiBhLmIKaWYoYT09bnVsbClyZXR1cm4gbmV3IEguWE8oYSkK
-cz1hLiRjYWNoZWRUcmFjZQppZihzIT1udWxsKXJldHVybiBzCnJldHVybiBhLiRjYWNoZWRUcmFjZT1u
-ZXcgSC5YTyhhKX0sCkNVKGEpe2lmKGE9PW51bGx8fHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gSi5o
-ZihhKQplbHNlIHJldHVybiBILmVRKGEpfSwKQjcoYSxiKXt2YXIgcyxyLHEscD1hLmxlbmd0aApmb3Io
-cz0wO3M8cDtzPXEpe3I9cysxCnE9cisxCmIuWTUoMCxhW3NdLGFbcl0pfXJldHVybiBifSwKZnQoYSxi
-LGMsZCxlLGYpe3QuWS5hKGEpCnN3aXRjaChILklaKGIpKXtjYXNlIDA6cmV0dXJuIGEuJDAoKQpjYXNl
-IDE6cmV0dXJuIGEuJDEoYykKY2FzZSAyOnJldHVybiBhLiQyKGMsZCkKY2FzZSAzOnJldHVybiBhLiQz
-KGMsZCxlKQpjYXNlIDQ6cmV0dXJuIGEuJDQoYyxkLGUsZil9dGhyb3cgSC5iKG5ldyBQLkNEKCJVbnN1
-cHBvcnRlZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB3cmFwcGVkIGNsb3N1cmUiKSl9LAp0UihhLGIp
-e3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKcz1hLiRpZGVudGl0eQppZighIXMpcmV0dXJuIHMK
-cz1mdW5jdGlvbihjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyxoLGkpe3JldHVybiBlKGMsZCxmLGcs
-aCxpKX19KGEsYixILmZ0KQphLiRpZGVudGl0eT1zCnJldHVybiBzfSwKaUEoYTIpe3ZhciBzLHIscSxw
-LG8sbixtLGwsayxqLGk9YTIuY28saD1hMi5pUyxnPWEyLmlJLGY9YTIubkRBLGU9YTIuYUksZD1hMi5m
-cyxjPWEyLmNzLGI9ZFswXSxhPWNbMF0sYTA9aVtiXSxhMT1hMi5mVAphMS50b1N0cmluZwpzPWg/T2Jq
-ZWN0LmNyZWF0ZShuZXcgSC56eCgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSk6T2JqZWN0LmNyZWF0ZShu
-ZXcgSC5yVChudWxsLG51bGwpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkKcy4kaW5pdGlhbGl6ZT1zLmNv
-bnN0cnVjdG9yCmlmKGgpcj1mdW5jdGlvbiBzdGF0aWNfdGVhcl9vZmYoKXt0aGlzLiRpbml0aWFsaXpl
-KCl9CmVsc2V7cT0kLnlqCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJuIHEuaCgpCiQueWo9cSsx
-CnE9bmV3IEZ1bmN0aW9uKCJhLGIiK3EsInRoaXMuJGluaXRpYWxpemUoYSxiIitxKyIpIikKcj1xfXMu
-Y29uc3RydWN0b3I9cgpyLnByb3RvdHlwZT1zCnMuJF9uYW1lPWIKcy4kX3RhcmdldD1hMApxPSFoCmlm
-KHEpcD1ILmJ4KGIsYTAsZyxmKQplbHNle3MuJHN0YXRpY19uYW1lPWIKcD1hMH1zLiRTPUguaW0oYTEs
-aCxnKQpzW2FdPXAKZm9yKG89cCxuPTE7bjxkLmxlbmd0aDsrK24pe209ZFtuXQppZih0eXBlb2YgbT09
-InN0cmluZyIpe2w9aVttXQprPW0KbT1sfWVsc2Ugaz0iIgpqPWNbbl0KaWYoaiE9bnVsbCl7aWYocSlt
-PUguYngoayxtLGcsZikKc1tqXT1tfWlmKG49PT1lKW89bX1zLiRDPW8Kcy4kUj1hMi5yQwpzLiREPWEy
-LmRWCnJldHVybiByfSwKaW0oYSxiLGMpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZih0
-eXBlb2YgYT09InN0cmluZyIpe2lmKGIpdGhyb3cgSC5iKCJDYW5ub3QgY29tcHV0ZSBzaWduYXR1cmUg
-Zm9yIHN0YXRpYyB0ZWFyb2ZmLiIpCnJldHVybiBmdW5jdGlvbihkLGUpe3JldHVybiBmdW5jdGlvbigp
-e3JldHVybiBlKHRoaXMsZCl9fShhLEguVG4pfXRocm93IEguYigiRXJyb3IgaW4gZnVuY3Rpb25UeXBl
-IG9mIHRlYXJvZmYiKX0sCnZxKGEsYixjLGQpe3ZhciBzPUgueVMKc3dpdGNoKGI/LTE6YSl7Y2FzZSAw
-OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpW2VdKCl9
-fShjLHMpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJu
-IGYodGhpcylbZV0oZyl9fShjLHMpCmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVu
-Y3Rpb24oZyxoKXtyZXR1cm4gZih0aGlzKVtlXShnLGgpfX0oYyxzKQpjYXNlIDM6cmV0dXJuIGZ1bmN0
-aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSl9fShj
-LHMpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGksail7cmV0
-dXJuIGYodGhpcylbZV0oZyxoLGksail9fShjLHMpCmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmKXty
-ZXR1cm4gZnVuY3Rpb24oZyxoLGksaixrKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSxqLGspfX0oYyxz
-KQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFw
-cGx5KGYodGhpcyksYXJndW1lbnRzKX19KGQscyl9fSwKYngoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxu
-PSJyZWNlaXZlciIKaWYoYylyZXR1cm4gSC5IZihhLGIsZCkKcz1iLmxlbmd0aApyPWR8fHM+PTI3Cmlm
-KHIpcmV0dXJuIEgudnEocyxkLGEsYikKaWYocz09PTApe3I9JC55agppZih0eXBlb2YgciE9PSJudW1i
-ZXIiKXJldHVybiByLmgoKQokLnlqPXIrMQpxPSJzZWxmIityCnI9InJldHVybiBmdW5jdGlvbigpe3Zh
-ciAiK3ErIiA9IHRoaXMuIgpwPSQuaTAKcmV0dXJuIG5ldyBGdW5jdGlvbihyKyhwPT1udWxsPyQuaTA9
-SC5tOShuKTpwKSsiO3JldHVybiAiK3ErIi4iK2ErIigpO30iKSgpfW89ImFiY2RlZmdoaWprbG1ub3Bx
-cnN0dXZ3eHl6Ii5zcGxpdCgiIikuc3BsaWNlKDAscykuam9pbigiLCIpCnI9JC55agppZih0eXBlb2Yg
-ciE9PSJudW1iZXIiKXJldHVybiByLmgoKQokLnlqPXIrMQpvKz1yCnI9InJldHVybiBmdW5jdGlvbigi
-K28rIil7cmV0dXJuIHRoaXMuIgpwPSQuaTAKcmV0dXJuIG5ldyBGdW5jdGlvbihyKyhwPT1udWxsPyQu
-aTA9SC5tOShuKTpwKSsiLiIrYSsiKCIrbysiKTt9IikoKX0sClo0KGEsYixjLGQpe3ZhciBzPUgueVMs
-cj1ILkFPCnN3aXRjaChiPy0xOmEpe2Nhc2UgMDp0aHJvdyBILmIobmV3IEguRXEoIkludGVyY2VwdGVk
-IGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzLiIpKQpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsZixn
-KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpKX19KGMscixzKQpjYXNl
-IDI6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGYodGhpcylb
-ZV0oZyh0aGlzKSxoKX19KGMscixzKQpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4g
-ZnVuY3Rpb24oaCxpKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSl9fShjLHIscykKY2FzZSA0
-OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqKXtyZXR1cm4gZih0aGlz
-KVtlXShnKHRoaXMpLGgsaSxqKX19KGMscixzKQpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXty
-ZXR1cm4gZnVuY3Rpb24oaCxpLGosayl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksaixrKX19
-KGMscixzKQpjYXNlIDY6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGos
-ayxsKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqLGssbCl9fShjLHIscykKZGVmYXVsdDpy
-ZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbigpe3ZhciBxPVtnKHRoaXMpXQpBcnJh
-eS5wcm90b3R5cGUucHVzaC5hcHBseShxLGFyZ3VtZW50cykKcmV0dXJuIGUuYXBwbHkoZih0aGlzKSxx
-KX19KGQscixzKX19LApIZihhLGIsYyl7dmFyIHMscixxLHAsbyxuPSQuQWwKaWYobj09bnVsbCluPSQu
-QWw9SC5tOSgiaW50ZXJjZXB0b3IiKQpzPSQuaTAKaWYocz09bnVsbClzPSQuaTA9SC5tOSgicmVjZWl2
-ZXIiKQpyPWIubGVuZ3RoCnE9Y3x8cj49MjgKaWYocSlyZXR1cm4gSC5aNChyLGMsYSxiKQppZihyPT09
-MSl7cT0icmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuIituKyIuIithKyIodGhpcy4iK3MrIik7
-IgpwPSQueWoKaWYodHlwZW9mIHAhPT0ibnVtYmVyIilyZXR1cm4gcC5oKCkKJC55aj1wKzEKcmV0dXJu
-IG5ldyBGdW5jdGlvbihxK3ArIn0iKSgpfW89ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxp
-dCgiIikuc3BsaWNlKDAsci0xKS5qb2luKCIsIikKcT0icmV0dXJuIGZ1bmN0aW9uKCIrbysiKXtyZXR1
-cm4gdGhpcy4iK24rIi4iK2ErIih0aGlzLiIrcysiLCAiK28rIik7IgpwPSQueWoKaWYodHlwZW9mIHAh
-PT0ibnVtYmVyIilyZXR1cm4gcC5oKCkKJC55aj1wKzEKcmV0dXJuIG5ldyBGdW5jdGlvbihxK3ArIn0i
-KSgpfSwKVTIoYSl7cmV0dXJuIEguaUEoYSl9LApUbihhLGIpe3JldHVybiBILmNFKHYudHlwZVVuaXZl
-cnNlLEgueksoYS5hKSxiKX0sCnlTKGEpe3JldHVybiBhLmF9LApBTyhhKXtyZXR1cm4gYS5ifSwKbTko
-YSl7dmFyIHMscixxLHA9bmV3IEguclQoInJlY2VpdmVyIiwiaW50ZXJjZXB0b3IiKSxvPUouRXAoT2Jq
+cV19fWZ1bmN0aW9uIG1peGluUHJvcGVydGllc0hhcmQoYSxiKXt2YXIgcz1PYmplY3Qua2V5cyhhKQpm
+b3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHE9c1tyXQppZighYi5oYXNPd25Qcm9wZXJ0eShx
+KSliW3FdPWFbcV19fWZ1bmN0aW9uIG1peGluUHJvcGVydGllc0Vhc3koYSxiKXtPYmplY3QuYXNzaWdu
+KGIsYSl9dmFyIHo9ZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbigpe30Kcy5wcm90b3R5cGU9e3A6e319
+CnZhciByPW5ldyBzKCkKaWYoIShyLl9fcHJvdG9fXyYmci5fX3Byb3RvX18ucD09PXMucHJvdG90eXBl
+LnApKXJldHVybiBmYWxzZQp0cnl7aWYodHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJnR5cGVv
+ZiBuYXZpZ2F0b3IudXNlckFnZW50PT0ic3RyaW5nIiYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9m
+KCJDaHJvbWUvIik+PTApcmV0dXJuIHRydWUKaWYodHlwZW9mIHZlcnNpb249PSJmdW5jdGlvbiImJnZl
+cnNpb24ubGVuZ3RoPT0wKXt2YXIgcT12ZXJzaW9uKCkKaWYoL15cZCtcLlxkK1wuXGQrXC5cZCskLy50
+ZXN0KHEpKXJldHVybiB0cnVlfX1jYXRjaChwKXt9cmV0dXJuIGZhbHNlfSgpCmZ1bmN0aW9uIHNldEZ1
+bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeShhKXtmdW5jdGlvbiB0KCl7fTtpZih0eXBlb2YgdC5uYW1lPT0i
+c3RyaW5nIilyZXR1cm4KZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciByPWFbc10KdmFyIHE9
+T2JqZWN0LmtleXMocikKZm9yKHZhciBwPTA7cDxxLmxlbmd0aDtwKyspe3ZhciBvPXFbcF0KdmFyIG49
+cltvXQppZih0eXBlb2Ygbj09ImZ1bmN0aW9uIiluLm5hbWU9b319fWZ1bmN0aW9uIGluaGVyaXQoYSxi
+KXthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hCmEucHJvdG90eXBlWyIkaSIrYS5uYW1lXT1hCmlmKGIh
+PW51bGwpe2lmKHope2EucHJvdG90eXBlLl9fcHJvdG9fXz1iLnByb3RvdHlwZQpyZXR1cm59dmFyIHM9
+T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSkKY29weVByb3BlcnRpZXMoYS5wcm90b3R5cGUscykKYS5w
+cm90b3R5cGU9c319ZnVuY3Rpb24gaW5oZXJpdE1hbnkoYSxiKXtmb3IodmFyIHM9MDtzPGIubGVuZ3Ro
+O3MrKylpbmhlcml0KGJbc10sYSl9ZnVuY3Rpb24gbWl4aW5FYXN5KGEsYil7bWl4aW5Qcm9wZXJ0aWVz
+RWFzeShiLnByb3RvdHlwZSxhLnByb3RvdHlwZSkKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YX1mdW5j
+dGlvbiBtaXhpbkhhcmQoYSxiKXttaXhpblByb3BlcnRpZXNIYXJkKGIucHJvdG90eXBlLGEucHJvdG90
+eXBlKQphLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hfWZ1bmN0aW9uIGxhenlPbGQoYSxiLGMsZCl7dmFy
+IHM9YQphW2JdPXMKYVtjXT1mdW5jdGlvbigpe2FbY109ZnVuY3Rpb24oKXtBLmFnKGIpfQp2YXIgcgp2
+YXIgcT1kCnRyeXtpZihhW2JdPT09cyl7cj1hW2JdPXEKcj1hW2JdPWQoKX1lbHNlIHI9YVtiXX1maW5h
+bGx5e2lmKHI9PT1xKWFbYl09bnVsbAphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19fXJldHVy
+biByfX1mdW5jdGlvbiBsYXp5KGEsYixjLGQpe3ZhciBzPWEKYVtiXT1zCmFbY109ZnVuY3Rpb24oKXtp
+ZihhW2JdPT09cylhW2JdPWQoKQphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19CnJldHVybiBh
+W2JdfX1mdW5jdGlvbiBsYXp5RmluYWwoYSxiLGMsZCl7dmFyIHM9YQphW2JdPXMKYVtjXT1mdW5jdGlv
+bigpe2lmKGFbYl09PT1zKXt2YXIgcj1kKCkKaWYoYVtiXSE9PXMpQS5GUChiKQphW2JdPXJ9dmFyIHE9
+YVtiXQphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHF9CnJldHVybiBxfX1mdW5jdGlvbiBtYWtlQ29uc3RM
+aXN0KGEpe2EuaW1tdXRhYmxlJGxpc3Q9QXJyYXkKYS5maXhlZCRsZW5ndGg9QXJyYXkKcmV0dXJuIGF9
+ZnVuY3Rpb24gY29udmVydFRvRmFzdE9iamVjdChhKXtmdW5jdGlvbiB0KCl7fXQucHJvdG90eXBlPWEK
+bmV3IHQoKQpyZXR1cm4gYX1mdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGEpe2Zvcih2YXIg
+cz0wO3M8YS5sZW5ndGg7KytzKWNvbnZlcnRUb0Zhc3RPYmplY3QoYVtzXSl9dmFyIHk9MApmdW5jdGlv
+biBpbnN0YW5jZVRlYXJPZmZHZXR0ZXIoYSxiKXt2YXIgcz1udWxsCnJldHVybiBhP2Z1bmN0aW9uKGMp
+e2lmKHM9PT1udWxsKXM9QS5VMihiKQpyZXR1cm4gbmV3IHMoYyx0aGlzKX06ZnVuY3Rpb24oKXtpZihz
+PT09bnVsbClzPUEuVTIoYikKcmV0dXJuIG5ldyBzKHRoaXMsbnVsbCl9fWZ1bmN0aW9uIHN0YXRpY1Rl
+YXJPZmZHZXR0ZXIoYSl7dmFyIHM9bnVsbApyZXR1cm4gZnVuY3Rpb24oKXtpZihzPT09bnVsbClzPUEu
+VTIoYSkucHJvdG90eXBlCnJldHVybiBzfX12YXIgeD0wCmZ1bmN0aW9uIHRlYXJPZmZQYXJhbWV0ZXJz
+KGEsYixjLGQsZSxmLGcsaCxpLGope2lmKHR5cGVvZiBoPT0ibnVtYmVyIiloKz14CnJldHVybntjbzph
+LGlTOmIsaUk6YyxyQzpkLGRWOmUsY3M6ZixmczpnLGZUOmgsYUk6aXx8MCxuREE6an19ZnVuY3Rpb24g
+aW5zdGFsbFN0YXRpY1RlYXJPZmYoYSxiLGMsZCxlLGYsZyxoKXt2YXIgcz10ZWFyT2ZmUGFyYW1ldGVy
+cyhhLHRydWUsZmFsc2UsYyxkLGUsZixnLGgsZmFsc2UpCnZhciByPXN0YXRpY1RlYXJPZmZHZXR0ZXIo
+cykKYVtiXT1yfWZ1bmN0aW9uIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoYSxiLGMsZCxlLGYsZyxoLGks
+ail7Yz0hIWMKdmFyIHM9dGVhck9mZlBhcmFtZXRlcnMoYSxmYWxzZSxjLGQsZSxmLGcsaCxpLCEhaikK
+dmFyIHI9aW5zdGFuY2VUZWFyT2ZmR2V0dGVyKGMscykKYVtiXT1yfWZ1bmN0aW9uIHNldE9yVXBkYXRl
+SW50ZXJjZXB0b3JzQnlUYWcoYSl7dmFyIHM9di5pbnRlcmNlcHRvcnNCeVRhZwppZighcyl7di5pbnRl
+cmNlcHRvcnNCeVRhZz1hCnJldHVybn1jb3B5UHJvcGVydGllcyhhLHMpfWZ1bmN0aW9uIHNldE9yVXBk
+YXRlTGVhZlRhZ3MoYSl7dmFyIHM9di5sZWFmVGFncwppZighcyl7di5sZWFmVGFncz1hCnJldHVybn1j
+b3B5UHJvcGVydGllcyhhLHMpfWZ1bmN0aW9uIHVwZGF0ZVR5cGVzKGEpe3ZhciBzPXYudHlwZXMKdmFy
+IHI9cy5sZW5ndGgKcy5wdXNoLmFwcGx5KHMsYSkKcmV0dXJuIHJ9ZnVuY3Rpb24gdXBkYXRlSG9sZGVy
+KGEsYil7Y29weVByb3BlcnRpZXMoYixhKQpyZXR1cm4gYX12YXIgaHVua0hlbHBlcnM9ZnVuY3Rpb24o
+KXt2YXIgcz1mdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBmdW5jdGlvbihmLGcsaCxpKXtyZXR1cm4g
+aW5zdGFsbEluc3RhbmNlVGVhck9mZihmLGcsYSxiLGMsZCxbaF0saSxlLGZhbHNlKX19LHI9ZnVuY3Rp
+b24oYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKGUsZixnLGgpe3JldHVybiBpbnN0YWxsU3RhdGljVGVh
+ck9mZihlLGYsYSxiLGMsW2ddLGgsZCl9fQpyZXR1cm57aW5oZXJpdDppbmhlcml0LGluaGVyaXRNYW55
+OmluaGVyaXRNYW55LG1peGluOm1peGluRWFzeSxtaXhpbkhhcmQ6bWl4aW5IYXJkLGluc3RhbGxTdGF0
+aWNUZWFyT2ZmOmluc3RhbGxTdGF0aWNUZWFyT2ZmLGluc3RhbGxJbnN0YW5jZVRlYXJPZmY6aW5zdGFs
+bEluc3RhbmNlVGVhck9mZixfaW5zdGFuY2VfMHU6cygwLDAsbnVsbCxbIiQwIl0sMCksX2luc3RhbmNl
+XzF1OnMoMCwxLG51bGwsWyIkMSJdLDApLF9pbnN0YW5jZV8ydTpzKDAsMixudWxsLFsiJDIiXSwwKSxf
+aW5zdGFuY2VfMGk6cygxLDAsbnVsbCxbIiQwIl0sMCksX2luc3RhbmNlXzFpOnMoMSwxLG51bGwsWyIk
+MSJdLDApLF9pbnN0YW5jZV8yaTpzKDEsMixudWxsLFsiJDIiXSwwKSxfc3RhdGljXzA6cigwLG51bGws
+WyIkMCJdLDApLF9zdGF0aWNfMTpyKDEsbnVsbCxbIiQxIl0sMCksX3N0YXRpY18yOnIoMixudWxsLFsi
+JDIiXSwwKSxtYWtlQ29uc3RMaXN0Om1ha2VDb25zdExpc3QsbGF6eTpsYXp5LGxhenlGaW5hbDpsYXp5
+RmluYWwsbGF6eU9sZDpsYXp5T2xkLHVwZGF0ZUhvbGRlcjp1cGRhdGVIb2xkZXIsY29udmVydFRvRmFz
+dE9iamVjdDpjb252ZXJ0VG9GYXN0T2JqZWN0LHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeTpzZXRG
+dW5jdGlvbk5hbWVzSWZOZWNlc3NhcnksdXBkYXRlVHlwZXM6dXBkYXRlVHlwZXMsc2V0T3JVcGRhdGVJ
+bnRlcmNlcHRvcnNCeVRhZzpzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnLHNldE9yVXBkYXRlTGVh
+ZlRhZ3M6c2V0T3JVcGRhdGVMZWFmVGFnc319KCkKZnVuY3Rpb24gaW5pdGlhbGl6ZURlZmVycmVkSHVu
+ayhhKXt4PXYudHlwZXMubGVuZ3RoCmEoaHVua0hlbHBlcnMsdix3LCQpfXZhciBBPXtGSzpmdW5jdGlv
+biBGSygpe30sCkdKKGEsYixjKXtpZihiLkMoImJRPDA+IikuYihhKSlyZXR1cm4gbmV3IEEub2woYSxi
+LkMoIkA8MD4iKS5LcShjKS5DKCJvbDwxLDI+IikpCnJldHVybiBuZXcgQS5aeShhLGIuQygiQDwwPiIp
+LktxKGMpLkMoIlp5PDEsMj4iKSl9LApqKGEpe3JldHVybiBuZXcgQS5jKCJGaWVsZCAnIithKyInIGhh
+cyBiZWVuIGFzc2lnbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4iKX0sCm9vKGEpe3ZhciBzLHI9YV40
+OAppZihyPD05KXJldHVybiByCnM9YXwzMgppZig5Nzw9cyYmczw9MTAyKXJldHVybiBzLTg3CnJldHVy
+bi0xfSwKeWMoYSxiKXthPWErYiY1MzY4NzA5MTEKYT1hKygoYSY1MjQyODcpPDwxMCkmNTM2ODcwOTEx
+CnJldHVybiBhXmE+Pj42fSwKcUwoYSl7YT1hKygoYSY2NzEwODg2Myk8PDMpJjUzNjg3MDkxMQphXj1h
+Pj4+MTEKcmV0dXJuIGErKChhJjE2MzgzKTw8MTUpJjUzNjg3MDkxMX0sCmNiKGEsYixjKXtyZXR1cm4g
+YX0sCnFDKGEsYixjLGQpe0EuazEoYiwic3RhcnQiKQppZihjIT1udWxsKXtBLmsxKGMsImVuZCIpCmlm
+KGI+YylBLnYoQS5URShiLDAsYywic3RhcnQiLG51bGwpKX1yZXR1cm4gbmV3IEEubkgoYSxiLGMsZC5D
+KCJuSDwwPiIpKX0sCksxKGEsYixjLGQpe2lmKHQuVS5iKGEpKXJldHVybiBuZXcgQS54eShhLGIsYy5D
+KCJAPDA+IikuS3EoZCkuQygieHk8MSwyPiIpKQpyZXR1cm4gbmV3IEEuaTEoYSxiLGMuQygiQDwwPiIp
+LktxKGQpLkMoImkxPDEsMj4iKSl9LApiSyhhLGIsYyl7dmFyIHM9ImNvdW50IgppZih0LlUuYihhKSl7
+QS5NUihiLHMsdC5TKQpBLmsxKGIscykKcmV0dXJuIG5ldyBBLmQ1KGEsYixjLkMoImQ1PDA+IikpfUEu
+TVIoYixzLHQuUykKQS5rMShiLHMpCnJldHVybiBuZXcgQS5BTShhLGIsYy5DKCJBTTwwPiIpKX0sCldw
+KCl7cmV0dXJuIG5ldyBBLmxqKCJObyBlbGVtZW50Iil9LApBbSgpe3JldHVybiBuZXcgQS5saigiVG9v
+IG1hbnkgZWxlbWVudHMiKX0sCmFyKCl7cmV0dXJuIG5ldyBBLmxqKCJUb28gZmV3IGVsZW1lbnRzIil9
+LApCUjpmdW5jdGlvbiBCUigpe30sCmVUOmZ1bmN0aW9uIGVUKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9
+Yn0sClp5OmZ1bmN0aW9uIFp5KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCm9sOmZ1bmN0aW9uIG9s
+KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sClVxOmZ1bmN0aW9uIFVxKCl7fSwKalY6ZnVuY3Rpb24g
+alYoYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKYzpmdW5jdGlvbiBjKGEpe3RoaXMuYT1hfSwKcWo6
+ZnVuY3Rpb24gcWooYSl7dGhpcy5hPWF9LApIYjpmdW5jdGlvbiBIYigpe30sCmJROmZ1bmN0aW9uIGJR
+KCl7fSwKYUw6ZnVuY3Rpb24gYUwoKXt9LApuSDpmdW5jdGlvbiBuSChhLGIsYyxkKXt2YXIgXz10aGlz
+Cl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LAphNzpmdW5jdGlvbiBhNyhhLGIsYyl7dmFyIF89dGhp
+cwpfLmE9YQpfLmI9YgpfLmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKaTE6ZnVuY3Rpb24gaTEoYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LAp4eTpmdW5jdGlvbiB4eShhLGIsYyl7dGhpcy5h
+PWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCk1IOmZ1bmN0aW9uIE1IKGEsYixjKXt2YXIgXz10aGlzCl8u
+YT1udWxsCl8uYj1hCl8uYz1iCl8uJHRpPWN9LApsSjpmdW5jdGlvbiBsSihhLGIsYyl7dGhpcy5hPWEK
+dGhpcy5iPWIKdGhpcy4kdGk9Y30sClU1OmZ1bmN0aW9uIFU1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
+Ygp0aGlzLiR0aT1jfSwKU086ZnVuY3Rpb24gU08oYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMu
+JHRpPWN9LApBTTpmdW5jdGlvbiBBTShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30s
+CmQ1OmZ1bmN0aW9uIGQ1KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKVTE6ZnVu
+Y3Rpb24gVTEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApNQjpmdW5jdGlvbiBN
+QihhKXt0aGlzLiR0aT1hfSwKRnU6ZnVuY3Rpb24gRnUoYSl7dGhpcy4kdGk9YX0sCnU2OmZ1bmN0aW9u
+IHU2KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkpCOmZ1bmN0aW9uIEpCKGEsYil7dGhpcy5hPWEK
+dGhpcy4kdGk9Yn0sClNVOmZ1bmN0aW9uIFNVKCl7fSwKUmU6ZnVuY3Rpb24gUmUoKXt9LAp3MjpmdW5j
+dGlvbiB3Migpe30sCnd2OmZ1bmN0aW9uIHd2KGEpe3RoaXMuYT1hfSwKUUM6ZnVuY3Rpb24gUUMoKXt9
+LApkYygpe3Rocm93IEEuYihBLkw0KCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBNYXAiKSl9LApO
+UShhKXt2YXIgcyxyPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIhPW51bGwpcmV0dXJuIHIKcz0i
+bWluaWZpZWQ6IithCnJldHVybiBzfSwKd1YoYSxiKXt2YXIgcwppZihiIT1udWxsKXtzPWIueAppZihz
+IT1udWxsKXJldHVybiBzfXJldHVybiB0LmFVLmIoYSl9LApFaihhKXt2YXIgcwppZih0eXBlb2YgYT09
+InN0cmluZyIpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihhIT09MClyZXR1cm4iIith
+fWVsc2UgaWYoITA9PT1hKXJldHVybiJ0cnVlIgplbHNlIGlmKCExPT09YSlyZXR1cm4iZmFsc2UiCmVs
+c2UgaWYoYT09bnVsbClyZXR1cm4ibnVsbCIKcz1KLllTKGEpCnJldHVybiBzfSwKZVEoYSl7dmFyIHMs
+cixxPSQueHUKaWYocT09bnVsbCl7cz1TeW1ib2woImlkZW50aXR5SGFzaENvZGUiKQpxPSQueHU9c31y
+PWFbcV0KaWYocj09bnVsbCl7cj1NYXRoLnJhbmRvbSgpKjB4M2ZmZmZmZmZ8MAphW3FdPXJ9cmV0dXJu
+IHJ9LApIcChhLGIpe3ZhciBzLHIscSxwLG8sbj1udWxsLG09L15ccypbKy1dPygoMHhbYS1mMC05XSsp
+fChcZCspfChbYS16MC05XSspKVxzKiQvaS5leGVjKGEpCmlmKG09PW51bGwpcmV0dXJuIG4KaWYoMz49
+bS5sZW5ndGgpcmV0dXJuIEEuT0gobSwzKQpzPW1bM10KaWYoYj09bnVsbCl7aWYocyE9bnVsbClyZXR1
+cm4gcGFyc2VJbnQoYSwxMCkKaWYobVsyXSE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxNikKcmV0dXJu
+IG59aWYoYjwyfHxiPjM2KXRocm93IEEuYihBLlRFKGIsMiwzNiwicmFkaXgiLG4pKQppZihiPT09MTAm
+JnMhPW51bGwpcmV0dXJuIHBhcnNlSW50KGEsMTApCmlmKGI8MTB8fHM9PW51bGwpe3I9Yjw9MTA/NDcr
+Yjo4NitiCnE9bVsxXQpmb3IocD1xLmxlbmd0aCxvPTA7bzxwOysrbylpZigoQi54Qi5XKHEsbyl8MzIp
+PnIpcmV0dXJuIG59cmV0dXJuIHBhcnNlSW50KGEsYil9LApsaChhKXtyZXR1cm4gQS5INShhKX0sCkg1
+KGEpe3ZhciBzLHIscSxwLG8KaWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIEEuZG0oQS56SyhhKSxu
+dWxsKQpzPUouaWEoYSkKaWYocz09PUIuT2t8fHM9PT1CLlVifHx0LmJJLmIoYSkpe3I9Qi5PNChhKQpx
+PXIhPT0iT2JqZWN0IiYmciE9PSIiCmlmKHEpcmV0dXJuIHIKcD1hLmNvbnN0cnVjdG9yCmlmKHR5cGVv
+ZiBwPT0iZnVuY3Rpb24iKXtvPXAubmFtZQppZih0eXBlb2Ygbz09InN0cmluZyIpcT1vIT09Ik9iamVj
+dCImJm8hPT0iIgplbHNlIHE9ITEKaWYocSlyZXR1cm4gb319cmV0dXJuIEEuZG0oQS56SyhhKSxudWxs
+KX0sCk0wKCl7aWYoISFzZWxmLmxvY2F0aW9uKXJldHVybiBzZWxmLmxvY2F0aW9uLmhyZWYKcmV0dXJu
+IG51bGx9LApmdyhhLGIsYyl7dmFyIHMscixxLHAKaWYoYzw9NTAwJiZiPT09MCYmYz09PWEubGVuZ3Ro
+KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYSkKZm9yKHM9YixyPSIiO3M8Yztz
+PXEpe3E9cys1MDAKcD1xPGM/cTpjCnIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhLnN1
+YmFycmF5KHMscCkpfXJldHVybiByfSwKTHcoYSl7dmFyIHMKaWYoMDw9YSl7aWYoYTw9NjU1MzUpcmV0
+dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSkKaWYoYTw9MTExNDExMSl7cz1hLTY1NTM2CnJldHVybiBT
+dHJpbmcuZnJvbUNoYXJDb2RlKChCLmpuLndHKHMsMTApfDU1Mjk2KT4+PjAscyYxMDIzfDU2MzIwKX19
+dGhyb3cgQS5iKEEuVEUoYSwwLDExMTQxMTEsbnVsbCxudWxsKSl9LApvMihhKXtpZihhLmRhdGU9PT12
+b2lkIDApYS5kYXRlPW5ldyBEYXRlKGEuYSkKcmV0dXJuIGEuZGF0ZX0sCnRKKGEpe3ZhciBzPUEubzIo
+YSkuZ2V0RnVsbFllYXIoKSswCnJldHVybiBzfSwKTlMoYSl7dmFyIHM9QS5vMihhKS5nZXRNb250aCgp
+KzEKcmV0dXJuIHN9LApqQShhKXt2YXIgcz1BLm8yKGEpLmdldERhdGUoKSswCnJldHVybiBzfSwKSVgo
+YSl7dmFyIHM9QS5vMihhKS5nZXRIb3VycygpKzAKcmV0dXJuIHN9LApjaChhKXt2YXIgcz1BLm8yKGEp
+LmdldE1pbnV0ZXMoKSswCnJldHVybiBzfSwKSmQoYSl7dmFyIHM9QS5vMihhKS5nZXRTZWNvbmRzKCkr
+MApyZXR1cm4gc30sCm8xKGEpe3ZhciBzPUEubzIoYSkuZ2V0TWlsbGlzZWNvbmRzKCkrMApyZXR1cm4g
+c30sCnpvKGEsYixjKXt2YXIgcyxyLHE9e30KcS5hPTAKcz1bXQpyPVtdCnEuYT1iLmxlbmd0aApCLk5t
+LkZWKHMsYikKcS5iPSIiCmlmKGMhPW51bGwmJiFjLmdsMChjKSljLksoMCxuZXcgQS5DaihxLHIscykp
+CiIiK3EuYQpyZXR1cm4gSi5KeShhLG5ldyBBLkxJKEIuVGUsMCxzLHIsMCkpfSwKRWsoYSxiLGMpe3Zh
+ciBzLHIscT1jPT1udWxsfHxjLmdsMChjKQppZihxKXtzPWIubGVuZ3RoCmlmKHM9PT0wKXtpZighIWEu
+JDApcmV0dXJuIGEuJDAoKX1lbHNlIGlmKHM9PT0xKXtpZighIWEuJDEpcmV0dXJuIGEuJDEoYlswXSl9
+ZWxzZSBpZihzPT09Mil7aWYoISFhLiQyKXJldHVybiBhLiQyKGJbMF0sYlsxXSl9ZWxzZSBpZihzPT09
+Myl7aWYoISFhLiQzKXJldHVybiBhLiQzKGJbMF0sYlsxXSxiWzJdKX1lbHNlIGlmKHM9PT00KXtpZigh
+IWEuJDQpcmV0dXJuIGEuJDQoYlswXSxiWzFdLGJbMl0sYlszXSl9ZWxzZSBpZihzPT09NSlpZighIWEu
+JDUpcmV0dXJuIGEuJDUoYlswXSxiWzFdLGJbMl0sYlszXSxiWzRdKQpyPWFbIiIrIiQiK3NdCmlmKHIh
+PW51bGwpcmV0dXJuIHIuYXBwbHkoYSxiKX1yZXR1cm4gQS5aVChhLGIsYyl9LApaVChhLGIsYyl7dmFy
+IHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZj1iLmxlbmd0aCxlPWEuJFIKaWYoZjxlKXJldHVybiBB
+LnpvKGEsYixjKQpzPWEuJEQKcj1zPT1udWxsCnE9IXI/cygpOm51bGwKcD1KLmlhKGEpCm89cC4kQwpp
+Zih0eXBlb2Ygbz09InN0cmluZyIpbz1wW29dCmlmKHIpe2lmKGMhPW51bGwmJmMuZ29yKGMpKXJldHVy
+biBBLnpvKGEsYixjKQppZihmPT09ZSlyZXR1cm4gby5hcHBseShhLGIpCnJldHVybiBBLnpvKGEsYixj
+KX1pZihBcnJheS5pc0FycmF5KHEpKXtpZihjIT1udWxsJiZjLmdvcihjKSlyZXR1cm4gQS56byhhLGIs
+YykKbj1lK3EubGVuZ3RoCmlmKGY+bilyZXR1cm4gQS56byhhLGIsbnVsbCkKaWYoZjxuKXttPXEuc2xp
+Y2UoZi1lKQpsPUEuWTEoYiwhMCx0LnopCkIuTm0uRlYobCxtKX1lbHNlIGw9YgpyZXR1cm4gby5hcHBs
+eShhLGwpfWVsc2V7aWYoZj5lKXJldHVybiBBLnpvKGEsYixjKQpsPUEuWTEoYiwhMCx0LnopCms9T2Jq
+ZWN0LmtleXMocSkKaWYoYz09bnVsbClmb3Iocj1rLmxlbmd0aCxqPTA7ajxrLmxlbmd0aDtrLmxlbmd0
+aD09PXJ8fCgwLEEubGspKGspLCsrail7aT1xW0EubihrW2pdKV0KaWYoQi5Odj09PWkpcmV0dXJuIEEu
+em8oYSxsLGMpCkIuTm0uaShsLGkpfWVsc2V7Zm9yKHI9ay5sZW5ndGgsaD0wLGo9MDtqPGsubGVuZ3Ro
+O2subGVuZ3RoPT09cnx8KDAsQS5saykoayksKytqKXtnPUEubihrW2pdKQppZihjLng0KGcpKXsrK2gK
+Qi5ObS5pKGwsYy5xKDAsZykpfWVsc2V7aT1xW2ddCmlmKEIuTnY9PT1pKXJldHVybiBBLnpvKGEsbCxj
+KQpCLk5tLmkobCxpKX19aWYoaCE9PWMuZ0EoYykpcmV0dXJuIEEuem8oYSxsLGMpfXJldHVybiBvLmFw
+cGx5KGEsbCl9fSwKcFkoYSl7dGhyb3cgQS5iKEEudEwoYSkpfSwKT0goYSxiKXtpZihhPT1udWxsKUou
+SG0oYSkKdGhyb3cgQS5iKEEudShhLGIpKX0sCnUoYSxiKXt2YXIgcyxyPSJpbmRleCIKaWYoIUEub2so
+YikpcmV0dXJuIG5ldyBBLkFUKCEwLGIscixudWxsKQpzPUEuSVooSi5IbShhKSkKaWYoYjwwfHxiPj1z
+KXJldHVybiBBLkNmKGIsYSxyLG51bGwscykKcmV0dXJuIEEuTzcoYixyKX0sCmF1KGEsYixjKXtpZihh
+PmMpcmV0dXJuIEEuVEUoYSwwLGMsInN0YXJ0IixudWxsKQppZihiIT1udWxsKWlmKGI8YXx8Yj5jKXJl
+dHVybiBBLlRFKGIsYSxjLCJlbmQiLG51bGwpCnJldHVybiBuZXcgQS5BVCghMCxiLCJlbmQiLG51bGwp
+fSwKdEwoYSl7cmV0dXJuIG5ldyBBLkFUKCEwLGEsbnVsbCxudWxsKX0sCmIoYSl7dmFyIHMscgppZihh
+PT1udWxsKWE9bmV3IEEuRigpCnM9bmV3IEVycm9yKCkKcy5kYXJ0RXhjZXB0aW9uPWEKcj1BLmgKaWYo
+ImRlZmluZVByb3BlcnR5IiBpbiBPYmplY3Qpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJtZXNzYWdl
+Iix7Z2V0OnJ9KQpzLm5hbWU9IiJ9ZWxzZSBzLnRvU3RyaW5nPXIKcmV0dXJuIHN9LApoKCl7cmV0dXJu
+IEouWVModGhpcy5kYXJ0RXhjZXB0aW9uKX0sCnYoYSl7dGhyb3cgQS5iKGEpfSwKbGsoYSl7dGhyb3cg
+QS5iKEEuYTQoYSkpfSwKY00oYSl7dmFyIHMscixxLHAsbyxuCmE9QS5lQShhLnJlcGxhY2UoU3RyaW5n
+KHt9KSwiJHJlY2VpdmVyJCIpKQpzPWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHM9PW51
+bGwpcz1BLlFJKFtdLHQucykKcj1zLmluZGV4T2YoIlxcJGFyZ3VtZW50c1xcJCIpCnE9cy5pbmRleE9m
+KCJcXCRhcmd1bWVudHNFeHByXFwkIikKcD1zLmluZGV4T2YoIlxcJGV4cHJcXCQiKQpvPXMuaW5kZXhP
+ZigiXFwkbWV0aG9kXFwkIikKbj1zLmluZGV4T2YoIlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBB
+LmY5KGEucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzXFxcXFxcJCIsImciKSwiKCg/
+Onh8W154XSkqKSIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwk
+IiwiZyIpLCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkZXhwclxcXFxc
+XCQiLCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRtZXRob2Rc
+XFxcXFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkcmVj
+ZWl2ZXJcXFxcXFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIikscixxLHAsbyxuKX0sClM3KGEpe3JldHVy
+biBmdW5jdGlvbigkZXhwciQpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7JGV4
+cHIkLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KGEp
+fSwKTWooYSl7cmV0dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4kbWV0aG9kJH1jYXRjaChz
+KXtyZXR1cm4gcy5tZXNzYWdlfX0oYSl9LApUMyhhLGIpe3ZhciBzPWI9PW51bGwscj1zP251bGw6Yi5t
+ZXRob2QKcmV0dXJuIG5ldyBBLmF6KGEscixzP251bGw6Yi5yZWNlaXZlcil9LApSdShhKXtpZihhPT1u
+dWxsKXJldHVybiBuZXcgQS50ZShhKQppZihhIGluc3RhbmNlb2YgQS5icSlyZXR1cm4gQS50VyhhLHQu
+Sy5hKGEuYSkpCmlmKHR5cGVvZiBhIT09Im9iamVjdCIpcmV0dXJuIGEKaWYoImRhcnRFeGNlcHRpb24i
+IGluIGEpcmV0dXJuIEEudFcoYSxhLmRhcnRFeGNlcHRpb24pCnJldHVybiBBLnRsKGEpfSwKdFcoYSxi
+KXtpZih0LnUuYihiKSlpZihiLiR0aHJvd25Kc0Vycm9yPT1udWxsKWIuJHRocm93bkpzRXJyb3I9YQpy
+ZXR1cm4gYn0sCnRsKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsCmlmKCEo
+Im1lc3NhZ2UiIGluIGEpKXJldHVybiBhCnM9YS5tZXNzYWdlCmlmKCJudW1iZXIiIGluIGEmJnR5cGVv
+ZiBhLm51bWJlcj09Im51bWJlciIpe3I9YS5udW1iZXIKcT1yJjY1NTM1CmlmKChCLmpuLndHKHIsMTYp
+JjgxOTEpPT09MTApc3dpdGNoKHEpe2Nhc2UgNDM4OnJldHVybiBBLnRXKGEsQS5UMyhBLkVqKHMpKyIg
+KEVycm9yICIrcSsiKSIsZSkpCmNhc2UgNDQ1OmNhc2UgNTAwNzpwPUEuRWoocykrIiAoRXJyb3IgIitx
+KyIpIgpyZXR1cm4gQS50VyhhLG5ldyBBLlcwKHAsZSkpfX1pZihhIGluc3RhbmNlb2YgVHlwZUVycm9y
+KXtvPSQuU24oKQpuPSQubHEoKQptPSQuTjkoKQpsPSQuaUkoKQprPSQuVU4oKQpqPSQuWmgoKQppPSQu
+ck4oKQokLmMzKCkKaD0kLkhLKCkKZz0kLnIxKCkKZj1vLnFTKHMpCmlmKGYhPW51bGwpcmV0dXJuIEEu
+dFcoYSxBLlQzKEEubihzKSxmKSkKZWxzZXtmPW4ucVMocykKaWYoZiE9bnVsbCl7Zi5tZXRob2Q9ImNh
+bGwiCnJldHVybiBBLnRXKGEsQS5UMyhBLm4ocyksZikpfWVsc2V7Zj1tLnFTKHMpCmlmKGY9PW51bGwp
+e2Y9bC5xUyhzKQppZihmPT1udWxsKXtmPWsucVMocykKaWYoZj09bnVsbCl7Zj1qLnFTKHMpCmlmKGY9
+PW51bGwpe2Y9aS5xUyhzKQppZihmPT1udWxsKXtmPWwucVMocykKaWYoZj09bnVsbCl7Zj1oLnFTKHMp
+CmlmKGY9PW51bGwpe2Y9Zy5xUyhzKQpwPWYhPW51bGx9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9
+ITB9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwCmlmKHApe0EubihzKQpyZXR1
+cm4gQS50VyhhLG5ldyBBLlcwKHMsZj09bnVsbD9lOmYubWV0aG9kKSl9fX1yZXR1cm4gQS50VyhhLG5l
+dyBBLnZWKHR5cGVvZiBzPT0ic3RyaW5nIj9zOiIiKSl9aWYoYSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ip
+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiYmcy5pbmRleE9mKCJjYWxsIHN0YWNrIikhPT0tMSlyZXR1cm4g
+bmV3IEEuS1koKQpzPWZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gU3RyaW5nKGIpfWNhdGNoKGQpe31yZXR1
+cm4gbnVsbH0oYSkKcmV0dXJuIEEudFcoYSxuZXcgQS5BVCghMSxlLGUsdHlwZW9mIHM9PSJzdHJpbmci
+P3MucmVwbGFjZSgvXlJhbmdlRXJyb3I6XHMqLywiIik6cykpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9y
+PT0iZnVuY3Rpb24iJiZhIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcilpZih0eXBlb2Ygcz09InN0cmlu
+ZyImJnM9PT0idG9vIG11Y2ggcmVjdXJzaW9uIilyZXR1cm4gbmV3IEEuS1koKQpyZXR1cm4gYX0sCnRz
+KGEpe3ZhciBzCmlmKGEgaW5zdGFuY2VvZiBBLmJxKXJldHVybiBhLmIKaWYoYT09bnVsbClyZXR1cm4g
+bmV3IEEuWE8oYSkKcz1hLiRjYWNoZWRUcmFjZQppZihzIT1udWxsKXJldHVybiBzCnJldHVybiBhLiRj
+YWNoZWRUcmFjZT1uZXcgQS5YTyhhKX0sCkNVKGEpe2lmKGE9PW51bGx8fHR5cGVvZiBhIT0ib2JqZWN0
+IilyZXR1cm4gSi5VMyhhKQplbHNlIHJldHVybiBBLmVRKGEpfSwKQjcoYSxiKXt2YXIgcyxyLHEscD1h
+Lmxlbmd0aApmb3Iocz0wO3M8cDtzPXEpe3I9cysxCnE9cisxCmIuWTUoMCxhW3NdLGFbcl0pfXJldHVy
+biBifSwKZnQoYSxiLGMsZCxlLGYpe3QuWS5hKGEpCnN3aXRjaChBLklaKGIpKXtjYXNlIDA6cmV0dXJu
+IGEuJDAoKQpjYXNlIDE6cmV0dXJuIGEuJDEoYykKY2FzZSAyOnJldHVybiBhLiQyKGMsZCkKY2FzZSAz
+OnJldHVybiBhLiQzKGMsZCxlKQpjYXNlIDQ6cmV0dXJuIGEuJDQoYyxkLGUsZil9dGhyb3cgQS5iKG5l
+dyBBLkNEKCJVbnN1cHBvcnRlZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB3cmFwcGVkIGNsb3N1cmUi
+KSl9LAp0UihhLGIpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKcz1hLiRpZGVudGl0eQppZigh
+IXMpcmV0dXJuIHMKcz1mdW5jdGlvbihjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyxoLGkpe3JldHVy
+biBlKGMsZCxmLGcsaCxpKX19KGEsYixBLmZ0KQphLiRpZGVudGl0eT1zCnJldHVybiBzfSwKaUEoYTIp
+e3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9YTIuY28saD1hMi5pUyxnPWEyLmlJLGY9YTIubkRBLGU9
+YTIuYUksZD1hMi5mcyxjPWEyLmNzLGI9ZFswXSxhPWNbMF0sYTA9aVtiXSxhMT1hMi5mVAphMS50b1N0
+cmluZwpzPWg/T2JqZWN0LmNyZWF0ZShuZXcgQS56eCgpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSk6T2Jq
+ZWN0LmNyZWF0ZShuZXcgQS5yVChudWxsLG51bGwpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkKcy4kaW5p
+dGlhbGl6ZT1zLmNvbnN0cnVjdG9yCmlmKGgpcj1mdW5jdGlvbiBzdGF0aWNfdGVhcl9vZmYoKXt0aGlz
+LiRpbml0aWFsaXplKCl9CmVsc2Ugcj1mdW5jdGlvbiB0ZWFyX29mZihhMyxhNCl7dGhpcy4kaW5pdGlh
+bGl6ZShhMyxhNCl9CnMuY29uc3RydWN0b3I9cgpyLnByb3RvdHlwZT1zCnMuJF9uYW1lPWIKcy4kX3Rh
+cmdldD1hMApxPSFoCmlmKHEpcD1BLmJ4KGIsYTAsZyxmKQplbHNle3MuJHN0YXRpY19uYW1lPWIKcD1h
+MH1zLiRTPUEuaW0oYTEsaCxnKQpzW2FdPXAKZm9yKG89cCxuPTE7bjxkLmxlbmd0aDsrK24pe209ZFtu
+XQppZih0eXBlb2YgbT09InN0cmluZyIpe2w9aVttXQprPW0KbT1sfWVsc2Ugaz0iIgpqPWNbbl0KaWYo
+aiE9bnVsbCl7aWYocSltPUEuYngoayxtLGcsZikKc1tqXT1tfWlmKG49PT1lKW89bX1zLiRDPW8Kcy4k
+Uj1hMi5yQwpzLiREPWEyLmRWCnJldHVybiByfSwKaW0oYSxiLGMpe2lmKHR5cGVvZiBhPT0ibnVtYmVy
+IilyZXR1cm4gYQppZih0eXBlb2YgYT09InN0cmluZyIpe2lmKGIpdGhyb3cgQS5iKCJDYW5ub3QgY29t
+cHV0ZSBzaWduYXR1cmUgZm9yIHN0YXRpYyB0ZWFyb2ZmLiIpCnJldHVybiBmdW5jdGlvbihkLGUpe3Jl
+dHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsZCl9fShhLEEuVG4pfXRocm93IEEuYigiRXJyb3Ig
+aW4gZnVuY3Rpb25UeXBlIG9mIHRlYXJvZmYiKX0sCnZxKGEsYixjLGQpe3ZhciBzPUEueVMKc3dpdGNo
+KGI/LTE6YSl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbigpe3JldHVy
+biBmKHRoaXMpW2VdKCl9fShjLHMpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVu
+Y3Rpb24oZyl7cmV0dXJuIGYodGhpcylbZV0oZyl9fShjLHMpCmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24o
+ZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoKXtyZXR1cm4gZih0aGlzKVtlXShnLGgpfX0oYyxzKQpjYXNl
+IDM6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpKXtyZXR1cm4gZih0aGlz
+KVtlXShnLGgsaSl9fShjLHMpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rp
+b24oZyxoLGksail7cmV0dXJuIGYodGhpcylbZV0oZyxoLGksail9fShjLHMpCmNhc2UgNTpyZXR1cm4g
+ZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGksaixrKXtyZXR1cm4gZih0aGlzKVtlXShn
+LGgsaSxqLGspfX0oYyxzKQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlv
+bigpe3JldHVybiBlLmFwcGx5KGYodGhpcyksYXJndW1lbnRzKX19KGQscyl9fSwKYngoYSxiLGMsZCl7
+dmFyIHMscgppZihjKXJldHVybiBBLkhmKGEsYixkKQpzPWIubGVuZ3RoCnI9QS52cShzLGQsYSxiKQpy
+ZXR1cm4gcn0sClo0KGEsYixjLGQpe3ZhciBzPUEueVMscj1BLkFPCnN3aXRjaChiPy0xOmEpe2Nhc2Ug
+MDp0aHJvdyBBLmIobmV3IEEuRXEoIkludGVyY2VwdGVkIGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRz
+LiIpKQpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g
+Zih0aGlzKVtlXShnKHRoaXMpKX19KGMscixzKQpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXty
+ZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoKX19KGMscixzKQpjYXNl
+IDM6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpKXtyZXR1cm4gZih0aGlz
+KVtlXShnKHRoaXMpLGgsaSl9fShjLHIscykKY2FzZSA0OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0
+dXJuIGZ1bmN0aW9uKGgsaSxqKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqKX19KGMscixz
+KQpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGosayl7cmV0
+dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksaixrKX19KGMscixzKQpjYXNlIDY6cmV0dXJuIGZ1bmN0
+aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGosayxsKXtyZXR1cm4gZih0aGlzKVtlXShnKHRo
+aXMpLGgsaSxqLGssbCl9fShjLHIscykKZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVy
+biBmdW5jdGlvbigpe3ZhciBxPVtnKHRoaXMpXQpBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShxLGFy
+Z3VtZW50cykKcmV0dXJuIGUuYXBwbHkoZih0aGlzKSxxKX19KGQscixzKX19LApIZihhLGIsYyl7dmFy
+IHMscixxLHA9JC5BbApwPT1udWxsPyQuQWw9QS5tOSgiaW50ZXJjZXB0b3IiKTpwCnM9JC5pMApzPT1u
+dWxsPyQuaTA9QS5tOSgicmVjZWl2ZXIiKTpzCnI9Yi5sZW5ndGgKcT1BLlo0KHIsYyxhLGIpCnJldHVy
+biBxfSwKVTIoYSl7cmV0dXJuIEEuaUEoYSl9LApUbihhLGIpe3JldHVybiBBLmNFKHYudHlwZVVuaXZl
+cnNlLEEueksoYS5hKSxiKX0sCnlTKGEpe3JldHVybiBhLmF9LApBTyhhKXtyZXR1cm4gYS5ifSwKbTko
+YSl7dmFyIHMscixxLHA9bmV3IEEuclQoInJlY2VpdmVyIiwiaW50ZXJjZXB0b3IiKSxvPUouRXAoT2Jq
 ZWN0LmdldE93blByb3BlcnR5TmFtZXMocCksdC5YKQpmb3Iocz1vLmxlbmd0aCxyPTA7cjxzOysrcil7
-cT1vW3JdCmlmKHBbcV09PT1hKXJldHVybiBxfXRocm93IEguYihQLnhZKCJGaWVsZCBuYW1lICIrYSsi
-IG5vdCBmb3VuZC4iLG51bGwpKX0sCm9UKGEpe2lmKGE9PW51bGwpSC5mTygiYm9vbGVhbiBleHByZXNz
-aW9uIG11c3Qgbm90IGJlIG51bGwiKQpyZXR1cm4gYX0sCmZPKGEpe3Rocm93IEguYihuZXcgSC5rWShh
-KSl9LAphZyhhKXt0aHJvdyBILmIobmV3IFAucChhKSl9LApZZyhhKXtyZXR1cm4gdi5nZXRJc29sYXRl
+cT1vW3JdCmlmKHBbcV09PT1hKXJldHVybiBxfXRocm93IEEuYihBLnhZKCJGaWVsZCBuYW1lICIrYSsi
+IG5vdCBmb3VuZC4iLG51bGwpKX0sCm9UKGEpe2lmKGE9PW51bGwpQS5mTygiYm9vbGVhbiBleHByZXNz
+aW9uIG11c3Qgbm90IGJlIG51bGwiKQpyZXR1cm4gYX0sCmZPKGEpe3Rocm93IEEuYihuZXcgQS5rWShh
+KSl9LAphZyhhKXt0aHJvdyBBLmIobmV3IEEucChhKSl9LApZZyhhKXtyZXR1cm4gdi5nZXRJc29sYXRl
 VGFnKGEpfSwKaXcoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOmMsZW51bWVy
 YWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSl9LAp3MyhhKXt2YXIgcyxy
-LHEscCxvLG49SC5uKCQuTkYuJDEoYSkpLG09JC5ud1tuXQppZihtIT1udWxsKXtPYmplY3QuZGVmaW5l
+LHEscCxvLG49QS5uKCQuTkYuJDEoYSkpLG09JC5ud1tuXQppZihtIT1udWxsKXtPYmplY3QuZGVmaW5l
 UHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Us
 d3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBtLml9cz0kLnZ2W25dCmlmKHMh
-PW51bGwpcmV0dXJuIHMKcj12LmludGVyY2VwdG9yc0J5VGFnW25dCmlmKHI9PW51bGwpe3E9SC5rKCQu
+PW51bGwpcmV0dXJuIHMKcj12LmludGVyY2VwdG9yc0J5VGFnW25dCmlmKHI9PW51bGwpe3E9QS5rKCQu
 VFguJDIoYSxuKSkKaWYocSE9bnVsbCl7bT0kLm53W3FdCmlmKG0hPW51bGwpe09iamVjdC5kZWZpbmVQ
 cm9wZXJ0eShhLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJsZTpmYWxzZSx3
 cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG0uaX1zPSQudnZbcV0KaWYocyE9
 bnVsbClyZXR1cm4gcwpyPXYuaW50ZXJjZXB0b3JzQnlUYWdbcV0Kbj1xfX1pZihyPT1udWxsKXJldHVy
-biBudWxsCnM9ci5wcm90b3R5cGUKcD1uWzBdCmlmKHA9PT0iISIpe209SC5WYShzKQokLm53W25dPW0K
+biBudWxsCnM9ci5wcm90b3R5cGUKcD1uWzBdCmlmKHA9PT0iISIpe209QS5WYShzKQokLm53W25dPW0K
 T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6bSxlbnVt
 ZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gbS5pfWlm
-KHA9PT0ifiIpeyQudnZbbl09cwpyZXR1cm4gc31pZihwPT09Ii0iKXtvPUguVmEocykKT2JqZWN0LmRl
+KHA9PT0ifiIpeyQudnZbbl09cwpyZXR1cm4gc31pZihwPT09Ii0iKXtvPUEuVmEocykKT2JqZWN0LmRl
 ZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1l
 LHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0p
-CnJldHVybiBvLml9aWYocD09PSIrIilyZXR1cm4gSC5MYyhhLHMpCmlmKHA9PT0iKiIpdGhyb3cgSC5i
-KFAuU1kobikpCmlmKHYubGVhZlRhZ3Nbbl09PT10cnVlKXtvPUguVmEocykKT2JqZWN0LmRlZmluZVBy
+CnJldHVybiBvLml9aWYocD09PSIrIilyZXR1cm4gQS5MYyhhLHMpCmlmKHA9PT0iKiIpdGhyb3cgQS5i
+KEEuU1kobikpCmlmKHYubGVhZlRhZ3Nbbl09PT10cnVlKXtvPUEuVmEocykKT2JqZWN0LmRlZmluZVBy
 b3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1
 ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVy
-biBvLml9ZWxzZSByZXR1cm4gSC5MYyhhLHMpfSwKTGMoYSxiKXt2YXIgcz1PYmplY3QuZ2V0UHJvdG90
+biBvLml9ZWxzZSByZXR1cm4gQS5MYyhhLHMpfSwKTGMoYSxiKXt2YXIgcz1PYmplY3QuZ2V0UHJvdG90
 eXBlT2YoYSkKT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFs
 dWU6Si5RdShiLHMsbnVsbCxudWxsKSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmln
 dXJhYmxlOnRydWV9KQpyZXR1cm4gYn0sClZhKGEpe3JldHVybiBKLlF1KGEsITEsbnVsbCwhIWEuJGlY
 ail9LApWRihhLGIsYyl7dmFyIHM9Yi5wcm90b3R5cGUKaWYodi5sZWFmVGFnc1thXT09PXRydWUpcmV0
-dXJuIEguVmEocykKZWxzZSByZXR1cm4gSi5RdShzLGMsbnVsbCxudWxsKX0sClhEKCl7aWYoITA9PT0k
-LkJ2KXJldHVybgokLkJ2PSEwCkguWjEoKX0sCloxKCl7dmFyIHMscixxLHAsbyxuLG0sbAokLm53PU9i
-amVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3JlYXRlKG51bGwpCkgua08oKQpzPXYuaW50ZXJj
+dXJuIEEuVmEocykKZWxzZSByZXR1cm4gSi5RdShzLGMsbnVsbCxudWxsKX0sClhEKCl7aWYoITA9PT0k
+LkJ2KXJldHVybgokLkJ2PSEwCkEuWjEoKX0sCloxKCl7dmFyIHMscixxLHAsbyxuLG0sbAokLm53PU9i
+amVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3JlYXRlKG51bGwpCkEua08oKQpzPXYuaW50ZXJj
 ZXB0b3JzQnlUYWcKcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzKQppZih0eXBlb2Ygd2luZG93
 IT0idW5kZWZpbmVkIil7d2luZG93CnE9ZnVuY3Rpb24oKXt9CmZvcihwPTA7cDxyLmxlbmd0aDsrK3Ap
-e289cltwXQpuPSQueDcuJDEobykKaWYobiE9bnVsbCl7bT1ILlZGKG8sc1tvXSxuKQppZihtIT1udWxs
+e289cltwXQpuPSQueDcuJDEobykKaWYobiE9bnVsbCl7bT1BLlZGKG8sc1tvXSxuKQppZihtIT1udWxs
 KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobix2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVu
 dW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnEucHJvdG90eXBl
 PW59fX19Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCl7bz1yW3BdCmlmKC9eW0EtWmEtel9dLy50ZXN0KG8p
 KXtsPXNbb10Kc1siISIrb109bApzWyJ+IitvXT1sCnNbIi0iK29dPWwKc1siKyIrb109bApzWyIqIitv
-XT1sfX19LAprTygpe3ZhciBzLHIscSxwLG8sbixtPUMuWXEoKQptPUgudWQoQy5LVSxILnVkKEMuZlEs
-SC51ZChDLmk3LEgudWQoQy5pNyxILnVkKEMueGksSC51ZChDLmRrLEgudWQoQy53YihDLk80KSxtKSkp
+XT1sfX19LAprTygpe3ZhciBzLHIscSxwLG8sbixtPUIuWXEoKQptPUEudWQoQi5LVSxBLnVkKEIuZlEs
+QS51ZChCLmk3LEEudWQoQi5pNyxBLnVkKEIueGksQS51ZChCLmRrLEEudWQoQi53YihCLk80KSxtKSkp
 KSkpKQppZih0eXBlb2YgZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lciE9InVuZGVmaW5l
 ZCIpe3M9ZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lcgppZih0eXBlb2Ygcz09ImZ1bmN0
 aW9uIilzPVtzXQppZihzLmNvbnN0cnVjdG9yPT1BcnJheSlmb3Iocj0wO3I8cy5sZW5ndGg7KytyKXtx
 PXNbcl0KaWYodHlwZW9mIHE9PSJmdW5jdGlvbiIpbT1xKG0pfHxtfX1wPW0uZ2V0VGFnCm89bS5nZXRV
-bmtub3duVGFnCm49bS5wcm90b3R5cGVGb3JUYWcKJC5ORj1uZXcgSC5kQyhwKQokLlRYPW5ldyBILndO
-KG8pCiQueDc9bmV3IEguVlgobil9LAp1ZChhLGIpe3JldHVybiBhKGIpfHxifSwKdjQoYSxiLGMsZCxl
+bmtub3duVGFnCm49bS5wcm90b3R5cGVGb3JUYWcKJC5ORj1uZXcgQS5kQyhwKQokLlRYPW5ldyBBLndO
+KG8pCiQueDc9bmV3IEEuVlgobil9LAp1ZChhLGIpe3JldHVybiBhKGIpfHxifSwKdjQoYSxiLGMsZCxl
 LGYpe3ZhciBzPWI/Im0iOiIiLHI9Yz8iIjoiaSIscT1kPyJ1IjoiIixwPWU/InMiOiIiLG89Zj8iZyI6
 IiIsbj1mdW5jdGlvbihnLGgpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChnLGgpfWNhdGNoKG0pe3JldHVy
-biBtfX0oYSxzK3IrcStwK28pCmlmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG4KdGhyb3cgSC5i
-KFAucnIoIklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIrU3RyaW5nKG4pKyIpIixhLG51bGwpKX0sClNR
+biBtfX0oYSxzK3IrcStwK28pCmlmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG4KdGhyb3cgQS5i
+KEEucnIoIklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIrU3RyaW5nKG4pKyIpIixhLG51bGwpKX0sClNR
 KGEsYixjKXt2YXIgcwppZih0eXBlb2YgYj09InN0cmluZyIpcmV0dXJuIGEuaW5kZXhPZihiLGMpPj0w
-CmVsc2UgaWYoYiBpbnN0YW5jZW9mIEguVlIpe3M9Qy54Qi55bihhLGMpCnJldHVybiBiLmIudGVzdChz
-KX1lbHNle3M9Si5GTChiLEMueEIueW4oYSxjKSkKcmV0dXJuIXMuZ2wwKHMpfX0sCkE0KGEpe2lmKGEu
+CmVsc2UgaWYoYiBpbnN0YW5jZW9mIEEuVlIpe3M9Qi54Qi55bihhLGMpCnJldHVybiBiLmIudGVzdChz
+KX1lbHNle3M9Si5GTChiLEIueEIueW4oYSxjKSkKcmV0dXJuIXMuZ2wwKHMpfX0sCkE0KGEpe2lmKGEu
 aW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEucmVwbGFjZSgvXCQvZywiJCQkJCIpCnJldHVybiBhfSwK
 ZUEoYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKC9bW1xd
-e30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXMoYSxiLGMpe3ZhciBzPUgubk0oYSxi
+e30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXMoYSxiLGMpe3ZhciBzPUEubk0oYSxi
 LGMpCnJldHVybiBzfSwKbk0oYSxiLGMpe3ZhciBzLHIscSxwCmlmKGI9PT0iIil7aWYoYT09PSIiKXJl
 dHVybiBjCnM9YS5sZW5ndGgKcj0iIitjCmZvcihxPTA7cTxzOysrcSlyPXIrYVtxXStjCnJldHVybiBy
 LmNoYXJDb2RlQXQoMCk9PTA/cjpyfXA9YS5pbmRleE9mKGIsMCkKaWYocDwwKXJldHVybiBhCmlmKGEu
 bGVuZ3RoPDUwMHx8Yy5pbmRleE9mKCIkIiwwKT49MClyZXR1cm4gYS5zcGxpdChiKS5qb2luKGMpCnJl
-dHVybiBhLnJlcGxhY2UobmV3IFJlZ0V4cChILmVBKGIpLCJnIiksSC5BNChjKSl9LApQRDpmdW5jdGlv
+dHVybiBhLnJlcGxhY2UobmV3IFJlZ0V4cChBLmVBKGIpLCJnIiksQS5BNChjKSl9LApQRDpmdW5jdGlv
 biBQRChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApXVTpmdW5jdGlvbiBXVSgpe30sCkxQOmZ1bmN0
 aW9uIExQKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sClhSOmZ1
 bmN0aW9uIFhSKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkxJOmZ1bmN0aW9uIExJKGEsYixjLGQs
@@ -8111,3527 +8078,3541 @@
 YwpfLmQ9bnVsbH0sCnRROmZ1bmN0aW9uIHRRKGEsYil7dGhpcy5hPWEKdGhpcy5jPWJ9LAp1bjpmdW5j
 dGlvbiB1bihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApTZDpmdW5jdGlvbiBTZChh
 LGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9bnVsbH0sClhGKGEpe3JldHVybiBh
-fSwKb2QoYSxiLGMpe2lmKGE+Pj4wIT09YXx8YT49Yyl0aHJvdyBILmIoSC51KGIsYSkpfSwKck0oYSxi
+fSwKb2QoYSxiLGMpe2lmKGE+Pj4wIT09YXx8YT49Yyl0aHJvdyBBLmIoQS51KGIsYSkpfSwKck0oYSxi
 LGMpe3ZhciBzCmlmKCEoYT4+PjAhPT1hKSlzPWI+Pj4wIT09Ynx8YT5ifHxiPmMKZWxzZSBzPSEwCmlm
-KHMpdGhyb3cgSC5iKEguYXUoYSxiLGMpKQpyZXR1cm4gYn0sCkVUOmZ1bmN0aW9uIEVUKCl7fSwKTFo6
+KHMpdGhyb3cgQS5iKEEuYXUoYSxiLGMpKQpyZXR1cm4gYn0sCkVUOmZ1bmN0aW9uIEVUKCl7fSwKTFo6
 ZnVuY3Rpb24gTFooKXt9LApEZzpmdW5jdGlvbiBEZygpe30sClBnOmZ1bmN0aW9uIFBnKCl7fSwKeGo6
 ZnVuY3Rpb24geGooKXt9LApkRTpmdW5jdGlvbiBkRSgpe30sClpBOmZ1bmN0aW9uIFpBKCl7fSwKZFQ6
 ZnVuY3Rpb24gZFQoKXt9LApQcTpmdW5jdGlvbiBQcSgpe30sCmVFOmZ1bmN0aW9uIGVFKCl7fSwKVjY6
 ZnVuY3Rpb24gVjYoKXt9LApSRzpmdW5jdGlvbiBSRygpe30sClZQOmZ1bmN0aW9uIFZQKCl7fSwKV0I6
 ZnVuY3Rpb24gV0IoKXt9LApaRzpmdW5jdGlvbiBaRygpe30sCmN6KGEsYil7dmFyIHM9Yi5jCnJldHVy
-biBzPT1udWxsP2IuYz1ILkIoYSxiLnosITApOnN9LAp4WihhLGIpe3ZhciBzPWIuYwpyZXR1cm4gcz09
-bnVsbD9iLmM9SC5KKGEsImI4IixbYi56XSk6c30sClExKGEpe3ZhciBzPWEueQppZihzPT09Nnx8cz09
-PTd8fHM9PT04KXJldHVybiBILlExKGEueikKcmV0dXJuIHM9PT0xMXx8cz09PTEyfSwKbUQoYSl7cmV0
-dXJuIGEuY3l9LApOMChhKXtyZXR1cm4gSC5FKHYudHlwZVVuaXZlcnNlLGEsITEpfSwKUEwoYSxiLGEw
+biBzPT1udWxsP2IuYz1BLkIoYSxiLnosITApOnN9LAp4WihhLGIpe3ZhciBzPWIuYwpyZXR1cm4gcz09
+bnVsbD9iLmM9QS5KKGEsImI4IixbYi56XSk6c30sClExKGEpe3ZhciBzPWEueQppZihzPT09Nnx8cz09
+PTd8fHM9PT04KXJldHVybiBBLlExKGEueikKcmV0dXJuIHM9PT0xMXx8cz09PTEyfSwKbUQoYSl7cmV0
+dXJuIGEuY3l9LApOMChhKXtyZXR1cm4gQS5FKHYudHlwZVVuaXZlcnNlLGEsITEpfSwKUEwoYSxiLGEw
 LGExKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIueQpzd2l0Y2goYyl7Y2Fz
-ZSA1OmNhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYgpjYXNlIDY6cz1iLnoKcj1ILlBM
-KGEscyxhMCxhMSkKaWYocj09PXMpcmV0dXJuIGIKcmV0dXJuIEguQyhhLHIsITApCmNhc2UgNzpzPWIu
-egpyPUguUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4gYgpyZXR1cm4gSC5CKGEsciwhMCkKY2Fz
-ZSA4OnM9Yi56CnI9SC5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJldHVybiBILmYoYSxy
-LCEwKQpjYXNlIDk6cT1iLlEKcD1ILmJaKGEscSxhMCxhMSkKaWYocD09PXEpcmV0dXJuIGIKcmV0dXJu
-IEguSihhLGIueixwKQpjYXNlIDEwOm89Yi56Cm49SC5QTChhLG8sYTAsYTEpCm09Yi5RCmw9SC5iWihh
-LG0sYTAsYTEpCmlmKG49PT1vJiZsPT09bSlyZXR1cm4gYgpyZXR1cm4gSC5hKGEsbixsKQpjYXNlIDEx
-Oms9Yi56Cmo9SC5QTChhLGssYTAsYTEpCmk9Yi5RCmg9SC5xVChhLGksYTAsYTEpCmlmKGo9PT1rJiZo
-PT09aSlyZXR1cm4gYgpyZXR1cm4gSC5kKGEsaixoKQpjYXNlIDEyOmc9Yi5RCmExKz1nLmxlbmd0aApm
-PUguYlooYSxnLGEwLGExKQpvPWIuegpuPUguUEwoYSxvLGEwLGExKQppZihmPT09ZyYmbj09PW8pcmV0
-dXJuIGIKcmV0dXJuIEguRChhLG4sZiwhMCkKY2FzZSAxMzplPWIuegppZihlPGExKXJldHVybiBiCmQ9
-YTBbZS1hMV0KaWYoZD09bnVsbClyZXR1cm4gYgpyZXR1cm4gZApkZWZhdWx0OnRocm93IEguYihQLmhW
+ZSA1OmNhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYgpjYXNlIDY6cz1iLnoKcj1BLlBM
+KGEscyxhMCxhMSkKaWYocj09PXMpcmV0dXJuIGIKcmV0dXJuIEEuQyhhLHIsITApCmNhc2UgNzpzPWIu
+egpyPUEuUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4gYgpyZXR1cm4gQS5CKGEsciwhMCkKY2Fz
+ZSA4OnM9Yi56CnI9QS5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJldHVybiBBLmYoYSxy
+LCEwKQpjYXNlIDk6cT1iLlEKcD1BLmJaKGEscSxhMCxhMSkKaWYocD09PXEpcmV0dXJuIGIKcmV0dXJu
+IEEuSihhLGIueixwKQpjYXNlIDEwOm89Yi56Cm49QS5QTChhLG8sYTAsYTEpCm09Yi5RCmw9QS5iWihh
+LG0sYTAsYTEpCmlmKG49PT1vJiZsPT09bSlyZXR1cm4gYgpyZXR1cm4gQS5hKGEsbixsKQpjYXNlIDEx
+Oms9Yi56Cmo9QS5QTChhLGssYTAsYTEpCmk9Yi5RCmg9QS5xVChhLGksYTAsYTEpCmlmKGo9PT1rJiZo
+PT09aSlyZXR1cm4gYgpyZXR1cm4gQS5kKGEsaixoKQpjYXNlIDEyOmc9Yi5RCmExKz1nLmxlbmd0aApm
+PUEuYlooYSxnLGEwLGExKQpvPWIuegpuPUEuUEwoYSxvLGEwLGExKQppZihmPT09ZyYmbj09PW8pcmV0
+dXJuIGIKcmV0dXJuIEEuRChhLG4sZiwhMCkKY2FzZSAxMzplPWIuegppZihlPGExKXJldHVybiBiCmQ9
+YTBbZS1hMV0KaWYoZD09bnVsbClyZXR1cm4gYgpyZXR1cm4gZApkZWZhdWx0OnRocm93IEEuYihBLmhW
 KCJBdHRlbXB0ZWQgdG8gc3Vic3RpdHV0ZSB1bmV4cGVjdGVkIFJUSSBraW5kICIrYykpfX0sCmJaKGEs
-YixjLGQpe3ZhciBzLHIscSxwLG89Yi5sZW5ndGgsbj1ILnZVKG8pCmZvcihzPSExLHI9MDtyPG87Kyty
-KXtxPWJbcl0KcD1ILlBMKGEscSxjLGQpCmlmKHAhPT1xKXM9ITAKbltyXT1wfXJldHVybiBzP246Yn0s
-CnZPKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtPWIubGVuZ3RoLGw9SC52VShtKQpmb3Iocz0hMSxy
-PTA7cjxtO3IrPTMpe3E9YltyXQpwPWJbcisxXQpvPWJbcisyXQpuPUguUEwoYSxvLGMsZCkKaWYobiE9
+YixjLGQpe3ZhciBzLHIscSxwLG89Yi5sZW5ndGgsbj1BLnZVKG8pCmZvcihzPSExLHI9MDtyPG87Kyty
+KXtxPWJbcl0KcD1BLlBMKGEscSxjLGQpCmlmKHAhPT1xKXM9ITAKbltyXT1wfXJldHVybiBzP246Yn0s
+CnZPKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtPWIubGVuZ3RoLGw9QS52VShtKQpmb3Iocz0hMSxy
+PTA7cjxtO3IrPTMpe3E9YltyXQpwPWJbcisxXQpvPWJbcisyXQpuPUEuUEwoYSxvLGMsZCkKaWYobiE9
 PW8pcz0hMApsLnNwbGljZShyLDMscSxwLG4pfXJldHVybiBzP2w6Yn0sCnFUKGEsYixjLGQpe3ZhciBz
-LHI9Yi5hLHE9SC5iWihhLHIsYyxkKSxwPWIuYixvPUguYlooYSxwLGMsZCksbj1iLmMsbT1ILnZPKGEs
-bixjLGQpCmlmKHE9PT1yJiZvPT09cCYmbT09PW4pcmV0dXJuIGIKcz1uZXcgSC5HKCkKcy5hPXEKcy5i
+LHI9Yi5hLHE9QS5iWihhLHIsYyxkKSxwPWIuYixvPUEuYlooYSxwLGMsZCksbj1iLmMsbT1BLnZPKGEs
+bixjLGQpCmlmKHE9PT1yJiZvPT09cCYmbT09PW4pcmV0dXJuIGIKcz1uZXcgQS5HKCkKcy5hPXEKcy5i
 PW8Kcy5jPW0KcmV0dXJuIHN9LApRSShhLGIpe2Fbdi5hcnJheVJ0aV09YgpyZXR1cm4gYX0sCkpTKGEp
-e3ZhciBzPWEuJFMKaWYocyE9bnVsbCl7aWYodHlwZW9mIHM9PSJudW1iZXIiKXJldHVybiBILkJwKHMp
-CnJldHVybiBhLiRTKCl9cmV0dXJuIG51bGx9LApVZShhLGIpe3ZhciBzCmlmKEguUTEoYikpaWYoYSBp
-bnN0YW5jZW9mIEguVHApe3M9SC5KUyhhKQppZihzIT1udWxsKXJldHVybiBzfXJldHVybiBILnpLKGEp
-fSwKeksoYSl7dmFyIHMKaWYoYSBpbnN0YW5jZW9mIFAuTWgpe3M9YS4kdGkKcmV0dXJuIHMhPW51bGw/
-czpILlZVKGEpfWlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIEgudDYoYSkKcmV0dXJuIEguVlUoSi5p
+e3ZhciBzPWEuJFMKaWYocyE9bnVsbCl7aWYodHlwZW9mIHM9PSJudW1iZXIiKXJldHVybiBBLkJwKHMp
+CnJldHVybiBhLiRTKCl9cmV0dXJuIG51bGx9LApVZShhLGIpe3ZhciBzCmlmKEEuUTEoYikpaWYoYSBp
+bnN0YW5jZW9mIEEuVHApe3M9QS5KUyhhKQppZihzIT1udWxsKXJldHVybiBzfXJldHVybiBBLnpLKGEp
+fSwKeksoYSl7dmFyIHMKaWYoYSBpbnN0YW5jZW9mIEEuTWgpe3M9YS4kdGkKcmV0dXJuIHMhPW51bGw/
+czpBLlZVKGEpfWlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIEEudDYoYSkKcmV0dXJuIEEuVlUoSi5p
 YShhKSl9LAp0NihhKXt2YXIgcz1hW3YuYXJyYXlSdGldLHI9dC5iCmlmKHM9PW51bGwpcmV0dXJuIHIK
 aWYocy5jb25zdHJ1Y3RvciE9PXIuY29uc3RydWN0b3IpcmV0dXJuIHIKcmV0dXJuIHN9LApMaChhKXt2
-YXIgcz1hLiR0aQpyZXR1cm4gcyE9bnVsbD9zOkguVlUoYSl9LApWVShhKXt2YXIgcz1hLmNvbnN0cnVj
-dG9yLHI9cy4kY2NhY2hlCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIEgucjkoYSxzKX0sCnI5KGEs
-Yil7dmFyIHM9YSBpbnN0YW5jZW9mIEguVHA/YS5fX3Byb3RvX18uX19wcm90b19fLmNvbnN0cnVjdG9y
-OmIscj1ILmFpKHYudHlwZVVuaXZlcnNlLHMubmFtZSkKYi4kY2NhY2hlPXIKcmV0dXJuIHJ9LApCcChh
-KXt2YXIgcyxyPXYudHlwZXMscT1yW2FdCmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7cz1ILkUodi50eXBl
-VW5pdmVyc2UscSwhMSkKclthXT1zCnJldHVybiBzfXJldHVybiBxfSwKSkooYSl7dmFyIHMscixxLHAs
-bz10aGlzCmlmKG89PT10LkspcmV0dXJuIEguUkUobyxhLEgua2UpCmlmKCFILkE4KG8pKWlmKCEobz09
-PXQuXykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCmlmKHMpcmV0dXJuIEguUkUobyxhLEguSXcpCnM9
-by55CnI9cz09PTY/by56Om8KaWYocj09PXQuUylxPUgub2sKZWxzZSBpZihyPT09dC5nUnx8cj09PXQu
-ZGkpcT1ILktICmVsc2UgaWYocj09PXQuTilxPUguTU0KZWxzZSBxPXI9PT10Lnk/SC5yUTpudWxsCmlm
-KHEhPW51bGwpcmV0dXJuIEguUkUobyxhLHEpCmlmKHIueT09PTkpe3A9ci56CmlmKHIuUS5ldmVyeShI
-LmNjKSl7by5yPSIkaSIrcAppZihwPT09InpNIilyZXR1cm4gSC5SRShvLGEsSC55TSkKcmV0dXJuIEgu
-UkUobyxhLEgudDQpfX1lbHNlIGlmKHM9PT03KXJldHVybiBILlJFKG8sYSxILkFRKQpyZXR1cm4gSC5S
-RShvLGEsSC5ZTyl9LApSRShhLGIsYyl7YS5iPWMKcmV0dXJuIGEuYihiKX0sCkF1KGEpe3ZhciBzLHI9
-dGhpcyxxPUguT3oKaWYoIUguQTgocikpaWYoIShyPT09dC5fKSlzPSExCmVsc2Ugcz0hMAplbHNlIHM9
-ITAKaWYocylxPUguaG4KZWxzZSBpZihyPT09dC5LKXE9SC5UaQplbHNle3M9SC5sUihyKQppZihzKXE9
-SC5sNH1yLmE9cQpyZXR1cm4gci5hKGEpfSwKUWooYSl7dmFyIHMscj1hLnkKaWYoIUguQTgoYSkpaWYo
-IShhPT09dC5fKSlpZighKGE9PT10LmF3KSlpZihyIT09NylzPXI9PT04JiZILlFqKGEueil8fGE9PT10
-LlB8fGE9PT10LlQKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBz
-fSwKWU8oYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBILlFqKHMpCnJldHVybiBILldlKHYu
-dHlwZVVuaXZlcnNlLEguVWUoYSxzKSxudWxsLHMsbnVsbCl9LApBUShhKXtpZihhPT1udWxsKXJldHVy
-biEwCnJldHVybiB0aGlzLnouYihhKX0sCnQ0KGEpe3ZhciBzLHI9dGhpcwppZihhPT1udWxsKXJldHVy
-biBILlFqKHIpCnM9ci5yCmlmKGEgaW5zdGFuY2VvZiBQLk1oKXJldHVybiEhYVtzXQpyZXR1cm4hIUou
-aWEoYSlbc119LAp5TShhKXt2YXIgcyxyPXRoaXMKaWYoYT09bnVsbClyZXR1cm4gSC5RaihyKQppZih0
-eXBlb2YgYSE9Im9iamVjdCIpcmV0dXJuITEKaWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMApzPXIu
-cgppZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4hIWFbc10KcmV0dXJuISFKLmlhKGEpW3NdfSwKT3oo
-YSl7dmFyIHMscj10aGlzCmlmKGE9PW51bGwpe3M9SC5sUihyKQppZihzKXJldHVybiBhfWVsc2UgaWYo
-ci5iKGEpKXJldHVybiBhCkgubTQoYSxyKX0sCmw0KGEpe3ZhciBzPXRoaXMKaWYoYT09bnVsbClyZXR1
-cm4gYQplbHNlIGlmKHMuYihhKSlyZXR1cm4gYQpILm00KGEscyl9LAptNChhLGIpe3Rocm93IEguYihI
-LlpjKEguV0soYSxILlVlKGEsYiksSC5kbShiLG51bGwpKSkpfSwKRGgoYSxiLGMsZCl7dmFyIHM9bnVs
-bAppZihILldlKHYudHlwZVVuaXZlcnNlLGEscyxiLHMpKXJldHVybiBhCnRocm93IEguYihILlpjKCJU
-aGUgdHlwZSBhcmd1bWVudCAnIitILmRtKGEscykrIicgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgdHlw
-ZSB2YXJpYWJsZSBib3VuZCAnIitILmRtKGIscykrIicgb2YgdHlwZSB2YXJpYWJsZSAnIitjKyInIGlu
-ICciK2QrIicuIikpfSwKV0soYSxiLGMpe3ZhciBzPVAuaGwoYSkscj1ILmRtKGI9PW51bGw/SC56Syhh
-KTpiLG51bGwpCnJldHVybiBzKyI6IHR5cGUgJyIrcisiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHR5cGUg
-JyIrYysiJyJ9LApaYyhhKXtyZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIithKX0sCnEoYSxiKXty
-ZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIitILldLKGEsbnVsbCxiKSl9LAprZShhKXtyZXR1cm4g
-YSE9bnVsbH0sClRpKGEpe2lmKGEhPW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJPYmplY3Qi
-KSl9LApJdyhhKXtyZXR1cm4hMH0sCmhuKGEpe3JldHVybiBhfSwKclEoYSl7cmV0dXJuITA9PT1hfHwh
-MT09PWF9LApwOChhKXtpZighMD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCnRocm93IEgu
-YihILnEoYSwiYm9vbCIpKX0sCm1MKGEpe2lmKCEwPT09YSlyZXR1cm4hMAppZighMT09PWEpcmV0dXJu
-ITEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsImJvb2wiKSl9LApNNChhKXtpZigh
-MD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cg
-SC5iKEgucShhLCJib29sPyIpKX0sCnJWKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQp0
-aHJvdyBILmIoSC5xKGEsImRvdWJsZSIpKX0sCnRGKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1
-cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEguYihILnEoYSwiZG91YmxlIikpfSwKUWsoYSl7
-aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5i
-KEgucShhLCJkb3VibGU/IikpfSwKb2soYSl7cmV0dXJuIHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5m
-bG9vcihhKT09PWF9LApJWihhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1h
-KXJldHVybiBhCnRocm93IEguYihILnEoYSwiaW50IikpfSwKdVAoYSl7aWYodHlwZW9mIGE9PSJudW1i
-ZXIiJiZNYXRoLmZsb29yKGEpPT09YSlyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEgu
-YihILnEoYSwiaW50IikpfSwKVWMoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEp
-PT09YSlyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEguYihILnEoYSwiaW50PyIpKX0s
-CktIKGEpe3JldHVybiB0eXBlb2YgYT09Im51bWJlciJ9LAp6NShhKXtpZih0eXBlb2YgYT09Im51bWJl
-ciIpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJudW0iKSl9LApXMShhKXtpZih0eXBlb2YgYT09Im51
-bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIm51bSIpKX0s
-CmNVKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRo
-cm93IEguYihILnEoYSwibnVtPyIpKX0sCk1NKGEpe3JldHVybiB0eXBlb2YgYT09InN0cmluZyJ9LApu
-KGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmluZyIp
-KX0sCmhOKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBh
-CnRocm93IEguYihILnEoYSwiU3RyaW5nIikpfSwKayhhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0
-dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmluZz8iKSl9LAppbyhh
-LGIpe3ZhciBzLHIscQpmb3Iocz0iIixyPSIiLHE9MDtxPGEubGVuZ3RoOysrcSxyPSIsICIpcys9citI
-LmRtKGFbcV0sYikKcmV0dXJuIHN9LApiSShhNCxhNSxhNil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGos
-aSxoLGcsZixlLGQsYyxiLGEsYTAsYTEsYTIsYTM9IiwgIgppZihhNiE9bnVsbCl7cz1hNi5sZW5ndGgK
-aWYoYTU9PW51bGwpe2E1PUguUUkoW10sdC5zKQpyPW51bGx9ZWxzZSByPWE1Lmxlbmd0aApxPWE1Lmxl
-bmd0aApmb3IocD1zO3A+MDstLXApQy5ObS5pKGE1LCJUIisocStwKSkKZm9yKG89dC5YLG49dC5fLG09
-IjwiLGw9IiIscD0wO3A8czsrK3AsbD1hMyl7bSs9bAprPWE1Lmxlbmd0aApqPWstMS1wCmlmKGo8MCly
-ZXR1cm4gSC5PSChhNSxqKQptPUMueEIuaChtLGE1W2pdKQppPWE2W3BdCmg9aS55CmlmKCEoaD09PTJ8
-fGg9PT0zfHxoPT09NHx8aD09PTV8fGk9PT1vKSlpZighKGk9PT1uKSlrPSExCmVsc2Ugaz0hMAplbHNl
-IGs9ITAKaWYoIWspbSs9IiBleHRlbmRzICIrSC5kbShpLGE1KX1tKz0iPiJ9ZWxzZXttPSIiCnI9bnVs
-bH1vPWE0LnoKZz1hNC5RCmY9Zy5hCmU9Zi5sZW5ndGgKZD1nLmIKYz1kLmxlbmd0aApiPWcuYwphPWIu
-bGVuZ3RoCmEwPUguZG0obyxhNSkKZm9yKGExPSIiLGEyPSIiLHA9MDtwPGU7KytwLGEyPWEzKWExKz1h
-MitILmRtKGZbcF0sYTUpCmlmKGM+MCl7YTErPWEyKyJbIgpmb3IoYTI9IiIscD0wO3A8YzsrK3AsYTI9
-YTMpYTErPWEyK0guZG0oZFtwXSxhNSkKYTErPSJdIn1pZihhPjApe2ExKz1hMisieyIKZm9yKGEyPSIi
-LHA9MDtwPGE7cCs9MyxhMj1hMyl7YTErPWEyCmlmKGJbcCsxXSlhMSs9InJlcXVpcmVkICIKYTErPUgu
-ZG0oYltwKzJdLGE1KSsiICIrYltwXX1hMSs9In0ifWlmKHIhPW51bGwpe2E1LnRvU3RyaW5nCmE1Lmxl
-bmd0aD1yfXJldHVybiBtKyIoIithMSsiKSA9PiAiK2EwfSwKZG0oYSxiKXt2YXIgcyxyLHEscCxvLG4s
-bSxsPWEueQppZihsPT09NSlyZXR1cm4iZXJhc2VkIgppZihsPT09MilyZXR1cm4iZHluYW1pYyIKaWYo
-bD09PTMpcmV0dXJuInZvaWQiCmlmKGw9PT0xKXJldHVybiJOZXZlciIKaWYobD09PTQpcmV0dXJuImFu
-eSIKaWYobD09PTYpe3M9SC5kbShhLnosYikKcmV0dXJuIHN9aWYobD09PTcpe3I9YS56CnM9SC5kbShy
-LGIpCnE9ci55CnJldHVybihxPT09MTF8fHE9PT0xMj8iKCIrcysiKSI6cykrIj8ifWlmKGw9PT04KXJl
-dHVybiJGdXR1cmVPcjwiK0guZG0oYS56LGIpKyI+IgppZihsPT09OSl7cD1ILm8zKGEueikKbz1hLlEK
-cmV0dXJuIG8ubGVuZ3RoPjA/cCsoIjwiK0guaW8obyxiKSsiPiIpOnB9aWYobD09PTExKXJldHVybiBI
-LmJJKGEsYixudWxsKQppZihsPT09MTIpcmV0dXJuIEguYkkoYS56LGIsYS5RKQppZihsPT09MTMpe249
-YS56Cm09Yi5sZW5ndGgKbj1tLTEtbgppZihuPDB8fG4+PW0pcmV0dXJuIEguT0goYixuKQpyZXR1cm4g
-YltuXX1yZXR1cm4iPyJ9LApvMyhhKXt2YXIgcyxyPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIh
-PW51bGwpcmV0dXJuIHIKcz0ibWluaWZpZWQ6IithCnJldHVybiBzfSwKUW8oYSxiKXt2YXIgcz1hLnRS
-W2JdCmZvcig7dHlwZW9mIHM9PSJzdHJpbmciOylzPWEudFJbc10KcmV0dXJuIHN9LAphaShhLGIpe3Zh
-ciBzLHIscSxwLG8sbj1hLmVULG09bltiXQppZihtPT1udWxsKXJldHVybiBILkUoYSxiLCExKQplbHNl
-IGlmKHR5cGVvZiBtPT0ibnVtYmVyIil7cz1tCnI9SC5tKGEsNSwiIyIpCnE9SC52VShzKQpmb3IocD0w
-O3A8czsrK3ApcVtwXT1yCm89SC5KKGEsYixxKQpuW2JdPW8KcmV0dXJuIG99ZWxzZSByZXR1cm4gbX0s
-CnhiKGEsYil7cmV0dXJuIEguSXgoYS50UixiKX0sCkZGKGEsYil7cmV0dXJuIEguSXgoYS5lVCxiKX0s
-CkUoYSxiLGMpe3ZhciBzLHI9YS5lQyxxPXIuZ2V0KGIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1ILmko
-SC5vKGEsbnVsbCxiLGMpKQpyLnNldChiLHMpCnJldHVybiBzfSwKY0UoYSxiLGMpe3ZhciBzLHIscT1i
-LmNoCmlmKHE9PW51bGwpcT1iLmNoPW5ldyBNYXAoKQpzPXEuZ2V0KGMpCmlmKHMhPW51bGwpcmV0dXJu
-IHMKcj1ILmkoSC5vKGEsYixjLCEwKSkKcS5zZXQoYyxyKQpyZXR1cm4gcn0sCnY1KGEsYixjKXt2YXIg
-cyxyLHEscD1iLmN4CmlmKHA9PW51bGwpcD1iLmN4PW5ldyBNYXAoKQpzPWMuY3kKcj1wLmdldChzKQpp
-ZihyIT1udWxsKXJldHVybiByCnE9SC5hKGEsYixjLnk9PT0xMD9jLlE6W2NdKQpwLnNldChzLHEpCnJl
-dHVybiBxfSwKQkQoYSxiKXtiLmE9SC5BdQpiLmI9SC5KSgpyZXR1cm4gYn0sCm0oYSxiLGMpe3ZhciBz
-LHIscT1hLmVDLmdldChjKQppZihxIT1udWxsKXJldHVybiBxCnM9bmV3IEguSmMobnVsbCxudWxsKQpz
-Lnk9YgpzLmN5PWMKcj1ILkJEKGEscykKYS5lQy5zZXQoYyxyKQpyZXR1cm4gcn0sCkMoYSxiLGMpe3Zh
-ciBzLHI9Yi5jeSsiKiIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9SC5aNyhhLGIs
-cixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKWjcoYSxiLGMsZCl7dmFyIHMscixxCmlmKGQpe3M9
-Yi55CmlmKCFILkE4KGIpKXI9Yj09PXQuUHx8Yj09PXQuVHx8cz09PTd8fHM9PT02CmVsc2Ugcj0hMApp
-ZihyKXJldHVybiBifXE9bmV3IEguSmMobnVsbCxudWxsKQpxLnk9NgpxLno9YgpxLmN5PWMKcmV0dXJu
-IEguQkQoYSxxKX0sCkIoYSxiLGMpe3ZhciBzLHI9Yi5jeSsiPyIscT1hLmVDLmdldChyKQppZihxIT1u
-dWxsKXJldHVybiBxCnM9SC5sbChhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKbGwoYSxi
-LGMsZCl7dmFyIHMscixxLHAKaWYoZCl7cz1iLnkKaWYoIUguQTgoYikpaWYoIShiPT09dC5QfHxiPT09
-dC5UKSlpZihzIT09NylyPXM9PT04JiZILmxSKGIueikKZWxzZSByPSEwCmVsc2Ugcj0hMAplbHNlIHI9
-ITAKaWYocilyZXR1cm4gYgplbHNlIGlmKHM9PT0xfHxiPT09dC5hdylyZXR1cm4gdC5QCmVsc2UgaWYo
-cz09PTYpe3E9Yi56CmlmKHEueT09PTgmJkgubFIocS56KSlyZXR1cm4gcQplbHNlIHJldHVybiBILmN6
-KGEsYil9fXA9bmV3IEguSmMobnVsbCxudWxsKQpwLnk9NwpwLno9YgpwLmN5PWMKcmV0dXJuIEguQkQo
-YSxwKX0sCmYoYSxiLGMpe3ZhciBzLHI9Yi5jeSsiLyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJl
-dHVybiBxCnM9SC5lVihhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKZVYoYSxiLGMsZCl7
-dmFyIHMscixxCmlmKGQpe3M9Yi55CmlmKCFILkE4KGIpKWlmKCEoYj09PXQuXykpcj0hMQplbHNlIHI9
-ITAKZWxzZSByPSEwCmlmKHJ8fGI9PT10LkspcmV0dXJuIGIKZWxzZSBpZihzPT09MSlyZXR1cm4gSC5K
-KGEsImI4IixbYl0pCmVsc2UgaWYoYj09PXQuUHx8Yj09PXQuVClyZXR1cm4gdC5iR31xPW5ldyBILkpj
-KG51bGwsbnVsbCkKcS55PTgKcS56PWIKcS5jeT1jCnJldHVybiBILkJEKGEscSl9LApIKGEsYil7dmFy
-IHMscixxPSIiK2IrIl4iLHA9YS5lQy5nZXQocSkKaWYocCE9bnVsbClyZXR1cm4gcApzPW5ldyBILkpj
-KG51bGwsbnVsbCkKcy55PTEzCnMuej1iCnMuY3k9cQpyPUguQkQoYSxzKQphLmVDLnNldChxLHIpCnJl
-dHVybiByfSwKVXgoYSl7dmFyIHMscixxLHA9YS5sZW5ndGgKZm9yKHM9IiIscj0iIixxPTA7cTxwOysr
-cSxyPSIsIilzKz1yK2FbcV0uY3kKcmV0dXJuIHN9LApTNChhKXt2YXIgcyxyLHEscCxvLG4sbT1hLmxl
-bmd0aApmb3Iocz0iIixyPSIiLHE9MDtxPG07cSs9MyxyPSIsIil7cD1hW3FdCm89YVtxKzFdPyIhIjoi
-OiIKbj1hW3ErMl0uY3kKcys9citwK28rbn1yZXR1cm4gc30sCkooYSxiLGMpe3ZhciBzLHIscSxwPWIK
-aWYoYy5sZW5ndGg+MClwKz0iPCIrSC5VeChjKSsiPiIKcz1hLmVDLmdldChwKQppZihzIT1udWxsKXJl
-dHVybiBzCnI9bmV3IEguSmMobnVsbCxudWxsKQpyLnk9OQpyLno9YgpyLlE9YwppZihjLmxlbmd0aD4w
-KXIuYz1jWzBdCnIuY3k9cApxPUguQkQoYSxyKQphLmVDLnNldChwLHEpCnJldHVybiBxfSwKYShhLGIs
-Yyl7dmFyIHMscixxLHAsbyxuCmlmKGIueT09PTEwKXtzPWIuegpyPWIuUS5jb25jYXQoYyl9ZWxzZXty
-PWMKcz1ifXE9cy5jeSsoIjs8IitILlV4KHIpKyI+IikKcD1hLmVDLmdldChxKQppZihwIT1udWxsKXJl
-dHVybiBwCm89bmV3IEguSmMobnVsbCxudWxsKQpvLnk9MTAKby56PXMKby5RPXIKby5jeT1xCm49SC5C
-RChhLG8pCmEuZUMuc2V0KHEsbikKcmV0dXJuIG59LApkKGEsYixjKXt2YXIgcyxyLHEscCxvLG49Yi5j
-eSxtPWMuYSxsPW0ubGVuZ3RoLGs9Yy5iLGo9ay5sZW5ndGgsaT1jLmMsaD1pLmxlbmd0aCxnPSIoIitI
-LlV4KG0pCmlmKGo+MCl7cz1sPjA/IiwiOiIiCnI9SC5VeChrKQpnKz1zKyJbIityKyJdIn1pZihoPjAp
-e3M9bD4wPyIsIjoiIgpyPUguUzQoaSkKZys9cysieyIrcisifSJ9cT1uKyhnKyIpIikKcD1hLmVDLmdl
-dChxKQppZihwIT1udWxsKXJldHVybiBwCm89bmV3IEguSmMobnVsbCxudWxsKQpvLnk9MTEKby56PWIK
-by5RPWMKby5jeT1xCnI9SC5CRChhLG8pCmEuZUMuc2V0KHEscikKcmV0dXJuIHJ9LApEKGEsYixjLGQp
-e3ZhciBzLHI9Yi5jeSsoIjwiK0guVXgoYykrIj4iKSxxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0
-dXJuIHEKcz1ILmh3KGEsYixjLHIsZCkKYS5lQy5zZXQocixzKQpyZXR1cm4gc30sCmh3KGEsYixjLGQs
-ZSl7dmFyIHMscixxLHAsbyxuLG0sbAppZihlKXtzPWMubGVuZ3RoCnI9SC52VShzKQpmb3IocT0wLHA9
-MDtwPHM7KytwKXtvPWNbcF0KaWYoby55PT09MSl7cltwXT1vOysrcX19aWYocT4wKXtuPUguUEwoYSxi
-LHIsMCkKbT1ILmJaKGEsYyxyLDApCnJldHVybiBILkQoYSxuLG0sYyE9PW0pfX1sPW5ldyBILkpjKG51
-bGwsbnVsbCkKbC55PTEyCmwuej1iCmwuUT1jCmwuY3k9ZApyZXR1cm4gSC5CRChhLGwpfSwKbyhhLGIs
-YyxkKXtyZXR1cm57dTphLGU6YixyOmMsczpbXSxwOjAsbjpkfX0sCmkoYSl7dmFyIHMscixxLHAsbyxu
-LG0sbCxrLGosaSxoPWEucixnPWEucwpmb3Iocz1oLmxlbmd0aCxyPTA7cjxzOyl7cT1oLmNoYXJDb2Rl
-QXQocikKaWYocT49NDgmJnE8PTU3KXI9SC5BKHIrMSxxLGgsZykKZWxzZSBpZigoKChxfDMyKT4+PjAp
-LTk3JjY1NTM1KTwyNnx8cT09PTk1fHxxPT09MzYpcj1ILnQoYSxyLGgsZywhMSkKZWxzZSBpZihxPT09
-NDYpcj1ILnQoYSxyLGgsZywhMCkKZWxzZXsrK3IKc3dpdGNoKHEpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1
-ODpnLnB1c2goITEpCmJyZWFrCmNhc2UgMzM6Zy5wdXNoKCEwKQpicmVhawpjYXNlIDU5OmcucHVzaChI
-LksoYS51LGEuZSxnLnBvcCgpKSkKYnJlYWsKY2FzZSA5NDpnLnB1c2goSC5IKGEudSxnLnBvcCgpKSkK
-YnJlYWsKY2FzZSAzNTpnLnB1c2goSC5tKGEudSw1LCIjIikpCmJyZWFrCmNhc2UgNjQ6Zy5wdXNoKEgu
-bShhLnUsMiwiQCIpKQpicmVhawpjYXNlIDEyNjpnLnB1c2goSC5tKGEudSwzLCJ+IikpCmJyZWFrCmNh
-c2UgNjA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgNjI6cD1hLnUKbz1nLnNwbGlj
-ZShhLnApCkgucihhLnUsYS5lLG8pCmEucD1nLnBvcCgpCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09InN0
-cmluZyIpZy5wdXNoKEguSihwLG4sbykpCmVsc2V7bT1ILksocCxhLmUsbikKc3dpdGNoKG0ueSl7Y2Fz
-ZSAxMTpnLnB1c2goSC5EKHAsbSxvLGEubikpCmJyZWFrCmRlZmF1bHQ6Zy5wdXNoKEguYShwLG0sbykp
-CmJyZWFrfX1icmVhawpjYXNlIDM4OkguSShhLGcpCmJyZWFrCmNhc2UgNDI6cD1hLnUKZy5wdXNoKEgu
-QyhwLEguSyhwLGEuZSxnLnBvcCgpKSxhLm4pKQpicmVhawpjYXNlIDYzOnA9YS51CmcucHVzaChILkIo
-cCxILksocCxhLmUsZy5wb3AoKSksYS5uKSkKYnJlYWsKY2FzZSA0NzpwPWEudQpnLnB1c2goSC5mKHAs
-SC5LKHAsYS5lLGcucG9wKCkpLGEubikpCmJyZWFrCmNhc2UgNDA6Zy5wdXNoKGEucCkKYS5wPWcubGVu
-Z3RoCmJyZWFrCmNhc2UgNDE6cD1hLnUKbD1uZXcgSC5HKCkKaz1wLnNFQQpqPXAuc0VBCm49Zy5wb3Ao
-KQppZih0eXBlb2Ygbj09Im51bWJlciIpc3dpdGNoKG4pe2Nhc2UtMTprPWcucG9wKCkKYnJlYWsKY2Fz
-ZS0yOmo9Zy5wb3AoKQpicmVhawpkZWZhdWx0OmcucHVzaChuKQpicmVha31lbHNlIGcucHVzaChuKQpv
-PWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkKbC5hPW8KbC5iPWsKbC5jPWoK
-Zy5wdXNoKEguZChwLEguSyhwLGEuZSxnLnBvcCgpKSxsKSkKYnJlYWsKY2FzZSA5MTpnLnB1c2goYS5w
-KQphLnA9Zy5sZW5ndGgKYnJlYWsKY2FzZSA5MzpvPWcuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUsbykK
-YS5wPWcucG9wKCkKZy5wdXNoKG8pCmcucHVzaCgtMSkKYnJlYWsKY2FzZSAxMjM6Zy5wdXNoKGEucCkK
-YS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgMTI1Om89Zy5zcGxpY2UoYS5wKQpILnkoYS51LGEuZSxvKQph
-LnA9Zy5wb3AoKQpnLnB1c2gobykKZy5wdXNoKC0yKQpicmVhawpkZWZhdWx0OnRocm93IkJhZCBjaGFy
-YWN0ZXIgIitxfX19aT1nLnBvcCgpCnJldHVybiBILksoYS51LGEuZSxpKX0sCkEoYSxiLGMsZCl7dmFy
-IHMscixxPWItNDgKZm9yKHM9Yy5sZW5ndGg7YTxzOysrYSl7cj1jLmNoYXJDb2RlQXQoYSkKaWYoIShy
-Pj00OCYmcjw9NTcpKWJyZWFrCnE9cSoxMCsoci00OCl9ZC5wdXNoKHEpCnJldHVybiBhfSwKdChhLGIs
-YyxkLGUpe3ZhciBzLHIscSxwLG8sbixtPWIrMQpmb3Iocz1jLmxlbmd0aDttPHM7KyttKXtyPWMuY2hh
-ckNvZGVBdChtKQppZihyPT09NDYpe2lmKGUpYnJlYWsKZT0hMH1lbHNle2lmKCEoKCgocnwzMik+Pj4w
-KS05NyY2NTUzNSk8MjZ8fHI9PT05NXx8cj09PTM2KSlxPXI+PTQ4JiZyPD01NwplbHNlIHE9ITAKaWYo
-IXEpYnJlYWt9fXA9Yy5zdWJzdHJpbmcoYixtKQppZihlKXtzPWEudQpvPWEuZQppZihvLnk9PT0xMClv
-PW8uegpuPUguUW8ocyxvLnopW3BdCmlmKG49PW51bGwpSC52KCdObyAiJytwKyciIGluICInK0gubUQo
-bykrJyInKQpkLnB1c2goSC5jRShzLG8sbikpfWVsc2UgZC5wdXNoKHApCnJldHVybiBtfSwKSShhLGIp
-e3ZhciBzPWIucG9wKCkKaWYoMD09PXMpe2IucHVzaChILm0oYS51LDEsIjAmIikpCnJldHVybn1pZigx
-PT09cyl7Yi5wdXNoKEgubShhLnUsNCwiMSYiKSkKcmV0dXJufXRocm93IEguYihQLmhWKCJVbmV4cGVj
-dGVkIGV4dGVuZGVkIG9wZXJhdGlvbiAiK0guRWoocykpKX0sCksoYSxiLGMpe2lmKHR5cGVvZiBjPT0i
-c3RyaW5nIilyZXR1cm4gSC5KKGEsYyxhLnNFQSkKZWxzZSBpZih0eXBlb2YgYz09Im51bWJlciIpcmV0
-dXJuIEguVFYoYSxiLGMpCmVsc2UgcmV0dXJuIGN9LApyKGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZv
-cihzPTA7czxyOysrcyljW3NdPUguSyhhLGIsY1tzXSl9LAp5KGEsYixjKXt2YXIgcyxyPWMubGVuZ3Ro
-CmZvcihzPTI7czxyO3MrPTMpY1tzXT1ILksoYSxiLGNbc10pfSwKVFYoYSxiLGMpe3ZhciBzLHIscT1i
-LnkKaWYocT09PTEwKXtpZihjPT09MClyZXR1cm4gYi56CnM9Yi5RCnI9cy5sZW5ndGgKaWYoYzw9cily
-ZXR1cm4gc1tjLTFdCmMtPXIKYj1iLnoKcT1iLnl9ZWxzZSBpZihjPT09MClyZXR1cm4gYgppZihxIT09
-OSl0aHJvdyBILmIoUC5oVigiSW5kZXhlZCBiYXNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIHR5cGUiKSkK
-cz1iLlEKaWYoYzw9cy5sZW5ndGgpcmV0dXJuIHNbYy0xXQp0aHJvdyBILmIoUC5oVigiQmFkIGluZGV4
-ICIrYysiIGZvciAiK2IudygwKSkpfSwKV2UoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGss
-agppZihiPT09ZClyZXR1cm4hMAppZighSC5BOChkKSlpZighKGQ9PT10Ll8pKXM9ITEKZWxzZSBzPSEw
-CmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnI9Yi55CmlmKHI9PT00KXJldHVybiEwCmlmKEguQTgoYikp
-cmV0dXJuITEKaWYoYi55IT09MSlzPSExCmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnE9cj09PTEzCmlm
-KHEpaWYoSC5XZShhLGNbYi56XSxjLGQsZSkpcmV0dXJuITAKcD1kLnkKcz1iPT09dC5QfHxiPT09dC5U
-CmlmKHMpe2lmKHA9PT04KXJldHVybiBILldlKGEsYixjLGQueixlKQpyZXR1cm4gZD09PXQuUHx8ZD09
-PXQuVHx8cD09PTd8fHA9PT02fWlmKGQ9PT10Lkspe2lmKHI9PT04KXJldHVybiBILldlKGEsYi56LGMs
-ZCxlKQppZihyPT09NilyZXR1cm4gSC5XZShhLGIueixjLGQsZSkKcmV0dXJuIHIhPT03fWlmKHI9PT02
-KXJldHVybiBILldlKGEsYi56LGMsZCxlKQppZihwPT09Nil7cz1ILmN6KGEsZCkKcmV0dXJuIEguV2Uo
-YSxiLGMscyxlKX1pZihyPT09OCl7aWYoIUguV2UoYSxiLnosYyxkLGUpKXJldHVybiExCnJldHVybiBI
-LldlKGEsSC54WihhLGIpLGMsZCxlKX1pZihyPT09Nyl7cz1ILldlKGEsdC5QLGMsZCxlKQpyZXR1cm4g
-cyYmSC5XZShhLGIueixjLGQsZSl9aWYocD09PTgpe2lmKEguV2UoYSxiLGMsZC56LGUpKXJldHVybiEw
-CnJldHVybiBILldlKGEsYixjLEgueFooYSxkKSxlKX1pZihwPT09Nyl7cz1ILldlKGEsYixjLHQuUCxl
-KQpyZXR1cm4gc3x8SC5XZShhLGIsYyxkLnosZSl9aWYocSlyZXR1cm4hMQpzPXIhPT0xMQppZigoIXN8
-fHI9PT0xMikmJmQ9PT10LlkpcmV0dXJuITAKaWYocD09PTEyKXtpZihiPT09dC54KXJldHVybiEwCmlm
-KHIhPT0xMilyZXR1cm4hMQpvPWIuUQpuPWQuUQptPW8ubGVuZ3RoCmlmKG0hPT1uLmxlbmd0aClyZXR1
-cm4hMQpjPWM9PW51bGw/bzpvLmNvbmNhdChjKQplPWU9PW51bGw/bjpuLmNvbmNhdChlKQpmb3IobD0w
-O2w8bTsrK2wpe2s9b1tsXQpqPW5bbF0KaWYoIUguV2UoYSxrLGMsaixlKXx8IUguV2UoYSxqLGUsayxj
-KSlyZXR1cm4hMX1yZXR1cm4gSC5iTyhhLGIueixjLGQueixlKX1pZihwPT09MTEpe2lmKGI9PT10Lngp
-cmV0dXJuITAKaWYocylyZXR1cm4hMQpyZXR1cm4gSC5iTyhhLGIsYyxkLGUpfWlmKHI9PT05KXtpZihw
-IT09OSlyZXR1cm4hMQpyZXR1cm4gSC5wRyhhLGIsYyxkLGUpfXJldHVybiExfSwKYk8oYTMsYTQsYTUs
-YTYsYTcpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyCmlm
-KCFILldlKGEzLGE0LnosYTUsYTYueixhNykpcmV0dXJuITEKcz1hNC5RCnI9YTYuUQpxPXMuYQpwPXIu
-YQpvPXEubGVuZ3RoCm49cC5sZW5ndGgKaWYobz5uKXJldHVybiExCm09bi1vCmw9cy5iCms9ci5iCmo9
-bC5sZW5ndGgKaT1rLmxlbmd0aAppZihvK2o8bitpKXJldHVybiExCmZvcihoPTA7aDxvOysraCl7Zz1x
-W2hdCmlmKCFILldlKGEzLHBbaF0sYTcsZyxhNSkpcmV0dXJuITF9Zm9yKGg9MDtoPG07KytoKXtnPWxb
-aF0KaWYoIUguV2UoYTMscFtvK2hdLGE3LGcsYTUpKXJldHVybiExfWZvcihoPTA7aDxpOysraCl7Zz1s
-W20raF0KaWYoIUguV2UoYTMsa1toXSxhNyxnLGE1KSlyZXR1cm4hMX1mPXMuYwplPXIuYwpkPWYubGVu
-Z3RoCmM9ZS5sZW5ndGgKZm9yKGI9MCxhPTA7YTxjO2ErPTMpe2EwPWVbYV0KZm9yKDshMDspe2lmKGI+
-PWQpcmV0dXJuITEKYTE9ZltiXQpiKz0zCmlmKGEwPGExKXJldHVybiExCmEyPWZbYi0yXQppZihhMTxh
-MCl7aWYoYTIpcmV0dXJuITEKY29udGludWV9Zz1lW2ErMV0KaWYoYTImJiFnKXJldHVybiExCmc9Zlti
-LTFdCmlmKCFILldlKGEzLGVbYSsyXSxhNyxnLGE1KSlyZXR1cm4hMQpicmVha319Zm9yKDtiPGQ7KXtp
-ZihmW2IrMV0pcmV0dXJuITEKYis9M31yZXR1cm4hMH0sCnBHKGEsYixjLGQsZSl7dmFyIHMscixxLHAs
-byxuLG0sbD1iLnosaz1kLnoKZm9yKDtsIT09azspe3M9YS50UltsXQppZihzPT1udWxsKXJldHVybiEx
-CmlmKHR5cGVvZiBzPT0ic3RyaW5nIil7bD1zCmNvbnRpbnVlfXI9c1trXQppZihyPT1udWxsKXJldHVy
-biExCnE9ci5sZW5ndGgKcD1xPjA/bmV3IEFycmF5KHEpOnYudHlwZVVuaXZlcnNlLnNFQQpmb3Iobz0w
-O288cTsrK28pcFtvXT1ILmNFKGEsYixyW29dKQpyZXR1cm4gSC5TVyhhLHAsbnVsbCxjLGQuUSxlKX1u
-PWIuUQptPWQuUQpyZXR1cm4gSC5TVyhhLG4sbnVsbCxjLG0sZSl9LApTVyhhLGIsYyxkLGUsZil7dmFy
-IHMscixxLHA9Yi5sZW5ndGgKZm9yKHM9MDtzPHA7KytzKXtyPWJbc10KcT1lW3NdCmlmKCFILldlKGEs
-cixkLHEsZikpcmV0dXJuITF9cmV0dXJuITB9LApsUihhKXt2YXIgcyxyPWEueQppZighKGE9PT10LlB8
-fGE9PT10LlQpKWlmKCFILkE4KGEpKWlmKHIhPT03KWlmKCEocj09PTYmJkgubFIoYS56KSkpcz1yPT09
-OCYmSC5sUihhLnopCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4g
-c30sCmNjKGEpe3ZhciBzCmlmKCFILkE4KGEpKWlmKCEoYT09PXQuXykpcz0hMQplbHNlIHM9ITAKZWxz
-ZSBzPSEwCnJldHVybiBzfSwKQTgoYSl7dmFyIHM9YS55CnJldHVybiBzPT09Mnx8cz09PTN8fHM9PT00
-fHxzPT09NXx8YT09PXQuWH0sCkl4KGEsYil7dmFyIHMscixxPU9iamVjdC5rZXlzKGIpLHA9cS5sZW5n
-dGgKZm9yKHM9MDtzPHA7KytzKXtyPXFbc10KYVtyXT1iW3JdfX0sCnZVKGEpe3JldHVybiBhPjA/bmV3
-IEFycmF5KGEpOnYudHlwZVVuaXZlcnNlLnNFQX0sCkpjOmZ1bmN0aW9uIEpjKGEsYil7dmFyIF89dGhp
-cwpfLmE9YQpfLmI9YgpfLng9Xy5yPV8uYz1udWxsCl8ueT0wCl8uY3k9Xy5jeD1fLmNoPV8uUT1fLno9
-bnVsbH0sCkc6ZnVuY3Rpb24gRygpe3RoaXMuYz10aGlzLmI9dGhpcy5hPW51bGx9LAprUzpmdW5jdGlv
-biBrUygpe30sCmlNOmZ1bmN0aW9uIGlNKGEpe3RoaXMuYT1hfSwKUjkoYSl7cmV0dXJuIHQudy5iKGEp
-fHx0LkIuYihhKXx8dC5kei5iKGEpfHx0LkkuYihhKXx8dC5BLmIoYSl8fHQuZzQuYihhKXx8dC5nMi5i
-KGEpfSwKRlAoYSl7cmV0dXJuIEgudihILmooYSkpfX0sSj17ClF1KGEsYixjLGQpe3JldHVybntpOmEs
-cDpiLGU6Yyx4OmR9fSwKa3MoYSl7dmFyIHMscixxLHAsbyxuPWFbdi5kaXNwYXRjaFByb3BlcnR5TmFt
-ZV0KaWYobj09bnVsbClpZigkLkJ2PT1udWxsKXtILlhEKCkKbj1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5h
-bWVdfWlmKG4hPW51bGwpe3M9bi5wCmlmKCExPT09cylyZXR1cm4gbi5pCmlmKCEwPT09cylyZXR1cm4g
-YQpyPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQppZihzPT09cilyZXR1cm4gbi5pCmlmKG4uZT09PXIp
-dGhyb3cgSC5iKFAuU1koIlJldHVybiBpbnRlcmNlcHRvciBmb3IgIitILkVqKHMoYSxuKSkpKX1xPWEu
-Y29uc3RydWN0b3IKaWYocT09bnVsbClwPW51bGwKZWxzZXtvPSQuem0KaWYobz09bnVsbClvPSQuem09
-di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpwPXFbb119aWYocCE9bnVsbClyZXR1cm4gcApwPUgu
-dzMoYSkKaWYocCE9bnVsbClyZXR1cm4gcAppZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gQy5E
-RwpzPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQppZihzPT1udWxsKXJldHVybiBDLlpRCmlmKHM9PT1P
-YmplY3QucHJvdG90eXBlKXJldHVybiBDLlpRCmlmKHR5cGVvZiBxPT0iZnVuY3Rpb24iKXtvPSQuem0K
-aWYobz09bnVsbClvPSQuem09di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpPYmplY3QuZGVmaW5l
-UHJvcGVydHkocSxvLHt2YWx1ZTpDLnZCLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25m
-aWd1cmFibGU6dHJ1ZX0pCnJldHVybiBDLnZCfXJldHVybiBDLnZCfSwKUWkoYSxiKXtpZihhPDB8fGE+
-NDI5NDk2NzI5NSl0aHJvdyBILmIoUC5URShhLDAsNDI5NDk2NzI5NSwibGVuZ3RoIixudWxsKSkKcmV0
-dXJuIEoucHkobmV3IEFycmF5KGEpLGIpfSwKS2goYSxiKXtpZihhPDApdGhyb3cgSC5iKFAueFkoIkxl
-bmd0aCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXI6ICIrYSxudWxsKSkKcmV0dXJuIEguUUko
-bmV3IEFycmF5KGEpLGIuQygiamQ8MD4iKSl9LApweShhLGIpe3JldHVybiBKLkVwKEguUUkoYSxiLkMo
-ImpkPDA+IikpLGIpfSwKRXAoYSxiKXthLmZpeGVkJGxlbmd0aD1BcnJheQpyZXR1cm4gYX0sCnpDKGEp
-e2EuZml4ZWQkbGVuZ3RoPUFycmF5CmEuaW1tdXRhYmxlJGxpc3Q9QXJyYXkKcmV0dXJuIGF9LApHYShh
-KXtpZihhPDI1Nilzd2l0Y2goYSl7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6
-Y2FzZSAzMjpjYXNlIDEzMzpjYXNlIDE2MDpyZXR1cm4hMApkZWZhdWx0OnJldHVybiExfXN3aXRjaChh
-KXtjYXNlIDU3NjA6Y2FzZSA4MTkyOmNhc2UgODE5MzpjYXNlIDgxOTQ6Y2FzZSA4MTk1OmNhc2UgODE5
-NjpjYXNlIDgxOTc6Y2FzZSA4MTk4OmNhc2UgODE5OTpjYXNlIDgyMDA6Y2FzZSA4MjAxOmNhc2UgODIw
-MjpjYXNlIDgyMzI6Y2FzZSA4MjMzOmNhc2UgODIzOTpjYXNlIDgyODc6Y2FzZSAxMjI4ODpjYXNlIDY1
-Mjc5OnJldHVybiEwCmRlZmF1bHQ6cmV0dXJuITF9fSwKbW0oYSxiKXt2YXIgcyxyCmZvcihzPWEubGVu
-Z3RoO2I8czspe3I9Qy54Qi5XKGEsYikKaWYociE9PTMyJiZyIT09MTMmJiFKLkdhKHIpKWJyZWFrOysr
-Yn1yZXR1cm4gYn0sCmMxKGEsYil7dmFyIHMscgpmb3IoO2I+MDtiPXMpe3M9Yi0xCnI9Qy54Qi5PKGEs
-cykKaWYociE9PTMyJiZyIT09MTMmJiFKLkdhKHIpKWJyZWFrfXJldHVybiBifSwKVTYoYSl7aWYodHlw
-ZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBhCmlm
-KGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9i
-amVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4g
-YX1pZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sCllFKGEpe2lmKGE9
-PW51bGwpcmV0dXJuIGEKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9u
-IilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIFAuTWgpcmV0dXJu
-IGEKcmV0dXJuIEoua3MoYSl9LAppYShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpe2lmKE1hdGguZmxv
-b3IoYSk9PWEpcmV0dXJuIEouYlUucHJvdG90eXBlCnJldHVybiBKLmtELnByb3RvdHlwZX1pZih0eXBl
-b2YgYT09InN0cmluZyIpcmV0dXJuIEouRHIucHJvdG90eXBlCmlmKGE9PW51bGwpcmV0dXJuIEoud2Uu
-cHJvdG90eXBlCmlmKHR5cGVvZiBhPT0iYm9vbGVhbiIpcmV0dXJuIEoueUUucHJvdG90eXBlCmlmKGEu
-Y29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9iamVj
-dCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4gYX1p
-ZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sCnJZKGEpe2lmKHR5cGVv
-ZiBhPT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZigh
-KGEgaW5zdGFuY2VvZiBQLk1oKSlyZXR1cm4gSi5rZC5wcm90b3R5cGUKcmV0dXJuIGF9LAp3MShhKXtp
-ZihhPT1udWxsKXJldHVybiBhCmlmKGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3Rv
-dHlwZQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBK
-LmM1LnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgUC5NaClyZXR1cm4gYQpyZXR1cm4g
-Si5rcyhhKX0sCkE1KGEsYil7cmV0dXJuIEoudzEoYSkuZVIoYSxiKX0sCkVoKGEsYixjKXtyZXR1cm4g
-Si5ZRShhKS5tSyhhLGIsYyl9LApFbChhLGIpe3JldHVybiBKLncxKGEpLmRyKGEsYil9LApGNyhhKXty
-ZXR1cm4gSi5VNihhKS5nb3IoYSl9LApGTChhLGIpe3JldHVybiBKLnJZKGEpLmRkKGEsYil9LApHQShh
-LGIpe3JldHVybiBKLncxKGEpLkUoYSxiKX0sCkhtKGEpe3JldHVybiBKLlU2KGEpLmdBKGEpfSwKSVQo
-YSl7cmV0dXJuIEoudzEoYSkuZ20oYSl9LApKeShhLGIpe3JldHVybiBKLmlhKGEpLmU3KGEsYil9LApM
-dChhKXtyZXR1cm4gSi5ZRShhKS53ZyhhKX0sCk0xKGEsYixjKXtyZXR1cm4gSi53MShhKS5FMihhLGIs
-Yyl9LApNdShhLGIpe3JldHVybiBKLllFKGEpLnNQKGEsYil9LApSTShhLGIpe2lmKGE9PW51bGwpcmV0
-dXJuIGI9PW51bGwKaWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBiIT1udWxsJiZhPT09YgpyZXR1
-cm4gSi5pYShhKS5ETihhLGIpfSwKUlgoYSl7cmV0dXJuIEoudzEoYSkuYnIoYSl9LApUMChhKXtyZXR1
-cm4gSi5yWShhKS5iUyhhKX0sCmE2KGEsYil7cmV0dXJuIEouclkoYSkuTyhhLGIpfSwKYlQoYSl7cmV0
-dXJuIEouWUUoYSkuRDQoYSl9LApjSChhKXtyZXR1cm4gSi5yWShhKS5oYyhhKX0sCmRSKGEpe3JldHVy
-biBKLllFKGEpLmdQKGEpfSwKZFooYSxiLGMsZCl7cmV0dXJuIEouWUUoYSkuT24oYSxiLGMsZCl9LApk
-aChhKXtyZXR1cm4gSi5ZRShhKS5GRihhKX0sCmRyKGEsYil7cmV0dXJuIEouWUUoYSkuc2E0KGEsYil9
-LApoZihhKXtyZXR1cm4gSi5pYShhKS5naU8oYSl9LAppZyhhKXtyZXR1cm4gSi5ZRShhKS5nUWcoYSl9
-LApsNShhLGIpe3JldHVybiBKLllFKGEpLnNoZihhLGIpfSwKcUYoYSl7cmV0dXJuIEouWUUoYSkuZ1Zs
-KGEpfSwKdEgoYSxiLGMpe3JldHVybiBKLllFKGEpLnBrKGEsYixjKX0sCnU5KGEsYixjKXtyZXR1cm4g
-Si53MShhKS5ZNShhLGIsYyl9LAp1VShhKXtyZXR1cm4gSi5VNihhKS5nbDAoYSl9LAp3KGEpe3JldHVy
-biBKLmlhKGEpLncoYSl9LAp3ZihhLGIpe3JldHVybiBKLllFKGEpLnNSTihhLGIpfSwKeDkoYSxiKXtp
-Zih0eXBlb2YgYj09PSJudW1iZXIiKWlmKGEuY29uc3RydWN0b3I9PUFycmF5fHx0eXBlb2YgYT09InN0
-cmluZyJ8fEgud1YoYSxhW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdKSlpZihiPj4+MD09PWImJmI8YS5s
-ZW5ndGgpcmV0dXJuIGFbYl0KcmV0dXJuIEouVTYoYSkucShhLGIpfSwKemwoYSxiKXtyZXR1cm4gSi5V
-NihhKS50ZyhhLGIpfSwKR3Y6ZnVuY3Rpb24gR3YoKXt9LAp5RTpmdW5jdGlvbiB5RSgpe30sCndlOmZ1
-bmN0aW9uIHdlKCl7fSwKTUY6ZnVuY3Rpb24gTUYoKXt9LAppQzpmdW5jdGlvbiBpQygpe30sCmtkOmZ1
-bmN0aW9uIGtkKCl7fSwKYzU6ZnVuY3Rpb24gYzUoKXt9LApqZDpmdW5jdGlvbiBqZChhKXt0aGlzLiR0
-aT1hfSwKUG86ZnVuY3Rpb24gUG8oYSl7dGhpcy4kdGk9YX0sCm0xOmZ1bmN0aW9uIG0xKGEsYixjKXt2
-YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0wCl8uZD1udWxsCl8uJHRpPWN9LApxSTpmdW5jdGlvbiBx
-SSgpe30sCmJVOmZ1bmN0aW9uIGJVKCl7fSwKa0Q6ZnVuY3Rpb24ga0QoKXt9LApEcjpmdW5jdGlvbiBE
-cigpe319LEw9ewpJcSgpe0MuQlouQihkb2N1bWVudCwiRE9NQ29udGVudExvYWRlZCIsbmV3IEwuZSgp
-KQpDLm9sLkIod2luZG93LCJwb3BzdGF0ZSIsbmV3IEwuTCgpKX0sCmt6KGEpe3ZhciBzLHI9dC5oLmEo
-YS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKCI6c2NvcGUgPiB1bCIpLHE9ci5zdHlsZSxwPSIiK0Mu
-Q0QuelEoci5vZmZzZXRIZWlnaHQpKjIrInB4IgpxLm1heEhlaWdodD1wCnE9Si5xRihhKQpwPXEuJHRp
-CnM9cC5DKCJ+KDEpPyIpLmEobmV3IEwuV3gocixhKSkKdC5aLmEobnVsbCkKVy5KRShxLmEscS5iLHMs
-ITEscC5jKX0sCnlYKGEsYil7dmFyIHMscixxLHAsbyxuLG09InF1ZXJ5U2VsZWN0b3JBbGwiLGw9ZG9j
-dW1lbnQucXVlcnlTZWxlY3RvcihhKQpsLnRvU3RyaW5nCnM9dC5oCkguRGgocyxzLCJUIixtKQpyPXQu
-UgpxPW5ldyBXLnd6KGwucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1saW5rIikscikKcS5LKHEsbmV3IEwu
-SG8oYikpCkguRGgocyxzLCJUIixtKQpwPW5ldyBXLnd6KGwucXVlcnlTZWxlY3RvckFsbCgiLnJlZ2lv
-biIpLHIpCmlmKCFwLmdsMChwKSl7bz1sLnF1ZXJ5U2VsZWN0b3IoInRhYmxlW2RhdGEtcGF0aF0iKQpv
-LnRvU3RyaW5nCnAuSyhwLG5ldyBMLklDKG8uZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3
-IFcuaTcobykpLk9VKCJwYXRoIikpKSl9SC5EaChzLHMsIlQiLG0pCm49bmV3IFcud3oobC5xdWVyeVNl
-bGVjdG9yQWxsKCIuYWRkLWhpbnQtbGluayIpLHIpCm4uSyhuLG5ldyBMLkJOKCkpfSwKUTYoYSxiLGMp
-e3ZhciBzPW5ldyBYTUxIdHRwUmVxdWVzdCgpCkMuRHQuZW8ocywiR0VUIixMLlE0KGEsYiksITApCnMu
-c2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1V
-VEYtOCIpCnJldHVybiBMLkxVKHMsbnVsbCxjKX0sCnR5KGEsYil7dmFyIHM9bmV3IFhNTEh0dHBSZXF1
-ZXN0KCkscj10Lk4KQy5EdC5lbyhzLCJQT1NUIixMLlE0KGEsUC5GbChyLHIpKSwhMCkKcy5zZXRSZXF1
-ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IikK
-cmV0dXJuIEwuTFUocyxiLHQuRyl9LApMVShhLGIsYyl7cmV0dXJuIEwuVGcoYSxiLGMsYy5DKCIwPyIp
-KX0sClRnKGEsYixjLGQpe3ZhciBzPTAscj1QLkZYKGQpLHEscD0yLG8sbj1bXSxtLGwsayxqLGksaCxn
-LGYsZQp2YXIgJGFzeW5jJExVPVAubHooZnVuY3Rpb24oYTAsYTEpe2lmKGEwPT09MSl7bz1hMQpzPXB9
-d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9bmV3IFAuWmYobmV3IFAudnMoJC5YMyx0LmFvKSx0
-LmJqKQpnPXQuZ3gKZj1nLmEobmV3IEwuZkMoaCxhKSkKdC5aLmEobnVsbCkKaz10LnAKVy5KRShhLCJs
-b2FkIixmLCExLGspClcuSkUoYSwiZXJyb3IiLGcuYShoLmdZSigpKSwhMSxrKQphLnNlbmQoYj09bnVs
-bD9udWxsOkMuQ3QuT0IoYixudWxsKSkKcD00CnM9NwpyZXR1cm4gUC5qUShoLmEsJGFzeW5jJExVKQpj
-YXNlIDc6cD0yCnM9NgpicmVhawpjYXNlIDQ6cD0zCmU9bwpILlJ1KGUpCm09SC50cyhlKQpnPWEucmVh
-ZHlTdGF0ZQppZihnPT09NCYmYS5zdGF0dXM9PT0wKXRocm93IEguYihMLlRHKCJFcnJvciByZWFjaGlu
-ZyBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIiLCJUaGlzIHVzdWFsbHkgaGFwcGVucyBiZWNhdXNlIHRo
-ZSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIgaGFzIGV4aXRlZC4gIEZvclxuZXhhbXBsZSBpdCBtYXkg
-aGF2ZSBiZWVuIGFib3J0ZWQgd2l0aCBDdHJsLUMsIG9yIHlvdSBtYXkgaGF2ZSBjb21wbGV0ZWQgdGhp
-c1xubWlncmF0aW9uLCBvciBhbiBleGNlcHRpb24gbWF5IGhhdmUgb2NjdXJyZWQuICBQbGVhc2UgY2hl
-Y2sgdGhlIGNvbnNvbGUgd2hlcmVcbnlvdSBpbnZva2VkIGBkYXJ0IG1pZ3JhdGVgIHRvIHZlcmlmeSB0
-aGF0IHRoZSBwcmV2aWV3IHNlcnZlciBpcyBzdGlsbCBydW5uaW5nLlxuIikpCmVsc2V7bD1uZXcgSC5s
-SihILlFJKFsicmVhZHlTdGF0ZT0iK2csInJlc3BvbnNlVGV4dD0iK0MuQ3QuT0IoYS5yZXNwb25zZVRl
-eHQsbnVsbCksInJlc3BvbnNlVHlwZT0iK0MuQ3QuT0IoYS5yZXNwb25zZVR5cGUsbnVsbCksInJlc3Bv
-bnNlVXJsPSIrQy5DdC5PQihhLnJlc3BvbnNlVVJMLG51bGwpLCJzdGF0dXM9IitILkVqKGEuc3RhdHVz
-KSwic3RhdHVzVGV4dD0iK0MuQ3QuT0IoYS5zdGF0dXNUZXh0LG51bGwpXSx0LnMpLHQuZEcuYShuZXcg
-TC5UbSgpKSx0LmR2KS5rKDAsIiwgIikKdGhyb3cgSC5iKFAuVGwoIkVycm9yIHJlYWNoaW5nIG1pZ3Jh
-dGlvbiBwcmV2aWV3IHNlcnZlcjogIitILkVqKGwpLG0pKX1zPTYKYnJlYWsKY2FzZSAzOnM9MgpicmVh
-awpjYXNlIDY6aWYoYS5zdGF0dXM9PT00MDEpdGhyb3cgSC5iKEwuVEcoIlVuYXV0aG9yaXplZCByZXNw
-b25zZSBmcm9tIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlciIsIlRoZSBtaWdyYXRpb24gcHJldmlldyBz
-ZXJ2ZXIgaGFzIGRldGVjdGVkIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYXV0aFRva2VuIGluXG55b3Vy
-IFVSTCBhbmQgdGhlIHRva2VuIHRoYXQgd2FzIGdlbmVyYXRlZCBhdCB0aGUgdGltZSB0aGF0IGBkYXJ0
-IG1pZ3JhdGVgIHdhc1xucnVuLiAgSGF2ZSB5b3UgcmVzdGFydGVkIHRoZSBtaWdyYXRpb24gc2VydmVy
-IHJlY2VudGx5PyAgSWYgc28sIHlvdSdsbCBuZWVkIHRvXG5jaGVjayBpdHMgb3V0cHV0IGZvciBhIGZy
-ZXNoIFVSTCwgYW5kIHVzZSB0aGF0IFVSTCB0byBwZXJmb3JtIHlvdXIgbWlncmF0aW9uLlxuIikpCmc9
-YS5yZXNwb25zZVRleHQKZy50b1N0cmluZwppPUMuQ3QucFcoMCxnLG51bGwpCmlmKGEuc3RhdHVzPT09
-MjAwKXtxPWMuQygiMD8iKS5hKGkpCnM9MQpicmVha31lbHNle2kudG9TdHJpbmcKdGhyb3cgSC5iKGkp
-fWNhc2UgMTpyZXR1cm4gUC55QyhxLHIpCmNhc2UgMjpyZXR1cm4gUC5mMyhvLHIpfX0pCnJldHVybiBQ
-LkRJKCRhc3luYyRMVSxyKX0sCmFLKGEpe3ZhciBzPVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0
-dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LApHNihhKXt2YXIgcz1QLmhLKGEpLmdoWSgpLnEo
-MCwib2Zmc2V0IikKcmV0dXJuIHM9PW51bGw/bnVsbDpILkhwKHMsbnVsbCl9LAppNihhKXtyZXR1cm4g
-TC5uVyh0LlYuYShhKSl9LApuVyhhKXt2YXIgcz0wLHI9UC5GWCh0LnopLHE9MSxwLG89W10sbixtLGws
-ayxqLGksaCxnCnZhciAkYXN5bmMkaTY9UC5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1x
-fXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpoPXQuaC5hKFcucWMoYS5jdXJyZW50VGFyZ2V0KSku
-Z2V0QXR0cmlidXRlKCJocmVmIikKaC50b1N0cmluZwpuPWgKYS5wcmV2ZW50RGVmYXVsdCgpCnE9Mwpo
-PWRvY3VtZW50Cm09Qy5DRC56UShoLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iikuc2Nyb2xsVG9wKQpz
-PTYKcmV0dXJuIFAualEoTC50eShuLG51bGwpLCRhc3luYyRpNikKY2FzZSA2Omo9dC5GLmEod2luZG93
-LmxvY2F0aW9uKS5wYXRobmFtZQpqLnRvU3RyaW5nCnM9NwpyZXR1cm4gUC5qUShMLkc3KGosbnVsbCxu
-dWxsLCExLG51bGwpLCRhc3luYyRpNikKY2FzZSA3OmguYm9keS5jbGFzc0xpc3QuYWRkKCJuZWVkcy1y
-ZXJ1biIpCmg9aC5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmgudG9TdHJpbmcKaC5zY3JvbGxUb3A9
-Qy5qbi56UShtKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykK
-TC5DMigiY291bGRuJ3QgYWRkL3JlbW92ZSBoaW50IixsLGspCnM9NQpicmVhawpjYXNlIDI6cz0xCmJy
-ZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJl
-dHVybiBQLkRJKCRhc3luYyRpNixyKX0sCkMyKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbT0iZXhjZXB0
-aW9uIixsPSJzdGFja1RyYWNlIgppZih0Lmg2LmIoYikmJkouUk0oYi5xKDAsInN1Y2Nlc3MiKSwhMSkm
-JmIueDQobSkmJmIueDQobCkpe3M9Si5VNihiKQpyPUguayhzLnEoYixtKSkKYz1zLnEoYixsKQpxPW51
-bGx9ZWxzZSBpZihiIGluc3RhbmNlb2YgTC5RVyl7cj1iLmEKcT1iLmJ9ZWxzZXtyPUoudyhiKQpxPW51
-bGx9aWYocT09bnVsbClxPWMKcz1kb2N1bWVudApwPXMucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUi
-KQpwLnF1ZXJ5U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PWEKbz1wLnF1ZXJ5U2VsZWN0b3IoInAiKQpv
-LnRvU3RyaW5nCnIudG9TdHJpbmcKby5pbm5lclRleHQ9cgpvPXAucXVlcnlTZWxlY3RvcigicHJlIikK
-by50b1N0cmluZwpvLmlubmVyVGV4dD1KLncocSkKbj10LmJxLmEocC5xdWVyeVNlbGVjdG9yKCJhLmJv
-dHRvbSIpKQpDLnhuLnNMVShuLFAuWGQoImh0dHBzIiwiZ2l0aHViLmNvbSIsImRhcnQtbGFuZy9zZGsv
-aXNzdWVzL25ldyIsUC5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVwb3J0ZWQgaXNzdWUgd2l0aCBOTkJE
-IG1pZ3JhdGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5IixhKyJcblxuRXJyb3I6ICIrcisi
-XG5cblBsZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioqTmFtZSBvZiBwYWNrYWdlIGJlaW5n
-IG1pZ3JhdGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMgZG9pbmcgd2hlbiB0aGlzIGlzc3Vl
-IG9jY3VycmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUqKjpc
-bioqSGFzIHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQgaWYgc28sIGhvdyBvZnRlbioqOlxu
-KipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrSC5FaihzLmdldEVsZW1lbnRCeUlkKCJzZGstdmVyc2lvbiIp
-LnRleHRDb250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoqOlxuXG5UaGFua3MgZm9yIGZpbGlu
-ZyFcblxuU3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1pZ3JhdGlvbiBwcmV2aWV3IHRvb2wu
-X1xuXG5gYGBcbiIrSC5FaihjKSsiXG5gYGBcbiJdLHQuTix0LnopKS5nbkQoKSkKcz1uLnN0eWxlCnMu
-ZGlzcGxheT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1hKyI6ICIrSC5F
-aihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVy
-cm9yKHMpCndpbmRvdwpzPUguRWooYykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRv
-dy5jb25zb2xlLmVycm9yKHMpfSwKdDIoYSxiKXt2YXIgcyxyLHEscCxvPXQuaC5hKFcucWMoYS5jdXJy
-ZW50VGFyZ2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgpCnM9by5nZXRBdHRyaWJ1dGUoImhyZWYiKQpzLnRv
-U3RyaW5nCnI9TC5VcyhzKQpxPUwuRzYocykKcD1MLmFLKHMpCmlmKHEhPW51bGwpTC5hZihyLHEscCxi
-LG5ldyBMLm5UKHIscSxwKSkKZWxzZSBMLmFmKHIsbnVsbCxudWxsLGIsbmV3IEwuTlkocikpfSwKSzAo
-YSl7dmFyIHMscixxLHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5
-U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJvbSBzb3VyY2VzIgpwLnF1
-ZXJ5U2VsZWN0b3IoInAiKS5pbm5lclRleHQ9IlNvdXJjZXMgY29udGFpbiBzdGF0aWMgYW5hbHlzaXMg
-ZXJyb3JzOiIKcz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCnMudG9TdHJpbmcKcj1KLkVsKGEsdC5mKQpx
-PUguTGgocikKcy5pbm5lclRleHQ9bmV3IEgubEoocixxLkMoInFVKGxELkUpIikuYShuZXcgTC51ZSgp
-KSxxLkMoImxKPGxELkUscVU+IikpLmsoMCwiXG4iKQpxPXAucXVlcnlTZWxlY3RvcigiYS5ib3R0b20i
-KS5zdHlsZQpxLmRpc3BsYXk9Im5vbmUiCnM9cC5zdHlsZQpzLmRpc3BsYXk9ImluaXRpYWwifSwKR2co
-KXt2YXIgcz1kb2N1bWVudCxyPXQuaApILkRoKHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5l
-dyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlIpCnMuSyhzLG5ldyBMLkdIKCkpfSwK
-aFgoYSxiLGMpe3JldHVybiBMLll3KGEsYixjKX0sCll3KGEsYixjKXt2YXIgcz0wLHI9UC5GWCh0Lnop
-LHE9MSxwLG89W10sbixtLGwsayxqLGksaCxnLGYKdmFyICRhc3luYyRoWD1QLmx6KGZ1bmN0aW9uKGQs
-ZSl7aWYoZD09PTEpe3A9ZQpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOnE9MwpqPXQuTgpz
-PTYKcmV0dXJuIFAualEoTC5RNihhLFAuRUYoWyJyZWdpb24iLCJyZWdpb24iLCJvZmZzZXQiLEguRWoo
-YildLGosaiksdC5HKSwkYXN5bmMkaFgpCmNhc2UgNjpuPWUKaj1uCmk9Si5VNihqKQpoPXQuZ3EKbT1u
-ZXcgVS5kMihVLmpmKGguYShpLnEoaiwiZWRpdHMiKSkpLEguayhpLnEoaiwiZXhwbGFuYXRpb24iKSks
-SC5VYyhpLnEoaiwibGluZSIpKSxILmsoaS5xKGosImRpc3BsYXlQYXRoIikpLEguayhpLnEoaiwidXJp
-UGF0aCIpKSxVLk5kKGguYShpLnEoaiwidHJhY2VzIikpKSkKTC5UMShtKQpMLkZyKGEsYixjKQpMLnlY
-KCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIsITEpCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9Mgpm
-PXAKbD1ILlJ1KGYpCms9SC50cyhmKQpMLkMyKCJjb3VsZG4ndCBsb2FkIGVkaXQgZGV0YWlscyIsbCxr
-KQpzPTUKYnJlYWsKY2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIFAueUMobnVsbCxyKQpjYXNl
-IDE6cmV0dXJuIFAuZjMocCxyKX19KQpyZXR1cm4gUC5ESSgkYXN5bmMkaFgscil9LApHNyhhLGIsYyxk
-LGUpe3JldHVybiBMLkw1KGEsYixjLGQsZSl9LApMNShhLGIsYyxkLGUpe3ZhciBzPTAscj1QLkZYKHQu
-SCkscSxwPTIsbyxuPVtdLG0sbCxrLGosaSxoLGcKdmFyICRhc3luYyRHNz1QLmx6KGZ1bmN0aW9uKGYs
-YTApe2lmKGY9PT0xKXtvPWEwCnM9cH13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aWYoIUMueEIu
-VGMoYSwiLmRhcnQiKSl7TC5CRShhLEIud1IoKSxkKQpMLkJYKGEsbnVsbCkKaWYoZSE9bnVsbCllLiQw
-KCkKcz0xCmJyZWFrfXA9NAppPXQuTgpzPTcKcmV0dXJuIFAualEoTC5RNihhLFAuRUYoWyJpbmxpbmUi
-LCJ0cnVlIl0saSxpKSx0LkcpLCRhc3luYyRHNykKY2FzZSA3Om09YTAKTC5CRShhLEIuWWYobSksZCkK
-TC5mRyhiLGMpCmw9TC5VcyhhKQpMLkJYKGwsYikKaWYoZSE9bnVsbCllLiQwKCkKcD0yCnM9NgpicmVh
-awpjYXNlIDQ6cD0zCmc9bwprPUguUnUoZykKaj1ILnRzKGcpCkwuQzIoImNvdWxkbid0IGxvYWQgZGFy
-dCBmaWxlICIrYSxrLGopCnM9NgpicmVhawpjYXNlIDM6cz0yCmJyZWFrCmNhc2UgNjpjYXNlIDE6cmV0
-dXJuIFAueUMocSxyKQpjYXNlIDI6cmV0dXJuIFAuZjMobyxyKX19KQpyZXR1cm4gUC5ESSgkYXN5bmMk
-Rzcscil9LApHZSgpe3ZhciBzPTAscj1QLkZYKHQueikscT0xLHAsbz1bXSxuLG0sbCxrLGosaSxoLGcK
-dmFyICRhc3luYyRHZT1QLmx6KGZ1bmN0aW9uKGEsYil7aWYoYT09PTEpe3A9YgpzPXF9d2hpbGUodHJ1
-ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9Ii9fcHJldmlldy9uYXZpZ2F0aW9uVHJlZS5qc29uIgpxPTMKcz02
-CnJldHVybiBQLmpRKEwuUTYoaCxDLkNNLHQuVyksJGFzeW5jJEdlKQpjYXNlIDY6aj1iCmoudG9TdHJp
-bmcKbj1qCmo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm5hdi10cmVlIikKai50b1N0cmluZwptPWoK
-Si5sNShtLCIiKQpqPUwubUsobikKJC5JUj1qCkwudFgobSxqLCEwKQpxPTEKcz01CmJyZWFrCmNhc2Ug
-MzpxPTIKZz1wCmw9SC5SdShnKQprPUgudHMoZykKTC5DMigiY291bGRuJ3QgbG9hZCBuYXZpZ2F0aW9u
-IHRyZWUiLGwsaykKcz01CmJyZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51
-bGwscikKY2FzZSAxOnJldHVybiBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJEdlLHIpfSwK
-cU8oYSl7dmFyIHMscixxPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1DLkNELnpRKCQuZmkoKS5v
-ZmZzZXRIZWlnaHQpLG89d2luZG93LmlubmVySGVpZ2h0Cm8udG9TdHJpbmcKcz1DLkNELnpRKCQuRFco
-KS5vZmZzZXRIZWlnaHQpCnI9cS5ib3R0b20Kci50b1N0cmluZwppZihyPm8tKHMrMTQpKUouZGgoYSkK
-ZWxzZXtvPXEudG9wCm8udG9TdHJpbmcKaWYobzxwKzE0KUouZGgoYSl9fSwKZkcoYSxiKXt2YXIgcyxy
-LHEscCxvCmlmKGEhPW51bGwpe3M9ZG9jdW1lbnQKcj1zLmdldEVsZW1lbnRCeUlkKCJvIitILkVqKGEp
-KQpxPXMucXVlcnlTZWxlY3RvcigiLmxpbmUtIitILkVqKGIpKQppZihyIT1udWxsKXtMLnFPKHIpCkou
-ZFIocikuaSgwLCJ0YXJnZXQiKX1lbHNlIGlmKHEhPW51bGwpe3M9cS5wYXJlbnRFbGVtZW50CnMudG9T
-dHJpbmcKTC5xTyhzKX1pZihxIT1udWxsKUouZFIodC5oLmEocS5wYXJlbnROb2RlKSkuaSgwLCJoaWdo
-bGlnaHQiKX1lbHNle3M9ZG9jdW1lbnQKcD10LmgKSC5EaChwLHAsIlQiLCJxdWVyeVNlbGVjdG9yQWxs
-IikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saW5lLW5vIikKbz1uZXcgVy53eihzLHQuUikKaWYoby5n
-QShvKT09PTApcmV0dXJuCkwucU8ocC5hKEMudDUuZ3RIKHMpKSl9fSwKYWYoYSxiLGMsZCxlKXt2YXIg
-cyxyLHEscD10LkYsbz1MLkc2KHAuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpLG49TC5hSyhwLmEod2lu
-ZG93LmxvY2F0aW9uKS5ocmVmKQppZihvIT1udWxsKXtzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJv
-IitILkVqKG8pKQppZihzIT1udWxsKUouZFIocykuUigwLCJ0YXJnZXQiKX1pZihuIT1udWxsKXtyPWRv
-Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrSC5FaihuKSkKaWYociE9bnVsbCl7cT1yLnBhcmVu
-dEVsZW1lbnQKcS50b1N0cmluZwpKLmRSKHEpLlIoMCwiaGlnaGxpZ2h0Iil9fWlmKGE9PXAuYSh3aW5k
-b3cubG9jYXRpb24pLnBhdGhuYW1lKXtMLmZHKGIsYykKZS4kMCgpfWVsc2V7YS50b1N0cmluZwpMLkc3
-KGEsYixjLGQsZSl9fSwKUTQoYSxiKXt2YXIgcyxyLHE9UC5oSyhhKSxwPVAuRmwodC5OLHQuZGspCmZv
-cihzPXEuZ2hZKCkscz1zLmdQdShzKSxzPXMuZ20ocyk7cy5GKCk7KXtyPXMuZ2woKQpwLlk1KDAsci5h
-LHIuYil9Zm9yKHM9Yi5nUHUoYikscz1zLmdtKHMpO3MuRigpOyl7cj1zLmdsKCkKcC5ZNSgwLHIuYSxy
-LmIpfXAuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnJldHVybiBxLm5tKDAscCkuZ25EKCl9LApUMShh
-KXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPSQuaEwoKQppLnRvU3RyaW5nCkoubDUoaSwiIikKaWYo
-YT09bnVsbCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikKQy5MdC5zYTQocywiU2VlIGRldGFp
-bHMgYWJvdXQgYSBwcm9wb3NlZCBlZGl0LiIpCkMuTHQuc1AocyxILlFJKFsicGxhY2Vob2xkZXIiXSx0
-LnMpKQppLmFwcGVuZENoaWxkKHMpCkMuTHQuRkYocykKcmV0dXJufXI9YS5kCnIudG9TdHJpbmcKcT0k
-Lm5VKCkKcD1xLnpmKHIpCm89YS5iCm49ZG9jdW1lbnQKbT1uLnF1ZXJ5U2VsZWN0b3IoIi5yb290Iiku
-dGV4dENvbnRlbnQKbS50b1N0cmluZwpsPXEuSFAocixDLnhCLmJTKG0pKQprPWEuYwpqPW4uY3JlYXRl
-RWxlbWVudCgicCIpCmkuYXBwZW5kQ2hpbGQoaikKai5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2Rl
-KEguRWoobykrIiBhdCAiKSkKcj1hLmUKci50b1N0cmluZwpxPXQuTgpxPVcuSjYoTC5RNChyLFAuRUYo
-WyJsaW5lIixKLncoayldLHEscSkpKQpxLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUobCsiOiIr
-SC5FaihrKSsiLiIpKQpqLmFwcGVuZENoaWxkKHEpCkouZGgoaikKTC5DQyhhLGkscCkKTC5GeihhLGkp
-fSwKTEgoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkPSQueVAoKQpkLnRv
-U3RyaW5nCkoubDUoZCwiIikKaWYoYi5nQShiKT09PTApe3M9ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1l
-bnQoInAiKQpkLmFwcGVuZENoaWxkKHIpCnIuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiTm8g
-cHJvcG9zZWQgZWRpdHMiKSl9ZWxzZSBmb3IoZD1iLmdQdShiKSxkPWQuZ20oZCkscz10LkYscT10Lk4s
-cD10LlEsbz1wLkMoIn4oMSk/Iiksbj10LloscD1wLmM7ZC5GKCk7KXttPWQuZ2woKQpsPWRvY3VtZW50
-CnI9bC5jcmVhdGVFbGVtZW50KCJwIikKaz0kLnlQKCkKay5hcHBlbmRDaGlsZChyKQpyLmFwcGVuZENo
-aWxkKGwuY3JlYXRlVGV4dE5vZGUoSC5FaihtLmEpKyI6IikpCmo9bC5jcmVhdGVFbGVtZW50KCJ1bCIp
-CmsuYXBwZW5kQ2hpbGQoaikKZm9yKG09Si5JVChtLmIpO20uRigpOyl7az1tLmdsKCkKaT1sLmNyZWF0
-ZUVsZW1lbnQoImxpIikKai5hcHBlbmRDaGlsZChpKQpKLmRSKGkpLmkoMCwiZWRpdCIpCmg9bC5jcmVh
-dGVFbGVtZW50KCJhIikKaS5hcHBlbmRDaGlsZChoKQpoLmNsYXNzTGlzdC5hZGQoImVkaXQtbGluayIp
-Cmc9ay5jCmY9SC5FaihnKQpoLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KGgp
-KS5PVSgib2Zmc2V0IiksZikKZT1rLmEKZj1ILkVqKGUpCmguc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3
-IFcuU3kobmV3IFcuaTcoaCkpLk9VKCJsaW5lIiksZikKaC5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHRO
-b2RlKCJsaW5lICIrSC5FaihlKSkpCmY9cy5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKZi50b1N0
-cmluZwpoLnNldEF0dHJpYnV0ZSgiaHJlZiIsTC5RNChmLFAuRUYoWyJsaW5lIixILkVqKGUpLCJvZmZz
-ZXQiLEguRWooZyldLHEscSkpKQpmPW8uYShuZXcgTC5FRShnLGUsYSkpCm4uYShudWxsKQpXLkpFKGgs
-ImNsaWNrIixmLCExLHApCmkuYXBwZW5kQ2hpbGQobC5jcmVhdGVUZXh0Tm9kZSgiOiAiK0guRWooay5i
-KSkpfX1pZihjKUwuVDEobnVsbCl9LApGcihhLGIsYyl7dmFyIHMscixxPVAuaEsoQy5FeC5nRHIodC5G
-LmEod2luZG93LmxvY2F0aW9uKSkrSC5FaihhKSkscD1QLkZsKHQuTix0LmRrKQppZihiIT1udWxsKXAu
-WTUoMCwib2Zmc2V0IixILkVqKGIpKQppZihjIT1udWxsKXAuWTUoMCwibGluZSIsSC5FaihjKSkKcC5Z
-NSgwLCJhdXRoVG9rZW4iLCQuVUUoKSkKcT1xLm5tKDAscCkKcD13aW5kb3cuaGlzdG9yeQpzPXQuegpy
-PXEuZ25EKCkKcC5wdXNoU3RhdGUobmV3IFAuQmYoW10sW10pLlB2KFAuRmwocyxzKSksIiIscil9LApF
-bihhKXt2YXIgcyxyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKci50
-b1N0cmluZwpzPXIrIi8iCmlmKEMueEIubihhLHMpKXJldHVybiBDLnhCLnluKGEscy5sZW5ndGgpCmVs
-c2UgcmV0dXJuIGF9LApPdChhKXtzd2l0Y2goYS5yKXtjYXNlIEMuY3c6YnJlYWsKY2FzZSBDLldEOmEu
-cj1DLlhqCmJyZWFrCmNhc2UgQy5YajphLnI9Qy5XRApicmVhawpjYXNlIEMuZGM6dGhyb3cgSC5iKFAu
-UFYoIkZpbGUgIitILkVqKGEuYykrIiBzaG91bGQgbm90IGhhdmUgaW5kZXRlcm1pbmF0ZSBtaWdyYXRp
-b24gc3RhdHVzIikpCmRlZmF1bHQ6YnJlYWt9fSwKdGEoYSxiKXt2YXIgcyxyPSJjaGVja19ib3giLHE9
-InRpdGxlIixwPSJvcHRlZC1vdXQiLG89Im1pZ3JhdGluZyIKc3dpdGNoKGIpe2Nhc2UgQy5jdzphLmlu
-bmVyVGV4dD1yCnM9Si5ZRShhKQpzLmdQKGEpLmkoMCwiYWxyZWFkeS1taWdyYXRlZCIpCnMuZ1AoYSku
-aSgwLCJkaXNhYmxlZCIpCmEuc2V0QXR0cmlidXRlKHEsIkFscmVhZHkgbWlncmF0ZWQiKQpicmVhawpj
-YXNlIEMuV0Q6YS5pbm5lclRleHQ9cgpzPUouWUUoYSkKcy5nUChhKS5SKDAscCkKcy5nUChhKS5pKDAs
-bykKYS5zZXRBdHRyaWJ1dGUocSwiTWlncmF0aW5nIHRvIG51bGwgc2FmZXR5IikKYnJlYWsKY2FzZSBD
-LlhqOmEuaW5uZXJUZXh0PSJjaGVja19ib3hfb3V0bGluZV9ibGFuayIKcz1KLllFKGEpCnMuZ1AoYSku
-UigwLG8pCnMuZ1AoYSkuaSgwLHApCmEuc2V0QXR0cmlidXRlKHEsIk9wdGluZyBvdXQgb2YgbnVsbCBz
-YWZldHkiKQpicmVhawpkZWZhdWx0OmEuaW5uZXJUZXh0PSJpbmRldGVybWluYXRlX2NoZWNrX2JveCIK
-cz1KLllFKGEpCnMuZ1AoYSkuUigwLG8pCnMuZ1AoYSkuaSgwLHApCmEuc2V0QXR0cmlidXRlKHEsIk1p
-eGVkIHN0YXR1c2VzIG9mICdtaWdyYXRpbmcnIGFuZCAnb3B0aW5nIG91dCciKQpicmVha319LAp4bihh
-LGIpe3ZhciBzLHI9ImRpc2FibGVkIixxPWIuZ0woKQpMLnRhKGEscSkKaWYoYi5jPT09JC5EOSgpLmlu
-bmVyVGV4dCl7aWYoYiBpbnN0YW5jZW9mIEwuY0Qpe3M9Yi54CnMudG9TdHJpbmcKcz0hc31lbHNlIHM9
-ITEKaWYocyl7YS50b1N0cmluZwpKLmRSKGEpLmkoMCxyKX1lbHNle2EudG9TdHJpbmcKSi5kUihhKS5S
-KDAscil9TC50YSgkLmMwKCkscSl9fSwKQlgoYSxiKXt2YXIgcyxyLHEscD17fQpwLmE9YQphPUwuRW4o
-YSkKcC5hPWEKcz0kLkQ5KCkKcy50b1N0cmluZwpKLmRyKHMsYSkKcz1kb2N1bWVudApyPXQuaApILkRo
-KHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBXLnd6KHMucXVlcnlTZWxlY3RvckFsbCgi
-Lm5hdi1wYW5lbCAubmF2LWxpbmsiKSx0LlIpCnMuSyhzLG5ldyBMLlZTKHApKQpzPSQuSVIKcT1zPT1u
-dWxsP251bGw6TC55dyhzLHAuYSkKaWYocT09bnVsbCl7cD0kLmJOKCkKcC50b1N0cmluZwpKLmRSKHAp
-LlIoMCwidmlzaWJsZSIpfWVsc2V7cD0kLmJOKCkKcC50b1N0cmluZwpKLmRSKHApLmkoMCwidmlzaWJs
-ZSIpCkwudGEoJC5jMCgpLHEuZ0woKSl9fSwKQVIoYSxiKXt2YXIgcyxyLHE9Yi5iCmlmKHE9PT0kKXE9
-SC52KG5ldyBILmMoIkZpZWxkICdwYXJlbnQnIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iKSkKcz10
-LmgKcj1zLmEocy5hKGEucGFyZW50Tm9kZSkucGFyZW50Tm9kZSkKTC54bihyLnF1ZXJ5U2VsZWN0b3Io
-IjpzY29wZSA+IC5zdGF0dXMtaWNvbiIpLHEpCkwuQVIocixxKX0sCmJMKGEsYil7dmFyIHMscixxLHAs
-byxuLG0sbD0iOnNjb3BlID4gLnN0YXR1cy1pY29uIgpmb3Iocz1iLmQscj1zLmxlbmd0aCxxPXQuaCxw
-PTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrcCl7bz1zW3BdCmEudG9TdHJp
-bmcKbj1vLmMKbi50b1N0cmluZwptPWEucXVlcnlTZWxlY3RvcignW2RhdGEtbmFtZSo9IicrVy5Maihu
-KSsnIl0nKQppZihvIGluc3RhbmNlb2YgTC52dCl7TC5iTChtLG8pCkwueG4obS5xdWVyeVNlbGVjdG9y
-KGwpLGIpfWVsc2UgTC54bihxLmEobS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKGwpLG8pfX0sCkJF
-KGEsYixjKXt2YXIgcz0iLnJlZ2lvbnMiLHI9ZG9jdW1lbnQscT1yLnF1ZXJ5U2VsZWN0b3IocykKcS50
-b1N0cmluZwpyPXIucXVlcnlTZWxlY3RvcigiLmNvZGUiKQpyLnRvU3RyaW5nCkoudEgocSxiLmEsJC5L
-RygpKQpKLnRIKHIsYi5iLCQuS0coKSkKTC5MSChhLGIuZCxjKQppZihiLmMubGVuZ3RoPDJlNSlMLkdn
-KCkKTC55WCgiLmNvZGUiLCEwKQpMLnlYKHMsITApfSwKdFgoYTAsYTEsYTIpe3ZhciBzLHIscSxwLG8s
-bixtLGwsayxqLGksaCxnLGYsZSxkPSJtYXRlcmlhbC1pY29ucyIsYz0ic3RhdHVzLWljb24iLGI9ZG9j
-dW1lbnQsYT1iLmNyZWF0ZUVsZW1lbnQoInVsIikKYTAuYXBwZW5kQ2hpbGQoYSkKZm9yKHM9YTEubGVu
-Z3RoLHI9dC5OLHE9dC5aLHA9MDtwPGExLmxlbmd0aDthMS5sZW5ndGg9PT1zfHwoMCxILmxrKShhMSks
-KytwKXtvPWExW3BdCm49Yi5jcmVhdGVFbGVtZW50KCJsaSIpCmEuYXBwZW5kQ2hpbGQobikKaWYobyBp
-bnN0YW5jZW9mIEwudnQpe209Si5ZRShuKQptLmdQKG4pLmkoMCwiZGlyIikKbD1vLmMKbC50b1N0cmlu
-ZwpuLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KG4pKS5PVSgibmFtZSIpLGwp
-Cms9Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbi5hcHBlbmRDaGlsZChrKQpsPUouWUUoaykKbC5nUChr
-KS5pKDAsImFycm93IikKbC5zaGYoaywiJiN4MjVCQzsiKQpqPWIuY3JlYXRlRWxlbWVudCgic3BhbiIp
-CkouZFIoaikuaSgwLGQpCmouaW5uZXJUZXh0PSJmb2xkZXJfb3BlbiIKbi5hcHBlbmRDaGlsZChqKQps
-PW8uYQpsLnRvU3RyaW5nCm4uYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZShsKSkKbD1vLmQKbC50
-b1N0cmluZwpMLnRYKG4sbCwhMCkKaT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpsPUouWUUoaSkKbC5n
-UChpKS5pKDAsZCkKaS5pbm5lclRleHQ9ImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94IgpsLmdQKGkpLmko
-MCxjKQpMLnhuKGksbykKbD1sLmdWbChpKQpoPWwuJHRpCmc9aC5DKCJ+KDEpPyIpLmEobmV3IEwuVEQo
-byxuLGkpKQpxLmEobnVsbCkKVy5KRShsLmEsbC5iLGcsITEsaC5jKQptLm1LKG4saSxqKQpMLmt6KGsp
-fWVsc2UgaWYobyBpbnN0YW5jZW9mIEwuY0Qpe2k9Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbT1KLllF
-KGkpCm0uZ1AoaSkuaSgwLGQpCmkuaW5uZXJUZXh0PSIiCm0uZ1AoaSkuaSgwLGMpCmw9by54CmwudG9T
-dHJpbmcKaWYoIWwpbS5nUChpKS5pKDAsImRpc2FibGVkIikKTC54bihpLG8pCmlmKGwpe209bS5nVmwo
-aSkKbD1tLiR0aQpoPWwuQygifigxKT8iKS5hKG5ldyBMLklmKG8saSxuKSkKcS5hKG51bGwpClcuSkUo
-bS5hLG0uYixoLCExLGwuYyl9bi5hcHBlbmRDaGlsZChpKQptPWIuY3JlYXRlRWxlbWVudCgic3BhbiIp
-CkouZFIobSkuaSgwLGQpCm0uaW5uZXJUZXh0PSJpbnNlcnRfZHJpdmVfZmlsZSIKbi5hcHBlbmRDaGls
-ZChtKQpmPWIuY3JlYXRlRWxlbWVudCgiYSIpCm4uYXBwZW5kQ2hpbGQoZikKbT1KLllFKGYpCm0uZ1Ao
-ZikuaSgwLCJuYXYtbGluayIpCmw9by5jCmwudG9TdHJpbmcKZi5zZXRBdHRyaWJ1dGUoImRhdGEtIitu
-ZXcgVy5TeShuZXcgVy5pNyhmKSkuT1UoIm5hbWUiKSxsKQpsPW8uZApsLnRvU3RyaW5nCmYuc2V0QXR0
-cmlidXRlKCJocmVmIixMLlE0KGwsUC5GbChyLHIpKSkKbD1vLmEKbC50b1N0cmluZwpmLmFwcGVuZENo
-aWxkKGIuY3JlYXRlVGV4dE5vZGUobCkpCm09bS5nVmwoZikKbD1tLiR0aQpoPWwuQygifigxKT8iKS5h
-KG5ldyBMLnRCKCkpCnEuYShudWxsKQpXLkpFKG0uYSxtLmIsaCwhMSxsLmMpCmw9by5lCmwudG9TdHJp
-bmcKaWYobD4wKXtlPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQoZSkKSi5kUihl
-KS5pKDAsImVkaXQtY291bnQiKQptPSIiK2wrIiAiCmlmKGw9PT0xKWg9InByb3Bvc2VkIGVkaXQiCmVs
-c2UgaD0icHJvcG9zZWQgZWRpdHMiCmUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsbStoKQplLmFwcGVuZENo
-aWxkKGIuY3JlYXRlVGV4dE5vZGUoQy5qbi53KGwpKSl9fX19LAp1eihhLGIsYyl7dmFyIHM9ZG9jdW1l
-bnQscj1zLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpLHE9dC5RLHA9cS5DKCJ+KDEpPyIpLmEobmV3IEwu
-bTIoYSxjKSkKdC5aLmEobnVsbCkKVy5KRShyLCJjbGljayIscCwhMSxxLmMpCnE9Ui5PWChhLmEpCnEu
-dG9TdHJpbmcKci5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKHEpKQpiLmFwcGVuZENoaWxkKHIp
-fSwKRnooYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGg9YS5hCmlmKGg9PW51bGwpcmV0dXJu
-CmIudG9TdHJpbmcKcz1kb2N1bWVudApyPXMuY3JlYXRlRWxlbWVudCgicCIpCnE9Yi5hcHBlbmRDaGls
-ZChyKQpyPXMuY3JlYXRlRWxlbWVudCgic3BhbiIpCnA9dC5zCkouTXUocixILlFJKFsidHlwZS1kZXNj
-cmlwdGlvbiJdLHApKQpyLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoIkFjdGlvbnMiKSkKcS5h
-cHBlbmRDaGlsZChyKQpxLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoIjoiKSkKbz1zLmNyZWF0
-ZUVsZW1lbnQoInAiKQpiLmFwcGVuZENoaWxkKG8pCmZvcihyPWgubGVuZ3RoLG49dC5PLG09MDttPGgu
-bGVuZ3RoO2gubGVuZ3RoPT09cnx8KDAsSC5saykoaCksKyttKXtsPWhbbV0Kaz1zLmNyZWF0ZUVsZW1l
-bnQoImEiKQpvLmFwcGVuZENoaWxkKGspCmo9bC5hCmoudG9TdHJpbmcKay5hcHBlbmRDaGlsZChzLmNy
-ZWF0ZVRleHROb2RlKGopKQpqPWwuYgpqLnRvU3RyaW5nCmsuc2V0QXR0cmlidXRlKCJocmVmIixqKQpq
-PW4uYShILlFJKFsiYWRkLWhpbnQtbGluayIsImJlZm9yZS1hcHBseSIsImJ1dHRvbiJdLHApKQppPUou
-ZFIoaykKaS5WMSgwKQppLkZWKDAsail9fSwKQ0MoYTQsYTUsYTYpe3ZhciBzLHIscSxwLG8sbixtLGws
-ayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyLGEzCmZvcihzPWE0LmYscj1zLmxlbmd0aCxxPXQu
-cyxwPXQuTyxvPTA7bzxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrbyl7bj1zW29d
-CmE1LnRvU3RyaW5nCm09ZG9jdW1lbnQKbD1tLmNyZWF0ZUVsZW1lbnQoInAiKQprPXAuYShILlFJKFsi
-dHJhY2UiXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCmk9YTUuYXBwZW5kQ2hpbGQobCkK
-bD1tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQprPXAuYShILlFJKFsidHlwZS1kZXNjcmlwdGlvbiJdLHEp
-KQpqPUouZFIobCkKai5WMSgwKQpqLkZWKDAsaykKaz1uLmEKay50b1N0cmluZwpsLmFwcGVuZENoaWxk
-KG0uY3JlYXRlVGV4dE5vZGUoaykpCmkuYXBwZW5kQ2hpbGQobCkKaS5hcHBlbmRDaGlsZChtLmNyZWF0
-ZVRleHROb2RlKCI6IikpCmw9bS5jcmVhdGVFbGVtZW50KCJ1bCIpCms9cC5hKEguUUkoWyJ0cmFjZSJd
-LHEpKQpqPUouZFIobCkKai5WMSgwKQpqLkZWKDAsaykKaD1pLmFwcGVuZENoaWxkKGwpCmZvcihsPW4u
-YixrPWwubGVuZ3RoLGc9MDtnPGwubGVuZ3RoO2wubGVuZ3RoPT09a3x8KDAsSC5saykobCksKytnKXtm
-PWxbZ10KZT1tLmNyZWF0ZUVsZW1lbnQoImxpIikKaC5hcHBlbmRDaGlsZChlKQpkPW0uY3JlYXRlRWxl
-bWVudCgic3BhbiIpCmM9cC5hKEguUUkoWyJmdW5jdGlvbiJdLHEpKQpqPUouZFIoZCkKai5WMSgwKQpq
-LkZWKDAsYykKYz1mLmIKTC5XaihkLGM9PW51bGw/InVua25vd24iOmMpCmUuYXBwZW5kQ2hpbGQoZCkK
-Yj1mLmMKaWYoYiE9bnVsbCl7ZS5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKCIgKCIpKQphPWIu
-YgphMD1tLmNyZWF0ZUVsZW1lbnQoImEiKQphMC5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKEgu
-RWooYi5jKSsiOiIrSC5FaihhKSkpCmQ9Yi5hCmQudG9TdHJpbmcKYTAuc2V0QXR0cmlidXRlKCJocmVm
-IixkKQphMC5jbGFzc0xpc3QuYWRkKCJuYXYtbGluayIpCmUuYXBwZW5kQ2hpbGQoYTApCmUuYXBwZW5k
-Q2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiKSIpKX1lLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUo
-IjogIikpCmQ9Zi5hCkwuV2ooZSxkPT1udWxsPyJ1bmtub3duIjpkKQpkPWYuZAppZihkLmxlbmd0aCE9
-PTApe2M9bS5jcmVhdGVFbGVtZW50KCJwIikKYTE9cC5hKEguUUkoWyJkcmF3ZXIiLCJiZWZvcmUtYXBw
-bHkiXSxxKSkKaj1KLmRSKGMpCmouVjEoMCkKai5GVigwLGExKQphMj1lLmFwcGVuZENoaWxkKGMpCmZv
-cihjPWQubGVuZ3RoLGEzPTA7YTM8ZC5sZW5ndGg7ZC5sZW5ndGg9PT1jfHwoMCxILmxrKShkKSwrK2Ez
-KUwudXooZFthM10sYTIsYil9fX19LApVcyhhKXtyZXR1cm4gQy54Qi50ZyhhLCI/Iik/Qy54Qi5Oaihh
-LDAsQy54Qi5PWShhLCI/IikpOmF9LApURyhhLGIpe3JldHVybiBuZXcgTC5RVyhhLGIpfSwKeXcoYSxi
-KXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MDtyPGEubGVuZ3RoO2EubGVuZ3RoPT09c3x8
-KDAsSC5saykoYSksKytyKXtxPWFbcl0KaWYocSBpbnN0YW5jZW9mIEwudnQpe3A9cS5kCnAudG9TdHJp
-bmcKbz1MLnl3KHAsYikKaWYobyE9bnVsbClyZXR1cm4gb31lbHNlIGlmKHEuYz09PWIpcmV0dXJuIHF9
-cmV0dXJuIG51bGx9LApXaihhLGIpe3ZhciBzLHIscSxwPUguUUkoYi5zcGxpdCgiLiIpLHQucyksbz1D
-Lk5tLmd0SChwKSxuPWRvY3VtZW50CmEuYXBwZW5kQ2hpbGQobi5jcmVhdGVUZXh0Tm9kZShvKSkKZm9y
-KG89SC5xQyhwLDEsbnVsbCx0Lk4pLHM9by4kdGksbz1uZXcgSC5hNyhvLG8uZ0Eobykscy5DKCJhNzxh
-TC5FPiIpKSxzPXMuQygiYUwuRSIpLHI9Si5ZRShhKTtvLkYoKTspe3E9cy5hKG8uZCkKci5ueihhLCJi
-ZWZvcmVlbmQiLCImIzgyMDM7LiIsbnVsbCxudWxsKQphLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5v
-ZGUocSkpfX0sCmU6ZnVuY3Rpb24gZSgpe30sClZXOmZ1bmN0aW9uIFZXKGEsYixjKXt0aGlzLmE9YQp0
-aGlzLmI9Ygp0aGlzLmM9Y30sCm9aOmZ1bmN0aW9uIG9aKCl7fSwKanI6ZnVuY3Rpb24ganIoKXt9LApx
-bDpmdW5jdGlvbiBxbCgpe30sCnk4OmZ1bmN0aW9uIHk4KCl7fSwKSGk6ZnVuY3Rpb24gSGkoKXt9LApC
-VDpmdW5jdGlvbiBCVCgpe30sClBZOmZ1bmN0aW9uIFBZKCl7fSwKTDpmdW5jdGlvbiBMKCl7fSwKV3g6
-ZnVuY3Rpb24gV3goYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkhvOmZ1bmN0aW9uIEhvKGEpe3RoaXMu
-YT1hfSwKZE46ZnVuY3Rpb24gZE4oYSl7dGhpcy5hPWF9LApJQzpmdW5jdGlvbiBJQyhhKXt0aGlzLmE9
-YX0sCnh6OmZ1bmN0aW9uIHh6KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApCTjpmdW5jdGlvbiBCTigp
-e30sCmZDOmZ1bmN0aW9uIGZDKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApUbTpmdW5jdGlvbiBUbSgp
-e30sCm5UOmZ1bmN0aW9uIG5UKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCk5ZOmZ1
-bmN0aW9uIE5ZKGEpe3RoaXMuYT1hfSwKdWU6ZnVuY3Rpb24gdWUoKXt9LApHSDpmdW5jdGlvbiBHSCgp
-e30sCkVFOmZ1bmN0aW9uIEVFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClFMOmZ1
-bmN0aW9uIFFMKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApWUzpmdW5jdGlvbiBWUyhhKXt0aGlzLmE9
-YX0sClREOmZ1bmN0aW9uIFREKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCklmOmZ1
-bmN0aW9uIElmKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnRCOmZ1bmN0aW9uIHRC
-KCl7fSwKbTI6ZnVuY3Rpb24gbTIoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClFXOmZ1bmN0aW9uIFFX
-KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApYQTpmdW5jdGlvbiBYQSgpe30sClpzKGEpe3ZhciBzLHIs
-cT1KLlU2KGEpCmlmKEwucDIoSC5rKHEucShhLCJ0eXBlIikpKT09PUMuWTIpe3M9SC5rKHEucShhLCJu
-YW1lIikpCnI9SC5rKHEucShhLCJwYXRoIikpCnE9cS5xKGEsInN1YnRyZWUiKQpxPW5ldyBMLnZ0KHE9
-PW51bGw/bnVsbDpMLm1LKHQuVy5hKHEpKSxzLHIpCnEuTFYoKQpyZXR1cm4gcX1lbHNle3M9SC5rKHEu
-cShhLCJuYW1lIikpCnI9SC5rKHEucShhLCJwYXRoIikpCnJldHVybiBuZXcgTC5jRChILmsocS5xKGEs
-ImhyZWYiKSksSC5VYyhxLnEoYSwiZWRpdENvdW50IikpLEguTTQocS5xKGEsIndhc0V4cGxpY2l0bHlP
-cHRlZE91dCIpKSxMLnZCKEguVWMocS5xKGEsIm1pZ3JhdGlvblN0YXR1cyIpKSksSC5NNChxLnEoYSwi
-bWlncmF0aW9uU3RhdHVzQ2FuQmVDaGFuZ2VkIikpLHMscil9fSwKbUsoYSl7dmFyIHMscj1ILlFJKFtd
-LHQuZmgpCmZvcihzPUouSVQoYSk7cy5GKCk7KXIucHVzaChMLlpzKHMuZ2woKSkpCnJldHVybiByfSwK
-VkQoYSl7dmFyIHMscixxPUguUUkoW10sdC5kKQpmb3Iocz1hLmxlbmd0aCxyPTA7cjxhLmxlbmd0aDth
-Lmxlbmd0aD09PXN8fCgwLEgubGspKGEpLCsrcilxLnB1c2goYVtyXS5MdCgpKQpyZXR1cm4gcX0sCnZC
-KGEpe2lmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYT4+PjAhPT1hfHxhPj00KXJldHVybiBILk9IKEMu
-bDAsYSkKcmV0dXJuIEMubDBbYV19LApwMihhKXtzd2l0Y2goYSl7Y2FzZSJkaXJlY3RvcnkiOnJldHVy
-biBDLlkyCmNhc2UiZmlsZSI6cmV0dXJuIEMucmYKZGVmYXVsdDp0aHJvdyBILmIoUC5QVigiVW5yZWNv
-Z25pemVkIG5hdmlnYXRpb24gdHJlZSBub2RlIHR5cGU6ICIrSC5FaihhKSkpfX0sCnZ0OmZ1bmN0aW9u
-IHZ0KGEsYixjKXt2YXIgXz10aGlzCl8uZD1hCl8uYT1iCl8uYj0kCl8uYz1jfSwKY0Q6ZnVuY3Rpb24g
-Y0QoYSxiLGMsZCxlLGYsZyl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9YgpfLmY9YwpfLnI9ZApfLng9ZQpf
-LmE9ZgpfLmI9JApfLmM9Z30sCkQ4OmZ1bmN0aW9uIEQ4KCl7fSwKTzk6ZnVuY3Rpb24gTzkoYSl7dGhp
-cy5iPWF9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSVY6ZnVuY3Rpb24g
-SVYoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9YgpfLmY9YwpfLnI9ZH19LE09ewpZRihhLGIp
-e3ZhciBzLHIscSxwLG8sbixtLGwKZm9yKHM9Yi5sZW5ndGgscj0xO3I8czsrK3Ipe2lmKGJbcl09PW51
-bGx8fGJbci0xXSE9bnVsbCljb250aW51ZQpmb3IoO3M+PTE7cz1xKXtxPXMtMQppZihiW3FdIT1udWxs
-KWJyZWFrfXA9bmV3IFAuTSgiIikKbz0iIisoYSsiKCIpCnAuYT1vCm49SC50NihiKQptPW4uQygibkg8
-MT4iKQpsPW5ldyBILm5IKGIsMCxzLG0pCmwuSGQoYiwwLHMsbi5jKQptPW8rbmV3IEgubEoobCxtLkMo
-InFVKGFMLkUpIikuYShuZXcgTS5ObygpKSxtLkMoImxKPGFMLkUscVU+IikpLmsoMCwiLCAiKQpwLmE9
-bQpwLmE9bSsoIik6IHBhcnQgIisoci0xKSsiIHdhcyBudWxsLCBidXQgcGFydCAiK3IrIiB3YXMgbm90
-LiIpCnRocm93IEguYihQLnhZKHAudygwKSxudWxsKSl9fSwKbEk6ZnVuY3Rpb24gbEkoYSl7dGhpcy5h
-PWF9LApxNzpmdW5jdGlvbiBxNygpe30sCk5vOmZ1bmN0aW9uIE5vKCl7fX0sTz17ClJoKCl7dmFyIHMs
-cj1udWxsCmlmKFAudW8oKS5nRmkoKSE9PSJmaWxlIilyZXR1cm4gJC5FYigpCnM9UC51bygpCmlmKCFD
-LnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJuICQuRWIoKQppZihQLktMKHIsImEvYiIscixyLHIscixy
-KS50NCgpPT09ImFcXGIiKXJldHVybiAkLktrKCkKcmV0dXJuICQuYkQoKX0sCnpMOmZ1bmN0aW9uIHpM
-KCl7fX0sUD17Ck9qKCl7dmFyIHMscixxPXt9CmlmKHNlbGYuc2NoZWR1bGVJbW1lZGlhdGUhPW51bGwp
-cmV0dXJuIFAuRVgoKQppZihzZWxmLk11dGF0aW9uT2JzZXJ2ZXIhPW51bGwmJnNlbGYuZG9jdW1lbnQh
-PW51bGwpe3M9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKQpyPXNlbGYuZG9jdW1lbnQu
-Y3JlYXRlRWxlbWVudCgic3BhbiIpCnEuYT1udWxsCm5ldyBzZWxmLk11dGF0aW9uT2JzZXJ2ZXIoSC50
-UihuZXcgUC50aChxKSwxKSkub2JzZXJ2ZShzLHtjaGlsZExpc3Q6dHJ1ZX0pCnJldHVybiBuZXcgUC5o
-YShxLHMscil9ZWxzZSBpZihzZWxmLnNldEltbWVkaWF0ZSE9bnVsbClyZXR1cm4gUC55dCgpCnJldHVy
-biBQLnFXKCl9LApaVihhKXtzZWxmLnNjaGVkdWxlSW1tZWRpYXRlKEgudFIobmV3IFAuVnModC5NLmEo
-YSkpLDApKX0sCm9BKGEpe3NlbGYuc2V0SW1tZWRpYXRlKEgudFIobmV3IFAuRnQodC5NLmEoYSkpLDAp
-KX0sCkJ6KGEpe3QuTS5hKGEpClAuUU4oMCxhKX0sClFOKGEsYil7dmFyIHM9bmV3IFAuVzMoKQpzLkNZ
-KGEsYikKcmV0dXJuIHN9LApGWChhKXtyZXR1cm4gbmV3IFAuaWgobmV3IFAudnMoJC5YMyxhLkMoInZz
-PDA+IikpLGEuQygiaWg8MD4iKSl9LApESShhLGIpe2EuJDIoMCxudWxsKQpiLmI9ITAKcmV0dXJuIGIu
-YX0sCmpRKGEsYil7UC5KZShhLGIpfSwKeUMoYSxiKXtiLmFNKDAsYSl9LApmMyhhLGIpe2IudzAoSC5S
-dShhKSxILnRzKGEpKX0sCkplKGEsYil7dmFyIHMscixxPW5ldyBQLldNKGIpLHA9bmV3IFAuU1goYikK
-aWYoYSBpbnN0YW5jZW9mIFAudnMpYS5RZChxLHAsdC56KQplbHNle3M9dC56CmlmKHQuaS5iKGEpKWEu
-U3EocSxwLHMpCmVsc2V7cj1uZXcgUC52cygkLlgzLHQuYykKci5hPTgKci5jPWEKci5RZChxLHAscyl9
-fX0sCmx6KGEpe3ZhciBzPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7d2hpbGUodHJ1
-ZSl0cnl7YihkLGUpCmJyZWFrfWNhdGNoKHIpe2U9cgpkPWN9fX0oYSwxKQpyZXR1cm4gJC5YMy5Maihu
-ZXcgUC5HcyhzKSx0LkgsdC5TLHQueil9LApHUShhKXtyZXR1cm4gbmV3IFAuRnkoYSwxKX0sClRoKCl7
-cmV0dXJuIEMud1F9LApZbShhKXtyZXR1cm4gbmV3IFAuRnkoYSwzKX0sCmwwKGEsYil7cmV0dXJuIG5l
-dyBQLnE0KGEsYi5DKCJxNDwwPiIpKX0sClRsKGEsYil7dmFyIHM9SC5jYihhLCJlcnJvciIsdC5LKQpy
-ZXR1cm4gbmV3IFAuQ3cocyxiPT1udWxsP1AudjAoYSk6Yil9LAp2MChhKXt2YXIgcwppZih0LnIuYihh
-KSl7cz1hLmdJSSgpCmlmKHMhPW51bGwpcmV0dXJuIHN9cmV0dXJuIEMucGR9LApBOShhLGIpe3ZhciBz
-LHIscQpmb3Iocz10LmM7cj1hLmEsKHImNCkhPT0wOylhPXMuYShhLmMpCmlmKChyJjI0KSE9PTApe3E9
-Yi5haCgpCmIudWcoYSkKUC5IWihiLHEpfWVsc2V7cT10LmUuYShiLmMpCmIuYT1iLmEmMXw0CmIuYz1h
-CmEualEocSl9fSwKSFooYSxhMCl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz17
-fSxiPWMuYT1hCmZvcihzPXQubixyPXQuZSxxPXQuaTshMDspe3A9e30Kbz1iLmEKbj0obyYxNik9PT0w
-Cm09IW4KaWYoYTA9PW51bGwpe2lmKG0mJihvJjEpPT09MCl7bD1zLmEoYi5jKQpQLlNpKGwuYSxsLmIp
-fXJldHVybn1wLmE9YTAKaz1hMC5hCmZvcihiPWEwO2shPW51bGw7Yj1rLGs9ail7Yi5hPW51bGwKUC5I
-WihjLmEsYikKcC5hPWsKaj1rLmF9bz1jLmEKaT1vLmMKcC5iPW0KcC5jPWkKaWYobil7aD1iLmMKaD0o
-aCYxKSE9PTB8fChoJjE1KT09PTh9ZWxzZSBoPSEwCmlmKGgpe2c9Yi5iLmIKaWYobSl7bz1vLmI9PT1n
-Cm89IShvfHxvKX1lbHNlIG89ITEKaWYobyl7cy5hKGkpClAuU2koaS5hLGkuYikKcmV0dXJufWY9JC5Y
-MwppZihmIT09ZykkLlgzPWcKZWxzZSBmPW51bGwKYj1iLmMKaWYoKGImMTUpPT09OCluZXcgUC5SVChw
-LGMsbSkuJDAoKQplbHNlIGlmKG4pe2lmKChiJjEpIT09MCluZXcgUC5ycShwLGkpLiQwKCl9ZWxzZSBp
-ZigoYiYyKSE9PTApbmV3IFAuUlcoYyxwKS4kMCgpCmlmKGYhPW51bGwpJC5YMz1mCmI9cC5jCmlmKHEu
-YihiKSl7bz1wLmEuJHRpCm89by5DKCJiODwyPiIpLmIoYil8fCFvLlFbMV0uYihiKX1lbHNlIG89ITEK
-aWYobyl7cS5hKGIpCmU9cC5hLmIKaWYoKGIuYSYyNCkhPT0wKXtkPXIuYShlLmMpCmUuYz1udWxsCmEw
-PWUuTjgoZCkKZS5hPWIuYSYzMHxlLmEmMQplLmM9Yi5jCmMuYT1iCmNvbnRpbnVlfWVsc2UgUC5BOShi
-LGUpCnJldHVybn19ZT1wLmEuYgpkPXIuYShlLmMpCmUuYz1udWxsCmEwPWUuTjgoZCkKYj1wLmIKbz1w
-LmMKaWYoIWIpe2UuJHRpLmMuYShvKQplLmE9OAplLmM9b31lbHNle3MuYShvKQplLmE9ZS5hJjF8MTYK
-ZS5jPW99Yy5hPWUKYj1lfX0sClZIKGEsYil7dmFyIHMKaWYodC5rLmIoYSkpcmV0dXJuIGIuTGooYSx0
-LnosdC5LLHQubCkKcz10LnYKaWYocy5iKGEpKXJldHVybiBzLmEoYSkKdGhyb3cgSC5iKFAuTDMoYSwi
-b25FcnJvciIsdS5jKSl9LApwdSgpe3ZhciBzLHIKZm9yKHM9JC5TNjtzIT1udWxsO3M9JC5TNil7JC5t
-Zz1udWxsCnI9cy5iCiQuUzY9cgppZihyPT1udWxsKSQuazg9bnVsbApzLmEuJDAoKX19LAplTigpeyQu
-VUQ9ITAKdHJ5e1AucHUoKX1maW5hbGx5eyQubWc9bnVsbAokLlVEPSExCmlmKCQuUzYhPW51bGwpJC51
-dCgpLiQxKFAuVUkoKSl9fSwKZVcoYSl7dmFyIHM9bmV3IFAuT00oYSkscj0kLms4CmlmKHI9PW51bGwp
-eyQuUzY9JC5rOD1zCmlmKCEkLlVEKSQudXQoKS4kMShQLlVJKCkpfWVsc2UgJC5rOD1yLmI9c30sCnJS
-KGEpe3ZhciBzLHIscSxwPSQuUzYKaWYocD09bnVsbCl7UC5lVyhhKQokLm1nPSQuazgKcmV0dXJufXM9
-bmV3IFAuT00oYSkKcj0kLm1nCmlmKHI9PW51bGwpe3MuYj1wCiQuUzY9JC5tZz1zfWVsc2V7cT1yLmIK
-cy5iPXEKJC5tZz1yLmI9cwppZihxPT1udWxsKSQuazg9c319LApyYihhKXt2YXIgcz1udWxsLHI9JC5Y
-MwppZihDLk5VPT09cil7UC5UayhzLHMsQy5OVSxhKQpyZXR1cm59UC5UayhzLHMscix0Lk0uYShyLkdZ
-KGEpKSl9LApRdyhhLGIpe0guY2IoYSwic3RyZWFtIix0LkspCnJldHVybiBuZXcgUC54SShiLkMoInhJ
-PDA+IikpfSwKU2koYSxiKXtQLnJSKG5ldyBQLkV2KGEsYikpfSwKVDgoYSxiLGMsZCxlKXt2YXIgcyxy
-PSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDAoKQokLlgzPWMKcz1yCnRyeXtyPWQuJDAoKQpyZXR1cm4g
-cn1maW5hbGx5eyQuWDM9c319LAp5dihhLGIsYyxkLGUsZixnKXt2YXIgcyxyPSQuWDMKaWYocj09PWMp
-cmV0dXJuIGQuJDEoZSkKJC5YMz1jCnM9cgp0cnl7cj1kLiQxKGUpCnJldHVybiByfWZpbmFsbHl7JC5Y
-Mz1zfX0sClF4KGEsYixjLGQsZSxmLGcsaCxpKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQu
-JDIoZSxmKQokLlgzPWMKcz1yCnRyeXtyPWQuJDIoZSxmKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319
-LApUayhhLGIsYyxkKXt0Lk0uYShkKQppZihDLk5VIT09YylkPWMuR1koZCkKUC5lVyhkKX0sCnRoOmZ1
-bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwKaGE6ZnVuY3Rpb24gaGEoYSxiLGMpe3RoaXMuYT1hCnRoaXMu
-Yj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rpb24gVnMoYSl7dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBGdChh
-KXt0aGlzLmE9YX0sClczOmZ1bmN0aW9uIFczKCl7fSwKeUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9uIGloKGEsYil7dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMuJHRp
-PWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0aGlzLmE9YX0sClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMuYT1h
-fSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhpcy5hPWF9LApGeTpmdW5jdGlvbiBGeShhLGIpe3RoaXMuYT1h
-CnRoaXMuYj1ifSwKR1Y6ZnVuY3Rpb24gR1YoYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uZD1fLmM9Xy5i
-PW51bGwKXy4kdGk9Yn0sCnE0OmZ1bmN0aW9uIHE0KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkN3
-OmZ1bmN0aW9uIEN3KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApQZjpmdW5jdGlvbiBQZigpe30sClpm
-OmZ1bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixj
-LGQsZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwK
-dnM6ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlzCl8uYT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9
-LApkYTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxi
-KXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0aW9uIHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rp
-b24gVTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlvbiB2cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIK
-dGhpcy5jPWN9LApydDpmdW5jdGlvbiBydChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rp
-b24gS0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClpMOmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9
-YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0aW9uIFJUKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
-Ygp0aGlzLmM9Y30sCmpaOmZ1bmN0aW9uIGpaKGEpe3RoaXMuYT1hfSwKcnE6ZnVuY3Rpb24gcnEoYSxi
-KXt0aGlzLmE9YQp0aGlzLmI9Yn0sClJXOmZ1bmN0aW9uIFJXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
-LApPTTpmdW5jdGlvbiBPTShhKXt0aGlzLmE9YQp0aGlzLmI9bnVsbH0sCnFoOmZ1bmN0aW9uIHFoKCl7
-fSwKQjU6ZnVuY3Rpb24gQjUoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnVPOmZ1bmN0aW9uIHVPKGEs
-Yil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNTzpmdW5jdGlvbiBNTygpe30sCmtUOmZ1bmN0aW9uIGtUKCl7
-fSwKeEk6ZnVuY3Rpb24geEkoYSl7dGhpcy4kdGk9YX0sCm0wOmZ1bmN0aW9uIG0wKCl7fSwKRXY6ZnVu
-Y3Rpb24gRXYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkppOmZ1bmN0aW9uIEppKCl7fSwKVnA6ZnVu
-Y3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlz
-LmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkVGKGEsYixjKXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYyku
-QygiRm88MSwyPiIpLmEoSC5CNyhhLG5ldyBILk41KGIuQygiQDwwPiIpLktxKGMpLkMoIk41PDEsMj4i
-KSkpKX0sCkZsKGEsYil7cmV0dXJuIG5ldyBILk41KGEuQygiQDwwPiIpLktxKGIpLkMoIk41PDEsMj4i
-KSl9LApMcyhhKXtyZXR1cm4gbmV3IFAuYjYoYS5DKCJiNjwwPiIpKX0sClQyKCl7dmFyIHM9T2JqZWN0
-LmNyZWF0ZShudWxsKQpzWyI8bm9uLWlkZW50aWZpZXIta2V5PiJdPXMKZGVsZXRlIHNbIjxub24taWRl
-bnRpZmllci1rZXk+Il0KcmV0dXJuIHN9LApyaihhLGIsYyl7dmFyIHM9bmV3IFAubG0oYSxiLGMuQygi
-bG08MD4iKSkKcy5jPWEuZQpyZXR1cm4gc30sCkVQKGEsYixjKXt2YXIgcyxyCmlmKFAuaEIoYSkpe2lm
-KGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpyZXR1cm4gYisiLi4uIitjfXM9SC5RSShbXSx0
-LnMpCkMuTm0uaSgkLnhnLGEpCnRyeXtQLlZyKGEscyl9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aCly
-ZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXI9UC5sKGIsdC5hLmEocyksIiwgIikrYwpyZXR1
-cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCngoYSxiLGMpe3ZhciBzLHIKaWYoUC5oQihhKSlyZXR1
-cm4gYisiLi4uIitjCnM9bmV3IFAuTShiKQpDLk5tLmkoJC54ZyxhKQp0cnl7cj1zCnIuYT1QLmwoci5h
-LGEsIiwgIil9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhn
-LnBvcCgpfXMuYSs9YwpyPXMuYQpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCmhCKGEpe3Zh
-ciBzLHIKZm9yKHM9JC54Zy5sZW5ndGgscj0wO3I8czsrK3IpaWYoYT09PSQueGdbcl0pcmV0dXJuITAK
-cmV0dXJuITF9LApWcihhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9YS5nbShhKSxrPTAsaj0wCndoaWxl
-KCEwKXtpZighKGs8ODB8fGo8MykpYnJlYWsKaWYoIWwuRigpKXJldHVybgpzPUguRWoobC5nbCgpKQpD
-Lk5tLmkoYixzKQprKz1zLmxlbmd0aCsyOysran1pZighbC5GKCkpe2lmKGo8PTUpcmV0dXJuCmlmKDA+
-PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCnI9Yi5wb3AoKQppZigwPj1iLmxlbmd0aClyZXR1cm4g
-SC5PSChiLC0xKQpxPWIucG9wKCl9ZWxzZXtwPWwuZ2woKTsrK2oKaWYoIWwuRigpKXtpZihqPD00KXtD
-Lk5tLmkoYixILkVqKHApKQpyZXR1cm59cj1ILkVqKHApCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9I
-KGIsLTEpCnE9Yi5wb3AoKQprKz1yLmxlbmd0aCsyfWVsc2V7bz1sLmdsKCk7KytqCmZvcig7bC5GKCk7
-cD1vLG89bil7bj1sLmdsKCk7KytqCmlmKGo+MTAwKXt3aGlsZSghMCl7aWYoIShrPjc1JiZqPjMpKWJy
-ZWFrCmlmKDA+PWIubGVuZ3RoKXJldHVybiBILk9IKGIsLTEpCmstPWIucG9wKCkubGVuZ3RoKzI7LS1q
-fUMuTm0uaShiLCIuLi4iKQpyZXR1cm59fXE9SC5FaihwKQpyPUguRWoobykKays9ci5sZW5ndGgrcS5s
-ZW5ndGgrNH19aWYoaj5iLmxlbmd0aCsyKXtrKz01Cm09Ii4uLiJ9ZWxzZSBtPW51bGwKd2hpbGUoITAp
-e2lmKCEoaz44MCYmYi5sZW5ndGg+MykpYnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwt
-MSkKay09Yi5wb3AoKS5sZW5ndGgrMgppZihtPT1udWxsKXtrKz01Cm09Ii4uLiJ9fWlmKG0hPW51bGwp
-Qy5ObS5pKGIsbSkKQy5ObS5pKGIscSkKQy5ObS5pKGIscil9LAp0TShhLGIpe3ZhciBzLHIscT1QLkxz
-KGIpCmZvcihzPWEubGVuZ3RoLHI9MDtyPGEubGVuZ3RoO2EubGVuZ3RoPT09c3x8KDAsSC5saykoYSks
-KytyKXEuaSgwLGIuYShhW3JdKSkKcmV0dXJuIHF9LApuTyhhKXt2YXIgcyxyPXt9CmlmKFAuaEIoYSkp
-cmV0dXJuInsuLi59IgpzPW5ldyBQLk0oIiIpCnRyeXtDLk5tLmkoJC54ZyxhKQpzLmErPSJ7IgpyLmE9
-ITAKYS5LKDAsbmV3IFAucmEocixzKSkKcy5hKz0ifSJ9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aCly
-ZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXI9cy5hCnJldHVybiByLmNoYXJDb2RlQXQoMCk9
-PTA/cjpyfSwKYjY6ZnVuY3Rpb24gYjYoYSl7dmFyIF89dGhpcwpfLmE9MApfLmY9Xy5lPV8uZD1fLmM9
-Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCmJuOmZ1bmN0aW9uIGJuKGEpe3RoaXMuYT1hCnRoaXMuYz10
-aGlzLmI9bnVsbH0sCmxtOmZ1bmN0aW9uIGxtKGEsYixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8u
-ZD1fLmM9bnVsbApfLiR0aT1jfSwKbVc6ZnVuY3Rpb24gbVcoKXt9LAp1eTpmdW5jdGlvbiB1eSgpe30s
-CmxEOmZ1bmN0aW9uIGxEKCl7fSwKaWw6ZnVuY3Rpb24gaWwoKXt9LApyYTpmdW5jdGlvbiByYShhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1ifSwKWWs6ZnVuY3Rpb24gWWsoKXt9LAp5UTpmdW5jdGlvbiB5UShhKXt0
-aGlzLmE9YX0sCktQOmZ1bmN0aW9uIEtQKCl7fSwKUG46ZnVuY3Rpb24gUG4oKXt9LApHajpmdW5jdGlv
-biBHaihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApsZjpmdW5jdGlvbiBsZigpe30sClZqOmZ1bmN0
-aW9uIFZqKCl7fSwKWHY6ZnVuY3Rpb24gWHYoKXt9LApuWTpmdW5jdGlvbiBuWSgpe30sCldZOmZ1bmN0
-aW9uIFdZKCl7fSwKUlU6ZnVuY3Rpb24gUlUoKXt9LApwUjpmdW5jdGlvbiBwUigpe30sCkJTKGEsYil7
-dmFyIHMscixxLHA9bnVsbAp0cnl7cD1KU09OLnBhcnNlKGEpfWNhdGNoKHIpe3M9SC5SdShyKQpxPVAu
-cnIoU3RyaW5nKHMpLG51bGwsbnVsbCkKdGhyb3cgSC5iKHEpfXE9UC5RZShwKQpyZXR1cm4gcX0sClFl
-KGEpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVy
-biBhCmlmKE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSE9PUFycmF5LnByb3RvdHlwZSlyZXR1cm4gbmV3
-IFAudXcoYSxPYmplY3QuY3JlYXRlKG51bGwpKQpmb3Iocz0wO3M8YS5sZW5ndGg7KytzKWFbc109UC5R
-ZShhW3NdKQpyZXR1cm4gYX0sCmt5KGEsYixjLGQpe3ZhciBzLHIKaWYoYiBpbnN0YW5jZW9mIFVpbnQ4
-QXJyYXkpe3M9YgpkPXMubGVuZ3RoCmlmKGQtYzwxNSlyZXR1cm4gbnVsbApyPVAuUlAoYSxzLGMsZCkK
-aWYociE9bnVsbCYmYSlpZihyLmluZGV4T2YoIlx1ZmZmZCIpPj0wKXJldHVybiBudWxsCnJldHVybiBy
-fXJldHVybiBudWxsfSwKUlAoYSxiLGMsZCl7dmFyIHM9YT8kLkhHKCk6JC5yZigpCmlmKHM9PW51bGwp
-cmV0dXJuIG51bGwKaWYoMD09PWMmJmQ9PT1iLmxlbmd0aClyZXR1cm4gUC5SYihzLGIpCnJldHVybiBQ
-LlJiKHMsYi5zdWJhcnJheShjLFAuakIoYyxkLGIubGVuZ3RoKSkpfSwKUmIoYSxiKXt2YXIgcyxyCnRy
-eXtzPWEuZGVjb2RlKGIpCnJldHVybiBzfWNhdGNoKHIpe0guUnUocil9cmV0dXJuIG51bGx9LAp4TShh
-LGIsYyxkLGUsZil7aWYoQy5qbi56WShmLDQpIT09MCl0aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNl
-NjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIsIGlzICIrZixh
-LGMpKQppZihkK2UhPT1mKXRocm93IEguYihQLnJyKCJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCAnPScg
-bm90IGF0IHRoZSBlbmQiLGEsYikpCmlmKGU+Mil0aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQg
-cGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFjdGVycyIsYSxiKSl9LApHeShhLGIsYyl7cmV0
-dXJuIG5ldyBQLlVkKGEsYil9LApOQyhhKXtyZXR1cm4gYS5MdCgpfSwKVWcoYSxiKXtyZXR1cm4gbmV3
-IFAudHUoYSxbXSxQLkN5KCkpfSwKdVgoYSxiLGMpe3ZhciBzLHI9bmV3IFAuTSgiIikscT1QLlVnKHIs
-YikKcS5pVShhKQpzPXIuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmo0KGEpe3N3aXRj
-aChhKXtjYXNlIDY1OnJldHVybiJNaXNzaW5nIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY3OnJldHVybiJV
-bmV4cGVjdGVkIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY5OnJldHVybiJJbnZhbGlkIFVURi04IGJ5dGUi
-CmNhc2UgNzE6cmV0dXJuIk92ZXJsb25nIGVuY29kaW5nIgpjYXNlIDczOnJldHVybiJPdXQgb2YgdW5p
-Y29kZSByYW5nZSIKY2FzZSA3NTpyZXR1cm4iRW5jb2RlZCBzdXJyb2dhdGUiCmNhc2UgNzc6cmV0dXJu
-IlVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2UiCmRlZmF1bHQ6cmV0dXJuIiJ9fSwKankoYSxi
-LGMpe3ZhciBzLHIscSxwPWMtYixvPW5ldyBVaW50OEFycmF5KHApCmZvcihzPUouVTYoYSkscj0wO3I8
-cDsrK3Ipe3E9cy5xKGEsYityKQppZigocSY0Mjk0OTY3MDQwKT4+PjAhPT0wKXE9MjU1CmlmKHI+PXAp
-cmV0dXJuIEguT0gobyxyKQpvW3JdPXF9cmV0dXJuIG99LAp1dzpmdW5jdGlvbiB1dyhhLGIpe3RoaXMu
-YT1hCnRoaXMuYj1iCnRoaXMuYz1udWxsfSwKaTg6ZnVuY3Rpb24gaTgoYSl7dGhpcy5hPWF9LAp4cjpm
-dW5jdGlvbiB4cigpe30sCk56OmZ1bmN0aW9uIE56KCl7fSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9LApVODpm
-dW5jdGlvbiBVOCgpe30sClVrOmZ1bmN0aW9uIFVrKCl7fSwKd0k6ZnVuY3Rpb24gd0koKXt9LApaaTpm
-dW5jdGlvbiBaaSgpe30sClVkOmZ1bmN0aW9uIFVkKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApLODpm
-dW5jdGlvbiBLOChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYnk6ZnVuY3Rpb24gYnkoKXt9LApvajpm
-dW5jdGlvbiBvaihhKXt0aGlzLmI9YX0sCk14OmZ1bmN0aW9uIE14KGEpe3RoaXMuYT1hfSwKU2g6ZnVu
-Y3Rpb24gU2goKXt9LAp0aTpmdW5jdGlvbiB0aShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKdHU6ZnVu
-Y3Rpb24gdHUoYSxiLGMpe3RoaXMuYz1hCnRoaXMuYT1iCnRoaXMuYj1jfSwKdTU6ZnVuY3Rpb24gdTUo
-KXt9LApFMzpmdW5jdGlvbiBFMygpe30sClJ3OmZ1bmN0aW9uIFJ3KGEpe3RoaXMuYj0wCnRoaXMuYz1h
-fSwKR1k6ZnVuY3Rpb24gR1koYSl7dGhpcy5hPWF9LApiejpmdW5jdGlvbiBieihhKXt0aGlzLmE9YQp0
-aGlzLmI9MTYKdGhpcy5jPTB9LApRQShhLGIpe3ZhciBzPUguSHAoYSxiKQppZihzIT1udWxsKXJldHVy
-biBzCnRocm93IEguYihQLnJyKGEsbnVsbCxudWxsKSl9LApvcyhhKXtpZihhIGluc3RhbmNlb2YgSC5U
-cClyZXR1cm4gYS53KDApCnJldHVybiJJbnN0YW5jZSBvZiAnIitILmxoKGEpKyInIn0sCk84KGEsYixj
-LGQpe3ZhciBzLHI9Yz9KLktoKGEsZCk6Si5RaShhLGQpCmlmKGEhPT0wJiZiIT1udWxsKWZvcihzPTA7
-czxyLmxlbmd0aDsrK3MpcltzXT1iCnJldHVybiByfSwKUFcoYSxiLGMpe3ZhciBzLHI9SC5RSShbXSxj
-LkMoImpkPDA+IikpCmZvcihzPUouSVQoYSk7cy5GKCk7KUMuTm0uaShyLGMuYShzLmdsKCkpKQppZihi
-KXJldHVybiByCnJldHVybiBKLkVwKHIsYyl9LApZMShhLGIsYyl7dmFyIHMKaWYoYilyZXR1cm4gUC5l
-dihhLGMpCnM9Si5FcChQLmV2KGEsYyksYykKcmV0dXJuIHN9LApldihhLGIpe3ZhciBzLHIKaWYoQXJy
-YXkuaXNBcnJheShhKSlyZXR1cm4gSC5RSShhLnNsaWNlKDApLGIuQygiamQ8MD4iKSkKcz1ILlFJKFtd
-LGIuQygiamQ8MD4iKSkKZm9yKHI9Si5JVChhKTtyLkYoKTspQy5ObS5pKHMsci5nbCgpKQpyZXR1cm4g
-c30sCkFGKGEsYil7cmV0dXJuIEouekMoUC5QVyhhLCExLGIpKX0sCkhNKGEsYixjKXt2YXIgcz1ILmZ3
-KGEsYixQLmpCKGIsYyxhLmxlbmd0aCkpCnJldHVybiBzfSwKT28oYSl7cmV0dXJuIEguTHcoYSl9LApu
-dShhKXtyZXR1cm4gbmV3IEguVlIoYSxILnY0KGEsITEsITAsITEsITEsITEpKX0sCmwoYSxiLGMpe3Zh
-ciBzPUouSVQoYikKaWYoIXMuRigpKXJldHVybiBhCmlmKGMubGVuZ3RoPT09MCl7ZG8gYSs9SC5Faihz
-LmdsKCkpCndoaWxlKHMuRigpKX1lbHNle2ErPUguRWoocy5nbCgpKQpmb3IoO3MuRigpOylhPWErYytI
-LkVqKHMuZ2woKSl9cmV0dXJuIGF9LApscihhLGIsYyxkKXtyZXR1cm4gbmV3IFAubXAoYSxiLGMsZCl9
-LAp1bygpe3ZhciBzPUguTTAoKQppZihzIT1udWxsKXJldHVybiBQLmhLKHMpCnRocm93IEguYihQLkw0
-KCInVXJpLmJhc2UnIGlzIG5vdCBzdXBwb3J0ZWQiKSl9LAplUChhLGIsYyxkKXt2YXIgcyxyLHEscCxv
-LG4sbT0iMDEyMzQ1Njc4OUFCQ0RFRiIKaWYoYz09PUMueE0pe3M9JC56NCgpLmIKcz1zLnRlc3QoYil9
-ZWxzZSBzPSExCmlmKHMpcmV0dXJuIGIKSC5MaChjKS5DKCJVay5TIikuYShiKQpyPWMuZ1pFKCkuV0oo
-YikKZm9yKHM9ci5sZW5ndGgscT0wLHA9IiI7cTxzOysrcSl7bz1yW3FdCmlmKG88MTI4KXtuPW8+Pj40
-CmlmKG4+PTgpcmV0dXJuIEguT0goYSxuKQpuPShhW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQpp
-ZihuKXArPUguTHcobykKZWxzZSBwPWQmJm89PT0zMj9wKyIrIjpwKyIlIittW28+Pj40JjE1XSttW28m
-MTVdfXJldHVybiBwLmNoYXJDb2RlQXQoMCk9PTA/cDpwfSwKR3EoYSl7dmFyIHM9TWF0aC5hYnMoYSks
-cj1hPDA/Ii0iOiIiCmlmKHM+PTEwMDApcmV0dXJuIiIrYQppZihzPj0xMDApcmV0dXJuIHIrIjAiK3MK
-aWYocz49MTApcmV0dXJuIHIrIjAwIitzCnJldHVybiByKyIwMDAiK3N9LApWeChhKXtpZihhPj0xMDAp
-cmV0dXJuIiIrYQppZihhPj0xMClyZXR1cm4iMCIrYQpyZXR1cm4iMDAiK2F9LApoMChhKXtpZihhPj0x
-MClyZXR1cm4iIithCnJldHVybiIwIithfSwKaGwoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIifHxILnJR
-KGEpfHxhPT1udWxsKXJldHVybiBKLncoYSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09O
-LnN0cmluZ2lmeShhKQpyZXR1cm4gUC5vcyhhKX0sCmhWKGEpe3JldHVybiBuZXcgUC5DNihhKX0sCnhZ
-KGEsYil7cmV0dXJuIG5ldyBQLkFUKCExLG51bGwsYixhKX0sCkwzKGEsYixjKXtyZXR1cm4gbmV3IFAu
-QVQoITAsYSxiLGMpfSwKTzcoYSxiKXtyZXR1cm4gbmV3IFAuYkoobnVsbCxudWxsLCEwLGEsYiwiVmFs
-dWUgbm90IGluIHJhbmdlIil9LApURShhLGIsYyxkLGUpe3JldHVybiBuZXcgUC5iSihiLGMsITAsYSxk
-LCJJbnZhbGlkIHZhbHVlIil9LAp3QShhLGIsYyxkKXtpZihhPGJ8fGE+Yyl0aHJvdyBILmIoUC5URShh
-LGIsYyxkLG51bGwpKQpyZXR1cm4gYX0sCmpCKGEsYixjKXtpZigwPmF8fGE+Yyl0aHJvdyBILmIoUC5U
-RShhLDAsYywic3RhcnQiLG51bGwpKQppZihiIT1udWxsKXtpZihhPmJ8fGI+Yyl0aHJvdyBILmIoUC5U
-RShiLGEsYywiZW5kIixudWxsKSkKcmV0dXJuIGJ9cmV0dXJuIGN9LAprMShhLGIpe2lmKGE8MCl0aHJv
-dyBILmIoUC5URShhLDAsbnVsbCxiLG51bGwpKQpyZXR1cm4gYX0sCkNmKGEsYixjLGQsZSl7dmFyIHM9
-SC5JWihlPT1udWxsP0ouSG0oYik6ZSkKcmV0dXJuIG5ldyBQLmVZKHMsITAsYSxjLCJJbmRleCBvdXQg
-b2YgcmFuZ2UiKX0sCkw0KGEpe3JldHVybiBuZXcgUC51YihhKX0sClNZKGEpe3JldHVybiBuZXcgUC5k
-cyhhKX0sClBWKGEpe3JldHVybiBuZXcgUC5saihhKX0sCmE0KGEpe3JldHVybiBuZXcgUC5VVihhKX0s
-CnJyKGEsYixjKXtyZXR1cm4gbmV3IFAuYUUoYSxiLGMpfSwKaEsoYTUpe3ZhciBzLHIscSxwLG8sbixt
-LGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyLGEzPW51bGwsYTQ9YTUubGVuZ3RoCmlmKGE0
-Pj01KXtzPSgoQy54Qi5XKGE1LDQpXjU4KSozfEMueEIuVyhhNSwwKV4xMDB8Qy54Qi5XKGE1LDEpXjk3
-fEMueEIuVyhhNSwyKV4xMTZ8Qy54Qi5XKGE1LDMpXjk3KT4+PjAKaWYocz09PTApcmV0dXJuIFAuS0Qo
-YTQ8YTQ/Qy54Qi5OaihhNSwwLGE0KTphNSw1LGEzKS5nbFIoKQplbHNlIGlmKHM9PT0zMilyZXR1cm4g
-UC5LRChDLnhCLk5qKGE1LDUsYTQpLDAsYTMpLmdsUigpfXI9UC5POCg4LDAsITEsdC5TKQpDLk5tLlk1
-KHIsMCwwKQpDLk5tLlk1KHIsMSwtMSkKQy5ObS5ZNShyLDIsLTEpCkMuTm0uWTUociw3LC0xKQpDLk5t
-Llk1KHIsMywwKQpDLk5tLlk1KHIsNCwwKQpDLk5tLlk1KHIsNSxhNCkKQy5ObS5ZNShyLDYsYTQpCmlm
-KFAuVUIoYTUsMCxhNCwwLHIpPj0xNClDLk5tLlk1KHIsNyxhNCkKcT1yWzFdCmlmKHE+PTApaWYoUC5V
-QihhNSwwLHEsMjAscik9PT0yMClyWzddPXEKcD1yWzJdKzEKbz1yWzNdCm49cls0XQptPXJbNV0KbD1y
-WzZdCmlmKGw8bSltPWwKaWYobjxwKW49bQplbHNlIGlmKG48PXEpbj1xKzEKaWYobzxwKW89bgprPXJb
-N108MAppZihrKWlmKHA+cSszKXtqPWEzCms9ITF9ZWxzZXtpPW8+MAppZihpJiZvKzE9PT1uKXtqPWEz
-Cms9ITF9ZWxzZXtpZighKG08YTQmJm09PT1uKzImJkMueEIuUWkoYTUsIi4uIixuKSkpaD1tPm4rMiYm
-Qy54Qi5RaShhNSwiLy4uIixtLTMpCmVsc2UgaD0hMAppZihoKXtqPWEzCms9ITF9ZWxzZXtpZihxPT09
-NClpZihDLnhCLlFpKGE1LCJmaWxlIiwwKSl7aWYocDw9MCl7aWYoIUMueEIuUWkoYTUsIi8iLG4pKXtn
-PSJmaWxlOi8vLyIKcz0zfWVsc2V7Zz0iZmlsZTovLyIKcz0yfWE1PWcrQy54Qi5OaihhNSxuLGE0KQpx
-LT0wCmk9cy0wCm0rPWkKbCs9aQphND1hNS5sZW5ndGgKcD03Cm89NwpuPTd9ZWxzZSBpZihuPT09bSl7
-KytsCmY9bSsxCmE1PUMueEIuaTcoYTUsbixtLCIvIik7KythNAptPWZ9aj0iZmlsZSJ9ZWxzZSBpZihD
-LnhCLlFpKGE1LCJodHRwIiwwKSl7aWYoaSYmbyszPT09biYmQy54Qi5RaShhNSwiODAiLG8rMSkpe2wt
-PTMKZT1uLTMKbS09MwphNT1DLnhCLmk3KGE1LG8sbiwiIikKYTQtPTMKbj1lfWo9Imh0dHAifWVsc2Ug
-aj1hMwplbHNlIGlmKHE9PT01JiZDLnhCLlFpKGE1LCJodHRwcyIsMCkpe2lmKGkmJm8rND09PW4mJkMu
-eEIuUWkoYTUsIjQ0MyIsbysxKSl7bC09NAplPW4tNAptLT00CmE1PUMueEIuaTcoYTUsbyxuLCIiKQph
-NC09MwpuPWV9aj0iaHR0cHMifWVsc2Ugaj1hMwprPSEwfX19ZWxzZSBqPWEzCmlmKGspe2lmKGE0PGE1
-Lmxlbmd0aCl7YTU9Qy54Qi5OaihhNSwwLGE0KQpxLT0wCnAtPTAKby09MApuLT0wCm0tPTAKbC09MH1y
-ZXR1cm4gbmV3IFAuVWYoYTUscSxwLG8sbixtLGwsail9aWYoaj09bnVsbClpZihxPjApaj1QLlBpKGE1
-LDAscSkKZWxzZXtpZihxPT09MClQLlIzKGE1LDAsIkludmFsaWQgZW1wdHkgc2NoZW1lIikKaj0iIn1p
-ZihwPjApe2Q9cSszCmM9ZDxwP1AuelIoYTUsZCxwLTEpOiIiCmI9UC5PZShhNSxwLG8sITEpCmk9bysx
-CmlmKGk8bil7YT1ILkhwKEMueEIuTmooYTUsaSxuKSxhMykKYTA9UC53QihhPT1udWxsP0gudihQLnJy
-KCJJbnZhbGlkIHBvcnQiLGE1LGkpKTphLGopfWVsc2UgYTA9YTN9ZWxzZXthMD1hMwpiPWEwCmM9IiJ9
-YTE9UC5rYShhNSxuLG0sYTMsaixiIT1udWxsKQphMj1tPGw/UC5sZShhNSxtKzEsbCxhMyk6YTMKcmV0
-dXJuIG5ldyBQLkRuKGosYyxiLGEwLGExLGEyLGw8YTQ/UC50RyhhNSxsKzEsYTQpOmEzKX0sCk10KGEp
-e0gubihhKQpyZXR1cm4gUC5rdShhLDAsYS5sZW5ndGgsQy54TSwhMSl9LApXWChhKXt2YXIgcz10Lk4K
-cmV0dXJuIEMuTm0uTjAoSC5RSShhLnNwbGl0KCImIiksdC5zKSxQLkZsKHMscyksbmV3IFAubjEoQy54
-TSksdC5jayl9LApIaChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG09IklQdjQgYWRkcmVzcyBzaG91bGQg
-Y29udGFpbiBleGFjdGx5IDQgcGFydHMiLGw9ImVhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAw
-Li4yNTUiLGs9bmV3IFAuY1MoYSksaj1uZXcgVWludDhBcnJheSg0KQpmb3Iocz1iLHI9cyxxPTA7czxj
-Oysrcyl7cD1DLnhCLk8oYSxzKQppZihwIT09NDYpe2lmKChwXjQ4KT45KWsuJDIoImludmFsaWQgY2hh
-cmFjdGVyIixzKX1lbHNle2lmKHE9PT0zKWsuJDIobSxzKQpvPVAuUUEoQy54Qi5OaihhLHIscyksbnVs
-bCkKaWYobz4yNTUpay4kMihsLHIpCm49cSsxCmlmKHE+PTQpcmV0dXJuIEguT0goaixxKQpqW3FdPW8K
-cj1zKzEKcT1ufX1pZihxIT09MylrLiQyKG0sYykKbz1QLlFBKEMueEIuTmooYSxyLGMpLG51bGwpCmlm
-KG8+MjU1KWsuJDIobCxyKQppZihxPj00KXJldHVybiBILk9IKGoscSkKaltxXT1vCnJldHVybiBqfSwK
-ZWcoYSxiLGEwKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD1uZXcgUC5WQyhhKSxj
-PW5ldyBQLkpUKGQsYSkKaWYoYS5sZW5ndGg8MilkLiQxKCJhZGRyZXNzIGlzIHRvbyBzaG9ydCIpCnM9
-SC5RSShbXSx0LnQpCmZvcihyPWIscT1yLHA9ITEsbz0hMTtyPGEwOysrcil7bj1DLnhCLk8oYSxyKQpp
-ZihuPT09NTgpe2lmKHI9PT1iKXsrK3IKaWYoQy54Qi5PKGEscikhPT01OClkLiQyKCJpbnZhbGlkIHN0
-YXJ0IGNvbG9uLiIscikKcT1yfWlmKHI9PT1xKXtpZihwKWQuJDIoIm9ubHkgb25lIHdpbGRjYXJkIGA6
-OmAgaXMgYWxsb3dlZCIscikKQy5ObS5pKHMsLTEpCnA9ITB9ZWxzZSBDLk5tLmkocyxjLiQyKHEscikp
-CnE9cisxfWVsc2UgaWYobj09PTQ2KW89ITB9aWYocy5sZW5ndGg9PT0wKWQuJDEoInRvbyBmZXcgcGFy
-dHMiKQptPXE9PT1hMApsPUMuTm0uZ3JaKHMpCmlmKG0mJmwhPT0tMSlkLiQyKCJleHBlY3RlZCBhIHBh
-cnQgYWZ0ZXIgbGFzdCBgOmAiLGEwKQppZighbSlpZighbylDLk5tLmkocyxjLiQyKHEsYTApKQplbHNl
-e2s9UC5IaChhLHEsYTApCkMuTm0uaShzLChrWzBdPDw4fGtbMV0pPj4+MCkKQy5ObS5pKHMsKGtbMl08
-PDh8a1szXSk+Pj4wKX1pZihwKXtpZihzLmxlbmd0aD43KWQuJDEoImFuIGFkZHJlc3Mgd2l0aCBhIHdp
-bGRjYXJkIG11c3QgaGF2ZSBsZXNzIHRoYW4gNyBwYXJ0cyIpfWVsc2UgaWYocy5sZW5ndGghPT04KWQu
-JDEoImFuIGFkZHJlc3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFy
-dHMiKQpqPW5ldyBVaW50OEFycmF5KDE2KQpmb3IobD1zLmxlbmd0aCxpPTktbCxyPTAsaD0wO3I8bDsr
-K3Ipe2c9c1tyXQppZihnPT09LTEpZm9yKGY9MDtmPGk7KytmKXtpZihoPDB8fGg+PTE2KXJldHVybiBI
-Lk9IKGosaCkKaltoXT0wCmU9aCsxCmlmKGU+PTE2KXJldHVybiBILk9IKGosZSkKaltlXT0wCmgrPTJ9
-ZWxzZXtlPUMuam4ud0coZyw4KQppZihoPDB8fGg+PTE2KXJldHVybiBILk9IKGosaCkKaltoXT1lCmU9
-aCsxCmlmKGU+PTE2KXJldHVybiBILk9IKGosZSkKaltlXT1nJjI1NQpoKz0yfX1yZXR1cm4gan0sCktM
-KGEsYixjLGQsZSxmLGcpe3ZhciBzLHIscSxwLG8sbgpmPWY9PW51bGw/IiI6UC5QaShmLDAsZi5sZW5n
-dGgpCmc9UC56UihnLDAsZz09bnVsbD8wOmcubGVuZ3RoKQphPVAuT2UoYSwwLGE9PW51bGw/MDphLmxl
-bmd0aCwhMSkKcz1QLmxlKG51bGwsMCwwLGUpCnI9UC50RyhudWxsLDAsMCkKZD1QLndCKGQsZikKcT1m
-PT09ImZpbGUiCmlmKGE9PW51bGwpcD1nLmxlbmd0aCE9PTB8fGQhPW51bGx8fHEKZWxzZSBwPSExCmlm
-KHApYT0iIgpwPWE9PW51bGwKbz0hcApiPVAua2EoYiwwLGI9PW51bGw/MDpiLmxlbmd0aCxjLGYsbykK
-bj1mLmxlbmd0aD09PTAKaWYobiYmcCYmIUMueEIubihiLCIvIikpYj1QLndGKGIsIW58fG8pCmVsc2Ug
-Yj1QLnhlKGIpCnJldHVybiBuZXcgUC5EbihmLGcscCYmQy54Qi5uKGIsIi8vIik/IiI6YSxkLGIscyxy
-KX0sCndLKGEpe2lmKGE9PT0iaHR0cCIpcmV0dXJuIDgwCmlmKGE9PT0iaHR0cHMiKXJldHVybiA0NDMK
-cmV0dXJuIDB9LApOUihhLGIpe3ZhciBzLHIscSxwLG8sbgpmb3Iocz1hLmxlbmd0aCxyPTA7cjxzOysr
-cil7cT1DLnhCLlcoYSxyKQpwPUMueEIuVyhiLHIpCm89cV5wCmlmKG8hPT0wKXtpZihvPT09MzIpe249
-cHxvCmlmKDk3PD1uJiZuPD0xMjIpY29udGludWV9cmV0dXJuITF9fXJldHVybiEwfSwKUjMoYSxiLGMp
-e3Rocm93IEguYihQLnJyKGMsYSxiKSl9LApYZChhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGss
-aixpLGg9bnVsbCxnPWIubGVuZ3RoCmlmKGchPT0wKXtxPTAKd2hpbGUoITApe2lmKCEocTxnKSl7cz0i
-IgpyPTAKYnJlYWt9aWYoQy54Qi5XKGIscSk9PT02NCl7cz1DLnhCLk5qKGIsMCxxKQpyPXErMQpicmVh
-a30rK3F9aWYocjxnJiZDLnhCLlcoYixyKT09PTkxKXtmb3IocD1yLG89LTE7cDxnOysrcCl7bj1DLnhC
-LlcoYixwKQppZihuPT09MzcmJm88MCl7bT1DLnhCLlFpKGIsIjI1IixwKzEpP3ArMjpwCm89cApwPW19
-ZWxzZSBpZihuPT09OTMpYnJlYWt9aWYocD09PWcpdGhyb3cgSC5iKFAucnIoIkludmFsaWQgSVB2NiBo
-b3N0IGVudHJ5LiIsYixyKSkKbD1vPDA/cDpvClAuZWcoYixyKzEsbCk7KytwCmlmKHAhPT1nJiZDLnhC
-LlcoYixwKSE9PTU4KXRocm93IEguYihQLnJyKCJJbnZhbGlkIGVuZCBvZiBhdXRob3JpdHkiLGIscCkp
-fWVsc2UgcD1yCndoaWxlKCEwKXtpZighKHA8Zykpe2s9aApicmVha31pZihDLnhCLlcoYixwKT09PTU4
-KXtqPUMueEIueW4oYixwKzEpCms9ai5sZW5ndGghPT0wP1AuUUEoaixoKTpoCmJyZWFrfSsrcH1pPUMu
-eEIuTmooYixyLHApfWVsc2V7az1oCmk9awpzPSIifXJldHVybiBQLktMKGksaCxILlFJKGMuc3BsaXQo
-Ii8iKSx0LnMpLGssZCxhLHMpfSwKa0UoYSxiKXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9
-MDtyPHM7KytyKXtxPWFbcl0KcD1KLlU2KHEpCm89cC5nQShxKQppZigwPm8pSC52KFAuVEUoMCwwLHAu
-Z0EocSksbnVsbCxudWxsKSkKaWYoSC5TUShxLCIvIiwwKSl7cz1QLkw0KCJJbGxlZ2FsIHBhdGggY2hh
-cmFjdGVyICIrSC5FaihxKSkKdGhyb3cgSC5iKHMpfX19LApITihhLGIsYyl7dmFyIHMscixxLHAKZm9y
-KHM9SC5xQyhhLGMsbnVsbCxILnQ2KGEpLmMpLHI9cy4kdGkscz1uZXcgSC5hNyhzLHMuZ0Eocyksci5D
-KCJhNzxhTC5FPiIpKSxyPXIuQygiYUwuRSIpO3MuRigpOyl7cT1yLmEocy5kKQpwPVAubnUoJ1siKi86
-PD4/XFxcXHxdJykKaWYoSC5TUShxLHAsMCkpe3M9UC5MNCgiSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0
-aDogIitxKQp0aHJvdyBILmIocyl9fX0sCnJnKGEsYil7dmFyIHMKaWYoISg2NTw9YSYmYTw9OTApKXM9
-OTc8PWEmJmE8PTEyMgplbHNlIHM9ITAKaWYocylyZXR1cm4Kcz1QLkw0KCJJbGxlZ2FsIGRyaXZlIGxl
-dHRlciAiK1AuT28oYSkpCnRocm93IEguYihzKX0sCndCKGEsYil7aWYoYSE9bnVsbCYmYT09PVAud0so
-YikpcmV0dXJuIG51bGwKcmV0dXJuIGF9LApPZShhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4KaWYoYT09
-bnVsbClyZXR1cm4gbnVsbAppZihiPT09YylyZXR1cm4iIgppZihDLnhCLk8oYSxiKT09PTkxKXtzPWMt
-MQppZihDLnhCLk8oYSxzKSE9PTkzKVAuUjMoYSxiLCJNaXNzaW5nIGVuZCBgXWAgdG8gbWF0Y2ggYFtg
-IGluIGhvc3QiKQpyPWIrMQpxPVAudG8oYSxyLHMpCmlmKHE8cyl7cD1xKzEKbz1QLk9BKGEsQy54Qi5R
-aShhLCIyNSIscCk/cSszOnAscywiJTI1Iil9ZWxzZSBvPSIiClAuZWcoYSxyLHEpCnJldHVybiBDLnhC
-Lk5qKGEsYixxKS50b0xvd2VyQ2FzZSgpK28rIl0ifWZvcihuPWI7bjxjOysrbilpZihDLnhCLk8oYSxu
-KT09PTU4KXtxPUMueEIuWFUoYSwiJSIsYikKcT1xPj1iJiZxPGM/cTpjCmlmKHE8Yyl7cD1xKzEKbz1Q
-Lk9BKGEsQy54Qi5RaShhLCIyNSIscCk/cSszOnAsYywiJTI1Iil9ZWxzZSBvPSIiClAuZWcoYSxiLHEp
-CnJldHVybiJbIitDLnhCLk5qKGEsYixxKStvKyJdIn1yZXR1cm4gUC5PTChhLGIsYyl9LAp0byhhLGIs
-Yyl7dmFyIHM9Qy54Qi5YVShhLCIlIixiKQpyZXR1cm4gcz49YiYmczxjP3M6Y30sCk9BKGEsYixjLGQp
-e3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9ZCE9PSIiP25ldyBQLk0oZCk6bnVsbApmb3Iocz1iLHI9
-cyxxPSEwO3M8Yzspe3A9Qy54Qi5PKGEscykKaWYocD09PTM3KXtvPVAucnYoYSxzLCEwKQpuPW89PW51
-bGwKaWYobiYmcSl7cys9Mwpjb250aW51ZX1pZihpPT1udWxsKWk9bmV3IFAuTSgiIikKbT1pLmErPUMu
-eEIuTmooYSxyLHMpCmlmKG4pbz1DLnhCLk5qKGEscyxzKzMpCmVsc2UgaWYobz09PSIlIilQLlIzKGEs
-cywiWm9uZUlEIHNob3VsZCBub3QgY29udGFpbiAlIGFueW1vcmUiKQppLmE9bStvCnMrPTMKcj1zCnE9
-ITB9ZWxzZXtpZihwPDEyNyl7bj1wPj4+NAppZihuPj04KXJldHVybiBILk9IKEMuRjMsbikKbj0oQy5G
-M1tuXSYxPDwocCYxNSkpIT09MH1lbHNlIG49ITEKaWYobil7aWYocSYmNjU8PXAmJjkwPj1wKXtpZihp
-PT1udWxsKWk9bmV3IFAuTSgiIikKaWYocjxzKXtpLmErPUMueEIuTmooYSxyLHMpCnI9c31xPSExfSsr
-c31lbHNle2lmKChwJjY0NTEyKT09PTU1Mjk2JiZzKzE8Yyl7bD1DLnhCLk8oYSxzKzEpCmlmKChsJjY0
-NTEyKT09PTU2MzIwKXtwPShwJjEwMjMpPDwxMHxsJjEwMjN8NjU1MzYKaz0yfWVsc2Ugaz0xfWVsc2Ug
-az0xCmo9Qy54Qi5OaihhLHIscykKaWYoaT09bnVsbCl7aT1uZXcgUC5NKCIiKQpuPWl9ZWxzZSBuPWkK
-bi5hKz1qCm4uYSs9UC56WChwKQpzKz1rCnI9c319fWlmKGk9PW51bGwpcmV0dXJuIEMueEIuTmooYSxi
-LGMpCmlmKHI8YylpLmErPUMueEIuTmooYSxyLGMpCm49aS5hCnJldHVybiBuLmNoYXJDb2RlQXQoMCk9
-PTA/bjpufSwKT0woYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGkKZm9yKHM9YixyPXMscT1u
-dWxsLHA9ITA7czxjOyl7bz1DLnhCLk8oYSxzKQppZihvPT09Mzcpe249UC5ydihhLHMsITApCm09bj09
-bnVsbAppZihtJiZwKXtzKz0zCmNvbnRpbnVlfWlmKHE9PW51bGwpcT1uZXcgUC5NKCIiKQpsPUMueEIu
-TmooYSxyLHMpCms9cS5hKz0hcD9sLnRvTG93ZXJDYXNlKCk6bAppZihtKXtuPUMueEIuTmooYSxzLHMr
-MykKaj0zfWVsc2UgaWYobj09PSIlIil7bj0iJTI1IgpqPTF9ZWxzZSBqPTMKcS5hPWsrbgpzKz1qCnI9
-cwpwPSEwfWVsc2V7aWYobzwxMjcpe209bz4+PjQKaWYobT49OClyZXR1cm4gSC5PSChDLmVhLG0pCm09
-KEMuZWFbbV0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBtPSExCmlmKG0pe2lmKHAmJjY1PD1vJiY5MD49byl7
-aWYocT09bnVsbClxPW5ldyBQLk0oIiIpCmlmKHI8cyl7cS5hKz1DLnhCLk5qKGEscixzKQpyPXN9cD0h
-MX0rK3N9ZWxzZXtpZihvPD05Myl7bT1vPj4+NAppZihtPj04KXJldHVybiBILk9IKEMuYWssbSkKbT0o
-Qy5ha1ttXSYxPDwobyYxNSkpIT09MH1lbHNlIG09ITEKaWYobSlQLlIzKGEscywiSW52YWxpZCBjaGFy
-YWN0ZXIiKQplbHNle2lmKChvJjY0NTEyKT09PTU1Mjk2JiZzKzE8Yyl7aT1DLnhCLk8oYSxzKzEpCmlm
-KChpJjY0NTEyKT09PTU2MzIwKXtvPShvJjEwMjMpPDwxMHxpJjEwMjN8NjU1MzYKaj0yfWVsc2Ugaj0x
-fWVsc2Ugaj0xCmw9Qy54Qi5OaihhLHIscykKaWYoIXApbD1sLnRvTG93ZXJDYXNlKCkKaWYocT09bnVs
-bCl7cT1uZXcgUC5NKCIiKQptPXF9ZWxzZSBtPXEKbS5hKz1sCm0uYSs9UC56WChvKQpzKz1qCnI9c319
-fX1pZihxPT1udWxsKXJldHVybiBDLnhCLk5qKGEsYixjKQppZihyPGMpe2w9Qy54Qi5OaihhLHIsYykK
-cS5hKz0hcD9sLnRvTG93ZXJDYXNlKCk6bH1tPXEuYQpyZXR1cm4gbS5jaGFyQ29kZUF0KDApPT0wP206
-bX0sClBpKGEsYixjKXt2YXIgcyxyLHEscAppZihiPT09YylyZXR1cm4iIgppZighUC5FdChDLnhCLlco
-YSxiKSkpUC5SMyhhLGIsIlNjaGVtZSBub3Qgc3RhcnRpbmcgd2l0aCBhbHBoYWJldGljIGNoYXJhY3Rl
-ciIpCmZvcihzPWIscj0hMTtzPGM7KytzKXtxPUMueEIuVyhhLHMpCmlmKHE8MTI4KXtwPXE+Pj40Cmlm
-KHA+PTgpcmV0dXJuIEguT0goQy5tSyxwKQpwPShDLm1LW3BdJjE8PChxJjE1KSkhPT0wfWVsc2UgcD0h
-MQppZighcClQLlIzKGEscywiSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyIikKaWYoNjU8PXEmJnE8PTkw
-KXI9ITB9YT1DLnhCLk5qKGEsYixjKQpyZXR1cm4gUC5ZYShyP2EudG9Mb3dlckNhc2UoKTphKX0sCllh
-KGEpe2lmKGE9PT0iaHR0cCIpcmV0dXJuImh0dHAiCmlmKGE9PT0iZmlsZSIpcmV0dXJuImZpbGUiCmlm
-KGE9PT0iaHR0cHMiKXJldHVybiJodHRwcyIKaWYoYT09PSJwYWNrYWdlIilyZXR1cm4icGFja2FnZSIK
-cmV0dXJuIGF9LAp6UihhLGIsYyl7aWYoYT09bnVsbClyZXR1cm4iIgpyZXR1cm4gUC5QSShhLGIsYyxD
-LnRvLCExKX0sCmthKGEsYixjLGQsZSxmKXt2YXIgcyxyLHE9ZT09PSJmaWxlIixwPXF8fGYKaWYoYT09
-bnVsbCl7aWYoZD09bnVsbClyZXR1cm4gcT8iLyI6IiIKcz1ILnQ2KGQpCnI9bmV3IEgubEooZCxzLkMo
-InFVKDEpIikuYShuZXcgUC5SWigpKSxzLkMoImxKPDEscVU+IikpLmsoMCwiLyIpfWVsc2UgaWYoZCE9
-bnVsbCl0aHJvdyBILmIoUC54WSgiQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkIixu
-dWxsKSkKZWxzZSByPVAuUEkoYSxiLGMsQy5XZCwhMCkKaWYoci5sZW5ndGg9PT0wKXtpZihxKXJldHVy
-biIvIn1lbHNlIGlmKHAmJiFDLnhCLm4ociwiLyIpKXI9Ii8iK3IKcmV0dXJuIFAuSnIocixlLGYpfSwK
-SnIoYSxiLGMpe3ZhciBzPWIubGVuZ3RoPT09MAppZihzJiYhYyYmIUMueEIubihhLCIvIikpcmV0dXJu
-IFAud0YoYSwhc3x8YykKcmV0dXJuIFAueGUoYSl9LApsZShhLGIsYyxkKXt2YXIgcyxyPXt9CmlmKGEh
-PW51bGwpe2lmKGQhPW51bGwpdGhyb3cgSC5iKFAueFkoIkJvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1l
-dGVycyBzcGVjaWZpZWQiLG51bGwpKQpyZXR1cm4gUC5QSShhLGIsYyxDLlZDLCEwKX1pZihkPT1udWxs
-KXJldHVybiBudWxsCnM9bmV3IFAuTSgiIikKci5hPSIiCmQuSygwLG5ldyBQLnk1KG5ldyBQLk1FKHIs
-cykpKQpyPXMuYQpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCnRHKGEsYixjKXtpZihhPT1u
-dWxsKXJldHVybiBudWxsCnJldHVybiBQLlBJKGEsYixjLEMuVkMsITApfSwKcnYoYSxiLGMpe3ZhciBz
-LHIscSxwLG8sbj1iKzIKaWYobj49YS5sZW5ndGgpcmV0dXJuIiUiCnM9Qy54Qi5PKGEsYisxKQpyPUMu
-eEIuTyhhLG4pCnE9SC5vbyhzKQpwPUgub28ocikKaWYocTwwfHxwPDApcmV0dXJuIiUiCm89cSoxNitw
-CmlmKG88MTI3KXtuPUMuam4ud0cobyw0KQppZihuPj04KXJldHVybiBILk9IKEMuRjMsbikKbj0oQy5G
-M1tuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEKaWYobilyZXR1cm4gSC5MdyhjJiY2NTw9byYmOTA+
-PW8/KG98MzIpPj4+MDpvKQppZihzPj05N3x8cj49OTcpcmV0dXJuIEMueEIuTmooYSxiLGIrMykudG9V
-cHBlckNhc2UoKQpyZXR1cm4gbnVsbH0sCnpYKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz0iMDEyMzQ1
-Njc4OUFCQ0RFRiIKaWYoYTwxMjgpe3M9bmV3IFVpbnQ4QXJyYXkoMykKc1swXT0zNwpzWzFdPUMueEIu
-VyhrLGE+Pj40KQpzWzJdPUMueEIuVyhrLGEmMTUpfWVsc2V7aWYoYT4yMDQ3KWlmKGE+NjU1MzUpe3I9
-MjQwCnE9NH1lbHNle3I9MjI0CnE9M31lbHNle3I9MTkyCnE9Mn1wPTMqcQpzPW5ldyBVaW50OEFycmF5
-KHApCmZvcihvPTA7LS1xLHE+PTA7cj0xMjgpe249Qy5qbi5iZihhLDYqcSkmNjN8cgppZihvPj1wKXJl
-dHVybiBILk9IKHMsbykKc1tvXT0zNwptPW8rMQpsPUMueEIuVyhrLG4+Pj40KQppZihtPj1wKXJldHVy
-biBILk9IKHMsbSkKc1ttXT1sCmw9bysyCm09Qy54Qi5XKGssbiYxNSkKaWYobD49cClyZXR1cm4gSC5P
-SChzLGwpCnNbbF09bQpvKz0zfX1yZXR1cm4gUC5ITShzLDAsbnVsbCl9LApQSShhLGIsYyxkLGUpe3Zh
-ciBzPVAuVWwoYSxiLGMsZCxlKQpyZXR1cm4gcz09bnVsbD9DLnhCLk5qKGEsYixjKTpzfSwKVWwoYSxi
-LGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaj1udWxsCmZvcihzPSFlLHI9YixxPXIscD1qO3I8
-Yzspe289Qy54Qi5PKGEscikKaWYobzwxMjcpe249bz4+PjQKaWYobj49OClyZXR1cm4gSC5PSChkLG4p
-Cm49KGRbbl0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBuPSExCmlmKG4pKytyCmVsc2V7aWYobz09PTM3KXtt
-PVAucnYoYSxyLCExKQppZihtPT1udWxsKXtyKz0zCmNvbnRpbnVlfWlmKCIlIj09PW0pe209IiUyNSIK
-bD0xfWVsc2UgbD0zfWVsc2V7aWYocylpZihvPD05Myl7bj1vPj4+NAppZihuPj04KXJldHVybiBILk9I
-KEMuYWssbikKbj0oQy5ha1tuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEKZWxzZSBuPSExCmlmKG4p
-e1AuUjMoYSxyLCJJbnZhbGlkIGNoYXJhY3RlciIpCmw9agptPWx9ZWxzZXtpZigobyY2NDUxMik9PT01
-NTI5Nil7bj1yKzEKaWYobjxjKXtrPUMueEIuTyhhLG4pCmlmKChrJjY0NTEyKT09PTU2MzIwKXtvPShv
-JjEwMjMpPDwxMHxrJjEwMjN8NjU1MzYKbD0yfWVsc2UgbD0xfWVsc2UgbD0xfWVsc2UgbD0xCm09UC56
-WChvKX19aWYocD09bnVsbCl7cD1uZXcgUC5NKCIiKQpuPXB9ZWxzZSBuPXAKbi5hKz1DLnhCLk5qKGEs
-cSxyKQpuLmErPUguRWoobSkKaWYodHlwZW9mIGwhPT0ibnVtYmVyIilyZXR1cm4gSC5wWShsKQpyKz1s
-CnE9cn19aWYocD09bnVsbClyZXR1cm4gagppZihxPGMpcC5hKz1DLnhCLk5qKGEscSxjKQpzPXAuYQpy
-ZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCnlCKGEpe2lmKEMueEIubihhLCIuIikpcmV0dXJu
-ITAKcmV0dXJuIEMueEIuT1koYSwiLy4iKSE9PS0xfSwKeGUoYSl7dmFyIHMscixxLHAsbyxuLG0KaWYo
-IVAueUIoYSkpcmV0dXJuIGEKcz1ILlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5n
-dGgscD0hMSxvPTA7bzxxOysrbyl7bj1yW29dCmlmKEouUk0obiwiLi4iKSl7bT1zLmxlbmd0aAppZiht
-IT09MCl7aWYoMD49bSlyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCmlmKHMubGVuZ3RoPT09MClDLk5t
-LmkocywiIil9cD0hMH1lbHNlIGlmKCIuIj09PW4pcD0hMAplbHNle0MuTm0uaShzLG4pCnA9ITF9fWlm
-KHApQy5ObS5pKHMsIiIpCnJldHVybiBDLk5tLmsocywiLyIpfSwKd0YoYSxiKXt2YXIgcyxyLHEscCxv
-LG4KaWYoIVAueUIoYSkpcmV0dXJuIWI/UC5DMShhKTphCnM9SC5RSShbXSx0LnMpCmZvcihyPWEuc3Bs
-aXQoIi8iKSxxPXIubGVuZ3RoLHA9ITEsbz0wO288cTsrK28pe249cltvXQppZigiLi4iPT09bilpZihz
-Lmxlbmd0aCE9PTAmJkMuTm0uZ3JaKHMpIT09Ii4uIil7aWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0go
-cywtMSkKcy5wb3AoKQpwPSEwfWVsc2V7Qy5ObS5pKHMsIi4uIikKcD0hMX1lbHNlIGlmKCIuIj09PW4p
-cD0hMAplbHNle0MuTm0uaShzLG4pCnA9ITF9fXI9cy5sZW5ndGgKaWYociE9PTApaWYocj09PTEpe2lm
-KDA+PXIpcmV0dXJuIEguT0gocywwKQpyPXNbMF0ubGVuZ3RoPT09MH1lbHNlIHI9ITEKZWxzZSByPSEw
-CmlmKHIpcmV0dXJuIi4vIgppZihwfHxDLk5tLmdyWihzKT09PSIuLiIpQy5ObS5pKHMsIiIpCmlmKCFi
-KXtpZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLDApCkMuTm0uWTUocywwLFAuQzEoc1swXSkpfXJl
-dHVybiBDLk5tLmsocywiLyIpfSwKQzEoYSl7dmFyIHMscixxLHA9YS5sZW5ndGgKaWYocD49MiYmUC5F
-dChDLnhCLlcoYSwwKSkpZm9yKHM9MTtzPHA7KytzKXtyPUMueEIuVyhhLHMpCmlmKHI9PT01OClyZXR1
-cm4gQy54Qi5OaihhLDAscykrIiUzQSIrQy54Qi55bihhLHMrMSkKaWYocjw9MTI3KXtxPXI+Pj40Cmlm
-KHE+PTgpcmV0dXJuIEguT0goQy5tSyxxKQpxPShDLm1LW3FdJjE8PChyJjE1KSk9PT0wfWVsc2UgcT0h
-MAppZihxKWJyZWFrfXJldHVybiBhfSwKdWooYSxiKXtpZihhLmhCKCJwYWNrYWdlIikmJmEuYz09bnVs
-bClyZXR1cm4gUC5mRihiLDAsYi5sZW5ndGgpCnJldHVybi0xfSwKbW4oYSl7dmFyIHMscixxLHA9YS5n
-RmooKSxvPXAubGVuZ3RoCmlmKG8+MCYmSi5IbShwWzBdKT09PTImJkouYTYocFswXSwxKT09PTU4KXtp
-ZigwPj1vKXJldHVybiBILk9IKHAsMCkKUC5yZyhKLmE2KHBbMF0sMCksITEpClAuSE4ocCwhMSwxKQpz
-PSEwfWVsc2V7UC5ITihwLCExLDApCnM9ITF9cj1hLmd0VCgpJiYhcz8iIisiXFwiOiIiCmlmKGEuZ2Nq
-KCkpe3E9YS5nSmYoYSkKaWYocS5sZW5ndGghPT0wKXI9cisiXFwiK3ErIlxcIn1yPVAubChyLHAsIlxc
-IikKbz1zJiZvPT09MT9yKyJcXCI6cgpyZXR1cm4gby5jaGFyQ29kZUF0KDApPT0wP286b30sCkloKGEs
-Yil7dmFyIHMscixxCmZvcihzPTAscj0wO3I8MjsrK3Ipe3E9Qy54Qi5XKGEsYityKQppZig0ODw9cSYm
-cTw9NTcpcz1zKjE2K3EtNDgKZWxzZXtxfD0zMgppZig5Nzw9cSYmcTw9MTAyKXM9cyoxNitxLTg3CmVs
-c2UgdGhyb3cgSC5iKFAueFkoIkludmFsaWQgVVJMIGVuY29kaW5nIixudWxsKSl9fXJldHVybiBzfSwK
-a3UoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvPWIKd2hpbGUoITApe2lmKCEobzxjKSl7cz0hMApicmVh
-a31yPUMueEIuVyhhLG8pCmlmKHI8PTEyNylpZihyIT09MzcpcT1lJiZyPT09NDMKZWxzZSBxPSEwCmVs
-c2UgcT0hMAppZihxKXtzPSExCmJyZWFrfSsrb31pZihzKXtpZihDLnhNIT09ZClxPSExCmVsc2UgcT0h
-MAppZihxKXJldHVybiBDLnhCLk5qKGEsYixjKQplbHNlIHA9bmV3IEgucWooQy54Qi5OaihhLGIsYykp
-fWVsc2V7cD1ILlFJKFtdLHQudCkKZm9yKHE9YS5sZW5ndGgsbz1iO288YzsrK28pe3I9Qy54Qi5XKGEs
-bykKaWYocj4xMjcpdGhyb3cgSC5iKFAueFkoIklsbGVnYWwgcGVyY2VudCBlbmNvZGluZyBpbiBVUkki
-LG51bGwpKQppZihyPT09Mzcpe2lmKG8rMz5xKXRocm93IEguYihQLnhZKCJUcnVuY2F0ZWQgVVJJIixu
-dWxsKSkKQy5ObS5pKHAsUC5JaChhLG8rMSkpCm8rPTJ9ZWxzZSBpZihlJiZyPT09NDMpQy5ObS5pKHAs
-MzIpCmVsc2UgQy5ObS5pKHAscil9fXQuTC5hKHApCnJldHVybiBDLm9FLldKKHApfSwKRXQoYSl7dmFy
-IHM9YXwzMgpyZXR1cm4gOTc8PXMmJnM8PTEyMn0sCktEKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbSxs
-LGs9IkludmFsaWQgTUlNRSB0eXBlIixqPUguUUkoW2ItMV0sdC50KQpmb3Iocz1hLmxlbmd0aCxyPWIs
-cT0tMSxwPW51bGw7cjxzOysrcil7cD1DLnhCLlcoYSxyKQppZihwPT09NDR8fHA9PT01OSlicmVhawpp
-ZihwPT09NDcpe2lmKHE8MCl7cT1yCmNvbnRpbnVlfXRocm93IEguYihQLnJyKGssYSxyKSl9fWlmKHE8
-MCYmcj5iKXRocm93IEguYihQLnJyKGssYSxyKSkKZm9yKDtwIT09NDQ7KXtDLk5tLmkoaixyKTsrK3IK
-Zm9yKG89LTE7cjxzOysrcil7cD1DLnhCLlcoYSxyKQppZihwPT09NjEpe2lmKG88MClvPXJ9ZWxzZSBp
-ZihwPT09NTl8fHA9PT00NClicmVha31pZihvPj0wKUMuTm0uaShqLG8pCmVsc2V7bj1DLk5tLmdyWihq
-KQppZihwIT09NDR8fHIhPT1uKzd8fCFDLnhCLlFpKGEsImJhc2U2NCIsbisxKSl0aHJvdyBILmIoUC5y
-cigiRXhwZWN0aW5nICc9JyIsYSxyKSkKYnJlYWt9fUMuTm0uaShqLHIpCm09cisxCmlmKChqLmxlbmd0
-aCYxKT09PTEpYT1DLmg5LnlyKGEsbSxzKQplbHNle2w9UC5VbChhLG0scyxDLlZDLCEwKQppZihsIT1u
-dWxsKWE9Qy54Qi5pNyhhLG0scyxsKX1yZXR1cm4gbmV3IFAuUEUoYSxqLGMpfSwKS04oKXt2YXIgcyxy
-LHEscCxvLG4sbT0iMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamts
-bW5vcHFyc3R1dnd4eXotLl9+ISQmJygpKissOz0iLGw9Ii4iLGs9IjoiLGo9Ii8iLGk9Ij8iLGg9IiMi
-LGc9SC5RSShuZXcgQXJyYXkoMjIpLHQuZ04pCmZvcihzPTA7czwyMjsrK3MpZ1tzXT1uZXcgVWludDhB
-cnJheSg5NikKcj1uZXcgUC55SShnKQpxPW5ldyBQLmM2KCkKcD1uZXcgUC5xZCgpCm89dC5nYwpuPW8u
-YShyLiQyKDAsMjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhuLGwsMTQpCnEuJDMobixrLDM0KQpxLiQzKG4s
-aiwzKQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNCwyMjUpKQpxLiQzKG4s
-bSwxKQpxLiQzKG4sbCwxNSkKcS4kMyhuLGssMzQpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcyKQpx
-LiQzKG4saCwyMDUpCm49by5hKHIuJDIoMTUsMjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhuLCIlIiwyMjUp
-CnEuJDMobixrLDM0KQpxLiQzKG4saiw5KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEo
-ci4kMigxLDIyNSkpCnEuJDMobixtLDEpCnEuJDMobixrLDM0KQpxLiQzKG4saiwxMCkKcS4kMyhuLGks
-MTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMiwyMzUpKQpxLiQzKG4sbSwxMzkpCnEuJDMobixq
-LDEzMSkKcS4kMyhuLGwsMTQ2KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigz
-LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4saiw2OCkKcS4kMyhuLGwsMTgpCnEuJDMobixpLDE3MikK
-cS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDQsMjI5KSkKcS4kMyhuLG0sNSkKcC4kMyhuLCJBWiIsMjI5
-KQpxLiQzKG4saywxMDIpCnEuJDMobiwiQCIsNjgpCnEuJDMobiwiWyIsMjMyKQpxLiQzKG4saiwxMzgp
-CnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDUsMjI5KSkKcS4kMyhuLG0sNSkK
-cC4kMyhuLCJBWiIsMjI5KQpxLiQzKG4saywxMDIpCnEuJDMobiwiQCIsNjgpCnEuJDMobixqLDEzOCkK
-cS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNiwyMzEpKQpwLiQzKG4sIjE5Iiw3
-KQpxLiQzKG4sIkAiLDY4KQpxLiQzKG4saiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpu
-PW8uYShyLiQyKDcsMjMxKSkKcC4kMyhuLCIwOSIsNykKcS4kMyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4
-KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKcS4kMyhvLmEoci4kMig4LDgpKSwiXSIsNSkKbj1v
-LmEoci4kMig5LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxNikKcS4kMyhuLGosMjM0KQpxLiQz
-KG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNiwyMzUpKQpxLiQzKG4sbSwxMSkKcS4k
-MyhuLGwsMTcpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIu
-JDIoMTcsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDkpCnEuJDMobixpLDE3MikKcS4kMyhuLGgs
-MjA1KQpuPW8uYShyLiQyKDEwLDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwxOCkKcS4kMyhuLGos
-MjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxOCwyMzUpKQpxLiQzKG4s
-bSwxMSkKcS4kMyhuLGwsMTkpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUp
-Cm49by5hKHIuJDIoMTksMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcy
-KQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMTEsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDEw
-KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxMiwyMzYpKQpxLiQzKG4sbSwx
-MikKcS4kMyhuLGksMTIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxMywyMzcpKQpxLiQzKG4sbSwx
-MykKcS4kMyhuLGksMTMpCnAuJDMoby5hKHIuJDIoMjAsMjQ1KSksImF6IiwyMSkKcj1vLmEoci4kMigy
-MSwyNDUpKQpwLiQzKHIsImF6IiwyMSkKcC4kMyhyLCIwOSIsMjEpCnEuJDMociwiKy0uIiwyMSkKcmV0
-dXJuIGd9LApVQihhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG89JC52WigpCmZvcihzPWI7czxjOysrcyl7
-aWYoZDwwfHxkPj1vLmxlbmd0aClyZXR1cm4gSC5PSChvLGQpCnI9b1tkXQpxPUMueEIuVyhhLHMpXjk2
-CnA9cltxPjk1PzMxOnFdCmQ9cCYzMQpDLk5tLlk1KGUscD4+PjUscyl9cmV0dXJuIGR9LApSeChhKXtp
-ZihhLmI9PT03JiZDLnhCLm4oYS5hLCJwYWNrYWdlIikmJmEuYzw9MClyZXR1cm4gUC5mRihhLmEsYS5l
-LGEuZikKcmV0dXJuLTF9LApmRihhLGIsYyl7dmFyIHMscixxCmZvcihzPWIscj0wO3M8YzsrK3Mpe3E9
-Qy54Qi5PKGEscykKaWYocT09PTQ3KXJldHVybiByIT09MD9zOi0xCmlmKHE9PT0zN3x8cT09PTU4KXJl
-dHVybi0xCnJ8PXFeNDZ9cmV0dXJuLTF9LApXRjpmdW5jdGlvbiBXRihhLGIpe3RoaXMuYT1hCnRoaXMu
-Yj1ifSwKaVA6ZnVuY3Rpb24gaVAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClhTOmZ1bmN0aW9uIFhT
-KCl7fSwKQzY6ZnVuY3Rpb24gQzYoYSl7dGhpcy5hPWF9LApFejpmdW5jdGlvbiBFeigpe30sCkY6ZnVu
-Y3Rpb24gRigpe30sCkFUOmZ1bmN0aW9uIEFUKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIK
-Xy5jPWMKXy5kPWR9LApiSjpmdW5jdGlvbiBiSihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmU9YQpf
-LmY9YgpfLmE9YwpfLmI9ZApfLmM9ZQpfLmQ9Zn0sCmVZOmZ1bmN0aW9uIGVZKGEsYixjLGQsZSl7dmFy
-IF89dGhpcwpfLmY9YQpfLmE9YgpfLmI9YwpfLmM9ZApfLmQ9ZX0sCm1wOmZ1bmN0aW9uIG1wKGEsYixj
-LGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LAp1YjpmdW5jdGlvbiB1YihhKXt0
-aGlzLmE9YX0sCmRzOmZ1bmN0aW9uIGRzKGEpe3RoaXMuYT1hfSwKbGo6ZnVuY3Rpb24gbGooYSl7dGhp
-cy5hPWF9LApVVjpmdW5jdGlvbiBVVihhKXt0aGlzLmE9YX0sCms1OmZ1bmN0aW9uIGs1KCl7fSwKS1k6
-ZnVuY3Rpb24gS1koKXt9LApwOmZ1bmN0aW9uIHAoYSl7dGhpcy5hPWF9LApDRDpmdW5jdGlvbiBDRChh
-KXt0aGlzLmE9YX0sCmFFOmZ1bmN0aW9uIGFFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9
-Y30sCmNYOmZ1bmN0aW9uIGNYKCl7fSwKQW46ZnVuY3Rpb24gQW4oKXt9LApOMzpmdW5jdGlvbiBOMyhh
-LGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCmM4OmZ1bmN0aW9uIGM4KCl7fSwKTWg6
-ZnVuY3Rpb24gTWgoKXt9LApaZDpmdW5jdGlvbiBaZCgpe30sCk06ZnVuY3Rpb24gTShhKXt0aGlzLmE9
-YX0sCm4xOmZ1bmN0aW9uIG4xKGEpe3RoaXMuYT1hfSwKY1M6ZnVuY3Rpb24gY1MoYSl7dGhpcy5hPWF9
-LApWQzpmdW5jdGlvbiBWQyhhKXt0aGlzLmE9YX0sCkpUOmZ1bmN0aW9uIEpUKGEsYil7dGhpcy5hPWEK
-dGhpcy5iPWJ9LApEbjpmdW5jdGlvbiBEbihhLGIsYyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8u
-Yj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mCl8ucj1nCl8uUT1fLno9Xy55PV8ueD1udWxsfSwKUlo6
-ZnVuY3Rpb24gUlooKXt9LApNRTpmdW5jdGlvbiBNRShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKeTU6
-ZnVuY3Rpb24geTUoYSl7dGhpcy5hPWF9LApQRTpmdW5jdGlvbiBQRShhLGIsYyl7dGhpcy5hPWEKdGhp
-cy5iPWIKdGhpcy5jPWN9LAp5STpmdW5jdGlvbiB5SShhKXt0aGlzLmE9YX0sCmM2OmZ1bmN0aW9uIGM2
-KCl7fSwKcWQ6ZnVuY3Rpb24gcWQoKXt9LApVZjpmdW5jdGlvbiBVZihhLGIsYyxkLGUsZixnLGgpe3Zh
-ciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy54PWgKXy55
-PW51bGx9LApxZTpmdW5jdGlvbiBxZShhLGIsYyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1i
-Cl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mCl8ucj1nCl8uUT1fLno9Xy55PV8ueD1udWxsfSwKaUo6ZnVu
-Y3Rpb24gaUooKXt9LApFMjpmdW5jdGlvbiBFMihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKamc6ZnVu
-Y3Rpb24gamcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkJmOmZ1bmN0aW9uIEJmKGEsYil7dGhpcy5h
-PWEKdGhpcy5iPWJ9LApBczpmdW5jdGlvbiBBcygpe30sCkdFOmZ1bmN0aW9uIEdFKGEpe3RoaXMuYT1h
-fSwKTjc6ZnVuY3Rpb24gTjcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnVROmZ1bmN0aW9uIHVRKCl7
-fSwKaEY6ZnVuY3Rpb24gaEYoKXt9LApSNChhLGIsYyxkKXt2YXIgcyxyLHEKSC5wOChiKQp0LmouYShk
-KQppZihiKXtzPVtjXQpDLk5tLkZWKHMsZCkKZD1zfXI9dC56CnE9UC5QVyhKLk0xKGQsUC53MCgpLHIp
-LCEwLHIpCnQuWS5hKGEpCnJldHVybiBQLndZKEguRWsoYSxxLG51bGwpKX0sCkRtKGEsYixjKXt2YXIg
-cwp0cnl7aWYoT2JqZWN0LmlzRXh0ZW5zaWJsZShhKSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
-cGVydHkuY2FsbChhLGIpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHt2YWx1ZTpjfSkKcmV0dXJu
-ITB9fWNhdGNoKHMpe0guUnUocyl9cmV0dXJuITF9LApPbShhLGIpe2lmKE9iamVjdC5wcm90b3R5cGUu
-aGFzT3duUHJvcGVydHkuY2FsbChhLGIpKXJldHVybiBhW2JdCnJldHVybiBudWxsfSwKd1koYSl7aWYo
-YT09bnVsbHx8dHlwZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fEguclEoYSkpcmV0
-dXJuIGEKaWYoYSBpbnN0YW5jZW9mIFAuRTQpcmV0dXJuIGEuYQppZihILlI5KGEpKXJldHVybiBhCmlm
-KHQuYWsuYihhKSlyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgUC5pUClyZXR1cm4gSC5vMihhKQppZih0
-LlkuYihhKSlyZXR1cm4gUC5oRShhLCIkZGFydF9qc0Z1bmN0aW9uIixuZXcgUC5EVigpKQpyZXR1cm4g
-UC5oRShhLCJfJGRhcnRfanNPYmplY3QiLG5ldyBQLlBDKCQua0koKSkpfSwKaEUoYSxiLGMpe3ZhciBz
-PVAuT20oYSxiKQppZihzPT1udWxsKXtzPWMuJDEoYSkKUC5EbShhLGIscyl9cmV0dXJuIHN9LApkVShh
-KXt2YXIgcyxyCmlmKGE9PW51bGx8fHR5cGVvZiBhPT0ic3RyaW5nInx8dHlwZW9mIGE9PSJudW1iZXIi
-fHx0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBhCmVsc2UgaWYoYSBpbnN0YW5jZW9mIE9iamVjdCYm
-SC5SOShhKSlyZXR1cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmplY3QmJnQuYWsuYihhKSlyZXR1
-cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBEYXRlKXtzPUguSVooYS5nZXRUaW1lKCkpCmlmKE1hdGgu
-YWJzKHMpPD04NjRlMTMpcj0hMQplbHNlIHI9ITAKaWYocilILnYoUC54WSgiRGF0ZVRpbWUgaXMgb3V0
-c2lkZSB2YWxpZCByYW5nZTogIitzLG51bGwpKQpILmNiKCExLCJpc1V0YyIsdC55KQpyZXR1cm4gbmV3
-IFAuaVAocywhMSl9ZWxzZSBpZihhLmNvbnN0cnVjdG9yPT09JC5rSSgpKXJldHVybiBhLm8KZWxzZSBy
-ZXR1cm4gUC5ORChhKX0sCk5EKGEpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBQLmlRKGEs
-JC56KCksbmV3IFAuUVMoKSkKaWYoYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBQLmlRKGEsJC5SOCgp
-LG5ldyBQLm5wKCkpCnJldHVybiBQLmlRKGEsJC5SOCgpLG5ldyBQLlV0KCkpfSwKaVEoYSxiLGMpe3Zh
-ciBzPVAuT20oYSxiKQppZihzPT1udWxsfHwhKGEgaW5zdGFuY2VvZiBPYmplY3QpKXtzPWMuJDEoYSkK
-UC5EbShhLGIscyl9cmV0dXJuIHN9LApEVjpmdW5jdGlvbiBEVigpe30sClBDOmZ1bmN0aW9uIFBDKGEp
-e3RoaXMuYT1hfSwKUVM6ZnVuY3Rpb24gUVMoKXt9LApucDpmdW5jdGlvbiBucCgpe30sClV0OmZ1bmN0
-aW9uIFV0KCl7fSwKRTQ6ZnVuY3Rpb24gRTQoYSl7dGhpcy5hPWF9LApyNzpmdW5jdGlvbiByNyhhKXt0
-aGlzLmE9YX0sClR6OmZ1bmN0aW9uIFR6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCnZnOmZ1bmN0
-aW9uIHZnKCl7fSwKbmQ6ZnVuY3Rpb24gbmQoKXt9LApLZTpmdW5jdGlvbiBLZShhKXt0aGlzLmE9YX0s
-CmhpOmZ1bmN0aW9uIGhpKCl7fX0sUj17Cm56KGEpe3ZhciBzPUguVWMoYS5xKDAsIm5vZGVJZCIpKQpy
-ZXR1cm4gbmV3IFIuTEwoQy5ObS5IdChDLnJrLG5ldyBSLk1EKGEpKSxzKX0sCk9YKGEpe3N3aXRjaChh
-KXtjYXNlIEMuQWQ6cmV0dXJuIkFkZCAvKj8qLyBoaW50IgpjYXNlIEMubmU6cmV0dXJuIkFkZCAvKiEq
-LyBoaW50IgpjYXNlIEMud1Y6cmV0dXJuIlJlbW92ZSAvKj8qLyBoaW50IgpjYXNlIEMuZlI6cmV0dXJu
-IlJlbW92ZSAvKiEqLyBoaW50IgpjYXNlIEMubXk6cmV0dXJuIkNoYW5nZSB0byAvKj8qLyBoaW50Igpj
-YXNlIEMucng6cmV0dXJuIkNoYW5nZSB0byAvKiEqLyBoaW50In19LApMTDpmdW5jdGlvbiBMTChhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1ifSwKTUQ6ZnVuY3Rpb24gTUQoYSl7dGhpcy5hPWF9LApINzpmdW5jdGlv
-biBINyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifX0sVD17bVE6ZnVuY3Rpb24gbVEoKXt9fSxVPXsKamYo
-YSl7dmFyIHMscixxLHAKaWYoYT09bnVsbClzPW51bGwKZWxzZXtzPUguUUkoW10sdC5mQSkKZm9yKHI9
-Si5JVChhKTtyLkYoKTspe3E9ci5nbCgpCnA9Si5VNihxKQpzLnB1c2gobmV3IFUuU2UoSC5rKHAucShx
-LCJkZXNjcmlwdGlvbiIpKSxILmsocC5xKHEsImhyZWYiKSkpKX19cmV0dXJuIHN9LApOZChhKXt2YXIg
-cyxyCmlmKGE9PW51bGwpcz1udWxsCmVsc2V7cz1ILlFJKFtdLHQuaGgpCmZvcihyPUouSVQoYSk7ci5G
-KCk7KXMucHVzaChVLk5mKHIuZ2woKSkpfXJldHVybiBzfSwKTmYoYSl7dmFyIHM9Si5VNihhKSxyPUgu
-ayhzLnEoYSwiZGVzY3JpcHRpb24iKSkscT1ILlFJKFtdLHQuYUopCmZvcihzPUouSVQodC5XLmEocy5x
-KGEsImVudHJpZXMiKSkpO3MuRigpOylxLnB1c2goVS5SaihzLmdsKCkpKQpyZXR1cm4gbmV3IFUueUQo
-cixxKX0sClJqKGEpe3ZhciBzLHI9Si5VNihhKSxxPUguayhyLnEoYSwiZGVzY3JpcHRpb24iKSkscD1I
-Lmsoci5xKGEsImZ1bmN0aW9uIikpLG89ci5xKGEsImxpbmsiKQppZihvPT1udWxsKW89bnVsbAplbHNl
-e3M9Si5VNihvKQpvPW5ldyBVLk1sKEguayhzLnEobywiaHJlZiIpKSxILlVjKHMucShvLCJsaW5lIikp
-LEguayhzLnEobywicGF0aCIpKSl9cj10LmJNLmEoci5xKGEsImhpbnRBY3Rpb25zIikpCnI9cj09bnVs
-bD9udWxsOkouTTEocixuZXcgVS5hTigpLHQuSikuYnIoMCkKcmV0dXJuIG5ldyBVLndiKHEscCxvLHI9
-PW51bGw/Qy5kbjpyKX0sCmQyOmZ1bmN0aW9uIGQyKGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uYT1h
-Cl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKU2U6ZnVuY3Rpb24gU2UoYSxiKXt0aGlzLmE9
-YQp0aGlzLmI9Yn0sCk1sOmZ1bmN0aW9uIE1sKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9
-Y30sCnlEOmZ1bmN0aW9uIHlEKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp3YjpmdW5jdGlvbiB3Yihh
-LGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKYU46ZnVuY3Rpb24gYU4o
-KXt9LApiMDpmdW5jdGlvbiBiMCgpe319LFc9ewp4Mygpe3JldHVybiB3aW5kb3d9LApacigpe3JldHVy
-biBkb2N1bWVudH0sCko2KGEpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKQppZihhIT1u
-dWxsKUMueG4uc0xVKHMsYSkKcmV0dXJuIHN9LApMaihhKXtyZXR1cm4gQ1NTLmVzY2FwZShhKX0sClU5
-KGEsYixjKXt2YXIgcyxyPWRvY3VtZW50LmJvZHkKci50b1N0cmluZwpzPXQuYWMKcz1uZXcgSC5VNShu
-ZXcgVy5lNyhDLlJZLnI2KHIsYSxiLGMpKSxzLkMoImEyKGxELkUpIikuYShuZXcgVy5DdigpKSxzLkMo
-IlU1PGxELkU+IikpCnJldHVybiB0LmguYShzLmdyOChzKSl9LApyUyhhKXt2YXIgcyxyLHE9ImVsZW1l
-bnQgdGFnIHVuYXZhaWxhYmxlIgp0cnl7cz1KLllFKGEpCnMuZ25zKGEpCnE9cy5nbnMoYSl9Y2F0Y2go
-cil7SC5SdShyKX1yZXR1cm4gcX0sCkMwKGEsYil7YT1hK2ImNTM2ODcwOTExCmE9YSsoKGEmNTI0Mjg3
-KTw8MTApJjUzNjg3MDkxMQpyZXR1cm4gYV5hPj4+Nn0sCnJFKGEsYixjLGQpe3ZhciBzPVcuQzAoVy5D
-MChXLkMwKFcuQzAoMCxhKSxiKSxjKSxkKSxyPXMrKChzJjY3MTA4ODYzKTw8MykmNTM2ODcwOTExCnJe
-PXI+Pj4xMQpyZXR1cm4gcisoKHImMTYzODMpPDwxNSkmNTM2ODcwOTExfSwKVE4oYSxiKXt2YXIgcyxy
-LHE9YS5jbGFzc0xpc3QKZm9yKHM9Yi5sZW5ndGgscj0wO3I8Yi5sZW5ndGg7Yi5sZW5ndGg9PT1zfHwo
-MCxILmxrKShiKSwrK3IpcS5hZGQoYltyXSl9LApKRShhLGIsYyxkLGUpe3ZhciBzPVcuYUYobmV3IFcu
-dk4oYyksdC5CKQppZihzIT1udWxsJiYhMClKLmRaKGEsYixzLCExKQpyZXR1cm4gbmV3IFcueEMoYSxi
-LHMsITEsZS5DKCJ4QzwwPiIpKX0sClR3KGEpe3ZhciBzPVcuSjYobnVsbCkscj10LkYuYSh3aW5kb3cu
-bG9jYXRpb24pCnM9bmV3IFcuSlEobmV3IFcubWsocyxyKSkKcy5DWShhKQpyZXR1cm4gc30sCnFEKGEs
-YixjLGQpe3QuaC5hKGEpCkgubihiKQpILm4oYykKdC5jci5hKGQpCnJldHVybiEwfSwKblooYSxiLGMs
-ZCl7dmFyIHMscixxCnQuaC5hKGEpCkgubihiKQpILm4oYykKcz10LmNyLmEoZCkuYQpyPXMuYQpDLnhu
-LnNMVShyLGMpCnE9ci5ob3N0bmFtZQpzPXMuYgppZighKHE9PXMuaG9zdG5hbWUmJnIucG9ydD09PXMu
-cG9ydCYmci5wcm90b2NvbD09PXMucHJvdG9jb2wpKWlmKHE9PT0iIilpZihyLnBvcnQ9PT0iIil7cz1y
-LnByb3RvY29sCnM9cz09PSI6Inx8cz09PSIifWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSEwCnJl
-dHVybiBzfSwKQmwoKXt2YXIgcz10Lk4scj1QLnRNKEMuUXgscykscT10LmRHLmEobmV3IFcuSUEoKSks
-cD1ILlFJKFsiVEVNUExBVEUiXSx0LnMpCnM9bmV3IFcuY3QocixQLkxzKHMpLFAuTHMocyksUC5Mcyhz
-KSxudWxsKQpzLkNZKG51bGwsbmV3IEgubEooQy5ReCxxLHQuZHYpLHAsbnVsbCkKcmV0dXJuIHN9LApx
-YyhhKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCmlmKCJwb3N0TWVzc2FnZSIgaW4gYSl7cz1X
-LlAxKGEpCnJldHVybiBzfWVsc2UgcmV0dXJuIHQuY2guYShhKX0sClAxKGEpe2lmKGE9PT13aW5kb3cp
-cmV0dXJuIHQuY2kuYShhKQplbHNlIHJldHVybiBuZXcgVy5kVygpfSwKYUYoYSxiKXt2YXIgcz0kLlgz
-CmlmKHM9PT1DLk5VKXJldHVybiBhCnJldHVybiBzLlB5KGEsYil9LApxRTpmdW5jdGlvbiBxRSgpe30s
-CkdoOmZ1bmN0aW9uIEdoKCl7fSwKZlk6ZnVuY3Rpb24gZlkoKXt9LApyWjpmdW5jdGlvbiByWigpe30s
-CkF6OmZ1bmN0aW9uIEF6KCl7fSwKUVA6ZnVuY3Rpb24gUVAoKXt9LApueDpmdW5jdGlvbiBueCgpe30s
-Cm9KOmZ1bmN0aW9uIG9KKCl7fSwKaWQ6ZnVuY3Rpb24gaWQoKXt9LApRRjpmdW5jdGlvbiBRRigpe30s
-Ck5oOmZ1bmN0aW9uIE5oKCl7fSwKYWU6ZnVuY3Rpb24gYWUoKXt9LApJQjpmdW5jdGlvbiBJQigpe30s
-Cm43OmZ1bmN0aW9uIG43KCl7fSwKd3o6ZnVuY3Rpb24gd3ooYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1i
-fSwKY3Y6ZnVuY3Rpb24gY3YoKXt9LApDdjpmdW5jdGlvbiBDdigpe30sCmVhOmZ1bmN0aW9uIGVhKCl7
-fSwKRDA6ZnVuY3Rpb24gRDAoKXt9LApoSDpmdW5jdGlvbiBoSCgpe30sCmg0OmZ1bmN0aW9uIGg0KCl7
-fSwKYnI6ZnVuY3Rpb24gYnIoKXt9LApWYjpmdW5jdGlvbiBWYigpe30sCmZKOmZ1bmN0aW9uIGZKKCl7
-fSwKd2E6ZnVuY3Rpb24gd2EoKXt9LApTZzpmdW5jdGlvbiBTZygpe30sCnU4OmZ1bmN0aW9uIHU4KCl7
-fSwKQWo6ZnVuY3Rpb24gQWooKXt9LAplNzpmdW5jdGlvbiBlNyhhKXt0aGlzLmE9YX0sCktWOmZ1bmN0
-aW9uIEtWKCl7fSwKQkg6ZnVuY3Rpb24gQkgoKXt9LApTTjpmdW5jdGlvbiBTTigpe30sCmV3OmZ1bmN0
-aW9uIGV3KCl7fSwKbHA6ZnVuY3Rpb24gbHAoKXt9LApUYjpmdW5jdGlvbiBUYigpe30sCkl2OmZ1bmN0
-aW9uIEl2KCl7fSwKV1A6ZnVuY3Rpb24gV1AoKXt9LAp5WTpmdW5jdGlvbiB5WSgpe30sCnc2OmZ1bmN0
-aW9uIHc2KCl7fSwKSzU6ZnVuY3Rpb24gSzUoKXt9LApDbTpmdW5jdGlvbiBDbSgpe30sCkNROmZ1bmN0
-aW9uIENRKCl7fSwKdzQ6ZnVuY3Rpb24gdzQoKXt9LApyaDpmdW5jdGlvbiByaCgpe30sCmNmOmZ1bmN0
-aW9uIGNmKCl7fSwKaTc6ZnVuY3Rpb24gaTcoYSl7dGhpcy5hPWF9LApTeTpmdW5jdGlvbiBTeShhKXt0
-aGlzLmE9YX0sCktTOmZ1bmN0aW9uIEtTKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBMzpmdW5jdGlv
-biBBMyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSTQ6ZnVuY3Rpb24gSTQoYSl7dGhpcy5hPWF9LApG
-azpmdW5jdGlvbiBGayhhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApSTzpmdW5jdGlvbiBSTyhhLGIs
-YyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LApDcTpmdW5jdGlvbiBDcShh
-LGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LAp4QzpmdW5jdGlvbiB4
-QyhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5iPWEKXy5jPWIKXy5kPWMKXy5lPWQKXy4kdGk9ZX0sCnZO
-OmZ1bmN0aW9uIHZOKGEpe3RoaXMuYT1hfSwKSlE6ZnVuY3Rpb24gSlEoYSl7dGhpcy5hPWF9LApHbTpm
-dW5jdGlvbiBHbSgpe30sCnZEOmZ1bmN0aW9uIHZEKGEpe3RoaXMuYT1hfSwKVXY6ZnVuY3Rpb24gVXYo
-YSl7dGhpcy5hPWF9LApFZzpmdW5jdGlvbiBFZyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5j
-PWN9LAptNjpmdW5jdGlvbiBtNigpe30sCkVvOmZ1bmN0aW9uIEVvKCl7fSwKV2s6ZnVuY3Rpb24gV2so
-KXt9LApjdDpmdW5jdGlvbiBjdChhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5lPWEKXy5hPWIKXy5iPWMK
-Xy5jPWQKXy5kPWV9LApJQTpmdW5jdGlvbiBJQSgpe30sCk93OmZ1bmN0aW9uIE93KCl7fSwKVzk6ZnVu
-Y3Rpb24gVzkoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPS0xCl8uZD1udWxsCl8uJHRp
-PWN9LApkVzpmdW5jdGlvbiBkVygpe30sCm1rOmZ1bmN0aW9uIG1rKGEsYil7dGhpcy5hPWEKdGhpcy5i
-PWJ9LApLbzpmdW5jdGlvbiBLbyhhKXt0aGlzLmE9YQp0aGlzLmI9MH0sCmZtOmZ1bmN0aW9uIGZtKGEp
-e3RoaXMuYT1hfSwKTGU6ZnVuY3Rpb24gTGUoKXt9LApLNzpmdW5jdGlvbiBLNygpe30sCnJCOmZ1bmN0
-aW9uIHJCKCl7fSwKWFc6ZnVuY3Rpb24gWFcoKXt9LApvYTpmdW5jdGlvbiBvYSgpe319LFg9ewpDTChh
-LGIpe3ZhciBzLHIscSxwLG8sbj1iLnhaKGEpCmIuaEsoYSkKaWYobiE9bnVsbClhPUMueEIueW4oYSxu
-Lmxlbmd0aCkKcz10LnMKcj1ILlFJKFtdLHMpCnE9SC5RSShbXSxzKQpzPWEubGVuZ3RoCmlmKHMhPT0w
-JiZiLnI0KEMueEIuVyhhLDApKSl7aWYoMD49cylyZXR1cm4gSC5PSChhLDApCkMuTm0uaShxLGFbMF0p
-CnA9MX1lbHNle0MuTm0uaShxLCIiKQpwPTB9Zm9yKG89cDtvPHM7KytvKWlmKGIucjQoQy54Qi5XKGEs
-bykpKXtDLk5tLmkocixDLnhCLk5qKGEscCxvKSkKQy5ObS5pKHEsYVtvXSkKcD1vKzF9aWYocDxzKXtD
-Lk5tLmkocixDLnhCLnluKGEscCkpCkMuTm0uaShxLCIiKX1yZXR1cm4gbmV3IFguV0QoYixuLHIscSl9
-LApXRDpmdW5jdGlvbiBXRChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1jCl8uZT1k
-fSwKSTcoYSl7cmV0dXJuIG5ldyBYLmR2KGEpfSwKZHY6ZnVuY3Rpb24gZHYoYSl7dGhpcy5hPWF9fQp2
-YXIgdz1bQixDLEQsRSxGLEgsSixMLE0sTyxQLFIsVCxVLFcsWF0KaHVua0hlbHBlcnMuc2V0RnVuY3Rp
-b25OYW1lc0lmTmVjZXNzYXJ5KHcpCnZhciAkPXt9CkguRksucHJvdG90eXBlPXt9CkouR3YucHJvdG90
-eXBlPXsKRE4oYSxiKXtyZXR1cm4gYT09PWJ9LApnaU8oYSl7cmV0dXJuIEguZVEoYSl9LAp3KGEpe3Jl
-dHVybiJJbnN0YW5jZSBvZiAnIitILmxoKGEpKyInIn0sCmU3KGEsYil7dC5vLmEoYikKdGhyb3cgSC5i
-KFAubHIoYSxiLmdXYSgpLGIuZ25kKCksYi5nVm0oKSkpfX0KSi55RS5wcm90b3R5cGU9ewp3KGEpe3Jl
-dHVybiBTdHJpbmcoYSl9LApnaU8oYSl7cmV0dXJuIGE/NTE5MDE4OjIxODE1OX0sCiRpYTI6MX0KSi53
-ZS5wcm90b3R5cGU9ewpETihhLGIpe3JldHVybiBudWxsPT1ifSwKdyhhKXtyZXR1cm4ibnVsbCJ9LApn
-aU8oYSl7cmV0dXJuIDB9LAokaWM4OjF9CkouTUYucHJvdG90eXBlPXsKZ2lPKGEpe3JldHVybiAwfSwK
-dyhhKXtyZXR1cm4gU3RyaW5nKGEpfSwKJGl2bToxfQpKLmlDLnByb3RvdHlwZT17fQpKLmtkLnByb3Rv
-dHlwZT17fQpKLmM1LnByb3RvdHlwZT17CncoYSl7dmFyIHM9YVskLnooKV0KaWYocz09bnVsbClyZXR1
-cm4gdGhpcy50KGEpCnJldHVybiJKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciAiK0guRWooSi53KHMpKX0s
-CiRpRUg6MX0KSi5qZC5wcm90b3R5cGU9ewpkcihhLGIpe3JldHVybiBuZXcgSC5qVihhLEgudDYoYSku
-QygiQDwxPiIpLktxKGIpLkMoImpWPDEsMj4iKSl9LAppKGEsYil7SC50NihhKS5jLmEoYikKaWYoISFh
-LmZpeGVkJGxlbmd0aClILnYoUC5MNCgiYWRkIikpCmEucHVzaChiKX0sClc0KGEsYil7dmFyIHMKaWYo
-ISFhLmZpeGVkJGxlbmd0aClILnYoUC5MNCgicmVtb3ZlQXQiKSkKcz1hLmxlbmd0aAppZihiPj1zKXRo
-cm93IEguYihQLk83KGIsbnVsbCkpCnJldHVybiBhLnNwbGljZShiLDEpWzBdfSwKVUcoYSxiLGMpe3Zh
-ciBzLHIKSC50NihhKS5DKCJjWDwxPiIpLmEoYykKaWYoISFhLmZpeGVkJGxlbmd0aClILnYoUC5MNCgi
-aW5zZXJ0QWxsIikpClAud0EoYiwwLGEubGVuZ3RoLCJpbmRleCIpCmlmKCF0LlUuYihjKSljPUouUlgo
-YykKcz1KLkhtKGMpCmEubGVuZ3RoPWEubGVuZ3RoK3MKcj1iK3MKdGhpcy5ZVyhhLHIsYS5sZW5ndGgs
-YSxiKQp0aGlzLnZnKGEsYixyLGMpfSwKRlYoYSxiKXt2YXIgcwpILnQ2KGEpLkMoImNYPDE+IikuYShi
-KQppZighIWEuZml4ZWQkbGVuZ3RoKUgudihQLkw0KCJhZGRBbGwiKSkKaWYoQXJyYXkuaXNBcnJheShi
-KSl7dGhpcy5LaChhLGIpCnJldHVybn1mb3Iocz1KLklUKGIpO3MuRigpOylhLnB1c2gocy5nbCgpKX0s
-CktoKGEsYil7dmFyIHMscgp0LmIuYShiKQpzPWIubGVuZ3RoCmlmKHM9PT0wKXJldHVybgppZihhPT09
-Yil0aHJvdyBILmIoUC5hNChhKSkKZm9yKHI9MDtyPHM7KytyKWEucHVzaChiW3JdKX0sCkUyKGEsYixj
-KXt2YXIgcz1ILnQ2KGEpCnJldHVybiBuZXcgSC5sSihhLHMuS3EoYykuQygiMSgyKSIpLmEoYikscy5D
-KCJAPDE+IikuS3EoYykuQygibEo8MSwyPiIpKX0sCmsoYSxiKXt2YXIgcyxyPVAuTzgoYS5sZW5ndGgs
-IiIsITEsdC5OKQpmb3Iocz0wO3M8YS5sZW5ndGg7KytzKXRoaXMuWTUocixzLEguRWooYVtzXSkpCnJl
-dHVybiByLmpvaW4oYil9LAplUihhLGIpe3JldHVybiBILnFDKGEsYixudWxsLEgudDYoYSkuYyl9LApO
-MChhLGIsYyxkKXt2YXIgcyxyLHEKZC5hKGIpCkgudDYoYSkuS3EoZCkuQygiMSgxLDIpIikuYShjKQpz
-PWEubGVuZ3RoCmZvcihyPWIscT0wO3E8czsrK3Epe3I9Yy4kMihyLGFbcV0pCmlmKGEubGVuZ3RoIT09
-cyl0aHJvdyBILmIoUC5hNChhKSl9cmV0dXJuIHJ9LApIdChhLGIpe3ZhciBzLHIscSxwLG8sbj1ILnQ2
-KGEpCm4uQygiYTIoMSkiKS5hKGIpCnM9YS5sZW5ndGgKZm9yKHI9bnVsbCxxPSExLHA9MDtwPHM7Kytw
-KXtvPWFbcF0KaWYoSC5vVChiLiQxKG8pKSl7aWYocSl0aHJvdyBILmIoSC5BbSgpKQpyPW8KcT0hMH1p
-ZihzIT09YS5sZW5ndGgpdGhyb3cgSC5iKFAuYTQoYSkpfWlmKHEpcmV0dXJuIG4uYy5hKHIpCnRocm93
-IEguYihILldwKCkpfSwKRShhLGIpe2lmKGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJuIEguT0goYSxiKQpy
-ZXR1cm4gYVtiXX0sCmd0SChhKXtpZihhLmxlbmd0aD4wKXJldHVybiBhWzBdCnRocm93IEguYihILldw
-KCkpfSwKZ3JaKGEpe3ZhciBzPWEubGVuZ3RoCmlmKHM+MClyZXR1cm4gYVtzLTFdCnRocm93IEguYihI
-LldwKCkpfSwKWVcoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvCkgudDYoYSkuQygiY1g8MT4iKS5hKGQp
-CmlmKCEhYS5pbW11dGFibGUkbGlzdClILnYoUC5MNCgic2V0UmFuZ2UiKSkKUC5qQihiLGMsYS5sZW5n
-dGgpCnM9Yy1iCmlmKHM9PT0wKXJldHVybgpQLmsxKGUsInNraXBDb3VudCIpCmlmKHQuai5iKGQpKXty
-PWQKcT1lfWVsc2V7cj1KLkE1KGQsZSkudHQoMCwhMSkKcT0wfXA9Si5VNihyKQppZihxK3M+cC5nQShy
-KSl0aHJvdyBILmIoSC5hcigpKQppZihxPGIpZm9yKG89cy0xO28+PTA7LS1vKWFbYitvXT1wLnEocixx
-K28pCmVsc2UgZm9yKG89MDtvPHM7KytvKWFbYitvXT1wLnEocixxK28pfSwKdmcoYSxiLGMsZCl7cmV0
-dXJuIHRoaXMuWVcoYSxiLGMsZCwwKX0sClZyKGEsYil7dmFyIHMscgpILnQ2KGEpLkMoImEyKDEpIiku
-YShiKQpzPWEubGVuZ3RoCmZvcihyPTA7cjxzOysrcil7aWYoSC5vVChiLiQxKGFbcl0pKSlyZXR1cm4h
-MAppZihhLmxlbmd0aCE9PXMpdGhyb3cgSC5iKFAuYTQoYSkpfXJldHVybiExfSwKdGcoYSxiKXt2YXIg
-cwpmb3Iocz0wO3M8YS5sZW5ndGg7KytzKWlmKEouUk0oYVtzXSxiKSlyZXR1cm4hMApyZXR1cm4hMX0s
-CmdsMChhKXtyZXR1cm4gYS5sZW5ndGg9PT0wfSwKZ29yKGEpe3JldHVybiBhLmxlbmd0aCE9PTB9LAp3
-KGEpe3JldHVybiBQLngoYSwiWyIsIl0iKX0sCnR0KGEsYil7dmFyIHM9SC5RSShhLnNsaWNlKDApLEgu
-dDYoYSkpCnJldHVybiBzfSwKYnIoYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9LApnbShhKXtyZXR1cm4g
-bmV3IEoubTEoYSxhLmxlbmd0aCxILnQ2KGEpLkMoIm0xPDE+IikpfSwKZ2lPKGEpe3JldHVybiBILmVR
-KGEpfSwKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKc0EoYSxiKXtpZighIWEuZml4ZWQkbGVuZ3RoKUgu
-dihQLkw0KCJzZXQgbGVuZ3RoIikpCmlmKGI8MCl0aHJvdyBILmIoUC5URShiLDAsbnVsbCwibmV3TGVu
-Z3RoIixudWxsKSkKaWYoYj5hLmxlbmd0aClILnQ2KGEpLmMuYShudWxsKQphLmxlbmd0aD1ifSwKcShh
-LGIpe0guSVooYikKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJvdyBILmIoSC51KGEsYikpCnJldHVybiBh
-W2JdfSwKWTUoYSxiLGMpe0gudDYoYSkuYy5hKGMpCmlmKCEhYS5pbW11dGFibGUkbGlzdClILnYoUC5M
-NCgiaW5kZXhlZCBzZXQiKSkKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJvdyBILmIoSC51KGEsYikpCmFb
-Yl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkouUG8ucHJvdG90eXBlPXt9CkoubTEucHJvdG90
-eXBlPXsKZ2woKXtyZXR1cm4gdGhpcy4kdGkuYy5hKHRoaXMuZCl9LApGKCl7dmFyIHMscj10aGlzLHE9
-ci5hLHA9cS5sZW5ndGgKaWYoci5iIT09cCl0aHJvdyBILmIoSC5sayhxKSkKcz1yLmMKaWYocz49cCl7
-ci5zTShudWxsKQpyZXR1cm4hMX1yLnNNKHFbc10pOysrci5jCnJldHVybiEwfSwKc00oYSl7dGhpcy5k
-PXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KSi5xSS5wcm90b3R5cGU9ewp6UShhKXtpZihh
-PjApe2lmKGEhPT0xLzApcmV0dXJuIE1hdGgucm91bmQoYSl9ZWxzZSBpZihhPi0xLzApcmV0dXJuIDAt
-TWF0aC5yb3VuZCgwLWEpCnRocm93IEguYihQLkw0KCIiK2ErIi5yb3VuZCgpIikpfSwKdyhhKXtpZihh
-PT09MCYmMS9hPDApcmV0dXJuIi0wLjAiCmVsc2UgcmV0dXJuIiIrYX0sCmdpTyhhKXt2YXIgcyxyLHEs
-cCxvPWF8MAppZihhPT09bylyZXR1cm4gbyY1MzY4NzA5MTEKcz1NYXRoLmFicyhhKQpyPU1hdGgubG9n
-KHMpLzAuNjkzMTQ3MTgwNTU5OTQ1M3wwCnE9TWF0aC5wb3coMixyKQpwPXM8MT9zL3E6cS9zCnJldHVy
-bigocCo5MDA3MTk5MjU0NzQwOTkyfDApKyhwKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytyKjEy
-NTkmNTM2ODcwOTExfSwKelkoYSxiKXt2YXIgcz1hJWIKaWYocz09PTApcmV0dXJuIDAKaWYocz4wKXJl
-dHVybiBzCnJldHVybiBzK2J9LApCVShhLGIpe3JldHVybihhfDApPT09YT9hL2J8MDp0aGlzLkRKKGEs
-Yil9LApESihhLGIpe3ZhciBzPWEvYgppZihzPj0tMjE0NzQ4MzY0OCYmczw9MjE0NzQ4MzY0NylyZXR1
-cm4gc3wwCmlmKHM+MCl7aWYocyE9PTEvMClyZXR1cm4gTWF0aC5mbG9vcihzKX1lbHNlIGlmKHM+LTEv
-MClyZXR1cm4gTWF0aC5jZWlsKHMpCnRocm93IEguYihQLkw0KCJSZXN1bHQgb2YgdHJ1bmNhdGluZyBk
-aXZpc2lvbiBpcyAiK0guRWoocykrIjogIitILkVqKGEpKyIgfi8gIitiKSl9LAp3RyhhLGIpe3ZhciBz
-CmlmKGE+MClzPXRoaXMucDMoYSxiKQplbHNle3M9Yj4zMT8zMTpiCnM9YT4+cz4+PjB9cmV0dXJuIHN9
-LApiZihhLGIpe2lmKDA+Yil0aHJvdyBILmIoSC50TChiKSkKcmV0dXJuIHRoaXMucDMoYSxiKX0sCnAz
-KGEsYil7cmV0dXJuIGI+MzE/MDphPj4+Yn0sCiRpQ1A6MSwKJGlaWjoxfQpKLmJVLnByb3RvdHlwZT17
-JGlJajoxfQpKLmtELnByb3RvdHlwZT17fQpKLkRyLnByb3RvdHlwZT17Ck8oYSxiKXtpZihiPDApdGhy
-b3cgSC5iKEgudShhLGIpKQppZihiPj1hLmxlbmd0aClILnYoSC51KGEsYikpCnJldHVybiBhLmNoYXJD
-b2RlQXQoYil9LApXKGEsYil7aWYoYj49YS5sZW5ndGgpdGhyb3cgSC5iKEgudShhLGIpKQpyZXR1cm4g
-YS5jaGFyQ29kZUF0KGIpfSwKZGQoYSxiKXtyZXR1cm4gbmV3IEgudW4oYixhLDApfSwKaChhLGIpe3Jl
-dHVybiBhK2J9LApUYyhhLGIpe3ZhciBzPWIubGVuZ3RoLHI9YS5sZW5ndGgKaWYocz5yKXJldHVybiEx
-CnJldHVybiBiPT09dGhpcy55bihhLHItcyl9LAppNyhhLGIsYyxkKXt2YXIgcz1QLmpCKGIsYyxhLmxl
-bmd0aCkscj1hLnN1YnN0cmluZygwLGIpLHE9YS5zdWJzdHJpbmcocykKcmV0dXJuIHIrZCtxfSwKUWko
-YSxiLGMpe3ZhciBzCmlmKGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5URShjLDAsYS5sZW5ndGgs
-bnVsbCxudWxsKSkKcz1jK2IubGVuZ3RoCmlmKHM+YS5sZW5ndGgpcmV0dXJuITEKcmV0dXJuIGI9PT1h
-LnN1YnN0cmluZyhjLHMpfSwKbihhLGIpe3JldHVybiB0aGlzLlFpKGEsYiwwKX0sCk5qKGEsYixjKXty
-ZXR1cm4gYS5zdWJzdHJpbmcoYixQLmpCKGIsYyxhLmxlbmd0aCkpfSwKeW4oYSxiKXtyZXR1cm4gdGhp
-cy5OaihhLGIsbnVsbCl9LApoYyhhKXtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfSwKYlMoYSl7dmFyIHMs
-cixxLHA9YS50cmltKCksbz1wLmxlbmd0aAppZihvPT09MClyZXR1cm4gcAppZih0aGlzLlcocCwwKT09
-PTEzMyl7cz1KLm1tKHAsMSkKaWYocz09PW8pcmV0dXJuIiJ9ZWxzZSBzPTAKcj1vLTEKcT10aGlzLk8o
-cCxyKT09PTEzMz9KLmMxKHAscik6bwppZihzPT09MCYmcT09PW8pcmV0dXJuIHAKcmV0dXJuIHAuc3Vi
-c3RyaW5nKHMscSl9LApUKGEsYil7dmFyIHMscgppZigwPj1iKXJldHVybiIiCmlmKGI9PT0xfHxhLmxl
-bmd0aD09PTApcmV0dXJuIGEKaWYoYiE9PWI+Pj4wKXRocm93IEguYihDLkVxKQpmb3Iocz1hLHI9IiI7
-ITA7KXtpZigoYiYxKT09PTEpcj1zK3IKYj1iPj4+MQppZihiPT09MClicmVhawpzKz1zfXJldHVybiBy
-fSwKWFUoYSxiLGMpe3ZhciBzCmlmKGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5URShjLDAsYS5s
-ZW5ndGgsbnVsbCxudWxsKSkKcz1hLmluZGV4T2YoYixjKQpyZXR1cm4gc30sCk9ZKGEsYil7cmV0dXJu
-IHRoaXMuWFUoYSxiLDApfSwKUGsoYSxiLGMpe3ZhciBzLHIKaWYoYz09bnVsbCljPWEubGVuZ3RoCmVs
-c2UgaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEguYihQLlRFKGMsMCxhLmxlbmd0aCxudWxsLG51bGwp
-KQpzPWIubGVuZ3RoCnI9YS5sZW5ndGgKaWYoYytzPnIpYz1yLXMKcmV0dXJuIGEubGFzdEluZGV4T2Yo
-YixjKX0sCmNuKGEsYil7cmV0dXJuIHRoaXMuUGsoYSxiLG51bGwpfSwKSXMoYSxiLGMpe3ZhciBzPWEu
-bGVuZ3RoCmlmKGM+cyl0aHJvdyBILmIoUC5URShjLDAscyxudWxsLG51bGwpKQpyZXR1cm4gSC5TUShh
-LGIsYyl9LAp0ZyhhLGIpe3JldHVybiB0aGlzLklzKGEsYiwwKX0sCncoYSl7cmV0dXJuIGF9LApnaU8o
-YSl7dmFyIHMscixxCmZvcihzPWEubGVuZ3RoLHI9MCxxPTA7cTxzOysrcSl7cj1yK2EuY2hhckNvZGVB
-dChxKSY1MzY4NzA5MTEKcj1yKygociY1MjQyODcpPDwxMCkmNTM2ODcwOTExCnJePXI+PjZ9cj1yKygo
-ciY2NzEwODg2Myk8PDMpJjUzNjg3MDkxMQpyXj1yPj4xMQpyZXR1cm4gcisoKHImMTYzODMpPDwxNSkm
-NTM2ODcwOTExfSwKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0guSVooYikKaWYoYj49YS5s
-ZW5ndGh8fCExKXRocm93IEguYihILnUoYSxiKSkKcmV0dXJuIGFbYl19LAokaXZYOjEsCiRpcVU6MX0K
-SC5CUi5wcm90b3R5cGU9ewpnbShhKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVybiBuZXcgSC5lVChKLklU
-KHRoaXMuZ09OKCkpLHMuQygiQDwxPiIpLktxKHMuUVsxXSkuQygiZVQ8MSwyPiIpKX0sCmdBKGEpe3Jl
-dHVybiBKLkhtKHRoaXMuZ09OKCkpfSwKZ2wwKGEpe3JldHVybiBKLnVVKHRoaXMuZ09OKCkpfSwKZ29y
-KGEpe3JldHVybiBKLkY3KHRoaXMuZ09OKCkpfSwKZVIoYSxiKXt2YXIgcz1ILkxoKHRoaXMpCnJldHVy
-biBILkdKKEouQTUodGhpcy5nT04oKSxiKSxzLmMscy5RWzFdKX0sCkUoYSxiKXtyZXR1cm4gSC5MaCh0
-aGlzKS5RWzFdLmEoSi5HQSh0aGlzLmdPTigpLGIpKX0sCncoYSl7cmV0dXJuIEoudyh0aGlzLmdPTigp
-KX19CkguZVQucHJvdG90eXBlPXsKRigpe3JldHVybiB0aGlzLmEuRigpfSwKZ2woKXtyZXR1cm4gdGhp
-cy4kdGkuUVsxXS5hKHRoaXMuYS5nbCgpKX0sCiRpQW46MX0KSC5aeS5wcm90b3R5cGU9ewpnT04oKXty
-ZXR1cm4gdGhpcy5hfX0KSC5vbC5wcm90b3R5cGU9eyRpYlE6MX0KSC5VcS5wcm90b3R5cGU9ewpxKGEs
-Yil7cmV0dXJuIHRoaXMuJHRpLlFbMV0uYShKLng5KHRoaXMuYSxILklaKGIpKSl9LApZNShhLGIsYyl7
-dmFyIHM9dGhpcy4kdGkKSi51OSh0aGlzLmEsYixzLmMuYShzLlFbMV0uYShjKSkpfSwKJGliUToxLAok
-aXpNOjF9CkgualYucHJvdG90eXBlPXsKZHIoYSxiKXtyZXR1cm4gbmV3IEgualYodGhpcy5hLHRoaXMu
-JHRpLkMoIkA8MT4iKS5LcShiKS5DKCJqVjwxLDI+IikpfSwKZ09OKCl7cmV0dXJuIHRoaXMuYX19Ckgu
-Yy5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPSJMYXRlSW5pdGlhbGl6YXRpb25FcnJvcjogIit0aGlzLmEK
-cmV0dXJuIHN9fQpILnFqLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKcShh
-LGIpe3JldHVybiBDLnhCLk8odGhpcy5hLEguSVooYikpfX0KSC5iUS5wcm90b3R5cGU9e30KSC5hTC5w
-cm90b3R5cGU9ewpnbShhKXt2YXIgcz10aGlzCnJldHVybiBuZXcgSC5hNyhzLHMuZ0EocyksSC5MaChz
-KS5DKCJhNzxhTC5FPiIpKX0sCmdsMChhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LAprKGEsYil7
-dmFyIHMscixxLHA9dGhpcyxvPXAuZ0EocCkKaWYoYi5sZW5ndGghPT0wKXtpZihvPT09MClyZXR1cm4i
-IgpzPUguRWoocC5FKDAsMCkpCmlmKG8hPT1wLmdBKHApKXRocm93IEguYihQLmE0KHApKQpmb3Iocj1z
-LHE9MTtxPG87KytxKXtyPXIrYitILkVqKHAuRSgwLHEpKQppZihvIT09cC5nQShwKSl0aHJvdyBILmIo
-UC5hNChwKSl9cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09MD9yOnJ9ZWxzZXtmb3IocT0wLHI9IiI7cTxv
-OysrcSl7cis9SC5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ0EocCkpdGhyb3cgSC5iKFAuYTQocCkpfXJl
-dHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfX0sCmV2KGEsYil7cmV0dXJuIHRoaXMuR0coMCxILkxo
-KHRoaXMpLkMoImEyKGFMLkUpIikuYShiKSl9LApFMihhLGIsYyl7dmFyIHM9SC5MaCh0aGlzKQpyZXR1
-cm4gbmV3IEgubEoodGhpcyxzLktxKGMpLkMoIjEoYUwuRSkiKS5hKGIpLHMuQygiQDxhTC5FPiIpLktx
-KGMpLkMoImxKPDEsMj4iKSl9LAplUihhLGIpe3JldHVybiBILnFDKHRoaXMsYixudWxsLEguTGgodGhp
-cykuQygiYUwuRSIpKX0sCnR0KGEsYil7cmV0dXJuIFAuWTEodGhpcywhMCxILkxoKHRoaXMpLkMoImFM
-LkUiKSl9LApicihhKXtyZXR1cm4gdGhpcy50dChhLCEwKX19CkgubkgucHJvdG90eXBlPXsKSGQoYSxi
-LGMsZCl7dmFyIHMscj10aGlzLmIKUC5rMShyLCJzdGFydCIpCnM9dGhpcy5jCmlmKHMhPW51bGwpe1Au
-azEocywiZW5kIikKaWYocj5zKXRocm93IEguYihQLlRFKHIsMCxzLCJzdGFydCIsbnVsbCkpfX0sCmdV
-RCgpe3ZhciBzPUouSG0odGhpcy5hKSxyPXRoaXMuYwppZihyPT1udWxsfHxyPnMpcmV0dXJuIHMKcmV0
-dXJuIHJ9LApnQXMoKXt2YXIgcz1KLkhtKHRoaXMuYSkscj10aGlzLmIKaWYocj5zKXJldHVybiBzCnJl
-dHVybiByfSwKZ0EoYSl7dmFyIHMscj1KLkhtKHRoaXMuYSkscT10aGlzLmIKaWYocT49cilyZXR1cm4g
-MApzPXRoaXMuYwppZihzPT1udWxsfHxzPj1yKXJldHVybiByLXEKaWYodHlwZW9mIHMhPT0ibnVtYmVy
-IilyZXR1cm4gcy5ITigpCnJldHVybiBzLXF9LApFKGEsYil7dmFyIHM9dGhpcyxyPXMuZ0FzKCkrYgpp
-ZihiPDB8fHI+PXMuZ1VEKCkpdGhyb3cgSC5iKFAuQ2YoYixzLCJpbmRleCIsbnVsbCxudWxsKSkKcmV0
-dXJuIEouR0Eocy5hLHIpfSwKZVIoYSxiKXt2YXIgcyxyLHE9dGhpcwpQLmsxKGIsImNvdW50IikKcz1x
-LmIrYgpyPXEuYwppZihyIT1udWxsJiZzPj1yKXJldHVybiBuZXcgSC5NQihxLiR0aS5DKCJNQjwxPiIp
-KQpyZXR1cm4gSC5xQyhxLmEscyxyLHEuJHRpLmMpfSwKdHQoYSxiKXt2YXIgcyxyLHEscD10aGlzLG89
-cC5iLG49cC5hLG09Si5VNihuKSxsPW0uZ0Eobiksaz1wLmMKaWYoayE9bnVsbCYmazxsKWw9awpzPWwt
-bwppZihzPD0wKXtuPUouUWkoMCxwLiR0aS5jKQpyZXR1cm4gbn1yPVAuTzgocyxtLkUobixvKSwhMSxw
-LiR0aS5jKQpmb3IocT0xO3E8czsrK3Epe0MuTm0uWTUocixxLG0uRShuLG8rcSkpCmlmKG0uZ0Eobik8
-bCl0aHJvdyBILmIoUC5hNChwKSl9cmV0dXJuIHJ9fQpILmE3LnByb3RvdHlwZT17CmdsKCl7cmV0dXJu
-IHRoaXMuJHRpLmMuYSh0aGlzLmQpfSwKRigpe3ZhciBzLHI9dGhpcyxxPXIuYSxwPUouVTYocSksbz1w
-LmdBKHEpCmlmKHIuYiE9PW8pdGhyb3cgSC5iKFAuYTQocSkpCnM9ci5jCmlmKHM+PW8pe3Iuc0kobnVs
-bCkKcmV0dXJuITF9ci5zSShwLkUocSxzKSk7KytyLmMKcmV0dXJuITB9LApzSShhKXt0aGlzLmQ9dGhp
-cy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpILmkxLnByb3RvdHlwZT17CmdtKGEpe3ZhciBzPUgu
-TGgodGhpcykKcmV0dXJuIG5ldyBILk1IKEouSVQodGhpcy5hKSx0aGlzLmIscy5DKCJAPDE+IikuS3Eo
-cy5RWzFdKS5DKCJNSDwxLDI+IikpfSwKZ0EoYSl7cmV0dXJuIEouSG0odGhpcy5hKX0sCmdsMChhKXty
-ZXR1cm4gSi51VSh0aGlzLmEpfSwKRShhLGIpe3JldHVybiB0aGlzLmIuJDEoSi5HQSh0aGlzLmEsYikp
-fX0KSC54eS5wcm90b3R5cGU9eyRpYlE6MX0KSC5NSC5wcm90b3R5cGU9ewpGKCl7dmFyIHM9dGhpcyxy
-PXMuYgppZihyLkYoKSl7cy5zSShzLmMuJDEoci5nbCgpKSkKcmV0dXJuITB9cy5zSShudWxsKQpyZXR1
-cm4hMX0sCmdsKCl7cmV0dXJuIHRoaXMuJHRpLlFbMV0uYSh0aGlzLmEpfSwKc0koYSl7dGhpcy5hPXRo
-aXMuJHRpLkMoIjI/IikuYShhKX19CkgubEoucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIEouSG0odGhp
-cy5hKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIpKX19CkguVTUucHJvdG90
-eXBlPXsKZ20oYSl7cmV0dXJuIG5ldyBILlNPKEouSVQodGhpcy5hKSx0aGlzLmIsdGhpcy4kdGkuQygi
-U088MT4iKSl9fQpILlNPLnByb3RvdHlwZT17CkYoKXt2YXIgcyxyCmZvcihzPXRoaXMuYSxyPXRoaXMu
-YjtzLkYoKTspaWYoSC5vVChyLiQxKHMuZ2woKSkpKXJldHVybiEwCnJldHVybiExfSwKZ2woKXtyZXR1
-cm4gdGhpcy5hLmdsKCl9fQpILkFNLnByb3RvdHlwZT17CmVSKGEsYil7UC5rMShiLCJjb3VudCIpCnJl
-dHVybiBuZXcgSC5BTSh0aGlzLmEsdGhpcy5iK2IsSC5MaCh0aGlzKS5DKCJBTTwxPiIpKX0sCmdtKGEp
-e3JldHVybiBuZXcgSC5VMShKLklUKHRoaXMuYSksdGhpcy5iLEguTGgodGhpcykuQygiVTE8MT4iKSl9
-fQpILmQ1LnByb3RvdHlwZT17CmdBKGEpe3ZhciBzPUouSG0odGhpcy5hKS10aGlzLmIKaWYocz49MCly
-ZXR1cm4gcwpyZXR1cm4gMH0sCmVSKGEsYil7UC5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgSC5kNSh0
-aGlzLmEsdGhpcy5iK2IsdGhpcy4kdGkpfSwKJGliUToxfQpILlUxLnByb3RvdHlwZT17CkYoKXt2YXIg
-cyxyCmZvcihzPXRoaXMuYSxyPTA7cjx0aGlzLmI7KytyKXMuRigpCnRoaXMuYj0wCnJldHVybiBzLkYo
-KX0sCmdsKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KSC5NQi5wcm90b3R5cGU9ewpnbShhKXtyZXR1cm4g
-Qy5Hd30sCmdsMChhKXtyZXR1cm4hMH0sCmdBKGEpe3JldHVybiAwfSwKRShhLGIpe3Rocm93IEguYihQ
-LlRFKGIsMCwwLCJpbmRleCIsbnVsbCkpfSwKZVIoYSxiKXtQLmsxKGIsImNvdW50IikKcmV0dXJuIHRo
-aXN9fQpILkZ1LnByb3RvdHlwZT17CkYoKXtyZXR1cm4hMX0sCmdsKCl7dGhyb3cgSC5iKEguV3AoKSl9
-LAokaUFuOjF9CkgudTYucHJvdG90eXBlPXsKZ20oYSl7cmV0dXJuIG5ldyBILkpCKEouSVQodGhpcy5h
-KSx0aGlzLiR0aS5DKCJKQjwxPiIpKX19CkguSkIucHJvdG90eXBlPXsKRigpe3ZhciBzLHIKZm9yKHM9
-dGhpcy5hLHI9dGhpcy4kdGkuYztzLkYoKTspaWYoci5iKHMuZ2woKSkpcmV0dXJuITAKcmV0dXJuITF9
-LApnbCgpe3JldHVybiB0aGlzLiR0aS5jLmEodGhpcy5hLmdsKCkpfSwKJGlBbjoxfQpILlNVLnByb3Rv
-dHlwZT17fQpILlJlLnByb3RvdHlwZT17Clk1KGEsYixjKXtILkxoKHRoaXMpLkMoIlJlLkUiKS5hKGMp
-CnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0IikpfX0KSC53
-Mi5wcm90b3R5cGU9e30KSC53di5wcm90b3R5cGU9ewpnaU8oYSl7dmFyIHM9dGhpcy5faGFzaENvZGUK
-aWYocyE9bnVsbClyZXR1cm4gcwpzPTY2NDU5NypKLmhmKHRoaXMuYSkmNTM2ODcwOTExCnRoaXMuX2hh
-c2hDb2RlPXMKcmV0dXJuIHN9LAp3KGEpe3JldHVybidTeW1ib2woIicrSC5Faih0aGlzLmEpKyciKSd9
-LApETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBILnd2JiZ0aGlz
-LmE9PWIuYX0sCiRpR0Q6MX0KSC5RQy5wcm90b3R5cGU9e30KSC5QRC5wcm90b3R5cGU9e30KSC5XVS5w
-cm90b3R5cGU9ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKdyhhKXtyZXR1cm4gUC5u
-Tyh0aGlzKX0sClk1KGEsYixjKXt2YXIgcz1ILkxoKHRoaXMpCnMuYy5hKGIpCnMuUVsxXS5hKGMpCkgu
-ZGMoKX0sCmdQdShhKXtyZXR1cm4gdGhpcy5xNCgwLEguTGgodGhpcykuQygiTjM8MSwyPiIpKX0sCnE0
-KGEsYil7dmFyIHM9dGhpcwpyZXR1cm4gUC5sMChmdW5jdGlvbigpe3ZhciByPWEKdmFyIHE9MCxwPTEs
-byxuLG0sbCxrCnJldHVybiBmdW5jdGlvbiAkYXN5bmMkZ1B1KGMsZCl7aWYoYz09PTEpe289ZApxPXB9
-d2hpbGUodHJ1ZSlzd2l0Y2gocSl7Y2FzZSAwOm49cy5ndmMoKSxuPW4uZ20obiksbT1ILkxoKHMpLGw9
-bS5RWzFdLG09bS5DKCJAPDE+IikuS3EobCkuQygiTjM8MSwyPiIpCmNhc2UgMjppZighbi5GKCkpe3E9
-MwpicmVha31rPW4uZ2woKQpxPTQKcmV0dXJuIG5ldyBQLk4zKGssbC5hKHMucSgwLGspKSxtKQpjYXNl
-IDQ6cT0yCmJyZWFrCmNhc2UgMzpyZXR1cm4gUC5UaCgpCmNhc2UgMTpyZXR1cm4gUC5ZbShvKX19fSxi
-KX0sCiRpWjA6MX0KSC5MUC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hfSwKeDQoYSl7aWYo
-dHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiExCmlmKCJfX3Byb3RvX18iPT09YSlyZXR1cm4hMQpyZXR1
-cm4gdGhpcy5iLmhhc093blByb3BlcnR5KGEpfSwKcShhLGIpe2lmKCF0aGlzLng0KGIpKXJldHVybiBu
-dWxsCnJldHVybiB0aGlzLmJbSC5uKGIpXX0sCksoYSxiKXt2YXIgcyxyLHEscCxvLG49dGhpcy4kdGkK
-bi5DKCJ+KDEsMikiKS5hKGIpCnM9dGhpcy5jCmZvcihyPXMubGVuZ3RoLHE9dGhpcy5iLG49bi5RWzFd
-LHA9MDtwPHI7KytwKXtvPUgubihzW3BdKQpiLiQyKG8sbi5hKHFbb10pKX19LApndmMoKXtyZXR1cm4g
-bmV3IEguWFIodGhpcyx0aGlzLiR0aS5DKCJYUjwxPiIpKX19CkguWFIucHJvdG90eXBlPXsKZ20oYSl7
-dmFyIHM9dGhpcy5hLmMKcmV0dXJuIG5ldyBKLm0xKHMscy5sZW5ndGgsSC50NihzKS5DKCJtMTwxPiIp
-KX0sCmdBKGEpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9fQpILkxJLnByb3RvdHlwZT17CmdXYSgpe3Zh
-ciBzPXRoaXMuYQpyZXR1cm4gc30sCmduZCgpe3ZhciBzLHIscSxwLG89dGhpcwppZihvLmM9PT0xKXJl
-dHVybiBDLmhVCnM9by5kCnI9cy5sZW5ndGgtby5lLmxlbmd0aC1vLmYKaWYocj09PTApcmV0dXJuIEMu
-aFUKcT1bXQpmb3IocD0wO3A8cjsrK3Ape2lmKHA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMscCkKcS5w
-dXNoKHNbcF0pfXJldHVybiBKLnpDKHEpfSwKZ1ZtKCl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMK
-aWYoay5jIT09MClyZXR1cm4gQy5XTwpzPWsuZQpyPXMubGVuZ3RoCnE9ay5kCnA9cS5sZW5ndGgtci1r
-LmYKaWYocj09PTApcmV0dXJuIEMuV08Kbz1uZXcgSC5ONSh0LmVvKQpmb3Iobj0wO248cjsrK24pe2lm
-KG4+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsbikKbT1zW25dCmw9cCtuCmlmKGw8MHx8bD49cS5sZW5n
-dGgpcmV0dXJuIEguT0gocSxsKQpvLlk1KDAsbmV3IEgud3YobSkscVtsXSl9cmV0dXJuIG5ldyBILlBE
-KG8sdC5nRil9LAokaXZROjF9CkguQ2oucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcwpILm4oYSkKcz10
-aGlzLmEKcy5iPXMuYisiJCIrYQpDLk5tLmkodGhpcy5iLGEpCkMuTm0uaSh0aGlzLmMsYik7KytzLmF9
-LAokUzoxMX0KSC5mOS5wcm90b3R5cGU9ewpxUyhhKXt2YXIgcyxyLHE9dGhpcyxwPW5ldyBSZWdFeHAo
-cS5hKS5leGVjKGEpCmlmKHA9PW51bGwpcmV0dXJuIG51bGwKcz1PYmplY3QuY3JlYXRlKG51bGwpCnI9
-cS5iCmlmKHIhPT0tMSlzLmFyZ3VtZW50cz1wW3IrMV0Kcj1xLmMKaWYociE9PS0xKXMuYXJndW1lbnRz
-RXhwcj1wW3IrMV0Kcj1xLmQKaWYociE9PS0xKXMuZXhwcj1wW3IrMV0Kcj1xLmUKaWYociE9PS0xKXMu
-bWV0aG9kPXBbcisxXQpyPXEuZgppZihyIT09LTEpcy5yZWNlaXZlcj1wW3IrMV0KcmV0dXJuIHN9fQpI
-LlcwLnByb3RvdHlwZT17CncoYSl7dmFyIHM9dGhpcy5iCmlmKHM9PW51bGwpcmV0dXJuIk5vU3VjaE1l
-dGhvZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91
-bmQ6ICciK3MrIicgb24gbnVsbCJ9fQpILmF6LnByb3RvdHlwZT17CncoYSl7dmFyIHMscj10aGlzLHE9
-Ik5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIixwPXIuYgppZihwPT1udWxsKXJl
-dHVybiJOb1N1Y2hNZXRob2RFcnJvcjogIityLmEKcz1yLmMKaWYocz09bnVsbClyZXR1cm4gcStwKyIn
-ICgiK3IuYSsiKSIKcmV0dXJuIHErcCsiJyBvbiAnIitzKyInICgiK3IuYSsiKSJ9fQpILnZWLnByb3Rv
-dHlwZT17CncoYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmxlbmd0aD09PTA/IkVycm9yIjoiRXJyb3I6
-ICIrc319CkgudGUucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iVGhyb3cgb2YgbnVsbCAoJyIrKHRoaXMu
-YT09PW51bGw/Im51bGwiOiJ1bmRlZmluZWQiKSsiJyBmcm9tIEphdmFTY3JpcHQpIn0sCiRpUno6MX0K
-SC5icS5wcm90b3R5cGU9e30KSC5YTy5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHI9dGhpcy5iCmlmKHIh
-PW51bGwpcmV0dXJuIHIKcj10aGlzLmEKcz1yIT09bnVsbCYmdHlwZW9mIHI9PT0ib2JqZWN0Ij9yLnN0
-YWNrOm51bGwKcmV0dXJuIHRoaXMuYj1zPT1udWxsPyIiOnN9LAokaUd6OjF9CkguVHAucHJvdG90eXBl
-PXsKdyhhKXt2YXIgcz10aGlzLmNvbnN0cnVjdG9yLHI9cz09bnVsbD9udWxsOnMubmFtZQpyZXR1cm4i
-Q2xvc3VyZSAnIitILk5RKHI9PW51bGw/InVua25vd24iOnIpKyInIn0sCiRpRUg6MSwKZ0t1KCl7cmV0
-dXJuIHRoaXN9LAokQzoiJDEiLAokUjoxLAokRDpudWxsfQpILkF5LnByb3RvdHlwZT17JEM6IiQwIiwk
-UjowfQpILkUxLnByb3RvdHlwZT17JEM6IiQyIiwkUjoyfQpILmxjLnByb3RvdHlwZT17fQpILnp4LnBy
-b3RvdHlwZT17CncoYSl7dmFyIHM9dGhpcy4kc3RhdGljX25hbWUKaWYocz09bnVsbClyZXR1cm4iQ2xv
-c3VyZSBvZiB1bmtub3duIHN0YXRpYyBtZXRob2QiCnJldHVybiJDbG9zdXJlICciK0guTlEocykrIici
-fX0KSC5yVC5wcm90b3R5cGU9ewpETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIp
-cmV0dXJuITAKaWYoIShiIGluc3RhbmNlb2YgSC5yVCkpcmV0dXJuITEKcmV0dXJuIHRoaXMuJF90YXJn
-ZXQ9PT1iLiRfdGFyZ2V0JiZ0aGlzLmE9PT1iLmF9LApnaU8oYSl7cmV0dXJuKEguQ1UodGhpcy5hKV5I
-LmVRKHRoaXMuJF90YXJnZXQpKT4+PjB9LAp3KGEpe3JldHVybiJDbG9zdXJlICciK3RoaXMuJF9uYW1l
-KyInIG9mICIrKCJJbnN0YW5jZSBvZiAnIitILmxoKHQuSy5hKHRoaXMuYSkpKyInIil9fQpILkVxLnBy
-b3RvdHlwZT17CncoYSl7cmV0dXJuIlJ1bnRpbWVFcnJvcjogIit0aGlzLmF9fQpILmtZLnByb3RvdHlw
-ZT17CncoYSl7cmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrUC5obCh0aGlzLmEpfX0KSC5rci5wcm90
-b3R5cGU9e30KSC5ONS5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hfSwKZ2wwKGEpe3JldHVy
-biB0aGlzLmE9PT0wfSwKZ29yKGEpe3JldHVybiF0aGlzLmdsMCh0aGlzKX0sCmd2Yygpe3JldHVybiBu
-ZXcgSC5pNSh0aGlzLEguTGgodGhpcykuQygiaTU8MT4iKSl9LAp4NChhKXt2YXIgcz10aGlzLmIKaWYo
-cz09bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5YdShzLGEpfSwKcShhLGIpe3ZhciBzLHIscSxwLG89
-dGhpcyxuPW51bGwKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPW8uYgppZihzPT1udWxsKXJldHVybiBu
-CnI9by5qMihzLGIpCnE9cj09bnVsbD9uOnIuYgpyZXR1cm4gcX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVt
-YmVyIiYmKGImMHgzZmZmZmZmKT09PWIpe3A9by5jCmlmKHA9PW51bGwpcmV0dXJuIG4Kcj1vLmoyKHAs
-YikKcT1yPT1udWxsP246ci5iCnJldHVybiBxfWVsc2UgcmV0dXJuIG8uYWEoYil9LAphYShhKXt2YXIg
-cyxyLHE9dGhpcyxwPXEuZAppZihwPT1udWxsKXJldHVybiBudWxsCnM9cS5CdChwLHEueGkoYSkpCnI9
-cS5GaChzLGEpCmlmKHI8MClyZXR1cm4gbnVsbApyZXR1cm4gc1tyXS5ifSwKWTUoYSxiLGMpe3ZhciBz
-LHIscT10aGlzLHA9SC5MaChxKQpwLmMuYShiKQpwLlFbMV0uYShjKQppZih0eXBlb2YgYj09InN0cmlu
-ZyIpe3M9cS5iCnEuRUgocz09bnVsbD9xLmI9cS56SygpOnMsYixjKX1lbHNlIGlmKHR5cGVvZiBiPT0i
-bnVtYmVyIiYmKGImMHgzZmZmZmZmKT09PWIpe3I9cS5jCnEuRUgocj09bnVsbD9xLmM9cS56SygpOnIs
-YixjKX1lbHNlIHEueHcoYixjKX0sCnh3KGEsYil7dmFyIHMscixxLHAsbz10aGlzLG49SC5MaChvKQpu
-LmMuYShhKQpuLlFbMV0uYShiKQpzPW8uZAppZihzPT1udWxsKXM9by5kPW8ueksoKQpyPW8ueGkoYSkK
-cT1vLkJ0KHMscikKaWYocT09bnVsbClvLkVJKHMscixbby5IbihhLGIpXSkKZWxzZXtwPW8uRmgocSxh
-KQppZihwPj0wKXFbcF0uYj1iCmVsc2UgcS5wdXNoKG8uSG4oYSxiKSl9fSwKSyhhLGIpe3ZhciBzLHIs
-cT10aGlzCkguTGgocSkuQygifigxLDIpIikuYShiKQpzPXEuZQpyPXEucgpmb3IoO3MhPW51bGw7KXti
-LiQyKHMuYSxzLmIpCmlmKHIhPT1xLnIpdGhyb3cgSC5iKFAuYTQocSkpCnM9cy5jfX0sCkVIKGEsYixj
-KXt2YXIgcyxyPXRoaXMscT1ILkxoKHIpCnEuYy5hKGIpCnEuUVsxXS5hKGMpCnM9ci5qMihhLGIpCmlm
-KHM9PW51bGwpci5FSShhLGIsci5IbihiLGMpKQplbHNlIHMuYj1jfSwKa3MoKXt0aGlzLnI9dGhpcy5y
-KzEmNjcxMDg4NjN9LApIbihhLGIpe3ZhciBzPXRoaXMscj1ILkxoKHMpLHE9bmV3IEgudmgoci5jLmEo
-YSksci5RWzFdLmEoYikpCmlmKHMuZT09bnVsbClzLmU9cy5mPXEKZWxzZXtyPXMuZgpyLnRvU3RyaW5n
-CnEuZD1yCnMuZj1yLmM9cX0rK3MuYQpzLmtzKCkKcmV0dXJuIHF9LAp4aShhKXtyZXR1cm4gSi5oZihh
-KSYweDNmZmZmZmZ9LApGaChhLGIpe3ZhciBzLHIKaWYoYT09bnVsbClyZXR1cm4tMQpzPWEubGVuZ3Ro
-CmZvcihyPTA7cjxzOysrcilpZihKLlJNKGFbcl0uYSxiKSlyZXR1cm4gcgpyZXR1cm4tMX0sCncoYSl7
-cmV0dXJuIFAubk8odGhpcyl9LApqMihhLGIpe3JldHVybiBhW2JdfSwKQnQoYSxiKXtyZXR1cm4gYVti
-XX0sCkVJKGEsYixjKXthW2JdPWN9LApybihhLGIpe2RlbGV0ZSBhW2JdfSwKWHUoYSxiKXtyZXR1cm4g
-dGhpcy5qMihhLGIpIT1udWxsfSwKeksoKXt2YXIgcz0iPG5vbi1pZGVudGlmaWVyLWtleT4iLHI9T2Jq
-ZWN0LmNyZWF0ZShudWxsKQp0aGlzLkVJKHIscyxyKQp0aGlzLnJuKHIscykKcmV0dXJuIHJ9LAokaUZv
-OjF9CkgudmgucHJvdG90eXBlPXt9CkguaTUucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIHRoaXMuYS5h
-fSwKZ2wwKGEpe3JldHVybiB0aGlzLmEuYT09PTB9LApnbShhKXt2YXIgcz10aGlzLmEscj1uZXcgSC5O
-NihzLHMucix0aGlzLiR0aS5DKCJONjwxPiIpKQpyLmM9cy5lCnJldHVybiByfSwKdGcoYSxiKXtyZXR1
-cm4gdGhpcy5hLng0KGIpfX0KSC5ONi5wcm90b3R5cGU9ewpnbCgpe3JldHVybiB0aGlzLmR9LApGKCl7
-dmFyIHMscj10aGlzLHE9ci5hCmlmKHIuYiE9PXEucil0aHJvdyBILmIoUC5hNChxKSkKcz1yLmMKaWYo
-cz09bnVsbCl7ci5zcVkobnVsbCkKcmV0dXJuITF9ZWxzZXtyLnNxWShzLmEpCnIuYz1zLmMKcmV0dXJu
-ITB9fSwKc3FZKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9CkguZEMucHJv
-dG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYShhKX0sCiRTOjR9Ckgud04ucHJvdG90eXBlPXsKJDIo
-YSxiKXtyZXR1cm4gdGhpcy5hKGEsYil9LAokUzo1MH0KSC5WWC5wcm90b3R5cGU9ewokMShhKXtyZXR1
-cm4gdGhpcy5hKEgubihhKSl9LAokUzoyMX0KSC5WUi5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJSZWdF
-eHAvIit0aGlzLmErIi8iK3RoaXMuYi5mbGFnc30sCmdIYygpe3ZhciBzPXRoaXMscj1zLmMKaWYociE9
-bnVsbClyZXR1cm4gcgpyPXMuYgpyZXR1cm4gcy5jPUgudjQocy5hLHIubXVsdGlsaW5lLCFyLmlnbm9y
-ZUNhc2Usci51bmljb2RlLHIuZG90QWxsLCEwKX0sCmRkKGEsYil7cmV0dXJuIG5ldyBILktXKHRoaXMs
-YiwwKX0sClVaKGEsYil7dmFyIHMscj10LksuYSh0aGlzLmdIYygpKQpyLmxhc3RJbmRleD1iCnM9ci5l
-eGVjKGEpCmlmKHM9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIG5ldyBILkVLKHMpfSwKJGl2WDoxLAok
-aXdMOjF9CkguRUsucHJvdG90eXBlPXsKcShhLGIpe3ZhciBzCkguSVooYikKcz10aGlzLmIKaWYoYj49
-cy5sZW5ndGgpcmV0dXJuIEguT0gocyxiKQpyZXR1cm4gc1tiXX0sCiRpT2Q6MSwKJGlpYjoxfQpILktX
-LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgSC5QYih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9fQpI
-LlBiLnByb3RvdHlwZT17CmdsKCl7cmV0dXJuIHQuY3ouYSh0aGlzLmQpfSwKRigpe3ZhciBzLHIscSxw
-LG8sbixtPXRoaXMsbD1tLmIKaWYobD09bnVsbClyZXR1cm4hMQpzPW0uYwpyPWwubGVuZ3RoCmlmKHM8
-PXIpe3E9bS5hCnA9cS5VWihsLHMpCmlmKHAhPW51bGwpe20uZD1wCnM9cC5iCm89cy5pbmRleApuPW8r
-c1swXS5sZW5ndGgKaWYobz09PW4pe2lmKHEuYi51bmljb2RlKXtzPW0uYwpxPXMrMQppZihxPHIpe3M9
-Qy54Qi5PKGwscykKaWYocz49NTUyOTYmJnM8PTU2MzE5KXtzPUMueEIuTyhsLHEpCnM9cz49NTYzMjAm
-JnM8PTU3MzQzfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExCm49KHM/bisxOm4pKzF9bS5jPW4K
-cmV0dXJuITB9fW0uYj1tLmQ9bnVsbApyZXR1cm4hMX0sCiRpQW46MX0KSC50US5wcm90b3R5cGU9ewpx
-KGEsYil7SC5JWihiKQppZihiIT09MClILnYoUC5PNyhiLG51bGwpKQpyZXR1cm4gdGhpcy5jfSwKJGlP
-ZDoxfQpILnVuLnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgSC5TZCh0aGlzLmEsdGhpcy5iLHRo
-aXMuYyl9fQpILlNkLnByb3RvdHlwZT17CkYoKXt2YXIgcyxyLHE9dGhpcyxwPXEuYyxvPXEuYixuPW8u
-bGVuZ3RoLG09cS5hLGw9bS5sZW5ndGgKaWYocCtuPmwpe3EuZD1udWxsCnJldHVybiExfXM9bS5pbmRl
-eE9mKG8scCkKaWYoczwwKXtxLmM9bCsxCnEuZD1udWxsCnJldHVybiExfXI9cytuCnEuZD1uZXcgSC50
-UShzLG8pCnEuYz1yPT09cS5jP3IrMTpyCnJldHVybiEwfSwKZ2woKXt2YXIgcz10aGlzLmQKcy50b1N0
-cmluZwpyZXR1cm4gc30sCiRpQW46MX0KSC5FVC5wcm90b3R5cGU9eyRpRVQ6MSwkaUFTOjF9CkguTFou
-cHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKJGlYajoxfQpILkRnLnByb3RvdHlwZT17
-CnEoYSxiKXtILklaKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXtI
-LnJWKGMpCkgub2QoYixhLGEubGVuZ3RoKQphW2JdPWN9LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpI
-LlBnLnByb3RvdHlwZT17Clk1KGEsYixjKXtILklaKGMpCkgub2QoYixhLGEubGVuZ3RoKQphW2JdPWN9
-LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpILnhqLnByb3RvdHlwZT17CnEoYSxiKXtILklaKGIpCkgu
-b2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguZEUucHJvdG90eXBlPXsKcShhLGIpe0guSVoo
-YikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5aQS5wcm90b3R5cGU9ewpxKGEsYil7
-SC5JWihiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILmRULnByb3RvdHlwZT17CnEo
-YSxiKXtILklaKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguUHEucHJvdG90eXBl
-PXsKcShhLGIpe0guSVooYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5lRS5wcm90
-b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9LApxKGEsYil7SC5JWihiKQpILm9kKGIsYSxhLmxl
-bmd0aCkKcmV0dXJuIGFbYl19fQpILlY2LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH0s
-CnEoYSxiKXtILklaKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX0sCiRpbjY6MX0KSC5S
-Ry5wcm90b3R5cGU9e30KSC5WUC5wcm90b3R5cGU9e30KSC5XQi5wcm90b3R5cGU9e30KSC5aRy5wcm90
-b3R5cGU9e30KSC5KYy5wcm90b3R5cGU9ewpDKGEpe3JldHVybiBILmNFKHYudHlwZVVuaXZlcnNlLHRo
-aXMsYSl9LApLcShhKXtyZXR1cm4gSC52NSh2LnR5cGVVbml2ZXJzZSx0aGlzLGEpfX0KSC5HLnByb3Rv
-dHlwZT17fQpILmtTLnByb3RvdHlwZT17CncoYSl7cmV0dXJuIHRoaXMuYX19CkguaU0ucHJvdG90eXBl
-PXskaUV6OjF9ClAudGgucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9dGhpcy5hLHI9cy5hCnMuYT1udWxs
-CnIuJDAoKX0sCiRTOjEzfQpQLmhhLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIKdGhpcy5hLmE9dC5N
-LmEoYSkKcz10aGlzLmIKcj10aGlzLmMKcy5maXJzdENoaWxkP3MucmVtb3ZlQ2hpbGQocik6cy5hcHBl
-bmRDaGlsZChyKX0sCiRTOjQxfQpQLlZzLnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLiQwKCl9LAokUzox
-NX0KUC5GdC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6MTV9ClAuVzMucHJvdG90eXBl
-PXsKQ1koYSxiKXtpZihzZWxmLnNldFRpbWVvdXQhPW51bGwpc2VsZi5zZXRUaW1lb3V0KEgudFIobmV3
-IFAueUgodGhpcyxiKSwwKSxhKQplbHNlIHRocm93IEguYihQLkw0KCJgc2V0VGltZW91dCgpYCBub3Qg
-Zm91bmQuIikpfX0KUC55SC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYi4kMCgpfSwKJFM6MH0KUC5paC5w
-cm90b3R5cGU9ewphTShhLGIpe3ZhciBzLHI9dGhpcyxxPXIuJHRpCnEuQygiMS8/IikuYShiKQppZihi
-PT1udWxsKWI9cS5jLmEoYikKaWYoIXIuYilyLmEuWGYoYikKZWxzZXtzPXIuYQppZihxLkMoImI4PDE+
-IikuYihiKSlzLmNVKGIpCmVsc2Ugcy5YMihxLmMuYShiKSl9fSwKdzAoYSxiKXt2YXIgcz10aGlzLmEK
-aWYodGhpcy5iKXMuWkwoYSxiKQplbHNlIHMuTmsoYSxiKX19ClAuV00ucHJvdG90eXBlPXsKJDEoYSl7
-cmV0dXJuIHRoaXMuYS4kMigwLGEpfSwKJFM6NTF9ClAuU1gucHJvdG90eXBlPXsKJDIoYSxiKXt0aGlz
-LmEuJDIoMSxuZXcgSC5icShhLHQubC5hKGIpKSl9LAokUzo1M30KUC5Hcy5wcm90b3R5cGU9ewokMihh
-LGIpe3RoaXMuYShILklaKGEpLGIpfSwKJFM6NDV9ClAuRnkucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4i
-SXRlcmF0aW9uTWFya2VyKCIrdGhpcy5iKyIsICIrSC5Faih0aGlzLmEpKyIpIn19ClAuR1YucHJvdG90
-eXBlPXsKZ2woKXt2YXIgcz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4gdGhpcy4kdGkuYy5hKHRoaXMu
-YikKcmV0dXJuIHMuZ2woKX0sCkYoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzCmZvcihzPW0uJHRpLkMo
-IkFuPDE+Iik7ITA7KXtyPW0uYwppZihyIT1udWxsKWlmKHIuRigpKXJldHVybiEwCmVsc2UgbS5zWDko
-bnVsbCkKcT1mdW5jdGlvbihhLGIsYyl7dmFyIGwsaz1iCndoaWxlKHRydWUpdHJ5e3JldHVybiBhKGss
-bCl9Y2F0Y2goail7bD1qCms9Y319KG0uYSwwLDEpCmlmKHEgaW5zdGFuY2VvZiBQLkZ5KXtwPXEuYgpp
-ZihwPT09Mil7bz1tLmQKaWYobz09bnVsbHx8by5sZW5ndGg9PT0wKXttLnNFQyhudWxsKQpyZXR1cm4h
-MX1pZigwPj1vLmxlbmd0aClyZXR1cm4gSC5PSChvLC0xKQptLmE9by5wb3AoKQpjb250aW51ZX1lbHNl
-e3I9cS5hCmlmKHA9PT0zKXRocm93IHIKZWxzZXtuPXMuYShKLklUKHIpKQppZihuIGluc3RhbmNlb2Yg
-UC5HVil7cj1tLmQKaWYocj09bnVsbClyPW0uZD1bXQpDLk5tLmkocixtLmEpCm0uYT1uLmEKY29udGlu
-dWV9ZWxzZXttLnNYOShuKQpjb250aW51ZX19fX1lbHNle20uc0VDKHEpCnJldHVybiEwfX1yZXR1cm4h
-MX0sCnNFQyhhKXt0aGlzLmI9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKc1g5KGEpe3RoaXMuYz10aGlz
-LiR0aS5DKCJBbjwxPj8iKS5hKGEpfSwKJGlBbjoxfQpQLnE0LnByb3RvdHlwZT17CmdtKGEpe3JldHVy
-biBuZXcgUC5HVih0aGlzLmEoKSx0aGlzLiR0aS5DKCJHVjwxPiIpKX19ClAuQ3cucHJvdG90eXBlPXsK
-dyhhKXtyZXR1cm4gSC5Faih0aGlzLmEpfSwKJGlYUzoxLApnSUkoKXtyZXR1cm4gdGhpcy5ifX0KUC5Q
-Zi5wcm90b3R5cGU9ewp3MChhLGIpe3ZhciBzCkguY2IoYSwiZXJyb3IiLHQuSykKcz10aGlzLmEKaWYo
-KHMuYSYzMCkhPT0wKXRocm93IEguYihQLlBWKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKSkKaWYo
-Yj09bnVsbCliPVAudjAoYSkKcy5OayhhLGIpfSwKcG0oYSl7cmV0dXJuIHRoaXMudzAoYSxudWxsKX19
-ClAuWmYucHJvdG90eXBlPXsKYU0oYSxiKXt2YXIgcyxyPXRoaXMuJHRpCnIuQygiMS8/IikuYShiKQpz
-PXRoaXMuYQppZigocy5hJjMwKSE9PTApdGhyb3cgSC5iKFAuUFYoIkZ1dHVyZSBhbHJlYWR5IGNvbXBs
-ZXRlZCIpKQpzLlhmKHIuQygiMS8iKS5hKGIpKX19ClAuRmUucHJvdG90eXBlPXsKSFIoYSl7aWYoKHRo
-aXMuYyYxNSkhPT02KXJldHVybiEwCnJldHVybiB0aGlzLmIuYi5idih0LmFsLmEodGhpcy5kKSxhLmEs
-dC55LHQuSyl9LApLdyhhKXt2YXIgcyxyPXRoaXMscT1yLmUscD1udWxsLG89dC56LG49dC5LLG09YS5h
-LGw9ci5iLmIKaWYodC5rLmIocSkpcD1sLnJwKHEsbSxhLmIsbyxuLHQubCkKZWxzZSBwPWwuYnYodC52
-LmEocSksbSxvLG4pCnRyeXtvPXIuJHRpLkMoIjIvIikuYShwKQpyZXR1cm4gb31jYXRjaChzKXtpZih0
-LmVLLmIoSC5SdShzKSkpe2lmKChyLmMmMSkhPT0wKXRocm93IEguYihQLnhZKCJUaGUgZXJyb3IgaGFu
-ZGxlciBvZiBGdXR1cmUudGhlbiBtdXN0IHJldHVybiBhIHZhbHVlIG9mIHRoZSByZXR1cm5lZCBmdXR1
-cmUncyB0eXBlIiwib25FcnJvciIpKQp0aHJvdyBILmIoUC54WSgiVGhlIGVycm9yIGhhbmRsZXIgb2Yg
-RnV0dXJlLmNhdGNoRXJyb3IgbXVzdCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZnV0dXJlJ3MgdHlwZSIs
-Im9uRXJyb3IiKSl9ZWxzZSB0aHJvdyBzfX19ClAudnMucHJvdG90eXBlPXsKU3EoYSxiLGMpe3ZhciBz
-LHIscSxwPXRoaXMuJHRpCnAuS3EoYykuQygiMS8oMikiKS5hKGEpCnM9JC5YMwppZihzPT09Qy5OVSl7
-aWYoYiE9bnVsbCYmIXQuay5iKGIpJiYhdC52LmIoYikpdGhyb3cgSC5iKFAuTDMoYiwib25FcnJvciIs
-dS5jKSl9ZWxzZXtjLkMoIkA8MC8+IikuS3EocC5jKS5DKCIxKDIpIikuYShhKQppZihiIT1udWxsKWI9
-UC5WSChiLHMpfXI9bmV3IFAudnMocyxjLkMoInZzPDA+IikpCnE9Yj09bnVsbD8xOjMKdGhpcy54Zihu
-ZXcgUC5GZShyLHEsYSxiLHAuQygiQDwxPiIpLktxKGMpLkMoIkZlPDEsMj4iKSkpCnJldHVybiByfSwK
-VzcoYSxiKXtyZXR1cm4gdGhpcy5TcShhLG51bGwsYil9LApRZChhLGIsYyl7dmFyIHMscj10aGlzLiR0
-aQpyLktxKGMpLkMoIjEvKDIpIikuYShhKQpzPW5ldyBQLnZzKCQuWDMsYy5DKCJ2czwwPiIpKQp0aGlz
-LnhmKG5ldyBQLkZlKHMsMTksYSxiLHIuQygiQDwxPiIpLktxKGMpLkMoIkZlPDEsMj4iKSkpCnJldHVy
-biBzfSwKUDkoYSl7dGhpcy5hPXRoaXMuYSYxfDE2CnRoaXMuYz1hfSwKdWcoYSl7dGhpcy5hPWEuYSYz
-MHx0aGlzLmEmMQp0aGlzLmM9YS5jfSwKeGYoYSl7dmFyIHMscj10aGlzLHE9ci5hCmlmKHE8PTMpe2Eu
-YT10LmUuYShyLmMpCnIuYz1hfWVsc2V7aWYoKHEmNCkhPT0wKXtzPXQuYy5hKHIuYykKaWYoKHMuYSYy
-NCk9PT0wKXtzLnhmKGEpCnJldHVybn1yLnVnKHMpfVAuVGsobnVsbCxudWxsLHIuYix0Lk0uYShuZXcg
-UC5kYShyLGEpKSl9fSwKalEoYSl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPXt9CmwuYT1hCmlmKGE9
-PW51bGwpcmV0dXJuCnM9bS5hCmlmKHM8PTMpe3I9dC5lLmEobS5jKQptLmM9YQppZihyIT1udWxsKXtx
-PWEuYQpmb3IocD1hO3EhPW51bGw7cD1xLHE9bylvPXEuYQpwLmE9cn19ZWxzZXtpZigocyY0KSE9PTAp
-e249dC5jLmEobS5jKQppZigobi5hJjI0KT09PTApe24ualEoYSkKcmV0dXJufW0udWcobil9bC5hPW0u
-TjgoYSkKUC5UayhudWxsLG51bGwsbS5iLHQuTS5hKG5ldyBQLm9RKGwsbSkpKX19LAphaCgpe3ZhciBz
-PXQuZS5hKHRoaXMuYykKdGhpcy5jPW51bGwKcmV0dXJuIHRoaXMuTjgocyl9LApOOChhKXt2YXIgcyxy
-LHEKZm9yKHM9YSxyPW51bGw7cyE9bnVsbDtyPXMscz1xKXtxPXMuYQpzLmE9cn1yZXR1cm4gcn0sCmVj
-KGEpe3ZhciBzLHIscSxwPXRoaXMKcC5hXj0yCnRyeXthLlNxKG5ldyBQLnBWKHApLG5ldyBQLlU3KHAp
-LHQuUCl9Y2F0Y2gocSl7cz1ILlJ1KHEpCnI9SC50cyhxKQpQLnJiKG5ldyBQLnZyKHAscyxyKSl9fSwK
-WDIoYSl7dmFyIHMscj10aGlzCnIuJHRpLmMuYShhKQpzPXIuYWgoKQpyLmE9OApyLmM9YQpQLkhaKHIs
-cyl9LApaTChhLGIpe3ZhciBzCnQubC5hKGIpCnM9dGhpcy5haCgpCnRoaXMuUDkoUC5UbChhLGIpKQpQ
-LkhaKHRoaXMscyl9LApYZihhKXt2YXIgcz10aGlzLiR0aQpzLkMoIjEvIikuYShhKQppZihzLkMoImI4
-PDE+IikuYihhKSl7dGhpcy5jVShhKQpyZXR1cm59dGhpcy53VShzLmMuYShhKSl9LAp3VShhKXt2YXIg
-cz10aGlzCnMuJHRpLmMuYShhKQpzLmFePTIKUC5UayhudWxsLG51bGwscy5iLHQuTS5hKG5ldyBQLnJ0
-KHMsYSkpKX0sCmNVKGEpe3ZhciBzPXRoaXMscj1zLiR0aQpyLkMoImI4PDE+IikuYShhKQppZihyLmIo
-YSkpe2lmKChhLmEmMTYpIT09MCl7cy5hXj0yClAuVGsobnVsbCxudWxsLHMuYix0Lk0uYShuZXcgUC5L
-RihzLGEpKSl9ZWxzZSBQLkE5KGEscykKcmV0dXJufXMuZWMoYSl9LApOayhhLGIpe3RoaXMuYV49MgpQ
-LlRrKG51bGwsbnVsbCx0aGlzLmIsdC5NLmEobmV3IFAuWkwodGhpcyxhLGIpKSl9LAokaWI4OjF9ClAu
-ZGEucHJvdG90eXBlPXsKJDAoKXtQLkhaKHRoaXMuYSx0aGlzLmIpfSwKJFM6MH0KUC5vUS5wcm90b3R5
-cGU9ewokMCgpe1AuSFoodGhpcy5iLHRoaXMuYS5hKX0sCiRTOjB9ClAucFYucHJvdG90eXBlPXsKJDEo
-YSl7dmFyIHMscixxLHA9dGhpcy5hCnAuYV49Mgp0cnl7cC5YMihwLiR0aS5jLmEoYSkpfWNhdGNoKHEp
-e3M9SC5SdShxKQpyPUgudHMocSkKcC5aTChzLHIpfX0sCiRTOjEzfQpQLlU3LnByb3RvdHlwZT17CiQy
-KGEsYil7dGhpcy5hLlpMKHQuSy5hKGEpLHQubC5hKGIpKX0sCiRTOjM0fQpQLnZyLnByb3RvdHlwZT17
-CiQwKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KUC5ydC5wcm90b3R5cGU9ewokMCgp
-e3RoaXMuYS5YMih0aGlzLmIpfSwKJFM6MH0KUC5LRi5wcm90b3R5cGU9ewokMCgpe1AuQTkodGhpcy5i
-LHRoaXMuYSl9LAokUzowfQpQLlpMLnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlz
-LmMpfSwKJFM6MH0KUC5SVC5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1u
-dWxsCnRyeXtxPW0uYS5hCmw9cS5iLmIuenoodC5mTy5hKHEuZCksdC56KX1jYXRjaChwKXtzPUguUnUo
-cCkKcj1ILnRzKHApCnE9bS5jJiZ0Lm4uYShtLmIuYS5jKS5hPT09cwpvPW0uYQppZihxKW8uYz10Lm4u
-YShtLmIuYS5jKQplbHNlIG8uYz1QLlRsKHMscikKby5iPSEwCnJldHVybn1pZihsIGluc3RhbmNlb2Yg
-UC52cyYmKGwuYSYyNCkhPT0wKXtpZigobC5hJjE2KSE9PTApe3E9bS5hCnEuYz10Lm4uYShsLmMpCnEu
-Yj0hMH1yZXR1cm59aWYodC5pLmIobCkpe249bS5iLmEKcT1tLmEKcS5jPWwuVzcobmV3IFAualoobiks
-dC56KQpxLmI9ITF9fSwKJFM6MH0KUC5qWi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hfSwK
-JFM6Mjl9ClAucnEucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyLHEscCxvLG4sbSxsCnRyeXtxPXRoaXMu
-YQpwPXEuYQpvPXAuJHRpCm49by5jCm09bi5hKHRoaXMuYikKcS5jPXAuYi5iLmJ2KG8uQygiMi8oMSki
-KS5hKHAuZCksbSxvLkMoIjIvIiksbil9Y2F0Y2gobCl7cz1ILlJ1KGwpCnI9SC50cyhsKQpxPXRoaXMu
-YQpxLmM9UC5UbChzLHIpCnEuYj0hMH19LAokUzowfQpQLlJXLnByb3RvdHlwZT17CiQwKCl7dmFyIHMs
-cixxLHAsbyxuLG09dGhpcwp0cnl7cz10Lm4uYShtLmEuYS5jKQpwPW0uYgppZihwLmEuSFIocykmJnAu
-YS5lIT1udWxsKXtwLmM9cC5hLkt3KHMpCnAuYj0hMX19Y2F0Y2gobyl7cj1ILlJ1KG8pCnE9SC50cyhv
-KQpwPXQubi5hKG0uYS5hLmMpCm49bS5iCmlmKHAuYT09PXIpbi5jPXAKZWxzZSBuLmM9UC5UbChyLHEp
-Cm4uYj0hMH19LAokUzowfQpQLk9NLnByb3RvdHlwZT17fQpQLnFoLnByb3RvdHlwZT17CmdBKGEpe3Zh
-ciBzLHIscT10aGlzLHA9e30sbz1uZXcgUC52cygkLlgzLHQuZkopCnAuYT0wCnM9SC5MaChxKQpyPXMu
-QygifigxKT8iKS5hKG5ldyBQLkI1KHAscSkpCnQuWi5hKG5ldyBQLnVPKHAsbykpClcuSkUocS5hLHEu
-YixyLCExLHMuYykKcmV0dXJuIG99fQpQLkI1LnByb3RvdHlwZT17CiQxKGEpe0guTGgodGhpcy5iKS5j
-LmEoYSk7Kyt0aGlzLmEuYX0sCiRTKCl7cmV0dXJuIEguTGgodGhpcy5iKS5DKCJ+KDEpIil9fQpQLnVP
-LnByb3RvdHlwZT17CiQwKCl7dmFyIHM9dGhpcy5iLHI9cy4kdGkscT1yLkMoIjEvIikuYSh0aGlzLmEu
-YSkscD1zLmFoKCkKci5jLmEocSkKcy5hPTgKcy5jPXEKUC5IWihzLHApfSwKJFM6MH0KUC5NTy5wcm90
-b3R5cGU9e30KUC5rVC5wcm90b3R5cGU9e30KUC54SS5wcm90b3R5cGU9e30KUC5tMC5wcm90b3R5cGU9
-eyRpUW06MX0KUC5Fdi5wcm90b3R5cGU9ewokMCgpe3ZhciBzPXQuSy5hKEguYih0aGlzLmEpKQpzLnN0
-YWNrPXRoaXMuYi53KDApCnRocm93IHN9LAokUzowfQpQLkppLnByb3RvdHlwZT17CmJIKGEpe3ZhciBz
-LHIscSxwLG8KdC5NLmEoYSkKdHJ5e2lmKEMuTlU9PT0kLlgzKXthLiQwKCkKcmV0dXJufVAuVDgobnVs
-bCxudWxsLHRoaXMsYSx0LkgpfWNhdGNoKHEpe3M9SC5SdShxKQpyPUgudHMocSkKcD10LksuYShzKQpv
-PXQubC5hKHIpClAuU2kocCxvKX19LApEbChhLGIsYyl7dmFyIHMscixxLHAsbwpjLkMoIn4oMCkiKS5h
-KGEpCmMuYShiKQp0cnl7aWYoQy5OVT09PSQuWDMpe2EuJDEoYikKcmV0dXJufVAueXYobnVsbCxudWxs
-LHRoaXMsYSxiLHQuSCxjKX1jYXRjaChxKXtzPUguUnUocSkKcj1ILnRzKHEpCnA9dC5LLmEocykKbz10
-LmwuYShyKQpQLlNpKHAsbyl9fSwKR1koYSl7cmV0dXJuIG5ldyBQLlZwKHRoaXMsdC5NLmEoYSkpfSwK
-UHkoYSxiKXtyZXR1cm4gbmV3IFAuT1IodGhpcyxiLkMoIn4oMCkiKS5hKGEpLGIpfSwKcShhLGIpe3Jl
-dHVybiBudWxsfSwKenooYSxiKXtiLkMoIjAoKSIpLmEoYSkKaWYoJC5YMz09PUMuTlUpcmV0dXJuIGEu
-JDAoKQpyZXR1cm4gUC5UOChudWxsLG51bGwsdGhpcyxhLGIpfSwKYnYoYSxiLGMsZCl7Yy5DKCJAPDA+
-IikuS3EoZCkuQygiMSgyKSIpLmEoYSkKZC5hKGIpCmlmKCQuWDM9PT1DLk5VKXJldHVybiBhLiQxKGIp
-CnJldHVybiBQLnl2KG51bGwsbnVsbCx0aGlzLGEsYixjLGQpfSwKcnAoYSxiLGMsZCxlLGYpe2QuQygi
-QDwwPiIpLktxKGUpLktxKGYpLkMoIjEoMiwzKSIpLmEoYSkKZS5hKGIpCmYuYShjKQppZigkLlgzPT09
-Qy5OVSlyZXR1cm4gYS4kMihiLGMpCnJldHVybiBQLlF4KG51bGwsbnVsbCx0aGlzLGEsYixjLGQsZSxm
-KX0sCkxqKGEsYixjLGQpe3JldHVybiBiLkMoIkA8MD4iKS5LcShjKS5LcShkKS5DKCIxKDIsMykiKS5h
-KGEpfX0KUC5WcC5wcm90b3R5cGU9ewokMCgpe3JldHVybiB0aGlzLmEuYkgodGhpcy5iKX0sCiRTOjB9
-ClAuT1IucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9dGhpcy5jCnJldHVybiB0aGlzLmEuRGwodGhpcy5i
-LHMuYShhKSxzKX0sCiRTKCl7cmV0dXJuIHRoaXMuYy5DKCJ+KDApIil9fQpQLmI2LnByb3RvdHlwZT17
-CmdtKGEpe3ZhciBzPXRoaXMscj1uZXcgUC5sbShzLHMucixILkxoKHMpLkMoImxtPDE+IikpCnIuYz1z
-LmUKcmV0dXJuIHJ9LApnQShhKXtyZXR1cm4gdGhpcy5hfSwKZ2wwKGEpe3JldHVybiB0aGlzLmE9PT0w
-fSwKZ29yKGEpe3JldHVybiB0aGlzLmEhPT0wfSwKdGcoYSxiKXt2YXIgcyxyCmlmKGIhPT0iX19wcm90
-b19fIil7cz10aGlzLmIKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gdC5nLmEoc1tiXSkhPW51bGx9
-ZWxzZXtyPXRoaXMuUFIoYikKcmV0dXJuIHJ9fSwKUFIoYSl7dmFyIHM9dGhpcy5kCmlmKHM9PW51bGwp
-cmV0dXJuITEKcmV0dXJuIHRoaXMuREYoc1t0aGlzLk4oYSldLGEpPj0wfSwKaShhLGIpe3ZhciBzLHIs
-cT10aGlzCkguTGgocSkuYy5hKGIpCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18i
-KXtzPXEuYgpyZXR1cm4gcS5KKHM9PW51bGw/cS5iPVAuVDIoKTpzLGIpfWVsc2UgaWYodHlwZW9mIGI9
-PSJudW1iZXIiJiYoYiYxMDczNzQxODIzKT09PWIpe3I9cS5jCnJldHVybiBxLkoocj09bnVsbD9xLmM9
-UC5UMigpOnIsYil9ZWxzZSByZXR1cm4gcS5ZKGIpfSwKWShhKXt2YXIgcyxyLHEscD10aGlzCkguTGgo
-cCkuYy5hKGEpCnM9cC5kCmlmKHM9PW51bGwpcz1wLmQ9UC5UMigpCnI9cC5OKGEpCnE9c1tyXQppZihx
-PT1udWxsKXNbcl09W3AueW8oYSldCmVsc2V7aWYocC5ERihxLGEpPj0wKXJldHVybiExCnEucHVzaChw
-LnlvKGEpKX1yZXR1cm4hMH0sClIoYSxiKXt2YXIgcz10aGlzCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYm
-YiE9PSJfX3Byb3RvX18iKXJldHVybiBzLkgocy5iLGIpCmVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIi
-JiYoYiYxMDczNzQxODIzKT09PWIpcmV0dXJuIHMuSChzLmMsYikKZWxzZSByZXR1cm4gcy5xZyhiKX0s
-CnFnKGEpe3ZhciBzLHIscSxwLG89dGhpcyxuPW8uZAppZihuPT1udWxsKXJldHVybiExCnM9by5OKGEp
-CnI9bltzXQpxPW8uREYocixhKQppZihxPDApcmV0dXJuITEKcD1yLnNwbGljZShxLDEpWzBdCmlmKDA9
-PT1yLmxlbmd0aClkZWxldGUgbltzXQpvLkcocCkKcmV0dXJuITB9LApKKGEsYil7SC5MaCh0aGlzKS5j
-LmEoYikKaWYodC5nLmEoYVtiXSkhPW51bGwpcmV0dXJuITEKYVtiXT10aGlzLnlvKGIpCnJldHVybiEw
-fSwKSChhLGIpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuITEKcz10LmcuYShhW2JdKQppZihzPT1udWxs
-KXJldHVybiExCnRoaXMuRyhzKQpkZWxldGUgYVtiXQpyZXR1cm4hMH0sClMoKXt0aGlzLnI9dGhpcy5y
-KzEmMTA3Mzc0MTgyM30sCnlvKGEpe3ZhciBzLHI9dGhpcyxxPW5ldyBQLmJuKEguTGgocikuYy5hKGEp
-KQppZihyLmU9PW51bGwpci5lPXIuZj1xCmVsc2V7cz1yLmYKcy50b1N0cmluZwpxLmM9cwpyLmY9cy5i
-PXF9KytyLmEKci5TKCkKcmV0dXJuIHF9LApHKGEpe3ZhciBzPXRoaXMscj1hLmMscT1hLmIKaWYocj09
-bnVsbClzLmU9cQplbHNlIHIuYj1xCmlmKHE9PW51bGwpcy5mPXIKZWxzZSBxLmM9cjstLXMuYQpzLlMo
-KX0sCk4oYSl7cmV0dXJuIEouaGYoYSkmMTA3Mzc0MTgyM30sCkRGKGEsYil7dmFyIHMscgppZihhPT1u
-dWxsKXJldHVybi0xCnM9YS5sZW5ndGgKZm9yKHI9MDtyPHM7KytyKWlmKEouUk0oYVtyXS5hLGIpKXJl
-dHVybiByCnJldHVybi0xfX0KUC5ibi5wcm90b3R5cGU9e30KUC5sbS5wcm90b3R5cGU9ewpnbCgpe3Jl
-dHVybiB0aGlzLiR0aS5jLmEodGhpcy5kKX0sCkYoKXt2YXIgcz10aGlzLHI9cy5jLHE9cy5hCmlmKHMu
-YiE9PXEucil0aHJvdyBILmIoUC5hNChxKSkKZWxzZSBpZihyPT1udWxsKXtzLnNqKG51bGwpCnJldHVy
-biExfWVsc2V7cy5zaihzLiR0aS5DKCIxPyIpLmEoci5hKSkKcy5jPXIuYgpyZXR1cm4hMH19LApzaihh
-KXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpQLm1XLnByb3RvdHlwZT17fQpQ
-LnV5LnByb3RvdHlwZT17JGliUToxLCRpY1g6MSwkaXpNOjF9ClAubEQucHJvdG90eXBlPXsKZ20oYSl7
-cmV0dXJuIG5ldyBILmE3KGEsdGhpcy5nQShhKSxILnpLKGEpLkMoImE3PGxELkU+IikpfSwKRShhLGIp
-e3JldHVybiB0aGlzLnEoYSxiKX0sCksoYSxiKXt2YXIgcyxyCkgueksoYSkuQygifihsRC5FKSIpLmEo
-YikKcz10aGlzLmdBKGEpCmZvcihyPTA7cjxzOysrcil7Yi4kMSh0aGlzLnEoYSxyKSkKaWYocyE9PXRo
-aXMuZ0EoYSkpdGhyb3cgSC5iKFAuYTQoYSkpfX0sCmdsMChhKXtyZXR1cm4gdGhpcy5nQShhKT09PTB9
-LApnb3IoYSl7cmV0dXJuIXRoaXMuZ2wwKGEpfSwKRTIoYSxiLGMpe3ZhciBzPUgueksoYSkKcmV0dXJu
-IG5ldyBILmxKKGEscy5LcShjKS5DKCIxKGxELkUpIikuYShiKSxzLkMoIkA8bEQuRT4iKS5LcShjKS5D
-KCJsSjwxLDI+IikpfSwKZVIoYSxiKXtyZXR1cm4gSC5xQyhhLGIsbnVsbCxILnpLKGEpLkMoImxELkUi
-KSl9LApkcihhLGIpe3JldHVybiBuZXcgSC5qVihhLEgueksoYSkuQygiQDxsRC5FPiIpLktxKGIpLkMo
-ImpWPDEsMj4iKSl9LApkdShhLGIsYyxkKXt2YXIgcyxyPUgueksoYSkKZD1yLkMoImxELkUiKS5hKHIu
-QygibEQuRT8iKS5hKGQpKQpQLmpCKGIsYyx0aGlzLmdBKGEpKQpmb3Iocz1iO3M8YzsrK3MpdGhpcy5Z
-NShhLHMsZCl9LAp3KGEpe3JldHVybiBQLngoYSwiWyIsIl0iKX19ClAuaWwucHJvdG90eXBlPXt9ClAu
-cmEucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyPXRoaXMuYQppZighci5hKXRoaXMuYi5hKz0iLCAi
-CnIuYT0hMQpyPXRoaXMuYgpzPXIuYSs9SC5FaihhKQpyLmE9cysiOiAiCnIuYSs9SC5FaihiKX0sCiRT
-Ojl9ClAuWWsucHJvdG90eXBlPXsKSyhhLGIpe3ZhciBzLHIscT1ILkxoKHRoaXMpCnEuQygifihZay5L
-LFlrLlYpIikuYShiKQpmb3Iocz1KLklUKHRoaXMuZ3ZjKCkpLHE9cS5DKCJZay5WIik7cy5GKCk7KXty
-PXMuZ2woKQpiLiQyKHIscS5hKHRoaXMucSgwLHIpKSl9fSwKZ1B1KGEpe3JldHVybiBKLk0xKHRoaXMu
-Z3ZjKCksbmV3IFAueVEodGhpcyksSC5MaCh0aGlzKS5DKCJOMzxZay5LLFlrLlY+IikpfSwKeDQoYSl7
-cmV0dXJuIEouemwodGhpcy5ndmMoKSxhKX0sCmdBKGEpe3JldHVybiBKLkhtKHRoaXMuZ3ZjKCkpfSwK
-Z2wwKGEpe3JldHVybiBKLnVVKHRoaXMuZ3ZjKCkpfSwKdyhhKXtyZXR1cm4gUC5uTyh0aGlzKX0sCiRp
-WjA6MX0KUC55US5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyPXRoaXMuYSxxPUguTGgocikKcS5DKCJZ
-ay5LIikuYShhKQpzPXEuQygiWWsuViIpCnJldHVybiBuZXcgUC5OMyhhLHMuYShyLnEoMCxhKSkscS5D
-KCJAPFlrLks+IikuS3EocykuQygiTjM8MSwyPiIpKX0sCiRTKCl7cmV0dXJuIEguTGgodGhpcy5hKS5D
-KCJOMzxZay5LLFlrLlY+KFlrLkspIil9fQpQLktQLnByb3RvdHlwZT17Clk1KGEsYixjKXt2YXIgcz1I
-LkxoKHRoaXMpCnMuYy5hKGIpCnMuUVsxXS5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5
-IHVubW9kaWZpYWJsZSBtYXAiKSl9fQpQLlBuLnByb3RvdHlwZT17CnEoYSxiKXtyZXR1cm4gdGhpcy5h
-LnEoMCxiKX0sClk1KGEsYixjKXt2YXIgcz1ILkxoKHRoaXMpCnRoaXMuYS5ZNSgwLHMuYy5hKGIpLHMu
-UVsxXS5hKGMpKX0sCng0KGEpe3JldHVybiB0aGlzLmEueDQoYSl9LApLKGEsYil7dGhpcy5hLksoMCxI
-LkxoKHRoaXMpLkMoIn4oMSwyKSIpLmEoYikpfSwKZ2wwKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5n
-bDAocyl9LApnQShhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ0Eocyl9LAp3KGEpe3JldHVybiB0aGlz
-LmEudygwKX0sCmdQdShhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ1B1KHMpfSwKJGlaMDoxfQpQLkdq
-LnByb3RvdHlwZT17fQpQLmxmLnByb3RvdHlwZT17CmdsMChhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09
-PTB9LApnb3IoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcykhPT0wfSwKRlYoYSxiKXt2YXIgcwpmb3Iocz1K
-LklUKEguTGgodGhpcykuQygiY1g8bGYuRT4iKS5hKGIpKTtzLkYoKTspdGhpcy5pKDAscy5nbCgpKX0s
-CncoYSl7cmV0dXJuIFAueCh0aGlzLCJ7IiwifSIpfSwKayhhLGIpe3ZhciBzLHIscT10aGlzLmdtKHRo
-aXMpCmlmKCFxLkYoKSlyZXR1cm4iIgpzPXEuJHRpLmMKaWYoYj09PSIiKXtyPSIiCmRvIHIrPUguRWoo
-cy5hKHEuZCkpCndoaWxlKHEuRigpKQpzPXJ9ZWxzZXtyPSIiK0guRWoocy5hKHEuZCkpCmZvcig7cS5G
-KCk7KXI9citiK0guRWoocy5hKHEuZCkpCnM9cn1yZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30s
-CmVSKGEsYil7cmV0dXJuIEguYksodGhpcyxiLEguTGgodGhpcykuQygibGYuRSIpKX0sCkUoYSxiKXt2
-YXIgcyxyLHEscCxvPSJpbmRleCIKSC5jYihiLG8sdC5TKQpQLmsxKGIsbykKZm9yKHM9dGhpcy5nbSh0
-aGlzKSxyPXMuJHRpLmMscT0wO3MuRigpOyl7cD1yLmEocy5kKQppZihiPT09cSlyZXR1cm4gcDsrK3F9
-dGhyb3cgSC5iKFAuQ2YoYix0aGlzLG8sbnVsbCxxKSl9fQpQLlZqLnByb3RvdHlwZT17JGliUToxLCRp
-Y1g6MSwkaXh1OjF9ClAuWHYucHJvdG90eXBlPXskaWJROjEsJGljWDoxLCRpeHU6MX0KUC5uWS5wcm90
-b3R5cGU9e30KUC5XWS5wcm90b3R5cGU9e30KUC5SVS5wcm90b3R5cGU9e30KUC5wUi5wcm90b3R5cGU9
-e30KUC51dy5wcm90b3R5cGU9ewpxKGEsYil7dmFyIHMscj10aGlzLmIKaWYocj09bnVsbClyZXR1cm4g
-dGhpcy5jLnEoMCxiKQplbHNlIGlmKHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbAplbHNle3M9
-cltiXQpyZXR1cm4gdHlwZW9mIHM9PSJ1bmRlZmluZWQiP3RoaXMuZmIoYik6c319LApnQShhKXt2YXIg
-cwppZih0aGlzLmI9PW51bGwpe3M9dGhpcy5jCnM9cy5nQShzKX1lbHNlIHM9dGhpcy5DZigpLmxlbmd0
-aApyZXR1cm4gc30sCmdsMChhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LApndmMoKXtpZih0aGlz
-LmI9PW51bGwpcmV0dXJuIHRoaXMuYy5ndmMoKQpyZXR1cm4gbmV3IFAuaTgodGhpcyl9LApZNShhLGIs
-Yyl7dmFyIHMscixxPXRoaXMKaWYocS5iPT1udWxsKXEuYy5ZNSgwLGIsYykKZWxzZSBpZihxLng0KGIp
-KXtzPXEuYgpzW2JdPWMKcj1xLmEKaWYocj09bnVsbD9zIT1udWxsOnIhPT1zKXJbYl09bnVsbH1lbHNl
-IHEuWEsoKS5ZNSgwLGIsYyl9LAp4NChhKXtpZih0aGlzLmI9PW51bGwpcmV0dXJuIHRoaXMuYy54NChh
-KQpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYSxhKX0sCkso
-YSxiKXt2YXIgcyxyLHEscCxvPXRoaXMKdC5jQS5hKGIpCmlmKG8uYj09bnVsbClyZXR1cm4gby5jLkso
-MCxiKQpzPW8uQ2YoKQpmb3Iocj0wO3I8cy5sZW5ndGg7KytyKXtxPXNbcl0KcD1vLmJbcV0KaWYodHlw
-ZW9mIHA9PSJ1bmRlZmluZWQiKXtwPVAuUWUoby5hW3FdKQpvLmJbcV09cH1iLiQyKHEscCkKaWYocyE9
-PW8uYyl0aHJvdyBILmIoUC5hNChvKSl9fSwKQ2YoKXt2YXIgcz10LmJNLmEodGhpcy5jKQppZihzPT1u
-dWxsKXM9dGhpcy5jPUguUUkoT2JqZWN0LmtleXModGhpcy5hKSx0LnMpCnJldHVybiBzfSwKWEsoKXt2
-YXIgcyxyLHEscCxvLG49dGhpcwppZihuLmI9PW51bGwpcmV0dXJuIG4uYwpzPVAuRmwodC5OLHQueikK
-cj1uLkNmKCkKZm9yKHE9MDtwPXIubGVuZ3RoLHE8cDsrK3Epe289cltxXQpzLlk1KDAsbyxuLnEoMCxv
-KSl9aWYocD09PTApQy5ObS5pKHIsIiIpCmVsc2UgQy5ObS5zQShyLDApCm4uYT1uLmI9bnVsbApyZXR1
-cm4gbi5jPXN9LApmYihhKXt2YXIgcwppZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
-YWxsKHRoaXMuYSxhKSlyZXR1cm4gbnVsbApzPVAuUWUodGhpcy5hW2FdKQpyZXR1cm4gdGhpcy5iW2Fd
-PXN9fQpQLmk4LnByb3RvdHlwZT17CmdBKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nQShzKX0sCkUo
-YSxiKXt2YXIgcz10aGlzLmEKaWYocy5iPT1udWxsKXM9cy5ndmMoKS5FKDAsYikKZWxzZXtzPXMuQ2Yo
-KQppZihiPDB8fGI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYikKcz1zW2JdfXJldHVybiBzfSwKZ20o
-YSl7dmFyIHM9dGhpcy5hCmlmKHMuYj09bnVsbCl7cz1zLmd2YygpCnM9cy5nbShzKX1lbHNle3M9cy5D
-ZigpCnM9bmV3IEoubTEocyxzLmxlbmd0aCxILnQ2KHMpLkMoIm0xPDE+IikpfXJldHVybiBzfSwKdGco
-YSxiKXtyZXR1cm4gdGhpcy5hLng0KGIpfX0KUC54ci5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIKdHJ5
-e3M9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2ZhdGFsOnRydWV9KQpyZXR1cm4gc31jYXRjaChyKXtI
-LlJ1KHIpfXJldHVybiBudWxsfSwKJFM6MTB9ClAuTnoucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyCnRy
-eXtzPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtmYXRhbDpmYWxzZX0pCnJldHVybiBzfWNhdGNoKHIp
-e0guUnUocil9cmV0dXJuIG51bGx9LAokUzoxMH0KUC5DVi5wcm90b3R5cGU9ewp5cihhMSxhMixhMyl7
-dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTA9IkludmFsaWQgYmFzZTY0
-IGVuY29kaW5nIGxlbmd0aCAiCmEzPVAuakIoYTIsYTMsYTEubGVuZ3RoKQpzPSQuVjcoKQpmb3Iocj1z
-Lmxlbmd0aCxxPWEyLHA9cSxvPW51bGwsbj0tMSxtPS0xLGw9MDtxPGEzO3E9ayl7az1xKzEKaj1DLnhC
-LlcoYTEscSkKaWYoaj09PTM3KXtpPWsrMgppZihpPD1hMyl7aD1ILm9vKEMueEIuVyhhMSxrKSkKZz1I
-Lm9vKEMueEIuVyhhMSxrKzEpKQpmPWgqMTYrZy0oZyYyNTYpCmlmKGY9PT0zNylmPS0xCms9aX1lbHNl
-IGY9LTF9ZWxzZSBmPWoKaWYoMDw9ZiYmZjw9MTI3KXtpZihmPDB8fGY+PXIpcmV0dXJuIEguT0gocyxm
-KQplPXNbZl0KaWYoZT49MCl7Zj1DLnhCLk8oIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVm
-Z2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGUpCmlmKGY9PT1qKWNvbnRpbnVlCmo9Zn1l
-bHNle2lmKGU9PT0tMSl7aWYobjwwKXtkPW89PW51bGw/bnVsbDpvLmEubGVuZ3RoCmlmKGQ9PW51bGwp
-ZD0wCm49ZCsocS1wKQptPXF9KytsCmlmKGo9PT02MSljb250aW51ZX1qPWZ9aWYoZSE9PS0yKXtpZihv
-PT1udWxsKXtvPW5ldyBQLk0oIiIpCmQ9b31lbHNlIGQ9bwpjPWQuYSs9Qy54Qi5OaihhMSxwLHEpCmQu
-YT1jK0guTHcoaikKcD1rCmNvbnRpbnVlfX10aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgZGF0
-YSIsYTEscSkpfWlmKG8hPW51bGwpe3I9by5hKz1DLnhCLk5qKGExLHAsYTMpCmQ9ci5sZW5ndGgKaWYo
-bj49MClQLnhNKGExLG0sYTMsbixsLGQpCmVsc2V7Yj1DLmpuLnpZKGQtMSw0KSsxCmlmKGI9PT0xKXRo
-cm93IEguYihQLnJyKGEwLGExLGEzKSkKZm9yKDtiPDQ7KXtyKz0iPSIKby5hPXI7KytifX1yPW8uYQpy
-ZXR1cm4gQy54Qi5pNyhhMSxhMixhMyxyLmNoYXJDb2RlQXQoMCk9PTA/cjpyKX1hPWEzLWEyCmlmKG4+
-PTApUC54TShhMSxtLGEzLG4sbCxhKQplbHNle2I9Qy5qbi56WShhLDQpCmlmKGI9PT0xKXRocm93IEgu
-YihQLnJyKGEwLGExLGEzKSkKaWYoYj4xKWExPUMueEIuaTcoYTEsYTMsYTMsYj09PTI/Ij09IjoiPSIp
-fXJldHVybiBhMX19ClAuVTgucHJvdG90eXBlPXt9ClAuVWsucHJvdG90eXBlPXt9ClAud0kucHJvdG90
-eXBlPXt9ClAuWmkucHJvdG90eXBlPXt9ClAuVWQucHJvdG90eXBlPXsKdyhhKXt2YXIgcz1QLmhsKHRo
-aXMuYSkKcmV0dXJuKHRoaXMuYiE9bnVsbD8iQ29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2RhYmxl
-IG9iamVjdCBmYWlsZWQ6IjoiQ29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2Rh
-YmxlIG9iamVjdDoiKSsiICIrc319ClAuSzgucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iQ3ljbGljIGVy
-cm9yIGluIEpTT04gc3RyaW5naWZ5In19ClAuYnkucHJvdG90eXBlPXsKcFcoYSxiLGMpe3ZhciBzCnQu
-ZlYuYShjKQpzPVAuQlMoYix0aGlzLmdIZSgpLmEpCnJldHVybiBzfSwKT0IoYSxiKXt2YXIgcwp0LmRB
-LmEoYikKcz1QLnVYKGEsdGhpcy5nWkUoKS5iLG51bGwpCnJldHVybiBzfSwKZ1pFKCl7cmV0dXJuIEMu
-blh9LApnSGUoKXtyZXR1cm4gQy5BM319ClAub2oucHJvdG90eXBlPXt9ClAuTXgucHJvdG90eXBlPXt9
-ClAuU2gucHJvdG90eXBlPXsKUlQoYSl7dmFyIHMscixxLHAsbyxuLG09YS5sZW5ndGgKZm9yKHM9dGhp
-cy5jLHI9MCxxPTA7cTxtOysrcSl7cD1DLnhCLlcoYSxxKQppZihwPjkyKXtpZihwPj01NTI5Nil7bz1w
-JjY0NTEyCmlmKG89PT01NTI5Nil7bj1xKzEKbj0hKG48bSYmKEMueEIuVyhhLG4pJjY0NTEyKT09PTU2
-MzIwKX1lbHNlIG49ITEKaWYoIW4paWYobz09PTU2MzIwKXtvPXEtMQpvPSEobz49MCYmKEMueEIuTyhh
-LG8pJjY0NTEyKT09PTU1Mjk2KX1lbHNlIG89ITEKZWxzZSBvPSEwCmlmKG8pe2lmKHE+cilzLmErPUMu
-eEIuTmooYSxyLHEpCnI9cSsxCm89cy5hKz1ILkx3KDkyKQpvKz1ILkx3KDExNykKcy5hPW8Kbys9SC5M
-dygxMDApCnMuYT1vCm49cD4+PjgmMTUKbys9SC5MdyhuPDEwPzQ4K246ODcrbikKcy5hPW8Kbj1wPj4+
-NCYxNQpvKz1ILkx3KG48MTA/NDgrbjo4NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rSC5MdyhuPDEwPzQ4
-K246ODcrbil9fWNvbnRpbnVlfWlmKHA8MzIpe2lmKHE+cilzLmErPUMueEIuTmooYSxyLHEpCnI9cSsx
-Cm89cy5hKz1ILkx3KDkyKQpzd2l0Y2gocCl7Y2FzZSA4OnMuYT1vK0guTHcoOTgpCmJyZWFrCmNhc2Ug
-OTpzLmE9bytILkx3KDExNikKYnJlYWsKY2FzZSAxMDpzLmE9bytILkx3KDExMCkKYnJlYWsKY2FzZSAx
-MjpzLmE9bytILkx3KDEwMikKYnJlYWsKY2FzZSAxMzpzLmE9bytILkx3KDExNCkKYnJlYWsKZGVmYXVs
-dDpvKz1ILkx3KDExNykKcy5hPW8Kbys9SC5Mdyg0OCkKcy5hPW8Kbys9SC5Mdyg0OCkKcy5hPW8Kbj1w
-Pj4+NCYxNQpvKz1ILkx3KG48MTA/NDgrbjo4NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rSC5MdyhuPDEw
-PzQ4K246ODcrbikKYnJlYWt9fWVsc2UgaWYocD09PTM0fHxwPT09OTIpe2lmKHE+cilzLmErPUMueEIu
-TmooYSxyLHEpCnI9cSsxCm89cy5hKz1ILkx3KDkyKQpzLmE9bytILkx3KHApfX1pZihyPT09MClzLmEr
-PWEKZWxzZSBpZihyPG0pcy5hKz1DLnhCLk5qKGEscixtKX0sCkpuKGEpe3ZhciBzLHIscSxwCmZvcihz
-PXRoaXMuYSxyPXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPXNbcV0KaWYoYT09bnVsbD9wPT1udWxsOmE9
-PT1wKXRocm93IEguYihuZXcgUC5LOChhLG51bGwpKX1DLk5tLmkocyxhKX0sCmlVKGEpe3ZhciBzLHIs
-cSxwLG89dGhpcwppZihvLnRNKGEpKXJldHVybgpvLkpuKGEpCnRyeXtzPW8uYi4kMShhKQppZighby50
-TShzKSl7cT1QLkd5KGEsbnVsbCxvLmdWSygpKQp0aHJvdyBILmIocSl9cT1vLmEKaWYoMD49cS5sZW5n
-dGgpcmV0dXJuIEguT0gocSwtMSkKcS5wb3AoKX1jYXRjaChwKXtyPUguUnUocCkKcT1QLkd5KGEscixv
-LmdWSygpKQp0aHJvdyBILmIocSl9fSwKdE0oYSl7dmFyIHMscixxPXRoaXMKaWYodHlwZW9mIGE9PSJu
-dW1iZXIiKXtpZighaXNGaW5pdGUoYSkpcmV0dXJuITEKcS5jLmErPUMuQ0QudyhhKQpyZXR1cm4hMH1l
-bHNlIGlmKGE9PT0hMCl7cS5jLmErPSJ0cnVlIgpyZXR1cm4hMH1lbHNlIGlmKGE9PT0hMSl7cS5jLmEr
-PSJmYWxzZSIKcmV0dXJuITB9ZWxzZSBpZihhPT1udWxsKXtxLmMuYSs9Im51bGwiCnJldHVybiEwfWVs
-c2UgaWYodHlwZW9mIGE9PSJzdHJpbmciKXtzPXEuYwpzLmErPSciJwpxLlJUKGEpCnMuYSs9JyInCnJl
-dHVybiEwfWVsc2UgaWYodC5qLmIoYSkpe3EuSm4oYSkKcS5sSyhhKQpzPXEuYQppZigwPj1zLmxlbmd0
-aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCnJldHVybiEwfWVsc2UgaWYodC5mLmIoYSkpe3EuSm4o
-YSkKcj1xLmp3KGEpCnM9cS5hCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkK
-cmV0dXJuIHJ9ZWxzZSByZXR1cm4hMX0sCmxLKGEpe3ZhciBzLHIscT10aGlzLmMKcS5hKz0iWyIKcz1K
-LlU2KGEpCmlmKHMuZ29yKGEpKXt0aGlzLmlVKHMucShhLDApKQpmb3Iocj0xO3I8cy5nQShhKTsrK3Ip
-e3EuYSs9IiwiCnRoaXMuaVUocy5xKGEscikpfX1xLmErPSJdIn0sCmp3KGEpe3ZhciBzLHIscSxwLG8s
-bixtPXRoaXMsbD17fQppZihhLmdsMChhKSl7bS5jLmErPSJ7fSIKcmV0dXJuITB9cz1hLmdBKGEpKjIK
-cj1QLk84KHMsbnVsbCwhMSx0LlgpCnE9bC5hPTAKbC5iPSEwCmEuSygwLG5ldyBQLnRpKGwscikpCmlm
-KCFsLmIpcmV0dXJuITEKcD1tLmMKcC5hKz0ieyIKZm9yKG89JyInO3E8cztxKz0yLG89JywiJyl7cC5h
-Kz1vCm0uUlQoSC5uKHJbcV0pKQpwLmErPSciOicKbj1xKzEKaWYobj49cylyZXR1cm4gSC5PSChyLG4p
-Cm0uaVUocltuXSl9cC5hKz0ifSIKcmV0dXJuITB9fQpQLnRpLnByb3RvdHlwZT17CiQyKGEsYil7dmFy
-IHMscgppZih0eXBlb2YgYSE9InN0cmluZyIpdGhpcy5hLmI9ITEKcz10aGlzLmIKcj10aGlzLmEKQy5O
-bS5ZNShzLHIuYSsrLGEpCkMuTm0uWTUocyxyLmErKyxiKX0sCiRTOjl9ClAudHUucHJvdG90eXBlPXsK
-Z1ZLKCl7dmFyIHM9dGhpcy5jLmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9fQpQLnU1LnBy
-b3RvdHlwZT17CmdaRSgpe3JldHVybiBDLlFrfX0KUC5FMy5wcm90b3R5cGU9ewpXSihhKXt2YXIgcyxy
-LHEscD1QLmpCKDAsbnVsbCxhLmxlbmd0aCksbz1wLTAKaWYobz09PTApcmV0dXJuIG5ldyBVaW50OEFy
-cmF5KDApCnM9byozCnI9bmV3IFVpbnQ4QXJyYXkocykKcT1uZXcgUC5SdyhyKQppZihxLkd4KGEsMCxw
-KSE9PXApe0MueEIuTyhhLHAtMSkKcS5STygpfXJldHVybiBuZXcgVWludDhBcnJheShyLnN1YmFycmF5
-KDAsSC5yTSgwLHEuYixzKSkpfX0KUC5Sdy5wcm90b3R5cGU9ewpSTygpe3ZhciBzPXRoaXMscj1zLmMs
-cT1zLmIscD1zLmI9cSsxLG89ci5sZW5ndGgKaWYocT49bylyZXR1cm4gSC5PSChyLHEpCnJbcV09MjM5
-CnE9cy5iPXArMQppZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT0xOTEKcy5iPXErMQppZihxPj1v
-KXJldHVybiBILk9IKHIscSkKcltxXT0xODl9LApPNihhLGIpe3ZhciBzLHIscSxwLG8sbj10aGlzCmlm
-KChiJjY0NTEyKT09PTU2MzIwKXtzPTY1NTM2KygoYSYxMDIzKTw8MTApfGImMTAyMwpyPW4uYwpxPW4u
-YgpwPW4uYj1xKzEKbz1yLmxlbmd0aAppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT1zPj4+MTh8
-MjQwCnE9bi5iPXArMQppZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT1zPj4+MTImNjN8MTI4CnA9
-bi5iPXErMQppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT1zPj4+NiY2M3wxMjgKbi5iPXArMQpp
-ZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT1zJjYzfDEyOApyZXR1cm4hMH1lbHNle24uUk8oKQpy
-ZXR1cm4hMX19LApHeChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG0sbD10aGlzCmlmKGIhPT1jJiYoQy54
-Qi5PKGEsYy0xKSY2NDUxMik9PT01NTI5NiktLWMKZm9yKHM9bC5jLHI9cy5sZW5ndGgscT1iO3E8Yzsr
-K3Epe3A9Qy54Qi5XKGEscSkKaWYocDw9MTI3KXtvPWwuYgppZihvPj1yKWJyZWFrCmwuYj1vKzEKc1tv
-XT1wfWVsc2V7bz1wJjY0NTEyCmlmKG89PT01NTI5Nil7aWYobC5iKzQ+cilicmVhawpuPXErMQppZihs
-Lk82KHAsQy54Qi5XKGEsbikpKXE9bn1lbHNlIGlmKG89PT01NjMyMCl7aWYobC5iKzM+cilicmVhawps
-LlJPKCl9ZWxzZSBpZihwPD0yMDQ3KXtvPWwuYgptPW8rMQppZihtPj1yKWJyZWFrCmwuYj1tCmlmKG8+
-PXIpcmV0dXJuIEguT0gocyxvKQpzW29dPXA+Pj42fDE5MgpsLmI9bSsxCnNbbV09cCY2M3wxMjh9ZWxz
-ZXtvPWwuYgppZihvKzI+PXIpYnJlYWsKbT1sLmI9bysxCmlmKG8+PXIpcmV0dXJuIEguT0gocyxvKQpz
-W29dPXA+Pj4xMnwyMjQKbz1sLmI9bSsxCmlmKG0+PXIpcmV0dXJuIEguT0gocyxtKQpzW21dPXA+Pj42
-JjYzfDEyOApsLmI9bysxCmlmKG8+PXIpcmV0dXJuIEguT0gocyxvKQpzW29dPXAmNjN8MTI4fX19cmV0
-dXJuIHF9fQpQLkdZLnByb3RvdHlwZT17CldKKGEpe3ZhciBzLHIKdC5MLmEoYSkKcz10aGlzLmEKcj1Q
-Lmt5KHMsYSwwLG51bGwpCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIG5ldyBQLmJ6KHMpLk5lKGEs
-MCxudWxsLCEwKX19ClAuYnoucHJvdG90eXBlPXsKTmUoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuPXRo
-aXMKdC5MLmEoYSkKcz1QLmpCKGIsYyxKLkhtKGEpKQppZihiPT09cylyZXR1cm4iIgpyPVAuankoYSxi
-LHMpCnE9bi5oTyhyLDAscy1iLCEwKQpwPW4uYgppZigocCYxKSE9PTApe289UC5qNChwKQpuLmI9MAp0
-aHJvdyBILmIoUC5ycihvLGEsYituLmMpKX1yZXR1cm4gcX0sCmhPKGEsYixjLGQpe3ZhciBzLHIscT10
-aGlzCmlmKGMtYj4xMDAwKXtzPUMuam4uQlUoYitjLDIpCnI9cS5oTyhhLGIscywhMSkKaWYoKHEuYiYx
+YXIgcz1hLiR0aQpyZXR1cm4gcyE9bnVsbD9zOkEuVlUoYSl9LApWVShhKXt2YXIgcz1hLmNvbnN0cnVj
+dG9yLHI9cy4kY2NhY2hlCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIEEucjkoYSxzKX0sCnI5KGEs
+Yil7dmFyIHM9YSBpbnN0YW5jZW9mIEEuVHA/YS5fX3Byb3RvX18uX19wcm90b19fLmNvbnN0cnVjdG9y
+OmIscj1BLmFpKHYudHlwZVVuaXZlcnNlLHMubmFtZSkKYi4kY2NhY2hlPXIKcmV0dXJuIHJ9LApCcChh
+KXt2YXIgcyxyPXYudHlwZXMscT1yW2FdCmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7cz1BLkUodi50eXBl
+VW5pdmVyc2UscSwhMSkKclthXT1zCnJldHVybiBzfXJldHVybiBxfSwKS3goYSl7dmFyIHMscixxLHA9
+YS54CmlmKHAhPW51bGwpcmV0dXJuIHAKcz1hLmN5CnI9cy5yZXBsYWNlKC9cKi9nLCIiKQppZihyPT09
+cylyZXR1cm4gYS54PW5ldyBBLmxZKGEpCnE9QS5FKHYudHlwZVVuaXZlcnNlLHIsITApCnA9cS54CnJl
+dHVybiBhLng9cD09bnVsbD9xLng9bmV3IEEubFkocSk6cH0sCnhxKGEpe3JldHVybiBBLkt4KEEuRSh2
+LnR5cGVVbml2ZXJzZSxhLCExKSl9LApKSihhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYobz09PXQuSyly
+ZXR1cm4gQS5SRShvLGEsQS5rZSkKaWYoIUEuQTgobykpaWYoIShvPT09dC5fKSlzPSExCmVsc2Ugcz0h
+MAplbHNlIHM9ITAKaWYocylyZXR1cm4gQS5SRShvLGEsQS5JdykKcz1vLnkKcj1zPT09Nj9vLno6bwpp
+ZihyPT09dC5TKXE9QS5vawplbHNlIGlmKHI9PT10LmdSfHxyPT09dC5kaSlxPUEuS0gKZWxzZSBpZihy
+PT09dC5OKXE9QS5NTQplbHNlIHE9cj09PXQueT9BLnJROm51bGwKaWYocSE9bnVsbClyZXR1cm4gQS5S
+RShvLGEscSkKaWYoci55PT09OSl7cD1yLnoKaWYoci5RLmV2ZXJ5KEEuY2MpKXtvLnI9IiRpIitwCmlm
+KHA9PT0iek0iKXJldHVybiBBLlJFKG8sYSxBLnlNKQpyZXR1cm4gQS5SRShvLGEsQS50NCl9fWVsc2Ug
+aWYocz09PTcpcmV0dXJuIEEuUkUobyxhLEEuQVEpCnJldHVybiBBLlJFKG8sYSxBLllPKX0sClJFKGEs
+YixjKXthLmI9YwpyZXR1cm4gYS5iKGIpfSwKQXUoYSl7dmFyIHMscj10aGlzLHE9QS5PegppZighQS5B
+OChyKSlpZighKHI9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihzKXE9QS5obgplbHNl
+IGlmKHI9PT10LkspcT1BLlRpCmVsc2V7cz1BLmxSKHIpCmlmKHMpcT1BLmw0fXIuYT1xCnJldHVybiBy
+LmEoYSl9LApRaihhKXt2YXIgcyxyPWEueQppZighQS5BOChhKSlpZighKGE9PT10Ll8pKWlmKCEoYT09
+PXQuYXcpKWlmKHIhPT03KXM9cj09PTgmJkEuUWooYS56KXx8YT09PXQuUHx8YT09PXQuVAplbHNlIHM9
+ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKcmV0dXJuIHN9LApZTyhhKXt2YXIgcz10aGlz
+CmlmKGE9PW51bGwpcmV0dXJuIEEuUWoocykKcmV0dXJuIEEuV2Uodi50eXBlVW5pdmVyc2UsQS5VZShh
+LHMpLG51bGwscyxudWxsKX0sCkFRKGEpe2lmKGE9PW51bGwpcmV0dXJuITAKcmV0dXJuIHRoaXMuei5i
+KGEpfSwKdDQoYSl7dmFyIHMscj10aGlzCmlmKGE9PW51bGwpcmV0dXJuIEEuUWoocikKcz1yLnIKaWYo
+YSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuISFhW3NdCnJldHVybiEhSi5pYShhKVtzXX0sCnlNKGEpe3Zh
+ciBzLHI9dGhpcwppZihhPT1udWxsKXJldHVybiBBLlFqKHIpCmlmKHR5cGVvZiBhIT0ib2JqZWN0Iily
+ZXR1cm4hMQppZihBcnJheS5pc0FycmF5KGEpKXJldHVybiEwCnM9ci5yCmlmKGEgaW5zdGFuY2VvZiBB
+Lk1oKXJldHVybiEhYVtzXQpyZXR1cm4hIUouaWEoYSlbc119LApPeihhKXt2YXIgcyxyPXRoaXMKaWYo
+YT09bnVsbCl7cz1BLmxSKHIpCmlmKHMpcmV0dXJuIGF9ZWxzZSBpZihyLmIoYSkpcmV0dXJuIGEKQS5t
+NChhLHIpfSwKbDQoYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBhCmVsc2UgaWYocy5iKGEp
+KXJldHVybiBhCkEubTQoYSxzKX0sCm00KGEsYil7dGhyb3cgQS5iKEEuWmMoQS5XSyhhLEEuVWUoYSxi
+KSxBLmRtKGIsbnVsbCkpKSl9LApEaChhLGIsYyxkKXt2YXIgcz1udWxsCmlmKEEuV2Uodi50eXBlVW5p
+dmVyc2UsYSxzLGIscykpcmV0dXJuIGEKdGhyb3cgQS5iKEEuWmMoIlRoZSB0eXBlIGFyZ3VtZW50ICci
+K0EuZG0oYSxzKSsiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kICci
+K0EuZG0oYixzKSsiJyBvZiB0eXBlIHZhcmlhYmxlICciK2MrIicgaW4gJyIrZCsiJy4iKSl9LApXSyhh
+LGIsYyl7dmFyIHM9QS5obChhKSxyPUEuZG0oYj09bnVsbD9BLnpLKGEpOmIsbnVsbCkKcmV0dXJuIHMr
+IjogdHlwZSAnIityKyInIGlzIG5vdCBhIHN1YnR5cGUgb2YgdHlwZSAnIitjKyInIn0sClpjKGEpe3Jl
+dHVybiBuZXcgQS5pTSgiVHlwZUVycm9yOiAiK2EpfSwKcShhLGIpe3JldHVybiBuZXcgQS5pTSgiVHlw
+ZUVycm9yOiAiK0EuV0soYSxudWxsLGIpKX0sCmtlKGEpe3JldHVybiBhIT1udWxsfSwKVGkoYSl7aWYo
+YSE9bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsIk9iamVjdCIpKX0sCkl3KGEpe3JldHVybiEw
+fSwKaG4oYSl7cmV0dXJuIGF9LApyUShhKXtyZXR1cm4hMD09PWF8fCExPT09YX0sCnA4KGEpe2lmKCEw
+PT09YSlyZXR1cm4hMAppZighMT09PWEpcmV0dXJuITEKdGhyb3cgQS5iKEEucShhLCJib29sIikpfSwK
+bUwoYSl7aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQppZihhPT1udWxsKXJldHVy
+biBhCnRocm93IEEuYihBLnEoYSwiYm9vbCIpKX0sCk00KGEpe2lmKCEwPT09YSlyZXR1cm4hMAppZigh
+MT09PWEpcmV0dXJuITEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsImJvb2w/Iikp
+fSwKclYoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiZG91
+YmxlIikpfSwKdEYoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0
+dXJuIGEKdGhyb3cgQS5iKEEucShhLCJkb3VibGUiKSl9LApRayhhKXtpZih0eXBlb2YgYT09Im51bWJl
+ciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsImRvdWJsZT8iKSl9
+LApvayhhKXtyZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEpPT09YX0sCklaKGEp
+e2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEKdGhyb3cgQS5i
+KEEucShhLCJpbnQiKSl9LAp1UChhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9
+PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJpbnQiKSl9LApV
+YyhhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hKXJldHVybiBhCmlmKGE9
+PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJpbnQ/IikpfSwKS0goYSl7cmV0dXJuIHR5cGVv
+ZiBhPT0ibnVtYmVyIn0sCno1KGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQp0aHJvdyBB
+LmIoQS5xKGEsIm51bSIpKX0sClcxKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZihh
+PT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwibnVtIikpfSwKY1UoYSl7aWYodHlwZW9mIGE9
+PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJudW0/
+IikpfSwKTU0oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0sCm4oYSl7aWYodHlwZW9mIGE9PSJz
+dHJpbmciKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiU3RyaW5nIikpfSwKaE4oYSl7aWYodHlwZW9m
+IGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJT
+dHJpbmciKSl9LAprKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQppZihhPT1udWxsKXJl
+dHVybiBhCnRocm93IEEuYihBLnEoYSwiU3RyaW5nPyIpKX0sCmlvKGEsYil7dmFyIHMscixxCmZvcihz
+PSIiLHI9IiIscT0wO3E8YS5sZW5ndGg7KytxLHI9IiwgIilzKz1yK0EuZG0oYVtxXSxiKQpyZXR1cm4g
+c30sCmJJKGE0LGE1LGE2KXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxh
+MCxhMSxhMixhMz0iLCAiCmlmKGE2IT1udWxsKXtzPWE2Lmxlbmd0aAppZihhNT09bnVsbCl7YTU9QS5R
+SShbXSx0LnMpCnI9bnVsbH1lbHNlIHI9YTUubGVuZ3RoCnE9YTUubGVuZ3RoCmZvcihwPXM7cD4wOy0t
+cClCLk5tLmkoYTUsIlQiKyhxK3ApKQpmb3Iobz10Llgsbj10Ll8sbT0iPCIsbD0iIixwPTA7cDxzOysr
+cCxsPWEzKXttKz1sCms9YTUubGVuZ3RoCmo9ay0xLXAKaWYoIShqPj0wKSlyZXR1cm4gQS5PSChhNSxq
+KQptPUIueEIuaChtLGE1W2pdKQppPWE2W3BdCmg9aS55CmlmKCEoaD09PTJ8fGg9PT0zfHxoPT09NHx8
+aD09PTV8fGk9PT1vKSlpZighKGk9PT1uKSlrPSExCmVsc2Ugaz0hMAplbHNlIGs9ITAKaWYoIWspbSs9
+IiBleHRlbmRzICIrQS5kbShpLGE1KX1tKz0iPiJ9ZWxzZXttPSIiCnI9bnVsbH1vPWE0LnoKZz1hNC5R
+CmY9Zy5hCmU9Zi5sZW5ndGgKZD1nLmIKYz1kLmxlbmd0aApiPWcuYwphPWIubGVuZ3RoCmEwPUEuZG0o
+byxhNSkKZm9yKGExPSIiLGEyPSIiLHA9MDtwPGU7KytwLGEyPWEzKWExKz1hMitBLmRtKGZbcF0sYTUp
+CmlmKGM+MCl7YTErPWEyKyJbIgpmb3IoYTI9IiIscD0wO3A8YzsrK3AsYTI9YTMpYTErPWEyK0EuZG0o
+ZFtwXSxhNSkKYTErPSJdIn1pZihhPjApe2ExKz1hMisieyIKZm9yKGEyPSIiLHA9MDtwPGE7cCs9Myxh
+Mj1hMyl7YTErPWEyCmlmKGJbcCsxXSlhMSs9InJlcXVpcmVkICIKYTErPUEuZG0oYltwKzJdLGE1KSsi
+ICIrYltwXX1hMSs9In0ifWlmKHIhPW51bGwpe2E1LnRvU3RyaW5nCmE1Lmxlbmd0aD1yfXJldHVybiBt
+KyIoIithMSsiKSA9PiAiK2EwfSwKZG0oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsPWEueQppZihsPT09
+NSlyZXR1cm4iZXJhc2VkIgppZihsPT09MilyZXR1cm4iZHluYW1pYyIKaWYobD09PTMpcmV0dXJuInZv
+aWQiCmlmKGw9PT0xKXJldHVybiJOZXZlciIKaWYobD09PTQpcmV0dXJuImFueSIKaWYobD09PTYpe3M9
+QS5kbShhLnosYikKcmV0dXJuIHN9aWYobD09PTcpe3I9YS56CnM9QS5kbShyLGIpCnE9ci55CnJldHVy
+bihxPT09MTF8fHE9PT0xMj8iKCIrcysiKSI6cykrIj8ifWlmKGw9PT04KXJldHVybiJGdXR1cmVPcjwi
+K0EuZG0oYS56LGIpKyI+IgppZihsPT09OSl7cD1BLm8zKGEueikKbz1hLlEKcmV0dXJuIG8ubGVuZ3Ro
+PjA/cCsoIjwiK0EuaW8obyxiKSsiPiIpOnB9aWYobD09PTExKXJldHVybiBBLmJJKGEsYixudWxsKQpp
+ZihsPT09MTIpcmV0dXJuIEEuYkkoYS56LGIsYS5RKQppZihsPT09MTMpe249YS56Cm09Yi5sZW5ndGgK
+bj1tLTEtbgppZighKG4+PTAmJm48bSkpcmV0dXJuIEEuT0goYixuKQpyZXR1cm4gYltuXX1yZXR1cm4i
+PyJ9LApvMyhhKXt2YXIgcyxyPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHIhPW51bGwpcmV0dXJu
+IHIKcz0ibWluaWZpZWQ6IithCnJldHVybiBzfSwKUW8oYSxiKXt2YXIgcz1hLnRSW2JdCmZvcig7dHlw
+ZW9mIHM9PSJzdHJpbmciOylzPWEudFJbc10KcmV0dXJuIHN9LAphaShhLGIpe3ZhciBzLHIscSxwLG8s
+bj1hLmVULG09bltiXQppZihtPT1udWxsKXJldHVybiBBLkUoYSxiLCExKQplbHNlIGlmKHR5cGVvZiBt
+PT0ibnVtYmVyIil7cz1tCnI9QS5tKGEsNSwiIyIpCnE9QS52VShzKQpmb3IocD0wO3A8czsrK3ApcVtw
+XT1yCm89QS5KKGEsYixxKQpuW2JdPW8KcmV0dXJuIG99ZWxzZSByZXR1cm4gbX0sCnhiKGEsYil7cmV0
+dXJuIEEuSXgoYS50UixiKX0sCkZGKGEsYil7cmV0dXJuIEEuSXgoYS5lVCxiKX0sCkUoYSxiLGMpe3Zh
+ciBzLHI9YS5lQyxxPXIuZ2V0KGIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLmkoQS5vKGEsbnVsbCxi
+LGMpKQpyLnNldChiLHMpCnJldHVybiBzfSwKY0UoYSxiLGMpe3ZhciBzLHIscT1iLmNoCmlmKHE9PW51
+bGwpcT1iLmNoPW5ldyBNYXAoKQpzPXEuZ2V0KGMpCmlmKHMhPW51bGwpcmV0dXJuIHMKcj1BLmkoQS5v
+KGEsYixjLCEwKSkKcS5zZXQoYyxyKQpyZXR1cm4gcn0sCnY1KGEsYixjKXt2YXIgcyxyLHEscD1iLmN4
+CmlmKHA9PW51bGwpcD1iLmN4PW5ldyBNYXAoKQpzPWMuY3kKcj1wLmdldChzKQppZihyIT1udWxsKXJl
+dHVybiByCnE9QS5hKGEsYixjLnk9PT0xMD9jLlE6W2NdKQpwLnNldChzLHEpCnJldHVybiBxfSwKQkQo
+YSxiKXtiLmE9QS5BdQpiLmI9QS5KSgpyZXR1cm4gYn0sCm0oYSxiLGMpe3ZhciBzLHIscT1hLmVDLmdl
+dChjKQppZihxIT1udWxsKXJldHVybiBxCnM9bmV3IEEuSmMobnVsbCxudWxsKQpzLnk9YgpzLmN5PWMK
+cj1BLkJEKGEscykKYS5lQy5zZXQoYyxyKQpyZXR1cm4gcn0sCkMoYSxiLGMpe3ZhciBzLHI9Yi5jeSsi
+KiIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5aNyhhLGIscixjKQphLmVDLnNl
+dChyLHMpCnJldHVybiBzfSwKWjcoYSxiLGMsZCl7dmFyIHMscixxCmlmKGQpe3M9Yi55CmlmKCFBLkE4
+KGIpKXI9Yj09PXQuUHx8Yj09PXQuVHx8cz09PTd8fHM9PT02CmVsc2Ugcj0hMAppZihyKXJldHVybiBi
+fXE9bmV3IEEuSmMobnVsbCxudWxsKQpxLnk9NgpxLno9YgpxLmN5PWMKcmV0dXJuIEEuQkQoYSxxKX0s
+CkIoYSxiLGMpe3ZhciBzLHI9Yi5jeSsiPyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBx
+CnM9QS5sbChhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKbGwoYSxiLGMsZCl7dmFyIHMs
+cixxLHAKaWYoZCl7cz1iLnkKaWYoIUEuQTgoYikpaWYoIShiPT09dC5QfHxiPT09dC5UKSlpZihzIT09
+NylyPXM9PT04JiZBLmxSKGIueikKZWxzZSByPSEwCmVsc2Ugcj0hMAplbHNlIHI9ITAKaWYocilyZXR1
+cm4gYgplbHNlIGlmKHM9PT0xfHxiPT09dC5hdylyZXR1cm4gdC5QCmVsc2UgaWYocz09PTYpe3E9Yi56
+CmlmKHEueT09PTgmJkEubFIocS56KSlyZXR1cm4gcQplbHNlIHJldHVybiBBLmN6KGEsYil9fXA9bmV3
+IEEuSmMobnVsbCxudWxsKQpwLnk9NwpwLno9YgpwLmN5PWMKcmV0dXJuIEEuQkQoYSxwKX0sCmYoYSxi
+LGMpe3ZhciBzLHI9Yi5jeSsiLyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5l
+VihhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKZVYoYSxiLGMsZCl7dmFyIHMscixxCmlm
+KGQpe3M9Yi55CmlmKCFBLkE4KGIpKWlmKCEoYj09PXQuXykpcj0hMQplbHNlIHI9ITAKZWxzZSByPSEw
+CmlmKHJ8fGI9PT10LkspcmV0dXJuIGIKZWxzZSBpZihzPT09MSlyZXR1cm4gQS5KKGEsImI4IixbYl0p
+CmVsc2UgaWYoYj09PXQuUHx8Yj09PXQuVClyZXR1cm4gdC5iR31xPW5ldyBBLkpjKG51bGwsbnVsbCkK
+cS55PTgKcS56PWIKcS5jeT1jCnJldHVybiBBLkJEKGEscSl9LApIKGEsYil7dmFyIHMscixxPSIiK2Ir
+Il4iLHA9YS5lQy5nZXQocSkKaWYocCE9bnVsbClyZXR1cm4gcApzPW5ldyBBLkpjKG51bGwsbnVsbCkK
+cy55PTEzCnMuej1iCnMuY3k9cQpyPUEuQkQoYSxzKQphLmVDLnNldChxLHIpCnJldHVybiByfSwKVXgo
+YSl7dmFyIHMscixxLHA9YS5sZW5ndGgKZm9yKHM9IiIscj0iIixxPTA7cTxwOysrcSxyPSIsIilzKz1y
+K2FbcV0uY3kKcmV0dXJuIHN9LApTNChhKXt2YXIgcyxyLHEscCxvLG4sbT1hLmxlbmd0aApmb3Iocz0i
+IixyPSIiLHE9MDtxPG07cSs9MyxyPSIsIil7cD1hW3FdCm89YVtxKzFdPyIhIjoiOiIKbj1hW3ErMl0u
+Y3kKcys9citwK28rbn1yZXR1cm4gc30sCkooYSxiLGMpe3ZhciBzLHIscSxwPWIKaWYoYy5sZW5ndGg+
+MClwKz0iPCIrQS5VeChjKSsiPiIKcz1hLmVDLmdldChwKQppZihzIT1udWxsKXJldHVybiBzCnI9bmV3
+IEEuSmMobnVsbCxudWxsKQpyLnk9OQpyLno9YgpyLlE9YwppZihjLmxlbmd0aD4wKXIuYz1jWzBdCnIu
+Y3k9cApxPUEuQkQoYSxyKQphLmVDLnNldChwLHEpCnJldHVybiBxfSwKYShhLGIsYyl7dmFyIHMscixx
+LHAsbyxuCmlmKGIueT09PTEwKXtzPWIuegpyPWIuUS5jb25jYXQoYyl9ZWxzZXtyPWMKcz1ifXE9cy5j
+eSsoIjs8IitBLlV4KHIpKyI+IikKcD1hLmVDLmdldChxKQppZihwIT1udWxsKXJldHVybiBwCm89bmV3
+IEEuSmMobnVsbCxudWxsKQpvLnk9MTAKby56PXMKby5RPXIKby5jeT1xCm49QS5CRChhLG8pCmEuZUMu
+c2V0KHEsbikKcmV0dXJuIG59LApkKGEsYixjKXt2YXIgcyxyLHEscCxvLG49Yi5jeSxtPWMuYSxsPW0u
+bGVuZ3RoLGs9Yy5iLGo9ay5sZW5ndGgsaT1jLmMsaD1pLmxlbmd0aCxnPSIoIitBLlV4KG0pCmlmKGo+
+MCl7cz1sPjA/IiwiOiIiCnI9QS5VeChrKQpnKz1zKyJbIityKyJdIn1pZihoPjApe3M9bD4wPyIsIjoi
+IgpyPUEuUzQoaSkKZys9cysieyIrcisifSJ9cT1uKyhnKyIpIikKcD1hLmVDLmdldChxKQppZihwIT1u
+dWxsKXJldHVybiBwCm89bmV3IEEuSmMobnVsbCxudWxsKQpvLnk9MTEKby56PWIKby5RPWMKby5jeT1x
+CnI9QS5CRChhLG8pCmEuZUMuc2V0KHEscikKcmV0dXJuIHJ9LApEKGEsYixjLGQpe3ZhciBzLHI9Yi5j
+eSsoIjwiK0EuVXgoYykrIj4iKSxxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLmh3
+KGEsYixjLHIsZCkKYS5lQy5zZXQocixzKQpyZXR1cm4gc30sCmh3KGEsYixjLGQsZSl7dmFyIHMscixx
+LHAsbyxuLG0sbAppZihlKXtzPWMubGVuZ3RoCnI9QS52VShzKQpmb3IocT0wLHA9MDtwPHM7KytwKXtv
+PWNbcF0KaWYoby55PT09MSl7cltwXT1vOysrcX19aWYocT4wKXtuPUEuUEwoYSxiLHIsMCkKbT1BLmJa
+KGEsYyxyLDApCnJldHVybiBBLkQoYSxuLG0sYyE9PW0pfX1sPW5ldyBBLkpjKG51bGwsbnVsbCkKbC55
+PTEyCmwuej1iCmwuUT1jCmwuY3k9ZApyZXR1cm4gQS5CRChhLGwpfSwKbyhhLGIsYyxkKXtyZXR1cm57
+dTphLGU6YixyOmMsczpbXSxwOjAsbjpkfX0sCmkoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxo
+PWEucixnPWEucwpmb3Iocz1oLmxlbmd0aCxyPTA7cjxzOyl7cT1oLmNoYXJDb2RlQXQocikKaWYocT49
+NDgmJnE8PTU3KXI9QS5BKHIrMSxxLGgsZykKZWxzZSBpZigoKChxfDMyKT4+PjApLTk3JjY1NTM1KTwy
+Nnx8cT09PTk1fHxxPT09MzYpcj1BLnQoYSxyLGgsZywhMSkKZWxzZSBpZihxPT09NDYpcj1BLnQoYSxy
+LGgsZywhMCkKZWxzZXsrK3IKc3dpdGNoKHEpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1ODpnLnB1c2goITEp
+CmJyZWFrCmNhc2UgMzM6Zy5wdXNoKCEwKQpicmVhawpjYXNlIDU5OmcucHVzaChBLksoYS51LGEuZSxn
+LnBvcCgpKSkKYnJlYWsKY2FzZSA5NDpnLnB1c2goQS5IKGEudSxnLnBvcCgpKSkKYnJlYWsKY2FzZSAz
+NTpnLnB1c2goQS5tKGEudSw1LCIjIikpCmJyZWFrCmNhc2UgNjQ6Zy5wdXNoKEEubShhLnUsMiwiQCIp
+KQpicmVhawpjYXNlIDEyNjpnLnB1c2goQS5tKGEudSwzLCJ+IikpCmJyZWFrCmNhc2UgNjA6Zy5wdXNo
+KGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgNjI6cD1hLnUKbz1nLnNwbGljZShhLnApCkEucihh
+LnUsYS5lLG8pCmEucD1nLnBvcCgpCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09InN0cmluZyIpZy5wdXNo
+KEEuSihwLG4sbykpCmVsc2V7bT1BLksocCxhLmUsbikKc3dpdGNoKG0ueSl7Y2FzZSAxMTpnLnB1c2go
+QS5EKHAsbSxvLGEubikpCmJyZWFrCmRlZmF1bHQ6Zy5wdXNoKEEuYShwLG0sbykpCmJyZWFrfX1icmVh
+awpjYXNlIDM4OkEuSShhLGcpCmJyZWFrCmNhc2UgNDI6cD1hLnUKZy5wdXNoKEEuQyhwLEEuSyhwLGEu
+ZSxnLnBvcCgpKSxhLm4pKQpicmVhawpjYXNlIDYzOnA9YS51CmcucHVzaChBLkIocCxBLksocCxhLmUs
+Zy5wb3AoKSksYS5uKSkKYnJlYWsKY2FzZSA0NzpwPWEudQpnLnB1c2goQS5mKHAsQS5LKHAsYS5lLGcu
+cG9wKCkpLGEubikpCmJyZWFrCmNhc2UgNDA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNh
+c2UgNDE6cD1hLnUKbD1uZXcgQS5HKCkKaz1wLnNFQQpqPXAuc0VBCm49Zy5wb3AoKQppZih0eXBlb2Yg
+bj09Im51bWJlciIpc3dpdGNoKG4pe2Nhc2UtMTprPWcucG9wKCkKYnJlYWsKY2FzZS0yOmo9Zy5wb3Ao
+KQpicmVhawpkZWZhdWx0OmcucHVzaChuKQpicmVha31lbHNlIGcucHVzaChuKQpvPWcuc3BsaWNlKGEu
+cCkKQS5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkKbC5hPW8KbC5iPWsKbC5jPWoKZy5wdXNoKEEuZChw
+LEEuSyhwLGEuZSxnLnBvcCgpKSxsKSkKYnJlYWsKY2FzZSA5MTpnLnB1c2goYS5wKQphLnA9Zy5sZW5n
+dGgKYnJlYWsKY2FzZSA5MzpvPWcuc3BsaWNlKGEucCkKQS5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkK
+Zy5wdXNoKG8pCmcucHVzaCgtMSkKYnJlYWsKY2FzZSAxMjM6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3Ro
+CmJyZWFrCmNhc2UgMTI1Om89Zy5zcGxpY2UoYS5wKQpBLnkoYS51LGEuZSxvKQphLnA9Zy5wb3AoKQpn
+LnB1c2gobykKZy5wdXNoKC0yKQpicmVhawpkZWZhdWx0OnRocm93IkJhZCBjaGFyYWN0ZXIgIitxfX19
+aT1nLnBvcCgpCnJldHVybiBBLksoYS51LGEuZSxpKX0sCkEoYSxiLGMsZCl7dmFyIHMscixxPWItNDgK
+Zm9yKHM9Yy5sZW5ndGg7YTxzOysrYSl7cj1jLmNoYXJDb2RlQXQoYSkKaWYoIShyPj00OCYmcjw9NTcp
+KWJyZWFrCnE9cSoxMCsoci00OCl9ZC5wdXNoKHEpCnJldHVybiBhfSwKdChhLGIsYyxkLGUpe3ZhciBz
+LHIscSxwLG8sbixtPWIrMQpmb3Iocz1jLmxlbmd0aDttPHM7KyttKXtyPWMuY2hhckNvZGVBdChtKQpp
+ZihyPT09NDYpe2lmKGUpYnJlYWsKZT0hMH1lbHNle2lmKCEoKCgocnwzMik+Pj4wKS05NyY2NTUzNSk8
+MjZ8fHI9PT05NXx8cj09PTM2KSlxPXI+PTQ4JiZyPD01NwplbHNlIHE9ITAKaWYoIXEpYnJlYWt9fXA9
+Yy5zdWJzdHJpbmcoYixtKQppZihlKXtzPWEudQpvPWEuZQppZihvLnk9PT0xMClvPW8uegpuPUEuUW8o
+cyxvLnopW3BdCmlmKG49PW51bGwpQS52KCdObyAiJytwKyciIGluICInK0EubUQobykrJyInKQpkLnB1
+c2goQS5jRShzLG8sbikpfWVsc2UgZC5wdXNoKHApCnJldHVybiBtfSwKSShhLGIpe3ZhciBzPWIucG9w
+KCkKaWYoMD09PXMpe2IucHVzaChBLm0oYS51LDEsIjAmIikpCnJldHVybn1pZigxPT09cyl7Yi5wdXNo
+KEEubShhLnUsNCwiMSYiKSkKcmV0dXJufXRocm93IEEuYihBLmhWKCJVbmV4cGVjdGVkIGV4dGVuZGVk
+IG9wZXJhdGlvbiAiK0EuRWoocykpKX0sCksoYSxiLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIilyZXR1
+cm4gQS5KKGEsYyxhLnNFQSkKZWxzZSBpZih0eXBlb2YgYz09Im51bWJlciIpcmV0dXJuIEEuVFYoYSxi
+LGMpCmVsc2UgcmV0dXJuIGN9LApyKGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZvcihzPTA7czxyOysr
+cyljW3NdPUEuSyhhLGIsY1tzXSl9LAp5KGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZvcihzPTI7czxy
+O3MrPTMpY1tzXT1BLksoYSxiLGNbc10pfSwKVFYoYSxiLGMpe3ZhciBzLHIscT1iLnkKaWYocT09PTEw
+KXtpZihjPT09MClyZXR1cm4gYi56CnM9Yi5RCnI9cy5sZW5ndGgKaWYoYzw9cilyZXR1cm4gc1tjLTFd
+CmMtPXIKYj1iLnoKcT1iLnl9ZWxzZSBpZihjPT09MClyZXR1cm4gYgppZihxIT09OSl0aHJvdyBBLmIo
+QS5oVigiSW5kZXhlZCBiYXNlIG11c3QgYmUgYW4gaW50ZXJmYWNlIHR5cGUiKSkKcz1iLlEKaWYoYzw9
+cy5sZW5ndGgpcmV0dXJuIHNbYy0xXQp0aHJvdyBBLmIoQS5oVigiQmFkIGluZGV4ICIrYysiIGZvciAi
+K2IudygwKSkpfSwKV2UoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagppZihiPT09ZCly
+ZXR1cm4hMAppZighQS5BOChkKSlpZighKGQ9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMApp
+ZihzKXJldHVybiEwCnI9Yi55CmlmKHI9PT00KXJldHVybiEwCmlmKEEuQTgoYikpcmV0dXJuITEKaWYo
+Yi55IT09MSlzPSExCmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnE9cj09PTEzCmlmKHEpaWYoQS5XZShh
+LGNbYi56XSxjLGQsZSkpcmV0dXJuITAKcD1kLnkKcz1iPT09dC5QfHxiPT09dC5UCmlmKHMpe2lmKHA9
+PT04KXJldHVybiBBLldlKGEsYixjLGQueixlKQpyZXR1cm4gZD09PXQuUHx8ZD09PXQuVHx8cD09PTd8
+fHA9PT02fWlmKGQ9PT10Lkspe2lmKHI9PT04KXJldHVybiBBLldlKGEsYi56LGMsZCxlKQppZihyPT09
+NilyZXR1cm4gQS5XZShhLGIueixjLGQsZSkKcmV0dXJuIHIhPT03fWlmKHI9PT02KXJldHVybiBBLldl
+KGEsYi56LGMsZCxlKQppZihwPT09Nil7cz1BLmN6KGEsZCkKcmV0dXJuIEEuV2UoYSxiLGMscyxlKX1p
+ZihyPT09OCl7aWYoIUEuV2UoYSxiLnosYyxkLGUpKXJldHVybiExCnJldHVybiBBLldlKGEsQS54Wihh
+LGIpLGMsZCxlKX1pZihyPT09Nyl7cz1BLldlKGEsdC5QLGMsZCxlKQpyZXR1cm4gcyYmQS5XZShhLGIu
+eixjLGQsZSl9aWYocD09PTgpe2lmKEEuV2UoYSxiLGMsZC56LGUpKXJldHVybiEwCnJldHVybiBBLldl
+KGEsYixjLEEueFooYSxkKSxlKX1pZihwPT09Nyl7cz1BLldlKGEsYixjLHQuUCxlKQpyZXR1cm4gc3x8
+QS5XZShhLGIsYyxkLnosZSl9aWYocSlyZXR1cm4hMQpzPXIhPT0xMQppZigoIXN8fHI9PT0xMikmJmQ9
+PT10LlkpcmV0dXJuITAKaWYocD09PTEyKXtpZihiPT09dC5FKXJldHVybiEwCmlmKHIhPT0xMilyZXR1
+cm4hMQpvPWIuUQpuPWQuUQptPW8ubGVuZ3RoCmlmKG0hPT1uLmxlbmd0aClyZXR1cm4hMQpjPWM9PW51
+bGw/bzpvLmNvbmNhdChjKQplPWU9PW51bGw/bjpuLmNvbmNhdChlKQpmb3IobD0wO2w8bTsrK2wpe2s9
+b1tsXQpqPW5bbF0KaWYoIUEuV2UoYSxrLGMsaixlKXx8IUEuV2UoYSxqLGUsayxjKSlyZXR1cm4hMX1y
+ZXR1cm4gQS5iTyhhLGIueixjLGQueixlKX1pZihwPT09MTEpe2lmKGI9PT10LkUpcmV0dXJuITAKaWYo
+cylyZXR1cm4hMQpyZXR1cm4gQS5iTyhhLGIsYyxkLGUpfWlmKHI9PT05KXtpZihwIT09OSlyZXR1cm4h
+MQpyZXR1cm4gQS5wRyhhLGIsYyxkLGUpfXJldHVybiExfSwKYk8oYTMsYTQsYTUsYTYsYTcpe3ZhciBz
+LHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyCmlmKCFBLldlKGEzLGE0
+LnosYTUsYTYueixhNykpcmV0dXJuITEKcz1hNC5RCnI9YTYuUQpxPXMuYQpwPXIuYQpvPXEubGVuZ3Ro
+Cm49cC5sZW5ndGgKaWYobz5uKXJldHVybiExCm09bi1vCmw9cy5iCms9ci5iCmo9bC5sZW5ndGgKaT1r
+Lmxlbmd0aAppZihvK2o8bitpKXJldHVybiExCmZvcihoPTA7aDxvOysraCl7Zz1xW2hdCmlmKCFBLldl
+KGEzLHBbaF0sYTcsZyxhNSkpcmV0dXJuITF9Zm9yKGg9MDtoPG07KytoKXtnPWxbaF0KaWYoIUEuV2Uo
+YTMscFtvK2hdLGE3LGcsYTUpKXJldHVybiExfWZvcihoPTA7aDxpOysraCl7Zz1sW20raF0KaWYoIUEu
+V2UoYTMsa1toXSxhNyxnLGE1KSlyZXR1cm4hMX1mPXMuYwplPXIuYwpkPWYubGVuZ3RoCmM9ZS5sZW5n
+dGgKZm9yKGI9MCxhPTA7YTxjO2ErPTMpe2EwPWVbYV0KZm9yKDshMDspe2lmKGI+PWQpcmV0dXJuITEK
+YTE9ZltiXQpiKz0zCmlmKGEwPGExKXJldHVybiExCmEyPWZbYi0yXQppZihhMTxhMCl7aWYoYTIpcmV0
+dXJuITEKY29udGludWV9Zz1lW2ErMV0KaWYoYTImJiFnKXJldHVybiExCmc9ZltiLTFdCmlmKCFBLldl
+KGEzLGVbYSsyXSxhNyxnLGE1KSlyZXR1cm4hMQpicmVha319Zm9yKDtiPGQ7KXtpZihmW2IrMV0pcmV0
+dXJuITEKYis9M31yZXR1cm4hMH0sCnBHKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbyxuLG0sbD1iLnos
+az1kLnoKZm9yKDtsIT09azspe3M9YS50UltsXQppZihzPT1udWxsKXJldHVybiExCmlmKHR5cGVvZiBz
+PT0ic3RyaW5nIil7bD1zCmNvbnRpbnVlfXI9c1trXQppZihyPT1udWxsKXJldHVybiExCnE9ci5sZW5n
+dGgKcD1xPjA/bmV3IEFycmF5KHEpOnYudHlwZVVuaXZlcnNlLnNFQQpmb3Iobz0wO288cTsrK28pcFtv
+XT1BLmNFKGEsYixyW29dKQpyZXR1cm4gQS5TVyhhLHAsbnVsbCxjLGQuUSxlKX1uPWIuUQptPWQuUQpy
+ZXR1cm4gQS5TVyhhLG4sbnVsbCxjLG0sZSl9LApTVyhhLGIsYyxkLGUsZil7dmFyIHMscixxLHA9Yi5s
+ZW5ndGgKZm9yKHM9MDtzPHA7KytzKXtyPWJbc10KcT1lW3NdCmlmKCFBLldlKGEscixkLHEsZikpcmV0
+dXJuITF9cmV0dXJuITB9LApsUihhKXt2YXIgcyxyPWEueQppZighKGE9PT10LlB8fGE9PT10LlQpKWlm
+KCFBLkE4KGEpKWlmKHIhPT03KWlmKCEocj09PTYmJkEubFIoYS56KSkpcz1yPT09OCYmQS5sUihhLnop
+CmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4gc30sCmNjKGEpe3Zh
+ciBzCmlmKCFBLkE4KGEpKWlmKCEoYT09PXQuXykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVy
+biBzfSwKQTgoYSl7dmFyIHM9YS55CnJldHVybiBzPT09Mnx8cz09PTN8fHM9PT00fHxzPT09NXx8YT09
+PXQuWH0sCkl4KGEsYil7dmFyIHMscixxPU9iamVjdC5rZXlzKGIpLHA9cS5sZW5ndGgKZm9yKHM9MDtz
+PHA7KytzKXtyPXFbc10KYVtyXT1iW3JdfX0sCnZVKGEpe3JldHVybiBhPjA/bmV3IEFycmF5KGEpOnYu
+dHlwZVVuaXZlcnNlLnNFQX0sCkpjOmZ1bmN0aW9uIEpjKGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmI9
+YgpfLng9Xy5yPV8uYz1udWxsCl8ueT0wCl8uY3k9Xy5jeD1fLmNoPV8uUT1fLno9bnVsbH0sCkc6ZnVu
+Y3Rpb24gRygpe3RoaXMuYz10aGlzLmI9dGhpcy5hPW51bGx9LApsWTpmdW5jdGlvbiBsWShhKXt0aGlz
+LmE9YX0sCmtTOmZ1bmN0aW9uIGtTKCl7fSwKaU06ZnVuY3Rpb24gaU0oYSl7dGhpcy5hPWF9LAp4Zygp
+e3ZhciBzLHIscT17fQppZihzZWxmLnNjaGVkdWxlSW1tZWRpYXRlIT1udWxsKXJldHVybiBBLkVYKCkK
+aWYoc2VsZi5NdXRhdGlvbk9ic2VydmVyIT1udWxsJiZzZWxmLmRvY3VtZW50IT1udWxsKXtzPXNlbGYu
+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikKcj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
+InNwYW4iKQpxLmE9bnVsbApuZXcgc2VsZi5NdXRhdGlvbk9ic2VydmVyKEEudFIobmV3IEEudGgocSks
+MSkpLm9ic2VydmUocyx7Y2hpbGRMaXN0OnRydWV9KQpyZXR1cm4gbmV3IEEuaGEocSxzLHIpfWVsc2Ug
+aWYoc2VsZi5zZXRJbW1lZGlhdGUhPW51bGwpcmV0dXJuIEEueXQoKQpyZXR1cm4gQS5xVygpfSwKWlYo
+YSl7c2VsZi5zY2hlZHVsZUltbWVkaWF0ZShBLnRSKG5ldyBBLlZzKHQuTS5hKGEpKSwwKSl9LApvQShh
+KXtzZWxmLnNldEltbWVkaWF0ZShBLnRSKG5ldyBBLkZ0KHQuTS5hKGEpKSwwKSl9LApCeihhKXt0Lk0u
+YShhKQpBLlFOKDAsYSl9LApRTihhLGIpe3ZhciBzPW5ldyBBLlczKCkKcy5DWShhLGIpCnJldHVybiBz
+fSwKRlgoYSl7cmV0dXJuIG5ldyBBLmloKG5ldyBBLnZzKCQuWDMsYS5DKCJ2czwwPiIpKSxhLkMoImlo
+PDA+IikpfSwKREkoYSxiKXthLiQyKDAsbnVsbCkKYi5iPSEwCnJldHVybiBiLmF9LApqUShhLGIpe0Eu
+SmUoYSxiKX0sCnlDKGEsYil7Yi5hTSgwLGEpfSwKZjMoYSxiKXtiLncwKEEuUnUoYSksQS50cyhhKSl9
+LApKZShhLGIpe3ZhciBzLHIscT1uZXcgQS5XTShiKSxwPW5ldyBBLlNYKGIpCmlmKGEgaW5zdGFuY2Vv
+ZiBBLnZzKWEuUWQocSxwLHQueikKZWxzZXtzPXQuegppZih0LmkuYihhKSlhLlNxKHEscCxzKQplbHNl
+e3I9bmV3IEEudnMoJC5YMyx0LmMpCnIuYT04CnIuYz1hCnIuUWQocSxwLHMpfX19LApseihhKXt2YXIg
+cz1mdW5jdGlvbihiLGMpe3JldHVybiBmdW5jdGlvbihkLGUpe3doaWxlKHRydWUpdHJ5e2IoZCxlKQpi
+cmVha31jYXRjaChyKXtlPXIKZD1jfX19KGEsMSkKcmV0dXJuICQuWDMuTGoobmV3IEEuR3MocyksdC5I
+LHQuUyx0LnopfSwKR1EoYSl7cmV0dXJuIG5ldyBBLkZ5KGEsMSl9LApUaCgpe3JldHVybiBCLndRfSwK
+WW0oYSl7cmV0dXJuIG5ldyBBLkZ5KGEsMyl9LApsMChhLGIpe3JldHVybiBuZXcgQS5xNChhLGIuQygi
+cTQ8MD4iKSl9LApUbChhLGIpe3ZhciBzPUEuY2IoYSwiZXJyb3IiLHQuSykKcmV0dXJuIG5ldyBBLkN3
+KHMsYj09bnVsbD9BLnYwKGEpOmIpfSwKdjAoYSl7dmFyIHMKaWYodC51LmIoYSkpe3M9YS5nSUkoKQpp
+ZihzIT1udWxsKXJldHVybiBzfXJldHVybiBCLnBkfSwKQTkoYSxiKXt2YXIgcyxyLHEKZm9yKHM9dC5j
+O3I9YS5hLChyJjQpIT09MDspYT1zLmEoYS5jKQppZigociYyNCkhPT0wKXtxPWIuYWgoKQpiLnVnKGEp
+CkEuSFooYixxKX1lbHNle3E9dC5lLmEoYi5jKQpiLmE9Yi5hJjF8NApiLmM9YQphLmpRKHEpfX0sCkha
+KGEsYTApe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGM9e30sYj1jLmE9YQpmb3Io
+cz10Lm4scj10LmUscT10Lmk7ITA7KXtwPXt9Cm89Yi5hCm49KG8mMTYpPT09MAptPSFuCmlmKGEwPT1u
+dWxsKXtpZihtJiYobyYxKT09PTApe2w9cy5hKGIuYykKQS5TaShsLmEsbC5iKX1yZXR1cm59cC5hPWEw
+Cms9YTAuYQpmb3IoYj1hMDtrIT1udWxsO2I9ayxrPWope2IuYT1udWxsCkEuSFooYy5hLGIpCnAuYT1r
+Cmo9ay5hfW89Yy5hCmk9by5jCnAuYj1tCnAuYz1pCmlmKG4pe2g9Yi5jCmg9KGgmMSkhPT0wfHwoaCYx
+NSk9PT04fWVsc2UgaD0hMAppZihoKXtnPWIuYi5iCmlmKG0pe289by5iPT09ZwpvPSEob3x8byl9ZWxz
+ZSBvPSExCmlmKG8pe3MuYShpKQpBLlNpKGkuYSxpLmIpCnJldHVybn1mPSQuWDMKaWYoZiE9PWcpJC5Y
+Mz1nCmVsc2UgZj1udWxsCmI9Yi5jCmlmKChiJjE1KT09PTgpbmV3IEEuUlQocCxjLG0pLiQwKCkKZWxz
+ZSBpZihuKXtpZigoYiYxKSE9PTApbmV3IEEucnEocCxpKS4kMCgpfWVsc2UgaWYoKGImMikhPT0wKW5l
+dyBBLlJXKGMscCkuJDAoKQppZihmIT1udWxsKSQuWDM9ZgpiPXAuYwppZihxLmIoYikpe289cC5hLiR0
+aQpvPW8uQygiYjg8Mj4iKS5iKGIpfHwhby5RWzFdLmIoYil9ZWxzZSBvPSExCmlmKG8pe3EuYShiKQpl
+PXAuYS5iCmlmKChiLmEmMjQpIT09MCl7ZD1yLmEoZS5jKQplLmM9bnVsbAphMD1lLk44KGQpCmUuYT1i
+LmEmMzB8ZS5hJjEKZS5jPWIuYwpjLmE9Ygpjb250aW51ZX1lbHNlIEEuQTkoYixlKQpyZXR1cm59fWU9
+cC5hLmIKZD1yLmEoZS5jKQplLmM9bnVsbAphMD1lLk44KGQpCmI9cC5iCm89cC5jCmlmKCFiKXtlLiR0
+aS5jLmEobykKZS5hPTgKZS5jPW99ZWxzZXtzLmEobykKZS5hPWUuYSYxfDE2CmUuYz1vfWMuYT1lCmI9
+ZX19LApWSChhLGIpe3ZhciBzCmlmKHQubS5iKGEpKXJldHVybiBiLkxqKGEsdC56LHQuSyx0LmwpCnM9
+dC52CmlmKHMuYihhKSlyZXR1cm4gcy5hKGEpCnRocm93IEEuYihBLkwzKGEsIm9uRXJyb3IiLHUuYykp
+fSwKcHUoKXt2YXIgcyxyCmZvcihzPSQuUzY7cyE9bnVsbDtzPSQuUzYpeyQubWc9bnVsbApyPXMuYgok
+LlM2PXIKaWYocj09bnVsbCkkLms4PW51bGwKcy5hLiQwKCl9fSwKZU4oKXskLlVEPSEwCnRyeXtBLnB1
+KCl9ZmluYWxseXskLm1nPW51bGwKJC5VRD0hMQppZigkLlM2IT1udWxsKSQudXQoKS4kMShBLlVJKCkp
+fX0sCmVXKGEpe3ZhciBzPW5ldyBBLk9NKGEpLHI9JC5rOAppZihyPT1udWxsKXskLlM2PSQuazg9cwpp
+ZighJC5VRCkkLnV0KCkuJDEoQS5VSSgpKX1lbHNlICQuazg9ci5iPXN9LApyUihhKXt2YXIgcyxyLHEs
+cD0kLlM2CmlmKHA9PW51bGwpe0EuZVcoYSkKJC5tZz0kLms4CnJldHVybn1zPW5ldyBBLk9NKGEpCnI9
+JC5tZwppZihyPT1udWxsKXtzLmI9cAokLlM2PSQubWc9c31lbHNle3E9ci5iCnMuYj1xCiQubWc9ci5i
+PXMKaWYocT09bnVsbCkkLms4PXN9fSwKcmIoYSl7dmFyIHM9bnVsbCxyPSQuWDMKaWYoQi5OVT09PXIp
+e0EuVGsocyxzLEIuTlUsYSkKcmV0dXJufUEuVGsocyxzLHIsdC5NLmEoci5HWShhKSkpfSwKUXcoYSxi
+KXtBLmNiKGEsInN0cmVhbSIsdC5LKQpyZXR1cm4gbmV3IEEueEkoYi5DKCJ4STwwPiIpKX0sClNpKGEs
+Yil7QS5yUihuZXcgQS5FdihhLGIpKX0sClQ4KGEsYixjLGQsZSl7dmFyIHMscj0kLlgzCmlmKHI9PT1j
+KXJldHVybiBkLiQwKCkKJC5YMz1jCnM9cgp0cnl7cj1kLiQwKCkKcmV0dXJuIHJ9ZmluYWxseXskLlgz
+PXN9fSwKeXYoYSxiLGMsZCxlLGYsZyl7dmFyIHMscj0kLlgzCmlmKHI9PT1jKXJldHVybiBkLiQxKGUp
+CiQuWDM9YwpzPXIKdHJ5e3I9ZC4kMShlKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LApReChhLGIs
+YyxkLGUsZixnLGgsaSl7dmFyIHMscj0kLlgzCmlmKHI9PT1jKXJldHVybiBkLiQyKGUsZikKJC5YMz1j
+CnM9cgp0cnl7cj1kLiQyKGUsZikKcmV0dXJuIHJ9ZmluYWxseXskLlgzPXN9fSwKVGsoYSxiLGMsZCl7
+dC5NLmEoZCkKaWYoQi5OVSE9PWMpZD1jLkdZKGQpCkEuZVcoZCl9LAp0aDpmdW5jdGlvbiB0aChhKXt0
+aGlzLmE9YX0sCmhhOmZ1bmN0aW9uIGhhKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30s
+ClZzOmZ1bmN0aW9uIFZzKGEpe3RoaXMuYT1hfSwKRnQ6ZnVuY3Rpb24gRnQoYSl7dGhpcy5hPWF9LApX
+MzpmdW5jdGlvbiBXMygpe30sCnlIOmZ1bmN0aW9uIHlIKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApp
+aDpmdW5jdGlvbiBpaChhLGIpe3RoaXMuYT1hCnRoaXMuYj0hMQp0aGlzLiR0aT1ifSwKV006ZnVuY3Rp
+b24gV00oYSl7dGhpcy5hPWF9LApTWDpmdW5jdGlvbiBTWChhKXt0aGlzLmE9YX0sCkdzOmZ1bmN0aW9u
+IEdzKGEpe3RoaXMuYT1hfSwKRnk6ZnVuY3Rpb24gRnkoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkdW
+OmZ1bmN0aW9uIEdWKGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmQ9Xy5jPV8uYj1udWxsCl8uJHRpPWJ9
+LApxNDpmdW5jdGlvbiBxNChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApDdzpmdW5jdGlvbiBDdyhh
+LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKUGY6ZnVuY3Rpb24gUGYoKXt9LApaZjpmdW5jdGlvbiBaZihh
+LGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApGZTpmdW5jdGlvbiBGZShhLGIsYyxkLGUpe3ZhciBfPXRo
+aXMKXy5hPW51bGwKXy5iPWEKXy5jPWIKXy5kPWMKXy5lPWQKXy4kdGk9ZX0sCnZzOmZ1bmN0aW9uIHZz
+KGEsYil7dmFyIF89dGhpcwpfLmE9MApfLmI9YQpfLmM9bnVsbApfLiR0aT1ifSwKZGE6ZnVuY3Rpb24g
+ZGEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCm9ROmZ1bmN0aW9uIG9RKGEsYil7dGhpcy5hPWEKdGhp
+cy5iPWJ9LApwVjpmdW5jdGlvbiBwVihhKXt0aGlzLmE9YX0sClU3OmZ1bmN0aW9uIFU3KGEpe3RoaXMu
+YT1hfSwKdnI6ZnVuY3Rpb24gdnIoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKcnQ6
+ZnVuY3Rpb24gcnQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCktGOmZ1bmN0aW9uIEtGKGEsYil7dGhp
+cy5hPWEKdGhpcy5iPWJ9LApaTDpmdW5jdGlvbiBaTChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp
+cy5jPWN9LApSVDpmdW5jdGlvbiBSVChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApq
+WjpmdW5jdGlvbiBqWihhKXt0aGlzLmE9YX0sCnJxOmZ1bmN0aW9uIHJxKGEsYil7dGhpcy5hPWEKdGhp
+cy5iPWJ9LApSVzpmdW5jdGlvbiBSVyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKT006ZnVuY3Rpb24g
+T00oYSl7dGhpcy5hPWEKdGhpcy5iPW51bGx9LApxaDpmdW5jdGlvbiBxaCgpe30sCkI1OmZ1bmN0aW9u
+IEI1KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp1TzpmdW5jdGlvbiB1TyhhLGIpe3RoaXMuYT1hCnRo
+aXMuYj1ifSwKTU86ZnVuY3Rpb24gTU8oKXt9LAprVDpmdW5jdGlvbiBrVCgpe30sCnhJOmZ1bmN0aW9u
+IHhJKGEpe3RoaXMuJHRpPWF9LAptMDpmdW5jdGlvbiBtMCgpe30sCkV2OmZ1bmN0aW9uIEV2KGEsYil7
+dGhpcy5hPWEKdGhpcy5iPWJ9LApKaTpmdW5jdGlvbiBKaSgpe30sClZwOmZ1bmN0aW9uIFZwKGEsYil7
+dGhpcy5hPWEKdGhpcy5iPWJ9LApPUjpmdW5jdGlvbiBPUihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIK
+dGhpcy5jPWN9LApFRihhLGIsYyl7cmV0dXJuIGIuQygiQDwwPiIpLktxKGMpLkMoIkZvPDEsMj4iKS5h
+KEEuQjcoYSxuZXcgQS5ONShiLkMoIkA8MD4iKS5LcShjKS5DKCJONTwxLDI+IikpKSl9LApGbChhLGIp
+e3JldHVybiBuZXcgQS5ONShhLkMoIkA8MD4iKS5LcShiKS5DKCJONTwxLDI+IikpfSwKTHMoYSl7cmV0
+dXJuIG5ldyBBLmI2KGEuQygiYjY8MD4iKSl9LApUMigpe3ZhciBzPU9iamVjdC5jcmVhdGUobnVsbCkK
+c1siPG5vbi1pZGVudGlmaWVyLWtleT4iXT1zCmRlbGV0ZSBzWyI8bm9uLWlkZW50aWZpZXIta2V5PiJd
+CnJldHVybiBzfSwKcmooYSxiLGMpe3ZhciBzPW5ldyBBLmxtKGEsYixjLkMoImxtPDA+IikpCnMuYz1h
+LmUKcmV0dXJuIHN9LApFUChhLGIsYyl7dmFyIHMscgppZihBLmhCKGEpKXtpZihiPT09IigiJiZjPT09
+IikiKXJldHVybiIoLi4uKSIKcmV0dXJuIGIrIi4uLiIrY31zPUEuUUkoW10sdC5zKQpCLk5tLmkoJC56
+LGEpCnRyeXtBLlZyKGEscyl9ZmluYWxseXtpZigwPj0kLnoubGVuZ3RoKXJldHVybiBBLk9IKCQueiwt
+MSkKJC56LnBvcCgpfXI9QS5sKGIsdC5rLmEocyksIiwgIikrYwpyZXR1cm4gci5jaGFyQ29kZUF0KDAp
+PT0wP3I6cn0sCngoYSxiLGMpe3ZhciBzLHIKaWYoQS5oQihhKSlyZXR1cm4gYisiLi4uIitjCnM9bmV3
+IEEuTShiKQpCLk5tLmkoJC56LGEpCnRyeXtyPXMKci5hPUEubChyLmEsYSwiLCAiKX1maW5hbGx5e2lm
+KDA+PSQuei5sZW5ndGgpcmV0dXJuIEEuT0goJC56LC0xKQokLnoucG9wKCl9cy5hKz1jCnI9cy5hCnJl
+dHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfSwKaEIoYSl7dmFyIHMscgpmb3Iocz0kLnoubGVuZ3Ro
+LHI9MDtyPHM7KytyKWlmKGE9PT0kLnpbcl0pcmV0dXJuITAKcmV0dXJuITF9LApWcihhLGIpe3ZhciBz
+LHIscSxwLG8sbixtLGw9YS5nbShhKSxrPTAsaj0wCndoaWxlKCEwKXtpZighKGs8ODB8fGo8MykpYnJl
+YWsKaWYoIWwuRigpKXJldHVybgpzPUEuRWoobC5nbCgpKQpCLk5tLmkoYixzKQprKz1zLmxlbmd0aCsy
+Oysran1pZighbC5GKCkpe2lmKGo8PTUpcmV0dXJuCmlmKDA+PWIubGVuZ3RoKXJldHVybiBBLk9IKGIs
+LTEpCnI9Yi5wb3AoKQppZigwPj1iLmxlbmd0aClyZXR1cm4gQS5PSChiLC0xKQpxPWIucG9wKCl9ZWxz
+ZXtwPWwuZ2woKTsrK2oKaWYoIWwuRigpKXtpZihqPD00KXtCLk5tLmkoYixBLkVqKHApKQpyZXR1cm59
+cj1BLkVqKHApCmlmKDA+PWIubGVuZ3RoKXJldHVybiBBLk9IKGIsLTEpCnE9Yi5wb3AoKQprKz1yLmxl
+bmd0aCsyfWVsc2V7bz1sLmdsKCk7KytqCmZvcig7bC5GKCk7cD1vLG89bil7bj1sLmdsKCk7KytqCmlm
+KGo+MTAwKXt3aGlsZSghMCl7aWYoIShrPjc1JiZqPjMpKWJyZWFrCmlmKDA+PWIubGVuZ3RoKXJldHVy
+biBBLk9IKGIsLTEpCmstPWIucG9wKCkubGVuZ3RoKzI7LS1qfUIuTm0uaShiLCIuLi4iKQpyZXR1cm59
+fXE9QS5FaihwKQpyPUEuRWoobykKays9ci5sZW5ndGgrcS5sZW5ndGgrNH19aWYoaj5iLmxlbmd0aCsy
+KXtrKz01Cm09Ii4uLiJ9ZWxzZSBtPW51bGwKd2hpbGUoITApe2lmKCEoaz44MCYmYi5sZW5ndGg+Mykp
+YnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEEuT0goYiwtMSkKay09Yi5wb3AoKS5sZW5ndGgrMgpp
+ZihtPT1udWxsKXtrKz01Cm09Ii4uLiJ9fWlmKG0hPW51bGwpQi5ObS5pKGIsbSkKQi5ObS5pKGIscSkK
+Qi5ObS5pKGIscil9LAp0TShhLGIpe3ZhciBzLHIscT1BLkxzKGIpCmZvcihzPWEubGVuZ3RoLHI9MDty
+PGEubGVuZ3RoO2EubGVuZ3RoPT09c3x8KDAsQS5saykoYSksKytyKXEuaSgwLGIuYShhW3JdKSkKcmV0
+dXJuIHF9LApuTyhhKXt2YXIgcyxyPXt9CmlmKEEuaEIoYSkpcmV0dXJuInsuLi59IgpzPW5ldyBBLk0o
+IiIpCnRyeXtCLk5tLmkoJC56LGEpCnMuYSs9InsiCnIuYT0hMAphLksoMCxuZXcgQS5yYShyLHMpKQpz
+LmErPSJ9In1maW5hbGx5e2lmKDA+PSQuei5sZW5ndGgpcmV0dXJuIEEuT0goJC56LC0xKQokLnoucG9w
+KCl9cj1zLmEKcmV0dXJuIHIuY2hhckNvZGVBdCgwKT09MD9yOnJ9LApiNjpmdW5jdGlvbiBiNihhKXt2
+YXIgXz10aGlzCl8uYT0wCl8uZj1fLmU9Xy5kPV8uYz1fLmI9bnVsbApfLnI9MApfLiR0aT1hfSwKYm46
+ZnVuY3Rpb24gYm4oYSl7dGhpcy5hPWEKdGhpcy5jPXRoaXMuYj1udWxsfSwKbG06ZnVuY3Rpb24gbG0o
+YSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsCl8uJHRpPWN9LAptVzpmdW5j
+dGlvbiBtVygpe30sCnV5OmZ1bmN0aW9uIHV5KCl7fSwKbEQ6ZnVuY3Rpb24gbEQoKXt9LAppbDpmdW5j
+dGlvbiBpbCgpe30sCnJhOmZ1bmN0aW9uIHJhKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApZazpmdW5j
+dGlvbiBZaygpe30sCnlROmZ1bmN0aW9uIHlRKGEpe3RoaXMuYT1hfSwKS1A6ZnVuY3Rpb24gS1AoKXt9
+LApQbjpmdW5jdGlvbiBQbigpe30sCkdqOmZ1bmN0aW9uIEdqKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9
+Yn0sCmxmOmZ1bmN0aW9uIGxmKCl7fSwKVmo6ZnVuY3Rpb24gVmooKXt9LApYdjpmdW5jdGlvbiBYdigp
+e30sCm5ZOmZ1bmN0aW9uIG5ZKCl7fSwKV1k6ZnVuY3Rpb24gV1koKXt9LApSVTpmdW5jdGlvbiBSVSgp
+e30sCnBSOmZ1bmN0aW9uIHBSKCl7fSwKQlMoYSxiKXt2YXIgcyxyLHEscD1udWxsCnRyeXtwPUpTT04u
+cGFyc2UoYSl9Y2F0Y2gocil7cz1BLlJ1KHIpCnE9QS5ycihTdHJpbmcocyksbnVsbCxudWxsKQp0aHJv
+dyBBLmIocSl9cT1BLlFlKHApCnJldHVybiBxfSwKUWUoYSl7dmFyIHMKaWYoYT09bnVsbClyZXR1cm4g
+bnVsbAppZih0eXBlb2YgYSE9Im9iamVjdCIpcmV0dXJuIGEKaWYoT2JqZWN0LmdldFByb3RvdHlwZU9m
+KGEpIT09QXJyYXkucHJvdG90eXBlKXJldHVybiBuZXcgQS51dyhhLE9iamVjdC5jcmVhdGUobnVsbCkp
+CmZvcihzPTA7czxhLmxlbmd0aDsrK3MpYVtzXT1BLlFlKGFbc10pCnJldHVybiBhfSwKa3koYSxiLGMs
+ZCl7dmFyIHMscgppZihiIGluc3RhbmNlb2YgVWludDhBcnJheSl7cz1iCmQ9cy5sZW5ndGgKaWYoZC1j
+PDE1KXJldHVybiBudWxsCnI9QS5SUChhLHMsYyxkKQppZihyIT1udWxsJiZhKWlmKHIuaW5kZXhPZigi
+XHVmZmZkIik+PTApcmV0dXJuIG51bGwKcmV0dXJuIHJ9cmV0dXJuIG51bGx9LApSUChhLGIsYyxkKXt2
+YXIgcz1hPyQuSEcoKTokLnJmKCkKaWYocz09bnVsbClyZXR1cm4gbnVsbAppZigwPT09YyYmZD09PWIu
+bGVuZ3RoKXJldHVybiBBLlJiKHMsYikKcmV0dXJuIEEuUmIocyxiLnN1YmFycmF5KGMsQS5qQihjLGQs
+Yi5sZW5ndGgpKSl9LApSYihhLGIpe3ZhciBzLHIKdHJ5e3M9YS5kZWNvZGUoYikKcmV0dXJuIHN9Y2F0
+Y2gocil7fXJldHVybiBudWxsfSwKeE0oYSxiLGMsZCxlLGYpe2lmKEIuam4uelkoZiw0KSE9PTApdGhy
+b3cgQS5iKEEucnIoIkludmFsaWQgYmFzZTY0IHBhZGRpbmcsIHBhZGRlZCBsZW5ndGggbXVzdCBiZSBt
+dWx0aXBsZSBvZiBmb3VyLCBpcyAiK2YsYSxjKSkKaWYoZCtlIT09Zil0aHJvdyBBLmIoQS5ycigiSW52
+YWxpZCBiYXNlNjQgcGFkZGluZywgJz0nIG5vdCBhdCB0aGUgZW5kIixhLGIpKQppZihlPjIpdGhyb3cg
+QS5iKEEucnIoIkludmFsaWQgYmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3Rl
+cnMiLGEsYikpfSwKR3koYSxiLGMpe3JldHVybiBuZXcgQS5VZChhLGIpfSwKTkMoYSl7cmV0dXJuIGEu
+THQoKX0sClVnKGEsYil7cmV0dXJuIG5ldyBBLnR1KGEsW10sQS5DeSgpKX0sCnVYKGEsYixjKXt2YXIg
+cyxyPW5ldyBBLk0oIiIpLHE9QS5VZyhyLGIpCnEuaVUoYSkKcz1yLmEKcmV0dXJuIHMuY2hhckNvZGVB
+dCgwKT09MD9zOnN9LApqNChhKXtzd2l0Y2goYSl7Y2FzZSA2NTpyZXR1cm4iTWlzc2luZyBleHRlbnNp
+b24gYnl0ZSIKY2FzZSA2NzpyZXR1cm4iVW5leHBlY3RlZCBleHRlbnNpb24gYnl0ZSIKY2FzZSA2OTpy
+ZXR1cm4iSW52YWxpZCBVVEYtOCBieXRlIgpjYXNlIDcxOnJldHVybiJPdmVybG9uZyBlbmNvZGluZyIK
+Y2FzZSA3MzpyZXR1cm4iT3V0IG9mIHVuaWNvZGUgcmFuZ2UiCmNhc2UgNzU6cmV0dXJuIkVuY29kZWQg
+c3Vycm9nYXRlIgpjYXNlIDc3OnJldHVybiJVbmZpbmlzaGVkIFVURi04IG9jdGV0IHNlcXVlbmNlIgpk
+ZWZhdWx0OnJldHVybiIifX0sCmp5KGEsYixjKXt2YXIgcyxyLHEscD1jLWIsbz1uZXcgVWludDhBcnJh
+eShwKQpmb3Iocz1KLlU2KGEpLHI9MDtyPHA7KytyKXtxPXMucShhLGIrcikKaWYoKHEmNDI5NDk2NzA0
+MCk+Pj4wIT09MClxPTI1NQppZighKHI8cCkpcmV0dXJuIEEuT0gobyxyKQpvW3JdPXF9cmV0dXJuIG99
+LAp1dzpmdW5jdGlvbiB1dyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1udWxsfSwKaTg6ZnVu
+Y3Rpb24gaTgoYSl7dGhpcy5hPWF9LAp4cjpmdW5jdGlvbiB4cigpe30sCk56OmZ1bmN0aW9uIE56KCl7
+fSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9LApVODpmdW5jdGlvbiBVOCgpe30sClVrOmZ1bmN0aW9uIFVrKCl7
+fSwKd0k6ZnVuY3Rpb24gd0koKXt9LApaaTpmdW5jdGlvbiBaaSgpe30sClVkOmZ1bmN0aW9uIFVkKGEs
+Yil7dGhpcy5hPWEKdGhpcy5iPWJ9LApLODpmdW5jdGlvbiBLOChhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
+fSwKYnk6ZnVuY3Rpb24gYnkoKXt9LApvajpmdW5jdGlvbiBvaihhKXt0aGlzLmI9YX0sCk14OmZ1bmN0
+aW9uIE14KGEpe3RoaXMuYT1hfSwKU2g6ZnVuY3Rpb24gU2goKXt9LAp0aTpmdW5jdGlvbiB0aShhLGIp
+e3RoaXMuYT1hCnRoaXMuYj1ifSwKdHU6ZnVuY3Rpb24gdHUoYSxiLGMpe3RoaXMuYz1hCnRoaXMuYT1i
+CnRoaXMuYj1jfSwKdTU6ZnVuY3Rpb24gdTUoKXt9LApFMzpmdW5jdGlvbiBFMygpe30sClJ3OmZ1bmN0
+aW9uIFJ3KGEpe3RoaXMuYj0wCnRoaXMuYz1hfSwKR1k6ZnVuY3Rpb24gR1koYSl7dGhpcy5hPWF9LApi
+ejpmdW5jdGlvbiBieihhKXt0aGlzLmE9YQp0aGlzLmI9MTYKdGhpcy5jPTB9LApRQShhLGIpe3ZhciBz
+PUEuSHAoYSxiKQppZihzIT1udWxsKXJldHVybiBzCnRocm93IEEuYihBLnJyKGEsbnVsbCxudWxsKSl9
+LApvcyhhKXtpZihhIGluc3RhbmNlb2YgQS5UcClyZXR1cm4gYS53KDApCnJldHVybiJJbnN0YW5jZSBv
+ZiAnIitBLmxoKGEpKyInIn0sCk8xKGEsYil7YT10LksuYShBLmIoYSkpCmEuc3RhY2s9Yi53KDApCnRo
+cm93IGEKdGhyb3cgQS5iKCJ1bnJlYWNoYWJsZSIpfSwKTzgoYSxiLGMsZCl7dmFyIHMscj1jP0ouS2go
+YSxkKTpKLlFpKGEsZCkKaWYoYSE9PTAmJmIhPW51bGwpZm9yKHM9MDtzPHIubGVuZ3RoOysrcylyW3Nd
+PWIKcmV0dXJuIHJ9LApQVyhhLGIsYyl7dmFyIHMscj1BLlFJKFtdLGMuQygiamQ8MD4iKSkKZm9yKHM9
+Si5JVChhKTtzLkYoKTspQi5ObS5pKHIsYy5hKHMuZ2woKSkpCmlmKGIpcmV0dXJuIHIKcmV0dXJuIEou
+RXAocixjKX0sClkxKGEsYixjKXt2YXIgcwppZihiKXJldHVybiBBLmV2KGEsYykKcz1KLkVwKEEuZXYo
+YSxjKSxjKQpyZXR1cm4gc30sCmV2KGEsYil7dmFyIHMscgppZihBcnJheS5pc0FycmF5KGEpKXJldHVy
+biBBLlFJKGEuc2xpY2UoMCksYi5DKCJqZDwwPiIpKQpzPUEuUUkoW10sYi5DKCJqZDwwPiIpKQpmb3Io
+cj1KLklUKGEpO3IuRigpOylCLk5tLmkocyxyLmdsKCkpCnJldHVybiBzfSwKQUYoYSxiKXtyZXR1cm4g
+Si56QyhBLlBXKGEsITEsYikpfSwKSE0oYSxiLGMpe3ZhciBzPUEuZncoYSxiLEEuakIoYixjLGEubGVu
+Z3RoKSkKcmV0dXJuIHN9LApPbyhhKXtyZXR1cm4gQS5MdyhhKX0sCm51KGEpe3JldHVybiBuZXcgQS5W
+UihhLEEudjQoYSwhMSwhMCwhMSwhMSwhMSkpfSwKbChhLGIsYyl7dmFyIHM9Si5JVChiKQppZighcy5G
+KCkpcmV0dXJuIGEKaWYoYy5sZW5ndGg9PT0wKXtkbyBhKz1BLkVqKHMuZ2woKSkKd2hpbGUocy5GKCkp
+fWVsc2V7YSs9QS5FaihzLmdsKCkpCmZvcig7cy5GKCk7KWE9YStjK0EuRWoocy5nbCgpKX1yZXR1cm4g
+YX0sCmxyKGEsYixjLGQpe3JldHVybiBuZXcgQS5tcChhLGIsYyxkKX0sCnVvKCl7dmFyIHM9QS5NMCgp
+CmlmKHMhPW51bGwpcmV0dXJuIEEuaEsocykKdGhyb3cgQS5iKEEuTDQoIidVcmkuYmFzZScgaXMgbm90
+IHN1cHBvcnRlZCIpKX0sCmVQKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtPSIwMTIzNDU2Nzg5QUJD
+REVGIgppZihjPT09Qi54TSl7cz0kLno0KCkuYgpzPXMudGVzdChiKX1lbHNlIHM9ITEKaWYocylyZXR1
+cm4gYgpBLkxoKGMpLkMoIlVrLlMiKS5hKGIpCnI9Yy5nWkUoKS5XSihiKQpmb3Iocz1yLmxlbmd0aCxx
+PTAscD0iIjtxPHM7KytxKXtvPXJbcV0KaWYobzwxMjgpe249bz4+PjQKaWYoIShuPDgpKXJldHVybiBB
+Lk9IKGEsbikKbj0oYVtuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEKaWYobilwKz1BLkx3KG8pCmVs
+c2UgcD1kJiZvPT09MzI/cCsiKyI6cCsiJSIrbVtvPj4+NCYxNV0rbVtvJjE1XX1yZXR1cm4gcC5jaGFy
+Q29kZUF0KDApPT0wP3A6cH0sCkdxKGEpe3ZhciBzPU1hdGguYWJzKGEpLHI9YTwwPyItIjoiIgppZihz
+Pj0xMDAwKXJldHVybiIiK2EKaWYocz49MTAwKXJldHVybiByKyIwIitzCmlmKHM+PTEwKXJldHVybiBy
+KyIwMCIrcwpyZXR1cm4gcisiMDAwIitzfSwKVngoYSl7aWYoYT49MTAwKXJldHVybiIiK2EKaWYoYT49
+MTApcmV0dXJuIjAiK2EKcmV0dXJuIjAwIithfSwKaDAoYSl7aWYoYT49MTApcmV0dXJuIiIrYQpyZXR1
+cm4iMCIrYX0sCmhsKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyInx8QS5yUShhKXx8YT09bnVsbClyZXR1
+cm4gSi5ZUyhhKQppZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpCnJl
+dHVybiBBLm9zKGEpfSwKaFYoYSl7cmV0dXJuIG5ldyBBLkM2KGEpfSwKeFkoYSxiKXtyZXR1cm4gbmV3
+IEEuQVQoITEsbnVsbCxiLGEpfSwKTDMoYSxiLGMpe3JldHVybiBuZXcgQS5BVCghMCxhLGIsYyl9LApN
+UihhLGIsYyl7cmV0dXJuIGF9LApPNyhhLGIpe3JldHVybiBuZXcgQS5iSihudWxsLG51bGwsITAsYSxi
+LCJWYWx1ZSBub3QgaW4gcmFuZ2UiKX0sClRFKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBBLmJKKGIsYywh
+MCxhLGQsIkludmFsaWQgdmFsdWUiKX0sCndBKGEsYixjLGQpe2lmKGE8Ynx8YT5jKXRocm93IEEuYihB
+LlRFKGEsYixjLGQsbnVsbCkpCnJldHVybiBhfSwKakIoYSxiLGMpe2lmKDA+YXx8YT5jKXRocm93IEEu
+YihBLlRFKGEsMCxjLCJzdGFydCIsbnVsbCkpCmlmKGIhPW51bGwpe2lmKGE+Ynx8Yj5jKXRocm93IEEu
+YihBLlRFKGIsYSxjLCJlbmQiLG51bGwpKQpyZXR1cm4gYn1yZXR1cm4gY30sCmsxKGEsYil7aWYoYTww
+KXRocm93IEEuYihBLlRFKGEsMCxudWxsLGIsbnVsbCkpCnJldHVybiBhfSwKQ2YoYSxiLGMsZCxlKXt2
+YXIgcz1BLklaKGU9PW51bGw/Si5IbShiKTplKQpyZXR1cm4gbmV3IEEuZVkocywhMCxhLGMsIkluZGV4
+IG91dCBvZiByYW5nZSIpfSwKTDQoYSl7cmV0dXJuIG5ldyBBLnViKGEpfSwKU1koYSl7cmV0dXJuIG5l
+dyBBLmRzKGEpfSwKUFYoYSl7cmV0dXJuIG5ldyBBLmxqKGEpfSwKYTQoYSl7cmV0dXJuIG5ldyBBLlVW
+KGEpfSwKcnIoYSxiLGMpe3JldHVybiBuZXcgQS5hRShhLGIsYyl9LApmNShhLGIsYyxkKXt2YXIgcyxy
+PUIuQ0QuZ2lPKGEpCmI9Qi5DRC5naU8oYikKYz1CLkNELmdpTyhjKQpkPUIuQ0QuZ2lPKGQpCnM9JC50
+OCgpCnJldHVybiBBLnFMKEEueWMoQS55YyhBLnljKEEueWMocyxyKSxiKSxjKSxkKSl9LApoSyhhNSl7
+dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTAsYTEsYTIsYTM9bnVsbCxh
+ND1hNS5sZW5ndGgKaWYoYTQ+PTUpe3M9KChCLnhCLlcoYTUsNCleNTgpKjN8Qi54Qi5XKGE1LDApXjEw
+MHxCLnhCLlcoYTUsMSleOTd8Qi54Qi5XKGE1LDIpXjExNnxCLnhCLlcoYTUsMyleOTcpPj4+MAppZihz
+PT09MClyZXR1cm4gQS5LRChhNDxhND9CLnhCLk5qKGE1LDAsYTQpOmE1LDUsYTMpLmdsUigpCmVsc2Ug
+aWYocz09PTMyKXJldHVybiBBLktEKEIueEIuTmooYTUsNSxhNCksMCxhMykuZ2xSKCl9cj1BLk84KDgs
+MCwhMSx0LlMpCkIuTm0uWTUociwwLDApCkIuTm0uWTUociwxLC0xKQpCLk5tLlk1KHIsMiwtMSkKQi5O
+bS5ZNShyLDcsLTEpCkIuTm0uWTUociwzLDApCkIuTm0uWTUociw0LDApCkIuTm0uWTUociw1LGE0KQpC
+Lk5tLlk1KHIsNixhNCkKaWYoQS5VQihhNSwwLGE0LDAscik+PTE0KUIuTm0uWTUociw3LGE0KQpxPXJb
+MV0KaWYocT49MClpZihBLlVCKGE1LDAscSwyMCxyKT09PTIwKXJbN109cQpwPXJbMl0rMQpvPXJbM10K
+bj1yWzRdCm09cls1XQpsPXJbNl0KaWYobDxtKW09bAppZihuPHApbj1tCmVsc2UgaWYobjw9cSluPXEr
+MQppZihvPHApbz1uCms9cls3XTwwCmlmKGspaWYocD5xKzMpe2o9YTMKaz0hMX1lbHNle2k9bz4wCmlm
+KGkmJm8rMT09PW4pe2o9YTMKaz0hMX1lbHNle2lmKCEobTxhNCYmbT09PW4rMiYmQi54Qi5RaShhNSwi
+Li4iLG4pKSloPW0+bisyJiZCLnhCLlFpKGE1LCIvLi4iLG0tMykKZWxzZSBoPSEwCmlmKGgpe2o9YTMK
+az0hMX1lbHNle2lmKHE9PT00KWlmKEIueEIuUWkoYTUsImZpbGUiLDApKXtpZihwPD0wKXtpZighQi54
+Qi5RaShhNSwiLyIsbikpe2c9ImZpbGU6Ly8vIgpzPTN9ZWxzZXtnPSJmaWxlOi8vIgpzPTJ9YTU9ZytC
+LnhCLk5qKGE1LG4sYTQpCnEtPTAKaT1zLTAKbSs9aQpsKz1pCmE0PWE1Lmxlbmd0aApwPTcKbz03Cm49
+N31lbHNlIGlmKG49PT1tKXsrK2wKZj1tKzEKYTU9Qi54Qi5pNyhhNSxuLG0sIi8iKTsrK2E0Cm09Zn1q
+PSJmaWxlIn1lbHNlIGlmKEIueEIuUWkoYTUsImh0dHAiLDApKXtpZihpJiZvKzM9PT1uJiZCLnhCLlFp
+KGE1LCI4MCIsbysxKSl7bC09MwplPW4tMwptLT0zCmE1PUIueEIuaTcoYTUsbyxuLCIiKQphNC09Mwpu
+PWV9aj0iaHR0cCJ9ZWxzZSBqPWEzCmVsc2UgaWYocT09PTUmJkIueEIuUWkoYTUsImh0dHBzIiwwKSl7
+aWYoaSYmbys0PT09biYmQi54Qi5RaShhNSwiNDQzIixvKzEpKXtsLT00CmU9bi00Cm0tPTQKYTU9Qi54
+Qi5pNyhhNSxvLG4sIiIpCmE0LT0zCm49ZX1qPSJodHRwcyJ9ZWxzZSBqPWEzCms9ITB9fX1lbHNlIGo9
+YTMKaWYoayl7aWYoYTQ8YTUubGVuZ3RoKXthNT1CLnhCLk5qKGE1LDAsYTQpCnEtPTAKcC09MApvLT0w
+Cm4tPTAKbS09MApsLT0wfXJldHVybiBuZXcgQS5VZihhNSxxLHAsbyxuLG0sbCxqKX1pZihqPT1udWxs
+KWlmKHE+MClqPUEuUGkoYTUsMCxxKQplbHNle2lmKHE9PT0wKUEuUjMoYTUsMCwiSW52YWxpZCBlbXB0
+eSBzY2hlbWUiKQpqPSIifWlmKHA+MCl7ZD1xKzMKYz1kPHA/QS56UihhNSxkLHAtMSk6IiIKYj1BLk9l
+KGE1LHAsbywhMSkKaT1vKzEKaWYoaTxuKXthPUEuSHAoQi54Qi5OaihhNSxpLG4pLGEzKQphMD1BLndC
+KGE9PW51bGw/QS52KEEucnIoIkludmFsaWQgcG9ydCIsYTUsaSkpOmEsail9ZWxzZSBhMD1hM31lbHNl
+e2EwPWEzCmI9YTAKYz0iIn1hMT1BLmthKGE1LG4sbSxhMyxqLGIhPW51bGwpCmEyPW08bD9BLmxlKGE1
+LG0rMSxsLGEzKTphMwpyZXR1cm4gQS5DZyhqLGMsYixhMCxhMSxhMixsPGE0P0EudEcoYTUsbCsxLGE0
+KTphMyl9LApNdChhKXtBLm4oYSkKcmV0dXJuIEEua3UoYSwwLGEubGVuZ3RoLEIueE0sITEpfSwKV1go
+YSl7dmFyIHM9dC5OCnJldHVybiBCLk5tLk4wKEEuUUkoYS5zcGxpdCgiJiIpLHQucyksQS5GbChzLHMp
+LG5ldyBBLm4xKEIueE0pLHQuSSl9LApIaChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG09IklQdjQgYWRk
+cmVzcyBzaG91bGQgY29udGFpbiBleGFjdGx5IDQgcGFydHMiLGw9ImVhY2ggcGFydCBtdXN0IGJlIGlu
+IHRoZSByYW5nZSAwLi4yNTUiLGs9bmV3IEEuY1MoYSksaj1uZXcgVWludDhBcnJheSg0KQpmb3Iocz1i
+LHI9cyxxPTA7czxjOysrcyl7cD1CLnhCLk8oYSxzKQppZihwIT09NDYpe2lmKChwXjQ4KT45KWsuJDIo
+ImludmFsaWQgY2hhcmFjdGVyIixzKX1lbHNle2lmKHE9PT0zKWsuJDIobSxzKQpvPUEuUUEoQi54Qi5O
+aihhLHIscyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCm49cSsxCmlmKCEocTw0KSlyZXR1cm4gQS5P
+SChqLHEpCmpbcV09bwpyPXMrMQpxPW59fWlmKHEhPT0zKWsuJDIobSxjKQpvPUEuUUEoQi54Qi5Oaihh
+LHIsYyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCmlmKCEocTw0KSlyZXR1cm4gQS5PSChqLHEpCmpb
+cV09bwpyZXR1cm4gan0sCmVnKGEsYTAsYTEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYs
+ZSxkPW51bGwsYz1uZXcgQS5WQyhhKSxiPW5ldyBBLkpUKGMsYSkKaWYoYS5sZW5ndGg8MiljLiQyKCJh
+ZGRyZXNzIGlzIHRvbyBzaG9ydCIsZCkKcz1BLlFJKFtdLHQudCkKZm9yKHI9YTAscT1yLHA9ITEsbz0h
+MTtyPGExOysrcil7bj1CLnhCLk8oYSxyKQppZihuPT09NTgpe2lmKHI9PT1hMCl7KytyCmlmKEIueEIu
+TyhhLHIpIT09NTgpYy4kMigiaW52YWxpZCBzdGFydCBjb2xvbi4iLHIpCnE9cn1pZihyPT09cSl7aWYo
+cCljLiQyKCJvbmx5IG9uZSB3aWxkY2FyZCBgOjpgIGlzIGFsbG93ZWQiLHIpCkIuTm0uaShzLC0xKQpw
+PSEwfWVsc2UgQi5ObS5pKHMsYi4kMihxLHIpKQpxPXIrMX1lbHNlIGlmKG49PT00NilvPSEwfWlmKHMu
+bGVuZ3RoPT09MCljLiQyKCJ0b28gZmV3IHBhcnRzIixkKQptPXE9PT1hMQpsPUIuTm0uZ3JaKHMpCmlm
+KG0mJmwhPT0tMSljLiQyKCJleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFzdCBgOmAiLGExKQppZighbSlp
+ZighbylCLk5tLmkocyxiLiQyKHEsYTEpKQplbHNle2s9QS5IaChhLHEsYTEpCkIuTm0uaShzLChrWzBd
+PDw4fGtbMV0pPj4+MCkKQi5ObS5pKHMsKGtbMl08PDh8a1szXSk+Pj4wKX1pZihwKXtpZihzLmxlbmd0
+aD43KWMuJDIoImFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3QgaGF2ZSBsZXNzIHRoYW4gNyBw
+YXJ0cyIsZCl9ZWxzZSBpZihzLmxlbmd0aCE9PTgpYy4kMigiYW4gYWRkcmVzcyB3aXRob3V0IGEgd2ls
+ZGNhcmQgbXVzdCBjb250YWluIGV4YWN0bHkgOCBwYXJ0cyIsZCkKaj1uZXcgVWludDhBcnJheSgxNikK
+Zm9yKGw9cy5sZW5ndGgsaT05LWwscj0wLGg9MDtyPGw7KytyKXtnPXNbcl0KaWYoZz09PS0xKWZvcihm
+PTA7ZjxpOysrZil7aWYoIShoPj0wJiZoPDE2KSlyZXR1cm4gQS5PSChqLGgpCmpbaF09MAplPWgrMQpp
+ZighKGU8MTYpKXJldHVybiBBLk9IKGosZSkKaltlXT0wCmgrPTJ9ZWxzZXtlPUIuam4ud0coZyw4KQpp
+ZighKGg+PTAmJmg8MTYpKXJldHVybiBBLk9IKGosaCkKaltoXT1lCmU9aCsxCmlmKCEoZTwxNikpcmV0
+dXJuIEEuT0goaixlKQpqW2VdPWcmMjU1CmgrPTJ9fXJldHVybiBqfSwKQ2coYSxiLGMsZCxlLGYsZyl7
+cmV0dXJuIG5ldyBBLkRuKGEsYixjLGQsZSxmLGcpfSwKS0woYSxiLGMsZCxlLGYsZyl7dmFyIHMscixx
+LHAsbyxuCmY9Zj09bnVsbD8iIjpBLlBpKGYsMCxmLmxlbmd0aCkKZz1BLnpSKGcsMCxnPT1udWxsPzA6
+Zy5sZW5ndGgpCmE9QS5PZShhLDAsYT09bnVsbD8wOmEubGVuZ3RoLCExKQpzPUEubGUobnVsbCwwLDAs
+ZSkKcj1BLnRHKG51bGwsMCwwKQpkPUEud0IoZCxmKQpxPWY9PT0iZmlsZSIKaWYoYT09bnVsbClwPWcu
+bGVuZ3RoIT09MHx8ZCE9bnVsbHx8cQplbHNlIHA9ITEKaWYocClhPSIiCnA9YT09bnVsbApvPSFwCmI9
+QS5rYShiLDAsYj09bnVsbD8wOmIubGVuZ3RoLGMsZixvKQpuPWYubGVuZ3RoPT09MAppZihuJiZwJiYh
+Qi54Qi5uKGIsIi8iKSliPUEud0YoYiwhbnx8bykKZWxzZSBiPUEueGUoYikKcmV0dXJuIEEuQ2coZixn
+LHAmJkIueEIubihiLCIvLyIpPyIiOmEsZCxiLHMscil9LAp3SyhhKXtpZihhPT09Imh0dHAiKXJldHVy
+biA4MAppZihhPT09Imh0dHBzIilyZXR1cm4gNDQzCnJldHVybiAwfSwKTlIoYSxiKXt2YXIgcyxyLHEs
+cCxvLG4KZm9yKHM9YS5sZW5ndGgscj0wO3I8czsrK3Ipe3E9Qi54Qi5XKGEscikKcD1CLnhCLlcoYixy
+KQpvPXFecAppZihvIT09MCl7aWYobz09PTMyKXtuPXB8bwppZig5Nzw9biYmbjw9MTIyKWNvbnRpbnVl
+fXJldHVybiExfX1yZXR1cm4hMH0sClIzKGEsYixjKXt0aHJvdyBBLmIoQS5ycihjLGEsYikpfSwKWGQo
+YSxiLGMsZCl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPW51bGwsZz1iLmxlbmd0aAppZihnIT09
+MCl7cT0wCndoaWxlKCEwKXtpZighKHE8Zykpe3M9IiIKcj0wCmJyZWFrfWlmKEIueEIuVyhiLHEpPT09
+NjQpe3M9Qi54Qi5OaihiLDAscSkKcj1xKzEKYnJlYWt9KytxfWlmKHI8ZyYmQi54Qi5XKGIscik9PT05
+MSl7Zm9yKHA9cixvPS0xO3A8ZzsrK3Ape249Qi54Qi5XKGIscCkKaWYobj09PTM3JiZvPDApe209Qi54
+Qi5RaShiLCIyNSIscCsxKT9wKzI6cApvPXAKcD1tfWVsc2UgaWYobj09PTkzKWJyZWFrfWlmKHA9PT1n
+KXRocm93IEEuYihBLnJyKCJJbnZhbGlkIElQdjYgaG9zdCBlbnRyeS4iLGIscikpCmw9bzwwP3A6bwpB
+LmVnKGIscisxLGwpOysrcAppZihwIT09ZyYmQi54Qi5XKGIscCkhPT01OCl0aHJvdyBBLmIoQS5ycigi
+SW52YWxpZCBlbmQgb2YgYXV0aG9yaXR5IixiLHApKX1lbHNlIHA9cgp3aGlsZSghMCl7aWYoIShwPGcp
+KXtrPWgKYnJlYWt9aWYoQi54Qi5XKGIscCk9PT01OCl7aj1CLnhCLnluKGIscCsxKQprPWoubGVuZ3Ro
+IT09MD9BLlFBKGosaCk6aApicmVha30rK3B9aT1CLnhCLk5qKGIscixwKX1lbHNle2s9aAppPWsKcz0i
+In1yZXR1cm4gQS5LTChpLGgsQS5RSShjLnNwbGl0KCIvIiksdC5zKSxrLGQsYSxzKX0sCmtFKGEsYil7
+dmFyIHMscixxLHAsbwpmb3Iocz1hLmxlbmd0aCxyPTA7cjxzOysrcil7cT1hW3JdCnA9Si5VNihxKQpv
+PXAuZ0EocSkKaWYoMD5vKUEudihBLlRFKDAsMCxwLmdBKHEpLG51bGwsbnVsbCkpCmlmKEEuU1EocSwi
+LyIsMCkpe3M9QS5MNCgiSWxsZWdhbCBwYXRoIGNoYXJhY3RlciAiK0EuRWoocSkpCnRocm93IEEuYihz
+KX19fSwKSE4oYSxiLGMpe3ZhciBzLHIscSxwCmZvcihzPUEucUMoYSxjLG51bGwsQS50NihhKS5jKSxy
+PXMuJHRpLHM9bmV3IEEuYTcocyxzLmdBKHMpLHIuQygiYTc8YUwuRT4iKSkscj1yLkMoImFMLkUiKTtz
+LkYoKTspe3E9ci5hKHMuZCkKcD1BLm51KCdbIiovOjw+P1xcXFx8XScpCmlmKEEuU1EocSxwLDApKXtz
+PUEuTDQoIklsbGVnYWwgY2hhcmFjdGVyIGluIHBhdGg6ICIrcSkKdGhyb3cgQS5iKHMpfX19LApyZyhh
+LGIpe3ZhciBzCmlmKCEoNjU8PWEmJmE8PTkwKSlzPTk3PD1hJiZhPD0xMjIKZWxzZSBzPSEwCmlmKHMp
+cmV0dXJuCnM9QS5MNCgiSWxsZWdhbCBkcml2ZSBsZXR0ZXIgIitBLk9vKGEpKQp0aHJvdyBBLmIocyl9
+LAp3QihhLGIpe2lmKGEhPW51bGwmJmE9PT1BLndLKGIpKXJldHVybiBudWxsCnJldHVybiBhfSwKT2Uo
+YSxiLGMsZCl7dmFyIHMscixxLHAsbyxuCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYj09PWMpcmV0
+dXJuIiIKaWYoQi54Qi5PKGEsYik9PT05MSl7cz1jLTEKaWYoQi54Qi5PKGEscykhPT05MylBLlIzKGEs
+YiwiTWlzc2luZyBlbmQgYF1gIHRvIG1hdGNoIGBbYCBpbiBob3N0IikKcj1iKzEKcT1BLnRvKGEscixz
+KQppZihxPHMpe3A9cSsxCm89QS5PQShhLEIueEIuUWkoYSwiMjUiLHApP3ErMzpwLHMsIiUyNSIpfWVs
+c2Ugbz0iIgpBLmVnKGEscixxKQpyZXR1cm4gQi54Qi5OaihhLGIscSkudG9Mb3dlckNhc2UoKStvKyJd
+In1mb3Iobj1iO248YzsrK24paWYoQi54Qi5PKGEsbik9PT01OCl7cT1CLnhCLlhVKGEsIiUiLGIpCnE9
+cT49YiYmcTxjP3E6YwppZihxPGMpe3A9cSsxCm89QS5PQShhLEIueEIuUWkoYSwiMjUiLHApP3ErMzpw
+LGMsIiUyNSIpfWVsc2Ugbz0iIgpBLmVnKGEsYixxKQpyZXR1cm4iWyIrQi54Qi5OaihhLGIscSkrbysi
+XSJ9cmV0dXJuIEEuT0woYSxiLGMpfSwKdG8oYSxiLGMpe3ZhciBzPUIueEIuWFUoYSwiJSIsYikKcmV0
+dXJuIHM+PWImJnM8Yz9zOmN9LApPQShhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPWQh
+PT0iIj9uZXcgQS5NKGQpOm51bGwKZm9yKHM9YixyPXMscT0hMDtzPGM7KXtwPUIueEIuTyhhLHMpCmlm
+KHA9PT0zNyl7bz1BLnJ2KGEscywhMCkKbj1vPT1udWxsCmlmKG4mJnEpe3MrPTMKY29udGludWV9aWYo
+aT09bnVsbClpPW5ldyBBLk0oIiIpCm09aS5hKz1CLnhCLk5qKGEscixzKQppZihuKW89Qi54Qi5Oaihh
+LHMscyszKQplbHNlIGlmKG89PT0iJSIpQS5SMyhhLHMsIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4g
+JSBhbnltb3JlIikKaS5hPW0rbwpzKz0zCnI9cwpxPSEwfWVsc2V7aWYocDwxMjcpe249cD4+PjQKaWYo
+IShuPDgpKXJldHVybiBBLk9IKEIuRjMsbikKbj0oQi5GM1tuXSYxPDwocCYxNSkpIT09MH1lbHNlIG49
+ITEKaWYobil7aWYocSYmNjU8PXAmJjkwPj1wKXtpZihpPT1udWxsKWk9bmV3IEEuTSgiIikKaWYocjxz
+KXtpLmErPUIueEIuTmooYSxyLHMpCnI9c31xPSExfSsrc31lbHNle2lmKChwJjY0NTEyKT09PTU1Mjk2
+JiZzKzE8Yyl7bD1CLnhCLk8oYSxzKzEpCmlmKChsJjY0NTEyKT09PTU2MzIwKXtwPShwJjEwMjMpPDwx
+MHxsJjEwMjN8NjU1MzYKaz0yfWVsc2Ugaz0xfWVsc2Ugaz0xCmo9Qi54Qi5OaihhLHIscykKaWYoaT09
+bnVsbCl7aT1uZXcgQS5NKCIiKQpuPWl9ZWxzZSBuPWkKbi5hKz1qCm4uYSs9QS56WChwKQpzKz1rCnI9
+c319fWlmKGk9PW51bGwpcmV0dXJuIEIueEIuTmooYSxiLGMpCmlmKHI8YylpLmErPUIueEIuTmooYSxy
+LGMpCm49aS5hCnJldHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKT0woYSxiLGMpe3ZhciBzLHIs
+cSxwLG8sbixtLGwsayxqLGkKZm9yKHM9YixyPXMscT1udWxsLHA9ITA7czxjOyl7bz1CLnhCLk8oYSxz
+KQppZihvPT09Mzcpe249QS5ydihhLHMsITApCm09bj09bnVsbAppZihtJiZwKXtzKz0zCmNvbnRpbnVl
+fWlmKHE9PW51bGwpcT1uZXcgQS5NKCIiKQpsPUIueEIuTmooYSxyLHMpCms9cS5hKz0hcD9sLnRvTG93
+ZXJDYXNlKCk6bAppZihtKXtuPUIueEIuTmooYSxzLHMrMykKaj0zfWVsc2UgaWYobj09PSIlIil7bj0i
+JTI1IgpqPTF9ZWxzZSBqPTMKcS5hPWsrbgpzKz1qCnI9cwpwPSEwfWVsc2V7aWYobzwxMjcpe209bz4+
+PjQKaWYoIShtPDgpKXJldHVybiBBLk9IKEIuZWEsbSkKbT0oQi5lYVttXSYxPDwobyYxNSkpIT09MH1l
+bHNlIG09ITEKaWYobSl7aWYocCYmNjU8PW8mJjkwPj1vKXtpZihxPT1udWxsKXE9bmV3IEEuTSgiIikK
+aWYocjxzKXtxLmErPUIueEIuTmooYSxyLHMpCnI9c31wPSExfSsrc31lbHNle2lmKG88PTkzKXttPW8+
+Pj40CmlmKCEobTw4KSlyZXR1cm4gQS5PSChCLmFrLG0pCm09KEIuYWtbbV0mMTw8KG8mMTUpKSE9PTB9
+ZWxzZSBtPSExCmlmKG0pQS5SMyhhLHMsIkludmFsaWQgY2hhcmFjdGVyIikKZWxzZXtpZigobyY2NDUx
+Mik9PT01NTI5NiYmcysxPGMpe2k9Qi54Qi5PKGEscysxKQppZigoaSY2NDUxMik9PT01NjMyMCl7bz0o
+byYxMDIzKTw8MTB8aSYxMDIzfDY1NTM2Cmo9Mn1lbHNlIGo9MX1lbHNlIGo9MQpsPUIueEIuTmooYSxy
+LHMpCmlmKCFwKWw9bC50b0xvd2VyQ2FzZSgpCmlmKHE9PW51bGwpe3E9bmV3IEEuTSgiIikKbT1xfWVs
+c2UgbT1xCm0uYSs9bAptLmErPUEuelgobykKcys9agpyPXN9fX19aWYocT09bnVsbClyZXR1cm4gQi54
+Qi5OaihhLGIsYykKaWYocjxjKXtsPUIueEIuTmooYSxyLGMpCnEuYSs9IXA/bC50b0xvd2VyQ2FzZSgp
+Omx9bT1xLmEKcmV0dXJuIG0uY2hhckNvZGVBdCgwKT09MD9tOm19LApQaShhLGIsYyl7dmFyIHMscixx
+LHAKaWYoYj09PWMpcmV0dXJuIiIKaWYoIUEuRXQoQi54Qi5XKGEsYikpKUEuUjMoYSxiLCJTY2hlbWUg
+bm90IHN0YXJ0aW5nIHdpdGggYWxwaGFiZXRpYyBjaGFyYWN0ZXIiKQpmb3Iocz1iLHI9ITE7czxjOysr
+cyl7cT1CLnhCLlcoYSxzKQppZihxPDEyOCl7cD1xPj4+NAppZighKHA8OCkpcmV0dXJuIEEuT0goQi5t
+SyxwKQpwPShCLm1LW3BdJjE8PChxJjE1KSkhPT0wfWVsc2UgcD0hMQppZighcClBLlIzKGEscywiSWxs
+ZWdhbCBzY2hlbWUgY2hhcmFjdGVyIikKaWYoNjU8PXEmJnE8PTkwKXI9ITB9YT1CLnhCLk5qKGEsYixj
+KQpyZXR1cm4gQS5ZYShyP2EudG9Mb3dlckNhc2UoKTphKX0sCllhKGEpe2lmKGE9PT0iaHR0cCIpcmV0
+dXJuImh0dHAiCmlmKGE9PT0iZmlsZSIpcmV0dXJuImZpbGUiCmlmKGE9PT0iaHR0cHMiKXJldHVybiJo
+dHRwcyIKaWYoYT09PSJwYWNrYWdlIilyZXR1cm4icGFja2FnZSIKcmV0dXJuIGF9LAp6UihhLGIsYyl7
+aWYoYT09bnVsbClyZXR1cm4iIgpyZXR1cm4gQS5QSShhLGIsYyxCLnRvLCExKX0sCmthKGEsYixjLGQs
+ZSxmKXt2YXIgcyxyLHE9ZT09PSJmaWxlIixwPXF8fGYKaWYoYT09bnVsbCl7aWYoZD09bnVsbClyZXR1
+cm4gcT8iLyI6IiIKcz1BLnQ2KGQpCnI9bmV3IEEubEooZCxzLkMoInFVKDEpIikuYShuZXcgQS5SWigp
+KSxzLkMoImxKPDEscVU+IikpLmsoMCwiLyIpfWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBBLmIoQS54WSgi
+Qm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkIixudWxsKSkKZWxzZSByPUEuUEkoYSxi
+LGMsQi5XZCwhMCkKaWYoci5sZW5ndGg9PT0wKXtpZihxKXJldHVybiIvIn1lbHNlIGlmKHAmJiFCLnhC
+Lm4ociwiLyIpKXI9Ii8iK3IKcmV0dXJuIEEuSnIocixlLGYpfSwKSnIoYSxiLGMpe3ZhciBzPWIubGVu
+Z3RoPT09MAppZihzJiYhYyYmIUIueEIubihhLCIvIikpcmV0dXJuIEEud0YoYSwhc3x8YykKcmV0dXJu
+IEEueGUoYSl9LApsZShhLGIsYyxkKXt2YXIgcyxyPXt9CmlmKGEhPW51bGwpe2lmKGQhPW51bGwpdGhy
+b3cgQS5iKEEueFkoIkJvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWQiLG51bGwp
+KQpyZXR1cm4gQS5QSShhLGIsYyxCLlZDLCEwKX1pZihkPT1udWxsKXJldHVybiBudWxsCnM9bmV3IEEu
+TSgiIikKci5hPSIiCmQuSygwLG5ldyBBLnk1KG5ldyBBLk1FKHIscykpKQpyPXMuYQpyZXR1cm4gci5j
+aGFyQ29kZUF0KDApPT0wP3I6cn0sCnRHKGEsYixjKXtpZihhPT1udWxsKXJldHVybiBudWxsCnJldHVy
+biBBLlBJKGEsYixjLEIuVkMsITApfSwKcnYoYSxiLGMpe3ZhciBzLHIscSxwLG8sbj1iKzIKaWYobj49
+YS5sZW5ndGgpcmV0dXJuIiUiCnM9Qi54Qi5PKGEsYisxKQpyPUIueEIuTyhhLG4pCnE9QS5vbyhzKQpw
+PUEub28ocikKaWYocTwwfHxwPDApcmV0dXJuIiUiCm89cSoxNitwCmlmKG88MTI3KXtuPUIuam4ud0co
+byw0KQppZighKG48OCkpcmV0dXJuIEEuT0goQi5GMyxuKQpuPShCLkYzW25dJjE8PChvJjE1KSkhPT0w
+fWVsc2Ugbj0hMQppZihuKXJldHVybiBBLkx3KGMmJjY1PD1vJiY5MD49bz8ob3wzMik+Pj4wOm8pCmlm
+KHM+PTk3fHxyPj05NylyZXR1cm4gQi54Qi5OaihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybiBu
+dWxsfSwKelgoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPSIwMTIzNDU2Nzg5QUJDREVGIgppZihhPDEy
+OCl7cz1uZXcgVWludDhBcnJheSgzKQpzWzBdPTM3CnNbMV09Qi54Qi5XKGssYT4+PjQpCnNbMl09Qi54
+Qi5XKGssYSYxNSl9ZWxzZXtpZihhPjIwNDcpaWYoYT42NTUzNSl7cj0yNDAKcT00fWVsc2V7cj0yMjQK
+cT0zfWVsc2V7cj0xOTIKcT0yfXA9MypxCnM9bmV3IFVpbnQ4QXJyYXkocCkKZm9yKG89MDstLXEscT49
+MDtyPTEyOCl7bj1CLmpuLmJmKGEsNipxKSY2M3xyCmlmKCEobzxwKSlyZXR1cm4gQS5PSChzLG8pCnNb
+b109MzcKbT1vKzEKbD1CLnhCLlcoayxuPj4+NCkKaWYoIShtPHApKXJldHVybiBBLk9IKHMsbSkKc1tt
+XT1sCmw9bysyCm09Qi54Qi5XKGssbiYxNSkKaWYoIShsPHApKXJldHVybiBBLk9IKHMsbCkKc1tsXT1t
+Cm8rPTN9fXJldHVybiBBLkhNKHMsMCxudWxsKX0sClBJKGEsYixjLGQsZSl7dmFyIHM9QS5VbChhLGIs
+YyxkLGUpCnJldHVybiBzPT1udWxsP0IueEIuTmooYSxiLGMpOnN9LApVbChhLGIsYyxkLGUpe3ZhciBz
+LHIscSxwLG8sbixtLGwsayxqPW51bGwKZm9yKHM9IWUscj1iLHE9cixwPWo7cjxjOyl7bz1CLnhCLk8o
+YSxyKQppZihvPDEyNyl7bj1vPj4+NAppZighKG48OCkpcmV0dXJuIEEuT0goZCxuKQpuPShkW25dJjE8
+PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKSsrcgplbHNle2lmKG89PT0zNyl7bT1BLnJ2KGEsciwh
+MSkKaWYobT09bnVsbCl7cis9Mwpjb250aW51ZX1pZigiJSI9PT1tKXttPSIlMjUiCmw9MX1lbHNlIGw9
+M31lbHNle2lmKHMpaWYobzw9OTMpe249bz4+PjQKaWYoIShuPDgpKXJldHVybiBBLk9IKEIuYWssbikK
+bj0oQi5ha1tuXSYxPDwobyYxNSkpIT09MH1lbHNlIG49ITEKZWxzZSBuPSExCmlmKG4pe0EuUjMoYSxy
+LCJJbnZhbGlkIGNoYXJhY3RlciIpCmw9agptPWx9ZWxzZXtpZigobyY2NDUxMik9PT01NTI5Nil7bj1y
+KzEKaWYobjxjKXtrPUIueEIuTyhhLG4pCmlmKChrJjY0NTEyKT09PTU2MzIwKXtvPShvJjEwMjMpPDwx
+MHxrJjEwMjN8NjU1MzYKbD0yfWVsc2UgbD0xfWVsc2UgbD0xfWVsc2UgbD0xCm09QS56WChvKX19aWYo
+cD09bnVsbCl7cD1uZXcgQS5NKCIiKQpuPXB9ZWxzZSBuPXAKbi5hKz1CLnhCLk5qKGEscSxyKQpuLmEr
+PUEuRWoobSkKaWYodHlwZW9mIGwhPT0ibnVtYmVyIilyZXR1cm4gQS5wWShsKQpyKz1sCnE9cn19aWYo
+cD09bnVsbClyZXR1cm4gagppZihxPGMpcC5hKz1CLnhCLk5qKGEscSxjKQpzPXAuYQpyZXR1cm4gcy5j
+aGFyQ29kZUF0KDApPT0wP3M6c30sCnlCKGEpe2lmKEIueEIubihhLCIuIikpcmV0dXJuITAKcmV0dXJu
+IEIueEIuT1koYSwiLy4iKSE9PS0xfSwKeGUoYSl7dmFyIHMscixxLHAsbyxuLG0KaWYoIUEueUIoYSkp
+cmV0dXJuIGEKcz1BLlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5ndGgscD0hMSxv
+PTA7bzxxOysrbyl7bj1yW29dCmlmKEouUk0obiwiLi4iKSl7bT1zLmxlbmd0aAppZihtIT09MCl7aWYo
+MD49bSlyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCmlmKHMubGVuZ3RoPT09MClCLk5tLmkocywiIil9
+cD0hMH1lbHNlIGlmKCIuIj09PW4pcD0hMAplbHNle0IuTm0uaShzLG4pCnA9ITF9fWlmKHApQi5ObS5p
+KHMsIiIpCnJldHVybiBCLk5tLmsocywiLyIpfSwKd0YoYSxiKXt2YXIgcyxyLHEscCxvLG4KaWYoIUEu
+eUIoYSkpcmV0dXJuIWI/QS5DMShhKTphCnM9QS5RSShbXSx0LnMpCmZvcihyPWEuc3BsaXQoIi8iKSxx
+PXIubGVuZ3RoLHA9ITEsbz0wO288cTsrK28pe249cltvXQppZigiLi4iPT09bilpZihzLmxlbmd0aCE9
+PTAmJkIuTm0uZ3JaKHMpIT09Ii4uIil7aWYoMD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5w
+b3AoKQpwPSEwfWVsc2V7Qi5ObS5pKHMsIi4uIikKcD0hMX1lbHNlIGlmKCIuIj09PW4pcD0hMAplbHNl
+e0IuTm0uaShzLG4pCnA9ITF9fXI9cy5sZW5ndGgKaWYociE9PTApaWYocj09PTEpe2lmKDA+PXIpcmV0
+dXJuIEEuT0gocywwKQpyPXNbMF0ubGVuZ3RoPT09MH1lbHNlIHI9ITEKZWxzZSByPSEwCmlmKHIpcmV0
+dXJuIi4vIgppZihwfHxCLk5tLmdyWihzKT09PSIuLiIpQi5ObS5pKHMsIiIpCmlmKCFiKXtpZigwPj1z
+Lmxlbmd0aClyZXR1cm4gQS5PSChzLDApCkIuTm0uWTUocywwLEEuQzEoc1swXSkpfXJldHVybiBCLk5t
+LmsocywiLyIpfSwKQzEoYSl7dmFyIHMscixxLHA9YS5sZW5ndGgKaWYocD49MiYmQS5FdChCLnhCLlco
+YSwwKSkpZm9yKHM9MTtzPHA7KytzKXtyPUIueEIuVyhhLHMpCmlmKHI9PT01OClyZXR1cm4gQi54Qi5O
+aihhLDAscykrIiUzQSIrQi54Qi55bihhLHMrMSkKaWYocjw9MTI3KXtxPXI+Pj40CmlmKCEocTw4KSly
+ZXR1cm4gQS5PSChCLm1LLHEpCnE9KEIubUtbcV0mMTw8KHImMTUpKT09PTB9ZWxzZSBxPSEwCmlmKHEp
+YnJlYWt9cmV0dXJuIGF9LAp1aihhLGIpe2lmKGEuaEIoInBhY2thZ2UiKSYmYS5jPT1udWxsKXJldHVy
+biBBLmZGKGIsMCxiLmxlbmd0aCkKcmV0dXJuLTF9LAptbihhKXt2YXIgcyxyLHEscD1hLmdGaigpLG89
+cC5sZW5ndGgKaWYobz4wJiZKLkhtKHBbMF0pPT09MiYmSi5hNihwWzBdLDEpPT09NTgpe2lmKDA+PW8p
+cmV0dXJuIEEuT0gocCwwKQpBLnJnKEouYTYocFswXSwwKSwhMSkKQS5ITihwLCExLDEpCnM9ITB9ZWxz
+ZXtBLkhOKHAsITEsMCkKcz0hMX1yPWEuZ3RUKCkmJiFzPyIiKyJcXCI6IiIKaWYoYS5nY2ooKSl7cT1h
+LmdKZihhKQppZihxLmxlbmd0aCE9PTApcj1yKyJcXCIrcSsiXFwifXI9QS5sKHIscCwiXFwiKQpvPXMm
+Jm89PT0xP3IrIlxcIjpyCnJldHVybiBvLmNoYXJDb2RlQXQoMCk9PTA/bzpvfSwKSWgoYSxiKXt2YXIg
+cyxyLHEKZm9yKHM9MCxyPTA7cjwyOysrcil7cT1CLnhCLlcoYSxiK3IpCmlmKDQ4PD1xJiZxPD01Nylz
+PXMqMTYrcS00OAplbHNle3F8PTMyCmlmKDk3PD1xJiZxPD0xMDIpcz1zKjE2K3EtODcKZWxzZSB0aHJv
+dyBBLmIoQS54WSgiSW52YWxpZCBVUkwgZW5jb2RpbmciLG51bGwpKX19cmV0dXJuIHN9LAprdShhLGIs
+YyxkLGUpe3ZhciBzLHIscSxwLG89Ygp3aGlsZSghMCl7aWYoIShvPGMpKXtzPSEwCmJyZWFrfXI9Qi54
+Qi5XKGEsbykKaWYocjw9MTI3KWlmKHIhPT0zNylxPWUmJnI9PT00MwplbHNlIHE9ITAKZWxzZSBxPSEw
+CmlmKHEpe3M9ITEKYnJlYWt9KytvfWlmKHMpe2lmKEIueE0hPT1kKXE9ITEKZWxzZSBxPSEwCmlmKHEp
+cmV0dXJuIEIueEIuTmooYSxiLGMpCmVsc2UgcD1uZXcgQS5xaihCLnhCLk5qKGEsYixjKSl9ZWxzZXtw
+PUEuUUkoW10sdC50KQpmb3IocT1hLmxlbmd0aCxvPWI7bzxjOysrbyl7cj1CLnhCLlcoYSxvKQppZihy
+PjEyNyl0aHJvdyBBLmIoQS54WSgiSWxsZWdhbCBwZXJjZW50IGVuY29kaW5nIGluIFVSSSIsbnVsbCkp
+CmlmKHI9PT0zNyl7aWYobyszPnEpdGhyb3cgQS5iKEEueFkoIlRydW5jYXRlZCBVUkkiLG51bGwpKQpC
+Lk5tLmkocCxBLkloKGEsbysxKSkKbys9Mn1lbHNlIGlmKGUmJnI9PT00MylCLk5tLmkocCwzMikKZWxz
+ZSBCLk5tLmkocCxyKX19dC5MLmEocCkKcmV0dXJuIEIub0UuV0oocCl9LApFdChhKXt2YXIgcz1hfDMy
+CnJldHVybiA5Nzw9cyYmczw9MTIyfSwKS0QoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsaz0iSW52
+YWxpZCBNSU1FIHR5cGUiLGo9QS5RSShbYi0xXSx0LnQpCmZvcihzPWEubGVuZ3RoLHI9YixxPS0xLHA9
+bnVsbDtyPHM7KytyKXtwPUIueEIuVyhhLHIpCmlmKHA9PT00NHx8cD09PTU5KWJyZWFrCmlmKHA9PT00
+Nyl7aWYocTwwKXtxPXIKY29udGludWV9dGhyb3cgQS5iKEEucnIoayxhLHIpKX19aWYocTwwJiZyPmIp
+dGhyb3cgQS5iKEEucnIoayxhLHIpKQpmb3IoO3AhPT00NDspe0IuTm0uaShqLHIpOysrcgpmb3Iobz0t
+MTtyPHM7KytyKXtwPUIueEIuVyhhLHIpCmlmKHA9PT02MSl7aWYobzwwKW89cn1lbHNlIGlmKHA9PT01
+OXx8cD09PTQ0KWJyZWFrfWlmKG8+PTApQi5ObS5pKGosbykKZWxzZXtuPUIuTm0uZ3JaKGopCmlmKHAh
+PT00NHx8ciE9PW4rN3x8IUIueEIuUWkoYSwiYmFzZTY0IixuKzEpKXRocm93IEEuYihBLnJyKCJFeHBl
+Y3RpbmcgJz0nIixhLHIpKQpicmVha319Qi5ObS5pKGoscikKbT1yKzEKaWYoKGoubGVuZ3RoJjEpPT09
+MSlhPUIuaDkueXIoYSxtLHMpCmVsc2V7bD1BLlVsKGEsbSxzLEIuVkMsITApCmlmKGwhPW51bGwpYT1C
+LnhCLmk3KGEsbSxzLGwpfXJldHVybiBuZXcgQS5QRShhLGosYyl9LApLTigpe3ZhciBzLHIscSxwLG8s
+bixtPSIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJz
+dHV2d3h5ei0uX34hJCYnKCkqKyw7PSIsbD0iLiIsaz0iOiIsaj0iLyIsaT0iPyIsaD0iIyIsZz1BLlFJ
+KG5ldyBBcnJheSgyMiksdC5nTikKZm9yKHM9MDtzPDIyOysrcylnW3NdPW5ldyBVaW50OEFycmF5KDk2
+KQpyPW5ldyBBLnlJKGcpCnE9bmV3IEEuYzYoKQpwPW5ldyBBLnFkKCkKbz10LmdjCm49by5hKHIuJDIo
+MCwyMjUpKQpxLiQzKG4sbSwxKQpxLiQzKG4sbCwxNCkKcS4kMyhuLGssMzQpCnEuJDMobixqLDMpCnEu
+JDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE0LDIyNSkpCnEuJDMobixtLDEpCnEu
+JDMobixsLDE1KQpxLiQzKG4saywzNCkKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixo
+LDIwNSkKbj1vLmEoci4kMigxNSwyMjUpKQpxLiQzKG4sbSwxKQpxLiQzKG4sIiUiLDIyNSkKcS4kMyhu
+LGssMzQpCnEuJDMobixqLDkpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEs
+MjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhuLGssMzQpCnEuJDMobixqLDEwKQpxLiQzKG4saSwxNzIpCnEu
+JDMobixoLDIwNSkKbj1vLmEoci4kMigyLDIzNSkpCnEuJDMobixtLDEzOSkKcS4kMyhuLGosMTMxKQpx
+LiQzKG4sbCwxNDYpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDMsMjM1KSkK
+cS4kMyhuLG0sMTEpCnEuJDMobixqLDY4KQpxLiQzKG4sbCwxOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4s
+aCwyMDUpCm49by5hKHIuJDIoNCwyMjkpKQpxLiQzKG4sbSw1KQpwLiQzKG4sIkFaIiwyMjkpCnEuJDMo
+bixrLDEwMikKcS4kMyhuLCJAIiw2OCkKcS4kMyhuLCJbIiwyMzIpCnEuJDMobixqLDEzOCkKcS4kMyhu
+LGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoNSwyMjkpKQpxLiQzKG4sbSw1KQpwLiQzKG4s
+IkFaIiwyMjkpCnEuJDMobixrLDEwMikKcS4kMyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4KQpxLiQzKG4s
+aSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMig2LDIzMSkpCnAuJDMobiwiMTkiLDcpCnEuJDMo
+biwiQCIsNjgpCnEuJDMobixqLDEzOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIu
+JDIoNywyMzEpKQpwLiQzKG4sIjA5Iiw3KQpxLiQzKG4sIkAiLDY4KQpxLiQzKG4saiwxMzgpCnEuJDMo
+bixpLDE3MikKcS4kMyhuLGgsMjA1KQpxLiQzKG8uYShyLiQyKDgsOCkpLCJdIiw1KQpuPW8uYShyLiQy
+KDksMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixsLDE2KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3
+MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE2LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4sbCwx
+NykKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxNywy
+MzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGosOSkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49
+by5hKHIuJDIoMTAsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixsLDE4KQpxLiQzKG4saiwyMzQpCnEu
+JDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE4LDIzNSkpCnEuJDMobixtLDExKQpx
+LiQzKG4sbCwxOSkKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEo
+ci4kMigxOSwyMzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGosMjM0KQpxLiQzKG4saSwxNzIpCnEuJDMo
+bixoLDIwNSkKbj1vLmEoci4kMigxMSwyMzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGosMTApCnEuJDMo
+bixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEyLDIzNikpCnEuJDMobixtLDEyKQpxLiQz
+KG4saSwxMikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEzLDIzNykpCnEuJDMobixtLDEzKQpxLiQz
+KG4saSwxMykKcC4kMyhvLmEoci4kMigyMCwyNDUpKSwiYXoiLDIxKQpyPW8uYShyLiQyKDIxLDI0NSkp
+CnAuJDMociwiYXoiLDIxKQpwLiQzKHIsIjA5IiwyMSkKcS4kMyhyLCIrLS4iLDIxKQpyZXR1cm4gZ30s
+ClVCKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbz0kLnZaKCkKZm9yKHM9YjtzPGM7KytzKXtpZighKGQ+
+PTAmJmQ8by5sZW5ndGgpKXJldHVybiBBLk9IKG8sZCkKcj1vW2RdCnE9Qi54Qi5XKGEscyleOTYKcD1y
+W3E+OTU/MzE6cV0KZD1wJjMxCkIuTm0uWTUoZSxwPj4+NSxzKX1yZXR1cm4gZH0sClJ4KGEpe2lmKGEu
+Yj09PTcmJkIueEIubihhLmEsInBhY2thZ2UiKSYmYS5jPD0wKXJldHVybiBBLmZGKGEuYSxhLmUsYS5m
+KQpyZXR1cm4tMX0sCmZGKGEsYixjKXt2YXIgcyxyLHEKZm9yKHM9YixyPTA7czxjOysrcyl7cT1CLnhC
+Lk8oYSxzKQppZihxPT09NDcpcmV0dXJuIHIhPT0wP3M6LTEKaWYocT09PTM3fHxxPT09NTgpcmV0dXJu
+LTEKcnw9cV40Nn1yZXR1cm4tMX0sCldGOmZ1bmN0aW9uIFdGKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9
+LAppUDpmdW5jdGlvbiBpUChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKY2s6ZnVuY3Rpb24gY2soKXt9
+LApYUzpmdW5jdGlvbiBYUygpe30sCkM2OmZ1bmN0aW9uIEM2KGEpe3RoaXMuYT1hfSwKRXo6ZnVuY3Rp
+b24gRXooKXt9LApGOmZ1bmN0aW9uIEYoKXt9LApBVDpmdW5jdGlvbiBBVChhLGIsYyxkKXt2YXIgXz10
+aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKYko6ZnVuY3Rpb24gYkooYSxiLGMsZCxlLGYpe3Zh
+ciBfPXRoaXMKXy5lPWEKXy5mPWIKXy5hPWMKXy5iPWQKXy5jPWUKXy5kPWZ9LAplWTpmdW5jdGlvbiBl
+WShhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5mPWEKXy5hPWIKXy5iPWMKXy5jPWQKXy5kPWV9LAptcDpm
+dW5jdGlvbiBtcChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKdWI6
+ZnVuY3Rpb24gdWIoYSl7dGhpcy5hPWF9LApkczpmdW5jdGlvbiBkcyhhKXt0aGlzLmE9YX0sCmxqOmZ1
+bmN0aW9uIGxqKGEpe3RoaXMuYT1hfSwKVVY6ZnVuY3Rpb24gVVYoYSl7dGhpcy5hPWF9LAprNTpmdW5j
+dGlvbiBrNSgpe30sCktZOmZ1bmN0aW9uIEtZKCl7fSwKcDpmdW5jdGlvbiBwKGEpe3RoaXMuYT1hfSwK
+Q0Q6ZnVuY3Rpb24gQ0QoYSl7dGhpcy5hPWF9LAphRTpmdW5jdGlvbiBhRShhLGIsYyl7dGhpcy5hPWEK
+dGhpcy5iPWIKdGhpcy5jPWN9LApjWDpmdW5jdGlvbiBjWCgpe30sCkFuOmZ1bmN0aW9uIEFuKCl7fSwK
+TjM6ZnVuY3Rpb24gTjMoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuJHRpPWN9LApjODpmdW5j
+dGlvbiBjOCgpe30sCk1oOmZ1bmN0aW9uIE1oKCl7fSwKWmQ6ZnVuY3Rpb24gWmQoKXt9LApNOmZ1bmN0
+aW9uIE0oYSl7dGhpcy5hPWF9LApuMTpmdW5jdGlvbiBuMShhKXt0aGlzLmE9YX0sCmNTOmZ1bmN0aW9u
+IGNTKGEpe3RoaXMuYT1hfSwKVkM6ZnVuY3Rpb24gVkMoYSl7dGhpcy5hPWF9LApKVDpmdW5jdGlvbiBK
+VChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKRG46ZnVuY3Rpb24gRG4oYSxiLGMsZCxlLGYsZyl7dmFy
+IF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9ZgpfLnI9ZwpfLlE9Xy56PV8u
+eT1fLng9JH0sClJaOmZ1bmN0aW9uIFJaKCl7fSwKTUU6ZnVuY3Rpb24gTUUoYSxiKXt0aGlzLmE9YQp0
+aGlzLmI9Yn0sCnk1OmZ1bmN0aW9uIHk1KGEpe3RoaXMuYT1hfSwKUEU6ZnVuY3Rpb24gUEUoYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKeUk6ZnVuY3Rpb24geUkoYSl7dGhpcy5hPWF9LApj
+NjpmdW5jdGlvbiBjNigpe30sCnFkOmZ1bmN0aW9uIHFkKCl7fSwKVWY6ZnVuY3Rpb24gVWYoYSxiLGMs
+ZCxlLGYsZyxoKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mCl8u
+cj1nCl8ueD1oCl8ueT1udWxsfSwKcWU6ZnVuY3Rpb24gcWUoYSxiLGMsZCxlLGYsZyl7dmFyIF89dGhp
+cwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9ZgpfLnI9ZwpfLlE9Xy56PV8ueT1fLng9
+JH0sCngzKCl7cmV0dXJuIHdpbmRvd30sClpyKCl7cmV0dXJuIGRvY3VtZW50fSwKSjYoYSl7dmFyIHM9
+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpCmlmKGEhPW51bGwpQi54bi5zTFUocyxhKQpyZXR1cm4g
+c30sCkxqKGEpe3JldHVybiBDU1MuZXNjYXBlKGEpfSwKVTkoYSxiLGMpe3ZhciBzLHI9ZG9jdW1lbnQu
+Ym9keQpyLnRvU3RyaW5nCnM9dC5hYwpzPW5ldyBBLlU1KG5ldyBBLmU3KEIuUlkucjYocixhLGIsYykp
+LHMuQygiYTIobEQuRSkiKS5hKG5ldyBBLkN2KCkpLHMuQygiVTU8bEQuRT4iKSkKcmV0dXJuIHQuaC5h
+KHMuZ3I4KHMpKX0sCnJTKGEpe3ZhciBzLHIscT0iZWxlbWVudCB0YWcgdW5hdmFpbGFibGUiCnRyeXtz
+PUouWUUoYSkKcy5nbnMoYSkKcT1zLmducyhhKX1jYXRjaChyKXt9cmV0dXJuIHF9LApUTihhLGIpe3Zh
+ciBzLHIscT1hLmNsYXNzTGlzdApmb3Iocz1iLmxlbmd0aCxyPTA7cjxiLmxlbmd0aDtiLmxlbmd0aD09
+PXN8fCgwLEEubGspKGIpLCsrcilxLmFkZChiW3JdKX0sCkpFKGEsYixjLGQsZSl7dmFyIHM9QS5hRihu
+ZXcgQS52TihjKSx0LkIpCmlmKHMhPW51bGwmJiEwKUouZFooYSxiLHMsITEpCnJldHVybiBuZXcgQS54
+QyhhLGIscywhMSxlLkMoInhDPDA+IikpfSwKVHcoYSl7dmFyIHM9QS5KNihudWxsKSxyPXQuRi5hKHdp
+bmRvdy5sb2NhdGlvbikKcz1uZXcgQS5KUShuZXcgQS5tayhzLHIpKQpzLkNZKGEpCnJldHVybiBzfSwK
+cUQoYSxiLGMsZCl7dC5oLmEoYSkKQS5uKGIpCkEubihjKQp0LmNyLmEoZCkKcmV0dXJuITB9LApuWihh
+LGIsYyxkKXt2YXIgcyxyLHEKdC5oLmEoYSkKQS5uKGIpCkEubihjKQpzPXQuY3IuYShkKS5hCnI9cy5h
+CkIueG4uc0xVKHIsYykKcT1yLmhvc3RuYW1lCnM9cy5iCmlmKCEocT09cy5ob3N0bmFtZSYmci5wb3J0
+PT09cy5wb3J0JiZyLnByb3RvY29sPT09cy5wcm90b2NvbCkpaWYocT09PSIiKWlmKHIucG9ydD09PSIi
+KXtzPXIucHJvdG9jb2wKcz1zPT09IjoifHxzPT09IiJ9ZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9
+ITAKcmV0dXJuIHN9LApCbCgpe3ZhciBzPXQuTixyPUEudE0oQi5ReCxzKSxxPUEuUUkoWyJURU1QTEFU
+RSJdLHQucykscD10LmRHLmEobmV3IEEuSUEoKSkKcz1uZXcgQS5jdChyLEEuTHMocyksQS5McyhzKSxB
+LkxzKHMpLG51bGwpCnMuQ1kobnVsbCxuZXcgQS5sSihCLlF4LHAsdC5kdikscSxudWxsKQpyZXR1cm4g
+c30sCnFjKGEpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoInBvc3RNZXNzYWdlIiBpbiBh
+KXtzPUEuUDEoYSkKcmV0dXJuIHN9ZWxzZSByZXR1cm4gdC5jaC5hKGEpfSwKUDEoYSl7aWYoYT09PXdp
+bmRvdylyZXR1cm4gdC5jaS5hKGEpCmVsc2UgcmV0dXJuIG5ldyBBLmRXKCl9LAphRihhLGIpe3ZhciBz
+PSQuWDMKaWYocz09PUIuTlUpcmV0dXJuIGEKcmV0dXJuIHMuUHkoYSxiKX0sCnFFOmZ1bmN0aW9uIHFF
+KCl7fSwKR2g6ZnVuY3Rpb24gR2goKXt9LApmWTpmdW5jdGlvbiBmWSgpe30sCnJaOmZ1bmN0aW9uIHJa
+KCl7fSwKQXo6ZnVuY3Rpb24gQXooKXt9LApRUDpmdW5jdGlvbiBRUCgpe30sCm54OmZ1bmN0aW9uIG54
+KCl7fSwKb0o6ZnVuY3Rpb24gb0ooKXt9LAppZDpmdW5jdGlvbiBpZCgpe30sClFGOmZ1bmN0aW9uIFFG
+KCl7fSwKTmg6ZnVuY3Rpb24gTmgoKXt9LAphZTpmdW5jdGlvbiBhZSgpe30sCklCOmZ1bmN0aW9uIElC
+KCl7fSwKbjc6ZnVuY3Rpb24gbjcoKXt9LAp3ejpmdW5jdGlvbiB3eihhLGIpe3RoaXMuYT1hCnRoaXMu
+JHRpPWJ9LApjdjpmdW5jdGlvbiBjdigpe30sCkN2OmZ1bmN0aW9uIEN2KCl7fSwKZWE6ZnVuY3Rpb24g
+ZWEoKXt9LApEMDpmdW5jdGlvbiBEMCgpe30sCmhIOmZ1bmN0aW9uIGhIKCl7fSwKaDQ6ZnVuY3Rpb24g
+aDQoKXt9LApicjpmdW5jdGlvbiBicigpe30sClZiOmZ1bmN0aW9uIFZiKCl7fSwKZko6ZnVuY3Rpb24g
+ZkooKXt9LAp3YTpmdW5jdGlvbiB3YSgpe30sClNnOmZ1bmN0aW9uIFNnKCl7fSwKdTg6ZnVuY3Rpb24g
+dTgoKXt9LApBajpmdW5jdGlvbiBBaigpe30sCmU3OmZ1bmN0aW9uIGU3KGEpe3RoaXMuYT1hfSwKS1Y6
+ZnVuY3Rpb24gS1YoKXt9LApCSDpmdW5jdGlvbiBCSCgpe30sClNOOmZ1bmN0aW9uIFNOKCl7fSwKZXc6
+ZnVuY3Rpb24gZXcoKXt9LApscDpmdW5jdGlvbiBscCgpe30sClRiOmZ1bmN0aW9uIFRiKCl7fSwKSXY6
+ZnVuY3Rpb24gSXYoKXt9LApXUDpmdW5jdGlvbiBXUCgpe30sCnlZOmZ1bmN0aW9uIHlZKCl7fSwKdzY6
+ZnVuY3Rpb24gdzYoKXt9LApLNTpmdW5jdGlvbiBLNSgpe30sCkNtOmZ1bmN0aW9uIENtKCl7fSwKQ1E6
+ZnVuY3Rpb24gQ1EoKXt9LAp3NDpmdW5jdGlvbiB3NCgpe30sCnJoOmZ1bmN0aW9uIHJoKCl7fSwKY2Y6
+ZnVuY3Rpb24gY2YoKXt9LAppNzpmdW5jdGlvbiBpNyhhKXt0aGlzLmE9YX0sClN5OmZ1bmN0aW9uIFN5
+KGEpe3RoaXMuYT1hfSwKS1M6ZnVuY3Rpb24gS1MoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkEzOmZ1
+bmN0aW9uIEEzKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApJNDpmdW5jdGlvbiBJNChhKXt0aGlzLmE9
+YX0sCkZrOmZ1bmN0aW9uIEZrKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sClJPOmZ1bmN0aW9uIFJP
+KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sCkNxOmZ1bmN0aW9u
+IENxKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sCnhDOmZ1bmN0
+aW9uIHhDKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmI9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1l
+fSwKdk46ZnVuY3Rpb24gdk4oYSl7dGhpcy5hPWF9LApKUTpmdW5jdGlvbiBKUShhKXt0aGlzLmE9YX0s
+CkdtOmZ1bmN0aW9uIEdtKCl7fSwKdkQ6ZnVuY3Rpb24gdkQoYSl7dGhpcy5hPWF9LApVdjpmdW5jdGlv
+biBVdihhKXt0aGlzLmE9YX0sCkVnOmZ1bmN0aW9uIEVnKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0
+aGlzLmM9Y30sCm02OmZ1bmN0aW9uIG02KCl7fSwKRW86ZnVuY3Rpb24gRW8oKXt9LApXazpmdW5jdGlv
+biBXaygpe30sCmN0OmZ1bmN0aW9uIGN0KGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmU9YQpfLmE9Ygpf
+LmI9YwpfLmM9ZApfLmQ9ZX0sCklBOmZ1bmN0aW9uIElBKCl7fSwKT3c6ZnVuY3Rpb24gT3coKXt9LApX
+OTpmdW5jdGlvbiBXOShhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9LTEKXy5kPW51bGwK
+Xy4kdGk9Y30sCmRXOmZ1bmN0aW9uIGRXKCl7fSwKbWs6ZnVuY3Rpb24gbWsoYSxiKXt0aGlzLmE9YQp0
+aGlzLmI9Yn0sCktvOmZ1bmN0aW9uIEtvKGEpe3RoaXMuYT1hCnRoaXMuYj0wfSwKZm06ZnVuY3Rpb24g
+Zm0oYSl7dGhpcy5hPWF9LApZODpmdW5jdGlvbiBZOCgpe30sCm5xOmZ1bmN0aW9uIG5xKCl7fSwKQXI6
+ZnVuY3Rpb24gQXIoKXt9LAp0RDpmdW5jdGlvbiB0RCgpe30sCnVmOmZ1bmN0aW9uIHVmKCl7fSwKaUo6
+ZnVuY3Rpb24gaUooKXt9LApFMjpmdW5jdGlvbiBFMihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKamc6
+ZnVuY3Rpb24gamcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkJmOmZ1bmN0aW9uIEJmKGEsYil7dGhp
+cy5hPWEKdGhpcy5iPWJ9LApBczpmdW5jdGlvbiBBcygpe30sCkdFOmZ1bmN0aW9uIEdFKGEpe3RoaXMu
+YT1hfSwKTjc6ZnVuY3Rpb24gTjcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnVROmZ1bmN0aW9uIHVR
+KCl7fSwKaEY6ZnVuY3Rpb24gaEYoKXt9LApSNChhLGIsYyxkKXt2YXIgcyxyLHEKQS5wOChiKQp0Lmou
+YShkKQppZihiKXtzPVtjXQpCLk5tLkZWKHMsZCkKZD1zfXI9dC56CnE9QS5QVyhKLk0xKGQsQS53MCgp
+LHIpLCEwLHIpCnQuWS5hKGEpCnJldHVybiBBLndZKEEuRWsoYSxxLG51bGwpKX0sCkRtKGEsYixjKXt2
+YXIgcwp0cnl7aWYoT2JqZWN0LmlzRXh0ZW5zaWJsZShhKSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3du
+UHJvcGVydHkuY2FsbChhLGIpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHt2YWx1ZTpjfSkKcmV0
+dXJuITB9fWNhdGNoKHMpe31yZXR1cm4hMX0sCk9tKGEsYil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNP
+d25Qcm9wZXJ0eS5jYWxsKGEsYikpcmV0dXJuIGFbYl0KcmV0dXJuIG51bGx9LAp3WShhKXtpZihhPT1u
+dWxsfHx0eXBlb2YgYT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVtYmVyInx8QS5yUShhKSlyZXR1cm4g
+YQppZihhIGluc3RhbmNlb2YgQS5FNClyZXR1cm4gYS5hCmlmKEEuUjkoYSkpcmV0dXJuIGEKaWYodC5h
+ay5iKGEpKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBBLmlQKXJldHVybiBBLm8yKGEpCmlmKHQuWS5i
+KGEpKXJldHVybiBBLmhFKGEsIiRkYXJ0X2pzRnVuY3Rpb24iLG5ldyBBLkRWKCkpCnJldHVybiBBLmhF
+KGEsIl8kZGFydF9qc09iamVjdCIsbmV3IEEuUEMoJC5rSSgpKSl9LApoRShhLGIsYyl7dmFyIHM9QS5P
+bShhLGIpCmlmKHM9PW51bGwpe3M9Yy4kMShhKQpBLkRtKGEsYixzKX1yZXR1cm4gc30sCmRVKGEpe3Zh
+ciBzLHIKaWYoYT09bnVsbHx8dHlwZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fHR5
+cGVvZiBhPT0iYm9vbGVhbiIpcmV0dXJuIGEKZWxzZSBpZihhIGluc3RhbmNlb2YgT2JqZWN0JiZBLlI5
+KGEpKXJldHVybiBhCmVsc2UgaWYoYSBpbnN0YW5jZW9mIE9iamVjdCYmdC5hay5iKGEpKXJldHVybiBh
+CmVsc2UgaWYoYSBpbnN0YW5jZW9mIERhdGUpe3M9QS5JWihhLmdldFRpbWUoKSkKaWYoTWF0aC5hYnMo
+cyk8PTg2NGUxMylyPSExCmVsc2Ugcj0hMAppZihyKUEudihBLnhZKCJEYXRlVGltZSBpcyBvdXRzaWRl
+IHZhbGlkIHJhbmdlOiAiK3MsbnVsbCkpCkEuY2IoITEsImlzVXRjIix0LnkpCnJldHVybiBuZXcgQS5p
+UChzLCExKX1lbHNlIGlmKGEuY29uc3RydWN0b3I9PT0kLmtJKCkpcmV0dXJuIGEubwplbHNlIHJldHVy
+biBBLk5EKGEpfSwKTkQoYSl7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEEuaVEoYSwkLnco
+KSxuZXcgQS5RUygpKQppZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIEEuaVEoYSwkLlI4KCksbmV3
+IEEubnAoKSkKcmV0dXJuIEEuaVEoYSwkLlI4KCksbmV3IEEuVXQoKSl9LAppUShhLGIsYyl7dmFyIHM9
+QS5PbShhLGIpCmlmKHM9PW51bGx8fCEoYSBpbnN0YW5jZW9mIE9iamVjdCkpe3M9Yy4kMShhKQpBLkRt
+KGEsYixzKX1yZXR1cm4gc30sCkRWOmZ1bmN0aW9uIERWKCl7fSwKUEM6ZnVuY3Rpb24gUEMoYSl7dGhp
+cy5hPWF9LApRUzpmdW5jdGlvbiBRUygpe30sCm5wOmZ1bmN0aW9uIG5wKCl7fSwKVXQ6ZnVuY3Rpb24g
+VXQoKXt9LApFNDpmdW5jdGlvbiBFNChhKXt0aGlzLmE9YX0sCnI3OmZ1bmN0aW9uIHI3KGEpe3RoaXMu
+YT1hfSwKVHo6ZnVuY3Rpb24gVHooYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKdmc6ZnVuY3Rpb24g
+dmcoKXt9LApuZDpmdW5jdGlvbiBuZCgpe30sCktlOmZ1bmN0aW9uIEtlKGEpe3RoaXMuYT1hfSwKaGk6
+ZnVuY3Rpb24gaGkoKXt9LApqZihhKXt2YXIgcyxyLHEscAppZihhPT1udWxsKXM9bnVsbAplbHNle3M9
+QS5RSShbXSx0LmZBKQpmb3Iocj1KLklUKGEpO3IuRigpOyl7cT1yLmdsKCkKcD1KLlU2KHEpCnMucHVz
+aChuZXcgQS5TZShBLmsocC5xKHEsImRlc2NyaXB0aW9uIikpLEEuayhwLnEocSwiaHJlZiIpKSkpfX1y
+ZXR1cm4gc30sCk5kKGEpe3ZhciBzLHIKaWYoYT09bnVsbClzPW51bGwKZWxzZXtzPUEuUUkoW10sdC5o
+aCkKZm9yKHI9Si5JVChhKTtyLkYoKTspcy5wdXNoKEEuTmYoci5nbCgpKSl9cmV0dXJuIHN9LApOZihh
+KXt2YXIgcz1KLlU2KGEpLHI9QS5rKHMucShhLCJkZXNjcmlwdGlvbiIpKSxxPUEuUUkoW10sdC5hSikK
+Zm9yKHM9Si5JVCh0LlcuYShzLnEoYSwiZW50cmllcyIpKSk7cy5GKCk7KXEucHVzaChBLlJqKHMuZ2wo
+KSkpCnJldHVybiBuZXcgQS55RChyLHEpfSwKUmooYSl7dmFyIHMscj1KLlU2KGEpLHE9QS5rKHIucShh
+LCJkZXNjcmlwdGlvbiIpKSxwPUEuayhyLnEoYSwiZnVuY3Rpb24iKSksbz1yLnEoYSwibGluayIpCmlm
+KG89PW51bGwpbz1udWxsCmVsc2V7cz1KLlU2KG8pCm89bmV3IEEuTWwoQS5rKHMucShvLCJocmVmIikp
+LEEuVWMocy5xKG8sImxpbmUiKSksQS5rKHMucShvLCJwYXRoIikpKX1yPXQuYk0uYShyLnEoYSwiaGlu
+dEFjdGlvbnMiKSkKcj1yPT1udWxsP251bGw6Si5NMShyLG5ldyBBLmFOKCksdC5KKS5icigwKQpyZXR1
+cm4gbmV3IEEud2IocSxwLG8scj09bnVsbD9CLmRuOnIpfSwKZDI6ZnVuY3Rpb24gZDIoYSxiLGMsZCxl
+LGYpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWZ9LApTZTpmdW5j
+dGlvbiBTZShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTWw6ZnVuY3Rpb24gTWwoYSxiLGMpe3RoaXMu
+YT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKeUQ6ZnVuY3Rpb24geUQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9
+Yn0sCndiOmZ1bmN0aW9uIHdiKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5k
+PWR9LAphTjpmdW5jdGlvbiBhTigpe30sCmIwOmZ1bmN0aW9uIGIwKCl7fSwKd1IoKXtyZXR1cm4gbmV3
+IEEucXAoIiIsIiIsIiIsQi5EeCl9LApZZihhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9QS5rKGEucSgw
+LCJyZWdpb25zIikpLGo9QS5rKGEucSgwLCJuYXZpZ2F0aW9uQ29udGVudCIpKSxpPUEuayhhLnEoMCwi
+c291cmNlQ29kZSIpKSxoPUEuRmwodC5OLHQuZjQpCmZvcihzPXQuRy5hKGEucSgwLCJlZGl0cyIpKSxz
+PXMuZ1B1KHMpLHM9cy5nbShzKSxyPXQuayxxPXQuZ2k7cy5GKCk7KXtwPXMuZ2woKQpvPXAuYQpuPUEu
+UUkoW10scSkKZm9yKHA9Si5JVChyLmEocC5iKSk7cC5GKCk7KXttPXAuZ2woKQpsPUouVTYobSkKbi5w
+dXNoKG5ldyBBLmo4KEEuVWMobC5xKG0sImxpbmUiKSksQS5rKGwucShtLCJleHBsYW5hdGlvbiIpKSxB
+LlVjKGwucShtLCJvZmZzZXQiKSkpKX1oLlk1KDAsbyxuKX1yZXR1cm4gbmV3IEEucXAoayxqLGksaCl9
+LApqODpmdW5jdGlvbiBqOChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApxcDpmdW5j
+dGlvbiBxcChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKbVE6ZnVu
+Y3Rpb24gbVEoKXt9LApJcSgpe0IuQlouQihkb2N1bWVudCwiRE9NQ29udGVudExvYWRlZCIsbmV3IEEu
+ZSgpKQpCLm9sLkIod2luZG93LCJwb3BzdGF0ZSIsbmV3IEEuTCgpKX0sCmt6KGEpe3ZhciBzLHI9dC5o
+LmEoYS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKCI6c2NvcGUgPiB1bCIpLHE9ci5zdHlsZSxwPSIi
+K0IuQ0QuelEoci5vZmZzZXRIZWlnaHQpKjIrInB4IgpxLm1heEhlaWdodD1wCnE9Si5xRihhKQpwPXEu
+JHRpCnM9cC5DKCJ+KDEpPyIpLmEobmV3IEEuV3gocixhKSkKdC5aLmEobnVsbCkKQS5KRShxLmEscS5i
+LHMsITEscC5jKX0sCnlYKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZj0icXVlcnlT
+ZWxlY3RvckFsbCIsZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpCmUudG9TdHJpbmcKcz10LmgKQS5E
+aChzLHMsIlQiLGYpCnI9dC5SCnE9bmV3IEEud3ooZS5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LWxpbmsi
+KSxyKQpmb3IocD1yLkMoImE3PGxELkU+Iiksbz1uZXcgQS5hNyhxLHEuZ0EocSkscCksbj1yLkMoImxE
+LkUiKSxtPXQuWjtvLkYoKTspe2w9Si5xRihuLmEoby5kKSkKaz1sLiR0aQpqPWsuQygifigxKT8iKS5h
+KG5ldyBBLkhvKGIpKQptLmEobnVsbCkKQS5KRShsLmEsbC5iLGosITEsay5jKX1BLkRoKHMscywiVCIs
+ZikKaT1uZXcgQS53eihlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdpb24iKSxyKQppZighaS5nbDAoaSkp
+e289ZS5xdWVyeVNlbGVjdG9yKCJ0YWJsZVtkYXRhLXBhdGhdIikKby50b1N0cmluZwpoPW8uZ2V0QXR0
+cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcobykpLk9VKCJwYXRoIikpCmZvcihvPW5ldyBB
+LmE3KGksaS5nQShpKSxwKTtvLkYoKTspe2w9bi5hKG8uZCkKaz1KLnFGKGwpCmo9ay4kdGkKbD1qLkMo
+In4oMSk/IikuYShuZXcgQS5JQyhsLGgpKQptLmEobnVsbCkKQS5KRShrLmEsay5iLGwsITEsai5jKX19
+QS5EaChzLHMsIlQiLGYpCmc9bmV3IEEud3ooZS5xdWVyeVNlbGVjdG9yQWxsKCIuYWRkLWhpbnQtbGlu
+ayIpLHIpCmZvcihlPW5ldyBBLmE3KGcsZy5nQShnKSxwKTtlLkYoKTspe3M9Si5xRihuLmEoZS5kKSkK
+cj1zLiR0aQpyLkMoIn4oMSk/IikuYShBLmlTKCkpCm0uYShudWxsKQpBLkpFKHMuYSxzLmIsQS5pUygp
+LCExLHIuYyl9fSwKUTYoYSxiLGMpe3ZhciBzPW5ldyBYTUxIdHRwUmVxdWVzdCgpCkIuRHQuZW8ocywi
+R0VUIixBLlE0KGEsYiksITApCnMuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGlj
+YXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCnJldHVybiBBLkxVKHMsbnVsbCxjKX0sCnR5KGEsYil7
+dmFyIHM9bmV3IFhNTEh0dHBSZXF1ZXN0KCkscj10Lk4KQi5EdC5lbyhzLCJQT1NUIixBLlE0KGEsQS5G
+bChyLHIpKSwhMCkKcy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9q
+c29uOyBjaGFyc2V0PVVURi04IikKcmV0dXJuIEEuTFUocyxiLHQuRyl9LApMVShhLGIsYyl7cmV0dXJu
+IEEuVGcoYSxiLGMsYy5DKCIwPyIpKX0sClRnKGEsYixjLGQpe3ZhciBzPTAscj1BLkZYKGQpLHEscD0y
+LG8sbj1bXSxtLGwsayxqLGksaCxnLGYsZQp2YXIgJGFzeW5jJExVPUEubHooZnVuY3Rpb24oYTAsYTEp
+e2lmKGEwPT09MSl7bz1hMQpzPXB9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9bmV3IEEuWmYo
+bmV3IEEudnMoJC5YMyx0LmFvKSx0LmJqKQpnPXQuZ3gKZj1nLmEobmV3IEEuZkMoaCxhKSkKdC5aLmEo
+bnVsbCkKaz10LnAKQS5KRShhLCJsb2FkIixmLCExLGspCkEuSkUoYSwiZXJyb3IiLGcuYShoLmdZSigp
+KSwhMSxrKQphLnNlbmQoYj09bnVsbD9udWxsOkIuQ3QuT0IoYixudWxsKSkKcD00CnM9NwpyZXR1cm4g
+QS5qUShoLmEsJGFzeW5jJExVKQpjYXNlIDc6cD0yCnM9NgpicmVhawpjYXNlIDQ6cD0zCmU9bwptPUEu
+dHMoZSkKZz1hLnJlYWR5U3RhdGUKaWYoZz09PTQmJmEuc3RhdHVzPT09MCl0aHJvdyBBLmIoQS5URygi
+RXJyb3IgcmVhY2hpbmcgbWlncmF0aW9uIHByZXZpZXcgc2VydmVyIiwiVGhpcyB1c3VhbGx5IGhhcHBl
+bnMgYmVjYXVzZSB0aGUgbWlncmF0aW9uIHByZXZpZXcgc2VydmVyIGhhcyBleGl0ZWQuICBGb3JcbmV4
+YW1wbGUgaXQgbWF5IGhhdmUgYmVlbiBhYm9ydGVkIHdpdGggQ3RybC1DLCBvciB5b3UgbWF5IGhhdmUg
+Y29tcGxldGVkIHRoaXNcbm1pZ3JhdGlvbiwgb3IgYW4gZXhjZXB0aW9uIG1heSBoYXZlIG9jY3VycmVk
+LiAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIHdoZXJlXG55b3UgaW52b2tlZCBgZGFydCBtaWdyYXRl
+YCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJldmlldyBzZXJ2ZXIgaXMgc3RpbGwgcnVubmluZy5cbiIpKQpl
+bHNle2w9bmV3IEEubEooQS5RSShbInJlYWR5U3RhdGU9IitnLCJyZXNwb25zZVRleHQ9IitCLkN0Lk9C
+KGEucmVzcG9uc2VUZXh0LG51bGwpLCJyZXNwb25zZVR5cGU9IitCLkN0Lk9CKGEucmVzcG9uc2VUeXBl
+LG51bGwpLCJyZXNwb25zZVVybD0iK0IuQ3QuT0IoYS5yZXNwb25zZVVSTCxudWxsKSwic3RhdHVzPSIr
+QS5FaihhLnN0YXR1cyksInN0YXR1c1RleHQ9IitCLkN0Lk9CKGEuc3RhdHVzVGV4dCxudWxsKV0sdC5z
+KSx0LmRHLmEobmV3IEEuVG0oKSksdC5kdikuaygwLCIsICIpCnRocm93IEEuYihBLlRsKCJFcnJvciBy
+ZWFjaGluZyBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXI6ICIrQS5FaihsKSxtKSl9cz02CmJyZWFrCmNh
+c2UgMzpzPTIKYnJlYWsKY2FzZSA2OmlmKGEuc3RhdHVzPT09NDAxKXRocm93IEEuYihBLlRHKCJVbmF1
+dGhvcml6ZWQgcmVzcG9uc2UgZnJvbSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIiLCJUaGUgbWlncmF0
+aW9uIHByZXZpZXcgc2VydmVyIGhhcyBkZXRlY3RlZCBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGF1dGhU
+b2tlbiBpblxueW91ciBVUkwgYW5kIHRoZSB0b2tlbiB0aGF0IHdhcyBnZW5lcmF0ZWQgYXQgdGhlIHRp
+bWUgdGhhdCBgZGFydCBtaWdyYXRlYCB3YXNcbnJ1bi4gIEhhdmUgeW91IHJlc3RhcnRlZCB0aGUgbWln
+cmF0aW9uIHNlcnZlciByZWNlbnRseT8gIElmIHNvLCB5b3UnbGwgbmVlZCB0b1xuY2hlY2sgaXRzIG91
+dHB1dCBmb3IgYSBmcmVzaCBVUkwsIGFuZCB1c2UgdGhhdCBVUkwgdG8gcGVyZm9ybSB5b3VyIG1pZ3Jh
+dGlvbi5cbiIpKQpnPWEucmVzcG9uc2VUZXh0CmcudG9TdHJpbmcKaT1CLkN0LnBXKDAsZyxudWxsKQpp
+ZihhLnN0YXR1cz09PTIwMCl7cT1jLkMoIjA/IikuYShpKQpzPTEKYnJlYWt9ZWxzZXtpLnRvU3RyaW5n
+CnRocm93IEEuYihpKX1jYXNlIDE6cmV0dXJuIEEueUMocSxyKQpjYXNlIDI6cmV0dXJuIEEuZjMobyxy
+KX19KQpyZXR1cm4gQS5ESSgkYXN5bmMkTFUscil9LAphSyhhKXt2YXIgcz1BLmhLKGEpLmdoWSgpLnEo
+MCwibGluZSIpCnJldHVybiBzPT1udWxsP251bGw6QS5IcChzLG51bGwpfSwKRzYoYSl7dmFyIHM9QS5o
+SyhhKS5naFkoKS5xKDAsIm9mZnNldCIpCnJldHVybiBzPT1udWxsP251bGw6QS5IcChzLG51bGwpfSwK
+aTYoYSl7cmV0dXJuIEEublcodC5WLmEoYSkpfSwKblcoYSl7dmFyIHM9MCxyPUEuRlgodC56KSxxPTEs
+cCxvPVtdLG4sbSxsLGssaixpLGgsZwp2YXIgJGFzeW5jJGk2PUEubHooZnVuY3Rpb24oYixjKXtpZihi
+PT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aD10LmguYShBLnFjKGEuY3Vy
+cmVudFRhcmdldCkpLmdldEF0dHJpYnV0ZSgiaHJlZiIpCmgudG9TdHJpbmcKbj1oCmEucHJldmVudERl
+ZmF1bHQoKQpxPTMKaD1kb2N1bWVudAptPUIuQ0QuelEoaC5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIp
+LnNjcm9sbFRvcCkKcz02CnJldHVybiBBLmpRKEEudHkobixudWxsKSwkYXN5bmMkaTYpCmNhc2UgNjpq
+PXQuRi5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKai50b1N0cmluZwpzPTcKcmV0dXJuIEEualEo
+QS5HNyhqLG51bGwsbnVsbCwhMSxudWxsKSwkYXN5bmMkaTYpCmNhc2UgNzpoLmJvZHkuY2xhc3NMaXN0
+LmFkZCgibmVlZHMtcmVydW4iKQpoPWgucXVlcnlTZWxlY3RvcigiLmNvbnRlbnQiKQpoLnRvU3RyaW5n
+Cmguc2Nyb2xsVG9wPUIuam4uelEobSkKcT0xCnM9NQpicmVhawpjYXNlIDM6cT0yCmc9cApsPUEuUnUo
+ZykKaz1BLnRzKGcpCkEuQzIoImNvdWxkbid0IGFkZC9yZW1vdmUgaGludCIsbCxrKQpzPTUKYnJlYWsK
+Y2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIEEueUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIEEu
+ZjMocCxyKX19KQpyZXR1cm4gQS5ESSgkYXN5bmMkaTYscil9LApDMihhLGIsYyl7dmFyIHMscixxLHAs
+byxuLG09ImV4Y2VwdGlvbiIsbD0ic3RhY2tUcmFjZSIKaWYodC5oNi5iKGIpJiZKLlJNKGIucSgwLCJz
+dWNjZXNzIiksITEpJiZiLng0KG0pJiZiLng0KGwpKXtzPUouVTYoYikKcj1BLmsocy5xKGIsbSkpCmM9
+cy5xKGIsbCkKcT1udWxsfWVsc2UgaWYoYiBpbnN0YW5jZW9mIEEuUVcpe3I9Yi5hCnE9Yi5ifWVsc2V7
+cj1KLllTKGIpCnE9bnVsbH1pZihxPT1udWxsKXE9YwpzPWRvY3VtZW50CnA9cy5xdWVyeVNlbGVjdG9y
+KCIucG9wdXAtcGFuZSIpCnAucXVlcnlTZWxlY3RvcigiaDIiKS5pbm5lclRleHQ9YQpvPXAucXVlcnlT
+ZWxlY3RvcigicCIpCm8udG9TdHJpbmcKci50b1N0cmluZwpvLmlubmVyVGV4dD1yCm89cC5xdWVyeVNl
+bGVjdG9yKCJwcmUiKQpvLnRvU3RyaW5nCm8uaW5uZXJUZXh0PUouWVMocSkKbj10LmJxLmEocC5xdWVy
+eVNlbGVjdG9yKCJhLmJvdHRvbSIpKQpCLnhuLnNMVShuLEEuWGQoImh0dHBzIiwiZ2l0aHViLmNvbSIs
+ImRhcnQtbGFuZy9zZGsvaXNzdWVzL25ldyIsQS5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVwb3J0ZWQg
+aXNzdWUgd2l0aCBOTkJEIG1pZ3JhdGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5IixhKyJc
+blxuRXJyb3I6ICIrcisiXG5cblBsZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioqTmFtZSBv
+ZiBwYWNrYWdlIGJlaW5nIG1pZ3JhdGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMgZG9pbmcg
+d2hlbiB0aGlzIGlzc3VlIG9jY3VycmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5k
+IHRoaXMgaXNzdWUqKjpcbioqSGFzIHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQgaWYgc28s
+IGhvdyBvZnRlbioqOlxuKipEYXJ0IFNESyB2ZXJzaW9uKio6ICIrQS5FaihzLmdldEVsZW1lbnRCeUlk
+KCJzZGstdmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoqOlxuXG5U
+aGFua3MgZm9yIGZpbGluZyFcblxuU3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1pZ3JhdGlv
+biBwcmV2aWV3IHRvb2wuX1xuXG5gYGBcbiIrQS5FaihjKSsiXG5gYGBcbiJdLHQuTix0LnopKS5nbkQo
+KSkKcz1uLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlh
+bCIKcz1hKyI6ICIrQS5FaihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdp
+bmRvdy5jb25zb2xlLmVycm9yKHMpCndpbmRvdwpzPUEuRWooYykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1
+bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKHMpfSwKdDIoYSxiKXt2YXIgcyxyLHEscCxvPXQu
+aC5hKEEucWMoYS5jdXJyZW50VGFyZ2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgpCnM9by5nZXRBdHRyaWJ1
+dGUoImhyZWYiKQpzLnRvU3RyaW5nCnI9QS5VcyhzKQpxPUEuRzYocykKcD1BLmFLKHMpCmlmKHEhPW51
+bGwpQS5hZihyLHEscCxiLG5ldyBBLm5UKHIscSxwKSkKZWxzZSBBLmFmKHIsbnVsbCxudWxsLGIsbmV3
+IEEuTlkocikpfSwKSzAoYSl7dmFyIHMscixxLHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVw
+LXBhbmUiKQpwLnF1ZXJ5U2VsZWN0b3IoImgyIikuaW5uZXJUZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJv
+bSBzb3VyY2VzIgpwLnF1ZXJ5U2VsZWN0b3IoInAiKS5pbm5lclRleHQ9IlNvdXJjZXMgY29udGFpbiBz
+dGF0aWMgYW5hbHlzaXMgZXJyb3JzOiIKcz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCnMudG9TdHJpbmcK
+cj1KLkVsKGEsdC5mKQpxPUEuTGgocikKcy5pbm5lclRleHQ9bmV3IEEubEoocixxLkMoInFVKGxELkUp
+IikuYShuZXcgQS51ZSgpKSxxLkMoImxKPGxELkUscVU+IikpLmsoMCwiXG4iKQpxPXAucXVlcnlTZWxl
+Y3RvcigiYS5ib3R0b20iKS5zdHlsZQpxLmRpc3BsYXk9Im5vbmUiCnM9cC5zdHlsZQpzLmRpc3BsYXk9
+ImluaXRpYWwifSwKR2coKXt2YXIgcz1kb2N1bWVudCxyPXQuaApBLkRoKHIsciwiVCIsInF1ZXJ5U2Vs
+ZWN0b3JBbGwiKQpzPW5ldyBBLnd6KHMucXVlcnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlIpCnMuSyhz
+LG5ldyBBLkdIKCkpfSwKaFgoYSxiLGMpe3JldHVybiBBLll3KGEsYixjKX0sCll3KGEsYixjKXt2YXIg
+cz0wLHI9QS5GWCh0LnopLHE9MSxwLG89W10sbixtLGwsayxqLGksaCxnLGYKdmFyICRhc3luYyRoWD1B
+Lmx6KGZ1bmN0aW9uKGQsZSl7aWYoZD09PTEpe3A9ZQpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2Fz
+ZSAwOnE9MwpqPXQuTgpzPTYKcmV0dXJuIEEualEoQS5RNihhLEEuRUYoWyJyZWdpb24iLCJyZWdpb24i
+LCJvZmZzZXQiLEEuRWooYildLGosaiksdC5HKSwkYXN5bmMkaFgpCmNhc2UgNjpuPWUKaj1uCmk9Si5V
+NihqKQpoPXQuZ3EKbT1uZXcgQS5kMihBLmpmKGguYShpLnEoaiwiZWRpdHMiKSkpLEEuayhpLnEoaiwi
+ZXhwbGFuYXRpb24iKSksQS5VYyhpLnEoaiwibGluZSIpKSxBLmsoaS5xKGosImRpc3BsYXlQYXRoIikp
+LEEuayhpLnEoaiwidXJpUGF0aCIpKSxBLk5kKGguYShpLnEoaiwidHJhY2VzIikpKSkKQS5UMShtKQpB
+LkZyKGEsYixjKQpBLnlYKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIsITEpCnE9MQpzPTUKYnJl
+YWsKY2FzZSAzOnE9MgpmPXAKbD1BLlJ1KGYpCms9QS50cyhmKQpBLkMyKCJjb3VsZG4ndCBsb2FkIGVk
+aXQgZGV0YWlscyIsbCxrKQpzPTUKYnJlYWsKY2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIEEu
+eUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIEEuZjMocCxyKX19KQpyZXR1cm4gQS5ESSgkYXN5bmMkaFgs
+cil9LApHNyhhLGIsYyxkLGUpe3JldHVybiBBLkw1KGEsYixjLGQsZSl9LApMNShhLGIsYyxkLGUpe3Zh
+ciBzPTAscj1BLkZYKHQuSCkscSxwPTIsbyxuPVtdLG0sbCxrLGosaSxoLGcKdmFyICRhc3luYyRHNz1B
+Lmx6KGZ1bmN0aW9uKGYsYTApe2lmKGY9PT0xKXtvPWEwCnM9cH13aGlsZSh0cnVlKXN3aXRjaChzKXtj
+YXNlIDA6aWYoIUIueEIuVGMoYSwiLmRhcnQiKSl7QS5CRShhLEEud1IoKSxkKQpBLkJYKGEsbnVsbCkK
+aWYoZSE9bnVsbCllLiQwKCkKcz0xCmJyZWFrfXA9NAppPXQuTgpzPTcKcmV0dXJuIEEualEoQS5RNihh
+LEEuRUYoWyJpbmxpbmUiLCJ0cnVlIl0saSxpKSx0LkcpLCRhc3luYyRHNykKY2FzZSA3Om09YTAKQS5C
+RShhLEEuWWYobSksZCkKQS5mRyhiLGMpCmw9QS5VcyhhKQpBLkJYKGwsYikKaWYoZSE9bnVsbCllLiQw
+KCkKcD0yCnM9NgpicmVhawpjYXNlIDQ6cD0zCmc9bwprPUEuUnUoZykKaj1BLnRzKGcpCkEuQzIoImNv
+dWxkbid0IGxvYWQgZGFydCBmaWxlICIrYSxrLGopCnM9NgpicmVhawpjYXNlIDM6cz0yCmJyZWFrCmNh
+c2UgNjpjYXNlIDE6cmV0dXJuIEEueUMocSxyKQpjYXNlIDI6cmV0dXJuIEEuZjMobyxyKX19KQpyZXR1
+cm4gQS5ESSgkYXN5bmMkRzcscil9LApHZSgpe3ZhciBzPTAscj1BLkZYKHQueikscT0xLHAsbz1bXSxu
+LG0sbCxrLGosaSxoLGcKdmFyICRhc3luYyRHZT1BLmx6KGZ1bmN0aW9uKGEsYil7aWYoYT09PTEpe3A9
+YgpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmg9Ii9fcHJldmlldy9uYXZpZ2F0aW9uVHJl
+ZS5qc29uIgpxPTMKcz02CnJldHVybiBBLmpRKEEuUTYoaCxCLkNNLHQuVyksJGFzeW5jJEdlKQpjYXNl
+IDY6aj1iCmoudG9TdHJpbmcKbj1qCmo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm5hdi10cmVlIikK
+ai50b1N0cmluZwptPWoKSi5sNShtLCIiKQpqPUEubUsobikKJC5JUj1qCkEudFgobSxqLCEwKQpxPTEK
+cz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCmw9QS5SdShnKQprPUEudHMoZykKQS5DMigiY291bGRuJ3Qg
+bG9hZCBuYXZpZ2F0aW9uIHRyZWUiLGwsaykKcz01CmJyZWFrCmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1
+OnJldHVybiBBLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBBLmYzKHAscil9fSkKcmV0dXJuIEEuREko
+JGFzeW5jJEdlLHIpfSwKcU8oYSl7dmFyIHMscixxPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1C
+LkNELnpRKCQuZmkoKS5vZmZzZXRIZWlnaHQpLG89d2luZG93LmlubmVySGVpZ2h0Cm8udG9TdHJpbmcK
+cz1CLkNELnpRKCQuRFcoKS5vZmZzZXRIZWlnaHQpCnI9cS5ib3R0b20Kci50b1N0cmluZwppZihyPm8t
+KHMrMTQpKUouZGgoYSkKZWxzZXtvPXEudG9wCm8udG9TdHJpbmcKaWYobzxwKzE0KUouZGgoYSl9fSwK
+ZkcoYSxiKXt2YXIgcyxyLHEscCxvCmlmKGEhPW51bGwpe3M9ZG9jdW1lbnQKcj1zLmdldEVsZW1lbnRC
+eUlkKCJvIitBLkVqKGEpKQpxPXMucXVlcnlTZWxlY3RvcigiLmxpbmUtIitBLkVqKGIpKQppZihyIT1u
+dWxsKXtBLnFPKHIpCkouZFIocikuaSgwLCJ0YXJnZXQiKX1lbHNlIGlmKHEhPW51bGwpe3M9cS5wYXJl
+bnRFbGVtZW50CnMudG9TdHJpbmcKQS5xTyhzKX1pZihxIT1udWxsKUouZFIodC5oLmEocS5wYXJlbnRO
+b2RlKSkuaSgwLCJoaWdobGlnaHQiKX1lbHNle3M9ZG9jdW1lbnQKcD10LmgKQS5EaChwLHAsIlQiLCJx
+dWVyeVNlbGVjdG9yQWxsIikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwoIi5saW5lLW5vIikKbz1uZXcgQS53
+eihzLHQuUikKaWYoby5nQShvKT09PTApcmV0dXJuCkEucU8ocC5hKEIudDUuZ3RIKHMpKSl9fSwKYWYo
+YSxiLGMsZCxlKXt2YXIgcyxyLHEscD10LkYsbz1BLkc2KHAuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYp
+LG49QS5hSyhwLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQppZihvIT1udWxsKXtzPWRvY3VtZW50Lmdl
+dEVsZW1lbnRCeUlkKCJvIitBLkVqKG8pKQppZihzIT1udWxsKUouZFIocykuUigwLCJ0YXJnZXQiKX1p
+ZihuIT1udWxsKXtyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrQS5FaihuKSkKaWYociE9
+bnVsbCl7cT1yLnBhcmVudEVsZW1lbnQKcS50b1N0cmluZwpKLmRSKHEpLlIoMCwiaGlnaGxpZ2h0Iil9
+fWlmKGE9PXAuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lKXtBLmZHKGIsYykKZS4kMCgpfWVsc2V7
+YS50b1N0cmluZwpBLkc3KGEsYixjLGQsZSl9fSwKUTQoYSxiKXt2YXIgcyxyLHE9QS5oSyhhKSxwPUEu
+RmwodC5OLHQuZGspCmZvcihzPXEuZ2hZKCkscz1zLmdQdShzKSxzPXMuZ20ocyk7cy5GKCk7KXtyPXMu
+Z2woKQpwLlk1KDAsci5hLHIuYil9Zm9yKHM9Yi5nUHUoYikscz1zLmdtKHMpO3MuRigpOyl7cj1zLmds
+KCkKcC5ZNSgwLHIuYSxyLmIpfXAuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnJldHVybiBxLm5tKDAs
+cCkuZ25EKCl9LApUMShhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPSQuaEwoKQppLnRvU3RyaW5n
+CkoubDUoaSwiIikKaWYoYT09bnVsbCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikKQi5MdC5z
+YTQocywiU2VlIGRldGFpbHMgYWJvdXQgYSBwcm9wb3NlZCBlZGl0LiIpCkIuTHQuc1AocyxBLlFJKFsi
+cGxhY2Vob2xkZXIiXSx0LnMpKQppLmFwcGVuZENoaWxkKHMpCkIuTHQuRkYocykKcmV0dXJufXI9YS5k
+CnIudG9TdHJpbmcKcT0kLm5VKCkKcD1xLnpmKHIpCm89YS5iCm49ZG9jdW1lbnQKbT1uLnF1ZXJ5U2Vs
+ZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKbS50b1N0cmluZwpsPXEuSFAocixCLnhCLmJTKG0pKQpr
+PWEuYwpqPW4uY3JlYXRlRWxlbWVudCgicCIpCmkuYXBwZW5kQ2hpbGQoaikKai5hcHBlbmRDaGlsZChu
+LmNyZWF0ZVRleHROb2RlKEEuRWoobykrIiBhdCAiKSkKcj1hLmUKci50b1N0cmluZwpxPXQuTgpxPUEu
+SjYoQS5RNChyLEEuRUYoWyJsaW5lIixKLllTKGspXSxxLHEpKSkKcS5hcHBlbmRDaGlsZChuLmNyZWF0
+ZVRleHROb2RlKGwrIjoiK0EuRWooaykrIi4iKSkKai5hcHBlbmRDaGlsZChxKQpKLmRoKGopCkEuQ0Mo
+YSxpLHApCkEuRnooYSxpKX0sCkxIKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxm
+LGUsZD0kLnlQKCkKZC50b1N0cmluZwpKLmw1KGQsIiIpCmlmKGIuZ0EoYik9PT0wKXtzPWRvY3VtZW50
+CnI9cy5jcmVhdGVFbGVtZW50KCJwIikKZC5hcHBlbmRDaGlsZChyKQpyLmFwcGVuZENoaWxkKHMuY3Jl
+YXRlVGV4dE5vZGUoIk5vIHByb3Bvc2VkIGVkaXRzIikpfWVsc2UgZm9yKGQ9Yi5nUHUoYiksZD1kLmdt
+KGQpLHM9dC5GLHE9dC5OLHA9dC5RLG89cC5DKCJ+KDEpPyIpLG49dC5aLHA9cC5jO2QuRigpOyl7bT1k
+LmdsKCkKbD1kb2N1bWVudApyPWwuY3JlYXRlRWxlbWVudCgicCIpCms9JC55UCgpCmsuYXBwZW5kQ2hp
+bGQocikKci5hcHBlbmRDaGlsZChsLmNyZWF0ZVRleHROb2RlKEEuRWoobS5hKSsiOiIpKQpqPWwuY3Jl
+YXRlRWxlbWVudCgidWwiKQprLmFwcGVuZENoaWxkKGopCmZvcihtPUouSVQobS5iKTttLkYoKTspe2s9
+bS5nbCgpCmk9bC5jcmVhdGVFbGVtZW50KCJsaSIpCmouYXBwZW5kQ2hpbGQoaSkKSi5kUihpKS5pKDAs
+ImVkaXQiKQpoPWwuY3JlYXRlRWxlbWVudCgiYSIpCmkuYXBwZW5kQ2hpbGQoaCkKaC5jbGFzc0xpc3Qu
+YWRkKCJlZGl0LWxpbmsiKQpnPWsuYwpmPUEuRWooZykKaC5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcg
+QS5TeShuZXcgQS5pNyhoKSkuT1UoIm9mZnNldCIpLGYpCmU9ay5hCmY9QS5FaihlKQpoLnNldEF0dHJp
+YnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KGgpKS5PVSgibGluZSIpLGYpCmguYXBwZW5kQ2hp
+bGQobC5jcmVhdGVUZXh0Tm9kZSgibGluZSAiK0EuRWooZSkpKQpmPXMuYSh3aW5kb3cubG9jYXRpb24p
+LnBhdGhuYW1lCmYudG9TdHJpbmcKaC5zZXRBdHRyaWJ1dGUoImhyZWYiLEEuUTQoZixBLkVGKFsibGlu
+ZSIsQS5FaihlKSwib2Zmc2V0IixBLkVqKGcpXSxxLHEpKSkKZj1vLmEobmV3IEEuRUUoZyxlLGEpKQpu
+LmEobnVsbCkKQS5KRShoLCJjbGljayIsZiwhMSxwKQppLmFwcGVuZENoaWxkKGwuY3JlYXRlVGV4dE5v
+ZGUoIjogIitBLkVqKGsuYikpKX19aWYoYylBLlQxKG51bGwpfSwKRnIoYSxiLGMpe3ZhciBzLHIscT1B
+LmhLKEIuRXguZ0RyKHQuRi5hKHdpbmRvdy5sb2NhdGlvbikpK0EuRWooYSkpLHA9QS5GbCh0Lk4sdC5k
+aykKaWYoYiE9bnVsbClwLlk1KDAsIm9mZnNldCIsQS5FaihiKSkKaWYoYyE9bnVsbClwLlk1KDAsImxp
+bmUiLEEuRWooYykpCnAuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnE9cS5ubSgwLHApCnA9d2luZG93
+Lmhpc3RvcnkKcz10LnoKcj1xLmduRCgpCnAucHVzaFN0YXRlKG5ldyBBLkJmKFtdLFtdKS5QdihBLkZs
+KHMscykpLCIiLHIpfSwKRW4oYSl7dmFyIHMscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIp
+LnRleHRDb250ZW50CnIudG9TdHJpbmcKcz1yKyIvIgppZihCLnhCLm4oYSxzKSlyZXR1cm4gQi54Qi55
+bihhLHMubGVuZ3RoKQplbHNlIHJldHVybiBhfSwKT3QoYSl7c3dpdGNoKGEucil7Y2FzZSBCLmN3OmJy
+ZWFrCmNhc2UgQi5XRDphLnI9Qi5YagpicmVhawpjYXNlIEIuWGo6YS5yPUIuV0QKYnJlYWsKY2FzZSBC
+LmRjOnRocm93IEEuYihBLlBWKCJGaWxlICIrQS5FaihhLmMpKyIgc2hvdWxkIG5vdCBoYXZlIGluZGV0
+ZXJtaW5hdGUgbWlncmF0aW9uIHN0YXR1cyIpKQpkZWZhdWx0OmJyZWFrfX0sCnRhKGEsYil7dmFyIHMs
+cj0iY2hlY2tfYm94IixxPSJ0aXRsZSIscD0ib3B0ZWQtb3V0IixvPSJtaWdyYXRpbmciCnN3aXRjaChi
+KXtjYXNlIEIuY3c6YS5pbm5lclRleHQ9cgpzPUouWUUoYSkKcy5nUChhKS5pKDAsImFscmVhZHktbWln
+cmF0ZWQiKQpzLmdQKGEpLmkoMCwiZGlzYWJsZWQiKQphLnNldEF0dHJpYnV0ZShxLCJBbHJlYWR5IG1p
+Z3JhdGVkIikKYnJlYWsKY2FzZSBCLldEOmEuaW5uZXJUZXh0PXIKcz1KLllFKGEpCnMuZ1AoYSkuUigw
+LHApCnMuZ1AoYSkuaSgwLG8pCmEuc2V0QXR0cmlidXRlKHEsIk1pZ3JhdGluZyB0byBudWxsIHNhZmV0
+eSIpCmJyZWFrCmNhc2UgQi5YajphLmlubmVyVGV4dD0iY2hlY2tfYm94X291dGxpbmVfYmxhbmsiCnM9
+Si5ZRShhKQpzLmdQKGEpLlIoMCxvKQpzLmdQKGEpLmkoMCxwKQphLnNldEF0dHJpYnV0ZShxLCJPcHRp
+bmcgb3V0IG9mIG51bGwgc2FmZXR5IikKYnJlYWsKZGVmYXVsdDphLmlubmVyVGV4dD0iaW5kZXRlcm1p
+bmF0ZV9jaGVja19ib3giCnM9Si5ZRShhKQpzLmdQKGEpLlIoMCxvKQpzLmdQKGEpLmkoMCxwKQphLnNl
+dEF0dHJpYnV0ZShxLCJNaXhlZCBzdGF0dXNlcyBvZiAnbWlncmF0aW5nJyBhbmQgJ29wdGluZyBvdXQn
+IikKYnJlYWt9fSwKeG4oYSxiKXt2YXIgcyxyPSJkaXNhYmxlZCIscT1iLmdMKCkKQS50YShhLHEpCmlm
+KGIuYz09PSQuRDkoKS5pbm5lclRleHQpe2lmKGIgaW5zdGFuY2VvZiBBLmNEKXtzPWIueApzLnRvU3Ry
+aW5nCnM9IXN9ZWxzZSBzPSExCmlmKHMpe2EudG9TdHJpbmcKSi5kUihhKS5pKDAscil9ZWxzZXthLnRv
+U3RyaW5nCkouZFIoYSkuUigwLHIpfUEudGEoJC5jMCgpLHEpfX0sCkJYKGEsYil7dmFyIHMscixxLHA9
+e30KcC5hPWEKYT1BLkVuKGEpCnAuYT1hCnM9JC5EOSgpCnMudG9TdHJpbmcKSi5kcihzLGEpCnM9ZG9j
+dW1lbnQKcj10LmgKQS5EaChyLHIsIlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1uZXcgQS53eihzLnF1
+ZXJ5U2VsZWN0b3JBbGwoIi5uYXYtcGFuZWwgLm5hdi1saW5rIiksdC5SKQpzLksocyxuZXcgQS5WUyhw
+KSkKcz0kLklSCnE9cz09bnVsbD9udWxsOkEueXcocyxwLmEpCmlmKHE9PW51bGwpe3A9JC5iTigpCnAu
+dG9TdHJpbmcKSi5kUihwKS5SKDAsInZpc2libGUiKX1lbHNle3A9JC5iTigpCnAudG9TdHJpbmcKSi5k
+UihwKS5pKDAsInZpc2libGUiKQpBLnRhKCQuYzAoKSxxLmdMKCkpfX0sCkFSKGEsYil7dmFyIHM9QS55
+YihiLmIsInBhcmVudCIpLHI9dC5oLHE9ci5hKHIuYShhLnBhcmVudE5vZGUpLnBhcmVudE5vZGUpCkEu
+eG4ocS5xdWVyeVNlbGVjdG9yKCI6c2NvcGUgPiAuc3RhdHVzLWljb24iKSxzKQpBLkFSKHEscyl9LApi
+TChhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9IjpzY29wZSA+IC5zdGF0dXMtaWNvbiIKZm9yKHM9Yi5k
+LHI9cy5sZW5ndGgscT10LmgscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxBLmxrKShzKSwr
+K3Ape289c1twXQphLnRvU3RyaW5nCm49by5jCm4udG9TdHJpbmcKbT1hLnF1ZXJ5U2VsZWN0b3IoJ1tk
+YXRhLW5hbWUqPSInK0EuTGoobikrJyJdJykKaWYobyBpbnN0YW5jZW9mIEEudnQpe0EuYkwobSxvKQpB
+LnhuKG0ucXVlcnlTZWxlY3RvcihsKSxiKX1lbHNlIEEueG4ocS5hKG0ucGFyZW50Tm9kZSkucXVlcnlT
+ZWxlY3RvcihsKSxvKX19LApCRShhLGIsYyl7dmFyIHM9Ii5yZWdpb25zIixyPWRvY3VtZW50LHE9ci5x
+dWVyeVNlbGVjdG9yKHMpCnEudG9TdHJpbmcKcj1yLnF1ZXJ5U2VsZWN0b3IoIi5jb2RlIikKci50b1N0
+cmluZwpKLnRIKHEsYi5hLCQuS0coKSkKSi50SChyLGIuYiwkLktHKCkpCkEuTEgoYSxiLmQsYykKaWYo
+Yi5jLmxlbmd0aDwyZTUpQS5HZygpCkEueVgoIi5jb2RlIiwhMCkKQS55WChzLCEwKX0sCnRYKGEwLGEx
+LGEyKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD0ibWF0ZXJpYWwtaWNvbnMiLGM9
+InN0YXR1cy1pY29uIixiPWRvY3VtZW50LGE9Yi5jcmVhdGVFbGVtZW50KCJ1bCIpCmEwLmFwcGVuZENo
+aWxkKGEpCmZvcihzPWExLmxlbmd0aCxyPXQuTixxPXQuWixwPTA7cDxhMS5sZW5ndGg7YTEubGVuZ3Ro
+PT09c3x8KDAsQS5saykoYTEpLCsrcCl7bz1hMVtwXQpuPWIuY3JlYXRlRWxlbWVudCgibGkiKQphLmFw
+cGVuZENoaWxkKG4pCmlmKG8gaW5zdGFuY2VvZiBBLnZ0KXttPUouWUUobikKbS5nUChuKS5pKDAsImRp
+ciIpCmw9by5jCmwudG9TdHJpbmcKbi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgQS5TeShuZXcgQS5p
+NyhuKSkuT1UoIm5hbWUiKSxsKQprPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQo
+aykKbD1KLllFKGspCmwuZ1AoaykuaSgwLCJhcnJvdyIpCmwuc2hmKGssIiYjeDI1QkM7IikKaj1iLmNy
+ZWF0ZUVsZW1lbnQoInNwYW4iKQpKLmRSKGopLmkoMCxkKQpqLmlubmVyVGV4dD0iZm9sZGVyX29wZW4i
+Cm4uYXBwZW5kQ2hpbGQoaikKbD1vLmEKbC50b1N0cmluZwpuLmFwcGVuZENoaWxkKGIuY3JlYXRlVGV4
+dE5vZGUobCkpCmw9by5kCmwudG9TdHJpbmcKQS50WChuLGwsITApCmk9Yi5jcmVhdGVFbGVtZW50KCJz
+cGFuIikKbD1KLllFKGkpCmwuZ1AoaSkuaSgwLGQpCmkuaW5uZXJUZXh0PSJpbmRldGVybWluYXRlX2No
+ZWNrX2JveCIKbC5nUChpKS5pKDAsYykKQS54bihpLG8pCmw9bC5nVmwoaSkKaD1sLiR0aQpnPWguQygi
+figxKT8iKS5hKG5ldyBBLlREKG8sbixpKSkKcS5hKG51bGwpCkEuSkUobC5hLGwuYixnLCExLGguYykK
+bS5tSyhuLGksaikKQS5reihrKX1lbHNlIGlmKG8gaW5zdGFuY2VvZiBBLmNEKXtpPWIuY3JlYXRlRWxl
+bWVudCgic3BhbiIpCm09Si5ZRShpKQptLmdQKGkpLmkoMCxkKQppLmlubmVyVGV4dD0iIgptLmdQKGkp
+LmkoMCxjKQpsPW8ueApsLnRvU3RyaW5nCmlmKCFsKW0uZ1AoaSkuaSgwLCJkaXNhYmxlZCIpCkEueG4o
+aSxvKQppZihsKXttPW0uZ1ZsKGkpCmw9bS4kdGkKaD1sLkMoIn4oMSk/IikuYShuZXcgQS5JZihvLGks
+bikpCnEuYShudWxsKQpBLkpFKG0uYSxtLmIsaCwhMSxsLmMpfW4uYXBwZW5kQ2hpbGQoaSkKbT1iLmNy
+ZWF0ZUVsZW1lbnQoInNwYW4iKQpKLmRSKG0pLmkoMCxkKQptLmlubmVyVGV4dD0iaW5zZXJ0X2RyaXZl
+X2ZpbGUiCm4uYXBwZW5kQ2hpbGQobSkKZj1iLmNyZWF0ZUVsZW1lbnQoImEiKQpuLmFwcGVuZENoaWxk
+KGYpCm09Si5ZRShmKQptLmdQKGYpLmkoMCwibmF2LWxpbmsiKQpsPW8uYwpsLnRvU3RyaW5nCmYuc2V0
+QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcoZikpLk9VKCJuYW1lIiksbCkKbD1vLmQK
+bC50b1N0cmluZwpmLnNldEF0dHJpYnV0ZSgiaHJlZiIsQS5RNChsLEEuRmwocixyKSkpCmw9by5hCmwu
+dG9TdHJpbmcKZi5hcHBlbmRDaGlsZChiLmNyZWF0ZVRleHROb2RlKGwpKQptPW0uZ1ZsKGYpCmw9bS4k
+dGkKaD1sLkMoIn4oMSk/IikuYShuZXcgQS50QigpKQpxLmEobnVsbCkKQS5KRShtLmEsbS5iLGgsITEs
+bC5jKQpsPW8uZQpsLnRvU3RyaW5nCmlmKGw+MCl7ZT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpuLmFw
+cGVuZENoaWxkKGUpCkouZFIoZSkuaSgwLCJlZGl0LWNvdW50IikKbT0iIitsKyIgIgppZihsPT09MSlo
+PSJwcm9wb3NlZCBlZGl0IgplbHNlIGg9InByb3Bvc2VkIGVkaXRzIgplLnNldEF0dHJpYnV0ZSgidGl0
+bGUiLG0raCkKZS5hcHBlbmRDaGlsZChiLmNyZWF0ZVRleHROb2RlKEIuam4udyhsKSkpfX19fSwKdXoo
+YSxiLGMpe3ZhciBzPWRvY3VtZW50LHI9cy5jcmVhdGVFbGVtZW50KCJidXR0b24iKSxxPXQuUSxwPXEu
+QygifigxKT8iKS5hKG5ldyBBLm0yKGEsYykpCnQuWi5hKG51bGwpCkEuSkUociwiY2xpY2siLHAsITEs
+cS5jKQpxPUEuT1goYS5hKQpxLnRvU3RyaW5nCnIuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZShx
+KSkKYi5hcHBlbmRDaGlsZChyKX0sCkZ6KGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPWEu
+YQppZihoPT1udWxsKXJldHVybgpiLnRvU3RyaW5nCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZUVsZW1lbnQo
+InAiKQpxPWIuYXBwZW5kQ2hpbGQocikKcj1zLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpwPXQucwpKLk11
+KHIsQS5RSShbInR5cGUtZGVzY3JpcHRpb24iXSxwKSkKci5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHRO
+b2RlKCJBY3Rpb25zIikpCnEuYXBwZW5kQ2hpbGQocikKcS5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHRO
+b2RlKCI6IikpCm89cy5jcmVhdGVFbGVtZW50KCJwIikKYi5hcHBlbmRDaGlsZChvKQpmb3Iocj1oLmxl
+bmd0aCxuPXQuTyxtPTA7bTxoLmxlbmd0aDtoLmxlbmd0aD09PXJ8fCgwLEEubGspKGgpLCsrbSl7bD1o
+W21dCms9cy5jcmVhdGVFbGVtZW50KCJhIikKby5hcHBlbmRDaGlsZChrKQpqPWwuYQpqLnRvU3RyaW5n
+CmsuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZShqKSkKaj1sLmIKai50b1N0cmluZwprLnNldEF0
+dHJpYnV0ZSgiaHJlZiIsaikKaj1uLmEoQS5RSShbImFkZC1oaW50LWxpbmsiLCJiZWZvcmUtYXBwbHki
+LCJidXR0b24iXSxwKSkKaT1KLmRSKGspCmkuVjEoMCkKaS5GVigwLGopfX0sCkNDKGE0LGE1LGE2KXt2
+YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMixhMwpmb3Iocz1h
+NC5mLHI9cy5sZW5ndGgscT10LnMscD10Lk8sbz0wO288cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxB
+LmxrKShzKSwrK28pe249c1tvXQphNS50b1N0cmluZwptPWRvY3VtZW50Cmw9bS5jcmVhdGVFbGVtZW50
+KCJwIikKaz1wLmEoQS5RSShbInRyYWNlIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmouRlYoMCxrKQpp
+PWE1LmFwcGVuZENoaWxkKGwpCmw9bS5jcmVhdGVFbGVtZW50KCJzcGFuIikKaz1wLmEoQS5RSShbInR5
+cGUtZGVzY3JpcHRpb24iXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCms9bi5hCmsudG9T
+dHJpbmcKbC5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2RlKGspKQppLmFwcGVuZENoaWxkKGwpCmku
+YXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiIpKQpsPW0uY3JlYXRlRWxlbWVudCgidWwiKQpr
+PXAuYShBLlFJKFsidHJhY2UiXSxxKSkKaj1KLmRSKGwpCmouVjEoMCkKai5GVigwLGspCmg9aS5hcHBl
+bmRDaGlsZChsKQpmb3IobD1uLmIsaz1sLmxlbmd0aCxnPTA7ZzxsLmxlbmd0aDtsLmxlbmd0aD09PWt8
+fCgwLEEubGspKGwpLCsrZyl7Zj1sW2ddCmU9bS5jcmVhdGVFbGVtZW50KCJsaSIpCmguYXBwZW5kQ2hp
+bGQoZSkKZD1tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpjPXAuYShBLlFJKFsiZnVuY3Rpb24iXSxxKSkK
+aj1KLmRSKGQpCmouVjEoMCkKai5GVigwLGMpCmM9Zi5iCkEuV2ooZCxjPT1udWxsPyJ1bmtub3duIjpj
+KQplLmFwcGVuZENoaWxkKGQpCmI9Zi5jCmlmKGIhPW51bGwpe2UuYXBwZW5kQ2hpbGQobS5jcmVhdGVU
+ZXh0Tm9kZSgiICgiKSkKYT1iLmIKYTA9bS5jcmVhdGVFbGVtZW50KCJhIikKYTAuYXBwZW5kQ2hpbGQo
+bS5jcmVhdGVUZXh0Tm9kZShBLkVqKGIuYykrIjoiK0EuRWooYSkpKQpkPWIuYQpkLnRvU3RyaW5nCmEw
+LnNldEF0dHJpYnV0ZSgiaHJlZiIsZCkKYTAuY2xhc3NMaXN0LmFkZCgibmF2LWxpbmsiKQplLmFwcGVu
+ZENoaWxkKGEwKQplLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIikiKSl9ZS5hcHBlbmRDaGls
+ZChtLmNyZWF0ZVRleHROb2RlKCI6ICIpKQpkPWYuYQpBLldqKGUsZD09bnVsbD8idW5rbm93biI6ZCkK
+ZD1mLmQKaWYoZC5sZW5ndGghPT0wKXtjPW0uY3JlYXRlRWxlbWVudCgicCIpCmExPXAuYShBLlFJKFsi
+ZHJhd2VyIiwiYmVmb3JlLWFwcGx5Il0scSkpCmo9Si5kUihjKQpqLlYxKDApCmouRlYoMCxhMSkKYTI9
+ZS5hcHBlbmRDaGlsZChjKQpmb3IoYz1kLmxlbmd0aCxhMz0wO2EzPGQubGVuZ3RoO2QubGVuZ3RoPT09
+Y3x8KDAsQS5saykoZCksKythMylBLnV6KGRbYTNdLGEyLGIpfX19fSwKVXMoYSl7cmV0dXJuIEIueEIu
+dGcoYSwiPyIpP0IueEIuTmooYSwwLEIueEIuT1koYSwiPyIpKTphfSwKVEcoYSxiKXtyZXR1cm4gbmV3
+IEEuUVcoYSxiKX0sCnl3KGEsYil7dmFyIHMscixxLHAsbwpmb3Iocz1hLmxlbmd0aCxyPTA7cjxhLmxl
+bmd0aDthLmxlbmd0aD09PXN8fCgwLEEubGspKGEpLCsrcil7cT1hW3JdCmlmKHEgaW5zdGFuY2VvZiBB
+LnZ0KXtwPXEuZApwLnRvU3RyaW5nCm89QS55dyhwLGIpCmlmKG8hPW51bGwpcmV0dXJuIG99ZWxzZSBp
+ZihxLmM9PT1iKXJldHVybiBxfXJldHVybiBudWxsfSwKV2ooYSxiKXt2YXIgcyxyLHEscD1BLlFJKGIu
+c3BsaXQoIi4iKSx0LnMpLG89Qi5ObS5ndEgocCksbj1kb2N1bWVudAphLmFwcGVuZENoaWxkKG4uY3Jl
+YXRlVGV4dE5vZGUobykpCmZvcihvPUEucUMocCwxLG51bGwsdC5OKSxzPW8uJHRpLG89bmV3IEEuYTco
+byxvLmdBKG8pLHMuQygiYTc8YUwuRT4iKSkscz1zLkMoImFMLkUiKSxyPUouWUUoYSk7by5GKCk7KXtx
+PXMuYShvLmQpCnIubnooYSwiYmVmb3JlZW5kIiwiJiM4MjAzOy4iLG51bGwsbnVsbCkKYS5hcHBlbmRD
+aGlsZChuLmNyZWF0ZVRleHROb2RlKHEpKX19LAplOmZ1bmN0aW9uIGUoKXt9LApWVzpmdW5jdGlvbiBW
+VyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApvWjpmdW5jdGlvbiBvWigpe30sCmpy
+OmZ1bmN0aW9uIGpyKCl7fSwKcWw6ZnVuY3Rpb24gcWwoKXt9LAp5ODpmdW5jdGlvbiB5OCgpe30sCkhp
+OmZ1bmN0aW9uIEhpKCl7fSwKQlQ6ZnVuY3Rpb24gQlQoKXt9LApQWTpmdW5jdGlvbiBQWSgpe30sCkw6
+ZnVuY3Rpb24gTCgpe30sCld4OmZ1bmN0aW9uIFd4KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApIbzpm
+dW5jdGlvbiBIbyhhKXt0aGlzLmE9YX0sCklDOmZ1bmN0aW9uIElDKGEsYil7dGhpcy5hPWEKdGhpcy5i
+PWJ9LApmQzpmdW5jdGlvbiBmQyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVG06ZnVuY3Rpb24gVG0o
+KXt9LApuVDpmdW5jdGlvbiBuVChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApOWTpm
+dW5jdGlvbiBOWShhKXt0aGlzLmE9YX0sCnVlOmZ1bmN0aW9uIHVlKCl7fSwKR0g6ZnVuY3Rpb24gR0go
+KXt9LApFRTpmdW5jdGlvbiBFRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApRTDpm
+dW5jdGlvbiBRTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVuY3Rpb24gVlMoYSl7dGhpcy5h
+PWF9LApURDpmdW5jdGlvbiBURChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApJZjpm
+dW5jdGlvbiBJZihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp0QjpmdW5jdGlvbiB0
+Qigpe30sCm0yOmZ1bmN0aW9uIG0yKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApRVzpmdW5jdGlvbiBR
+VyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWEE6ZnVuY3Rpb24gWEEoKXt9LApacyhhKXt2YXIgcyxy
+LHE9Si5VNihhKQppZihBLnAyKEEuayhxLnEoYSwidHlwZSIpKSk9PT1CLlkyKXtzPUEuayhxLnEoYSwi
+bmFtZSIpKQpyPUEuayhxLnEoYSwicGF0aCIpKQpxPXEucShhLCJzdWJ0cmVlIikKcT1uZXcgQS52dChx
+PT1udWxsP251bGw6QS5tSyh0LlcuYShxKSkscyxyKQpxLkxWKCkKcmV0dXJuIHF9ZWxzZXtzPUEuayhx
+LnEoYSwibmFtZSIpKQpyPUEuayhxLnEoYSwicGF0aCIpKQpyZXR1cm4gbmV3IEEuY0QoQS5rKHEucShh
+LCJocmVmIikpLEEuVWMocS5xKGEsImVkaXRDb3VudCIpKSxBLk00KHEucShhLCJ3YXNFeHBsaWNpdGx5
+T3B0ZWRPdXQiKSksQS52QihBLlVjKHEucShhLCJtaWdyYXRpb25TdGF0dXMiKSkpLEEuTTQocS5xKGEs
+Im1pZ3JhdGlvblN0YXR1c0NhbkJlQ2hhbmdlZCIpKSxzLHIpfX0sCm1LKGEpe3ZhciBzLHI9QS5RSShb
+XSx0LmZoKQpmb3Iocz1KLklUKGEpO3MuRigpOylyLnB1c2goQS5acyhzLmdsKCkpKQpyZXR1cm4gcn0s
+ClZEKGEpe3ZhciBzLHIscT1BLlFJKFtdLHQuZCkKZm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7
+YS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhKSwrK3IpcS5wdXNoKGFbcl0uTHQoKSkKcmV0dXJuIHF9LAp2
+QihhKXtpZihhPT1udWxsKXJldHVybiBudWxsCmlmKGE+Pj4wIT09YXx8YT49NClyZXR1cm4gQS5PSChC
+LldHLGEpCnJldHVybiBCLldHW2FdfSwKcDIoYSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1
+cm4gQi5ZMgpjYXNlImZpbGUiOnJldHVybiBCLnJmCmRlZmF1bHQ6dGhyb3cgQS5iKEEuUFYoIlVucmVj
+b2duaXplZCBuYXZpZ2F0aW9uIHRyZWUgbm9kZSB0eXBlOiAiK0EuRWooYSkpKX19LAp2dDpmdW5jdGlv
+biB2dChhLGIsYyl7dmFyIF89dGhpcwpfLmQ9YQpfLmE9YgpfLmI9JApfLmM9Y30sCmNEOmZ1bmN0aW9u
+IGNEKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWQKXy54PWUK
+Xy5hPWYKXy5iPSQKXy5jPWd9LApEODpmdW5jdGlvbiBEOCgpe30sCk85OmZ1bmN0aW9uIE85KGEsYil7
+dGhpcy5hPWEKdGhpcy5iPWJ9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwK
+bnooYSl7dmFyIHM9QS5VYyhhLnEoMCwibm9kZUlkIikpCnJldHVybiBuZXcgQS5MTChCLk5tLkh0KEIu
+TW0sbmV3IEEuTUQoYSkpLHMpfSwKT1goYSl7c3dpdGNoKGEuYSl7Y2FzZSAwOnJldHVybiJBZGQgLyo/
+Ki8gaGludCIKY2FzZSAxOnJldHVybiJBZGQgLyohKi8gaGludCIKY2FzZSA0OnJldHVybiJSZW1vdmUg
+Lyo/Ki8gaGludCIKY2FzZSA1OnJldHVybiJSZW1vdmUgLyohKi8gaGludCIKY2FzZSAyOnJldHVybiJD
+aGFuZ2UgdG8gLyo/Ki8gaGludCIKY2FzZSAzOnJldHVybiJDaGFuZ2UgdG8gLyohKi8gaGludCJ9fSwK
+TEw6ZnVuY3Rpb24gTEwoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1EOmZ1bmN0aW9uIE1EKGEpe3Ro
+aXMuYT1hfSwKSDc6ZnVuY3Rpb24gSDcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCllGKGEsYil7dmFy
+IHMscixxLHAsbyxuLG0sbApmb3Iocz1iLmxlbmd0aCxyPTE7cjxzOysrcil7aWYoYltyXT09bnVsbHx8
+YltyLTFdIT1udWxsKWNvbnRpbnVlCmZvcig7cz49MTtzPXEpe3E9cy0xCmlmKGJbcV0hPW51bGwpYnJl
+YWt9cD1uZXcgQS5NKCIiKQpvPSIiKyhhKyIoIikKcC5hPW8Kbj1BLnQ2KGIpCm09bi5DKCJuSDwxPiIp
+Cmw9bmV3IEEubkgoYiwwLHMsbSkKbC5IZChiLDAscyxuLmMpCm09bytuZXcgQS5sSihsLG0uQygicVUo
+YUwuRSkiKS5hKG5ldyBBLk5vKCkpLG0uQygibEo8YUwuRSxxVT4iKSkuaygwLCIsICIpCnAuYT1tCnAu
+YT1tKygiKTogcGFydCAiKyhyLTEpKyIgd2FzIG51bGwsIGJ1dCBwYXJ0ICIrcisiIHdhcyBub3QuIikK
+dGhyb3cgQS5iKEEueFkocC53KDApLG51bGwpKX19LApsSTpmdW5jdGlvbiBsSShhKXt0aGlzLmE9YX0s
+CnE3OmZ1bmN0aW9uIHE3KCl7fSwKTm86ZnVuY3Rpb24gTm8oKXt9LApmdjpmdW5jdGlvbiBmdigpe30s
+CmxvKGEsYil7dmFyIHMscixxLHAsbyxuPWIueFooYSkKYi5oSyhhKQppZihuIT1udWxsKWE9Qi54Qi55
+bihhLG4ubGVuZ3RoKQpzPXQucwpyPUEuUUkoW10scykKcT1BLlFJKFtdLHMpCnM9YS5sZW5ndGgKaWYo
+cyE9PTAmJmIucjQoQi54Qi5XKGEsMCkpKXtpZigwPj1zKXJldHVybiBBLk9IKGEsMCkKQi5ObS5pKHEs
+YVswXSkKcD0xfWVsc2V7Qi5ObS5pKHEsIiIpCnA9MH1mb3Iobz1wO288czsrK28paWYoYi5yNChCLnhC
+LlcoYSxvKSkpe0IuTm0uaShyLEIueEIuTmooYSxwLG8pKQpCLk5tLmkocSxhW29dKQpwPW8rMX1pZihw
+PHMpe0IuTm0uaShyLEIueEIueW4oYSxwKSkKQi5ObS5pKHEsIiIpfXJldHVybiBuZXcgQS5XRChiLG4s
+cixxKX0sCldEOmZ1bmN0aW9uIFdEKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPWMK
+Xy5lPWR9LApJNyhhKXtyZXR1cm4gbmV3IEEuZHYoYSl9LApkdjpmdW5jdGlvbiBkdihhKXt0aGlzLmE9
+YX0sClJoKCl7dmFyIHMscj1udWxsCmlmKEEudW8oKS5nRmkoKSE9PSJmaWxlIilyZXR1cm4gJC5FYigp
+CnM9QS51bygpCmlmKCFCLnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJuICQuRWIoKQppZihBLktMKHIs
+ImEvYiIscixyLHIscixyKS50NCgpPT09ImFcXGIiKXJldHVybiAkLktrKCkKcmV0dXJuICQuYkQoKX0s
+CnpMOmZ1bmN0aW9uIHpMKCl7fSwKT0Y6ZnVuY3Rpb24gT0YoYSxiLGMpe3RoaXMuZD1hCnRoaXMuZT1i
+CnRoaXMuZj1jfSwKcnU6ZnVuY3Rpb24gcnUoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9Ygpf
+LmY9YwpfLnI9ZH0sCklWOmZ1bmN0aW9uIElWKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIK
+Xy5mPWMKXy5yPWR9LApSOShhKXtyZXR1cm4gdC53LmIoYSl8fHQuQi5iKGEpfHx0LmR6LmIoYSl8fHQu
+eC5iKGEpfHx0LkEuYihhKXx8dC5nNC5iKGEpfHx0LmcyLmIoYSl9LApGUChhKXtyZXR1cm4gQS52KEEu
+aihhKSl9LAp5YihhLGIpe2lmKGE9PT0kKXRocm93IEEuYihuZXcgQS5jKCJGaWVsZCAnIitiKyInIGhh
+cyBub3QgYmVlbiBpbml0aWFsaXplZC4iKSkKcmV0dXJuIGF9LApteShhLGIpe2lmKGEhPT0kKXRocm93
+IEEuYihuZXcgQS5jKCJGaWVsZCAnIitiKyInIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIikp
+fSwKQ0woYSxiKXtpZihhIT09JCl0aHJvdyBBLmIoQS5qKGIpKX0sCmFiKCl7dmFyIHMscixxLHAsbz1u
+dWxsCnRyeXtvPUEudW8oKX1jYXRjaChzKXtpZih0Lmc4LmIoQS5SdShzKSkpe3I9JC5GZgppZihyIT1u
+dWxsKXJldHVybiByCnRocm93IHN9ZWxzZSB0aHJvdyBzfWlmKEouUk0obywkLkk2KSl7cj0kLkZmCnIu
+dG9TdHJpbmcKcmV0dXJuIHJ9JC5JNj1vCmlmKCQuSGsoKT09JC5FYigpKXI9JC5GZj1vLlpJKCIuIiku
+dygwKQplbHNle3E9by50NCgpCnA9cS5sZW5ndGgtMQpyPSQuRmY9cD09PTA/cTpCLnhCLk5qKHEsMCxw
+KX1yZXR1cm4gcn0sCk9TKGEpe3ZhciBzCmlmKCEoYT49NjUmJmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIK
+ZWxzZSBzPSEwCnJldHVybiBzfSwKWXUoYSxiKXt2YXIgcz1hLmxlbmd0aCxyPWIrMgppZihzPHIpcmV0
+dXJuITEKaWYoIUEuT1MoQi54Qi5PKGEsYikpKXJldHVybiExCmlmKEIueEIuTyhhLGIrMSkhPT01OCly
+ZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4gQi54Qi5PKGEscik9PT00N319LEo9ewpRdShh
+LGIsYyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpkfX0sCmtzKGEpe3ZhciBzLHIscSxwLG8sbj1hW3Yu
+ZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdCmlmKG49PW51bGwpaWYoJC5Cdj09bnVsbCl7QS5YRCgpCm49YVt2
+LmRpc3BhdGNoUHJvcGVydHlOYW1lXX1pZihuIT1udWxsKXtzPW4ucAppZighMT09PXMpcmV0dXJuIG4u
+aQppZighMD09PXMpcmV0dXJuIGEKcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkKaWYocz09PXIpcmV0
+dXJuIG4uaQppZihuLmU9PT1yKXRocm93IEEuYihBLlNZKCJSZXR1cm4gaW50ZXJjZXB0b3IgZm9yICIr
+QS5FaihzKGEsbikpKSl9cT1hLmNvbnN0cnVjdG9yCmlmKHE9PW51bGwpcD1udWxsCmVsc2V7bz0kLnpt
+CmlmKG89PW51bGwpbz0kLnptPXYuZ2V0SXNvbGF0ZVRhZygiXyRkYXJ0X2pzIikKcD1xW29dfWlmKHAh
+PW51bGwpcmV0dXJuIHAKcD1BLnczKGEpCmlmKHAhPW51bGwpcmV0dXJuIHAKaWYodHlwZW9mIGE9PSJm
+dW5jdGlvbiIpcmV0dXJuIEIuREcKcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkKaWYocz09bnVsbCly
+ZXR1cm4gQi5aUQppZihzPT09T2JqZWN0LnByb3RvdHlwZSlyZXR1cm4gQi5aUQppZih0eXBlb2YgcT09
+ImZ1bmN0aW9uIil7bz0kLnptCmlmKG89PW51bGwpbz0kLnptPXYuZ2V0SXNvbGF0ZVRhZygiXyRkYXJ0
+X2pzIikKT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsbyx7dmFsdWU6Qi52QixlbnVtZXJhYmxlOmZhbHNl
+LHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gQi52Qn1yZXR1cm4gQi52Qn0s
+ClFpKGEsYil7aWYoYTwwfHxhPjQyOTQ5NjcyOTUpdGhyb3cgQS5iKEEuVEUoYSwwLDQyOTQ5NjcyOTUs
+Imxlbmd0aCIsbnVsbCkpCnJldHVybiBKLnB5KG5ldyBBcnJheShhKSxiKX0sCktoKGEsYil7aWYoYTww
+KXRocm93IEEuYihBLnhZKCJMZW5ndGggbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAiK2Es
+bnVsbCkpCnJldHVybiBBLlFJKG5ldyBBcnJheShhKSxiLkMoImpkPDA+IikpfSwKcHkoYSxiKXtyZXR1
+cm4gSi5FcChBLlFJKGEsYi5DKCJqZDwwPiIpKSxiKX0sCkVwKGEsYil7YS5maXhlZCRsZW5ndGg9QXJy
+YXkKcmV0dXJuIGF9LAp6QyhhKXthLmZpeGVkJGxlbmd0aD1BcnJheQphLmltbXV0YWJsZSRsaXN0PUFy
+cmF5CnJldHVybiBhfSwKR2EoYSl7aWYoYTwyNTYpc3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDEwOmNhc2Ug
+MTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxMzM6Y2FzZSAxNjA6cmV0dXJuITAKZGVmYXVs
+dDpyZXR1cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYwOmNhc2UgODE5MjpjYXNlIDgxOTM6Y2FzZSA4MTk0
+OmNhc2UgODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3OmNhc2UgODE5ODpjYXNlIDgxOTk6Y2FzZSA4MjAw
+OmNhc2UgODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMyOmNhc2UgODIzMzpjYXNlIDgyMzk6Y2FzZSA4Mjg3
+OmNhc2UgMTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4hMApkZWZhdWx0OnJldHVybiExfX0sCm1tKGEsYil7
+dmFyIHMscgpmb3Iocz1hLmxlbmd0aDtiPHM7KXtyPUIueEIuVyhhLGIpCmlmKHIhPT0zMiYmciE9PTEz
+JiYhSi5HYShyKSlicmVhazsrK2J9cmV0dXJuIGJ9LApjMShhLGIpe3ZhciBzLHIKZm9yKDtiPjA7Yj1z
+KXtzPWItMQpyPUIueEIuTyhhLHMpCmlmKHIhPT0zMiYmciE9PTEzJiYhSi5HYShyKSlicmVha31yZXR1
+cm4gYn0sClU2KGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYo
+YT09bnVsbClyZXR1cm4gYQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5
+cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5j
+NS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEou
+a3MoYSl9LApZRShhKXtpZihhPT1udWxsKXJldHVybiBhCmlmKHR5cGVvZiBhIT0ib2JqZWN0Iil7aWYo
+dHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEouYzUucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5z
+dGFuY2VvZiBBLk1oKXJldHVybiBhCnJldHVybiBKLmtzKGEpfSwKaWEoYSl7aWYodHlwZW9mIGE9PSJu
+dW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJldHVybiBKLmJVLnByb3RvdHlwZQpyZXR1cm4gSi5r
+RC5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihh
+PT1udWxsKXJldHVybiBKLndlLnByb3RvdHlwZQppZih0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBK
+LnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUK
+aWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5w
+cm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3Mo
+YSl9LApyWShhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIEouRHIucHJvdG90eXBlCmlmKGE9
+PW51bGwpcmV0dXJuIGEKaWYoIShhIGluc3RhbmNlb2YgQS5NaCkpcmV0dXJuIEoua2QucHJvdG90eXBl
+CnJldHVybiBhfSwKdzEoYSl7aWYoYT09bnVsbClyZXR1cm4gYQppZihhLmNvbnN0cnVjdG9yPT1BcnJh
+eSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09
+ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEu
+TWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApBNShhLGIpe3JldHVybiBKLncxKGEpLmVSKGEsYil9
+LApFaChhLGIsYyl7cmV0dXJuIEouWUUoYSkubUsoYSxiLGMpfSwKRWwoYSxiKXtyZXR1cm4gSi53MShh
+KS5kcihhLGIpfSwKRjcoYSl7cmV0dXJuIEouVTYoYSkuZ29yKGEpfSwKRkwoYSxiKXtyZXR1cm4gSi5y
+WShhKS5kZChhLGIpfSwKR0EoYSxiKXtyZXR1cm4gSi53MShhKS5FKGEsYil9LApIbShhKXtyZXR1cm4g
+Si5VNihhKS5nQShhKX0sCklUKGEpe3JldHVybiBKLncxKGEpLmdtKGEpfSwKSnkoYSxiKXtyZXR1cm4g
+Si5pYShhKS5lNyhhLGIpfSwKTHQoYSl7cmV0dXJuIEouWUUoYSkud2coYSl9LApNMShhLGIsYyl7cmV0
+dXJuIEoudzEoYSkuRTIoYSxiLGMpfSwKTXUoYSxiKXtyZXR1cm4gSi5ZRShhKS5zUChhLGIpfSwKUk0o
+YSxiKXtpZihhPT1udWxsKXJldHVybiBiPT1udWxsCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4g
+YiE9bnVsbCYmYT09PWIKcmV0dXJuIEouaWEoYSkuRE4oYSxiKX0sClJYKGEpe3JldHVybiBKLncxKGEp
+LmJyKGEpfSwKVDAoYSl7cmV0dXJuIEouclkoYSkuYlMoYSl9LApVMyhhKXtyZXR1cm4gSi5pYShhKS5n
+aU8oYSl9LApZUyhhKXtyZXR1cm4gSi5pYShhKS53KGEpfSwKYTYoYSxiKXtyZXR1cm4gSi5yWShhKS5P
+KGEsYil9LApiVChhKXtyZXR1cm4gSi5ZRShhKS5ENChhKX0sCmNIKGEpe3JldHVybiBKLnJZKGEpLmhj
+KGEpfSwKZFIoYSl7cmV0dXJuIEouWUUoYSkuZ1AoYSl9LApkWihhLGIsYyxkKXtyZXR1cm4gSi5ZRShh
+KS5PbihhLGIsYyxkKX0sCmRoKGEpe3JldHVybiBKLllFKGEpLkZGKGEpfSwKZHIoYSxiKXtyZXR1cm4g
+Si5ZRShhKS5zYTQoYSxiKX0sCmlnKGEpe3JldHVybiBKLllFKGEpLmdRZyhhKX0sCmw1KGEsYil7cmV0
+dXJuIEouWUUoYSkuc2hmKGEsYil9LApxRihhKXtyZXR1cm4gSi5ZRShhKS5nVmwoYSl9LAp0SChhLGIs
+Yyl7cmV0dXJuIEouWUUoYSkucGsoYSxiLGMpfSwKdTkoYSxiLGMpe3JldHVybiBKLncxKGEpLlk1KGEs
+YixjKX0sCnVVKGEpe3JldHVybiBKLlU2KGEpLmdsMChhKX0sCndmKGEsYil7cmV0dXJuIEouWUUoYSku
+c1JOKGEsYil9LAp4OShhLGIpe2lmKHR5cGVvZiBiPT09Im51bWJlciIpaWYoYS5jb25zdHJ1Y3Rvcj09
+QXJyYXl8fHR5cGVvZiBhPT0ic3RyaW5nInx8QS53VihhLGFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV0p
+KWlmKGI+Pj4wPT09YiYmYjxhLmxlbmd0aClyZXR1cm4gYVtiXQpyZXR1cm4gSi5VNihhKS5xKGEsYil9
+LAp6bChhLGIpe3JldHVybiBKLlU2KGEpLnRnKGEsYil9LApHdjpmdW5jdGlvbiBHdigpe30sCnlFOmZ1
+bmN0aW9uIHlFKCl7fSwKd2U6ZnVuY3Rpb24gd2UoKXt9LApNRjpmdW5jdGlvbiBNRigpe30sCnUwOmZ1
+bmN0aW9uIHUwKCl7fSwKaUM6ZnVuY3Rpb24gaUMoKXt9LAprZDpmdW5jdGlvbiBrZCgpe30sCmM1OmZ1
+bmN0aW9uIGM1KCl7fSwKamQ6ZnVuY3Rpb24gamQoYSl7dGhpcy4kdGk9YX0sClBvOmZ1bmN0aW9uIFBv
+KGEpe3RoaXMuJHRpPWF9LAptMTpmdW5jdGlvbiBtMShhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9
+YgpfLmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKcUk6ZnVuY3Rpb24gcUkoKXt9LApiVTpmdW5jdGlvbiBi
+VSgpe30sCmtEOmZ1bmN0aW9uIGtEKCl7fSwKRHI6ZnVuY3Rpb24gRHIoKXt9fSxCPXt9CnZhciB3PVtB
+LEosQl0KaHVua0hlbHBlcnMuc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KHcpCnZhciAkPXt9CkEu
+RksucHJvdG90eXBlPXt9CkouR3YucHJvdG90eXBlPXsKRE4oYSxiKXtyZXR1cm4gYT09PWJ9LApnaU8o
+YSl7cmV0dXJuIEEuZVEoYSl9LAp3KGEpe3JldHVybiJJbnN0YW5jZSBvZiAnIitBLmxoKGEpKyInIn0s
+CmU3KGEsYil7dC5vLmEoYikKdGhyb3cgQS5iKEEubHIoYSxiLmdXYSgpLGIuZ25kKCksYi5nVm0oKSkp
+fX0KSi55RS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiBTdHJpbmcoYSl9LApnaU8oYSl7cmV0dXJuIGE/
+NTE5MDE4OjIxODE1OX0sCiRpYTI6MX0KSi53ZS5wcm90b3R5cGU9ewpETihhLGIpe3JldHVybiBudWxs
+PT1ifSwKdyhhKXtyZXR1cm4ibnVsbCJ9LApnaU8oYSl7cmV0dXJuIDB9LAokaWM4OjF9CkouTUYucHJv
+dG90eXBlPXt9CkoudTAucHJvdG90eXBlPXsKZ2lPKGEpe3JldHVybiAwfSwKdyhhKXtyZXR1cm4gU3Ry
+aW5nKGEpfSwKJGl2bToxfQpKLmlDLnByb3RvdHlwZT17fQpKLmtkLnByb3RvdHlwZT17fQpKLmM1LnBy
+b3RvdHlwZT17CncoYSl7dmFyIHM9YVskLncoKV0KaWYocz09bnVsbClyZXR1cm4gdGhpcy51KGEpCnJl
+dHVybiJKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciAiK0EuRWooSi5ZUyhzKSl9LAokaUVIOjF9CkouamQu
+cHJvdG90eXBlPXsKZHIoYSxiKXtyZXR1cm4gbmV3IEEualYoYSxBLnQ2KGEpLkMoIkA8MT4iKS5LcShi
+KS5DKCJqVjwxLDI+IikpfSwKaShhLGIpe0EudDYoYSkuYy5hKGIpCmlmKCEhYS5maXhlZCRsZW5ndGgp
+QS52KEEuTDQoImFkZCIpKQphLnB1c2goYil9LApXNChhLGIpe3ZhciBzCmlmKCEhYS5maXhlZCRsZW5n
+dGgpQS52KEEuTDQoInJlbW92ZUF0IikpCnM9YS5sZW5ndGgKaWYoYj49cyl0aHJvdyBBLmIoQS5PNyhi
+LG51bGwpKQpyZXR1cm4gYS5zcGxpY2UoYiwxKVswXX0sClVHKGEsYixjKXt2YXIgcyxyCkEudDYoYSku
+QygiY1g8MT4iKS5hKGMpCmlmKCEhYS5maXhlZCRsZW5ndGgpQS52KEEuTDQoImluc2VydEFsbCIpKQpB
+LndBKGIsMCxhLmxlbmd0aCwiaW5kZXgiKQppZighdC5VLmIoYykpYz1KLlJYKGMpCnM9Si5IbShjKQph
+Lmxlbmd0aD1hLmxlbmd0aCtzCnI9YitzCnRoaXMuWVcoYSxyLGEubGVuZ3RoLGEsYikKdGhpcy52Zyhh
+LGIscixjKX0sCkZWKGEsYil7dmFyIHMKQS50NihhKS5DKCJjWDwxPiIpLmEoYikKaWYoISFhLmZpeGVk
+JGxlbmd0aClBLnYoQS5MNCgiYWRkQWxsIikpCmlmKEFycmF5LmlzQXJyYXkoYikpe3RoaXMuS2goYSxi
+KQpyZXR1cm59Zm9yKHM9Si5JVChiKTtzLkYoKTspYS5wdXNoKHMuZ2woKSl9LApLaChhLGIpe3ZhciBz
+LHIKdC5iLmEoYikKcz1iLmxlbmd0aAppZihzPT09MClyZXR1cm4KaWYoYT09PWIpdGhyb3cgQS5iKEEu
+YTQoYSkpCmZvcihyPTA7cjxzOysrcilhLnB1c2goYltyXSl9LApFMihhLGIsYyl7dmFyIHM9QS50Nihh
+KQpyZXR1cm4gbmV3IEEubEooYSxzLktxKGMpLkMoIjEoMikiKS5hKGIpLHMuQygiQDwxPiIpLktxKGMp
+LkMoImxKPDEsMj4iKSl9LAprKGEsYil7dmFyIHMscj1BLk84KGEubGVuZ3RoLCIiLCExLHQuTikKZm9y
+KHM9MDtzPGEubGVuZ3RoOysrcyl0aGlzLlk1KHIscyxBLkVqKGFbc10pKQpyZXR1cm4gci5qb2luKGIp
+fSwKZVIoYSxiKXtyZXR1cm4gQS5xQyhhLGIsbnVsbCxBLnQ2KGEpLmMpfSwKTjAoYSxiLGMsZCl7dmFy
+IHMscixxCmQuYShiKQpBLnQ2KGEpLktxKGQpLkMoIjEoMSwyKSIpLmEoYykKcz1hLmxlbmd0aApmb3Io
+cj1iLHE9MDtxPHM7KytxKXtyPWMuJDIocixhW3FdKQppZihhLmxlbmd0aCE9PXMpdGhyb3cgQS5iKEEu
+YTQoYSkpfXJldHVybiByfSwKSHQoYSxiKXt2YXIgcyxyLHEscCxvLG49QS50NihhKQpuLkMoImEyKDEp
+IikuYShiKQpzPWEubGVuZ3RoCmZvcihyPW51bGwscT0hMSxwPTA7cDxzOysrcCl7bz1hW3BdCmlmKEEu
+b1QoYi4kMShvKSkpe2lmKHEpdGhyb3cgQS5iKEEuQW0oKSkKcj1vCnE9ITB9aWYocyE9PWEubGVuZ3Ro
+KXRocm93IEEuYihBLmE0KGEpKX1pZihxKXJldHVybiBuLmMuYShyKQp0aHJvdyBBLmIoQS5XcCgpKX0s
+CkUoYSxiKXtpZighKGI+PTAmJmI8YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0dXJuIGFbYl19
+LApndEgoYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJvdyBBLmIoQS5XcCgpKX0sCmdyWihh
+KXt2YXIgcz1hLmxlbmd0aAppZihzPjApcmV0dXJuIGFbcy0xXQp0aHJvdyBBLmIoQS5XcCgpKX0sCllX
+KGEsYixjLGQsZSl7dmFyIHMscixxLHAsbwpBLnQ2KGEpLkMoImNYPDE+IikuYShkKQppZighIWEuaW1t
+dXRhYmxlJGxpc3QpQS52KEEuTDQoInNldFJhbmdlIikpCkEuakIoYixjLGEubGVuZ3RoKQpzPWMtYgpp
+ZihzPT09MClyZXR1cm4KQS5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihkKSl7cj1kCnE9ZX1lbHNl
+e3I9Si5BNShkLGUpLnR0KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAuZ0EocikpdGhyb3cgQS5i
+KEEuYXIoKSkKaWYocTxiKWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5xKHIscStvKQplbHNlIGZv
+cihvPTA7bzxzOysrbylhW2Irb109cC5xKHIscStvKX0sCnZnKGEsYixjLGQpe3JldHVybiB0aGlzLllX
+KGEsYixjLGQsMCl9LApWcihhLGIpe3ZhciBzLHIKQS50NihhKS5DKCJhMigxKSIpLmEoYikKcz1hLmxl
+bmd0aApmb3Iocj0wO3I8czsrK3Ipe2lmKEEub1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5sZW5n
+dGghPT1zKXRocm93IEEuYihBLmE0KGEpKX1yZXR1cm4hMX0sCnRnKGEsYil7dmFyIHMKZm9yKHM9MDtz
+PGEubGVuZ3RoOysrcylpZihKLlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9LApnbDAoYSl7cmV0
+dXJuIGEubGVuZ3RoPT09MH0sCmdvcihhKXtyZXR1cm4gYS5sZW5ndGghPT0wfSwKdyhhKXtyZXR1cm4g
+QS54KGEsIlsiLCJdIil9LAp0dChhLGIpe3ZhciBzPUEuUUkoYS5zbGljZSgwKSxBLnQ2KGEpKQpyZXR1
+cm4gc30sCmJyKGEpe3JldHVybiB0aGlzLnR0KGEsITApfSwKZ20oYSl7cmV0dXJuIG5ldyBKLm0xKGEs
+YS5sZW5ndGgsQS50NihhKS5DKCJtMTwxPiIpKX0sCmdpTyhhKXtyZXR1cm4gQS5lUShhKX0sCmdBKGEp
+e3JldHVybiBhLmxlbmd0aH0sCnNBKGEsYil7aWYoISFhLmZpeGVkJGxlbmd0aClBLnYoQS5MNCgic2V0
+IGxlbmd0aCIpKQppZihiPDApdGhyb3cgQS5iKEEuVEUoYiwwLG51bGwsIm5ld0xlbmd0aCIsbnVsbCkp
+CmlmKGI+YS5sZW5ndGgpQS50NihhKS5jLmEobnVsbCkKYS5sZW5ndGg9Yn0sCnEoYSxiKXtBLklaKGIp
+CmlmKCEoYj49MCYmYjxhLmxlbmd0aCkpdGhyb3cgQS5iKEEudShhLGIpKQpyZXR1cm4gYVtiXX0sClk1
+KGEsYixjKXtBLnQ2KGEpLmMuYShjKQppZighIWEuaW1tdXRhYmxlJGxpc3QpQS52KEEuTDQoImluZGV4
+ZWQgc2V0IikpCmlmKCEoYj49MCYmYjxhLmxlbmd0aCkpdGhyb3cgQS5iKEEudShhLGIpKQphW2JdPWN9
+LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpKLlBvLnByb3RvdHlwZT17fQpKLm0xLnByb3RvdHlwZT17
+CmdsKCl7cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmQpfSwKRigpe3ZhciBzLHI9dGhpcyxxPXIuYSxw
+PXEubGVuZ3RoCmlmKHIuYiE9PXApdGhyb3cgQS5iKEEubGsocSkpCnM9ci5jCmlmKHM+PXApe3Iuc00o
+bnVsbCkKcmV0dXJuITF9ci5zTShxW3NdKTsrK3IuYwpyZXR1cm4hMH0sCnNNKGEpe3RoaXMuZD10aGlz
+LiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9CkoucUkucHJvdG90eXBlPXsKelEoYSl7aWYoYT4wKXtp
+ZihhIT09MS8wKXJldHVybiBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJldHVybiAwLU1hdGgu
+cm91bmQoMC1hKQp0aHJvdyBBLmIoQS5MNCgiIithKyIucm91bmQoKSIpKX0sCncoYSl7aWYoYT09PTAm
+JjEvYTwwKXJldHVybiItMC4wIgplbHNlIHJldHVybiIiK2F9LApnaU8oYSl7dmFyIHMscixxLHAsbz1h
+fDAKaWYoYT09PW8pcmV0dXJuIG8mNTM2ODcwOTExCnM9TWF0aC5hYnMoYSkKcj1NYXRoLmxvZyhzKS8w
+LjY5MzE0NzE4MDU1OTk0NTN8MApxPU1hdGgucG93KDIscikKcD1zPDE/cy9xOnEvcwpyZXR1cm4oKHAq
+OTAwNzE5OTI1NDc0MDk5MnwwKSsocCozNTQyMjQzMTgxMTc2NTIxfDApKSo1OTkxOTcrcioxMjU5JjUz
+Njg3MDkxMX0sCnpZKGEsYil7dmFyIHM9YSViCmlmKHM9PT0wKXJldHVybiAwCmlmKHM+MClyZXR1cm4g
+cwpyZXR1cm4gcytifSwKQlUoYSxiKXtyZXR1cm4oYXwwKT09PWE/YS9ifDA6dGhpcy5ESihhLGIpfSwK
+REooYSxiKXt2YXIgcz1hL2IKaWYocz49LTIxNDc0ODM2NDgmJnM8PTIxNDc0ODM2NDcpcmV0dXJuIHN8
+MAppZihzPjApe2lmKHMhPT0xLzApcmV0dXJuIE1hdGguZmxvb3Iocyl9ZWxzZSBpZihzPi0xLzApcmV0
+dXJuIE1hdGguY2VpbChzKQp0aHJvdyBBLmIoQS5MNCgiUmVzdWx0IG9mIHRydW5jYXRpbmcgZGl2aXNp
+b24gaXMgIitBLkVqKHMpKyI6ICIrQS5FaihhKSsiIH4vICIrYikpfSwKd0coYSxiKXt2YXIgcwppZihh
+PjApcz10aGlzLnAzKGEsYikKZWxzZXtzPWI+MzE/MzE6YgpzPWE+PnM+Pj4wfXJldHVybiBzfSwKYmYo
+YSxiKXtpZigwPmIpdGhyb3cgQS5iKEEudEwoYikpCnJldHVybiB0aGlzLnAzKGEsYil9LApwMyhhLGIp
+e3JldHVybiBiPjMxPzA6YT4+PmJ9LAokaUNQOjEsCiRpWlo6MX0KSi5iVS5wcm90b3R5cGU9eyRpSWo6
+MX0KSi5rRC5wcm90b3R5cGU9e30KSi5Eci5wcm90b3R5cGU9ewpPKGEsYil7aWYoYjwwKXRocm93IEEu
+YihBLnUoYSxiKSkKaWYoYj49YS5sZW5ndGgpQS52KEEudShhLGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0
+KGIpfSwKVyhhLGIpe2lmKGI+PWEubGVuZ3RoKXRocm93IEEuYihBLnUoYSxiKSkKcmV0dXJuIGEuY2hh
+ckNvZGVBdChiKX0sCmRkKGEsYil7cmV0dXJuIG5ldyBBLnVuKGIsYSwwKX0sCmgoYSxiKXtyZXR1cm4g
+YStifSwKVGMoYSxiKXt2YXIgcz1iLmxlbmd0aCxyPWEubGVuZ3RoCmlmKHM+cilyZXR1cm4hMQpyZXR1
+cm4gYj09PXRoaXMueW4oYSxyLXMpfSwKaTcoYSxiLGMsZCl7dmFyIHM9QS5qQihiLGMsYS5sZW5ndGgp
+LHI9YS5zdWJzdHJpbmcoMCxiKSxxPWEuc3Vic3RyaW5nKHMpCnJldHVybiByK2QrcX0sClFpKGEsYixj
+KXt2YXIgcwppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3RoLG51bGws
+bnVsbCkpCnM9YytiLmxlbmd0aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09YS5zdWJz
+dHJpbmcoYyxzKX0sCm4oYSxiKXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApOaihhLGIsYyl7cmV0dXJu
+IGEuc3Vic3RyaW5nKGIsQS5qQihiLGMsYS5sZW5ndGgpKX0sCnluKGEsYil7cmV0dXJuIHRoaXMuTmoo
+YSxiLG51bGwpfSwKaGMoYSl7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0sCmJTKGEpe3ZhciBzLHIscSxw
+PWEudHJpbSgpLG89cC5sZW5ndGgKaWYobz09PTApcmV0dXJuIHAKaWYodGhpcy5XKHAsMCk9PT0xMzMp
+e3M9Si5tbShwLDEpCmlmKHM9PT1vKXJldHVybiIifWVsc2Ugcz0wCnI9by0xCnE9dGhpcy5PKHAscik9
+PT0xMzM/Si5jMShwLHIpOm8KaWYocz09PTAmJnE9PT1vKXJldHVybiBwCnJldHVybiBwLnN1YnN0cmlu
+ZyhzLHEpfSwKVChhLGIpe3ZhciBzLHIKaWYoMD49YilyZXR1cm4iIgppZihiPT09MXx8YS5sZW5ndGg9
+PT0wKXJldHVybiBhCmlmKGIhPT1iPj4+MCl0aHJvdyBBLmIoQi5FcSkKZm9yKHM9YSxyPSIiOyEwOyl7
+aWYoKGImMSk9PT0xKXI9cytyCmI9Yj4+PjEKaWYoYj09PTApYnJlYWsKcys9c31yZXR1cm4gcn0sClhV
+KGEsYixjKXt2YXIgcwppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3Ro
+LG51bGwsbnVsbCkpCnM9YS5pbmRleE9mKGIsYykKcmV0dXJuIHN9LApPWShhLGIpe3JldHVybiB0aGlz
+LlhVKGEsYiwwKX0sClBrKGEsYixjKXt2YXIgcyxyCmlmKGM9PW51bGwpYz1hLmxlbmd0aAplbHNlIGlm
+KGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBBLmIoQS5URShjLDAsYS5sZW5ndGgsbnVsbCxudWxsKSkKcz1i
+Lmxlbmd0aApyPWEubGVuZ3RoCmlmKGMrcz5yKWM9ci1zCnJldHVybiBhLmxhc3RJbmRleE9mKGIsYyl9
+LApjbihhLGIpe3JldHVybiB0aGlzLlBrKGEsYixudWxsKX0sCklzKGEsYixjKXt2YXIgcz1hLmxlbmd0
+aAppZihjPnMpdGhyb3cgQS5iKEEuVEUoYywwLHMsbnVsbCxudWxsKSkKcmV0dXJuIEEuU1EoYSxiLGMp
+fSwKdGcoYSxiKXtyZXR1cm4gdGhpcy5JcyhhLGIsMCl9LAp3KGEpe3JldHVybiBhfSwKZ2lPKGEpe3Zh
+ciBzLHIscQpmb3Iocz1hLmxlbmd0aCxyPTAscT0wO3E8czsrK3Epe3I9cithLmNoYXJDb2RlQXQocSkm
+NTM2ODcwOTExCnI9cisoKHImNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpyXj1yPj42fXI9cisoKHImNjcx
+MDg4NjMpPDwzKSY1MzY4NzA5MTEKcl49cj4+MTEKcmV0dXJuIHIrKChyJjE2MzgzKTw8MTUpJjUzNjg3
+MDkxMX0sCmdBKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtBLklaKGIpCmlmKGI+PWEubGVuZ3Ro
+KXRocm93IEEuYihBLnUoYSxiKSkKcmV0dXJuIGFbYl19LAokaXZYOjEsCiRpcVU6MX0KQS5CUi5wcm90
+b3R5cGU9ewpnbShhKXt2YXIgcz1BLkxoKHRoaXMpCnJldHVybiBuZXcgQS5lVChKLklUKHRoaXMuZ09O
+KCkpLHMuQygiQDwxPiIpLktxKHMuUVsxXSkuQygiZVQ8MSwyPiIpKX0sCmdBKGEpe3JldHVybiBKLkht
+KHRoaXMuZ09OKCkpfSwKZ2wwKGEpe3JldHVybiBKLnVVKHRoaXMuZ09OKCkpfSwKZ29yKGEpe3JldHVy
+biBKLkY3KHRoaXMuZ09OKCkpfSwKZVIoYSxiKXt2YXIgcz1BLkxoKHRoaXMpCnJldHVybiBBLkdKKEou
+QTUodGhpcy5nT04oKSxiKSxzLmMscy5RWzFdKX0sCkUoYSxiKXtyZXR1cm4gQS5MaCh0aGlzKS5RWzFd
+LmEoSi5HQSh0aGlzLmdPTigpLGIpKX0sCncoYSl7cmV0dXJuIEouWVModGhpcy5nT04oKSl9fQpBLmVU
+LnByb3RvdHlwZT17CkYoKXtyZXR1cm4gdGhpcy5hLkYoKX0sCmdsKCl7cmV0dXJuIHRoaXMuJHRpLlFb
+MV0uYSh0aGlzLmEuZ2woKSl9LAokaUFuOjF9CkEuWnkucHJvdG90eXBlPXsKZ09OKCl7cmV0dXJuIHRo
+aXMuYX19CkEub2wucHJvdG90eXBlPXskaWJROjF9CkEuVXEucHJvdG90eXBlPXsKcShhLGIpe3JldHVy
+biB0aGlzLiR0aS5RWzFdLmEoSi54OSh0aGlzLmEsQS5JWihiKSkpfSwKWTUoYSxiLGMpe3ZhciBzPXRo
+aXMuJHRpCkoudTkodGhpcy5hLGIscy5jLmEocy5RWzFdLmEoYykpKX0sCiRpYlE6MSwKJGl6TToxfQpB
+LmpWLnByb3RvdHlwZT17CmRyKGEsYil7cmV0dXJuIG5ldyBBLmpWKHRoaXMuYSx0aGlzLiR0aS5DKCJA
+PDE+IikuS3EoYikuQygialY8MSwyPiIpKX0sCmdPTigpe3JldHVybiB0aGlzLmF9fQpBLmMucHJvdG90
+eXBlPXsKdyhhKXt2YXIgcz0iTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICIrdGhpcy5hCnJldHVybiBz
+fX0KQS5xai5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnEoYSxiKXtyZXR1
+cm4gQi54Qi5PKHRoaXMuYSxBLklaKGIpKX19CkEuSGIucHJvdG90eXBlPXt9CkEuYlEucHJvdG90eXBl
+PXt9CkEuYUwucHJvdG90eXBlPXsKZ20oYSl7dmFyIHM9dGhpcwpyZXR1cm4gbmV3IEEuYTcocyxzLmdB
+KHMpLEEuTGgocykuQygiYTc8YUwuRT4iKSl9LApnbDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0w
+fSwKayhhLGIpe3ZhciBzLHIscSxwPXRoaXMsbz1wLmdBKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09
+PTApcmV0dXJuIiIKcz1BLkVqKHAuRSgwLDApKQppZihvIT09cC5nQShwKSl0aHJvdyBBLmIoQS5hNChw
+KSkKZm9yKHI9cyxxPTE7cTxvOysrcSl7cj1yK2IrQS5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ0EocCkp
+dGhyb3cgQS5iKEEuYTQocCkpfXJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9
+MCxyPSIiO3E8bzsrK3Epe3IrPUEuRWoocC5FKDAscSkpCmlmKG8hPT1wLmdBKHApKXRocm93IEEuYihB
+LmE0KHApKX1yZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn19LApldihhLGIpe3JldHVybiB0aGlz
+LkdHKDAsQS5MaCh0aGlzKS5DKCJhMihhTC5FKSIpLmEoYikpfSwKRTIoYSxiLGMpe3ZhciBzPUEuTGgo
+dGhpcykKcmV0dXJuIG5ldyBBLmxKKHRoaXMscy5LcShjKS5DKCIxKGFMLkUpIikuYShiKSxzLkMoIkA8
+YUwuRT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwKZVIoYSxiKXtyZXR1cm4gQS5xQyh0aGlzLGIsbnVs
+bCxBLkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dChhLGIpe3JldHVybiBBLlkxKHRoaXMsITAsQS5MaCh0
+aGlzKS5DKCJhTC5FIikpfSwKYnIoYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9fQpBLm5ILnByb3RvdHlw
+ZT17CkhkKGEsYixjLGQpe3ZhciBzLHI9dGhpcy5iCkEuazEociwic3RhcnQiKQpzPXRoaXMuYwppZihz
+IT1udWxsKXtBLmsxKHMsImVuZCIpCmlmKHI+cyl0aHJvdyBBLmIoQS5URShyLDAscywic3RhcnQiLG51
+bGwpKX19LApnVUQoKXt2YXIgcz1KLkhtKHRoaXMuYSkscj10aGlzLmMKaWYocj09bnVsbHx8cj5zKXJl
+dHVybiBzCnJldHVybiByfSwKZ0FzKCl7dmFyIHM9Si5IbSh0aGlzLmEpLHI9dGhpcy5iCmlmKHI+cyly
+ZXR1cm4gcwpyZXR1cm4gcn0sCmdBKGEpe3ZhciBzLHI9Si5IbSh0aGlzLmEpLHE9dGhpcy5iCmlmKHE+
+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVsbHx8cz49cilyZXR1cm4gci1xCmlmKHR5cGVvZiBz
+IT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1cm4gcy1xfSwKRShhLGIpe3ZhciBzPXRoaXMscj1z
+LmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRocm93IEEuYihBLkNmKGIscywiaW5kZXgiLG51bGws
+bnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX0sCmVSKGEsYil7dmFyIHMscixxPXRoaXMKQS5rMShiLCJj
+b3VudCIpCnM9cS5iK2IKcj1xLmMKaWYociE9bnVsbCYmcz49cilyZXR1cm4gbmV3IEEuTUIocS4kdGku
+QygiTUI8MT4iKSkKcmV0dXJuIEEucUMocS5hLHMscixxLiR0aS5jKX0sCnR0KGEsYil7dmFyIHMscixx
+LHA9dGhpcyxvPXAuYixuPXAuYSxtPUouVTYobiksbD1tLmdBKG4pLGs9cC5jCmlmKGshPW51bGwmJms8
+bClsPWsKcz1sLW8KaWYoczw9MCl7bj1KLlFpKDAscC4kdGkuYykKcmV0dXJuIG59cj1BLk84KHMsbS5F
+KG4sbyksITEscC4kdGkuYykKZm9yKHE9MTtxPHM7KytxKXtCLk5tLlk1KHIscSxtLkUobixvK3EpKQpp
+ZihtLmdBKG4pPGwpdGhyb3cgQS5iKEEuYTQocCkpfXJldHVybiByfX0KQS5hNy5wcm90b3R5cGU9ewpn
+bCgpe3JldHVybiB0aGlzLiR0aS5jLmEodGhpcy5kKX0sCkYoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1K
+LlU2KHEpLG89cC5nQShxKQppZihyLmIhPT1vKXRocm93IEEuYihBLmE0KHEpKQpzPXIuYwppZihzPj1v
+KXtyLnNJKG51bGwpCnJldHVybiExfXIuc0kocC5FKHEscykpOysrci5jCnJldHVybiEwfSwKc0koYSl7
+dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KQS5pMS5wcm90b3R5cGU9ewpnbShh
+KXt2YXIgcz1BLkxoKHRoaXMpCnJldHVybiBuZXcgQS5NSChKLklUKHRoaXMuYSksdGhpcy5iLHMuQygi
+QDwxPiIpLktxKHMuUVsxXSkuQygiTUg8MSwyPiIpKX0sCmdBKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9
+LApnbDAoYSl7cmV0dXJuIEoudVUodGhpcy5hKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0Eo
+dGhpcy5hLGIpKX19CkEueHkucHJvdG90eXBlPXskaWJROjF9CkEuTUgucHJvdG90eXBlPXsKRigpe3Zh
+ciBzPXRoaXMscj1zLmIKaWYoci5GKCkpe3Muc0kocy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0ko
+bnVsbCkKcmV0dXJuITF9LApnbCgpe3JldHVybiB0aGlzLiR0aS5RWzFdLmEodGhpcy5hKX0sCnNJKGEp
+e3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9fQpBLmxKLnByb3RvdHlwZT17CmdBKGEpe3JldHVy
+biBKLkhtKHRoaXMuYSl9LApFKGEsYil7cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpB
+LlU1LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgQS5TTyhKLklUKHRoaXMuYSksdGhpcy5iLHRo
+aXMuJHRpLkMoIlNPPDE+IikpfX0KQS5TTy5wcm90b3R5cGU9ewpGKCl7dmFyIHMscgpmb3Iocz10aGlz
+LmEscj10aGlzLmI7cy5GKCk7KWlmKEEub1Qoci4kMShzLmdsKCkpKSlyZXR1cm4hMApyZXR1cm4hMX0s
+CmdsKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KQS5BTS5wcm90b3R5cGU9ewplUihhLGIpe0EuTVIoYiwi
+Y291bnQiLHQuUykKQS5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgQS5BTSh0aGlzLmEsdGhpcy5iK2Is
+QS5MaCh0aGlzKS5DKCJBTTwxPiIpKX0sCmdtKGEpe3JldHVybiBuZXcgQS5VMShKLklUKHRoaXMuYSks
+dGhpcy5iLEEuTGgodGhpcykuQygiVTE8MT4iKSl9fQpBLmQ1LnByb3RvdHlwZT17CmdBKGEpe3ZhciBz
+PUouSG0odGhpcy5hKS10aGlzLmIKaWYocz49MClyZXR1cm4gcwpyZXR1cm4gMH0sCmVSKGEsYil7QS5N
+UihiLCJjb3VudCIsdC5TKQpBLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBBLmQ1KHRoaXMuYSx0aGlz
+LmIrYix0aGlzLiR0aSl9LAokaWJROjF9CkEuVTEucHJvdG90eXBlPXsKRigpe3ZhciBzLHIKZm9yKHM9
+dGhpcy5hLHI9MDtyPHRoaXMuYjsrK3Ipcy5GKCkKdGhpcy5iPTAKcmV0dXJuIHMuRigpfSwKZ2woKXty
+ZXR1cm4gdGhpcy5hLmdsKCl9fQpBLk1CLnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBCLkd3fSwKZ2ww
+KGEpe3JldHVybiEwfSwKZ0EoYSl7cmV0dXJuIDB9LApFKGEsYil7dGhyb3cgQS5iKEEuVEUoYiwwLDAs
+ImluZGV4IixudWxsKSl9LAplUihhLGIpe0EuazEoYiwiY291bnQiKQpyZXR1cm4gdGhpc319CkEuRnUu
+cHJvdG90eXBlPXsKRigpe3JldHVybiExfSwKZ2woKXt0aHJvdyBBLmIoQS5XcCgpKX0sCiRpQW46MX0K
+QS51Ni5wcm90b3R5cGU9ewpnbShhKXtyZXR1cm4gbmV3IEEuSkIoSi5JVCh0aGlzLmEpLHRoaXMuJHRp
+LkMoIkpCPDE+IikpfX0KQS5KQi5wcm90b3R5cGU9ewpGKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10
+aGlzLiR0aS5jO3MuRigpOylpZihyLmIocy5nbCgpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsKCl7cmV0
+dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmEuZ2woKSl9LAokaUFuOjF9CkEuU1UucHJvdG90eXBlPXt9CkEu
+UmUucHJvdG90eXBlPXsKWTUoYSxiLGMpe0EuTGgodGhpcykuQygiUmUuRSIpLmEoYykKdGhyb3cgQS5i
+KEEuTDQoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKSl9fQpBLncyLnByb3RvdHlw
+ZT17fQpBLnd2LnByb3RvdHlwZT17CmdpTyhhKXt2YXIgcz10aGlzLl9oYXNoQ29kZQppZihzIT1udWxs
+KXJldHVybiBzCnM9NjY0NTk3KkouVTModGhpcy5hKSY1MzY4NzA5MTEKdGhpcy5faGFzaENvZGU9cwpy
+ZXR1cm4gc30sCncoYSl7cmV0dXJuJ1N5bWJvbCgiJytBLkVqKHRoaXMuYSkrJyIpJ30sCkROKGEsYil7
+aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIEEud3YmJnRoaXMuYT09Yi5hfSwK
+JGlHRDoxfQpBLlFDLnByb3RvdHlwZT17fQpBLlBELnByb3RvdHlwZT17fQpBLldVLnByb3RvdHlwZT17
+CmdsMChhKXtyZXR1cm4gdGhpcy5nQSh0aGlzKT09PTB9LAp3KGEpe3JldHVybiBBLm5PKHRoaXMpfSwK
+WTUoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcy5jLmEoYikKcy5RWzFdLmEoYykKQS5kYygpfSwKZ1B1
+KGEpe3JldHVybiB0aGlzLnE0KDAsQS5MaCh0aGlzKS5DKCJOMzwxLDI+IikpfSwKcTQoYSxiKXt2YXIg
+cz10aGlzCnJldHVybiBBLmwwKGZ1bmN0aW9uKCl7dmFyIHI9YQp2YXIgcT0wLHA9MSxvLG4sbSxsLGsK
+cmV0dXJuIGZ1bmN0aW9uICRhc3luYyRnUHUoYyxkKXtpZihjPT09MSl7bz1kCnE9cH13aGlsZSh0cnVl
+KXN3aXRjaChxKXtjYXNlIDA6bj1zLmd2YygpLG49bi5nbShuKSxtPUEuTGgocyksbD1tLlFbMV0sbT1t
+LkMoIkA8MT4iKS5LcShsKS5DKCJOMzwxLDI+IikKY2FzZSAyOmlmKCFuLkYoKSl7cT0zCmJyZWFrfWs9
+bi5nbCgpCnE9NApyZXR1cm4gbmV3IEEuTjMoayxsLmEocy5xKDAsaykpLG0pCmNhc2UgNDpxPTIKYnJl
+YWsKY2FzZSAzOnJldHVybiBBLlRoKCkKY2FzZSAxOnJldHVybiBBLlltKG8pfX19LGIpfSwKJGlaMDox
+fQpBLkxQLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiB0aGlzLmF9LAp4NChhKXtpZih0eXBlb2YgYSE9
+InN0cmluZyIpcmV0dXJuITEKaWYoIl9fcHJvdG9fXyI9PT1hKXJldHVybiExCnJldHVybiB0aGlzLmIu
+aGFzT3duUHJvcGVydHkoYSl9LApxKGEsYil7aWYoIXRoaXMueDQoYikpcmV0dXJuIG51bGwKcmV0dXJu
+IHRoaXMuYltBLm4oYildfSwKSyhhLGIpe3ZhciBzLHIscSxwLG8sbj10aGlzLiR0aQpuLkMoIn4oMSwy
+KSIpLmEoYikKcz10aGlzLmMKZm9yKHI9cy5sZW5ndGgscT10aGlzLmIsbj1uLlFbMV0scD0wO3A8cjsr
+K3Ape289QS5uKHNbcF0pCmIuJDIobyxuLmEocVtvXSkpfX0sCmd2Yygpe3JldHVybiBuZXcgQS5YUih0
+aGlzLHRoaXMuJHRpLkMoIlhSPDE+IikpfX0KQS5YUi5wcm90b3R5cGU9ewpnbShhKXt2YXIgcz10aGlz
+LmEuYwpyZXR1cm4gbmV3IEoubTEocyxzLmxlbmd0aCxBLnQ2KHMpLkMoIm0xPDE+IikpfSwKZ0EoYSl7
+cmV0dXJuIHRoaXMuYS5jLmxlbmd0aH19CkEuTEkucHJvdG90eXBlPXsKZ1dhKCl7dmFyIHM9dGhpcy5h
+CnJldHVybiBzfSwKZ25kKCl7dmFyIHMscixxLHAsbz10aGlzCmlmKG8uYz09PTEpcmV0dXJuIEIuaFUK
+cz1vLmQKcj1zLmxlbmd0aC1vLmUubGVuZ3RoLW8uZgppZihyPT09MClyZXR1cm4gQi5oVQpxPVtdCmZv
+cihwPTA7cDxyOysrcCl7aWYoIShwPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLHApCnEucHVzaChzW3Bd
+KX1yZXR1cm4gSi56QyhxKX0sCmdWbSgpe3ZhciBzLHIscSxwLG8sbixtLGwsaz10aGlzCmlmKGsuYyE9
+PTApcmV0dXJuIEIuV08Kcz1rLmUKcj1zLmxlbmd0aApxPWsuZApwPXEubGVuZ3RoLXItay5mCmlmKHI9
+PT0wKXJldHVybiBCLldPCm89bmV3IEEuTjUodC5lbykKZm9yKG49MDtuPHI7KytuKXtpZighKG48cy5s
+ZW5ndGgpKXJldHVybiBBLk9IKHMsbikKbT1zW25dCmw9cCtuCmlmKCEobD49MCYmbDxxLmxlbmd0aCkp
+cmV0dXJuIEEuT0gocSxsKQpvLlk1KDAsbmV3IEEud3YobSkscVtsXSl9cmV0dXJuIG5ldyBBLlBEKG8s
+dC5nRil9LAokaXZROjF9CkEuQ2oucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcwpBLm4oYSkKcz10aGlz
+LmEKcy5iPXMuYisiJCIrYQpCLk5tLmkodGhpcy5iLGEpCkIuTm0uaSh0aGlzLmMsYik7KytzLmF9LAok
+UzoxMH0KQS5mOS5wcm90b3R5cGU9ewpxUyhhKXt2YXIgcyxyLHE9dGhpcyxwPW5ldyBSZWdFeHAocS5h
+KS5leGVjKGEpCmlmKHA9PW51bGwpcmV0dXJuIG51bGwKcz1PYmplY3QuY3JlYXRlKG51bGwpCnI9cS5i
+CmlmKHIhPT0tMSlzLmFyZ3VtZW50cz1wW3IrMV0Kcj1xLmMKaWYociE9PS0xKXMuYXJndW1lbnRzRXhw
+cj1wW3IrMV0Kcj1xLmQKaWYociE9PS0xKXMuZXhwcj1wW3IrMV0Kcj1xLmUKaWYociE9PS0xKXMubWV0
+aG9kPXBbcisxXQpyPXEuZgppZihyIT09LTEpcy5yZWNlaXZlcj1wW3IrMV0KcmV0dXJuIHN9fQpBLlcw
+LnByb3RvdHlwZT17CncoYSl7dmFyIHM9dGhpcy5iCmlmKHM9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhv
+ZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6
+ICciK3MrIicgb24gbnVsbCJ9fQpBLmF6LnByb3RvdHlwZT17CncoYSl7dmFyIHMscj10aGlzLHE9Ik5v
+U3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIixwPXIuYgppZihwPT1udWxsKXJldHVy
+biJOb1N1Y2hNZXRob2RFcnJvcjogIityLmEKcz1yLmMKaWYocz09bnVsbClyZXR1cm4gcStwKyInICgi
+K3IuYSsiKSIKcmV0dXJuIHErcCsiJyBvbiAnIitzKyInICgiK3IuYSsiKSJ9fQpBLnZWLnByb3RvdHlw
+ZT17CncoYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmxlbmd0aD09PTA/IkVycm9yIjoiRXJyb3I6ICIr
+c319CkEudGUucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iVGhyb3cgb2YgbnVsbCAoJyIrKHRoaXMuYT09
+PW51bGw/Im51bGwiOiJ1bmRlZmluZWQiKSsiJyBmcm9tIEphdmFTY3JpcHQpIn0sCiRpUno6MX0KQS5i
+cS5wcm90b3R5cGU9e30KQS5YTy5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHI9dGhpcy5iCmlmKHIhPW51
+bGwpcmV0dXJuIHIKcj10aGlzLmEKcz1yIT09bnVsbCYmdHlwZW9mIHI9PT0ib2JqZWN0Ij9yLnN0YWNr
+Om51bGwKcmV0dXJuIHRoaXMuYj1zPT1udWxsPyIiOnN9LAokaUd6OjF9CkEuVHAucHJvdG90eXBlPXsK
+dyhhKXt2YXIgcz10aGlzLmNvbnN0cnVjdG9yLHI9cz09bnVsbD9udWxsOnMubmFtZQpyZXR1cm4iQ2xv
+c3VyZSAnIitBLk5RKHI9PW51bGw/InVua25vd24iOnIpKyInIn0sCiRpRUg6MSwKZ0t1KCl7cmV0dXJu
+IHRoaXN9LAokQzoiJDEiLAokUjoxLAokRDpudWxsfQpBLkF5LnByb3RvdHlwZT17JEM6IiQwIiwkUjow
+fQpBLkUxLnByb3RvdHlwZT17JEM6IiQyIiwkUjoyfQpBLmxjLnByb3RvdHlwZT17fQpBLnp4LnByb3Rv
+dHlwZT17CncoYSl7dmFyIHM9dGhpcy4kc3RhdGljX25hbWUKaWYocz09bnVsbClyZXR1cm4iQ2xvc3Vy
+ZSBvZiB1bmtub3duIHN0YXRpYyBtZXRob2QiCnJldHVybiJDbG9zdXJlICciK0EuTlEocykrIicifX0K
+QS5yVC5wcm90b3R5cGU9ewpETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0
+dXJuITAKaWYoIShiIGluc3RhbmNlb2YgQS5yVCkpcmV0dXJuITEKcmV0dXJuIHRoaXMuJF90YXJnZXQ9
+PT1iLiRfdGFyZ2V0JiZ0aGlzLmE9PT1iLmF9LApnaU8oYSl7cmV0dXJuKEEuQ1UodGhpcy5hKV5BLmVR
+KHRoaXMuJF90YXJnZXQpKT4+PjB9LAp3KGEpe3JldHVybiJDbG9zdXJlICciK3RoaXMuJF9uYW1lKyIn
+IG9mICIrKCJJbnN0YW5jZSBvZiAnIitBLmxoKHQuSy5hKHRoaXMuYSkpKyInIil9fQpBLkVxLnByb3Rv
+dHlwZT17CncoYSl7cmV0dXJuIlJ1bnRpbWVFcnJvcjogIit0aGlzLmF9fQpBLmtZLnByb3RvdHlwZT17
+CncoYSl7cmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrQS5obCh0aGlzLmEpfX0KQS5rci5wcm90b3R5
+cGU9e30KQS5ONS5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gdGhpcy5hfSwKZ2wwKGEpe3JldHVybiB0
+aGlzLmE9PT0wfSwKZ29yKGEpe3JldHVybiF0aGlzLmdsMCh0aGlzKX0sCmd2Yygpe3JldHVybiBuZXcg
+QS5pNSh0aGlzLEEuTGgodGhpcykuQygiaTU8MT4iKSl9LAp4NChhKXt2YXIgcz10aGlzLmIKaWYocz09
+bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5YdShzLGEpfSwKcShhLGIpe3ZhciBzLHIscSxwLG89dGhp
+cyxuPW51bGwKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPW8uYgppZihzPT1udWxsKXJldHVybiBuCnI9
+by5qMihzLGIpCnE9cj09bnVsbD9uOnIuYgpyZXR1cm4gcX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVy
+IiYmKGImMHgzZmZmZmZmKT09PWIpe3A9by5jCmlmKHA9PW51bGwpcmV0dXJuIG4Kcj1vLmoyKHAsYikK
+cT1yPT1udWxsP246ci5iCnJldHVybiBxfWVsc2UgcmV0dXJuIG8uYWEoYil9LAphYShhKXt2YXIgcyxy
+LHE9dGhpcyxwPXEuZAppZihwPT1udWxsKXJldHVybiBudWxsCnM9cS5CdChwLHEueGkoYSkpCnI9cS5G
+aChzLGEpCmlmKHI8MClyZXR1cm4gbnVsbApyZXR1cm4gc1tyXS5ifSwKWTUoYSxiLGMpe3ZhciBzLHIs
+cT10aGlzLHA9QS5MaChxKQpwLmMuYShiKQpwLlFbMV0uYShjKQppZih0eXBlb2YgYj09InN0cmluZyIp
+e3M9cS5iCnEuRUgocz09bnVsbD9xLmI9cS56SygpOnMsYixjKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVt
+YmVyIiYmKGImMHgzZmZmZmZmKT09PWIpe3I9cS5jCnEuRUgocj09bnVsbD9xLmM9cS56SygpOnIsYixj
+KX1lbHNlIHEueHcoYixjKX0sCnh3KGEsYil7dmFyIHMscixxLHAsbz10aGlzLG49QS5MaChvKQpuLmMu
+YShhKQpuLlFbMV0uYShiKQpzPW8uZAppZihzPT1udWxsKXM9by5kPW8ueksoKQpyPW8ueGkoYSkKcT1v
+LkJ0KHMscikKaWYocT09bnVsbClvLkVJKHMscixbby5IbihhLGIpXSkKZWxzZXtwPW8uRmgocSxhKQpp
+ZihwPj0wKXFbcF0uYj1iCmVsc2UgcS5wdXNoKG8uSG4oYSxiKSl9fSwKSyhhLGIpe3ZhciBzLHIscT10
+aGlzCkEuTGgocSkuQygifigxLDIpIikuYShiKQpzPXEuZQpyPXEucgpmb3IoO3MhPW51bGw7KXtiLiQy
+KHMuYSxzLmIpCmlmKHIhPT1xLnIpdGhyb3cgQS5iKEEuYTQocSkpCnM9cy5jfX0sCkVIKGEsYixjKXt2
+YXIgcyxyPXRoaXMscT1BLkxoKHIpCnEuYy5hKGIpCnEuUVsxXS5hKGMpCnM9ci5qMihhLGIpCmlmKHM9
+PW51bGwpci5FSShhLGIsci5IbihiLGMpKQplbHNlIHMuYj1jfSwKa3MoKXt0aGlzLnI9dGhpcy5yKzEm
+NjcxMDg4NjN9LApIbihhLGIpe3ZhciBzPXRoaXMscj1BLkxoKHMpLHE9bmV3IEEudmgoci5jLmEoYSks
+ci5RWzFdLmEoYikpCmlmKHMuZT09bnVsbClzLmU9cy5mPXEKZWxzZXtyPXMuZgpyLnRvU3RyaW5nCnEu
+ZD1yCnMuZj1yLmM9cX0rK3MuYQpzLmtzKCkKcmV0dXJuIHF9LAp4aShhKXtyZXR1cm4gSi5VMyhhKSYw
+eDNmZmZmZmZ9LApGaChhLGIpe3ZhciBzLHIKaWYoYT09bnVsbClyZXR1cm4tMQpzPWEubGVuZ3RoCmZv
+cihyPTA7cjxzOysrcilpZihKLlJNKGFbcl0uYSxiKSlyZXR1cm4gcgpyZXR1cm4tMX0sCncoYSl7cmV0
+dXJuIEEubk8odGhpcyl9LApqMihhLGIpe3JldHVybiBhW2JdfSwKQnQoYSxiKXtyZXR1cm4gYVtiXX0s
+CkVJKGEsYixjKXthW2JdPWN9LApybihhLGIpe2RlbGV0ZSBhW2JdfSwKWHUoYSxiKXtyZXR1cm4gdGhp
+cy5qMihhLGIpIT1udWxsfSwKeksoKXt2YXIgcz0iPG5vbi1pZGVudGlmaWVyLWtleT4iLHI9T2JqZWN0
+LmNyZWF0ZShudWxsKQp0aGlzLkVJKHIscyxyKQp0aGlzLnJuKHIscykKcmV0dXJuIHJ9LAokaUZvOjF9
+CkEudmgucHJvdG90eXBlPXt9CkEuaTUucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIHRoaXMuYS5hfSwK
+Z2wwKGEpe3JldHVybiB0aGlzLmEuYT09PTB9LApnbShhKXt2YXIgcz10aGlzLmEscj1uZXcgQS5ONihz
+LHMucix0aGlzLiR0aS5DKCJONjwxPiIpKQpyLmM9cy5lCnJldHVybiByfSwKdGcoYSxiKXtyZXR1cm4g
+dGhpcy5hLng0KGIpfX0KQS5ONi5wcm90b3R5cGU9ewpnbCgpe3JldHVybiB0aGlzLmR9LApGKCl7dmFy
+IHMscj10aGlzLHE9ci5hCmlmKHIuYiE9PXEucil0aHJvdyBBLmIoQS5hNChxKSkKcz1yLmMKaWYocz09
+bnVsbCl7ci5zcVkobnVsbCkKcmV0dXJuITF9ZWxzZXtyLnNxWShzLmEpCnIuYz1zLmMKcmV0dXJuITB9
+fSwKc3FZKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9CkEuZEMucHJvdG90
+eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYShhKX0sCiRTOjN9CkEud04ucHJvdG90eXBlPXsKJDIoYSxi
+KXtyZXR1cm4gdGhpcy5hKGEsYil9LAokUzo1MX0KQS5WWC5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4g
+dGhpcy5hKEEubihhKSl9LAokUzoyMX0KQS5WUi5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJSZWdFeHAv
+Iit0aGlzLmErIi8iK3RoaXMuYi5mbGFnc30sCmdIYygpe3ZhciBzPXRoaXMscj1zLmMKaWYociE9bnVs
+bClyZXR1cm4gcgpyPXMuYgpyZXR1cm4gcy5jPUEudjQocy5hLHIubXVsdGlsaW5lLCFyLmlnbm9yZUNh
+c2Usci51bmljb2RlLHIuZG90QWxsLCEwKX0sCmRkKGEsYil7cmV0dXJuIG5ldyBBLktXKHRoaXMsYiww
+KX0sClVaKGEsYil7dmFyIHMscj10LksuYSh0aGlzLmdIYygpKQpyLmxhc3RJbmRleD1iCnM9ci5leGVj
+KGEpCmlmKHM9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIG5ldyBBLkVLKHMpfSwKJGl2WDoxLAokaXdM
+OjF9CkEuRUsucHJvdG90eXBlPXsKcShhLGIpe3ZhciBzCkEuSVooYikKcz10aGlzLmIKaWYoIShiPHMu
+bGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnJldHVybiBzW2JdfSwKJGlPZDoxLAokaWliOjF9CkEuS1cu
+cHJvdG90eXBlPXsKZ20oYSl7cmV0dXJuIG5ldyBBLlBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19CkEu
+UGIucHJvdG90eXBlPXsKZ2woKXtyZXR1cm4gdC5jei5hKHRoaXMuZCl9LApGKCl7dmFyIHMscixxLHAs
+byxuLG09dGhpcyxsPW0uYgppZihsPT1udWxsKXJldHVybiExCnM9bS5jCnI9bC5sZW5ndGgKaWYoczw9
+cil7cT1tLmEKcD1xLlVaKGwscykKaWYocCE9bnVsbCl7bS5kPXAKcz1wLmIKbz1zLmluZGV4Cm49bytz
+WzBdLmxlbmd0aAppZihvPT09bil7aWYocS5iLnVuaWNvZGUpe3M9bS5jCnE9cysxCmlmKHE8cil7cz1C
+LnhCLk8obCxzKQppZihzPj01NTI5NiYmczw9NTYzMTkpe3M9Qi54Qi5PKGwscSkKcz1zPj01NjMyMCYm
+czw9NTczNDN9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKbj0ocz9uKzE6bikrMX1tLmM9bgpy
+ZXR1cm4hMH19bS5iPW0uZD1udWxsCnJldHVybiExfSwKJGlBbjoxfQpBLnRRLnByb3RvdHlwZT17CnEo
+YSxiKXtBLklaKGIpCmlmKGIhPT0wKUEudihBLk83KGIsbnVsbCkpCnJldHVybiB0aGlzLmN9LAokaU9k
+OjF9CkEudW4ucHJvdG90eXBlPXsKZ20oYSl7cmV0dXJuIG5ldyBBLlNkKHRoaXMuYSx0aGlzLmIsdGhp
+cy5jKX19CkEuU2QucHJvdG90eXBlPXsKRigpe3ZhciBzLHIscT10aGlzLHA9cS5jLG89cS5iLG49by5s
+ZW5ndGgsbT1xLmEsbD1tLmxlbmd0aAppZihwK24+bCl7cS5kPW51bGwKcmV0dXJuITF9cz1tLmluZGV4
+T2YobyxwKQppZihzPDApe3EuYz1sKzEKcS5kPW51bGwKcmV0dXJuITF9cj1zK24KcS5kPW5ldyBBLnRR
+KHMsbykKcS5jPXI9PT1xLmM/cisxOnIKcmV0dXJuITB9LApnbCgpe3ZhciBzPXRoaXMuZApzLnRvU3Ry
+aW5nCnJldHVybiBzfSwKJGlBbjoxfQpBLkVULnByb3RvdHlwZT17JGlFVDoxLCRpQVM6MX0KQS5MWi5w
+cm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhqOjF9CkEuRGcucHJvdG90eXBlPXsK
+cShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwKWTUoYSxiLGMpe0Eu
+clYoYykKQS5vZChiLGEsYS5sZW5ndGgpCmFbYl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkEu
+UGcucHJvdG90eXBlPXsKWTUoYSxiLGMpe0EuSVooYykKQS5vZChiLGEsYS5sZW5ndGgpCmFbYl09Y30s
+CiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkEueGoucHJvdG90eXBlPXsKcShhLGIpe0EuSVooYikKQS5v
+ZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KQS5kRS5wcm90b3R5cGU9ewpxKGEsYil7QS5JWihi
+KQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpBLlpBLnByb3RvdHlwZT17CnEoYSxiKXtB
+LklaKGIpCkEub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkEuZFQucHJvdG90eXBlPXsKcShh
+LGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KQS5QcS5wcm90b3R5cGU9
+ewpxKGEsYil7QS5JWihiKQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpBLmVFLnByb3Rv
+dHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVu
+Z3RoKQpyZXR1cm4gYVtiXX19CkEuVjYucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwK
+cShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwKJGluNjoxfQpBLlJH
+LnByb3RvdHlwZT17fQpBLlZQLnByb3RvdHlwZT17fQpBLldCLnByb3RvdHlwZT17fQpBLlpHLnByb3Rv
+dHlwZT17fQpBLkpjLnByb3RvdHlwZT17CkMoYSl7cmV0dXJuIEEuY0Uodi50eXBlVW5pdmVyc2UsdGhp
+cyxhKX0sCktxKGEpe3JldHVybiBBLnY1KHYudHlwZVVuaXZlcnNlLHRoaXMsYSl9fQpBLkcucHJvdG90
+eXBlPXt9CkEubFkucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4gQS5kbSh0aGlzLmEsbnVsbCl9fQpBLmtT
+LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIHRoaXMuYX19CkEuaU0ucHJvdG90eXBlPXskaUV6OjF9CkEu
+dGgucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9dGhpcy5hLHI9cy5hCnMuYT1udWxsCnIuJDAoKX0sCiRT
+OjEzfQpBLmhhLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIKdGhpcy5hLmE9dC5NLmEoYSkKcz10aGlz
+LmIKcj10aGlzLmMKcy5maXJzdENoaWxkP3MucmVtb3ZlQ2hpbGQocik6cy5hcHBlbmRDaGlsZChyKX0s
+CiRTOjQxfQpBLlZzLnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLiQwKCl9LAokUzoxNH0KQS5GdC5wcm90
+b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6MTR9CkEuVzMucHJvdG90eXBlPXsKQ1koYSxiKXtp
+ZihzZWxmLnNldFRpbWVvdXQhPW51bGwpc2VsZi5zZXRUaW1lb3V0KEEudFIobmV3IEEueUgodGhpcyxi
+KSwwKSxhKQplbHNlIHRocm93IEEuYihBLkw0KCJgc2V0VGltZW91dCgpYCBub3QgZm91bmQuIikpfX0K
+QS55SC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYi4kMCgpfSwKJFM6MH0KQS5paC5wcm90b3R5cGU9ewph
+TShhLGIpe3ZhciBzLHI9dGhpcyxxPXIuJHRpCnEuQygiMS8/IikuYShiKQppZihiPT1udWxsKWI9cS5j
+LmEoYikKaWYoIXIuYilyLmEuWGYoYikKZWxzZXtzPXIuYQppZihxLkMoImI4PDE+IikuYihiKSlzLmNV
+KGIpCmVsc2Ugcy5YMihxLmMuYShiKSl9fSwKdzAoYSxiKXt2YXIgcz10aGlzLmEKaWYodGhpcy5iKXMu
+WkwoYSxiKQplbHNlIHMuTmsoYSxiKX19CkEuV00ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMu
+YS4kMigwLGEpfSwKJFM6NTB9CkEuU1gucHJvdG90eXBlPXsKJDIoYSxiKXt0aGlzLmEuJDIoMSxuZXcg
+QS5icShhLHQubC5hKGIpKSl9LAokUzo1M30KQS5Hcy5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYShB
+LklaKGEpLGIpfSwKJFM6NDd9CkEuRnkucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iSXRlcmF0aW9uTWFy
+a2VyKCIrdGhpcy5iKyIsICIrQS5Faih0aGlzLmEpKyIpIn19CkEuR1YucHJvdG90eXBlPXsKZ2woKXt2
+YXIgcz10aGlzLmMKaWYocz09bnVsbClyZXR1cm4gdGhpcy4kdGkuYy5hKHRoaXMuYikKcmV0dXJuIHMu
+Z2woKX0sCkYoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzCmZvcihzPW0uJHRpLkMoIkFuPDE+Iik7ITA7
+KXtyPW0uYwppZihyIT1udWxsKWlmKHIuRigpKXJldHVybiEwCmVsc2UgbS5zWDkobnVsbCkKcT1mdW5j
+dGlvbihhLGIsYyl7dmFyIGwsaz1iCndoaWxlKHRydWUpdHJ5e3JldHVybiBhKGssbCl9Y2F0Y2goail7
+bD1qCms9Y319KG0uYSwwLDEpCmlmKHEgaW5zdGFuY2VvZiBBLkZ5KXtwPXEuYgppZihwPT09Mil7bz1t
+LmQKaWYobz09bnVsbHx8by5sZW5ndGg9PT0wKXttLnNFQyhudWxsKQpyZXR1cm4hMX1pZigwPj1vLmxl
+bmd0aClyZXR1cm4gQS5PSChvLC0xKQptLmE9by5wb3AoKQpjb250aW51ZX1lbHNle3I9cS5hCmlmKHA9
+PT0zKXRocm93IHIKZWxzZXtuPXMuYShKLklUKHIpKQppZihuIGluc3RhbmNlb2YgQS5HVil7cj1tLmQK
+aWYocj09bnVsbClyPW0uZD1bXQpCLk5tLmkocixtLmEpCm0uYT1uLmEKY29udGludWV9ZWxzZXttLnNY
+OShuKQpjb250aW51ZX19fX1lbHNle20uc0VDKHEpCnJldHVybiEwfX1yZXR1cm4hMX0sCnNFQyhhKXt0
+aGlzLmI9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKc1g5KGEpe3RoaXMuYz10aGlzLiR0aS5DKCJBbjwx
+Pj8iKS5hKGEpfSwKJGlBbjoxfQpBLnE0LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgQS5HVih0
+aGlzLmEoKSx0aGlzLiR0aS5DKCJHVjwxPiIpKX19CkEuQ3cucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4g
+QS5Faih0aGlzLmEpfSwKJGlYUzoxLApnSUkoKXtyZXR1cm4gdGhpcy5ifX0KQS5QZi5wcm90b3R5cGU9
+ewp3MChhLGIpe3ZhciBzCkEuY2IoYSwiZXJyb3IiLHQuSykKcz10aGlzLmEKaWYoKHMuYSYzMCkhPT0w
+KXRocm93IEEuYihBLlBWKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKSkKaWYoYj09bnVsbCliPUEu
+djAoYSkKcy5OayhhLGIpfSwKcG0oYSl7cmV0dXJuIHRoaXMudzAoYSxudWxsKX19CkEuWmYucHJvdG90
+eXBlPXsKYU0oYSxiKXt2YXIgcyxyPXRoaXMuJHRpCnIuQygiMS8/IikuYShiKQpzPXRoaXMuYQppZigo
+cy5hJjMwKSE9PTApdGhyb3cgQS5iKEEuUFYoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQpzLlhm
+KHIuQygiMS8iKS5hKGIpKX19CkEuRmUucHJvdG90eXBlPXsKSFIoYSl7aWYoKHRoaXMuYyYxNSkhPT02
+KXJldHVybiEwCnJldHVybiB0aGlzLmIuYi5idih0LmFsLmEodGhpcy5kKSxhLmEsdC55LHQuSyl9LApL
+dyhhKXt2YXIgcyxyPXRoaXMscT1yLmUscD1udWxsLG89dC56LG49dC5LLG09YS5hLGw9ci5iLmIKaWYo
+dC5tLmIocSkpcD1sLnJwKHEsbSxhLmIsbyxuLHQubCkKZWxzZSBwPWwuYnYodC52LmEocSksbSxvLG4p
+CnRyeXtvPXIuJHRpLkMoIjIvIikuYShwKQpyZXR1cm4gb31jYXRjaChzKXtpZih0LmVLLmIoQS5SdShz
+KSkpe2lmKChyLmMmMSkhPT0wKXRocm93IEEuYihBLnhZKCJUaGUgZXJyb3IgaGFuZGxlciBvZiBGdXR1
+cmUudGhlbiBtdXN0IHJldHVybiBhIHZhbHVlIG9mIHRoZSByZXR1cm5lZCBmdXR1cmUncyB0eXBlIiwi
+b25FcnJvciIpKQp0aHJvdyBBLmIoQS54WSgiVGhlIGVycm9yIGhhbmRsZXIgb2YgRnV0dXJlLmNhdGNo
+RXJyb3IgbXVzdCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZnV0dXJlJ3MgdHlwZSIsIm9uRXJyb3IiKSl9
+ZWxzZSB0aHJvdyBzfX19CkEudnMucHJvdG90eXBlPXsKU3EoYSxiLGMpe3ZhciBzLHIscSxwPXRoaXMu
+JHRpCnAuS3EoYykuQygiMS8oMikiKS5hKGEpCnM9JC5YMwppZihzPT09Qi5OVSl7aWYoYiE9bnVsbCYm
+IXQubS5iKGIpJiYhdC52LmIoYikpdGhyb3cgQS5iKEEuTDMoYiwib25FcnJvciIsdS5jKSl9ZWxzZXtj
+LkMoIkA8MC8+IikuS3EocC5jKS5DKCIxKDIpIikuYShhKQppZihiIT1udWxsKWI9QS5WSChiLHMpfXI9
+bmV3IEEudnMocyxjLkMoInZzPDA+IikpCnE9Yj09bnVsbD8xOjMKdGhpcy54ZihuZXcgQS5GZShyLHEs
+YSxiLHAuQygiQDwxPiIpLktxKGMpLkMoIkZlPDEsMj4iKSkpCnJldHVybiByfSwKVzcoYSxiKXtyZXR1
+cm4gdGhpcy5TcShhLG51bGwsYil9LApRZChhLGIsYyl7dmFyIHMscj10aGlzLiR0aQpyLktxKGMpLkMo
+IjEvKDIpIikuYShhKQpzPW5ldyBBLnZzKCQuWDMsYy5DKCJ2czwwPiIpKQp0aGlzLnhmKG5ldyBBLkZl
+KHMsMTksYSxiLHIuQygiQDwxPiIpLktxKGMpLkMoIkZlPDEsMj4iKSkpCnJldHVybiBzfSwKUDkoYSl7
+dGhpcy5hPXRoaXMuYSYxfDE2CnRoaXMuYz1hfSwKdWcoYSl7dGhpcy5hPWEuYSYzMHx0aGlzLmEmMQp0
+aGlzLmM9YS5jfSwKeGYoYSl7dmFyIHMscj10aGlzLHE9ci5hCmlmKHE8PTMpe2EuYT10LmUuYShyLmMp
+CnIuYz1hfWVsc2V7aWYoKHEmNCkhPT0wKXtzPXQuYy5hKHIuYykKaWYoKHMuYSYyNCk9PT0wKXtzLnhm
+KGEpCnJldHVybn1yLnVnKHMpfUEuVGsobnVsbCxudWxsLHIuYix0Lk0uYShuZXcgQS5kYShyLGEpKSl9
+fSwKalEoYSl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPXt9CmwuYT1hCmlmKGE9PW51bGwpcmV0dXJu
+CnM9bS5hCmlmKHM8PTMpe3I9dC5lLmEobS5jKQptLmM9YQppZihyIT1udWxsKXtxPWEuYQpmb3IocD1h
+O3EhPW51bGw7cD1xLHE9bylvPXEuYQpwLmE9cn19ZWxzZXtpZigocyY0KSE9PTApe249dC5jLmEobS5j
+KQppZigobi5hJjI0KT09PTApe24ualEoYSkKcmV0dXJufW0udWcobil9bC5hPW0uTjgoYSkKQS5Uayhu
+dWxsLG51bGwsbS5iLHQuTS5hKG5ldyBBLm9RKGwsbSkpKX19LAphaCgpe3ZhciBzPXQuZS5hKHRoaXMu
+YykKdGhpcy5jPW51bGwKcmV0dXJuIHRoaXMuTjgocyl9LApOOChhKXt2YXIgcyxyLHEKZm9yKHM9YSxy
+PW51bGw7cyE9bnVsbDtyPXMscz1xKXtxPXMuYQpzLmE9cn1yZXR1cm4gcn0sCmVjKGEpe3ZhciBzLHIs
+cSxwPXRoaXMKcC5hXj0yCnRyeXthLlNxKG5ldyBBLnBWKHApLG5ldyBBLlU3KHApLHQuUCl9Y2F0Y2go
+cSl7cz1BLlJ1KHEpCnI9QS50cyhxKQpBLnJiKG5ldyBBLnZyKHAscyxyKSl9fSwKWDIoYSl7dmFyIHMs
+cj10aGlzCnIuJHRpLmMuYShhKQpzPXIuYWgoKQpyLmE9OApyLmM9YQpBLkhaKHIscyl9LApaTChhLGIp
+e3ZhciBzCnQubC5hKGIpCnM9dGhpcy5haCgpCnRoaXMuUDkoQS5UbChhLGIpKQpBLkhaKHRoaXMscyl9
+LApYZihhKXt2YXIgcz10aGlzLiR0aQpzLkMoIjEvIikuYShhKQppZihzLkMoImI4PDE+IikuYihhKSl7
+dGhpcy5jVShhKQpyZXR1cm59dGhpcy53VShzLmMuYShhKSl9LAp3VShhKXt2YXIgcz10aGlzCnMuJHRp
+LmMuYShhKQpzLmFePTIKQS5UayhudWxsLG51bGwscy5iLHQuTS5hKG5ldyBBLnJ0KHMsYSkpKX0sCmNV
+KGEpe3ZhciBzPXRoaXMscj1zLiR0aQpyLkMoImI4PDE+IikuYShhKQppZihyLmIoYSkpe2lmKChhLmEm
+MTYpIT09MCl7cy5hXj0yCkEuVGsobnVsbCxudWxsLHMuYix0Lk0uYShuZXcgQS5LRihzLGEpKSl9ZWxz
+ZSBBLkE5KGEscykKcmV0dXJufXMuZWMoYSl9LApOayhhLGIpe3RoaXMuYV49MgpBLlRrKG51bGwsbnVs
+bCx0aGlzLmIsdC5NLmEobmV3IEEuWkwodGhpcyxhLGIpKSl9LAokaWI4OjF9CkEuZGEucHJvdG90eXBl
+PXsKJDAoKXtBLkhaKHRoaXMuYSx0aGlzLmIpfSwKJFM6MH0KQS5vUS5wcm90b3R5cGU9ewokMCgpe0Eu
+SFoodGhpcy5iLHRoaXMuYS5hKX0sCiRTOjB9CkEucFYucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixx
+LHA9dGhpcy5hCnAuYV49Mgp0cnl7cC5YMihwLiR0aS5jLmEoYSkpfWNhdGNoKHEpe3M9QS5SdShxKQpy
+PUEudHMocSkKcC5aTChzLHIpfX0sCiRTOjEzfQpBLlU3LnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5h
+LlpMKHQuSy5hKGEpLHQubC5hKGIpKX0sCiRTOjM0fQpBLnZyLnByb3RvdHlwZT17CiQwKCl7dGhpcy5h
+LlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KQS5ydC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS5YMih0
+aGlzLmIpfSwKJFM6MH0KQS5LRi5wcm90b3R5cGU9ewokMCgpe0EuQTkodGhpcy5iLHRoaXMuYSl9LAok
+UzowfQpBLlpMLnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0K
+QS5SVC5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1udWxsCnRyeXtxPW0u
+YS5hCmw9cS5iLmIuenoodC5mTy5hKHEuZCksdC56KX1jYXRjaChwKXtzPUEuUnUocCkKcj1BLnRzKHAp
+CnE9bS5jJiZ0Lm4uYShtLmIuYS5jKS5hPT09cwpvPW0uYQppZihxKW8uYz10Lm4uYShtLmIuYS5jKQpl
+bHNlIG8uYz1BLlRsKHMscikKby5iPSEwCnJldHVybn1pZihsIGluc3RhbmNlb2YgQS52cyYmKGwuYSYy
+NCkhPT0wKXtpZigobC5hJjE2KSE9PTApe3E9bS5hCnEuYz10Lm4uYShsLmMpCnEuYj0hMH1yZXR1cm59
+aWYodC5pLmIobCkpe249bS5iLmEKcT1tLmEKcS5jPWwuVzcobmV3IEEualoobiksdC56KQpxLmI9ITF9
+fSwKJFM6MH0KQS5qWi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hfSwKJFM6Mjl9CkEucnEu
+cHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyLHEscCxvLG4sbSxsCnRyeXtxPXRoaXMuYQpwPXEuYQpvPXAu
+JHRpCm49by5jCm09bi5hKHRoaXMuYikKcS5jPXAuYi5iLmJ2KG8uQygiMi8oMSkiKS5hKHAuZCksbSxv
+LkMoIjIvIiksbil9Y2F0Y2gobCl7cz1BLlJ1KGwpCnI9QS50cyhsKQpxPXRoaXMuYQpxLmM9QS5UbChz
+LHIpCnEuYj0hMH19LAokUzowfQpBLlJXLnByb3RvdHlwZT17CiQwKCl7dmFyIHMscixxLHAsbyxuLG09
+dGhpcwp0cnl7cz10Lm4uYShtLmEuYS5jKQpwPW0uYgppZihwLmEuSFIocykmJnAuYS5lIT1udWxsKXtw
+LmM9cC5hLkt3KHMpCnAuYj0hMX19Y2F0Y2gobyl7cj1BLlJ1KG8pCnE9QS50cyhvKQpwPXQubi5hKG0u
+YS5hLmMpCm49bS5iCmlmKHAuYT09PXIpbi5jPXAKZWxzZSBuLmM9QS5UbChyLHEpCm4uYj0hMH19LAok
+UzowfQpBLk9NLnByb3RvdHlwZT17fQpBLnFoLnByb3RvdHlwZT17CmdBKGEpe3ZhciBzLHIscT10aGlz
+LHA9e30sbz1uZXcgQS52cygkLlgzLHQuZkopCnAuYT0wCnM9QS5MaChxKQpyPXMuQygifigxKT8iKS5h
+KG5ldyBBLkI1KHAscSkpCnQuWi5hKG5ldyBBLnVPKHAsbykpCkEuSkUocS5hLHEuYixyLCExLHMuYykK
+cmV0dXJuIG99fQpBLkI1LnByb3RvdHlwZT17CiQxKGEpe0EuTGgodGhpcy5iKS5jLmEoYSk7Kyt0aGlz
+LmEuYX0sCiRTKCl7cmV0dXJuIEEuTGgodGhpcy5iKS5DKCJ+KDEpIil9fQpBLnVPLnByb3RvdHlwZT17
+CiQwKCl7dmFyIHM9dGhpcy5iLHI9cy4kdGkscT1yLkMoIjEvIikuYSh0aGlzLmEuYSkscD1zLmFoKCkK
+ci5jLmEocSkKcy5hPTgKcy5jPXEKQS5IWihzLHApfSwKJFM6MH0KQS5NTy5wcm90b3R5cGU9e30KQS5r
+VC5wcm90b3R5cGU9e30KQS54SS5wcm90b3R5cGU9e30KQS5tMC5wcm90b3R5cGU9eyRpUW06MX0KQS5F
+di5wcm90b3R5cGU9ewokMCgpe3ZhciBzPXRoaXMuYSxyPXRoaXMuYgpBLmNiKHMsImVycm9yIix0Lksp
+CkEuY2Iociwic3RhY2tUcmFjZSIsdC5sKQpBLk8xKHMscil9LAokUzowfQpBLkppLnByb3RvdHlwZT17
+CmJIKGEpe3ZhciBzLHIscQp0Lk0uYShhKQp0cnl7aWYoQi5OVT09PSQuWDMpe2EuJDAoKQpyZXR1cm59
+QS5UOChudWxsLG51bGwsdGhpcyxhLHQuSCl9Y2F0Y2gocSl7cz1BLlJ1KHEpCnI9QS50cyhxKQpBLlNp
+KHQuSy5hKHMpLHQubC5hKHIpKX19LApEbChhLGIsYyl7dmFyIHMscixxCmMuQygifigwKSIpLmEoYSkK
+Yy5hKGIpCnRyeXtpZihCLk5VPT09JC5YMyl7YS4kMShiKQpyZXR1cm59QS55dihudWxsLG51bGwsdGhp
+cyxhLGIsdC5ILGMpfWNhdGNoKHEpe3M9QS5SdShxKQpyPUEudHMocSkKQS5TaSh0LksuYShzKSx0Lmwu
+YShyKSl9fSwKR1koYSl7cmV0dXJuIG5ldyBBLlZwKHRoaXMsdC5NLmEoYSkpfSwKUHkoYSxiKXtyZXR1
+cm4gbmV3IEEuT1IodGhpcyxiLkMoIn4oMCkiKS5hKGEpLGIpfSwKcShhLGIpe3JldHVybiBudWxsfSwK
+enooYSxiKXtiLkMoIjAoKSIpLmEoYSkKaWYoJC5YMz09PUIuTlUpcmV0dXJuIGEuJDAoKQpyZXR1cm4g
+QS5UOChudWxsLG51bGwsdGhpcyxhLGIpfSwKYnYoYSxiLGMsZCl7Yy5DKCJAPDA+IikuS3EoZCkuQygi
+MSgyKSIpLmEoYSkKZC5hKGIpCmlmKCQuWDM9PT1CLk5VKXJldHVybiBhLiQxKGIpCnJldHVybiBBLnl2
+KG51bGwsbnVsbCx0aGlzLGEsYixjLGQpfSwKcnAoYSxiLGMsZCxlLGYpe2QuQygiQDwwPiIpLktxKGUp
+LktxKGYpLkMoIjEoMiwzKSIpLmEoYSkKZS5hKGIpCmYuYShjKQppZigkLlgzPT09Qi5OVSlyZXR1cm4g
+YS4kMihiLGMpCnJldHVybiBBLlF4KG51bGwsbnVsbCx0aGlzLGEsYixjLGQsZSxmKX0sCkxqKGEsYixj
+LGQpe3JldHVybiBiLkMoIkA8MD4iKS5LcShjKS5LcShkKS5DKCIxKDIsMykiKS5hKGEpfX0KQS5WcC5w
+cm90b3R5cGU9ewokMCgpe3JldHVybiB0aGlzLmEuYkgodGhpcy5iKX0sCiRTOjB9CkEuT1IucHJvdG90
+eXBlPXsKJDEoYSl7dmFyIHM9dGhpcy5jCnJldHVybiB0aGlzLmEuRGwodGhpcy5iLHMuYShhKSxzKX0s
+CiRTKCl7cmV0dXJuIHRoaXMuYy5DKCJ+KDApIil9fQpBLmI2LnByb3RvdHlwZT17CmdtKGEpe3ZhciBz
+PXRoaXMscj1uZXcgQS5sbShzLHMucixBLkxoKHMpLkMoImxtPDE+IikpCnIuYz1zLmUKcmV0dXJuIHJ9
+LApnQShhKXtyZXR1cm4gdGhpcy5hfSwKZ2wwKGEpe3JldHVybiB0aGlzLmE9PT0wfSwKZ29yKGEpe3Jl
+dHVybiB0aGlzLmEhPT0wfSwKdGcoYSxiKXt2YXIgcyxyCmlmKGIhPT0iX19wcm90b19fIil7cz10aGlz
+LmIKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gdC5nLmEoc1tiXSkhPW51bGx9ZWxzZXtyPXRoaXMu
+UFIoYikKcmV0dXJuIHJ9fSwKUFIoYSl7dmFyIHM9dGhpcy5kCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0
+dXJuIHRoaXMudChzW3RoaXMuWShhKV0sYSk+PTB9LAppKGEsYil7dmFyIHMscixxPXRoaXMKQS5MaChx
+KS5jLmEoYikKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpe3M9cS5iCnJldHVy
+biBxLkoocz09bnVsbD9xLmI9QS5UMigpOnMsYil9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihi
+JjEwNzM3NDE4MjMpPT09Yil7cj1xLmMKcmV0dXJuIHEuSihyPT1udWxsP3EuYz1BLlQyKCk6cixiKX1l
+bHNlIHJldHVybiBxLkI3KGIpfSwKQjcoYSl7dmFyIHMscixxLHA9dGhpcwpBLkxoKHApLmMuYShhKQpz
+PXAuZAppZihzPT1udWxsKXM9cC5kPUEuVDIoKQpyPXAuWShhKQpxPXNbcl0KaWYocT09bnVsbClzW3Jd
+PVtwLnlvKGEpXQplbHNle2lmKHAudChxLGEpPj0wKXJldHVybiExCnEucHVzaChwLnlvKGEpKX1yZXR1
+cm4hMH0sClIoYSxiKXt2YXIgcz10aGlzCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3Rv
+X18iKXJldHVybiBzLkgocy5iLGIpCmVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYxMDczNzQx
+ODIzKT09PWIpcmV0dXJuIHMuSChzLmMsYikKZWxzZSByZXR1cm4gcy5xZyhiKX0sCnFnKGEpe3ZhciBz
+LHIscSxwLG89dGhpcyxuPW8uZAppZihuPT1udWxsKXJldHVybiExCnM9by5ZKGEpCnI9bltzXQpxPW8u
+dChyLGEpCmlmKHE8MClyZXR1cm4hMQpwPXIuc3BsaWNlKHEsMSlbMF0KaWYoMD09PXIubGVuZ3RoKWRl
+bGV0ZSBuW3NdCm8uRyhwKQpyZXR1cm4hMH0sCkooYSxiKXtBLkxoKHRoaXMpLmMuYShiKQppZih0Lmcu
+YShhW2JdKSE9bnVsbClyZXR1cm4hMQphW2JdPXRoaXMueW8oYikKcmV0dXJuITB9LApIKGEsYil7dmFy
+IHMKaWYoYT09bnVsbClyZXR1cm4hMQpzPXQuZy5hKGFbYl0pCmlmKHM9PW51bGwpcmV0dXJuITEKdGhp
+cy5HKHMpCmRlbGV0ZSBhW2JdCnJldHVybiEwfSwKUygpe3RoaXMucj10aGlzLnIrMSYxMDczNzQxODIz
+fSwKeW8oYSl7dmFyIHMscj10aGlzLHE9bmV3IEEuYm4oQS5MaChyKS5jLmEoYSkpCmlmKHIuZT09bnVs
+bClyLmU9ci5mPXEKZWxzZXtzPXIuZgpzLnRvU3RyaW5nCnEuYz1zCnIuZj1zLmI9cX0rK3IuYQpyLlMo
+KQpyZXR1cm4gcX0sCkcoYSl7dmFyIHM9dGhpcyxyPWEuYyxxPWEuYgppZihyPT1udWxsKXMuZT1xCmVs
+c2Ugci5iPXEKaWYocT09bnVsbClzLmY9cgplbHNlIHEuYz1yOy0tcy5hCnMuUygpfSwKWShhKXtyZXR1
+cm4gSi5VMyhhKSYxMDczNzQxODIzfSwKdChhLGIpe3ZhciBzLHIKaWYoYT09bnVsbClyZXR1cm4tMQpz
+PWEubGVuZ3RoCmZvcihyPTA7cjxzOysrcilpZihKLlJNKGFbcl0uYSxiKSlyZXR1cm4gcgpyZXR1cm4t
+MX19CkEuYm4ucHJvdG90eXBlPXt9CkEubG0ucHJvdG90eXBlPXsKZ2woKXtyZXR1cm4gdGhpcy4kdGku
+Yy5hKHRoaXMuZCl9LApGKCl7dmFyIHM9dGhpcyxyPXMuYyxxPXMuYQppZihzLmIhPT1xLnIpdGhyb3cg
+QS5iKEEuYTQocSkpCmVsc2UgaWYocj09bnVsbCl7cy5zaihudWxsKQpyZXR1cm4hMX1lbHNle3Muc2oo
+cy4kdGkuQygiMT8iKS5hKHIuYSkpCnMuYz1yLmIKcmV0dXJuITB9fSwKc2ooYSl7dGhpcy5kPXRoaXMu
+JHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KQS5tVy5wcm90b3R5cGU9e30KQS51eS5wcm90b3R5cGU9
+eyRpYlE6MSwkaWNYOjEsJGl6TToxfQpBLmxELnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgQS5h
+NyhhLHRoaXMuZ0EoYSksQS56SyhhKS5DKCJhNzxsRC5FPiIpKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5x
+KGEsYil9LApLKGEsYil7dmFyIHMscgpBLnpLKGEpLkMoIn4obEQuRSkiKS5hKGIpCnM9dGhpcy5nQShh
+KQpmb3Iocj0wO3I8czsrK3Ipe2IuJDEodGhpcy5xKGEscikpCmlmKHMhPT10aGlzLmdBKGEpKXRocm93
+IEEuYihBLmE0KGEpKX19LApnbDAoYSl7cmV0dXJuIHRoaXMuZ0EoYSk9PT0wfSwKZ29yKGEpe3JldHVy
+biF0aGlzLmdsMChhKX0sCkUyKGEsYixjKXt2YXIgcz1BLnpLKGEpCnJldHVybiBuZXcgQS5sSihhLHMu
+S3EoYykuQygiMShsRC5FKSIpLmEoYikscy5DKCJAPGxELkU+IikuS3EoYykuQygibEo8MSwyPiIpKX0s
+CmVSKGEsYil7cmV0dXJuIEEucUMoYSxiLG51bGwsQS56SyhhKS5DKCJsRC5FIikpfSwKZHIoYSxiKXty
+ZXR1cm4gbmV3IEEualYoYSxBLnpLKGEpLkMoIkA8bEQuRT4iKS5LcShiKS5DKCJqVjwxLDI+IikpfSwK
+ZHUoYSxiLGMsZCl7dmFyIHMscj1BLnpLKGEpCmQ9ci5DKCJsRC5FIikuYShyLkMoImxELkU/IikuYShk
+KSkKQS5qQihiLGMsdGhpcy5nQShhKSkKZm9yKHM9YjtzPGM7KytzKXRoaXMuWTUoYSxzLGQpfSwKdyhh
+KXtyZXR1cm4gQS54KGEsIlsiLCJdIil9fQpBLmlsLnByb3RvdHlwZT17fQpBLnJhLnByb3RvdHlwZT17
+CiQyKGEsYil7dmFyIHMscj10aGlzLmEKaWYoIXIuYSl0aGlzLmIuYSs9IiwgIgpyLmE9ITEKcj10aGlz
+LmIKcz1yLmErPUEuRWooYSkKci5hPXMrIjogIgpyLmErPUEuRWooYil9LAokUzo4fQpBLllrLnByb3Rv
+dHlwZT17CksoYSxiKXt2YXIgcyxyLHE9QS5MaCh0aGlzKQpxLkMoIn4oWWsuSyxZay5WKSIpLmEoYikK
+Zm9yKHM9Si5JVCh0aGlzLmd2YygpKSxxPXEuQygiWWsuViIpO3MuRigpOyl7cj1zLmdsKCkKYi4kMihy
+LHEuYSh0aGlzLnEoMCxyKSkpfX0sCmdQdShhKXtyZXR1cm4gSi5NMSh0aGlzLmd2YygpLG5ldyBBLnlR
+KHRoaXMpLEEuTGgodGhpcykuQygiTjM8WWsuSyxZay5WPiIpKX0sCng0KGEpe3JldHVybiBKLnpsKHRo
+aXMuZ3ZjKCksYSl9LApnQShhKXtyZXR1cm4gSi5IbSh0aGlzLmd2YygpKX0sCmdsMChhKXtyZXR1cm4g
+Si51VSh0aGlzLmd2YygpKX0sCncoYSl7cmV0dXJuIEEubk8odGhpcyl9LAokaVowOjF9CkEueVEucHJv
+dG90eXBlPXsKJDEoYSl7dmFyIHMscj10aGlzLmEscT1BLkxoKHIpCnEuQygiWWsuSyIpLmEoYSkKcz1x
+LkMoIllrLlYiKQpyZXR1cm4gbmV3IEEuTjMoYSxzLmEoci5xKDAsYSkpLHEuQygiQDxZay5LPiIpLktx
+KHMpLkMoIk4zPDEsMj4iKSl9LAokUygpe3JldHVybiBBLkxoKHRoaXMuYSkuQygiTjM8WWsuSyxZay5W
+PihZay5LKSIpfX0KQS5LUC5wcm90b3R5cGU9ewpZNShhLGIsYyl7dmFyIHM9QS5MaCh0aGlzKQpzLmMu
+YShiKQpzLlFbMV0uYShjKQp0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUg
+bWFwIikpfX0KQS5Qbi5wcm90b3R5cGU9ewpxKGEsYil7cmV0dXJuIHRoaXMuYS5xKDAsYil9LApZNShh
+LGIsYyl7dmFyIHM9QS5MaCh0aGlzKQp0aGlzLmEuWTUoMCxzLmMuYShiKSxzLlFbMV0uYShjKSl9LAp4
+NChhKXtyZXR1cm4gdGhpcy5hLng0KGEpfSwKSyhhLGIpe3RoaXMuYS5LKDAsQS5MaCh0aGlzKS5DKCJ+
+KDEsMikiKS5hKGIpKX0sCmdsMChhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ2wwKHMpfSwKZ0EoYSl7
+dmFyIHM9dGhpcy5hCnJldHVybiBzLmdBKHMpfSwKdyhhKXtyZXR1cm4gdGhpcy5hLncoMCl9LApnUHUo
+YSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmdQdShzKX0sCiRpWjA6MX0KQS5Hai5wcm90b3R5cGU9e30K
+QS5sZi5wcm90b3R5cGU9ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKZ29yKGEpe3Jl
+dHVybiB0aGlzLmdBKHRoaXMpIT09MH0sCkZWKGEsYil7dmFyIHMKZm9yKHM9Si5JVChBLkxoKHRoaXMp
+LkMoImNYPGxmLkU+IikuYShiKSk7cy5GKCk7KXRoaXMuaSgwLHMuZ2woKSl9LAp3KGEpe3JldHVybiBB
+LngodGhpcywieyIsIn0iKX0sCmsoYSxiKXt2YXIgcyxyLHE9dGhpcy5nbSh0aGlzKQppZighcS5GKCkp
+cmV0dXJuIiIKcz1xLiR0aS5jCmlmKGI9PT0iIil7cj0iIgpkbyByKz1BLkVqKHMuYShxLmQpKQp3aGls
+ZShxLkYoKSkKcz1yfWVsc2V7cj0iIitBLkVqKHMuYShxLmQpKQpmb3IoO3EuRigpOylyPXIrYitBLkVq
+KHMuYShxLmQpKQpzPXJ9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LAplUihhLGIpe3JldHVy
+biBBLmJLKHRoaXMsYixBLkxoKHRoaXMpLkMoImxmLkUiKSl9LApFKGEsYil7dmFyIHMscixxLHAsbz0i
+aW5kZXgiCkEuY2IoYixvLHQuUykKQS5rMShiLG8pCmZvcihzPXRoaXMuZ20odGhpcykscj1zLiR0aS5j
+LHE9MDtzLkYoKTspe3A9ci5hKHMuZCkKaWYoYj09PXEpcmV0dXJuIHA7KytxfXRocm93IEEuYihBLkNm
+KGIsdGhpcyxvLG51bGwscSkpfX0KQS5Wai5wcm90b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGlPbDoxfQpB
+Llh2LnByb3RvdHlwZT17JGliUToxLCRpY1g6MSwkaU9sOjF9CkEublkucHJvdG90eXBlPXt9CkEuV1ku
+cHJvdG90eXBlPXt9CkEuUlUucHJvdG90eXBlPXt9CkEucFIucHJvdG90eXBlPXt9CkEudXcucHJvdG90
+eXBlPXsKcShhLGIpe3ZhciBzLHI9dGhpcy5iCmlmKHI9PW51bGwpcmV0dXJuIHRoaXMuYy5xKDAsYikK
+ZWxzZSBpZih0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIG51bGwKZWxzZXtzPXJbYl0KcmV0dXJuIHR5
+cGVvZiBzPT0idW5kZWZpbmVkIj90aGlzLmZiKGIpOnN9fSwKZ0EoYSl7dmFyIHMKaWYodGhpcy5iPT1u
+dWxsKXtzPXRoaXMuYwpzPXMuZ0Eocyl9ZWxzZSBzPXRoaXMuQ2YoKS5sZW5ndGgKcmV0dXJuIHN9LApn
+bDAoYSl7cmV0dXJuIHRoaXMuZ0EodGhpcyk9PT0wfSwKZ3ZjKCl7aWYodGhpcy5iPT1udWxsKXJldHVy
+biB0aGlzLmMuZ3ZjKCkKcmV0dXJuIG5ldyBBLmk4KHRoaXMpfSwKWTUoYSxiLGMpe3ZhciBzLHIscT10
+aGlzCmlmKHEuYj09bnVsbClxLmMuWTUoMCxiLGMpCmVsc2UgaWYocS54NChiKSl7cz1xLmIKc1tiXT1j
+CnI9cS5hCmlmKHI9PW51bGw/cyE9bnVsbDpyIT09cylyW2JdPW51bGx9ZWxzZSBxLlhLKCkuWTUoMCxi
+LGMpfSwKeDQoYSl7aWYodGhpcy5iPT1udWxsKXJldHVybiB0aGlzLmMueDQoYSkKcmV0dXJuIE9iamVj
+dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmEsYSl9LApLKGEsYil7dmFyIHMscixx
+LHAsbz10aGlzCnQuY0EuYShiKQppZihvLmI9PW51bGwpcmV0dXJuIG8uYy5LKDAsYikKcz1vLkNmKCkK
+Zm9yKHI9MDtyPHMubGVuZ3RoOysrcil7cT1zW3JdCnA9by5iW3FdCmlmKHR5cGVvZiBwPT0idW5kZWZp
+bmVkIil7cD1BLlFlKG8uYVtxXSkKby5iW3FdPXB9Yi4kMihxLHApCmlmKHMhPT1vLmMpdGhyb3cgQS5i
+KEEuYTQobykpfX0sCkNmKCl7dmFyIHM9dC5iTS5hKHRoaXMuYykKaWYocz09bnVsbClzPXRoaXMuYz1B
+LlFJKE9iamVjdC5rZXlzKHRoaXMuYSksdC5zKQpyZXR1cm4gc30sClhLKCl7dmFyIHMscixxLHAsbyxu
+PXRoaXMKaWYobi5iPT1udWxsKXJldHVybiBuLmMKcz1BLkZsKHQuTix0LnopCnI9bi5DZigpCmZvcihx
+PTA7cD1yLmxlbmd0aCxxPHA7KytxKXtvPXJbcV0Kcy5ZNSgwLG8sbi5xKDAsbykpfWlmKHA9PT0wKUIu
+Tm0uaShyLCIiKQplbHNlIEIuTm0uc0EociwwKQpuLmE9bi5iPW51bGwKcmV0dXJuIG4uYz1zfSwKZmIo
+YSl7dmFyIHMKaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmEsYSkp
+cmV0dXJuIG51bGwKcz1BLlFlKHRoaXMuYVthXSkKcmV0dXJuIHRoaXMuYlthXT1zfX0KQS5pOC5wcm90
+b3R5cGU9ewpnQShhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ0Eocyl9LApFKGEsYil7dmFyIHM9dGhp
+cy5hCmlmKHMuYj09bnVsbClzPXMuZ3ZjKCkuRSgwLGIpCmVsc2V7cz1zLkNmKCkKaWYoIShiPj0wJiZi
+PHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnM9c1tiXX1yZXR1cm4gc30sCmdtKGEpe3ZhciBzPXRo
+aXMuYQppZihzLmI9PW51bGwpe3M9cy5ndmMoKQpzPXMuZ20ocyl9ZWxzZXtzPXMuQ2YoKQpzPW5ldyBK
+Lm0xKHMscy5sZW5ndGgsQS50NihzKS5DKCJtMTwxPiIpKX1yZXR1cm4gc30sCnRnKGEsYil7cmV0dXJu
+IHRoaXMuYS54NChiKX19CkEueHIucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyCnRyeXtzPW5ldyBUZXh0
+RGVjb2RlcigidXRmLTgiLHtmYXRhbDp0cnVlfSkKcmV0dXJuIHN9Y2F0Y2gocil7fXJldHVybiBudWxs
+fSwKJFM6OX0KQS5Oei5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIKdHJ5e3M9bmV3IFRleHREZWNvZGVy
+KCJ1dGYtOCIse2ZhdGFsOmZhbHNlfSkKcmV0dXJuIHN9Y2F0Y2gocil7fXJldHVybiBudWxsfSwKJFM6
+OX0KQS5DVi5wcm90b3R5cGU9ewp5cihhMSxhMixhMyl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxo
+LGcsZixlLGQsYyxiLGEsYTA9IkludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCAiCmEzPUEuakIo
+YTIsYTMsYTEubGVuZ3RoKQpzPSQuVjcoKQpmb3Iocj1zLmxlbmd0aCxxPWEyLHA9cSxvPW51bGwsbj0t
+MSxtPS0xLGw9MDtxPGEzO3E9ayl7az1xKzEKaj1CLnhCLlcoYTEscSkKaWYoaj09PTM3KXtpPWsrMgpp
+ZihpPD1hMyl7aD1BLm9vKEIueEIuVyhhMSxrKSkKZz1BLm9vKEIueEIuVyhhMSxrKzEpKQpmPWgqMTYr
+Zy0oZyYyNTYpCmlmKGY9PT0zNylmPS0xCms9aX1lbHNlIGY9LTF9ZWxzZSBmPWoKaWYoMDw9ZiYmZjw9
+MTI3KXtpZighKGY+PTAmJmY8cikpcmV0dXJuIEEuT0gocyxmKQplPXNbZl0KaWYoZT49MCl7Zj1CLnhC
+Lk8oIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIz
+NDU2Nzg5Ky8iLGUpCmlmKGY9PT1qKWNvbnRpbnVlCmo9Zn1lbHNle2lmKGU9PT0tMSl7aWYobjwwKXtk
+PW89PW51bGw/bnVsbDpvLmEubGVuZ3RoCmlmKGQ9PW51bGwpZD0wCm49ZCsocS1wKQptPXF9KytsCmlm
+KGo9PT02MSljb250aW51ZX1qPWZ9aWYoZSE9PS0yKXtpZihvPT1udWxsKXtvPW5ldyBBLk0oIiIpCmQ9
+b31lbHNlIGQ9bwpjPWQuYSs9Qi54Qi5OaihhMSxwLHEpCmQuYT1jK0EuTHcoaikKcD1rCmNvbnRpbnVl
+fX10aHJvdyBBLmIoQS5ycigiSW52YWxpZCBiYXNlNjQgZGF0YSIsYTEscSkpfWlmKG8hPW51bGwpe3I9
+by5hKz1CLnhCLk5qKGExLHAsYTMpCmQ9ci5sZW5ndGgKaWYobj49MClBLnhNKGExLG0sYTMsbixsLGQp
+CmVsc2V7Yj1CLmpuLnpZKGQtMSw0KSsxCmlmKGI9PT0xKXRocm93IEEuYihBLnJyKGEwLGExLGEzKSkK
+Zm9yKDtiPDQ7KXtyKz0iPSIKby5hPXI7KytifX1yPW8uYQpyZXR1cm4gQi54Qi5pNyhhMSxhMixhMyxy
+LmNoYXJDb2RlQXQoMCk9PTA/cjpyKX1hPWEzLWEyCmlmKG4+PTApQS54TShhMSxtLGEzLG4sbCxhKQpl
+bHNle2I9Qi5qbi56WShhLDQpCmlmKGI9PT0xKXRocm93IEEuYihBLnJyKGEwLGExLGEzKSkKaWYoYj4x
+KWExPUIueEIuaTcoYTEsYTMsYTMsYj09PTI/Ij09IjoiPSIpfXJldHVybiBhMX19CkEuVTgucHJvdG90
+eXBlPXt9CkEuVWsucHJvdG90eXBlPXt9CkEud0kucHJvdG90eXBlPXt9CkEuWmkucHJvdG90eXBlPXt9
+CkEuVWQucHJvdG90eXBlPXsKdyhhKXt2YXIgcz1BLmhsKHRoaXMuYSkKcmV0dXJuKHRoaXMuYiE9bnVs
+bD8iQ29udmVydGluZyBvYmplY3QgdG8gYW4gZW5jb2RhYmxlIG9iamVjdCBmYWlsZWQ6IjoiQ29udmVy
+dGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2RhYmxlIG9iamVjdDoiKSsiICIrc319CkEu
+SzgucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5In19
+CkEuYnkucHJvdG90eXBlPXsKcFcoYSxiLGMpe3ZhciBzCnQuZlYuYShjKQpzPUEuQlMoYix0aGlzLmdI
+ZSgpLmEpCnJldHVybiBzfSwKT0IoYSxiKXt2YXIgcwp0LmRBLmEoYikKcz1BLnVYKGEsdGhpcy5nWkUo
+KS5iLG51bGwpCnJldHVybiBzfSwKZ1pFKCl7cmV0dXJuIEIublh9LApnSGUoKXtyZXR1cm4gQi5BM319
+CkEub2oucHJvdG90eXBlPXt9CkEuTXgucHJvdG90eXBlPXt9CkEuU2gucHJvdG90eXBlPXsKUlQoYSl7
+dmFyIHMscixxLHAsbyxuLG09YS5sZW5ndGgKZm9yKHM9dGhpcy5jLHI9MCxxPTA7cTxtOysrcSl7cD1C
+LnhCLlcoYSxxKQppZihwPjkyKXtpZihwPj01NTI5Nil7bz1wJjY0NTEyCmlmKG89PT01NTI5Nil7bj1x
+KzEKbj0hKG48bSYmKEIueEIuVyhhLG4pJjY0NTEyKT09PTU2MzIwKX1lbHNlIG49ITEKaWYoIW4paWYo
+bz09PTU2MzIwKXtvPXEtMQpvPSEobz49MCYmKEIueEIuTyhhLG8pJjY0NTEyKT09PTU1Mjk2KX1lbHNl
+IG89ITEKZWxzZSBvPSEwCmlmKG8pe2lmKHE+cilzLmErPUIueEIuTmooYSxyLHEpCnI9cSsxCm89cy5h
+Kz1BLkx3KDkyKQpvKz1BLkx3KDExNykKcy5hPW8Kbys9QS5MdygxMDApCnMuYT1vCm49cD4+PjgmMTUK
+bys9QS5MdyhuPDEwPzQ4K246ODcrbikKcy5hPW8Kbj1wPj4+NCYxNQpvKz1BLkx3KG48MTA/NDgrbjo4
+NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rQS5MdyhuPDEwPzQ4K246ODcrbil9fWNvbnRpbnVlfWlmKHA8
+MzIpe2lmKHE+cilzLmErPUIueEIuTmooYSxyLHEpCnI9cSsxCm89cy5hKz1BLkx3KDkyKQpzd2l0Y2go
+cCl7Y2FzZSA4OnMuYT1vK0EuTHcoOTgpCmJyZWFrCmNhc2UgOTpzLmE9bytBLkx3KDExNikKYnJlYWsK
+Y2FzZSAxMDpzLmE9bytBLkx3KDExMCkKYnJlYWsKY2FzZSAxMjpzLmE9bytBLkx3KDEwMikKYnJlYWsK
+Y2FzZSAxMzpzLmE9bytBLkx3KDExNCkKYnJlYWsKZGVmYXVsdDpvKz1BLkx3KDExNykKcy5hPW8Kbys9
+QS5Mdyg0OCkKcy5hPW8Kbys9QS5Mdyg0OCkKcy5hPW8Kbj1wPj4+NCYxNQpvKz1BLkx3KG48MTA/NDgr
+bjo4NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rQS5MdyhuPDEwPzQ4K246ODcrbikKYnJlYWt9fWVsc2Ug
+aWYocD09PTM0fHxwPT09OTIpe2lmKHE+cilzLmErPUIueEIuTmooYSxyLHEpCnI9cSsxCm89cy5hKz1B
+Lkx3KDkyKQpzLmE9bytBLkx3KHApfX1pZihyPT09MClzLmErPWEKZWxzZSBpZihyPG0pcy5hKz1CLnhC
+Lk5qKGEscixtKX0sCkpuKGEpe3ZhciBzLHIscSxwCmZvcihzPXRoaXMuYSxyPXMubGVuZ3RoLHE9MDtx
+PHI7KytxKXtwPXNbcV0KaWYoYT09bnVsbD9wPT1udWxsOmE9PT1wKXRocm93IEEuYihuZXcgQS5LOChh
+LG51bGwpKX1CLk5tLmkocyxhKX0sCmlVKGEpe3ZhciBzLHIscSxwLG89dGhpcwppZihvLnRNKGEpKXJl
+dHVybgpvLkpuKGEpCnRyeXtzPW8uYi4kMShhKQppZighby50TShzKSl7cT1BLkd5KGEsbnVsbCxvLmdW
+SygpKQp0aHJvdyBBLmIocSl9cT1vLmEKaWYoMD49cS5sZW5ndGgpcmV0dXJuIEEuT0gocSwtMSkKcS5w
+b3AoKX1jYXRjaChwKXtyPUEuUnUocCkKcT1BLkd5KGEscixvLmdWSygpKQp0aHJvdyBBLmIocSl9fSwK
+dE0oYSl7dmFyIHMscixxPXRoaXMKaWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZighaXNGaW5pdGUoYSkp
+cmV0dXJuITEKcS5jLmErPUIuQ0QudyhhKQpyZXR1cm4hMH1lbHNlIGlmKGE9PT0hMCl7cS5jLmErPSJ0
+cnVlIgpyZXR1cm4hMH1lbHNlIGlmKGE9PT0hMSl7cS5jLmErPSJmYWxzZSIKcmV0dXJuITB9ZWxzZSBp
+ZihhPT1udWxsKXtxLmMuYSs9Im51bGwiCnJldHVybiEwfWVsc2UgaWYodHlwZW9mIGE9PSJzdHJpbmci
+KXtzPXEuYwpzLmErPSciJwpxLlJUKGEpCnMuYSs9JyInCnJldHVybiEwfWVsc2UgaWYodC5qLmIoYSkp
+e3EuSm4oYSkKcS5sSyhhKQpzPXEuYQppZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBv
+cCgpCnJldHVybiEwfWVsc2UgaWYodC5mLmIoYSkpe3EuSm4oYSkKcj1xLmp3KGEpCnM9cS5hCmlmKDA+
+PXMubGVuZ3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKcmV0dXJuIHJ9ZWxzZSByZXR1cm4hMX0s
+CmxLKGEpe3ZhciBzLHIscT10aGlzLmMKcS5hKz0iWyIKcz1KLlU2KGEpCmlmKHMuZ29yKGEpKXt0aGlz
+LmlVKHMucShhLDApKQpmb3Iocj0xO3I8cy5nQShhKTsrK3Ipe3EuYSs9IiwiCnRoaXMuaVUocy5xKGEs
+cikpfX1xLmErPSJdIn0sCmp3KGEpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD17fQppZihhLmdsMChh
+KSl7bS5jLmErPSJ7fSIKcmV0dXJuITB9cz1hLmdBKGEpKjIKcj1BLk84KHMsbnVsbCwhMSx0LlgpCnE9
+bC5hPTAKbC5iPSEwCmEuSygwLG5ldyBBLnRpKGwscikpCmlmKCFsLmIpcmV0dXJuITEKcD1tLmMKcC5h
+Kz0ieyIKZm9yKG89JyInO3E8cztxKz0yLG89JywiJyl7cC5hKz1vCm0uUlQoQS5uKHJbcV0pKQpwLmEr
+PSciOicKbj1xKzEKaWYoIShuPHMpKXJldHVybiBBLk9IKHIsbikKbS5pVShyW25dKX1wLmErPSJ9Igpy
+ZXR1cm4hMH19CkEudGkucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyCmlmKHR5cGVvZiBhIT0ic3Ry
+aW5nIil0aGlzLmEuYj0hMQpzPXRoaXMuYgpyPXRoaXMuYQpCLk5tLlk1KHMsci5hKyssYSkKQi5ObS5Z
+NShzLHIuYSsrLGIpfSwKJFM6OH0KQS50dS5wcm90b3R5cGU9ewpnVksoKXt2YXIgcz10aGlzLmMuYQpy
+ZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c319CkEudTUucHJvdG90eXBlPXsKZ1pFKCl7cmV0dXJu
+IEIuUWt9fQpBLkUzLnByb3RvdHlwZT17CldKKGEpe3ZhciBzLHIscSxwPUEuakIoMCxudWxsLGEubGVu
+Z3RoKSxvPXAtMAppZihvPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCkKcz1vKjMKcj1uZXcgVWlu
+dDhBcnJheShzKQpxPW5ldyBBLlJ3KHIpCmlmKHEuR3goYSwwLHApIT09cCl7Qi54Qi5PKGEscC0xKQpx
+LlJPKCl9cmV0dXJuIG5ldyBVaW50OEFycmF5KHIuc3ViYXJyYXkoMCxBLnJNKDAscS5iLHMpKSl9fQpB
+LlJ3LnByb3RvdHlwZT17ClJPKCl7dmFyIHM9dGhpcyxyPXMuYyxxPXMuYixwPXMuYj1xKzEsbz1yLmxl
+bmd0aAppZighKHE8bykpcmV0dXJuIEEuT0gocixxKQpyW3FdPTIzOQpxPXMuYj1wKzEKaWYoIShwPG8p
+KXJldHVybiBBLk9IKHIscCkKcltwXT0xOTEKcy5iPXErMQppZighKHE8bykpcmV0dXJuIEEuT0gocixx
+KQpyW3FdPTE4OX0sCk82KGEsYil7dmFyIHMscixxLHAsbyxuPXRoaXMKaWYoKGImNjQ1MTIpPT09NTYz
+MjApe3M9NjU1MzYrKChhJjEwMjMpPDwxMCl8YiYxMDIzCnI9bi5jCnE9bi5iCnA9bi5iPXErMQpvPXIu
+bGVuZ3RoCmlmKCEocTxvKSlyZXR1cm4gQS5PSChyLHEpCnJbcV09cz4+PjE4fDI0MApxPW4uYj1wKzEK
+aWYoIShwPG8pKXJldHVybiBBLk9IKHIscCkKcltwXT1zPj4+MTImNjN8MTI4CnA9bi5iPXErMQppZigh
+KHE8bykpcmV0dXJuIEEuT0gocixxKQpyW3FdPXM+Pj42JjYzfDEyOApuLmI9cCsxCmlmKCEocDxvKSly
+ZXR1cm4gQS5PSChyLHApCnJbcF09cyY2M3wxMjgKcmV0dXJuITB9ZWxzZXtuLlJPKCkKcmV0dXJuITF9
+fSwKR3goYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcwppZihiIT09YyYmKEIueEIuTyhhLGMt
+MSkmNjQ1MTIpPT09NTUyOTYpLS1jCmZvcihzPWwuYyxyPXMubGVuZ3RoLHE9YjtxPGM7KytxKXtwPUIu
+eEIuVyhhLHEpCmlmKHA8PTEyNyl7bz1sLmIKaWYobz49cilicmVhawpsLmI9bysxCnNbb109cH1lbHNl
+e289cCY2NDUxMgppZihvPT09NTUyOTYpe2lmKGwuYis0PnIpYnJlYWsKbj1xKzEKaWYobC5PNihwLEIu
+eEIuVyhhLG4pKSlxPW59ZWxzZSBpZihvPT09NTYzMjApe2lmKGwuYiszPnIpYnJlYWsKbC5STygpfWVs
+c2UgaWYocDw9MjA0Nyl7bz1sLmIKbT1vKzEKaWYobT49cilicmVhawpsLmI9bQppZighKG88cikpcmV0
+dXJuIEEuT0gocyxvKQpzW29dPXA+Pj42fDE5MgpsLmI9bSsxCnNbbV09cCY2M3wxMjh9ZWxzZXtvPWwu
+YgppZihvKzI+PXIpYnJlYWsKbT1sLmI9bysxCmlmKCEobzxyKSlyZXR1cm4gQS5PSChzLG8pCnNbb109
+cD4+PjEyfDIyNApvPWwuYj1tKzEKaWYoIShtPHIpKXJldHVybiBBLk9IKHMsbSkKc1ttXT1wPj4+NiY2
+M3wxMjgKbC5iPW8rMQppZighKG88cikpcmV0dXJuIEEuT0gocyxvKQpzW29dPXAmNjN8MTI4fX19cmV0
+dXJuIHF9fQpBLkdZLnByb3RvdHlwZT17CldKKGEpe3ZhciBzLHIKdC5MLmEoYSkKcz10aGlzLmEKcj1B
+Lmt5KHMsYSwwLG51bGwpCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIG5ldyBBLmJ6KHMpLk5lKGEs
+MCxudWxsLCEwKX19CkEuYnoucHJvdG90eXBlPXsKTmUoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuPXRo
+aXMKdC5MLmEoYSkKcz1BLmpCKGIsYyxKLkhtKGEpKQppZihiPT09cylyZXR1cm4iIgpyPUEuankoYSxi
+LHMpCnE9bi5oTyhyLDAscy1iLCEwKQpwPW4uYgppZigocCYxKSE9PTApe289QS5qNChwKQpuLmI9MAp0
+aHJvdyBBLmIoQS5ycihvLGEsYituLmMpKX1yZXR1cm4gcX0sCmhPKGEsYixjLGQpe3ZhciBzLHIscT10
+aGlzCmlmKGMtYj4xMDAwKXtzPUIuam4uQlUoYitjLDIpCnI9cS5oTyhhLGIscywhMSkKaWYoKHEuYiYx
 KSE9PTApcmV0dXJuIHIKcmV0dXJuIHIrcS5oTyhhLHMsYyxkKX1yZXR1cm4gcS5FaChhLGIsYyxkKX0s
 CkVoKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtLGwsaz10aGlzLGo9NjU1MzMsaT1rLmIsaD1rLmMs
-Zz1uZXcgUC5NKCIiKSxmPWIrMSxlPWEubGVuZ3RoCmlmKGI8MHx8Yj49ZSlyZXR1cm4gSC5PSChhLGIp
-CnM9YVtiXQokbGFiZWwwJDA6Zm9yKHI9ay5hOyEwOyl7Zm9yKDshMDtmPW8pe3E9Qy54Qi5XKCJBQUFB
+Zz1uZXcgQS5NKCIiKSxmPWIrMSxlPWEubGVuZ3RoCmlmKCEoYj49MCYmYjxlKSlyZXR1cm4gQS5PSChh
+LGIpCnM9YVtiXQokbGFiZWwwJDA6Zm9yKHI9ay5hOyEwOyl7Zm9yKDshMDtmPW8pe3E9Qi54Qi5XKCJB
 QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
 QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
-QUFBQUZGRkZGRkZGRkZGRkZGRkZHR0dHR0dHR0dHR0dHR0dHSEhISEhISEhISEhISEhISEhISEhISEhI
-SEhISUhISEpFRUJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQktDQ0NDQ0NDQ0NDQ0NEQ0xPTk5O
-TUVFRUVFRUVFRUVFIixzKSYzMQpoPWk8PTMyP3MmNjE2OTQ+Pj5xOihzJjYzfGg8PDYpPj4+MAppPUMu
-eEIuVygiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBceDAwMDpYRUNDQ0NDTnZsRGIgXHgwMDA6WEVDQ0NDQ046
-bERiIEFBQUFBXHgwMFx4MDBceDAwXHgwMFx4MDBBQUFBQTAwMDAwQUFBQUE6Ojo6OkFBQUFBR0cwMDBB
-QUFBQTAwS0tLQUFBQUFHOjo6OkFBQUFBOklJSUlBQUFBQTAwMFx4ODAwQUFBQUFceDAwXHgwMFx4MDBc
-eDAwIEFBQUFBIixpK3EpCmlmKGk9PT0wKXtnLmErPUguTHcoaCkKaWYoZj09PWMpYnJlYWsgJGxhYmVs
-MCQwCmJyZWFrfWVsc2UgaWYoKGkmMSkhPT0wKXtpZihyKXN3aXRjaChpKXtjYXNlIDY5OmNhc2UgNjc6
-Zy5hKz1ILkx3KGopCmJyZWFrCmNhc2UgNjU6Zy5hKz1ILkx3KGopOy0tZgpicmVhawpkZWZhdWx0OnA9
-Zy5hKz1ILkx3KGopCmcuYT1wK0guTHcoaikKYnJlYWt9ZWxzZXtrLmI9aQprLmM9Zi0xCnJldHVybiIi
-fWk9MH1pZihmPT09YylicmVhayAkbGFiZWwwJDAKbz1mKzEKaWYoZjwwfHxmPj1lKXJldHVybiBILk9I
-KGEsZikKcz1hW2ZdfW89ZisxCmlmKGY8MHx8Zj49ZSlyZXR1cm4gSC5PSChhLGYpCnM9YVtmXQppZihz
-PDEyOCl7d2hpbGUoITApe2lmKCEobzxjKSl7bj1jCmJyZWFrfW09bysxCmlmKG88MHx8bz49ZSlyZXR1
-cm4gSC5PSChhLG8pCnM9YVtvXQppZihzPj0xMjgpe249bS0xCm89bQpicmVha31vPW19aWYobi1mPDIw
-KWZvcihsPWY7bDxuOysrbCl7aWYobD49ZSlyZXR1cm4gSC5PSChhLGwpCmcuYSs9SC5MdyhhW2xdKX1l
-bHNlIGcuYSs9UC5ITShhLGYsbikKaWYobj09PWMpYnJlYWsgJGxhYmVsMCQwCmY9b31lbHNlIGY9b31p
-ZihkJiZpPjMyKWlmKHIpZy5hKz1ILkx3KGopCmVsc2V7ay5iPTc3CmsuYz1jCnJldHVybiIifWsuYj1p
-CmsuYz1oCmU9Zy5hCnJldHVybiBlLmNoYXJDb2RlQXQoMCk9PTA/ZTplfX0KUC5XRi5wcm90b3R5cGU9
-ewokMihhLGIpe3ZhciBzLHIscQp0LmZvLmEoYSkKcz10aGlzLmIKcj10aGlzLmEKcT1zLmErPXIuYQpx
-Kz1hLmEKcy5hPXEKcy5hPXErIjogIgpzLmErPVAuaGwoYikKci5hPSIsICJ9LAokUzoyOH0KUC5pUC5w
-cm90b3R5cGU9ewpETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBQ
-LmlQJiZ0aGlzLmE9PT1iLmEmJiEwfSwKZ2lPKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4oc15DLmpuLndH
-KHMsMzApKSYxMDczNzQxODIzfSwKdyhhKXt2YXIgcz10aGlzLHI9UC5HcShILnRKKHMpKSxxPVAuaDAo
-SC5OUyhzKSkscD1QLmgwKEguakEocykpLG89UC5oMChILklYKHMpKSxuPVAuaDAoSC5jaChzKSksbT1Q
-LmgwKEguSmQocykpLGw9UC5WeChILm8xKHMpKSxrPXIrIi0iK3ErIi0iK3ArIiAiK28rIjoiK24rIjoi
-K20rIi4iK2wKcmV0dXJuIGt9fQpQLlhTLnByb3RvdHlwZT17CmdJSSgpe3JldHVybiBILnRzKHRoaXMu
-JHRocm93bkpzRXJyb3IpfX0KUC5DNi5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPXRoaXMuYQppZihzIT1u
-dWxsKXJldHVybiJBc3NlcnRpb24gZmFpbGVkOiAiK1AuaGwocykKcmV0dXJuIkFzc2VydGlvbiBmYWls
-ZWQifX0KUC5Fei5wcm90b3R5cGU9e30KUC5GLnByb3RvdHlwZT17CncoYSl7cmV0dXJuIlRocm93IG9m
-IG51bGwuIn19ClAuQVQucHJvdG90eXBlPXsKZ1ooKXtyZXR1cm4iSW52YWxpZCBhcmd1bWVudCIrKCF0
-aGlzLmE/IihzKSI6IiIpfSwKZ3UoKXtyZXR1cm4iIn0sCncoYSl7dmFyIHMscixxPXRoaXMscD1xLmMs
-bz1wPT1udWxsPyIiOiIgKCIrcCsiKSIsbj1xLmQsbT1uPT1udWxsPyIiOiI6ICIrSC5FaihuKSxsPXEu
-Z1ooKStvK20KaWYoIXEuYSlyZXR1cm4gbApzPXEuZ3UoKQpyPVAuaGwocS5iKQpyZXR1cm4gbCtzKyI6
-ICIrcn19ClAuYkoucHJvdG90eXBlPXsKZ1ooKXtyZXR1cm4iUmFuZ2VFcnJvciJ9LApndSgpe3ZhciBz
-LHI9dGhpcy5lLHE9dGhpcy5mCmlmKHI9PW51bGwpcz1xIT1udWxsPyI6IE5vdCBsZXNzIHRoYW4gb3Ig
-ZXF1YWwgdG8gIitILkVqKHEpOiIiCmVsc2UgaWYocT09bnVsbClzPSI6IE5vdCBncmVhdGVyIHRoYW4g
-b3IgZXF1YWwgdG8gIitILkVqKHIpCmVsc2UgaWYocT5yKXM9IjogTm90IGluIGluY2x1c2l2ZSByYW5n
-ZSAiK0guRWoocikrIi4uIitILkVqKHEpCmVsc2Ugcz1xPHI/IjogVmFsaWQgdmFsdWUgcmFuZ2UgaXMg
-ZW1wdHkiOiI6IE9ubHkgdmFsaWQgdmFsdWUgaXMgIitILkVqKHIpCnJldHVybiBzfX0KUC5lWS5wcm90
-b3R5cGU9ewpnWigpe3JldHVybiJSYW5nZUVycm9yIn0sCmd1KCl7aWYoSC5JWih0aGlzLmIpPDApcmV0
-dXJuIjogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmUiCnZhciBzPXRoaXMuZgppZihzPT09MClyZXR1
-cm4iOiBubyBpbmRpY2VzIGFyZSB2YWxpZCIKcmV0dXJuIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhh
-biAiK3N9LApnQShhKXtyZXR1cm4gdGhpcy5mfX0KUC5tcC5wcm90b3R5cGU9ewp3KGEpe3ZhciBzLHIs
-cSxwLG8sbixtLGwsaz10aGlzLGo9e30saT1uZXcgUC5NKCIiKQpqLmE9IiIKcz1rLmMKZm9yKHI9cy5s
-ZW5ndGgscT0wLHA9IiIsbz0iIjtxPHI7KytxLG89IiwgIil7bj1zW3FdCmkuYT1wK28KcD1pLmErPVAu
-aGwobikKai5hPSIsICJ9ay5kLksoMCxuZXcgUC5XRihqLGkpKQptPVAuaGwoay5hKQpsPWkudygwKQpy
-PSJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9kIG5vdCBmb3VuZDogJyIray5iLmErIidcblJlY2VpdmVy
-OiAiK20rIlxuQXJndW1lbnRzOiBbIitsKyJdIgpyZXR1cm4gcn19ClAudWIucHJvdG90eXBlPXsKdyhh
-KXtyZXR1cm4iVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAiK3RoaXMuYX19ClAuZHMucHJvdG90eXBlPXsK
-dyhhKXt2YXIgcz0iVW5pbXBsZW1lbnRlZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4gc319ClAubGoucHJv
-dG90eXBlPXsKdyhhKXtyZXR1cm4iQmFkIHN0YXRlOiAiK3RoaXMuYX19ClAuVVYucHJvdG90eXBlPXsK
-dyhhKXt2YXIgcz10aGlzLmEKaWYocz09bnVsbClyZXR1cm4iQ29uY3VycmVudCBtb2RpZmljYXRpb24g
-ZHVyaW5nIGl0ZXJhdGlvbi4iCnJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRl
-cmF0aW9uOiAiK1AuaGwocykrIi4ifX0KUC5rNS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJPdXQgb2Yg
-TWVtb3J5In0sCmdJSSgpe3JldHVybiBudWxsfSwKJGlYUzoxfQpQLktZLnByb3RvdHlwZT17CncoYSl7
-cmV0dXJuIlN0YWNrIE92ZXJmbG93In0sCmdJSSgpe3JldHVybiBudWxsfSwKJGlYUzoxfQpQLnAucHJv
-dG90eXBlPXsKdyhhKXt2YXIgcz0iUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgJyIrdGhpcy5hKyInIGR1
-cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iCnJldHVybiBzfX0KUC5DRC5wcm90b3R5cGU9ewp3KGEpe3Jl
-dHVybiJFeGNlcHRpb246ICIrdGhpcy5hfSwKJGlSejoxfQpQLmFFLnByb3RvdHlwZT17CncoYSl7dmFy
-IHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGc9dGhpcy5hLGY9IiIhPT1nPyJGb3JtYXRFeGNlcHRpb246
-ICIrZzoiRm9ybWF0RXhjZXB0aW9uIixlPXRoaXMuYyxkPXRoaXMuYgppZih0eXBlb2YgZD09InN0cmlu
-ZyIpe2lmKGUhPW51bGwpcz1lPDB8fGU+ZC5sZW5ndGgKZWxzZSBzPSExCmlmKHMpZT1udWxsCmlmKGU9
-PW51bGwpe2lmKGQubGVuZ3RoPjc4KWQ9Qy54Qi5OaihkLDAsNzUpKyIuLi4iCnJldHVybiBmKyJcbiIr
-ZH1mb3Iocj0xLHE9MCxwPSExLG89MDtvPGU7KytvKXtuPUMueEIuVyhkLG8pCmlmKG49PT0xMCl7aWYo
-cSE9PW98fCFwKSsrcgpxPW8rMQpwPSExfWVsc2UgaWYobj09PTEzKXsrK3IKcT1vKzEKcD0hMH19Zj1y
-PjE/ZisoIiAoYXQgbGluZSAiK3IrIiwgY2hhcmFjdGVyICIrKGUtcSsxKSsiKVxuIik6ZisoIiAoYXQg
-Y2hhcmFjdGVyICIrKGUrMSkrIilcbiIpCm09ZC5sZW5ndGgKZm9yKG89ZTtvPG07KytvKXtuPUMueEIu
-TyhkLG8pCmlmKG49PT0xMHx8bj09PTEzKXttPW8KYnJlYWt9fWlmKG0tcT43OClpZihlLXE8NzUpe2w9
-cSs3NQprPXEKaj0iIgppPSIuLi4ifWVsc2V7aWYobS1lPDc1KXtrPW0tNzUKbD1tCmk9IiJ9ZWxzZXtr
-PWUtMzYKbD1lKzM2Cmk9Ii4uLiJ9aj0iLi4uIn1lbHNle2w9bQprPXEKaj0iIgppPSIifWg9Qy54Qi5O
-aihkLGssbCkKcmV0dXJuIGYraitoK2krIlxuIitDLnhCLlQoIiAiLGUtaytqLmxlbmd0aCkrIl5cbiJ9
-ZWxzZSByZXR1cm4gZSE9bnVsbD9mKygiIChhdCBvZmZzZXQgIitILkVqKGUpKyIpIik6Zn0sCiRpUno6
-MX0KUC5jWC5wcm90b3R5cGU9ewpkcihhLGIpe3JldHVybiBILkdKKHRoaXMsSC5MaCh0aGlzKS5DKCJj
-WC5FIiksYil9LApFMihhLGIsYyl7dmFyIHM9SC5MaCh0aGlzKQpyZXR1cm4gSC5LMSh0aGlzLHMuS3Eo
-YykuQygiMShjWC5FKSIpLmEoYikscy5DKCJjWC5FIiksYyl9LApldihhLGIpe3ZhciBzPUguTGgodGhp
-cykKcmV0dXJuIG5ldyBILlU1KHRoaXMscy5DKCJhMihjWC5FKSIpLmEoYikscy5DKCJVNTxjWC5FPiIp
-KX0sCnR0KGEsYil7cmV0dXJuIFAuWTEodGhpcyxiLEguTGgodGhpcykuQygiY1guRSIpKX0sCmJyKGEp
-e3JldHVybiB0aGlzLnR0KGEsITApfSwKZ0EoYSl7dmFyIHMscj10aGlzLmdtKHRoaXMpCmZvcihzPTA7
-ci5GKCk7KSsrcwpyZXR1cm4gc30sCmdsMChhKXtyZXR1cm4hdGhpcy5nbSh0aGlzKS5GKCl9LApnb3Io
-YSl7cmV0dXJuIXRoaXMuZ2wwKHRoaXMpfSwKZVIoYSxiKXtyZXR1cm4gSC5iSyh0aGlzLGIsSC5MaCh0
-aGlzKS5DKCJjWC5FIikpfSwKZ3I4KGEpe3ZhciBzLHI9dGhpcy5nbSh0aGlzKQppZighci5GKCkpdGhy
-b3cgSC5iKEguV3AoKSkKcz1yLmdsKCkKaWYoci5GKCkpdGhyb3cgSC5iKEguQW0oKSkKcmV0dXJuIHN9
-LApFKGEsYil7dmFyIHMscixxClAuazEoYiwiaW5kZXgiKQpmb3Iocz10aGlzLmdtKHRoaXMpLHI9MDtz
-LkYoKTspe3E9cy5nbCgpCmlmKGI9PT1yKXJldHVybiBxOysrcn10aHJvdyBILmIoUC5DZihiLHRoaXMs
-ImluZGV4IixudWxsLHIpKX0sCncoYSl7cmV0dXJuIFAuRVAodGhpcywiKCIsIikiKX19ClAuQW4ucHJv
-dG90eXBlPXt9ClAuTjMucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iTWFwRW50cnkoIitILkVqKHRoaXMu
-YSkrIjogIitILkVqKHRoaXMuYikrIikifX0KUC5jOC5wcm90b3R5cGU9ewpnaU8oYSl7cmV0dXJuIFAu
-TWgucHJvdG90eXBlLmdpTy5jYWxsKHRoaXMsdGhpcyl9LAp3KGEpe3JldHVybiJudWxsIn19ClAuTWgu
-cHJvdG90eXBlPXskaU1oOjEsCkROKGEsYil7cmV0dXJuIHRoaXM9PT1ifSwKZ2lPKGEpe3JldHVybiBI
-LmVRKHRoaXMpfSwKdyhhKXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrSC5saCh0aGlzKSsiJyJ9LAplNyhh
-LGIpe3Quby5hKGIpCnRocm93IEguYihQLmxyKHRoaXMsYi5nV2EoKSxiLmduZCgpLGIuZ1ZtKCkpKX0s
-CnRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudyh0aGlzKX19ClAuWmQucHJvdG90eXBlPXsKdyhhKXtyZXR1
-cm4iIn0sCiRpR3o6MX0KUC5NLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwK
-dyhhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LAokaUJMOjF9ClAu
-bjEucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyLHEscAp0LmNrLmEoYSkKSC5uKGIpCnM9Qy54Qi5P
-WShiLCI9IikKaWYocz09PS0xKXtpZihiIT09IiIpYS5ZNSgwLFAua3UoYiwwLGIubGVuZ3RoLHRoaXMu
-YSwhMCksIiIpfWVsc2UgaWYocyE9PTApe3I9Qy54Qi5OaihiLDAscykKcT1DLnhCLnluKGIscysxKQpw
-PXRoaXMuYQphLlk1KDAsUC5rdShyLDAsci5sZW5ndGgscCwhMCksUC5rdShxLDAscS5sZW5ndGgscCwh
-MCkpfXJldHVybiBhfSwKJFM6MjZ9ClAuY1MucHJvdG90eXBlPXsKJDIoYSxiKXt0aHJvdyBILmIoUC5y
-cigiSWxsZWdhbCBJUHY0IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJFM6MjR9ClAuVkMucHJvdG90
-eXBlPXsKJDIoYSxiKXt0aHJvdyBILmIoUC5ycigiSWxsZWdhbCBJUHY2IGFkZHJlc3MsICIrYSx0aGlz
-LmEsYikpfSwKJDEoYSl7cmV0dXJuIHRoaXMuJDIoYSxudWxsKX0sCiRTOjE5fQpQLkpULnByb3RvdHlw
+QUFBQUFBQUZGRkZGRkZGRkZGRkZGRkZHR0dHR0dHR0dHR0dHR0dHSEhISEhISEhISEhISEhISEhISEhI
+SEhISEhISUhISEpFRUJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQktDQ0NDQ0NDQ0NDQ0NEQ0xP
+Tk5OTUVFRUVFRUVFRUVFIixzKSYzMQpoPWk8PTMyP3MmNjE2OTQ+Pj5xOihzJjYzfGg8PDYpPj4+MApp
+PUIueEIuVygiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBceDAwMDpYRUNDQ0NDTnZsRGIgXHgwMDA6WEVDQ0ND
+Q046bERiIEFBQUFBXHgwMFx4MDBceDAwXHgwMFx4MDBBQUFBQTAwMDAwQUFBQUE6Ojo6OkFBQUFBR0cw
+MDBBQUFBQTAwS0tLQUFBQUFHOjo6OkFBQUFBOklJSUlBQUFBQTAwMFx4ODAwQUFBQUFceDAwXHgwMFx4
+MDBceDAwIEFBQUFBIixpK3EpCmlmKGk9PT0wKXtnLmErPUEuTHcoaCkKaWYoZj09PWMpYnJlYWsgJGxh
+YmVsMCQwCmJyZWFrfWVsc2UgaWYoKGkmMSkhPT0wKXtpZihyKXN3aXRjaChpKXtjYXNlIDY5OmNhc2Ug
+Njc6Zy5hKz1BLkx3KGopCmJyZWFrCmNhc2UgNjU6Zy5hKz1BLkx3KGopOy0tZgpicmVhawpkZWZhdWx0
+OnA9Zy5hKz1BLkx3KGopCmcuYT1wK0EuTHcoaikKYnJlYWt9ZWxzZXtrLmI9aQprLmM9Zi0xCnJldHVy
+biIifWk9MH1pZihmPT09YylicmVhayAkbGFiZWwwJDAKbz1mKzEKaWYoIShmPj0wJiZmPGUpKXJldHVy
+biBBLk9IKGEsZikKcz1hW2ZdfW89ZisxCmlmKCEoZj49MCYmZjxlKSlyZXR1cm4gQS5PSChhLGYpCnM9
+YVtmXQppZihzPDEyOCl7d2hpbGUoITApe2lmKCEobzxjKSl7bj1jCmJyZWFrfW09bysxCmlmKCEobz49
+MCYmbzxlKSlyZXR1cm4gQS5PSChhLG8pCnM9YVtvXQppZihzPj0xMjgpe249bS0xCm89bQpicmVha31v
+PW19aWYobi1mPDIwKWZvcihsPWY7bDxuOysrbCl7aWYoIShsPGUpKXJldHVybiBBLk9IKGEsbCkKZy5h
+Kz1BLkx3KGFbbF0pfWVsc2UgZy5hKz1BLkhNKGEsZixuKQppZihuPT09YylicmVhayAkbGFiZWwwJDAK
+Zj1vfWVsc2UgZj1vfWlmKGQmJmk+MzIpaWYocilnLmErPUEuTHcoaikKZWxzZXtrLmI9NzcKay5jPWMK
+cmV0dXJuIiJ9ay5iPWkKay5jPWgKZT1nLmEKcmV0dXJuIGUuY2hhckNvZGVBdCgwKT09MD9lOmV9fQpB
+LldGLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscixxCnQuZm8uYShhKQpzPXRoaXMuYgpyPXRoaXMu
+YQpxPXMuYSs9ci5hCnErPWEuYQpzLmE9cQpzLmE9cSsiOiAiCnMuYSs9QS5obChiKQpyLmE9IiwgIn0s
+CiRTOjI4fQpBLmlQLnByb3RvdHlwZT17CkROKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4g
+YiBpbnN0YW5jZW9mIEEuaVAmJnRoaXMuYT09PWIuYSYmITB9LApnaU8oYSl7dmFyIHM9dGhpcy5hCnJl
+dHVybihzXkIuam4ud0cocywzMCkpJjEwNzM3NDE4MjN9LAp3KGEpe3ZhciBzPXRoaXMscj1BLkdxKEEu
+dEoocykpLHE9QS5oMChBLk5TKHMpKSxwPUEuaDAoQS5qQShzKSksbz1BLmgwKEEuSVgocykpLG49QS5o
+MChBLmNoKHMpKSxtPUEuaDAoQS5KZChzKSksbD1BLlZ4KEEubzEocykpLGs9cisiLSIrcSsiLSIrcCsi
+ICIrbysiOiIrbisiOiIrbSsiLiIrbApyZXR1cm4ga319CkEuY2sucHJvdG90eXBlPXt9CkEuWFMucHJv
+dG90eXBlPXsKZ0lJKCl7cmV0dXJuIEEudHModGhpcy4kdGhyb3duSnNFcnJvcil9fQpBLkM2LnByb3Rv
+dHlwZT17CncoYSl7dmFyIHM9dGhpcy5hCmlmKHMhPW51bGwpcmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6
+ICIrQS5obChzKQpyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpBLkV6LnByb3RvdHlwZT17fQpBLkYu
+cHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iVGhyb3cgb2YgbnVsbC4ifX0KQS5BVC5wcm90b3R5cGU9ewpn
+Wigpe3JldHVybiJJbnZhbGlkIGFyZ3VtZW50IisoIXRoaXMuYT8iKHMpIjoiIil9LApnTigpe3JldHVy
+biIifSwKdyhhKXt2YXIgcyxyLHE9dGhpcyxwPXEuYyxvPXA9PW51bGw/IiI6IiAoIitwKyIpIixuPXEu
+ZCxtPW49PW51bGw/IiI6IjogIitBLkVqKG4pLGw9cS5nWigpK28rbQppZighcS5hKXJldHVybiBsCnM9
+cS5nTigpCnI9QS5obChxLmIpCnJldHVybiBsK3MrIjogIityfX0KQS5iSi5wcm90b3R5cGU9ewpnWigp
+e3JldHVybiJSYW5nZUVycm9yIn0sCmdOKCl7dmFyIHMscj10aGlzLmUscT10aGlzLmYKaWYocj09bnVs
+bClzPXEhPW51bGw/IjogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAiK0EuRWoocSk6IiIKZWxzZSBp
+ZihxPT1udWxsKXM9IjogTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAiK0EuRWoocikKZWxzZSBp
+ZihxPnIpcz0iOiBOb3QgaW4gaW5jbHVzaXZlIHJhbmdlICIrQS5FaihyKSsiLi4iK0EuRWoocSkKZWxz
+ZSBzPXE8cj8iOiBWYWxpZCB2YWx1ZSByYW5nZSBpcyBlbXB0eSI6IjogT25seSB2YWxpZCB2YWx1ZSBp
+cyAiK0EuRWoocikKcmV0dXJuIHN9fQpBLmVZLnByb3RvdHlwZT17CmdaKCl7cmV0dXJuIlJhbmdlRXJy
+b3IifSwKZ04oKXtpZihBLklaKHRoaXMuYik8MClyZXR1cm4iOiBpbmRleCBtdXN0IG5vdCBiZSBuZWdh
+dGl2ZSIKdmFyIHM9dGhpcy5mCmlmKHM9PT0wKXJldHVybiI6IG5vIGluZGljZXMgYXJlIHZhbGlkIgpy
+ZXR1cm4iOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0aGFuICIrc30sCmdBKGEpe3JldHVybiB0aGlzLmZ9
+fQpBLm1wLnByb3RvdHlwZT17CncoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMsaj17fSxpPW5l
+dyBBLk0oIiIpCmouYT0iIgpzPWsuYwpmb3Iocj1zLmxlbmd0aCxxPTAscD0iIixvPSIiO3E8cjsrK3Es
+bz0iLCAiKXtuPXNbcV0KaS5hPXArbwpwPWkuYSs9QS5obChuKQpqLmE9IiwgIn1rLmQuSygwLG5ldyBB
+LldGKGosaSkpCm09QS5obChrLmEpCmw9aS53KDApCnI9Ik5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qg
+bm90IGZvdW5kOiAnIitrLmIuYSsiJ1xuUmVjZWl2ZXI6ICIrbSsiXG5Bcmd1bWVudHM6IFsiK2wrIl0i
+CnJldHVybiByfX0KQS51Yi5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJVbnN1cHBvcnRlZCBvcGVyYXRp
+b246ICIrdGhpcy5hfX0KQS5kcy5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPSJVbmltcGxlbWVudGVkRXJy
+b3I6ICIrdGhpcy5hCnJldHVybiBzfX0KQS5sai5wcm90b3R5cGU9ewp3KGEpe3JldHVybiJCYWQgc3Rh
+dGU6ICIrdGhpcy5hfX0KQS5VVi5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPXRoaXMuYQppZihzPT1udWxs
+KXJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNv
+bmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246ICIrQS5obChzKSsiLiJ9fQpBLms1
+LnByb3RvdHlwZT17CncoYSl7cmV0dXJuIk91dCBvZiBNZW1vcnkifSwKZ0lJKCl7cmV0dXJuIG51bGx9
+LAokaVhTOjF9CkEuS1kucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iU3RhY2sgT3ZlcmZsb3cifSwKZ0lJ
+KCl7cmV0dXJuIG51bGx9LAokaVhTOjF9CkEucC5wcm90b3R5cGU9ewp3KGEpe3ZhciBzPSJSZWFkaW5n
+IHN0YXRpYyB2YXJpYWJsZSAnIit0aGlzLmErIicgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiIKcmV0
+dXJuIHN9fQpBLkNELnByb3RvdHlwZT17CncoYSl7cmV0dXJuIkV4Y2VwdGlvbjogIit0aGlzLmF9LAok
+aVJ6OjF9CkEuYUUucHJvdG90eXBlPXsKdyhhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZz10
+aGlzLmEsZj0iIiE9PWc/IkZvcm1hdEV4Y2VwdGlvbjogIitnOiJGb3JtYXRFeGNlcHRpb24iLGU9dGhp
+cy5jLGQ9dGhpcy5iCmlmKHR5cGVvZiBkPT0ic3RyaW5nIil7aWYoZSE9bnVsbClzPWU8MHx8ZT5kLmxl
+bmd0aAplbHNlIHM9ITEKaWYocyllPW51bGwKaWYoZT09bnVsbCl7aWYoZC5sZW5ndGg+NzgpZD1CLnhC
+Lk5qKGQsMCw3NSkrIi4uLiIKcmV0dXJuIGYrIlxuIitkfWZvcihyPTEscT0wLHA9ITEsbz0wO288ZTsr
+K28pe249Qi54Qi5XKGQsbykKaWYobj09PTEwKXtpZihxIT09b3x8IXApKytyCnE9bysxCnA9ITF9ZWxz
+ZSBpZihuPT09MTMpeysrcgpxPW8rMQpwPSEwfX1mPXI+MT9mKygiIChhdCBsaW5lICIrcisiLCBjaGFy
+YWN0ZXIgIisoZS1xKzEpKyIpXG4iKTpmKygiIChhdCBjaGFyYWN0ZXIgIisoZSsxKSsiKVxuIikKbT1k
+Lmxlbmd0aApmb3Iobz1lO288bTsrK28pe249Qi54Qi5PKGQsbykKaWYobj09PTEwfHxuPT09MTMpe209
+bwpicmVha319aWYobS1xPjc4KWlmKGUtcTw3NSl7bD1xKzc1Cms9cQpqPSIiCmk9Ii4uLiJ9ZWxzZXtp
+ZihtLWU8NzUpe2s9bS03NQpsPW0KaT0iIn1lbHNle2s9ZS0zNgpsPWUrMzYKaT0iLi4uIn1qPSIuLi4i
+fWVsc2V7bD1tCms9cQpqPSIiCmk9IiJ9aD1CLnhCLk5qKGQsayxsKQpyZXR1cm4gZitqK2graSsiXG4i
+K0IueEIuVCgiICIsZS1rK2oubGVuZ3RoKSsiXlxuIn1lbHNlIHJldHVybiBlIT1udWxsP2YrKCIgKGF0
+IG9mZnNldCAiK0EuRWooZSkrIikiKTpmfSwKJGlSejoxfQpBLmNYLnByb3RvdHlwZT17CmRyKGEsYil7
+cmV0dXJuIEEuR0oodGhpcyxBLkxoKHRoaXMpLkMoImNYLkUiKSxiKX0sCkUyKGEsYixjKXt2YXIgcz1B
+LkxoKHRoaXMpCnJldHVybiBBLksxKHRoaXMscy5LcShjKS5DKCIxKGNYLkUpIikuYShiKSxzLkMoImNY
+LkUiKSxjKX0sCmV2KGEsYil7dmFyIHM9QS5MaCh0aGlzKQpyZXR1cm4gbmV3IEEuVTUodGhpcyxzLkMo
+ImEyKGNYLkUpIikuYShiKSxzLkMoIlU1PGNYLkU+IikpfSwKdHQoYSxiKXtyZXR1cm4gQS5ZMSh0aGlz
+LGIsQS5MaCh0aGlzKS5DKCJjWC5FIikpfSwKYnIoYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9LApnQShh
+KXt2YXIgcyxyPXRoaXMuZ20odGhpcykKZm9yKHM9MDtyLkYoKTspKytzCnJldHVybiBzfSwKZ2wwKGEp
+e3JldHVybiF0aGlzLmdtKHRoaXMpLkYoKX0sCmdvcihhKXtyZXR1cm4hdGhpcy5nbDAodGhpcyl9LApl
+UihhLGIpe3JldHVybiBBLmJLKHRoaXMsYixBLkxoKHRoaXMpLkMoImNYLkUiKSl9LApncjgoYSl7dmFy
+IHMscj10aGlzLmdtKHRoaXMpCmlmKCFyLkYoKSl0aHJvdyBBLmIoQS5XcCgpKQpzPXIuZ2woKQppZihy
+LkYoKSl0aHJvdyBBLmIoQS5BbSgpKQpyZXR1cm4gc30sCkUoYSxiKXt2YXIgcyxyLHEKQS5rMShiLCJp
+bmRleCIpCmZvcihzPXRoaXMuZ20odGhpcykscj0wO3MuRigpOyl7cT1zLmdsKCkKaWYoYj09PXIpcmV0
+dXJuIHE7KytyfXRocm93IEEuYihBLkNmKGIsdGhpcywiaW5kZXgiLG51bGwscikpfSwKdyhhKXtyZXR1
+cm4gQS5FUCh0aGlzLCIoIiwiKSIpfX0KQS5Bbi5wcm90b3R5cGU9e30KQS5OMy5wcm90b3R5cGU9ewp3
+KGEpe3JldHVybiJNYXBFbnRyeSgiK0EuRWoodGhpcy5hKSsiOiAiK0EuRWoodGhpcy5iKSsiKSJ9fQpB
+LmM4LnByb3RvdHlwZT17CmdpTyhhKXtyZXR1cm4gQS5NaC5wcm90b3R5cGUuZ2lPLmNhbGwodGhpcyx0
+aGlzKX0sCncoYSl7cmV0dXJuIm51bGwifX0KQS5NaC5wcm90b3R5cGU9eyRpTWg6MSwKRE4oYSxiKXty
+ZXR1cm4gdGhpcz09PWJ9LApnaU8oYSl7cmV0dXJuIEEuZVEodGhpcyl9LAp3KGEpe3JldHVybiJJbnN0
+YW5jZSBvZiAnIitBLmxoKHRoaXMpKyInIn0sCmU3KGEsYil7dC5vLmEoYikKdGhyb3cgQS5iKEEubHIo
+dGhpcyxiLmdXYSgpLGIuZ25kKCksYi5nVm0oKSkpfSwKdG9TdHJpbmcoKXtyZXR1cm4gdGhpcy53KHRo
+aXMpfX0KQS5aZC5wcm90b3R5cGU9ewp3KGEpe3JldHVybiIifSwKJGlHejoxfQpBLk0ucHJvdG90eXBl
+PXsKZ0EoYSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LAp3KGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5j
+aGFyQ29kZUF0KDApPT0wP3M6c30sCiRpQkw6MX0KQS5uMS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBz
+LHIscSxwCnQuSS5hKGEpCkEubihiKQpzPUIueEIuT1koYiwiPSIpCmlmKHM9PT0tMSl7aWYoYiE9PSIi
+KWEuWTUoMCxBLmt1KGIsMCxiLmxlbmd0aCx0aGlzLmEsITApLCIiKX1lbHNlIGlmKHMhPT0wKXtyPUIu
+eEIuTmooYiwwLHMpCnE9Qi54Qi55bihiLHMrMSkKcD10aGlzLmEKYS5ZNSgwLEEua3UociwwLHIubGVu
+Z3RoLHAsITApLEEua3UocSwwLHEubGVuZ3RoLHAsITApKX1yZXR1cm4gYX0sCiRTOjI2fQpBLmNTLnBy
+b3RvdHlwZT17CiQyKGEsYil7dGhyb3cgQS5iKEEucnIoIklsbGVnYWwgSVB2NCBhZGRyZXNzLCAiK2Es
+dGhpcy5hLGIpKX0sCiRTOjI0fQpBLlZDLnByb3RvdHlwZT17CiQyKGEsYil7dGhyb3cgQS5iKEEucnIo
+IklsbGVnYWwgSVB2NiBhZGRyZXNzLCAiK2EsdGhpcy5hLGIpKX0sCiRTOjE5fQpBLkpULnByb3RvdHlw
 ZT17CiQyKGEsYil7dmFyIHMKaWYoYi1hPjQpdGhpcy5hLiQyKCJhbiBJUHY2IHBhcnQgY2FuIG9ubHkg
-Y29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzIixhKQpzPVAuUUEoQy54Qi5Oaih0aGlzLmIs
+Y29udGFpbiBhIG1heGltdW0gb2YgNCBoZXggZGlnaXRzIixhKQpzPUEuUUEoQi54Qi5Oaih0aGlzLmIs
 YSxiKSwxNikKaWYoczwwfHxzPjY1NTM1KXRoaXMuYS4kMigiZWFjaCBwYXJ0IG11c3QgYmUgaW4gdGhl
-IHJhbmdlIG9mIGAweDAuLjB4RkZGRmAiLGEpCnJldHVybiBzfSwKJFM6MjB9ClAuRG4ucHJvdG90eXBl
-PXsKZ25EKCl7dmFyIHMscixxLHA9dGhpcyxvPXAueAppZihvPT1udWxsKXtvPXAuYQpzPW8ubGVuZ3Ro
-IT09MD8iIitvKyI6IjoiIgpyPXAuYwpxPXI9PW51bGwKaWYoIXF8fG89PT0iZmlsZSIpe289cysiLy8i
-CnM9cC5iCmlmKHMubGVuZ3RoIT09MClvPW8rcysiQCIKaWYoIXEpbys9cgpzPXAuZAppZihzIT1udWxs
-KW89bysiOiIrSC5FaihzKX1lbHNlIG89cwpvKz1wLmUKcz1wLmYKaWYocyE9bnVsbClvPW8rIj8iK3MK
-cz1wLnIKaWYocyE9bnVsbClvPW8rIiMiK3MKbz1vLmNoYXJDb2RlQXQoMCk9PTA/bzpvCmlmKHAueD09
-bnVsbClwLng9bwplbHNlIG89SC52KEguaigiX3RleHQiKSl9cmV0dXJuIG99LApnRmooKXt2YXIgcyxy
-PXRoaXMscT1yLnkKaWYocT09bnVsbCl7cz1yLmUKaWYocy5sZW5ndGghPT0wJiZDLnhCLlcocywwKT09
-PTQ3KXM9Qy54Qi55bihzLDEpCnE9cy5sZW5ndGg9PT0wP0MueEQ6UC5BRihuZXcgSC5sSihILlFJKHMu
-c3BsaXQoIi8iKSx0LnMpLHQuZE8uYShQLlBIKCkpLHQuZG8pLHQuTikKaWYoci55PT1udWxsKXIuc0tw
-KHEpCmVsc2UgcT1ILnYoSC5qKCJwYXRoU2VnbWVudHMiKSl9cmV0dXJuIHF9LApnaU8oYSl7dmFyIHM9
-dGhpcyxyPXMuegppZihyPT1udWxsKXtyPUMueEIuZ2lPKHMuZ25EKCkpCmlmKHMuej09bnVsbClzLno9
-cgplbHNlIHI9SC52KEguaigiaGFzaENvZGUiKSl9cmV0dXJuIHJ9LApnaFkoKXt2YXIgcz10aGlzLHI9
-cy5RCmlmKHI9PW51bGwpe3I9cy5mCnI9bmV3IFAuR2ooUC5XWChyPT1udWxsPyIiOnIpLHQuZHcpCmlm
-KHMuUT09bnVsbClzLnNOTShyKQplbHNlIHI9SC52KEguaigicXVlcnlQYXJhbWV0ZXJzIikpfXJldHVy
-biByfSwKZ2t1KCl7cmV0dXJuIHRoaXMuYn0sCmdKZihhKXt2YXIgcz10aGlzLmMKaWYocz09bnVsbCly
-ZXR1cm4iIgppZihDLnhCLm4ocywiWyIpKXJldHVybiBDLnhCLk5qKHMsMSxzLmxlbmd0aC0xKQpyZXR1
-cm4gc30sCmd0cChhKXt2YXIgcz10aGlzLmQKcmV0dXJuIHM9PW51bGw/UC53Syh0aGlzLmEpOnN9LApn
-dFAoKXt2YXIgcz10aGlzLmYKcmV0dXJuIHM9PW51bGw/IiI6c30sCmdLYSgpe3ZhciBzPXRoaXMucgpy
-ZXR1cm4gcz09bnVsbD8iIjpzfSwKaEIoYSl7dmFyIHM9dGhpcy5hCmlmKGEubGVuZ3RoIT09cy5sZW5n
-dGgpcmV0dXJuITEKcmV0dXJuIFAuTlIoYSxzKX0sCm5tKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxr
-LGo9dGhpcwp0LmM5LmEoYikKcz1qLmEKcj1zPT09ImZpbGUiCnE9ai5iCnA9ai5kCm89ai5jCmlmKCEo
-byE9bnVsbCkpbz1xLmxlbmd0aCE9PTB8fHAhPW51bGx8fHI/IiI6bnVsbApuPWouZQppZighciltPW8h
-PW51bGwmJm4ubGVuZ3RoIT09MAplbHNlIG09ITAKaWYobSYmIUMueEIubihuLCIvIikpbj0iLyIrbgps
-PW4Kaz1QLmxlKG51bGwsMCwwLGIpCnJldHVybiBuZXcgUC5EbihzLHEsbyxwLGwsayxqLnIpfSwKSmgo
-YSxiKXt2YXIgcyxyLHEscCxvLG4KZm9yKHM9MCxyPTA7Qy54Qi5RaShiLCIuLi8iLHIpOyl7cis9Mzsr
-K3N9cT1DLnhCLmNuKGEsIi8iKQp3aGlsZSghMCl7aWYoIShxPjAmJnM+MCkpYnJlYWsKcD1DLnhCLlBr
-KGEsIi8iLHEtMSkKaWYocDwwKWJyZWFrCm89cS1wCm49byE9PTIKaWYoIW58fG89PT0zKWlmKEMueEIu
-TyhhLHArMSk9PT00NiluPSFufHxDLnhCLk8oYSxwKzIpPT09NDYKZWxzZSBuPSExCmVsc2Ugbj0hMQpp
-ZihuKWJyZWFrOy0tcwpxPXB9cmV0dXJuIEMueEIuaTcoYSxxKzEsbnVsbCxDLnhCLnluKGIsci0zKnMp
-KX0sClpJKGEpe3JldHVybiB0aGlzLm1TKFAuaEsoYSkpfSwKbVMoYSl7dmFyIHMscixxLHAsbyxuLG0s
-bCxrLGosaT10aGlzLGg9bnVsbAppZihhLmdGaSgpLmxlbmd0aCE9PTApe3M9YS5nRmkoKQppZihhLmdj
-aigpKXtyPWEuZ2t1KCkKcT1hLmdKZihhKQpwPWEuZ3hBKCk/YS5ndHAoYSk6aH1lbHNle3A9aApxPXAK
-cj0iIn1vPVAueGUoYS5nSWkoYSkpCm49YS5nUUQoKT9hLmd0UCgpOmh9ZWxzZXtzPWkuYQppZihhLmdj
-aigpKXtyPWEuZ2t1KCkKcT1hLmdKZihhKQpwPVAud0IoYS5neEEoKT9hLmd0cChhKTpoLHMpCm89UC54
-ZShhLmdJaShhKSkKbj1hLmdRRCgpP2EuZ3RQKCk6aH1lbHNle3I9aS5iCnE9aS5jCnA9aS5kCm89aS5l
-CmlmKGEuZ0lpKGEpPT09IiIpbj1hLmdRRCgpP2EuZ3RQKCk6aS5mCmVsc2V7bT1QLnVqKGksbykKaWYo
-bT4wKXtsPUMueEIuTmoobywwLG0pCm89YS5ndFQoKT9sK1AueGUoYS5nSWkoYSkpOmwrUC54ZShpLkpo
-KEMueEIueW4obyxsLmxlbmd0aCksYS5nSWkoYSkpKX1lbHNlIGlmKGEuZ3RUKCkpbz1QLnhlKGEuZ0lp
-KGEpKQplbHNlIGlmKG8ubGVuZ3RoPT09MClpZihxPT1udWxsKW89cy5sZW5ndGg9PT0wP2EuZ0lpKGEp
-OlAueGUoYS5nSWkoYSkpCmVsc2Ugbz1QLnhlKCIvIithLmdJaShhKSkKZWxzZXtrPWkuSmgobyxhLmdJ
-aShhKSkKaj1zLmxlbmd0aD09PTAKaWYoIWp8fHEhPW51bGx8fEMueEIubihvLCIvIikpbz1QLnhlKGsp
-CmVsc2Ugbz1QLndGKGssIWp8fHEhPW51bGwpfW49YS5nUUQoKT9hLmd0UCgpOmh9fX1yZXR1cm4gbmV3
-IFAuRG4ocyxyLHEscCxvLG4sYS5nWjgoKT9hLmdLYSgpOmgpfSwKZ2NqKCl7cmV0dXJuIHRoaXMuYyE9
-bnVsbH0sCmd4QSgpe3JldHVybiB0aGlzLmQhPW51bGx9LApnUUQoKXtyZXR1cm4gdGhpcy5mIT1udWxs
-fSwKZ1o4KCl7cmV0dXJuIHRoaXMuciE9bnVsbH0sCmd0VCgpe3JldHVybiBDLnhCLm4odGhpcy5lLCIv
-Iil9LAp0NCgpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihxIT09IiImJnEhPT0iZmlsZSIpdGhyb3cgSC5i
-KFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAiK3ErIiBVUkkiKSkKcT1yLmYK
-aWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBILmIoUC5MNCh1LmkpKQpxPXIucgppZigocT09bnVs
-bD8iIjpxKSE9PSIiKXRocm93IEguYihQLkw0KHUubCkpCnE9JC53USgpCmlmKHEpcT1QLm1uKHIpCmVs
-c2V7aWYoci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUgudihQLkw0KHUuaikpCnM9ci5nRmooKQpQLmtF
-KHMsITEpCnE9UC5sKEMueEIubihyLmUsIi8iKT8iIisiLyI6IiIscywiLyIpCnE9cS5jaGFyQ29kZUF0
-KDApPT0wP3E6cX1yZXR1cm4gcX0sCncoYSl7cmV0dXJuIHRoaXMuZ25EKCl9LApETihhLGIpe3ZhciBz
-LHIscT10aGlzCmlmKGI9PW51bGwpcmV0dXJuITEKaWYocT09PWIpcmV0dXJuITAKaWYodC5kRC5iKGIp
-KWlmKHEuYT09PWIuZ0ZpKCkpaWYocS5jIT1udWxsPT09Yi5nY2ooKSlpZihxLmI9PT1iLmdrdSgpKWlm
-KHEuZ0pmKHEpPT09Yi5nSmYoYikpaWYocS5ndHAocSk9PT1iLmd0cChiKSlpZihxLmU9PT1iLmdJaShi
-KSl7cz1xLmYKcj1zPT1udWxsCmlmKCFyPT09Yi5nUUQoKSl7aWYocilzPSIiCmlmKHM9PT1iLmd0UCgp
-KXtzPXEucgpyPXM9PW51bGwKaWYoIXI9PT1iLmdaOCgpKXtpZihyKXM9IiIKcz1zPT09Yi5nS2EoKX1l
-bHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQpl
-bHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKcmV0dXJuIHN9LApzS3AoYSl7dGhp
-cy55PXQuYmsuYShhKX0sCnNOTShhKXt0aGlzLlE9dC5jWi5hKGEpfSwKJGlpRDoxLApnRmkoKXtyZXR1
-cm4gdGhpcy5hfSwKZ0lpKGEpe3JldHVybiB0aGlzLmV9fQpQLlJaLnByb3RvdHlwZT17CiQxKGEpe3Jl
-dHVybiBQLmVQKEMuWkosSC5uKGEpLEMueE0sITEpfSwKJFM6Mn0KUC5NRS5wcm90b3R5cGU9ewokMihh
-LGIpe3ZhciBzPXRoaXMuYixyPXRoaXMuYQpzLmErPXIuYQpyLmE9IiYiCnI9cy5hKz1QLmVQKEMuRjMs
-YSxDLnhNLCEwKQppZihiIT1udWxsJiZiLmxlbmd0aCE9PTApe3MuYT1yKyI9IgpzLmErPVAuZVAoQy5G
-MyxiLEMueE0sITApfX0sCiRTOjIyfQpQLnk1LnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscgpILm4o
-YSkKaWYoYj09bnVsbHx8dHlwZW9mIGI9PSJzdHJpbmciKXRoaXMuYS4kMihhLEguayhiKSkKZWxzZSBm
-b3Iocz1KLklUKHQuYS5hKGIpKSxyPXRoaXMuYTtzLkYoKTspci4kMihhLEgubihzLmdsKCkpKX0sCiRT
-OjExfQpQLlBFLnByb3RvdHlwZT17CmdsUigpe3ZhciBzLHIscSxwLG89dGhpcyxuPW51bGwsbT1vLmMK
-aWYobT09bnVsbCl7bT1vLmIKaWYoMD49bS5sZW5ndGgpcmV0dXJuIEguT0gobSwwKQpzPW8uYQptPW1b
-MF0rMQpyPUMueEIuWFUocywiPyIsbSkKcT1zLmxlbmd0aAppZihyPj0wKXtwPVAuUEkocyxyKzEscSxD
-LlZDLCExKQpxPXJ9ZWxzZSBwPW4KbT1vLmM9bmV3IFAucWUoImRhdGEiLCIiLG4sbixQLlBJKHMsbSxx
-LEMuV2QsITEpLHAsbil9cmV0dXJuIG19LAp3KGEpe3ZhciBzLHI9dGhpcy5iCmlmKDA+PXIubGVuZ3Ro
-KXJldHVybiBILk9IKHIsMCkKcz10aGlzLmEKcmV0dXJuIHJbMF09PT0tMT8iZGF0YToiK3M6c319ClAu
-eUkucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcz10aGlzLmEKaWYoYT49cy5sZW5ndGgpcmV0dXJuIEgu
-T0gocyxhKQpzPXNbYV0KQy5OQS5kdShzLDAsOTYsYikKcmV0dXJuIHN9LAokUzoyM30KUC5jNi5wcm90
-b3R5cGU9ewokMyhhLGIsYyl7dmFyIHMscixxCmZvcihzPWIubGVuZ3RoLHI9MDtyPHM7KytyKXtxPUMu
-eEIuVyhiLHIpXjk2CmlmKHE+PTk2KXJldHVybiBILk9IKGEscSkKYVtxXT1jfX0sCiRTOjE4fQpQLnFk
-LnByb3RvdHlwZT17CiQzKGEsYixjKXt2YXIgcyxyLHEKZm9yKHM9Qy54Qi5XKGIsMCkscj1DLnhCLlco
-YiwxKTtzPD1yOysrcyl7cT0oc145Nik+Pj4wCmlmKHE+PTk2KXJldHVybiBILk9IKGEscSkKYVtxXT1j
-fX0sCiRTOjE4fQpQLlVmLnByb3RvdHlwZT17Cmdjaigpe3JldHVybiB0aGlzLmM+MH0sCmd4QSgpe3Jl
-dHVybiB0aGlzLmM+MCYmdGhpcy5kKzE8dGhpcy5lfSwKZ1FEKCl7cmV0dXJuIHRoaXMuZjx0aGlzLnJ9
-LApnWjgoKXtyZXR1cm4gdGhpcy5yPHRoaXMuYS5sZW5ndGh9LApndFQoKXtyZXR1cm4gQy54Qi5RaSh0
-aGlzLmEsIi8iLHRoaXMuZSl9LApnRmkoKXt2YXIgcz10aGlzLngKcmV0dXJuIHM9PW51bGw/dGhpcy54
-PXRoaXMuVTIoKTpzfSwKVTIoKXt2YXIgcyxyPXRoaXMscT1yLmIKaWYocTw9MClyZXR1cm4iIgpzPXE9
-PT00CmlmKHMmJkMueEIubihyLmEsImh0dHAiKSlyZXR1cm4iaHR0cCIKaWYocT09PTUmJkMueEIubihy
-LmEsImh0dHBzIikpcmV0dXJuImh0dHBzIgppZihzJiZDLnhCLm4oci5hLCJmaWxlIikpcmV0dXJuImZp
-bGUiCmlmKHE9PT03JiZDLnhCLm4oci5hLCJwYWNrYWdlIikpcmV0dXJuInBhY2thZ2UiCnJldHVybiBD
-LnhCLk5qKHIuYSwwLHEpfSwKZ2t1KCl7dmFyIHM9dGhpcy5jLHI9dGhpcy5iKzMKcmV0dXJuIHM+cj9D
-LnhCLk5qKHRoaXMuYSxyLHMtMSk6IiJ9LApnSmYoYSl7dmFyIHM9dGhpcy5jCnJldHVybiBzPjA/Qy54
-Qi5Oaih0aGlzLmEscyx0aGlzLmQpOiIifSwKZ3RwKGEpe3ZhciBzLHI9dGhpcwppZihyLmd4QSgpKXJl
-dHVybiBQLlFBKEMueEIuTmooci5hLHIuZCsxLHIuZSksbnVsbCkKcz1yLmIKaWYocz09PTQmJkMueEIu
-bihyLmEsImh0dHAiKSlyZXR1cm4gODAKaWYocz09PTUmJkMueEIubihyLmEsImh0dHBzIikpcmV0dXJu
-IDQ0MwpyZXR1cm4gMH0sCmdJaShhKXtyZXR1cm4gQy54Qi5Oaih0aGlzLmEsdGhpcy5lLHRoaXMuZil9
-LApndFAoKXt2YXIgcz10aGlzLmYscj10aGlzLnIKcmV0dXJuIHM8cj9DLnhCLk5qKHRoaXMuYSxzKzEs
-cik6IiJ9LApnS2EoKXt2YXIgcz10aGlzLnIscj10aGlzLmEKcmV0dXJuIHM8ci5sZW5ndGg/Qy54Qi55
-bihyLHMrMSk6IiJ9LApnRmooKXt2YXIgcyxyLHE9dGhpcy5lLHA9dGhpcy5mLG89dGhpcy5hCmlmKEMu
-eEIuUWkobywiLyIscSkpKytxCmlmKHE9PT1wKXJldHVybiBDLnhECnM9SC5RSShbXSx0LnMpCmZvcihy
-PXE7cjxwOysrcilpZihDLnhCLk8obyxyKT09PTQ3KXtDLk5tLmkocyxDLnhCLk5qKG8scSxyKSkKcT1y
-KzF9Qy5ObS5pKHMsQy54Qi5OaihvLHEscCkpCnJldHVybiBQLkFGKHMsdC5OKX0sCmdoWSgpe2lmKHRo
-aXMuZj49dGhpcy5yKXJldHVybiBDLkNNCnJldHVybiBuZXcgUC5HaihQLldYKHRoaXMuZ3RQKCkpLHQu
-ZHcpfSwKa1goYSl7dmFyIHM9dGhpcy5kKzEKcmV0dXJuIHMrYS5sZW5ndGg9PT10aGlzLmUmJkMueEIu
-UWkodGhpcy5hLGEscyl9LApOOSgpe3ZhciBzPXRoaXMscj1zLnIscT1zLmEKaWYocj49cS5sZW5ndGgp
-cmV0dXJuIHMKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmoocSwwLHIpLHMuYixzLmMscy5kLHMuZSxzLmYs
-cixzLngpfSwKbm0oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCnQuYzku
-YShiKQpzPWkuZ0ZpKCkKcj1zPT09ImZpbGUiCnE9aS5jCnA9cT4wP0MueEIuTmooaS5hLGkuYiszLHEp
-OiIiCm89aS5neEEoKT9pLmd0cChpKTpoCnE9aS5jCmlmKHE+MCluPUMueEIuTmooaS5hLHEsaS5kKQpl
-bHNlIG49cC5sZW5ndGghPT0wfHxvIT1udWxsfHxyPyIiOmgKcT1pLmEKbT1DLnhCLk5qKHEsaS5lLGku
-ZikKaWYoIXIpbD1uIT1udWxsJiZtLmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFDLnhCLm4obSwi
-LyIpKW09Ii8iK20Kaz1QLmxlKGgsMCwwLGIpCmw9aS5yCmo9bDxxLmxlbmd0aD9DLnhCLnluKHEsbCsx
-KTpoCnJldHVybiBuZXcgUC5EbihzLHAsbixvLG0sayxqKX0sClpJKGEpe3JldHVybiB0aGlzLm1TKFAu
-aEsoYSkpfSwKbVMoYSl7aWYoYSBpbnN0YW5jZW9mIFAuVWYpcmV0dXJuIHRoaXMudTEodGhpcyxhKQpy
-ZXR1cm4gdGhpcy5SZSgpLm1TKGEpfSwKdTEoYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgs
-ZyxmLGUsZCxjPWIuYgppZihjPjApcmV0dXJuIGIKcz1iLmMKaWYocz4wKXtyPWEuYgppZihyPD0wKXJl
-dHVybiBiCnE9cj09PTQKaWYocSYmQy54Qi5uKGEuYSwiZmlsZSIpKXA9Yi5lIT09Yi5mCmVsc2UgaWYo
-cSYmQy54Qi5uKGEuYSwiaHR0cCIpKXA9IWIua1goIjgwIikKZWxzZSBwPSEocj09PTUmJkMueEIubihh
-LmEsImh0dHBzIikpfHwhYi5rWCgiNDQzIikKaWYocCl7bz1yKzEKcmV0dXJuIG5ldyBQLlVmKEMueEIu
-TmooYS5hLDAsbykrQy54Qi55bihiLmEsYysxKSxyLHMrbyxiLmQrbyxiLmUrbyxiLmYrbyxiLnIrbyxh
-LngpfWVsc2UgcmV0dXJuIHRoaXMuUmUoKS5tUyhiKX1uPWIuZQpjPWIuZgppZihuPT09Yyl7cz1iLnIK
-aWYoYzxzKXtyPWEuZgpvPXItYwpyZXR1cm4gbmV3IFAuVWYoQy54Qi5OaihhLmEsMCxyKStDLnhCLnlu
-KGIuYSxjKSxhLmIsYS5jLGEuZCxhLmUsYytvLHMrbyxhLngpfWM9Yi5hCmlmKHM8Yy5sZW5ndGgpe3I9
-YS5yCnJldHVybiBuZXcgUC5VZihDLnhCLk5qKGEuYSwwLHIpK0MueEIueW4oYyxzKSxhLmIsYS5jLGEu
-ZCxhLmUsYS5mLHMrKHItcyksYS54KX1yZXR1cm4gYS5OOSgpfXM9Yi5hCmlmKEMueEIuUWkocywiLyIs
-bikpe209YS5lCmw9UC5SeCh0aGlzKQprPWw+MD9sOm0Kbz1rLW4KcmV0dXJuIG5ldyBQLlVmKEMueEIu
-TmooYS5hLDAsaykrQy54Qi55bihzLG4pLGEuYixhLmMsYS5kLG0sYytvLGIucitvLGEueCl9aj1hLmUK
-aT1hLmYKaWYoaj09PWkmJmEuYz4wKXtmb3IoO0MueEIuUWkocywiLi4vIixuKTspbis9MwpvPWotbisx
-CnJldHVybiBuZXcgUC5VZihDLnhCLk5qKGEuYSwwLGopKyIvIitDLnhCLnluKHMsbiksYS5iLGEuYyxh
-LmQsaixjK28sYi5yK28sYS54KX1oPWEuYQpsPVAuUngodGhpcykKaWYobD49MClnPWwKZWxzZSBmb3Io
-Zz1qO0MueEIuUWkoaCwiLi4vIixnKTspZys9MwpmPTAKd2hpbGUoITApe2U9biszCmlmKCEoZTw9YyYm
-Qy54Qi5RaShzLCIuLi8iLG4pKSlicmVhazsrK2YKbj1lfWZvcihkPSIiO2k+Zzspey0taQppZihDLnhC
-Lk8oaCxpKT09PTQ3KXtpZihmPT09MCl7ZD0iLyIKYnJlYWt9LS1mCmQ9Ii8ifX1pZihpPT09ZyYmYS5i
-PD0wJiYhQy54Qi5RaShoLCIvIixqKSl7bi09ZiozCmQ9IiJ9bz1pLW4rZC5sZW5ndGgKcmV0dXJuIG5l
-dyBQLlVmKEMueEIuTmooaCwwLGkpK2QrQy54Qi55bihzLG4pLGEuYixhLmMsYS5kLGosYytvLGIucitv
-LGEueCl9LAp0NCgpe3ZhciBzLHIscT10aGlzLHA9cS5iCmlmKHA+PTApe3M9IShwPT09NCYmQy54Qi5u
-KHEuYSwiZmlsZSIpKQpwPXN9ZWxzZSBwPSExCmlmKHApdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRy
-YWN0IGEgZmlsZSBwYXRoIGZyb20gYSAiK3EuZ0ZpKCkrIiBVUkkiKSkKcD1xLmYKcz1xLmEKaWYocDxz
-Lmxlbmd0aCl7aWYocDxxLnIpdGhyb3cgSC5iKFAuTDQodS5pKSkKdGhyb3cgSC5iKFAuTDQodS5sKSl9
-cj0kLndRKCkKaWYocilwPVAubW4ocSkKZWxzZXtpZihxLmM8cS5kKUgudihQLkw0KHUuaikpCnA9Qy54
-Qi5OaihzLHEuZSxwKX1yZXR1cm4gcH0sCmdpTyhhKXt2YXIgcz10aGlzLnkKcmV0dXJuIHM9PW51bGw/
-dGhpcy55PUMueEIuZ2lPKHRoaXMuYSk6c30sCkROKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQppZih0
-aGlzPT09YilyZXR1cm4hMApyZXR1cm4gdC5kRC5iKGIpJiZ0aGlzLmE9PT1iLncoMCl9LApSZSgpe3Zh
-ciBzPXRoaXMscj1udWxsLHE9cy5nRmkoKSxwPXMuZ2t1KCksbz1zLmM+MD9zLmdKZihzKTpyLG49cy5n
-eEEoKT9zLmd0cChzKTpyLG09cy5hLGw9cy5mLGs9Qy54Qi5OaihtLHMuZSxsKSxqPXMucgpsPWw8aj9z
-Lmd0UCgpOnIKcmV0dXJuIG5ldyBQLkRuKHEscCxvLG4sayxsLGo8bS5sZW5ndGg/cy5nS2EoKTpyKX0s
-CncoYSl7cmV0dXJuIHRoaXMuYX0sCiRpaUQ6MX0KUC5xZS5wcm90b3R5cGU9e30KVy5xRS5wcm90b3R5
-cGU9e30KVy5HaC5wcm90b3R5cGU9ewpzTFUoYSxiKXthLmhyZWY9Yn0sCncoYSl7cmV0dXJuIFN0cmlu
-ZyhhKX0sCiRpR2g6MX0KVy5mWS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLnJa
-LnByb3RvdHlwZT17JGlyWjoxfQpXLkF6LnByb3RvdHlwZT17JGlBejoxfQpXLlFQLnByb3RvdHlwZT17
-JGlRUDoxfQpXLm54LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH19Clcub0oucHJvdG90
-eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5pZC5wcm90b3R5cGU9e30KVy5RRi5wcm90b3R5
-cGU9e30KVy5OaC5wcm90b3R5cGU9ewp3KGEpe3JldHVybiBTdHJpbmcoYSl9fQpXLmFlLnByb3RvdHlw
-ZT17CkRjKGEsYil7cmV0dXJuIGEuY3JlYXRlSFRNTERvY3VtZW50KGIpfX0KVy5JQi5wcm90b3R5cGU9
-ewp3KGEpe3ZhciBzLHI9YS5sZWZ0CnIudG9TdHJpbmcKcj0iUmVjdGFuZ2xlICgiK0guRWoocikrIiwg
-IgpzPWEudG9wCnMudG9TdHJpbmcKcz1yK0guRWoocykrIikgIgpyPWEud2lkdGgKci50b1N0cmluZwpy
-PXMrSC5FaihyKSsiIHggIgpzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcmV0dXJuIHIrSC5FaihzKX0sCkRO
-KGEsYil7dmFyIHMscgppZihiPT1udWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRv
-U3RyaW5nCnI9Yi5sZWZ0CnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIu
-dG9wCnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRv
-U3RyaW5nCmlmKHM9PT1yKXtzPWEuaGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5n
-CnI9cz09PXIKcz1yfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4g
-c30sCmdpTyhhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpwPUMuQ0QuZ2lPKHApCnM9YS50
-b3AKcy50b1N0cmluZwpzPUMuQ0QuZ2lPKHMpCnI9YS53aWR0aApyLnRvU3RyaW5nCnI9Qy5DRC5naU8o
-cikKcT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiBXLnJFKHAscyxyLEMuQ0QuZ2lPKHEpKX0sCiRp
-dG46MX0KVy5uNy5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLnd6LnByb3RvdHlw
-ZT17CmdBKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKcShhLGIpe3ZhciBzCkguSVooYikKcz10aGlz
-LmEKaWYoYjwwfHxiPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLGIpCnJldHVybiB0aGlzLiR0aS5jLmEo
-c1tiXSl9LApZNShhLGIsYyl7dGhpcy4kdGkuYy5hKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9k
-aWZ5IGxpc3QiKSl9fQpXLmN2LnByb3RvdHlwZT17CmdRZyhhKXtyZXR1cm4gbmV3IFcuaTcoYSl9LApn
-UChhKXtyZXR1cm4gbmV3IFcuSTQoYSl9LApzUChhLGIpe3ZhciBzCnQuTy5hKGIpCnM9dGhpcy5nUChh
-KQpzLlYxKDApCnMuRlYoMCxiKX0sCncoYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKRkYoYSl7dmFyIHM9
-ISFhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQKaWYocylhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQpl
-bHNlIGEuc2Nyb2xsSW50b1ZpZXcoKX0sCm56KGEsYixjLGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxk
-LGUpCnN3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2Rl
-CnMudG9TdHJpbmcKSi5FaChzLHIsYSkKYnJlYWsKY2FzZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rl
-cwp0aGlzLm1LKGEscixzLmxlbmd0aD4wP3NbMF06bnVsbCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEu
-YXBwZW5kQ2hpbGQocikKYnJlYWsKY2FzZSJhZnRlcmVuZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmlu
-ZwpKLkVoKHMscixhLm5leHRTaWJsaW5nKQpicmVhawpkZWZhdWx0OkgudihQLnhZKCJJbnZhbGlkIHBv
-c2l0aW9uICIrYixudWxsKSl9fSwKcjYoYSxiLGMsZCl7dmFyIHMscixxLHAKaWYoYz09bnVsbCl7aWYo
-ZD09bnVsbCl7cz0kLmx0CmlmKHM9PW51bGwpe3M9SC5RSShbXSx0LnUpCnI9bmV3IFcudkQocykKQy5O
-bS5pKHMsVy5UdyhudWxsKSkKQy5ObS5pKHMsVy5CbCgpKQokLmx0PXIKZD1yfWVsc2UgZD1zfXM9JC5F
-VQppZihzPT1udWxsKXtzPW5ldyBXLktvKGQpCiQuRVU9cwpjPXN9ZWxzZXtzLmE9ZApjPXN9fWVsc2Ug
-aWYoZCE9bnVsbCl0aHJvdyBILmIoUC54WSgidmFsaWRhdG9yIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiB0
-cmVlU2FuaXRpemVyIGlzIG51bGwiLG51bGwpKQppZigkLnhvPT1udWxsKXtzPWRvY3VtZW50CnI9cy5p
-bXBsZW1lbnRhdGlvbgpyLnRvU3RyaW5nCnI9Qy5tSC5EYyhyLCIiKQokLnhvPXIKJC5CTz1yLmNyZWF0
-ZVJhbmdlKCkKcj0kLnhvLmNyZWF0ZUVsZW1lbnQoImJhc2UiKQp0LmNSLmEocikKcz1zLmJhc2VVUkkK
-cy50b1N0cmluZwpyLmhyZWY9cwokLnhvLmhlYWQuYXBwZW5kQ2hpbGQocil9cz0kLnhvCmlmKHMuYm9k
-eT09bnVsbCl7cj1zLmNyZWF0ZUVsZW1lbnQoImJvZHkiKQpDLkJaLnNHUyhzLHQubS5hKHIpKX1zPSQu
-eG8KaWYodC5tLmIoYSkpe3M9cy5ib2R5CnMudG9TdHJpbmcKcT1zfWVsc2V7cy50b1N0cmluZwpxPXMu
-Y3JlYXRlRWxlbWVudChhLnRhZ05hbWUpCiQueG8uYm9keS5hcHBlbmRDaGlsZChxKX1pZigiY3JlYXRl
-Q29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlJiYhQy5ObS50ZyhDLlNx
-LGEudGFnTmFtZSkpeyQuQk8uc2VsZWN0Tm9kZUNvbnRlbnRzKHEpCnM9JC5CTwpzLnRvU3RyaW5nCnA9
-cy5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoYj09bnVsbD8ibnVsbCI6Yil9ZWxzZXtKLndmKHEsYikK
-cD0kLnhvLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpmb3IoO3M9cS5maXJzdENoaWxkLHMhPW51bGw7
-KXAuYXBwZW5kQ2hpbGQocyl9aWYocSE9PSQueG8uYm9keSlKLkx0KHEpCmMuUG4ocCkKZG9jdW1lbnQu
-YWRvcHROb2RlKHApCnJldHVybiBwfSwKQUgoYSxiLGMpe3JldHVybiB0aGlzLnI2KGEsYixjLG51bGwp
-fSwKc2hmKGEsYil7dGhpcy5ZQyhhLGIpfSwKcGsoYSxiLGMpe3RoaXMuc2E0KGEsbnVsbCkKYS5hcHBl
-bmRDaGlsZCh0aGlzLnI2KGEsYixudWxsLGMpKX0sCllDKGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51
-bGwpfSwKc1JOKGEsYil7YS5pbm5lckhUTUw9Yn0sCmducyhhKXtyZXR1cm4gYS50YWdOYW1lfSwKZ1Zs
-KGEpe3JldHVybiBuZXcgVy5DcShhLCJjbGljayIsITEsdC5RKX0sCiRpY3Y6MX0KVy5Ddi5wcm90b3R5
-cGU9ewokMShhKXtyZXR1cm4gdC5oLmIodC5BLmEoYSkpfSwKJFM6MjV9ClcuZWEucHJvdG90eXBlPXsk
-aWVhOjF9ClcuRDAucHJvdG90eXBlPXsKT24oYSxiLGMsZCl7dC5idy5hKGMpCmlmKGMhPW51bGwpdGhp
-cy52KGEsYixjLGQpfSwKQihhLGIsYyl7cmV0dXJuIHRoaXMuT24oYSxiLGMsbnVsbCl9LAp2KGEsYixj
-LGQpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoYixILnRSKHQuYncuYShjKSwxKSxkKX0sCiRpRDA6
-MX0KVy5oSC5wcm90b3R5cGU9eyRpaEg6MX0KVy5oNC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5s
-ZW5ndGh9fQpXLmJyLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH19ClcuVmIucHJvdG90
-eXBlPXsKc0dTKGEsYil7YS5ib2R5PWJ9fQpXLmZKLnByb3RvdHlwZT17CmVvKGEsYixjLGQpe3JldHVy
-biBhLm9wZW4oYixjLCEwKX0sCiRpZko6MX0KVy53YS5wcm90b3R5cGU9e30KVy5TZy5wcm90b3R5cGU9
-eyRpU2c6MX0KVy51OC5wcm90b3R5cGU9ewpnRHIoYSl7aWYoIm9yaWdpbiIgaW4gYSlyZXR1cm4gYS5v
-cmlnaW4KcmV0dXJuIGEucHJvdG9jb2wrIi8vIithLmhvc3R9LAp3KGEpe3JldHVybiBTdHJpbmcoYSl9
-LAokaXU4OjF9ClcuQWoucHJvdG90eXBlPXskaUFqOjF9ClcuZTcucHJvdG90eXBlPXsKZ3I4KGEpe3Zh
-ciBzPXRoaXMuYSxyPXMuY2hpbGROb2Rlcy5sZW5ndGgKaWYocj09PTApdGhyb3cgSC5iKFAuUFYoIk5v
-IGVsZW1lbnRzIikpCmlmKHI+MSl0aHJvdyBILmIoUC5QVigiTW9yZSB0aGFuIG9uZSBlbGVtZW50Iikp
-CnM9cy5maXJzdENoaWxkCnMudG9TdHJpbmcKcmV0dXJuIHN9LApGVihhLGIpe3ZhciBzLHIscSxwLG8K
-dC5laC5hKGIpCmlmKGIgaW5zdGFuY2VvZiBXLmU3KXtzPWIuYQpyPXRoaXMuYQppZihzIT09cilmb3Io
-cT1zLmNoaWxkTm9kZXMubGVuZ3RoLHA9MDtwPHE7KytwKXtvPXMuZmlyc3RDaGlsZApvLnRvU3RyaW5n
-CnIuYXBwZW5kQ2hpbGQobyl9cmV0dXJufWZvcihzPWIuZ20oYikscj10aGlzLmE7cy5GKCk7KXIuYXBw
-ZW5kQ2hpbGQocy5nbCgpKX0sClk1KGEsYixjKXt2YXIgcyxyCnQuQS5hKGMpCnM9dGhpcy5hCnI9cy5j
-aGlsZE5vZGVzCmlmKGI8MHx8Yj49ci5sZW5ndGgpcmV0dXJuIEguT0gocixiKQpzLnJlcGxhY2VDaGls
-ZChjLHJbYl0pfSwKZ20oYSl7dmFyIHM9dGhpcy5hLmNoaWxkTm9kZXMKcmV0dXJuIG5ldyBXLlc5KHMs
-cy5sZW5ndGgsSC56SyhzKS5DKCJXOTxHbS5FPiIpKX0sCmdBKGEpe3JldHVybiB0aGlzLmEuY2hpbGRO
-b2Rlcy5sZW5ndGh9LApxKGEsYil7dmFyIHMKSC5JWihiKQpzPXRoaXMuYS5jaGlsZE5vZGVzCmlmKGI8
-MHx8Yj49cy5sZW5ndGgpcmV0dXJuIEguT0gocyxiKQpyZXR1cm4gc1tiXX19ClcuS1YucHJvdG90eXBl
-PXsKd2coYSl7dmFyIHM9YS5wYXJlbnROb2RlCmlmKHMhPW51bGwpcy5yZW1vdmVDaGlsZChhKX0sCkQ0
-KGEpe3ZhciBzCmZvcig7cz1hLmZpcnN0Q2hpbGQscyE9bnVsbDspYS5yZW1vdmVDaGlsZChzKX0sCnco
-YSl7dmFyIHM9YS5ub2RlVmFsdWUKcmV0dXJuIHM9PW51bGw/dGhpcy5VKGEpOnN9LApzYTQoYSxiKXth
-LnRleHRDb250ZW50PWJ9LAptSyhhLGIsYyl7cmV0dXJuIGEuaW5zZXJ0QmVmb3JlKGIsYyl9LAokaUtW
-OjF9ClcuQkgucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0guSVooYikK
-aWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBILmIoUC5DZihiLGEsbnVsbCxudWxsLG51bGwp
-KQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXt0LkEuYShjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGFz
-c2lnbiBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCmd0SChhKXtpZihhLmxlbmd0aD4wKXJl
-dHVybiBhWzBdCnRocm93IEguYihQLlBWKCJObyBlbGVtZW50cyIpKX0sCkUoYSxiKXtpZihiPDB8fGI+
-PWEubGVuZ3RoKXJldHVybiBILk9IKGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGlj
-WDoxLAokaXpNOjF9ClcuU04ucHJvdG90eXBlPXt9ClcuZXcucHJvdG90eXBlPXskaWV3OjF9ClcubHAu
-cHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5UYi5wcm90b3R5cGU9ewpyNihhLGIs
+IHJhbmdlIG9mIGAweDAuLjB4RkZGRmAiLGEpCnJldHVybiBzfSwKJFM6MjB9CkEuRG4ucHJvdG90eXBl
+PXsKZ25EKCl7dmFyIHMscixxLHAsbz10aGlzLG49by54CmlmKG49PT0kKXtzPW8uYQpyPXMubGVuZ3Ro
+IT09MD8iIitzKyI6IjoiIgpxPW8uYwpwPXE9PW51bGwKaWYoIXB8fHM9PT0iZmlsZSIpe3M9cisiLy8i
+CnI9by5iCmlmKHIubGVuZ3RoIT09MClzPXMrcisiQCIKaWYoIXApcys9cQpyPW8uZAppZihyIT1udWxs
+KXM9cysiOiIrQS5FaihyKX1lbHNlIHM9cgpzKz1vLmUKcj1vLmYKaWYociE9bnVsbClzPXMrIj8iK3IK
+cj1vLnIKaWYociE9bnVsbClzPXMrIiMiK3IKQS5DTChvLngsIl90ZXh0IikKbj1vLng9cy5jaGFyQ29k
+ZUF0KDApPT0wP3M6c31yZXR1cm4gbn0sCmdGaigpe3ZhciBzLHIscT10aGlzLHA9cS55CmlmKHA9PT0k
+KXtzPXEuZQppZihzLmxlbmd0aCE9PTAmJkIueEIuVyhzLDApPT09NDcpcz1CLnhCLnluKHMsMSkKcj1z
+Lmxlbmd0aD09PTA/Qi54RDpBLkFGKG5ldyBBLmxKKEEuUUkocy5zcGxpdCgiLyIpLHQucyksdC5kTy5h
+KEEuUEgoKSksdC5kbyksdC5OKQpBLkNMKHEueSwicGF0aFNlZ21lbnRzIikKcS5zS3AocikKcD1yfXJl
+dHVybiBwfSwKZ2lPKGEpe3ZhciBzLHI9dGhpcyxxPXIuegppZihxPT09JCl7cz1CLnhCLmdpTyhyLmdu
+RCgpKQpBLkNMKHIueiwiaGFzaENvZGUiKQpyLno9cwpxPXN9cmV0dXJuIHF9LApnaFkoKXt2YXIgcyxy
+LHE9dGhpcyxwPXEuUQppZihwPT09JCl7cz1xLmYKcj1uZXcgQS5HaihBLldYKHM9PW51bGw/IiI6cyks
+dC5kdykKQS5DTChxLlEsInF1ZXJ5UGFyYW1ldGVycyIpCnEuc05NKHIpCnA9cn1yZXR1cm4gcH0sCmdr
+dSgpe3JldHVybiB0aGlzLmJ9LApnSmYoYSl7dmFyIHM9dGhpcy5jCmlmKHM9PW51bGwpcmV0dXJuIiIK
+aWYoQi54Qi5uKHMsIlsiKSlyZXR1cm4gQi54Qi5OaihzLDEscy5sZW5ndGgtMSkKcmV0dXJuIHN9LApn
+dHAoYSl7dmFyIHM9dGhpcy5kCnJldHVybiBzPT1udWxsP0Eud0sodGhpcy5hKTpzfSwKZ3RQKCl7dmFy
+IHM9dGhpcy5mCnJldHVybiBzPT1udWxsPyIiOnN9LApnS2EoKXt2YXIgcz10aGlzLnIKcmV0dXJuIHM9
+PW51bGw/IiI6c30sCmhCKGEpe3ZhciBzPXRoaXMuYQppZihhLmxlbmd0aCE9PXMubGVuZ3RoKXJldHVy
+biExCnJldHVybiBBLk5SKGEscyl9LApubShhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqPXRoaXMK
+dC5jOS5hKGIpCnM9ai5hCnI9cz09PSJmaWxlIgpxPWouYgpwPWouZApvPWouYwppZighKG8hPW51bGwp
+KW89cS5sZW5ndGghPT0wfHxwIT1udWxsfHxyPyIiOm51bGwKbj1qLmUKaWYoIXIpbT1vIT1udWxsJiZu
+Lmxlbmd0aCE9PTAKZWxzZSBtPSEwCmlmKG0mJiFCLnhCLm4obiwiLyIpKW49Ii8iK24KbD1uCms9QS5s
+ZShudWxsLDAsMCxiKQpyZXR1cm4gQS5DZyhzLHEsbyxwLGwsayxqLnIpfSwKSmgoYSxiKXt2YXIgcyxy
+LHEscCxvLG4KZm9yKHM9MCxyPTA7Qi54Qi5RaShiLCIuLi8iLHIpOyl7cis9MzsrK3N9cT1CLnhCLmNu
+KGEsIi8iKQp3aGlsZSghMCl7aWYoIShxPjAmJnM+MCkpYnJlYWsKcD1CLnhCLlBrKGEsIi8iLHEtMSkK
+aWYocDwwKWJyZWFrCm89cS1wCm49byE9PTIKaWYoIW58fG89PT0zKWlmKEIueEIuTyhhLHArMSk9PT00
+NiluPSFufHxCLnhCLk8oYSxwKzIpPT09NDYKZWxzZSBuPSExCmVsc2Ugbj0hMQppZihuKWJyZWFrOy0t
+cwpxPXB9cmV0dXJuIEIueEIuaTcoYSxxKzEsbnVsbCxCLnhCLnluKGIsci0zKnMpKX0sClpJKGEpe3Jl
+dHVybiB0aGlzLm1TKEEuaEsoYSkpfSwKbVMoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT10aGlz
+LGg9bnVsbAppZihhLmdGaSgpLmxlbmd0aCE9PTApe3M9YS5nRmkoKQppZihhLmdjaigpKXtyPWEuZ2t1
+KCkKcT1hLmdKZihhKQpwPWEuZ3hBKCk/YS5ndHAoYSk6aH1lbHNle3A9aApxPXAKcj0iIn1vPUEueGUo
+YS5nSWkoYSkpCm49YS5nUUQoKT9hLmd0UCgpOmh9ZWxzZXtzPWkuYQppZihhLmdjaigpKXtyPWEuZ2t1
+KCkKcT1hLmdKZihhKQpwPUEud0IoYS5neEEoKT9hLmd0cChhKTpoLHMpCm89QS54ZShhLmdJaShhKSkK
+bj1hLmdRRCgpP2EuZ3RQKCk6aH1lbHNle3I9aS5iCnE9aS5jCnA9aS5kCm89aS5lCmlmKGEuZ0lpKGEp
+PT09IiIpbj1hLmdRRCgpP2EuZ3RQKCk6aS5mCmVsc2V7bT1BLnVqKGksbykKaWYobT4wKXtsPUIueEIu
+TmoobywwLG0pCm89YS5ndFQoKT9sK0EueGUoYS5nSWkoYSkpOmwrQS54ZShpLkpoKEIueEIueW4obyxs
+Lmxlbmd0aCksYS5nSWkoYSkpKX1lbHNlIGlmKGEuZ3RUKCkpbz1BLnhlKGEuZ0lpKGEpKQplbHNlIGlm
+KG8ubGVuZ3RoPT09MClpZihxPT1udWxsKW89cy5sZW5ndGg9PT0wP2EuZ0lpKGEpOkEueGUoYS5nSWko
+YSkpCmVsc2Ugbz1BLnhlKCIvIithLmdJaShhKSkKZWxzZXtrPWkuSmgobyxhLmdJaShhKSkKaj1zLmxl
+bmd0aD09PTAKaWYoIWp8fHEhPW51bGx8fEIueEIubihvLCIvIikpbz1BLnhlKGspCmVsc2Ugbz1BLndG
+KGssIWp8fHEhPW51bGwpfW49YS5nUUQoKT9hLmd0UCgpOmh9fX1yZXR1cm4gQS5DZyhzLHIscSxwLG8s
+bixhLmdaOCgpP2EuZ0thKCk6aCl9LApnY2ooKXtyZXR1cm4gdGhpcy5jIT1udWxsfSwKZ3hBKCl7cmV0
+dXJuIHRoaXMuZCE9bnVsbH0sCmdRRCgpe3JldHVybiB0aGlzLmYhPW51bGx9LApnWjgoKXtyZXR1cm4g
+dGhpcy5yIT1udWxsfSwKZ3RUKCl7cmV0dXJuIEIueEIubih0aGlzLmUsIi8iKX0sCnQ0KCl7dmFyIHMs
+cj10aGlzLHE9ci5hCmlmKHEhPT0iIiYmcSE9PSJmaWxlIil0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IGV4
+dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICIrcSsiIFVSSSIpKQpxPXIuZgppZigocT09bnVsbD8iIjpx
+KSE9PSIiKXRocm93IEEuYihBLkw0KHUuaSkpCnE9ci5yCmlmKChxPT1udWxsPyIiOnEpIT09IiIpdGhy
+b3cgQS5iKEEuTDQodS5sKSkKcT0kLndRKCkKaWYocSlxPUEubW4ocikKZWxzZXtpZihyLmMhPW51bGwm
+JnIuZ0pmKHIpIT09IiIpQS52KEEuTDQodS5qKSkKcz1yLmdGaigpCkEua0UocywhMSkKcT1BLmwoQi54
+Qi5uKHIuZSwiLyIpPyIiKyIvIjoiIixzLCIvIikKcT1xLmNoYXJDb2RlQXQoMCk9PTA/cTpxfXJldHVy
+biBxfSwKdyhhKXtyZXR1cm4gdGhpcy5nbkQoKX0sCkROKGEsYil7dmFyIHMscixxPXRoaXMKaWYoYj09
+bnVsbClyZXR1cm4hMQppZihxPT09YilyZXR1cm4hMAppZih0LmRELmIoYikpaWYocS5hPT09Yi5nRmko
+KSlpZihxLmMhPW51bGw9PT1iLmdjaigpKWlmKHEuYj09PWIuZ2t1KCkpaWYocS5nSmYocSk9PT1iLmdK
+ZihiKSlpZihxLmd0cChxKT09PWIuZ3RwKGIpKWlmKHEuZT09PWIuZ0lpKGIpKXtzPXEuZgpyPXM9PW51
+bGwKaWYoIXI9PT1iLmdRRCgpKXtpZihyKXM9IiIKaWYocz09PWIuZ3RQKCkpe3M9cS5yCnI9cz09bnVs
+bAppZighcj09PWIuZ1o4KCkpe2lmKHIpcz0iIgpzPXM9PT1iLmdLYSgpfWVsc2Ugcz0hMX1lbHNlIHM9
+ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9
+ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQpyZXR1cm4gc30sCnNLcChhKXt0aGlzLnk9dC5hLmEoYSl9LApz
+Tk0oYSl7dGhpcy5RPXQuSS5hKGEpfSwKJGlpRDoxLApnRmkoKXtyZXR1cm4gdGhpcy5hfSwKZ0lpKGEp
+e3JldHVybiB0aGlzLmV9fQpBLlJaLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBBLmVQKEIuWkosQS5u
+KGEpLEIueE0sITEpfSwKJFM6Mn0KQS5NRS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzPXRoaXMuYixy
+PXRoaXMuYQpzLmErPXIuYQpyLmE9IiYiCnI9cy5hKz1BLmVQKEIuRjMsYSxCLnhNLCEwKQppZihiIT1u
+dWxsJiZiLmxlbmd0aCE9PTApe3MuYT1yKyI9IgpzLmErPUEuZVAoQi5GMyxiLEIueE0sITApfX0sCiRT
+OjIyfQpBLnk1LnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscgpBLm4oYSkKaWYoYj09bnVsbHx8dHlw
+ZW9mIGI9PSJzdHJpbmciKXRoaXMuYS4kMihhLEEuayhiKSkKZWxzZSBmb3Iocz1KLklUKHQuay5hKGIp
+KSxyPXRoaXMuYTtzLkYoKTspci4kMihhLEEubihzLmdsKCkpKX0sCiRTOjEwfQpBLlBFLnByb3RvdHlw
+ZT17CmdsUigpe3ZhciBzLHIscSxwLG89dGhpcyxuPW51bGwsbT1vLmMKaWYobT09bnVsbCl7bT1vLmIK
+aWYoMD49bS5sZW5ndGgpcmV0dXJuIEEuT0gobSwwKQpzPW8uYQptPW1bMF0rMQpyPUIueEIuWFUocywi
+PyIsbSkKcT1zLmxlbmd0aAppZihyPj0wKXtwPUEuUEkocyxyKzEscSxCLlZDLCExKQpxPXJ9ZWxzZSBw
+PW4KbT1vLmM9bmV3IEEucWUoImRhdGEiLCIiLG4sbixBLlBJKHMsbSxxLEIuV2QsITEpLHAsbil9cmV0
+dXJuIG19LAp3KGEpe3ZhciBzLHI9dGhpcy5iCmlmKDA+PXIubGVuZ3RoKXJldHVybiBBLk9IKHIsMCkK
+cz10aGlzLmEKcmV0dXJuIHJbMF09PT0tMT8iZGF0YToiK3M6c319CkEueUkucHJvdG90eXBlPXsKJDIo
+YSxiKXt2YXIgcz10aGlzLmEKaWYoIShhPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGEpCnM9c1thXQpC
+Lk5BLmR1KHMsMCw5NixiKQpyZXR1cm4gc30sCiRTOjIzfQpBLmM2LnByb3RvdHlwZT17CiQzKGEsYixj
+KXt2YXIgcyxyLHEKZm9yKHM9Yi5sZW5ndGgscj0wO3I8czsrK3Ipe3E9Qi54Qi5XKGIscileOTYKaWYo
+IShxPDk2KSlyZXR1cm4gQS5PSChhLHEpCmFbcV09Y319LAokUzoxOH0KQS5xZC5wcm90b3R5cGU9ewok
+MyhhLGIsYyl7dmFyIHMscixxCmZvcihzPUIueEIuVyhiLDApLHI9Qi54Qi5XKGIsMSk7czw9cjsrK3Mp
+e3E9KHNeOTYpPj4+MAppZighKHE8OTYpKXJldHVybiBBLk9IKGEscSkKYVtxXT1jfX0sCiRTOjE4fQpB
+LlVmLnByb3RvdHlwZT17Cmdjaigpe3JldHVybiB0aGlzLmM+MH0sCmd4QSgpe3JldHVybiB0aGlzLmM+
+MCYmdGhpcy5kKzE8dGhpcy5lfSwKZ1FEKCl7cmV0dXJuIHRoaXMuZjx0aGlzLnJ9LApnWjgoKXtyZXR1
+cm4gdGhpcy5yPHRoaXMuYS5sZW5ndGh9LApndFQoKXtyZXR1cm4gQi54Qi5RaSh0aGlzLmEsIi8iLHRo
+aXMuZSl9LApnRmkoKXt2YXIgcz10aGlzLngKcmV0dXJuIHM9PW51bGw/dGhpcy54PXRoaXMuVTIoKTpz
+fSwKVTIoKXt2YXIgcyxyPXRoaXMscT1yLmIKaWYocTw9MClyZXR1cm4iIgpzPXE9PT00CmlmKHMmJkIu
+eEIubihyLmEsImh0dHAiKSlyZXR1cm4iaHR0cCIKaWYocT09PTUmJkIueEIubihyLmEsImh0dHBzIikp
+cmV0dXJuImh0dHBzIgppZihzJiZCLnhCLm4oci5hLCJmaWxlIikpcmV0dXJuImZpbGUiCmlmKHE9PT03
+JiZCLnhCLm4oci5hLCJwYWNrYWdlIikpcmV0dXJuInBhY2thZ2UiCnJldHVybiBCLnhCLk5qKHIuYSww
+LHEpfSwKZ2t1KCl7dmFyIHM9dGhpcy5jLHI9dGhpcy5iKzMKcmV0dXJuIHM+cj9CLnhCLk5qKHRoaXMu
+YSxyLHMtMSk6IiJ9LApnSmYoYSl7dmFyIHM9dGhpcy5jCnJldHVybiBzPjA/Qi54Qi5Oaih0aGlzLmEs
+cyx0aGlzLmQpOiIifSwKZ3RwKGEpe3ZhciBzLHI9dGhpcwppZihyLmd4QSgpKXJldHVybiBBLlFBKEIu
+eEIuTmooci5hLHIuZCsxLHIuZSksbnVsbCkKcz1yLmIKaWYocz09PTQmJkIueEIubihyLmEsImh0dHAi
+KSlyZXR1cm4gODAKaWYocz09PTUmJkIueEIubihyLmEsImh0dHBzIikpcmV0dXJuIDQ0MwpyZXR1cm4g
+MH0sCmdJaShhKXtyZXR1cm4gQi54Qi5Oaih0aGlzLmEsdGhpcy5lLHRoaXMuZil9LApndFAoKXt2YXIg
+cz10aGlzLmYscj10aGlzLnIKcmV0dXJuIHM8cj9CLnhCLk5qKHRoaXMuYSxzKzEscik6IiJ9LApnS2Eo
+KXt2YXIgcz10aGlzLnIscj10aGlzLmEKcmV0dXJuIHM8ci5sZW5ndGg/Qi54Qi55bihyLHMrMSk6IiJ9
+LApnRmooKXt2YXIgcyxyLHE9dGhpcy5lLHA9dGhpcy5mLG89dGhpcy5hCmlmKEIueEIuUWkobywiLyIs
+cSkpKytxCmlmKHE9PT1wKXJldHVybiBCLnhECnM9QS5RSShbXSx0LnMpCmZvcihyPXE7cjxwOysrcilp
+ZihCLnhCLk8obyxyKT09PTQ3KXtCLk5tLmkocyxCLnhCLk5qKG8scSxyKSkKcT1yKzF9Qi5ObS5pKHMs
+Qi54Qi5OaihvLHEscCkpCnJldHVybiBBLkFGKHMsdC5OKX0sCmdoWSgpe2lmKHRoaXMuZj49dGhpcy5y
+KXJldHVybiBCLkNNCnJldHVybiBuZXcgQS5HaihBLldYKHRoaXMuZ3RQKCkpLHQuZHcpfSwKa1goYSl7
+dmFyIHM9dGhpcy5kKzEKcmV0dXJuIHMrYS5sZW5ndGg9PT10aGlzLmUmJkIueEIuUWkodGhpcy5hLGEs
+cyl9LApOOSgpe3ZhciBzPXRoaXMscj1zLnIscT1zLmEKaWYocj49cS5sZW5ndGgpcmV0dXJuIHMKcmV0
+dXJuIG5ldyBBLlVmKEIueEIuTmoocSwwLHIpLHMuYixzLmMscy5kLHMuZSxzLmYscixzLngpfSwKbm0o
+YSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCnQuYzkuYShiKQpzPWkuZ0Zp
+KCkKcj1zPT09ImZpbGUiCnE9aS5jCnA9cT4wP0IueEIuTmooaS5hLGkuYiszLHEpOiIiCm89aS5neEEo
+KT9pLmd0cChpKTpoCnE9aS5jCmlmKHE+MCluPUIueEIuTmooaS5hLHEsaS5kKQplbHNlIG49cC5sZW5n
+dGghPT0wfHxvIT1udWxsfHxyPyIiOmgKcT1pLmEKbT1CLnhCLk5qKHEsaS5lLGkuZikKaWYoIXIpbD1u
+IT1udWxsJiZtLmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFCLnhCLm4obSwiLyIpKW09Ii8iK20K
+az1BLmxlKGgsMCwwLGIpCmw9aS5yCmo9bDxxLmxlbmd0aD9CLnhCLnluKHEsbCsxKTpoCnJldHVybiBB
+LkNnKHMscCxuLG8sbSxrLGopfSwKWkkoYSl7cmV0dXJuIHRoaXMubVMoQS5oSyhhKSl9LAptUyhhKXtp
+ZihhIGluc3RhbmNlb2YgQS5VZilyZXR1cm4gdGhpcy51MSh0aGlzLGEpCnJldHVybiB0aGlzLlJlKCku
+bVMoYSl9LAp1MShhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGM9Yi5iCmlm
+KGM+MClyZXR1cm4gYgpzPWIuYwppZihzPjApe3I9YS5iCmlmKHI8PTApcmV0dXJuIGIKcT1yPT09NApp
+ZihxJiZCLnhCLm4oYS5hLCJmaWxlIikpcD1iLmUhPT1iLmYKZWxzZSBpZihxJiZCLnhCLm4oYS5hLCJo
+dHRwIikpcD0hYi5rWCgiODAiKQplbHNlIHA9IShyPT09NSYmQi54Qi5uKGEuYSwiaHR0cHMiKSl8fCFi
+LmtYKCI0NDMiKQppZihwKXtvPXIrMQpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxvKStCLnhC
+LnluKGIuYSxjKzEpLHIscytvLGIuZCtvLGIuZStvLGIuZitvLGIucitvLGEueCl9ZWxzZSByZXR1cm4g
+dGhpcy5SZSgpLm1TKGIpfW49Yi5lCmM9Yi5mCmlmKG49PT1jKXtzPWIucgppZihjPHMpe3I9YS5mCm89
+ci1jCnJldHVybiBuZXcgQS5VZihCLnhCLk5qKGEuYSwwLHIpK0IueEIueW4oYi5hLGMpLGEuYixhLmMs
+YS5kLGEuZSxjK28scytvLGEueCl9Yz1iLmEKaWYoczxjLmxlbmd0aCl7cj1hLnIKcmV0dXJuIG5ldyBB
+LlVmKEIueEIuTmooYS5hLDAscikrQi54Qi55bihjLHMpLGEuYixhLmMsYS5kLGEuZSxhLmYscysoci1z
+KSxhLngpfXJldHVybiBhLk45KCl9cz1iLmEKaWYoQi54Qi5RaShzLCIvIixuKSl7bT1hLmUKbD1BLlJ4
+KHRoaXMpCms9bD4wP2w6bQpvPWstbgpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxrKStCLnhC
+LnluKHMsbiksYS5iLGEuYyxhLmQsbSxjK28sYi5yK28sYS54KX1qPWEuZQppPWEuZgppZihqPT09aSYm
+YS5jPjApe2Zvcig7Qi54Qi5RaShzLCIuLi8iLG4pOyluKz0zCm89ai1uKzEKcmV0dXJuIG5ldyBBLlVm
+KEIueEIuTmooYS5hLDAsaikrIi8iK0IueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxqLGMrbyxiLnIrbyxh
+LngpfWg9YS5hCmw9QS5SeCh0aGlzKQppZihsPj0wKWc9bAplbHNlIGZvcihnPWo7Qi54Qi5RaShoLCIu
+Li8iLGcpOylnKz0zCmY9MAp3aGlsZSghMCl7ZT1uKzMKaWYoIShlPD1jJiZCLnhCLlFpKHMsIi4uLyIs
+bikpKWJyZWFrOysrZgpuPWV9Zm9yKGQ9IiI7aT5nOyl7LS1pCmlmKEIueEIuTyhoLGkpPT09NDcpe2lm
+KGY9PT0wKXtkPSIvIgpicmVha30tLWYKZD0iLyJ9fWlmKGk9PT1nJiZhLmI8PTAmJiFCLnhCLlFpKGgs
+Ii8iLGopKXtuLT1mKjMKZD0iIn1vPWktbitkLmxlbmd0aApyZXR1cm4gbmV3IEEuVWYoQi54Qi5Oaiho
+LDAsaSkrZCtCLnhCLnluKHMsbiksYS5iLGEuYyxhLmQsaixjK28sYi5yK28sYS54KX0sCnQ0KCl7dmFy
+IHMscixxPXRoaXMscD1xLmIKaWYocD49MCl7cz0hKHA9PT00JiZCLnhCLm4ocS5hLCJmaWxlIikpCnA9
+c31lbHNlIHA9ITEKaWYocCl0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGgg
+ZnJvbSBhICIrcS5nRmkoKSsiIFVSSSIpKQpwPXEuZgpzPXEuYQppZihwPHMubGVuZ3RoKXtpZihwPHEu
+cil0aHJvdyBBLmIoQS5MNCh1LmkpKQp0aHJvdyBBLmIoQS5MNCh1LmwpKX1yPSQud1EoKQppZihyKXA9
+QS5tbihxKQplbHNle2lmKHEuYzxxLmQpQS52KEEuTDQodS5qKSkKcD1CLnhCLk5qKHMscS5lLHApfXJl
+dHVybiBwfSwKZ2lPKGEpe3ZhciBzPXRoaXMueQpyZXR1cm4gcz09bnVsbD90aGlzLnk9Qi54Qi5naU8o
+dGhpcy5hKTpzfSwKRE4oYSxiKXtpZihiPT1udWxsKXJldHVybiExCmlmKHRoaXM9PT1iKXJldHVybiEw
+CnJldHVybiB0LmRELmIoYikmJnRoaXMuYT09PWIudygwKX0sClJlKCl7dmFyIHM9dGhpcyxyPW51bGws
+cT1zLmdGaSgpLHA9cy5na3UoKSxvPXMuYz4wP3MuZ0pmKHMpOnIsbj1zLmd4QSgpP3MuZ3RwKHMpOnIs
+bT1zLmEsbD1zLmYsaz1CLnhCLk5qKG0scy5lLGwpLGo9cy5yCmw9bDxqP3MuZ3RQKCk6cgpyZXR1cm4g
+QS5DZyhxLHAsbyxuLGssbCxqPG0ubGVuZ3RoP3MuZ0thKCk6cil9LAp3KGEpe3JldHVybiB0aGlzLmF9
+LAokaWlEOjF9CkEucWUucHJvdG90eXBlPXt9CkEucUUucHJvdG90eXBlPXt9CkEuR2gucHJvdG90eXBl
+PXsKc0xVKGEsYil7YS5ocmVmPWJ9LAp3KGEpe3JldHVybiBTdHJpbmcoYSl9LAokaUdoOjF9CkEuZlku
+cHJvdG90eXBlPXsKdyhhKXtyZXR1cm4gU3RyaW5nKGEpfX0KQS5yWi5wcm90b3R5cGU9eyRpclo6MX0K
+QS5Bei5wcm90b3R5cGU9eyRpQXo6MX0KQS5RUC5wcm90b3R5cGU9eyRpUVA6MX0KQS5ueC5wcm90b3R5
+cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpBLm9KLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBh
+Lmxlbmd0aH19CkEuaWQucHJvdG90eXBlPXt9CkEuUUYucHJvdG90eXBlPXt9CkEuTmgucHJvdG90eXBl
+PXsKdyhhKXtyZXR1cm4gU3RyaW5nKGEpfX0KQS5hZS5wcm90b3R5cGU9ewpEYyhhLGIpe3JldHVybiBh
+LmNyZWF0ZUhUTUxEb2N1bWVudChiKX19CkEuSUIucHJvdG90eXBlPXsKdyhhKXt2YXIgcyxyPWEubGVm
+dApyLnRvU3RyaW5nCnI9IlJlY3RhbmdsZSAoIitBLkVqKHIpKyIsICIKcz1hLnRvcApzLnRvU3RyaW5n
+CnM9citBLkVqKHMpKyIpICIKcj1hLndpZHRoCnIudG9TdHJpbmcKcj1zK0EuRWoocikrIiB4ICIKcz1h
+LmhlaWdodApzLnRvU3RyaW5nCnJldHVybiByK0EuRWoocyl9LApETihhLGIpe3ZhciBzLHIKaWYoYj09
+bnVsbClyZXR1cm4hMQppZih0LnEuYihiKSl7cz1hLmxlZnQKcy50b1N0cmluZwpyPWIubGVmdApyLnRv
+U3RyaW5nCmlmKHM9PT1yKXtzPWEudG9wCnMudG9TdHJpbmcKcj1iLnRvcApyLnRvU3RyaW5nCmlmKHM9
+PT1yKXtzPWEud2lkdGgKcy50b1N0cmluZwpyPWIud2lkdGgKci50b1N0cmluZwppZihzPT09cil7cz1h
+LmhlaWdodApzLnRvU3RyaW5nCnI9Yi5oZWlnaHQKci50b1N0cmluZwpyPXM9PT1yCnM9cn1lbHNlIHM9
+ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKcmV0dXJuIHN9LApnaU8oYSl7dmFyIHMscixx
+LHA9YS5sZWZ0CnAudG9TdHJpbmcKcz1hLnRvcApzLnRvU3RyaW5nCnI9YS53aWR0aApyLnRvU3RyaW5n
+CnE9YS5oZWlnaHQKcS50b1N0cmluZwpyZXR1cm4gQS5mNShwLHMscixxKX0sCiRpdG46MX0KQS5uNy5w
+cm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpBLnd6LnByb3RvdHlwZT17CmdBKGEpe3Jl
+dHVybiB0aGlzLmEubGVuZ3RofSwKcShhLGIpe3ZhciBzCkEuSVooYikKcz10aGlzLmEKaWYoIShiPj0w
+JiZiPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnJldHVybiB0aGlzLiR0aS5jLmEoc1tiXSl9LApZ
+NShhLGIsYyl7dGhpcy4kdGkuYy5hKGMpCnRocm93IEEuYihBLkw0KCJDYW5ub3QgbW9kaWZ5IGxpc3Qi
+KSl9fQpBLmN2LnByb3RvdHlwZT17CmdRZyhhKXtyZXR1cm4gbmV3IEEuaTcoYSl9LApnUChhKXtyZXR1
+cm4gbmV3IEEuSTQoYSl9LApzUChhLGIpe3ZhciBzCnQuTy5hKGIpCnM9dGhpcy5nUChhKQpzLlYxKDAp
+CnMuRlYoMCxiKX0sCncoYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKRkYoYSl7dmFyIHM9ISFhLnNjcm9s
+bEludG9WaWV3SWZOZWVkZWQKaWYocylhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Ny
+b2xsSW50b1ZpZXcoKX0sCm56KGEsYixjLGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxkLGUpCnN3aXRj
+aChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2RlCnMudG9TdHJp
+bmcKSi5FaChzLHIsYSkKYnJlYWsKY2FzZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rlcwp0aGlzLm1L
+KGEscixzLmxlbmd0aD4wP3NbMF06bnVsbCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEuYXBwZW5kQ2hp
+bGQocikKYnJlYWsKY2FzZSJhZnRlcmVuZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMs
+cixhLm5leHRTaWJsaW5nKQpicmVhawpkZWZhdWx0OkEudihBLnhZKCJJbnZhbGlkIHBvc2l0aW9uICIr
+YixudWxsKSl9fSwKcjYoYSxiLGMsZCl7dmFyIHMscixxLHAKaWYoYz09bnVsbCl7aWYoZD09bnVsbCl7
+cz0kLmx0CmlmKHM9PW51bGwpe3M9QS5RSShbXSx0LkQpCnI9bmV3IEEudkQocykKQi5ObS5pKHMsQS5U
+dyhudWxsKSkKQi5ObS5pKHMsQS5CbCgpKQokLmx0PXIKZD1yfWVsc2UgZD1zfXM9JC5FVQppZihzPT1u
+dWxsKXtzPW5ldyBBLktvKGQpCiQuRVU9cwpjPXN9ZWxzZXtzLmE9ZApjPXN9fWVsc2UgaWYoZCE9bnVs
+bCl0aHJvdyBBLmIoQS54WSgidmFsaWRhdG9yIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiB0cmVlU2FuaXRp
+emVyIGlzIG51bGwiLG51bGwpKQppZigkLnhvPT1udWxsKXtzPWRvY3VtZW50CnI9cy5pbXBsZW1lbnRh
+dGlvbgpyLnRvU3RyaW5nCnI9Qi5tSC5EYyhyLCIiKQokLnhvPXIKJC5CTz1yLmNyZWF0ZVJhbmdlKCkK
+cj0kLnhvLmNyZWF0ZUVsZW1lbnQoImJhc2UiKQp0LmNSLmEocikKcz1zLmJhc2VVUkkKcy50b1N0cmlu
+ZwpyLmhyZWY9cwokLnhvLmhlYWQuYXBwZW5kQ2hpbGQocil9cz0kLnhvCmlmKHMuYm9keT09bnVsbCl7
+cj1zLmNyZWF0ZUVsZW1lbnQoImJvZHkiKQpCLkJaLnNHUyhzLHQuci5hKHIpKX1zPSQueG8KaWYodC5y
+LmIoYSkpe3M9cy5ib2R5CnMudG9TdHJpbmcKcT1zfWVsc2V7cy50b1N0cmluZwpxPXMuY3JlYXRlRWxl
+bWVudChhLnRhZ05hbWUpCiQueG8uYm9keS5hcHBlbmRDaGlsZChxKX1pZigiY3JlYXRlQ29udGV4dHVh
+bEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlJiYhQi5ObS50ZyhCLlNxLGEudGFnTmFt
+ZSkpeyQuQk8uc2VsZWN0Tm9kZUNvbnRlbnRzKHEpCnM9JC5CTwpzLnRvU3RyaW5nCnA9cy5jcmVhdGVD
+b250ZXh0dWFsRnJhZ21lbnQoYj09bnVsbD8ibnVsbCI6Yil9ZWxzZXtKLndmKHEsYikKcD0kLnhvLmNy
+ZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpmb3IoO3M9cS5maXJzdENoaWxkLHMhPW51bGw7KXAuYXBwZW5k
+Q2hpbGQocyl9aWYocSE9PSQueG8uYm9keSlKLkx0KHEpCmMuUG4ocCkKZG9jdW1lbnQuYWRvcHROb2Rl
+KHApCnJldHVybiBwfSwKQUgoYSxiLGMpe3JldHVybiB0aGlzLnI2KGEsYixjLG51bGwpfSwKc2hmKGEs
+Yil7dGhpcy5ZQyhhLGIpfSwKcGsoYSxiLGMpe3RoaXMuc2E0KGEsbnVsbCkKYS5hcHBlbmRDaGlsZCh0
+aGlzLnI2KGEsYixudWxsLGMpKX0sCllDKGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKc1JO
+KGEsYil7YS5pbm5lckhUTUw9Yn0sCmducyhhKXtyZXR1cm4gYS50YWdOYW1lfSwKZ1ZsKGEpe3JldHVy
+biBuZXcgQS5DcShhLCJjbGljayIsITEsdC5RKX0sCiRpY3Y6MX0KQS5Ddi5wcm90b3R5cGU9ewokMShh
+KXtyZXR1cm4gdC5oLmIodC5BLmEoYSkpfSwKJFM6MjV9CkEuZWEucHJvdG90eXBlPXskaWVhOjF9CkEu
+RDAucHJvdG90eXBlPXsKT24oYSxiLGMsZCl7dC5idy5hKGMpCmlmKGMhPW51bGwpdGhpcy52KGEsYixj
+LGQpfSwKQihhLGIsYyl7cmV0dXJuIHRoaXMuT24oYSxiLGMsbnVsbCl9LAp2KGEsYixjLGQpe3JldHVy
+biBhLmFkZEV2ZW50TGlzdGVuZXIoYixBLnRSKHQuYncuYShjKSwxKSxkKX0sCiRpRDA6MX0KQS5oSC5w
+cm90b3R5cGU9eyRpaEg6MX0KQS5oNC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gYS5sZW5ndGh9fQpB
+LmJyLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH19CkEuVmIucHJvdG90eXBlPXsKc0dT
+KGEsYil7YS5ib2R5PWJ9fQpBLmZKLnByb3RvdHlwZT17CmVvKGEsYixjLGQpe3JldHVybiBhLm9wZW4o
+YixjLCEwKX0sCiRpZko6MX0KQS53YS5wcm90b3R5cGU9e30KQS5TZy5wcm90b3R5cGU9eyRpU2c6MX0K
+QS51OC5wcm90b3R5cGU9ewpnRHIoYSl7aWYoIm9yaWdpbiIgaW4gYSlyZXR1cm4gYS5vcmlnaW4KcmV0
+dXJuIGEucHJvdG9jb2wrIi8vIithLmhvc3R9LAp3KGEpe3JldHVybiBTdHJpbmcoYSl9LAokaXU4OjF9
+CkEuQWoucHJvdG90eXBlPXskaUFqOjF9CkEuZTcucHJvdG90eXBlPXsKZ3I4KGEpe3ZhciBzPXRoaXMu
+YSxyPXMuY2hpbGROb2Rlcy5sZW5ndGgKaWYocj09PTApdGhyb3cgQS5iKEEuUFYoIk5vIGVsZW1lbnRz
+IikpCmlmKHI+MSl0aHJvdyBBLmIoQS5QVigiTW9yZSB0aGFuIG9uZSBlbGVtZW50IikpCnM9cy5maXJz
+dENoaWxkCnMudG9TdHJpbmcKcmV0dXJuIHN9LApGVihhLGIpe3ZhciBzLHIscSxwLG8KdC5laC5hKGIp
+CmlmKGIgaW5zdGFuY2VvZiBBLmU3KXtzPWIuYQpyPXRoaXMuYQppZihzIT09cilmb3IocT1zLmNoaWxk
+Tm9kZXMubGVuZ3RoLHA9MDtwPHE7KytwKXtvPXMuZmlyc3RDaGlsZApvLnRvU3RyaW5nCnIuYXBwZW5k
+Q2hpbGQobyl9cmV0dXJufWZvcihzPWIuZ20oYikscj10aGlzLmE7cy5GKCk7KXIuYXBwZW5kQ2hpbGQo
+cy5nbCgpKX0sClk1KGEsYixjKXt2YXIgcyxyCnQuQS5hKGMpCnM9dGhpcy5hCnI9cy5jaGlsZE5vZGVz
+CmlmKCEoYj49MCYmYjxyLmxlbmd0aCkpcmV0dXJuIEEuT0gocixiKQpzLnJlcGxhY2VDaGlsZChjLHJb
+Yl0pfSwKZ20oYSl7dmFyIHM9dGhpcy5hLmNoaWxkTm9kZXMKcmV0dXJuIG5ldyBBLlc5KHMscy5sZW5n
+dGgsQS56SyhzKS5DKCJXOTxHbS5FPiIpKX0sCmdBKGEpe3JldHVybiB0aGlzLmEuY2hpbGROb2Rlcy5s
+ZW5ndGh9LApxKGEsYil7dmFyIHMKQS5JWihiKQpzPXRoaXMuYS5jaGlsZE5vZGVzCmlmKCEoYj49MCYm
+YjxzLmxlbmd0aCkpcmV0dXJuIEEuT0gocyxiKQpyZXR1cm4gc1tiXX19CkEuS1YucHJvdG90eXBlPXsK
+d2coYSl7dmFyIHM9YS5wYXJlbnROb2RlCmlmKHMhPW51bGwpcy5yZW1vdmVDaGlsZChhKX0sCkQ0KGEp
+e3ZhciBzCmZvcig7cz1hLmZpcnN0Q2hpbGQscyE9bnVsbDspYS5yZW1vdmVDaGlsZChzKX0sCncoYSl7
+dmFyIHM9YS5ub2RlVmFsdWUKcmV0dXJuIHM9PW51bGw/dGhpcy5VKGEpOnN9LApzYTQoYSxiKXthLnRl
+eHRDb250ZW50PWJ9LAptSyhhLGIsYyl7cmV0dXJuIGEuaW5zZXJ0QmVmb3JlKGIsYyl9LAokaUtWOjF9
+CkEuQkgucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0EuSVooYikKaWYo
+Yj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBBLmIoQS5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpy
+ZXR1cm4gYVtiXX0sClk1KGEsYixjKXt0LkEuYShjKQp0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IGFzc2ln
+biBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCmd0SChhKXtpZihhLmxlbmd0aD4wKXJldHVy
+biBhWzBdCnRocm93IEEuYihBLlBWKCJObyBlbGVtZW50cyIpKX0sCkUoYSxiKXtpZighKGI+PTAmJmI8
+YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGlj
+WDoxLAokaXpNOjF9CkEuU04ucHJvdG90eXBlPXt9CkEuZXcucHJvdG90eXBlPXskaWV3OjF9CkEubHAu
+cHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofX0KQS5UYi5wcm90b3R5cGU9ewpyNihhLGIs
 YyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5w
-cm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1XLlU5KCI8dGFibGU+IitILkVqKGIpKyI8
-L3RhYmxlPiIsYyxkKQpyPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpuZXcgVy5lNyhy
-KS5GVigwLG5ldyBXLmU3KHMpKQpyZXR1cm4gcn19ClcuSXYucHJvdG90eXBlPXsKcjYoYSxiLGMsZCl7
+cm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1BLlU5KCI8dGFibGU+IitBLkVqKGIpKyI8
+L3RhYmxlPiIsYyxkKQpyPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpuZXcgQS5lNyhy
+KS5GVigwLG5ldyBBLmU3KHMpKQpyZXR1cm4gcn19CkEuSXYucHJvdG90eXBlPXsKcjYoYSxiLGMsZCl7
 dmFyIHMscgppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90
 eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJh
-Z21lbnQoKQpzPW5ldyBXLmU3KEMuSWUucjYocy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKSkK
-cz1uZXcgVy5lNyhzLmdyOChzKSkKbmV3IFcuZTcocikuRlYoMCxuZXcgVy5lNyhzLmdyOChzKSkpCnJl
-dHVybiByfX0KVy5XUC5wcm90b3R5cGU9ewpyNihhLGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250
+Z21lbnQoKQpzPW5ldyBBLmU3KEIuSWUucjYocy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKSkK
+cz1uZXcgQS5lNyhzLmdyOChzKSkKbmV3IEEuZTcocikuRlYoMCxuZXcgQS5lNyhzLmdyOChzKSkpCnJl
+dHVybiByfX0KQS5XUC5wcm90b3R5cGU9ewpyNihhLGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250
 ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxi
-LGMsZCkKcz1kb2N1bWVudApyPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9bmV3IFcuZTcoQy5J
-ZS5yNihzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksYixjLGQpKQpuZXcgVy5lNyhyKS5GVigwLG5ldyBX
-LmU3KHMuZ3I4KHMpKSkKcmV0dXJuIHJ9fQpXLnlZLnByb3RvdHlwZT17CnBrKGEsYixjKXt2YXIgcyxy
+LGMsZCkKcz1kb2N1bWVudApyPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9bmV3IEEuZTcoQi5J
+ZS5yNihzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksYixjLGQpKQpuZXcgQS5lNyhyKS5GVigwLG5ldyBB
+LmU3KHMuZ3I4KHMpKSkKcmV0dXJuIHJ9fQpBLnlZLnByb3RvdHlwZT17CnBrKGEsYixjKXt2YXIgcyxy
 CnRoaXMuc2E0KGEsbnVsbCkKcz1hLmNvbnRlbnQKcy50b1N0cmluZwpKLmJUKHMpCnI9dGhpcy5yNihh
 LGIsbnVsbCxjKQphLmNvbnRlbnQuYXBwZW5kQ2hpbGQocil9LApZQyhhLGIpe3JldHVybiB0aGlzLnBr
-KGEsYixudWxsKX0sCiRpeVk6MX0KVy53Ni5wcm90b3R5cGU9e30KVy5LNS5wcm90b3R5cGU9ewpQbyhh
-LGIsYyl7dmFyIHM9Vy5QMShhLm9wZW4oYixjKSkKcmV0dXJuIHN9LApnbVcoYSl7cmV0dXJuIHQuRi5h
+KGEsYixudWxsKX0sCiRpeVk6MX0KQS53Ni5wcm90b3R5cGU9e30KQS5LNS5wcm90b3R5cGU9ewpQbyhh
+LGIsYyl7dmFyIHM9QS5QMShhLm9wZW4oYixjKSkKcmV0dXJuIHN9LApnbVcoYSl7cmV0dXJuIHQuRi5h
 KGEubG9jYXRpb24pfSwKdXMoYSxiKXtyZXR1cm4gYS5jb25maXJtKGIpfSwKJGlLNToxLAokaXY2OjF9
-ClcuQ20ucHJvdG90eXBlPXskaUNtOjF9ClcuQ1EucHJvdG90eXBlPXskaUNROjF9ClcudzQucHJvdG90
-eXBlPXsKdyhhKXt2YXIgcyxyPWEubGVmdApyLnRvU3RyaW5nCnI9IlJlY3RhbmdsZSAoIitILkVqKHIp
-KyIsICIKcz1hLnRvcApzLnRvU3RyaW5nCnM9citILkVqKHMpKyIpICIKcj1hLndpZHRoCnIudG9TdHJp
-bmcKcj1zK0guRWoocikrIiB4ICIKcz1hLmhlaWdodApzLnRvU3RyaW5nCnJldHVybiByK0guRWoocyl9
+CkEuQ20ucHJvdG90eXBlPXskaUNtOjF9CkEuQ1EucHJvdG90eXBlPXskaUNROjF9CkEudzQucHJvdG90
+eXBlPXsKdyhhKXt2YXIgcyxyPWEubGVmdApyLnRvU3RyaW5nCnI9IlJlY3RhbmdsZSAoIitBLkVqKHIp
+KyIsICIKcz1hLnRvcApzLnRvU3RyaW5nCnM9citBLkVqKHMpKyIpICIKcj1hLndpZHRoCnIudG9TdHJp
+bmcKcj1zK0EuRWoocikrIiB4ICIKcz1hLmhlaWdodApzLnRvU3RyaW5nCnJldHVybiByK0EuRWoocyl9
 LApETihhLGIpe3ZhciBzLHIKaWYoYj09bnVsbClyZXR1cm4hMQppZih0LnEuYihiKSl7cz1hLmxlZnQK
 cy50b1N0cmluZwpyPWIubGVmdApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEudG9wCnMudG9TdHJpbmcK
 cj1iLnRvcApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEud2lkdGgKcy50b1N0cmluZwpyPWIud2lkdGgK
 ci50b1N0cmluZwppZihzPT09cil7cz1hLmhlaWdodApzLnRvU3RyaW5nCnI9Yi5oZWlnaHQKci50b1N0
 cmluZwpyPXM9PT1yCnM9cn1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKcmV0
-dXJuIHN9LApnaU8oYSl7dmFyIHMscixxLHA9YS5sZWZ0CnAudG9TdHJpbmcKcD1DLkNELmdpTyhwKQpz
-PWEudG9wCnMudG9TdHJpbmcKcz1DLkNELmdpTyhzKQpyPWEud2lkdGgKci50b1N0cmluZwpyPUMuQ0Qu
-Z2lPKHIpCnE9YS5oZWlnaHQKcS50b1N0cmluZwpyZXR1cm4gVy5yRShwLHMscixDLkNELmdpTyhxKSl9
-fQpXLnJoLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtILklaKGIpCmlm
-KGI+Pj4wIT09Ynx8Yj49YS5sZW5ndGgpdGhyb3cgSC5iKFAuQ2YoYixhLG51bGwsbnVsbCxudWxsKSkK
-cmV0dXJuIGFbYl19LApZNShhLGIsYyl7dC5BLmEoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBhc3Np
-Z24gZWxlbWVudCBvZiBpbW11dGFibGUgTGlzdC4iKSl9LApFKGEsYil7aWYoYjwwfHxiPj1hLmxlbmd0
-aClyZXR1cm4gSC5PSChhLGIpCnJldHVybiBhW2JdfSwKJGliUToxLAokaVhqOjEsCiRpY1g6MSwKJGl6
-TToxfQpXLmNmLnByb3RvdHlwZT17CksoYSxiKXt2YXIgcyxyLHEscCxvCnQuZUEuYShiKQpmb3Iocz10
-aGlzLmd2YygpLHI9cy5sZW5ndGgscT10aGlzLmEscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwo
-MCxILmxrKShzKSwrK3Ape289c1twXQpiLiQyKG8sSC5uKHEuZ2V0QXR0cmlidXRlKG8pKSl9fSwKZ3Zj
-KCl7dmFyIHMscixxLHAsbyxuLG09dGhpcy5hLmF0dHJpYnV0ZXMKbS50b1N0cmluZwpzPUguUUkoW10s
-dC5zKQpmb3Iocj1tLmxlbmd0aCxxPXQuaDkscD0wO3A8cjsrK3Ape2lmKHA+PW0ubGVuZ3RoKXJldHVy
-biBILk9IKG0scCkKbz1xLmEobVtwXSkKaWYoby5uYW1lc3BhY2VVUkk9PW51bGwpe249by5uYW1lCm4u
-dG9TdHJpbmcKQy5ObS5pKHMsbil9fXJldHVybiBzfSwKZ2wwKGEpe3JldHVybiB0aGlzLmd2YygpLmxl
-bmd0aD09PTB9fQpXLmk3LnByb3RvdHlwZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5oYXNBdHRyaWJ1dGUo
-YSkKcmV0dXJuIHN9LApxKGEsYil7cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoSC5uKGIpKX0sClk1
-KGEsYixjKXt0aGlzLmEuc2V0QXR0cmlidXRlKGIsYyl9LApnQShhKXtyZXR1cm4gdGhpcy5ndmMoKS5s
-ZW5ndGh9fQpXLlN5LnByb3RvdHlwZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5hLmhhc0F0dHJpYnV0ZSgi
-ZGF0YS0iK3RoaXMuT1UoYSkpCnJldHVybiBzfSwKcShhLGIpe3JldHVybiB0aGlzLmEuYS5nZXRBdHRy
-aWJ1dGUoImRhdGEtIit0aGlzLk9VKEgubihiKSkpfSwKWTUoYSxiLGMpe3RoaXMuYS5hLnNldEF0dHJp
-YnV0ZSgiZGF0YS0iK3RoaXMuT1UoYiksYyl9LApLKGEsYil7dGhpcy5hLksoMCxuZXcgVy5LUyh0aGlz
-LHQuZUEuYShiKSkpfSwKZ3ZjKCl7dmFyIHM9SC5RSShbXSx0LnMpCnRoaXMuYS5LKDAsbmV3IFcuQTMo
-dGhpcyxzKSkKcmV0dXJuIHN9LApnQShhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9LApnbDAoYSl7
-cmV0dXJuIHRoaXMuZ3ZjKCkubGVuZ3RoPT09MH0sCnhxKGEpe3ZhciBzLHIscT1ILlFJKGEuc3BsaXQo
-Ii0iKSx0LnMpCmZvcihzPTE7czxxLmxlbmd0aDsrK3Mpe3I9cVtzXQppZihyLmxlbmd0aD4wKUMuTm0u
-WTUocSxzLHJbMF0udG9VcHBlckNhc2UoKStDLnhCLnluKHIsMSkpfXJldHVybiBDLk5tLmsocSwiIil9
-LApPVShhKXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MCxxPSIiO3I8czsrK3Ipe3A9YVty
-XQpvPXAudG9Mb3dlckNhc2UoKQpxPShwIT09byYmcj4wP3ErIi0iOnEpK299cmV0dXJuIHEuY2hhckNv
-ZGVBdCgwKT09MD9xOnF9fQpXLktTLnByb3RvdHlwZT17CiQyKGEsYil7aWYoQy54Qi5uKGEsImRhdGEt
-IikpdGhpcy5iLiQyKHRoaXMuYS54cShDLnhCLnluKGEsNSkpLGIpfSwKJFM6OH0KVy5BMy5wcm90b3R5
-cGU9ewokMihhLGIpe2lmKEMueEIubihhLCJkYXRhLSIpKUMuTm0uaSh0aGlzLmIsdGhpcy5hLnhxKEMu
-eEIueW4oYSw1KSkpfSwKJFM6OH0KVy5JNC5wcm90b3R5cGU9ewpEKCl7dmFyIHMscixxLHAsbz1QLkxz
-KHQuTikKZm9yKHM9dGhpcy5hLmNsYXNzTmFtZS5zcGxpdCgiICIpLHI9cy5sZW5ndGgscT0wO3E8cjsr
-K3Epe3A9Si5UMChzW3FdKQppZihwLmxlbmd0aCE9PTApby5pKDAscCl9cmV0dXJuIG99LApYKGEpe3Ro
-aXMuYS5jbGFzc05hbWU9dC5DLmEoYSkuaygwLCIgIil9LApnQShhKXtyZXR1cm4gdGhpcy5hLmNsYXNz
-TGlzdC5sZW5ndGh9LApnbDAoYSl7cmV0dXJuIHRoaXMuYS5jbGFzc0xpc3QubGVuZ3RoPT09MH0sCmdv
-cihhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGghPT0wfSwKVjEoYSl7dGhpcy5hLmNsYXNz
-TmFtZT0iIn0sCnRnKGEsYil7dmFyIHM9dGhpcy5hLmNsYXNzTGlzdC5jb250YWlucyhiKQpyZXR1cm4g
-c30sCmkoYSxiKXt2YXIgcyxyCkgubihiKQpzPXRoaXMuYS5jbGFzc0xpc3QKcj1zLmNvbnRhaW5zKGIp
-CnMuYWRkKGIpCnJldHVybiFyfSwKUihhLGIpe3ZhciBzLHIscQppZih0eXBlb2YgYj09InN0cmluZyIp
-e3M9dGhpcy5hLmNsYXNzTGlzdApyPXMuY29udGFpbnMoYikKcy5yZW1vdmUoYikKcT1yfWVsc2UgcT0h
-MQpyZXR1cm4gcX0sCkZWKGEsYil7Vy5UTih0aGlzLmEsdC5PLmEoYikpfX0KVy5Gay5wcm90b3R5cGU9
-e30KVy5STy5wcm90b3R5cGU9e30KVy5DcS5wcm90b3R5cGU9e30KVy54Qy5wcm90b3R5cGU9e30KVy52
-Ti5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hLiQxKHQuQi5hKGEpKX0sCiRTOjI3fQpXLkpR
-LnByb3RvdHlwZT17CkNZKGEpe3ZhciBzCmlmKCQub3IuZ2wwKCQub3IpKXtmb3Iocz0wO3M8MjYyOysr
-cykkLm9yLlk1KDAsQy5jbVtzXSxXLnBTKCkpCmZvcihzPTA7czwxMjsrK3MpJC5vci5ZNSgwLEMuQklb
-c10sVy5WNCgpKX19LAppMChhKXtyZXR1cm4gJC5BTigpLnRnKDAsVy5yUyhhKSl9LApFYihhLGIsYyl7
-dmFyIHM9JC5vci5xKDAsVy5yUyhhKSsiOjoiK2IpCmlmKHM9PW51bGwpcz0kLm9yLnEoMCwiKjo6Iiti
-KQppZihzPT1udWxsKXJldHVybiExCnJldHVybiBILnA4KHMuJDQoYSxiLGMsdGhpcykpfSwKJGlrRjox
-fQpXLkdtLnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBuZXcgVy5XOShhLHRoaXMuZ0EoYSksSC56Syhh
-KS5DKCJXOTxHbS5FPiIpKX19ClcudkQucHJvdG90eXBlPXsKaTAoYSl7cmV0dXJuIEMuTm0uVnIodGhp
-cy5hLG5ldyBXLlV2KGEpKX0sCkViKGEsYixjKXtyZXR1cm4gQy5ObS5Wcih0aGlzLmEsbmV3IFcuRWco
-YSxiLGMpKX0sCiRpa0Y6MX0KVy5Vdi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5mNi5hKGEpLmkw
-KHRoaXMuYSl9LAokUzoxNn0KVy5FZy5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5mNi5hKGEpLkVi
-KHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0sCiRTOjE2fQpXLm02LnByb3RvdHlwZT17CkNZKGEsYixjLGQp
-e3ZhciBzLHIscQp0aGlzLmEuRlYoMCxjKQpzPWIuZXYoMCxuZXcgVy5FbygpKQpyPWIuZXYoMCxuZXcg
-Vy5XaygpKQp0aGlzLmIuRlYoMCxzKQpxPXRoaXMuYwpxLkZWKDAsQy54RCkKcS5GVigwLHIpfSwKaTAo
-YSl7cmV0dXJuIHRoaXMuYS50ZygwLFcuclMoYSkpfSwKRWIoYSxiLGMpe3ZhciBzPXRoaXMscj1XLnJT
-KGEpLHE9cy5jCmlmKHEudGcoMCxyKyI6OiIrYikpcmV0dXJuIHMuZC5EdChjKQplbHNlIGlmKHEudGco
-MCwiKjo6IitiKSlyZXR1cm4gcy5kLkR0KGMpCmVsc2V7cT1zLmIKaWYocS50ZygwLHIrIjo6IitiKSly
-ZXR1cm4hMAplbHNlIGlmKHEudGcoMCwiKjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHEudGcoMCxyKyI6
-OioiKSlyZXR1cm4hMAplbHNlIGlmKHEudGcoMCwiKjo6KiIpKXJldHVybiEwfXJldHVybiExfSwKJGlr
-RjoxfQpXLkVvLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiFDLk5tLnRnKEMuQkksSC5uKGEpKX0sCiRT
-OjZ9ClcuV2sucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEMuTm0udGcoQy5CSSxILm4oYSkpfSwKJFM6
-Nn0KVy5jdC5wcm90b3R5cGU9ewpFYihhLGIsYyl7aWYodGhpcy5qRihhLGIsYykpcmV0dXJuITAKaWYo
-Yj09PSJ0ZW1wbGF0ZSImJmM9PT0iIilyZXR1cm4hMAppZihhLmdldEF0dHJpYnV0ZSgidGVtcGxhdGUi
-KT09PSIiKXJldHVybiB0aGlzLmUudGcoMCxiKQpyZXR1cm4hMX19ClcuSUEucHJvdG90eXBlPXsKJDEo
-YSl7cmV0dXJuIlRFTVBMQVRFOjoiK0gubihhKX0sCiRTOjJ9ClcuT3cucHJvdG90eXBlPXsKaTAoYSl7
-dmFyIHMKaWYodC5hTy5iKGEpKXJldHVybiExCnM9dC5nNy5iKGEpCmlmKHMmJlcuclMoYSk9PT0iZm9y
-ZWlnbk9iamVjdCIpcmV0dXJuITEKaWYocylyZXR1cm4hMApyZXR1cm4hMX0sCkViKGEsYixjKXtpZihi
-PT09ImlzInx8Qy54Qi5uKGIsIm9uIikpcmV0dXJuITEKcmV0dXJuIHRoaXMuaTAoYSl9LAokaWtGOjF9
-ClcuVzkucHJvdG90eXBlPXsKRigpe3ZhciBzPXRoaXMscj1zLmMrMSxxPXMuYgppZihyPHEpe3Muc3Ao
-Si54OShzLmEscikpCnMuYz1yCnJldHVybiEwfXMuc3AobnVsbCkKcy5jPXEKcmV0dXJuITF9LApnbCgp
-e3JldHVybiB0aGlzLiR0aS5jLmEodGhpcy5kKX0sCnNwKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIp
-LmEoYSl9LAokaUFuOjF9ClcuZFcucHJvdG90eXBlPXskaUQwOjEsJGl2NjoxfQpXLm1rLnByb3RvdHlw
-ZT17JGl5MDoxfQpXLktvLnByb3RvdHlwZT17ClBuKGEpe3ZhciBzLHI9bmV3IFcuZm0odGhpcykKZG97
-cz10aGlzLmIKci4kMihhLG51bGwpfXdoaWxlKHMhPT10aGlzLmIpfSwKRVAoYSxiKXsrK3RoaXMuYgpp
-ZihiPT1udWxsfHxiIT09YS5wYXJlbnROb2RlKUouTHQoYSkKZWxzZSBiLnJlbW92ZUNoaWxkKGEpfSwK
-STQoYSxiKXt2YXIgcyxyLHEscCxvLG49ITAsbT1udWxsLGw9bnVsbAp0cnl7bT1KLmlnKGEpCmw9bS5h
-LmdldEF0dHJpYnV0ZSgiaXMiKQp0LmguYShhKQpzPWZ1bmN0aW9uKGMpe2lmKCEoYy5hdHRyaWJ1dGVz
-IGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKSlyZXR1cm4gdHJ1ZQppZihjLmlkPT0ibGFzdENoaWxkInx8
-Yy5uYW1lPT0ibGFzdENoaWxkInx8Yy5pZD09InByZXZpb3VzU2libGluZyJ8fGMubmFtZT09InByZXZp
-b3VzU2libGluZyJ8fGMuaWQ9PSJjaGlsZHJlbiJ8fGMubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1
-ZQp2YXIgaz1jLmNoaWxkTm9kZXMKaWYoYy5sYXN0Q2hpbGQmJmMubGFzdENoaWxkIT09a1trLmxlbmd0
-aC0xXSlyZXR1cm4gdHJ1ZQppZihjLmNoaWxkcmVuKWlmKCEoYy5jaGlsZHJlbiBpbnN0YW5jZW9mIEhU
-TUxDb2xsZWN0aW9ufHxjLmNoaWxkcmVuIGluc3RhbmNlb2YgTm9kZUxpc3QpKXJldHVybiB0cnVlCnZh
-ciBqPTAKaWYoYy5jaGlsZHJlbilqPWMuY2hpbGRyZW4ubGVuZ3RoCmZvcih2YXIgaT0wO2k8ajtpKysp
-e3ZhciBoPWMuY2hpbGRyZW5baV0KaWYoaC5pZD09ImF0dHJpYnV0ZXMifHxoLm5hbWU9PSJhdHRyaWJ1
-dGVzInx8aC5pZD09Imxhc3RDaGlsZCJ8fGgubmFtZT09Imxhc3RDaGlsZCJ8fGguaWQ9PSJwcmV2aW91
-c1NpYmxpbmcifHxoLm5hbWU9PSJwcmV2aW91c1NpYmxpbmcifHxoLmlkPT0iY2hpbGRyZW4ifHxoLm5h
-bWU9PSJjaGlsZHJlbiIpcmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfShhKQpuPUgub1Qocyk/ITA6IShh
-LmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApfWNhdGNoKHApe0guUnUocCl9cj0iZWxl
-bWVudCB1bnByaW50YWJsZSIKdHJ5e3I9Si53KGEpfWNhdGNoKHApe0guUnUocCl9dHJ5e3E9Vy5yUyhh
-KQp0aGlzLmtSKHQuaC5hKGEpLGIsbixyLHEsdC5mLmEobSksSC5rKGwpKX1jYXRjaChwKXtpZihILlJ1
-KHApIGluc3RhbmNlb2YgUC5BVCl0aHJvdyBwCmVsc2V7dGhpcy5FUChhLGIpCndpbmRvdwpvPSJSZW1v
-dmluZyBjb3JydXB0ZWQgZWxlbWVudCAiK0guRWoocikKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmlu
+dXJuIHN9LApnaU8oYSl7dmFyIHMscixxLHA9YS5sZWZ0CnAudG9TdHJpbmcKcz1hLnRvcApzLnRvU3Ry
+aW5nCnI9YS53aWR0aApyLnRvU3RyaW5nCnE9YS5oZWlnaHQKcS50b1N0cmluZwpyZXR1cm4gQS5mNShw
+LHMscixxKX19CkEucmgucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0Eu
+SVooYikKaWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBBLmIoQS5DZihiLGEsbnVsbCxudWxs
+LG51bGwpKQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXt0LkEuYShjKQp0aHJvdyBBLmIoQS5MNCgiQ2Fu
+bm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCkUoYSxiKXtpZighKGI+PTAm
+JmI8YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwK
+JGljWDoxLAokaXpNOjF9CkEuY2YucHJvdG90eXBlPXsKSyhhLGIpe3ZhciBzLHIscSxwLG8KdC5lQS5h
+KGIpCmZvcihzPXRoaXMuZ3ZjKCkscj1zLmxlbmd0aCxxPXRoaXMuYSxwPTA7cDxzLmxlbmd0aDtzLmxl
+bmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcCl7bz1zW3BdCmIuJDIobyxBLm4ocS5nZXRBdHRyaWJ1dGUo
+bykpKX19LApndmMoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEuYXR0cmlidXRlcwptLnRvU3RyaW5n
+CnM9QS5RSShbXSx0LnMpCmZvcihyPW0ubGVuZ3RoLHE9dC5oOSxwPTA7cDxyOysrcCl7aWYoIShwPG0u
+bGVuZ3RoKSlyZXR1cm4gQS5PSChtLHApCm89cS5hKG1bcF0pCmlmKG8ubmFtZXNwYWNlVVJJPT1udWxs
+KXtuPW8ubmFtZQpuLnRvU3RyaW5nCkIuTm0uaShzLG4pfX1yZXR1cm4gc30sCmdsMChhKXtyZXR1cm4g
+dGhpcy5ndmMoKS5sZW5ndGg9PT0wfX0KQS5pNy5wcm90b3R5cGU9ewp4NChhKXt2YXIgcz10aGlzLmEu
+aGFzQXR0cmlidXRlKGEpCnJldHVybiBzfSwKcShhLGIpe3JldHVybiB0aGlzLmEuZ2V0QXR0cmlidXRl
+KEEubihiKSl9LApZNShhLGIsYyl7dGhpcy5hLnNldEF0dHJpYnV0ZShiLGMpfSwKZ0EoYSl7cmV0dXJu
+IHRoaXMuZ3ZjKCkubGVuZ3RofX0KQS5TeS5wcm90b3R5cGU9ewp4NChhKXt2YXIgcz10aGlzLmEuYS5o
+YXNBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9VKGEpKQpyZXR1cm4gc30sCnEoYSxiKXtyZXR1cm4gdGhp
+cy5hLmEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrdGhpcy5PVShBLm4oYikpKX0sClk1KGEsYixjKXt0aGlz
+LmEuYS5zZXRBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9VKGIpLGMpfSwKSyhhLGIpe3RoaXMuYS5LKDAs
+bmV3IEEuS1ModGhpcyx0LmVBLmEoYikpKX0sCmd2Yygpe3ZhciBzPUEuUUkoW10sdC5zKQp0aGlzLmEu
+SygwLG5ldyBBLkEzKHRoaXMscykpCnJldHVybiBzfSwKZ0EoYSl7cmV0dXJuIHRoaXMuZ3ZjKCkubGVu
+Z3RofSwKZ2wwKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aD09PTB9LAp4cShhKXt2YXIgcyxyLHE9
+QS5RSShhLnNwbGl0KCItIiksdC5zKQpmb3Iocz0xO3M8cS5sZW5ndGg7KytzKXtyPXFbc10KaWYoci5s
+ZW5ndGg+MClCLk5tLlk1KHEscyxyWzBdLnRvVXBwZXJDYXNlKCkrQi54Qi55bihyLDEpKX1yZXR1cm4g
+Qi5ObS5rKHEsIiIpfSwKT1UoYSl7dmFyIHMscixxLHAsbwpmb3Iocz1hLmxlbmd0aCxyPTAscT0iIjty
+PHM7KytyKXtwPWFbcl0Kbz1wLnRvTG93ZXJDYXNlKCkKcT0ocCE9PW8mJnI+MD9xKyItIjpxKStvfXJl
+dHVybiBxLmNoYXJDb2RlQXQoMCk9PTA/cTpxfX0KQS5LUy5wcm90b3R5cGU9ewokMihhLGIpe2lmKEIu
+eEIubihhLCJkYXRhLSIpKXRoaXMuYi4kMih0aGlzLmEueHEoQi54Qi55bihhLDUpKSxiKX0sCiRTOjd9
+CkEuQTMucHJvdG90eXBlPXsKJDIoYSxiKXtpZihCLnhCLm4oYSwiZGF0YS0iKSlCLk5tLmkodGhpcy5i
+LHRoaXMuYS54cShCLnhCLnluKGEsNSkpKX0sCiRTOjd9CkEuSTQucHJvdG90eXBlPXsKRCgpe3ZhciBz
+LHIscSxwLG89QS5Mcyh0Lk4pCmZvcihzPXRoaXMuYS5jbGFzc05hbWUuc3BsaXQoIiAiKSxyPXMubGVu
+Z3RoLHE9MDtxPHI7KytxKXtwPUouVDAoc1txXSkKaWYocC5sZW5ndGghPT0wKW8uaSgwLHApfXJldHVy
+biBvfSwKWChhKXt0aGlzLmEuY2xhc3NOYW1lPXQuQy5hKGEpLmsoMCwiICIpfSwKZ0EoYSl7cmV0dXJu
+IHRoaXMuYS5jbGFzc0xpc3QubGVuZ3RofSwKZ2wwKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxl
+bmd0aD09PTB9LApnb3IoYSl7cmV0dXJuIHRoaXMuYS5jbGFzc0xpc3QubGVuZ3RoIT09MH0sClYxKGEp
+e3RoaXMuYS5jbGFzc05hbWU9IiJ9LAp0ZyhhLGIpe3ZhciBzPXRoaXMuYS5jbGFzc0xpc3QuY29udGFp
+bnMoYikKcmV0dXJuIHN9LAppKGEsYil7dmFyIHMscgpBLm4oYikKcz10aGlzLmEuY2xhc3NMaXN0CnI9
+cy5jb250YWlucyhiKQpzLmFkZChiKQpyZXR1cm4hcn0sClIoYSxiKXt2YXIgcyxyLHEKaWYodHlwZW9m
+IGI9PSJzdHJpbmciKXtzPXRoaXMuYS5jbGFzc0xpc3QKcj1zLmNvbnRhaW5zKGIpCnMucmVtb3ZlKGIp
+CnE9cn1lbHNlIHE9ITEKcmV0dXJuIHF9LApGVihhLGIpe0EuVE4odGhpcy5hLHQuTy5hKGIpKX19CkEu
+RmsucHJvdG90eXBlPXt9CkEuUk8ucHJvdG90eXBlPXt9CkEuQ3EucHJvdG90eXBlPXt9CkEueEMucHJv
+dG90eXBlPXt9CkEudk4ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYS4kMSh0LkIuYShhKSl9
+LAokUzoyN30KQS5KUS5wcm90b3R5cGU9ewpDWShhKXt2YXIgcwppZigkLm9yLmdsMCgkLm9yKSl7Zm9y
+KHM9MDtzPDI2MjsrK3MpJC5vci5ZNSgwLEIuY21bc10sQS5wUygpKQpmb3Iocz0wO3M8MTI7KytzKSQu
+b3IuWTUoMCxCLkJJW3NdLEEuVjQoKSl9fSwKaTAoYSl7cmV0dXJuICQuQU4oKS50ZygwLEEuclMoYSkp
+fSwKRWIoYSxiLGMpe3ZhciBzPSQub3IucSgwLEEuclMoYSkrIjo6IitiKQppZihzPT1udWxsKXM9JC5v
+ci5xKDAsIio6OiIrYikKaWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gQS5wOChzLiQ0KGEsYixjLHRo
+aXMpKX0sCiRpa0Y6MX0KQS5HbS5wcm90b3R5cGU9ewpnbShhKXtyZXR1cm4gbmV3IEEuVzkoYSx0aGlz
+LmdBKGEpLEEueksoYSkuQygiVzk8R20uRT4iKSl9fQpBLnZELnByb3RvdHlwZT17CmkwKGEpe3JldHVy
+biBCLk5tLlZyKHRoaXMuYSxuZXcgQS5VdihhKSl9LApFYihhLGIsYyl7cmV0dXJuIEIuTm0uVnIodGhp
+cy5hLG5ldyBBLkVnKGEsYixjKSl9LAokaWtGOjF9CkEuVXYucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJu
+IHQuZjYuYShhKS5pMCh0aGlzLmEpfSwKJFM6MTZ9CkEuRWcucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJu
+IHQuZjYuYShhKS5FYih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzoxNn0KQS5tNi5wcm90b3R5cGU9
+ewpDWShhLGIsYyxkKXt2YXIgcyxyLHEKdGhpcy5hLkZWKDAsYykKcz1iLmV2KDAsbmV3IEEuRW8oKSkK
+cj1iLmV2KDAsbmV3IEEuV2soKSkKdGhpcy5iLkZWKDAscykKcT10aGlzLmMKcS5GVigwLEIueEQpCnEu
+RlYoMCxyKX0sCmkwKGEpe3JldHVybiB0aGlzLmEudGcoMCxBLnJTKGEpKX0sCkViKGEsYixjKXt2YXIg
+cz10aGlzLHI9QS5yUyhhKSxxPXMuYwppZihxLnRnKDAscisiOjoiK2IpKXJldHVybiBzLmQuRHQoYykK
+ZWxzZSBpZihxLnRnKDAsIio6OiIrYikpcmV0dXJuIHMuZC5EdChjKQplbHNle3E9cy5iCmlmKHEudGco
+MCxyKyI6OiIrYikpcmV0dXJuITAKZWxzZSBpZihxLnRnKDAsIio6OiIrYikpcmV0dXJuITAKZWxzZSBp
+ZihxLnRnKDAscisiOjoqIikpcmV0dXJuITAKZWxzZSBpZihxLnRnKDAsIio6OioiKSlyZXR1cm4hMH1y
+ZXR1cm4hMX0sCiRpa0Y6MX0KQS5Fby5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4hQi5ObS50ZyhCLkJJ
+LEEubihhKSl9LAokUzo1fQpBLldrLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBCLk5tLnRnKEIuQkks
+QS5uKGEpKX0sCiRTOjV9CkEuY3QucHJvdG90eXBlPXsKRWIoYSxiLGMpe2lmKHRoaXMuakYoYSxiLGMp
+KXJldHVybiEwCmlmKGI9PT0idGVtcGxhdGUiJiZjPT09IiIpcmV0dXJuITAKaWYoYS5nZXRBdHRyaWJ1
+dGUoInRlbXBsYXRlIik9PT0iIilyZXR1cm4gdGhpcy5lLnRnKDAsYikKcmV0dXJuITF9fQpBLklBLnBy
+b3RvdHlwZT17CiQxKGEpe3JldHVybiJURU1QTEFURTo6IitBLm4oYSl9LAokUzoyfQpBLk93LnByb3Rv
+dHlwZT17CmkwKGEpe3ZhciBzCmlmKHQuYU8uYihhKSlyZXR1cm4hMQpzPXQuZzcuYihhKQppZihzJiZB
+LnJTKGEpPT09ImZvcmVpZ25PYmplY3QiKXJldHVybiExCmlmKHMpcmV0dXJuITAKcmV0dXJuITF9LApF
+YihhLGIsYyl7aWYoYj09PSJpcyJ8fEIueEIubihiLCJvbiIpKXJldHVybiExCnJldHVybiB0aGlzLmkw
+KGEpfSwKJGlrRjoxfQpBLlc5LnByb3RvdHlwZT17CkYoKXt2YXIgcz10aGlzLHI9cy5jKzEscT1zLmIK
+aWYocjxxKXtzLnNwKEoueDkocy5hLHIpKQpzLmM9cgpyZXR1cm4hMH1zLnNwKG51bGwpCnMuYz1xCnJl
+dHVybiExfSwKZ2woKXtyZXR1cm4gdGhpcy4kdGkuYy5hKHRoaXMuZCl9LApzcChhKXt0aGlzLmQ9dGhp
+cy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpBLmRXLnByb3RvdHlwZT17JGlEMDoxLCRpdjY6MX0K
+QS5tay5wcm90b3R5cGU9eyRpeTA6MX0KQS5Lby5wcm90b3R5cGU9ewpQbihhKXt2YXIgcyxyPW5ldyBB
+LmZtKHRoaXMpCmRve3M9dGhpcy5iCnIuJDIoYSxudWxsKX13aGlsZShzIT09dGhpcy5iKX0sCkVQKGEs
+Yil7Kyt0aGlzLmIKaWYoYj09bnVsbHx8YiE9PWEucGFyZW50Tm9kZSlKLkx0KGEpCmVsc2UgYi5yZW1v
+dmVDaGlsZChhKX0sCkk0KGEsYil7dmFyIHMscixxLHAsbyxuPSEwLG09bnVsbCxsPW51bGwKdHJ5e209
+Si5pZyhhKQpsPW0uYS5nZXRBdHRyaWJ1dGUoImlzIikKdC5oLmEoYSkKcz1mdW5jdGlvbihjKXtpZigh
+KGMuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkpcmV0dXJuIHRydWUKaWYoYy5pZD09
+Imxhc3RDaGlsZCJ8fGMubmFtZT09Imxhc3RDaGlsZCJ8fGMuaWQ9PSJwcmV2aW91c1NpYmxpbmcifHxj
+Lm5hbWU9PSJwcmV2aW91c1NpYmxpbmcifHxjLmlkPT0iY2hpbGRyZW4ifHxjLm5hbWU9PSJjaGlsZHJl
+biIpcmV0dXJuIHRydWUKdmFyIGs9Yy5jaGlsZE5vZGVzCmlmKGMubGFzdENoaWxkJiZjLmxhc3RDaGls
+ZCE9PWtbay5sZW5ndGgtMV0pcmV0dXJuIHRydWUKaWYoYy5jaGlsZHJlbilpZighKGMuY2hpbGRyZW4g
+aW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbnx8Yy5jaGlsZHJlbiBpbnN0YW5jZW9mIE5vZGVMaXN0KSly
+ZXR1cm4gdHJ1ZQp2YXIgaj0wCmlmKGMuY2hpbGRyZW4paj1jLmNoaWxkcmVuLmxlbmd0aApmb3IodmFy
+IGk9MDtpPGo7aSsrKXt2YXIgaD1jLmNoaWxkcmVuW2ldCmlmKGguaWQ9PSJhdHRyaWJ1dGVzInx8aC5u
+YW1lPT0iYXR0cmlidXRlcyJ8fGguaWQ9PSJsYXN0Q2hpbGQifHxoLm5hbWU9PSJsYXN0Q2hpbGQifHxo
+LmlkPT0icHJldmlvdXNTaWJsaW5nInx8aC5uYW1lPT0icHJldmlvdXNTaWJsaW5nInx8aC5pZD09ImNo
+aWxkcmVuInx8aC5uYW1lPT0iY2hpbGRyZW4iKXJldHVybiB0cnVlfXJldHVybiBmYWxzZX0oYSkKbj1B
+Lm9UKHMpPyEwOiEoYS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKX1jYXRjaChwKXt9
+cj0iZWxlbWVudCB1bnByaW50YWJsZSIKdHJ5e3I9Si5ZUyhhKX1jYXRjaChwKXt9dHJ5e3E9QS5yUyhh
+KQp0aGlzLmtSKHQuaC5hKGEpLGIsbixyLHEsdC5mLmEobSksQS5rKGwpKX1jYXRjaChwKXtpZihBLlJ1
+KHApIGluc3RhbmNlb2YgQS5BVCl0aHJvdyBwCmVsc2V7dGhpcy5FUChhLGIpCndpbmRvdwpvPSJSZW1v
+dmluZyBjb3JydXB0ZWQgZWxlbWVudCAiK0EuRWoocikKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmlu
 ZWQiKXdpbmRvdy5jb25zb2xlLndhcm4obyl9fX0sCmtSKGEsYixjLGQsZSxmLGcpe3ZhciBzLHIscSxw
 LG8sbixtPXRoaXMKaWYoYyl7bS5FUChhLGIpCndpbmRvdwpzPSJSZW1vdmluZyBlbGVtZW50IGR1ZSB0
 byBjb3JydXB0ZWQgYXR0cmlidXRlcyBvbiA8IitkKyI+IgppZih0eXBlb2YgY29uc29sZSE9InVuZGVm
 aW5lZCIpd2luZG93LmNvbnNvbGUud2FybihzKQpyZXR1cm59aWYoIW0uYS5pMChhKSl7bS5FUChhLGIp
-CndpbmRvdwpzPSJSZW1vdmluZyBkaXNhbGxvd2VkIGVsZW1lbnQgPCIrZSsiPiBmcm9tICIrSC5Faihi
+CndpbmRvdwpzPSJSZW1vdmluZyBkaXNhbGxvd2VkIGVsZW1lbnQgPCIrZSsiPiBmcm9tICIrQS5Faihi
 KQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihzKQpyZXR1
 cm59aWYoZyE9bnVsbClpZighbS5hLkViKGEsImlzIixnKSl7bS5FUChhLGIpCndpbmRvdwpzPSJSZW1v
 dmluZyBkaXNhbGxvd2VkIHR5cGUgZXh0ZW5zaW9uIDwiK2UrJyBpcz0iJytnKyciPicKaWYodHlwZW9m
 IGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4ocykKcmV0dXJufXM9Zi5ndmMo
-KQpyPUguUUkocy5zbGljZSgwKSxILnQ2KHMpKQpmb3IocT1mLmd2YygpLmxlbmd0aC0xLHM9Zi5hO3E+
-PTA7LS1xKXtpZihxPj1yLmxlbmd0aClyZXR1cm4gSC5PSChyLHEpCnA9cltxXQpvPW0uYQpuPUouY0go
-cCkKSC5uKHApCmlmKCFvLkViKGEsbixILm4ocy5nZXRBdHRyaWJ1dGUocCkpKSl7d2luZG93Cm89IlJl
-bW92aW5nIGRpc2FsbG93ZWQgYXR0cmlidXRlIDwiK2UrIiAiK3ArJz0iJytILkVqKHMuZ2V0QXR0cmli
-dXRlKHApKSsnIj4nCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53
-YXJuKG8pCnMucmVtb3ZlQXR0cmlidXRlKHApfX1pZih0LmFXLmIoYSkpe3M9YS5jb250ZW50CnMudG9T
-dHJpbmcKbS5QbihzKX19LAokaW9uOjF9ClcuZm0ucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxyLHEs
-cCxvLG4sbT10aGlzLmEKc3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTptLkk0KGEsYikKYnJlYWsKY2Fz
-ZSA4OmNhc2UgMTE6Y2FzZSAzOmNhc2UgNDpicmVhawpkZWZhdWx0Om0uRVAoYSxiKX1zPWEubGFzdENo
-aWxkCmZvcihxPXQuQTtzIT1udWxsOyl7cj1udWxsCnRyeXtyPXMucHJldmlvdXNTaWJsaW5nCmlmKHIh
-PW51bGwpe3A9ci5uZXh0U2libGluZwpvPXMKbz1wPT1udWxsP28hPW51bGw6cCE9PW8KcD1vfWVsc2Ug
-cD0hMQppZihwKXtwPVAuUFYoIkNvcnJ1cHQgSFRNTCIpCnRocm93IEguYihwKX19Y2F0Y2gobil7SC5S
-dShuKQpwPXEuYShzKTsrK20uYgpvPXAucGFyZW50Tm9kZQppZihhIT09byl7aWYobyE9bnVsbClvLnJl
-bW92ZUNoaWxkKHApfWVsc2UgYS5yZW1vdmVDaGlsZChwKQpzPW51bGwKcj1hLmxhc3RDaGlsZH1pZihz
-IT1udWxsKXRoaXMuJDIocyxhKQpzPXJ9fSwKJFM6MzB9ClcuTGUucHJvdG90eXBlPXt9ClcuSzcucHJv
-dG90eXBlPXt9ClcuckIucHJvdG90eXBlPXt9ClcuWFcucHJvdG90eXBlPXt9Clcub2EucHJvdG90eXBl
-PXt9ClAuaUoucHJvdG90eXBlPXsKVkgoYSl7dmFyIHMscj10aGlzLmEscT1yLmxlbmd0aApmb3Iocz0w
-O3M8cTsrK3MpaWYocltzXT09PWEpcmV0dXJuIHMKQy5ObS5pKHIsYSkKQy5ObS5pKHRoaXMuYixudWxs
-KQpyZXR1cm4gcX0sClB2KGEpe3ZhciBzLHIscSxwPXRoaXMsbz17fQppZihhPT1udWxsKXJldHVybiBh
-CmlmKEguclEoYSkpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKHR5cGVv
-ZiBhPT0ic3RyaW5nIilyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgUC5pUClyZXR1cm4gbmV3IERhdGUo
-YS5hKQppZih0LmZ2LmIoYSkpdGhyb3cgSC5iKFAuU1koInN0cnVjdHVyZWQgY2xvbmUgb2YgUmVnRXhw
-IikpCmlmKHQuYzguYihhKSlyZXR1cm4gYQppZih0LncuYihhKSlyZXR1cm4gYQppZih0LkkuYihhKSly
-ZXR1cm4gYQpzPXQuZEUuYihhKXx8ITEKaWYocylyZXR1cm4gYQppZih0LmYuYihhKSl7cj1wLlZIKGEp
-CnM9cC5iCmlmKHI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMscikKcT1vLmE9c1tyXQppZihxIT1udWxs
-KXJldHVybiBxCnE9e30Kby5hPXEKQy5ObS5ZNShzLHIscSkKYS5LKDAsbmV3IFAuRTIobyxwKSkKcmV0
-dXJuIG8uYX1pZih0LmouYihhKSl7cj1wLlZIKGEpCm89cC5iCmlmKHI+PW8ubGVuZ3RoKXJldHVybiBI
-Lk9IKG8scikKcT1vW3JdCmlmKHEhPW51bGwpcmV0dXJuIHEKcmV0dXJuIHAuZWsoYSxyKX1pZih0LmVI
-LmIoYSkpe3I9cC5WSChhKQpzPXAuYgppZihyPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLHIpCnE9by5i
-PXNbcl0KaWYocSE9bnVsbClyZXR1cm4gcQpxPXt9Cm8uYj1xCkMuTm0uWTUocyxyLHEpCnAuaW0oYSxu
-ZXcgUC5qZyhvLHApKQpyZXR1cm4gby5ifXRocm93IEguYihQLlNZKCJzdHJ1Y3R1cmVkIGNsb25lIG9m
+KQpyPUEuUUkocy5zbGljZSgwKSxBLnQ2KHMpKQpmb3IocT1mLmd2YygpLmxlbmd0aC0xLHM9Zi5hO3E+
+PTA7LS1xKXtpZighKHE8ci5sZW5ndGgpKXJldHVybiBBLk9IKHIscSkKcD1yW3FdCm89bS5hCm49Si5j
+SChwKQpBLm4ocCkKaWYoIW8uRWIoYSxuLEEubihzLmdldEF0dHJpYnV0ZShwKSkpKXt3aW5kb3cKbz0i
+UmVtb3ZpbmcgZGlzYWxsb3dlZCBhdHRyaWJ1dGUgPCIrZSsiICIrcCsnPSInK0EuRWoocy5nZXRBdHRy
+aWJ1dGUocCkpKyciPicKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xl
+Lndhcm4obykKcy5yZW1vdmVBdHRyaWJ1dGUocCl9fWlmKHQuYVcuYihhKSl7cz1hLmNvbnRlbnQKcy50
+b1N0cmluZwptLlBuKHMpfX0sCiRpb246MX0KQS5mbS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzLHIs
+cSxwLG8sbixtPXRoaXMuYQpzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOm0uSTQoYSxiKQpicmVhawpj
+YXNlIDg6Y2FzZSAxMTpjYXNlIDM6Y2FzZSA0OmJyZWFrCmRlZmF1bHQ6bS5FUChhLGIpfXM9YS5sYXN0
+Q2hpbGQKZm9yKHE9dC5BO3MhPW51bGw7KXtyPW51bGwKdHJ5e3I9cy5wcmV2aW91c1NpYmxpbmcKaWYo
+ciE9bnVsbCl7cD1yLm5leHRTaWJsaW5nCm89cwpvPXA9PW51bGw/byE9bnVsbDpwIT09bwpwPW99ZWxz
+ZSBwPSExCmlmKHApe3A9QS5QVigiQ29ycnVwdCBIVE1MIikKdGhyb3cgQS5iKHApfX1jYXRjaChuKXtw
+PXEuYShzKTsrK20uYgpvPXAucGFyZW50Tm9kZQppZihhIT09byl7aWYobyE9bnVsbClvLnJlbW92ZUNo
+aWxkKHApfWVsc2UgYS5yZW1vdmVDaGlsZChwKQpzPW51bGwKcj1hLmxhc3RDaGlsZH1pZihzIT1udWxs
+KXRoaXMuJDIocyxhKQpzPXJ9fSwKJFM6MzB9CkEuWTgucHJvdG90eXBlPXt9CkEubnEucHJvdG90eXBl
+PXt9CkEuQXIucHJvdG90eXBlPXt9CkEudEQucHJvdG90eXBlPXt9CkEudWYucHJvdG90eXBlPXt9CkEu
+aUoucHJvdG90eXBlPXsKVkgoYSl7dmFyIHMscj10aGlzLmEscT1yLmxlbmd0aApmb3Iocz0wO3M8cTsr
+K3MpaWYocltzXT09PWEpcmV0dXJuIHMKQi5ObS5pKHIsYSkKQi5ObS5pKHRoaXMuYixudWxsKQpyZXR1
+cm4gcX0sClB2KGEpe3ZhciBzLHIscSxwPXRoaXMsbz17fQppZihhPT1udWxsKXJldHVybiBhCmlmKEEu
+clEoYSkpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKHR5cGVvZiBhPT0i
+c3RyaW5nIilyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgQS5pUClyZXR1cm4gbmV3IERhdGUoYS5hKQpp
+Zih0LmZ2LmIoYSkpdGhyb3cgQS5iKEEuU1koInN0cnVjdHVyZWQgY2xvbmUgb2YgUmVnRXhwIikpCmlm
+KHQuYzguYihhKSlyZXR1cm4gYQppZih0LncuYihhKSlyZXR1cm4gYQppZih0LnguYihhKSlyZXR1cm4g
+YQpzPXQuZEUuYihhKXx8ITEKaWYocylyZXR1cm4gYQppZih0LmYuYihhKSl7cj1wLlZIKGEpCnM9cC5i
+CmlmKCEocjxzLmxlbmd0aCkpcmV0dXJuIEEuT0gocyxyKQpxPW8uYT1zW3JdCmlmKHEhPW51bGwpcmV0
+dXJuIHEKcT17fQpvLmE9cQpCLk5tLlk1KHMscixxKQphLksoMCxuZXcgQS5FMihvLHApKQpyZXR1cm4g
+by5hfWlmKHQuai5iKGEpKXtyPXAuVkgoYSkKbz1wLmIKaWYoIShyPG8ubGVuZ3RoKSlyZXR1cm4gQS5P
+SChvLHIpCnE9b1tyXQppZihxIT1udWxsKXJldHVybiBxCnJldHVybiBwLmVrKGEscil9aWYodC5lSC5i
+KGEpKXtyPXAuVkgoYSkKcz1wLmIKaWYoIShyPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLHIpCnE9by5i
+PXNbcl0KaWYocSE9bnVsbClyZXR1cm4gcQpxPXt9Cm8uYj1xCkIuTm0uWTUocyxyLHEpCnAuaW0oYSxu
+ZXcgQS5qZyhvLHApKQpyZXR1cm4gby5ifXRocm93IEEuYihBLlNZKCJzdHJ1Y3R1cmVkIGNsb25lIG9m
 IG90aGVyIHR5cGUiKSl9LAplayhhLGIpe3ZhciBzLHI9Si5VNihhKSxxPXIuZ0EoYSkscD1uZXcgQXJy
-YXkocSkKQy5ObS5ZNSh0aGlzLmIsYixwKQpmb3Iocz0wO3M8cTsrK3MpQy5ObS5ZNShwLHMsdGhpcy5Q
-dihyLnEoYSxzKSkpCnJldHVybiBwfX0KUC5FMi5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYS5hW2Fd
-PXRoaXMuYi5QdihiKX0sCiRTOjMxfQpQLmpnLnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLmJbYV09
-dGhpcy5iLlB2KGIpfSwKJFM6MzJ9ClAuQmYucHJvdG90eXBlPXsKaW0oYSxiKXt2YXIgcyxyLHEscAp0
+YXkocSkKQi5ObS5ZNSh0aGlzLmIsYixwKQpmb3Iocz0wO3M8cTsrK3MpQi5ObS5ZNShwLHMsdGhpcy5Q
+dihyLnEoYSxzKSkpCnJldHVybiBwfX0KQS5FMi5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYS5hW2Fd
+PXRoaXMuYi5QdihiKX0sCiRTOjMxfQpBLmpnLnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLmJbYV09
+dGhpcy5iLlB2KGIpfSwKJFM6MzJ9CkEuQmYucHJvdG90eXBlPXsKaW0oYSxiKXt2YXIgcyxyLHEscAp0
 LmI4LmEoYikKZm9yKHM9T2JqZWN0LmtleXMoYSkscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1zW3Fd
-CmIuJDIocCxhW3BdKX19fQpQLkFzLnByb3RvdHlwZT17ClYoYSl7dmFyIHMKSC5uKGEpCnM9JC5oRygp
-LmIKaWYocy50ZXN0KGEpKXJldHVybiBhCnRocm93IEguYihQLkwzKGEsInZhbHVlIiwiTm90IGEgdmFs
+CmIuJDIocCxhW3BdKX19fQpBLkFzLnByb3RvdHlwZT17ClYoYSl7dmFyIHMKQS5uKGEpCnM9JC5oRygp
+LmIKaWYocy50ZXN0KGEpKXJldHVybiBhCnRocm93IEEuYihBLkwzKGEsInZhbHVlIiwiTm90IGEgdmFs
 aWQgY2xhc3MgdG9rZW4iKSl9LAp3KGEpe3JldHVybiB0aGlzLkQoKS5rKDAsIiAiKX0sCmdtKGEpe3Zh
-ciBzPXRoaXMuRCgpCnJldHVybiBQLnJqKHMscy5yLEguTGgocykuYyl9LApnbDAoYSl7cmV0dXJuIHRo
+ciBzPXRoaXMuRCgpCnJldHVybiBBLnJqKHMscy5yLEEuTGgocykuYyl9LApnbDAoYSl7cmV0dXJuIHRo
 aXMuRCgpLmE9PT0wfSwKZ29yKGEpe3JldHVybiB0aGlzLkQoKS5hIT09MH0sCmdBKGEpe3JldHVybiB0
 aGlzLkQoKS5hfSwKdGcoYSxiKXt0aGlzLlYoYikKcmV0dXJuIHRoaXMuRCgpLnRnKDAsYil9LAppKGEs
-Yil7dmFyIHMKSC5uKGIpCnRoaXMuVihiKQpzPXRoaXMuT1MobmV3IFAuR0UoYikpCnJldHVybiBILnA4
+Yil7dmFyIHMKQS5uKGIpCnRoaXMuVihiKQpzPXRoaXMuT1MobmV3IEEuR0UoYikpCnJldHVybiBBLnA4
 KHM9PW51bGw/ITE6cyl9LApSKGEsYil7dmFyIHMscgppZih0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJu
 ITEKdGhpcy5WKGIpCnM9dGhpcy5EKCkKcj1zLlIoMCxiKQp0aGlzLlgocykKcmV0dXJuIHJ9LApGVihh
-LGIpe3RoaXMuT1MobmV3IFAuTjcodGhpcyx0Lk8uYShiKSkpfSwKZVIoYSxiKXt2YXIgcz10aGlzLkQo
-KQpyZXR1cm4gSC5iSyhzLGIsSC5MaChzKS5DKCJsZi5FIikpfSwKRShhLGIpe3JldHVybiB0aGlzLkQo
-KS5FKDAsYil9LApWMShhKXt0aGlzLk9TKG5ldyBQLnVRKCkpfSwKT1MoYSl7dmFyIHMscgp0LmJVLmEo
-YSkKcz10aGlzLkQoKQpyPWEuJDEocykKdGhpcy5YKHMpCnJldHVybiByfX0KUC5HRS5wcm90b3R5cGU9
-ewokMShhKXtyZXR1cm4gdC5DLmEoYSkuaSgwLHRoaXMuYSl9LAokUzozM30KUC5ONy5wcm90b3R5cGU9
-ewokMShhKXt2YXIgcz10aGlzLmIscj1ILnQ2KHMpCnJldHVybiB0LkMuYShhKS5GVigwLG5ldyBILmxK
-KHMsci5DKCJxVSgxKSIpLmEodGhpcy5hLmd1TSgpKSxyLkMoImxKPDEscVU+IikpKX0sCiRTOjEyfQpQ
+LGIpe3RoaXMuT1MobmV3IEEuTjcodGhpcyx0Lk8uYShiKSkpfSwKZVIoYSxiKXt2YXIgcz10aGlzLkQo
+KQpyZXR1cm4gQS5iSyhzLGIsQS5MaChzKS5DKCJsZi5FIikpfSwKRShhLGIpe3JldHVybiB0aGlzLkQo
+KS5FKDAsYil9LApWMShhKXt0aGlzLk9TKG5ldyBBLnVRKCkpfSwKT1MoYSl7dmFyIHMscgp0LmJVLmEo
+YSkKcz10aGlzLkQoKQpyPWEuJDEocykKdGhpcy5YKHMpCnJldHVybiByfX0KQS5HRS5wcm90b3R5cGU9
+ewokMShhKXtyZXR1cm4gdC5DLmEoYSkuaSgwLHRoaXMuYSl9LAokUzozM30KQS5ONy5wcm90b3R5cGU9
+ewokMShhKXt2YXIgcz10aGlzLmIscj1BLnQ2KHMpCnJldHVybiB0LkMuYShhKS5GVigwLG5ldyBBLmxK
+KHMsci5DKCJxVSgxKSIpLmEodGhpcy5hLmd1TSgpKSxyLkMoImxKPDEscVU+IikpKX0sCiRTOjEyfQpB
 LnVRLnByb3RvdHlwZT17CiQxKGEpe3QuQy5hKGEpCmlmKGEuYT4wKXthLmI9YS5jPWEuZD1hLmU9YS5m
-PW51bGwKYS5hPTAKYS5TKCl9cmV0dXJuIG51bGx9LAokUzoxMn0KUC5oRi5wcm90b3R5cGU9eyRpaEY6
-MX0KUC5EVi5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlkuYShhKQpzPWZ1bmN0aW9uKGIsYyxkKXty
+PW51bGwKYS5hPTAKYS5TKCl9cmV0dXJuIG51bGx9LAokUzoxMn0KQS5oRi5wcm90b3R5cGU9eyRpaEY6
+MX0KQS5EVi5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlkuYShhKQpzPWZ1bmN0aW9uKGIsYyxkKXty
 ZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYihjLGQsdGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBw
-bHkoYXJndW1lbnRzKSl9fShQLlI0LGEsITEpClAuRG0ocywkLnooKSxhKQpyZXR1cm4gc30sCiRTOjR9
-ClAuUEMucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9LAokUzo0fQpQLlFTLnBy
-b3RvdHlwZT17CiQxKGEpe3JldHVybiBuZXcgUC5yNyh0LksuYShhKSl9LAokUzo0NH0KUC5ucC5wcm90
-b3R5cGU9ewokMShhKXtyZXR1cm4gbmV3IFAuVHoodC5LLmEoYSksdC5hbSl9LAokUzozNn0KUC5VdC5w
-cm90b3R5cGU9ewokMShhKXtyZXR1cm4gbmV3IFAuRTQodC5LLmEoYSkpfSwKJFM6Mzd9ClAuRTQucHJv
+bHkoYXJndW1lbnRzKSl9fShBLlI0LGEsITEpCkEuRG0ocywkLncoKSxhKQpyZXR1cm4gc30sCiRTOjN9
+CkEuUEMucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9LAokUzozfQpBLlFTLnBy
+b3RvdHlwZT17CiQxKGEpe3JldHVybiBuZXcgQS5yNyh0LksuYShhKSl9LAokUzo0NH0KQS5ucC5wcm90
+b3R5cGU9ewokMShhKXtyZXR1cm4gbmV3IEEuVHoodC5LLmEoYSksdC5hbSl9LAokUzozNn0KQS5VdC5w
+cm90b3R5cGU9ewokMShhKXtyZXR1cm4gbmV3IEEuRTQodC5LLmEoYSkpfSwKJFM6Mzd9CkEuRTQucHJv
 dG90eXBlPXsKcShhLGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nIiYmdHlwZW9mIGIhPSJudW1iZXIiKXRo
-cm93IEguYihQLnhZKCJwcm9wZXJ0eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIixudWxsKSkKcmV0dXJu
-IFAuZFUodGhpcy5hW2JdKX0sClk1KGEsYixjKXtpZih0eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBi
-IT0ibnVtYmVyIil0aHJvdyBILmIoUC54WSgicHJvcGVydHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIs
-bnVsbCkpCnRoaXMuYVtiXT1QLndZKGMpfSwKRE4oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVy
-biBiIGluc3RhbmNlb2YgUC5FNCYmdGhpcy5hPT09Yi5hfSwKdyhhKXt2YXIgcyxyCnRyeXtzPVN0cmlu
-Zyh0aGlzLmEpCnJldHVybiBzfWNhdGNoKHIpe0guUnUocikKcz10aGlzLnhiKDApCnJldHVybiBzfX0s
-ClY3KGEsYil7dmFyIHMscj10aGlzLmEKaWYoYj09bnVsbClzPW51bGwKZWxzZXtzPUgudDYoYikKcz1Q
-LlBXKG5ldyBILmxKKGIscy5DKCJAKDEpIikuYShQLmlHKCkpLHMuQygibEo8MSxAPiIpKSwhMCx0Lnop
-fXJldHVybiBQLmRVKHJbYV0uYXBwbHkocixzKSl9LApnaU8oYSl7cmV0dXJuIDB9fQpQLnI3LnByb3Rv
-dHlwZT17fQpQLlR6LnByb3RvdHlwZT17CmNQKGEpe3ZhciBzPXRoaXMscj1hPDB8fGE+PXMuZ0EocykK
-aWYocil0aHJvdyBILmIoUC5URShhLDAscy5nQShzKSxudWxsLG51bGwpKX0sCnEoYSxiKXtpZihILm9r
-KGIpKXRoaXMuY1AoYikKcmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLlVyKDAsYikpfSwKWTUoYSxiLGMp
-e3RoaXMuY1AoYikKdGhpcy5iaCgwLGIsYyl9LApnQShhKXt2YXIgcz10aGlzLmEubGVuZ3RoCmlmKHR5
-cGVvZiBzPT09Im51bWJlciImJnM+Pj4wPT09cylyZXR1cm4gcwp0aHJvdyBILmIoUC5QVigiQmFkIEpz
-QXJyYXkgbGVuZ3RoIikpfSwKJGliUToxLAokaWNYOjEsCiRpek06MX0KUC52Zy5wcm90b3R5cGU9ewpZ
-NShhLGIsYyl7cmV0dXJuIHRoaXMuZTQoMCxiLGMpfX0KUC5uZC5wcm90b3R5cGU9eyRpbmQ6MX0KUC5L
-ZS5wcm90b3R5cGU9ewpEKCl7dmFyIHMscixxLHAsbz10aGlzLmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIp
-LG49UC5Mcyh0Lk4pCmlmKG89PW51bGwpcmV0dXJuIG4KZm9yKHM9by5zcGxpdCgiICIpLHI9cy5sZW5n
-dGgscT0wO3E8cjsrK3Epe3A9Si5UMChzW3FdKQppZihwLmxlbmd0aCE9PTApbi5pKDAscCl9cmV0dXJu
-IG59LApYKGEpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoImNsYXNzIixhLmsoMCwiICIpKX19ClAuaGkucHJv
-dG90eXBlPXsKZ1AoYSl7cmV0dXJuIG5ldyBQLktlKGEpfSwKc2hmKGEsYil7dGhpcy5ZQyhhLGIpfSwK
-cjYoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuCmlmKGQ9PW51bGwpe3M9SC5RSShbXSx0LnUpCmQ9bmV3
-IFcudkQocykKQy5ObS5pKHMsVy5UdyhudWxsKSkKQy5ObS5pKHMsVy5CbCgpKQpDLk5tLmkocyxuZXcg
-Vy5PdygpKX1jPW5ldyBXLktvKGQpCnI9JzxzdmcgdmVyc2lvbj0iMS4xIj4nK0guRWooYikrIjwvc3Zn
-PiIKcz1kb2N1bWVudApxPXMuYm9keQpxLnRvU3RyaW5nCnA9Qy5SWS5BSChxLHIsYykKbz1zLmNyZWF0
-ZURvY3VtZW50RnJhZ21lbnQoKQpzPW5ldyBXLmU3KHApCm49cy5ncjgocykKZm9yKDtzPW4uZmlyc3RD
-aGlsZCxzIT1udWxsOylvLmFwcGVuZENoaWxkKHMpCnJldHVybiBvfSwKbnooYSxiLGMsZCxlKXt0aHJv
-dyBILmIoUC5MNCgiQ2Fubm90IGludm9rZSBpbnNlcnRBZGphY2VudEh0bWwgb24gU1ZHLiIpKX0sCmdW
-bChhKXtyZXR1cm4gbmV3IFcuQ3EoYSwiY2xpY2siLCExLHQuUSl9LAokaWhpOjF9ClUuZDIucHJvdG90
-eXBlPXsKTHQoKXt2YXIgcyxyLHEscCxvPXRoaXMsbj10Lk4sbT10LlgsbD1QLkZsKG4sbSksaz1vLmEK
-aWYoayE9bnVsbCl7cz1ILlFJKFtdLHQuZCkKZm9yKHI9ay5sZW5ndGgscT0wO3E8ay5sZW5ndGg7ay5s
-ZW5ndGg9PT1yfHwoMCxILmxrKShrKSwrK3Epe3A9a1txXQpzLnB1c2goUC5FRihbImRlc2NyaXB0aW9u
-IixwLmEsImhyZWYiLHAuYl0sbixtKSl9bC5ZNSgwLCJlZGl0cyIscyl9bC5ZNSgwLCJleHBsYW5hdGlv
-biIsby5iKQpsLlk1KDAsImxpbmUiLG8uYykKbC5ZNSgwLCJkaXNwbGF5UGF0aCIsby5kKQpsLlk1KDAs
-InVyaVBhdGgiLG8uZSkKbj1vLmYKaWYobiE9bnVsbCl7bT1ILlFJKFtdLHQuZCkKZm9yKGs9bi5sZW5n
-dGgscT0wO3E8bi5sZW5ndGg7bi5sZW5ndGg9PT1rfHwoMCxILmxrKShuKSwrK3EpbS5wdXNoKG5bcV0u
-THQoKSkKbC5ZNSgwLCJ0cmFjZXMiLG0pfXJldHVybiBsfX0KVS5TZS5wcm90b3R5cGU9ewpMdCgpe3Jl
-dHVybiBQLkVGKFsiZGVzY3JpcHRpb24iLHRoaXMuYSwiaHJlZiIsdGhpcy5iXSx0Lk4sdC5YKX19ClUu
-TWwucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gUC5FRihbImhyZWYiLHRoaXMuYSwibGluZSIsdGhpcy5i
-LCJwYXRoIix0aGlzLmNdLHQuTix0LlgpfX0KVS55RC5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxw
-PUguUUkoW10sdC5kKQpmb3Iocz10aGlzLmIscj1zLmxlbmd0aCxxPTA7cTxzLmxlbmd0aDtzLmxlbmd0
-aD09PXJ8fCgwLEgubGspKHMpLCsrcSlwLnB1c2goc1txXS5MdCgpKQpyZXR1cm4gUC5FRihbImRlc2Ny
-aXB0aW9uIix0aGlzLmEsImVudHJpZXMiLHBdLHQuTix0LlgpfX0KVS53Yi5wcm90b3R5cGU9ewpMdCgp
-e3ZhciBzLHIscSxwPXRoaXMsbz1QLkZsKHQuTix0LlgpCm8uWTUoMCwiZGVzY3JpcHRpb24iLHAuYSkK
-cz1wLmIKaWYocyE9bnVsbClvLlk1KDAsImZ1bmN0aW9uIixzKQpzPXAuYwppZihzIT1udWxsKW8uWTUo
-MCwibGluayIscy5MdCgpKQpzPXAuZAppZihzLmxlbmd0aCE9PTApe3I9SC50NihzKQpxPXIuQygibEo8
-MSxaMDxxVSxNaD8+PiIpCm8uWTUoMCwiaGludEFjdGlvbnMiLFAuWTEobmV3IEgubEoocyxyLkMoIlow
-PHFVLE1oPz4oMSkiKS5hKG5ldyBVLmIwKCkpLHEpLCEwLHEuQygiYUwuRSIpKSl9cmV0dXJuIG99fQpV
-LmFOLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBSLm56KHQuRy5hKGEpKX0sCiRTOjM4fQpVLmIwLnBy
-b3RvdHlwZT17CiQxKGEpe3JldHVybiB0LkouYShhKS5MdCgpfSwKJFM6Mzl9CkIuajgucHJvdG90eXBl
-PXsKTHQoKXtyZXR1cm4gUC5FRihbImxpbmUiLHRoaXMuYSwiZXhwbGFuYXRpb24iLHRoaXMuYiwib2Zm
-c2V0Iix0aGlzLmNdLHQuTix0LlgpfX0KQi5xcC5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxwLG8s
-bixtLGw9dGhpcyxrPXQuTixqPVAuRmwoayx0LkQpCmZvcihzPWwuZCxzPXMuZ1B1KHMpLHM9cy5nbShz
-KSxyPXQuWCxxPXQuZDtzLkYoKTspe3A9cy5nbCgpCm89cC5hCm49SC5RSShbXSxxKQpmb3IocD1KLklU
-KHAuYik7cC5GKCk7KXttPXAuZ2woKQpuLnB1c2goUC5FRihbImxpbmUiLG0uYSwiZXhwbGFuYXRpb24i
-LG0uYiwib2Zmc2V0IixtLmNdLGsscikpfWouWTUoMCxvLG4pfXJldHVybiBQLkVGKFsicmVnaW9ucyIs
-bC5hLCJuYXZpZ2F0aW9uQ29udGVudCIsbC5iLCJzb3VyY2VDb2RlIixsLmMsImVkaXRzIixqXSxrLHIp
-fX0KVC5tUS5wcm90b3R5cGU9e30KTC5lLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG8sbixt
-CnQuQi5hKGEpCnM9dC5GCnI9cy5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKcT1MLkc2KHMuYSh3
-aW5kb3cubG9jYXRpb24pLmhyZWYpCnA9TC5hSyhzLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQpMLkdl
-KCkKaWYociE9PSIvIil7cz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIpLnRleHRDb250ZW50
-CnMudG9TdHJpbmcKcz1yIT09Qy54Qi5iUyhzKX1lbHNlIHM9ITEKaWYocyl7ci50b1N0cmluZwpMLkc3
-KHIscSxwLCEwLG5ldyBMLlZXKHIscSxwKSl9cz1kb2N1bWVudApvPXMucXVlcnlTZWxlY3RvcigiLmFw
-cGx5LW1pZ3JhdGlvbiIpCm8udG9TdHJpbmcKbz1KLnFGKG8pCm49by4kdGkKbT1uLkMoIn4oMSk/Iiku
-YShuZXcgTC5vWigpKQp0LlouYShudWxsKQpXLkpFKG8uYSxvLmIsbSwhMSxuLmMpCm49cy5xdWVyeVNl
-bGVjdG9yKCIucmVydW4tbWlncmF0aW9uIikKbi50b1N0cmluZwpuPUoucUYobikKbT1uLiR0aQpXLkpF
-KG4uYSxuLmIsbS5DKCJ+KDEpPyIpLmEobmV3IEwueTgoKSksITEsbS5jKQptPXMucXVlcnlTZWxlY3Rv
-cigiLnJlcG9ydC1wcm9ibGVtIikKbS50b1N0cmluZwptPUoucUYobSkKbj1tLiR0aQpXLkpFKG0uYSxt
-LmIsbi5DKCJ+KDEpPyIpLmEobmV3IEwuSGkoKSksITEsbi5jKQpzPXMucXVlcnlTZWxlY3RvcigiLnBv
-cHVwLXBhbmUgLmNsb3NlIikKcy50b1N0cmluZwpzPUoucUYocykKbj1zLiR0aQpXLkpFKHMuYSxzLmIs
-bi5DKCJ+KDEpPyIpLmEobmV3IEwuQlQoKSksITEsbi5jKQpuPSQuYzAoKQpuLnRvU3RyaW5nCm49Si5x
-RihuKQpzPW4uJHRpClcuSkUobi5hLG4uYixzLkMoIn4oMSk/IikuYShuZXcgTC5QWSgpKSwhMSxzLmMp
-fSwKJFM6MTd9CkwuVlcucHJvdG90eXBlPXsKJDAoKXtMLkZyKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0s
-CiRTOjB9Ckwub1oucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAsbwp0LlYuYShhKQppZihDLm9s
-LnVzKHdpbmRvdywiVGhpcyB3aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIHlvdSd2ZSBwcmV2aWV3ZWQgdG8g
-eW91ciB3b3JraW5nIGRpcmVjdG9yeS4gSXQgaXMgcmVjb21tZW5kZWQgeW91IGNvbW1pdCBhbnkgY2hh
-bmdlcyB5b3UgbWFkZSBiZWZvcmUgZG9pbmcgdGhpcy4iKSl7cz1ILlFJKFtdLHQuZCkKZm9yKHI9JC5J
-UixxPXIubGVuZ3RoLHA9MDtwPHIubGVuZ3RoO3IubGVuZ3RoPT09cXx8KDAsSC5saykociksKytwKXMu
-cHVzaChyW3BdLkx0KCkpCnM9TC50eSgiL2FwcGx5LW1pZ3JhdGlvbiIsUC5FRihbIm5hdmlnYXRpb25U
-cmVlIixzXSx0Lk4sdC5EKSkuVzcobmV3IEwuanIoKSx0LlApCm89bmV3IEwucWwoKQp0LmI3LmEobnVs
-bCkKcj1zLiR0aQpxPSQuWDMKaWYocSE9PUMuTlUpbz1QLlZIKG8scSkKcy54ZihuZXcgUC5GZShuZXcg
-UC52cyhxLHIpLDIsbnVsbCxvLHIuQygiQDwxPiIpLktxKHIuYykuQygiRmU8MSwyPiIpKSl9fSwKJFM6
-MX0KTC5qci5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LmZuLmEoYSkKcz1kb2N1bWVudC5ib2R5CnMu
-Y2xhc3NMaXN0LnJlbW92ZSgicHJvcG9zZWQiKQpzLmNsYXNzTGlzdC5hZGQoImFwcGxpZWQiKX0sCiRT
-OjQyfQpMLnFsLnByb3RvdHlwZT17CiQyKGEsYil7TC5DMigiQ291bGRuJ3QgYXBwbHkgbWlncmF0aW9u
-Iix0LksuYShhKSxiKX0sCiRTOjQzfQpMLnk4LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLnhu
-KHQuVi5hKGEpKX0sCnhuKGEpe3ZhciBzPTAscj1QLkZYKHQuSCkscT0xLHAsbz1bXSxuLG0sbCxrLGos
-aQp2YXIgJGFzeW5jJCQxPVAubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0
-cnVlKXN3aXRjaChzKXtjYXNlIDA6cT0zCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgicmVydW5u
-aW5nIikKcz02CnJldHVybiBQLmpRKEwudHkoIi9yZXJ1bi1taWdyYXRpb24iLG51bGwpLCRhc3luYyQk
-MSkKY2FzZSA2Om49YwprPW4Kay50b1N0cmluZwppZihILnA4KEoueDkoaywic3VjY2VzcyIpKSl0LkYu
-YSh3aW5kb3cubG9jYXRpb24pLnJlbG9hZCgpCmVsc2UgTC5LMCh0LmV3LmEoSi54OShuLCJlcnJvcnMi
-KSkpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAzOnE9MgppPXAKbT1ILlJ1KGkpCmw9SC50cyhpKQpM
-LkMyKCJGYWlsZWQgdG8gcmVydW4gbWlncmF0aW9uIixtLGwpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2Fz
-ZSAyOm89WzFdCmNhc2UgNDpxPTEKZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJyZXJ1bm5p
-bmciKQpzPW8ucG9wKCkKYnJlYWsKY2FzZSA1OnJldHVybiBQLnlDKG51bGwscikKY2FzZSAxOnJldHVy
-biBQLmYzKHAscil9fSkKcmV0dXJuIFAuREkoJGFzeW5jJCQxLHIpfSwKJFM6N30KTC5IaS5wcm90b3R5
-cGU9ewokMShhKXt0LlYuYShhKQpDLm9sLlBvKHdpbmRvdyxQLlhkKCJodHRwcyIsImdpdGh1Yi5jb20i
-LCJkYXJ0LWxhbmcvc2RrL2lzc3Vlcy9uZXciLFAuRUYoWyJ0aXRsZSIsIkN1c3RvbWVyLXJlcG9ydGVk
-IGlzc3VlIHdpdGggTk5CRCBtaWdyYXRpb24gdG9vbCIsImxhYmVscyIsdS5kLCJib2R5IiwiIyMjIyBT
-dGVwcyB0byByZXByb2R1Y2VcblxuIyMjIyBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj9cblxu
-IyMjIyBXaGF0IGFjdHVhbGx5IGhhcHBlbmVkP1xuXG5fU2NyZWVuc2hvdHMgYXJlIGFwcHJlY2lhdGVk
-X1xuXG4qKkRhcnQgU0RLIHZlcnNpb24qKjogIitILkVqKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
-ZGstdmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG5cblRoYW5rcyBmb3IgZmlsaW5nIVxuIl0sdC5OLHQu
-eikpLmduRCgpLCJyZXBvcnQtcHJvYmxlbSIpfSwKJFM6MX0KTC5CVC5wcm90b3R5cGU9ewokMShhKXt2
-YXIgcwp0LlYuYShhKQpzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wb3B1cC1wYW5lIikuc3R5bGUK
-cy5kaXNwbGF5PSJub25lIgpyZXR1cm4ibm9uZSJ9LAokUzoxfQpMLlBZLnByb3RvdHlwZT17CiQxKGEp
-e3ZhciBzLHIscSxwLG8KdC5WLmEoYSkKcz0kLkQ5KCkuaW5uZXJUZXh0CnI9dC5oLmEoZG9jdW1lbnQu
-cXVlcnlTZWxlY3RvcignLm5hdi1wYW5lbCBbZGF0YS1uYW1lKj0iJytXLkxqKHMpKyciXScpLnBhcmVu
-dE5vZGUpCnE9ci5xdWVyeVNlbGVjdG9yKCIuc3RhdHVzLWljb24iKQpwPSQuSVIKcC50b1N0cmluZwpv
-PUwueXcocCxzKQppZihvIGluc3RhbmNlb2YgTC5jRCl7cD1vLngKcC50b1N0cmluZ31lbHNlIHA9ITEK
-aWYocCl7TC5PdChvKQpMLnhuKHEsbykKTC5BUihyLG8pfX0sCiRTOjF9CkwuTC5wcm90b3R5cGU9ewok
-MShhKXt2YXIgcyxyLHEscAp0LkIuYShhKQpzPXQuRgpyPXMuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhu
-YW1lCnIudG9TdHJpbmcKcT1MLkc2KHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCnA9TC5hSyhzLmEo
-d2luZG93LmxvY2F0aW9uKS5ocmVmKQppZihyLmxlbmd0aD4xKUwuRzcocixxLHAsITEsbnVsbCkKZWxz
-ZXtMLkJFKHIsQi53UigpLCEwKQpMLkJYKCImbmJzcDsiLG51bGwpfX0sCiRTOjE3fQpMLld4LnByb3Rv
-dHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG89ImNvbGxhcHNlZCIKdC5WLmEoYSkKcz10aGlzLmEKcj1K
-LllFKHMpCnE9dGhpcy5iCnA9Si5ZRShxKQppZighci5nUChzKS50ZygwLG8pKXtyLmdQKHMpLmkoMCxv
-KQpwLmdQKHEpLmkoMCxvKX1lbHNle3IuZ1AocykuUigwLG8pCnAuZ1AocSkuUigwLG8pfX0sCiRTOjF9
-CkwuSG8ucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9Si5xRih0LmguYShhKSkscj1zLiR0aSxxPXIuQygi
-figxKT8iKS5hKG5ldyBMLmROKHRoaXMuYSkpCnQuWi5hKG51bGwpClcuSkUocy5hLHMuYixxLCExLHIu
-Yyl9LAokUzozfQpMLmROLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBMLnQyKHQuVi5hKGEpLHRoaXMu
-YSl9LAokUzoxfQpMLklDLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscQp0LmguYShhKQpzPUoucUYo
-YSkKcj1zLiR0aQpxPXIuQygifigxKT8iKS5hKG5ldyBMLnh6KGEsdGhpcy5hKSkKdC5aLmEobnVsbCkK
-Vy5KRShzLmEscy5iLHEsITEsci5jKX0sCiRTOjN9CkwueHoucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMs
-cixxLHAKdC5WLmEoYSkKcz10aGlzLmEKcj1zLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5l
-dyBXLmk3KHMpKS5PVSgib2Zmc2V0IikpCnIudG9TdHJpbmcKcT1QLlFBKHIsbnVsbCkKcz1zLmdldEF0
-dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KHMpKS5PVSgibGluZSIpKQpzLnRvU3RyaW5n
-CnA9UC5RQShzLG51bGwpCnM9dGhpcy5iCnMudG9TdHJpbmcKTC5oWChzLHEscCl9LAokUzoxfQpMLkJO
-LnByb3RvdHlwZT17CiQxKGEpe3ZhciBzPUoucUYodC5oLmEoYSkpLHI9cy4kdGkKci5DKCJ+KDEpPyIp
-LmEoTC5pUygpKQp0LlouYShudWxsKQpXLkpFKHMuYSxzLmIsTC5pUygpLCExLHIuYyl9LAokUzozfQpM
-LmZDLnByb3RvdHlwZT17CiQxKGEpe3QucC5hKGEpCnRoaXMuYS5hTSgwLHRoaXMuYil9LAokUzo0Nn0K
-TC5UbS5wcm90b3R5cGU9ewokMShhKXtILm4oYSkKcmV0dXJuIGEubGVuZ3RoPjQwP0MueEIuTmooYSww
-LDQwKSsiLi4uIjphfSwKJFM6Mn0KTC5uVC5wcm90b3R5cGU9ewokMCgpe0wuRnIodGhpcy5hLHRoaXMu
-Yix0aGlzLmMpfSwKJFM6MH0KTC5OWS5wcm90b3R5cGU9ewokMCgpe0wuRnIodGhpcy5hLG51bGwsbnVs
-bCl9LAokUzowfQpMLnVlLnByb3RvdHlwZT17CiQxKGEpe3QuZi5hKGEpCnJldHVybiBILkVqKGEucSgw
-LCJzZXZlcml0eSIpKSsiIC0gIitILkVqKGEucSgwLCJtZXNzYWdlIikpKyIgYXQgIitILkVqKGEucSgw
-LCJsb2NhdGlvbiIpKSsiIC0gKCIrSC5FaihhLnEoMCwiY29kZSIpKSsiKSJ9LAokUzo0N30KTC5HSC5w
-cm90b3R5cGU9ewokMShhKXt0LmguYShhKQokLnpCKCkKdC5lcy5hKCQub3coKS5xKDAsImhsanMiKSku
-VjcoImhpZ2hsaWdodEJsb2NrIixbYV0pfSwKJFM6M30KTC5FRS5wcm90b3R5cGU9ewokMShhKXt2YXIg
-cyxyCnQuVi5hKGEpLnByZXZlbnREZWZhdWx0KCkKcz10aGlzLmEKcj10aGlzLmIKTC5hZih0LkYuYSh3
-aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lLHMsciwhMCxuZXcgTC5RTChzLHIpKQpMLmhYKHRoaXMuYyxz
-LHIpfSwKJFM6MX0KTC5RTC5wcm90b3R5cGU9ewokMCgpe0wuRnIodC5GLmEod2luZG93LmxvY2F0aW9u
-KS5wYXRobmFtZSx0aGlzLmEsdGhpcy5iKX0sCiRTOjB9CkwuVlMucHJvdG90eXBlPXsKJDEoYSl7dmFy
-IHMscj0ic2VsZWN0ZWQtZmlsZSIKdC5oLmEoYSkKcz1KLllFKGEpCmlmKGEuZ2V0QXR0cmlidXRlKCJk
-YXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoYSkpLk9VKCJuYW1lIikpPT09dGhpcy5hLmEpcy5nUChhKS5p
-KDAscikKZWxzZSBzLmdQKGEpLlIoMCxyKX0sCiRTOjN9CkwuVEQucHJvdG90eXBlPXsKJDEoYSl7dmFy
-IHMscgp0LlYuYShhKQpzPXRoaXMuYQpzd2l0Y2gocy5nTCgpKXtjYXNlIEMuY3c6YnJlYWsKY2FzZSBD
-LldEOnMubkcoKQpicmVhawpjYXNlIEMuWGo6cy5jMigpCmJyZWFrCmNhc2UgQy5kYzpzLmMyKCkKYnJl
-YWt9cj10aGlzLmIKTC5iTChyLHMpCkwueG4odGhpcy5jLHMpCkwuQVIocixzKX0sCiRTOjF9CkwuSWYu
-cHJvdG90eXBlPXsKJDEoYSl7dmFyIHMKdC5WLmEoYSkKcz10aGlzLmEKTC5PdChzKQpMLnhuKHRoaXMu
-YixzKQpMLkFSKHRoaXMuYyxzKX0sCiRTOjF9CkwudEIucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEwu
-dDIodC5WLmEoYSksITApfSwKJFM6MX0KTC5tMi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5S
-SSh0LlYuYShhKSl9LApSSShhKXt2YXIgcz0wLHI9UC5GWCh0LkgpLHE9MSxwLG89W10sbj10aGlzLG0s
-bCxrLGosaSxoLGcsZixlCnZhciAkYXN5bmMkJDE9UC5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtw
-PWMKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaT1kb2N1bWVudAptPUMuQ0QuelEo
-aS5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpLnNjcm9sbFRvcCkKaD10Lk4Kcz02CnJldHVybiBQLmpR
-KEwudHkoTC5RNCgiL2FwcGx5LWhpbnQiLFAuRmwoaCxoKSksbi5hLkx0KCkpLCRhc3luYyQkMSkKY2Fz
-ZSA2Omg9bi5iCmc9aC5hCmcudG9TdHJpbmcKbD1MLlVzKGcpCnM9NwpyZXR1cm4gUC5qUShMLkc3KGws
-bnVsbCxoLmIsITEsbnVsbCksJGFzeW5jJCQxKQpjYXNlIDc6aS5ib2R5LmNsYXNzTGlzdC5hZGQoIm5l
-ZWRzLXJlcnVuIikKaT1pLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50IikKaS50b1N0cmluZwppLnNjcm9s
-bFRvcD1DLmpuLnpRKG0pCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9MgplPXAKaz1ILlJ1KGUpCmo9SC50
-cyhlKQpMLkMyKCJjb3VsZG4ndCBhcHBseSBoaW50IixrLGopCnM9NQpicmVhawpjYXNlIDI6cz0xCmJy
-ZWFrCmNhc2UgNTpyZXR1cm4gUC55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gUC5mMyhwLHIpfX0pCnJl
-dHVybiBQLkRJKCRhc3luYyQkMSxyKX0sCiRTOjd9CkwuUVcucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4g
-dGhpcy5hKyI6XG4iK3RoaXMuYn0sCiRpUno6MX0KTC5YQS5wcm90b3R5cGU9ewpFYihhLGIsYyl7cmV0
-dXJuITB9LAppMChhKXtyZXR1cm4hMH0sCiRpa0Y6MX0KTC52dC5wcm90b3R5cGU9ewpnTCgpe3ZhciBz
-LHIscSxwLG8sbixtLGw9dGhpcy5kCmlmKGwubGVuZ3RoPT09MClyZXR1cm4gQy5jdwpzPUMuTm0uZ3RI
-KGwpLmdMKCkKZm9yKHI9bC5sZW5ndGgscT0hMCxwPSEwLG89MDtvPGwubGVuZ3RoO2wubGVuZ3RoPT09
-cnx8KDAsSC5saykobCksKytvKXtuPWxbb10uZ0woKQppZihuIT1zKXM9bnVsbAptPW4hPT1DLmN3Cmlm
-KG0mJm4hPT1DLldEKXE9ITEKaWYobSYmbiE9PUMuWGopcD0hMX1pZihzIT1udWxsKXJldHVybiBzCmlm
-KHEpcmV0dXJuIEMuV0QKaWYocClyZXR1cm4gQy5YagpyZXR1cm4gQy5kY30sCkxWKCl7dmFyIHMscixx
-LHA9dGhpcy5kCmlmKHAhPW51bGwpZm9yKHM9cC5sZW5ndGgscj0wO3I8czsrK3Ipe3E9cFtyXQppZihx
-LmI9PT0kKXEuYj10aGlzCmVsc2UgSC52KG5ldyBILmMoIkZpZWxkICdwYXJlbnQnIGhhcyBhbHJlYWR5
-IGJlZW4gaW5pdGlhbGl6ZWQuIikpfX0sCmMyKCl7dmFyIHMscixxLHAsbwpmb3Iocz10aGlzLmQscj1z
-Lmxlbmd0aCxxPTA7cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEgubGspKHMpLCsrcSl7cD1zW3Fd
-CmlmKHAgaW5zdGFuY2VvZiBMLnZ0KXAuYzIoKQplbHNle2lmKHAgaW5zdGFuY2VvZiBMLmNEKXtvPXAu
-eApvLnRvU3RyaW5nCm89byYmcC5yPT09Qy5Yan1lbHNlIG89ITEKaWYobylwLnI9Qy5XRH19fSwKbkco
-KXt2YXIgcyxyLHEscCxvCmZvcihzPXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVu
-Z3RoPT09cnx8KDAsSC5saykocyksKytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9mIEwudnQpcC5uRygp
-CmVsc2V7aWYocCBpbnN0YW5jZW9mIEwuY0Qpe289cC54Cm8udG9TdHJpbmcKbz1vJiZwLnI9PT1DLldE
-fWVsc2Ugbz0hMQppZihvKXAucj1DLlhqfX19LApMdCgpe3ZhciBzLHI9UC5GbCh0Lk4sdC5YKQpyLlk1
-KDAsInR5cGUiLCJkaXJlY3RvcnkiKQpyLlk1KDAsIm5hbWUiLHRoaXMuYSkKcz10aGlzLmQKcy50b1N0
-cmluZwpyLlk1KDAsInN1YnRyZWUiLEwuVkQocykpCnM9dGhpcy5jCmlmKHMhPW51bGwpci5ZNSgwLCJw
-YXRoIixzKQpyZXR1cm4gcn19CkwuY0QucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyPXRoaXMscT1QLkZs
-KHQuTix0LlgpCnEuWTUoMCwidHlwZSIsImZpbGUiKQpxLlk1KDAsIm5hbWUiLHIuYSkKcz1yLmMKaWYo
-cyE9bnVsbClxLlk1KDAsInBhdGgiLHMpCnM9ci5kCmlmKHMhPW51bGwpcS5ZNSgwLCJocmVmIixzKQpz
-PXIuZQppZihzIT1udWxsKXEuWTUoMCwiZWRpdENvdW50IixzKQpzPXIuZgppZihzIT1udWxsKXEuWTUo
-MCwid2FzRXhwbGljaXRseU9wdGVkT3V0IixzKQpzPXIucgppZihzIT1udWxsKXEuWTUoMCwibWlncmF0
-aW9uU3RhdHVzIixzLmEpCnM9ci54CmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXNDYW5C
-ZUNoYW5nZWQiLHMpCnJldHVybiBxfSwKZ0woKXtyZXR1cm4gdGhpcy5yfX0KTC5EOC5wcm90b3R5cGU9
-e30KTC5POS5wcm90b3R5cGU9ewp3KGEpe3JldHVybiB0aGlzLmJ9fQpMLkdiLnByb3RvdHlwZT17Cnco
-YSl7cmV0dXJuIHRoaXMuYn19ClIuTEwucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gUC5FRihbIm5vZGVJ
-ZCIsdGhpcy5iLCJraW5kIix0aGlzLmEuYV0sdC5OLHQuWCl9fQpSLk1ELnByb3RvdHlwZT17CiQxKGEp
-e3JldHVybiB0LmdwLmEoYSkuYT09PXRoaXMuYS5xKDAsImtpbmQiKX0sCiRTOjQ4fQpSLkg3LnByb3Rv
-dHlwZT17CncoYSl7cmV0dXJuIHRoaXMuYn19Ck0ubEkucHJvdG90eXBlPXsKV08oYSxiKXt2YXIgcyxy
-LHE9dC5kNApNLllGKCJhYnNvbHV0ZSIsSC5RSShbYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs
-bF0scSkpCnM9dGhpcy5hCnM9cy5ZcihiKT4wJiYhcy5oSyhiKQppZihzKXJldHVybiBiCnM9RC5hYigp
-CnI9SC5RSShbcyxiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxxKQpNLllGKCJqb2luIixy
-KQpyZXR1cm4gdGhpcy5JUChuZXcgSC51NihyLHQuZUopKX0sCnpmKGEpe3ZhciBzLHIscT1YLkNMKGEs
-dGhpcy5hKQpxLkl4KCkKcz1xLmQKcj1zLmxlbmd0aAppZihyPT09MCl7cz1xLmIKcmV0dXJuIHM9PW51
-bGw/Ii4iOnN9aWYocj09PTEpe3M9cS5iCnJldHVybiBzPT1udWxsPyIuIjpzfWlmKDA+PXIpcmV0dXJu
-IEguT0gocywtMSkKcy5wb3AoKQpzPXEuZQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpz
-LnBvcCgpCnEuSXgoKQpyZXR1cm4gcS53KDApfSwKSVAoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGoK
-dC5PLmEoYSkKZm9yKHM9YS4kdGkscj1zLkMoImEyKGNYLkUpIikuYShuZXcgTS5xNygpKSxxPWEuZ20o
-YSkscz1uZXcgSC5TTyhxLHIscy5DKCJTTzxjWC5FPiIpKSxyPXRoaXMuYSxwPSExLG89ITEsbj0iIjtz
-LkYoKTspe209cS5nbCgpCmlmKHIuaEsobSkmJm8pe2w9WC5DTChtLHIpCms9bi5jaGFyQ29kZUF0KDAp
-PT0wP246bgpuPUMueEIuTmooaywwLHIuU3AoaywhMCkpCmwuYj1uCmlmKHIuZHMobikpQy5ObS5ZNShs
-LmUsMCxyLmdtSSgpKQpuPSIiK2wudygwKX1lbHNlIGlmKHIuWXIobSk+MCl7bz0hci5oSyhtKQpuPSIi
-K219ZWxzZXtqPW0ubGVuZ3RoCmlmKGohPT0wKXtpZigwPj1qKXJldHVybiBILk9IKG0sMCkKaj1yLlVk
-KG1bMF0pfWVsc2Ugaj0hMQppZighailpZihwKW4rPXIuZ21JKCkKbis9bX1wPXIuZHMobSl9cmV0dXJu
-IG4uY2hhckNvZGVBdCgwKT09MD9uOm59LApvNShhKXt2YXIgcwppZighdGhpcy55MyhhKSlyZXR1cm4g
-YQpzPVguQ0woYSx0aGlzLmEpCnMuclIoKQpyZXR1cm4gcy53KDApfSwKeTMoYSl7dmFyIHMscixxLHAs
-byxuLG0sbCxrPXRoaXMuYSxqPWsuWXIoYSkKaWYoaiE9PTApe2lmKGs9PT0kLktrKCkpZm9yKHM9MDtz
-PGo7KytzKWlmKEMueEIuVyhhLHMpPT09NDcpcmV0dXJuITAKcj1qCnE9NDd9ZWxzZXtyPTAKcT1udWxs
-fWZvcihwPW5ldyBILnFqKGEpLmEsbz1wLmxlbmd0aCxzPXIsbj1udWxsO3M8bzsrK3Msbj1xLHE9bSl7
-bT1DLnhCLk8ocCxzKQppZihrLnI0KG0pKXtpZihrPT09JC5LaygpJiZtPT09NDcpcmV0dXJuITAKaWYo
-cSE9bnVsbCYmay5yNChxKSlyZXR1cm4hMAppZihxPT09NDYpbD1uPT1udWxsfHxuPT09NDZ8fGsucjQo
-bikKZWxzZSBsPSExCmlmKGwpcmV0dXJuITB9fWlmKHE9PW51bGwpcmV0dXJuITAKaWYoay5yNChxKSly
-ZXR1cm4hMAppZihxPT09NDYpaz1uPT1udWxsfHxrLnI0KG4pfHxuPT09NDYKZWxzZSBrPSExCmlmKGsp
-cmV0dXJuITAKcmV0dXJuITF9LApIUChhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcyxrPSdVbmFi
-bGUgdG8gZmluZCBhIHBhdGggdG8gIicKYj1sLldPKDAsYikKcz1sLmEKaWYocy5ZcihiKTw9MCYmcy5Z
-cihhKT4wKXJldHVybiBsLm81KGEpCmlmKHMuWXIoYSk8PTB8fHMuaEsoYSkpYT1sLldPKDAsYSkKaWYo
-cy5ZcihhKTw9MCYmcy5ZcihiKT4wKXRocm93IEguYihYLkk3KGsrYSsnIiBmcm9tICInK2IrJyIuJykp
-CnI9WC5DTChiLHMpCnIuclIoKQpxPVguQ0woYSxzKQpxLnJSKCkKcD1yLmQKbz1wLmxlbmd0aAppZihv
-IT09MCl7aWYoMD49bylyZXR1cm4gSC5PSChwLDApCnA9Si5STShwWzBdLCIuIil9ZWxzZSBwPSExCmlm
-KHApcmV0dXJuIHEudygwKQpwPXIuYgpvPXEuYgppZihwIT1vKXA9cD09bnVsbHx8bz09bnVsbHx8IXMu
-TmMocCxvKQplbHNlIHA9ITEKaWYocClyZXR1cm4gcS53KDApCndoaWxlKCEwKXtwPXIuZApvPXAubGVu
-Z3RoCmlmKG8hPT0wKXtuPXEuZAptPW4ubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1vKXJldHVybiBILk9I
-KHAsMCkKcD1wWzBdCmlmKDA+PW0pcmV0dXJuIEguT0gobiwwKQpuPXMuTmMocCxuWzBdKQpwPW59ZWxz
-ZSBwPSExfWVsc2UgcD0hMQppZighcClicmVhawpDLk5tLlc0KHIuZCwwKQpDLk5tLlc0KHIuZSwxKQpD
-Lk5tLlc0KHEuZCwwKQpDLk5tLlc0KHEuZSwxKX1wPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtpZigw
-Pj1vKXJldHVybiBILk9IKHAsMCkKcD1KLlJNKHBbMF0sIi4uIil9ZWxzZSBwPSExCmlmKHApdGhyb3cg
-SC5iKFguSTcoaythKyciIGZyb20gIicrYisnIi4nKSkKcD10Lk4KQy5ObS5VRyhxLmQsMCxQLk84KHIu
-ZC5sZW5ndGgsIi4uIiwhMSxwKSkKQy5ObS5ZNShxLmUsMCwiIikKQy5ObS5VRyhxLmUsMSxQLk84KHIu
-ZC5sZW5ndGgscy5nbUkoKSwhMSxwKSkKcz1xLmQKcD1zLmxlbmd0aAppZihwPT09MClyZXR1cm4iLiIK
-aWYocD4xJiZKLlJNKEMuTm0uZ3JaKHMpLCIuIikpe3M9cS5kCmlmKDA+PXMubGVuZ3RoKXJldHVybiBI
-Lk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5w
-b3AoKQppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLC0xKQpzLnBvcCgpCkMuTm0uaShzLCIiKX1x
-LmI9IiIKcS5JeCgpCnJldHVybiBxLncoMCl9fQpNLnE3LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBI
-Lm4oYSkhPT0iIn0sCiRTOjZ9Ck0uTm8ucHJvdG90eXBlPXsKJDEoYSl7SC5rKGEpCnJldHVybiBhPT1u
-dWxsPyJudWxsIjonIicrYSsnIid9LAokUzo0OX0KQi5mdi5wcm90b3R5cGU9ewp4WihhKXt2YXIgcyxy
-PXRoaXMuWXIoYSkKaWYocj4wKXJldHVybiBDLnhCLk5qKGEsMCxyKQppZih0aGlzLmhLKGEpKXtpZigw
-Pj1hLmxlbmd0aClyZXR1cm4gSC5PSChhLDApCnM9YVswXX1lbHNlIHM9bnVsbApyZXR1cm4gc30sCk5j
-KGEsYil7cmV0dXJuIGE9PT1ifX0KWC5XRC5wcm90b3R5cGU9ewpJeCgpe3ZhciBzLHIscT10aGlzCndo
-aWxlKCEwKXtzPXEuZAppZighKHMubGVuZ3RoIT09MCYmSi5STShDLk5tLmdyWihzKSwiIikpKWJyZWFr
-CnM9cS5kCmlmKDA+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49
-cy5sZW5ndGgpcmV0dXJuIEguT0gocywtMSkKcy5wb3AoKX1zPXEuZQpyPXMubGVuZ3RoCmlmKHIhPT0w
-KUMuTm0uWTUocyxyLTEsIiIpfSwKclIoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9SC5RSShbXSx0
-LnMpCmZvcihzPW0uZCxyPXMubGVuZ3RoLHE9MCxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgw
-LEgubGspKHMpLCsrcCl7bz1zW3BdCm49Si5pYShvKQppZighKG4uRE4obywiLiIpfHxuLkROKG8sIiIp
-KSlpZihuLkROKG8sIi4uIikpe249bC5sZW5ndGgKaWYobiE9PTApe2lmKDA+PW4pcmV0dXJuIEguT0go
-bCwtMSkKbC5wb3AoKX1lbHNlICsrcX1lbHNlIEMuTm0uaShsLG8pfWlmKG0uYj09bnVsbClDLk5tLlVH
-KGwsMCxQLk84KHEsIi4uIiwhMSx0Lk4pKQppZihsLmxlbmd0aD09PTAmJm0uYj09bnVsbClDLk5tLmko
-bCwiLiIpCm0uc25KKGwpCnM9bS5hCm0uc1BoKFAuTzgobC5sZW5ndGgrMSxzLmdtSSgpLCEwLHQuTikp
-CnI9bS5iCmlmKHI9PW51bGx8fGwubGVuZ3RoPT09MHx8IXMuZHMocikpQy5ObS5ZNShtLmUsMCwiIikK
-cj1tLmIKaWYociE9bnVsbCYmcz09PSQuS2soKSl7ci50b1N0cmluZwptLmI9SC55cyhyLCIvIiwiXFwi
-KX1tLkl4KCl9LAp3KGEpe3ZhciBzLHIscT10aGlzLHA9cS5iCnA9cCE9bnVsbD8iIitwOiIiCmZvcihz
-PTA7czxxLmQubGVuZ3RoOysrcyl7cj1xLmUKaWYocz49ci5sZW5ndGgpcmV0dXJuIEguT0gocixzKQpy
-PXArSC5FaihyW3NdKQpwPXEuZAppZihzPj1wLmxlbmd0aClyZXR1cm4gSC5PSChwLHMpCnA9citILkVq
-KHBbc10pfXArPUguRWooQy5ObS5ncloocS5lKSkKcmV0dXJuIHAuY2hhckNvZGVBdCgwKT09MD9wOnB9
-LApzbkooYSl7dGhpcy5kPXQuRS5hKGEpfSwKc1BoKGEpe3RoaXMuZT10LkUuYShhKX19ClguZHYucHJv
-dG90eXBlPXsKdyhhKXtyZXR1cm4iUGF0aEV4Y2VwdGlvbjogIit0aGlzLmF9LAokaVJ6OjF9Ck8uekwu
-cHJvdG90eXBlPXsKdyhhKXtyZXR1cm4gdGhpcy5nb2ModGhpcyl9fQpFLk9GLnByb3RvdHlwZT17ClVk
-KGEpe3JldHVybiBDLnhCLnRnKGEsIi8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd9LApkcyhhKXt2YXIg
-cz1hLmxlbmd0aApyZXR1cm4gcyE9PTAmJkMueEIuTyhhLHMtMSkhPT00N30sClNwKGEsYil7aWYoYS5s
-ZW5ndGghPT0wJiZDLnhCLlcoYSwwKT09PTQ3KXJldHVybiAxCnJldHVybiAwfSwKWXIoYSl7cmV0dXJu
-IHRoaXMuU3AoYSwhMSl9LApoSyhhKXtyZXR1cm4hMX0sCmdvYygpe3JldHVybiJwb3NpeCJ9LApnbUko
-KXtyZXR1cm4iLyJ9fQpGLnJ1LnByb3RvdHlwZT17ClVkKGEpe3JldHVybiBDLnhCLnRnKGEsIi8iKX0s
-CnI0KGEpe3JldHVybiBhPT09NDd9LApkcyhhKXt2YXIgcz1hLmxlbmd0aAppZihzPT09MClyZXR1cm4h
-MQppZihDLnhCLk8oYSxzLTEpIT09NDcpcmV0dXJuITAKcmV0dXJuIEMueEIuVGMoYSwiOi8vIikmJnRo
-aXMuWXIoYSk9PT1zfSwKU3AoYSxiKXt2YXIgcyxyLHEscCxvPWEubGVuZ3RoCmlmKG89PT0wKXJldHVy
-biAwCmlmKEMueEIuVyhhLDApPT09NDcpcmV0dXJuIDEKZm9yKHM9MDtzPG87KytzKXtyPUMueEIuVyhh
-LHMpCmlmKHI9PT00NylyZXR1cm4gMAppZihyPT09NTgpe2lmKHM9PT0wKXJldHVybiAwCnE9Qy54Qi5Y
-VShhLCIvIixDLnhCLlFpKGEsIi8vIixzKzEpP3MrMzpzKQppZihxPD0wKXJldHVybiBvCmlmKCFifHxv
-PHErMylyZXR1cm4gcQppZighQy54Qi5uKGEsImZpbGU6Ly8iKSlyZXR1cm4gcQppZighQi5ZdShhLHEr
-MSkpcmV0dXJuIHEKcD1xKzMKcmV0dXJuIG89PT1wP3A6cSs0fX1yZXR1cm4gMH0sCllyKGEpe3JldHVy
-biB0aGlzLlNwKGEsITEpfSwKaEsoYSl7cmV0dXJuIGEubGVuZ3RoIT09MCYmQy54Qi5XKGEsMCk9PT00
-N30sCmdvYygpe3JldHVybiJ1cmwifSwKZ21JKCl7cmV0dXJuIi8ifX0KTC5JVi5wcm90b3R5cGU9ewpV
-ZChhKXtyZXR1cm4gQy54Qi50ZyhhLCIvIil9LApyNChhKXtyZXR1cm4gYT09PTQ3fHxhPT09OTJ9LApk
-cyhhKXt2YXIgcz1hLmxlbmd0aAppZihzPT09MClyZXR1cm4hMQpzPUMueEIuTyhhLHMtMSkKcmV0dXJu
-IShzPT09NDd8fHM9PT05Mil9LApTcChhLGIpe3ZhciBzLHIscT1hLmxlbmd0aAppZihxPT09MClyZXR1
-cm4gMApzPUMueEIuVyhhLDApCmlmKHM9PT00NylyZXR1cm4gMQppZihzPT09OTIpe2lmKHE8Mnx8Qy54
-Qi5XKGEsMSkhPT05MilyZXR1cm4gMQpyPUMueEIuWFUoYSwiXFwiLDIpCmlmKHI+MCl7cj1DLnhCLlhV
-KGEsIlxcIixyKzEpCmlmKHI+MClyZXR1cm4gcn1yZXR1cm4gcX1pZihxPDMpcmV0dXJuIDAKaWYoIUIu
-T1MocykpcmV0dXJuIDAKaWYoQy54Qi5XKGEsMSkhPT01OClyZXR1cm4gMApxPUMueEIuVyhhLDIpCmlm
-KCEocT09PTQ3fHxxPT09OTIpKXJldHVybiAwCnJldHVybiAzfSwKWXIoYSl7cmV0dXJuIHRoaXMuU3Ao
-YSwhMSl9LApoSyhhKXtyZXR1cm4gdGhpcy5ZcihhKT09PTF9LApPdChhLGIpe3ZhciBzCmlmKGE9PT1i
-KXJldHVybiEwCmlmKGE9PT00NylyZXR1cm4gYj09PTkyCmlmKGE9PT05MilyZXR1cm4gYj09PTQ3Cmlm
-KChhXmIpIT09MzIpcmV0dXJuITEKcz1hfDMyCnJldHVybiBzPj05NyYmczw9MTIyfSwKTmMoYSxiKXt2
-YXIgcyxyCmlmKGE9PT1iKXJldHVybiEwCnM9YS5sZW5ndGgKaWYocyE9PWIubGVuZ3RoKXJldHVybiEx
-CmZvcihyPTA7cjxzOysrcilpZighdGhpcy5PdChDLnhCLlcoYSxyKSxDLnhCLlcoYixyKSkpcmV0dXJu
-ITEKcmV0dXJuITB9LApnb2MoKXtyZXR1cm4id2luZG93cyJ9LApnbUkoKXtyZXR1cm4iXFwifX07KGZ1
-bmN0aW9uIGFsaWFzZXMoKXt2YXIgcz1KLkd2LnByb3RvdHlwZQpzLlU9cy53CnM9Si5NRi5wcm90b3R5
-cGUKcy50PXMudwpzPVAuY1gucHJvdG90eXBlCnMuR0c9cy5ldgpzPVAuTWgucHJvdG90eXBlCnMueGI9
-cy53CnM9Vy5jdi5wcm90b3R5cGUKcy5EVz1zLnI2CnM9Vy5tNi5wcm90b3R5cGUKcy5qRj1zLkViCnM9
-UC5FNC5wcm90b3R5cGUKcy5Vcj1zLnEKcy5lND1zLlk1CnM9UC52Zy5wcm90b3R5cGUKcy5iaD1zLlk1
-fSkoKTsoZnVuY3Rpb24gaW5zdGFsbFRlYXJPZmZzKCl7dmFyIHM9aHVua0hlbHBlcnMuX3N0YXRpY18x
-LHI9aHVua0hlbHBlcnMuX3N0YXRpY18wLHE9aHVua0hlbHBlcnMuaW5zdGFsbEluc3RhbmNlVGVhck9m
-ZixwPWh1bmtIZWxwZXJzLmluc3RhbGxTdGF0aWNUZWFyT2ZmLG89aHVua0hlbHBlcnMuX2luc3RhbmNl
-XzF1CnMoUCwiRVgiLCJaViIsNSkKcyhQLCJ5dCIsIm9BIiw1KQpzKFAsInFXIiwiQnoiLDUpCnIoUCwi
-VUkiLCJlTiIsMCkKcShQLlBmLnByb3RvdHlwZSwiZ1lKIiwwLDEsbnVsbCxbIiQyIiwiJDEiXSxbIncw
-IiwicG0iXSw0MCwwLDApCnMoUCwiQ3kiLCJOQyIsNCkKcyhQLCJQSCIsIk10IiwyKQpwKFcsInBTIiw0
-LG51bGwsWyIkNCJdLFsicUQiXSwxNCwwKQpwKFcsIlY0Iiw0LG51bGwsWyIkNCJdLFsibloiXSwxNCww
-KQpvKFAuQXMucHJvdG90eXBlLCJndU0iLCJWIiwyKQpzKFAsImlHIiwid1kiLDUyKQpzKFAsIncwIiwi
-ZFUiLDM1KQpzKEwsImlTIiwiaTYiLDEpfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgcz1o
-dW5rSGVscGVycy5taXhpbixyPWh1bmtIZWxwZXJzLmluaGVyaXQscT1odW5rSGVscGVycy5pbmhlcml0
-TWFueQpyKFAuTWgsbnVsbCkKcShQLk1oLFtILkZLLEouR3YsSi5tMSxQLmNYLEguZVQsUC5YUyxQLm5Z
-LEguYTcsUC5BbixILkZ1LEguSkIsSC5TVSxILlJlLEgud3YsUC5QbixILldVLEguTEksSC5UcCxILmY5
-LEgudGUsSC5icSxILlhPLEgua3IsUC5ZayxILnZoLEguTjYsSC5WUixILkVLLEguUGIsSC50USxILlNk
-LEguSmMsSC5HLFAuVzMsUC5paCxQLkZ5LFAuR1YsUC5DdyxQLlBmLFAuRmUsUC52cyxQLk9NLFAucWgs
-UC5NTyxQLmtULFAueEksUC5tMCxQLnBSLFAuYm4sUC5sbSxQLmxELFAuS1AsUC5sZixQLldZLFAuVWss
-UC5TaCxQLlJ3LFAuYnosUC5pUCxQLms1LFAuS1ksUC5DRCxQLmFFLFAuTjMsUC5jOCxQLlpkLFAuTSxQ
-LkRuLFAuUEUsUC5VZixXLmlkLFcuRmssVy5KUSxXLkdtLFcudkQsVy5tNixXLk93LFcuVzksVy5kVyxX
-Lm1rLFcuS28sUC5pSixQLkU0LFUuZDIsVS5TZSxVLk1sLFUueUQsVS53YixCLmo4LEIucXAsVC5tUSxM
-LlhBLEwuRDgsTC5POSxMLkdiLFIuTEwsUi5INyxNLmxJLE8uekwsWC5XRCxYLmR2XSkKcShKLkd2LFtK
-LnlFLEoud2UsSi5NRixKLmpkLEoucUksSi5EcixILkVULFcuRDAsVy5BeixXLkxlLFcuTmgsVy5hZSxX
-LklCLFcubjcsVy5lYSxXLmJyLFcuU2csVy51OCxXLks3LFcuWFcsUC5oRl0pCnEoSi5NRixbSi5pQyxK
-LmtkLEouYzVdKQpyKEouUG8sSi5qZCkKcShKLnFJLFtKLmJVLEoua0RdKQpxKFAuY1gsW0guQlIsSC5i
-USxILmkxLEguVTUsSC5BTSxILnU2LEguWFIsUC5tVyxILnVuXSkKcShILkJSLFtILlp5LEguUUNdKQpy
-KEgub2wsSC5aeSkKcihILlVxLEguUUMpCnIoSC5qVixILlVxKQpxKFAuWFMsW0guYyxQLkV6LEguYXos
-SC52VixILkVxLFAuQzYsSC5rUyxQLlVkLFAuRixQLkFULFAubXAsUC51YixQLmRzLFAubGosUC5VVixQ
-LnAsTC5RV10pCnIoUC51eSxQLm5ZKQpxKFAudXksW0gudzIsVy53eixXLmU3XSkKcihILnFqLEgudzIp
-CnEoSC5iUSxbSC5hTCxILk1CLEguaTVdKQpxKEguYUwsW0gubkgsSC5sSixQLmk4XSkKcihILnh5LEgu
-aTEpCnEoUC5BbixbSC5NSCxILlNPLEguVTFdKQpyKEguZDUsSC5BTSkKcihQLlJVLFAuUG4pCnIoUC5H
-aixQLlJVKQpyKEguUEQsUC5HaikKcihILkxQLEguV1UpCnEoSC5UcCxbSC5FMSxILkF5LEgubGMsSC5k
-QyxILlZYLFAudGgsUC5oYSxQLldNLFAucFYsUC5qWixQLkI1LFAuT1IsUC55USxQLlZDLFAuUlosUC5j
-NixQLnFkLFcuQ3YsVy52TixXLlV2LFcuRWcsVy5FbyxXLldrLFcuSUEsUC5HRSxQLk43LFAudVEsUC5E
-VixQLlBDLFAuUVMsUC5ucCxQLlV0LFUuYU4sVS5iMCxMLmUsTC5vWixMLmpyLEwueTgsTC5IaSxMLkJU
-LEwuUFksTC5MLEwuV3gsTC5IbyxMLmROLEwuSUMsTC54eixMLkJOLEwuZkMsTC5UbSxMLnVlLEwuR0gs
-TC5FRSxMLlZTLEwuVEQsTC5JZixMLnRCLEwubTIsUi5NRCxNLnE3LE0uTm9dKQpxKEguRTEsW0guQ2os
-SC53TixQLlNYLFAuR3MsUC5VNyxQLnJhLFAudGksUC5XRixQLm4xLFAuY1MsUC5KVCxQLk1FLFAueTUs
-UC55SSxXLktTLFcuQTMsVy5mbSxQLkUyLFAuamcsTC5xbF0pCnIoSC5XMCxQLkV6KQpxKEgubGMsW0gu
-engsSC5yVF0pCnIoSC5rWSxQLkM2KQpyKFAuaWwsUC5ZaykKcShQLmlsLFtILk41LFAudXcsVy5jZixX
-LlN5XSkKcShQLm1XLFtILktXLFAucTRdKQpyKEguTFosSC5FVCkKcShILkxaLFtILlJHLEguV0JdKQpy
-KEguVlAsSC5SRykKcihILkRnLEguVlApCnIoSC5aRyxILldCKQpyKEguUGcsSC5aRykKcShILlBnLFtI
-LnhqLEguZEUsSC5aQSxILmRULEguUHEsSC5lRSxILlY2XSkKcihILmlNLEgua1MpCnEoSC5BeSxbUC5W
-cyxQLkZ0LFAueUgsUC5kYSxQLm9RLFAudnIsUC5ydCxQLktGLFAuWkwsUC5SVCxQLnJxLFAuUlcsUC51
-TyxQLkV2LFAuVnAsUC54cixQLk56LEwuVlcsTC5uVCxMLk5ZLEwuUUxdKQpyKFAuWmYsUC5QZikKcihQ
-LkppLFAubTApCnIoUC5YdixQLnBSKQpyKFAuYjYsUC5YdikKcihQLlZqLFAuV1kpCnEoUC5VayxbUC5D
-VixQLlppLFAuYnldKQpyKFAud0ksUC5rVCkKcShQLndJLFtQLlU4LFAub2osUC5NeCxQLkUzLFAuR1ld
-KQpyKFAuSzgsUC5VZCkKcihQLnR1LFAuU2gpCnIoUC51NSxQLlppKQpxKFAuQVQsW1AuYkosUC5lWV0p
-CnIoUC5xZSxQLkRuKQpxKFcuRDAsW1cuS1YsVy53YSxXLks1LFcuQ21dKQpxKFcuS1YsW1cuY3YsVy5u
-eCxXLlFGLFcuQ1FdKQpxKFcuY3YsW1cucUUsUC5oaV0pCnEoVy5xRSxbVy5HaCxXLmZZLFcuclosVy5R
-UCxXLmg0LFcuU04sVy5scCxXLlRiLFcuSXYsVy5XUCxXLnlZXSkKcihXLm9KLFcuTGUpCnIoVy5oSCxX
-LkF6KQpyKFcuVmIsVy5RRikKcihXLmZKLFcud2EpCnEoVy5lYSxbVy53NixXLmV3XSkKcihXLkFqLFcu
-dzYpCnIoVy5yQixXLks3KQpyKFcuQkgsVy5yQikKcihXLnc0LFcuSUIpCnIoVy5vYSxXLlhXKQpyKFcu
-cmgsVy5vYSkKcihXLmk3LFcuY2YpCnIoUC5BcyxQLlZqKQpxKFAuQXMsW1cuSTQsUC5LZV0pCnIoVy5S
-TyxQLnFoKQpyKFcuQ3EsVy5STykKcihXLnhDLFAuTU8pCnIoVy5jdCxXLm02KQpyKFAuQmYsUC5pSikK
-cShQLkU0LFtQLnI3LFAudmddKQpyKFAuVHosUC52ZykKcihQLm5kLFAuaGkpCnEoTC5EOCxbTC52dCxM
-LmNEXSkKcihCLmZ2LE8uekwpCnEoQi5mdixbRS5PRixGLnJ1LEwuSVZdKQpzKEgudzIsSC5SZSkKcyhI
-LlFDLFAubEQpCnMoSC5SRyxQLmxEKQpzKEguVlAsSC5TVSkKcyhILldCLFAubEQpCnMoSC5aRyxILlNV
-KQpzKFAublksUC5sRCkKcyhQLldZLFAubGYpCnMoUC5SVSxQLktQKQpzKFAucFIsUC5sZikKcyhXLkxl
-LFcuaWQpCnMoVy5LNyxQLmxEKQpzKFcuckIsVy5HbSkKcyhXLlhXLFAubEQpCnMoVy5vYSxXLkdtKQpz
-KFAudmcsUC5sRCl9KSgpCnZhciB2PXt0eXBlVW5pdmVyc2U6e2VDOm5ldyBNYXAoKSx0Ujp7fSxlVDp7
-fSx0UFY6e30sc0VBOltdfSxtYW5nbGVkR2xvYmFsTmFtZXM6e0lqOiJpbnQiLENQOiJkb3VibGUiLFpa
-OiJudW0iLHFVOiJTdHJpbmciLGEyOiJib29sIixjODoiTnVsbCIsek06Ikxpc3QifSxtYW5nbGVkTmFt
-ZXM6e30sdHlwZXM6WyJ+KCkiLCJ+KEFqKSIsInFVKHFVKSIsIn4oY3YpIiwiQChAKSIsIn4ofigpKSIs
-ImEyKHFVKSIsImI4PH4+KEFqKSIsIn4ocVUscVUpIiwifihNaD8sTWg/KSIsIkAoKSIsIn4ocVUsQCki
-LCJ+KHh1PHFVPikiLCJjOChAKSIsImEyKGN2LHFVLHFVLEpRKSIsImM4KCkiLCJhMihrRikiLCJjOChl
-YSkiLCJ+KG42LHFVLElqKSIsIn4ocVVbQF0pIiwiSWooSWosSWopIiwiQChxVSkiLCJ+KHFVLHFVPyki
-LCJuNihALEApIiwifihxVSxJaikiLCJhMihLVikiLCJaMDxxVSxxVT4oWjA8cVUscVU+LHFVKSIsIn4o
-ZWEpIiwifihHRCxAKSIsInZzPEA+KEApIiwifihLVixLVj8pIiwifihALEApIiwiYzgoQCxAKSIsImEy
-KHh1PHFVPikiLCJjOChNaCxHeikiLCJNaD8oQCkiLCJUejxAPihAKSIsIkU0KEApIiwiTEwoQCkiLCJa
-MDxxVSxNaD8+KExMKSIsIn4oTWhbR3o/XSkiLCJjOCh+KCkpIiwiYzgoWjA8cVUsTWg/Pj8pIiwiYzgo
-TWgsQCkiLCJyNyhAKSIsIn4oSWosQCkiLCJ+KGV3KSIsInFVKFowPEAsQD4pIiwiYTIoSDcpIiwicVUo
-cVU/KSIsIkAoQCxxVSkiLCJ+KEApIiwiTWg/KE1oPykiLCJjOChALEd6KSJdLGludGVyY2VwdG9yc0J5
-VGFnOm51bGwsbGVhZlRhZ3M6bnVsbCxhcnJheVJ0aTpTeW1ib2woIiR0aSIpfQpILnhiKHYudHlwZVVu
-aXZlcnNlLEpTT04ucGFyc2UoJ3siaUMiOiJNRiIsImtkIjoiTUYiLCJjNSI6Ik1GIiwicngiOiJlYSIs
-ImU1IjoiZWEiLCJZMCI6ImhpIiwidHAiOiJoaSIsIkc4IjoiZXciLCJNciI6InFFIiwiZUwiOiJxRSIs
-IkkwIjoiS1YiLCJocyI6IktWIiwiWGciOiJRRiIsIm5yIjoiQWoiLCJ5NCI6Inc2IiwiYVAiOiJDbSIs
-InhjIjoibngiLCJrSiI6Im54IiwielUiOiJEZyIsImRmIjoiRVQiLCJ5RSI6eyJhMiI6W119LCJ3ZSI6
-eyJjOCI6W119LCJNRiI6eyJ2bSI6W119LCJqZCI6eyJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsi
-MSJdfSwiUG8iOnsiamQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwibTEi
-OnsiQW4iOlsiMSJdfSwicUkiOnsiQ1AiOltdLCJaWiI6W119LCJiVSI6eyJDUCI6W10sIklqIjpbXSwi
-WloiOltdfSwia0QiOnsiQ1AiOltdLCJaWiI6W119LCJEciI6eyJxVSI6W10sInZYIjpbXX0sIkJSIjp7
-ImNYIjpbIjIiXX0sImVUIjp7IkFuIjpbIjIiXX0sIlp5Ijp7IkJSIjpbIjEiLCIyIl0sImNYIjpbIjIi
-XSwiY1guRSI6IjIifSwib2wiOnsiWnkiOlsiMSIsIjIiXSwiQlIiOlsiMSIsIjIiXSwiYlEiOlsiMiJd
-LCJjWCI6WyIyIl0sImNYLkUiOiIyIn0sIlVxIjp7ImxEIjpbIjIiXSwiek0iOlsiMiJdLCJCUiI6WyIx
-IiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXX0sImpWIjp7IlVxIjpbIjEiLCIyIl0sImxEIjpbIjIi
-XSwiek0iOlsiMiJdLCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwibEQuRSI6IjIi
-LCJjWC5FIjoiMiJ9LCJjIjp7IlhTIjpbXX0sInFqIjp7ImxEIjpbIklqIl0sIlJlIjpbIklqIl0sInpN
-IjpbIklqIl0sImJRIjpbIklqIl0sImNYIjpbIklqIl0sImxELkUiOiJJaiIsIlJlLkUiOiJJaiJ9LCJi
-USI6eyJjWCI6WyIxIl19LCJhTCI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm5IIjp7ImFMIjpbIjEi
-XSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImFMLkUiOiIxIiwiY1guRSI6IjEifSwiYTciOnsiQW4iOlsi
-MSJdfSwiaTEiOnsiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJ4eSI6eyJpMSI6WyIxIiwiMiJdLCJiUSI6
-WyIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwiTUgiOnsiQW4iOlsiMiJdfSwibEoiOnsiYUwiOlsi
-MiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiYUwuRSI6IjIiLCJjWC5FIjoiMiJ9LCJVNSI6eyJjWCI6
-WyIxIl0sImNYLkUiOiIxIn0sIlNPIjp7IkFuIjpbIjEiXX0sIkFNIjp7ImNYIjpbIjEiXSwiY1guRSI6
-IjEifSwiZDUiOnsiQU0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiVTEi
-OnsiQW4iOlsiMSJdfSwiTUIiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkZ1Ijp7
-IkFuIjpbIjEiXX0sInU2Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiSkIiOnsiQW4iOlsiMSJdfSwi
-dzIiOnsibEQiOlsiMSJdLCJSZSI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19
-LCJ3diI6eyJHRCI6W119LCJQRCI6eyJHaiI6WyIxIiwiMiJdLCJSVSI6WyIxIiwiMiJdLCJQbiI6WyIx
-IiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdfSwiV1UiOnsiWjAiOlsiMSIsIjIiXX0s
-IkxQIjp7IldVIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJYUiI6eyJjWCI6WyIxIl0sImNYLkUi
-OiIxIn0sIkxJIjp7InZRIjpbXX0sIlcwIjp7IkV6IjpbXSwiWFMiOltdfSwiYXoiOnsiWFMiOltdfSwi
-dlYiOnsiWFMiOltdfSwidGUiOnsiUnoiOltdfSwiWE8iOnsiR3oiOltdfSwiVHAiOnsiRUgiOltdfSwi
-QXkiOnsiRUgiOltdfSwiRTEiOnsiRUgiOltdfSwibGMiOnsiRUgiOltdfSwiengiOnsiRUgiOltdfSwi
-clQiOnsiRUgiOltdfSwiRXEiOnsiWFMiOltdfSwia1kiOnsiWFMiOltdfSwiTjUiOnsiWWsiOlsiMSIs
-IjIiXSwiRm8iOlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXSwiWWsuSyI6IjEiLCJZay5WIjoiMiJ9LCJp
-NSI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTjYiOnsiQW4iOlsiMSJdfSwiVlIi
-Onsid0wiOltdLCJ2WCI6W119LCJFSyI6eyJpYiI6W10sIk9kIjpbXX0sIktXIjp7ImNYIjpbImliIl0s
-ImNYLkUiOiJpYiJ9LCJQYiI6eyJBbiI6WyJpYiJdfSwidFEiOnsiT2QiOltdfSwidW4iOnsiY1giOlsi
-T2QiXSwiY1guRSI6Ik9kIn0sIlNkIjp7IkFuIjpbIk9kIl19LCJFVCI6eyJBUyI6W119LCJMWiI6eyJY
-aiI6WyIxIl0sIkVUIjpbXSwiQVMiOltdfSwiRGciOnsibEQiOlsiQ1AiXSwiWGoiOlsiQ1AiXSwiek0i
-OlsiQ1AiXSwiRVQiOltdLCJiUSI6WyJDUCJdLCJBUyI6W10sImNYIjpbIkNQIl0sIlNVIjpbIkNQIl0s
-ImxELkUiOiJDUCJ9LCJQZyI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6
-W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXX0sInhqIjp7ImxEIjpb
-IklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJj
-WCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiZEUiOnsibEQiOlsiSWoiXSwiWGoiOlsi
-SWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNV
-IjpbIklqIl0sImxELkUiOiJJaiJ9LCJaQSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJ
-aiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQu
-RSI6IklqIn0sImRUIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwi
-YlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiUHEi
-OnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJB
-UyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJlRSI6eyJsRCI6WyJJaiJd
-LCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsi
-SWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sIlY2Ijp7ImxEIjpbIklqIl0sIm42IjpbXSwiWGoi
-OlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0s
-IlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJrUyI6eyJYUyI6W119LCJpTSI6eyJFeiI6W10sIlhTIjpb
-XX0sInZzIjp7ImI4IjpbIjEiXX0sIkdWIjp7IkFuIjpbIjEiXX0sInE0Ijp7ImNYIjpbIjEiXSwiY1gu
-RSI6IjEifSwiQ3ciOnsiWFMiOltdfSwiWmYiOnsiUGYiOlsiMSJdfSwibTAiOnsiUW0iOltdfSwiSmki
-OnsibTAiOltdLCJRbSI6W119LCJiNiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJj
-WCI6WyIxIl0sImxmLkUiOiIxIn0sImxtIjp7IkFuIjpbIjEiXX0sIm1XIjp7ImNYIjpbIjEiXX0sInV5
-Ijp7ImxEIjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sImlsIjp7IllrIjpb
-IjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJZayI6eyJaMCI6WyIxIiwiMiJdfSwiUG4iOnsiWjAiOlsi
-MSIsIjIiXX0sIkdqIjp7IlJVIjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIyIl0s
-IlowIjpbIjEiLCIyIl19LCJWaiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6
-WyIxIl19LCJYdiI6eyJsZiI6WyIxIl0sInh1IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJ1
-dyI6eyJZayI6WyJxVSIsIkAiXSwiWjAiOlsicVUiLCJAIl0sIllrLksiOiJxVSIsIllrLlYiOiJAIn0s
-Imk4Ijp7ImFMIjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImFMLkUiOiJxVSIsImNYLkUi
-OiJxVSJ9LCJDViI6eyJVayI6WyJ6TTxJaj4iLCJxVSJdLCJVay5TIjoiek08SWo+In0sIlU4Ijp7IndJ
-IjpbInpNPElqPiIsInFVIl19LCJaaSI6eyJVayI6WyJxVSIsInpNPElqPiJdfSwiVWQiOnsiWFMiOltd
-fSwiSzgiOnsiWFMiOltdfSwiYnkiOnsiVWsiOlsiTWg/IiwicVUiXSwiVWsuUyI6Ik1oPyJ9LCJvaiI6
-eyJ3SSI6WyJNaD8iLCJxVSJdfSwiTXgiOnsid0kiOlsicVUiLCJNaD8iXX0sInU1Ijp7IlVrIjpbInFV
-Iiwiek08SWo+Il0sIlVrLlMiOiJxVSJ9LCJFMyI6eyJ3SSI6WyJxVSIsInpNPElqPiJdfSwiR1kiOnsi
-d0kiOlsiek08SWo+IiwicVUiXX0sIkNQIjp7IlpaIjpbXX0sIklqIjp7IlpaIjpbXX0sInpNIjp7ImJR
-IjpbIjEiXSwiY1giOlsiMSJdfSwiaWIiOnsiT2QiOltdfSwieHUiOnsiYlEiOlsiMSJdLCJjWCI6WyIx
-Il19LCJxVSI6eyJ2WCI6W119LCJDNiI6eyJYUyI6W119LCJFeiI6eyJYUyI6W119LCJGIjp7IlhTIjpb
-XX0sIkFUIjp7IlhTIjpbXX0sImJKIjp7IlhTIjpbXX0sImVZIjp7IlhTIjpbXX0sIm1wIjp7IlhTIjpb
-XX0sInViIjp7IlhTIjpbXX0sImRzIjp7IlhTIjpbXX0sImxqIjp7IlhTIjpbXX0sIlVWIjp7IlhTIjpb
-XX0sIms1Ijp7IlhTIjpbXX0sIktZIjp7IlhTIjpbXX0sInAiOnsiWFMiOltdfSwiQ0QiOnsiUnoiOltd
-fSwiYUUiOnsiUnoiOltdfSwiWmQiOnsiR3oiOltdfSwiTSI6eyJCTCI6W119LCJEbiI6eyJpRCI6W119
-LCJVZiI6eyJpRCI6W119LCJxZSI6eyJpRCI6W119LCJjdiI6eyJLViI6W10sIkQwIjpbXX0sImZKIjp7
-IkQwIjpbXX0sIkFqIjp7ImVhIjpbXX0sIktWIjp7IkQwIjpbXX0sImV3Ijp7ImVhIjpbXX0sIkpRIjp7
-ImtGIjpbXX0sInFFIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJHaCI6eyJjdiI6W10sIktWIjpb
-XSwiRDAiOltdfSwiZlkiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sInJaIjp7ImN2IjpbXSwiS1Yi
-OltdLCJEMCI6W119LCJRUCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwibngiOnsiS1YiOltdLCJE
-MCI6W119LCJRRiI6eyJLViI6W10sIkQwIjpbXX0sIklCIjp7InRuIjpbIlpaIl19LCJ3eiI6eyJsRCI6
-WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sImhIIjp7IkF6
-IjpbXX0sImg0Ijp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJWYiI6eyJLViI6W10sIkQwIjpbXX0s
-IndhIjp7IkQwIjpbXX0sImU3Ijp7ImxEIjpbIktWIl0sInpNIjpbIktWIl0sImJRIjpbIktWIl0sImNY
-IjpbIktWIl0sImxELkUiOiJLViJ9LCJCSCI6eyJsRCI6WyJLViJdLCJHbSI6WyJLViJdLCJ6TSI6WyJL
-ViJdLCJYaiI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJLViJdLCJsRC5FIjoiS1YiLCJHbS5FIjoi
-S1YifSwiU04iOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sImxwIjp7ImN2IjpbXSwiS1YiOltdLCJE
-MCI6W119LCJUYiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiSXYiOnsiY3YiOltdLCJLViI6W10s
-IkQwIjpbXX0sIldQIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJ5WSI6eyJjdiI6W10sIktWIjpb
-XSwiRDAiOltdfSwidzYiOnsiZWEiOltdfSwiSzUiOnsidjYiOltdLCJEMCI6W119LCJDbSI6eyJEMCI6
-W119LCJDUSI6eyJLViI6W10sIkQwIjpbXX0sInc0Ijp7InRuIjpbIlpaIl19LCJyaCI6eyJsRCI6WyJL
-ViJdLCJHbSI6WyJLViJdLCJ6TSI6WyJLViJdLCJYaiI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJL
-ViJdLCJsRC5FIjoiS1YiLCJHbS5FIjoiS1YifSwiY2YiOnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJx
-VSIsInFVIl19LCJpNyI6eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFV
-IiwiWWsuViI6InFVIn0sIlN5Ijp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdLCJZay5L
-IjoicVUiLCJZay5WIjoicVUifSwiSTQiOnsibGYiOlsicVUiXSwieHUiOlsicVUiXSwiYlEiOlsicVUi
-XSwiY1giOlsicVUiXSwibGYuRSI6InFVIn0sIlJPIjp7InFoIjpbIjEiXX0sIkNxIjp7IlJPIjpbIjEi
-XSwicWgiOlsiMSJdfSwieEMiOnsiTU8iOlsiMSJdfSwidkQiOnsia0YiOltdfSwibTYiOnsia0YiOltd
-fSwiY3QiOnsia0YiOltdfSwiT3ciOnsia0YiOltdfSwiVzkiOnsiQW4iOlsiMSJdfSwiZFciOnsidjYi
-OltdLCJEMCI6W119LCJtayI6eyJ5MCI6W119LCJLbyI6eyJvbiI6W119LCJBcyI6eyJsZiI6WyJxVSJd
-LCJ4dSI6WyJxVSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdfSwicjciOnsiRTQiOltdfSwiVHoiOnsi
-bEQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiRTQiOltdLCJjWCI6WyIxIl0sImxELkUiOiIx
-In0sIm5kIjp7ImhpIjpbXSwiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIktlIjp7ImxmIjpbInFVIl0s
-Inh1IjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImxmLkUiOiJxVSJ9LCJoaSI6eyJjdiI6
-W10sIktWIjpbXSwiRDAiOltdfSwiUVciOnsiWFMiOltdLCJSeiI6W119LCJYQSI6eyJrRiI6W119LCJ2
-dCI6eyJEOCI6W119LCJjRCI6eyJEOCI6W119LCJkdiI6eyJSeiI6W119LCJPRiI6eyJmdiI6W119LCJy
-dSI6eyJmdiI6W119LCJJViI6eyJmdiI6W119LCJuNiI6eyJ6TSI6WyJJaiJdLCJiUSI6WyJJaiJdLCJj
-WCI6WyJJaiJdLCJBUyI6W119fScpKQpILkZGKHYudHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3sidzIi
-OjEsIlFDIjoyLCJMWiI6MSwia1QiOjIsIm1XIjoxLCJ1eSI6MSwiaWwiOjIsIlZqIjoxLCJYdiI6MSwi
-blkiOjEsIldZIjoxLCJwUiI6MSwidmciOjF9JykpCnZhciB1PXtsOiJDYW5ub3QgZXh0cmFjdCBhIGZp
-bGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBmcmFnbWVudCBjb21wb25lbnQiLGk6IkNhbm5vdCBleHRy
-YWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIsajoiQ2Fubm90
-IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdpdGggYW4gYXV0
-aG9yaXR5IixjOiJFcnJvciBoYW5kbGVyIG11c3QgYWNjZXB0IG9uZSBPYmplY3Qgb3Igb25lIE9iamVj
-dCBhbmQgYSBTdGFja1RyYWNlIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybiBhIHZhbHVlIG9mIHRoZSBy
-ZXR1cm5lZCBmdXR1cmUncyB0eXBlIixkOiJhcmVhLWFuYWx5emVyLGFuYWx5emVyLW5uYmQtbWlncmF0
-aW9uLHR5cGUtYnVnIn0KdmFyIHQ9KGZ1bmN0aW9uIHJ0aWkoKXt2YXIgcz1ILk4wCnJldHVybnticTpz
-KCJHaCIpLG46cygiQ3ciKSxjUjpzKCJyWiIpLHc6cygiQXoiKSxtOnMoIlFQIiksZ0Y6cygiUEQ8R0Qs
-QD4iKSxVOnMoImJRPEA+IiksaDpzKCJjdiIpLHI6cygiWFMiKSxCOnMoImVhIiksZzg6cygiUnoiKSxj
-ODpzKCJoSCIpLFk6cygiRUgiKSxpOnMoImI4PEA+IiksSjpzKCJMTCIpLGdwOnMoIkg3IiksSTpzKCJT
-ZyIpLG86cygidlEiKSxlaDpzKCJjWDxLVj4iKSxPOnMoImNYPHFVPiIpLGE6cygiY1g8QD4iKSxmQTpz
-KCJqZDxTZT4iKSxnaTpzKCJqZDxqOD4iKSxkOnMoImpkPFowPHFVLE1oPz4+IiksZmg6cygiamQ8RDg+
-IiksdTpzKCJqZDxrRj4iKSxzOnMoImpkPHFVPiIpLGhoOnMoImpkPHlEPiIpLGFKOnMoImpkPHdiPiIp
-LGdOOnMoImpkPG42PiIpLGI6cygiamQ8QD4iKSx0OnMoImpkPElqPiIpLGQ0OnMoImpkPHFVPz4iKSxU
-OnMoIndlIiksZUg6cygidm0iKSx4OnMoImM1IiksYVU6cygiWGo8QD4iKSxhbTpzKCJUejxAPiIpLGVv
-OnMoIk41PEdELEA+IiksZHo6cygiaEYiKSxmNDpzKCJ6TTxqOD4iKSxEOnMoInpNPFowPHFVLE1oPz4+
-IiksZXc6cygiek08TWg+IiksRTpzKCJ6TTxxVT4iKSxqOnMoInpNPEA+IiksTDpzKCJ6TTxJaj4iKSxX
-OnMoInpNPE1oPz4iKSxGOnMoInU4IiksaDY6cygiWjA8cVUsTWg+IiksY2s6cygiWjA8cVUscVU+Iiks
-ZjpzKCJaMDxALEA+IiksRzpzKCJaMDxxVSxNaD8+IiksZHY6cygibEo8cVUscVU+IiksZG86cygibEo8
-cVUsQD4iKSxWOnMoIkFqIiksZEU6cygiRVQiKSxBOnMoIktWIiksZjY6cygia0YiKSxQOnMoImM4Iiks
-SzpzKCJNaCIpLHA6cygiZXciKSxxOnMoInRuPFpaPiIpLGZ2OnMoIndMIiksY3o6cygiaWIiKSxhTzpz
-KCJuZCIpLEM6cygieHU8cVU+IiksbDpzKCJHeiIpLE46cygicVUiKSxkRzpzKCJxVShxVSkiKSxnNzpz
-KCJoaSIpLGZvOnMoIkdEIiksYVc6cygieVkiKSxlSzpzKCJFeiIpLGFrOnMoIkFTIiksZ2M6cygibjYi
-KSxiSTpzKCJrZCIpLGR3OnMoIkdqPHFVLHFVPiIpLGREOnMoImlEIiksZUo6cygidTY8cVU+IiksZzQ6
-cygiSzUiKSxjaTpzKCJ2NiIpLGcyOnMoIkNtIiksYmo6cygiWmY8Zko+IiksaDk6cygiQ1EiKSxhYzpz
-KCJlNyIpLFE6cygiQ3E8QWo+IiksUjpzKCJ3ejxjdj4iKSxhbzpzKCJ2czxmSj4iKSxjOnMoInZzPEA+
-IiksZko6cygidnM8SWo+IiksY3I6cygiSlEiKSx5OnMoImEyIiksYWw6cygiYTIoTWgpIiksZ1I6cygi
-Q1AiKSx6OnMoIkAiKSxmTzpzKCJAKCkiKSx2OnMoIkAoTWgpIiksazpzKCJAKE1oLEd6KSIpLGJVOnMo
-IkAoeHU8cVU+KSIpLGRPOnMoIkAocVUpIiksYjg6cygiQChALEApIiksUzpzKCJJaiIpLGF3OnMoIjAm
-KiIpLF86cygiTWgqIiksY2g6cygiRDA/IiksYkc6cygiYjg8Yzg+PyIpLGVzOnMoIkU0PyIpLGJrOnMo
-InpNPHFVPj8iKSxiTTpzKCJ6TTxAPj8iKSxncTpzKCJ6TTxNaD8+PyIpLGNaOnMoIlowPHFVLHFVPj8i
-KSxjOTpzKCJaMDxxVSxAPj8iKSxmbjpzKCJaMDxxVSxNaD8+PyIpLFg6cygiTWg/IiksZGs6cygicVU/
-IiksZTpzKCJGZTxALEA+PyIpLGc6cygiYm4/IiksYjc6cygiYTIoTWgpPyIpLGJ3OnMoIkAoZWEpPyIp
-LGZWOnMoIk1oPyhNaD8sTWg/KT8iKSxkQTpzKCJNaD8oQCk/IiksWjpzKCJ+KCk/IiksZ3g6cygifihl
-dyk/IiksZGk6cygiWloiKSxIOnMoIn4iKSxNOnMoIn4oKSIpLGVBOnMoIn4ocVUscVUpIiksY0E6cygi
-fihxVSxAKSIpfX0pKCk7KGZ1bmN0aW9uIGNvbnN0YW50cygpe3ZhciBzPWh1bmtIZWxwZXJzLm1ha2VD
-b25zdExpc3QKQy54bj1XLkdoLnByb3RvdHlwZQpDLlJZPVcuUVAucHJvdG90eXBlCkMubUg9Vy5hZS5w
-cm90b3R5cGUKQy5CWj1XLlZiLnByb3RvdHlwZQpDLkR0PVcuZkoucHJvdG90eXBlCkMuT2s9Si5Hdi5w
-cm90b3R5cGUKQy5ObT1KLmpkLnByb3RvdHlwZQpDLmpuPUouYlUucHJvdG90eXBlCkMuQ0Q9Si5xSS5w
-cm90b3R5cGUKQy54Qj1KLkRyLnByb3RvdHlwZQpDLkRHPUouYzUucHJvdG90eXBlCkMuRXg9Vy51OC5w
-cm90b3R5cGUKQy5OQT1ILlY2LnByb3RvdHlwZQpDLnQ1PVcuQkgucHJvdG90eXBlCkMuTHQ9Vy5TTi5w
-cm90b3R5cGUKQy5aUT1KLmlDLnByb3RvdHlwZQpDLkllPVcuVGIucHJvdG90eXBlCkMudkI9Si5rZC5w
-cm90b3R5cGUKQy5vbD1XLks1LnByb3RvdHlwZQpDLnk4PW5ldyBQLlU4KCkKQy5oOT1uZXcgUC5DVigp
-CkMuR3c9bmV3IEguRnUoSC5OMCgiRnU8MCY+IikpCkMuTzQ9ZnVuY3Rpb24gZ2V0VGFnRmFsbGJhY2so
-bykgewogIHZhciBzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pOwogIHJldHVybiBz
-LnN1YnN0cmluZyg4LCBzLmxlbmd0aCAtIDEpOwp9CkMuWXE9ZnVuY3Rpb24oKSB7CiAgdmFyIHRvU3Ry
-aW5nRnVuY3Rpb24gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogIGZ1bmN0aW9uIGdldFRhZyhv
-KSB7CiAgICB2YXIgcyA9IHRvU3RyaW5nRnVuY3Rpb24uY2FsbChvKTsKICAgIHJldHVybiBzLnN1YnN0
-cmluZyg4LCBzLmxlbmd0aCAtIDEpOwogIH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFnKG9iamVjdCwg
-dGFnKSB7CiAgICBpZiAoL15IVE1MW0EtWl0uKkVsZW1lbnQkLy50ZXN0KHRhZykpIHsKICAgICAgdmFy
-IG5hbWUgPSB0b1N0cmluZ0Z1bmN0aW9uLmNhbGwob2JqZWN0KTsKICAgICAgaWYgKG5hbWUgPT0gIltv
-YmplY3QgT2JqZWN0XSIpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gIkhUTUxFbGVtZW50IjsKICAg
-IH0KICB9CiAgZnVuY3Rpb24gZ2V0VW5rbm93blRhZ0dlbmVyaWNCcm93c2VyKG9iamVjdCwgdGFnKSB7
-CiAgICBpZiAoc2VsZi5IVE1MRWxlbWVudCAmJiBvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkg
-cmV0dXJuICJIVE1MRWxlbWVudCI7CiAgICByZXR1cm4gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZyk7
-CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZyh0YWcpIHsKICAgIGlmICh0eXBlb2Ygd2luZG93
-ID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAgIGlmICh0eXBlb2Ygd2luZG93W3RhZ10gPT0g
-InVuZGVmaW5lZCIpIHJldHVybiBudWxsOwogICAgdmFyIGNvbnN0cnVjdG9yID0gd2luZG93W3RhZ107
-CiAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9ICJmdW5jdGlvbiIpIHJldHVybiBudWxsOwogICAg
-cmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgZnVuY3Rpb24gZGlzY3JpbWluYXRvcih0
-YWcpIHsgcmV0dXJuIG51bGw7IH0KICB2YXIgaXNCcm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciA9PSAi
-b2JqZWN0IjsKICByZXR1cm4gewogICAgZ2V0VGFnOiBnZXRUYWcsCiAgICBnZXRVbmtub3duVGFnOiBp
-c0Jyb3dzZXIgPyBnZXRVbmtub3duVGFnR2VuZXJpY0Jyb3dzZXIgOiBnZXRVbmtub3duVGFnLAogICAg
-cHJvdG90eXBlRm9yVGFnOiBwcm90b3R5cGVGb3JUYWcsCiAgICBkaXNjcmltaW5hdG9yOiBkaXNjcmlt
-aW5hdG9yIH07Cn0KQy53Yj1mdW5jdGlvbihnZXRUYWdGYWxsYmFjaykgewogIHJldHVybiBmdW5jdGlv
-bihob29rcykgewogICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0gIm9iamVjdCIpIHJldHVybiBob29r
-czsKICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICBpZiAodWEuaW5kZXhPZigiRHVt
-cFJlbmRlclRyZWUiKSA+PSAwKSByZXR1cm4gaG9va3M7CiAgICBpZiAodWEuaW5kZXhPZigiQ2hyb21l
-IikgPj0gMCkgewogICAgICBmdW5jdGlvbiBjb25maXJtKHApIHsKICAgICAgICByZXR1cm4gdHlwZW9m
-IHdpbmRvdyA9PSAib2JqZWN0IiAmJiB3aW5kb3dbcF0gJiYgd2luZG93W3BdLm5hbWUgPT0gcDsKICAg
-ICAgfQogICAgICBpZiAoY29uZmlybSgiV2luZG93IikgJiYgY29uZmlybSgiSFRNTEVsZW1lbnQiKSkg
-cmV0dXJuIGhvb2tzOwogICAgfQogICAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnRmFsbGJhY2s7CiAgfTsK
-fQpDLktVPWZ1bmN0aW9uKGhvb2tzKSB7CiAgaWYgKHR5cGVvZiBkYXJ0RXhwZXJpbWVudGFsRml4dXBH
-ZXRUYWcgIT0gImZ1bmN0aW9uIikgcmV0dXJuIGhvb2tzOwogIGhvb2tzLmdldFRhZyA9IGRhcnRFeHBl
-cmltZW50YWxGaXh1cEdldFRhZyhob29rcy5nZXRUYWcpOwp9CkMuZlE9ZnVuY3Rpb24oaG9va3MpIHsK
-ICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwogIHZhciBwcm90b3R5cGVGb3JUYWcgPSBob29rcy5w
-cm90b3R5cGVGb3JUYWc7CiAgZnVuY3Rpb24gZ2V0VGFnRml4ZWQobykgewogICAgdmFyIHRhZyA9IGdl
-dFRhZyhvKTsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgewogICAgICBpZiAoISFvLnhtbFZlcnNp
-b24pIHJldHVybiAiIURvY3VtZW50IjsKICAgICAgcmV0dXJuICIhSFRNTERvY3VtZW50IjsKICAgIH0K
-ICAgIHJldHVybiB0YWc7CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZ0ZpeGVkKHRhZykgewog
-ICAgaWYgKHRhZyA9PSAiRG9jdW1lbnQiKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwcm90b3R5cGVG
-b3JUYWcodGFnKTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnRml4ZWQ7CiAgaG9va3MucHJvdG90
-eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnRml4ZWQ7Cn0KQy5kaz1mdW5jdGlvbihob29rcykgewog
-IHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiID8gbmF2aWdhdG9yLnVz
-ZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpID09IC0xKSByZXR1
-cm4gaG9va3M7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcXVpY2tNYXAgPSB7CiAg
-ICAiQmVmb3JlVW5sb2FkRXZlbnQiOiAiRXZlbnQiLAogICAgIkRhdGFUcmFuc2ZlciI6ICJDbGlwYm9h
-cmQiLAogICAgIkdlb0dlb2xvY2F0aW9uIjogIkdlb2xvY2F0aW9uIiwKICAgICJMb2NhdGlvbiI6ICIh
-TG9jYXRpb24iLAogICAgIldvcmtlck1lc3NhZ2VFdmVudCI6ICJNZXNzYWdlRXZlbnQiLAogICAgIlhN
-TERvY3VtZW50IjogIiFEb2N1bWVudCJ9OwogIGZ1bmN0aW9uIGdldFRhZ0ZpcmVmb3gobykgewogICAg
-dmFyIHRhZyA9IGdldFRhZyhvKTsKICAgIHJldHVybiBxdWlja01hcFt0YWddIHx8IHRhZzsKICB9CiAg
-aG9va3MuZ2V0VGFnID0gZ2V0VGFnRmlyZWZveDsKfQpDLnhpPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFy
-IHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFn
-ZW50IDogIiI7CiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50LyIpID09IC0xKSByZXR1cm4g
-aG9va3M7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcXVpY2tNYXAgPSB7CiAgICAi
-QmVmb3JlVW5sb2FkRXZlbnQiOiAiRXZlbnQiLAogICAgIkRhdGFUcmFuc2ZlciI6ICJDbGlwYm9hcmQi
-LAogICAgIkhUTUxEREVsZW1lbnQiOiAiSFRNTEVsZW1lbnQiLAogICAgIkhUTUxEVEVsZW1lbnQiOiAi
-SFRNTEVsZW1lbnQiLAogICAgIkhUTUxQaHJhc2VFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJQ
-b3NpdGlvbiI6ICJHZW9wb3NpdGlvbiIKICB9OwogIGZ1bmN0aW9uIGdldFRhZ0lFKG8pIHsKICAgIHZh
-ciB0YWcgPSBnZXRUYWcobyk7CiAgICB2YXIgbmV3VGFnID0gcXVpY2tNYXBbdGFnXTsKICAgIGlmIChu
-ZXdUYWcpIHJldHVybiBuZXdUYWc7CiAgICBpZiAodGFnID09ICJPYmplY3QiKSB7CiAgICAgIGlmICh3
-aW5kb3cuRGF0YVZpZXcgJiYgKG8gaW5zdGFuY2VvZiB3aW5kb3cuRGF0YVZpZXcpKSByZXR1cm4gIkRh
-dGFWaWV3IjsKICAgIH0KICAgIHJldHVybiB0YWc7CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRh
-Z0lFKHRhZykgewogICAgdmFyIGNvbnN0cnVjdG9yID0gd2luZG93W3RhZ107CiAgICBpZiAoY29uc3Ry
-dWN0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBl
-OwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRUYWdJRTsKICBob29rcy5wcm90b3R5cGVGb3JUYWcgPSBw
-cm90b3R5cGVGb3JUYWdJRTsKfQpDLmk3PWZ1bmN0aW9uKGhvb2tzKSB7IHJldHVybiBob29rczsgfQoK
-Qy5DdD1uZXcgUC5ieSgpCkMuRXE9bmV3IFAuazUoKQpDLnhNPW5ldyBQLnU1KCkKQy5Raz1uZXcgUC5F
-MygpCkMuTnY9bmV3IEgua3IoKQpDLk5VPW5ldyBQLkppKCkKQy5wZD1uZXcgUC5aZCgpCkMuQWQ9bmV3
-IFIuSDcoMCwiSGludEFjdGlvbktpbmQuYWRkTnVsbGFibGVIaW50IikKQy5uZT1uZXcgUi5INygxLCJI
-aW50QWN0aW9uS2luZC5hZGROb25OdWxsYWJsZUhpbnQiKQpDLm15PW5ldyBSLkg3KDIsIkhpbnRBY3Rp
-b25LaW5kLmNoYW5nZVRvTnVsbGFibGVIaW50IikKQy5yeD1uZXcgUi5INygzLCJIaW50QWN0aW9uS2lu
-ZC5jaGFuZ2VUb05vbk51bGxhYmxlSGludCIpCkMud1Y9bmV3IFIuSDcoNCwiSGludEFjdGlvbktpbmQu
-cmVtb3ZlTnVsbGFibGVIaW50IikKQy5mUj1uZXcgUi5INyg1LCJIaW50QWN0aW9uS2luZC5yZW1vdmVO
-b25OdWxsYWJsZUhpbnQiKQpDLkEzPW5ldyBQLk14KG51bGwpCkMublg9bmV3IFAub2oobnVsbCkKQy5j
-dz1uZXcgTC5HYigwLCJVbml0TWlncmF0aW9uU3RhdHVzLmFscmVhZHlNaWdyYXRlZCIpCkMuZGM9bmV3
-IEwuR2IoMSwiVW5pdE1pZ3JhdGlvblN0YXR1cy5pbmRldGVybWluYXRlIikKQy5XRD1uZXcgTC5HYigy
-LCJVbml0TWlncmF0aW9uU3RhdHVzLm1pZ3JhdGluZyIpCkMuWGo9bmV3IEwuR2IoMywiVW5pdE1pZ3Jh
-dGlvblN0YXR1cy5vcHRpbmdPdXQiKQpDLmwwPUguUUkocyhbQy5jdyxDLmRjLEMuV0QsQy5Yal0pLEgu
-TjAoImpkPEdiPiIpKQpDLmFrPUguUUkocyhbMCwwLDMyNzc2LDMzNzkyLDEsMTAyNDAsMCwwXSksdC50
-KQpDLmNtPUguUUkocyhbIio6OmNsYXNzIiwiKjo6ZGlyIiwiKjo6ZHJhZ2dhYmxlIiwiKjo6aGlkZGVu
-IiwiKjo6aWQiLCIqOjppbmVydCIsIio6Oml0ZW1wcm9wIiwiKjo6aXRlbXJlZiIsIio6Oml0ZW1zY29w
-ZSIsIio6OmxhbmciLCIqOjpzcGVsbGNoZWNrIiwiKjo6dGl0bGUiLCIqOjp0cmFuc2xhdGUiLCJBOjph
-Y2Nlc3NrZXkiLCJBOjpjb29yZHMiLCJBOjpocmVmbGFuZyIsIkE6Om5hbWUiLCJBOjpzaGFwZSIsIkE6
-OnRhYmluZGV4IiwiQTo6dGFyZ2V0IiwiQTo6dHlwZSIsIkFSRUE6OmFjY2Vzc2tleSIsIkFSRUE6OmFs
-dCIsIkFSRUE6OmNvb3JkcyIsIkFSRUE6Om5vaHJlZiIsIkFSRUE6OnNoYXBlIiwiQVJFQTo6dGFiaW5k
-ZXgiLCJBUkVBOjp0YXJnZXQiLCJBVURJTzo6Y29udHJvbHMiLCJBVURJTzo6bG9vcCIsIkFVRElPOjpt
-ZWRpYWdyb3VwIiwiQVVESU86Om11dGVkIiwiQVVESU86OnByZWxvYWQiLCJCRE86OmRpciIsIkJPRFk6
-OmFsaW5rIiwiQk9EWTo6Ymdjb2xvciIsIkJPRFk6OmxpbmsiLCJCT0RZOjp0ZXh0IiwiQk9EWTo6dmxp
-bmsiLCJCUjo6Y2xlYXIiLCJCVVRUT046OmFjY2Vzc2tleSIsIkJVVFRPTjo6ZGlzYWJsZWQiLCJCVVRU
-T046Om5hbWUiLCJCVVRUT046OnRhYmluZGV4IiwiQlVUVE9OOjp0eXBlIiwiQlVUVE9OOjp2YWx1ZSIs
-IkNBTlZBUzo6aGVpZ2h0IiwiQ0FOVkFTOjp3aWR0aCIsIkNBUFRJT046OmFsaWduIiwiQ09MOjphbGln
-biIsIkNPTDo6Y2hhciIsIkNPTDo6Y2hhcm9mZiIsIkNPTDo6c3BhbiIsIkNPTDo6dmFsaWduIiwiQ09M
-Ojp3aWR0aCIsIkNPTEdST1VQOjphbGlnbiIsIkNPTEdST1VQOjpjaGFyIiwiQ09MR1JPVVA6OmNoYXJv
-ZmYiLCJDT0xHUk9VUDo6c3BhbiIsIkNPTEdST1VQOjp2YWxpZ24iLCJDT0xHUk9VUDo6d2lkdGgiLCJD
-T01NQU5EOjpjaGVja2VkIiwiQ09NTUFORDo6Y29tbWFuZCIsIkNPTU1BTkQ6OmRpc2FibGVkIiwiQ09N
-TUFORDo6bGFiZWwiLCJDT01NQU5EOjpyYWRpb2dyb3VwIiwiQ09NTUFORDo6dHlwZSIsIkRBVEE6OnZh
-bHVlIiwiREVMOjpkYXRldGltZSIsIkRFVEFJTFM6Om9wZW4iLCJESVI6OmNvbXBhY3QiLCJESVY6OmFs
-aWduIiwiREw6OmNvbXBhY3QiLCJGSUVMRFNFVDo6ZGlzYWJsZWQiLCJGT05UOjpjb2xvciIsIkZPTlQ6
-OmZhY2UiLCJGT05UOjpzaXplIiwiRk9STTo6YWNjZXB0IiwiRk9STTo6YXV0b2NvbXBsZXRlIiwiRk9S
-TTo6ZW5jdHlwZSIsIkZPUk06Om1ldGhvZCIsIkZPUk06Om5hbWUiLCJGT1JNOjpub3ZhbGlkYXRlIiwi
-Rk9STTo6dGFyZ2V0IiwiRlJBTUU6Om5hbWUiLCJIMTo6YWxpZ24iLCJIMjo6YWxpZ24iLCJIMzo6YWxp
-Z24iLCJINDo6YWxpZ24iLCJINTo6YWxpZ24iLCJINjo6YWxpZ24iLCJIUjo6YWxpZ24iLCJIUjo6bm9z
-aGFkZSIsIkhSOjpzaXplIiwiSFI6OndpZHRoIiwiSFRNTDo6dmVyc2lvbiIsIklGUkFNRTo6YWxpZ24i
-LCJJRlJBTUU6OmZyYW1lYm9yZGVyIiwiSUZSQU1FOjpoZWlnaHQiLCJJRlJBTUU6Om1hcmdpbmhlaWdo
-dCIsIklGUkFNRTo6bWFyZ2lud2lkdGgiLCJJRlJBTUU6OndpZHRoIiwiSU1HOjphbGlnbiIsIklNRzo6
-YWx0IiwiSU1HOjpib3JkZXIiLCJJTUc6OmhlaWdodCIsIklNRzo6aHNwYWNlIiwiSU1HOjppc21hcCIs
-IklNRzo6bmFtZSIsIklNRzo6dXNlbWFwIiwiSU1HOjp2c3BhY2UiLCJJTUc6OndpZHRoIiwiSU5QVVQ6
-OmFjY2VwdCIsIklOUFVUOjphY2Nlc3NrZXkiLCJJTlBVVDo6YWxpZ24iLCJJTlBVVDo6YWx0IiwiSU5Q
-VVQ6OmF1dG9jb21wbGV0ZSIsIklOUFVUOjphdXRvZm9jdXMiLCJJTlBVVDo6Y2hlY2tlZCIsIklOUFVU
-OjpkaXNhYmxlZCIsIklOUFVUOjppbnB1dG1vZGUiLCJJTlBVVDo6aXNtYXAiLCJJTlBVVDo6bGlzdCIs
-IklOUFVUOjptYXgiLCJJTlBVVDo6bWF4bGVuZ3RoIiwiSU5QVVQ6Om1pbiIsIklOUFVUOjptdWx0aXBs
-ZSIsIklOUFVUOjpuYW1lIiwiSU5QVVQ6OnBsYWNlaG9sZGVyIiwiSU5QVVQ6OnJlYWRvbmx5IiwiSU5Q
-VVQ6OnJlcXVpcmVkIiwiSU5QVVQ6OnNpemUiLCJJTlBVVDo6c3RlcCIsIklOUFVUOjp0YWJpbmRleCIs
-IklOUFVUOjp0eXBlIiwiSU5QVVQ6OnVzZW1hcCIsIklOUFVUOjp2YWx1ZSIsIklOUzo6ZGF0ZXRpbWUi
-LCJLRVlHRU46OmRpc2FibGVkIiwiS0VZR0VOOjprZXl0eXBlIiwiS0VZR0VOOjpuYW1lIiwiTEFCRUw6
-OmFjY2Vzc2tleSIsIkxBQkVMOjpmb3IiLCJMRUdFTkQ6OmFjY2Vzc2tleSIsIkxFR0VORDo6YWxpZ24i
-LCJMSTo6dHlwZSIsIkxJOjp2YWx1ZSIsIkxJTks6OnNpemVzIiwiTUFQOjpuYW1lIiwiTUVOVTo6Y29t
-cGFjdCIsIk1FTlU6OmxhYmVsIiwiTUVOVTo6dHlwZSIsIk1FVEVSOjpoaWdoIiwiTUVURVI6OmxvdyIs
-Ik1FVEVSOjptYXgiLCJNRVRFUjo6bWluIiwiTUVURVI6OnZhbHVlIiwiT0JKRUNUOjp0eXBlbXVzdG1h
-dGNoIiwiT0w6OmNvbXBhY3QiLCJPTDo6cmV2ZXJzZWQiLCJPTDo6c3RhcnQiLCJPTDo6dHlwZSIsIk9Q
-VEdST1VQOjpkaXNhYmxlZCIsIk9QVEdST1VQOjpsYWJlbCIsIk9QVElPTjo6ZGlzYWJsZWQiLCJPUFRJ
-T046OmxhYmVsIiwiT1BUSU9OOjpzZWxlY3RlZCIsIk9QVElPTjo6dmFsdWUiLCJPVVRQVVQ6OmZvciIs
-Ik9VVFBVVDo6bmFtZSIsIlA6OmFsaWduIiwiUFJFOjp3aWR0aCIsIlBST0dSRVNTOjptYXgiLCJQUk9H
-UkVTUzo6bWluIiwiUFJPR1JFU1M6OnZhbHVlIiwiU0VMRUNUOjphdXRvY29tcGxldGUiLCJTRUxFQ1Q6
-OmRpc2FibGVkIiwiU0VMRUNUOjptdWx0aXBsZSIsIlNFTEVDVDo6bmFtZSIsIlNFTEVDVDo6cmVxdWly
-ZWQiLCJTRUxFQ1Q6OnNpemUiLCJTRUxFQ1Q6OnRhYmluZGV4IiwiU09VUkNFOjp0eXBlIiwiVEFCTEU6
-OmFsaWduIiwiVEFCTEU6OmJnY29sb3IiLCJUQUJMRTo6Ym9yZGVyIiwiVEFCTEU6OmNlbGxwYWRkaW5n
-IiwiVEFCTEU6OmNlbGxzcGFjaW5nIiwiVEFCTEU6OmZyYW1lIiwiVEFCTEU6OnJ1bGVzIiwiVEFCTEU6
-OnN1bW1hcnkiLCJUQUJMRTo6d2lkdGgiLCJUQk9EWTo6YWxpZ24iLCJUQk9EWTo6Y2hhciIsIlRCT0RZ
-OjpjaGFyb2ZmIiwiVEJPRFk6OnZhbGlnbiIsIlREOjphYmJyIiwiVEQ6OmFsaWduIiwiVEQ6OmF4aXMi
-LCJURDo6Ymdjb2xvciIsIlREOjpjaGFyIiwiVEQ6OmNoYXJvZmYiLCJURDo6Y29sc3BhbiIsIlREOjpo
-ZWFkZXJzIiwiVEQ6OmhlaWdodCIsIlREOjpub3dyYXAiLCJURDo6cm93c3BhbiIsIlREOjpzY29wZSIs
-IlREOjp2YWxpZ24iLCJURDo6d2lkdGgiLCJURVhUQVJFQTo6YWNjZXNza2V5IiwiVEVYVEFSRUE6OmF1
-dG9jb21wbGV0ZSIsIlRFWFRBUkVBOjpjb2xzIiwiVEVYVEFSRUE6OmRpc2FibGVkIiwiVEVYVEFSRUE6
-OmlucHV0bW9kZSIsIlRFWFRBUkVBOjpuYW1lIiwiVEVYVEFSRUE6OnBsYWNlaG9sZGVyIiwiVEVYVEFS
-RUE6OnJlYWRvbmx5IiwiVEVYVEFSRUE6OnJlcXVpcmVkIiwiVEVYVEFSRUE6OnJvd3MiLCJURVhUQVJF
-QTo6dGFiaW5kZXgiLCJURVhUQVJFQTo6d3JhcCIsIlRGT09UOjphbGlnbiIsIlRGT09UOjpjaGFyIiwi
-VEZPT1Q6OmNoYXJvZmYiLCJURk9PVDo6dmFsaWduIiwiVEg6OmFiYnIiLCJUSDo6YWxpZ24iLCJUSDo6
-YXhpcyIsIlRIOjpiZ2NvbG9yIiwiVEg6OmNoYXIiLCJUSDo6Y2hhcm9mZiIsIlRIOjpjb2xzcGFuIiwi
-VEg6OmhlYWRlcnMiLCJUSDo6aGVpZ2h0IiwiVEg6Om5vd3JhcCIsIlRIOjpyb3dzcGFuIiwiVEg6OnNj
-b3BlIiwiVEg6OnZhbGlnbiIsIlRIOjp3aWR0aCIsIlRIRUFEOjphbGlnbiIsIlRIRUFEOjpjaGFyIiwi
-VEhFQUQ6OmNoYXJvZmYiLCJUSEVBRDo6dmFsaWduIiwiVFI6OmFsaWduIiwiVFI6OmJnY29sb3IiLCJU
-Ujo6Y2hhciIsIlRSOjpjaGFyb2ZmIiwiVFI6OnZhbGlnbiIsIlRSQUNLOjpkZWZhdWx0IiwiVFJBQ0s6
-OmtpbmQiLCJUUkFDSzo6bGFiZWwiLCJUUkFDSzo6c3JjbGFuZyIsIlVMOjpjb21wYWN0IiwiVUw6OnR5
-cGUiLCJWSURFTzo6Y29udHJvbHMiLCJWSURFTzo6aGVpZ2h0IiwiVklERU86Omxvb3AiLCJWSURFTzo6
-bWVkaWFncm91cCIsIlZJREVPOjptdXRlZCIsIlZJREVPOjpwcmVsb2FkIiwiVklERU86OndpZHRoIl0p
-LHQucykKQy5WQz1ILlFJKHMoWzAsMCw2NTQ5MCw0NTA1NSw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0p
-LHQudCkKQy5tSz1ILlFJKHMoWzAsMCwyNjYyNCwxMDIzLDY1NTM0LDIwNDcsNjU1MzQsMjA0N10pLHQu
-dCkKQy5TcT1ILlFJKHMoWyJIRUFEIiwiQVJFQSIsIkJBU0UiLCJCQVNFRk9OVCIsIkJSIiwiQ09MIiwi
-Q09MR1JPVVAiLCJFTUJFRCIsIkZSQU1FIiwiRlJBTUVTRVQiLCJIUiIsIklNQUdFIiwiSU1HIiwiSU5Q
-VVQiLCJJU0lOREVYIiwiTElOSyIsIk1FVEEiLCJQQVJBTSIsIlNPVVJDRSIsIlNUWUxFIiwiVElUTEUi
-LCJXQlIiXSksdC5zKQpDLmRuPUguUUkocyhbXSksSC5OMCgiamQ8TEw+IikpCkMueEQ9SC5RSShzKFtd
-KSx0LnMpCkMuaFU9SC5RSShzKFtdKSx0LmIpCkMudG89SC5RSShzKFswLDAsMzI3MjIsMTIyODcsNjU1
-MzQsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMucms9SC5RSShzKFtDLkFkLEMubmUsQy5teSxDLnJ4
-LEMud1YsQy5mUl0pLEguTjAoImpkPEg3PiIpKQpDLkYzPUguUUkocyhbMCwwLDI0NTc2LDEwMjMsNjU1
-MzQsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMuZWE9SC5RSShzKFswLDAsMzI3NTQsMTEyNjMsNjU1
-MzQsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMuWko9SC5RSShzKFswLDAsMzI3MjIsMTIyODcsNjU1
-MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMuV2Q9SC5RSShzKFswLDAsNjU0OTAsMTIyODcsNjU1
-MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkMuUXg9SC5RSShzKFsiYmluZCIsImlmIiwicmVmIiwi
-cmVwZWF0Iiwic3ludGF4Il0pLHQucykKQy5CST1ILlFJKHMoWyJBOjpocmVmIiwiQVJFQTo6aHJlZiIs
-IkJMT0NLUVVPVEU6OmNpdGUiLCJCT0RZOjpiYWNrZ3JvdW5kIiwiQ09NTUFORDo6aWNvbiIsIkRFTDo6
-Y2l0ZSIsIkZPUk06OmFjdGlvbiIsIklNRzo6c3JjIiwiSU5QVVQ6OnNyYyIsIklOUzo6Y2l0ZSIsIlE6
-OmNpdGUiLCJWSURFTzo6cG9zdGVyIl0pLHQucykKQy5EeD1uZXcgSC5MUCgwLHt9LEMueEQsSC5OMCgi
-TFA8cVUsek08ajg+PiIpKQpDLkNNPW5ldyBILkxQKDAse30sQy54RCxILk4wKCJMUDxxVSxxVT4iKSkK
-Qy5pSD1ILlFJKHMoW10pLEguTjAoImpkPEdEPiIpKQpDLldPPW5ldyBILkxQKDAse30sQy5pSCxILk4w
-KCJMUDxHRCxAPiIpKQpDLlkyPW5ldyBMLk85KCJOYXZpZ2F0aW9uVHJlZU5vZGVUeXBlLmRpcmVjdG9y
-eSIpCkMucmY9bmV3IEwuTzkoIk5hdmlnYXRpb25UcmVlTm9kZVR5cGUuZmlsZSIpCkMuVGU9bmV3IEgu
-d3YoImNhbGwiKQpDLm9FPW5ldyBQLkdZKCExKQpDLndRPW5ldyBQLkZ5KG51bGwsMil9KSgpOyhmdW5j
-dGlvbiBzdGF0aWNGaWVsZHMoKXskLnptPW51bGwKJC55aj0wCiQuaTA9bnVsbAokLkFsPW51bGwKJC5O
-Rj1udWxsCiQuVFg9bnVsbAokLng3PW51bGwKJC5udz1udWxsCiQudnY9bnVsbAokLkJ2PW51bGwKJC5T
-Nj1udWxsCiQuazg9bnVsbAokLm1nPW51bGwKJC5VRD0hMQokLlgzPUMuTlUKJC54Zz1ILlFJKFtdLEgu
-TjAoImpkPE1oPiIpKQokLnhvPW51bGwKJC5CTz1udWxsCiQubHQ9bnVsbAokLkVVPW51bGwKJC5vcj1Q
-LkZsKHQuTix0LlkpCiQuSVI9bnVsbAokLkk2PW51bGwKJC5GZj1udWxsfSkoKTsoZnVuY3Rpb24gbGF6
-eUluaXRpYWxpemVycygpe3ZhciBzPWh1bmtIZWxwZXJzLmxhenlGaW5hbCxyPWh1bmtIZWxwZXJzLmxh
-enkKcygkLCJmYSIsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFydF9kYXJ0Q2xvc3VyZSIp
-fSkKcygkLCJLcSIsIlNuIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoewp0b1N0cmluZzpmdW5j
-dGlvbigpe3JldHVybiIkcmVjZWl2ZXIkIn19KSl9KQpzKCQsInhxIiwibHEiLGZ1bmN0aW9uKCl7cmV0
-dXJuIEguY00oSC5TNyh7JG1ldGhvZCQ6bnVsbCwKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iJHJl
-Y2VpdmVyJCJ9fSkpfSkKcygkLCJSMSIsIk45IixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcobnVs
-bCkpfSkKcygkLCJmTiIsImlJIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dmFyICRh
-cmd1bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXtudWxsLiRtZXRob2QkKCRhcmd1bWVudHNFeHBy
-JCl9Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2FnZX19KCkpfSkKcygkLCJxaSIsIlVOIixmdW5jdGlvbigp
-e3JldHVybiBILmNNKEguUzcodm9pZCAwKSl9KQpzKCQsInB2IiwiWmgiLGZ1bmN0aW9uKCl7cmV0dXJu
-IEguY00oZnVuY3Rpb24oKXt2YXIgJGFyZ3VtZW50c0V4cHIkPSIkYXJndW1lbnRzJCIKdHJ5eyh2b2lk
-IDApLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2FnZX19KCkp
-fSkKcygkLCJrcSIsInJOIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguTWoobnVsbCkpfSkKcygkLCJ0
-dCIsImMzIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5e251bGwuJG1ldGhvZCR9
-Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2FnZX19KCkpfSkKcygkLCJkdCIsIkhLIixmdW5jdGlvbigpe3Jl
-dHVybiBILmNNKEguTWoodm9pZCAwKSl9KQpzKCQsIkE3IiwicjEiLGZ1bmN0aW9uKCl7cmV0dXJuIEgu
-Y00oZnVuY3Rpb24oKXt0cnl7KHZvaWQgMCkuJG1ldGhvZCR9Y2F0Y2gocSl7cmV0dXJuIHEubWVzc2Fn
-ZX19KCkpfSkKcygkLCJXYyIsInV0IixmdW5jdGlvbigpe3JldHVybiBQLk9qKCl9KQpzKCQsImtoIiwi
-cmYiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQLnhyKCkuJDAoKX0pCnMoJCwiZEgiLCJIRyIsZnVuY3Rp
-b24oKXtyZXR1cm4gbmV3IFAuTnooKS4kMCgpfSkKcygkLCJoaiIsIlY3IixmdW5jdGlvbigpe3JldHVy
-biBuZXcgSW50OEFycmF5KEguWEYoSC5RSShbLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIs
-LTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIs
-LTIsLTIsLTIsLTIsLTIsLTIsLTEsLTIsLTIsLTIsLTIsLTIsNjIsLTIsNjIsLTIsNjMsNTIsNTMsNTQs
-NTUsNTYsNTcsNTgsNTksNjAsNjEsLTIsLTIsLTIsLTEsLTIsLTIsLTIsMCwxLDIsMyw0LDUsNiw3LDgs
-OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwtMiwtMiwtMiwt
-Miw2MywtMiwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0
-Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSwtMiwtMiwtMiwtMiwtMl0sdC50KSkpfSkKcygkLCJZZSIs
-IndRIixmdW5jdGlvbigpe3JldHVybiB0eXBlb2YgcHJvY2VzcyE9InVuZGVmaW5lZCImJk9iamVjdC5w
-cm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKT09IltvYmplY3QgcHJvY2Vzc10iJiZwcm9jZXNz
-LnBsYXRmb3JtPT0id2luMzIifSkKcygkLCJtZiIsIno0IixmdW5jdGlvbigpe3JldHVybiBQLm51KCJe
-W1xcLVxcLjAtOUEtWl9hLXp+XSokIil9KQpzKCQsIk9RIiwidloiLGZ1bmN0aW9uKCl7cmV0dXJuIFAu
-S04oKX0pCnMoJCwiU0MiLCJBTiIsZnVuY3Rpb24oKXtyZXR1cm4gUC50TShbIkEiLCJBQkJSIiwiQUNS
-T05ZTSIsIkFERFJFU1MiLCJBUkVBIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCIiwiQkRJIiwi
-QkRPIiwiQklHIiwiQkxPQ0tRVU9URSIsIkJSIiwiQlVUVE9OIiwiQ0FOVkFTIiwiQ0FQVElPTiIsIkNF
-TlRFUiIsIkNJVEUiLCJDT0RFIiwiQ09MIiwiQ09MR1JPVVAiLCJDT01NQU5EIiwiREFUQSIsIkRBVEFM
-SVNUIiwiREQiLCJERUwiLCJERVRBSUxTIiwiREZOIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkVNIiwi
-RklFTERTRVQiLCJGSUdDQVBUSU9OIiwiRklHVVJFIiwiRk9OVCIsIkZPT1RFUiIsIkZPUk0iLCJIMSIs
-IkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJIRUFERVIiLCJIR1JPVVAiLCJIUiIsIkkiLCJJRlJBTUUi
-LCJJTUciLCJJTlBVVCIsIklOUyIsIktCRCIsIkxBQkVMIiwiTEVHRU5EIiwiTEkiLCJNQVAiLCJNQVJL
-IiwiTUVOVSIsIk1FVEVSIiwiTkFWIiwiTk9CUiIsIk9MIiwiT1BUR1JPVVAiLCJPUFRJT04iLCJPVVRQ
-VVQiLCJQIiwiUFJFIiwiUFJPR1JFU1MiLCJRIiwiUyIsIlNBTVAiLCJTRUNUSU9OIiwiU0VMRUNUIiwi
-U01BTEwiLCJTT1VSQ0UiLCJTUEFOIiwiU1RSSUtFIiwiU1RST05HIiwiU1VCIiwiU1VNTUFSWSIsIlNV
-UCIsIlRBQkxFIiwiVEJPRFkiLCJURCIsIlRFWFRBUkVBIiwiVEZPT1QiLCJUSCIsIlRIRUFEIiwiVElN
-RSIsIlRSIiwiVFJBQ0siLCJUVCIsIlUiLCJVTCIsIlZBUiIsIlZJREVPIiwiV0JSIl0sdC5OKX0pCnMo
-JCwiWDQiLCJoRyIsZnVuY3Rpb24oKXtyZXR1cm4gUC5udSgiXlxcUyskIil9KQpzKCQsIndPIiwib3ci
-LGZ1bmN0aW9uKCl7cmV0dXJuIFAuTkQoc2VsZil9KQpzKCQsImt0IiwiUjgiLGZ1bmN0aW9uKCl7cmV0
-dXJuIEguWWcoIl8kZGFydF9kYXJ0T2JqZWN0Iil9KQpzKCQsImZLIiwia0kiLGZ1bmN0aW9uKCl7cmV0
-dXJuIGZ1bmN0aW9uIERhcnRPYmplY3QoYSl7dGhpcy5vPWF9fSkKcygkLCJxdCIsInpCIixmdW5jdGlv
-bigpe3JldHVybiBuZXcgVC5tUSgpfSkKcygkLCJPbCIsIlVFIixmdW5jdGlvbigpe3JldHVybiBQLmhL
-KEMub2wuZ21XKFcueDMoKSkuaHJlZikuZ2hZKCkucSgwLCJhdXRoVG9rZW4iKX0pCnMoJCwiaFQiLCJ5
-UCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0LWxpc3QgLnBhbmVs
-LWNvbnRlbnQiKX0pCnMoJCwiVzYiLCJoTCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2Vs
-ZWN0b3IoIi5lZGl0LXBhbmVsIC5wYW5lbC1jb250ZW50Iil9KQpzKCQsIlRSIiwiRFciLGZ1bmN0aW9u
-KCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCJmb290ZXIiKX0pCnMoJCwiRVkiLCJmaSIsZnVu
-Y3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2VsZWN0b3IoImhlYWRlciIpfSkKcygkLCJiQSIsImMw
-IixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3RvcigiI21pZ3JhdGUtdW5pdC1zdGF0
-dXMtaWNvbiIpfSkKcygkLCJ0MCIsImJOIixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxl
-Y3RvcigiI21pZ3JhdGUtdW5pdC1zdGF0dXMtaWNvbi1sYWJlbCIpfSkKcygkLCJhdiIsIkQ5IixmdW5j
-dGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3RvcigiI3VuaXQtbmFtZSIpfSkKcigkLCJmZSIs
-IktHIixmdW5jdGlvbigpe3JldHVybiBuZXcgTC5YQSgpfSkKcygkLCJlbyIsIm5VIixmdW5jdGlvbigp
-e3JldHVybiBuZXcgTS5sSShILk4wKCJmdiIpLmEoJC5IaygpKSl9KQpzKCQsInlyIiwiYkQiLGZ1bmN0
-aW9uKCl7cmV0dXJuIG5ldyBFLk9GKFAubnUoIi8iKSxQLm51KCJbXi9dJCIpLFAubnUoIl4vIikpfSkK
-cygkLCJNayIsIktrIixmdW5jdGlvbigpe3JldHVybiBuZXcgTC5JVihQLm51KCJbL1xcXFxdIiksUC5u
-dSgiW14vXFxcXF0kIiksUC5udSgiXihcXFxcXFxcXFteXFxcXF0rXFxcXFteXFxcXC9dK3xbYS16QS1a
-XTpbL1xcXFxdKSIpLFAubnUoIl5bL1xcXFxdKD8hWy9cXFxcXSkiKSl9KQpzKCQsImFrIiwiRWIiLGZ1
-bmN0aW9uKCl7cmV0dXJuIG5ldyBGLnJ1KFAubnUoIi8iKSxQLm51KCIoXlthLXpBLVpdWy0rLmEtekEt
-WlxcZF0qOi8vfFteL10pJCIpLFAubnUoIlthLXpBLVpdWy0rLmEtekEtWlxcZF0qOi8vW14vXSoiKSxQ
-Lm51KCJeLyIpKX0pCnMoJCwibHMiLCJIayIsZnVuY3Rpb24oKXtyZXR1cm4gTy5SaCgpfSl9KSgpOyhm
-dW5jdGlvbiBuYXRpdmVTdXBwb3J0KCl7IWZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oYSl7dmFyIG09
-e30KbVthXT0xCnJldHVybiBPYmplY3Qua2V5cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0
-KG0pKVswXX0Kdi5nZXRJc29sYXRlVGFnPWZ1bmN0aW9uKGEpe3JldHVybiBzKCJfX19kYXJ0XyIrYSt2
-Lmlzb2xhdGVUYWcpfQp2YXIgcj0iX19fZGFydF9pc29sYXRlX3RhZ3NfIgp2YXIgcT1PYmplY3Rbcl18
-fChPYmplY3Rbcl09T2JqZWN0LmNyZWF0ZShudWxsKSkKdmFyIHA9Il9aeFl4WCIKZm9yKHZhciBvPTA7
-O28rKyl7dmFyIG49cyhwKyJfIitvKyJfIikKaWYoIShuIGluIHEpKXtxW25dPTEKdi5pc29sYXRlVGFn
-PW4KYnJlYWt9fXYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWU9di5nZXRJc29sYXRlVGFnKCJkaXNwYXRjaF9y
-ZWNvcmQiKX0oKQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKHtET01FcnJv
-cjpKLkd2LE1lZGlhRXJyb3I6Si5HdixOYXZpZ2F0b3I6Si5HdixOYXZpZ2F0b3JDb25jdXJyZW50SGFy
-ZHdhcmU6Si5HdixOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjpKLkd2LE92ZXJjb25zdHJhaW5lZEVycm9y
-OkouR3YsUG9zaXRpb25FcnJvcjpKLkd2LEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcjpKLkd2LFJhbmdl
-OkouR3YsU1FMRXJyb3I6Si5HdixEYXRhVmlldzpILkVULEFycmF5QnVmZmVyVmlldzpILkVULEZsb2F0
-MzJBcnJheTpILkRnLEZsb2F0NjRBcnJheTpILkRnLEludDE2QXJyYXk6SC54aixJbnQzMkFycmF5Okgu
-ZEUsSW50OEFycmF5OkguWkEsVWludDE2QXJyYXk6SC5kVCxVaW50MzJBcnJheTpILlBxLFVpbnQ4Q2xh
-bXBlZEFycmF5OkguZUUsQ2FudmFzUGl4ZWxBcnJheTpILmVFLFVpbnQ4QXJyYXk6SC5WNixIVE1MQXVk
-aW9FbGVtZW50OlcucUUsSFRNTEJSRWxlbWVudDpXLnFFLEhUTUxCdXR0b25FbGVtZW50OlcucUUsSFRN
-TENhbnZhc0VsZW1lbnQ6Vy5xRSxIVE1MQ29udGVudEVsZW1lbnQ6Vy5xRSxIVE1MRExpc3RFbGVtZW50
-OlcucUUsSFRNTERhdGFFbGVtZW50OlcucUUsSFRNTERhdGFMaXN0RWxlbWVudDpXLnFFLEhUTUxEZXRh
-aWxzRWxlbWVudDpXLnFFLEhUTUxEaWFsb2dFbGVtZW50OlcucUUsSFRNTERpdkVsZW1lbnQ6Vy5xRSxI
-VE1MRW1iZWRFbGVtZW50OlcucUUsSFRNTEZpZWxkU2V0RWxlbWVudDpXLnFFLEhUTUxIUkVsZW1lbnQ6
-Vy5xRSxIVE1MSGVhZEVsZW1lbnQ6Vy5xRSxIVE1MSGVhZGluZ0VsZW1lbnQ6Vy5xRSxIVE1MSHRtbEVs
-ZW1lbnQ6Vy5xRSxIVE1MSUZyYW1lRWxlbWVudDpXLnFFLEhUTUxJbWFnZUVsZW1lbnQ6Vy5xRSxIVE1M
-SW5wdXRFbGVtZW50OlcucUUsSFRNTExJRWxlbWVudDpXLnFFLEhUTUxMYWJlbEVsZW1lbnQ6Vy5xRSxI
-VE1MTGVnZW5kRWxlbWVudDpXLnFFLEhUTUxMaW5rRWxlbWVudDpXLnFFLEhUTUxNYXBFbGVtZW50Olcu
-cUUsSFRNTE1lZGlhRWxlbWVudDpXLnFFLEhUTUxNZW51RWxlbWVudDpXLnFFLEhUTUxNZXRhRWxlbWVu
-dDpXLnFFLEhUTUxNZXRlckVsZW1lbnQ6Vy5xRSxIVE1MTW9kRWxlbWVudDpXLnFFLEhUTUxPTGlzdEVs
-ZW1lbnQ6Vy5xRSxIVE1MT2JqZWN0RWxlbWVudDpXLnFFLEhUTUxPcHRHcm91cEVsZW1lbnQ6Vy5xRSxI
-VE1MT3B0aW9uRWxlbWVudDpXLnFFLEhUTUxPdXRwdXRFbGVtZW50OlcucUUsSFRNTFBhcmFtRWxlbWVu
-dDpXLnFFLEhUTUxQaWN0dXJlRWxlbWVudDpXLnFFLEhUTUxQcmVFbGVtZW50OlcucUUsSFRNTFByb2dy
-ZXNzRWxlbWVudDpXLnFFLEhUTUxRdW90ZUVsZW1lbnQ6Vy5xRSxIVE1MU2NyaXB0RWxlbWVudDpXLnFF
-LEhUTUxTaGFkb3dFbGVtZW50OlcucUUsSFRNTFNsb3RFbGVtZW50OlcucUUsSFRNTFNvdXJjZUVsZW1l
-bnQ6Vy5xRSxIVE1MU3BhbkVsZW1lbnQ6Vy5xRSxIVE1MU3R5bGVFbGVtZW50OlcucUUsSFRNTFRhYmxl
-Q2FwdGlvbkVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVDZWxsRWxlbWVudDpXLnFFLEhUTUxUYWJsZURhdGFD
-ZWxsRWxlbWVudDpXLnFFLEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50OlcucUUsSFRNTFRhYmxlQ29s
-RWxlbWVudDpXLnFFLEhUTUxUZXh0QXJlYUVsZW1lbnQ6Vy5xRSxIVE1MVGltZUVsZW1lbnQ6Vy5xRSxI
-VE1MVGl0bGVFbGVtZW50OlcucUUsSFRNTFRyYWNrRWxlbWVudDpXLnFFLEhUTUxVTGlzdEVsZW1lbnQ6
-Vy5xRSxIVE1MVW5rbm93bkVsZW1lbnQ6Vy5xRSxIVE1MVmlkZW9FbGVtZW50OlcucUUsSFRNTERpcmVj
-dG9yeUVsZW1lbnQ6Vy5xRSxIVE1MRm9udEVsZW1lbnQ6Vy5xRSxIVE1MRnJhbWVFbGVtZW50OlcucUUs
-SFRNTEZyYW1lU2V0RWxlbWVudDpXLnFFLEhUTUxNYXJxdWVlRWxlbWVudDpXLnFFLEhUTUxFbGVtZW50
-OlcucUUsSFRNTEFuY2hvckVsZW1lbnQ6Vy5HaCxIVE1MQXJlYUVsZW1lbnQ6Vy5mWSxIVE1MQmFzZUVs
-ZW1lbnQ6Vy5yWixCbG9iOlcuQXosSFRNTEJvZHlFbGVtZW50OlcuUVAsQ0RBVEFTZWN0aW9uOlcubngs
-Q2hhcmFjdGVyRGF0YTpXLm54LENvbW1lbnQ6Vy5ueCxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Vy5ueCxU
-ZXh0OlcubngsQ1NTU3R5bGVEZWNsYXJhdGlvbjpXLm9KLE1TU3R5bGVDU1NQcm9wZXJ0aWVzOlcub0os
-Q1NTMlByb3BlcnRpZXM6Vy5vSixYTUxEb2N1bWVudDpXLlFGLERvY3VtZW50OlcuUUYsRE9NRXhjZXB0
-aW9uOlcuTmgsRE9NSW1wbGVtZW50YXRpb246Vy5hZSxET01SZWN0UmVhZE9ubHk6Vy5JQixET01Ub2tl
-bkxpc3Q6Vy5uNyxFbGVtZW50OlcuY3YsQWJvcnRQYXltZW50RXZlbnQ6Vy5lYSxBbmltYXRpb25FdmVu
-dDpXLmVhLEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6Vy5lYSxBcHBsaWNhdGlvbkNhY2hlRXJyb3JFdmVu
-dDpXLmVhLEJhY2tncm91bmRGZXRjaENsaWNrRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDpX
-LmVhLEJhY2tncm91bmRGZXRjaEZhaWxFdmVudDpXLmVhLEJhY2tncm91bmRGZXRjaGVkRXZlbnQ6Vy5l
-YSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZlbnQ6Vy5lYSxCZWZvcmVVbmxvYWRFdmVudDpXLmVhLEJsb2JF
-dmVudDpXLmVhLENhbk1ha2VQYXltZW50RXZlbnQ6Vy5lYSxDbGlwYm9hcmRFdmVudDpXLmVhLENsb3Nl
-RXZlbnQ6Vy5lYSxDdXN0b21FdmVudDpXLmVhLERldmljZU1vdGlvbkV2ZW50OlcuZWEsRGV2aWNlT3Jp
-ZW50YXRpb25FdmVudDpXLmVhLEVycm9yRXZlbnQ6Vy5lYSxFeHRlbmRhYmxlRXZlbnQ6Vy5lYSxFeHRl
-bmRhYmxlTWVzc2FnZUV2ZW50OlcuZWEsRmV0Y2hFdmVudDpXLmVhLEZvbnRGYWNlU2V0TG9hZEV2ZW50
-OlcuZWEsRm9yZWlnbkZldGNoRXZlbnQ6Vy5lYSxHYW1lcGFkRXZlbnQ6Vy5lYSxIYXNoQ2hhbmdlRXZl
-bnQ6Vy5lYSxJbnN0YWxsRXZlbnQ6Vy5lYSxNZWRpYUVuY3J5cHRlZEV2ZW50OlcuZWEsTWVkaWFLZXlN
-ZXNzYWdlRXZlbnQ6Vy5lYSxNZWRpYVF1ZXJ5TGlzdEV2ZW50OlcuZWEsTWVkaWFTdHJlYW1FdmVudDpX
-LmVhLE1lZGlhU3RyZWFtVHJhY2tFdmVudDpXLmVhLE1lc3NhZ2VFdmVudDpXLmVhLE1JRElDb25uZWN0
-aW9uRXZlbnQ6Vy5lYSxNSURJTWVzc2FnZUV2ZW50OlcuZWEsTXV0YXRpb25FdmVudDpXLmVhLE5vdGlm
-aWNhdGlvbkV2ZW50OlcuZWEsUGFnZVRyYW5zaXRpb25FdmVudDpXLmVhLFBheW1lbnRSZXF1ZXN0RXZl
-bnQ6Vy5lYSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OlcuZWEsUG9wU3RhdGVFdmVudDpXLmVhLFBy
-ZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFpbGFibGVFdmVudDpXLmVhLFByZXNlbnRhdGlvbkNvbm5lY3Rp
-b25DbG9zZUV2ZW50OlcuZWEsUHJvbWlzZVJlamVjdGlvbkV2ZW50OlcuZWEsUHVzaEV2ZW50OlcuZWEs
-UlRDRGF0YUNoYW5uZWxFdmVudDpXLmVhLFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6Vy5lYSxSVENQZWVy
-Q29ubmVjdGlvbkljZUV2ZW50OlcuZWEsUlRDVHJhY2tFdmVudDpXLmVhLFNlY3VyaXR5UG9saWN5Vmlv
-bGF0aW9uRXZlbnQ6Vy5lYSxTZW5zb3JFcnJvckV2ZW50OlcuZWEsU3BlZWNoUmVjb2duaXRpb25FcnJv
-cjpXLmVhLFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6Vy5lYSxTcGVlY2hTeW50aGVzaXNFdmVudDpXLmVh
-LFN0b3JhZ2VFdmVudDpXLmVhLFN5bmNFdmVudDpXLmVhLFRyYWNrRXZlbnQ6Vy5lYSxUcmFuc2l0aW9u
-RXZlbnQ6Vy5lYSxXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6Vy5lYSxWUkRldmljZUV2ZW50OlcuZWEsVlJE
-aXNwbGF5RXZlbnQ6Vy5lYSxWUlNlc3Npb25FdmVudDpXLmVhLE1vam9JbnRlcmZhY2VSZXF1ZXN0RXZl
-bnQ6Vy5lYSxVU0JDb25uZWN0aW9uRXZlbnQ6Vy5lYSxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6Vy5lYSxB
-dWRpb1Byb2Nlc3NpbmdFdmVudDpXLmVhLE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDpXLmVhLFdl
-YkdMQ29udGV4dEV2ZW50OlcuZWEsRXZlbnQ6Vy5lYSxJbnB1dEV2ZW50OlcuZWEsU3VibWl0RXZlbnQ6
-Vy5lYSxFdmVudFRhcmdldDpXLkQwLEZpbGU6Vy5oSCxIVE1MRm9ybUVsZW1lbnQ6Vy5oNCxIaXN0b3J5
-OlcuYnIsSFRNTERvY3VtZW50OlcuVmIsWE1MSHR0cFJlcXVlc3Q6Vy5mSixYTUxIdHRwUmVxdWVzdEV2
-ZW50VGFyZ2V0Olcud2EsSW1hZ2VEYXRhOlcuU2csTG9jYXRpb246Vy51OCxNb3VzZUV2ZW50OlcuQWos
-RHJhZ0V2ZW50OlcuQWosUG9pbnRlckV2ZW50OlcuQWosV2hlZWxFdmVudDpXLkFqLERvY3VtZW50RnJh
-Z21lbnQ6Vy5LVixTaGFkb3dSb290OlcuS1YsRG9jdW1lbnRUeXBlOlcuS1YsTm9kZTpXLktWLE5vZGVM
-aXN0OlcuQkgsUmFkaW9Ob2RlTGlzdDpXLkJILEhUTUxQYXJhZ3JhcGhFbGVtZW50OlcuU04sUHJvZ3Jl
-c3NFdmVudDpXLmV3LFJlc291cmNlUHJvZ3Jlc3NFdmVudDpXLmV3LEhUTUxTZWxlY3RFbGVtZW50Olcu
-bHAsSFRNTFRhYmxlRWxlbWVudDpXLlRiLEhUTUxUYWJsZVJvd0VsZW1lbnQ6Vy5JdixIVE1MVGFibGVT
-ZWN0aW9uRWxlbWVudDpXLldQLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6Vy55WSxDb21wb3NpdGlvbkV2ZW50
-OlcudzYsRm9jdXNFdmVudDpXLnc2LEtleWJvYXJkRXZlbnQ6Vy53NixUZXh0RXZlbnQ6Vy53NixUb3Vj
-aEV2ZW50OlcudzYsVUlFdmVudDpXLnc2LFdpbmRvdzpXLks1LERPTVdpbmRvdzpXLks1LERlZGljYXRl
-ZFdvcmtlckdsb2JhbFNjb3BlOlcuQ20sU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOlcuQ20sU2hhcmVk
-V29ya2VyR2xvYmFsU2NvcGU6Vy5DbSxXb3JrZXJHbG9iYWxTY29wZTpXLkNtLEF0dHI6Vy5DUSxDbGll
-bnRSZWN0OlcudzQsRE9NUmVjdDpXLnc0LE5hbWVkTm9kZU1hcDpXLnJoLE1vek5hbWVkQXR0ck1hcDpX
-LnJoLElEQktleVJhbmdlOlAuaEYsU1ZHU2NyaXB0RWxlbWVudDpQLm5kLFNWR0FFbGVtZW50OlAuaGks
-U1ZHQW5pbWF0ZUVsZW1lbnQ6UC5oaSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDpQLmhpLFNWR0FuaW1h
-dGVUcmFuc2Zvcm1FbGVtZW50OlAuaGksU1ZHQW5pbWF0aW9uRWxlbWVudDpQLmhpLFNWR0NpcmNsZUVs
-ZW1lbnQ6UC5oaSxTVkdDbGlwUGF0aEVsZW1lbnQ6UC5oaSxTVkdEZWZzRWxlbWVudDpQLmhpLFNWR0Rl
-c2NFbGVtZW50OlAuaGksU1ZHRGlzY2FyZEVsZW1lbnQ6UC5oaSxTVkdFbGxpcHNlRWxlbWVudDpQLmhp
-LFNWR0ZFQmxlbmRFbGVtZW50OlAuaGksU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6UC5oaSxTVkdGRUNv
-bXBvbmVudFRyYW5zZmVyRWxlbWVudDpQLmhpLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDpQLmhpLFNWR0ZF
-Q29udm9sdmVNYXRyaXhFbGVtZW50OlAuaGksU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OlAuaGks
-U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OlAuaGksU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OlAu
-aGksU1ZHRkVGbG9vZEVsZW1lbnQ6UC5oaSxTVkdGRUZ1bmNBRWxlbWVudDpQLmhpLFNWR0ZFRnVuY0JF
-bGVtZW50OlAuaGksU1ZHRkVGdW5jR0VsZW1lbnQ6UC5oaSxTVkdGRUZ1bmNSRWxlbWVudDpQLmhpLFNW
-R0ZFR2F1c3NpYW5CbHVyRWxlbWVudDpQLmhpLFNWR0ZFSW1hZ2VFbGVtZW50OlAuaGksU1ZHRkVNZXJn
-ZUVsZW1lbnQ6UC5oaSxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6UC5oaSxTVkdGRU1vcnBob2xvZ3lFbGVt
-ZW50OlAuaGksU1ZHRkVPZmZzZXRFbGVtZW50OlAuaGksU1ZHRkVQb2ludExpZ2h0RWxlbWVudDpQLmhp
-LFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6UC5oaSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6UC5o
-aSxTVkdGRVRpbGVFbGVtZW50OlAuaGksU1ZHRkVUdXJidWxlbmNlRWxlbWVudDpQLmhpLFNWR0ZpbHRl
-ckVsZW1lbnQ6UC5oaSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDpQLmhpLFNWR0dFbGVtZW50OlAuaGks
-U1ZHR2VvbWV0cnlFbGVtZW50OlAuaGksU1ZHR3JhcGhpY3NFbGVtZW50OlAuaGksU1ZHSW1hZ2VFbGVt
-ZW50OlAuaGksU1ZHTGluZUVsZW1lbnQ6UC5oaSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6UC5oaSxT
-VkdNYXJrZXJFbGVtZW50OlAuaGksU1ZHTWFza0VsZW1lbnQ6UC5oaSxTVkdNZXRhZGF0YUVsZW1lbnQ6
-UC5oaSxTVkdQYXRoRWxlbWVudDpQLmhpLFNWR1BhdHRlcm5FbGVtZW50OlAuaGksU1ZHUG9seWdvbkVs
-ZW1lbnQ6UC5oaSxTVkdQb2x5bGluZUVsZW1lbnQ6UC5oaSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
-UC5oaSxTVkdSZWN0RWxlbWVudDpQLmhpLFNWR1NldEVsZW1lbnQ6UC5oaSxTVkdTdG9wRWxlbWVudDpQ
-LmhpLFNWR1N0eWxlRWxlbWVudDpQLmhpLFNWR1NWR0VsZW1lbnQ6UC5oaSxTVkdTd2l0Y2hFbGVtZW50
-OlAuaGksU1ZHU3ltYm9sRWxlbWVudDpQLmhpLFNWR1RTcGFuRWxlbWVudDpQLmhpLFNWR1RleHRDb250
-ZW50RWxlbWVudDpQLmhpLFNWR1RleHRFbGVtZW50OlAuaGksU1ZHVGV4dFBhdGhFbGVtZW50OlAuaGks
-U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDpQLmhpLFNWR1RpdGxlRWxlbWVudDpQLmhpLFNWR1VzZUVs
-ZW1lbnQ6UC5oaSxTVkdWaWV3RWxlbWVudDpQLmhpLFNWR0dyYWRpZW50RWxlbWVudDpQLmhpLFNWR0Nv
-bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OlAuaGksU1ZHRkVEcm9wU2hhZG93RWxlbWVudDpQ
-LmhpLFNWR01QYXRoRWxlbWVudDpQLmhpLFNWR0VsZW1lbnQ6UC5oaX0pCmh1bmtIZWxwZXJzLnNldE9y
-VXBkYXRlTGVhZlRhZ3Moe0RPTUVycm9yOnRydWUsTWVkaWFFcnJvcjp0cnVlLE5hdmlnYXRvcjp0cnVl
-LE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTp0cnVlLE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOnRy
-dWUsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6dHJ1ZSxQb3NpdGlvbkVycm9yOnRydWUsR2VvbG9jYXRpb25Q
-b3NpdGlvbkVycm9yOnRydWUsUmFuZ2U6dHJ1ZSxTUUxFcnJvcjp0cnVlLERhdGFWaWV3OnRydWUsQXJy
-YXlCdWZmZXJWaWV3OmZhbHNlLEZsb2F0MzJBcnJheTp0cnVlLEZsb2F0NjRBcnJheTp0cnVlLEludDE2
-QXJyYXk6dHJ1ZSxJbnQzMkFycmF5OnRydWUsSW50OEFycmF5OnRydWUsVWludDE2QXJyYXk6dHJ1ZSxV
-aW50MzJBcnJheTp0cnVlLFVpbnQ4Q2xhbXBlZEFycmF5OnRydWUsQ2FudmFzUGl4ZWxBcnJheTp0cnVl
-LFVpbnQ4QXJyYXk6ZmFsc2UsSFRNTEF1ZGlvRWxlbWVudDp0cnVlLEhUTUxCUkVsZW1lbnQ6dHJ1ZSxI
-VE1MQnV0dG9uRWxlbWVudDp0cnVlLEhUTUxDYW52YXNFbGVtZW50OnRydWUsSFRNTENvbnRlbnRFbGVt
-ZW50OnRydWUsSFRNTERMaXN0RWxlbWVudDp0cnVlLEhUTUxEYXRhRWxlbWVudDp0cnVlLEhUTUxEYXRh
-TGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MRGV0YWlsc0VsZW1lbnQ6dHJ1ZSxIVE1MRGlhbG9nRWxlbWVudDp0
-cnVlLEhUTUxEaXZFbGVtZW50OnRydWUsSFRNTEVtYmVkRWxlbWVudDp0cnVlLEhUTUxGaWVsZFNldEVs
-ZW1lbnQ6dHJ1ZSxIVE1MSFJFbGVtZW50OnRydWUsSFRNTEhlYWRFbGVtZW50OnRydWUsSFRNTEhlYWRp
-bmdFbGVtZW50OnRydWUsSFRNTEh0bWxFbGVtZW50OnRydWUsSFRNTElGcmFtZUVsZW1lbnQ6dHJ1ZSxI
-VE1MSW1hZ2VFbGVtZW50OnRydWUsSFRNTElucHV0RWxlbWVudDp0cnVlLEhUTUxMSUVsZW1lbnQ6dHJ1
-ZSxIVE1MTGFiZWxFbGVtZW50OnRydWUsSFRNTExlZ2VuZEVsZW1lbnQ6dHJ1ZSxIVE1MTGlua0VsZW1l
-bnQ6dHJ1ZSxIVE1MTWFwRWxlbWVudDp0cnVlLEhUTUxNZWRpYUVsZW1lbnQ6dHJ1ZSxIVE1MTWVudUVs
-ZW1lbnQ6dHJ1ZSxIVE1MTWV0YUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0ZXJFbGVtZW50OnRydWUsSFRNTE1v
-ZEVsZW1lbnQ6dHJ1ZSxIVE1MT0xpc3RFbGVtZW50OnRydWUsSFRNTE9iamVjdEVsZW1lbnQ6dHJ1ZSxI
-VE1MT3B0R3JvdXBFbGVtZW50OnRydWUsSFRNTE9wdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MT3V0cHV0RWxl
-bWVudDp0cnVlLEhUTUxQYXJhbUVsZW1lbnQ6dHJ1ZSxIVE1MUGljdHVyZUVsZW1lbnQ6dHJ1ZSxIVE1M
-UHJlRWxlbWVudDp0cnVlLEhUTUxQcm9ncmVzc0VsZW1lbnQ6dHJ1ZSxIVE1MUXVvdGVFbGVtZW50OnRy
-dWUsSFRNTFNjcmlwdEVsZW1lbnQ6dHJ1ZSxIVE1MU2hhZG93RWxlbWVudDp0cnVlLEhUTUxTbG90RWxl
-bWVudDp0cnVlLEhUTUxTb3VyY2VFbGVtZW50OnRydWUsSFRNTFNwYW5FbGVtZW50OnRydWUsSFRNTFN0
-eWxlRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OnRydWUsSFRNTFRhYmxlQ2VsbEVs
-ZW1lbnQ6dHJ1ZSxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVIZWFkZXJDZWxs
-RWxlbWVudDp0cnVlLEhUTUxUYWJsZUNvbEVsZW1lbnQ6dHJ1ZSxIVE1MVGV4dEFyZWFFbGVtZW50OnRy
-dWUsSFRNTFRpbWVFbGVtZW50OnRydWUsSFRNTFRpdGxlRWxlbWVudDp0cnVlLEhUTUxUcmFja0VsZW1l
-bnQ6dHJ1ZSxIVE1MVUxpc3RFbGVtZW50OnRydWUsSFRNTFVua25vd25FbGVtZW50OnRydWUsSFRNTFZp
-ZGVvRWxlbWVudDp0cnVlLEhUTUxEaXJlY3RvcnlFbGVtZW50OnRydWUsSFRNTEZvbnRFbGVtZW50OnRy
-dWUsSFRNTEZyYW1lRWxlbWVudDp0cnVlLEhUTUxGcmFtZVNldEVsZW1lbnQ6dHJ1ZSxIVE1MTWFycXVl
-ZUVsZW1lbnQ6dHJ1ZSxIVE1MRWxlbWVudDpmYWxzZSxIVE1MQW5jaG9yRWxlbWVudDp0cnVlLEhUTUxB
-cmVhRWxlbWVudDp0cnVlLEhUTUxCYXNlRWxlbWVudDp0cnVlLEJsb2I6ZmFsc2UsSFRNTEJvZHlFbGVt
-ZW50OnRydWUsQ0RBVEFTZWN0aW9uOnRydWUsQ2hhcmFjdGVyRGF0YTp0cnVlLENvbW1lbnQ6dHJ1ZSxQ
-cm9jZXNzaW5nSW5zdHJ1Y3Rpb246dHJ1ZSxUZXh0OnRydWUsQ1NTU3R5bGVEZWNsYXJhdGlvbjp0cnVl
-LE1TU3R5bGVDU1NQcm9wZXJ0aWVzOnRydWUsQ1NTMlByb3BlcnRpZXM6dHJ1ZSxYTUxEb2N1bWVudDp0
-cnVlLERvY3VtZW50OmZhbHNlLERPTUV4Y2VwdGlvbjp0cnVlLERPTUltcGxlbWVudGF0aW9uOnRydWUs
-RE9NUmVjdFJlYWRPbmx5OmZhbHNlLERPTVRva2VuTGlzdDp0cnVlLEVsZW1lbnQ6ZmFsc2UsQWJvcnRQ
-YXltZW50RXZlbnQ6dHJ1ZSxBbmltYXRpb25FdmVudDp0cnVlLEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6
-dHJ1ZSxBcHBsaWNhdGlvbkNhY2hlRXJyb3JFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaENsaWNrRXZl
-bnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaEZhaWxFdmVudDp0
-cnVlLEJhY2tncm91bmRGZXRjaGVkRXZlbnQ6dHJ1ZSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZlbnQ6dHJ1
-ZSxCZWZvcmVVbmxvYWRFdmVudDp0cnVlLEJsb2JFdmVudDp0cnVlLENhbk1ha2VQYXltZW50RXZlbnQ6
-dHJ1ZSxDbGlwYm9hcmRFdmVudDp0cnVlLENsb3NlRXZlbnQ6dHJ1ZSxDdXN0b21FdmVudDp0cnVlLERl
-dmljZU1vdGlvbkV2ZW50OnRydWUsRGV2aWNlT3JpZW50YXRpb25FdmVudDp0cnVlLEVycm9yRXZlbnQ6
-dHJ1ZSxFeHRlbmRhYmxlRXZlbnQ6dHJ1ZSxFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OnRydWUsRmV0Y2hF
-dmVudDp0cnVlLEZvbnRGYWNlU2V0TG9hZEV2ZW50OnRydWUsRm9yZWlnbkZldGNoRXZlbnQ6dHJ1ZSxH
-YW1lcGFkRXZlbnQ6dHJ1ZSxIYXNoQ2hhbmdlRXZlbnQ6dHJ1ZSxJbnN0YWxsRXZlbnQ6dHJ1ZSxNZWRp
-YUVuY3J5cHRlZEV2ZW50OnRydWUsTWVkaWFLZXlNZXNzYWdlRXZlbnQ6dHJ1ZSxNZWRpYVF1ZXJ5TGlz
-dEV2ZW50OnRydWUsTWVkaWFTdHJlYW1FdmVudDp0cnVlLE1lZGlhU3RyZWFtVHJhY2tFdmVudDp0cnVl
-LE1lc3NhZ2VFdmVudDp0cnVlLE1JRElDb25uZWN0aW9uRXZlbnQ6dHJ1ZSxNSURJTWVzc2FnZUV2ZW50
-OnRydWUsTXV0YXRpb25FdmVudDp0cnVlLE5vdGlmaWNhdGlvbkV2ZW50OnRydWUsUGFnZVRyYW5zaXRp
-b25FdmVudDp0cnVlLFBheW1lbnRSZXF1ZXN0RXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2
-ZW50OnRydWUsUG9wU3RhdGVFdmVudDp0cnVlLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFpbGFibGVF
-dmVudDp0cnVlLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25DbG9zZUV2ZW50OnRydWUsUHJvbWlzZVJlamVj
-dGlvbkV2ZW50OnRydWUsUHVzaEV2ZW50OnRydWUsUlRDRGF0YUNoYW5uZWxFdmVudDp0cnVlLFJUQ0RU
-TUZUb25lQ2hhbmdlRXZlbnQ6dHJ1ZSxSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50OnRydWUsUlRDVHJh
-Y2tFdmVudDp0cnVlLFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ6dHJ1ZSxTZW5zb3JFcnJvckV2
-ZW50OnRydWUsU3BlZWNoUmVjb2duaXRpb25FcnJvcjp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6
-dHJ1ZSxTcGVlY2hTeW50aGVzaXNFdmVudDp0cnVlLFN0b3JhZ2VFdmVudDp0cnVlLFN5bmNFdmVudDp0
-cnVlLFRyYWNrRXZlbnQ6dHJ1ZSxUcmFuc2l0aW9uRXZlbnQ6dHJ1ZSxXZWJLaXRUcmFuc2l0aW9uRXZl
-bnQ6dHJ1ZSxWUkRldmljZUV2ZW50OnRydWUsVlJEaXNwbGF5RXZlbnQ6dHJ1ZSxWUlNlc3Npb25FdmVu
-dDp0cnVlLE1vam9JbnRlcmZhY2VSZXF1ZXN0RXZlbnQ6dHJ1ZSxVU0JDb25uZWN0aW9uRXZlbnQ6dHJ1
-ZSxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6dHJ1ZSxBdWRpb1Byb2Nlc3NpbmdFdmVudDp0cnVlLE9mZmxp
-bmVBdWRpb0NvbXBsZXRpb25FdmVudDp0cnVlLFdlYkdMQ29udGV4dEV2ZW50OnRydWUsRXZlbnQ6ZmFs
-c2UsSW5wdXRFdmVudDpmYWxzZSxTdWJtaXRFdmVudDpmYWxzZSxFdmVudFRhcmdldDpmYWxzZSxGaWxl
-OnRydWUsSFRNTEZvcm1FbGVtZW50OnRydWUsSGlzdG9yeTp0cnVlLEhUTUxEb2N1bWVudDp0cnVlLFhN
-TEh0dHBSZXF1ZXN0OnRydWUsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpmYWxzZSxJbWFnZURhdGE6
-dHJ1ZSxMb2NhdGlvbjp0cnVlLE1vdXNlRXZlbnQ6dHJ1ZSxEcmFnRXZlbnQ6dHJ1ZSxQb2ludGVyRXZl
-bnQ6dHJ1ZSxXaGVlbEV2ZW50OnRydWUsRG9jdW1lbnRGcmFnbWVudDp0cnVlLFNoYWRvd1Jvb3Q6dHJ1
-ZSxEb2N1bWVudFR5cGU6dHJ1ZSxOb2RlOmZhbHNlLE5vZGVMaXN0OnRydWUsUmFkaW9Ob2RlTGlzdDp0
-cnVlLEhUTUxQYXJhZ3JhcGhFbGVtZW50OnRydWUsUHJvZ3Jlc3NFdmVudDp0cnVlLFJlc291cmNlUHJv
-Z3Jlc3NFdmVudDp0cnVlLEhUTUxTZWxlY3RFbGVtZW50OnRydWUsSFRNTFRhYmxlRWxlbWVudDp0cnVl
-LEhUTUxUYWJsZVJvd0VsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVTZWN0aW9uRWxlbWVudDp0cnVlLEhUTUxU
-ZW1wbGF0ZUVsZW1lbnQ6dHJ1ZSxDb21wb3NpdGlvbkV2ZW50OnRydWUsRm9jdXNFdmVudDp0cnVlLEtl
-eWJvYXJkRXZlbnQ6dHJ1ZSxUZXh0RXZlbnQ6dHJ1ZSxUb3VjaEV2ZW50OnRydWUsVUlFdmVudDpmYWxz
-ZSxXaW5kb3c6dHJ1ZSxET01XaW5kb3c6dHJ1ZSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTp0cnVl
-LFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTp0cnVlLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOnRydWUs
-V29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxBdHRyOnRydWUsQ2xpZW50UmVjdDp0cnVlLERPTVJlY3Q6dHJ1
-ZSxOYW1lZE5vZGVNYXA6dHJ1ZSxNb3pOYW1lZEF0dHJNYXA6dHJ1ZSxJREJLZXlSYW5nZTp0cnVlLFNW
-R1NjcmlwdEVsZW1lbnQ6dHJ1ZSxTVkdBRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVFbGVtZW50OnRydWUs
-U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDp0cnVl
-LFNWR0FuaW1hdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdDaXJjbGVFbGVtZW50OnRydWUsU1ZHQ2xpcFBhdGhF
-bGVtZW50OnRydWUsU1ZHRGVmc0VsZW1lbnQ6dHJ1ZSxTVkdEZXNjRWxlbWVudDp0cnVlLFNWR0Rpc2Nh
-cmRFbGVtZW50OnRydWUsU1ZHRWxsaXBzZUVsZW1lbnQ6dHJ1ZSxTVkdGRUJsZW5kRWxlbWVudDp0cnVl
-LFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OnRydWUsU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
-dHJ1ZSxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDp0
-cnVlLFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDp0cnVlLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
-bWVudDp0cnVlLFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZFRmxvb2RFbGVtZW50OnRy
-dWUsU1ZHRkVGdW5jQUVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNCRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0dF
-bGVtZW50OnRydWUsU1ZHRkVGdW5jUkVsZW1lbnQ6dHJ1ZSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
-dHJ1ZSxTVkdGRUltYWdlRWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VFbGVtZW50OnRydWUsU1ZHRkVNZXJn
-ZU5vZGVFbGVtZW50OnRydWUsU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDp0cnVlLFNWR0ZFT2Zmc2V0RWxl
-bWVudDp0cnVlLFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
-bGVtZW50OnRydWUsU1ZHRkVTcG90TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVUaWxlRWxlbWVudDp0cnVl
-LFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6dHJ1ZSxTVkdGaWx0ZXJFbGVtZW50OnRydWUsU1ZHRm9yZWln
-bk9iamVjdEVsZW1lbnQ6dHJ1ZSxTVkdHRWxlbWVudDp0cnVlLFNWR0dlb21ldHJ5RWxlbWVudDp0cnVl
-LFNWR0dyYXBoaWNzRWxlbWVudDp0cnVlLFNWR0ltYWdlRWxlbWVudDp0cnVlLFNWR0xpbmVFbGVtZW50
-OnRydWUsU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OnRydWUsU1ZHTWFya2VyRWxlbWVudDp0cnVlLFNW
-R01hc2tFbGVtZW50OnRydWUsU1ZHTWV0YWRhdGFFbGVtZW50OnRydWUsU1ZHUGF0aEVsZW1lbnQ6dHJ1
-ZSxTVkdQYXR0ZXJuRWxlbWVudDp0cnVlLFNWR1BvbHlnb25FbGVtZW50OnRydWUsU1ZHUG9seWxpbmVF
-bGVtZW50OnRydWUsU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OnRydWUsU1ZHUmVjdEVsZW1lbnQ6dHJ1
-ZSxTVkdTZXRFbGVtZW50OnRydWUsU1ZHU3RvcEVsZW1lbnQ6dHJ1ZSxTVkdTdHlsZUVsZW1lbnQ6dHJ1
-ZSxTVkdTVkdFbGVtZW50OnRydWUsU1ZHU3dpdGNoRWxlbWVudDp0cnVlLFNWR1N5bWJvbEVsZW1lbnQ6
-dHJ1ZSxTVkdUU3BhbkVsZW1lbnQ6dHJ1ZSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0
-RWxlbWVudDp0cnVlLFNWR1RleHRQYXRoRWxlbWVudDp0cnVlLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
-bnQ6dHJ1ZSxTVkdUaXRsZUVsZW1lbnQ6dHJ1ZSxTVkdVc2VFbGVtZW50OnRydWUsU1ZHVmlld0VsZW1l
-bnQ6dHJ1ZSxTVkdHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
-RWxlbWVudDp0cnVlLFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6dHJ1ZSxTVkdNUGF0aEVsZW1lbnQ6dHJ1
-ZSxTVkdFbGVtZW50OmZhbHNlfSkKSC5MWi4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJW
-aWV3IgpILlJHLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkguVlAuJG5hdGl2
-ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5EZy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0i
-QXJyYXlCdWZmZXJWaWV3IgpILldCLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXci
-CkguWkcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5QZy4kbmF0aXZlU3Vw
-ZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3In0pKCkKY29udmVydEFsbFRvRmFzdE9iamVjdCh3KQpj
-b252ZXJ0VG9GYXN0T2JqZWN0KCQpOyhmdW5jdGlvbihhKXtpZih0eXBlb2YgZG9jdW1lbnQ9PT0idW5k
-ZWZpbmVkIil7YShudWxsKQpyZXR1cm59aWYodHlwZW9mIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQhPSJ1
-bmRlZmluZWQiKXthKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpCnJldHVybn12YXIgcz1kb2N1bWVudC5z
-Y3JpcHRzCmZ1bmN0aW9uIG9uTG9hZChiKXtmb3IodmFyIHE9MDtxPHMubGVuZ3RoOysrcSlzW3FdLnJl
-bW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLG9uTG9hZCxmYWxzZSkKYShiLnRhcmdldCl9Zm9yKHZhciBy
-PTA7cjxzLmxlbmd0aDsrK3Ipc1tyXS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixvbkxvYWQsZmFsc2Up
-fSkoZnVuY3Rpb24oYSl7di5jdXJyZW50U2NyaXB0PWEKdmFyIHM9TC5JcQppZih0eXBlb2YgZGFydE1h
-aW5SdW5uZXI9PT0iZnVuY3Rpb24iKWRhcnRNYWluUnVubmVyKHMsW10pCmVsc2UgcyhbXSl9KX0pKCkK
-Ly8jIHNvdXJjZU1hcHBpbmdVUkw9bWlncmF0aW9uLmpzLm1hcAo=
+cm93IEEuYihBLnhZKCJwcm9wZXJ0eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIixudWxsKSkKcmV0dXJu
+IEEuZFUodGhpcy5hW2JdKX0sClk1KGEsYixjKXtpZih0eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBi
+IT0ibnVtYmVyIil0aHJvdyBBLmIoQS54WSgicHJvcGVydHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIs
+bnVsbCkpCnRoaXMuYVtiXT1BLndZKGMpfSwKRE4oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVy
+biBiIGluc3RhbmNlb2YgQS5FNCYmdGhpcy5hPT09Yi5hfSwKdyhhKXt2YXIgcyxyCnRyeXtzPVN0cmlu
+Zyh0aGlzLmEpCnJldHVybiBzfWNhdGNoKHIpe3M9dGhpcy54YigwKQpyZXR1cm4gc319LApWNyhhLGIp
+e3ZhciBzLHI9dGhpcy5hCmlmKGI9PW51bGwpcz1udWxsCmVsc2V7cz1BLnQ2KGIpCnM9QS5QVyhuZXcg
+QS5sSihiLHMuQygiQCgxKSIpLmEoQS5pRygpKSxzLkMoImxKPDEsQD4iKSksITAsdC56KX1yZXR1cm4g
+QS5kVShyW2FdLmFwcGx5KHIscykpfSwKZ2lPKGEpe3JldHVybiAwfX0KQS5yNy5wcm90b3R5cGU9e30K
+QS5Uei5wcm90b3R5cGU9ewpjUChhKXt2YXIgcz10aGlzLHI9YTwwfHxhPj1zLmdBKHMpCmlmKHIpdGhy
+b3cgQS5iKEEuVEUoYSwwLHMuZ0EocyksbnVsbCxudWxsKSl9LApxKGEsYil7aWYoQS5vayhiKSl0aGlz
+LmNQKGIpCnJldHVybiB0aGlzLiR0aS5jLmEodGhpcy5VcigwLGIpKX0sClk1KGEsYixjKXt0aGlzLmNQ
+KGIpCnRoaXMuYmgoMCxiLGMpfSwKZ0EoYSl7dmFyIHM9dGhpcy5hLmxlbmd0aAppZih0eXBlb2Ygcz09
+PSJudW1iZXIiJiZzPj4+MD09PXMpcmV0dXJuIHMKdGhyb3cgQS5iKEEuUFYoIkJhZCBKc0FycmF5IGxl
+bmd0aCIpKX0sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkEudmcucHJvdG90eXBlPXsKWTUoYSxiLGMp
+e3JldHVybiB0aGlzLmU0KDAsYixjKX19CkEubmQucHJvdG90eXBlPXskaW5kOjF9CkEuS2UucHJvdG90
+eXBlPXsKRCgpe3ZhciBzLHIscSxwLG89dGhpcy5hLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSxuPUEuTHMo
+dC5OKQppZihvPT1udWxsKXJldHVybiBuCmZvcihzPW8uc3BsaXQoIiAiKSxyPXMubGVuZ3RoLHE9MDtx
+PHI7KytxKXtwPUouVDAoc1txXSkKaWYocC5sZW5ndGghPT0wKW4uaSgwLHApfXJldHVybiBufSwKWChh
+KXt0aGlzLmEuc2V0QXR0cmlidXRlKCJjbGFzcyIsYS5rKDAsIiAiKSl9fQpBLmhpLnByb3RvdHlwZT17
+CmdQKGEpe3JldHVybiBuZXcgQS5LZShhKX0sCnNoZihhLGIpe3RoaXMuWUMoYSxiKX0sCnI2KGEsYixj
+LGQpe3ZhciBzLHIscSxwLG8sbgppZihkPT1udWxsKXtzPUEuUUkoW10sdC5EKQpkPW5ldyBBLnZEKHMp
+CkIuTm0uaShzLEEuVHcobnVsbCkpCkIuTm0uaShzLEEuQmwoKSkKQi5ObS5pKHMsbmV3IEEuT3coKSl9
+Yz1uZXcgQS5LbyhkKQpyPSc8c3ZnIHZlcnNpb249IjEuMSI+JytBLkVqKGIpKyI8L3N2Zz4iCnM9ZG9j
+dW1lbnQKcT1zLmJvZHkKcS50b1N0cmluZwpwPUIuUlkuQUgocSxyLGMpCm89cy5jcmVhdGVEb2N1bWVu
+dEZyYWdtZW50KCkKcz1uZXcgQS5lNyhwKQpuPXMuZ3I4KHMpCmZvcig7cz1uLmZpcnN0Q2hpbGQscyE9
+bnVsbDspby5hcHBlbmRDaGlsZChzKQpyZXR1cm4gb30sCm56KGEsYixjLGQsZSl7dGhyb3cgQS5iKEEu
+TDQoIkNhbm5vdCBpbnZva2UgaW5zZXJ0QWRqYWNlbnRIdG1sIG9uIFNWRy4iKSl9LApnVmwoYSl7cmV0
+dXJuIG5ldyBBLkNxKGEsImNsaWNrIiwhMSx0LlEpfSwKJGloaToxfQpBLmQyLnByb3RvdHlwZT17Ckx0
+KCl7dmFyIHMscixxLHAsbz10aGlzLG49dC5OLG09dC5YLGw9QS5GbChuLG0pLGs9by5hCmlmKGshPW51
+bGwpe3M9QS5RSShbXSx0LmQpCmZvcihyPWsubGVuZ3RoLHE9MDtxPGsubGVuZ3RoO2subGVuZ3RoPT09
+cnx8KDAsQS5saykoayksKytxKXtwPWtbcV0Kcy5wdXNoKEEuRUYoWyJkZXNjcmlwdGlvbiIscC5hLCJo
+cmVmIixwLmJdLG4sbSkpfWwuWTUoMCwiZWRpdHMiLHMpfWwuWTUoMCwiZXhwbGFuYXRpb24iLG8uYikK
+bC5ZNSgwLCJsaW5lIixvLmMpCmwuWTUoMCwiZGlzcGxheVBhdGgiLG8uZCkKbC5ZNSgwLCJ1cmlQYXRo
+IixvLmUpCm49by5mCmlmKG4hPW51bGwpe209QS5RSShbXSx0LmQpCmZvcihrPW4ubGVuZ3RoLHE9MDtx
+PG4ubGVuZ3RoO24ubGVuZ3RoPT09a3x8KDAsQS5saykobiksKytxKW0ucHVzaChuW3FdLkx0KCkpCmwu
+WTUoMCwidHJhY2VzIixtKX1yZXR1cm4gbH19CkEuU2UucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gQS5F
+RihbImRlc2NyaXB0aW9uIix0aGlzLmEsImhyZWYiLHRoaXMuYl0sdC5OLHQuWCl9fQpBLk1sLnByb3Rv
+dHlwZT17Ckx0KCl7cmV0dXJuIEEuRUYoWyJocmVmIix0aGlzLmEsImxpbmUiLHRoaXMuYiwicGF0aCIs
+dGhpcy5jXSx0Lk4sdC5YKX19CkEueUQucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEscD1BLlFJKFtd
+LHQuZCkKZm9yKHM9dGhpcy5iLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwo
+MCxBLmxrKShzKSwrK3EpcC5wdXNoKHNbcV0uTHQoKSkKcmV0dXJuIEEuRUYoWyJkZXNjcmlwdGlvbiIs
+dGhpcy5hLCJlbnRyaWVzIixwXSx0Lk4sdC5YKX19CkEud2IucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxy
+LHEscD10aGlzLG89QS5GbCh0Lk4sdC5YKQpvLlk1KDAsImRlc2NyaXB0aW9uIixwLmEpCnM9cC5iCmlm
+KHMhPW51bGwpby5ZNSgwLCJmdW5jdGlvbiIscykKcz1wLmMKaWYocyE9bnVsbClvLlk1KDAsImxpbmsi
+LHMuTHQoKSkKcz1wLmQKaWYocy5sZW5ndGghPT0wKXtyPUEudDYocykKcT1yLkMoImxKPDEsWjA8cVUs
+TWg/Pj4iKQpvLlk1KDAsImhpbnRBY3Rpb25zIixBLlkxKG5ldyBBLmxKKHMsci5DKCJaMDxxVSxNaD8+
+KDEpIikuYShuZXcgQS5iMCgpKSxxKSwhMCxxLkMoImFMLkUiKSkpfXJldHVybiBvfX0KQS5hTi5wcm90
+b3R5cGU9ewokMShhKXtyZXR1cm4gQS5ueih0LkcuYShhKSl9LAokUzozOH0KQS5iMC5wcm90b3R5cGU9
+ewokMShhKXtyZXR1cm4gdC5KLmEoYSkuTHQoKX0sCiRTOjM5fQpBLmo4LnByb3RvdHlwZT17Ckx0KCl7
+cmV0dXJuIEEuRUYoWyJsaW5lIix0aGlzLmEsImV4cGxhbmF0aW9uIix0aGlzLmIsIm9mZnNldCIsdGhp
+cy5jXSx0Lk4sdC5YKX19CkEucXAucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRo
+aXMsaz10Lk4saj1BLkZsKGssdC5hUykKZm9yKHM9bC5kLHM9cy5nUHUocykscz1zLmdtKHMpLHI9dC5Y
+LHE9dC5kO3MuRigpOyl7cD1zLmdsKCkKbz1wLmEKbj1BLlFJKFtdLHEpCmZvcihwPUouSVQocC5iKTtw
+LkYoKTspe209cC5nbCgpCm4ucHVzaChBLkVGKFsibGluZSIsbS5hLCJleHBsYW5hdGlvbiIsbS5iLCJv
+ZmZzZXQiLG0uY10sayxyKSl9ai5ZNSgwLG8sbil9cmV0dXJuIEEuRUYoWyJyZWdpb25zIixsLmEsIm5h
+dmlnYXRpb25Db250ZW50IixsLmIsInNvdXJjZUNvZGUiLGwuYywiZWRpdHMiLGpdLGsscil9fQpBLm1R
+LnByb3RvdHlwZT17fQpBLmUucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAsbyxuLG0KdC5CLmEo
+YSkKcz10LkYKcj1zLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZQpxPUEuRzYocy5hKHdpbmRvdy5s
+b2NhdGlvbikuaHJlZikKcD1BLmFLKHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCkEuR2UoKQppZihy
+IT09Ii8iKXtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKcy50b1N0
+cmluZwpzPXIhPT1CLnhCLmJTKHMpfWVsc2Ugcz0hMQppZihzKXtyLnRvU3RyaW5nCkEuRzcocixxLHAs
+ITAsbmV3IEEuVlcocixxLHApKX1zPWRvY3VtZW50Cm89cy5xdWVyeVNlbGVjdG9yKCIuYXBwbHktbWln
+cmF0aW9uIikKby50b1N0cmluZwpvPUoucUYobykKbj1vLiR0aQptPW4uQygifigxKT8iKS5hKG5ldyBB
+Lm9aKCkpCnQuWi5hKG51bGwpCkEuSkUoby5hLG8uYixtLCExLG4uYykKbj1zLnF1ZXJ5U2VsZWN0b3Io
+Ii5yZXJ1bi1taWdyYXRpb24iKQpuLnRvU3RyaW5nCm49Si5xRihuKQptPW4uJHRpCkEuSkUobi5hLG4u
+YixtLkMoIn4oMSk/IikuYShuZXcgQS55OCgpKSwhMSxtLmMpCm09cy5xdWVyeVNlbGVjdG9yKCIucmVw
+b3J0LXByb2JsZW0iKQptLnRvU3RyaW5nCm09Si5xRihtKQpuPW0uJHRpCkEuSkUobS5hLG0uYixuLkMo
+In4oMSk/IikuYShuZXcgQS5IaSgpKSwhMSxuLmMpCnM9cy5xdWVyeVNlbGVjdG9yKCIucG9wdXAtcGFu
+ZSAuY2xvc2UiKQpzLnRvU3RyaW5nCnM9Si5xRihzKQpuPXMuJHRpCkEuSkUocy5hLHMuYixuLkMoIn4o
+MSk/IikuYShuZXcgQS5CVCgpKSwhMSxuLmMpCm49JC5jMCgpCm4udG9TdHJpbmcKbj1KLnFGKG4pCnM9
+bi4kdGkKQS5KRShuLmEsbi5iLHMuQygifigxKT8iKS5hKG5ldyBBLlBZKCkpLCExLHMuYyl9LAokUzox
+MX0KQS5WVy5wcm90b3R5cGU9ewokMCgpe0EuRnIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0K
+QS5vWi5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyLHEscCxvCnQuVi5hKGEpCmlmKEIub2wudXMod2lu
+ZG93LCJUaGlzIHdpbGwgYXBwbHkgdGhlIGNoYW5nZXMgeW91J3ZlIHByZXZpZXdlZCB0byB5b3VyIHdv
+cmtpbmcgZGlyZWN0b3J5LiBJdCBpcyByZWNvbW1lbmRlZCB5b3UgY29tbWl0IGFueSBjaGFuZ2VzIHlv
+dSBtYWRlIGJlZm9yZSBkb2luZyB0aGlzLiIpKXtzPUEuUUkoW10sdC5kKQpmb3Iocj0kLklSLHE9ci5s
+ZW5ndGgscD0wO3A8ci5sZW5ndGg7ci5sZW5ndGg9PT1xfHwoMCxBLmxrKShyKSwrK3Apcy5wdXNoKHJb
+cF0uTHQoKSkKcz1BLnR5KCIvYXBwbHktbWlncmF0aW9uIixBLkVGKFsibmF2aWdhdGlvblRyZWUiLHNd
+LHQuTix0LmFTKSkuVzcobmV3IEEuanIoKSx0LlApCm89bmV3IEEucWwoKQp0LmI3LmEobnVsbCkKcj1z
+LiR0aQpxPSQuWDMKaWYocSE9PUIuTlUpbz1BLlZIKG8scSkKcy54ZihuZXcgQS5GZShuZXcgQS52cyhx
+LHIpLDIsbnVsbCxvLHIuQygiQDwxPiIpLktxKHIuYykuQygiRmU8MSwyPiIpKSl9fSwKJFM6MX0KQS5q
+ci5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LmZuLmEoYSkKcz1kb2N1bWVudC5ib2R5CnMuY2xhc3NM
+aXN0LnJlbW92ZSgicHJvcG9zZWQiKQpzLmNsYXNzTGlzdC5hZGQoImFwcGxpZWQiKX0sCiRTOjQyfQpB
+LnFsLnByb3RvdHlwZT17CiQyKGEsYil7QS5DMigiQ291bGRuJ3QgYXBwbHkgbWlncmF0aW9uIix0Lksu
+YShhKSxiKX0sCiRTOjQzfQpBLnk4LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLnhuKHQuVi5h
+KGEpKX0sCnhuKGEpe3ZhciBzPTAscj1BLkZYKHQuSCkscT0xLHAsbz1bXSxuLG0sbCxrLGosaQp2YXIg
+JGFzeW5jJCQxPUEubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3
+aXRjaChzKXtjYXNlIDA6cT0zCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgicmVydW5uaW5nIikK
+cz02CnJldHVybiBBLmpRKEEudHkoIi9yZXJ1bi1taWdyYXRpb24iLG51bGwpLCRhc3luYyQkMSkKY2Fz
+ZSA2Om49YwprPW4Kay50b1N0cmluZwppZihBLnA4KEoueDkoaywic3VjY2VzcyIpKSl0LkYuYSh3aW5k
+b3cubG9jYXRpb24pLnJlbG9hZCgpCmVsc2UgQS5LMCh0LmV3LmEoSi54OShuLCJlcnJvcnMiKSkpCm8u
+cHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAzOnE9MgppPXAKbT1BLlJ1KGkpCmw9QS50cyhpKQpBLkMyKCJG
+YWlsZWQgdG8gcmVydW4gbWlncmF0aW9uIixtLGwpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAyOm89
+WzFdCmNhc2UgNDpxPTEKZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJyZXJ1bm5pbmciKQpz
+PW8ucG9wKCkKYnJlYWsKY2FzZSA1OnJldHVybiBBLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBBLmYz
+KHAscil9fSkKcmV0dXJuIEEuREkoJGFzeW5jJCQxLHIpfSwKJFM6Nn0KQS5IaS5wcm90b3R5cGU9ewok
+MShhKXt0LlYuYShhKQpCLm9sLlBvKHdpbmRvdyxBLlhkKCJodHRwcyIsImdpdGh1Yi5jb20iLCJkYXJ0
+LWxhbmcvc2RrL2lzc3Vlcy9uZXciLEEuRUYoWyJ0aXRsZSIsIkN1c3RvbWVyLXJlcG9ydGVkIGlzc3Vl
+IHdpdGggTk5CRCBtaWdyYXRpb24gdG9vbCIsImxhYmVscyIsdS5kLCJib2R5IiwiIyMjIyBTdGVwcyB0
+byByZXByb2R1Y2VcblxuIyMjIyBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj9cblxuIyMjIyBX
+aGF0IGFjdHVhbGx5IGhhcHBlbmVkP1xuXG5fU2NyZWVuc2hvdHMgYXJlIGFwcHJlY2lhdGVkX1xuXG4q
+KkRhcnQgU0RLIHZlcnNpb24qKjogIitBLkVqKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZGstdmVy
+c2lvbiIpLnRleHRDb250ZW50KSsiXG5cblRoYW5rcyBmb3IgZmlsaW5nIVxuIl0sdC5OLHQueikpLmdu
+RCgpLCJyZXBvcnQtcHJvYmxlbSIpfSwKJFM6MX0KQS5CVC5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0
+LlYuYShhKQpzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5wb3B1cC1wYW5lIikuc3R5bGUKcy5kaXNw
+bGF5PSJub25lIgpyZXR1cm4ibm9uZSJ9LAokUzoxfQpBLlBZLnByb3RvdHlwZT17CiQxKGEpe3ZhciBz
+LHIscSxwLG8KdC5WLmEoYSkKcz0kLkQ5KCkuaW5uZXJUZXh0CnI9dC5oLmEoZG9jdW1lbnQucXVlcnlT
+ZWxlY3RvcignLm5hdi1wYW5lbCBbZGF0YS1uYW1lKj0iJytBLkxqKHMpKyciXScpLnBhcmVudE5vZGUp
+CnE9ci5xdWVyeVNlbGVjdG9yKCIuc3RhdHVzLWljb24iKQpwPSQuSVIKcC50b1N0cmluZwpvPUEueXco
+cCxzKQppZihvIGluc3RhbmNlb2YgQS5jRCl7cD1vLngKcC50b1N0cmluZ31lbHNlIHA9ITEKaWYocCl7
+QS5PdChvKQpBLnhuKHEsbykKQS5BUihyLG8pfX0sCiRTOjF9CkEuTC5wcm90b3R5cGU9ewokMShhKXt2
+YXIgcyxyLHEscAp0LkIuYShhKQpzPXQuRgpyPXMuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lCnIu
+dG9TdHJpbmcKcT1BLkc2KHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCnA9QS5hSyhzLmEod2luZG93
+LmxvY2F0aW9uKS5ocmVmKQppZihyLmxlbmd0aD4xKUEuRzcocixxLHAsITEsbnVsbCkKZWxzZXtBLkJF
+KHIsQS53UigpLCEwKQpBLkJYKCImbmJzcDsiLG51bGwpfX0sCiRTOjExfQpBLld4LnByb3RvdHlwZT17
+CiQxKGEpe3ZhciBzLHIscSxwLG89ImNvbGxhcHNlZCIKdC5WLmEoYSkKcz10aGlzLmEKcj1KLllFKHMp
+CnE9dGhpcy5iCnA9Si5ZRShxKQppZighci5nUChzKS50ZygwLG8pKXtyLmdQKHMpLmkoMCxvKQpwLmdQ
+KHEpLmkoMCxvKX1lbHNle3IuZ1AocykuUigwLG8pCnAuZ1AocSkuUigwLG8pfX0sCiRTOjF9CkEuSG8u
+cHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEEudDIodC5WLmEoYSksdGhpcy5hKX0sCiRTOjF9CkEuSUMu
+cHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAKdC5WLmEoYSkKcz10aGlzLmEKcj1zLmdldEF0dHJp
+YnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KHMpKS5PVSgib2Zmc2V0IikpCnIudG9TdHJpbmcK
+cT1BLlFBKHIsbnVsbCkKcz1zLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KHMp
+KS5PVSgibGluZSIpKQpzLnRvU3RyaW5nCnA9QS5RQShzLG51bGwpCnM9dGhpcy5iCnMudG9TdHJpbmcK
+QS5oWChzLHEscCl9LAokUzoxfQpBLmZDLnByb3RvdHlwZT17CiQxKGEpe3QucC5hKGEpCnRoaXMuYS5h
+TSgwLHRoaXMuYil9LAokUzo0NX0KQS5UbS5wcm90b3R5cGU9ewokMShhKXtBLm4oYSkKcmV0dXJuIGEu
+bGVuZ3RoPjQwP0IueEIuTmooYSwwLDQwKSsiLi4uIjphfSwKJFM6Mn0KQS5uVC5wcm90b3R5cGU9ewok
+MCgpe0EuRnIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KQS5OWS5wcm90b3R5cGU9ewokMCgp
+e0EuRnIodGhpcy5hLG51bGwsbnVsbCl9LAokUzowfQpBLnVlLnByb3RvdHlwZT17CiQxKGEpe3QuZi5h
+KGEpCnJldHVybiBBLkVqKGEucSgwLCJzZXZlcml0eSIpKSsiIC0gIitBLkVqKGEucSgwLCJtZXNzYWdl
+IikpKyIgYXQgIitBLkVqKGEucSgwLCJsb2NhdGlvbiIpKSsiIC0gKCIrQS5FaihhLnEoMCwiY29kZSIp
+KSsiKSJ9LAokUzo0Nn0KQS5HSC5wcm90b3R5cGU9ewokMShhKXt0LmguYShhKQokLnpCKCkKdC5lcy5h
+KCQub3coKS5xKDAsImhsanMiKSkuVjcoImhpZ2hsaWdodEJsb2NrIixbYV0pfSwKJFM6MTd9CkEuRUUu
+cHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscgp0LlYuYShhKS5wcmV2ZW50RGVmYXVsdCgpCnM9dGhpcy5h
+CnI9dGhpcy5iCkEuYWYodC5GLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZSxzLHIsITAsbmV3IEEu
+UUwocyxyKSkKQS5oWCh0aGlzLmMscyxyKX0sCiRTOjF9CkEuUUwucHJvdG90eXBlPXsKJDAoKXtBLkZy
+KHQuRi5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUsdGhpcy5hLHRoaXMuYil9LAokUzowfQpBLlZT
+LnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHI9InNlbGVjdGVkLWZpbGUiCnQuaC5hKGEpCnM9Si5ZRShh
+KQppZihhLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KGEpKS5PVSgibmFtZSIp
+KT09PXRoaXMuYS5hKXMuZ1AoYSkuaSgwLHIpCmVsc2Ugcy5nUChhKS5SKDAscil9LAokUzoxN30KQS5U
+RC5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyCnQuVi5hKGEpCnM9dGhpcy5hCnN3aXRjaChzLmdMKCku
+YSl7Y2FzZSAwOmJyZWFrCmNhc2UgMjpzLm5HKCkKYnJlYWsKY2FzZSAzOnMuYzIoKQpicmVhawpjYXNl
+IDE6cy5jMigpCmJyZWFrfXI9dGhpcy5iCkEuYkwocixzKQpBLnhuKHRoaXMuYyxzKQpBLkFSKHIscyl9
+LAokUzoxfQpBLklmLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzCnQuVi5hKGEpCnM9dGhpcy5hCkEuT3Qo
+cykKQS54bih0aGlzLmIscykKQS5BUih0aGlzLmMscyl9LAokUzoxfQpBLnRCLnByb3RvdHlwZT17CiQx
+KGEpe3JldHVybiBBLnQyKHQuVi5hKGEpLCEwKX0sCiRTOjF9CkEubTIucHJvdG90eXBlPXsKJDEoYSl7
+cmV0dXJuIHRoaXMuUkkodC5WLmEoYSkpfSwKUkkoYSl7dmFyIHM9MCxyPUEuRlgodC5IKSxxPTEscCxv
+PVtdLG49dGhpcyxtLGwsayxqLGksaCxnLGYsZQp2YXIgJGFzeW5jJCQxPUEubHooZnVuY3Rpb24oYixj
+KXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6cT0zCmk9ZG9jdW1l
+bnQKbT1CLkNELnpRKGkucXVlcnlTZWxlY3RvcigiLmNvbnRlbnQiKS5zY3JvbGxUb3ApCmg9dC5OCnM9
+NgpyZXR1cm4gQS5qUShBLnR5KEEuUTQoIi9hcHBseS1oaW50IixBLkZsKGgsaCkpLG4uYS5MdCgpKSwk
+YXN5bmMkJDEpCmNhc2UgNjpoPW4uYgpnPWguYQpnLnRvU3RyaW5nCmw9QS5VcyhnKQpzPTcKcmV0dXJu
+IEEualEoQS5HNyhsLG51bGwsaC5iLCExLG51bGwpLCRhc3luYyQkMSkKY2FzZSA3OmkuYm9keS5jbGFz
+c0xpc3QuYWRkKCJuZWVkcy1yZXJ1biIpCmk9aS5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpCmkudG9T
+dHJpbmcKaS5zY3JvbGxUb3A9Qi5qbi56UShtKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZT1wCms9
+QS5SdShlKQpqPUEudHMoZSkKQS5DMigiY291bGRuJ3QgYXBwbHkgaGludCIsayxqKQpzPTUKYnJlYWsK
+Y2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIEEueUMobnVsbCxyKQpjYXNlIDE6cmV0dXJuIEEu
+ZjMocCxyKX19KQpyZXR1cm4gQS5ESSgkYXN5bmMkJDEscil9LAokUzo2fQpBLlFXLnByb3RvdHlwZT17
+CncoYSl7cmV0dXJuIHRoaXMuYSsiOlxuIit0aGlzLmJ9LAokaVJ6OjF9CkEuWEEucHJvdG90eXBlPXsK
+RWIoYSxiLGMpe3JldHVybiEwfSwKaTAoYSl7cmV0dXJuITB9LAokaWtGOjF9CkEudnQucHJvdG90eXBl
+PXsKZ0woKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMuZAppZihsLmxlbmd0aD09PTApcmV0dXJuIEIu
+Y3cKcz1CLk5tLmd0SChsKS5nTCgpCmZvcihyPWwubGVuZ3RoLHE9ITAscD0hMCxvPTA7bzxsLmxlbmd0
+aDtsLmxlbmd0aD09PXJ8fCgwLEEubGspKGwpLCsrbyl7bj1sW29dLmdMKCkKaWYobiE9cylzPW51bGwK
+bT1uIT09Qi5jdwppZihtJiZuIT09Qi5XRClxPSExCmlmKG0mJm4hPT1CLlhqKXA9ITF9aWYocyE9bnVs
+bClyZXR1cm4gcwppZihxKXJldHVybiBCLldECmlmKHApcmV0dXJuIEIuWGoKcmV0dXJuIEIuZGN9LApM
+Vigpe3ZhciBzLHIscSxwPXRoaXMuZAppZihwIT1udWxsKWZvcihzPXAubGVuZ3RoLHI9MDtyPHAubGVu
+Z3RoO3AubGVuZ3RoPT09c3x8KDAsQS5saykocCksKytyKXtxPXBbcl0KQS5teShxLmIsInBhcmVudCIp
+CnEuYj10aGlzfX0sCmMyKCl7dmFyIHMscixxLHAsbwpmb3Iocz10aGlzLmQscj1zLmxlbmd0aCxxPTA7
+cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcSl7cD1zW3FdCmlmKHAgaW5zdGFu
+Y2VvZiBBLnZ0KXAuYzIoKQplbHNle2lmKHAgaW5zdGFuY2VvZiBBLmNEKXtvPXAueApvLnRvU3RyaW5n
+Cm89byYmcC5yPT09Qi5Yan1lbHNlIG89ITEKaWYobylwLnI9Qi5XRH19fSwKbkcoKXt2YXIgcyxyLHEs
+cCxvCmZvcihzPXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAs
+QS5saykocyksKytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9mIEEudnQpcC5uRygpCmVsc2V7aWYocCBp
+bnN0YW5jZW9mIEEuY0Qpe289cC54Cm8udG9TdHJpbmcKbz1vJiZwLnI9PT1CLldEfWVsc2Ugbz0hMQpp
+ZihvKXAucj1CLlhqfX19LApMdCgpe3ZhciBzLHI9QS5GbCh0Lk4sdC5YKQpyLlk1KDAsInR5cGUiLCJk
+aXJlY3RvcnkiKQpyLlk1KDAsIm5hbWUiLHRoaXMuYSkKcz10aGlzLmQKcy50b1N0cmluZwpyLlk1KDAs
+InN1YnRyZWUiLEEuVkQocykpCnM9dGhpcy5jCmlmKHMhPW51bGwpci5ZNSgwLCJwYXRoIixzKQpyZXR1
+cm4gcn19CkEuY0QucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyPXRoaXMscT1BLkZsKHQuTix0LlgpCnEu
+WTUoMCwidHlwZSIsImZpbGUiKQpxLlk1KDAsIm5hbWUiLHIuYSkKcz1yLmMKaWYocyE9bnVsbClxLlk1
+KDAsInBhdGgiLHMpCnM9ci5kCmlmKHMhPW51bGwpcS5ZNSgwLCJocmVmIixzKQpzPXIuZQppZihzIT1u
+dWxsKXEuWTUoMCwiZWRpdENvdW50IixzKQpzPXIuZgppZihzIT1udWxsKXEuWTUoMCwid2FzRXhwbGlj
+aXRseU9wdGVkT3V0IixzKQpzPXIucgppZihzIT1udWxsKXEuWTUoMCwibWlncmF0aW9uU3RhdHVzIixz
+LmEpCnM9ci54CmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXNDYW5CZUNoYW5nZWQiLHMp
+CnJldHVybiBxfSwKZ0woKXtyZXR1cm4gdGhpcy5yfX0KQS5EOC5wcm90b3R5cGU9e30KQS5POS5wcm90
+b3R5cGU9ewp3KGEpe3JldHVybiJOYXZpZ2F0aW9uVHJlZU5vZGVUeXBlLiIrdGhpcy5ifX0KQS5HYi5w
+cm90b3R5cGU9ewp3KGEpe3JldHVybiJVbml0TWlncmF0aW9uU3RhdHVzLiIrdGhpcy5ifX0KQS5MTC5w
+cm90b3R5cGU9ewpMdCgpe3JldHVybiBBLkVGKFsibm9kZUlkIix0aGlzLmIsImtpbmQiLHRoaXMuYS5h
+XSx0Lk4sdC5YKX19CkEuTUQucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHQuZ3AuYShhKS5hPT09dGhp
+cy5hLnEoMCwia2luZCIpfSwKJFM6NDh9CkEuSDcucHJvdG90eXBlPXsKdyhhKXtyZXR1cm4iSGludEFj
+dGlvbktpbmQuIit0aGlzLmJ9fQpBLmxJLnByb3RvdHlwZT17CldPKGEsYil7dmFyIHMscixxPXQuZDQK
+QS5ZRigiYWJzb2x1dGUiLEEuUUkoW2IsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHEpKQpz
+PXRoaXMuYQpzPXMuWXIoYik+MCYmIXMuaEsoYikKaWYocylyZXR1cm4gYgpzPUEuYWIoKQpyPUEuUUko
+W3MsYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0scSkKQS5ZRigiam9pbiIscikKcmV0dXJu
+IHRoaXMuSVAobmV3IEEudTYocix0LmVKKSl9LAp6ZihhKXt2YXIgcyxyLHE9QS5sbyhhLHRoaXMuYSkK
+cS5JeCgpCnM9cS5kCnI9cy5sZW5ndGgKaWYocj09PTApe3M9cS5iCnJldHVybiBzPT1udWxsPyIuIjpz
+fWlmKHI9PT0xKXtzPXEuYgpyZXR1cm4gcz09bnVsbD8iLiI6c31pZigwPj1yKXJldHVybiBBLk9IKHMs
+LTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5wb3AoKQpx
+Lkl4KCkKcmV0dXJuIHEudygwKX0sCklQKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqCnQuTy5hKGEp
+CmZvcihzPWEuJHRpLHI9cy5DKCJhMihjWC5FKSIpLmEobmV3IEEucTcoKSkscT1hLmdtKGEpLHM9bmV3
+IEEuU08ocSxyLHMuQygiU088Y1guRT4iKSkscj10aGlzLmEscD0hMSxvPSExLG49IiI7cy5GKCk7KXtt
+PXEuZ2woKQppZihyLmhLKG0pJiZvKXtsPUEubG8obSxyKQprPW4uY2hhckNvZGVBdCgwKT09MD9uOm4K
+bj1CLnhCLk5qKGssMCxyLlNwKGssITApKQpsLmI9bgppZihyLmRzKG4pKUIuTm0uWTUobC5lLDAsci5n
+bUkoKSkKbj0iIitsLncoMCl9ZWxzZSBpZihyLllyKG0pPjApe289IXIuaEsobSkKbj0iIittfWVsc2V7
+aj1tLmxlbmd0aAppZihqIT09MCl7aWYoMD49ailyZXR1cm4gQS5PSChtLDApCmo9ci5VZChtWzBdKX1l
+bHNlIGo9ITEKaWYoIWopaWYocCluKz1yLmdtSSgpCm4rPW19cD1yLmRzKG0pfXJldHVybiBuLmNoYXJD
+b2RlQXQoMCk9PTA/bjpufSwKbzUoYSl7dmFyIHMKaWYoIXRoaXMueTMoYSkpcmV0dXJuIGEKcz1BLmxv
+KGEsdGhpcy5hKQpzLnJSKCkKcmV0dXJuIHMudygwKX0sCnkzKGEpe3ZhciBzLHIscSxwLG8sbixtLGws
+az10aGlzLmEsaj1rLllyKGEpCmlmKGohPT0wKXtpZihrPT09JC5LaygpKWZvcihzPTA7czxqOysrcylp
+ZihCLnhCLlcoYSxzKT09PTQ3KXJldHVybiEwCnI9agpxPTQ3fWVsc2V7cj0wCnE9bnVsbH1mb3IocD1u
+ZXcgQS5xaihhKS5hLG89cC5sZW5ndGgscz1yLG49bnVsbDtzPG87KytzLG49cSxxPW0pe209Qi54Qi5P
+KHAscykKaWYoay5yNChtKSl7aWYoaz09PSQuS2soKSYmbT09PTQ3KXJldHVybiEwCmlmKHEhPW51bGwm
+JmsucjQocSkpcmV0dXJuITAKaWYocT09PTQ2KWw9bj09bnVsbHx8bj09PTQ2fHxrLnI0KG4pCmVsc2Ug
+bD0hMQppZihsKXJldHVybiEwfX1pZihxPT1udWxsKXJldHVybiEwCmlmKGsucjQocSkpcmV0dXJuITAK
+aWYocT09PTQ2KWs9bj09bnVsbHx8ay5yNChuKXx8bj09PTQ2CmVsc2Ugaz0hMQppZihrKXJldHVybiEw
+CnJldHVybiExfSwKSFAoYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMsaz0nVW5hYmxlIHRvIGZp
+bmQgYSBwYXRoIHRvICInCmI9bC5XTygwLGIpCnM9bC5hCmlmKHMuWXIoYik8PTAmJnMuWXIoYSk+MCly
+ZXR1cm4gbC5vNShhKQppZihzLllyKGEpPD0wfHxzLmhLKGEpKWE9bC5XTygwLGEpCmlmKHMuWXIoYSk8
+PTAmJnMuWXIoYik+MCl0aHJvdyBBLmIoQS5JNyhrK2ErJyIgZnJvbSAiJytiKyciLicpKQpyPUEubG8o
+YixzKQpyLnJSKCkKcT1BLmxvKGEscykKcS5yUigpCnA9ci5kCm89cC5sZW5ndGgKaWYobyE9PTApe2lm
+KDA+PW8pcmV0dXJuIEEuT0gocCwwKQpwPUouUk0ocFswXSwiLiIpfWVsc2UgcD0hMQppZihwKXJldHVy
+biBxLncoMCkKcD1yLmIKbz1xLmIKaWYocCE9bylwPXA9PW51bGx8fG89PW51bGx8fCFzLk5jKHAsbykK
+ZWxzZSBwPSExCmlmKHApcmV0dXJuIHEudygwKQp3aGlsZSghMCl7cD1yLmQKbz1wLmxlbmd0aAppZihv
+IT09MCl7bj1xLmQKbT1uLmxlbmd0aAppZihtIT09MCl7aWYoMD49bylyZXR1cm4gQS5PSChwLDApCnA9
+cFswXQppZigwPj1tKXJldHVybiBBLk9IKG4sMCkKbj1zLk5jKHAsblswXSkKcD1ufWVsc2UgcD0hMX1l
+bHNlIHA9ITEKaWYoIXApYnJlYWsKQi5ObS5XNChyLmQsMCkKQi5ObS5XNChyLmUsMSkKQi5ObS5XNChx
+LmQsMCkKQi5ObS5XNChxLmUsMSl9cD1yLmQKbz1wLmxlbmd0aAppZihvIT09MCl7aWYoMD49bylyZXR1
+cm4gQS5PSChwLDApCnA9Si5STShwWzBdLCIuLiIpfWVsc2UgcD0hMQppZihwKXRocm93IEEuYihBLkk3
+KGsrYSsnIiBmcm9tICInK2IrJyIuJykpCnA9dC5OCkIuTm0uVUcocS5kLDAsQS5POChyLmQubGVuZ3Ro
+LCIuLiIsITEscCkpCkIuTm0uWTUocS5lLDAsIiIpCkIuTm0uVUcocS5lLDEsQS5POChyLmQubGVuZ3Ro
+LHMuZ21JKCksITEscCkpCnM9cS5kCnA9cy5sZW5ndGgKaWYocD09PTApcmV0dXJuIi4iCmlmKHA+MSYm
+Si5STShCLk5tLmdyWihzKSwiLiIpKXtzPXEuZAppZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0x
+KQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKaWYo
+MD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5wb3AoKQpCLk5tLmkocywiIil9cS5iPSIiCnEu
+SXgoKQpyZXR1cm4gcS53KDApfX0KQS5xNy5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gQS5uKGEpIT09
+IiJ9LAokUzo1fQpBLk5vLnByb3RvdHlwZT17CiQxKGEpe0EuayhhKQpyZXR1cm4gYT09bnVsbD8ibnVs
+bCI6JyInK2ErJyInfSwKJFM6NDl9CkEuZnYucHJvdG90eXBlPXsKeFooYSl7dmFyIHMscj10aGlzLlly
+KGEpCmlmKHI+MClyZXR1cm4gQi54Qi5OaihhLDAscikKaWYodGhpcy5oSyhhKSl7aWYoMD49YS5sZW5n
+dGgpcmV0dXJuIEEuT0goYSwwKQpzPWFbMF19ZWxzZSBzPW51bGwKcmV0dXJuIHN9LApOYyhhLGIpe3Jl
+dHVybiBhPT09Yn19CkEuV0QucHJvdG90eXBlPXsKSXgoKXt2YXIgcyxyLHE9dGhpcwp3aGlsZSghMCl7
+cz1xLmQKaWYoIShzLmxlbmd0aCE9PTAmJkouUk0oQi5ObS5ncloocyksIiIpKSlicmVhawpzPXEuZApp
+ZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3Ro
+KXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCl9cz1xLmUKcj1zLmxlbmd0aAppZihyIT09MClCLk5tLlk1
+KHMsci0xLCIiKX0sCnJSKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPUEuUUkoW10sdC5zKQpmb3Io
+cz1tLmQscj1zLmxlbmd0aCxxPTAscD0wO3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxBLmxrKShz
+KSwrK3Ape289c1twXQpuPUouaWEobykKaWYoIShuLkROKG8sIi4iKXx8bi5ETihvLCIiKSkpaWYobi5E
+TihvLCIuLiIpKXtuPWwubGVuZ3RoCmlmKG4hPT0wKXtpZigwPj1uKXJldHVybiBBLk9IKGwsLTEpCmwu
+cG9wKCl9ZWxzZSArK3F9ZWxzZSBCLk5tLmkobCxvKX1pZihtLmI9PW51bGwpQi5ObS5VRyhsLDAsQS5P
+OChxLCIuLiIsITEsdC5OKSkKaWYobC5sZW5ndGg9PT0wJiZtLmI9PW51bGwpQi5ObS5pKGwsIi4iKQpt
+LnNuSihsKQpzPW0uYQptLnNQaChBLk84KGwubGVuZ3RoKzEscy5nbUkoKSwhMCx0Lk4pKQpyPW0uYgpp
+ZihyPT1udWxsfHxsLmxlbmd0aD09PTB8fCFzLmRzKHIpKUIuTm0uWTUobS5lLDAsIiIpCnI9bS5iCmlm
+KHIhPW51bGwmJnM9PT0kLktrKCkpe3IudG9TdHJpbmcKbS5iPUEueXMociwiLyIsIlxcIil9bS5JeCgp
+fSwKdyhhKXt2YXIgcyxyLHE9dGhpcyxwPXEuYgpwPXAhPW51bGw/IiIrcDoiIgpmb3Iocz0wO3M8cS5k
+Lmxlbmd0aDsrK3Mpe3I9cS5lCmlmKCEoczxyLmxlbmd0aCkpcmV0dXJuIEEuT0gocixzKQpyPXArQS5F
+aihyW3NdKQpwPXEuZAppZighKHM8cC5sZW5ndGgpKXJldHVybiBBLk9IKHAscykKcD1yK0EuRWoocFtz
+XSl9cCs9QS5FaihCLk5tLmdyWihxLmUpKQpyZXR1cm4gcC5jaGFyQ29kZUF0KDApPT0wP3A6cH0sCnNu
+SihhKXt0aGlzLmQ9dC5hLmEoYSl9LApzUGgoYSl7dGhpcy5lPXQuYS5hKGEpfX0KQS5kdi5wcm90b3R5
+cGU9ewp3KGEpe3JldHVybiJQYXRoRXhjZXB0aW9uOiAiK3RoaXMuYX0sCiRpUno6MX0KQS56TC5wcm90
+b3R5cGU9ewp3KGEpe3JldHVybiB0aGlzLmdvYyh0aGlzKX19CkEuT0YucHJvdG90eXBlPXsKVWQoYSl7
+cmV0dXJuIEIueEIudGcoYSwiLyIpfSwKcjQoYSl7cmV0dXJuIGE9PT00N30sCmRzKGEpe3ZhciBzPWEu
+bGVuZ3RoCnJldHVybiBzIT09MCYmQi54Qi5PKGEscy0xKSE9PTQ3fSwKU3AoYSxiKXtpZihhLmxlbmd0
+aCE9PTAmJkIueEIuVyhhLDApPT09NDcpcmV0dXJuIDEKcmV0dXJuIDB9LApZcihhKXtyZXR1cm4gdGhp
+cy5TcChhLCExKX0sCmhLKGEpe3JldHVybiExfSwKZ29jKCl7cmV0dXJuInBvc2l4In0sCmdtSSgpe3Jl
+dHVybiIvIn19CkEucnUucHJvdG90eXBlPXsKVWQoYSl7cmV0dXJuIEIueEIudGcoYSwiLyIpfSwKcjQo
+YSl7cmV0dXJuIGE9PT00N30sCmRzKGEpe3ZhciBzPWEubGVuZ3RoCmlmKHM9PT0wKXJldHVybiExCmlm
+KEIueEIuTyhhLHMtMSkhPT00NylyZXR1cm4hMApyZXR1cm4gQi54Qi5UYyhhLCI6Ly8iKSYmdGhpcy5Z
+cihhKT09PXN9LApTcChhLGIpe3ZhciBzLHIscSxwLG89YS5sZW5ndGgKaWYobz09PTApcmV0dXJuIDAK
+aWYoQi54Qi5XKGEsMCk9PT00NylyZXR1cm4gMQpmb3Iocz0wO3M8bzsrK3Mpe3I9Qi54Qi5XKGEscykK
+aWYocj09PTQ3KXJldHVybiAwCmlmKHI9PT01OCl7aWYocz09PTApcmV0dXJuIDAKcT1CLnhCLlhVKGEs
+Ii8iLEIueEIuUWkoYSwiLy8iLHMrMSk/cyszOnMpCmlmKHE8PTApcmV0dXJuIG8KaWYoIWJ8fG88cSsz
+KXJldHVybiBxCmlmKCFCLnhCLm4oYSwiZmlsZTovLyIpKXJldHVybiBxCmlmKCFBLll1KGEscSsxKSly
+ZXR1cm4gcQpwPXErMwpyZXR1cm4gbz09PXA/cDpxKzR9fXJldHVybiAwfSwKWXIoYSl7cmV0dXJuIHRo
+aXMuU3AoYSwhMSl9LApoSyhhKXtyZXR1cm4gYS5sZW5ndGghPT0wJiZCLnhCLlcoYSwwKT09PTQ3fSwK
+Z29jKCl7cmV0dXJuInVybCJ9LApnbUkoKXtyZXR1cm4iLyJ9fQpBLklWLnByb3RvdHlwZT17ClVkKGEp
+e3JldHVybiBCLnhCLnRnKGEsIi8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd8fGE9PT05Mn0sCmRzKGEp
+e3ZhciBzPWEubGVuZ3RoCmlmKHM9PT0wKXJldHVybiExCnM9Qi54Qi5PKGEscy0xKQpyZXR1cm4hKHM9
+PT00N3x8cz09PTkyKX0sClNwKGEsYil7dmFyIHMscixxPWEubGVuZ3RoCmlmKHE9PT0wKXJldHVybiAw
+CnM9Qi54Qi5XKGEsMCkKaWYocz09PTQ3KXJldHVybiAxCmlmKHM9PT05Mil7aWYocTwyfHxCLnhCLlco
+YSwxKSE9PTkyKXJldHVybiAxCnI9Qi54Qi5YVShhLCJcXCIsMikKaWYocj4wKXtyPUIueEIuWFUoYSwi
+XFwiLHIrMSkKaWYocj4wKXJldHVybiByfXJldHVybiBxfWlmKHE8MylyZXR1cm4gMAppZighQS5PUyhz
+KSlyZXR1cm4gMAppZihCLnhCLlcoYSwxKSE9PTU4KXJldHVybiAwCnE9Qi54Qi5XKGEsMikKaWYoIShx
+PT09NDd8fHE9PT05MikpcmV0dXJuIDAKcmV0dXJuIDN9LApZcihhKXtyZXR1cm4gdGhpcy5TcChhLCEx
+KX0sCmhLKGEpe3JldHVybiB0aGlzLllyKGEpPT09MX0sCk90KGEsYil7dmFyIHMKaWYoYT09PWIpcmV0
+dXJuITAKaWYoYT09PTQ3KXJldHVybiBiPT09OTIKaWYoYT09PTkyKXJldHVybiBiPT09NDcKaWYoKGFe
+YikhPT0zMilyZXR1cm4hMQpzPWF8MzIKcmV0dXJuIHM+PTk3JiZzPD0xMjJ9LApOYyhhLGIpe3ZhciBz
+LHIKaWYoYT09PWIpcmV0dXJuITAKcz1hLmxlbmd0aAppZihzIT09Yi5sZW5ndGgpcmV0dXJuITEKZm9y
+KHI9MDtyPHM7KytyKWlmKCF0aGlzLk90KEIueEIuVyhhLHIpLEIueEIuVyhiLHIpKSlyZXR1cm4hMQpy
+ZXR1cm4hMH0sCmdvYygpe3JldHVybiJ3aW5kb3dzIn0sCmdtSSgpe3JldHVybiJcXCJ9fTsoZnVuY3Rp
+b24gYWxpYXNlcygpe3ZhciBzPUouR3YucHJvdG90eXBlCnMuVT1zLncKcz1KLnUwLnByb3RvdHlwZQpz
+LnU9cy53CnM9QS5jWC5wcm90b3R5cGUKcy5HRz1zLmV2CnM9QS5NaC5wcm90b3R5cGUKcy54Yj1zLncK
+cz1BLmN2LnByb3RvdHlwZQpzLkRXPXMucjYKcz1BLm02LnByb3RvdHlwZQpzLmpGPXMuRWIKcz1BLkU0
+LnByb3RvdHlwZQpzLlVyPXMucQpzLmU0PXMuWTUKcz1BLnZnLnByb3RvdHlwZQpzLmJoPXMuWTV9KSgp
+OyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgcz1odW5rSGVscGVycy5fc3RhdGljXzEscj1o
+dW5rSGVscGVycy5fc3RhdGljXzAscT1odW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2ZmLHA9
+aHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYsbz1odW5rSGVscGVycy5faW5zdGFuY2VfMXUK
+cyhBLCJFWCIsIlpWIiw0KQpzKEEsInl0Iiwib0EiLDQpCnMoQSwicVciLCJCeiIsNCkKcihBLCJVSSIs
+ImVOIiwwKQpxKEEuUGYucHJvdG90eXBlLCJnWUoiLDAsMSxudWxsLFsiJDIiLCIkMSJdLFsidzAiLCJw
+bSJdLDQwLDAsMCkKcyhBLCJDeSIsIk5DIiwzKQpzKEEsIlBIIiwiTXQiLDIpCnAoQSwicFMiLDQsbnVs
+bCxbIiQ0Il0sWyJxRCJdLDE1LDApCnAoQSwiVjQiLDQsbnVsbCxbIiQ0Il0sWyJuWiJdLDE1LDApCm8o
+QS5Bcy5wcm90b3R5cGUsImd1TSIsIlYiLDIpCnMoQSwiaUciLCJ3WSIsNTIpCnMoQSwidzAiLCJkVSIs
+MzUpCnMoQSwiaVMiLCJpNiIsMSl9KSgpOyhmdW5jdGlvbiBpbmhlcml0YW5jZSgpe3ZhciBzPWh1bmtI
+ZWxwZXJzLm1peGluLHI9aHVua0hlbHBlcnMubWl4aW5IYXJkLHE9aHVua0hlbHBlcnMuaW5oZXJpdCxw
+PWh1bmtIZWxwZXJzLmluaGVyaXRNYW55CnEoQS5NaCxudWxsKQpwKEEuTWgsW0EuRkssSi5HdixKLm0x
+LEEuY1gsQS5lVCxBLlhTLEEublksQS5IYixBLmE3LEEuQW4sQS5GdSxBLkpCLEEuU1UsQS5SZSxBLnd2
+LEEuUG4sQS5XVSxBLkxJLEEuVHAsQS5mOSxBLnRlLEEuYnEsQS5YTyxBLmtyLEEuWWssQS52aCxBLk42
+LEEuVlIsQS5FSyxBLlBiLEEudFEsQS5TZCxBLkpjLEEuRyxBLmxZLEEuVzMsQS5paCxBLkZ5LEEuR1Ys
+QS5DdyxBLlBmLEEuRmUsQS52cyxBLk9NLEEucWgsQS5NTyxBLmtULEEueEksQS5tMCxBLnBSLEEuYm4s
+QS5sbSxBLmxELEEuS1AsQS5sZixBLldZLEEuVWssQS5TaCxBLlJ3LEEuYnosQS5pUCxBLmNrLEEuazUs
+QS5LWSxBLkNELEEuYUUsQS5OMyxBLmM4LEEuWmQsQS5NLEEuRG4sQS5QRSxBLlVmLEEuaWQsQS5GayxB
+LkpRLEEuR20sQS52RCxBLm02LEEuT3csQS5XOSxBLmRXLEEubWssQS5LbyxBLmlKLEEuRTQsQS5kMixB
+LlNlLEEuTWwsQS55RCxBLndiLEEuajgsQS5xcCxBLm1RLEEuWEEsQS5EOCxBLkxMLEEubEksQS56TCxB
+LldELEEuZHZdKQpwKEouR3YsW0oueUUsSi53ZSxKLk1GLEouamQsSi5xSSxKLkRyLEEuRVRdKQpwKEou
+TUYsW0oudTAsQS5EMCxBLkF6LEEuWTgsQS5OaCxBLmFlLEEuSUIsQS5uNyxBLmVhLEEuYnIsQS5TZyxB
+LnU4LEEubnEsQS50RCxBLmhGXSkKcChKLnUwLFtKLmlDLEoua2QsSi5jNV0pCnEoSi5QbyxKLmpkKQpw
+KEoucUksW0ouYlUsSi5rRF0pCnAoQS5jWCxbQS5CUixBLmJRLEEuaTEsQS5VNSxBLkFNLEEudTYsQS5Y
+UixBLm1XLEEudW5dKQpwKEEuQlIsW0EuWnksQS5RQ10pCnEoQS5vbCxBLlp5KQpxKEEuVXEsQS5RQykK
+cShBLmpWLEEuVXEpCnAoQS5YUyxbQS5jLEEuRXosQS5heixBLnZWLEEuRXEsQS5DNixBLmtTLEEuVWQs
+QS5GLEEuQVQsQS5tcCxBLnViLEEuZHMsQS5saixBLlVWLEEucCxBLlFXXSkKcShBLnV5LEEublkpCnAo
+QS51eSxbQS53MixBLnd6LEEuZTddKQpxKEEucWosQS53MikKcChBLmJRLFtBLmFMLEEuTUIsQS5pNV0p
+CnAoQS5hTCxbQS5uSCxBLmxKLEEuaThdKQpxKEEueHksQS5pMSkKcChBLkFuLFtBLk1ILEEuU08sQS5V
+MV0pCnEoQS5kNSxBLkFNKQpxKEEuUlUsQS5QbikKcShBLkdqLEEuUlUpCnEoQS5QRCxBLkdqKQpxKEEu
+TFAsQS5XVSkKcChBLlRwLFtBLkUxLEEuQXksQS5sYyxBLmRDLEEuVlgsQS50aCxBLmhhLEEuV00sQS5w
+VixBLmpaLEEuQjUsQS5PUixBLnlRLEEuUlosQS5jNixBLnFkLEEuQ3YsQS52TixBLlV2LEEuRWcsQS5F
+byxBLldrLEEuSUEsQS5HRSxBLk43LEEudVEsQS5EVixBLlBDLEEuUVMsQS5ucCxBLlV0LEEuYU4sQS5i
+MCxBLmUsQS5vWixBLmpyLEEueTgsQS5IaSxBLkJULEEuUFksQS5MLEEuV3gsQS5IbyxBLklDLEEuZkMs
+QS5UbSxBLnVlLEEuR0gsQS5FRSxBLlZTLEEuVEQsQS5JZixBLnRCLEEubTIsQS5NRCxBLnE3LEEuTm9d
+KQpwKEEuRTEsW0EuQ2osQS53TixBLlNYLEEuR3MsQS5VNyxBLnJhLEEudGksQS5XRixBLm4xLEEuY1Ms
+QS5WQyxBLkpULEEuTUUsQS55NSxBLnlJLEEuS1MsQS5BMyxBLmZtLEEuRTIsQS5qZyxBLnFsXSkKcShB
+LlcwLEEuRXopCnAoQS5sYyxbQS56eCxBLnJUXSkKcShBLmtZLEEuQzYpCnEoQS5pbCxBLllrKQpwKEEu
+aWwsW0EuTjUsQS51dyxBLmNmLEEuU3ldKQpwKEEubVcsW0EuS1csQS5xNF0pCnEoQS5MWixBLkVUKQpw
+KEEuTFosW0EuUkcsQS5XQl0pCnEoQS5WUCxBLlJHKQpxKEEuRGcsQS5WUCkKcShBLlpHLEEuV0IpCnEo
+QS5QZyxBLlpHKQpwKEEuUGcsW0EueGosQS5kRSxBLlpBLEEuZFQsQS5QcSxBLmVFLEEuVjZdKQpxKEEu
+aU0sQS5rUykKcChBLkF5LFtBLlZzLEEuRnQsQS55SCxBLmRhLEEub1EsQS52cixBLnJ0LEEuS0YsQS5a
+TCxBLlJULEEucnEsQS5SVyxBLnVPLEEuRXYsQS5WcCxBLnhyLEEuTnosQS5WVyxBLm5ULEEuTlksQS5R
+TF0pCnEoQS5aZixBLlBmKQpxKEEuSmksQS5tMCkKcShBLlh2LEEucFIpCnEoQS5iNixBLlh2KQpxKEEu
+VmosQS5XWSkKcChBLlVrLFtBLkNWLEEuWmksQS5ieV0pCnEoQS53SSxBLmtUKQpwKEEud0ksW0EuVTgs
+QS5vaixBLk14LEEuRTMsQS5HWV0pCnEoQS5LOCxBLlVkKQpxKEEudHUsQS5TaCkKcShBLnU1LEEuWmkp
+CnAoQS5BVCxbQS5iSixBLmVZXSkKcShBLnFlLEEuRG4pCnAoQS5EMCxbQS5LVixBLndhLEEuSzUsQS5D
+bV0pCnAoQS5LVixbQS5jdixBLm54LEEuUUYsQS5DUV0pCnAoQS5jdixbQS5xRSxBLmhpXSkKcChBLnFF
+LFtBLkdoLEEuZlksQS5yWixBLlFQLEEuaDQsQS5TTixBLmxwLEEuVGIsQS5JdixBLldQLEEueVldKQpx
+KEEub0osQS5ZOCkKcShBLmhILEEuQXopCnEoQS5WYixBLlFGKQpxKEEuZkosQS53YSkKcChBLmVhLFtB
+Lnc2LEEuZXddKQpxKEEuQWosQS53NikKcShBLkFyLEEubnEpCnEoQS5CSCxBLkFyKQpxKEEudzQsQS5J
+QikKcShBLnVmLEEudEQpCnEoQS5yaCxBLnVmKQpxKEEuaTcsQS5jZikKcShBLkFzLEEuVmopCnAoQS5B
+cyxbQS5JNCxBLktlXSkKcShBLlJPLEEucWgpCnEoQS5DcSxBLlJPKQpxKEEueEMsQS5NTykKcShBLmN0
+LEEubTYpCnEoQS5CZixBLmlKKQpwKEEuRTQsW0EucjcsQS52Z10pCnEoQS5UeixBLnZnKQpxKEEubmQs
+QS5oaSkKcChBLkQ4LFtBLnZ0LEEuY0RdKQpwKEEuY2ssW0EuTzksQS5HYixBLkg3XSkKcShBLmZ2LEEu
+ekwpCnAoQS5mdixbQS5PRixBLnJ1LEEuSVZdKQpzKEEudzIsQS5SZSkKcyhBLlFDLEEubEQpCnMoQS5S
+RyxBLmxEKQpzKEEuVlAsQS5TVSkKcyhBLldCLEEubEQpCnMoQS5aRyxBLlNVKQpzKEEublksQS5sRCkK
+cyhBLldZLEEubGYpCnMoQS5SVSxBLktQKQpzKEEucFIsQS5sZikKcyhBLlk4LEEuaWQpCnMoQS5ucSxB
+LmxEKQpzKEEuQXIsQS5HbSkKcyhBLnRELEEubEQpCnMoQS51ZixBLkdtKQpyKEEudmcsQS5sRCl9KSgp
+CnZhciB2PXt0eXBlVW5pdmVyc2U6e2VDOm5ldyBNYXAoKSx0Ujp7fSxlVDp7fSx0UFY6e30sc0VBOltd
+fSxtYW5nbGVkR2xvYmFsTmFtZXM6e0lqOiJpbnQiLENQOiJkb3VibGUiLFpaOiJudW0iLHFVOiJTdHJp
+bmciLGEyOiJib29sIixjODoiTnVsbCIsek06Ikxpc3QifSxtYW5nbGVkTmFtZXM6e30sdHlwZXM6WyJ+
+KCkiLCJ+KEFqKSIsInFVKHFVKSIsIkAoQCkiLCJ+KH4oKSkiLCJhMihxVSkiLCJiODx+PihBaikiLCJ+
+KHFVLHFVKSIsIn4oTWg/LE1oPykiLCJAKCkiLCJ+KHFVLEApIiwiYzgoZWEpIiwifihPbDxxVT4pIiwi
+YzgoQCkiLCJjOCgpIiwiYTIoY3YscVUscVUsSlEpIiwiYTIoa0YpIiwifihjdikiLCJ+KG42LHFVLElq
+KSIsIn4ocVUsSWo/KSIsIklqKElqLElqKSIsIkAocVUpIiwifihxVSxxVT8pIiwibjYoQCxAKSIsIn4o
+cVUsSWopIiwiYTIoS1YpIiwiWjA8cVUscVU+KFowPHFVLHFVPixxVSkiLCJ+KGVhKSIsIn4oR0QsQCki
+LCJ2czxAPihAKSIsIn4oS1YsS1Y/KSIsIn4oQCxAKSIsImM4KEAsQCkiLCJhMihPbDxxVT4pIiwiYzgo
+TWgsR3opIiwiTWg/KEApIiwiVHo8QD4oQCkiLCJFNChAKSIsIkxMKEApIiwiWjA8cVUsTWg/PihMTCki
+LCJ+KE1oW0d6P10pIiwiYzgofigpKSIsImM4KFowPHFVLE1oPz4/KSIsImM4KE1oLEApIiwicjcoQCki
+LCJ+KGV3KSIsInFVKFowPEAsQD4pIiwifihJaixAKSIsImEyKEg3KSIsInFVKHFVPykiLCJ+KEApIiwi
+QChALHFVKSIsIk1oPyhNaD8pIiwiYzgoQCxHeikiXSxpbnRlcmNlcHRvcnNCeVRhZzpudWxsLGxlYWZU
+YWdzOm51bGwsYXJyYXlSdGk6U3ltYm9sKCIkdGkiKX0KQS54Yih2LnR5cGVVbml2ZXJzZSxKU09OLnBh
+cnNlKCd7ImlDIjoidTAiLCJrZCI6InUwIiwiYzUiOiJ1MCIsInJ4IjoiZWEiLCJlNSI6ImVhIiwiWTAi
+OiJoaSIsInRwIjoiaGkiLCJHOCI6ImV3IiwiTXIiOiJxRSIsImVMIjoicUUiLCJJMCI6IktWIiwiaHMi
+OiJLViIsIlhnIjoiUUYiLCJuciI6IkFqIiwieTQiOiJ3NiIsImROIjoiQ20iLCJ4YyI6Im54Iiwia0oi
+OiJueCIsInpVIjoiRGciLCJkZiI6IkVUIiwieUUiOnsiYTIiOltdfSwid2UiOnsiYzgiOltdfSwidTAi
+Onsidm0iOltdfSwiamQiOnsiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIlBvIjp7Impk
+IjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm0xIjp7IkFuIjpbIjEiXX0s
+InFJIjp7IkNQIjpbXSwiWloiOltdfSwiYlUiOnsiQ1AiOltdLCJJaiI6W10sIlpaIjpbXX0sImtEIjp7
+IkNQIjpbXSwiWloiOltdfSwiRHIiOnsicVUiOltdLCJ2WCI6W119LCJCUiI6eyJjWCI6WyIyIl19LCJl
+VCI6eyJBbiI6WyIyIl19LCJaeSI6eyJCUiI6WyIxIiwiMiJdLCJjWCI6WyIyIl0sImNYLkUiOiIyIn0s
+Im9sIjp7Ilp5IjpbIjEiLCIyIl0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdLCJj
+WC5FIjoiMiJ9LCJVcSI6eyJsRCI6WyIyIl0sInpNIjpbIjIiXSwiQlIiOlsiMSIsIjIiXSwiYlEiOlsi
+MiJdLCJjWCI6WyIyIl19LCJqViI6eyJVcSI6WyIxIiwiMiJdLCJsRCI6WyIyIl0sInpNIjpbIjIiXSwi
+QlIiOlsiMSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIyIl0sImxELkUiOiIyIiwiY1guRSI6IjIifSwi
+YyI6eyJYUyI6W119LCJxaiI6eyJsRCI6WyJJaiJdLCJSZSI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJiUSI6
+WyJJaiJdLCJjWCI6WyJJaiJdLCJsRC5FIjoiSWoiLCJSZS5FIjoiSWoifSwiYlEiOnsiY1giOlsiMSJd
+fSwiYUwiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJuSCI6eyJhTCI6WyIxIl0sImJRIjpbIjEiXSwi
+Y1giOlsiMSJdLCJhTC5FIjoiMSIsImNYLkUiOiIxIn0sImE3Ijp7IkFuIjpbIjEiXX0sImkxIjp7ImNY
+IjpbIjIiXSwiY1guRSI6IjIifSwieHkiOnsiaTEiOlsiMSIsIjIiXSwiYlEiOlsiMiJdLCJjWCI6WyIy
+Il0sImNYLkUiOiIyIn0sIk1IIjp7IkFuIjpbIjIiXX0sImxKIjp7ImFMIjpbIjIiXSwiYlEiOlsiMiJd
+LCJjWCI6WyIyIl0sImFMLkUiOiIyIiwiY1guRSI6IjIifSwiVTUiOnsiY1giOlsiMSJdLCJjWC5FIjoi
+MSJ9LCJTTyI6eyJBbiI6WyIxIl19LCJBTSI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sImQ1Ijp7IkFN
+IjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIlUxIjp7IkFuIjpbIjEiXX0s
+Ik1CIjp7ImJRIjpbIjEiXSwiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJGdSI6eyJBbiI6WyIxIl19LCJ1
+NiI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkpCIjp7IkFuIjpbIjEiXX0sIncyIjp7ImxEIjpbIjEi
+XSwiUmUiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwid3YiOnsiR0QiOltd
+fSwiUEQiOnsiR2oiOlsiMSIsIjIiXSwiUlUiOlsiMSIsIjIiXSwiUG4iOlsiMSIsIjIiXSwiS1AiOlsi
+MSIsIjIiXSwiWjAiOlsiMSIsIjIiXX0sIldVIjp7IlowIjpbIjEiLCIyIl19LCJMUCI6eyJXVSI6WyIx
+IiwiMiJdLCJaMCI6WyIxIiwiMiJdfSwiWFIiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJMSSI6eyJ2
+USI6W119LCJXMCI6eyJFeiI6W10sIlhTIjpbXX0sImF6Ijp7IlhTIjpbXX0sInZWIjp7IlhTIjpbXX0s
+InRlIjp7IlJ6IjpbXX0sIlhPIjp7Ikd6IjpbXX0sIlRwIjp7IkVIIjpbXX0sIkF5Ijp7IkVIIjpbXX0s
+IkUxIjp7IkVIIjpbXX0sImxjIjp7IkVIIjpbXX0sInp4Ijp7IkVIIjpbXX0sInJUIjp7IkVIIjpbXX0s
+IkVxIjp7IlhTIjpbXX0sImtZIjp7IlhTIjpbXX0sIk41Ijp7IllrIjpbIjEiLCIyIl0sIkZvIjpbIjEi
+LCIyIl0sIlowIjpbIjEiLCIyIl0sIllrLksiOiIxIiwiWWsuViI6IjIifSwiaTUiOnsiYlEiOlsiMSJd
+LCJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIk42Ijp7IkFuIjpbIjEiXX0sIlZSIjp7IndMIjpbXSwidlgi
+OltdfSwiRUsiOnsiaWIiOltdLCJPZCI6W119LCJLVyI6eyJjWCI6WyJpYiJdLCJjWC5FIjoiaWIifSwi
+UGIiOnsiQW4iOlsiaWIiXX0sInRRIjp7Ik9kIjpbXX0sInVuIjp7ImNYIjpbIk9kIl0sImNYLkUiOiJP
+ZCJ9LCJTZCI6eyJBbiI6WyJPZCJdfSwiRVQiOnsiQVMiOltdfSwiTFoiOnsiWGoiOlsiMSJdLCJFVCI6
+W10sIkFTIjpbXX0sIkRnIjp7ImxEIjpbIkNQIl0sIlhqIjpbIkNQIl0sInpNIjpbIkNQIl0sIkVUIjpb
+XSwiYlEiOlsiQ1AiXSwiQVMiOltdLCJjWCI6WyJDUCJdLCJTVSI6WyJDUCJdLCJsRC5FIjoiQ1AifSwi
+UGciOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJd
+LCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl19LCJ4aiI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJ
+aiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1Ui
+OlsiSWoiXSwibEQuRSI6IklqIn0sImRFIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklq
+Il0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5F
+IjoiSWoifSwiWkEiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJi
+USI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJkVCI6
+eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFT
+IjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sIlBxIjp7ImxEIjpbIklqIl0s
+IlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJ
+aiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiZUUiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwi
+ek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklq
+Il0sImxELkUiOiJJaiJ9LCJWNiI6eyJsRCI6WyJJaiJdLCJuNiI6W10sIlhqIjpbIklqIl0sInpNIjpb
+IklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJs
+RC5FIjoiSWoifSwia1MiOnsiWFMiOltdfSwiaU0iOnsiRXoiOltdLCJYUyI6W119LCJ2cyI6eyJiOCI6
+WyIxIl19LCJHViI6eyJBbiI6WyIxIl19LCJxNCI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIkN3Ijp7
+IlhTIjpbXX0sIlpmIjp7IlBmIjpbIjEiXX0sIm0wIjp7IlFtIjpbXX0sIkppIjp7Im0wIjpbXSwiUW0i
+OltdfSwiYjYiOnsibGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJsZi5F
+IjoiMSJ9LCJsbSI6eyJBbiI6WyIxIl19LCJtVyI6eyJjWCI6WyIxIl19LCJ1eSI6eyJsRCI6WyIxIl0s
+InpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJpbCI6eyJZayI6WyIxIiwiMiJdLCJaMCI6
+WyIxIiwiMiJdfSwiWWsiOnsiWjAiOlsiMSIsIjIiXX0sIlBuIjp7IlowIjpbIjEiLCIyIl19LCJHaiI6
+eyJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJd
+fSwiVmoiOnsibGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwiWHYiOnsi
+bGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwidXciOnsiWWsiOlsicVUi
+LCJAIl0sIlowIjpbInFVIiwiQCJdLCJZay5LIjoicVUiLCJZay5WIjoiQCJ9LCJpOCI6eyJhTCI6WyJx
+VSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJhTC5FIjoicVUiLCJjWC5FIjoicVUifSwiQ1YiOnsi
+VWsiOlsiek08SWo+IiwicVUiXSwiVWsuUyI6InpNPElqPiJ9LCJVOCI6eyJ3SSI6WyJ6TTxJaj4iLCJx
+VSJdfSwiWmkiOnsiVWsiOlsicVUiLCJ6TTxJaj4iXX0sIlVkIjp7IlhTIjpbXX0sIks4Ijp7IlhTIjpb
+XX0sImJ5Ijp7IlVrIjpbIk1oPyIsInFVIl0sIlVrLlMiOiJNaD8ifSwib2oiOnsid0kiOlsiTWg/Iiwi
+cVUiXX0sIk14Ijp7IndJIjpbInFVIiwiTWg/Il19LCJ1NSI6eyJVayI6WyJxVSIsInpNPElqPiJdLCJV
+ay5TIjoicVUifSwiRTMiOnsid0kiOlsicVUiLCJ6TTxJaj4iXX0sIkdZIjp7IndJIjpbInpNPElqPiIs
+InFVIl19LCJDUCI6eyJaWiI6W119LCJJaiI6eyJaWiI6W119LCJ6TSI6eyJiUSI6WyIxIl0sImNYIjpb
+IjEiXX0sImliIjp7Ik9kIjpbXX0sIk9sIjp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwicVUiOnsidlgi
+OltdfSwiQzYiOnsiWFMiOltdfSwiRXoiOnsiWFMiOltdfSwiRiI6eyJYUyI6W119LCJBVCI6eyJYUyI6
+W119LCJiSiI6eyJYUyI6W119LCJlWSI6eyJYUyI6W119LCJtcCI6eyJYUyI6W119LCJ1YiI6eyJYUyI6
+W119LCJkcyI6eyJYUyI6W119LCJsaiI6eyJYUyI6W119LCJVViI6eyJYUyI6W119LCJrNSI6eyJYUyI6
+W119LCJLWSI6eyJYUyI6W119LCJwIjp7IlhTIjpbXX0sIkNEIjp7IlJ6IjpbXX0sImFFIjp7IlJ6Ijpb
+XX0sIlpkIjp7Ikd6IjpbXX0sIk0iOnsiQkwiOltdfSwiRG4iOnsiaUQiOltdfSwiVWYiOnsiaUQiOltd
+fSwicWUiOnsiaUQiOltdfSwiY3YiOnsiS1YiOltdLCJEMCI6W119LCJmSiI6eyJEMCI6W119LCJBaiI6
+eyJlYSI6W119LCJLViI6eyJEMCI6W119LCJldyI6eyJlYSI6W119LCJKUSI6eyJrRiI6W119LCJxRSI6
+eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiR2giOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sImZZ
+Ijp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJyWiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwi
+UVAiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIm54Ijp7IktWIjpbXSwiRDAiOltdfSwiUUYiOnsi
+S1YiOltdLCJEMCI6W119LCJJQiI6eyJ0biI6WyJaWiJdfSwid3oiOnsibEQiOlsiMSJdLCJ6TSI6WyIx
+Il0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJoSCI6eyJBeiI6W119LCJoNCI6eyJj
+diI6W10sIktWIjpbXSwiRDAiOltdfSwiVmIiOnsiS1YiOltdLCJEMCI6W119LCJ3YSI6eyJEMCI6W119
+LCJlNyI6eyJsRCI6WyJLViJdLCJ6TSI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJLViJdLCJsRC5F
+IjoiS1YifSwiQkgiOnsibEQiOlsiS1YiXSwiR20iOlsiS1YiXSwiek0iOlsiS1YiXSwiWGoiOlsiS1Yi
+XSwiYlEiOlsiS1YiXSwiY1giOlsiS1YiXSwibEQuRSI6IktWIiwiR20uRSI6IktWIn0sIlNOIjp7ImN2
+IjpbXSwiS1YiOltdLCJEMCI6W119LCJscCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiVGIiOnsi
+Y3YiOltdLCJLViI6W10sIkQwIjpbXX0sIkl2Ijp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJXUCI6
+eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwieVkiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sInc2
+Ijp7ImVhIjpbXX0sIks1Ijp7InY2IjpbXSwiRDAiOltdfSwiQ20iOnsiRDAiOltdfSwiQ1EiOnsiS1Yi
+OltdLCJEMCI6W119LCJ3NCI6eyJ0biI6WyJaWiJdfSwicmgiOnsibEQiOlsiS1YiXSwiR20iOlsiS1Yi
+XSwiek0iOlsiS1YiXSwiWGoiOlsiS1YiXSwiYlEiOlsiS1YiXSwiY1giOlsiS1YiXSwibEQuRSI6IktW
+IiwiR20uRSI6IktWIn0sImNmIjp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdfSwiaTci
+OnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJxVSJ9
+LCJTeSI6eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsuViI6
+InFVIn0sIkk0Ijp7ImxmIjpbInFVIl0sIk9sIjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0s
+ImxmLkUiOiJxVSJ9LCJSTyI6eyJxaCI6WyIxIl19LCJDcSI6eyJSTyI6WyIxIl0sInFoIjpbIjEiXX0s
+InhDIjp7Ik1PIjpbIjEiXX0sInZEIjp7ImtGIjpbXX0sIm02Ijp7ImtGIjpbXX0sImN0Ijp7ImtGIjpb
+XX0sIk93Ijp7ImtGIjpbXX0sIlc5Ijp7IkFuIjpbIjEiXX0sImRXIjp7InY2IjpbXSwiRDAiOltdfSwi
+bWsiOnsieTAiOltdfSwiS28iOnsib24iOltdfSwiQXMiOnsibGYiOlsicVUiXSwiT2wiOlsicVUiXSwi
+YlEiOlsicVUiXSwiY1giOlsicVUiXX0sInI3Ijp7IkU0IjpbXX0sIlR6Ijp7ImxEIjpbIjEiXSwiek0i
+OlsiMSJdLCJiUSI6WyIxIl0sIkU0IjpbXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJuZCI6eyJoaSI6
+W10sImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJLZSI6eyJsZiI6WyJxVSJdLCJPbCI6WyJxVSJdLCJi
+USI6WyJxVSJdLCJjWCI6WyJxVSJdLCJsZi5FIjoicVUifSwiaGkiOnsiY3YiOltdLCJLViI6W10sIkQw
+IjpbXX0sIlFXIjp7IlhTIjpbXSwiUnoiOltdfSwiWEEiOnsia0YiOltdfSwidnQiOnsiRDgiOltdfSwi
+Y0QiOnsiRDgiOltdfSwiZHYiOnsiUnoiOltdfSwiT0YiOnsiZnYiOltdfSwicnUiOnsiZnYiOltdfSwi
+SVYiOnsiZnYiOltdfSwibjYiOnsiek0iOlsiSWoiXSwiYlEiOlsiSWoiXSwiY1giOlsiSWoiXSwiQVMi
+OltdfX0nKSkKQS5GRih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNlKCd7IncyIjoxLCJRQyI6MiwiTFoi
+OjEsImtUIjoyLCJtVyI6MSwidXkiOjEsImlsIjoyLCJWaiI6MSwiWHYiOjEsIm5ZIjoxLCJXWSI6MSwi
+cFIiOjEsInZnIjoxfScpKQp2YXIgdT17bDoiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBh
+IFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50IixpOiJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0
+aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiLGo6IkNhbm5vdCBleHRyYWN0IGEgbm9u
+LVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhvcml0eSIsYzoiRXJy
+b3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0IG9yIG9uZSBPYmplY3QgYW5kIGEgU3RhY2tU
+cmFjZSBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgZnV0dXJl
+J3MgdHlwZSIsZDoiYXJlYS1hbmFseXplcixhbmFseXplci1ubmJkLW1pZ3JhdGlvbix0eXBlLWJ1ZyJ9
+CnZhciB0PShmdW5jdGlvbiBydGlpKCl7dmFyIHM9QS5OMApyZXR1cm57YnE6cygiR2giKSxuOnMoIkN3
+IiksY1I6cygicloiKSx3OnMoIkF6IikscjpzKCJRUCIpLGdGOnMoIlBEPEdELEA+IiksVTpzKCJiUTxA
+PiIpLGg6cygiY3YiKSx1OnMoIlhTIiksQjpzKCJlYSIpLGc4OnMoIlJ6IiksYzg6cygiaEgiKSxZOnMo
+IkVIIiksaTpzKCJiODxAPiIpLEo6cygiTEwiKSxncDpzKCJINyIpLHg6cygiU2ciKSxvOnMoInZRIiks
+ZWg6cygiY1g8S1Y+IiksTzpzKCJjWDxxVT4iKSxrOnMoImNYPEA+IiksZkE6cygiamQ8U2U+IiksZ2k6
+cygiamQ8ajg+IiksZDpzKCJqZDxaMDxxVSxNaD8+PiIpLGZoOnMoImpkPEQ4PiIpLEQ6cygiamQ8a0Y+
+IiksczpzKCJqZDxxVT4iKSxoaDpzKCJqZDx5RD4iKSxhSjpzKCJqZDx3Yj4iKSxnTjpzKCJqZDxuNj4i
+KSxiOnMoImpkPEA+IiksdDpzKCJqZDxJaj4iKSxkNDpzKCJqZDxxVT8+IiksVDpzKCJ3ZSIpLGVIOnMo
+InZtIiksRTpzKCJjNSIpLGFVOnMoIlhqPEA+IiksYW06cygiVHo8QD4iKSxlbzpzKCJONTxHRCxAPiIp
+LGR6OnMoImhGIiksZjQ6cygiek08ajg+IiksYVM6cygiek08WjA8cVUsTWg/Pj4iKSxldzpzKCJ6TTxN
+aD4iKSxhOnMoInpNPHFVPiIpLGo6cygiek08QD4iKSxMOnMoInpNPElqPiIpLFc6cygiek08TWg/PiIp
+LEY6cygidTgiKSxoNjpzKCJaMDxxVSxNaD4iKSxJOnMoIlowPHFVLHFVPiIpLGY6cygiWjA8QCxAPiIp
+LEc6cygiWjA8cVUsTWg/PiIpLGR2OnMoImxKPHFVLHFVPiIpLGRvOnMoImxKPHFVLEA+IiksVjpzKCJB
+aiIpLGRFOnMoIkVUIiksQTpzKCJLViIpLGY2OnMoImtGIiksUDpzKCJjOCIpLEs6cygiTWgiKSxwOnMo
+ImV3IikscTpzKCJ0bjxaWj4iKSxmdjpzKCJ3TCIpLGN6OnMoImliIiksYU86cygibmQiKSxDOnMoIk9s
+PHFVPiIpLGw6cygiR3oiKSxOOnMoInFVIiksZEc6cygicVUocVUpIiksZzc6cygiaGkiKSxmbzpzKCJH
+RCIpLGFXOnMoInlZIiksZUs6cygiRXoiKSxhazpzKCJBUyIpLGdjOnMoIm42IiksYkk6cygia2QiKSxk
+dzpzKCJHajxxVSxxVT4iKSxkRDpzKCJpRCIpLGVKOnMoInU2PHFVPiIpLGc0OnMoIks1IiksY2k6cygi
+djYiKSxnMjpzKCJDbSIpLGJqOnMoIlpmPGZKPiIpLGg5OnMoIkNRIiksYWM6cygiZTciKSxROnMoIkNx
+PEFqPiIpLFI6cygid3o8Y3Y+IiksYW86cygidnM8Zko+IiksYzpzKCJ2czxAPiIpLGZKOnMoInZzPElq
+PiIpLGNyOnMoIkpRIikseTpzKCJhMiIpLGFsOnMoImEyKE1oKSIpLGdSOnMoIkNQIiksejpzKCJAIiks
+Zk86cygiQCgpIiksdjpzKCJAKE1oKSIpLG06cygiQChNaCxHeikiKSxiVTpzKCJAKE9sPHFVPikiKSxk
+TzpzKCJAKHFVKSIpLGI4OnMoIkAoQCxAKSIpLFM6cygiSWoiKSxhdzpzKCIwJioiKSxfOnMoIk1oKiIp
+LGNoOnMoIkQwPyIpLGJHOnMoImI4PGM4Pj8iKSxlczpzKCJFND8iKSxiTTpzKCJ6TTxAPj8iKSxncTpz
+KCJ6TTxNaD8+PyIpLGM5OnMoIlowPHFVLEA+PyIpLGZuOnMoIlowPHFVLE1oPz4/IiksWDpzKCJNaD8i
+KSxkazpzKCJxVT8iKSxlOnMoIkZlPEAsQD4/IiksZzpzKCJibj8iKSxiNzpzKCJhMihNaCk/IiksYnc6
+cygiQChlYSk/IiksZlY6cygiTWg/KE1oPyxNaD8pPyIpLGRBOnMoIk1oPyhAKT8iKSxaOnMoIn4oKT8i
+KSxneDpzKCJ+KGV3KT8iKSxkaTpzKCJaWiIpLEg6cygifiIpLE06cygifigpIiksZUE6cygifihxVSxx
+VSkiKSxjQTpzKCJ+KHFVLEApIil9fSkoKTsoZnVuY3Rpb24gY29uc3RhbnRzKCl7dmFyIHM9aHVua0hl
+bHBlcnMubWFrZUNvbnN0TGlzdApCLnhuPUEuR2gucHJvdG90eXBlCkIuUlk9QS5RUC5wcm90b3R5cGUK
+Qi5tSD1BLmFlLnByb3RvdHlwZQpCLkJaPUEuVmIucHJvdG90eXBlCkIuRHQ9QS5mSi5wcm90b3R5cGUK
+Qi5Paz1KLkd2LnByb3RvdHlwZQpCLk5tPUouamQucHJvdG90eXBlCkIuam49Si5iVS5wcm90b3R5cGUK
+Qi5DRD1KLnFJLnByb3RvdHlwZQpCLnhCPUouRHIucHJvdG90eXBlCkIuREc9Si5jNS5wcm90b3R5cGUK
+Qi5VYj1KLk1GLnByb3RvdHlwZQpCLkV4PUEudTgucHJvdG90eXBlCkIuTkE9QS5WNi5wcm90b3R5cGUK
+Qi50NT1BLkJILnByb3RvdHlwZQpCLkx0PUEuU04ucHJvdG90eXBlCkIuWlE9Si5pQy5wcm90b3R5cGUK
+Qi5JZT1BLlRiLnByb3RvdHlwZQpCLnZCPUoua2QucHJvdG90eXBlCkIub2w9QS5LNS5wcm90b3R5cGUK
+Qi55OD1uZXcgQS5VOCgpCkIuaDk9bmV3IEEuQ1YoKQpCLkd3PW5ldyBBLkZ1KEEuTjAoIkZ1PDAmPiIp
+KQpCLk80PWZ1bmN0aW9uIGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIgcyA9IE9iamVjdC5wcm90b3R5
+cGUudG9TdHJpbmcuY2FsbChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsK
+fQpCLllxPWZ1bmN0aW9uKCkgewogIHZhciB0b1N0cmluZ0Z1bmN0aW9uID0gT2JqZWN0LnByb3RvdHlw
+ZS50b1N0cmluZzsKICBmdW5jdGlvbiBnZXRUYWcobykgewogICAgdmFyIHMgPSB0b1N0cmluZ0Z1bmN0
+aW9uLmNhbGwobyk7CiAgICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKICB9CiAg
+ZnVuY3Rpb24gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZykgewogICAgaWYgKC9eSFRNTFtBLVpdLipF
+bGVtZW50JC8udGVzdCh0YWcpKSB7CiAgICAgIHZhciBuYW1lID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxs
+KG9iamVjdCk7CiAgICAgIGlmIChuYW1lID09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gbnVsbDsK
+ICAgICAgcmV0dXJuICJIVE1MRWxlbWVudCI7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdldFVua25vd25U
+YWdHZW5lcmljQnJvd3NlcihvYmplY3QsIHRhZykgewogICAgaWYgKHNlbGYuSFRNTEVsZW1lbnQgJiYg
+b2JqZWN0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgcmV0
+dXJuIGdldFVua25vd25UYWcob2JqZWN0LCB0YWcpOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JU
+YWcodGFnKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7
+CiAgICBpZiAodHlwZW9mIHdpbmRvd1t0YWddID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAg
+IHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAh
+PSAiZnVuY3Rpb24iKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7
+CiAgfQogIGZ1bmN0aW9uIGRpc2NyaW1pbmF0b3IodGFnKSB7IHJldHVybiBudWxsOyB9CiAgdmFyIGlz
+QnJvd3NlciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCI7CiAgcmV0dXJuIHsKICAgIGdldFRh
+ZzogZ2V0VGFnLAogICAgZ2V0VW5rbm93blRhZzogaXNCcm93c2VyID8gZ2V0VW5rbm93blRhZ0dlbmVy
+aWNCcm93c2VyIDogZ2V0VW5rbm93blRhZywKICAgIHByb3RvdHlwZUZvclRhZzogcHJvdG90eXBlRm9y
+VGFnLAogICAgZGlzY3JpbWluYXRvcjogZGlzY3JpbWluYXRvciB9Owp9CkIud2I9ZnVuY3Rpb24oZ2V0
+VGFnRmFsbGJhY2spIHsKICByZXR1cm4gZnVuY3Rpb24oaG9va3MpIHsKICAgIGlmICh0eXBlb2YgbmF2
+aWdhdG9yICE9ICJvYmplY3QiKSByZXR1cm4gaG9va3M7CiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNl
+ckFnZW50OwogICAgaWYgKHVhLmluZGV4T2YoIkR1bXBSZW5kZXJUcmVlIikgPj0gMCkgcmV0dXJuIGhv
+b2tzOwogICAgaWYgKHVhLmluZGV4T2YoIkNocm9tZSIpID49IDApIHsKICAgICAgZnVuY3Rpb24gY29u
+ZmlybShwKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT0gIm9iamVjdCIgJiYgd2luZG93
+W3BdICYmIHdpbmRvd1twXS5uYW1lID09IHA7CiAgICAgIH0KICAgICAgaWYgKGNvbmZpcm0oIldpbmRv
+dyIpICYmIGNvbmZpcm0oIkhUTUxFbGVtZW50IikpIHJldHVybiBob29rczsKICAgIH0KICAgIGhvb2tz
+LmdldFRhZyA9IGdldFRhZ0ZhbGxiYWNrOwogIH07Cn0KQi5LVT1mdW5jdGlvbihob29rcykgewogIGlm
+ICh0eXBlb2YgZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJmdW5jdGlvbiIpIHJldHVybiBo
+b29rczsKICBob29rcy5nZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcoaG9va3MuZ2V0
+VGFnKTsKfQpCLmZRPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsK
+ICB2YXIgcHJvdG90eXBlRm9yVGFnID0gaG9va3MucHJvdG90eXBlRm9yVGFnOwogIGZ1bmN0aW9uIGdl
+dFRhZ0ZpeGVkKG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICBpZiAodGFnID09ICJEb2N1
+bWVudCIpIHsKICAgICAgaWYgKCEhby54bWxWZXJzaW9uKSByZXR1cm4gIiFEb2N1bWVudCI7CiAgICAg
+IHJldHVybiAiIUhUTUxEb2N1bWVudCI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlv
+biBwcm90b3R5cGVGb3JUYWdGaXhlZCh0YWcpIHsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgcmV0
+dXJuIG51bGw7CiAgICByZXR1cm4gcHJvdG90eXBlRm9yVGFnKHRhZyk7CiAgfQogIGhvb2tzLmdldFRh
+ZyA9IGdldFRhZ0ZpeGVkOwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0Zp
+eGVkOwp9CkIuZGs9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmln
+YXRvciA9PSAib2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50
+LmluZGV4T2YoIkZpcmVmb3giKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29r
+cy5nZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50
+IiwKICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJHZW9HZW9sb2NhdGlvbiI6ICJH
+ZW9sb2NhdGlvbiIsCiAgICAiTG9jYXRpb24iOiAiIUxvY2F0aW9uIiwKICAgICJXb3JrZXJNZXNzYWdl
+RXZlbnQiOiAiTWVzc2FnZUV2ZW50IiwKICAgICJYTUxEb2N1bWVudCI6ICIhRG9jdW1lbnQifTsKICBm
+dW5jdGlvbiBnZXRUYWdGaXJlZm94KG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICByZXR1
+cm4gcXVpY2tNYXBbdGFnXSB8fCB0YWc7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpcmVmb3g7
+Cn0KQi54aT1mdW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9y
+ID09ICJvYmplY3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5k
+ZXhPZigiVHJpZGVudC8iKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5n
+ZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwK
+ICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1MRERFbGVtZW50IjogIkhUTUxF
+bGVtZW50IiwKICAgICJIVE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MUGhyYXNl
+RWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAiR2VvcG9zaXRpb24iCiAgfTsK
+ICBmdW5jdGlvbiBnZXRUYWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgdmFyIG5l
+d1RhZyA9IHF1aWNrTWFwW3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1cm4gbmV3VGFnOwogICAgaWYg
+KHRhZyA9PSAiT2JqZWN0IikgewogICAgICBpZiAod2luZG93LkRhdGFWaWV3ICYmIChvIGluc3RhbmNl
+b2Ygd2luZG93LkRhdGFWaWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAgICB9CiAgICByZXR1cm4gdGFn
+OwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsKICAgIHZhciBjb25zdHJ1Y3Rv
+ciA9IHdpbmRvd1t0YWddOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHJldHVybiBudWxsOwog
+ICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFn
+SUU7CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnSUU7Cn0KQi5pNz1mdW5j
+dGlvbihob29rcykgeyByZXR1cm4gaG9va3M7IH0KCkIuQ3Q9bmV3IEEuYnkoKQpCLkVxPW5ldyBBLms1
+KCkKQi56dD1uZXcgQS5IYigpCkIueE09bmV3IEEudTUoKQpCLlFrPW5ldyBBLkUzKCkKQi5Odj1uZXcg
+QS5rcigpCkIuTlU9bmV3IEEuSmkoKQpCLnBkPW5ldyBBLlpkKCkKQi5BMz1uZXcgQS5NeChudWxsKQpC
+Lm5YPW5ldyBBLm9qKG51bGwpCkIuYWs9QS5RSShzKFswLDAsMzI3NzYsMzM3OTIsMSwxMDI0MCwwLDBd
+KSx0LnQpCkIuY209QS5RSShzKFsiKjo6Y2xhc3MiLCIqOjpkaXIiLCIqOjpkcmFnZ2FibGUiLCIqOjpo
+aWRkZW4iLCIqOjppZCIsIio6OmluZXJ0IiwiKjo6aXRlbXByb3AiLCIqOjppdGVtcmVmIiwiKjo6aXRl
+bXNjb3BlIiwiKjo6bGFuZyIsIio6OnNwZWxsY2hlY2siLCIqOjp0aXRsZSIsIio6OnRyYW5zbGF0ZSIs
+IkE6OmFjY2Vzc2tleSIsIkE6OmNvb3JkcyIsIkE6OmhyZWZsYW5nIiwiQTo6bmFtZSIsIkE6OnNoYXBl
+IiwiQTo6dGFiaW5kZXgiLCJBOjp0YXJnZXQiLCJBOjp0eXBlIiwiQVJFQTo6YWNjZXNza2V5IiwiQVJF
+QTo6YWx0IiwiQVJFQTo6Y29vcmRzIiwiQVJFQTo6bm9ocmVmIiwiQVJFQTo6c2hhcGUiLCJBUkVBOjp0
+YWJpbmRleCIsIkFSRUE6OnRhcmdldCIsIkFVRElPOjpjb250cm9scyIsIkFVRElPOjpsb29wIiwiQVVE
+SU86Om1lZGlhZ3JvdXAiLCJBVURJTzo6bXV0ZWQiLCJBVURJTzo6cHJlbG9hZCIsIkJETzo6ZGlyIiwi
+Qk9EWTo6YWxpbmsiLCJCT0RZOjpiZ2NvbG9yIiwiQk9EWTo6bGluayIsIkJPRFk6OnRleHQiLCJCT0RZ
+Ojp2bGluayIsIkJSOjpjbGVhciIsIkJVVFRPTjo6YWNjZXNza2V5IiwiQlVUVE9OOjpkaXNhYmxlZCIs
+IkJVVFRPTjo6bmFtZSIsIkJVVFRPTjo6dGFiaW5kZXgiLCJCVVRUT046OnR5cGUiLCJCVVRUT046OnZh
+bHVlIiwiQ0FOVkFTOjpoZWlnaHQiLCJDQU5WQVM6OndpZHRoIiwiQ0FQVElPTjo6YWxpZ24iLCJDT0w6
+OmFsaWduIiwiQ09MOjpjaGFyIiwiQ09MOjpjaGFyb2ZmIiwiQ09MOjpzcGFuIiwiQ09MOjp2YWxpZ24i
+LCJDT0w6OndpZHRoIiwiQ09MR1JPVVA6OmFsaWduIiwiQ09MR1JPVVA6OmNoYXIiLCJDT0xHUk9VUDo6
+Y2hhcm9mZiIsIkNPTEdST1VQOjpzcGFuIiwiQ09MR1JPVVA6OnZhbGlnbiIsIkNPTEdST1VQOjp3aWR0
+aCIsIkNPTU1BTkQ6OmNoZWNrZWQiLCJDT01NQU5EOjpjb21tYW5kIiwiQ09NTUFORDo6ZGlzYWJsZWQi
+LCJDT01NQU5EOjpsYWJlbCIsIkNPTU1BTkQ6OnJhZGlvZ3JvdXAiLCJDT01NQU5EOjp0eXBlIiwiREFU
+QTo6dmFsdWUiLCJERUw6OmRhdGV0aW1lIiwiREVUQUlMUzo6b3BlbiIsIkRJUjo6Y29tcGFjdCIsIkRJ
+Vjo6YWxpZ24iLCJETDo6Y29tcGFjdCIsIkZJRUxEU0VUOjpkaXNhYmxlZCIsIkZPTlQ6OmNvbG9yIiwi
+Rk9OVDo6ZmFjZSIsIkZPTlQ6OnNpemUiLCJGT1JNOjphY2NlcHQiLCJGT1JNOjphdXRvY29tcGxldGUi
+LCJGT1JNOjplbmN0eXBlIiwiRk9STTo6bWV0aG9kIiwiRk9STTo6bmFtZSIsIkZPUk06Om5vdmFsaWRh
+dGUiLCJGT1JNOjp0YXJnZXQiLCJGUkFNRTo6bmFtZSIsIkgxOjphbGlnbiIsIkgyOjphbGlnbiIsIkgz
+OjphbGlnbiIsIkg0OjphbGlnbiIsIkg1OjphbGlnbiIsIkg2OjphbGlnbiIsIkhSOjphbGlnbiIsIkhS
+Ojpub3NoYWRlIiwiSFI6OnNpemUiLCJIUjo6d2lkdGgiLCJIVE1MOjp2ZXJzaW9uIiwiSUZSQU1FOjph
+bGlnbiIsIklGUkFNRTo6ZnJhbWVib3JkZXIiLCJJRlJBTUU6OmhlaWdodCIsIklGUkFNRTo6bWFyZ2lu
+aGVpZ2h0IiwiSUZSQU1FOjptYXJnaW53aWR0aCIsIklGUkFNRTo6d2lkdGgiLCJJTUc6OmFsaWduIiwi
+SU1HOjphbHQiLCJJTUc6OmJvcmRlciIsIklNRzo6aGVpZ2h0IiwiSU1HOjpoc3BhY2UiLCJJTUc6Omlz
+bWFwIiwiSU1HOjpuYW1lIiwiSU1HOjp1c2VtYXAiLCJJTUc6OnZzcGFjZSIsIklNRzo6d2lkdGgiLCJJ
+TlBVVDo6YWNjZXB0IiwiSU5QVVQ6OmFjY2Vzc2tleSIsIklOUFVUOjphbGlnbiIsIklOUFVUOjphbHQi
+LCJJTlBVVDo6YXV0b2NvbXBsZXRlIiwiSU5QVVQ6OmF1dG9mb2N1cyIsIklOUFVUOjpjaGVja2VkIiwi
+SU5QVVQ6OmRpc2FibGVkIiwiSU5QVVQ6OmlucHV0bW9kZSIsIklOUFVUOjppc21hcCIsIklOUFVUOjps
+aXN0IiwiSU5QVVQ6Om1heCIsIklOUFVUOjptYXhsZW5ndGgiLCJJTlBVVDo6bWluIiwiSU5QVVQ6Om11
+bHRpcGxlIiwiSU5QVVQ6Om5hbWUiLCJJTlBVVDo6cGxhY2Vob2xkZXIiLCJJTlBVVDo6cmVhZG9ubHki
+LCJJTlBVVDo6cmVxdWlyZWQiLCJJTlBVVDo6c2l6ZSIsIklOUFVUOjpzdGVwIiwiSU5QVVQ6OnRhYmlu
+ZGV4IiwiSU5QVVQ6OnR5cGUiLCJJTlBVVDo6dXNlbWFwIiwiSU5QVVQ6OnZhbHVlIiwiSU5TOjpkYXRl
+dGltZSIsIktFWUdFTjo6ZGlzYWJsZWQiLCJLRVlHRU46OmtleXR5cGUiLCJLRVlHRU46Om5hbWUiLCJM
+QUJFTDo6YWNjZXNza2V5IiwiTEFCRUw6OmZvciIsIkxFR0VORDo6YWNjZXNza2V5IiwiTEVHRU5EOjph
+bGlnbiIsIkxJOjp0eXBlIiwiTEk6OnZhbHVlIiwiTElOSzo6c2l6ZXMiLCJNQVA6Om5hbWUiLCJNRU5V
+Ojpjb21wYWN0IiwiTUVOVTo6bGFiZWwiLCJNRU5VOjp0eXBlIiwiTUVURVI6OmhpZ2giLCJNRVRFUjo6
+bG93IiwiTUVURVI6Om1heCIsIk1FVEVSOjptaW4iLCJNRVRFUjo6dmFsdWUiLCJPQkpFQ1Q6OnR5cGVt
+dXN0bWF0Y2giLCJPTDo6Y29tcGFjdCIsIk9MOjpyZXZlcnNlZCIsIk9MOjpzdGFydCIsIk9MOjp0eXBl
+IiwiT1BUR1JPVVA6OmRpc2FibGVkIiwiT1BUR1JPVVA6OmxhYmVsIiwiT1BUSU9OOjpkaXNhYmxlZCIs
+Ik9QVElPTjo6bGFiZWwiLCJPUFRJT046OnNlbGVjdGVkIiwiT1BUSU9OOjp2YWx1ZSIsIk9VVFBVVDo6
+Zm9yIiwiT1VUUFVUOjpuYW1lIiwiUDo6YWxpZ24iLCJQUkU6OndpZHRoIiwiUFJPR1JFU1M6Om1heCIs
+IlBST0dSRVNTOjptaW4iLCJQUk9HUkVTUzo6dmFsdWUiLCJTRUxFQ1Q6OmF1dG9jb21wbGV0ZSIsIlNF
+TEVDVDo6ZGlzYWJsZWQiLCJTRUxFQ1Q6Om11bHRpcGxlIiwiU0VMRUNUOjpuYW1lIiwiU0VMRUNUOjpy
+ZXF1aXJlZCIsIlNFTEVDVDo6c2l6ZSIsIlNFTEVDVDo6dGFiaW5kZXgiLCJTT1VSQ0U6OnR5cGUiLCJU
+QUJMRTo6YWxpZ24iLCJUQUJMRTo6Ymdjb2xvciIsIlRBQkxFOjpib3JkZXIiLCJUQUJMRTo6Y2VsbHBh
+ZGRpbmciLCJUQUJMRTo6Y2VsbHNwYWNpbmciLCJUQUJMRTo6ZnJhbWUiLCJUQUJMRTo6cnVsZXMiLCJU
+QUJMRTo6c3VtbWFyeSIsIlRBQkxFOjp3aWR0aCIsIlRCT0RZOjphbGlnbiIsIlRCT0RZOjpjaGFyIiwi
+VEJPRFk6OmNoYXJvZmYiLCJUQk9EWTo6dmFsaWduIiwiVEQ6OmFiYnIiLCJURDo6YWxpZ24iLCJURDo6
+YXhpcyIsIlREOjpiZ2NvbG9yIiwiVEQ6OmNoYXIiLCJURDo6Y2hhcm9mZiIsIlREOjpjb2xzcGFuIiwi
+VEQ6OmhlYWRlcnMiLCJURDo6aGVpZ2h0IiwiVEQ6Om5vd3JhcCIsIlREOjpyb3dzcGFuIiwiVEQ6OnNj
+b3BlIiwiVEQ6OnZhbGlnbiIsIlREOjp3aWR0aCIsIlRFWFRBUkVBOjphY2Nlc3NrZXkiLCJURVhUQVJF
+QTo6YXV0b2NvbXBsZXRlIiwiVEVYVEFSRUE6OmNvbHMiLCJURVhUQVJFQTo6ZGlzYWJsZWQiLCJURVhU
+QVJFQTo6aW5wdXRtb2RlIiwiVEVYVEFSRUE6Om5hbWUiLCJURVhUQVJFQTo6cGxhY2Vob2xkZXIiLCJU
+RVhUQVJFQTo6cmVhZG9ubHkiLCJURVhUQVJFQTo6cmVxdWlyZWQiLCJURVhUQVJFQTo6cm93cyIsIlRF
+WFRBUkVBOjp0YWJpbmRleCIsIlRFWFRBUkVBOjp3cmFwIiwiVEZPT1Q6OmFsaWduIiwiVEZPT1Q6OmNo
+YXIiLCJURk9PVDo6Y2hhcm9mZiIsIlRGT09UOjp2YWxpZ24iLCJUSDo6YWJiciIsIlRIOjphbGlnbiIs
+IlRIOjpheGlzIiwiVEg6OmJnY29sb3IiLCJUSDo6Y2hhciIsIlRIOjpjaGFyb2ZmIiwiVEg6OmNvbHNw
+YW4iLCJUSDo6aGVhZGVycyIsIlRIOjpoZWlnaHQiLCJUSDo6bm93cmFwIiwiVEg6OnJvd3NwYW4iLCJU
+SDo6c2NvcGUiLCJUSDo6dmFsaWduIiwiVEg6OndpZHRoIiwiVEhFQUQ6OmFsaWduIiwiVEhFQUQ6OmNo
+YXIiLCJUSEVBRDo6Y2hhcm9mZiIsIlRIRUFEOjp2YWxpZ24iLCJUUjo6YWxpZ24iLCJUUjo6Ymdjb2xv
+ciIsIlRSOjpjaGFyIiwiVFI6OmNoYXJvZmYiLCJUUjo6dmFsaWduIiwiVFJBQ0s6OmRlZmF1bHQiLCJU
+UkFDSzo6a2luZCIsIlRSQUNLOjpsYWJlbCIsIlRSQUNLOjpzcmNsYW5nIiwiVUw6OmNvbXBhY3QiLCJV
+TDo6dHlwZSIsIlZJREVPOjpjb250cm9scyIsIlZJREVPOjpoZWlnaHQiLCJWSURFTzo6bG9vcCIsIlZJ
+REVPOjptZWRpYWdyb3VwIiwiVklERU86Om11dGVkIiwiVklERU86OnByZWxvYWQiLCJWSURFTzo6d2lk
+dGgiXSksdC5zKQpCLlZDPUEuUUkocyhbMCwwLDY1NDkwLDQ1MDU1LDY1NTM1LDM0ODE1LDY1NTM0LDE4
+NDMxXSksdC50KQpCLm1LPUEuUUkocyhbMCwwLDI2NjI0LDEwMjMsNjU1MzQsMjA0Nyw2NTUzNCwyMDQ3
+XSksdC50KQpCLmN3PW5ldyBBLkdiKDAsImFscmVhZHlNaWdyYXRlZCIpCkIuZGM9bmV3IEEuR2IoMSwi
+aW5kZXRlcm1pbmF0ZSIpCkIuV0Q9bmV3IEEuR2IoMiwibWlncmF0aW5nIikKQi5Yaj1uZXcgQS5HYigz
+LCJvcHRpbmdPdXQiKQpCLldHPUEuUUkocyhbQi5jdyxCLmRjLEIuV0QsQi5Yal0pLEEuTjAoImpkPEdi
+PiIpKQpCLlNxPUEuUUkocyhbIkhFQUQiLCJBUkVBIiwiQkFTRSIsIkJBU0VGT05UIiwiQlIiLCJDT0wi
+LCJDT0xHUk9VUCIsIkVNQkVEIiwiRlJBTUUiLCJGUkFNRVNFVCIsIkhSIiwiSU1BR0UiLCJJTUciLCJJ
+TlBVVCIsIklTSU5ERVgiLCJMSU5LIiwiTUVUQSIsIlBBUkFNIiwiU09VUkNFIiwiU1RZTEUiLCJUSVRM
+RSIsIldCUiJdKSx0LnMpCkIuZG49QS5RSShzKFtdKSxBLk4wKCJqZDxMTD4iKSkKQi54RD1BLlFJKHMo
+W10pLHQucykKQi5oVT1BLlFJKHMoW10pLHQuYikKQi5BZD1uZXcgQS5INygwLCJhZGROdWxsYWJsZUhp
+bnQiKQpCLm5lPW5ldyBBLkg3KDEsImFkZE5vbk51bGxhYmxlSGludCIpCkIubXk9bmV3IEEuSDcoMiwi
+Y2hhbmdlVG9OdWxsYWJsZUhpbnQiKQpCLnJ4PW5ldyBBLkg3KDMsImNoYW5nZVRvTm9uTnVsbGFibGVI
+aW50IikKQi53Vj1uZXcgQS5INyg0LCJyZW1vdmVOdWxsYWJsZUhpbnQiKQpCLmZSPW5ldyBBLkg3KDUs
+InJlbW92ZU5vbk51bGxhYmxlSGludCIpCkIuTW09QS5RSShzKFtCLkFkLEIubmUsQi5teSxCLnJ4LEIu
+d1YsQi5mUl0pLEEuTjAoImpkPEg3PiIpKQpCLnRvPUEuUUkocyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM0
+LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLkYzPUEuUUkocyhbMCwwLDI0NTc2LDEwMjMsNjU1MzQs
+MzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkIuZWE9QS5RSShzKFswLDAsMzI3NTQsMTEyNjMsNjU1MzQs
+MzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkIuWko9QS5RSShzKFswLDAsMzI3MjIsMTIyODcsNjU1MzUs
+MzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkIuV2Q9QS5RSShzKFswLDAsNjU0OTAsMTIyODcsNjU1MzUs
+MzQ4MTUsNjU1MzQsMTg0MzFdKSx0LnQpCkIuUXg9QS5RSShzKFsiYmluZCIsImlmIiwicmVmIiwicmVw
+ZWF0Iiwic3ludGF4Il0pLHQucykKQi5CST1BLlFJKHMoWyJBOjpocmVmIiwiQVJFQTo6aHJlZiIsIkJM
+T0NLUVVPVEU6OmNpdGUiLCJCT0RZOjpiYWNrZ3JvdW5kIiwiQ09NTUFORDo6aWNvbiIsIkRFTDo6Y2l0
+ZSIsIkZPUk06OmFjdGlvbiIsIklNRzo6c3JjIiwiSU5QVVQ6OnNyYyIsIklOUzo6Y2l0ZSIsIlE6OmNp
+dGUiLCJWSURFTzo6cG9zdGVyIl0pLHQucykKQi5EeD1uZXcgQS5MUCgwLHt9LEIueEQsQS5OMCgiTFA8
+cVUsek08ajg+PiIpKQpCLkNNPW5ldyBBLkxQKDAse30sQi54RCxBLk4wKCJMUDxxVSxxVT4iKSkKQi5p
+SD1BLlFJKHMoW10pLEEuTjAoImpkPEdEPiIpKQpCLldPPW5ldyBBLkxQKDAse30sQi5pSCxBLk4wKCJM
+UDxHRCxAPiIpKQpCLlkyPW5ldyBBLk85KDAsImRpcmVjdG9yeSIpCkIucmY9bmV3IEEuTzkoMSwiZmls
+ZSIpCkIuVGU9bmV3IEEud3YoImNhbGwiKQpCLkx5PUEueHEoIk1oIikKQi5vRT1uZXcgQS5HWSghMSkK
+Qi53UT1uZXcgQS5GeShudWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC56bT1udWxs
+CiQueHU9bnVsbAokLmkwPW51bGwKJC5BbD1udWxsCiQuTkY9bnVsbAokLlRYPW51bGwKJC54Nz1udWxs
+CiQubnc9bnVsbAokLnZ2PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4PW51bGwKJC5tZz1udWxs
+CiQuVUQ9ITEKJC5YMz1CLk5VCiQuej1BLlFJKFtdLEEuTjAoImpkPE1oPiIpKQokLnhvPW51bGwKJC5C
+Tz1udWxsCiQubHQ9bnVsbAokLkVVPW51bGwKJC5vcj1BLkZsKHQuTix0LlkpCiQuSVI9bnVsbAokLkk2
+PW51bGwKJC5GZj1udWxsfSkoKTsoZnVuY3Rpb24gbGF6eUluaXRpYWxpemVycygpe3ZhciBzPWh1bmtI
+ZWxwZXJzLmxhenlGaW5hbCxyPWh1bmtIZWxwZXJzLmxhenkKcygkLCJmYSIsInciLCgpPT5BLllnKCJf
+JGRhcnRfZGFydENsb3N1cmUiKSkKcygkLCJLcSIsIlNuIiwoKT0+QS5jTShBLlM3KHsKdG9TdHJpbmc6
+ZnVuY3Rpb24oKXtyZXR1cm4iJHJlY2VpdmVyJCJ9fSkpKQpzKCQsIlluIiwibHEiLCgpPT5BLmNNKEEu
+UzcoeyRtZXRob2QkOm51bGwsCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0p
+KSkKcygkLCJSMSIsIk45IiwoKT0+QS5jTShBLlM3KG51bGwpKSkKcygkLCJmTiIsImlJIiwoKT0+QS5j
+TShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7bnVsbC4kbWV0
+aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJx
+aSIsIlVOIiwoKT0+QS5jTShBLlM3KHZvaWQgMCkpKQpzKCQsInB2IiwiWmgiLCgpPT5BLmNNKGZ1bmN0
+aW9uKCl7dmFyICRhcmd1bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXsodm9pZCAwKS4kbWV0aG9k
+JCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJrcSIs
+InJOIiwoKT0+QS5jTShBLk1qKG51bGwpKSkKcygkLCJ0dCIsImMzIiwoKT0+QS5jTShmdW5jdGlvbigp
+e3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJkdCIs
+IkhLIiwoKT0+QS5jTShBLk1qKHZvaWQgMCkpKQpzKCQsIkE3IiwicjEiLCgpPT5BLmNNKGZ1bmN0aW9u
+KCl7dHJ5eyh2b2lkIDApLiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygk
+LCJXYyIsInV0IiwoKT0+QS54ZygpKQpzKCQsImtoIiwicmYiLCgpPT5uZXcgQS54cigpLiQwKCkpCnMo
+JCwiZEgiLCJIRyIsKCk9Pm5ldyBBLk56KCkuJDAoKSkKcygkLCJoaiIsIlY3IiwoKT0+bmV3IEludDhB
+cnJheShBLlhGKEEuUUkoWy0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y
+LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y
+LC0yLC0yLC0xLC0yLC0yLC0yLC0yLC0yLDYyLC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4
+LDU5LDYwLDYxLC0yLC0yLC0yLC0xLC0yLC0yLC0yLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs
+MTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIsNjMsLTIsMjYs
+MjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYs
+NDcsNDgsNDksNTAsNTEsLTIsLTIsLTIsLTIsLTJdLHQudCkpKSkKcygkLCJZZSIsIndRIiwoKT0+dHlw
+ZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJv
+Y2Vzcyk9PSJbb2JqZWN0IHByb2Nlc3NdIiYmcHJvY2Vzcy5wbGF0Zm9ybT09IndpbjMyIikKcygkLCJt
+ZiIsIno0IiwoKT0+QS5udSgiXltcXC1cXC4wLTlBLVpfYS16fl0qJCIpKQpzKCQsIlgwIiwidDgiLCgp
+PT5BLkNVKEIuTHkpKQpzKCQsIk9RIiwidloiLCgpPT5BLktOKCkpCnMoJCwiU0MiLCJBTiIsKCk9PkEu
+dE0oWyJBIiwiQUJCUiIsIkFDUk9OWU0iLCJBRERSRVNTIiwiQVJFQSIsIkFSVElDTEUiLCJBU0lERSIs
+IkFVRElPIiwiQiIsIkJESSIsIkJETyIsIkJJRyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJVVFRPTiIsIkNB
+TlZBUyIsIkNBUFRJT04iLCJDRU5URVIiLCJDSVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdST1VQIiwiQ09N
+TUFORCIsIkRBVEEiLCJEQVRBTElTVCIsIkREIiwiREVMIiwiREVUQUlMUyIsIkRGTiIsIkRJUiIsIkRJ
+ViIsIkRMIiwiRFQiLCJFTSIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPTlQiLCJG
+T09URVIiLCJGT1JNIiwiSDEiLCJIMiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiSEVBREVSIiwiSEdST1VQ
+IiwiSFIiLCJJIiwiSUZSQU1FIiwiSU1HIiwiSU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJFTCIsIkxFR0VO
+RCIsIkxJIiwiTUFQIiwiTUFSSyIsIk1FTlUiLCJNRVRFUiIsIk5BViIsIk5PQlIiLCJPTCIsIk9QVEdS
+T1VQIiwiT1BUSU9OIiwiT1VUUFVUIiwiUCIsIlBSRSIsIlBST0dSRVNTIiwiUSIsIlMiLCJTQU1QIiwi
+U0VDVElPTiIsIlNFTEVDVCIsIlNNQUxMIiwiU09VUkNFIiwiU1BBTiIsIlNUUklLRSIsIlNUUk9ORyIs
+IlNVQiIsIlNVTU1BUlkiLCJTVVAiLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURVhUQVJFQSIsIlRGT09U
+IiwiVEgiLCJUSEVBRCIsIlRJTUUiLCJUUiIsIlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJWQVIiLCJWSURF
+TyIsIldCUiJdLHQuTikpCnMoJCwiWDQiLCJoRyIsKCk9PkEubnUoIl5cXFMrJCIpKQpzKCQsIndPIiwi
+b3ciLCgpPT5BLk5EKHNlbGYpKQpzKCQsImt0IiwiUjgiLCgpPT5BLllnKCJfJGRhcnRfZGFydE9iamVj
+dCIpKQpzKCQsImZLIiwia0kiLCgpPT5mdW5jdGlvbiBEYXJ0T2JqZWN0KGEpe3RoaXMubz1hfSkKcygk
+LCJxdCIsInpCIiwoKT0+bmV3IEEubVEoKSkKcygkLCJDayIsIlVFIiwoKT0+QS5oSyhCLm9sLmdtVyhB
+LngzKCkpLmhyZWYpLmdoWSgpLnEoMCwiYXV0aFRva2VuIikpCnMoJCwiaFQiLCJ5UCIsKCk9PkEuWnIo
+KS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50IikpCnMoJCwiVzYiLCJoTCIs
+KCk9PkEuWnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIpKQpzKCQs
+IlRSIiwiRFciLCgpPT5BLlpyKCkucXVlcnlTZWxlY3RvcigiZm9vdGVyIikpCnMoJCwiRVkiLCJmaSIs
+KCk9PkEuWnIoKS5xdWVyeVNlbGVjdG9yKCJoZWFkZXIiKSkKcygkLCJiQSIsImMwIiwoKT0+QS5acigp
+LnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24iKSkKcygkLCJ0MCIsImJOIiwo
+KT0+QS5acigpLnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24tbGFiZWwiKSkK
+cygkLCJhdiIsIkQ5IiwoKT0+QS5acigpLnF1ZXJ5U2VsZWN0b3IoIiN1bml0LW5hbWUiKSkKcigkLCJm
+ZSIsIktHIiwoKT0+bmV3IEEuWEEoKSkKcygkLCJlbyIsIm5VIiwoKT0+bmV3IEEubEkoQS5OMCgiZnYi
+KS5hKCQuSGsoKSkpKQpzKCQsInlyIiwiYkQiLCgpPT5uZXcgQS5PRihBLm51KCIvIiksQS5udSgiW14v
+XSQiKSxBLm51KCJeLyIpKSkKcygkLCJNayIsIktrIiwoKT0+bmV3IEEuSVYoQS5udSgiWy9cXFxcXSIp
+LEEubnUoIlteL1xcXFxdJCIpLEEubnUoIl4oXFxcXFxcXFxbXlxcXFxdK1xcXFxbXlxcXFwvXSt8W2Et
+ekEtWl06Wy9cXFxcXSkiKSxBLm51KCJeWy9cXFxcXSg/IVsvXFxcXF0pIikpKQpzKCQsImFrIiwiRWIi
+LCgpPT5uZXcgQS5ydShBLm51KCIvIiksQS5udSgiKF5bYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL3xb
+Xi9dKSQiKSxBLm51KCJbYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL1teL10qIiksQS5udSgiXi8iKSkp
+CnMoJCwibHMiLCJIayIsKCk9PkEuUmgoKSl9KSgpOyhmdW5jdGlvbiBuYXRpdmVTdXBwb3J0KCl7IWZ1
+bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oYSl7dmFyIG09e30KbVthXT0xCnJldHVybiBPYmplY3Qua2V5
+cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG0pKVswXX0Kdi5nZXRJc29sYXRlVGFnPWZ1
+bmN0aW9uKGEpe3JldHVybiBzKCJfX19kYXJ0XyIrYSt2Lmlzb2xhdGVUYWcpfQp2YXIgcj0iX19fZGFy
+dF9pc29sYXRlX3RhZ3NfIgp2YXIgcT1PYmplY3Rbcl18fChPYmplY3Rbcl09T2JqZWN0LmNyZWF0ZShu
+dWxsKSkKdmFyIHA9Il9aeFl4WCIKZm9yKHZhciBvPTA7O28rKyl7dmFyIG49cyhwKyJfIitvKyJfIikK
+aWYoIShuIGluIHEpKXtxW25dPTEKdi5pc29sYXRlVGFnPW4KYnJlYWt9fXYuZGlzcGF0Y2hQcm9wZXJ0
+eU5hbWU9di5nZXRJc29sYXRlVGFnKCJkaXNwYXRjaF9yZWNvcmQiKX0oKQpodW5rSGVscGVycy5zZXRP
+clVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKHtET01FcnJvcjpKLk1GLE1lZGlhRXJyb3I6Si5NRixOYXZp
+Z2F0b3I6Si5NRixOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6Si5NRixOYXZpZ2F0b3JVc2VyTWVk
+aWFFcnJvcjpKLk1GLE92ZXJjb25zdHJhaW5lZEVycm9yOkouTUYsUG9zaXRpb25FcnJvcjpKLk1GLEdl
+b2xvY2F0aW9uUG9zaXRpb25FcnJvcjpKLk1GLFJhbmdlOkouTUYsRGF0YVZpZXc6QS5FVCxBcnJheUJ1
+ZmZlclZpZXc6QS5FVCxGbG9hdDMyQXJyYXk6QS5EZyxGbG9hdDY0QXJyYXk6QS5EZyxJbnQxNkFycmF5
+OkEueGosSW50MzJBcnJheTpBLmRFLEludDhBcnJheTpBLlpBLFVpbnQxNkFycmF5OkEuZFQsVWludDMy
+QXJyYXk6QS5QcSxVaW50OENsYW1wZWRBcnJheTpBLmVFLENhbnZhc1BpeGVsQXJyYXk6QS5lRSxVaW50
+OEFycmF5OkEuVjYsSFRNTEF1ZGlvRWxlbWVudDpBLnFFLEhUTUxCUkVsZW1lbnQ6QS5xRSxIVE1MQnV0
+dG9uRWxlbWVudDpBLnFFLEhUTUxDYW52YXNFbGVtZW50OkEucUUsSFRNTENvbnRlbnRFbGVtZW50OkEu
+cUUsSFRNTERMaXN0RWxlbWVudDpBLnFFLEhUTUxEYXRhRWxlbWVudDpBLnFFLEhUTUxEYXRhTGlzdEVs
+ZW1lbnQ6QS5xRSxIVE1MRGV0YWlsc0VsZW1lbnQ6QS5xRSxIVE1MRGlhbG9nRWxlbWVudDpBLnFFLEhU
+TUxEaXZFbGVtZW50OkEucUUsSFRNTEVtYmVkRWxlbWVudDpBLnFFLEhUTUxGaWVsZFNldEVsZW1lbnQ6
+QS5xRSxIVE1MSFJFbGVtZW50OkEucUUsSFRNTEhlYWRFbGVtZW50OkEucUUsSFRNTEhlYWRpbmdFbGVt
+ZW50OkEucUUsSFRNTEh0bWxFbGVtZW50OkEucUUsSFRNTElGcmFtZUVsZW1lbnQ6QS5xRSxIVE1MSW1h
+Z2VFbGVtZW50OkEucUUsSFRNTElucHV0RWxlbWVudDpBLnFFLEhUTUxMSUVsZW1lbnQ6QS5xRSxIVE1M
+TGFiZWxFbGVtZW50OkEucUUsSFRNTExlZ2VuZEVsZW1lbnQ6QS5xRSxIVE1MTGlua0VsZW1lbnQ6QS5x
+RSxIVE1MTWFwRWxlbWVudDpBLnFFLEhUTUxNZWRpYUVsZW1lbnQ6QS5xRSxIVE1MTWVudUVsZW1lbnQ6
+QS5xRSxIVE1MTWV0YUVsZW1lbnQ6QS5xRSxIVE1MTWV0ZXJFbGVtZW50OkEucUUsSFRNTE1vZEVsZW1l
+bnQ6QS5xRSxIVE1MT0xpc3RFbGVtZW50OkEucUUsSFRNTE9iamVjdEVsZW1lbnQ6QS5xRSxIVE1MT3B0
+R3JvdXBFbGVtZW50OkEucUUsSFRNTE9wdGlvbkVsZW1lbnQ6QS5xRSxIVE1MT3V0cHV0RWxlbWVudDpB
+LnFFLEhUTUxQYXJhbUVsZW1lbnQ6QS5xRSxIVE1MUGljdHVyZUVsZW1lbnQ6QS5xRSxIVE1MUHJlRWxl
+bWVudDpBLnFFLEhUTUxQcm9ncmVzc0VsZW1lbnQ6QS5xRSxIVE1MUXVvdGVFbGVtZW50OkEucUUsSFRN
+TFNjcmlwdEVsZW1lbnQ6QS5xRSxIVE1MU2hhZG93RWxlbWVudDpBLnFFLEhUTUxTbG90RWxlbWVudDpB
+LnFFLEhUTUxTb3VyY2VFbGVtZW50OkEucUUsSFRNTFNwYW5FbGVtZW50OkEucUUsSFRNTFN0eWxlRWxl
+bWVudDpBLnFFLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OkEucUUsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
+QS5xRSxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6QS5xRSxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVu
+dDpBLnFFLEhUTUxUYWJsZUNvbEVsZW1lbnQ6QS5xRSxIVE1MVGV4dEFyZWFFbGVtZW50OkEucUUsSFRN
+TFRpbWVFbGVtZW50OkEucUUsSFRNTFRpdGxlRWxlbWVudDpBLnFFLEhUTUxUcmFja0VsZW1lbnQ6QS5x
+RSxIVE1MVUxpc3RFbGVtZW50OkEucUUsSFRNTFVua25vd25FbGVtZW50OkEucUUsSFRNTFZpZGVvRWxl
+bWVudDpBLnFFLEhUTUxEaXJlY3RvcnlFbGVtZW50OkEucUUsSFRNTEZvbnRFbGVtZW50OkEucUUsSFRN
+TEZyYW1lRWxlbWVudDpBLnFFLEhUTUxGcmFtZVNldEVsZW1lbnQ6QS5xRSxIVE1MTWFycXVlZUVsZW1l
+bnQ6QS5xRSxIVE1MRWxlbWVudDpBLnFFLEhUTUxBbmNob3JFbGVtZW50OkEuR2gsSFRNTEFyZWFFbGVt
+ZW50OkEuZlksSFRNTEJhc2VFbGVtZW50OkEuclosQmxvYjpBLkF6LEhUTUxCb2R5RWxlbWVudDpBLlFQ
+LENEQVRBU2VjdGlvbjpBLm54LENoYXJhY3RlckRhdGE6QS5ueCxDb21tZW50OkEubngsUHJvY2Vzc2lu
+Z0luc3RydWN0aW9uOkEubngsVGV4dDpBLm54LENTU1N0eWxlRGVjbGFyYXRpb246QS5vSixNU1N0eWxl
+Q1NTUHJvcGVydGllczpBLm9KLENTUzJQcm9wZXJ0aWVzOkEub0osWE1MRG9jdW1lbnQ6QS5RRixEb2N1
+bWVudDpBLlFGLERPTUV4Y2VwdGlvbjpBLk5oLERPTUltcGxlbWVudGF0aW9uOkEuYWUsRE9NUmVjdFJl
+YWRPbmx5OkEuSUIsRE9NVG9rZW5MaXN0OkEubjcsRWxlbWVudDpBLmN2LEFib3J0UGF5bWVudEV2ZW50
+OkEuZWEsQW5pbWF0aW9uRXZlbnQ6QS5lYSxBbmltYXRpb25QbGF5YmFja0V2ZW50OkEuZWEsQXBwbGlj
+YXRpb25DYWNoZUVycm9yRXZlbnQ6QS5lYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OkEuZWEsQmFj
+a2dyb3VuZEZldGNoRXZlbnQ6QS5lYSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6QS5lYSxCYWNrZ3Jv
+dW5kRmV0Y2hlZEV2ZW50OkEuZWEsQmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OkEuZWEsQmVmb3JlVW5s
+b2FkRXZlbnQ6QS5lYSxCbG9iRXZlbnQ6QS5lYSxDYW5NYWtlUGF5bWVudEV2ZW50OkEuZWEsQ2xpcGJv
+YXJkRXZlbnQ6QS5lYSxDbG9zZUV2ZW50OkEuZWEsQ3VzdG9tRXZlbnQ6QS5lYSxEZXZpY2VNb3Rpb25F
+dmVudDpBLmVhLERldmljZU9yaWVudGF0aW9uRXZlbnQ6QS5lYSxFcnJvckV2ZW50OkEuZWEsRXh0ZW5k
+YWJsZUV2ZW50OkEuZWEsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpBLmVhLEZldGNoRXZlbnQ6QS5lYSxG
+b250RmFjZVNldExvYWRFdmVudDpBLmVhLEZvcmVpZ25GZXRjaEV2ZW50OkEuZWEsR2FtZXBhZEV2ZW50
+OkEuZWEsSGFzaENoYW5nZUV2ZW50OkEuZWEsSW5zdGFsbEV2ZW50OkEuZWEsTWVkaWFFbmNyeXB0ZWRF
+dmVudDpBLmVhLE1lZGlhS2V5TWVzc2FnZUV2ZW50OkEuZWEsTWVkaWFRdWVyeUxpc3RFdmVudDpBLmVh
+LE1lZGlhU3RyZWFtRXZlbnQ6QS5lYSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6QS5lYSxNZXNzYWdlRXZl
+bnQ6QS5lYSxNSURJQ29ubmVjdGlvbkV2ZW50OkEuZWEsTUlESU1lc3NhZ2VFdmVudDpBLmVhLE11dGF0
+aW9uRXZlbnQ6QS5lYSxOb3RpZmljYXRpb25FdmVudDpBLmVhLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6QS5l
+YSxQYXltZW50UmVxdWVzdEV2ZW50OkEuZWEsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDpBLmVhLFBv
+cFN0YXRlRXZlbnQ6QS5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6QS5lYSxQ
+cmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDpBLmVhLFByb21pc2VSZWplY3Rpb25FdmVudDpB
+LmVhLFB1c2hFdmVudDpBLmVhLFJUQ0RhdGFDaGFubmVsRXZlbnQ6QS5lYSxSVENEVE1GVG9uZUNoYW5n
+ZUV2ZW50OkEuZWEsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDpBLmVhLFJUQ1RyYWNrRXZlbnQ6QS5l
+YSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OkEuZWEsU2Vuc29yRXJyb3JFdmVudDpBLmVhLFNw
+ZWVjaFJlY29nbml0aW9uRXJyb3I6QS5lYSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OkEuZWEsU3BlZWNo
+U3ludGhlc2lzRXZlbnQ6QS5lYSxTdG9yYWdlRXZlbnQ6QS5lYSxTeW5jRXZlbnQ6QS5lYSxUcmFja0V2
+ZW50OkEuZWEsVHJhbnNpdGlvbkV2ZW50OkEuZWEsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OkEuZWEsVlJE
+ZXZpY2VFdmVudDpBLmVhLFZSRGlzcGxheUV2ZW50OkEuZWEsVlJTZXNzaW9uRXZlbnQ6QS5lYSxNb2pv
+SW50ZXJmYWNlUmVxdWVzdEV2ZW50OkEuZWEsVVNCQ29ubmVjdGlvbkV2ZW50OkEuZWEsSURCVmVyc2lv
+bkNoYW5nZUV2ZW50OkEuZWEsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6QS5lYSxPZmZsaW5lQXVkaW9Db21w
+bGV0aW9uRXZlbnQ6QS5lYSxXZWJHTENvbnRleHRFdmVudDpBLmVhLEV2ZW50OkEuZWEsSW5wdXRFdmVu
+dDpBLmVhLFN1Ym1pdEV2ZW50OkEuZWEsRXZlbnRUYXJnZXQ6QS5EMCxGaWxlOkEuaEgsSFRNTEZvcm1F
+bGVtZW50OkEuaDQsSGlzdG9yeTpBLmJyLEhUTUxEb2N1bWVudDpBLlZiLFhNTEh0dHBSZXF1ZXN0OkEu
+ZkosWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpBLndhLEltYWdlRGF0YTpBLlNnLExvY2F0aW9uOkEu
+dTgsTW91c2VFdmVudDpBLkFqLERyYWdFdmVudDpBLkFqLFBvaW50ZXJFdmVudDpBLkFqLFdoZWVsRXZl
+bnQ6QS5BaixEb2N1bWVudEZyYWdtZW50OkEuS1YsU2hhZG93Um9vdDpBLktWLERvY3VtZW50VHlwZTpB
+LktWLE5vZGU6QS5LVixOb2RlTGlzdDpBLkJILFJhZGlvTm9kZUxpc3Q6QS5CSCxIVE1MUGFyYWdyYXBo
+RWxlbWVudDpBLlNOLFByb2dyZXNzRXZlbnQ6QS5ldyxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6QS5ldyxI
+VE1MU2VsZWN0RWxlbWVudDpBLmxwLEhUTUxUYWJsZUVsZW1lbnQ6QS5UYixIVE1MVGFibGVSb3dFbGVt
+ZW50OkEuSXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6QS5XUCxIVE1MVGVtcGxhdGVFbGVtZW50OkEu
+eVksQ29tcG9zaXRpb25FdmVudDpBLnc2LEZvY3VzRXZlbnQ6QS53NixLZXlib2FyZEV2ZW50OkEudzYs
+VGV4dEV2ZW50OkEudzYsVG91Y2hFdmVudDpBLnc2LFVJRXZlbnQ6QS53NixXaW5kb3c6QS5LNSxET01X
+aW5kb3c6QS5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpBLkNtLFNlcnZpY2VXb3JrZXJHbG9i
+YWxTY29wZTpBLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOkEuQ20sV29ya2VyR2xvYmFsU2NvcGU6
+QS5DbSxBdHRyOkEuQ1EsQ2xpZW50UmVjdDpBLnc0LERPTVJlY3Q6QS53NCxOYW1lZE5vZGVNYXA6QS5y
+aCxNb3pOYW1lZEF0dHJNYXA6QS5yaCxJREJLZXlSYW5nZTpBLmhGLFNWR1NjcmlwdEVsZW1lbnQ6QS5u
+ZCxTVkdBRWxlbWVudDpBLmhpLFNWR0FuaW1hdGVFbGVtZW50OkEuaGksU1ZHQW5pbWF0ZU1vdGlvbkVs
+ZW1lbnQ6QS5oaSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpBLmhpLFNWR0FuaW1hdGlvbkVsZW1l
+bnQ6QS5oaSxTVkdDaXJjbGVFbGVtZW50OkEuaGksU1ZHQ2xpcFBhdGhFbGVtZW50OkEuaGksU1ZHRGVm
+c0VsZW1lbnQ6QS5oaSxTVkdEZXNjRWxlbWVudDpBLmhpLFNWR0Rpc2NhcmRFbGVtZW50OkEuaGksU1ZH
+RWxsaXBzZUVsZW1lbnQ6QS5oaSxTVkdGRUJsZW5kRWxlbWVudDpBLmhpLFNWR0ZFQ29sb3JNYXRyaXhF
+bGVtZW50OkEuaGksU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6QS5oaSxTVkdGRUNvbXBvc2l0
+ZUVsZW1lbnQ6QS5oaSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpBLmhpLFNWR0ZFRGlmZnVzZUxp
+Z2h0aW5nRWxlbWVudDpBLmhpLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpBLmhpLFNWR0ZFRGlz
+dGFudExpZ2h0RWxlbWVudDpBLmhpLFNWR0ZFRmxvb2RFbGVtZW50OkEuaGksU1ZHRkVGdW5jQUVsZW1l
+bnQ6QS5oaSxTVkdGRUZ1bmNCRWxlbWVudDpBLmhpLFNWR0ZFRnVuY0dFbGVtZW50OkEuaGksU1ZHRkVG
+dW5jUkVsZW1lbnQ6QS5oaSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6QS5oaSxTVkdGRUltYWdlRWxl
+bWVudDpBLmhpLFNWR0ZFTWVyZ2VFbGVtZW50OkEuaGksU1ZHRkVNZXJnZU5vZGVFbGVtZW50OkEuaGks
+U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDpBLmhpLFNWR0ZFT2Zmc2V0RWxlbWVudDpBLmhpLFNWR0ZFUG9p
+bnRMaWdodEVsZW1lbnQ6QS5oaSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OkEuaGksU1ZHRkVT
+cG90TGlnaHRFbGVtZW50OkEuaGksU1ZHRkVUaWxlRWxlbWVudDpBLmhpLFNWR0ZFVHVyYnVsZW5jZUVs
+ZW1lbnQ6QS5oaSxTVkdGaWx0ZXJFbGVtZW50OkEuaGksU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6QS5o
+aSxTVkdHRWxlbWVudDpBLmhpLFNWR0dlb21ldHJ5RWxlbWVudDpBLmhpLFNWR0dyYXBoaWNzRWxlbWVu
+dDpBLmhpLFNWR0ltYWdlRWxlbWVudDpBLmhpLFNWR0xpbmVFbGVtZW50OkEuaGksU1ZHTGluZWFyR3Jh
+ZGllbnRFbGVtZW50OkEuaGksU1ZHTWFya2VyRWxlbWVudDpBLmhpLFNWR01hc2tFbGVtZW50OkEuaGks
+U1ZHTWV0YWRhdGFFbGVtZW50OkEuaGksU1ZHUGF0aEVsZW1lbnQ6QS5oaSxTVkdQYXR0ZXJuRWxlbWVu
+dDpBLmhpLFNWR1BvbHlnb25FbGVtZW50OkEuaGksU1ZHUG9seWxpbmVFbGVtZW50OkEuaGksU1ZHUmFk
+aWFsR3JhZGllbnRFbGVtZW50OkEuaGksU1ZHUmVjdEVsZW1lbnQ6QS5oaSxTVkdTZXRFbGVtZW50OkEu
+aGksU1ZHU3RvcEVsZW1lbnQ6QS5oaSxTVkdTdHlsZUVsZW1lbnQ6QS5oaSxTVkdTVkdFbGVtZW50OkEu
+aGksU1ZHU3dpdGNoRWxlbWVudDpBLmhpLFNWR1N5bWJvbEVsZW1lbnQ6QS5oaSxTVkdUU3BhbkVsZW1l
+bnQ6QS5oaSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6QS5oaSxTVkdUZXh0RWxlbWVudDpBLmhpLFNWR1Rl
+eHRQYXRoRWxlbWVudDpBLmhpLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6QS5oaSxTVkdUaXRsZUVs
+ZW1lbnQ6QS5oaSxTVkdVc2VFbGVtZW50OkEuaGksU1ZHVmlld0VsZW1lbnQ6QS5oaSxTVkdHcmFkaWVu
+dEVsZW1lbnQ6QS5oaSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpBLmhpLFNWR0ZF
+RHJvcFNoYWRvd0VsZW1lbnQ6QS5oaSxTVkdNUGF0aEVsZW1lbnQ6QS5oaSxTVkdFbGVtZW50OkEuaGl9
+KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLE1lZGlhRXJyb3I6
+dHJ1ZSxOYXZpZ2F0b3I6dHJ1ZSxOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6dHJ1ZSxOYXZpZ2F0
+b3JVc2VyTWVkaWFFcnJvcjp0cnVlLE92ZXJjb25zdHJhaW5lZEVycm9yOnRydWUsUG9zaXRpb25FcnJv
+cjp0cnVlLEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcjp0cnVlLFJhbmdlOnRydWUsRGF0YVZpZXc6dHJ1
+ZSxBcnJheUJ1ZmZlclZpZXc6ZmFsc2UsRmxvYXQzMkFycmF5OnRydWUsRmxvYXQ2NEFycmF5OnRydWUs
+SW50MTZBcnJheTp0cnVlLEludDMyQXJyYXk6dHJ1ZSxJbnQ4QXJyYXk6dHJ1ZSxVaW50MTZBcnJheTp0
+cnVlLFVpbnQzMkFycmF5OnRydWUsVWludDhDbGFtcGVkQXJyYXk6dHJ1ZSxDYW52YXNQaXhlbEFycmF5
+OnRydWUsVWludDhBcnJheTpmYWxzZSxIVE1MQXVkaW9FbGVtZW50OnRydWUsSFRNTEJSRWxlbWVudDp0
+cnVlLEhUTUxCdXR0b25FbGVtZW50OnRydWUsSFRNTENhbnZhc0VsZW1lbnQ6dHJ1ZSxIVE1MQ29udGVu
+dEVsZW1lbnQ6dHJ1ZSxIVE1MRExpc3RFbGVtZW50OnRydWUsSFRNTERhdGFFbGVtZW50OnRydWUsSFRN
+TERhdGFMaXN0RWxlbWVudDp0cnVlLEhUTUxEZXRhaWxzRWxlbWVudDp0cnVlLEhUTUxEaWFsb2dFbGVt
+ZW50OnRydWUsSFRNTERpdkVsZW1lbnQ6dHJ1ZSxIVE1MRW1iZWRFbGVtZW50OnRydWUsSFRNTEZpZWxk
+U2V0RWxlbWVudDp0cnVlLEhUTUxIUkVsZW1lbnQ6dHJ1ZSxIVE1MSGVhZEVsZW1lbnQ6dHJ1ZSxIVE1M
+SGVhZGluZ0VsZW1lbnQ6dHJ1ZSxIVE1MSHRtbEVsZW1lbnQ6dHJ1ZSxIVE1MSUZyYW1lRWxlbWVudDp0
+cnVlLEhUTUxJbWFnZUVsZW1lbnQ6dHJ1ZSxIVE1MSW5wdXRFbGVtZW50OnRydWUsSFRNTExJRWxlbWVu
+dDp0cnVlLEhUTUxMYWJlbEVsZW1lbnQ6dHJ1ZSxIVE1MTGVnZW5kRWxlbWVudDp0cnVlLEhUTUxMaW5r
+RWxlbWVudDp0cnVlLEhUTUxNYXBFbGVtZW50OnRydWUsSFRNTE1lZGlhRWxlbWVudDp0cnVlLEhUTUxN
+ZW51RWxlbWVudDp0cnVlLEhUTUxNZXRhRWxlbWVudDp0cnVlLEhUTUxNZXRlckVsZW1lbnQ6dHJ1ZSxI
+VE1MTW9kRWxlbWVudDp0cnVlLEhUTUxPTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MT2JqZWN0RWxlbWVudDp0
+cnVlLEhUTUxPcHRHcm91cEVsZW1lbnQ6dHJ1ZSxIVE1MT3B0aW9uRWxlbWVudDp0cnVlLEhUTUxPdXRw
+dXRFbGVtZW50OnRydWUsSFRNTFBhcmFtRWxlbWVudDp0cnVlLEhUTUxQaWN0dXJlRWxlbWVudDp0cnVl
+LEhUTUxQcmVFbGVtZW50OnRydWUsSFRNTFByb2dyZXNzRWxlbWVudDp0cnVlLEhUTUxRdW90ZUVsZW1l
+bnQ6dHJ1ZSxIVE1MU2NyaXB0RWxlbWVudDp0cnVlLEhUTUxTaGFkb3dFbGVtZW50OnRydWUsSFRNTFNs
+b3RFbGVtZW50OnRydWUsSFRNTFNvdXJjZUVsZW1lbnQ6dHJ1ZSxIVE1MU3BhbkVsZW1lbnQ6dHJ1ZSxI
+VE1MU3R5bGVFbGVtZW50OnRydWUsSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVD
+ZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUhlYWRl
+ckNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlQ29sRWxlbWVudDp0cnVlLEhUTUxUZXh0QXJlYUVsZW1l
+bnQ6dHJ1ZSxIVE1MVGltZUVsZW1lbnQ6dHJ1ZSxIVE1MVGl0bGVFbGVtZW50OnRydWUsSFRNTFRyYWNr
+RWxlbWVudDp0cnVlLEhUTUxVTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MVW5rbm93bkVsZW1lbnQ6dHJ1ZSxI
+VE1MVmlkZW9FbGVtZW50OnRydWUsSFRNTERpcmVjdG9yeUVsZW1lbnQ6dHJ1ZSxIVE1MRm9udEVsZW1l
+bnQ6dHJ1ZSxIVE1MRnJhbWVFbGVtZW50OnRydWUsSFRNTEZyYW1lU2V0RWxlbWVudDp0cnVlLEhUTUxN
+YXJxdWVlRWxlbWVudDp0cnVlLEhUTUxFbGVtZW50OmZhbHNlLEhUTUxBbmNob3JFbGVtZW50OnRydWUs
+SFRNTEFyZWFFbGVtZW50OnRydWUsSFRNTEJhc2VFbGVtZW50OnRydWUsQmxvYjpmYWxzZSxIVE1MQm9k
+eUVsZW1lbnQ6dHJ1ZSxDREFUQVNlY3Rpb246dHJ1ZSxDaGFyYWN0ZXJEYXRhOnRydWUsQ29tbWVudDp0
+cnVlLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjp0cnVlLFRleHQ6dHJ1ZSxDU1NTdHlsZURlY2xhcmF0aW9u
+OnRydWUsTVNTdHlsZUNTU1Byb3BlcnRpZXM6dHJ1ZSxDU1MyUHJvcGVydGllczp0cnVlLFhNTERvY3Vt
+ZW50OnRydWUsRG9jdW1lbnQ6ZmFsc2UsRE9NRXhjZXB0aW9uOnRydWUsRE9NSW1wbGVtZW50YXRpb246
+dHJ1ZSxET01SZWN0UmVhZE9ubHk6ZmFsc2UsRE9NVG9rZW5MaXN0OnRydWUsRWxlbWVudDpmYWxzZSxB
+Ym9ydFBheW1lbnRFdmVudDp0cnVlLEFuaW1hdGlvbkV2ZW50OnRydWUsQW5pbWF0aW9uUGxheWJhY2tF
+dmVudDp0cnVlLEFwcGxpY2F0aW9uQ2FjaGVFcnJvckV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoQ2xp
+Y2tFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaEV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRmFpbEV2
+ZW50OnRydWUsQmFja2dyb3VuZEZldGNoZWRFdmVudDp0cnVlLEJlZm9yZUluc3RhbGxQcm9tcHRFdmVu
+dDp0cnVlLEJlZm9yZVVubG9hZEV2ZW50OnRydWUsQmxvYkV2ZW50OnRydWUsQ2FuTWFrZVBheW1lbnRF
+dmVudDp0cnVlLENsaXBib2FyZEV2ZW50OnRydWUsQ2xvc2VFdmVudDp0cnVlLEN1c3RvbUV2ZW50OnRy
+dWUsRGV2aWNlTW90aW9uRXZlbnQ6dHJ1ZSxEZXZpY2VPcmllbnRhdGlvbkV2ZW50OnRydWUsRXJyb3JF
+dmVudDp0cnVlLEV4dGVuZGFibGVFdmVudDp0cnVlLEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6dHJ1ZSxG
+ZXRjaEV2ZW50OnRydWUsRm9udEZhY2VTZXRMb2FkRXZlbnQ6dHJ1ZSxGb3JlaWduRmV0Y2hFdmVudDp0
+cnVlLEdhbWVwYWRFdmVudDp0cnVlLEhhc2hDaGFuZ2VFdmVudDp0cnVlLEluc3RhbGxFdmVudDp0cnVl
+LE1lZGlhRW5jcnlwdGVkRXZlbnQ6dHJ1ZSxNZWRpYUtleU1lc3NhZ2VFdmVudDp0cnVlLE1lZGlhUXVl
+cnlMaXN0RXZlbnQ6dHJ1ZSxNZWRpYVN0cmVhbUV2ZW50OnRydWUsTWVkaWFTdHJlYW1UcmFja0V2ZW50
+OnRydWUsTWVzc2FnZUV2ZW50OnRydWUsTUlESUNvbm5lY3Rpb25FdmVudDp0cnVlLE1JRElNZXNzYWdl
+RXZlbnQ6dHJ1ZSxNdXRhdGlvbkV2ZW50OnRydWUsTm90aWZpY2F0aW9uRXZlbnQ6dHJ1ZSxQYWdlVHJh
+bnNpdGlvbkV2ZW50OnRydWUsUGF5bWVudFJlcXVlc3RFdmVudDp0cnVlLFBheW1lbnRSZXF1ZXN0VXBk
+YXRlRXZlbnQ6dHJ1ZSxQb3BTdGF0ZUV2ZW50OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkF2YWls
+YWJsZUV2ZW50OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkNsb3NlRXZlbnQ6dHJ1ZSxQcm9taXNl
+UmVqZWN0aW9uRXZlbnQ6dHJ1ZSxQdXNoRXZlbnQ6dHJ1ZSxSVENEYXRhQ2hhbm5lbEV2ZW50OnRydWUs
+UlRDRFRNRlRvbmVDaGFuZ2VFdmVudDp0cnVlLFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQ6dHJ1ZSxS
+VENUcmFja0V2ZW50OnRydWUsU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudDp0cnVlLFNlbnNvckVy
+cm9yRXZlbnQ6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkVycm9yOnRydWUsU3BlZWNoUmVjb2duaXRpb25F
+dmVudDp0cnVlLFNwZWVjaFN5bnRoZXNpc0V2ZW50OnRydWUsU3RvcmFnZUV2ZW50OnRydWUsU3luY0V2
+ZW50OnRydWUsVHJhY2tFdmVudDp0cnVlLFRyYW5zaXRpb25FdmVudDp0cnVlLFdlYktpdFRyYW5zaXRp
+b25FdmVudDp0cnVlLFZSRGV2aWNlRXZlbnQ6dHJ1ZSxWUkRpc3BsYXlFdmVudDp0cnVlLFZSU2Vzc2lv
+bkV2ZW50OnRydWUsTW9qb0ludGVyZmFjZVJlcXVlc3RFdmVudDp0cnVlLFVTQkNvbm5lY3Rpb25FdmVu
+dDp0cnVlLElEQlZlcnNpb25DaGFuZ2VFdmVudDp0cnVlLEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OnRydWUs
+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OnRydWUsV2ViR0xDb250ZXh0RXZlbnQ6dHJ1ZSxFdmVu
+dDpmYWxzZSxJbnB1dEV2ZW50OmZhbHNlLFN1Ym1pdEV2ZW50OmZhbHNlLEV2ZW50VGFyZ2V0OmZhbHNl
+LEZpbGU6dHJ1ZSxIVE1MRm9ybUVsZW1lbnQ6dHJ1ZSxIaXN0b3J5OnRydWUsSFRNTERvY3VtZW50OnRy
+dWUsWE1MSHR0cFJlcXVlc3Q6dHJ1ZSxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0OmZhbHNlLEltYWdl
+RGF0YTp0cnVlLExvY2F0aW9uOnRydWUsTW91c2VFdmVudDp0cnVlLERyYWdFdmVudDp0cnVlLFBvaW50
+ZXJFdmVudDp0cnVlLFdoZWVsRXZlbnQ6dHJ1ZSxEb2N1bWVudEZyYWdtZW50OnRydWUsU2hhZG93Um9v
+dDp0cnVlLERvY3VtZW50VHlwZTp0cnVlLE5vZGU6ZmFsc2UsTm9kZUxpc3Q6dHJ1ZSxSYWRpb05vZGVM
+aXN0OnRydWUsSFRNTFBhcmFncmFwaEVsZW1lbnQ6dHJ1ZSxQcm9ncmVzc0V2ZW50OnRydWUsUmVzb3Vy
+Y2VQcm9ncmVzc0V2ZW50OnRydWUsSFRNTFNlbGVjdEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVFbGVtZW50
+OnRydWUsSFRNTFRhYmxlUm93RWxlbWVudDp0cnVlLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OnRydWUs
+SFRNTFRlbXBsYXRlRWxlbWVudDp0cnVlLENvbXBvc2l0aW9uRXZlbnQ6dHJ1ZSxGb2N1c0V2ZW50OnRy
+dWUsS2V5Ym9hcmRFdmVudDp0cnVlLFRleHRFdmVudDp0cnVlLFRvdWNoRXZlbnQ6dHJ1ZSxVSUV2ZW50
+OmZhbHNlLFdpbmRvdzp0cnVlLERPTVdpbmRvdzp0cnVlLERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
+OnRydWUsU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOnRydWUsU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6
+dHJ1ZSxXb3JrZXJHbG9iYWxTY29wZTp0cnVlLEF0dHI6dHJ1ZSxDbGllbnRSZWN0OnRydWUsRE9NUmVj
+dDp0cnVlLE5hbWVkTm9kZU1hcDp0cnVlLE1vek5hbWVkQXR0ck1hcDp0cnVlLElEQktleVJhbmdlOnRy
+dWUsU1ZHU2NyaXB0RWxlbWVudDp0cnVlLFNWR0FFbGVtZW50OnRydWUsU1ZHQW5pbWF0ZUVsZW1lbnQ6
+dHJ1ZSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
+OnRydWUsU1ZHQW5pbWF0aW9uRWxlbWVudDp0cnVlLFNWR0NpcmNsZUVsZW1lbnQ6dHJ1ZSxTVkdDbGlw
+UGF0aEVsZW1lbnQ6dHJ1ZSxTVkdEZWZzRWxlbWVudDp0cnVlLFNWR0Rlc2NFbGVtZW50OnRydWUsU1ZH
+RGlzY2FyZEVsZW1lbnQ6dHJ1ZSxTVkdFbGxpcHNlRWxlbWVudDp0cnVlLFNWR0ZFQmxlbmRFbGVtZW50
+OnRydWUsU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
+bWVudDp0cnVlLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDp0cnVlLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
+ZW50OnRydWUsU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OnRydWUsU1ZHRkVEaXNwbGFjZW1lbnRN
+YXBFbGVtZW50OnRydWUsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVGbG9vZEVsZW1l
+bnQ6dHJ1ZSxTVkdGRUZ1bmNBRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0JFbGVtZW50OnRydWUsU1ZHRkVG
+dW5jR0VsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNSRWxlbWVudDp0cnVlLFNWR0ZFR2F1c3NpYW5CbHVyRWxl
+bWVudDp0cnVlLFNWR0ZFSW1hZ2VFbGVtZW50OnRydWUsU1ZHRkVNZXJnZUVsZW1lbnQ6dHJ1ZSxTVkdG
+RU1lcmdlTm9kZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1vcnBob2xvZ3lFbGVtZW50OnRydWUsU1ZHRkVPZmZz
+ZXRFbGVtZW50OnRydWUsU1ZHRkVQb2ludExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZFU3BlY3VsYXJMaWdo
+dGluZ0VsZW1lbnQ6dHJ1ZSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRVRpbGVFbGVtZW50
+OnRydWUsU1ZHRkVUdXJidWxlbmNlRWxlbWVudDp0cnVlLFNWR0ZpbHRlckVsZW1lbnQ6dHJ1ZSxTVkdG
+b3JlaWduT2JqZWN0RWxlbWVudDp0cnVlLFNWR0dFbGVtZW50OnRydWUsU1ZHR2VvbWV0cnlFbGVtZW50
+OnRydWUsU1ZHR3JhcGhpY3NFbGVtZW50OnRydWUsU1ZHSW1hZ2VFbGVtZW50OnRydWUsU1ZHTGluZUVs
+ZW1lbnQ6dHJ1ZSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdNYXJrZXJFbGVtZW50OnRy
+dWUsU1ZHTWFza0VsZW1lbnQ6dHJ1ZSxTVkdNZXRhZGF0YUVsZW1lbnQ6dHJ1ZSxTVkdQYXRoRWxlbWVu
+dDp0cnVlLFNWR1BhdHRlcm5FbGVtZW50OnRydWUsU1ZHUG9seWdvbkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5
+bGluZUVsZW1lbnQ6dHJ1ZSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdSZWN0RWxlbWVu
+dDp0cnVlLFNWR1NldEVsZW1lbnQ6dHJ1ZSxTVkdTdG9wRWxlbWVudDp0cnVlLFNWR1N0eWxlRWxlbWVu
+dDp0cnVlLFNWR1NWR0VsZW1lbnQ6dHJ1ZSxTVkdTd2l0Y2hFbGVtZW50OnRydWUsU1ZHU3ltYm9sRWxl
+bWVudDp0cnVlLFNWR1RTcGFuRWxlbWVudDp0cnVlLFNWR1RleHRDb250ZW50RWxlbWVudDp0cnVlLFNW
+R1RleHRFbGVtZW50OnRydWUsU1ZHVGV4dFBhdGhFbGVtZW50OnRydWUsU1ZHVGV4dFBvc2l0aW9uaW5n
+RWxlbWVudDp0cnVlLFNWR1RpdGxlRWxlbWVudDp0cnVlLFNWR1VzZUVsZW1lbnQ6dHJ1ZSxTVkdWaWV3
+RWxlbWVudDp0cnVlLFNWR0dyYWRpZW50RWxlbWVudDp0cnVlLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVu
+Y3Rpb25FbGVtZW50OnRydWUsU1ZHRkVEcm9wU2hhZG93RWxlbWVudDp0cnVlLFNWR01QYXRoRWxlbWVu
+dDp0cnVlLFNWR0VsZW1lbnQ6ZmFsc2V9KQpBLkxaLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1
+ZmZlclZpZXciCkEuUkcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKQS5WUC4k
+bmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpBLkRnLiRuYXRpdmVTdXBlcmNsYXNz
+VGFnPSJBcnJheUJ1ZmZlclZpZXciCkEuV0IuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVy
+VmlldyIKQS5aRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpBLlBnLiRuYXRp
+dmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXcifSkoKQpjb252ZXJ0QWxsVG9GYXN0T2JqZWN0
+KHcpCmNvbnZlcnRUb0Zhc3RPYmplY3QoJCk7KGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkb2N1bWVudD09
+PSJ1bmRlZmluZWQiKXthKG51bGwpCnJldHVybn1pZih0eXBlb2YgZG9jdW1lbnQuY3VycmVudFNjcmlw
+dCE9InVuZGVmaW5lZCIpe2EoZG9jdW1lbnQuY3VycmVudFNjcmlwdCkKcmV0dXJufXZhciBzPWRvY3Vt
+ZW50LnNjcmlwdHMKZnVuY3Rpb24gb25Mb2FkKGIpe2Zvcih2YXIgcT0wO3E8cy5sZW5ndGg7KytxKXNb
+cV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKQphKGIudGFyZ2V0KX1mb3Io
+dmFyIHI9MDtyPHMubGVuZ3RoOysrcilzW3JdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG9uTG9hZCxm
+YWxzZSl9KShmdW5jdGlvbihhKXt2LmN1cnJlbnRTY3JpcHQ9YQp2YXIgcz1BLklxCmlmKHR5cGVvZiBk
+YXJ0TWFpblJ1bm5lcj09PSJmdW5jdGlvbiIpZGFydE1haW5SdW5uZXIocyxbXSkKZWxzZSBzKFtdKX0p
+fSkoKQovLyMgc291cmNlTWFwcGluZ1VSTD1taWdyYXRpb24uanMubWFwCg==
 ''';
diff --git a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
index 0ca93ca..06993cf 100644
--- a/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/web/migration.dart
@@ -13,7 +13,7 @@
 import 'package:nnbd_migration/src/front_end/web/file_details.dart';
 import 'package:nnbd_migration/src/front_end/web/navigation_tree.dart';
 import 'package:nnbd_migration/src/hint_action.dart';
-import 'package:path/path.dart' as _p;
+import 'package:path/path.dart' as p;
 
 import 'highlight_js.dart';
 
@@ -57,7 +57,7 @@
     final rerunMigrationButton = document.querySelector('.rerun-migration')!;
     rerunMigrationButton.onClick.listen((event) async {
       try {
-        document.body!.classes..add('rerunning');
+        document.body!.classes.add('rerunning');
         var response = await doPost('/rerun-migration');
         if (response!['success'] as bool) {
           window.location.reload();
@@ -165,27 +165,27 @@
 
   // Add navigation handlers for navigation links in the source code.
   List<Element> navLinks = parentElement.querySelectorAll('.nav-link');
-  navLinks.forEach((link) {
+  for (var link in navLinks) {
     link.onClick.listen((event) => handleNavLinkClick(event, clearEditDetails));
-  });
+  }
 
   List<Element> regions = parentElement.querySelectorAll('.region');
   if (regions.isNotEmpty) {
     var table = parentElement.querySelector('table[data-path]')!;
     var path = table.dataset['path'];
-    regions.forEach((Element anchor) {
+    for (var anchor in regions) {
       anchor.onClick.listen((event) {
         var offset = int.parse(anchor.dataset['offset']!);
         var line = int.parse(anchor.dataset['line']!);
         loadAndPopulateEditDetails(path!, offset, line);
       });
-    });
+    }
   }
 
   List<Element> addHintLinks = parentElement.querySelectorAll('.add-hint-link');
-  addHintLinks.forEach((link) {
+  for (var link in addHintLinks) {
     link.onClick.listen(handleAddHintLinkClick);
-  });
+  }
 }
 
 /// Creates an icon using a `<span>` element and the Material Icons font.
@@ -254,7 +254,7 @@
         'statusText=${jsonEncode(xhr.statusText)}',
       ]
           .map((detail) =>
-              detail.length > 40 ? detail.substring(0, 40) + '...' : detail)
+              detail.length > 40 ? '${detail.substring(0, 40)}...' : detail)
           .join(', ');
       throw AsyncError('Error reaching migration preview server: $details', st);
     }
@@ -389,7 +389,7 @@
   bottom
     ..href = getGitHubErrorUri(header, subheader, stackTrace).toString()
     ..style.display = 'initial';
-  popupPane..style.display = 'initial';
+  popupPane.style.display = 'initial';
   logError('$header: $exception', stackTrace);
 }
 
@@ -621,11 +621,11 @@
   }
 
   var fileDisplayPath = response.displayPath!;
-  var parentDirectory = _p.dirname(fileDisplayPath);
+  var parentDirectory = p.dirname(fileDisplayPath);
 
   // 'Changed ... at foo.dart:12.'
   var explanationMessage = response.explanation;
-  var relPath = _p.relative(fileDisplayPath, from: rootPath);
+  var relPath = p.relative(fileDisplayPath, from: rootPath);
   var line = response.line;
   Element explanation = document.createElement('p');
   editPanel!.append(explanation);
@@ -709,7 +709,7 @@
 /// If [path] lies within [root], return the relative path of [path] from [root].
 /// Otherwise, return [path].
 String relativePath(String path) {
-  var root = querySelector('.root')!.text! + '/';
+  var root = '${querySelector('.root')!.text!}/';
   if (path.startsWith(root)) {
     return path.substring(root.length);
   } else {
diff --git a/pkg/nnbd_migration/lib/src/potential_modification.dart b/pkg/nnbd_migration/lib/src/potential_modification.dart
deleted file mode 100644
index 3becf56..0000000
--- a/pkg/nnbd_migration/lib/src/potential_modification.dart
+++ /dev/null
@@ -1,73 +0,0 @@
-// 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.
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:nnbd_migration/src/conditional_discard.dart';
-
-/// Records information about how a conditional expression or statement might
-/// need to be modified.
-class ConditionalModification {
-  final int offset;
-
-  final int end;
-
-  final bool isStatement;
-
-  final ConditionalDiscard discard;
-
-  final _KeepNode condition;
-
-  final _KeepNode thenStatement;
-
-  final _KeepNode? elseStatement;
-
-  factory ConditionalModification(AstNode node, ConditionalDiscard discard) {
-    if (node is IfStatement) {
-      return ConditionalModification._(
-          node.offset,
-          node.end,
-          true,
-          discard,
-          _KeepNode(node.condition),
-          _KeepNode(node.thenStatement),
-          node.elseStatement == null ? null : _KeepNode(node.elseStatement!));
-    } else if (node is IfElement) {
-      return ConditionalModification._(
-          node.offset,
-          node.end,
-          node is Statement,
-          discard,
-          _KeepNode(node.condition),
-          _KeepNode(node.thenElement),
-          node.elseElement == null ? null : _KeepNode(node.elseElement!));
-    } else {
-      throw UnimplementedError('TODO(paulberry)');
-    }
-  }
-
-  ConditionalModification._(this.offset, this.end, this.isStatement,
-      this.discard, this.condition, this.thenStatement, this.elseStatement);
-}
-
-/// Helper object used by [ConditionalModification] to keep track of AST nodes
-/// within the conditional expression.
-class _KeepNode {
-  final int offset;
-
-  final int end;
-
-  final bool isExpression;
-
-  factory _KeepNode(AstNode node) {
-    int offset = node.offset;
-    int end = node.end;
-    if (node is Block && node.statements.isNotEmpty) {
-      offset = node.statements.beginToken!.offset;
-      end = node.statements.endToken!.end;
-    }
-    return _KeepNode._(offset, end, node is Expression);
-  }
-
-  _KeepNode._(this.offset, this.end, this.isExpression);
-}
diff --git a/pkg/nnbd_migration/lib/src/utilities/progress_bar.dart b/pkg/nnbd_migration/lib/src/utilities/progress_bar.dart
index 60a57ca..b4bce92 100644
--- a/pkg/nnbd_migration/lib/src/utilities/progress_bar.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/progress_bar.dart
@@ -44,7 +44,7 @@
       _shouldDrawProgress = true;
       _width = stdout.terminalColumns;
       _innerWidth = stdout.terminalColumns - 2;
-      _logger.write('[' + ' ' * _innerWidth + ']');
+      _logger.write('[${' ' * _innerWidth}]');
     }
   }
 
@@ -54,7 +54,7 @@
     if (!_shouldDrawProgress) {
       return;
     }
-    _logger.write('\r' + ' ' * _width + '\r');
+    _logger.write('\r${' ' * _width}\r');
   }
 
   /// Draw the progress bar as complete, and print two newlines.
@@ -62,7 +62,7 @@
     if (!_shouldDrawProgress) {
       return;
     }
-    _logger.write('\r[' + '-' * _innerWidth + ']\n\n');
+    _logger.write('\r[${'-' * _innerWidth}]\n\n');
   }
 
   /// Progress the bar by one tick.
@@ -74,10 +74,7 @@
     var fractionComplete =
         max(0, _tickCount * _innerWidth ~/ _totalTickCount - 1);
     var remaining = _innerWidth - fractionComplete - 1;
-    _logger.write('\r[' + // Bring cursor back to the start of the line.
-        '-' * fractionComplete + // Print complete work.
-        AnsiProgress.kAnimationItems[_tickCount % 4] + // Print spinner.
-        ' ' * remaining + // Print remaining work.
-        ']');
+    var spinner = AnsiProgress.kAnimationItems[_tickCount % 4];
+    _logger.write('\r[${'-' * fractionComplete}$spinner${' ' * remaining}]');
   }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/scoped_set.dart b/pkg/nnbd_migration/lib/src/utilities/scoped_set.dart
index 702e17b..c422246 100644
--- a/pkg/nnbd_migration/lib/src/utilities/scoped_set.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/scoped_set.dart
@@ -31,7 +31,11 @@
   ///
   /// This is useful in post-dominator analysis. Upon non-convergent branching,
   /// all scopes of potentially post-dominated elements becomes empty.
-  void clearEachScope() => _scopeStack.forEach((scope) => scope.clear());
+  void clearEachScope() {
+    for (var scope in _scopeStack) {
+      scope.clear();
+    }
+  }
 
   /// Create a scope like [pushScope], and use it to perform some [action]
   /// before popping it.
@@ -66,6 +70,9 @@
       });
 
   /// Remove element from the current scope and all containing scopes.
-  void removeFromAllScopes(T t) =>
-      _scopeStack.forEach((scope) => scope.remove(t));
+  void removeFromAllScopes(T t) {
+    for (var scope in _scopeStack) {
+      scope.remove(t);
+    }
+  }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
index ff6fb77..497948a 100644
--- a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
@@ -130,7 +130,7 @@
       }
     }).join(' '));
     stderr.write(' ');
-    stderr.write('$executable');
+    stderr.write(executable);
     if (arguments.isNotEmpty) {
       for (String arg in arguments) {
         if (arg.contains(quotables)) {
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index 8246f140..7aa0764 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -371,7 +371,7 @@
   DecoratedType _createDecoratedElementType(Element element) {
     if (_graph.isBeingMigrated(element.library!.source) &&
         !_isLoadLibraryElement(element)) {
-      var description;
+      Object? description;
       if (ElementTypeProvider.current is MigrationResolutionHooksImpl) {
         // Don't attempt to call toString() on element, or we will overflow.
         description = element.location;
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index 2965a8a..d4e0c8e 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -109,7 +109,7 @@
   File addPackageFile(String packageName, String pathInLib, String content) {
     var packagePath = '/.pub-cache/$packageName';
     knownPackages.add(packageName);
-    return newFile('$packagePath/lib/$pathInLib', content: content);
+    return newFile2('$packagePath/lib/$pathInLib', content);
   }
 
   /// Add the quiver package and a library with URI,
@@ -125,11 +125,8 @@
   }
 
   Source addSource(String path, String content, [Uri? uri]) {
-    File file = newFile(path, content: content);
-    Source source = file.createSource(uri);
-    driver!.addFile(file.path);
-    driver!.changeFile(file.path);
-    return source;
+    File file = newFile2(path, content);
+    return file.createSource(uri);
   }
 
   /// Add the test_core package and a library with URI,
@@ -174,13 +171,13 @@
     );
 
     newFolder(testsPath);
-    newFile('$testsPath/.packages', content: '''
+    newFile2('$testsPath/.packages', '''
 tests:file://$testsPath/lib
 ''');
     var pubspecPath = '$testsPath/pubspec.yaml';
     // Subclasses may write out a different file first.
     if (!getFile(pubspecPath).exists) {
-      newFile(pubspecPath, content: '''
+      newFile2(pubspecPath, '''
 name: tests
 version: 1.0.0
 environment:
@@ -218,8 +215,8 @@
       'generator': 'pub',
       'generatorVersion': '2.10.0'
     };
-    newFile('$testsPath/.dart_tool/package_config.json',
-        content: JsonEncoder.withIndent('  ').convert(packageConfigJson));
+    newFile2('$testsPath/.dart_tool/package_config.json',
+        JsonEncoder.withIndent('  ').convert(packageConfigJson));
     _analysisContextCollection = AnalysisContextCollectionImpl(
       includedPaths: [convertPath(homePath)],
       enableIndex: true,
diff --git a/pkg/nnbd_migration/test/abstract_single_unit.dart b/pkg/nnbd_migration/test/abstract_single_unit.dart
index 7934ab3..c5b466d 100644
--- a/pkg/nnbd_migration/test/abstract_single_unit.dart
+++ b/pkg/nnbd_migration/test/abstract_single_unit.dart
@@ -62,7 +62,7 @@
   void setUp() {
     var testRoot = testsPath;
     if (analyzeWithNnbd) {
-      newFile('$testRoot/analysis_options.yaml', content: '''
+      newFile2('$testRoot/analysis_options.yaml', '''
 analyzer:
   enable-experiment:
     - non-nullable
diff --git a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
index dcc89c4..4670640 100644
--- a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
+++ b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
@@ -612,7 +612,7 @@
 
 class _ContextWithFiles with ResourceProviderMixin {
   Future<_ContextWithUnitElement> buildUnitElement(String content) async {
-    var file = newFile('/home/test/lib/test.dart', content: content);
+    var file = newFile2('/home/test/lib/test.dart', content);
 
     var sdkRoot = newFolder('/sdk');
     createMockSdk(
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index c88be9a..a60ba1b 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -54,10 +54,10 @@
       bool warnOnWeakCode = false,
       bool allowErrors = false}) async {
     for (var path in migratedInput.keys) {
-      newFile(path, content: migratedInput[path]!);
+      newFile2(path, migratedInput[path]!);
     }
     for (var path in input.keys) {
-      newFile(path, content: input[path]!);
+      newFile2(path, input[path]!);
     }
     var listener = TestMigrationListener();
     var migration = NullabilityMigration(listener,
@@ -9484,12 +9484,6 @@
     with _ProvisionalApiTestCases {
   @override
   bool get _usePermissiveMode => true;
-
-  // TODO(danrubel): Remove this once the superclass test has been fixed.
-  // This runs in permissive mode but not when permissive mode is disabled.
-  Future<void> test_instanceCreation_noTypeArguments_noParameters() async {
-    super.test_instanceCreation_noTypeArguments_noParameters();
-  }
 }
 
 /// Tests of the provisional API, where the driver is reset between calls to
diff --git a/pkg/nnbd_migration/test/decorated_type_test.dart b/pkg/nnbd_migration/test/decorated_type_test.dart
index 0ca6fe8..82d20e3 100644
--- a/pkg/nnbd_migration/test/decorated_type_test.dart
+++ b/pkg/nnbd_migration/test/decorated_type_test.dart
@@ -32,7 +32,7 @@
 
   final Variables _variables;
 
-  final _ElementTypeProvider elementTypeProvider;
+  final _ElementTypeProvider _elementTypeProvider;
 
   @override
   final decoratedTypeParameterBounds = DecoratedTypeParameterBounds();
@@ -45,7 +45,7 @@
   }
 
   DecoratedTypeTest._(this.graph, this.typeProvider, this._variables)
-      : elementTypeProvider = _ElementTypeProvider(_variables);
+      : _elementTypeProvider = _ElementTypeProvider(_variables);
 
   NullabilityNode get always => graph.always;
 
@@ -60,7 +60,7 @@
 
   void setUp() {
     DecoratedTypeParameterBounds.current = decoratedTypeParameterBounds;
-    ElementTypeProvider.current = elementTypeProvider;
+    ElementTypeProvider.current = _elementTypeProvider;
   }
 
   void tearDown() {
@@ -341,7 +341,7 @@
         function(dynamic_, typeFormals: [t], node: never)) as FunctionType;
     assertDartType(type, 'dynamic Function<T extends dynamic>()');
     assertDartType(
-        elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
+        _elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
         'dynamic');
   }
 
@@ -351,7 +351,7 @@
         function(dynamic_, typeFormals: [t], node: never)) as FunctionType;
     assertDartType(type, 'dynamic Function<T extends num?>()');
     assertDartType(
-        elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
+        _elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
         'num?');
   }
 
@@ -361,7 +361,7 @@
         function(dynamic_, typeFormals: [t], node: never)) as FunctionType;
     assertDartType(type, 'dynamic Function<T extends Object?>()');
     assertDartType(
-        elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
+        _elementTypeProvider.getTypeParameterBound(type.typeFormals[0])!,
         'Object?');
   }
 
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index 2be4a72..8609209 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -471,6 +471,14 @@
     var typeSystem = coreLibrary.typeSystem;
 
     var uriStr = 'package:test/test.dart';
+    var uri = Uri.parse(uriStr);
+    var source = _MockSource(uri);
+
+    var definingUnit = CompilationUnitElementImpl(
+      source: source,
+      librarySource: source,
+      lineInfo: LineInfo([0]),
+    );
 
     _myLibrary = LibraryElementImpl(
       analysisContext,
@@ -482,19 +490,10 @@
         sdkLanguageVersion: Version.parse('2.10.0'),
         flags: [EnableString.non_nullable],
       ),
-    );
-    _myLibrary!.typeSystem = typeSystem;
-    _myLibrary!.typeProvider = coreLibrary.typeProvider;
-
-    var uri = Uri.parse(uriStr);
-    var source = _MockSource(uri);
-
-    var definingUnit = CompilationUnitElementImpl();
-    definingUnit.source = source;
-    definingUnit.librarySource = source;
-
-    definingUnit.enclosingElement = _myLibrary;
-    _myLibrary!.definingCompilationUnit = definingUnit;
+    )
+      ..definingCompilationUnit = definingUnit
+      ..typeProvider = coreLibrary.typeProvider
+      ..typeSystem = typeSystem;
   }
 
   static void _setCoreLibrariesTypeSystem(TypeProviderImpl typeProvider) {
diff --git a/pkg/nnbd_migration/test/front_end/analysis_abstract.dart b/pkg/nnbd_migration/test/front_end/analysis_abstract.dart
index dea20d0..41f2ec0 100644
--- a/pkg/nnbd_migration/test/front_end/analysis_abstract.dart
+++ b/pkg/nnbd_migration/test/front_end/analysis_abstract.dart
@@ -16,14 +16,14 @@
   AbstractAnalysisTest();
 
   void addAnalysisOptionsFile(String content) {
-    newFile(
+    newFile2(
         resourceProvider.pathContext
             .join(projectPath!, 'analysis_options.yaml'),
-        content: content);
+        content);
   }
 
   String? addTestFile(String content) {
-    newFile(testFile!, content: content);
+    newFile2(testFile!, content);
     testCode = content;
     return testFile;
   }
diff --git a/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart b/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
index 047149f..b061405 100644
--- a/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
+++ b/pkg/nnbd_migration/test/front_end/nnbd_migration_test_base.dart
@@ -193,7 +193,7 @@
     shouldBeMigratedFunction ??= (String? path) => true;
     var testPaths = <String>[];
     files.forEach((String path, String content) {
-      newFile(path, content: content);
+      newFile2(path, content);
       testPaths.add(path);
     });
     pathsToProcess ??= testPaths;
diff --git a/pkg/nnbd_migration/test/front_end/region_renderer_test.dart b/pkg/nnbd_migration/test/front_end/region_renderer_test.dart
index a324047..8fb31f6 100644
--- a/pkg/nnbd_migration/test/front_end/region_renderer_test.dart
+++ b/pkg/nnbd_migration/test/front_end/region_renderer_test.dart
@@ -131,11 +131,6 @@
   @override
   String get homePath => _switchToDriveD(super.homePath);
 
-  @override
-  void setUp() {
-    super.setUp();
-  }
-
   Future<void>
       test_informationalRegion_containsTraceLinks_separateDrive() async {
     // See https://github.com/dart-lang/sdk/issues/43178. Linking from a file on
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index f9a4131..d0913a7 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -142,7 +142,7 @@
   Future<void> analyze(String content,
       {bool removeViaComments = false, bool warnOnWeakCode = true}) async {
     var sourcePath = convertPath('$testsPath/lib/test.dart');
-    newFile(sourcePath, content: content);
+    newFile2(sourcePath, content);
     var listener = TestMigrationListener();
     var migration = NullabilityMigration(listener,
         instrumentation: _InstrumentationClient(this),
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index 0d289f8..6384be9 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -1052,7 +1052,7 @@
     await runWithPreviewServer(cli, [projectDir], (url) async {
       var uri = Uri.parse(url!);
       await assertPreviewServerResponsive(
-          uri.replace(path: uri.path + '/').toString());
+          uri.replace(path: '${uri.path}/').toString());
     });
   }
 
@@ -2196,7 +2196,7 @@
           makePackageEntry(entry.key, entry.value)
       ]
     };
-    return JsonEncoder.withIndent('  ').convert(json) + '\n';
+    return '${JsonEncoder.withIndent('  ').convert(json)}\n';
   }
 
   ArgResults _parseArgs(List<String> args) {
diff --git a/pkg/nnbd_migration/tool/src/package.dart b/pkg/nnbd_migration/tool/src/package.dart
index dc4dec4..5ef259c 100644
--- a/pkg/nnbd_migration/tool/src/package.dart
+++ b/pkg/nnbd_migration/tool/src/package.dart
@@ -76,7 +76,7 @@
 
   @override
   String toString() {
-    return '$_clonePath ($label)' + (_keepUpdated! ? ' [synced]' : '');
+    return '$_clonePath ($label)${_keepUpdated! ? ' [synced]' : ''}';
   }
 
   /// Initialize the package with a shallow clone.  Run only once per
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 2aef55f..38658de 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -145,6 +145,8 @@
 vm_snapshot_analysis/test/*: SkipByDesign # Only meant to run on vm
 
 [ $system == windows ]
+dds/test/devtools_server/devtools_server_connection_test: Pass, Slow
+dds/test/devtools_server/devtools_server_test: Pass, Slow
 front_end/test/fasta/bootstrap_test: Skip # Issue 31902
 front_end/test/fasta/strong_test: Pass, Slow, Timeout
 front_end/test/fasta/text_serialization_test: Pass, Slow, Timeout
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 9284ec3..3202bf6 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -577,11 +577,9 @@
   static const x64c = Architecture._('x64c');
   static const arm = Architecture._('arm');
   static const arm_x64 = Architecture._('arm_x64');
-  static const armv6 = Architecture._('armv6');
   static const arm64 = Architecture._('arm64');
   static const arm64c = Architecture._('arm64c');
   static const simarm = Architecture._('simarm');
-  static const simarmv6 = Architecture._('simarmv6');
   static const simarm64 = Architecture._('simarm64');
   static const simarm64c = Architecture._('simarm64c');
   static const riscv32 = Architecture._('riscv32');
@@ -596,12 +594,10 @@
     x64,
     x64c,
     arm,
-    armv6,
     arm_x64,
     arm64,
     arm64c,
     simarm,
-    simarmv6,
     simarm64,
     simarm64c,
     riscv32,
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index db4f022..34a00ff 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -105,8 +105,8 @@
 dart2js:              Compile to JavaScript using dart2js.
 dart2analyzer:        Perform static analysis on Dart code using the analyzer.
 compare_analyzer_cfe: Compare analyzer and common front end representations.
-dartdevc:             Compile to JavaScript using dart2js.
-dartdevk:             Compile to JavaScript using dartdevk.
+dartdevc:             Compile to JavaScript using dartdevc.
+dartdevk:             Compile to JavaScript using dartdevc (same as dartdevc).
 app_jitk:             Compile the Dart code into Kernel and then into an app
                       snapshot.
 dartk:                Compile the Dart code into Kernel before running test.
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index 4cba518..fdaa061 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -257,8 +257,6 @@
       case Architecture.arm_x64:
       case Architecture.arm64:
       case Architecture.arm64c:
-      case Architecture.simarmv6:
-      case Architecture.armv6:
       case Architecture.simarm64:
       case Architecture.simarm64c:
       case Architecture.simriscv32:
diff --git a/pkg/test_runner/lib/src/test_file.dart b/pkg/test_runner/lib/src/test_file.dart
index 3c71e5b..b39ba90 100644
--- a/pkg/test_runner/lib/src/test_file.dart
+++ b/pkg/test_runner/lib/src/test_file.dart
@@ -12,7 +12,7 @@
 final _vmOptionsRegExp = RegExp(r"// VMOptions=(.*)");
 final _environmentRegExp = RegExp(r"// Environment=(.*)");
 final _packagesRegExp = RegExp(r"// Packages=(.*)");
-final _experimentRegExp = RegExp(r"^--enable-experiment=([a-z,-]+)$");
+final _experimentRegExp = RegExp(r"^--enable-experiment=([a-z0-9,-]+)$");
 
 List<String> _splitWords(String s) =>
     s.split(' ').where((e) => e != '').toList();
diff --git a/pkg/test_runner/tool/orphan_files.dart b/pkg/test_runner/tool/orphan_files.dart
index 968458b..6457209 100644
--- a/pkg/test_runner/tool/orphan_files.dart
+++ b/pkg/test_runner/tool/orphan_files.dart
@@ -15,11 +15,8 @@
 import 'package:analyzer/dart/analysis/context_locator.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-
 import 'package:test_runner/src/path.dart';
 
-AnalysisContext _analysisContext;
-
 void main(List<String> arguments) {
   _initAnalysisContext();
 
@@ -34,14 +31,7 @@
   }
 }
 
-void _initAnalysisContext() {
-  var roots = ContextLocator().locateRoots(includedPaths: ['test']);
-  if (roots.length != 1) {
-    throw StateError('Expected to find exactly one context root, got $roots');
-  }
-
-  _analysisContext = ContextBuilder().createContext(contextRoot: roots[0]);
-}
+AnalysisContext _analysisContext;
 
 void _checkTestDirectory(Directory directory) {
   print('-- ${directory.path} --');
@@ -72,9 +62,19 @@
   if (!hasOrphan) print('No orphans :)');
 }
 
+void _initAnalysisContext() {
+  var roots = ContextLocator().locateRoots(includedPaths: ['test']);
+  if (roots.length != 1) {
+    throw StateError('Expected to find exactly one context root, got $roots');
+  }
+
+  _analysisContext = ContextBuilder().createContext(contextRoot: roots[0]);
+}
+
 void _parseReferences(Set<String> importedPaths, String filePath) {
   var absolute = Path(filePath).absolute.toNativePath();
-  var parseResult = _analysisContext.currentSession.getParsedUnit(absolute);
+  var analysisSession = _analysisContext.currentSession;
+  var parseResult = analysisSession.getParsedUnit(absolute);
   var unit = (parseResult as ParsedUnitResult).unit;
 
   void add(String importPath) {
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index e77ba6b..e228973 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -25,7 +25,6 @@
         InvocationMode,
         DiagnosticMessage,
         DiagnosticMessageHandler,
-        ExperimentalFlag,
         FileSystem,
         FileSystemEntity,
         NnbdMode,
@@ -277,7 +276,7 @@
     ..verbosity = verbosity;
 
   if (nullSafety == null &&
-      compilerOptions.isExperimentEnabled(ExperimentalFlag.nonNullable)) {
+      compilerOptions.globalFeatures.nonNullable.isEnabled) {
     await autoDetectNullSafetyMode(mainUri, compilerOptions);
   }
 
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 16571c0..7a67f89 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -409,7 +409,8 @@
   bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) =>
       super.allowPlatformPrivateLibraryAccess(importer, imported) ||
       importer.path.contains('runtime/tests/vm/dart') ||
-      importer.path.contains('test-lib');
+      importer.path.contains('test-lib') ||
+      importer.path.contains('tests/ffi');
 
   // TODO(sigmund,ahe): limit this to `dart-ext` libraries only (see
   // https://github.com/dart-lang/sdk/issues/29763).
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index 22f2195..3b3a837 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -223,9 +223,9 @@
   final Field arraySizeField;
   final Field arrayNestedDimensionsField;
   final Procedure arrayCheckIndex;
-  final Field arrayNestedDimensionsFlattened;
-  final Field arrayNestedDimensionsFirst;
-  final Field arrayNestedDimensionsRest;
+  final Procedure arrayNestedDimensionsFlattened;
+  final Procedure arrayNestedDimensionsFirst;
+  final Procedure arrayNestedDimensionsRest;
   final Constructor structFromTypedDataBase;
   final Constructor unionFromTypedDataBase;
   final Constructor arrayConstructor;
@@ -364,12 +364,12 @@
             index.getField('dart:ffi', 'Array', '_nestedDimensions'),
         arrayCheckIndex =
             index.getProcedure('dart:ffi', 'Array', '_checkIndex'),
-        arrayNestedDimensionsFlattened =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsFlattened'),
-        arrayNestedDimensionsFirst =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsFirst'),
-        arrayNestedDimensionsRest =
-            index.getField('dart:ffi', 'Array', '_nestedDimensionsRest'),
+        arrayNestedDimensionsFlattened = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsFlattened'),
+        arrayNestedDimensionsFirst = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsFirst'),
+        arrayNestedDimensionsRest = index.getProcedure(
+            'dart:ffi', 'Array', 'get:_nestedDimensionsRest'),
         structFromTypedDataBase =
             index.getConstructor('dart:ffi', 'Struct', '_fromTypedDataBase'),
         unionFromTypedDataBase =
diff --git a/pkg/vm/lib/transformations/ffi/definitions.dart b/pkg/vm/lib/transformations/ffi/definitions.dart
index fe38da0..b5d095e 100644
--- a/pkg/vm/lib/transformations/ffi/definitions.dart
+++ b/pkg/vm/lib/transformations/ffi/definitions.dart
@@ -8,6 +8,7 @@
         messageFfiAbiSpecificIntegerMappingInvalid,
         messageFfiPackedAnnotationAlignment,
         messageNonPositiveArrayDimensions,
+        templateFfiCompoundImplementsFinalizable,
         templateFfiEmptyStruct,
         templateFfiFieldAnnotation,
         templateFfiFieldNull,
@@ -321,6 +322,19 @@
       return null;
     }
 
+    final finalizableType = FutureOrType(
+        InterfaceType(finalizableClass, Nullability.nullable),
+        Nullability.nullable);
+    if (env.isSubtypeOf(InterfaceType(node, Nullability.nonNullable),
+        finalizableType, SubtypeCheckMode.ignoringNullabilities)) {
+      diagnosticReporter.report(
+          templateFfiCompoundImplementsFinalizable.withArguments(
+              node.superclass!.name, node.name),
+          node.fileOffset,
+          1,
+          node.location!.file);
+    }
+
     if (node.superclass == structClass) {
       final packingAnnotations = _getPackedAnnotations(node);
       if (packingAnnotations.length > 1) {
diff --git a/pkg/vm/lib/transformations/ffi/finalizable.dart b/pkg/vm/lib/transformations/ffi/finalizable.dart
index 758465b..84b1469 100644
--- a/pkg/vm/lib/transformations/ffi/finalizable.dart
+++ b/pkg/vm/lib/transformations/ffi/finalizable.dart
@@ -14,6 +14,9 @@
 /// This transformation is not AST-node preserving. [Expression]s and
 /// [Statement]s can be replaced by other [Expression]s and [Statement]s
 /// respectively. This means one cannot do `visitX() { super.visitX() as X }`.
+///
+/// This transform must be run on the standard libaries as well. For example
+/// `NativeFinalizer`s `attach` implementation depends on it.
 mixin FinalizableTransformer on Transformer {
   TypeEnvironment get env;
   Procedure get reachabilityFenceFunction;
diff --git a/pkg/vm/lib/transformations/ffi/native.dart b/pkg/vm/lib/transformations/ffi/native.dart
index 51a4d71..fedd286 100644
--- a/pkg/vm/lib/transformations/ffi/native.dart
+++ b/pkg/vm/lib/transformations/ffi/native.dart
@@ -6,6 +6,8 @@
     show
         messageFfiNativeMustBeExternal,
         messageFfiNativeOnlyNativeFieldWrapperClassCanBePointer,
+        templateCantHaveNamedParameters,
+        templateCantHaveOptionalParameters,
         templateFfiNativeUnexpectedNumberOfParameters,
         templateFfiNativeUnexpectedNumberOfParametersWithReceiver;
 
@@ -344,6 +346,25 @@
   // annotation matches.
   bool _verifySignatures(Procedure node, FunctionType dartFunctionType,
       FunctionType ffiFunctionType, int annotationOffset) {
+    if (ffiFunctionType.namedParameters.length > 0) {
+      diagnosticReporter.report(
+          templateCantHaveNamedParameters.withArguments('FfiNative'),
+          annotationOffset,
+          0,
+          node.location?.file);
+      return false;
+    }
+
+    if (ffiFunctionType.positionalParameters.length >
+        ffiFunctionType.requiredParameterCount) {
+      diagnosticReporter.report(
+          templateCantHaveOptionalParameters.withArguments('FfiNative'),
+          annotationOffset,
+          0,
+          node.location?.file);
+      return false;
+    }
+
     if (dartFunctionType.positionalParameters.length !=
         ffiFunctionType.positionalParameters.length) {
       final template = (node.isStatic
@@ -384,7 +405,7 @@
       FunctionType ffiFunctionType,
       List<Expression> argumentList) {
     if (!_verifySignatures(
-        node, ffiFunctionType, dartFunctionType, annotationOffset)) {
+        node, dartFunctionType, ffiFunctionType, annotationOffset)) {
       return node;
     }
 
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index 0a765e3..c45cc02 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -464,9 +464,7 @@
     }
     if (size != UNKNOWN) {
       return ConstantExpression(
-          IntConstant(size),
-          InterfaceType(listClass, Nullability.legacy,
-              [InterfaceType(intClass, Nullability.legacy)]));
+          IntConstant(size), InterfaceType(intClass, Nullability.legacy));
     }
     // Size unknown.
     return null;
@@ -689,7 +687,7 @@
             InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                 arrayNestedDimensionsFlattened.name,
                 interfaceTarget: arrayNestedDimensionsFlattened,
-                resultType: arrayNestedDimensionsFlattened.type)),
+                resultType: arrayNestedDimensionsFlattened.getterType)),
         type: coreTypes.intNonNullableRawType)
       ..fileOffset = node.fileOffset;
     final offsetVar = VariableDeclaration("#offset",
@@ -729,11 +727,11 @@
                 InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                     arrayNestedDimensionsFirst.name,
                     interfaceTarget: arrayNestedDimensionsFirst,
-                    resultType: arrayNestedDimensionsFirst.type),
+                    resultType: arrayNestedDimensionsFirst.getterType),
                 InstanceGet(InstanceAccessKind.Instance, VariableGet(arrayVar),
                     arrayNestedDimensionsRest.name,
                     interfaceTarget: arrayNestedDimensionsRest,
-                    resultType: arrayNestedDimensionsRest.type)
+                    resultType: arrayNestedDimensionsRest.getterType)
               ], types: [
                 dartType
               ])));
diff --git a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
index 6b5f9b2..762b17e 100644
--- a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
+++ b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
@@ -37,9 +37,16 @@
           metadata.protectedNames.add(name + "=");
         }
         final parent = node.parent;
+        final Library library;
         if (parent is Class) {
           metadata.protectedNames.add(parent.name);
+          library = parent.enclosingLibrary;
+        } else if (parent is Library) {
+          library = parent;
+        } else {
+          throw "Unexpected parent";
         }
+        metadata.protectedNames.add(library.importUri.toString());
         break;
       }
     }
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 02cab5e..209910e 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -875,11 +875,6 @@
     if (_usedTypedefs.add(typedef)) {
       typedef.annotations = const <Expression>[];
       _pass1.transformTypeParameterList(typedef.typeParameters, typedef);
-      _pass1.transformTypeParameterList(
-          typedef.typeParametersOfFunctionType, typedef);
-      _pass1.transformVariableDeclarationList(
-          typedef.positionalParameters, typedef);
-      _pass1.transformVariableDeclarationList(typedef.namedParameters, typedef);
       typedef.type?.accept(typeVisitor);
     }
   }
diff --git a/pkg/vm/test/common_test_utils.dart b/pkg/vm/test/common_test_utils.dart
index ed5b3f5..b657777 100644
--- a/pkg/vm/test/common_test_utils.dart
+++ b/pkg/vm/test/common_test_utils.dart
@@ -89,14 +89,25 @@
   }
 }
 
-String kernelLibraryToString(Library library) {
+/// Returns a human-readable string representation of [library].
+///
+/// If [removeSelectorIds] is provided, selector ids above 99 are removed.
+/// Extra libraries apart from the main library are passed to the front-end as
+/// additional dills, which places them last in the library list, causing them
+/// to have very high (and often changing) selector IDs.
+String kernelLibraryToString(Library library, {bool removeSelectorIds: false}) {
   final StringBuffer buffer = new StringBuffer();
   final printer = new Printer(buffer, showMetadata: true);
   printer.writeLibraryFile(library);
   printer.writeConstantTable(library.enclosingComponent!);
-  return buffer
-      .toString()
-      .replaceAll(library.importUri.toString(), library.name!);
+  String result =
+      buffer.toString().replaceAll(library.importUri.toString(), library.name!);
+  if (removeSelectorIds) {
+    result = result
+        .replaceAll(RegExp(r',methodOrSetterSelectorId:\d{3,}'), '')
+        .replaceAll(RegExp(r',getterSelectorId:\d{3,}'), '');
+  }
+  return result;
 }
 
 String kernelComponentToString(Component component) {
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index ef627ac..6e0473c 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -499,9 +499,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -509,9 +509,9 @@
           .transform(utf8.decoder)
           .transform(splitter)
           .listen((String s) async {
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           await collectAndCheckCoverageData(port, true);
           if (!portLineCompleter.isCompleted) {
@@ -603,9 +603,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -618,9 +618,9 @@
         if (s == expectStdoutContains) {
           foundExpectedString = true;
         }
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           await collectAndCheckCoverageData(port, true,
               onGetAllVerifyCount: false, coverageForLines: coverageLines);
@@ -869,9 +869,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -879,9 +879,9 @@
           .transform(utf8.decoder)
           .transform(splitter)
           .listen((String s) async {
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           Set<int> hits1 =
               await collectAndCheckCoverageData(port, true, resume: false);
@@ -972,10 +972,10 @@
 
       String portLine = await portLineCompleter.future;
 
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
-      expect(observatoryPortRegExp.hasMatch(portLine), isTrue);
-      final match = observatoryPortRegExp.firstMatch(portLine)!;
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
+      expect(dartVMServicePortRegExp.hasMatch(portLine), isTrue);
+      final match = dartVMServicePortRegExp.firstMatch(portLine)!;
       final port = int.parse(match.group(1)!);
 
       var remoteVm = new RemoteVm(port);
@@ -1256,9 +1256,9 @@
         scriptOrDill.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -1267,9 +1267,9 @@
           .transform(splitter)
           .listen((String s) async {
         print("vm stdout: $s");
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           RemoteVm remoteVm = new RemoteVm(port);
 
diff --git a/pkg/vm/test/obfuscation_test.dart b/pkg/vm/test/obfuscation_test.dart
new file mode 100644
index 0000000..8ee7401
--- /dev/null
+++ b/pkg/vm/test/obfuscation_test.dart
@@ -0,0 +1,188 @@
+// 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:convert';
+import "dart:io";
+
+import 'package:front_end/src/api_unstable/vm.dart'
+    show computePlatformBinariesLocation;
+
+main() {
+  final Directory tmpDir =
+      Directory.systemTemp.createTempSync("obfuscationtest");
+  try {
+    final Uri tmpDirUri = tmpDir.uri;
+    final Uri secretfilename = tmpDirUri.resolve("secretfilename.dart");
+    final File secretfilenameFile = new File.fromUri(secretfilename);
+    secretfilenameFile.writeAsStringSync("""
+import "secretfilename2.dart";
+
+main() {
+  print("Hello, World!");
+  verySecretFoo();
+}
+""");
+    final Uri secretfilename2 = tmpDirUri.resolve("secretfilename2.dart");
+    final File secretfilename2File = new File.fromUri(secretfilename2);
+    secretfilename2File.writeAsStringSync("""
+@pragma('vm:entry-point')
+void verySecretFoo() {
+  print("foo!");
+  alsoVerySecretFoo();
+}
+
+void alsoVerySecretFoo() {
+  print("foo too!");
+}
+""");
+
+    List<MappingPair> mapping = getSnapshotMap(tmpDir, secretfilenameFile);
+    bool good = verify(mapping, {
+      // This contains @pragma('vm:entry-point') and the uri should not change.
+      secretfilename2.toString(),
+      // This contains @pragma('vm:entry-point') and the name should not change.
+      "verySecretFoo",
+    }, {
+      // This is not special and should have been obfuscated.
+      secretfilename.toString(),
+      // This is not special and should have been obfuscated.
+      "alsoVerySecretFoo"
+    });
+    if (!good) throw "Obfuscation didn't work as expected";
+    print("Good");
+  } finally {
+    tmpDir.deleteSync(recursive: true);
+  }
+}
+
+List<MappingPair> getSnapshotMap(Directory tmpDir, File compileDartFile) {
+  final Uri genKernel = Platform.script.resolve('../bin/gen_kernel.dart');
+  final File genKernelFile = new File.fromUri(genKernel);
+  if (!genKernelFile.existsSync()) {
+    throw "Didn't find gen_kernel at $genKernel";
+  }
+
+  File resolvedExecutableFile = new File(Platform.resolvedExecutable);
+  Uri resolvedExecutable = resolvedExecutableFile.uri;
+  String genSnapshotFilename = "gen_snapshot";
+  if (Platform.isWindows) genSnapshotFilename += ".exe";
+
+  Uri genSnapshot = resolvedExecutable.resolve(genSnapshotFilename);
+  File genSnapshotFile = new File.fromUri(genSnapshot);
+  if (!genSnapshotFile.existsSync()) {
+    print(
+        "Didn't find gen_kernel at $genSnapshot... Trying utils/$genSnapshotFilename");
+    genSnapshot = resolvedExecutable.resolve("utils/$genSnapshotFilename");
+    genSnapshotFile = new File.fromUri(genSnapshot);
+    if (!genSnapshotFile.existsSync()) {
+      throw "Didn't find gen_kernel at $genSnapshot";
+    }
+  }
+
+  final Uri platformDill = computePlatformBinariesLocation()
+      .resolve('vm_platform_strong_product.dill');
+  final File platformDillFile = new File.fromUri(platformDill);
+  if (!platformDillFile.existsSync()) {
+    throw "Didn't find vm_platform_strong_product at $platformDill";
+  }
+
+  final Uri tmpDirUri = tmpDir.uri;
+
+  final Uri kernelDill = tmpDirUri.resolve("kernel.dill");
+  final File kernelDillFile = new File.fromUri(kernelDill);
+
+  print("Running gen_kernel");
+  // Extracted from pkg/dart2native/lib/dart2native.dart.
+  final ProcessResult kernelRun = Process.runSync(Platform.resolvedExecutable, [
+    genKernelFile.path,
+    "--platform",
+    platformDillFile.path,
+    "--aot",
+    "-Ddart.vm.product=true",
+    "-o",
+    kernelDillFile.path,
+    "--invocation-modes=compile",
+    "--verbosity=all",
+    compileDartFile.path
+  ]);
+
+  if (kernelRun.exitCode != 0) {
+    throw "Got exit code ${kernelRun.exitCode}\n"
+        "stdout: ${kernelRun.stdout}\n"
+        "stderr: ${kernelRun.stderr}";
+  }
+
+  final Uri aotElf = tmpDirUri.resolve("aot.elf");
+  final File aotElfFile = new File.fromUri(aotElf);
+  final Uri obfuscationMap = tmpDirUri.resolve("obfuscation.map");
+  final File obfuscationMapFile = new File.fromUri(obfuscationMap);
+
+  print("Running $genSnapshot");
+  // Extracted from pkg/dart2native/lib/dart2native.dart.
+  final ProcessResult snapshotRun = Process.runSync(genSnapshotFile.path, [
+    "--snapshot-kind=app-aot-elf",
+    "--elf=${aotElfFile.path}",
+    "--dwarf-stack-traces",
+    "--obfuscate",
+    "--strip",
+    "--save-obfuscation-map=${obfuscationMapFile.path}",
+    kernelDillFile.path,
+  ]);
+
+  if (snapshotRun.exitCode != 0) {
+    throw "Got exit code ${snapshotRun.exitCode}\n"
+        "stdout: ${snapshotRun.stdout}\n"
+        "stderr: ${snapshotRun.stderr}";
+  }
+
+  print("Reading $obfuscationMap");
+
+  return readJsonMapping(obfuscationMapFile);
+}
+
+List<MappingPair> readJsonMapping(File file) {
+  List<MappingPair> result = [];
+  List<dynamic> json = jsonDecode(file.readAsStringSync());
+  for (int i = 0; i < json.length; i += 2) {
+    result.add(new MappingPair(json[i] as String, json[i + 1] as String));
+  }
+  return result;
+}
+
+class MappingPair {
+  final String from;
+  final String to;
+
+  MappingPair(this.from, this.to);
+
+  String toString() => "MappingPair[$from->$to]";
+}
+
+bool verify(List<MappingPair> mapping, Set<String> expectedIdentity,
+    Set<String> expectedDifferent) {
+  bool good = true;
+  Set<String> missingKeys = new Set<String>.of(expectedIdentity)
+    ..addAll(expectedDifferent);
+  for (MappingPair entry in mapping) {
+    missingKeys.remove(entry.from);
+    if (expectedIdentity.contains(entry.from) && entry.from != entry.to) {
+      print("Expected ${entry.from} to map to itself, "
+          "but mapped to ${entry.to}");
+      good = false;
+    }
+    if (expectedDifferent.contains(entry.from) && entry.from == entry.to) {
+      print("Expected ${entry.from} to map to something different, "
+          "but it didn't.");
+      good = false;
+    }
+  }
+  if (missingKeys.isNotEmpty) {
+    print("Expected to have seen the following entries which wasn't found:");
+    for (String missingKey in missingKeys) {
+      print("- $missingKey");
+    }
+    good = false;
+  }
+  return good;
+}
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index a719a03..0dc138f 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -56,7 +56,7 @@
   if (dependencies.isNotEmpty) {
     for (var lib in dependencies) {
       lib.name ??= lib.importUri.pathSegments.last;
-      actual += kernelLibraryToString(lib);
+      actual += kernelLibraryToString(lib, removeSelectorIds: true);
     }
     // Remove library paths.
     actual = actual.replaceAll(pkgVmDir.toString(), 'file:pkg/vm/');
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index a881185..ec6468f 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -45,7 +45,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/a.dart" as a;
 
-  static method j() → dynamic /* originally async */ {
+  static method j() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -76,7 +76,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" as g;
 
-  static method h() → dynamic /* originally async */ {
+  static method h() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -108,7 +108,7 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/j.dart" deferred as j;
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b;
 
-  static method i() → dynamic /* originally async */ {
+  static method i() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -144,7 +144,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/h.dart" as h;
 
-  static method g() → dynamic /* originally async */ {
+  static method g() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
@@ -176,7 +176,7 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" deferred as g;
   import "#pkg/vm/testcases/transformations/deferred_loading/i.dart" deferred as i;
 
-  static method f() → dynamic /* originally async */ {
+  static method f() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -216,7 +216,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/g.dart" deferred as g;
 
-  static method e() → dynamic /* originally async */ {
+  static method e() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -253,7 +253,7 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart" as b;
   import "#pkg/vm/testcases/transformations/deferred_loading/f.dart" deferred as f;
 
-  static method c() → dynamic /* originally async */ {
+  static method c() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -289,7 +289,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/e.dart" as e;
 
-  static method d() → dynamic /* originally async */ {
+  static method d() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -322,7 +322,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/c.dart" as c;
 
-  static method b() → dynamic /* originally async */ {
+  static method b() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -355,7 +355,7 @@
 
   import "#pkg/vm/testcases/transformations/deferred_loading/d.dart" deferred as d;
 
-  static method a() → dynamic /* originally async */ {
+  static method a() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -392,7 +392,7 @@
   import "#pkg/vm/testcases/transformations/deferred_loading/a.dart";
   import "#pkg/vm/testcases/transformations/deferred_loading/b.dart";
 
-  static method main() → dynamic /* originally async */ {
+  static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
     final dart.async::_Future<dynamic> :async_future = new dart.async::_Future::•<dynamic>();
     dart.core::bool* :is_sync = false;
     dynamic :return_value;
diff --git a/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart b/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart
index c3ff180..f926b9d 100644
--- a/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart
+++ b/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart
@@ -16,10 +16,10 @@
   Abi.iosX64: Uint32(),
   Abi.linuxArm: Uint32(),
   Abi.linuxArm64: Uint32(),
-  Abi.linuxIA32: Uint32(),
-  Abi.linuxX64: Uint32(),
-  Abi.linuxRiscv32: Uint32(),
-  Abi.linuxRiscv64: Uint32(),
+  Abi.linuxIA32: Int32(),
+  Abi.linuxX64: Int32(),
+  Abi.linuxRiscv32: Int32(),
+  Abi.linuxRiscv64: Int32(),
   Abi.macosArm64: Uint32(),
   Abi.macosX64: Uint32(),
   Abi.windowsArm64: Uint16(),
diff --git a/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart.expect b/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart.expect
index 63b991b..b3b2291 100644
--- a/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/abi_specific_int.dart.expect
@@ -7,17 +7,17 @@
 
 import "dart:ffi";
 
-@#C55
-@#C62
+@#C56
+@#C64
 class WChar extends ffi::AbiSpecificInteger /*hasConstConstructor*/  {
   const constructor •() → self::WChar
     : super ffi::AbiSpecificInteger::•()
     ;
-  @#C65
+  @#C67
   static get #sizeOf() → core::int*
-    return #C67.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
+    return #C69.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
 }
-@#C72
+@#C74
 class WCharStruct extends ffi::Struct {
   synthetic constructor •() → self::WCharStruct
     : super ffi::Struct::•()
@@ -25,23 +25,23 @@
   constructor #fromTypedDataBase(core::Object #typedDataBase) → self::WCharStruct
     : super ffi::Struct::_fromTypedDataBase(#typedDataBase)
     ;
-  @#C73
+  @#C75
   get a0() → core::int
-    return ffi::_loadAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C74.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
-  @#C73
+    return ffi::_loadAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C76.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
+  @#C75
   set a0(core::int #externalFieldValue) → void
-    return ffi::_storeAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C74.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
-  @#C73
+    return ffi::_storeAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C76.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
+  @#C75
   get a1() → core::int
-    return ffi::_loadAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C67.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
-  @#C73
+    return ffi::_loadAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C69.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
+  @#C75
   set a1(core::int #externalFieldValue) → void
-    return ffi::_storeAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C67.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
-  @#C65
+    return ffi::_storeAbiSpecificInt<self::WChar>(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C69.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
+  @#C67
   static get #sizeOf() → core::int*
-    return #C76.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
+    return #C78.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
 }
-@#C81
+@#C83
 class WCharArrayStruct extends ffi::Struct {
   synthetic constructor •() → self::WCharArrayStruct
     : super ffi::Struct::•()
@@ -49,31 +49,31 @@
   constructor #fromTypedDataBase(core::Object #typedDataBase) → self::WCharArrayStruct
     : super ffi::Struct::_fromTypedDataBase(#typedDataBase)
     ;
-  @#C82
+  @#C84
   get a0() → ffi::Array<self::WChar>
     return new ffi::Array::_<self::WChar>( block {
       core::Object #typedDataBase = this.{ffi::_Compound::_typedDataBase}{core::Object};
-      core::int #offset = #C74.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
-    } =>#typedDataBase is ffi::Pointer<dynamic> ?{core::Object} ffi::_fromAddress<self::WChar>(#typedDataBase.{ffi::Pointer::address}{core::int}.{core::num::+}(#offset){(core::num) → core::num}) : let typ::TypedData #typedData = _in::unsafeCast<typ::TypedData>(#typedDataBase) in #typedData.{typ::TypedData::buffer}{typ::ByteBuffer}.{typ::ByteBuffer::asUint8List}(#typedData.{typ::TypedData::offsetInBytes}{core::int}.{core::num::+}(#offset){(core::num) → core::num}, #C86.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}){([core::int, core::int?]) → typ::Uint8List}, #C77, #C87);
-  @#C82
+      core::int #offset = #C76.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
+    } =>#typedDataBase is ffi::Pointer<dynamic> ?{core::Object} ffi::_fromAddress<self::WChar>(#typedDataBase.{ffi::Pointer::address}{core::int}.{core::num::+}(#offset){(core::num) → core::num}) : let typ::TypedData #typedData = _in::unsafeCast<typ::TypedData>(#typedDataBase) in #typedData.{typ::TypedData::buffer}{typ::ByteBuffer}.{typ::ByteBuffer::asUint8List}(#typedData.{typ::TypedData::offsetInBytes}{core::int}.{core::num::+}(#offset){(core::num) → core::num}, #C88.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}){([core::int, core::int?]) → typ::Uint8List}, #C79, #C89);
+  @#C84
   set a0(ffi::Array<self::WChar> #externalFieldValue) → void
-    return ffi::_memCopy(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C74.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Array::_typedDataBase}{core::Object}, #C1, #C86.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
-  @#C65
+    return ffi::_memCopy(this.{ffi::_Compound::_typedDataBase}{core::Object}, #C76.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue.{ffi::Array::_typedDataBase}{core::Object}, #C1, #C88.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
+  @#C67
   static get #sizeOf() → core::int*
-    return #C86.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
+    return #C88.{core::List::[]}(ffi::_abi()){(core::int) → core::int*};
 }
 class _DummyAllocator extends core::Object implements ffi::Allocator /*hasConstConstructor*/  {
   const constructor •() → self::_DummyAllocator
     : super core::Object::•()
     ;
-  @#C88
-  method allocate<T extends ffi::NativeType>(core::int byteCount, {core::int? alignment = #C64}) → ffi::Pointer<self::_DummyAllocator::allocate::T> {
+  @#C90
+  method allocate<T extends ffi::NativeType>(core::int byteCount, {core::int? alignment = #C66}) → ffi::Pointer<self::_DummyAllocator::allocate::T> {
     return ffi::Pointer::fromAddress<self::_DummyAllocator::allocate::T>(0);
   }
-  @#C88
+  @#C90
   method free(ffi::Pointer<ffi::NativeType> pointer) → void {}
 }
-static const field self::_DummyAllocator noAlloc = #C89;
+static const field self::_DummyAllocator noAlloc = #C91;
 static method main() → void {
   self::testSizeOf();
   self::testStoreLoad();
@@ -86,29 +86,29 @@
   core::print(size);
 }
 static method testStoreLoad() → void {
-  final ffi::Pointer<self::WChar> p = #C89.{ffi::Allocator::allocate}<self::WChar>(self::WChar::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WChar>};
+  final ffi::Pointer<self::WChar> p = #C91.{ffi::Allocator::allocate}<self::WChar>(self::WChar::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WChar>};
   ffi::_storeAbiSpecificInt<self::WChar>(p, #C1, 10);
   core::print(ffi::_loadAbiSpecificInt<self::WChar>(p, #C1));
-  #C89.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
+  #C91.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
 }
 static method testStoreLoadIndexed() → void {
-  final ffi::Pointer<self::WChar> p = #C89.{ffi::Allocator::allocate}<self::WChar>(2.{core::num::*}(self::WChar::#sizeOf){(core::num) → core::num}){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WChar>};
+  final ffi::Pointer<self::WChar> p = #C91.{ffi::Allocator::allocate}<self::WChar>(2.{core::num::*}(self::WChar::#sizeOf){(core::num) → core::num}){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WChar>};
   ffi::_storeAbiSpecificIntAtIndex<self::WChar>(p, 0, 10);
   ffi::_storeAbiSpecificIntAtIndex<self::WChar>(p, 1, 3);
   core::print(ffi::_loadAbiSpecificIntAtIndex<self::WChar>(p, 0));
   core::print(ffi::_loadAbiSpecificIntAtIndex<self::WChar>(p, 1));
-  #C89.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
+  #C91.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
 }
 static method testStruct() → void {
-  final ffi::Pointer<self::WCharStruct> p = #C89.{ffi::Allocator::allocate}<self::WCharStruct>(self::WCharStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WCharStruct>};
+  final ffi::Pointer<self::WCharStruct> p = #C91.{ffi::Allocator::allocate}<self::WCharStruct>(self::WCharStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WCharStruct>};
   new self::WCharStruct::#fromTypedDataBase(p!).{self::WCharStruct::a0} = 1;
   core::print(new self::WCharStruct::#fromTypedDataBase(p!).{self::WCharStruct::a0}{core::int});
   new self::WCharStruct::#fromTypedDataBase(p!).{self::WCharStruct::a0} = 2;
   core::print(new self::WCharStruct::#fromTypedDataBase(p!).{self::WCharStruct::a0}{core::int});
-  #C89.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
+  #C91.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
 }
 static method testInlineArray() → void {
-  final ffi::Pointer<self::WCharArrayStruct> p = #C89.{ffi::Allocator::allocate}<self::WCharArrayStruct>(self::WCharArrayStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WCharArrayStruct>};
+  final ffi::Pointer<self::WCharArrayStruct> p = #C91.{ffi::Allocator::allocate}<self::WCharArrayStruct>(self::WCharArrayStruct::#sizeOf){(core::int, {alignment: core::int?}) → ffi::Pointer<self::WCharArrayStruct>};
   final ffi::Array<self::WChar> array = new self::WCharArrayStruct::#fromTypedDataBase(p!).{self::WCharArrayStruct::a0}{ffi::Array<self::WChar>};
   for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     ffi::_storeAbiSpecificIntAtIndex<self::WChar>(array.{ffi::Array::_typedDataBase}{core::Object}, i, i);
@@ -116,7 +116,7 @@
   for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(ffi::_loadAbiSpecificIntAtIndex<self::WChar>(array.{ffi::Array::_typedDataBase}{core::Object}, i));
   }
-  #C89.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
+  #C91.{self::_DummyAllocator::free}(p){(ffi::Pointer<ffi::NativeType>) → void};
 }
 constants  {
   #C1 = 0
@@ -153,59 +153,61 @@
   #C32 = ffi::Abi {_os:#C31, _architecture:#C5}
   #C33 = ffi::Abi {_os:#C31, _architecture:#C10}
   #C34 = ffi::Abi {_os:#C31, _architecture:#C14}
-  #C35 = ffi::Abi {_os:#C31, _architecture:#C18}
-  #C36 = 4
-  #C37 = "riscv32"
-  #C38 = ffi::_Architecture {index:#C36, _name:#C37}
-  #C39 = ffi::Abi {_os:#C31, _architecture:#C38}
-  #C40 = 5
-  #C41 = "riscv64"
-  #C42 = ffi::_Architecture {index:#C40, _name:#C41}
-  #C43 = ffi::Abi {_os:#C31, _architecture:#C42}
-  #C44 = "macos"
-  #C45 = ffi::_OS {index:#C36, _name:#C44}
-  #C46 = ffi::Abi {_os:#C45, _architecture:#C10}
-  #C47 = ffi::Abi {_os:#C45, _architecture:#C18}
-  #C48 = "windows"
-  #C49 = ffi::_OS {index:#C40, _name:#C48}
-  #C50 = ffi::Abi {_os:#C49, _architecture:#C10}
-  #C51 = ffi::Uint16 {}
-  #C52 = ffi::Abi {_os:#C49, _architecture:#C14}
-  #C53 = ffi::Abi {_os:#C49, _architecture:#C18}
-  #C54 = <ffi::Abi*, ffi::NativeType*>{#C6:#C7, #C11:#C7, #C15:#C7, #C19:#C7, #C22:#C23, #C24:#C7, #C27:#C7, #C28:#C7, #C29:#C7, #C32:#C7, #C33:#C7, #C34:#C7, #C35:#C7, #C39:#C7, #C43:#C7, #C46:#C7, #C47:#C7, #C50:#C51, #C52:#C51, #C53:#C51)
-  #C55 = ffi::AbiSpecificIntegerMapping {mapping:#C54}
-  #C56 = "vm:ffi:abi-specific-mapping"
-  #C57 = TypeLiteralConstant(ffi::Uint32)
-  #C58 = TypeLiteralConstant(ffi::Uint64)
-  #C59 = TypeLiteralConstant(ffi::Uint16)
-  #C60 = <core::Type?>[#C57, #C57, #C57, #C57, #C58, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C57, #C59, #C59, #C59]
-  #C61 = ffi::_FfiAbiSpecificMapping {nativeTypes:#C60}
-  #C62 = core::pragma {name:#C56, options:#C61}
-  #C63 = "vm:prefer-inline"
-  #C64 = null
-  #C65 = core::pragma {name:#C63, options:#C64}
-  #C66 = 8
-  #C67 = <core::int*>[#C36, #C36, #C36, #C36, #C66, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C36, #C12, #C12, #C12]
-  #C68 = "vm:ffi:struct-fields"
-  #C69 = TypeLiteralConstant(self::WChar)
-  #C70 = <core::Type>[#C69, #C69]
-  #C71 = ffi::_FfiStructLayout {fieldTypes:#C70, packing:#C64}
-  #C72 = core::pragma {name:#C68, options:#C71}
-  #C73 = self::WChar {}
-  #C74 = <core::int*>[#C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1]
-  #C75 = 16
-  #C76 = <core::int*>[#C66, #C66, #C66, #C66, #C75, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C66, #C36, #C36, #C36]
-  #C77 = 100
-  #C78 = ffi::_FfiInlineArray {elementType:#C69, length:#C77}
-  #C79 = <core::Type>[#C78]
-  #C80 = ffi::_FfiStructLayout {fieldTypes:#C79, packing:#C64}
-  #C81 = core::pragma {name:#C68, options:#C80}
-  #C82 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C77, dimension2:#C64, dimension3:#C64, dimension4:#C64, dimension5:#C64, dimensions:#C64}
-  #C83 = 400
-  #C84 = 800
-  #C85 = 200
-  #C86 = <core::int*>[#C83, #C83, #C83, #C83, #C84, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C83, #C85, #C85, #C85]
-  #C87 = <core::int*>[]
-  #C88 = core::_Override {}
-  #C89 = self::_DummyAllocator {}
+  #C35 = ffi::Int32 {}
+  #C36 = ffi::Abi {_os:#C31, _architecture:#C18}
+  #C37 = 4
+  #C38 = "riscv32"
+  #C39 = ffi::_Architecture {index:#C37, _name:#C38}
+  #C40 = ffi::Abi {_os:#C31, _architecture:#C39}
+  #C41 = 5
+  #C42 = "riscv64"
+  #C43 = ffi::_Architecture {index:#C41, _name:#C42}
+  #C44 = ffi::Abi {_os:#C31, _architecture:#C43}
+  #C45 = "macos"
+  #C46 = ffi::_OS {index:#C37, _name:#C45}
+  #C47 = ffi::Abi {_os:#C46, _architecture:#C10}
+  #C48 = ffi::Abi {_os:#C46, _architecture:#C18}
+  #C49 = "windows"
+  #C50 = ffi::_OS {index:#C41, _name:#C49}
+  #C51 = ffi::Abi {_os:#C50, _architecture:#C10}
+  #C52 = ffi::Uint16 {}
+  #C53 = ffi::Abi {_os:#C50, _architecture:#C14}
+  #C54 = ffi::Abi {_os:#C50, _architecture:#C18}
+  #C55 = <ffi::Abi*, ffi::NativeType*>{#C6:#C7, #C11:#C7, #C15:#C7, #C19:#C7, #C22:#C23, #C24:#C7, #C27:#C7, #C28:#C7, #C29:#C7, #C32:#C7, #C33:#C7, #C34:#C35, #C36:#C35, #C40:#C35, #C44:#C35, #C47:#C7, #C48:#C7, #C51:#C52, #C53:#C52, #C54:#C52)
+  #C56 = ffi::AbiSpecificIntegerMapping {mapping:#C55}
+  #C57 = "vm:ffi:abi-specific-mapping"
+  #C58 = TypeLiteralConstant(ffi::Uint32)
+  #C59 = TypeLiteralConstant(ffi::Uint64)
+  #C60 = TypeLiteralConstant(ffi::Int32)
+  #C61 = TypeLiteralConstant(ffi::Uint16)
+  #C62 = <core::Type?>[#C58, #C58, #C58, #C58, #C59, #C58, #C58, #C58, #C58, #C58, #C58, #C60, #C60, #C60, #C60, #C58, #C58, #C61, #C61, #C61]
+  #C63 = ffi::_FfiAbiSpecificMapping {nativeTypes:#C62}
+  #C64 = core::pragma {name:#C57, options:#C63}
+  #C65 = "vm:prefer-inline"
+  #C66 = null
+  #C67 = core::pragma {name:#C65, options:#C66}
+  #C68 = 8
+  #C69 = <core::int*>[#C37, #C37, #C37, #C37, #C68, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C37, #C12, #C12, #C12]
+  #C70 = "vm:ffi:struct-fields"
+  #C71 = TypeLiteralConstant(self::WChar)
+  #C72 = <core::Type>[#C71, #C71]
+  #C73 = ffi::_FfiStructLayout {fieldTypes:#C72, packing:#C66}
+  #C74 = core::pragma {name:#C70, options:#C73}
+  #C75 = self::WChar {}
+  #C76 = <core::int*>[#C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1, #C1]
+  #C77 = 16
+  #C78 = <core::int*>[#C68, #C68, #C68, #C68, #C77, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C68, #C37, #C37, #C37]
+  #C79 = 100
+  #C80 = ffi::_FfiInlineArray {elementType:#C71, length:#C79}
+  #C81 = <core::Type>[#C80]
+  #C82 = ffi::_FfiStructLayout {fieldTypes:#C81, packing:#C66}
+  #C83 = core::pragma {name:#C70, options:#C82}
+  #C84 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C79, dimension2:#C66, dimension3:#C66, dimension4:#C66, dimension5:#C66, dimensions:#C66}
+  #C85 = 400
+  #C86 = 800
+  #C87 = 200
+  #C88 = <core::int*>[#C85, #C85, #C85, #C85, #C86, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C85, #C87, #C87, #C87]
+  #C89 = <core::int*>[]
+  #C90 = core::_Override {}
+  #C91 = self::_DummyAllocator {}
 }
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
index e098162..2adb29e 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
@@ -11,7 +11,7 @@
   synthetic constructor •() → self::MyFinalizable
     : super core::Object::•()
     ;
-  method use() → asy::Future<core::int> /* originally async */ {
+  method use() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     FutureOr<core::int>? :return_value;
@@ -41,7 +41,7 @@
     :is_sync = true;
     return :async_future;
   }
-  method use2() → asy::Future<core::int> /* originally async */ {
+  method use2() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
     final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
     core::bool* :is_sync = false;
     core::int? :return_value;
@@ -83,7 +83,7 @@
     } =>:expressionValueWrappedFinalizable;
   }
 }
-static method doSomething() → asy::Future<core::int> /* originally async */ {
+static method doSomething() → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
   final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
   core::bool* :is_sync = false;
   core::int? :return_value;
@@ -110,7 +110,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method useFinalizableAsync(ffi::Finalizable finalizable) → asy::Future<core::int> /* originally async */ {
+static method useFinalizableAsync(ffi::Finalizable finalizable) → asy::Future<core::int> /* futureValueType= core::int */ /* originally async */ {
   final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
   core::bool* :is_sync = false;
   FutureOr<core::int>? :return_value;
@@ -163,7 +163,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → void /* originally async */ {
+static method main() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
index 18fae35..74e5fe6 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
@@ -84,7 +84,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
   return :controller_stream;
 }
-static method main() → void /* originally async */ {
+static method main() → void /* futureValueType= void */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart
index bc83bbe..75ca4d7 100644
--- a/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart
@@ -4,8 +4,6 @@
 
 // @dart=2.16
 
-// ignore_for_file: unused_local_variable
-
 import 'dart:ffi';
 
 class MyFinalizable implements Finalizable {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
index da5be5f..0d6b3b9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/async_await.dart.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method bar(dynamic x) → asy::Future<dynamic> /* originally async */ {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method bar(dynamic x) → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     FutureOr<dynamic>? :return_value;
@@ -42,7 +42,7 @@
 }
 static method foo() → dynamic
   return new self::A::•();
-static method baz() → asy::Future<dynamic> /* originally async */ {
+static method baz() → asy::Future<dynamic> /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
@@ -69,7 +69,7 @@
   :is_sync = true;
   return :async_future;
 }
-static method main() → dynamic /* originally async */ {
+static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
index 4a919d4..63b00b0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
@@ -15,7 +15,7 @@
     : self::InheritedElement::_dependents = <self::Element, core::Object?>{}, super self::Element::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method setDependencies([@vm.inferred-type.metadata=!] self::Element dependent, [@vm.inferred-type.metadata=dart.core::_Smi?] core::Object? value) → void {
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element, dart.core::Object?>] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element, dart.core::Object?>] this.{self::InheritedElement::_dependents}{core::Map<self::Element, core::Object?>}.{core::Map::[]=}(dependent, value){(self::Element, core::Object?) → void};
+    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element, dart.core::Object?>] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element, dart.core::Object?>] this.{self::InheritedElement::_dependents}{core::Map<self::Element, core::Object?>}.{core::Map::[]=}(dependent, value){(self::Element, core::Object?) → void};
   }
 }
 static method main() → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
index 6c1795f..88fd00f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static method fromReader() → self::_Attribute {
-    final self::_AttributeName name = [@vm.direct-call.metadata=dart.collection::_InternalImmutableLinkedHashMap.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)] #C8.{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!;
+    final self::_AttributeName name = [@vm.direct-call.metadata=dart.collection::__InternalImmutableLinkedHashMap&_HashVMImmutableBase&MapMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashMapMixin&_UnmodifiableMapMixin&_ImmutableLinkedHashMapMixin.[]] [@vm.inferred-type.metadata=#lib::_AttributeName? (skip check)] #C8.{core::Map::[]}(#C1){(core::Object?) → self::_AttributeName?}!;
     return new self::_Attribute::_();
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
index f345b4b..f8d211c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
@@ -11,7 +11,7 @@
     : super core::Object::•()
     ;
   static method fromReader() → self::_Attribute {
-    final core::bool name = [@vm.direct-call.metadata=dart.collection::_CompactImmutableLinkedHashSet.contains] [@vm.inferred-type.metadata=!? (skip check)] #C3.{core::Set::contains}(#C2){(core::Object?) → core::bool};
+    final core::bool name = [@vm.direct-call.metadata=dart.collection::__CompactImmutableLinkedHashSet&_HashVMImmutableBase&SetMixin&_HashBase&_OperatorEqualsAndCanonicalHashCode&_LinkedHashSetMixin&_UnmodifiableSetMixin&_ImmutableLinkedHashSetMixin.contains] [@vm.inferred-type.metadata=!? (skip check)] #C3.{core::Set::contains}(#C2){(core::Object?) → core::bool};
     return let final self::_AttributeName #t1 = #C8.{core::List::[]}(#C2){(core::int) → self::_AttributeName} in new self::_Attribute::_();
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index bdf5f22..46e2140 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3333,getterSelectorId:3334]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 0a305ef..3938e71 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3337,getterSelectorId:3338]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 6f14afa..56c3736 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,5 +1,15 @@
 # Changelog
 
+## 8.2.2
+- Updated the following optional fields to be nullable in `SocketStatistic`:
+  - `endTime`
+  - `lastReadTime`
+  - `lastWriteTime`
+
+## 8.2.1
+- Changed type of `UriList.uris` from `dynamic` to `List<String?>?`.
+- Remove `example/vm_service_asserts.dart'
+
 ## 8.2.0
 - Update to version `3.56` of the spec.
 - Added optional `line` and `column` properties to `SourceLocation`.
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
deleted file mode 100644
index 2955af8..0000000
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ /dev/null
@@ -1,1209 +0,0 @@
-// Copyright (c) 2015, 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.
-
-// This is a generated file.
-
-/// A library for asserting correct responses from the VM Service.
-
-import 'package:vm_service/vm_service.dart' as vms;
-
-dynamic assertNotNull(dynamic obj) {
-  if (obj == null) throw 'assert failed';
-  return obj;
-}
-
-bool assertBool(bool obj) {
-  return obj;
-}
-
-int assertInt(int obj) {
-  return obj;
-}
-
-double assertDouble(double obj) {
-  return obj;
-}
-
-dynamic assertDynamic(dynamic obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-List<dynamic> assertListOfDynamic(List<dynamic> list) {
-  return list;
-}
-
-List<int> assertListOfInt(List<int> list) {
-  for (int elem in list) {
-    assertInt(elem);
-  }
-  return list;
-}
-
-List<String> assertListOfString(List<String> list) {
-  for (String elem in list) {
-    assertString(elem);
-  }
-  return list;
-}
-
-List<vms.IsolateFlag> assertListOfIsolateFlag(List<vms.IsolateFlag> list) {
-  for (vms.IsolateFlag elem in list) {
-    assertIsolateFlag(elem);
-  }
-  return list;
-}
-
-String assertString(String obj) {
-  if (obj.isEmpty) throw 'expected non-zero length string';
-  return obj;
-}
-
-vms.Success assertSuccess(vms.Success obj) {
-  if (obj.type != 'Success') throw 'expected Success';
-  return obj;
-}
-
-/// Assert PauseStart, PauseExit, PauseBreakpoint, PauseInterrupted,
-/// PauseException, Resume, BreakpointAdded, BreakpointResolved,
-/// BreakpointRemoved, and Inspect events.
-vms.Event assertDebugEvent(vms.Event event) {
-  assertEvent(event);
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kBreakpointAdded ||
-      event.kind == vms.EventKind.kBreakpointRemoved ||
-      event.kind == vms.EventKind.kBreakpointResolved) {
-    assertBreakpoint(event.breakpoint!);
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint) {
-    for (vms.Breakpoint elem in event.pauseBreakpoints!) {
-      assertBreakpoint(elem);
-    }
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kPauseInterrupted ||
-      event.kind == vms.EventKind.kPauseException ||
-      event.kind == vms.EventKind.kResume) {
-    // For PauseInterrupted events, there will be no top frame if the isolate is
-    // idle (waiting in the message loop).
-    // For the Resume event, the top frame is provided at all times except for
-    // the initial resume event that is delivered when an isolate begins
-    // execution.
-    if (event.topFrame != null ||
-        (event.kind != vms.EventKind.kPauseInterrupted &&
-            event.kind != vms.EventKind.kResume)) {
-      assertFrame(event.topFrame!);
-    }
-  }
-  if (event.kind == vms.EventKind.kPauseException) {
-    assertInstanceRef(event.exception!);
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kPauseInterrupted) {
-    assertBool(event.atAsyncSuspension!);
-  }
-  if (event.kind == vms.EventKind.kInspect) {
-    assertInstanceRef(event.inspectee!);
-  }
-  return event;
-}
-
-/// Assert IsolateStart, IsolateRunnable, IsolateExit, IsolateUpdate,
-/// and ServiceExtensionAdded events.
-vms.Event assertIsolateEvent(vms.Event event) {
-  assertEvent(event);
-  if (event.kind == vms.EventKind.kServiceExtensionAdded) {
-    assertString(event.extensionRPC!);
-  }
-  return event;
-}
-
-String assertCodeKind(String obj) {
-  if (obj == "Collected") return obj;
-  if (obj == "Dart") return obj;
-  if (obj == "Native") return obj;
-  if (obj == "Stub") return obj;
-  if (obj == "Tag") return obj;
-  throw "invalid CodeKind: $obj";
-}
-
-String assertErrorKind(String obj) {
-  if (obj == "InternalError") return obj;
-  if (obj == "LanguageError") return obj;
-  if (obj == "TerminationError") return obj;
-  if (obj == "UnhandledException") return obj;
-  throw "invalid ErrorKind: $obj";
-}
-
-String assertEventKind(String obj) {
-  if (obj == "BreakpointAdded") return obj;
-  if (obj == "BreakpointRemoved") return obj;
-  if (obj == "BreakpointResolved") return obj;
-  if (obj == "BreakpointUpdated") return obj;
-  if (obj == "CpuSamples") return obj;
-  if (obj == "Extension") return obj;
-  if (obj == "GC") return obj;
-  if (obj == "Inspect") return obj;
-  if (obj == "IsolateExit") return obj;
-  if (obj == "IsolateReload") return obj;
-  if (obj == "IsolateRunnable") return obj;
-  if (obj == "IsolateStart") return obj;
-  if (obj == "IsolateUpdate") return obj;
-  if (obj == "Logging") return obj;
-  if (obj == "None") return obj;
-  if (obj == "PauseBreakpoint") return obj;
-  if (obj == "PauseException") return obj;
-  if (obj == "PauseExit") return obj;
-  if (obj == "PauseInterrupted") return obj;
-  if (obj == "PausePostRequest") return obj;
-  if (obj == "PauseStart") return obj;
-  if (obj == "Resume") return obj;
-  if (obj == "ServiceExtensionAdded") return obj;
-  if (obj == "ServiceRegistered") return obj;
-  if (obj == "ServiceUnregistered") return obj;
-  if (obj == "TimelineEvents") return obj;
-  if (obj == "TimelineStreamSubscriptionsUpdate") return obj;
-  if (obj == "UserTagChanged") return obj;
-  if (obj == "VMFlagUpdate") return obj;
-  if (obj == "VMUpdate") return obj;
-  if (obj == "WriteEvent") return obj;
-  throw "invalid EventKind: $obj";
-}
-
-String assertInstanceKind(String obj) {
-  if (obj == "Bool") return obj;
-  if (obj == "BoundedType") return obj;
-  if (obj == "Closure") return obj;
-  if (obj == "Double") return obj;
-  if (obj == "Float32List") return obj;
-  if (obj == "Float32x4") return obj;
-  if (obj == "Float32x4List") return obj;
-  if (obj == "Float64List") return obj;
-  if (obj == "Float64x2") return obj;
-  if (obj == "Float64x2List") return obj;
-  if (obj == "FunctionType") return obj;
-  if (obj == "Int") return obj;
-  if (obj == "Int16List") return obj;
-  if (obj == "Int32List") return obj;
-  if (obj == "Int32x4") return obj;
-  if (obj == "Int32x4List") return obj;
-  if (obj == "Int64List") return obj;
-  if (obj == "Int8List") return obj;
-  if (obj == "List") return obj;
-  if (obj == "Map") return obj;
-  if (obj == "MirrorReference") return obj;
-  if (obj == "Null") return obj;
-  if (obj == "PlainInstance") return obj;
-  if (obj == "ReceivePort") return obj;
-  if (obj == "RegExp") return obj;
-  if (obj == "StackTrace") return obj;
-  if (obj == "String") return obj;
-  if (obj == "Type") return obj;
-  if (obj == "TypeParameter") return obj;
-  if (obj == "TypeRef") return obj;
-  if (obj == "Uint16List") return obj;
-  if (obj == "Uint32List") return obj;
-  if (obj == "Uint64List") return obj;
-  if (obj == "Uint8ClampedList") return obj;
-  if (obj == "Uint8List") return obj;
-  if (obj == "WeakProperty") return obj;
-  throw "invalid InstanceKind: $obj";
-}
-
-String assertSentinelKind(String obj) {
-  if (obj == "BeingInitialized") return obj;
-  if (obj == "Collected") return obj;
-  if (obj == "Expired") return obj;
-  if (obj == "Free") return obj;
-  if (obj == "NotInitialized") return obj;
-  if (obj == "OptimizedOut") return obj;
-  throw "invalid SentinelKind: $obj";
-}
-
-String assertFrameKind(String obj) {
-  if (obj == "AsyncActivation") return obj;
-  if (obj == "AsyncCausal") return obj;
-  if (obj == "AsyncSuspensionMarker") return obj;
-  if (obj == "Regular") return obj;
-  throw "invalid FrameKind: $obj";
-}
-
-String assertSourceReportKind(String obj) {
-  if (obj == "BranchCoverage") return obj;
-  if (obj == "Coverage") return obj;
-  if (obj == "PossibleBreakpoints") return obj;
-  throw "invalid SourceReportKind: $obj";
-}
-
-String assertExceptionPauseMode(String obj) {
-  if (obj == "All") return obj;
-  if (obj == "None") return obj;
-  if (obj == "Unhandled") return obj;
-  throw "invalid ExceptionPauseMode: $obj";
-}
-
-String assertStepOption(String obj) {
-  if (obj == "Into") return obj;
-  if (obj == "Out") return obj;
-  if (obj == "Over") return obj;
-  if (obj == "OverAsyncSuspension") return obj;
-  if (obj == "Rewind") return obj;
-  throw "invalid StepOption: $obj";
-}
-
-vms.AllocationProfile assertAllocationProfile(vms.AllocationProfile obj) {
-  assertNotNull(obj);
-  assertListOfClassHeapStats(obj.members!);
-  assertMemoryUsage(obj.memoryUsage!);
-  return obj;
-}
-
-vms.BoundField assertBoundField(vms.BoundField obj) {
-  assertNotNull(obj);
-  assertFieldRef(obj.decl!);
-  if (obj.value is vms.InstanceRef) {
-    assertInstanceRef(obj.value!);
-  } else if (obj.value is vms.Sentinel) {
-    assertSentinel(obj.value!);
-  } else {
-    throw "Unexpected value: ${obj.value}";
-  }
-  return obj;
-}
-
-vms.BoundVariable assertBoundVariable(vms.BoundVariable obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  if (obj.value is vms.InstanceRef) {
-    assertInstanceRef(obj.value!);
-  } else if (obj.value is vms.TypeArgumentsRef) {
-    assertTypeArgumentsRef(obj.value!);
-  } else if (obj.value is vms.Sentinel) {
-    assertSentinel(obj.value!);
-  } else {
-    throw "Unexpected value: ${obj.value}";
-  }
-  assertInt(obj.declarationTokenPos!);
-  assertInt(obj.scopeStartTokenPos!);
-  assertInt(obj.scopeEndTokenPos!);
-  return obj;
-}
-
-List<vms.BoundVariable> assertListOfBoundVariable(
-    List<vms.BoundVariable> list) {
-  for (vms.BoundVariable elem in list) {
-    assertBoundVariable(elem);
-  }
-  return list;
-}
-
-vms.Breakpoint assertBreakpoint(vms.Breakpoint obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInt(obj.breakpointNumber!);
-  assertBool(obj.enabled!);
-  assertBool(obj.resolved!);
-  if (obj.location is vms.SourceLocation) {
-    assertSourceLocation(obj.location!);
-  } else if (obj.location is vms.UnresolvedSourceLocation) {
-    assertUnresolvedSourceLocation(obj.location!);
-  } else {
-    throw "Unexpected value: ${obj.location}";
-  }
-  return obj;
-}
-
-List<vms.Breakpoint> assertListOfBreakpoint(List<vms.Breakpoint> list) {
-  for (vms.Breakpoint elem in list) {
-    assertBreakpoint(elem);
-  }
-  return list;
-}
-
-vms.ClassRef assertClassRef(vms.ClassRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertLibraryRef(obj.library!);
-  return obj;
-}
-
-List<vms.ClassRef> assertListOfClassRef(List<vms.ClassRef> list) {
-  for (vms.ClassRef elem in list) {
-    assertClassRef(elem);
-  }
-  return list;
-}
-
-vms.Class assertClass(vms.Class obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertLibraryRef(obj.library!);
-  assertBool(obj.isAbstract!);
-  assertBool(obj.isConst!);
-  assertBool(obj.traceAllocations!);
-  assertListOfInstanceRef(obj.interfaces!);
-  assertListOfFieldRef(obj.fields!);
-  assertListOfFuncRef(obj.functions!);
-  assertListOfClassRef(obj.subclasses!);
-  return obj;
-}
-
-vms.ClassHeapStats assertClassHeapStats(vms.ClassHeapStats obj) {
-  assertNotNull(obj);
-  assertClassRef(obj.classRef!);
-  assertInt(obj.accumulatedSize!);
-  assertInt(obj.bytesCurrent!);
-  assertInt(obj.instancesAccumulated!);
-  assertInt(obj.instancesCurrent!);
-  return obj;
-}
-
-List<vms.ClassHeapStats> assertListOfClassHeapStats(
-    List<vms.ClassHeapStats> list) {
-  for (vms.ClassHeapStats elem in list) {
-    assertClassHeapStats(elem);
-  }
-  return list;
-}
-
-vms.ClassList assertClassList(vms.ClassList obj) {
-  assertNotNull(obj);
-  assertListOfClassRef(obj.classes!);
-  return obj;
-}
-
-vms.CodeRef assertCodeRef(vms.CodeRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertCodeKind(obj.kind!);
-  return obj;
-}
-
-List<vms.CodeRef> assertListOfCodeRef(List<vms.CodeRef> list) {
-  for (vms.CodeRef elem in list) {
-    assertCodeRef(elem);
-  }
-  return list;
-}
-
-vms.Code assertCode(vms.Code obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertCodeKind(obj.kind!);
-  return obj;
-}
-
-vms.ContextRef assertContextRef(vms.ContextRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInt(obj.length!);
-  return obj;
-}
-
-List<vms.ContextRef> assertListOfContextRef(List<vms.ContextRef> list) {
-  for (vms.ContextRef elem in list) {
-    assertContextRef(elem);
-  }
-  return list;
-}
-
-vms.Context assertContext(vms.Context obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInt(obj.length!);
-  assertListOfContextElement(obj.variables!);
-  return obj;
-}
-
-vms.ContextElement assertContextElement(vms.ContextElement obj) {
-  assertNotNull(obj);
-  if (obj.value is vms.InstanceRef) {
-    assertInstanceRef(obj.value!);
-  } else if (obj.value is vms.Sentinel) {
-    assertSentinel(obj.value!);
-  } else {
-    throw "Unexpected value: ${obj.value}";
-  }
-  return obj;
-}
-
-List<vms.ContextElement> assertListOfContextElement(
-    List<vms.ContextElement> list) {
-  for (vms.ContextElement elem in list) {
-    assertContextElement(elem);
-  }
-  return list;
-}
-
-vms.CpuSamples assertCpuSamples(vms.CpuSamples obj) {
-  assertNotNull(obj);
-  assertInt(obj.samplePeriod!);
-  assertInt(obj.maxStackDepth!);
-  assertInt(obj.sampleCount!);
-  assertInt(obj.timeSpan!);
-  assertInt(obj.timeOriginMicros!);
-  assertInt(obj.timeExtentMicros!);
-  assertInt(obj.pid!);
-  assertListOfProfileFunction(obj.functions!);
-  assertListOfCpuSample(obj.samples!);
-  return obj;
-}
-
-vms.CpuSamplesEvent assertCpuSamplesEvent(vms.CpuSamplesEvent obj) {
-  assertNotNull(obj);
-  assertInt(obj.samplePeriod!);
-  assertInt(obj.maxStackDepth!);
-  assertInt(obj.sampleCount!);
-  assertInt(obj.timeSpan!);
-  assertInt(obj.timeOriginMicros!);
-  assertInt(obj.timeExtentMicros!);
-  assertInt(obj.pid!);
-  assertListOfDynamic(obj.functions!);
-  assertListOfCpuSample(obj.samples!);
-  return obj;
-}
-
-vms.CpuSample assertCpuSample(vms.CpuSample obj) {
-  assertNotNull(obj);
-  assertInt(obj.tid!);
-  assertInt(obj.timestamp!);
-  assertListOfInt(obj.stack!);
-  return obj;
-}
-
-List<vms.CpuSample> assertListOfCpuSample(List<vms.CpuSample> list) {
-  for (vms.CpuSample elem in list) {
-    assertCpuSample(elem);
-  }
-  return list;
-}
-
-vms.ErrorRef assertErrorRef(vms.ErrorRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertErrorKind(obj.kind!);
-  assertString(obj.message!);
-  return obj;
-}
-
-List<vms.ErrorRef> assertListOfErrorRef(List<vms.ErrorRef> list) {
-  for (vms.ErrorRef elem in list) {
-    assertErrorRef(elem);
-  }
-  return list;
-}
-
-vms.Error assertError(vms.Error obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertErrorKind(obj.kind!);
-  assertString(obj.message!);
-  return obj;
-}
-
-vms.Event assertEvent(vms.Event obj) {
-  assertNotNull(obj);
-  assertEventKind(obj.kind!);
-  assertInt(obj.timestamp!);
-  return obj;
-}
-
-vms.ExtensionData assertExtensionData(vms.ExtensionData obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-vms.FieldRef assertFieldRef(vms.FieldRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertObjRef(obj.owner!);
-  assertInstanceRef(obj.declaredType!);
-  assertBool(obj.isConst!);
-  assertBool(obj.isFinal!);
-  assertBool(obj.isStatic!);
-  return obj;
-}
-
-List<vms.FieldRef> assertListOfFieldRef(List<vms.FieldRef> list) {
-  for (vms.FieldRef elem in list) {
-    assertFieldRef(elem);
-  }
-  return list;
-}
-
-vms.Field assertField(vms.Field obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertObjRef(obj.owner!);
-  assertInstanceRef(obj.declaredType!);
-  assertBool(obj.isConst!);
-  assertBool(obj.isFinal!);
-  assertBool(obj.isStatic!);
-  return obj;
-}
-
-vms.Flag assertFlag(vms.Flag obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  assertString(obj.comment!);
-  assertBool(obj.modified!);
-  return obj;
-}
-
-List<vms.Flag> assertListOfFlag(List<vms.Flag> list) {
-  for (vms.Flag elem in list) {
-    assertFlag(elem);
-  }
-  return list;
-}
-
-vms.FlagList assertFlagList(vms.FlagList obj) {
-  assertNotNull(obj);
-  assertListOfFlag(obj.flags!);
-  return obj;
-}
-
-vms.Frame assertFrame(vms.Frame obj) {
-  assertNotNull(obj);
-  assertInt(obj.index!);
-  return obj;
-}
-
-List<vms.Frame> assertListOfFrame(List<vms.Frame> list) {
-  for (vms.Frame elem in list) {
-    assertFrame(elem);
-  }
-  return list;
-}
-
-vms.FuncRef assertFuncRef(vms.FuncRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  if (obj.owner is vms.LibraryRef) {
-    assertLibraryRef(obj.owner!);
-  } else if (obj.owner is vms.ClassRef) {
-    assertClassRef(obj.owner!);
-  } else if (obj.owner is vms.FuncRef) {
-    assertFuncRef(obj.owner!);
-  } else {
-    throw "Unexpected value: ${obj.owner}";
-  }
-  assertBool(obj.isStatic!);
-  assertBool(obj.isConst!);
-  assertBool(obj.implicit!);
-  return obj;
-}
-
-List<vms.FuncRef> assertListOfFuncRef(List<vms.FuncRef> list) {
-  for (vms.FuncRef elem in list) {
-    assertFuncRef(elem);
-  }
-  return list;
-}
-
-vms.Func assertFunc(vms.Func obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  if (obj.owner is vms.LibraryRef) {
-    assertLibraryRef(obj.owner!);
-  } else if (obj.owner is vms.ClassRef) {
-    assertClassRef(obj.owner!);
-  } else if (obj.owner is vms.FuncRef) {
-    assertFuncRef(obj.owner!);
-  } else {
-    throw "Unexpected value: ${obj.owner}";
-  }
-  assertBool(obj.isStatic!);
-  assertBool(obj.isConst!);
-  assertBool(obj.implicit!);
-  assertInstanceRef(obj.signature!);
-  return obj;
-}
-
-vms.InstanceRef assertInstanceRef(vms.InstanceRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInstanceKind(obj.kind!);
-  assertInt(obj.identityHashCode!);
-  assertClassRef(obj.classRef!);
-  return obj;
-}
-
-List<vms.InstanceRef> assertListOfInstanceRef(List<vms.InstanceRef> list) {
-  for (vms.InstanceRef elem in list) {
-    assertInstanceRef(elem);
-  }
-  return list;
-}
-
-vms.Instance assertInstance(vms.Instance obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInstanceKind(obj.kind!);
-  assertInt(obj.identityHashCode!);
-  assertClassRef(obj.classRef!);
-  return obj;
-}
-
-vms.IsolateRef assertIsolateRef(vms.IsolateRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.number!);
-  assertString(obj.name!);
-  assertBool(obj.isSystemIsolate!);
-  return obj;
-}
-
-List<vms.IsolateRef> assertListOfIsolateRef(List<vms.IsolateRef> list) {
-  for (vms.IsolateRef elem in list) {
-    assertIsolateRef(elem);
-  }
-  return list;
-}
-
-vms.Isolate assertIsolate(vms.Isolate obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.number!);
-  assertString(obj.name!);
-  assertBool(obj.isSystemIsolate!);
-  assertListOfIsolateFlag(obj.isolateFlags!);
-  assertInt(obj.startTime!);
-  assertBool(obj.runnable!);
-  assertInt(obj.livePorts!);
-  assertBool(obj.pauseOnExit!);
-  assertEvent(obj.pauseEvent!);
-  assertListOfLibraryRef(obj.libraries!);
-  assertListOfBreakpoint(obj.breakpoints!);
-  assertExceptionPauseMode(obj.exceptionPauseMode!);
-  return obj;
-}
-
-vms.IsolateFlag assertIsolateFlag(vms.IsolateFlag obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  assertString(obj.valueAsString!);
-  return obj;
-}
-
-vms.IsolateGroupRef assertIsolateGroupRef(vms.IsolateGroupRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.number!);
-  assertString(obj.name!);
-  assertBool(obj.isSystemIsolateGroup!);
-  return obj;
-}
-
-List<vms.IsolateGroupRef> assertListOfIsolateGroupRef(
-    List<vms.IsolateGroupRef> list) {
-  for (vms.IsolateGroupRef elem in list) {
-    assertIsolateGroupRef(elem);
-  }
-  return list;
-}
-
-vms.IsolateGroup assertIsolateGroup(vms.IsolateGroup obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.number!);
-  assertString(obj.name!);
-  assertBool(obj.isSystemIsolateGroup!);
-  assertListOfIsolateRef(obj.isolates!);
-  return obj;
-}
-
-vms.InboundReferences assertInboundReferences(vms.InboundReferences obj) {
-  assertNotNull(obj);
-  assertListOfInboundReference(obj.references!);
-  return obj;
-}
-
-vms.InboundReference assertInboundReference(vms.InboundReference obj) {
-  assertNotNull(obj);
-  assertObjRef(obj.source!);
-  return obj;
-}
-
-List<vms.InboundReference> assertListOfInboundReference(
-    List<vms.InboundReference> list) {
-  for (vms.InboundReference elem in list) {
-    assertInboundReference(elem);
-  }
-  return list;
-}
-
-vms.InstanceSet assertInstanceSet(vms.InstanceSet obj) {
-  assertNotNull(obj);
-  assertInt(obj.totalCount!);
-  assertListOfObjRef(obj.instances!);
-  return obj;
-}
-
-vms.LibraryRef assertLibraryRef(vms.LibraryRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertString(obj.uri!);
-  return obj;
-}
-
-List<vms.LibraryRef> assertListOfLibraryRef(List<vms.LibraryRef> list) {
-  for (vms.LibraryRef elem in list) {
-    assertLibraryRef(elem);
-  }
-  return list;
-}
-
-vms.Library assertLibrary(vms.Library obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertString(obj.uri!);
-  assertBool(obj.debuggable!);
-  assertListOfLibraryDependency(obj.dependencies!);
-  assertListOfScriptRef(obj.scripts!);
-  assertListOfFieldRef(obj.variables!);
-  assertListOfFuncRef(obj.functions!);
-  assertListOfClassRef(obj.classes!);
-  return obj;
-}
-
-vms.LibraryDependency assertLibraryDependency(vms.LibraryDependency obj) {
-  assertNotNull(obj);
-  assertBool(obj.isImport!);
-  assertBool(obj.isDeferred!);
-  assertString(obj.prefix!);
-  assertLibraryRef(obj.target!);
-  return obj;
-}
-
-List<vms.LibraryDependency> assertListOfLibraryDependency(
-    List<vms.LibraryDependency> list) {
-  for (vms.LibraryDependency elem in list) {
-    assertLibraryDependency(elem);
-  }
-  return list;
-}
-
-vms.LogRecord assertLogRecord(vms.LogRecord obj) {
-  assertNotNull(obj);
-  assertInstanceRef(obj.message!);
-  assertInt(obj.time!);
-  assertInt(obj.level!);
-  assertInt(obj.sequenceNumber!);
-  assertInstanceRef(obj.loggerName!);
-  assertInstanceRef(obj.zone!);
-  assertInstanceRef(obj.error!);
-  assertInstanceRef(obj.stackTrace!);
-  return obj;
-}
-
-vms.MapAssociation assertMapAssociation(vms.MapAssociation obj) {
-  assertNotNull(obj);
-  if (obj.key is vms.InstanceRef) {
-    assertInstanceRef(obj.key!);
-  } else if (obj.key is vms.Sentinel) {
-    assertSentinel(obj.key!);
-  } else {
-    throw "Unexpected value: ${obj.key}";
-  }
-  if (obj.value is vms.InstanceRef) {
-    assertInstanceRef(obj.value!);
-  } else if (obj.value is vms.Sentinel) {
-    assertSentinel(obj.value!);
-  } else {
-    throw "Unexpected value: ${obj.value}";
-  }
-  return obj;
-}
-
-vms.MemoryUsage assertMemoryUsage(vms.MemoryUsage obj) {
-  assertNotNull(obj);
-  assertInt(obj.externalUsage!);
-  assertInt(obj.heapCapacity!);
-  assertInt(obj.heapUsage!);
-  return obj;
-}
-
-vms.Message assertMessage(vms.Message obj) {
-  assertNotNull(obj);
-  assertInt(obj.index!);
-  assertString(obj.name!);
-  assertString(obj.messageObjectId!);
-  assertInt(obj.size!);
-  return obj;
-}
-
-List<vms.Message> assertListOfMessage(List<vms.Message> list) {
-  for (vms.Message elem in list) {
-    assertMessage(elem);
-  }
-  return list;
-}
-
-vms.NativeFunction assertNativeFunction(vms.NativeFunction obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  return obj;
-}
-
-vms.NullValRef assertNullValRef(vms.NullValRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInstanceKind(obj.kind!);
-  assertInt(obj.identityHashCode!);
-  assertClassRef(obj.classRef!);
-  assertString(obj.valueAsString!);
-  return obj;
-}
-
-List<vms.NullValRef> assertListOfNullValRef(List<vms.NullValRef> list) {
-  for (vms.NullValRef elem in list) {
-    assertNullValRef(elem);
-  }
-  return list;
-}
-
-vms.NullVal assertNullVal(vms.NullVal obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertInstanceKind(obj.kind!);
-  assertInt(obj.identityHashCode!);
-  assertClassRef(obj.classRef!);
-  assertString(obj.valueAsString!);
-  return obj;
-}
-
-vms.ObjRef assertObjRef(vms.ObjRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  return obj;
-}
-
-List<vms.ObjRef> assertListOfObjRef(List<vms.ObjRef> list) {
-  for (vms.ObjRef elem in list) {
-    assertObjRef(elem);
-  }
-  return list;
-}
-
-vms.Obj assertObj(vms.Obj obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  return obj;
-}
-
-vms.Parameter assertParameter(vms.Parameter obj) {
-  assertNotNull(obj);
-  assertInstanceRef(obj.parameterType!);
-  assertBool(obj.fixed!);
-  return obj;
-}
-
-vms.PortList assertPortList(vms.PortList obj) {
-  assertNotNull(obj);
-  assertListOfInstanceRef(obj.ports!);
-  return obj;
-}
-
-vms.ProfileFunction assertProfileFunction(vms.ProfileFunction obj) {
-  assertNotNull(obj);
-  assertString(obj.kind!);
-  assertInt(obj.inclusiveTicks!);
-  assertInt(obj.exclusiveTicks!);
-  assertString(obj.resolvedUrl!);
-  assertDynamic(obj.function!);
-  return obj;
-}
-
-List<vms.ProfileFunction> assertListOfProfileFunction(
-    List<vms.ProfileFunction> list) {
-  for (vms.ProfileFunction elem in list) {
-    assertProfileFunction(elem);
-  }
-  return list;
-}
-
-vms.ProtocolList assertProtocolList(vms.ProtocolList obj) {
-  assertNotNull(obj);
-  assertListOfProtocol(obj.protocols!);
-  return obj;
-}
-
-vms.Protocol assertProtocol(vms.Protocol obj) {
-  assertNotNull(obj);
-  assertString(obj.protocolName!);
-  assertInt(obj.major!);
-  assertInt(obj.minor!);
-  return obj;
-}
-
-List<vms.Protocol> assertListOfProtocol(List<vms.Protocol> list) {
-  for (vms.Protocol elem in list) {
-    assertProtocol(elem);
-  }
-  return list;
-}
-
-vms.ProcessMemoryUsage assertProcessMemoryUsage(vms.ProcessMemoryUsage obj) {
-  assertNotNull(obj);
-  assertProcessMemoryItem(obj.root!);
-  return obj;
-}
-
-vms.ProcessMemoryItem assertProcessMemoryItem(vms.ProcessMemoryItem obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  assertString(obj.description!);
-  assertInt(obj.size!);
-  assertListOfProcessMemoryItem(obj.children!);
-  return obj;
-}
-
-List<vms.ProcessMemoryItem> assertListOfProcessMemoryItem(
-    List<vms.ProcessMemoryItem> list) {
-  for (vms.ProcessMemoryItem elem in list) {
-    assertProcessMemoryItem(elem);
-  }
-  return list;
-}
-
-vms.ReloadReport assertReloadReport(vms.ReloadReport obj) {
-  assertNotNull(obj);
-  assertBool(obj.success!);
-  return obj;
-}
-
-vms.RetainingObject assertRetainingObject(vms.RetainingObject obj) {
-  assertNotNull(obj);
-  assertObjRef(obj.value!);
-  return obj;
-}
-
-List<vms.RetainingObject> assertListOfRetainingObject(
-    List<vms.RetainingObject> list) {
-  for (vms.RetainingObject elem in list) {
-    assertRetainingObject(elem);
-  }
-  return list;
-}
-
-vms.RetainingPath assertRetainingPath(vms.RetainingPath obj) {
-  assertNotNull(obj);
-  assertInt(obj.length!);
-  assertString(obj.gcRootType!);
-  assertListOfRetainingObject(obj.elements!);
-  return obj;
-}
-
-vms.Response assertResponse(vms.Response obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-vms.Sentinel assertSentinel(vms.Sentinel obj) {
-  assertNotNull(obj);
-  assertSentinelKind(obj.kind!);
-  assertString(obj.valueAsString!);
-  return obj;
-}
-
-vms.ScriptRef assertScriptRef(vms.ScriptRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.uri!);
-  return obj;
-}
-
-List<vms.ScriptRef> assertListOfScriptRef(List<vms.ScriptRef> list) {
-  for (vms.ScriptRef elem in list) {
-    assertScriptRef(elem);
-  }
-  return list;
-}
-
-vms.Script assertScript(vms.Script obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.uri!);
-  assertLibraryRef(obj.library!);
-  return obj;
-}
-
-vms.ScriptList assertScriptList(vms.ScriptList obj) {
-  assertNotNull(obj);
-  assertListOfScriptRef(obj.scripts!);
-  return obj;
-}
-
-vms.SourceLocation assertSourceLocation(vms.SourceLocation obj) {
-  assertNotNull(obj);
-  assertScriptRef(obj.script!);
-  assertInt(obj.tokenPos!);
-  return obj;
-}
-
-vms.SourceReport assertSourceReport(vms.SourceReport obj) {
-  assertNotNull(obj);
-  assertListOfSourceReportRange(obj.ranges!);
-  assertListOfScriptRef(obj.scripts!);
-  return obj;
-}
-
-vms.SourceReportCoverage assertSourceReportCoverage(
-    vms.SourceReportCoverage obj) {
-  assertNotNull(obj);
-  assertListOfInt(obj.hits!);
-  assertListOfInt(obj.misses!);
-  return obj;
-}
-
-vms.SourceReportRange assertSourceReportRange(vms.SourceReportRange obj) {
-  assertNotNull(obj);
-  assertInt(obj.scriptIndex!);
-  assertInt(obj.startPos!);
-  assertInt(obj.endPos!);
-  assertBool(obj.compiled!);
-  return obj;
-}
-
-List<vms.SourceReportRange> assertListOfSourceReportRange(
-    List<vms.SourceReportRange> list) {
-  for (vms.SourceReportRange elem in list) {
-    assertSourceReportRange(elem);
-  }
-  return list;
-}
-
-vms.Stack assertStack(vms.Stack obj) {
-  assertNotNull(obj);
-  assertListOfFrame(obj.frames!);
-  assertListOfMessage(obj.messages!);
-  assertBool(obj.truncated!);
-  return obj;
-}
-
-vms.Timeline assertTimeline(vms.Timeline obj) {
-  assertNotNull(obj);
-  assertListOfTimelineEvent(obj.traceEvents!);
-  assertInt(obj.timeOriginMicros!);
-  assertInt(obj.timeExtentMicros!);
-  return obj;
-}
-
-vms.TimelineEvent assertTimelineEvent(vms.TimelineEvent obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-List<vms.TimelineEvent> assertListOfTimelineEvent(
-    List<vms.TimelineEvent> list) {
-  for (vms.TimelineEvent elem in list) {
-    assertTimelineEvent(elem);
-  }
-  return list;
-}
-
-vms.TimelineFlags assertTimelineFlags(vms.TimelineFlags obj) {
-  assertNotNull(obj);
-  assertString(obj.recorderName!);
-  assertListOfString(obj.availableStreams!);
-  assertListOfString(obj.recordedStreams!);
-  return obj;
-}
-
-vms.Timestamp assertTimestamp(vms.Timestamp obj) {
-  assertNotNull(obj);
-  assertInt(obj.timestamp!);
-  return obj;
-}
-
-vms.TypeArgumentsRef assertTypeArgumentsRef(vms.TypeArgumentsRef obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  return obj;
-}
-
-List<vms.TypeArgumentsRef> assertListOfTypeArgumentsRef(
-    List<vms.TypeArgumentsRef> list) {
-  for (vms.TypeArgumentsRef elem in list) {
-    assertTypeArgumentsRef(elem);
-  }
-  return list;
-}
-
-vms.TypeArguments assertTypeArguments(vms.TypeArguments obj) {
-  assertNotNull(obj);
-  assertString(obj.id!);
-  assertString(obj.name!);
-  assertListOfInstanceRef(obj.types!);
-  return obj;
-}
-
-vms.TypeParameters assertTypeParameters(vms.TypeParameters obj) {
-  assertNotNull(obj);
-  assertListOfString(obj.names!);
-  assertTypeArgumentsRef(obj.bounds!);
-  assertTypeArgumentsRef(obj.defaults!);
-  return obj;
-}
-
-vms.UnresolvedSourceLocation assertUnresolvedSourceLocation(
-    vms.UnresolvedSourceLocation obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-vms.UriList assertUriList(vms.UriList obj) {
-  assertNotNull(obj);
-  assertListOfDynamic(obj.uris!);
-  return obj;
-}
-
-vms.Version assertVersion(vms.Version obj) {
-  assertNotNull(obj);
-  assertInt(obj.major!);
-  assertInt(obj.minor!);
-  return obj;
-}
-
-vms.VMRef assertVMRef(vms.VMRef obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  return obj;
-}
-
-List<vms.VMRef> assertListOfVMRef(List<vms.VMRef> list) {
-  for (vms.VMRef elem in list) {
-    assertVMRef(elem);
-  }
-  return list;
-}
-
-vms.VM assertVM(vms.VM obj) {
-  assertNotNull(obj);
-  assertString(obj.name!);
-  assertInt(obj.architectureBits!);
-  assertString(obj.hostCPU!);
-  assertString(obj.operatingSystem!);
-  assertString(obj.targetCPU!);
-  assertString(obj.version!);
-  assertInt(obj.pid!);
-  assertInt(obj.startTime!);
-  assertListOfIsolateRef(obj.isolates!);
-  assertListOfIsolateGroupRef(obj.isolateGroups!);
-  assertListOfIsolateRef(obj.systemIsolates!);
-  assertListOfIsolateGroupRef(obj.systemIsolateGroups!);
-  return obj;
-}
diff --git a/pkg/vm_service/lib/src/dart_io_extensions.dart b/pkg/vm_service/lib/src/dart_io_extensions.dart
index 9e9faaf..8760a4d 100644
--- a/pkg/vm_service/lib/src/dart_io_extensions.dart
+++ b/pkg/vm_service/lib/src/dart_io_extensions.dart
@@ -212,13 +212,15 @@
 
   /// The time, in microseconds, that this socket was closed.
   @optional
-  final int endTime;
+  final int? endTime;
 
   /// The time, in microseconds, that this socket was last read from.
-  final int lastReadTime;
+  @optional
+  final int? lastReadTime;
 
   /// The time, in microseconds, that this socket was last written to.
-  final int lastWriteTime;
+  @optional
+  final int? lastWriteTime;
 
   /// The address of the socket.
   final String address;
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index f22ff9d..b8b3cb6 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -8119,15 +8119,14 @@
       json == null ? null : UriList._fromJson(json);
 
   /// A list of URIs.
-  List<dynamic>? uris;
+  List<String?>? uris;
 
   UriList({
     required this.uris,
   });
 
   UriList._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
-    uris = List<dynamic>.from(
-        createServiceObject(json['uris'], const ['dynamic']) as List? ?? []);
+    uris = List<String?>.from(json['uris']);
   }
 
   @override
@@ -8138,7 +8137,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'uris': uris?.map((f) => f.toJson()).toList(),
+      'uris': uris?.map((f) => f).toList(),
     });
     return json;
   }
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index 8240e95..1f9fc98 100644
--- a/pkg/vm_service/pubspec.yaml
+++ b/pkg/vm_service/pubspec.yaml
@@ -3,7 +3,7 @@
   A library to communicate with a service implementing the Dart VM
   service protocol.
 
-version: 8.2.0
+version: 8.2.2
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
 
diff --git a/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
index ebedeeb..2383312 100644
--- a/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
+++ b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
@@ -4,13 +4,12 @@
 //
 // SharedOptions=--enable-experiment=enhanced-enums
 
-// ignore_for_file: experiment_not_enabled
 // @dart=2.17
 
 import 'common/service_test_common.dart';
 import 'common/test_helper.dart';
 
-const int LINE_A = 24;
+const int LINE_A = 23;
 const int LINE_B = LINE_A + 11;
 const int LINE_C = LINE_B + 4;
 const int LINE_D = LINE_C + 4;
diff --git a/pkg/vm_service/test/common/test_helper.dart b/pkg/vm_service/test/common/test_helper.dart
index 8415c74..7561ce0 100644
--- a/pkg/vm_service/test/common/test_helper.dart
+++ b/pkg/vm_service/test/common/test_helper.dart
@@ -205,9 +205,9 @@
           .transform(utf8.decoder)
           .transform(LineSplitter())
           .listen((line) {
-        const kObservatoryListening = 'Observatory listening on ';
-        if (line.startsWith(kObservatoryListening)) {
-          uri = Uri.parse(line.substring(kObservatoryListening.length));
+        const kDartVMServiceListening = 'The Dart VM service is listening on ';
+        if (line.startsWith(kDartVMServiceListening)) {
+          uri = Uri.parse(line.substring(kDartVMServiceListening.length));
         }
         if (pause_on_start || line == '') {
           // Received blank line.
diff --git a/pkg/vm_service/test/developer_extension_test.dart b/pkg/vm_service/test/developer_extension_test.dart
index baa5115..ca5aee8 100644
--- a/pkg/vm_service/test/developer_extension_test.dart
+++ b/pkg/vm_service/test/developer_extension_test.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:developer';
-// ignore: import_of_legacy_library_into_null_safe
 import 'package:expect/expect.dart';
 import 'package:test/test.dart';
 import 'package:vm_service/vm_service.dart';
diff --git a/pkg/vm_service/test/enhanced_enum_test.dart b/pkg/vm_service/test/enhanced_enum_test.dart
index 633caa5..bde5221 100644
--- a/pkg/vm_service/test/enhanced_enum_test.dart
+++ b/pkg/vm_service/test/enhanced_enum_test.dart
@@ -4,7 +4,6 @@
 //
 // SharedOptions=--enable-experiment=enhanced-enums
 
-// ignore_for_file: experiment_not_enabled
 // @dart=2.17
 
 import 'dart:developer';
diff --git a/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart b/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart
new file mode 100644
index 0000000..b5c514f
--- /dev/null
+++ b/pkg/vm_service/test/serialization_smoke_tests/uri_list_smoke_test.dart
@@ -0,0 +1,40 @@
+// 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:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+// Regression test for https://github.com/dart-lang/sdk/issues/48521.
+
+void main() {
+  const expectedUris = <String?>[
+    'file:///a/b/c',
+    'dart:io',
+    'package:foo/bar.dart',
+    null,
+  ];
+
+  test('UriList serialization', () {
+    final uriList = UriList(uris: expectedUris);
+    final serialized = uriList.toJson();
+    expect(serialized['type'], 'UriList');
+    expect(serialized['uris'], isA<List>());
+    final uris = serialized['uris'].cast<String?>();
+    expect(uris.length, 4);
+    for (int i = 0; i < uris.length; ++i) {
+      expect(expectedUris[i], uris[i]);
+    }
+  });
+
+  test('UriList deserialization', () {
+    final json = <String, dynamic>{
+      'type': 'UriList',
+      'uris': expectedUris,
+    };
+
+    final uriList = UriList.parse(json);
+    expect(uriList, isNotNull);
+    expect(uriList!.uris, expectedUris);
+  });
+}
diff --git a/pkg/vm_service/test/super_constructor_invocation_test.dart b/pkg/vm_service/test/super_constructor_invocation_test.dart
index 7a0d300..ae8239f 100644
--- a/pkg/vm_service/test/super_constructor_invocation_test.dart
+++ b/pkg/vm_service/test/super_constructor_invocation_test.dart
@@ -4,7 +4,6 @@
 //
 // SharedOptions=--enable-experiment=super-parameters
 
-// ignore_for_file: experiment_not_enabled
 // @dart=2.17
 
 import 'dart:developer';
@@ -40,7 +39,6 @@
 }
 
 class B<T> extends R<T> {
-  // ignore: no_default_super_constructor
   B(super.f1, super.v1, super.i1, super.t1) {
     debugger();
   }
diff --git a/pkg/vm_service/test/uri_mappings_lookup_test.dart b/pkg/vm_service/test/uri_mappings_lookup_test.dart
index 0155833..accc20c 100644
--- a/pkg/vm_service/test/uri_mappings_lookup_test.dart
+++ b/pkg/vm_service/test/uri_mappings_lookup_test.dart
@@ -35,7 +35,7 @@
     result = await service.lookupPackageUris(
       isolateId,
       [
-        ...uris.sublist(0, 3),
+        ...uris.sublist(0, 3).cast<String>(),
         'does_not_exist.dart',
       ],
     );
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index d59b1e7..e15328c 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -901,162 +901,6 @@
     types.where((t) => !t!.skip).forEach((t) => t!.generate(gen));
   }
 
-  void generateAsserts(DartGenerator gen) {
-    gen.out(r'''
-// Copyright (c) 2015, 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.
-
-// This is a generated file.
-
-/// A library for asserting correct responses from the VM Service.
-
-import 'package:vm_service/vm_service.dart' as vms;
-
-dynamic assertNotNull(dynamic obj) {
-  if (obj == null) throw 'assert failed';
-  return obj;
-}
-
-bool assertBool(bool obj) {
-  return obj;
-}
-
-int assertInt(int obj) {
-  return obj;
-}
-
-double assertDouble(double obj) {
-  return obj;
-}
-
-dynamic assertDynamic(dynamic obj) {
-  assertNotNull(obj);
-  return obj;
-}
-
-List<dynamic> assertListOfDynamic(List<dynamic> list) {
-  return list;
-}
-
-List<int> assertListOfInt(List<int> list) {
-  for (int elem in list) {
-    assertInt(elem);
-  }
-  return list;
-}
-
-List<String> assertListOfString(List<String> list) {
-  for (String elem in list) {
-    assertString(elem);
-  }
-  return list;
-}
-
-List<vms.IsolateFlag> assertListOfIsolateFlag(List<vms.IsolateFlag> list) {
-  for (vms.IsolateFlag elem in list) {
-    assertIsolateFlag(elem);
-  }
-  return list;
-}
-
-String assertString(String obj) {
-  if (obj.isEmpty) throw 'expected non-zero length string';
-  return obj;
-}
-
-vms.Success assertSuccess(vms.Success obj) {
-  if (obj.type != 'Success') throw 'expected Success';
-  return obj;
-}
-
-/// Assert PauseStart, PauseExit, PauseBreakpoint, PauseInterrupted,
-/// PauseException, Resume, BreakpointAdded, BreakpointResolved,
-/// BreakpointRemoved, and Inspect events.
-vms.Event assertDebugEvent(vms.Event event) {
-  assertEvent(event);
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kBreakpointAdded ||
-      event.kind == vms.EventKind.kBreakpointRemoved ||
-      event.kind == vms.EventKind.kBreakpointResolved) {
-    assertBreakpoint(event.breakpoint!);
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint) {
-    for (vms.Breakpoint elem in event.pauseBreakpoints!) {
-      assertBreakpoint(elem);
-    }
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kPauseInterrupted ||
-      event.kind == vms.EventKind.kPauseException ||
-      event.kind == vms.EventKind.kResume) {
-    // For PauseInterrupted events, there will be no top frame if the isolate is
-    // idle (waiting in the message loop).
-    // For the Resume event, the top frame is provided at all times except for
-    // the initial resume event that is delivered when an isolate begins
-    // execution.
-    if (event.topFrame != null ||
-        (event.kind != vms.EventKind.kPauseInterrupted &&
-            event.kind != vms.EventKind.kResume)) {
-      assertFrame(event.topFrame!);
-    }
-  }
-  if (event.kind == vms.EventKind.kPauseException) {
-    assertInstanceRef(event.exception!);
-  }
-  if (event.kind == vms.EventKind.kPauseBreakpoint ||
-      event.kind == vms.EventKind.kPauseInterrupted) {
-    assertBool(event.atAsyncSuspension!);
-  }
-  if (event.kind == vms.EventKind.kInspect) {
-    assertInstanceRef(event.inspectee!);
-  }
-  return event;
-}
-
-/// Assert IsolateStart, IsolateRunnable, IsolateExit, IsolateUpdate,
-/// and ServiceExtensionAdded events.
-vms.Event assertIsolateEvent(vms.Event event) {
-  assertEvent(event);
-  if (event.kind == vms.EventKind.kServiceExtensionAdded) {
-    assertString(event.extensionRPC!);
-  }
-  return event;
-}
-
-''');
-    for (Enum e in enums) {
-      e.generateAssert(gen);
-    }
-    for (Type? type in types) {
-      if (type!.name == 'Success') continue;
-      type.generateAssert(gen);
-      if (type.name!.endsWith('Ref') ||
-          [
-            'BoundVariable',
-            'Breakpoint',
-            'ClassHeapStats',
-            'CodeRegion',
-            'ContextElement',
-            'CpuSample',
-            'Flag',
-            'Frame',
-            'InboundReference',
-            'LibraryDependency',
-            'Message',
-            'ProcessMemoryItem',
-            'ProfileFunction',
-            'ProcessMemoryItem',
-            'Protocol',
-            'RetainingObject',
-            'SourceReportRange',
-            'TimelineEvent',
-          ].contains(type.name)) {
-        type.generateListAssert(gen);
-      }
-    }
-  }
-
   void setDefaultValue(String typeName, String fieldName, String defaultValue) {
     types
         .firstWhere((t) => t!.name == typeName)!
@@ -1247,16 +1091,30 @@
     // foo|bar[]|baz
     // (@Instance|Sentinel)[]
     bool loop = true;
+    bool nullable = false;
     this.isReturnType = isReturnType;
 
+    final unionTypes = <String>[];
     while (loop) {
       if (parser.consume('(')) {
         while (parser.peek()!.text != ')') {
-          // @Instance | Sentinel
-          parser.advance();
+          if (parser.consume('Null')) {
+            nullable = true;
+          } else {
+            // @Instance | Sentinel
+            final token = parser.advance()!;
+            if (token.isName) {
+              unionTypes.add(_coerceRefType(token.text)!);
+            }
+          }
         }
         parser.consume(')');
-        TypeRef ref = TypeRef('dynamic');
+        TypeRef ref;
+        if (unionTypes.length == 1) {
+          ref = TypeRef(unionTypes.first)..nullable = nullable;
+        } else {
+          ref = TypeRef('dynamic');
+        }
         while (parser.consume('[')) {
           parser.expect(']');
           ref.arrayDepth++;
@@ -1304,15 +1162,16 @@
 class TypeRef {
   String? name;
   int arrayDepth = 0;
+  bool nullable = false;
   List<TypeRef>? genericTypes;
 
   TypeRef(this.name);
 
   String get ref {
     if (arrayDepth == 2) {
-      return 'List<List<${name}>>';
+      return 'List<List<${name}${nullable ? "?" : ""}>>';
     } else if (arrayDepth == 1) {
-      return 'List<${name}>';
+      return 'List<${name}${nullable ? "?" : ""}>';
     } else if (genericTypes != null) {
       return '$name<${genericTypes!.join(', ')}>';
     } else {
@@ -1324,13 +1183,15 @@
     assert(arrayDepth == 1);
 
     if (isListTypeSimple) {
-      return 'List<$name>';
+      return 'List<$name${nullable ? "?" : ""}>';
     } else {
       return 'List<String>';
     }
   }
 
-  String? get listTypeArg => arrayDepth == 2 ? 'List<$name>' : name;
+  String? get listTypeArg => arrayDepth == 2
+      ? 'List<$name${nullable ? "?" : ""}>'
+      : '$name${nullable ? "?" : ""}';
 
   bool get isArray => arrayDepth > 0;
 
diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart
index e91c0f3..2f5f65e 100644
--- a/pkg/vm_service/tool/generate.dart
+++ b/pkg/vm_service/tool/generate.dart
@@ -20,11 +20,12 @@
   String appDirPath = dirname(Platform.script.toFilePath());
 
   // Parse service.md into a model.
-  var file = File(
-      normalize(join(appDirPath, '../../../runtime/vm/service/service.md')));
-  var document = Document();
-  StringBuffer buf = StringBuffer(file.readAsStringSync());
-  var nodes = document.parseLines(buf.toString().split('\n'));
+  final file = File(
+    normalize(join(appDirPath, '../../../runtime/vm/service/service.md')),
+  );
+  final document = Document();
+  final buf = StringBuffer(file.readAsStringSync());
+  final nodes = document.parseLines(buf.toString().split('\n'));
   print('Parsed ${file.path}.');
   print('Service protocol version ${ApiParseUtil.parseVersionString(nodes)}.');
 
@@ -33,7 +34,6 @@
 
   await _generateDart(appDirPath, nodes);
   await _generateJava(appDirPath, nodes);
-  await _generateAsserts(appDirPath, nodes);
 }
 
 Future _generateDart(String appDirPath, List<Node> nodes) async {
@@ -98,34 +98,6 @@
   print('Wrote Java to $srcDirPath.');
 }
 
-Future _generateAsserts(String appDirPath, List<Node> nodes) async {
-  var outDirPath = normalize(join(appDirPath, '..', 'example'));
-  var outDir = Directory(outDirPath);
-  if (!outDir.existsSync()) outDir.createSync(recursive: true);
-  var outputFile = File(join(outDirPath, 'vm_service_assert.dart'));
-  var generator = dart.DartGenerator();
-  dart.api = dart.Api();
-  dart.api.parse(nodes);
-  dart.api.generateAsserts(generator);
-  outputFile.writeAsStringSync(generator.toString());
-  ProcessResult result = Process.runSync('dart', ['format', outDirPath]);
-  if (result.exitCode != 0) {
-    print('dart format: ${result.stdout}\n${result.stderr}');
-    throw result.exitCode;
-  }
-
-  if (_stampPubspecVersion) {
-    // Update the pubspec file.
-    Version version = ApiParseUtil.parseVersionSemVer(nodes);
-    _stampPubspec(version);
-
-    // Validate that the changelog contains an entry for the current version.
-    _checkUpdateChangelog(version);
-  }
-
-  print('Wrote Dart to ${outputFile.path}.');
-}
-
 // Push the major and minor versions into the pubspec.
 void _stampPubspec(Version version) {
   final String pattern = 'version: ';
diff --git a/pkg/vm_snapshot_analysis/lib/ascii_table.dart b/pkg/vm_snapshot_analysis/lib/ascii_table.dart
index 4650cca..39455d8 100644
--- a/pkg/vm_snapshot_analysis/lib/ascii_table.dart
+++ b/pkg/vm_snapshot_analysis/lib/ascii_table.dart
@@ -102,7 +102,7 @@
   String render(int width) {
     if (value.length > width) {
       // Narrowed column.
-      return value.substring(0, width - 2) + '..';
+      return '${value.substring(0, width - 2)}..';
     }
     switch (direction) {
       case AlignmentDirection.left:
diff --git a/pkg/vm_snapshot_analysis/test/utils.dart b/pkg/vm_snapshot_analysis/test/utils.dart
index 0d52b80..cea4a7f 100644
--- a/pkg/vm_snapshot_analysis/test/utils.dart
+++ b/pkg/vm_snapshot_analysis/test/utils.dart
@@ -91,7 +91,7 @@
   });
 }
 
-late final shouldKeepTemporaryDirectories =
+final shouldKeepTemporaryDirectories =
     Platform.environment['KEEP_TEMPORARY_DIRECTORIES']?.isNotEmpty == true;
 
 Future withTempDir(Future Function(String dir) f) async {
diff --git a/pkg/wasm_builder/lib/src/module.dart b/pkg/wasm_builder/lib/src/module.dart
index e015acf..2e03919 100644
--- a/pkg/wasm_builder/lib/src/module.dart
+++ b/pkg/wasm_builder/lib/src/module.dart
@@ -27,6 +27,7 @@
   BaseFunction? startFunction = null;
 
   bool anyFunctionsDefined = false;
+  bool anyMemoriesDefined = false;
   bool anyGlobalsDefined = false;
   bool dataReferencedFromGlobalInitializer = false;
 
@@ -45,13 +46,23 @@
   }
 
   /// All module imports (functions and globals).
-  Iterable<Import> get imports =>
-      functions.whereType<Import>().followedBy(globals.whereType<Import>());
+  Iterable<Import> get imports => functions
+      .whereType<Import>()
+      .followedBy(memories.whereType<Import>())
+      .followedBy(globals.whereType<Import>());
 
   /// All functions defined in the module.
   Iterable<DefinedFunction> get definedFunctions =>
       functions.whereType<DefinedFunction>();
 
+  /// All memories defined in the module.
+  Iterable<DefinedMemory> get definedMemories =>
+      memories.whereType<DefinedMemory>();
+
+  /// All globals defined in the module.
+  Iterable<DefinedGlobal> get definedGlobals =>
+      globals.whereType<DefinedGlobal>();
+
   /// Add a new function type to the module.
   ///
   /// All function types are canonicalized, such that identical types become
@@ -119,8 +130,9 @@
   }
 
   /// Add a new memory to the module.
-  Memory addMemory(int minSize, [int? maxSize]) {
-    final memory = Memory(memories.length, minSize, maxSize);
+  DefinedMemory addMemory(int minSize, [int? maxSize]) {
+    anyMemoriesDefined = true;
+    final memory = DefinedMemory(memories.length, minSize, maxSize);
     memories.add(memory);
     return memory;
   }
@@ -179,6 +191,21 @@
     return function;
   }
 
+  /// Import a memory into the module.
+  ///
+  /// All imported memories must be specified before any memories are declared
+  /// using [Module.addMemory].
+  ImportedMemory importMemory(String module, String name, int minSize,
+      [int? maxSize]) {
+    if (anyMemoriesDefined) {
+      throw "All memory imports must be specified before any definitions.";
+    }
+    final memory =
+        ImportedMemory(module, name, memories.length, minSize, maxSize);
+    memories.add(memory);
+    return memory;
+  }
+
   /// Import a global variable into the module.
   ///
   /// All imported globals must be specified before any globals are declared
@@ -381,15 +408,14 @@
 }
 
 /// A memory in a module.
-class Memory implements Serializable {
+class Memory {
   final int index;
   final int minSize;
   final int? maxSize;
 
   Memory(this.index, this.minSize, [this.maxSize]);
 
-  @override
-  void serialize(Serializer s) {
+  void _serializeLimits(Serializer s) {
     if (maxSize == null) {
       s.writeByte(0x00);
       s.writeUnsigned(minSize);
@@ -401,6 +427,14 @@
   }
 }
 
+class DefinedMemory extends Memory implements Serializable {
+  DefinedMemory(int index, int minSize, int? maxSize)
+      : super(index, minSize, maxSize);
+
+  @override
+  void serialize(Serializer s) => _serializeLimits(s);
+}
+
 /// A tag in a module.
 class Tag implements Serializable {
   final int index;
@@ -517,6 +551,23 @@
   String toString() => "$module.$name";
 }
 
+/// An imported memory.
+class ImportedMemory extends Memory implements Import {
+  final String module;
+  final String name;
+
+  ImportedMemory(this.module, this.name, int index, int minSize, int? maxSize)
+      : super(index, minSize, maxSize);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeName(module);
+    s.writeName(name);
+    s.writeByte(0x02);
+    _serializeLimits(s);
+  }
+}
+
 /// An imported global variable.
 class ImportedGlobal extends Global implements Import {
   final String module;
@@ -660,11 +711,11 @@
   int get id => 5;
 
   @override
-  bool get isNotEmpty => module.memories.isNotEmpty;
+  bool get isNotEmpty => module.definedMemories.isNotEmpty;
 
   @override
   void serializeContents() {
-    writeList(module.memories);
+    writeList(module.definedMemories.toList());
   }
 }
 
@@ -690,11 +741,11 @@
   int get id => 6;
 
   @override
-  bool get isNotEmpty => module.globals.whereType<DefinedGlobal>().isNotEmpty;
+  bool get isNotEmpty => module.definedGlobals.isNotEmpty;
 
   @override
   void serializeContents() {
-    writeList(module.globals.whereType<DefinedGlobal>().toList());
+    writeList(module.definedGlobals.toList());
   }
 }
 
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index a4c477a..3e6c317 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -168,10 +168,17 @@
   # flags.
   if (is_win) {
     if (dart_debug) {
-      cflags = [
-        "/O${dart_debug_optimization_level}",
-        "/Oy-",
-      ]
+      if (is_clang && dart_debug_optimization_level != "2") {
+        cflags = [
+          "-d${dart_debug_optimization_level}",
+          "/Oy-",
+        ]
+      } else {
+        cflags = [
+          "/O${dart_debug_optimization_level}",
+          "/Oy-",
+        ]
+      }
     } else {
       cflags = [
         "/O2",
@@ -198,7 +205,11 @@
       "-fno-exceptions",
     ]
     if (is_clang) {
-      cflags += [ "-Wimplicit-fallthrough" ]
+      cflags += [
+        "-Wimplicit-fallthrough",
+        "-fno-strict-vtable-pointers",  # Handle assignment updates vtable
+                                        # pointers.
+      ]
     } else {
       cflags += [ "-Wno-cast-function-type" ]
     }
@@ -242,6 +253,7 @@
 source_set("dart_api") {
   public_configs = [ ":dart_public_config" ]
   sources = [
+    "include/analyze_snapshot_api.h",
     "include/dart_api.h",
     "include/dart_api_dl.c",
     "include/dart_api_dl.h",
@@ -289,9 +301,11 @@
   public_configs = [ ":dart_public_config" ]
   sources = [
     "$target_gen_dir/version.cc",
+    "include/analyze_snapshot_api.h",
     "include/dart_api.h",
     "include/dart_native_api.h",
     "include/dart_tools_api.h",
+    "vm/analyze_snapshot_api_impl.cc",
     "vm/dart_api_impl.cc",
     "vm/native_api_impl.cc",
     "vm/version.h",
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index ea7d40d..7f0bd21 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -880,6 +880,45 @@
   extra_deps += [ ":elf_loader_product" ]
 }
 
+dart_executable("analyze_snapshot") {
+  extra_configs = [ "..:dart_precompiled_runtime_config" ]
+  extra_deps = [
+    "..:libdart_precompiled_runtime",
+    "../platform:libdart_platform_precompiled_runtime",
+  ]
+
+  extra_sources = [
+    "analyze_snapshot.cc",
+    "builtin.cc",
+    "loader.cc",
+    "loader.h",
+  ]
+
+  if (dart_runtime_mode == "release") {
+    extra_deps += [ ":elf_loader_product" ]
+  } else {
+    extra_deps += [ ":elf_loader" ]
+  }
+}
+
+dart_executable("analyze_snapshot_product") {
+  use_product_mode = true
+  extra_configs = [ "..:dart_precompiled_runtime_config" ]
+  extra_deps = [
+    "..:libdart_precompiled_runtime_product",
+    "../platform:libdart_platform_precompiled_runtime_product",
+  ]
+
+  extra_sources = [
+    "analyze_snapshot.cc",
+    "builtin.cc",
+    "loader.cc",
+    "loader.h",
+  ]
+
+  extra_deps += [ ":elf_loader_product" ]
+}
+
 executable("process_test") {
   sources = [ "process_test.cc" ]
 }
@@ -901,7 +940,7 @@
     "..:dart_maybe_product_config",
   ]
 
-  if (dart_target_arch != "ia32") {
+  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
     configs += [ "..:dart_precompiler_config" ]
   }
 
diff --git a/runtime/bin/analyze_snapshot.cc b/runtime/bin/analyze_snapshot.cc
new file mode 100644
index 0000000..1eb4c14c
--- /dev/null
+++ b/runtime/bin/analyze_snapshot.cc
@@ -0,0 +1,262 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "bin/elf_loader.h"
+#include "bin/error_exit.h"
+#include "bin/file.h"
+
+#include "bin/options.h"
+#include "bin/platform.h"
+
+#if !defined(DART_HOST_OS_FUCHSIA)
+#include "include/analyze_snapshot_api.h"
+#endif
+
+namespace dart {
+namespace bin {
+#if !defined(DART_HOST_OS_FUCHSIA)
+
+#define STRING_OPTIONS_LIST(V) V(out, out_path)
+
+#define BOOL_OPTIONS_LIST(V)                                                   \
+  V(help, help)                                                                \
+  V(version, version)
+
+#define STRING_OPTION_DEFINITION(flag, variable)                               \
+  static const char* variable = nullptr;                                       \
+  DEFINE_STRING_OPTION(flag, variable)
+STRING_OPTIONS_LIST(STRING_OPTION_DEFINITION)
+#undef STRING_OPTION_DEFINITION
+
+#define BOOL_OPTION_DEFINITION(flag, variable)                                 \
+  static bool variable = false;                                                \
+  DEFINE_BOOL_OPTION(flag, variable)
+BOOL_OPTIONS_LIST(BOOL_OPTION_DEFINITION)
+#undef BOOL_OPTION_DEFINITION
+
+// clang-format off
+static void PrintUsage() {
+  Syslog::PrintErr(
+"Usage: analyze_snapshot [<vm-flags>] [<options>] <snapshot_data>            \n"
+"                                                                            \n"
+"Common options:                                                             \n"
+"--help                                                                      \n"
+"  Display this message.                                                     \n"
+"--version                                                                   \n"
+"  Print the SDK version.                                                    \n"
+"--out                                                                       \n"
+"  Path to generate the analysis results JSON.                               \n"
+"                                                                            \n"
+"If omitting [<vm-flags>] the VM parsing the snapshot is created with the    \n"
+"following default flags:                                                    \n"
+"--enable_mirrors=false                                                      \n"
+"--background_compilation                                                    \n"
+"--lazy_async_stacks                                                         \n"
+"--precompilation                                                            \n"
+"                                                                            \n"
+"\n");
+}
+// clang-format on
+
+const uint8_t* vm_snapshot_data = nullptr;
+const uint8_t* vm_snapshot_instructions = nullptr;
+const uint8_t* vm_isolate_data = nullptr;
+const uint8_t* vm_isolate_instructions = nullptr;
+
+// Parse out the command line arguments. Returns -1 if the arguments
+// are incorrect, 0 otherwise.
+static int ParseArguments(int argc,
+                          char** argv,
+                          CommandLineOptions* vm_options,
+                          CommandLineOptions* inputs) {
+  // Skip the binary name.
+  int i = 1;
+
+  // Parse out the vm options.
+  while ((i < argc) && OptionProcessor::IsValidShortFlag(argv[i])) {
+    if (OptionProcessor::TryProcess(argv[i], vm_options)) {
+      i += 1;
+      continue;
+    }
+    vm_options->AddArgument(argv[i]);
+    i += 1;
+  }
+
+  // Parse out the kernel inputs.
+  while (i < argc) {
+    inputs->AddArgument(argv[i]);
+    i++;
+  }
+
+  if (help) {
+    PrintUsage();
+    Platform::Exit(0);
+  } else if (version) {
+    Syslog::PrintErr("Dart SDK version: %s\n", Dart_VersionString());
+    Platform::Exit(0);
+  }
+
+  // Verify consistency of arguments.
+  if (inputs->count() < 1) {
+    Syslog::PrintErr("At least one input is required\n");
+    return -1;
+  }
+
+  if (out_path == nullptr) {
+    Syslog::PrintErr(
+        "Please specify an output path for analysis with the --out flag.\n\n");
+    return -1;
+  }
+
+  return 0;
+}
+
+PRINTF_ATTRIBUTE(1, 2) static void PrintErrAndExit(const char* format, ...) {
+  va_list args;
+  va_start(args, format);
+  Syslog::VPrintErr(format, args);
+  va_end(args);
+
+  Dart_ExitScope();
+  Dart_ShutdownIsolate();
+  exit(kErrorExitCode);
+}
+
+static File* OpenFile(const char* filename) {
+  File* file = File::Open(nullptr, filename, File::kWriteTruncate);
+  if (file == nullptr) {
+    PrintErrAndExit("Error: Unable to write file: %s\n\n", filename);
+  }
+  return file;
+}
+
+static void WriteFile(const char* filename,
+                      const char* buffer,
+                      const intptr_t size) {
+  File* file = OpenFile(filename);
+  RefCntReleaseScope<File> rs(file);
+  if (!file->WriteFully(buffer, size)) {
+    PrintErrAndExit("Error: Unable to write file: %s\n\n", filename);
+  }
+}
+
+int RunAnalyzer(int argc, char** argv) {
+  // Constant mirrors gen_snapshot binary, subject to change.
+  const int EXTRA_VM_ARGUMENTS = 7;
+  CommandLineOptions vm_options(argc + EXTRA_VM_ARGUMENTS);
+  CommandLineOptions inputs(argc);
+  // Parse command line arguments.
+  if (ParseArguments(argc, argv, &vm_options, &inputs) < 0) {
+    PrintUsage();
+    return kErrorExitCode;
+  }
+
+  // Initialize VM with default flags if none are provided.
+  // TODO(#47924): Implement auto-parsing of flags from the snapshot file.
+  if (vm_options.count() == 0) {
+    vm_options.AddArgument("--enable_mirrors=false");
+    vm_options.AddArgument("--background_compilation");
+    vm_options.AddArgument("--lazy_async_stacks");
+    vm_options.AddArgument("--precompilation");
+  }
+
+  char* error = Dart_SetVMFlags(vm_options.count(), vm_options.arguments());
+  if (error != nullptr) {
+    Syslog::PrintErr("Setting VM flags failed: %s\n", error);
+    free(error);
+    return kErrorExitCode;
+  }
+
+  const char* script_name = nullptr;
+  script_name = inputs.GetArgument(0);
+
+  // Dart_LoadELF will crash on nonexistant file non-gracefully
+  // even though it should return `nullptr`.
+  File* const file = File::Open(/*namespc=*/nullptr, script_name, File::kRead);
+  if (file == nullptr) {
+    Syslog::PrintErr("Snapshot file does not exist\n");
+    return kErrorExitCode;
+  }
+  file->Release();
+
+  const char* loader_error = nullptr;
+  Dart_LoadedElf* loaded_elf = Dart_LoadELF(
+      script_name, 0, &loader_error, &vm_snapshot_data,
+      &vm_snapshot_instructions, &vm_isolate_data, &vm_isolate_instructions);
+
+  if (loaded_elf == nullptr) {
+    Syslog::PrintErr("Failure calling Dart_LoadELF:\n%s\n", loader_error);
+    return kErrorExitCode;
+  }
+
+  // Begin initialization
+  Dart_InitializeParams init_params = {};
+  memset(&init_params, 0, sizeof(init_params));
+  init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
+  init_params.vm_snapshot_data = vm_snapshot_data;
+  init_params.vm_snapshot_instructions = vm_snapshot_instructions;
+
+  init_params.file_open = DartUtils::OpenFile;
+  init_params.file_read = DartUtils::ReadFile;
+  init_params.file_write = DartUtils::WriteFile;
+  init_params.file_close = DartUtils::CloseFile;
+  init_params.entropy_source = DartUtils::EntropySource;
+
+  error = Dart_Initialize(&init_params);
+  if (error != nullptr) {
+    Syslog::PrintErr("VM initialization failed: %s\n", error);
+    free(error);
+    return kErrorExitCode;
+  }
+
+  auto isolate_group_data = std::unique_ptr<IsolateGroupData>(
+      new IsolateGroupData(nullptr, nullptr, nullptr, false));
+
+  Dart_IsolateFlags isolate_flags;
+  Dart_IsolateFlagsInitialize(&isolate_flags);
+  // Null safety can be determined from the snapshot itself
+  isolate_flags.null_safety =
+      Dart_DetectNullSafety(nullptr, nullptr, nullptr, vm_snapshot_data,
+                            vm_snapshot_instructions, nullptr, -1);
+
+  Dart_CreateIsolateGroup(nullptr, nullptr, vm_isolate_data,
+                          vm_isolate_instructions, &isolate_flags,
+                          isolate_group_data.get(),
+                          /*isolate_data=*/nullptr, &error);
+
+  if (error != nullptr) {
+    Syslog::PrintErr("Dart_CreateIsolateGroup Error: %s\n", error);
+    free(error);
+    return kErrorExitCode;
+  }
+
+  dart::snapshot_analyzer::Dart_SnapshotAnalyzerInformation info = {
+      vm_snapshot_data, vm_snapshot_instructions, vm_isolate_data,
+      vm_isolate_instructions};
+
+  char* out = NULL;
+  intptr_t out_len = 0;
+
+  Dart_EnterScope();
+  Dart_DumpSnapshotInformationAsJson(&out, &out_len, &info);
+  WriteFile(out_path, out, out_len);
+  // Since ownership of the JSON buffer is ours, free before we exit.
+  free(out);
+  Dart_ExitScope();
+  Dart_ShutdownIsolate();
+  // Unload our DartELF to avoid leaks
+  Dart_UnloadELF(loaded_elf);
+  return 0;
+}
+#endif
+}  // namespace bin
+}  // namespace dart
+
+int main(int argc, char** argv) {
+#if !defined(DART_HOST_OS_FUCHSIA)
+  return dart::bin::RunAnalyzer(argc, argv);
+#endif
+  dart::Syslog::PrintErr("Cannot run on Fuchsia.\n");
+  return dart::bin::kErrorExitCode;
+}
diff --git a/runtime/bin/builtin_impl_sources.gni b/runtime/bin/builtin_impl_sources.gni
index 470f0b5..feb1ee8 100644
--- a/runtime/bin/builtin_impl_sources.gni
+++ b/runtime/bin/builtin_impl_sources.gni
@@ -45,6 +45,8 @@
   "isolate_data.h",
   "lockers.h",
   "thread.h",
+  "thread_absl.cc",
+  "thread_absl.h",
   "thread_android.cc",
   "thread_android.h",
   "thread_fuchsia.cc",
@@ -72,4 +74,6 @@
   "file_test.cc",
   "hashmap_test.cc",
   "priority_heap_test.cc",
+  "snapshot_utils_test.cc",
+  "test_utils.cc",
 ]
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index 6b546ad..36516fc 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -1109,6 +1109,13 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+// NativeFinalizer tests
+
+DART_EXPORT void SetArgumentTo42(intptr_t* token) {
+  *token = 42;
+}
+
+////////////////////////////////////////////////////////////////////////////////
 // Functions for testing @FfiNative.
 
 DART_EXPORT Dart_Handle GetRootLibraryUrl() {
@@ -1133,11 +1140,11 @@
 }
 
 intptr_t PassAsPointerAndValue(void* ptr, intptr_t value) {
-  return reinterpret_cast<intptr_t>(value);
+  return value;
 }
 
 intptr_t PassAsValueAndPointer(intptr_t value, void* ptr) {
-  return reinterpret_cast<intptr_t>(value);
+  return value;
 }
 
 intptr_t* AllocateResource(intptr_t value) {
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index 894884a..92ca3a4 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -88,6 +88,7 @@
   switch (type) {
     case kReadOnly:
       prot = PROT_READ;
+      map_flags |= MAP_RESILIENT_CODESIGN;
       break;
     case kReadExecute:
       // Try to allocate near the VM's binary.
diff --git a/runtime/bin/file_test.cc b/runtime/bin/file_test.cc
index 60adf31..91e53e4 100644
--- a/runtime/bin/file_test.cc
+++ b/runtime/bin/file_test.cc
@@ -2,28 +2,18 @@
 // 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.
 
+#include "bin/file.h"
 #include "bin/dartutils.h"
 #include "bin/directory.h"
-#include "bin/file.h"
+#include "bin/test_utils.h"
 #include "platform/assert.h"
 #include "platform/globals.h"
 #include "vm/unit_test.h"
 
 namespace dart {
 
-// Helper method to be able to run the test from the runtime
-// directory, or the top directory.
-static const char* GetFileName(const char* name) {
-  if (bin::File::Exists(NULL, name)) {
-    return name;
-  } else {
-    static const int kRuntimeLength = strlen("runtime/");
-    return name + kRuntimeLength;
-  }
-}
-
 TEST_CASE(Read) {
-  const char* kFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kFilename = bin::test::GetFileName("runtime/bin/file_test.cc");
   bin::File* file = bin::File::Open(NULL, kFilename, bin::File::kRead);
   EXPECT(file != NULL);
   char buffer[16];
@@ -36,7 +26,7 @@
 }
 
 TEST_CASE(OpenUri_RelativeFilename) {
-  const char* kFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kFilename = bin::test::GetFileName("runtime/bin/file_test.cc");
   char* encoded = reinterpret_cast<char*>(bin::DartUtils::ScopedCString(
       strlen(kFilename) * 3 + 1));
   char* t = encoded;
@@ -63,7 +53,8 @@
 }
 
 TEST_CASE(OpenUri_AbsoluteFilename) {
-  const char* kRelativeFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kRelativeFilename =
+      bin::test::GetFileName("runtime/bin/file_test.cc");
   const char* kFilename = bin::File::GetCanonicalPath(NULL, kRelativeFilename);
   EXPECT_NOTNULL(kFilename);
   char* encoded = reinterpret_cast<char*>(bin::DartUtils::ScopedCString(
@@ -100,7 +91,8 @@
 }
 
 TEST_CASE(OpenUri_ValidUri) {
-  const char* kRelativeFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kRelativeFilename =
+      bin::test::GetFileName("runtime/bin/file_test.cc");
   const char* kAbsoluteFilename = bin::File::GetCanonicalPath(NULL,
       kRelativeFilename);
   EXPECT_NOTNULL(kAbsoluteFilename);
@@ -132,7 +124,8 @@
 }
 
 TEST_CASE(OpenUri_UriWithSpaces) {
-  const char* kRelativeFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kRelativeFilename =
+      bin::test::GetFileName("runtime/bin/file_test.cc");
   const char* strSystemTemp = bin::Directory::SystemTemp(NULL);
   EXPECT_NOTNULL(strSystemTemp);
   const char* kTempDir = Concat(strSystemTemp, "/foo bar");
@@ -175,7 +168,7 @@
 }
 
 TEST_CASE(OpenUri_InvalidUriPercentEncoding) {
-  const char* kFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kFilename = bin::test::GetFileName("runtime/bin/file_test.cc");
   char* encoded = reinterpret_cast<char*>(bin::DartUtils::ScopedCString(
       strlen(kFilename) * 3 + 1));
   char* t = encoded;
@@ -195,7 +188,7 @@
 }
 
 TEST_CASE(OpenUri_TruncatedUriPercentEncoding) {
-  const char* kFilename = GetFileName("runtime/bin/file_test.cc");
+  const char* kFilename = bin::test::GetFileName("runtime/bin/file_test.cc");
   char* encoded = reinterpret_cast<char*>(bin::DartUtils::ScopedCString(
       strlen(kFilename) * 3 + 1));
   char* t = encoded;
@@ -216,7 +209,7 @@
 
 TEST_CASE(FileLength) {
   const char* kFilename =
-      GetFileName("runtime/tests/vm/data/fixed_length_file");
+      bin::test::GetFileName("runtime/tests/vm/data/fixed_length_file");
   bin::File* file = bin::File::Open(NULL, kFilename, bin::File::kRead);
   EXPECT(file != NULL);
   EXPECT_EQ(42, file->Length());
@@ -226,7 +219,7 @@
 TEST_CASE(FilePosition) {
   char buf[42];
   const char* kFilename =
-      GetFileName("runtime/tests/vm/data/fixed_length_file");
+      bin::test::GetFileName("runtime/tests/vm/data/fixed_length_file");
   bin::File* file = bin::File::Open(NULL, kFilename, bin::File::kRead);
   EXPECT(file != NULL);
   EXPECT(file->ReadFully(buf, 12));
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index 6cb8860..69cbbf7 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -205,22 +205,37 @@
 
 int64_t File::Position() {
   ASSERT(handle_->fd() >= 0);
-  return _lseeki64(handle_->fd(), 0, SEEK_CUR);
+  HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(handle_->fd()));
+  LARGE_INTEGER zero_offset;
+  zero_offset.QuadPart = 0;
+  LARGE_INTEGER position;
+  if (!SetFilePointerEx(handle, zero_offset, &position, FILE_CURRENT)) {
+    return -1L;
+  }
+  return position.QuadPart;
 }
 
 bool File::SetPosition(int64_t position) {
   ASSERT(handle_->fd() >= 0);
-  return _lseeki64(handle_->fd(), position, SEEK_SET) >= 0;
+  HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(handle_->fd()));
+  LARGE_INTEGER requested_position;
+  requested_position.QuadPart = position;
+  return SetFilePointerEx(handle, requested_position,
+                          /*lpNewFilePointer=*/nullptr, FILE_BEGIN);
 }
 
 bool File::Truncate(int64_t length) {
-  ASSERT(handle_->fd() >= 0);
-  return _chsize_s(handle_->fd(), length) == 0;
+  if (!SetPosition(length)) {
+    return false;
+  }
+  HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(handle_->fd()));
+  return SetEndOfFile(handle);
 }
 
 bool File::Flush() {
   ASSERT(handle_->fd());
-  return _commit(handle_->fd()) != -1;
+  HANDLE handle = reinterpret_cast<HANDLE>(_get_osfhandle(handle_->fd()));
+  return FlushFileBuffers(handle);
 }
 
 bool File::Lock(File::LockType lock, int64_t start, int64_t end) {
@@ -304,6 +319,11 @@
 
 class StringRAII {
  public:
+  explicit StringRAII(StringRAII& origin) {
+    own_ = origin.own_;
+    s_ = origin.release();
+  }
+
   explicit StringRAII(const char* s) : s_(s), own_(false) {}
   explicit StringRAII(char* s) : s_(s), own_(true) {}
   ~StringRAII() {
@@ -385,9 +405,10 @@
 
   // Long relative path have to be converted to absolute path before prefixing.
   bool is_ok = true;
-  StringRAII absolute_path_raii = File::IsAbsolutePath(path)
-                                      ? StringRAII(path)
-                                      : ConvertToAbsolutePath(path, &is_ok);
+  StringRAII absolute_path_raii(
+      File::IsAbsolutePath(path)
+          ? StringRAII(path)
+          : StringRAII(ConvertToAbsolutePath(path, &is_ok)));
   if (!is_ok) {
     return StringRAII(path);
   }
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 6eddb5a..4d2dad3 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -137,6 +137,7 @@
   V(SecurityContext_SetClientAuthoritiesBytes, 3)                              \
   V(SecurityContext_SetTrustedCertificatesBytes, 3)                            \
   V(SecurityContext_TrustBuiltinRoots, 1)                                      \
+  V(SecurityContext_SetAllowTlsRenegotiation, 2)                               \
   V(SecurityContext_UseCertificateChainBytes, 3)                               \
   V(ServerSocket_Accept, 2)                                                    \
   V(ServerSocket_CreateBindListen, 7)                                          \
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 83c1408..fa8401a 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -168,7 +168,7 @@
 "--write-service-info=<file_uri>\n"
 "  Outputs information necessary to connect to the VM service to the\n"
 "  specified file in JSON format. Useful for clients which are unable to\n"
-"  listen to stdout for the Observatory listening message.\n"
+"  listen to stdout for the Dart VM service listening message.\n"
 #endif  // !defined(PRODUCT)
 "--snapshot-kind=<snapshot_kind>\n"
 "--snapshot=<file_name>\n"
@@ -666,6 +666,10 @@
         if (implicitly_use_dart_dev && Options::vm_service_auth_disabled()) {
           dart_options->AddArgument("--disable-service-auth-codes");
         }
+        if (implicitly_use_dart_dev &&
+            Options::enable_service_port_fallback()) {
+          dart_options->AddArgument("--enable-service-port-fallback");
+        }
       }
       first_option = false;
     }
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 0c22675..498df50 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -11,16 +11,18 @@
 #include <CoreFoundation/CoreFoundation.h>
 
 #if !DART_HOST_OS_IOS
-#include <crt_externs.h>  // NOLINT
+#include <crt_externs.h>
 #endif                    // !DART_HOST_OS_IOS
-#include <errno.h>        // NOLINT
+#include <dlfcn.h>
+#include <errno.h>
 #include <mach-o/dyld.h>
-#include <signal.h>        // NOLINT
-#include <sys/resource.h>  // NOLINT
-#include <sys/sysctl.h>    // NOLINT
-#include <sys/types.h>     // NOLINT
-#include <sys/utsname.h>   // NOLINT
-#include <unistd.h>        // NOLINT
+#include <pthread.h>
+#include <signal.h>
+#include <sys/resource.h>
+#include <sys/sysctl.h>
+#include <sys/types.h>
+#include <sys/utsname.h>
+#include <unistd.h>
 
 #include <string>
 
@@ -251,7 +253,98 @@
   return path_size;
 }
 
-void Platform::SetProcessName(const char* name) {}
+void Platform::SetProcessName(const char* name) {
+  pthread_setname_np(name);
+
+#if !defined(DART_HOST_OS_IOS)
+  // Attempt to set the name displayed in ActivityMonitor.
+  // https://codereview.chromium.org/659007
+
+  class ScopedDLHandle : public ValueObject {
+   public:
+    explicit ScopedDLHandle(void* handle) : handle_(handle) {}
+    ~ScopedDLHandle() {
+      if (handle_ != NULL) dlclose(handle_);
+    }
+    void* get() { return handle_; }
+
+   private:
+    void* handle_;
+    DISALLOW_COPY_AND_ASSIGN(ScopedDLHandle);
+  };
+
+  class ScopedCFStringRef : public ValueObject {
+   public:
+    explicit ScopedCFStringRef(const char* s)
+        : ref_(CFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8)) {}
+    ~ScopedCFStringRef() {
+      if (ref_ != NULL) CFRelease(ref_);
+    }
+    CFStringRef get() { return ref_; }
+
+   private:
+    CFStringRef ref_;
+    DISALLOW_COPY_AND_ASSIGN(ScopedCFStringRef);
+  };
+
+  ScopedDLHandle application_services_handle(
+      dlopen("/System/Library/Frameworks/ApplicationServices.framework/"
+             "Versions/A/ApplicationServices",
+             RTLD_LAZY | RTLD_LOCAL));
+  if (application_services_handle.get() == NULL) return;
+
+  ScopedCFStringRef launch_services_bundle_name("com.apple.LaunchServices");
+  CFBundleRef launch_services_bundle =
+      CFBundleGetBundleWithIdentifier(launch_services_bundle_name.get());
+  if (launch_services_bundle == NULL) return;
+
+#define GET_FUNC(name, cstr)                                                   \
+  ScopedCFStringRef name##_id(cstr);                                           \
+  *reinterpret_cast<void**>(&name) = CFBundleGetFunctionPointerForName(        \
+      launch_services_bundle, name##_id.get());                                \
+  if (name == NULL) return;
+
+#define GET_DATA(name, cstr)                                                   \
+  ScopedCFStringRef name##_id(cstr);                                           \
+  *reinterpret_cast<void**>(&name) =                                           \
+      CFBundleGetDataPointerForName(launch_services_bundle, name##_id.get());  \
+  if (name == NULL) return;
+
+  CFTypeRef (*_LSGetCurrentApplicationASN)(void);
+  GET_FUNC(_LSGetCurrentApplicationASN, "_LSGetCurrentApplicationASN");
+
+  OSStatus (*_LSSetApplicationInformationItem)(int, CFTypeRef, CFStringRef,
+                                               CFStringRef, CFDictionaryRef*);
+  GET_FUNC(_LSSetApplicationInformationItem,
+           "_LSSetApplicationInformationItem");
+
+  CFDictionaryRef (*_LSApplicationCheckIn)(int, CFDictionaryRef);
+  GET_FUNC(_LSApplicationCheckIn, "_LSApplicationCheckIn");
+
+  void (*_LSSetApplicationLaunchServicesServerConnectionStatus)(uint64_t,
+                                                                void*);
+  GET_FUNC(_LSSetApplicationLaunchServicesServerConnectionStatus,
+           "_LSSetApplicationLaunchServicesServerConnectionStatus");
+
+  CFStringRef* _kLSDisplayNameKey;
+  GET_DATA(_kLSDisplayNameKey, "_kLSDisplayNameKey");
+  if (*_kLSDisplayNameKey == NULL) return;
+
+  _LSSetApplicationLaunchServicesServerConnectionStatus(0, NULL);
+
+  _LSApplicationCheckIn(-2, CFBundleGetInfoDictionary(CFBundleGetMainBundle()));
+
+  CFTypeRef asn;
+  asn = _LSGetCurrentApplicationASN();
+  if (asn == NULL) return;
+
+  ScopedCFStringRef cf_name(name);
+  _LSSetApplicationInformationItem(-2, asn, *_kLSDisplayNameKey, cf_name.get(),
+                                   NULL);
+#undef GET_DATA
+#undef GET_FUNC
+#endif  // !defined(DART_HOST_OS_IOS)
+}
 
 void Platform::Exit(int exit_code) {
   Console::RestoreConfig();
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index c34b003..1811456 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -553,6 +553,18 @@
         EXTENDED_STARTUPINFO_PRESENT | CREATE_UNICODE_ENVIRONMENT;
     if (!Process::ModeIsAttached(mode_)) {
       creation_flags |= DETACHED_PROCESS;
+    } else {
+      // Unless we are inherting stdio which means there is some console
+      // associated with the app, we want to ensure no console window pops
+      // up for the spawned child.
+      if (mode_ != kInheritStdio) {
+        // Normally stdout for console dart application is associated with a
+        // console that is launched from, but for gui applications(flutter on
+        // windows) console might be absent, will be created by CreateProcessW
+        // below. When that happens we ensure that console window doesn't
+        // pop up.
+        creation_flags |= CREATE_NO_WINDOW;
+      }
     }
     BOOL result = CreateProcessW(
         NULL,  // ApplicationName
diff --git a/runtime/bin/secure_socket_filter.cc b/runtime/bin/secure_socket_filter.cc
index 9e1492e..a78b635 100644
--- a/runtime/bin/secure_socket_filter.cc
+++ b/runtime/bin/secure_socket_filter.cc
@@ -504,6 +504,10 @@
   SSL_set_bio(ssl_, ssl_side, ssl_side);
   SSL_set_mode(ssl_, SSL_MODE_AUTO_RETRY);  // TODO(whesse): Is this right?
   SSL_set_ex_data(ssl_, filter_ssl_index, this);
+
+  if (context->allow_tls_renegotiation()) {
+    SSL_set_renegotiate_mode(ssl_, ssl_renegotiate_freely);
+  }
   context->RegisterCallbacks(ssl_);
   SSL_set_ex_data(ssl_, ssl_cert_context_index, context);
 
diff --git a/runtime/bin/secure_socket_unsupported.cc b/runtime/bin/secure_socket_unsupported.cc
index f64203d..5d5241db 100644
--- a/runtime/bin/secure_socket_unsupported.cc
+++ b/runtime/bin/secure_socket_unsupported.cc
@@ -130,6 +130,12 @@
       "Secure Sockets unsupported on this platform"));
 }
 
+void FUNCTION_NAME(SecurityContext_SetAllowTlsRenegotiation)(
+    Dart_NativeArguments args) {
+  Dart_ThrowException(DartUtils::NewDartArgumentError(
+      "Secure Sockets unsupported on this platform"));
+}
+
 void FUNCTION_NAME(SecurityContext_UseCertificateChainBytes)(
     Dart_NativeArguments args) {
   Dart_ThrowException(DartUtils::NewDartArgumentError(
diff --git a/runtime/bin/security_context.cc b/runtime/bin/security_context.cc
index 8ccc6a3..b59212e 100644
--- a/runtime/bin/security_context.cc
+++ b/runtime/bin/security_context.cc
@@ -877,6 +877,22 @@
   context->TrustBuiltinRoots();
 }
 
+void FUNCTION_NAME(SecurityContext_SetAllowTlsRenegotiation)(
+    Dart_NativeArguments args) {
+  SSLCertContext* context = SSLCertContext::GetSecurityContext(args);
+  Dart_Handle allow_tls_handle = ThrowIfError(Dart_GetNativeArgument(args, 1));
+
+  ASSERT(context != NULL);
+  ASSERT(allow_tls_handle != NULL);
+
+  if (!Dart_IsBoolean(allow_tls_handle)) {
+    Dart_ThrowException(DartUtils::NewDartArgumentError(
+        "Non-boolean argument passed to SetAllowTlsRenegotiation"));
+  }
+  bool allow = DartUtils::GetBooleanValue(allow_tls_handle);
+  context->set_allow_tls_renegotiation(allow);
+}
+
 void FUNCTION_NAME(X509_Der)(Dart_NativeArguments args) {
   Dart_SetReturnValue(args, X509Helper::GetDer(args));
 }
diff --git a/runtime/bin/security_context.h b/runtime/bin/security_context.h
index b5bc66b..a9eec35 100644
--- a/runtime/bin/security_context.h
+++ b/runtime/bin/security_context.h
@@ -31,7 +31,8 @@
       : ReferenceCounted(),
         context_(context),
         alpn_protocol_string_(nullptr),
-        trust_builtin_(false) {}
+        trust_builtin_(false),
+        allow_tls_renegotiation_(false) {}
 
   ~SSLCertContext() {
     SSL_CTX_free(context_);
@@ -82,6 +83,11 @@
 
   bool trust_builtin() const { return trust_builtin_; }
 
+  void set_allow_tls_renegotiation(bool allow) {
+    allow_tls_renegotiation_ = allow;
+  }
+  bool allow_tls_renegotiation() const { return allow_tls_renegotiation_; }
+
   void set_trust_builtin(bool trust_builtin) { trust_builtin_ = trust_builtin; }
 
   void RegisterCallbacks(SSL* ssl);
@@ -112,7 +118,7 @@
   uint8_t* alpn_protocol_string_;
 
   bool trust_builtin_;
-
+  bool allow_tls_renegotiation_;
   static bool long_ssl_cert_evaluation_;
   static bool bypass_trusting_system_roots_;
 
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index 4650da4..fd0d4dc 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -13,6 +13,12 @@
 #include "bin/file.h"
 #include "bin/platform.h"
 #include "include/dart_api.h"
+#if defined(DART_TARGET_OS_MACOS)
+#include <platform/mach_o.h>
+#endif
+#if defined(DART_TARGET_OS_WINDOWS)
+#include <platform/pe.h>
+#endif
 #include "platform/utils.h"
 
 #define LOG_SECTION_BOUNDARIES false
@@ -23,6 +29,10 @@
 static const int64_t kAppSnapshotHeaderSize = 5 * kInt64Size;
 static const int64_t kAppSnapshotPageSize = 16 * KB;
 
+static const char kMachOAppSnapshotSegmentName[] DART_UNUSED = "__CUSTOM";
+static const char kMachOAppSnapshotSectionName[] DART_UNUSED =
+    "__dart_app_snap";
+
 class MappedAppSnapshot : public AppSnapshot {
  public:
   MappedAppSnapshot(MappedMemory* vm_snapshot_data,
@@ -233,8 +243,210 @@
   return nullptr;
 }
 
+#if defined(DART_TARGET_OS_MACOS)
+AppSnapshot* Snapshot::TryReadAppendedAppSnapshotElfFromMachO(
+    const char* container_path) {
+  File* file = File::Open(NULL, container_path, File::kRead);
+  if (file == nullptr) {
+    return nullptr;
+  }
+  RefCntReleaseScope<File> rs(file);
+
+  // Ensure file is actually MachO-formatted.
+  if (!IsMachOFormattedBinary(container_path)) {
+    Syslog::PrintErr(
+        "Attempted load target was not formatted as expected: "
+        "expected Mach-O binary.\n");
+    return nullptr;
+  }
+
+  // Parse the first 4bytes and extract the magic number.
+  uint32_t magic;
+  file->SetPosition(0);
+  file->ReadFully(&magic, sizeof(uint32_t));
+
+  const bool is64Bit =
+      magic == mach_o::MH_MAGIC_64 || magic == mach_o::MH_CIGAM_64;
+  const bool isByteSwapped =
+      magic == mach_o::MH_CIGAM || magic == mach_o::MH_CIGAM_64;
+
+  if (isByteSwapped) {
+    Syslog::PrintErr(
+        "Dart snapshot contained an unexpected binary file layout. "
+        "Expected non-byte swapped header but found a byte-swapped header.\n");
+    return nullptr;
+  }
+
+  file->SetPosition(0);
+
+  // Read in the Mach-O header, which will contain information about all of the
+  // segments in the binary.
+  //
+  // From the header we determine where our special segment is located. This
+  // segment must be named according to the convention captured by
+  // kMachOAppSnapshotSegmentType and kMachOAppSnapshotSegmentName.
+  if (!is64Bit) {
+    Syslog::PrintErr(
+        "Dart snapshot compiled with 32bit architecture. "
+        "Currently only 64bit architectures are supported.\n");
+    return nullptr;
+  } else {
+    mach_o::mach_header_64 header;
+    file->ReadFully(&header, sizeof(header));
+
+    for (uint32_t i = 0; i < header.ncmds; ++i) {
+      mach_o::load_command command;
+      file->ReadFully(&command, sizeof(mach_o::load_command));
+
+      file->SetPosition(file->Position() - sizeof(command));
+      if (command.cmd != mach_o::LC_SEGMENT &&
+          command.cmd != mach_o::LC_SEGMENT_64) {
+        file->SetPosition(file->Position() + command.cmdsize);
+        continue;
+      }
+
+      mach_o::segment_command_64 segment;
+      file->ReadFully(&segment, sizeof(segment));
+
+      for (uint32_t j = 0; j < segment.nsects; ++j) {
+        mach_o::section_64 section;
+        file->ReadFully(&section, sizeof(section));
+
+        if (segment.cmd == mach_o::LC_SEGMENT_64 &&
+            strcmp(section.segname, kMachOAppSnapshotSegmentName) == 0 &&
+            strcmp(section.sectname, kMachOAppSnapshotSectionName) == 0) {
+          // We have to do the loading "by-hand" because we need to set the
+          // snapshot length to a specific length instead of the "rest of the
+          // file", which is the assumption that TryReadAppSnapshotElf makes.
+          const char* error = nullptr;
+          const uint8_t* vm_data_buffer = nullptr;
+          const uint8_t* vm_instructions_buffer = nullptr;
+          const uint8_t* isolate_data_buffer = nullptr;
+          const uint8_t* isolate_instructions_buffer = nullptr;
+
+          std::unique_ptr<uint8_t[]> snapshot(new uint8_t[section.size]);
+          file->SetPosition(section.offset);
+          file->ReadFully(snapshot.get(), sizeof(uint8_t) * section.size);
+
+          Dart_LoadedElf* handle = Dart_LoadELF_Memory(
+              snapshot.get(), section.size, &error, &vm_data_buffer,
+              &vm_instructions_buffer, &isolate_data_buffer,
+              &isolate_instructions_buffer);
+
+          if (handle == nullptr) {
+            Syslog::PrintErr("Loading failed: %s\n", error);
+            return nullptr;
+          }
+
+          return new ElfAppSnapshot(handle, vm_data_buffer,
+                                    vm_instructions_buffer, isolate_data_buffer,
+                                    isolate_instructions_buffer);
+        }
+      }
+    }
+  }
+
+  return nullptr;
+}
+#endif  // defined(DART_TARGET_OS_MACOS)
+
+#if defined(DART_TARGET_OS_WINDOWS)
+// Keep in sync with CoffSectionTable._snapshotSectionName from
+// pkg/dart2native/lib/dart2native_pe.dart.
+static const char kSnapshotSectionName[] = "snapshot";
+// Ignore the null terminator, as it won't be present if the string length is
+// exactly pe::kCoffSectionNameSize.
+static_assert(sizeof(kSnapshotSectionName) - 1 <= pe::kCoffSectionNameSize,
+              "Section name of snapshot too large");
+
+AppSnapshot* Snapshot::TryReadAppendedAppSnapshotElfFromPE(
+    const char* container_path) {
+  File* const file = File::Open(NULL, container_path, File::kRead);
+  if (file == nullptr) {
+    return nullptr;
+  }
+  RefCntReleaseScope<File> rs(file);
+
+  // Ensure file is actually PE-formatted.
+  if (!IsPEFormattedBinary(container_path)) {
+    Syslog::PrintErr(
+        "Attempted load target was not formatted as expected: "
+        "expected PE32 or PE32+ image file.\n");
+    return nullptr;
+  }
+
+  // Parse the offset into the PE contents (i.e., skipping the MS-DOS stub).
+  uint32_t pe_offset;
+  file->SetPosition(pe::kPEOffsetOffset);
+  file->ReadFully(&pe_offset, sizeof(pe_offset));
+
+  // Skip past the magic bytes to the COFF file header and COFF optional header.
+  const intptr_t coff_offset = pe_offset + sizeof(pe::kPEMagic);
+  file->SetPosition(coff_offset);
+  pe::coff_file_header file_header;
+  file->ReadFully(&file_header, sizeof(file_header));
+  // The optional header follows directly after the file header.
+  pe::coff_optional_header opt_header;
+  file->ReadFully(&opt_header, sizeof(opt_header));
+
+  // Skip to the section table.
+  const intptr_t coff_symbol_table_offset =
+      coff_offset + sizeof(file_header) + file_header.optional_header_size;
+  file->SetPosition(coff_symbol_table_offset);
+  for (intptr_t i = 0; i < file_header.num_sections; i++) {
+    pe::coff_section_header section_header;
+    file->ReadFully(&section_header, sizeof(section_header));
+    if (strncmp(section_header.name, kSnapshotSectionName,
+                pe::kCoffSectionNameSize) == 0) {
+      // We have to do the loading manually even though currently the snapshot
+      // data is at the end of the file because the file alignment for
+      // PE sections can be less than the page size, and TryReadAppSnapshotElf
+      // won't work if the file offset isn't page-aligned.
+      const char* error = nullptr;
+      const uint8_t* vm_data_buffer = nullptr;
+      const uint8_t* vm_instructions_buffer = nullptr;
+      const uint8_t* isolate_data_buffer = nullptr;
+      const uint8_t* isolate_instructions_buffer = nullptr;
+
+      const intptr_t offset = section_header.file_offset;
+      const intptr_t size = section_header.file_size;
+
+      std::unique_ptr<uint8_t[]> snapshot(new uint8_t[size]);
+      file->SetPosition(offset);
+      file->ReadFully(snapshot.get(), sizeof(uint8_t) * size);
+
+      Dart_LoadedElf* const handle =
+          Dart_LoadELF_Memory(snapshot.get(), size, &error, &vm_data_buffer,
+                              &vm_instructions_buffer, &isolate_data_buffer,
+                              &isolate_instructions_buffer);
+
+      if (handle == nullptr) {
+        Syslog::PrintErr("Loading failed: %s\n", error);
+        return nullptr;
+      }
+
+      return new ElfAppSnapshot(handle, vm_data_buffer, vm_instructions_buffer,
+                                isolate_data_buffer,
+                                isolate_instructions_buffer);
+    }
+  }
+
+  return nullptr;
+}
+#endif  // defined(DART_TARGET_OS_WINDOWS)
+
 AppSnapshot* Snapshot::TryReadAppendedAppSnapshotElf(
     const char* container_path) {
+#if defined(DART_TARGET_OS_MACOS)
+  if (IsMachOFormattedBinary(container_path)) {
+    return TryReadAppendedAppSnapshotElfFromMachO(container_path);
+  }
+#elif defined(DART_TARGET_OS_WINDOWS)
+  if (IsPEFormattedBinary(container_path)) {
+    return TryReadAppendedAppSnapshotElfFromPE(container_path);
+  }
+#endif
+
   File* file = File::Open(NULL, container_path, File::kRead);
   if (file == nullptr) {
     return nullptr;
@@ -329,6 +541,80 @@
 
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 
+#if defined(DART_TARGET_OS_MACOS)
+bool Snapshot::IsMachOFormattedBinary(const char* filename) {
+  File* file = File::Open(NULL, filename, File::kRead);
+  if (file == nullptr) {
+    return false;
+  }
+  RefCntReleaseScope<File> rs(file);
+
+  // Ensure the file is long enough to even contain the magic bytes.
+  if (file->Length() < 4) {
+    return false;
+  }
+
+  // Parse the first 4bytes and check the magic numbers.
+  uint32_t magic;
+  file->SetPosition(0);
+  file->Read(&magic, sizeof(uint32_t));
+
+  return magic == mach_o::MH_MAGIC_64 || magic == mach_o::MH_CIGAM_64 ||
+         magic == mach_o::MH_MAGIC || magic == mach_o::MH_CIGAM;
+}
+#endif  // defined(DART_TARGET_OS_MACOS)
+
+#if defined(DART_TARGET_OS_WINDOWS)
+bool Snapshot::IsPEFormattedBinary(const char* filename) {
+  File* file = File::Open(NULL, filename, File::kRead);
+  if (file == nullptr) {
+    return false;
+  }
+  RefCntReleaseScope<File> rs(file);
+
+  // Parse the PE offset.
+  uint32_t pe_offset;
+  // Ensure the file is long enough to contain the PE offset.
+  if (file->Length() <
+      static_cast<intptr_t>(pe::kPEOffsetOffset + sizeof(pe_offset))) {
+    return false;
+  }
+  file->SetPosition(pe::kPEOffsetOffset);
+  file->Read(&pe_offset, sizeof(pe_offset));
+
+  // Ensure the file is long enough to contain the PE magic bytes.
+  if (file->Length() <
+      static_cast<intptr_t>(pe_offset + sizeof(pe::kPEMagic))) {
+    return false;
+  }
+  // Check the magic bytes.
+  file->SetPosition(pe_offset);
+  for (size_t i = 0; i < sizeof(pe::kPEMagic); i++) {
+    char c;
+    file->Read(&c, sizeof(c));
+    if (c != pe::kPEMagic[i]) {
+      return false;
+    }
+  }
+
+  // Check that there is a coff optional header.
+  pe::coff_file_header file_header;
+  pe::coff_optional_header opt_header;
+  file->Read(&file_header, sizeof(file_header));
+  if (file_header.optional_header_size < sizeof(opt_header)) {
+    return false;
+  }
+  file->Read(&opt_header, sizeof(opt_header));
+  // Check the magic bytes in the coff optional header.
+  if (opt_header.magic != pe::kPE32Magic &&
+      opt_header.magic != pe::kPE32PlusMagic) {
+    return false;
+  }
+
+  return true;
+}
+#endif  // defined(DART_TARGET_OS_WINDOWS)
+
 AppSnapshot* Snapshot::TryReadAppSnapshot(const char* script_uri,
                                           bool force_load_elf_from_memory,
                                           bool decode_uri) {
diff --git a/runtime/bin/snapshot_utils.h b/runtime/bin/snapshot_utils.h
index ed96fb1..4359d66 100644
--- a/runtime/bin/snapshot_utils.h
+++ b/runtime/bin/snapshot_utils.h
@@ -38,6 +38,13 @@
   // an ELF binary). May report false negatives.
   static bool IsAOTSnapshot(const char* snapshot_filename);
 
+#if defined(DART_TARGET_OS_MACOS)
+  static bool IsMachOFormattedBinary(const char* container_path);
+#endif
+#if defined(DART_TARGET_OS_WINDOWS)
+  static bool IsPEFormattedBinary(const char* container_path);
+#endif
+
   static AppSnapshot* TryReadAppendedAppSnapshotElf(const char* container_path);
   static AppSnapshot* TryReadAppSnapshot(
       const char* script_uri,
@@ -54,6 +61,15 @@
                                intptr_t isolate_instructions_size);
 
  private:
+#if defined(DART_TARGET_OS_MACOS)
+  static AppSnapshot* TryReadAppendedAppSnapshotElfFromMachO(
+      const char* container_path);
+#endif
+#if defined(DART_TARGET_OS_WINDOWS)
+  static AppSnapshot* TryReadAppendedAppSnapshotElfFromPE(
+      const char* container_path);
+#endif
+
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot);
 };
diff --git a/runtime/bin/snapshot_utils_test.cc b/runtime/bin/snapshot_utils_test.cc
new file mode 100644
index 0000000..7b726fd
--- /dev/null
+++ b/runtime/bin/snapshot_utils_test.cc
@@ -0,0 +1,38 @@
+// 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.
+
+#include "bin/snapshot_utils.h"
+#include "bin/file.h"
+#include "bin/test_utils.h"
+#include "platform/assert.h"
+#include "platform/globals.h"
+#include "vm/unit_test.h"
+
+namespace dart {
+
+#if defined(DART_TARGET_OS_MACOS)
+TEST_CASE(CanDetectMachOFiles) {
+  const char* kMachO32BitLittleEndianFilename =
+      bin::test::GetFileName("runtime/tests/vm/data/macho_32bit_little_endian");
+  const char* kMachO64BitLittleEndianFilename =
+      bin::test::GetFileName("runtime/tests/vm/data/macho_64bit_little_endian");
+  const char* kMachO32BitBigEndianFilename =
+      bin::test::GetFileName("runtime/tests/vm/data/macho_32bit_big_endian");
+  const char* kMachO64BitBigEndianFilename =
+      bin::test::GetFileName("runtime/tests/vm/data/macho_64bit_big_endian");
+
+  EXPECT(
+      bin::Snapshot::IsMachOFormattedBinary(kMachO32BitLittleEndianFilename));
+  EXPECT(
+      bin::Snapshot::IsMachOFormattedBinary(kMachO64BitLittleEndianFilename));
+  EXPECT(bin::Snapshot::IsMachOFormattedBinary(kMachO32BitBigEndianFilename));
+  EXPECT(bin::Snapshot::IsMachOFormattedBinary(kMachO64BitBigEndianFilename));
+
+  const char* kFilename =
+      bin::test::GetFileName("runtime/bin/snapshot_utils_test.cc");
+  EXPECT(!bin::Snapshot::IsMachOFormattedBinary(kFilename));
+}
+#endif
+
+}  // namespace dart
diff --git a/runtime/bin/test_utils.cc b/runtime/bin/test_utils.cc
new file mode 100644
index 0000000..66d7fd9
--- /dev/null
+++ b/runtime/bin/test_utils.cc
@@ -0,0 +1,23 @@
+// 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.
+
+#include "bin/test_utils.h"
+#include "bin/file.h"
+
+namespace dart {
+namespace bin {
+namespace test {
+
+const char* GetFileName(const char* name) {
+  if (bin::File::Exists(NULL, name)) {
+    return name;
+  } else {
+    static const int kRuntimeLength = strlen("runtime/");
+    return name + kRuntimeLength;
+  }
+}
+
+}  // namespace test
+}  // namespace bin
+}  // namespace dart
diff --git a/runtime/bin/test_utils.h b/runtime/bin/test_utils.h
new file mode 100644
index 0000000..9291819
--- /dev/null
+++ b/runtime/bin/test_utils.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef RUNTIME_BIN_TEST_UTILS_H_
+#define RUNTIME_BIN_TEST_UTILS_H_
+
+namespace dart {
+namespace bin {
+namespace test {
+
+// Helper method to be able to run the test from the runtime
+// directory, or the top directory.
+const char* GetFileName(const char* name);
+
+}  // namespace test
+}  // namespace bin
+}  // namespace dart
+
+#endif  // RUNTIME_BIN_TEST_UTILS_H_
diff --git a/runtime/bin/thread.h b/runtime/bin/thread.h
index d6716c9..18a088f 100644
--- a/runtime/bin/thread.h
+++ b/runtime/bin/thread.h
@@ -16,7 +16,9 @@
 }  // namespace dart
 
 // Declare the OS-specific types ahead of defining the generic classes.
-#if defined(DART_HOST_OS_ANDROID)
+#if defined(DART_USE_ABSL)
+#include "bin/thread_absl.h"
+#elif defined(DART_HOST_OS_ANDROID)
 #include "bin/thread_android.h"
 #elif defined(DART_HOST_OS_FUCHSIA)
 #include "bin/thread_fuchsia.h"
@@ -35,7 +37,6 @@
 
 class Thread {
  public:
-  static const ThreadLocalKey kUnsetThreadLocalKey;
   static const ThreadId kInvalidThreadId;
 
   typedef void (*ThreadStartFunction)(uword parameter);
@@ -47,15 +48,8 @@
                    ThreadStartFunction function,
                    uword parameters);
 
-  static ThreadLocalKey CreateThreadLocal();
-  static void DeleteThreadLocal(ThreadLocalKey key);
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    return ThreadInlineImpl::GetThreadLocal(key);
-  }
-  static void SetThreadLocal(ThreadLocalKey key, uword value);
   static intptr_t GetMaxStackSize();
   static ThreadId GetCurrentThreadId();
-  static intptr_t ThreadIdToIntPtr(ThreadId id);
   static bool Compare(ThreadId a, ThreadId b);
 
   static void InitOnce();
diff --git a/runtime/bin/thread_absl.cc b/runtime/bin/thread_absl.cc
new file mode 100644
index 0000000..b016392
--- /dev/null
+++ b/runtime/bin/thread_absl.cc
@@ -0,0 +1,199 @@
+// 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.
+
+#include "platform/globals.h"
+#if defined(DART_USE_ABSL)
+
+#include <errno.h>         // NOLINT
+#include <sys/resource.h>  // NOLINT
+#include <sys/time.h>      // NOLINT
+
+#include "bin/thread.h"
+#include "bin/thread_absl.h"
+#include "platform/assert.h"
+#include "platform/utils.h"
+
+namespace dart {
+namespace bin {
+
+#define VALIDATE_PTHREAD_RESULT(result)                                        \
+  if (result != 0) {                                                           \
+    const int kBufferSize = 1024;                                              \
+    char error_buf[kBufferSize];                                               \
+    FATAL2("pthread error: %d (%s)", result,                                   \
+           Utils::StrError(result, error_buf, kBufferSize));                   \
+  }
+
+#ifdef DEBUG
+#define RETURN_ON_PTHREAD_FAILURE(result)                                      \
+  if (result != 0) {                                                           \
+    const int kBufferSize = 1024;                                              \
+    char error_buf[kBufferSize];                                               \
+    fprintf(stderr, "%s:%d: pthread error: %d (%s)\n", __FILE__, __LINE__,     \
+            result, Utils::StrError(result, error_buf, kBufferSize));          \
+    return result;                                                             \
+  }
+#else
+#define RETURN_ON_PTHREAD_FAILURE(result)                                      \
+  if (result != 0) {                                                           \
+    return result;                                                             \
+  }
+#endif
+
+class ThreadStartData {
+ public:
+  ThreadStartData(const char* name,
+                  Thread::ThreadStartFunction function,
+                  uword parameter)
+      : name_(name), function_(function), parameter_(parameter) {}
+
+  const char* name() const { return name_; }
+  Thread::ThreadStartFunction function() const { return function_; }
+  uword parameter() const { return parameter_; }
+
+ private:
+  const char* name_;
+  Thread::ThreadStartFunction function_;
+  uword parameter_;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadStartData);
+};
+
+// Dispatch to the thread start function provided by the caller. This trampoline
+// is used to ensure that the thread is properly destroyed if the thread just
+// exits.
+static void* ThreadStart(void* data_ptr) {
+  ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
+
+  const char* name = data->name();
+  Thread::ThreadStartFunction function = data->function();
+  uword parameter = data->parameter();
+  delete data;
+
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
+  char truncated_name[16];
+  snprintf(truncated_name, sizeof(truncated_name), "%s", name);
+  pthread_setname_np(pthread_self(), truncated_name);
+#elif defined(DART_HOST_OS_MACOS)
+  // Set the thread name.
+  pthread_setname_np(name);
+#endif
+
+  // Call the supplied thread start function handing it its parameters.
+  function(parameter);
+
+  return NULL;
+}
+
+int Thread::Start(const char* name,
+                  ThreadStartFunction function,
+                  uword parameter) {
+  pthread_attr_t attr;
+  int result = pthread_attr_init(&attr);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  result = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  result = pthread_attr_setstacksize(&attr, Thread::GetMaxStackSize());
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+
+  pthread_t tid;
+  result = pthread_create(&tid, &attr, ThreadStart, data);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  result = pthread_attr_destroy(&attr);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  return 0;
+}
+
+const ThreadId Thread::kInvalidThreadId = static_cast<ThreadId>(0);
+
+intptr_t Thread::GetMaxStackSize() {
+  const int kStackSize = (128 * kWordSize * KB);
+  return kStackSize;
+}
+
+ThreadId Thread::GetCurrentThreadId() {
+  return pthread_self();
+}
+
+bool Thread::Compare(ThreadId a, ThreadId b) {
+  return (pthread_equal(a, b) != 0);
+}
+
+Mutex::Mutex() : data_() {}
+
+Mutex::~Mutex() {}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Mutex::Lock() {
+  data_.mutex()->Lock();
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+bool Mutex::TryLock() {
+  if (!data_.mutex()->TryLock()) {
+    return false;
+  }
+  return true;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Mutex::Unlock() {
+  data_.mutex()->Unlock();
+}
+
+Monitor::Monitor() : data_() {}
+
+Monitor::~Monitor() {}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Enter() {
+  data_.mutex()->Lock();
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Exit() {
+  data_.mutex()->Unlock();
+}
+
+Monitor::WaitResult Monitor::Wait(int64_t millis) {
+  return WaitMicros(millis * kMicrosecondsPerMillisecond);
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+Monitor::WaitResult Monitor::WaitMicros(int64_t micros) {
+  Monitor::WaitResult retval = kNotified;
+  if (micros == kNoTimeout) {
+    // Wait forever.
+    data_.cond()->Wait(data_.mutex());
+  } else {
+    if (data_.cond()->WaitWithTimeout(data_.mutex(),
+                                      absl::Microseconds(micros))) {
+      retval = kTimedOut;
+    }
+  }
+  return retval;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Notify() {
+  data_.cond()->Signal();
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::NotifyAll() {
+  data_.cond()->SignalAll();
+}
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_absl.h b/runtime/bin/thread_absl.h
new file mode 100644
index 0000000..190af2e
--- /dev/null
+++ b/runtime/bin/thread_absl.h
@@ -0,0 +1,58 @@
+// 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.
+
+#ifndef RUNTIME_BIN_THREAD_ABSL_H_
+#define RUNTIME_BIN_THREAD_ABSL_H_
+
+#if !defined(RUNTIME_BIN_THREAD_H_)
+#error Do not include thread_absl.h directly; use thread.h instead.
+#endif
+
+#include <pthread.h>
+
+#include "platform/assert.h"
+#include "platform/globals.h"
+#include "third_party/absl/synchronization/mutex.h"
+
+namespace dart {
+namespace bin {
+
+typedef pthread_t ThreadId;
+
+class MutexData {
+ private:
+  MutexData() : mutex_() {}
+  ~MutexData() {}
+
+  absl::Mutex* mutex() { return &mutex_; }
+
+  absl::Mutex mutex_;
+
+  friend class Mutex;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(MutexData);
+};
+
+class MonitorData {
+ private:
+  MonitorData() : mutex_(), cond_() {}
+  ~MonitorData() {}
+
+  absl::Mutex* mutex() { return &mutex_; }
+  absl::CondVar* cond() { return &cond_; }
+
+  absl::Mutex mutex_;
+  absl::CondVar cond_;
+
+  friend class Monitor;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(MonitorData);
+};
+
+}  // namespace bin
+}  // namespace dart
+
+#endif  // RUNTIME_BIN_THREAD_ABSL_H_
diff --git a/runtime/bin/thread_android.cc b/runtime/bin/thread_android.cc
index 60c911a..9c87067 100644
--- a/runtime/bin/thread_android.cc
+++ b/runtime/bin/thread_android.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"
-#if defined(DART_HOST_OS_ANDROID)
+#if defined(DART_HOST_OS_ANDROID) && !defined(DART_USE_ABSL)
 
 #include "bin/thread.h"
 #include "bin/thread_android.h"
@@ -123,30 +123,8 @@
   return 0;
 }
 
-const ThreadLocalKey Thread::kUnsetThreadLocalKey =
-    static_cast<pthread_key_t>(-1);
 const ThreadId Thread::kInvalidThreadId = static_cast<ThreadId>(0);
 
-ThreadLocalKey Thread::CreateThreadLocal() {
-  pthread_key_t key = kUnsetThreadLocalKey;
-  int result = pthread_key_create(&key, NULL);
-  VALIDATE_PTHREAD_RESULT(result);
-  ASSERT(key != kUnsetThreadLocalKey);
-  return key;
-}
-
-void Thread::DeleteThreadLocal(ThreadLocalKey key) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_key_delete(key);
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
-void Thread::SetThreadLocal(ThreadLocalKey key, uword value) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_setspecific(key, reinterpret_cast<void*>(value));
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
 intptr_t Thread::GetMaxStackSize() {
   const int kStackSize = (128 * kWordSize * KB);
   return kStackSize;
@@ -156,11 +134,6 @@
   return gettid();
 }
 
-intptr_t Thread::ThreadIdToIntPtr(ThreadId id) {
-  ASSERT(sizeof(id) <= sizeof(intptr_t));
-  return static_cast<intptr_t>(id);
-}
-
 bool Thread::Compare(ThreadId a, ThreadId b) {
   return (a == b);
 }
@@ -301,4 +274,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_ANDROID)
+#endif  // defined(DART_HOST_OS_ANDROID) && !defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_android.h b/runtime/bin/thread_android.h
index 7ece84b..9be755f 100644
--- a/runtime/bin/thread_android.h
+++ b/runtime/bin/thread_android.h
@@ -17,26 +17,8 @@
 namespace dart {
 namespace bin {
 
-typedef pthread_key_t ThreadLocalKey;
 typedef pthread_t ThreadId;
 
-class ThreadInlineImpl {
- private:
-  ThreadInlineImpl() {}
-  ~ThreadInlineImpl() {}
-
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    static ThreadLocalKey kUnsetThreadLocalKey = static_cast<pthread_key_t>(-1);
-    ASSERT(key != kUnsetThreadLocalKey);
-    return reinterpret_cast<uword>(pthread_getspecific(key));
-  }
-
-  friend class Thread;
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
-};
-
 class MutexData {
  private:
   MutexData() {}
diff --git a/runtime/bin/thread_fuchsia.cc b/runtime/bin/thread_fuchsia.cc
index 66b847d..d068e0a 100644
--- a/runtime/bin/thread_fuchsia.cc
+++ b/runtime/bin/thread_fuchsia.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"
-#if defined(DART_HOST_OS_FUCHSIA)
+#if defined(DART_HOST_OS_FUCHSIA) && !defined(DART_USE_ABSL)
 
 #include "bin/thread.h"
 #include "bin/thread_fuchsia.h"
@@ -124,30 +124,8 @@
   return 0;
 }
 
-const ThreadLocalKey Thread::kUnsetThreadLocalKey =
-    static_cast<pthread_key_t>(-1);
 const ThreadId Thread::kInvalidThreadId = static_cast<ThreadId>(0);
 
-ThreadLocalKey Thread::CreateThreadLocal() {
-  pthread_key_t key = kUnsetThreadLocalKey;
-  int result = pthread_key_create(&key, NULL);
-  VALIDATE_PTHREAD_RESULT(result);
-  ASSERT(key != kUnsetThreadLocalKey);
-  return key;
-}
-
-void Thread::DeleteThreadLocal(ThreadLocalKey key) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_key_delete(key);
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
-void Thread::SetThreadLocal(ThreadLocalKey key, uword value) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_setspecific(key, reinterpret_cast<void*>(value));
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
 intptr_t Thread::GetMaxStackSize() {
   const int kStackSize = (128 * kWordSize * KB);
   return kStackSize;
@@ -157,11 +135,6 @@
   return pthread_self();
 }
 
-intptr_t Thread::ThreadIdToIntPtr(ThreadId id) {
-  ASSERT(sizeof(id) == sizeof(intptr_t));
-  return static_cast<intptr_t>(id);
-}
-
 bool Thread::Compare(ThreadId a, ThreadId b) {
   return (pthread_equal(a, b) != 0);
 }
@@ -305,4 +278,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_FUCHSIA)
+#endif  // defined(DART_HOST_OS_FUCHSIA) && !defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_fuchsia.h b/runtime/bin/thread_fuchsia.h
index c987468..95f2694 100644
--- a/runtime/bin/thread_fuchsia.h
+++ b/runtime/bin/thread_fuchsia.h
@@ -17,26 +17,8 @@
 namespace dart {
 namespace bin {
 
-typedef pthread_key_t ThreadLocalKey;
 typedef pthread_t ThreadId;
 
-class ThreadInlineImpl {
- private:
-  ThreadInlineImpl() {}
-  ~ThreadInlineImpl() {}
-
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    static ThreadLocalKey kUnsetThreadLocalKey = static_cast<pthread_key_t>(-1);
-    ASSERT(key != kUnsetThreadLocalKey);
-    return reinterpret_cast<uword>(pthread_getspecific(key));
-  }
-
-  friend class Thread;
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
-};
-
 class MutexData {
  private:
   MutexData() {}
diff --git a/runtime/bin/thread_linux.cc b/runtime/bin/thread_linux.cc
index 1a46a3e..f004a08 100644
--- a/runtime/bin/thread_linux.cc
+++ b/runtime/bin/thread_linux.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"
-#if defined(DART_HOST_OS_LINUX)
+#if defined(DART_HOST_OS_LINUX) && !defined(DART_USE_ABSL)
 
 #include "bin/thread.h"
 #include "bin/thread_linux.h"
@@ -123,30 +123,8 @@
   return 0;
 }
 
-const ThreadLocalKey Thread::kUnsetThreadLocalKey =
-    static_cast<pthread_key_t>(-1);
 const ThreadId Thread::kInvalidThreadId = static_cast<ThreadId>(0);
 
-ThreadLocalKey Thread::CreateThreadLocal() {
-  pthread_key_t key = kUnsetThreadLocalKey;
-  int result = pthread_key_create(&key, NULL);
-  VALIDATE_PTHREAD_RESULT(result);
-  ASSERT(key != kUnsetThreadLocalKey);
-  return key;
-}
-
-void Thread::DeleteThreadLocal(ThreadLocalKey key) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_key_delete(key);
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
-void Thread::SetThreadLocal(ThreadLocalKey key, uword value) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_setspecific(key, reinterpret_cast<void*>(value));
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
 intptr_t Thread::GetMaxStackSize() {
   const int kStackSize = (128 * kWordSize * KB);
   return kStackSize;
@@ -156,11 +134,6 @@
   return pthread_self();
 }
 
-intptr_t Thread::ThreadIdToIntPtr(ThreadId id) {
-  ASSERT(sizeof(id) == sizeof(intptr_t));
-  return static_cast<intptr_t>(id);
-}
-
 bool Thread::Compare(ThreadId a, ThreadId b) {
   return (pthread_equal(a, b) != 0);
 }
@@ -304,4 +277,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_LINUX)
+#endif  // defined(DART_HOST_OS_LINUX) && !defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_linux.h b/runtime/bin/thread_linux.h
index 4601efe..b3f99c7 100644
--- a/runtime/bin/thread_linux.h
+++ b/runtime/bin/thread_linux.h
@@ -17,26 +17,8 @@
 namespace dart {
 namespace bin {
 
-typedef pthread_key_t ThreadLocalKey;
 typedef pthread_t ThreadId;
 
-class ThreadInlineImpl {
- private:
-  ThreadInlineImpl() {}
-  ~ThreadInlineImpl() {}
-
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    static ThreadLocalKey kUnsetThreadLocalKey = static_cast<pthread_key_t>(-1);
-    ASSERT(key != kUnsetThreadLocalKey);
-    return reinterpret_cast<uword>(pthread_getspecific(key));
-  }
-
-  friend class Thread;
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
-};
-
 class MutexData {
  private:
   MutexData() {}
diff --git a/runtime/bin/thread_macos.cc b/runtime/bin/thread_macos.cc
index a38c441..d38c635 100644
--- a/runtime/bin/thread_macos.cc
+++ b/runtime/bin/thread_macos.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"
-#if defined(DART_HOST_OS_MACOS)
+#if defined(DART_HOST_OS_MACOS) && !defined(DART_USE_ABSL)
 
 #include "bin/thread.h"
 #include "bin/thread_macos.h"
@@ -114,30 +114,8 @@
   return 0;
 }
 
-const ThreadLocalKey Thread::kUnsetThreadLocalKey =
-    static_cast<pthread_key_t>(-1);
 const ThreadId Thread::kInvalidThreadId = reinterpret_cast<ThreadId>(NULL);
 
-ThreadLocalKey Thread::CreateThreadLocal() {
-  pthread_key_t key = kUnsetThreadLocalKey;
-  int result = pthread_key_create(&key, NULL);
-  VALIDATE_PTHREAD_RESULT(result);
-  ASSERT(key != kUnsetThreadLocalKey);
-  return key;
-}
-
-void Thread::DeleteThreadLocal(ThreadLocalKey key) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_key_delete(key);
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
-void Thread::SetThreadLocal(ThreadLocalKey key, uword value) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  int result = pthread_setspecific(key, reinterpret_cast<void*>(value));
-  VALIDATE_PTHREAD_RESULT(result);
-}
-
 intptr_t Thread::GetMaxStackSize() {
   const int kStackSize = (128 * kWordSize * KB);
   return kStackSize;
@@ -147,11 +125,6 @@
   return pthread_self();
 }
 
-intptr_t Thread::ThreadIdToIntPtr(ThreadId id) {
-  ASSERT(sizeof(id) == sizeof(intptr_t));
-  return reinterpret_cast<intptr_t>(id);
-}
-
 bool Thread::Compare(ThreadId a, ThreadId b) {
   return (pthread_equal(a, b) != 0);
 }
@@ -294,4 +267,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_MACOS)
+#endif  // defined(DART_HOST_OS_MACOS) && !defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_macos.h b/runtime/bin/thread_macos.h
index f6df197..c45091e 100644
--- a/runtime/bin/thread_macos.h
+++ b/runtime/bin/thread_macos.h
@@ -17,26 +17,8 @@
 namespace dart {
 namespace bin {
 
-typedef pthread_key_t ThreadLocalKey;
 typedef pthread_t ThreadId;
 
-class ThreadInlineImpl {
- private:
-  ThreadInlineImpl() {}
-  ~ThreadInlineImpl() {}
-
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    static ThreadLocalKey kUnsetThreadLocalKey = static_cast<pthread_key_t>(-1);
-    ASSERT(key != kUnsetThreadLocalKey);
-    return reinterpret_cast<uword>(pthread_getspecific(key));
-  }
-
-  friend class Thread;
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
-};
-
 class MutexData {
  private:
   MutexData() {}
diff --git a/runtime/bin/thread_win.cc b/runtime/bin/thread_win.cc
index 53809f3..a1a4c93 100644
--- a/runtime/bin/thread_win.cc
+++ b/runtime/bin/thread_win.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"
-#if defined(DART_HOST_OS_WINDOWS)
+#if defined(DART_HOST_OS_WINDOWS) && !defined(DART_USE_ABSL)
 
 #include "bin/thread.h"
 #include "bin/thread_win.h"
@@ -70,25 +70,8 @@
   return 0;
 }
 
-const ThreadLocalKey Thread::kUnsetThreadLocalKey = TLS_OUT_OF_INDEXES;
 const ThreadId Thread::kInvalidThreadId = 0;
 
-ThreadLocalKey Thread::CreateThreadLocal() {
-  ThreadLocalKey key = TlsAlloc();
-  if (key == kUnsetThreadLocalKey) {
-    FATAL1("TlsAlloc failed %d", GetLastError());
-  }
-  return key;
-}
-
-void Thread::DeleteThreadLocal(ThreadLocalKey key) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  BOOL result = TlsFree(key);
-  if (!result) {
-    FATAL1("TlsFree failed %d", GetLastError());
-  }
-}
-
 intptr_t Thread::GetMaxStackSize() {
   const int kStackSize = (128 * kWordSize * KB);
   return kStackSize;
@@ -98,23 +81,10 @@
   return ::GetCurrentThreadId();
 }
 
-intptr_t Thread::ThreadIdToIntPtr(ThreadId id) {
-  ASSERT(sizeof(id) <= sizeof(intptr_t));
-  return static_cast<intptr_t>(id);
-}
-
 bool Thread::Compare(ThreadId a, ThreadId b) {
   return (a == b);
 }
 
-void Thread::SetThreadLocal(ThreadLocalKey key, uword value) {
-  ASSERT(key != kUnsetThreadLocalKey);
-  BOOL result = TlsSetValue(key, reinterpret_cast<void*>(value));
-  if (!result) {
-    FATAL1("TlsSetValue failed %d", GetLastError());
-  }
-}
-
 Mutex::Mutex() {
   InitializeSRWLock(&data_.lock_);
 }
@@ -192,4 +162,4 @@
 }  // namespace bin
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_WINDOWS)
+#endif  // defined(DART_HOST_OS_WINDOWS) && !defined(DART_USE_ABSL)
diff --git a/runtime/bin/thread_win.h b/runtime/bin/thread_win.h
index 611b06b..99691d2 100644
--- a/runtime/bin/thread_win.h
+++ b/runtime/bin/thread_win.h
@@ -15,27 +15,8 @@
 namespace dart {
 namespace bin {
 
-typedef DWORD ThreadLocalKey;
 typedef DWORD ThreadId;
 
-class ThreadInlineImpl {
- private:
-  ThreadInlineImpl() {}
-  ~ThreadInlineImpl() {}
-
-  static uword GetThreadLocal(ThreadLocalKey key) {
-    static ThreadLocalKey kUnsetThreadLocalKey = TLS_OUT_OF_INDEXES;
-    ASSERT(key != kUnsetThreadLocalKey);
-    return reinterpret_cast<uword>(TlsGetValue(key));
-  }
-
-  friend class Thread;
-  friend unsigned int __stdcall ThreadEntry(void* data_ptr);
-
-  DISALLOW_ALLOCATION();
-  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
-};
-
 class MutexData {
  private:
   MutexData() {}
diff --git a/runtime/bin/utils_win.cc b/runtime/bin/utils_win.cc
index 174ed7f..1c542f2 100644
--- a/runtime/bin/utils_win.cc
+++ b/runtime/bin/utils_win.cc
@@ -50,7 +50,8 @@
 
 FILETIME GetFiletimeFromMillis(int64_t millis) {
   static const int64_t kTimeScaler = 10000;  // 100 ns to ms.
-  TimeStamp t = {.t_ = millis * kTimeScaler + kFileTimeEpoch};
+  TimeStamp t;
+  t.t_ = millis * kTimeScaler + kFileTimeEpoch;
   return t.ft_;
 }
 
diff --git a/runtime/docs/gc.md b/runtime/docs/gc.md
index 7c2fd9a..6086968 100644
--- a/runtime/docs/gc.md
+++ b/runtime/docs/gc.md
@@ -13,7 +13,7 @@
 Heap objects are always allocated in double-word increments. Objects in old-space are kept at double-word alignment (address % double-word == 0), and objects in new-space are kept offset from double-word alignment (address % double-word == word). This allows checking an object's age without comparing to a boundary address, avoiding restrictions on heap placement and avoiding loading the boundary from thread-local storage. Additionally, the scavenger can quickly skip over both immediates and old objects with a single branch.
 
 | Pointer    | Referent                                |
-| ---        | ---                                     |
+| ---------- | --------------------------------------- |
 | 0x00000002 | Small integer 1                         |
 | 0xFFFFFFFE | Small integer -1                        |
 | 0x00A00001 | Heap object at 0x00A00000, in old-space |
@@ -75,7 +75,7 @@
 
 ## Concurrent Marking
 
-To reduce the time the mutator is paused for old-space GCs, we allow the mutator to continue running during most of the marking work. 
+To reduce the time the mutator is paused for old-space GCs, we allow the mutator to continue running during most of the marking work.
 
 ### Barrier
 
@@ -204,3 +204,39 @@
 <instructions that cannot directly call Dart functions>
 StoreInstanceField(container, value, NoBarrier)
 ```
+
+## Finalizers
+
+The GC is aware of two types of objects for the purposes of running finalizers.
+
+1) `FinalizerEntry`
+2) `Finalizer` (`FinalizerBase`, `_FinalizerImpl`, `_NativeFinalizer`)
+
+A `FinalizerEntry` contains the `value`, the optional `detach` key, and the `token`, a reference to the `finalizer`, and an `external_size`.
+An entry only holds on weakly to the value, detach key, and finalizer. (Similar to how `WeakReference` only holds on weakly to target).
+
+A `Finalizer` contains all entries, a list of entries of which the value is collected, and a reference to the isolate.
+
+When the value of an entry is GCed, the entry is added over to the collected list.
+If any entry is moved to the collected list, a message is sent that invokes the finalizer to call the callback on all entries in that list.
+For native finalizers, the native callback is immediately invoked in the GC.
+However, we still send a message to the native finalizer to clean up the entries from all entries and the detachments.
+
+When a finalizer is detached by the user, the entry token is set to the entry itself and is removed from the all entries set.
+This ensures that if the entry was already moved to the collected list, the finalizer is not executed.
+
+To speed up detaching, we use a weak map from detach keys to list of entries. This ensures entries can be GCed.
+
+Both the scavenger and marker can process finalizer entries in parallel.
+Parallel tasks use an atomic exchange on the head of the collected entries list, ensuring no entries get lost.
+Mutator threads are guaranteed to be stopped when processing entries.
+This ensures that we do not need barriers for moving entries into the finalizers collected list.
+Dart reads and replaces the collected entries list also with an atomic exchange, ensuring the GC doesn't run in between a load/store.
+
+When a finalizer gets posted a message to process finalized objects, it is being kept alive by the message.
+An alternative design would be to pre-allocate a `WeakReference` in the finalizer pointing to the finalizer, and send that itself.
+This would be at the cost of an extra object.
+
+If the finalizer object itself is GCed, the callback is not run for any of the attachments.
+
+On Isolate shutdown, native finalizers are run, but regular finalizers are not.
diff --git a/runtime/include/analyze_snapshot_api.h b/runtime/include/analyze_snapshot_api.h
new file mode 100644
index 0000000..e02f461
--- /dev/null
+++ b/runtime/include/analyze_snapshot_api.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+ * for details. All rights reserved. Use of this source code is governed by a
+ * BSD-style license that can be found in the LICENSE file.
+ */
+
+#ifndef RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_
+#define RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_
+
+#include <stdint.h>
+
+namespace dart {
+namespace snapshot_analyzer {
+typedef struct {
+  const uint8_t* vm_snapshot_data;
+  const uint8_t* vm_snapshot_instructions;
+  const uint8_t* vm_isolate_data;
+  const uint8_t* vm_isolate_instructions;
+} Dart_SnapshotAnalyzerInformation;
+
+void Dart_DumpSnapshotInformationAsJson(char** buffer,
+                                        intptr_t* buffer_length,
+                                        Dart_SnapshotAnalyzerInformation* info);
+}  // namespace snapshot_analyzer
+}  // namespace dart
+
+#endif  // RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_
diff --git a/runtime/lib/ffi.cc b/runtime/lib/ffi.cc
index e1a6b24..20f6756 100644
--- a/runtime/lib/ffi.cc
+++ b/runtime/lib/ffi.cc
@@ -15,6 +15,7 @@
 #include "vm/dart_api_impl.h"
 #include "vm/exceptions.h"
 #include "vm/flags.h"
+#include "vm/heap/gc_shared.h"
 #include "vm/log.h"
 #include "vm/native_arguments.h"
 #include "vm/native_entry.h"
@@ -243,4 +244,40 @@
   return Pointer::New(type_arg, reinterpret_cast<intptr_t>(FfiResolve));
 }
 
+DEFINE_FFI_NATIVE_ENTRY(FinalizerEntry_SetExternalSize,
+                        void,
+                        (Dart_Handle entry_handle, intptr_t external_size)) {
+  Thread* const thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
+  Zone* const zone = thread->zone();
+  const auto& entry_object =
+      Object::Handle(zone, Api::UnwrapHandle(entry_handle));
+  const auto& entry = FinalizerEntry::Cast(entry_object);
+
+  Heap::Space space;
+  intptr_t external_size_diff;
+  {
+    NoSafepointScope no_safepoint;
+    space = SpaceForExternal(entry.ptr());
+    const intptr_t external_size_old = entry.external_size();
+    if (FLAG_trace_finalizers) {
+      THR_Print("Setting external size from  %" Pd " to  %" Pd
+                " bytes in %s space\n",
+                external_size_old, external_size, space == 0 ? "new" : "old");
+    }
+    external_size_diff = external_size - external_size_old;
+    if (external_size_diff == 0) {
+      return;
+    }
+    entry.set_external_size(external_size);
+  }
+  // The next call cannot be in safepoint.
+  if (external_size_diff > 0) {
+    IsolateGroup::Current()->heap()->AllocatedExternal(external_size_diff,
+                                                       space);
+  } else {
+    IsolateGroup::Current()->heap()->FreedExternal(-external_size_diff, space);
+  }
+};
+
 }  // namespace dart
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 3d2a0f0..8e95dab 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -184,6 +184,7 @@
   bool error_found = false;
   Function& erroneous_closure_function = Function::Handle(zone);
   Class& erroneous_nativewrapper_class = Class::Handle(zone);
+  Class& erroneous_finalizable_class = Class::Handle(zone);
   const char* error_message = nullptr;
 
   {
@@ -242,6 +243,9 @@
     break;
 
           MESSAGE_SNAPSHOT_ILLEGAL(DynamicLibrary);
+          // TODO(http://dartbug.com/47777): Send and exit support: remove this.
+          MESSAGE_SNAPSHOT_ILLEGAL(Finalizer);
+          MESSAGE_SNAPSHOT_ILLEGAL(NativeFinalizer);
           MESSAGE_SNAPSHOT_ILLEGAL(MirrorReference);
           MESSAGE_SNAPSHOT_ILLEGAL(Pointer);
           MESSAGE_SNAPSHOT_ILLEGAL(ReceivePort);
@@ -255,6 +259,11 @@
               error_found = true;
               break;
             }
+            if (klass.implements_finalizable()) {
+              erroneous_finalizable_class = klass.ptr();
+              error_found = true;
+              break;
+            }
           }
       }
       raw->untag()->VisitPointers(&visitor);
@@ -269,13 +278,18 @@
                                       "Illegal argument in isolate message"
                                       " : (object is a closure - %s)",
                                       erroneous_closure_function.ToCString());
-    } else {
-      ASSERT(!erroneous_nativewrapper_class.IsNull());
+    } else if (!erroneous_nativewrapper_class.IsNull()) {
       exception_message =
           OS::SCreate(zone,
                       "Illegal argument in isolate message"
                       " : (object extends NativeWrapper - %s)",
                       erroneous_nativewrapper_class.ToCString());
+    } else {
+      ASSERT(!erroneous_finalizable_class.IsNull());
+      exception_message = OS::SCreate(zone,
+                                      "Illegal argument in isolate message"
+                                      " : (object implements Finalizable - %s)",
+                                      erroneous_finalizable_class.ToCString());
     }
     return Exceptions::CreateUnhandledException(
         zone, Exceptions::kArgumentValue, exception_message);
@@ -284,6 +298,7 @@
   return obj.ptr();
 }
 
+// TODO(http://dartbug.com/47777): Add support for Finalizers.
 DEFINE_NATIVE_ENTRY(Isolate_exit_, 0, 2) {
   GET_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   if (!port.IsNull()) {
@@ -638,9 +653,10 @@
     // Make a copy of the state's isolate flags and hand it to the callback.
     Dart_IsolateFlags api_flags = *(state_->isolate_flags());
     api_flags.is_system_isolate = false;
-    Dart_Isolate isolate = (create_group_callback)(
-        state_->script_url(), name, nullptr, state_->package_config(),
-        &api_flags, parent_isolate_->init_callback_data(), &error);
+    Dart_Isolate isolate =
+        (create_group_callback)(state_->script_url(), name, nullptr,
+                                state_->package_config(), &api_flags,
+                                parent_isolate_->init_callback_data(), &error);
     parent_isolate_->DecrementSpawnCount();
     parent_isolate_ = nullptr;
 
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index f3efce1..31d6f25 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -309,7 +309,7 @@
 }
 
 DEFINE_NATIVE_ENTRY(Internal_collectAllGarbage, 0, 0) {
-  isolate->group()->heap()->CollectAllGarbage();
+  isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   return Object::null();
 }
 
diff --git a/runtime/observatory/tests/service/sigquit_starts_service_test.dart b/runtime/observatory/tests/service/sigquit_starts_service_test.dart
index 911c12d..357a986 100644
--- a/runtime/observatory/tests/service/sigquit_starts_service_test.dart
+++ b/runtime/observatory/tests/service/sigquit_starts_service_test.dart
@@ -23,7 +23,7 @@
     sub = process.stdout.transform(utf8.decoder).listen((e) async {
       if (e.contains('ready') && !readyCompleter.isCompleted) {
         readyCompleter.complete();
-      } else if (e.contains('Observatory listening on')) {
+      } else if (e.contains('The Dart VM service is listening on')) {
         await sub.cancel();
         completer.complete();
       }
diff --git a/runtime/observatory_2/tests/service_2/service_2.status b/runtime/observatory_2/tests/service_2/service_2.status
index 54c0328..d56e17c 100644
--- a/runtime/observatory_2/tests/service_2/service_2.status
+++ b/runtime/observatory_2/tests/service_2/service_2.status
@@ -41,6 +41,9 @@
 dev_fs_weird_char_test: Skip # Windows disallows question mark in paths
 uri_mappings_lookup_test: SkipByDesign # Relies on file paths in the SDK.
 
+[ $arch == ia32 && $mode == debug ]
+break_on_function_many_child_isolates_test: Skip # Times out anyway, so skipping to reduce chance of shard timeout.
+
 [ $compiler == none && $runtime == vm ]
 evaluate_activation_test/instance: RuntimeError # http://dartbug.com/20047
 evaluate_activation_test/scope: RuntimeError # http://dartbug.com/20047
diff --git a/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart b/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
index b056477..7320f09 100644
--- a/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
+++ b/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
@@ -23,7 +23,7 @@
     sub = process.stdout.transform(utf8.decoder).listen((e) async {
       if (e.contains('ready') && !readyCompleter.isCompleted) {
         readyCompleter.complete();
-      } else if (e.contains('Observatory listening on')) {
+      } else if (e.contains('The Dart VM service is listening on')) {
         await sub.cancel();
         completer.complete();
       }
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 28bf82c..0f8cabf 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -200,10 +200,10 @@
 #elif defined(_M_IX86) || defined(__i386__)
 #define HOST_ARCH_IA32 1
 #define ARCH_IS_32_BIT 1
-#elif defined(__ARMEL__)
+#elif defined(_M_ARM) || defined(__ARMEL__)
 #define HOST_ARCH_ARM 1
 #define ARCH_IS_32_BIT 1
-#elif defined(__aarch64__)
+#elif defined(_M_ARM64) || defined(__aarch64__)
 #define HOST_ARCH_ARM64 1
 #define ARCH_IS_64_BIT 1
 #elif defined(__riscv)
@@ -721,14 +721,17 @@
 // Undefine math.h definition which clashes with our condition names.
 #undef OVERFLOW
 
-// Include IL printer functionality into non-PRODUCT builds or in all AOT
-// compiler builds or when forced.
+// Include IL printer and disassembler functionality into non-PRODUCT builds,
+// in all AOT compiler builds or when forced.
 #if !defined(PRODUCT) || defined(DART_PRECOMPILER) ||                          \
     defined(FORCE_INCLUDE_DISASSEMBLER)
 #if defined(DART_PRECOMPILED_RUNTIME) && defined(PRODUCT)
 #error Requested to include IL printer into PRODUCT AOT runtime
 #endif
 #define INCLUDE_IL_PRINTER 1
+#if !defined(FORCE_INCLUDE_DISASSEMBLER)
+#define FORCE_INCLUDE_DISASSEMBLER 1
+#endif
 #endif
 
 }  // namespace dart
diff --git a/runtime/platform/mach_o.h b/runtime/platform/mach_o.h
new file mode 100644
index 0000000..d5bf913
--- /dev/null
+++ b/runtime/platform/mach_o.h
@@ -0,0 +1,104 @@
+// 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.
+
+#ifndef RUNTIME_PLATFORM_MACH_O_H_
+#define RUNTIME_PLATFORM_MACH_O_H_
+
+#include <platform/globals.h>
+
+namespace dart {
+
+namespace mach_o {
+
+#pragma pack(push, 1)
+
+typedef int cpu_type_t;
+typedef int cpu_subtype_t;
+typedef int vm_prot_t;
+
+struct mach_header {
+  uint32_t magic;
+  cpu_type_t cputype;
+  cpu_subtype_t cpusubtype;
+  uint32_t filetype;
+  uint32_t ncmds;
+  uint32_t sizeofcmds;
+  uint32_t flags;
+};
+
+static const uint32_t MH_MAGIC = 0xfeedface;
+static const uint32_t MH_CIGAM = 0xcefaedfe;
+
+struct mach_header_64 {
+  uint32_t magic;
+  cpu_type_t cputype;
+  cpu_subtype_t cpusubtype;
+  uint32_t filetype;
+  uint32_t ncmds;
+  uint32_t sizeofcmds;
+  uint32_t flags;
+  uint32_t reserved;
+};
+
+static const uint32_t MH_MAGIC_64 = 0xfeedfacf;
+static const uint32_t MH_CIGAM_64 = 0xcffaedfe;
+
+struct load_command {
+  uint32_t cmd;
+  uint32_t cmdsize;
+};
+
+static const uint32_t LC_SEGMENT = 0x1;
+static const uint32_t LC_SEGMENT_64 = 0x19;
+
+struct section {
+  char sectname[16];
+  char segname[16];
+  uint32_t addr;
+  uint32_t size;
+  uint32_t offset;
+  uint32_t align;
+  uint32_t reloff;
+  uint32_t nreloc;
+  uint32_t flags;
+  uint32_t reserved1;
+  uint32_t reserved2;
+};
+
+struct section_64 {
+  char sectname[16];
+  char segname[16];
+  uint64_t addr;
+  uint64_t size;
+  uint32_t offset;
+  uint32_t align;
+  uint32_t reloff;
+  uint32_t nreloc;
+  uint32_t flags;
+  uint32_t reserved1;
+  uint32_t reserved2;
+  uint32_t reserved3;
+};
+
+struct segment_command_64 {
+  uint32_t cmd;
+  uint32_t cmdsize;
+  char segname[16];
+  uint64_t vmaddr;
+  uint64_t vmsize;
+  uint64_t fileoff;
+  uint64_t filesize;
+  vm_prot_t maxprot;
+  vm_prot_t initprot;
+  uint32_t nsects;
+  uint32_t flags;
+};
+
+#pragma pack(pop)
+
+}  // namespace mach_o
+
+}  // namespace dart
+
+#endif  // RUNTIME_PLATFORM_MACH_O_H_
diff --git a/runtime/platform/pe.h b/runtime/platform/pe.h
new file mode 100644
index 0000000..952e856
--- /dev/null
+++ b/runtime/platform/pe.h
@@ -0,0 +1,66 @@
+// 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.
+
+#ifndef RUNTIME_PLATFORM_PE_H_
+#define RUNTIME_PLATFORM_PE_H_
+
+#include <platform/globals.h>
+
+namespace dart {
+
+namespace pe {
+
+#pragma pack(push, 1)
+
+static const intptr_t kPEOffsetOffset = 0x3c;
+static const char kPEMagic[] = {'P', 'E', '\0', '\0'};
+
+struct coff_file_header {
+  uint16_t machine;
+  uint16_t num_sections;
+  uint32_t timestamp;
+  uint32_t symbol_table_offset;
+  uint32_t num_symbols;
+  uint16_t optional_header_size;
+  uint16_t characteristics;
+};
+
+// Does not include the BaseOfData field for PE32 (not PE32+) files, but we
+// don't need that to load a snapshot out of a PE file.
+struct coff_optional_header {
+  uint16_t magic;
+  uint8_t linker_major_version;
+  uint8_t linker_minor_version;
+  uint32_t code_size;
+  uint32_t initialized_data_size;
+  uint32_t uninitialized_data_size;
+  uint32_t entry_point_address;
+  uint32_t code_base_address;
+};
+
+static const uint16_t kPE32Magic = 0x10b;
+static const uint16_t kPE32PlusMagic = 0x20b;
+
+static const intptr_t kCoffSectionNameSize = 8;
+
+struct coff_section_header {
+  char name[kCoffSectionNameSize];
+  uint32_t virtual_size;
+  uint32_t virtual_address;
+  uint32_t file_size;
+  uint32_t file_offset;
+  uint32_t relocations_offset;
+  uint32_t line_numbers_offset;
+  uint16_t num_relocations;
+  uint16_t num_line_numbers;
+  uint32_t characteristics;
+};
+
+#pragma pack(pop)
+
+}  // namespace pe
+
+}  // namespace dart
+
+#endif  // RUNTIME_PLATFORM_PE_H_
diff --git a/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart b/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart
new file mode 100644
index 0000000..52152d1
--- /dev/null
+++ b/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart
@@ -0,0 +1,218 @@
+// Copyright (c) 2018, 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:convert';
+import 'dart:io';
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+import 'package:native_stack_traces/elf.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+// Used to ensure we don't have multiple equivalent calls to test.
+final _seenDescriptions = <String>{};
+
+Future<void> testAOT(String dillPath,
+    {bool useAsm = false,
+    bool forceDrops = false,
+    bool stripUtil = false, // Note: forced true if useAsm.
+    bool stripFlag = false,
+    bool disassemble = false}) async {
+  if (const bool.fromEnvironment('dart.vm.product') && disassemble) {
+    Expect.isFalse(disassemble, 'no use of disassembler in PRODUCT mode');
+  }
+
+  final analyzeSnapshot = path.join(
+      buildDir,
+      bool.fromEnvironment('dart.vm.product')
+          ? 'analyze_snapshot_product'
+          : 'analyze_snapshot');
+
+  // For assembly, we can't test the sizes of the snapshot sections, since we
+  // don't have a Mach-O reader for Mac snapshots and for ELF, the assembler
+  // merges the text/data sections and the VM/isolate section symbols may not
+  // have length information. Thus, we force external stripping so we can test
+  // the approximate size of the stripped snapshot.
+  if (useAsm) {
+    stripUtil = true;
+  }
+
+  final descriptionBuilder = StringBuffer()..write(useAsm ? 'assembly' : 'elf');
+  if (forceDrops) {
+    descriptionBuilder.write('-dropped');
+  }
+  if (stripFlag) {
+    descriptionBuilder.write('-intstrip');
+  }
+  if (stripUtil) {
+    descriptionBuilder.write('-extstrip');
+  }
+  if (disassemble) {
+    descriptionBuilder.write('-disassembled');
+  }
+
+  final description = descriptionBuilder.toString();
+  Expect.isTrue(_seenDescriptions.add(description),
+      "test configuration $description would be run multiple times");
+
+  await withTempDir('analyze_snapshot_binary-$description',
+      (String tempDir) async {
+    // Generate the snapshot
+    final snapshotPath = path.join(tempDir, 'test.snap');
+    final commonSnapshotArgs = [
+      if (stripFlag) '--strip', //  gen_snapshot specific and not a VM flag.
+      if (forceDrops) ...[
+        '--dwarf-stack-traces',
+        '--no-retain-function-objects',
+        '--no-retain-code-objects'
+      ],
+      if (disassemble) '--disassemble', // Not defined in PRODUCT mode.
+      dillPath,
+    ];
+
+    if (useAsm) {
+      final assemblyPath = path.join(tempDir, 'test.S');
+
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-assembly',
+        '--assembly=$assemblyPath',
+        ...commonSnapshotArgs,
+      ]);
+
+      await assembleSnapshot(assemblyPath, snapshotPath);
+    } else {
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$snapshotPath',
+        ...commonSnapshotArgs,
+      ]);
+    }
+
+    print("Snapshot generated at $snapshotPath.");
+
+    // May not be ELF, but another format.
+    final elf = Elf.fromFile(snapshotPath);
+    if (!useAsm) {
+      Expect.isNotNull(elf);
+    }
+
+    if (elf != null) {
+      // Verify some ELF file format parameters.
+      final textSections = elf.namedSections(".text");
+      Expect.isNotEmpty(textSections);
+      Expect.isTrue(
+          textSections.length <= 2, "More text sections than expected");
+      final dataSections = elf.namedSections(".rodata");
+      Expect.isNotEmpty(dataSections);
+      Expect.isTrue(
+          dataSections.length <= 2, "More data sections than expected");
+    }
+
+    final analyzerOutputPath = path.join(tempDir, 'analyze_test.json');
+
+    // This will throw if exit code is not 0.
+    await run(analyzeSnapshot, <String>[
+      '--out=$analyzerOutputPath',
+      '$snapshotPath',
+    ]);
+
+    final analyzerJsonBytes = await readFile(analyzerOutputPath);
+    final analyzerJson = json.decode(analyzerJsonBytes);
+    Expect.isFalse(analyzerJson.isEmpty);
+    Expect.isTrue(analyzerJson.keys
+        .toSet()
+        .containsAll(['snapshot_data', 'class_table', 'object_pool']));
+  });
+}
+
+main() async {
+  void printSkip(String description) =>
+      print('Skipping $description for ${path.basename(buildDir)} '
+              'on ${Platform.operatingSystem}' +
+          (clangBuildToolsDir == null ? ' without //buildtools' : ''));
+
+  // We don't have access to the SDK on Android.
+  if (Platform.isAndroid) {
+    printSkip('all tests');
+    return;
+  }
+
+  await withTempDir('analyze_snapshot_binary', (String tempDir) async {
+    // We only need to generate the dill file once for all JIT tests.
+    final _thisTestPath = path.join(sdkDir, 'runtime', 'tests', 'vm', 'dart',
+        'analyze_snapshot_binary_test.dart');
+
+    // We only need to generate the dill file once for all AOT tests.
+    final aotDillPath = path.join(tempDir, 'aot_test.dill');
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform',
+      platformDill,
+      ...Platform.executableArguments.where((arg) =>
+          arg.startsWith('--enable-experiment=') ||
+          arg == '--sound-null-safety' ||
+          arg == '--no-sound-null-safety'),
+      '-o',
+      aotDillPath,
+      _thisTestPath
+    ]);
+
+    // Just as a reminder for AOT tests:
+    // * If useAsm is true, then stripUtil is forced (as the assembler may add
+    //   extra information that needs stripping), so no need to specify
+    //   stripUtil for useAsm tests.
+
+    await Future.wait([
+      // Test unstripped ELF generation directly.
+      testAOT(aotDillPath),
+      testAOT(aotDillPath, forceDrops: true),
+
+      // Test flag-stripped ELF generation.
+      testAOT(aotDillPath, stripFlag: true),
+    ]);
+
+    // Since we can't force disassembler support after the fact when running
+    // in PRODUCT mode, skip any --disassemble tests. Do these tests last as
+    // they have lots of output and so the log will be truncated.
+    if (!const bool.fromEnvironment('dart.vm.product')) {
+      // Regression test for dartbug.com/41149.
+      await testAOT(aotDillPath, disassemble: true);
+    }
+
+    // We neither generate assembly nor have a stripping utility on Windows.
+    if (Platform.isWindows) {
+      printSkip('external stripping and assembly tests');
+      return;
+    }
+
+    // The native strip utility on Mac OS X doesn't recognize ELF files.
+    if (Platform.isMacOS && clangBuildToolsDir == null) {
+      printSkip('ELF external stripping test');
+    } else {
+      // Test unstripped ELF generation that is then externally stripped.
+      await testAOT(aotDillPath, stripUtil: true);
+    }
+
+    // TODO(sstrickl): Currently we can't assemble for SIMARM64 on MacOSX.
+    // For example, the test runner still uses blobs for
+    // dartkp-mac-*-simarm64. Change assembleSnapshot and remove this check
+    // when we can.
+    if (Platform.isMacOS && buildDir.endsWith('SIMARM64')) {
+      printSkip('assembly tests');
+      return;
+    }
+    await Future.wait([
+      // Test unstripped assembly generation that is then externally stripped.
+      testAOT(aotDillPath, useAsm: true),
+      // Test stripped assembly generation that is then externally stripped.
+      testAOT(aotDillPath, useAsm: true, stripFlag: true),
+    ]);
+  });
+}
+
+Future<String> readFile(String file) {
+  return new File(file).readAsString();
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_helper.dart b/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_helper.dart
new file mode 100644
index 0000000..c0dfdeb
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_helper.dart
@@ -0,0 +1,36 @@
+// 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:isolate';
+
+import 'helpers.dart';
+
+int callbackCount = 0;
+
+void callback(Nonce token) {
+  callbackCount++;
+  print('$name: Running finalizer: token: $token');
+}
+
+final finalizer = Finalizer<Nonce>(callback);
+
+late String name;
+
+void main(List<String> arguments, SendPort port) async {
+  name = arguments[0];
+
+  final token = Nonce(42);
+  makeObjectWithFinalizer(finalizer, token);
+
+  final awaitBeforeShuttingDown = ReceivePort();
+  port.send(awaitBeforeShuttingDown.sendPort);
+  final message = await awaitBeforeShuttingDown.first;
+  print('$name: $message');
+
+  await Future.delayed(Duration(milliseconds: 1));
+  print('$name: Awaited to see if there were any callbacks.');
+
+  print('$name: Helper isolate exiting. num callbacks: $callbackCount.');
+  port.send(callbackCount);
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_test.dart
new file mode 100644
index 0000000..ba5216f
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_isolate_groups_run_gc_test.dart
@@ -0,0 +1,93 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:async/async.dart';
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testFinalizerInOtherIsolateGroupGCBeforeExit();
+  await testFinalizerInOtherIsolateGroupGCAfterExit();
+  await testFinalizerInOtherIsolateGroupNoGC();
+
+  print('$name: End of test, shutting down.');
+}
+
+const name = 'main';
+
+late bool hotReloadBot;
+
+Future<void> testFinalizerInOtherIsolateGroupGCBeforeExit() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 1'],
+    receivePort.sendPort,
+  );
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  doGC(name: name);
+  await yieldToMessageLoop(name: name);
+
+  signalHelperIsolate.send('Done GCing.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  // Different isolate group, so we don't expect a GC in this isolate to cause
+  // collected objects in the helper.
+  // Except for in --hot-reload-test-mode, then the GC is triggered.
+  hotReloadBot = helperCallbacks == 1;
+}
+
+Future<void> testFinalizerInOtherIsolateGroupGCAfterExit() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 2'],
+    receivePort.sendPort,
+  );
+
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  signalHelperIsolate.send('Before GCing.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  Expect.equals(hotReloadBot ? 1 : 0, helperCallbacks);
+
+  doGC(name: name);
+  await yieldToMessageLoop(name: name);
+}
+
+Future<void> testFinalizerInOtherIsolateGroupNoGC() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 3'],
+    receivePort.sendPort,
+  );
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  signalHelperIsolate.send('Before quitting main isolate.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  Expect.equals(hotReloadBot ? 1 : 0, helperCallbacks);
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_isolates_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/finalizer_isolates_run_gc_test.dart
new file mode 100644
index 0000000..5750bf4
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_isolates_run_gc_test.dart
@@ -0,0 +1,103 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testNormalExit();
+  await testSendAndExit();
+  await testSendAndExitFinalizer();
+  print('End of test, shutting down.');
+}
+
+final finalizerTokens = <Nonce>{};
+
+void callback(Nonce token) {
+  print('Running finalizer: token: $token');
+  finalizerTokens.add(token);
+}
+
+void runIsolateAttachFinalizer(Object? message) {
+  final finalizer = Finalizer<Nonce>(callback);
+  final value = Nonce(1001);
+  final token = Nonce(1002);
+  finalizer.attach(value, token);
+  final token9 = Nonce(9002);
+  makeObjectWithFinalizer(finalizer, token9);
+  if (message == null) {
+    print('Isolate done.');
+    return;
+  }
+  final list = message as List;
+  assert(list.length == 2);
+  final sendPort = list[0] as SendPort;
+  final tryToSendFinalizer = list[1] as bool;
+  if (tryToSendFinalizer) {
+    Expect.throws(() {
+      // TODO(http://dartbug.com/47777): Send and exit support.
+      print('Trying to send and exit finalizer.');
+      Isolate.exit(sendPort, [value, finalizer]);
+    });
+  }
+  print('Isolate sending and exit.');
+  Isolate.exit(sendPort, [value]);
+}
+
+Future testNormalExit() async {
+  final portExitMessage = ReceivePort();
+  await Isolate.spawn(
+    runIsolateAttachFinalizer,
+    null,
+    onExit: portExitMessage.sendPort,
+  );
+  await portExitMessage.first;
+
+  doGC();
+  await yieldToMessageLoop();
+
+  Expect.equals(0, finalizerTokens.length);
+}
+
+@pragma('vm:never-inline')
+Future<Finalizer?> testSendAndExitHelper(
+    {bool trySendFinalizer = false}) async {
+  final port = ReceivePort();
+  await Isolate.spawn(
+    runIsolateAttachFinalizer,
+    [port.sendPort, trySendFinalizer],
+  );
+  final message = await port.first as List;
+  print('Received message ($message).');
+  final value = message[0] as Nonce;
+  print('Received value ($value), but now forgetting about it.');
+
+  Expect.equals(1, message.length);
+  // TODO(http://dartbug.com/47777): Send and exit support.
+  return null;
+}
+
+Future testSendAndExit() async {
+  await testSendAndExitHelper(trySendFinalizer: false);
+
+  doGC();
+  await yieldToMessageLoop();
+
+  Expect.equals(0, finalizerTokens.length);
+}
+
+Future testSendAndExitFinalizer() async {
+  final finalizer = await testSendAndExitHelper(trySendFinalizer: true);
+
+  // TODO(http://dartbug.com/47777): Send and exit support.
+  Expect.isNull(finalizer);
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_nullable_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/finalizer_nullable_run_gc_test.dart
new file mode 100644
index 0000000..8000a41
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_nullable_run_gc_test.dart
@@ -0,0 +1,43 @@
+// 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:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() {
+  testFinalizer();
+}
+
+void testFinalizer() async {
+  final finalizerTokens = <Nonce?>{};
+  void callback(Nonce? token) {
+    print('Running finalizer: token: $token');
+    finalizerTokens.add(token);
+  }
+
+  final finalizer = Finalizer<Nonce?>(callback);
+
+  {
+    final detach = Nonce(2022);
+    final token = null;
+
+    makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+    doGC();
+
+    // We haven't stopped running synchronous dart code yet.
+    Expect.isFalse(finalizerTokens.contains(token));
+
+    await Future.delayed(Duration(milliseconds: 1));
+
+    // Now we have.
+    Expect.isTrue(finalizerTokens.contains(token));
+
+    // Try detaching after finalizer ran.
+    finalizer.detach(detach);
+  }
+
+  print('End of test, shutting down.');
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/finalizer_run_gc_test.dart
new file mode 100644
index 0000000..a278b5d
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_run_gc_test.dart
@@ -0,0 +1,90 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() {
+  testWrongArguments();
+  testFinalizer();
+}
+
+void testWrongArguments() {
+  void callback(Object token) {
+    throw 'This should never happen!';
+  }
+
+  final finalizer = Finalizer<Nonce>(callback);
+  final myFinalizable = Nonce(1000);
+  final token = Nonce(2000);
+  final detach = Nonce(3000);
+
+  Expect.throws(() {
+    finalizer.attach(myFinalizable, token, detach: 123);
+  });
+  Expect.throws(() {
+    finalizer.attach(123, token, detach: detach);
+  });
+}
+
+void testFinalizer() async {
+  final finalizerTokens = <Object>{};
+  void callback(Object token) {
+    print('Running finalizer: token: $token');
+    finalizerTokens.add(token);
+  }
+
+  final finalizer = Finalizer<Nonce>(callback);
+
+  {
+    final detach = Nonce(2022);
+    final token = Nonce(42);
+
+    makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+    doGC();
+
+    // We haven't stopped running synchronous dart code yet.
+    Expect.isFalse(finalizerTokens.contains(token));
+
+    await Future.delayed(Duration(milliseconds: 1));
+
+    // Now we have.
+    Expect.isTrue(finalizerTokens.contains(token));
+
+    // Try detaching after finalizer ran.
+    finalizer.detach(detach);
+  }
+
+  {
+    final token = Nonce(1337);
+    final token2 = Nonce(1338);
+    final detachkey = Nonce(1984);
+    {
+      final value = Nonce(2);
+      final value2 = Nonce(2000000);
+      finalizer.attach(value, token, detach: detachkey);
+      finalizer.attach(value2, token2, detach: detachkey);
+      // Should detach 2 finalizers.
+      finalizer.detach(detachkey);
+      // Try detaching again, should do nothing.
+      finalizer.detach(detachkey);
+    }
+    doGC();
+    await yieldToMessageLoop();
+    Expect.isFalse(finalizerTokens.contains(token));
+    Expect.isFalse(finalizerTokens.contains(token2));
+  }
+
+  // Not running finalizer on shutdown.
+  final value = Nonce(3);
+  final token = Nonce(1337);
+  finalizer.attach(value, token);
+  print('End of test, shutting down.');
+}
diff --git a/runtime/tests/vm/dart/finalizer/finalizer_zone_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/finalizer_zone_run_gc_test.dart
new file mode 100644
index 0000000..bcc6d9e1
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/finalizer_zone_run_gc_test.dart
@@ -0,0 +1,73 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testFinalizerZone();
+  await testFinalizerException();
+}
+
+Future<void> testFinalizerZone() async {
+  Zone? expectedZone;
+  Zone? actualZone;
+
+  final finalizer = runZoned(() {
+    expectedZone = Zone.current;
+
+    void callback(Object token) {
+      actualZone = Zone.current;
+    }
+
+    return Finalizer<Nonce>(callback);
+  });
+
+  final detach = Nonce(2022);
+  final token = Nonce(42);
+
+  makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+  doGC();
+
+  // We haven't stopped running synchronous dart code yet.
+  Expect.isNull(actualZone);
+
+  await yieldToMessageLoop();
+
+  // Now we have.
+  Expect.equals(expectedZone, actualZone);
+}
+
+Future<void> testFinalizerException() async {
+  Object? caughtError;
+
+  final finalizer = runZonedGuarded(() {
+    void callback(Object token) {
+      throw 'uncaught!';
+    }
+
+    return Finalizer<Nonce>(callback);
+  }, (Object error, StackTrace stack) {
+    caughtError = error;
+  })!;
+
+  final detach = Nonce(2022);
+  final token = Nonce(42);
+
+  makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+  doGC();
+
+  Expect.isNull(caughtError);
+  await yieldToMessageLoop();
+  Expect.isNotNull(caughtError);
+}
diff --git a/runtime/tests/vm/dart/finalizer/helpers.dart b/runtime/tests/vm/dart/finalizer/helpers.dart
new file mode 100644
index 0000000..d776098
--- /dev/null
+++ b/runtime/tests/vm/dart/finalizer/helpers.dart
@@ -0,0 +1,55 @@
+// 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.
+
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
+import 'dart:async';
+
+/// A user-defined class of which objects can be identified with a field value.
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
+
+/// Never inline to ensure `object` becomes unreachable.
+@pragma('vm:never-inline')
+void makeObjectWithFinalizer<T>(Finalizer<T> finalizer, T token,
+    {Object? detach}) {
+  final value = Nonce(1);
+  finalizer.attach(value, token, detach: detach);
+}
+
+/// Triggers garbage collection.
+// Defined in `dart:_internal`.
+// ignore: undefined_identifier
+void triggerGc() => VMInternalsForTesting.collectAllGarbage();
+
+void Function(String) _namedPrint(String? name) {
+  if (name != null) {
+    return (String value) => print('$name: $value');
+  }
+  return (String value) => print(value);
+}
+
+/// Does a GC and if [doAwait] awaits a future to enable running finalizers.
+///
+/// Also prints for debug purposes.
+///
+/// If provided, [name] prefixes the debug prints.
+void doGC({String? name}) {
+  final _print = _namedPrint(name);
+
+  _print('Do GC.');
+  triggerGc();
+  _print('GC done');
+}
+
+Future<void> yieldToMessageLoop({String? name}) async {
+  await Future.delayed(Duration(milliseconds: 1));
+  _namedPrint(name)('Await done.');
+  return null;
+}
diff --git a/runtime/tests/vm/dart/finalizer/weak_reference_run_gc_test.dart b/runtime/tests/vm/dart/finalizer/weak_reference_run_gc_test.dart
index 15b330d..da365b9 100644
--- a/runtime/tests/vm/dart/finalizer/weak_reference_run_gc_test.dart
+++ b/runtime/tests/vm/dart/finalizer/weak_reference_run_gc_test.dart
@@ -2,25 +2,16 @@
 // 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.
 
-// ignore: import_internal_library, unused_import
-import 'dart:_internal';
-
 import 'package:expect/expect.dart';
 
+import 'helpers.dart';
+
 void main() {
   testWeakReferenceNonExpandoKey();
   testWeakReferenceTypeArgument();
   testWeakReference();
 }
 
-class Nonce {
-  final int value;
-
-  Nonce(this.value);
-
-  String toString() => 'Nonce($value)';
-}
-
 void testWeakReferenceNonExpandoKey() {
   Expect.throwsArgumentError(() {
     WeakReference<String>("Hello world!");
@@ -55,7 +46,3 @@
 
   print('End of test, shutting down.');
 }
-
-// Defined in `dart:_internal`.
-// ignore: undefined_identifier
-void triggerGc() => VMInternalsForTesting.collectAllGarbage();
diff --git a/runtime/tests/vm/dart/flutter_regress_100441_test.dart b/runtime/tests/vm/dart/flutter_regress_100441_test.dart
new file mode 100644
index 0000000..d51cdff
--- /dev/null
+++ b/runtime/tests/vm/dart/flutter_regress_100441_test.dart
@@ -0,0 +1,29 @@
+// 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:expect/expect.dart';
+
+StackTrace? stackTrace;
+
+main() async {
+  final values = [];
+  await for (final value in produce()) {
+    values.add(value);
+  }
+  Expect.equals('foo', values.single);
+  Expect.isNotNull(stackTrace!);
+}
+
+Stream<String> produce() async* {
+  await for (String response in produceInner()) {
+    yield response;
+  }
+}
+
+Stream<String> produceInner() async* {
+  yield 'foo';
+  stackTrace = StackTrace.current;
+}
diff --git a/runtime/tests/vm/dart/hello_fuchsia_test.dart b/runtime/tests/vm/dart/hello_fuchsia_test.dart
index cbe0ceb..9b25910 100644
--- a/runtime/tests/vm/dart/hello_fuchsia_test.dart
+++ b/runtime/tests/vm/dart/hello_fuchsia_test.dart
@@ -21,13 +21,13 @@
 }
 
 testSimpleBind() async {
-  var s = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var s = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   print("port = ${s.port}");
   await s.close();
 }
 
 testSimpleConnect() async {
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   print("server port = ${server.port}");
   server.listen((socket) {
     print("listen socket port = ${socket.port}");
@@ -36,7 +36,7 @@
   var socket = await RawSocket.connect("127.0.0.1", server.port);
   print("socket port = ${socket.port}");
   if (socket.remoteAddress.address != "127.0.0.1" ||
-      socket.remoteAddress.type != InternetAddressType.IP_V4) {
+      socket.remoteAddress.type != InternetAddressType.IPv4) {
     throw "Bad remote address ${socket.remoteAddress}";
   }
   if (socket.remotePort is! int) {
@@ -68,7 +68,7 @@
     }
   }
 
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   server.listen((client) {
     int bytesRead = 0;
     int bytesWritten = 0;
@@ -79,7 +79,7 @@
     client.writeEventsEnabled = false;
     client.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           if (doneReading) {
             break;
           }
@@ -97,7 +97,7 @@
             doneReading = true;
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(!client.writeEventsEnabled);
           bytesWritten +=
               client.write(data, bytesWritten, data.length - bytesWritten);
@@ -109,12 +109,12 @@
             print("client WRITE event: done writing.");
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("client READ_CLOSED event");
           client.close();
           server.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("client CLOSED event");
           closedEventReceived = true;
@@ -139,7 +139,7 @@
 
     socket.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           assert(socket.available() > 0);
           print("server READ event: ${bytesRead} read");
           var buffer = socket.read()!;
@@ -151,7 +151,7 @@
             socket.close();
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(bytesRead == 0);
           assert(!socket.writeEventsEnabled);
           bytesWritten +=
@@ -164,12 +164,12 @@
             data = new List<int>.filled(messageSize, -1);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("server READ_CLOSED event");
           verifyTestData(data);
           socket.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("server CLOSED event");
           closedEventReceived = true;
@@ -210,7 +210,7 @@
     }
   }
 
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   server.listen((client) {
     int bytesRead = 0;
     int bytesWritten = 0;
@@ -221,7 +221,7 @@
     client.writeEventsEnabled = false;
     client.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           if (doneReading) {
             break;
           }
@@ -247,7 +247,7 @@
             doneReading = true;
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(!client.writeEventsEnabled);
           bytesWritten +=
               client.write(data, bytesWritten, data.length - bytesWritten);
@@ -257,14 +257,14 @@
           }
           if (bytesWritten == data.length) {
             print("client WRITE event: done writing.");
-            client.shutdown(SocketDirection.SEND);
+            client.shutdown(SocketDirection.send);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("client READ_CLOSED event");
           server.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("client CLOSED event");
           closedEventReceived = true;
@@ -287,7 +287,7 @@
 
     socket.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           assert(socket.available() > 0);
           if (dropReads) {
             if (clientReadCount != 10) {
@@ -303,7 +303,7 @@
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(bytesRead == 0);
           assert(!socket.writeEventsEnabled);
           bytesWritten +=
@@ -316,12 +316,12 @@
             data = new List<int>.filled(messageSize, -1);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("server READ_CLOSED event");
           verifyTestData(data);
           socket.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("server CLOSED event");
           closedEventReceived = true;
diff --git a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
index cd24fbc..7dc9690 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
@@ -18,6 +18,7 @@
 // inserting an object that cannot be allocated in new space.
 
 import 'dart:async';
+import 'dart:ffi';
 import 'dart:io';
 import 'dart:isolate';
 import 'dart:nativewrappers';
@@ -245,6 +246,10 @@
 
     await testWeakProperty();
     await testWeakReference();
+    await testFinalizer();
+    await testNativeFinalizer();
+    await testFinalizable();
+    await testPointer();
 
     await testForbiddenClosures();
   }
@@ -756,6 +761,35 @@
     }
   }
 
+  Future testFinalizer() async {
+    print('testFinalizer');
+
+    void callback(Object token) {}
+    final finalizer = Finalizer<Object>(callback);
+    Expect.throwsArgumentError(() => sendPort.send(finalizer));
+  }
+
+  Future testNativeFinalizer() async {
+    print('testNativeFinalizer');
+
+    final finalizer = NativeFinalizer(nullptr);
+    Expect.throwsArgumentError(() => sendPort.send(finalizer));
+  }
+
+  Future testFinalizable() async {
+    print('testFinalizable');
+
+    final finalizable = MyFinalizable();
+    Expect.throwsArgumentError(() => sendPort.send(finalizable));
+  }
+
+  Future testPointer() async {
+    print('testPointer');
+
+    final pointer = Pointer<Int8>.fromAddress(0xdeadbeef);
+    Expect.throwsArgumentError(() => sendPort.send(pointer));
+  }
+
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
     for (final closure in nonCopyableClosures) {
@@ -779,6 +813,8 @@
   String toString() => 'Nonce($value)';
 }
 
+class MyFinalizable implements Finalizable {}
+
 main() async {
   await SendReceiveTest().run();
 }
diff --git a/runtime/tests/vm/dart/regress38654_test.dart b/runtime/tests/vm/dart/regress38654_test.dart
index e053804..8b82207 100644
--- a/runtime/tests/vm/dart/regress38654_test.dart
+++ b/runtime/tests/vm/dart/regress38654_test.dart
@@ -60,7 +60,7 @@
                 ((var3
                         ? Float32x4.wyyy
                         : var7[
-                            (false ? var4 : ZLibOption.DEFAULT_WINDOW_BITS)]) <<
+                            (false ? var4 : ZLibOption.defaultWindowBits)]) <<
                     var7[var7[-32769]]),
                 (var3 ? 8 : var7[-9223372036854775680]),
                 (Int32x4.xxww ^ Int32x4.zzyy)
@@ -183,7 +183,7 @@
                                 (~(((!(true))
                                     ? (false
                                         ? (++var2)
-                                        : var7[ZLibOption.STRATEGY_FILTERED])
+                                        : var7[ZLibOption.strategyFiltered])
                                     : Float32x4.xxyz))),
                                 (var3
                                     ? (true
diff --git a/runtime/tests/vm/dart/regress_48522_test.dart b/runtime/tests/vm/dart/regress_48522_test.dart
new file mode 100644
index 0000000..d01562b
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_48522_test.dart
@@ -0,0 +1,55 @@
+// 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.
+
+// Regression test for https://github.com/dart-lang/sdk/issues/48522.
+// Test that FutureOr<T?> = FutureOr<T?>? <: Future<T?>?.
+
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+Future<String?>? foo() {
+  return null;
+}
+
+FutureOr<String?>? bar() {
+  return null;
+}
+
+FutureOr<String?> baz() {
+  return null;
+}
+
+typedef F = FutureOr<String?> Function();
+typedef G = FutureOr<String?>? Function();
+
+void main() {
+  // Check Future<T?>? <: FutureOr<T?>?.
+  print(foo.runtimeType);
+  Expect.isTrue(foo is G);
+  (foo as dynamic) as G; // Should not throw.
+
+  final G v1 = foo;
+  print(v1.runtimeType);
+  Expect.isTrue(v1 is G);
+  (v1 as dynamic) as G; // Should not throw.
+
+  // Check Future<T?>? <: FutureOr<T?>.
+  print(foo.runtimeType);
+  Expect.isTrue(foo is F);
+  (foo as dynamic) as F; // Should not throw.
+
+  final F v2 = foo;
+  print(v2.runtimeType);
+  Expect.isTrue(v2 is F);
+  (v2 as dynamic) as F; // Should not throw.
+
+  // Check FutureOr<T?> = FutureOr<T?>?.
+  print(bar.runtimeType);
+  Expect.isTrue(bar is F);
+  (bar as dynamic) as F; // Should not throw.
+  print(baz.runtimeType);
+  Expect.isTrue(baz is G);
+  (baz as dynamic) as G; // Should not throw.
+}
diff --git a/runtime/tests/vm/dart/write_barrier_double_register_clobber_test.dart b/runtime/tests/vm/dart/write_barrier_double_register_clobber_test.dart
new file mode 100644
index 0000000..35810a8
--- /dev/null
+++ b/runtime/tests/vm/dart/write_barrier_double_register_clobber_test.dart
@@ -0,0 +1,81 @@
+// 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.
+
+// This test attempts to verify that write barrier slow path does not
+// clobber any live values.
+
+import 'dart:_internal' show VMInternalsForTesting;
+
+import 'package:expect/expect.dart';
+
+class Old {
+  var f;
+  Old(this.f);
+}
+
+@pragma('vm:never-inline')
+double crashy(double v, List<Old> oldies) {
+  // This test attempts to create a lot of live values which would live across
+  // write barrier invocation so that when write-barrier calls runtime and
+  // clobbers a register this is detected.
+  var young = Object();
+  var len = oldies.length;
+  var i = 0;
+  var v00 = v + 0.0;
+  var v01 = v + 1.0;
+  var v02 = v + 2.0;
+  var v03 = v + 3.0;
+  var v04 = v + 4.0;
+  var v05 = v + 5.0;
+  var v06 = v + 6.0;
+  var v07 = v + 7.0;
+  var v08 = v + 8.0;
+  var v09 = v + 9.0;
+  var v10 = v + 10.0;
+  var v11 = v + 11.0;
+  var v12 = v + 12.0;
+  var v13 = v + 13.0;
+  var v14 = v + 14.0;
+  var v15 = v + 15.0;
+  var v16 = v + 16.0;
+  var v17 = v + 17.0;
+  var v18 = v + 18.0;
+  var v19 = v + 19.0;
+  while (i < len) {
+    // Eventually this will overflow store buffer and call runtime to acquire
+    // a new block.
+    oldies[i++].f = young;
+  }
+  return v00 +
+      v01 +
+      v02 +
+      v03 +
+      v04 +
+      v05 +
+      v06 +
+      v07 +
+      v08 +
+      v09 +
+      v10 +
+      v11 +
+      v12 +
+      v13 +
+      v14 +
+      v15 +
+      v16 +
+      v17 +
+      v18 +
+      v19;
+}
+
+void main(List<String> args) {
+  final init = args.contains('impossible') ? 1.0 : 0.0;
+  final oldies = List<Old>.generate(100000, (i) => Old(""));
+  VMInternalsForTesting.collectAllGarbage();
+  VMInternalsForTesting.collectAllGarbage();
+  Expect.equals(crashy(init, oldies), 190.0);
+  for (var o in oldies) {
+    Expect.isTrue(o.f is! String);
+  }
+}
diff --git a/runtime/tests/vm/dart/write_barrier_simd_register_clobber_test.dart b/runtime/tests/vm/dart/write_barrier_simd_register_clobber_test.dart
new file mode 100644
index 0000000..9891064
--- /dev/null
+++ b/runtime/tests/vm/dart/write_barrier_simd_register_clobber_test.dart
@@ -0,0 +1,85 @@
+// 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.
+
+// This test attempts to verify that write barrier slow path does not
+// clobber any live values.
+
+import 'dart:_internal' show VMInternalsForTesting;
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+class Old {
+  var f;
+  Old(this.f);
+}
+
+@pragma('vm:never-inline')
+Float64x2 crashy(Float64x2 v, List<Old> oldies) {
+  // This test attempts to create a lot of live values which would live across
+  // write barrier invocation so that when write-barrier calls runtime and
+  // clobbers a register this is detected.
+  var young = Object();
+  var len = oldies.length;
+  var i = 0;
+  var v00 = v + Float64x2(0.0, 0.0);
+  var v01 = v + Float64x2(1.0, 1.0);
+  var v02 = v + Float64x2(2.0, 2.0);
+  var v03 = v + Float64x2(3.0, 3.0);
+  var v04 = v + Float64x2(4.0, 4.0);
+  var v05 = v + Float64x2(5.0, 5.0);
+  var v06 = v + Float64x2(6.0, 6.0);
+  var v07 = v + Float64x2(7.0, 7.0);
+  var v08 = v + Float64x2(8.0, 8.0);
+  var v09 = v + Float64x2(9.0, 9.0);
+  var v10 = v + Float64x2(10.0, 10.0);
+  var v11 = v + Float64x2(11.0, 11.0);
+  var v12 = v + Float64x2(12.0, 12.0);
+  var v13 = v + Float64x2(13.0, 13.0);
+  var v14 = v + Float64x2(14.0, 14.0);
+  var v15 = v + Float64x2(15.0, 15.0);
+  var v16 = v + Float64x2(16.0, 16.0);
+  var v17 = v + Float64x2(17.0, 17.0);
+  var v18 = v + Float64x2(18.0, 18.0);
+  var v19 = v + Float64x2(19.0, 19.0);
+  while (i < len) {
+    // Eventually this will overflow store buffer and call runtime to acquire
+    // a new block.
+    oldies[i++].f = young;
+  }
+  return v00 +
+      v01 +
+      v02 +
+      v03 +
+      v04 +
+      v05 +
+      v06 +
+      v07 +
+      v08 +
+      v09 +
+      v10 +
+      v11 +
+      v12 +
+      v13 +
+      v14 +
+      v15 +
+      v16 +
+      v17 +
+      v18 +
+      v19;
+}
+
+void main(List<String> args) {
+  final init =
+      args.contains('impossible') ? Float64x2(1.0, 1.0) : Float64x2(0.0, 0.0);
+  final oldies = List<Old>.generate(100000, (i) => Old(""));
+  VMInternalsForTesting.collectAllGarbage();
+  VMInternalsForTesting.collectAllGarbage();
+  var r = crashy(init, oldies);
+  Expect.equals(r.x, 190.0);
+  Expect.equals(r.y, 190.0);
+  for (var o in oldies) {
+    Expect.isTrue(o.f is! String);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/analyze_snapshot_binary_test.dart b/runtime/tests/vm/dart_2/analyze_snapshot_binary_test.dart
new file mode 100644
index 0000000..7affeec
--- /dev/null
+++ b/runtime/tests/vm/dart_2/analyze_snapshot_binary_test.dart
@@ -0,0 +1,216 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.9
+
+import 'dart:convert';
+import 'dart:io';
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+import 'package:native_stack_traces/elf.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+// Used to ensure we don't have multiple equivalent calls to test.
+final _seenDescriptions = <String>{};
+
+Future<void> testAOT(String dillPath,
+    {bool useAsm = false,
+    bool forceDrops = false,
+    bool stripUtil = false, // Note: forced true if useAsm.
+    bool stripFlag = false,
+    bool disassemble = false}) async {
+  if (const bool.fromEnvironment('dart.vm.product') && disassemble) {
+    Expect.isFalse(disassemble, 'no use of disassembler in PRODUCT mode');
+  }
+
+  final analyzeSnapshot = path.join(
+      buildDir,
+      bool.fromEnvironment('dart.vm.product')
+          ? 'analyze_snapshot_product'
+          : 'analyze_snapshot');
+
+  // For assembly, we can't test the sizes of the snapshot sections, since we
+  // don't have a Mach-O reader for Mac snapshots and for ELF, the assembler
+  // merges the text/data sections and the VM/isolate section symbols may not
+  // have length information. Thus, we force external stripping so we can test
+  // the approximate size of the stripped snapshot.
+  if (useAsm) {
+    stripUtil = true;
+  }
+
+  final descriptionBuilder = StringBuffer()..write(useAsm ? 'assembly' : 'elf');
+  if (forceDrops) {
+    descriptionBuilder.write('-dropped');
+  }
+  if (stripFlag) {
+    descriptionBuilder.write('-intstrip');
+  }
+  if (stripUtil) {
+    descriptionBuilder.write('-extstrip');
+  }
+  if (disassemble) {
+    descriptionBuilder.write('-disassembled');
+  }
+
+  final description = descriptionBuilder.toString();
+  Expect.isTrue(_seenDescriptions.add(description),
+      "test configuration $description would be run multiple times");
+
+  await withTempDir('analyze_snapshot_binary-$description',
+      (String tempDir) async {
+    // Generate the snapshot
+    final snapshotPath = path.join(tempDir, 'test.snap');
+    final commonSnapshotArgs = [
+      if (stripFlag) '--strip', //  gen_snapshot specific and not a VM flag.
+      if (forceDrops) ...[
+        '--dwarf-stack-traces',
+        '--no-retain-function-objects',
+        '--no-retain-code-objects'
+      ],
+      if (disassemble) '--disassemble', // Not defined in PRODUCT mode.
+      dillPath,
+    ];
+
+    if (useAsm) {
+      final assemblyPath = path.join(tempDir, 'test.S');
+
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-assembly',
+        '--assembly=$assemblyPath',
+        ...commonSnapshotArgs,
+      ]);
+
+      await assembleSnapshot(assemblyPath, snapshotPath);
+    } else {
+      await run(genSnapshot, <String>[
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$snapshotPath',
+        ...commonSnapshotArgs,
+      ]);
+    }
+
+    print("Snapshot generated at $snapshotPath.");
+
+    // May not be ELF, but another format.
+    final elf = Elf.fromFile(snapshotPath);
+    if (!useAsm) {
+      Expect.isNotNull(elf);
+    }
+
+    if (elf != null) {
+      // Verify some ELF file format parameters.
+      final textSections = elf.namedSections(".text");
+      Expect.isNotEmpty(textSections);
+      Expect.isTrue(
+          textSections.length <= 2, "More text sections than expected");
+      final dataSections = elf.namedSections(".rodata");
+      Expect.isNotEmpty(dataSections);
+      Expect.isTrue(
+          dataSections.length <= 2, "More data sections than expected");
+    }
+
+    final analyzerOutputPath = path.join(tempDir, 'analyze_test.json');
+
+    // This will throw if exit code is not 0.
+    await run(analyzeSnapshot, <String>[
+      '--out=$analyzerOutputPath',
+      '$snapshotPath',
+    ]);
+
+    final analyzerJsonBytes = await readFile(analyzerOutputPath);
+    final analyzerJson = json.decode(analyzerJsonBytes);
+    Expect.isFalse(analyzerJson.isEmpty);
+    Expect.isTrue(analyzerJson.keys
+        .toSet()
+        .containsAll(['snapshot_data', 'class_table', 'object_pool']));
+  });
+}
+
+main() async {
+  void printSkip(String description) =>
+      print('Skipping $description for ${path.basename(buildDir)} '
+              'on ${Platform.operatingSystem}' +
+          (clangBuildToolsDir == null ? ' without //buildtools' : ''));
+
+  // We don't have access to the SDK on Android.
+  if (Platform.isAndroid) {
+    printSkip('all tests');
+    return;
+  }
+
+  await withTempDir('analyze_snapshot_binary', (String tempDir) async {
+    // We only need to generate the dill file once for all JIT tests.
+    final _thisTestPath = path.join(sdkDir, 'runtime', 'tests', 'vm', 'dart_2',
+        'analyze_snapshot_binary_test.dart');
+
+    // We only need to generate the dill file once for all AOT tests.
+    final aotDillPath = path.join(tempDir, 'aot_test.dill');
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform',
+      platformDill,
+      '-o',
+      aotDillPath,
+      _thisTestPath
+    ]);
+
+    // Just as a reminder for AOT tests:
+    // * If useAsm is true, then stripUtil is forced (as the assembler may add
+    //   extra information that needs stripping), so no need to specify
+    //   stripUtil for useAsm tests.
+
+    await Future.wait([
+      // Test unstripped ELF generation directly.
+      testAOT(aotDillPath),
+      testAOT(aotDillPath, forceDrops: true),
+
+      // Test flag-stripped ELF generation.
+      testAOT(aotDillPath, stripFlag: true),
+    ]);
+
+    // Since we can't force disassembler support after the fact when running
+    // in PRODUCT mode, skip any --disassemble tests. Do these tests last as
+    // they have lots of output and so the log will be truncated.
+    if (!const bool.fromEnvironment('dart.vm.product')) {
+      // Regression test for dartbug.com/41149.
+      await testAOT(aotDillPath, disassemble: true);
+    }
+
+    // We neither generate assembly nor have a stripping utility on Windows.
+    if (Platform.isWindows) {
+      printSkip('external stripping and assembly tests');
+      return;
+    }
+
+    // The native strip utility on Mac OS X doesn't recognize ELF files.
+    if (Platform.isMacOS && clangBuildToolsDir == null) {
+      printSkip('ELF external stripping test');
+    } else {
+      // Test unstripped ELF generation that is then externally stripped.
+      await testAOT(aotDillPath, stripUtil: true);
+    }
+
+    // TODO(sstrickl): Currently we can't assemble for SIMARM64 on MacOSX.
+    // For example, the test runner still uses blobs for
+    // dartkp-mac-*-simarm64. Change assembleSnapshot and remove this check
+    // when we can.
+    if (Platform.isMacOS && buildDir.endsWith('SIMARM64')) {
+      printSkip('assembly tests');
+      return;
+    }
+    await Future.wait([
+      // Test unstripped assembly generation that is then externally stripped.
+      testAOT(aotDillPath, useAsm: true),
+      // Test stripped assembly generation that is then externally stripped.
+      testAOT(aotDillPath, useAsm: true, stripFlag: true),
+    ]);
+  });
+}
+
+Future<String> readFile(String file) {
+  return new File(file).readAsString();
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_helper.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_helper.dart
new file mode 100644
index 0000000..58ff5bb
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_helper.dart
@@ -0,0 +1,38 @@
+// 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.
+
+// @dart = 2.9
+
+import 'dart:isolate';
+
+import 'helpers.dart';
+
+int callbackCount = 0;
+
+void callback(Nonce token) {
+  callbackCount++;
+  print('$name: Running finalizer: token: $token');
+}
+
+final finalizer = Finalizer<Nonce>(callback);
+
+String name;
+
+void main(List<String> arguments, SendPort port) async {
+  name = arguments[0];
+
+  final token = Nonce(42);
+  makeObjectWithFinalizer(finalizer, token);
+
+  final awaitBeforeShuttingDown = ReceivePort();
+  port.send(awaitBeforeShuttingDown.sendPort);
+  final message = await awaitBeforeShuttingDown.first;
+  print('$name: $message');
+
+  await Future.delayed(Duration(milliseconds: 1));
+  print('$name: Awaited to see if there were any callbacks.');
+
+  print('$name: Helper isolate exiting. num callbacks: $callbackCount.');
+  port.send(callbackCount);
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_test.dart
new file mode 100644
index 0000000..afd09bb
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_isolate_groups_run_gc_test.dart
@@ -0,0 +1,95 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:async/async.dart';
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testFinalizerInOtherIsolateGroupGCBeforeExit();
+  await testFinalizerInOtherIsolateGroupGCAfterExit();
+  await testFinalizerInOtherIsolateGroupNoGC();
+
+  print('$name: End of test, shutting down.');
+}
+
+const name = 'main';
+
+bool hotReloadBot;
+
+Future<void> testFinalizerInOtherIsolateGroupGCBeforeExit() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 1'],
+    receivePort.sendPort,
+  );
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  doGC(name: name);
+  await yieldToMessageLoop(name: name);
+
+  signalHelperIsolate.send('Done GCing.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  // Different isolate group, so we don't expect a GC in this isolate to cause
+  // collected objects in the helper.
+  // Except for in --hot-reload-test-mode, then the GC is triggered.
+  hotReloadBot = helperCallbacks == 1;
+}
+
+Future<void> testFinalizerInOtherIsolateGroupGCAfterExit() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 2'],
+    receivePort.sendPort,
+  );
+
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  signalHelperIsolate.send('Before GCing.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  Expect.equals(hotReloadBot ? 1 : 0, helperCallbacks);
+
+  doGC(name: name);
+  await yieldToMessageLoop(name: name);
+}
+
+Future<void> testFinalizerInOtherIsolateGroupNoGC() async {
+  final receivePort = ReceivePort();
+  final messagesQueue = StreamQueue(receivePort);
+
+  await Isolate.spawnUri(
+    Uri.parse('finalizer_isolate_groups_run_gc_helper.dart'),
+    ['helper 3'],
+    receivePort.sendPort,
+  );
+  final signalHelperIsolate = await messagesQueue.next as SendPort;
+
+  signalHelperIsolate.send('Before quitting main isolate.');
+
+  final helperCallbacks = await messagesQueue.next as int;
+  messagesQueue.cancel();
+  print('$name: Helper exited.');
+  Expect.equals(hotReloadBot ? 1 : 0, helperCallbacks);
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_isolates_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_isolates_run_gc_test.dart
new file mode 100644
index 0000000..7c2103d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_isolates_run_gc_test.dart
@@ -0,0 +1,104 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testNormalExit();
+  await testSendAndExit();
+  await testSendAndExitFinalizer();
+  print('End of test, shutting down.');
+}
+
+final finalizerTokens = <Nonce>{};
+
+void callback(Nonce token) {
+  print('Running finalizer: token: $token');
+  finalizerTokens.add(token);
+}
+
+void runIsolateAttachFinalizer(Object message) {
+  final finalizer = Finalizer<Nonce>(callback);
+  final value = Nonce(1001);
+  final token = Nonce(1002);
+  finalizer.attach(value, token);
+  final token9 = Nonce(9002);
+  makeObjectWithFinalizer(finalizer, token9);
+  if (message == null) {
+    print('Isolate done.');
+    return;
+  }
+  final list = message as List;
+  assert(list.length == 2);
+  final sendPort = list[0] as SendPort;
+  final tryToSendFinalizer = list[1] as bool;
+  if (tryToSendFinalizer) {
+    Expect.throws(() {
+      // TODO(http://dartbug.com/47777): Send and exit support.
+      print('Trying to send and exit finalizer.');
+      Isolate.exit(sendPort, [value, finalizer]);
+    });
+  }
+  print('Isolate sending and exit.');
+  Isolate.exit(sendPort, [value]);
+}
+
+Future testNormalExit() async {
+  final portExitMessage = ReceivePort();
+  await Isolate.spawn(
+    runIsolateAttachFinalizer,
+    null,
+    onExit: portExitMessage.sendPort,
+  );
+  await portExitMessage.first;
+
+  doGC();
+  await yieldToMessageLoop();
+
+  Expect.equals(0, finalizerTokens.length);
+}
+
+@pragma('vm:never-inline')
+Future<Finalizer> testSendAndExitHelper({bool trySendFinalizer = false}) async {
+  final port = ReceivePort();
+  await Isolate.spawn(
+    runIsolateAttachFinalizer,
+    [port.sendPort, trySendFinalizer],
+  );
+  final message = await port.first as List;
+  print('Received message ($message).');
+  final value = message[0] as Nonce;
+  print('Received value ($value), but now forgetting about it.');
+
+  Expect.equals(1, message.length);
+  // TODO(http://dartbug.com/47777): Send and exit support.
+  return null;
+}
+
+Future testSendAndExit() async {
+  await testSendAndExitHelper(trySendFinalizer: false);
+
+  doGC();
+  await yieldToMessageLoop();
+
+  Expect.equals(0, finalizerTokens.length);
+}
+
+Future testSendAndExitFinalizer() async {
+  final finalizer = await testSendAndExitHelper(trySendFinalizer: true);
+
+  // TODO(http://dartbug.com/47777): Send and exit support.
+  Expect.isNull(finalizer);
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_nullable_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_nullable_run_gc_test.dart
new file mode 100644
index 0000000..b033c1b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_nullable_run_gc_test.dart
@@ -0,0 +1,45 @@
+// 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.
+
+// @dart = 2.9
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() {
+  testFinalizer();
+}
+
+void testFinalizer() async {
+  final finalizerTokens = <Nonce>{};
+  void callback(Nonce token) {
+    print('Running finalizer: token: $token');
+    finalizerTokens.add(token);
+  }
+
+  final finalizer = Finalizer<Nonce>(callback);
+
+  {
+    final detach = Nonce(2022);
+    final token = null;
+
+    makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+    doGC();
+
+    // We haven't stopped running synchronous dart code yet.
+    Expect.isFalse(finalizerTokens.contains(token));
+
+    await Future.delayed(Duration(milliseconds: 1));
+
+    // Now we have.
+    Expect.isTrue(finalizerTokens.contains(token));
+
+    // Try detaching after finalizer ran.
+    finalizer.detach(detach);
+  }
+
+  print('End of test, shutting down.');
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_run_gc_test.dart
new file mode 100644
index 0000000..9c17461
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_run_gc_test.dart
@@ -0,0 +1,92 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+// @dart = 2.9
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() {
+  testWrongArguments();
+  testFinalizer();
+}
+
+void testWrongArguments() {
+  void callback(Object token) {
+    throw 'This should never happen!';
+  }
+
+  final finalizer = Finalizer<Nonce>(callback);
+  final myFinalizable = Nonce(1000);
+  final token = Nonce(2000);
+  final detach = Nonce(3000);
+
+  Expect.throws(() {
+    finalizer.attach(myFinalizable, token, detach: 123);
+  });
+  Expect.throws(() {
+    finalizer.attach(123, token, detach: detach);
+  });
+}
+
+void testFinalizer() async {
+  final finalizerTokens = <Object>{};
+  void callback(Object token) {
+    print('Running finalizer: token: $token');
+    finalizerTokens.add(token);
+  }
+
+  final finalizer = Finalizer<Nonce>(callback);
+
+  {
+    final detach = Nonce(2022);
+    final token = Nonce(42);
+
+    makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+    doGC();
+
+    // We haven't stopped running synchronous dart code yet.
+    Expect.isFalse(finalizerTokens.contains(token));
+
+    await Future.delayed(Duration(milliseconds: 1));
+
+    // Now we have.
+    Expect.isTrue(finalizerTokens.contains(token));
+
+    // Try detaching after finalizer ran.
+    finalizer.detach(detach);
+  }
+
+  {
+    final token = Nonce(1337);
+    final token2 = Nonce(1338);
+    final detachkey = Nonce(1984);
+    {
+      final value = Nonce(2);
+      final value2 = Nonce(2000000);
+      finalizer.attach(value, token, detach: detachkey);
+      finalizer.attach(value2, token2, detach: detachkey);
+      // Should detach 2 finalizers.
+      finalizer.detach(detachkey);
+      // Try detaching again, should do nothing.
+      finalizer.detach(detachkey);
+    }
+    doGC();
+    await yieldToMessageLoop();
+    Expect.isFalse(finalizerTokens.contains(token));
+    Expect.isFalse(finalizerTokens.contains(token2));
+  }
+
+  // Not running finalizer on shutdown.
+  final value = Nonce(3);
+  final token = Nonce(1337);
+  finalizer.attach(value, token);
+  print('End of test, shutting down.');
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/finalizer_zone_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/finalizer_zone_run_gc_test.dart
new file mode 100644
index 0000000..17646d1
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/finalizer_zone_run_gc_test.dart
@@ -0,0 +1,75 @@
+// 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.
+
+// VMOptions=
+// VMOptions=--use_compactor
+// VMOptions=--use_compactor --force_evacuation
+
+// @dart = 2.9
+
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+import 'helpers.dart';
+
+void main() async {
+  await testFinalizerZone();
+  await testFinalizerException();
+}
+
+Future<void> testFinalizerZone() async {
+  Zone expectedZone;
+  Zone actualZone;
+
+  final finalizer = runZoned(() {
+    expectedZone = Zone.current;
+
+    void callback(Object token) {
+      actualZone = Zone.current;
+    }
+
+    return Finalizer<Nonce>(callback);
+  });
+
+  final detach = Nonce(2022);
+  final token = Nonce(42);
+
+  makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+  doGC();
+
+  // We haven't stopped running synchronous dart code yet.
+  Expect.isNull(actualZone);
+
+  await yieldToMessageLoop();
+
+  // Now we have.
+  Expect.equals(expectedZone, actualZone);
+}
+
+Future<void> testFinalizerException() async {
+  Object caughtError;
+
+  final finalizer = runZonedGuarded(() {
+    void callback(Object token) {
+      throw 'uncaught!';
+    }
+
+    return Finalizer<Nonce>(callback);
+  }, (Object error, StackTrace stack) {
+    caughtError = error;
+  });
+
+  final detach = Nonce(2022);
+  final token = Nonce(42);
+
+  makeObjectWithFinalizer(finalizer, token, detach: detach);
+
+  doGC();
+
+  Expect.isNull(caughtError);
+  await yieldToMessageLoop();
+  Expect.isNotNull(caughtError);
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/helpers.dart b/runtime/tests/vm/dart_2/finalizer/helpers.dart
new file mode 100644
index 0000000..a82646c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/helpers.dart
@@ -0,0 +1,57 @@
+// 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.
+
+// @dart = 2.9
+
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
+import 'dart:async';
+
+/// A user-defined class of which objects can be identified with a field value.
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
+
+/// Never inline to ensure `value` becomes unreachable.
+@pragma('vm:never-inline')
+void makeObjectWithFinalizer<T>(Finalizer<T> finalizer, T token,
+    {Object detach}) {
+  final value = Nonce(1);
+  finalizer.attach(value, token, detach: detach);
+}
+
+/// Triggers garbage collection.
+// Defined in `dart:_internal`.
+// ignore: undefined_identifier
+void triggerGc() => VMInternalsForTesting.collectAllGarbage();
+
+void Function(String) _namedPrint(String name) {
+  if (name != null) {
+    return (String value) => print('$name: $value');
+  }
+  return (String value) => print(value);
+}
+
+/// Does a GC and if [doAwait] awaits a future to enable running finalizers.
+///
+/// Also prints for debug purposes.
+///
+/// If provided, [name] prefixes the debug prints.
+void doGC({String name}) {
+  final _print = _namedPrint(name);
+
+  _print('Do GC.');
+  triggerGc();
+  _print('GC done');
+}
+
+Future<void> yieldToMessageLoop({String name}) async {
+  await Future.delayed(Duration(milliseconds: 1));
+  _namedPrint(name)('Await done.');
+  return null;
+}
diff --git a/runtime/tests/vm/dart_2/finalizer/weak_reference_run_gc_test.dart b/runtime/tests/vm/dart_2/finalizer/weak_reference_run_gc_test.dart
index 8c7583d..708d540 100644
--- a/runtime/tests/vm/dart_2/finalizer/weak_reference_run_gc_test.dart
+++ b/runtime/tests/vm/dart_2/finalizer/weak_reference_run_gc_test.dart
@@ -4,25 +4,16 @@
 
 // @dart = 2.9
 
-// ignore: import_internal_library, unused_import
-import 'dart:_internal';
-
 import 'package:expect/expect.dart';
 
+import 'helpers.dart';
+
 void main() {
   testWeakReferenceNonExpandoKey();
   testWeakReferenceTypeArgument();
   testWeakReference();
 }
 
-class Nonce {
-  final int value;
-
-  Nonce(this.value);
-
-  String toString() => 'Nonce($value)';
-}
-
 void testWeakReferenceNonExpandoKey() {
   Expect.throwsArgumentError(() {
     WeakReference<String>("Hello world!");
@@ -57,7 +48,3 @@
 
   print('End of test, shutting down.');
 }
-
-// Defined in `dart:_internal`.
-// ignore: undefined_identifier
-void triggerGc() => VMInternalsForTesting.collectAllGarbage();
diff --git a/runtime/tests/vm/dart_2/flutter_regress_100441_test.dart b/runtime/tests/vm/dart_2/flutter_regress_100441_test.dart
new file mode 100644
index 0000000..9250b6b
--- /dev/null
+++ b/runtime/tests/vm/dart_2/flutter_regress_100441_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+// @dart=2.9
+
+import 'dart:async';
+
+import 'package:expect/expect.dart';
+
+StackTrace stackTrace;
+
+main() async {
+  final values = [];
+  await for (final value in produce()) {
+    values.add(value);
+  }
+  Expect.equals('foo', values.single);
+  Expect.isNotNull(stackTrace);
+}
+
+Stream<String> produce() async* {
+  await for (String response in produceInner()) {
+    yield response;
+  }
+}
+
+Stream<String> produceInner() async* {
+  yield 'foo';
+  stackTrace = StackTrace.current;
+}
diff --git a/runtime/tests/vm/dart_2/hello_fuchsia_test.dart b/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
index 028a293..b75d2c0 100644
--- a/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
+++ b/runtime/tests/vm/dart_2/hello_fuchsia_test.dart
@@ -23,13 +23,13 @@
 }
 
 testSimpleBind() async {
-  var s = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var s = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   print("port = ${s.port}");
   await s.close();
 }
 
 testSimpleConnect() async {
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   print("server port = ${server.port}");
   server.listen((socket) {
     print("listen socket port = ${socket.port}");
@@ -38,7 +38,7 @@
   var socket = await RawSocket.connect("127.0.0.1", server.port);
   print("socket port = ${socket.port}");
   if (socket.remoteAddress.address != "127.0.0.1" ||
-      socket.remoteAddress.type != InternetAddressType.IP_V4) {
+      socket.remoteAddress.type != InternetAddressType.IPv4) {
     throw "Bad remote address ${socket.remoteAddress}";
   }
   if (socket.remotePort is! int) {
@@ -70,7 +70,7 @@
     }
   }
 
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   server.listen((client) {
     int bytesRead = 0;
     int bytesWritten = 0;
@@ -81,7 +81,7 @@
     client.writeEventsEnabled = false;
     client.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           if (doneReading) {
             break;
           }
@@ -99,7 +99,7 @@
             doneReading = true;
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(!client.writeEventsEnabled);
           bytesWritten +=
               client.write(data, bytesWritten, data.length - bytesWritten);
@@ -111,12 +111,12 @@
             print("client WRITE event: done writing.");
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("client READ_CLOSED event");
           client.close();
           server.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("client CLOSED event");
           closedEventReceived = true;
@@ -141,7 +141,7 @@
 
     socket.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           assert(socket.available() > 0);
           print("server READ event: ${bytesRead} read");
           var buffer = socket.read();
@@ -153,7 +153,7 @@
             socket.close();
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(bytesRead == 0);
           assert(!socket.writeEventsEnabled);
           bytesWritten +=
@@ -166,12 +166,12 @@
             data = new List<int>(messageSize);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("server READ_CLOSED event");
           verifyTestData(data);
           socket.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("server CLOSED event");
           closedEventReceived = true;
@@ -212,7 +212,7 @@
     }
   }
 
-  var server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  var server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   server.listen((client) {
     int bytesRead = 0;
     int bytesWritten = 0;
@@ -223,7 +223,7 @@
     client.writeEventsEnabled = false;
     client.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           if (doneReading) {
             break;
           }
@@ -249,7 +249,7 @@
             doneReading = true;
           }
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(!client.writeEventsEnabled);
           bytesWritten +=
               client.write(data, bytesWritten, data.length - bytesWritten);
@@ -259,14 +259,14 @@
           }
           if (bytesWritten == data.length) {
             print("client WRITE event: done writing.");
-            client.shutdown(SocketDirection.SEND);
+            client.shutdown(SocketDirection.send);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("client READ_CLOSED event");
           server.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("client CLOSED event");
           closedEventReceived = true;
@@ -289,7 +289,7 @@
 
     socket.listen((event) {
       switch (event) {
-        case RawSocketEvent.READ:
+        case RawSocketEvent.read:
           assert(socket.available() > 0);
           if (dropReads) {
             if (clientReadCount != 10) {
@@ -305,7 +305,7 @@
           data.setRange(bytesRead, bytesRead + buffer.length, buffer);
           bytesRead += buffer.length;
           break;
-        case RawSocketEvent.WRITE:
+        case RawSocketEvent.write:
           assert(bytesRead == 0);
           assert(!socket.writeEventsEnabled);
           bytesWritten +=
@@ -318,12 +318,12 @@
             data = new List<int>(messageSize);
           }
           break;
-        case RawSocketEvent.READ_CLOSED:
+        case RawSocketEvent.readClosed:
           print("server READ_CLOSED event");
           verifyTestData(data);
           socket.close();
           break;
-        case RawSocketEvent.CLOSED:
+        case RawSocketEvent.closed:
           assert(!closedEventReceived);
           print("server CLOSED event");
           closedEventReceived = true;
diff --git a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
index 1843f0c..fc62573 100644
--- a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
@@ -20,6 +20,7 @@
 // inserting an object that cannot be allocated in new space.
 
 import 'dart:async';
+import 'dart:ffi';
 import 'dart:io';
 import 'dart:isolate';
 import 'dart:nativewrappers';
@@ -247,6 +248,10 @@
 
     await testWeakProperty();
     await testWeakReference();
+    await testFinalizer();
+    await testNativeFinalizer();
+    await testFinalizable();
+    await testPointer();
 
     await testForbiddenClosures();
   }
@@ -758,6 +763,35 @@
     }
   }
 
+  Future testFinalizer() async {
+    print('testFinalizer');
+
+    void callback(Object token) {}
+    final finalizer = Finalizer<Object>(callback);
+    Expect.throwsArgumentError(() => sendPort.send(finalizer));
+  }
+
+  Future testNativeFinalizer() async {
+    print('testNativeFinalizer');
+
+    final finalizer = NativeFinalizer(nullptr);
+    Expect.throwsArgumentError(() => sendPort.send(finalizer));
+  }
+
+  Future testFinalizable() async {
+    print('testFinalizable');
+
+    final finalizable = MyFinalizable();
+    Expect.throwsArgumentError(() => sendPort.send(finalizable));
+  }
+
+  Future testPointer() async {
+    print('testPointer');
+
+    final pointer = Pointer<Int8>.fromAddress(0xdeadbeef);
+    Expect.throwsArgumentError(() => sendPort.send(pointer));
+  }
+
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
     for (final closure in nonCopyableClosures) {
@@ -781,6 +815,8 @@
   String toString() => 'Nonce($value)';
 }
 
+class MyFinalizable implements Finalizable {}
+
 main() async {
   await SendReceiveTest().run();
 }
diff --git a/runtime/tests/vm/dart_2/isolates/reload_utils.dart b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
index c973017..c1c9e96 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_utils.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
@@ -166,7 +166,7 @@
   }
 
   Future _waitUntilService() async {
-    final needle = 'Observatory listening on ';
+    final needle = 'The Dart VM service is listening on ';
     final line = await waitUntilStdoutContains(needle);
     final Uri uri = Uri.parse(line.substring(needle.length));
     assert(_remoteVm == null);
diff --git a/runtime/tests/vm/dart_2/regress38654_test.dart b/runtime/tests/vm/dart_2/regress38654_test.dart
index ad5b1da..73a313c 100644
--- a/runtime/tests/vm/dart_2/regress38654_test.dart
+++ b/runtime/tests/vm/dart_2/regress38654_test.dart
@@ -62,7 +62,7 @@
                 ((var3
                         ? Float32x4.wyyy
                         : var7[
-                            (false ? var4 : ZLibOption.DEFAULT_WINDOW_BITS)]) <<
+                            (false ? var4 : ZLibOption.defaultWindowBits)]) <<
                     var7[var7[-32769]]),
                 (var3 ? 8 : var7[-9223372036854775680]),
                 (Int32x4.xxww ^ Int32x4.zzyy)
@@ -185,7 +185,7 @@
                                 (~(((!(true))
                                     ? (false
                                         ? (++var2)
-                                        : var7[ZLibOption.STRATEGY_FILTERED])
+                                        : var7[ZLibOption.strategyFiltered])
                                     : Float32x4.xxyz))),
                                 (var3
                                     ? (true
diff --git a/runtime/tests/vm/dart_2/write_barrier_double_register_clobber_test.dart b/runtime/tests/vm/dart_2/write_barrier_double_register_clobber_test.dart
new file mode 100644
index 0000000..0c5f68e
--- /dev/null
+++ b/runtime/tests/vm/dart_2/write_barrier_double_register_clobber_test.dart
@@ -0,0 +1,83 @@
+// 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.
+
+// @dart = 2.9
+
+// This test attempts to verify that write barrier slow path does not
+// clobber any live values.
+
+import 'dart:_internal' show VMInternalsForTesting;
+
+import 'package:expect/expect.dart';
+
+class Old {
+  var f;
+  Old(this.f);
+}
+
+@pragma('vm:never-inline')
+double crashy(double v, List<Old> oldies) {
+  // This test attempts to create a lot of live values which would live across
+  // write barrier invocation so that when write-barrier calls runtime and
+  // clobbers a register this is detected.
+  var young = Object();
+  var len = oldies.length;
+  var i = 0;
+  var v00 = v + 0.0;
+  var v01 = v + 1.0;
+  var v02 = v + 2.0;
+  var v03 = v + 3.0;
+  var v04 = v + 4.0;
+  var v05 = v + 5.0;
+  var v06 = v + 6.0;
+  var v07 = v + 7.0;
+  var v08 = v + 8.0;
+  var v09 = v + 9.0;
+  var v10 = v + 10.0;
+  var v11 = v + 11.0;
+  var v12 = v + 12.0;
+  var v13 = v + 13.0;
+  var v14 = v + 14.0;
+  var v15 = v + 15.0;
+  var v16 = v + 16.0;
+  var v17 = v + 17.0;
+  var v18 = v + 18.0;
+  var v19 = v + 19.0;
+  while (i < len) {
+    // Eventually this will overflow store buffer and call runtime to acquire
+    // a new block.
+    oldies[i++].f = young;
+  }
+  return v00 +
+      v01 +
+      v02 +
+      v03 +
+      v04 +
+      v05 +
+      v06 +
+      v07 +
+      v08 +
+      v09 +
+      v10 +
+      v11 +
+      v12 +
+      v13 +
+      v14 +
+      v15 +
+      v16 +
+      v17 +
+      v18 +
+      v19;
+}
+
+void main(List<String> args) {
+  final init = args.contains('impossible') ? 1.0 : 0.0;
+  final oldies = List<Old>.generate(100000, (i) => Old(""));
+  VMInternalsForTesting.collectAllGarbage();
+  VMInternalsForTesting.collectAllGarbage();
+  Expect.equals(crashy(init, oldies), 190.0);
+  for (var o in oldies) {
+    Expect.isTrue(o.f is! String);
+  }
+}
diff --git a/runtime/tests/vm/dart_2/write_barrier_simd_register_clobber_test.dart b/runtime/tests/vm/dart_2/write_barrier_simd_register_clobber_test.dart
new file mode 100644
index 0000000..a34eb75
--- /dev/null
+++ b/runtime/tests/vm/dart_2/write_barrier_simd_register_clobber_test.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.
+
+// @dart = 2.9
+
+// This test attempts to verify that write barrier slow path does not
+// clobber any live values.
+
+import 'dart:_internal' show VMInternalsForTesting;
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+class Old {
+  var f;
+  Old(this.f);
+}
+
+@pragma('vm:never-inline')
+Float64x2 crashy(Float64x2 v, List<Old> oldies) {
+  // This test attempts to create a lot of live values which would live across
+  // write barrier invocation so that when write-barrier calls runtime and
+  // clobbers a register this is detected.
+  var young = Object();
+  var len = oldies.length;
+  var i = 0;
+  var v00 = v + Float64x2(0.0, 0.0);
+  var v01 = v + Float64x2(1.0, 1.0);
+  var v02 = v + Float64x2(2.0, 2.0);
+  var v03 = v + Float64x2(3.0, 3.0);
+  var v04 = v + Float64x2(4.0, 4.0);
+  var v05 = v + Float64x2(5.0, 5.0);
+  var v06 = v + Float64x2(6.0, 6.0);
+  var v07 = v + Float64x2(7.0, 7.0);
+  var v08 = v + Float64x2(8.0, 8.0);
+  var v09 = v + Float64x2(9.0, 9.0);
+  var v10 = v + Float64x2(10.0, 10.0);
+  var v11 = v + Float64x2(11.0, 11.0);
+  var v12 = v + Float64x2(12.0, 12.0);
+  var v13 = v + Float64x2(13.0, 13.0);
+  var v14 = v + Float64x2(14.0, 14.0);
+  var v15 = v + Float64x2(15.0, 15.0);
+  var v16 = v + Float64x2(16.0, 16.0);
+  var v17 = v + Float64x2(17.0, 17.0);
+  var v18 = v + Float64x2(18.0, 18.0);
+  var v19 = v + Float64x2(19.0, 19.0);
+  while (i < len) {
+    // Eventually this will overflow store buffer and call runtime to acquire
+    // a new block.
+    oldies[i++].f = young;
+  }
+  return v00 +
+      v01 +
+      v02 +
+      v03 +
+      v04 +
+      v05 +
+      v06 +
+      v07 +
+      v08 +
+      v09 +
+      v10 +
+      v11 +
+      v12 +
+      v13 +
+      v14 +
+      v15 +
+      v16 +
+      v17 +
+      v18 +
+      v19;
+}
+
+void main(List<String> args) {
+  final init =
+      args.contains('impossible') ? Float64x2(1.0, 1.0) : Float64x2(0.0, 0.0);
+  final oldies = List<Old>.generate(100000, (i) => Old(""));
+  VMInternalsForTesting.collectAllGarbage();
+  VMInternalsForTesting.collectAllGarbage();
+  var r = crashy(init, oldies);
+  Expect.equals(r.x, 190.0);
+  Expect.equals(r.y, 190.0);
+  for (var o in oldies) {
+    Expect.isTrue(o.f is! String);
+  }
+}
diff --git a/runtime/tests/vm/data/macho_32bit_big_endian b/runtime/tests/vm/data/macho_32bit_big_endian
new file mode 100644
index 0000000..c271589
--- /dev/null
+++ b/runtime/tests/vm/data/macho_32bit_big_endian
Binary files differ
diff --git a/runtime/tests/vm/data/macho_32bit_little_endian b/runtime/tests/vm/data/macho_32bit_little_endian
new file mode 100644
index 0000000..7c7003f
--- /dev/null
+++ b/runtime/tests/vm/data/macho_32bit_little_endian
Binary files differ
diff --git a/runtime/tests/vm/data/macho_64bit_big_endian b/runtime/tests/vm/data/macho_64bit_big_endian
new file mode 100644
index 0000000..95b3475
--- /dev/null
+++ b/runtime/tests/vm/data/macho_64bit_big_endian
Binary files differ
diff --git a/runtime/tests/vm/data/macho_64bit_little_endian b/runtime/tests/vm/data/macho_64bit_little_endian
new file mode 100644
index 0000000..fcd8a04c
--- /dev/null
+++ b/runtime/tests/vm/data/macho_64bit_little_endian
Binary files differ
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 5fe1fbf..8feee00 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -11,6 +11,7 @@
 cc/IsolateReload_PendingStaticCall_NSMToDefined: Fail, Crash # Issue 32981. Fails on non-Windows, crashes on Windows (because of test.py special handline)
 cc/IsolateReload_PendingUnqualifiedCall_InstanceToStatic: Fail # Issue 32981
 cc/IsolateReload_PendingUnqualifiedCall_StaticToInstance: Fail # Issue 32981
+dart/analyze_snapshot_binary_test: Pass, Slow # Runs various subprocesses for testing AOT.
 dart/boxmint_test: Pass, Slow # Uses slow path
 dart/byte_array_optimized_test: Pass, Slow
 dart/data_uri_import_test/none: SkipByDesign
@@ -25,6 +26,7 @@
 dart/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
 dart/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
 dart/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
+dart_2/analyze_snapshot_binary_test: Pass, Slow # Runs various subprocesses for testing AOT.
 dart_2/boxmint_test: Pass, Slow # Uses slow path
 dart_2/byte_array_optimized_test: Pass, Slow
 dart_2/data_uri_import_test/none: SkipByDesign
@@ -65,6 +67,7 @@
 dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow with optimization_counter_threshold
 
 [ $builder_tag == tsan ]
+dart/analyze_snapshot_binary_test: SkipSlow
 dart/appjit_cha_deopt_test: SkipSlow
 dart/hash_map_probes_limit_test: SkipSlow # Test includes large program compilation.
 dart/regress_40462_test: SkipSlow
@@ -72,6 +75,7 @@
 dart/trigger_gc_in_native_test: Skip # This test crashes on the bot, but not locally, and infrastructure repeatly fails to locate its coredump.
 dart/use_strip_flag_test: Pass, Slow # This test can take a longer time to complete.
 dart/v8_snapshot_profile_writer_test: SkipSlow
+dart_2/analyze_snapshot_binary_test: SkipSlow
 dart_2/appjit_cha_deopt_test: SkipSlow
 dart_2/hash_map_probes_limit_test: SkipSlow # Test includes large program compilation.
 dart_2/regress_40462_test: SkipSlow
@@ -104,6 +108,7 @@
 [ $compiler == dartkp ]
 dart/causal_stacks/async_throws_stack_no_causal_non_symbolic_test: SkipByDesign # --no-lazy... does nothing on precompiler.
 dart/causal_stacks/async_throws_stack_no_causal_test: SkipByDesign # --no-lazy... does nothing on precompiler.
+dart/finalizer/finalizer_isolate_groups_run_gc_test: SkipByDesign # Isolate.spawnUri is not supported in AOT.
 dart/redirection_type_shuffling_test: SkipByDesign # Uses dart:mirrors.
 dart/scavenger_abort_test: SkipSlow
 dart/v8_snapshot_profile_writer_test: Pass, Slow # Can be slow due to re-invoking the precompiler.
@@ -253,12 +258,14 @@
 dart/appjit*: SkipSlow # DFE too slow
 dart/b162922506_test: SkipSlow # Generates large input file
 dart/data_uri_spawn_test: Skip # Please triage.
+dart/isolates/fast_object_copy_test*: Slow # issue 46740
 dart/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart/snapshot_version_test: RuntimeError # Please triage.
 dart_2/appjit*: SkipSlow # DFE too slow
 dart_2/b162922506_test: SkipSlow # Generates large input file
 dart_2/data_uri_spawn_test: Skip # Please triage.
+dart_2/isolates/fast_object_copy_test*: Slow # issue 46740
 dart_2/minimal_kernel_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart_2/null_safety_autodetection_in_kernel_compiler_test: SkipSlow # gen_kernel is too slow on simulated architectures
 dart_2/snapshot_version_test: RuntimeError # Please triage.
@@ -325,6 +332,11 @@
 dart/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host). On Linux/simarm64 and Linux/simarm this test requires buildtools/clang which is not always available on testing shards.
 dart_2/v8_snapshot_profile_writer_test: SkipByDesign # Only relevant for AOT. Doesn't work in cross-compilation (has to run on the host). On Linux/simarm64 and Linux/simarm this test requires buildtools/clang which is not always available on testing shards.
 
+# Currently this is only supported on 64-bit linux systems with precompilation
+[ $arch == ia32 || $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $compiler != dartk || $system == fuchsia || $system != linux ]
+dart/analyze_snapshot_binary_test: SkipByDesign # Only run on 64bit AOT on standard architectures
+dart_2/analyze_snapshot_binary_test: SkipByDesign # Only run on 64bit AOT on standard architectures
+
 # On the simluator stack traces produced by the Profiler do not match
 # up with the real Dart stack trace and hence we don't get correct
 # symbol names.
@@ -431,9 +443,11 @@
 # These Isolate tests that use spawnURI are hence skipped on purpose.
 [ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
+dart/finalizer/finalizer_isolate_groups_run_gc_test: SkipByDesign # uses spawnUri.
 dart/isolates/send_object_to_spawn_uri_isolate_test: SkipByDesign # uses spawnUri
 dart/issue32950_test: SkipByDesign # uses spawnUri.
 dart_2/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
+dart_2/finalizer/finalizer_isolate_groups_run_gc_test: SkipByDesign # uses spawnUri.
 dart_2/isolates/send_object_to_spawn_uri_isolate_test: SkipByDesign # uses spawnUri
 dart_2/issue32950_test: SkipByDesign # uses spawnUri.
 
diff --git a/runtime/tools/run_clang_tidy.dart b/runtime/tools/run_clang_tidy.dart
index 84b66e8..2c12e45 100644
--- a/runtime/tools/run_clang_tidy.dart
+++ b/runtime/tools/run_clang_tidy.dart
@@ -64,6 +64,7 @@
   'runtime/bin/socket_base_linux.h',
   'runtime/bin/socket_base_macos.h',
   'runtime/bin/socket_base_win.h',
+  'runtime/bin/thread_absl.h',
   'runtime/bin/thread_android.h',
   'runtime/bin/thread_fuchsia.h',
   'runtime/bin/thread_linux.h',
@@ -100,6 +101,7 @@
   'runtime/vm/instructions_ia32.h',
   'runtime/vm/instructions_riscv.h',
   'runtime/vm/instructions_x64.h',
+  'runtime/vm/os_thread_absl.h',
   'runtime/vm/os_thread_android.h',
   'runtime/vm/os_thread_fuchsia.h',
   'runtime/vm/os_thread_linux.h',
diff --git a/runtime/vm/analyze_snapshot_api_impl.cc b/runtime/vm/analyze_snapshot_api_impl.cc
new file mode 100644
index 0000000..ef73e76
--- /dev/null
+++ b/runtime/vm/analyze_snapshot_api_impl.cc
@@ -0,0 +1,202 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#include "include/analyze_snapshot_api.h"
+#include "vm/dart_api_impl.h"
+#include "vm/json_writer.h"
+#include "vm/object.h"
+#include "vm/object_store.h"
+#include "vm/thread.h"
+
+namespace dart {
+namespace snapshot_analyzer {
+void DumpClassTable(Thread* thread, dart::JSONWriter* js) {
+  auto class_table = thread->isolate_group()->class_table();
+
+  Class& cls = Class::Handle();
+  String& name = String::Handle();
+  js->OpenArray("class_table");
+
+  for (intptr_t i = 1; i < class_table->NumCids(); i++) {
+    if (!class_table->HasValidClassAt(i)) {
+      continue;
+    }
+    cls = class_table->At(i);
+    if (!cls.IsNull()) {
+      name = cls.Name();
+      js->OpenObject();
+      js->PrintProperty("id", i);
+      js->PrintProperty("name", name.ToCString());
+
+      // Note: Some meta info is stripped from the snapshot, it's important
+      // to check every field for NULL to avoid segfaults.
+      const Library& library = Library::Handle(cls.library());
+      if (!library.IsNull()) {
+        String& lib_name = String::Handle();
+        lib_name = String::NewFormatted(
+            Heap::kOld, "%s%s", String::Handle(library.url()).ToCString(),
+            String::Handle(library.private_key()).ToCString());
+        js->PrintProperty("library", lib_name.ToCString());
+      }
+
+      const AbstractType& super_type = AbstractType::Handle(cls.super_type());
+      if (super_type.IsNull()) {
+      } else {
+        const String& super_name = String::Handle(super_type.Name());
+        js->PrintProperty("super_class", super_name.ToCString());
+      }
+
+      const Array& interfaces_array = Array::Handle(cls.interfaces());
+      if (!interfaces_array.IsNull()) {
+        if (interfaces_array.Length() > 0) {
+          js->OpenArray("interfaces");
+          AbstractType& interface = AbstractType::Handle();
+          intptr_t len = interfaces_array.Length();
+          for (intptr_t i = 0; i < len; i++) {
+            interface ^= interfaces_array.At(i);
+            js->PrintValue(interface.ToCString());
+          }
+          js->CloseArray();
+        }
+      }
+      const Array& functions_array = Array::Handle(cls.functions());
+      if (!functions_array.IsNull()) {
+        if (functions_array.Length() > 0) {
+          js->OpenArray("functions");
+          Function& function = Function::Handle();
+          intptr_t len = functions_array.Length();
+          for (intptr_t i = 0; i < len; i++) {
+            function ^= functions_array.At(i);
+            if (function.IsNull() || !function.HasCode()) {
+              continue;
+            }
+            const Code& code = Code::Handle(function.CurrentCode());
+            intptr_t size = code.Size();
+
+            // Note: Some entry points here will be pointing to the VM
+            // instructions buffer.
+
+            // Note: code_entry will contain the address in the memory
+            // In order to resolve it to a relative offset in the instructions
+            // buffer we need to pick the base address and substract it from
+            // the entry point address.
+            auto code_entry = code.EntryPoint();
+            // On different architectures the type of the underlying
+            // dart::uword can result in an unsigned long long vs unsigned long
+            // mismatch.
+            uint64_t code_addr = static_cast<uint64_t>(code_entry);
+            js->OpenObject();
+            js->PrintProperty("name", function.ToCString());
+            js->PrintfProperty("code_entry", "0x%" PRIx64 "", code_addr);
+            js->PrintProperty("size", size);
+            js->CloseObject();
+          }
+          js->CloseArray();
+        }
+      }
+      const Array& fields_array = Array::Handle(cls.fields());
+      if (fields_array.IsNull()) {
+      } else {
+        if (fields_array.Length() > 0) {
+          js->OpenArray("fields");
+          Field& field = Field::Handle();
+          for (intptr_t i = 0; i < fields_array.Length(); i++) {
+            field ^= fields_array.At(i);
+            js->PrintValue(field.ToCString());
+          }
+          js->CloseArray();
+        }
+      }
+    }
+    js->CloseObject();
+  }
+  js->CloseArray();
+}
+void DumpObjectPool(Thread* thread, dart::JSONWriter* js) {
+  js->OpenArray("object_pool");
+
+  auto pool_ptr = thread->isolate_group()->object_store()->global_object_pool();
+  const auto& pool = ObjectPool::Handle(ObjectPool::RawCast(pool_ptr));
+  for (intptr_t i = 0; i < pool.Length(); i++) {
+    auto type = pool.TypeAt(i);
+    // Only interested in tagged objects.
+    // All these checks are required otherwise ToCString() will segfault.
+    if (type != ObjectPool::EntryType::kTaggedObject) {
+      continue;
+    }
+
+    auto entry = pool.ObjectAt(i);
+    if (!entry.IsHeapObject()) {
+      continue;
+    }
+
+    intptr_t cid = entry.GetClassId();
+
+    switch (cid) {
+      case kOneByteStringCid: {
+        js->OpenObject();
+        js->PrintProperty("type", "kOneByteString");
+        js->PrintProperty("id", i);
+        js->PrintProperty("offset", pool.element_offset(i));
+        js->PrintProperty("value", Object::Handle(entry).ToCString());
+        js->CloseObject();
+        break;
+      }
+      case kTwoByteStringCid: {
+        // TODO(#47924): Add support.
+        break;
+      }
+      default:
+        // TODO(#47924): Investigate other types of objects to parse.
+        break;
+    }
+  }
+  js->CloseArray();
+}
+// TODO(#47924): Add processing of the entires in the dispatch table.
+// Below is an example skeleton
+// void DumpDispatchTable(dart::Thread* thread) {
+//   auto dispatch = thread->isolate_group()->dispatch_table();
+//   auto length = dispatch->length();
+// We must unbias the array entries so we don't crash on null access.
+//   auto entries = dispatch->ArrayOrigin() - DispatchTable::OriginElement();
+//   for (intptr_t i = 0; i < length; i++) {
+//     OS::Print("0x%lx at %ld\n", entries[i], i);
+//   }
+// }
+
+void Dart_DumpSnapshotInformationAsJson(
+    char** buffer,
+    intptr_t* buffer_length,
+    Dart_SnapshotAnalyzerInformation* info) {
+  Thread* thread = Thread::Current();
+  DARTSCOPE(thread);
+  JSONWriter js;
+  // Open empty object so output is valid/parsable JSON.
+  js.OpenObject();
+  js.OpenObject("snapshot_data");
+  // Base addreses of the snapshot data, useful to calculate relative offsets.
+  js.PrintfProperty("vm_data", "%p", info->vm_snapshot_data);
+  js.PrintfProperty("vm_instructions", "%p", info->vm_snapshot_instructions);
+  js.PrintfProperty("isolate_data", "%p", info->vm_isolate_data);
+  js.PrintfProperty("isolate_instructions", "%p",
+                    info->vm_isolate_instructions);
+  js.CloseObject();
+
+  {
+    // Debug builds assert that our thread has a lock before accessing
+    // vm internal fields.
+    SafepointReadRwLocker ml(thread, thread->isolate_group()->program_lock());
+    DumpClassTable(thread, &js);
+    DumpObjectPool(thread, &js);
+  }
+
+  // Close our empty object.
+  js.CloseObject();
+
+  // Give ownership to caller.
+  js.Steal(buffer, buffer_length);
+}
+}  // namespace snapshot_analyzer
+}  // namespace dart
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index f694613b..e2b8a40 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -5140,7 +5140,7 @@
       Deserializer::InitializeHeader(property, kWeakPropertyCid,
                                      WeakProperty::InstanceSize());
       ReadFromTo(property);
-      property->untag()->next_ = WeakProperty::null();
+      property->untag()->next_seen_by_gc_ = WeakProperty::null();
     }
   }
 };
diff --git a/runtime/vm/bootstrap_natives.cc b/runtime/vm/bootstrap_natives.cc
index 91b4f6f..4258c9d 100644
--- a/runtime/vm/bootstrap_natives.cc
+++ b/runtime/vm/bootstrap_natives.cc
@@ -31,6 +31,15 @@
 #endif  // !DART_PRECOMPILED_RUNTIME
 };
 
+#define REGISTER_FFI_NATIVE_ENTRY(name, return_type, argument_types)           \
+  {"" #name, reinterpret_cast<void*>(BootstrapNatives::FN_##name)},
+
+static const struct FfiNativeEntries {
+  const char* name_;
+  void* function_;
+} BootStrapFfiEntries[] = {
+    BOOTSTRAP_FFI_NATIVE_LIST(REGISTER_FFI_NATIVE_ENTRY)};
+
 Dart_NativeFunction BootstrapNatives::Lookup(Dart_Handle name,
                                              int argument_count,
                                              bool* auto_setup_scope) {
@@ -55,6 +64,19 @@
   return NULL;
 }
 
+void* BootstrapNatives::LookupFfiNative(const char* name,
+                                        uintptr_t argument_count) {
+  int num_entries =
+      sizeof(BootStrapFfiEntries) / sizeof(struct FfiNativeEntries);
+  for (int i = 0; i < num_entries; i++) {
+    const struct FfiNativeEntries* entry = &(BootStrapFfiEntries[i]);
+    if (strcmp(name, entry->name_) == 0) {
+      return entry->function_;
+    }
+  }
+  return nullptr;
+}
+
 const uint8_t* BootstrapNatives::Symbol(Dart_NativeFunction nf) {
   int num_entries = sizeof(BootStrapEntries) / sizeof(struct NativeEntries);
   for (int i = 0; i < num_entries; i++) {
@@ -71,6 +93,9 @@
 
   Dart_NativeEntryResolver resolver = BootstrapNatives::Lookup;
 
+  Dart_FfiNativeResolver ffi_native_resolver =
+      BootstrapNatives::LookupFfiNative;
+
   Dart_NativeEntrySymbol symbol_resolver = BootstrapNatives::Symbol;
 
   library = Library::AsyncLibrary();
@@ -107,6 +132,7 @@
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
   library.set_native_entry_symbol_resolver(symbol_resolver);
+  library.set_ffi_native_resolver(ffi_native_resolver);
 
   library = Library::IsolateLibrary();
   ASSERT(!library.IsNull());
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index df65a0d..00a3c4c 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -452,12 +452,18 @@
   V(ParameterMirror_type, 3)                                                   \
   V(VariableMirror_type, 2)
 
+#define BOOTSTRAP_FFI_NATIVE_LIST(V)                                           \
+  V(FinalizerEntry_SetExternalSize, void, (Dart_Handle, intptr_t))
+
 class BootstrapNatives : public AllStatic {
  public:
   static Dart_NativeFunction Lookup(Dart_Handle name,
                                     int argument_count,
                                     bool* auto_setup_scope);
 
+  // For use with @FfiNative.
+  static void* LookupFfiNative(const char* name, uintptr_t argument_count);
+
   static const uint8_t* Symbol(Dart_NativeFunction nf);
 
 #define DECLARE_BOOTSTRAP_NATIVE(name, ignored)                                \
@@ -468,8 +474,12 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   MIRRORS_BOOTSTRAP_NATIVE_LIST(DECLARE_BOOTSTRAP_NATIVE)
 #endif
-
 #undef DECLARE_BOOTSTRAP_NATIVE
+
+#define DECLARE_BOOTSTRAP_FFI_NATIVE(name, return_type, argument_types)        \
+  static return_type FN_##name argument_types;
+  BOOTSTRAP_FFI_NATIVE_LIST(DECLARE_BOOTSTRAP_FFI_NATIVE)
+#undef DECLARE_BOOTSTRAP_FFI_NATIVE
 };
 
 }  // namespace dart
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index dc432e3..141ae5a 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -267,6 +267,10 @@
   ASSERT_EQUAL(WeakProperty::InstanceSize(), cls.host_instance_size());
   cls = object_store->weak_reference_class();
   ASSERT_EQUAL(WeakReference::InstanceSize(), cls.host_instance_size());
+  cls = object_store->finalizer_class();
+  ASSERT_EQUAL(Finalizer::InstanceSize(), cls.host_instance_size());
+  cls = object_store->finalizer_entry_class();
+  ASSERT_EQUAL(FinalizerEntry::InstanceSize(), cls.host_instance_size());
   cls = object_store->linked_hash_map_class();
   ASSERT_EQUAL(LinkedHashMap::InstanceSize(), cls.host_instance_size());
   cls = object_store->immutable_linked_hash_map_class();
@@ -1030,6 +1034,10 @@
   if (FLAG_trace_class_finalization) {
     THR_Print("Finalize types in %s\n", cls.ToCString());
   }
+  bool implements_finalizable =
+      cls.Name() == Symbols::Finalizable().ptr() &&
+      Library::UrlOf(cls.library()) == Symbols::DartFfi().ptr();
+
   // Finalize super class.
   Class& super_class = Class::Handle(zone, cls.SuperClass());
   if (!super_class.IsNull()) {
@@ -1045,15 +1053,24 @@
   if (!super_type.IsNull()) {
     super_type = FinalizeType(super_type);
     cls.set_super_type(super_type);
+    implements_finalizable |=
+        Class::ImplementsFinalizable(super_type.type_class());
   }
   // Finalize interface types (but not necessarily interface classes).
-  Array& interface_types = Array::Handle(zone, cls.interfaces());
-  AbstractType& interface_type = AbstractType::Handle(zone);
+  const auto& interface_types = Array::Handle(zone, cls.interfaces());
+  auto& interface_type = AbstractType::Handle(zone);
+  auto& interface_class = Class::Handle(zone);
   for (intptr_t i = 0; i < interface_types.Length(); i++) {
     interface_type ^= interface_types.At(i);
     interface_type = FinalizeType(interface_type);
+    interface_class = interface_type.type_class();
+    ASSERT(!interface_class.IsNull());
+    FinalizeTypesInClass(interface_class);
     interface_types.SetAt(i, interface_type);
+    implements_finalizable |=
+        Class::ImplementsFinalizable(interface_type.type_class());
   }
+  cls.set_implements_finalizable(implements_finalizable);
   cls.set_is_type_finalized();
 
   RegisterClassInHierarchy(thread->zone(), cls);
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 93e1979..7d764c7 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -68,6 +68,10 @@
   V(TypeArguments)                                                             \
   V(AbstractType)                                                              \
   V(Type)                                                                      \
+  V(FinalizerBase)                                                             \
+  V(Finalizer)                                                                 \
+  V(NativeFinalizer)                                                           \
+  V(FinalizerEntry)                                                            \
   V(FunctionType)                                                              \
   V(TypeRef)                                                                   \
   V(TypeParameter)                                                             \
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index e1830d1..36fd740 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -3194,11 +3194,8 @@
           &speculative_policy, pass_state.inline_id_to_function,
           pass_state.inline_id_to_token_pos, pass_state.caller_inline_id,
           ic_data_array, function_stats);
-      {
-        COMPILER_TIMINGS_TIMER_SCOPE(thread(), EmitCode);
-        TIMELINE_DURATION(thread(), CompilerVerbose, "CompileGraph");
-        graph_compiler.CompileGraph();
-      }
+      pass_state.graph_compiler = &graph_compiler;
+      CompilerPass::GenerateCode(&pass_state);
       {
         COMPILER_TIMINGS_TIMER_SCOPE(thread(), FinalizeCode);
         TIMELINE_DURATION(thread(), CompilerVerbose, "FinalizeCompilation");
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index eb5cacc..eb0477e 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -223,7 +223,7 @@
 }
 
 void AsmIntrinsifier::Bigint_rsh(Assembler* assembler, Label* normal_ir_body) {
-  // static void _lsh(Uint32List x_digits, int x_used, int n,
+  // static void _rsh(Uint32List x_digits, int x_used, int n,
   //                  Uint32List r_digits)
 
   // R2 = x_used, R3 = x_digits, x_used > 0, x_used is Smi.
diff --git a/runtime/vm/compiler/asm_intrinsifier_riscv.cc b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
index db03989..39cfdf9 100644
--- a/runtime/vm/compiler/asm_intrinsifier_riscv.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
@@ -156,49 +156,749 @@
 }
 
 void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // static void _lsh(Uint32List src_digits, int src_used,
+  //                  int shift_amount,
+  //                  Uint32List result_digits)
+
+  Label loop, done;
+  __ lx(T0, Address(SP, 3 * target::kWordSize));  // src_digits
+  __ lx(T1, Address(SP, 2 * target::kWordSize));  // src_used
+  __ lx(T2, Address(SP, 1 * target::kWordSize));  // shift_amount
+  __ lx(T3, Address(SP, 0 * target::kWordSize));  // result_digits
+
+#if XLEN == 32
+  // 1 word = 1 digit
+  __ SmiUntag(T1);
+#else
+  // 1 word = 2 digits
+  __ addi(T1, T1, target::ToRawSmi(1));  // Round up to even
+  __ srai(T1, T1, kSmiTagSize + 1);
+#endif
+  __ SmiUntag(T2);
+
+  __ srai(T4, T2, target::kBitsPerWordLog2);  // T4 = word shift
+  __ andi(T5, T2, target::kBitsPerWord - 1);  // T5 = bit shift
+  __ li(T6, target::kBitsPerWord);
+  __ sub(T6, T6, T5);  // T6 = carry bit shift
+
+  __ slli(TMP, T1, target::kWordSizeLog2);
+  __ add(T0, T0, TMP);
+  __ subi(T0, T0, target::kWordSize);  // T0 = &src_digits[src_used - 1]
+
+  __ add(TMP, T1, T4);
+  __ slli(TMP, TMP, target::kWordSizeLog2);
+  __ add(T3, T3, TMP);  // T3 = &dst_digits[src_used + word_shift]
+
+  __ li(T2, 0);  // carry
+
+  __ Bind(&loop);
+  __ beqz(T1, &done, Assembler::kNearJump);
+  __ lx(TMP, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ srl(TMP2, TMP, T6);
+  __ or_(TMP2, TMP2, T2);
+  __ sx(TMP2, FieldAddress(T3, target::TypedData::payload_offset()));
+  __ sll(T2, TMP, T5);
+  __ subi(T0, T0, target::kWordSize);
+  __ subi(T3, T3, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ j(&loop);
+
+  __ Bind(&done);
+  __ sx(T2, FieldAddress(T3, target::TypedData::payload_offset()));
+  __ LoadObject(A0, NullObject());
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_rsh(Assembler* assembler, Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // static void _rsh(Uint32List src_digits, int src_used,
+  //                  int shift_amount,
+  //                  Uint32List result_digits)
+
+  Label loop, done;
+  __ lx(T0, Address(SP, 3 * target::kWordSize));  // src_digits
+  __ lx(T1, Address(SP, 2 * target::kWordSize));  // src_used
+  __ lx(T2, Address(SP, 1 * target::kWordSize));  // shift_amount
+  __ lx(T3, Address(SP, 0 * target::kWordSize));  // result_digits
+
+#if XLEN == 32
+  // 1 word = 1 digit
+  __ SmiUntag(T1);
+#else
+  // 1 word = 2 digits
+  __ addi(T1, T1, target::ToRawSmi(1));  // Round up to even
+  __ srai(T1, T1, kSmiTagSize + 1);
+#endif
+  __ SmiUntag(T2);
+
+  __ srai(T4, T2, target::kBitsPerWordLog2);  // T4 = word shift
+  __ andi(T5, T2, target::kBitsPerWord - 1);  // T5 = bit shift
+  __ li(T6, target::kBitsPerWord);
+  __ sub(T6, T6, T5);  // T6 = carry bit shift
+
+  __ slli(TMP, T4, target::kWordSizeLog2);
+  __ add(T0, T0, TMP);  // T0 = &src_digits[word_shift]
+
+  __ li(T2, 0);  // carry
+  __ lx(T2, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ srl(T2, T2, T5);
+  __ addi(T0, T0, target::kWordSize);
+  __ subi(T1, T1, 1);
+
+  __ Bind(&loop);
+  __ beqz(T1, &done, Assembler::kNearJump);
+  __ lx(TMP, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ sll(TMP2, TMP, T6);
+  __ or_(TMP2, TMP2, T2);
+  __ sx(TMP2, FieldAddress(T3, target::TypedData::payload_offset()));
+  __ srl(T2, TMP, T5);
+  __ addi(T0, T0, target::kWordSize);
+  __ addi(T3, T3, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ j(&loop);
+
+  __ Bind(&done);
+  __ sx(T2, FieldAddress(T3, target::TypedData::payload_offset()));
+  __ LoadObject(A0, NullObject());
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_absAdd(Assembler* assembler,
                                     Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // static void _absAdd(Uint32List longer_digits, int longer_used,
+  //                     Uint32List shorter_digits, int shorter_used,
+  //                     Uint32List result_digits)
+
+  Label first_loop, second_loop, last_carry, done;
+  __ lx(T0, Address(SP, 4 * target::kWordSize));  // longer_digits
+  __ lx(T1, Address(SP, 3 * target::kWordSize));  // longer_used
+  __ lx(T2, Address(SP, 2 * target::kWordSize));  // shorter_digits
+  __ lx(T3, Address(SP, 1 * target::kWordSize));  // shorter_used
+  __ lx(T4, Address(SP, 0 * target::kWordSize));  // result_digits
+
+#if XLEN == 32
+  // 1 word = 1 digit
+  __ SmiUntag(T1);
+  __ SmiUntag(T3);
+#else
+  // 1 word = 2 digits
+  __ addi(T1, T1, target::ToRawSmi(1));  // Round up to even
+  __ srai(T1, T1, kSmiTagSize + 1);
+  __ addi(T3, T3, target::ToRawSmi(1));  // Round up to even
+  __ srai(T3, T3, kSmiTagSize + 1);
+#endif
+  __ li(T5, 0);  // Carry
+
+  __ Bind(&first_loop);
+  __ beqz(T3, &second_loop);
+  __ lx(A0, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ lx(A1, FieldAddress(T2, target::TypedData::payload_offset()));
+  __ add(A0, A0, A1);
+  __ sltu(TMP, A0, A1);  // Carry
+  __ add(A0, A0, T5);
+  __ sltu(TMP2, A0, T5);  // Carry
+  __ add(T5, TMP, TMP2);
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T0, T0, target::kWordSize);
+  __ addi(T2, T2, target::kWordSize);
+  __ addi(T4, T4, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ subi(T3, T3, 1);
+  __ j(&first_loop);
+
+  __ Bind(&second_loop);
+  __ beqz(T1, &last_carry);
+  __ lx(A0, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ add(TMP, A0, T5);
+  __ sltu(T5, TMP, A0);  // Carry
+  __ sx(TMP, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T0, T0, target::kWordSize);
+  __ addi(T4, T4, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ j(&second_loop);
+
+  __ Bind(&last_carry);
+  __ beqz(T5, &done);
+  __ sx(T5, FieldAddress(T4, target::TypedData::payload_offset()));
+
+  __ Bind(&done);
+  __ LoadObject(A0, NullObject());
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_absSub(Assembler* assembler,
                                     Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // static void _absSub(Uint32List longer_digits, int longer_used,
+  //                     Uint32List shorter_digits, int shorter_used,
+  //                     Uint32List result_digits)
+  Label first_loop, second_loop, last_borrow, done;
+  __ lx(T0, Address(SP, 4 * target::kWordSize));  // longer_digits
+  __ lx(T1, Address(SP, 3 * target::kWordSize));  // longer_used
+  __ lx(T2, Address(SP, 2 * target::kWordSize));  // shorter_digits
+  __ lx(T3, Address(SP, 1 * target::kWordSize));  // shorter_used
+  __ lx(T4, Address(SP, 0 * target::kWordSize));  // result_digits
+
+#if XLEN == 32
+  // 1 word = 1 digit
+  __ SmiUntag(T1);
+  __ SmiUntag(T3);
+#else
+  // 1 word = 2 digits
+  __ addi(T1, T1, target::ToRawSmi(1));  // Round up to even
+  __ srai(T1, T1, kSmiTagSize + 1);
+  __ addi(T3, T3, target::ToRawSmi(1));  // Round up to even
+  __ srai(T3, T3, kSmiTagSize + 1);
+#endif
+  __ li(T5, 0);  // Borrow
+
+  __ Bind(&first_loop);
+  __ beqz(T3, &second_loop);
+  __ lx(A0, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ lx(A1, FieldAddress(T2, target::TypedData::payload_offset()));
+  __ sltu(TMP, A0, A1);  // Borrow
+  __ sub(A0, A0, A1);
+  __ sltu(TMP2, A0, T5);  // Borrow
+  __ sub(A0, A0, T5);
+  __ add(T5, TMP, TMP2);
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T0, T0, target::kWordSize);
+  __ addi(T2, T2, target::kWordSize);
+  __ addi(T4, T4, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ subi(T3, T3, 1);
+  __ j(&first_loop);
+
+  __ Bind(&second_loop);
+  __ beqz(T1, &last_borrow);
+  __ lx(A0, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ sltu(TMP, A0, T5);  // Borrow
+  __ sub(A0, A0, T5);
+  __ mv(T5, TMP);
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T0, T0, target::kWordSize);
+  __ addi(T4, T4, target::kWordSize);
+  __ subi(T1, T1, 1);
+  __ j(&second_loop);
+
+  __ Bind(&last_borrow);
+  __ beqz(T5, &done);
+  __ neg(T5, T5);
+  __ sx(T5, FieldAddress(T4, target::TypedData::payload_offset()));
+
+  __ Bind(&done);
+  __ LoadObject(A0, NullObject());
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_mulAdd(Assembler* assembler,
                                     Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // Pseudo code:
+  // static int _mulAdd(Uint32List x_digits, int xi,
+  //                    Uint32List m_digits, int i,
+  //                    Uint32List a_digits, int j, int n) {
+  //   uint64_t x = x_digits[xi >> 1 .. (xi >> 1) + 1];  // xi is Smi and even.
+  //   if (x == 0 || n == 0) {
+  //     return 2;
+  //   }
+  //   uint64_t* mip = &m_digits[i >> 1];  // i is Smi and even.
+  //   uint64_t* ajp = &a_digits[j >> 1];  // j is Smi and even.
+  //   uint64_t c = 0;
+  //   SmiUntag(n);  // n is Smi and even.
+  //   n = (n + 1)/2;  // Number of pairs to process.
+  //   do {
+  //     uint64_t mi = *mip++;
+  //     uint64_t aj = *ajp;
+  //     uint128_t t = x*mi + aj + c;  // 64-bit * 64-bit -> 128-bit.
+  //     *ajp++ = low64(t);
+  //     c = high64(t);
+  //   } while (--n > 0);
+  //   while (c != 0) {
+  //     uint128_t t = *ajp + c;
+  //     *ajp++ = low64(t);
+  //     c = high64(t);  // c == 0 or 1.
+  //   }
+  //   return 2;
+  // }
+
+  Label done;
+  __ lx(T0, Address(SP, 6 * target::kWordSize));  // x_digits
+  __ lx(T1, Address(SP, 5 * target::kWordSize));  // xi
+  __ lx(T2, Address(SP, 4 * target::kWordSize));  // m_digits
+  __ lx(T3, Address(SP, 3 * target::kWordSize));  // i
+  __ lx(T4, Address(SP, 2 * target::kWordSize));  // a_digits
+  __ lx(T5, Address(SP, 1 * target::kWordSize));  // j
+  __ lx(T6, Address(SP, 0 * target::kWordSize));  // n
+
+  // R3 = x, no_op if x == 0
+  // T0 = xi as Smi, R1 = x_digits.
+  __ slli(T1, T1, 1);
+  __ add(T0, T0, T1);
+  __ lx(T0, FieldAddress(T0, target::TypedData::payload_offset()));
+  __ beqz(T0, &done);
+
+  // R6 = (SmiUntag(n) + 1)/2, no_op if n == 0
+#if XLEN == 32
+  // 1 word = 1 digit
+  __ SmiUntag(T6);
+#else
+  // 1 word = 2 digits
+  __ addi(T6, T6, target::ToRawSmi(1));
+  __ srai(T6, T6, 2);
+#endif
+  __ beqz(T6, &done);
+
+  // R4 = mip = &m_digits[i >> 1]
+  // R0 = i as Smi, R1 = m_digits.
+  __ slli(T3, T3, 1);
+  __ add(T2, T2, T3);
+
+  // R5 = ajp = &a_digits[j >> 1]
+  // R0 = j as Smi, R1 = a_digits.
+  __ slli(T5, T5, 1);
+  __ add(T4, T4, T5);
+
+  // T1 = c = 0
+  __ li(T1, 0);
+
+  Label muladd_loop;
+  __ Bind(&muladd_loop);
+  // x:   T0
+  // mip: T2
+  // ajp: T4
+  // c:   T1
+  // n:   T6
+  // t:   A7:A6 (not live at loop entry)
+
+  // uint64_t mi = *mip++
+  __ lx(A0, FieldAddress(T2, target::TypedData::payload_offset()));
+  __ addi(T2, T2, target::kWordSize);
+
+  // uint64_t aj = *ajp
+  __ lx(A1, FieldAddress(T4, target::TypedData::payload_offset()));
+
+  // uint128_t t = x*mi + aj + c
+  // Macro-op fusion: when both products are required, the recommended sequence
+  // is high first.
+  __ mulhu(A7, A0, T0);  // A7 = high64(A0*T0), t = A7:A6 = x*mi.
+  __ mul(A6, A0, T0);    // A6 = low64(A0*T0).
+
+  __ add(A6, A6, A1);
+  __ sltu(TMP, A6, A1);  // Carry
+  __ add(A7, A7, TMP);   // t += aj
+
+  __ add(A6, A6, T1);
+  __ sltu(TMP, A6, T1);  // Carry
+  __ add(A7, A7, TMP);   // t += c
+
+  __ mv(T1, A7);  // c = high64(t)
+
+  // *ajp++ = low64(t) = R0
+  __ sx(A6, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T4, T4, target::kWordSize);
+
+  // while (--n > 0)
+  __ subi(T6, T6, 1);  // --n
+  __ bnez(T6, &muladd_loop);
+
+  __ beqz(T1, &done);
+
+  // *ajp++ += c
+  __ lx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ add(A0, A0, T1);
+  __ sltu(T1, A0, T1);  // Carry
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T4, T4, target::kWordSize);
+  __ beqz(T1, &done);
+
+  Label propagate_carry_loop;
+  __ Bind(&propagate_carry_loop);
+  __ lx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ add(A0, A0, T1);
+  __ sltu(T1, A0, T1);  // Carry
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset()));
+  __ addi(T4, T4, target::kWordSize);
+  __ bnez(T1, &propagate_carry_loop);
+
+  __ Bind(&done);
+  // Result = One or two digits processed.
+  __ li(A0, target::ToRawSmi(target::kWordSize / kBytesPerBigIntDigit));
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_sqrAdd(Assembler* assembler,
                                     Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // Pseudo code:
+  // static int _sqrAdd(Uint32List x_digits, int i,
+  //                    Uint32List a_digits, int used) {
+  //   uint64_t* xip = &x_digits[i >> 1];  // i is Smi and even.
+  //   uint64_t x = *xip++;
+  //   if (x == 0) return 2;
+  //   uint64_t* ajp = &a_digits[i];  // j == 2*i, i is Smi.
+  //   uint64_t aj = *ajp;
+  //   uint128_t t = x*x + aj;
+  //   *ajp++ = low64(t);
+  //   uint128_t c = high64(t);
+  //   int n = ((used - i + 2) >> 2) - 1;  // used and i are Smi. n: num pairs.
+  //   while (--n >= 0) {
+  //     uint64_t xi = *xip++;
+  //     uint64_t aj = *ajp;
+  //     uint192_t t = 2*x*xi + aj + c;  // 2-bit * 64-bit * 64-bit -> 129-bit.
+  //     *ajp++ = low64(t);
+  //     c = high128(t);  // 65-bit.
+  //   }
+  //   uint64_t aj = *ajp;
+  //   uint128_t t = aj + c;  // 64-bit + 65-bit -> 66-bit.
+  //   *ajp++ = low64(t);
+  //   *ajp = high64(t);
+  //   return 2;
+  // }
+
+  // T2 = xip = &x_digits[i >> 1]
+  // T0 = i as Smi, T1 = x_digits
+  __ lx(T0, Address(SP, 2 * target::kWordSize));
+  __ lx(T1, Address(SP, 3 * target::kWordSize));
+  __ slli(TMP, T0, 1);
+  __ add(T1, T1, TMP);
+  __ addi(T2, T1, target::TypedData::payload_offset() - kHeapObjectTag);
+
+  // T1 = x = *xip++, return if x == 0
+  Label x_zero;
+  __ lx(T1, Address(T2, 0));
+  __ addi(T2, T2, target::kWordSize);
+  __ beqz(T1, &x_zero);
+
+  // T3 = ajp = &a_digits[i]
+  __ lx(A1, Address(SP, 1 * target::kWordSize));  // a_digits
+  __ slli(TMP, T0, 2);
+  __ add(A1, A1, TMP);  // j == 2*i, i is Smi.
+  __ addi(T3, A1, target::TypedData::payload_offset() - kHeapObjectTag);
+
+  // T4:A1 = t = x*x + *ajp
+  __ lx(A0, Address(T3, 0));
+  __ mul(A1, T1, T1);    // A1 = low64(T1*T1).
+  __ mulhu(T4, T1, T1);  // T4 = high64(T1*T1).
+  __ add(A1, A1, A0);    // T4:A1 += *ajp.
+  __ sltu(TMP, A1, A0);
+  __ add(T4, T4, TMP);  // T4 = low64(c) = high64(t).
+  __ li(T5, 0);         // T5 = high64(c) = 0.
+
+  // *ajp++ = low64(t) = A1
+  __ sx(A1, Address(T3, 0));
+  __ addi(T3, T3, target::kWordSize);
+
+  __ lx(A0, Address(SP, 0 * target::kWordSize));  // used is Smi
+#if XLEN == 32
+  // int n = used - i - 2;
+  __ sub(T6, A0, T0);
+  __ SmiUntag(T6);
+  __ subi(T6, T6, 2);
+#else
+  // int n = (used - i + 1)/2 - 1
+  __ sub(T6, A0, T0);
+  __ addi(T6, T6, 2);
+  __ srai(T6, T6, 2);
+  __ subi(T6, T6, 2);
+#endif
+
+  Label loop, done;
+  __ bltz(T6, &done);  // while (--n >= 0)
+
+  __ Bind(&loop);
+  // x:   T1
+  // xip: T2
+  // ajp: T3
+  // c:   T5:T4
+  // t:   T0:A1:A0 (not live at loop entry)
+  // n:   T6
+
+  // uint64_t xi = *xip++
+  __ lx(T0, Address(T2, 0));
+  __ addi(T2, T2, target::kWordSize);
+
+  // uint192_t t = T0:A1:A0 = 2*x*xi + aj + c
+  __ mul(A0, T0, T1);    // A0 = low64(T0*T1) = low64(x*xi).
+  __ mulhu(A1, T0, T1);  // A1 = high64(T0*T1) = high64(x*xi).
+
+  __ mv(TMP, A0);
+  __ add(A0, A0, A0);
+  __ sltu(TMP, A0, TMP);
+  __ mv(TMP2, A1);
+  __ add(A1, A1, A1);
+  __ sltu(TMP2, A1, TMP2);
+  __ add(A1, A1, TMP);
+  __ sltu(TMP, A1, TMP);
+  __ add(T0, TMP, TMP2);  // T0:A1:A0 = A1:A0 + A1:A0 = 2*x*xi.
+
+  __ add(A0, A0, T4);
+  __ sltu(TMP, A0, T4);
+  __ add(A1, A1, T5);
+  __ sltu(TMP2, A1, T5);
+  __ add(A1, A1, TMP);
+  __ sltu(TMP, A1, TMP);
+  __ add(T0, T0, TMP);
+  __ add(T0, T0, TMP2);  // T0:A1:A0 += c.
+
+  __ lx(T5, Address(T3, 0));  // T5 = aj = *ajp.
+  __ add(A0, A0, T5);
+  __ sltu(TMP, A0, T5);
+  __ add(T4, A1, TMP);
+  __ sltu(TMP, T4, A1);
+  __ add(T5, T0, TMP);  // T5:T4:A0 = 2*x*xi + aj + c.
+
+  // *ajp++ = low64(t) = A0
+  __ sx(A0, Address(T3, 0));
+  __ addi(T3, T3, target::kWordSize);
+
+  // while (--n >= 0)
+  __ subi(T6, T6, 1);  // --n
+  __ bgez(T6, &loop);
+
+  __ Bind(&done);
+  // uint64_t aj = *ajp
+  __ lx(A0, Address(T3, 0));
+
+  // uint128_t t = aj + c
+  __ add(T4, T4, A0);
+  __ sltu(TMP, T4, A0);
+  __ add(T5, T5, TMP);
+
+  // *ajp = low64(t) = T4
+  // *(ajp + 1) = high64(t) = T5
+  __ sx(T4, Address(T3, 0));
+  __ sx(T5, Address(T3, target::kWordSize));
+
+  __ Bind(&x_zero);
+  // Result = One or two digits processed.
+  __ li(A0, target::ToRawSmi(target::kWordSize / kBytesPerBigIntDigit));
+  __ ret();
 }
 
 void AsmIntrinsifier::Bigint_estimateQuotientDigit(Assembler* assembler,
                                                    Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // There is no 128-bit by 64-bit division instruction on arm64, so we use two
+  // 64-bit by 32-bit divisions and two 64-bit by 64-bit multiplications to
+  // adjust the two 32-bit digits of the estimated quotient.
+  //
+  // Pseudo code:
+  // static int _estQuotientDigit(Uint32List args, Uint32List digits, int i) {
+  //   uint64_t yt = args[_YT_LO .. _YT];  // _YT_LO == 0, _YT == 1.
+  //   uint64_t* dp = &digits[(i >> 1) - 1];  // i is Smi.
+  //   uint64_t dh = dp[0];  // dh == digits[(i >> 1) - 1 .. i >> 1].
+  //   uint64_t qd;
+  //   if (dh == yt) {
+  //     qd = (DIGIT_MASK << 32) | DIGIT_MASK;
+  //   } else {
+  //     dl = dp[-1];  // dl == digits[(i >> 1) - 3 .. (i >> 1) - 2].
+  //     // We cannot calculate qd = dh:dl / yt, so ...
+  //     uint64_t yth = yt >> 32;
+  //     uint64_t qh = dh / yth;
+  //     uint128_t ph:pl = yt*qh;
+  //     uint64_t tl = (dh << 32)|(dl >> 32);
+  //     uint64_t th = dh >> 32;
+  //     while ((ph > th) || ((ph == th) && (pl > tl))) {
+  //       if (pl < yt) --ph;
+  //       pl -= yt;
+  //       --qh;
+  //     }
+  //     qd = qh << 32;
+  //     tl = (pl << 32);
+  //     th = (ph << 32)|(pl >> 32);
+  //     if (tl > dl) ++th;
+  //     dl -= tl;
+  //     dh -= th;
+  //     uint64_t ql = ((dh << 32)|(dl >> 32)) / yth;
+  //     ph:pl = yt*ql;
+  //     while ((ph > dh) || ((ph == dh) && (pl > dl))) {
+  //       if (pl < yt) --ph;
+  //       pl -= yt;
+  //       --ql;
+  //     }
+  //     qd |= ql;
+  //   }
+  //   args[_QD .. _QD_HI] = qd;  // _QD == 2, _QD_HI == 3.
+  //   return 2;
+  // }
+
+  __ lx(T4, Address(SP, 2 * target::kWordSize));  // args
+
+#if XLEN == 32
+  // ECX = yt = args[1]
+  __ lx(T3, FieldAddress(T4, target::TypedData::payload_offset() +
+                                 kBytesPerBigIntDigit));
+#else
+  // T3 = yt = args[0..1]
+  __ lx(T3, FieldAddress(T4, target::TypedData::payload_offset()));
+#endif
+
+  __ lx(A0, Address(SP, 0 * target::kWordSize));  // A0 = i as Smi
+  __ lx(T1, Address(SP, 1 * target::kWordSize));  // T1 = digits
+  __ slli(TMP, A0, 1);
+  __ add(T1, T1, TMP);
+#if XLEN == 32
+  // EBX = dp = &digits[i >> 1]
+  __ lx(T2, FieldAddress(T1, target::TypedData::payload_offset()));
+#else
+  // T2 = dh = digits[(i >> 1) - 1 .. i >> 1]
+  __ lx(T2, FieldAddress(T1, target::TypedData::payload_offset() -
+                                 kBytesPerBigIntDigit));
+#endif
+
+  // A0 = qd = (DIGIT_MASK << 32) | DIGIT_MASK = -1
+  __ li(A0, -1);
+
+  // Return qd if dh == yt
+  Label return_qd;
+  __ beq(T2, T3, &return_qd);
+
+#if XLEN == 32
+  // EAX = dl = dp[-1]
+  __ lx(T1, FieldAddress(T1, target::TypedData::payload_offset() -
+                                 kBytesPerBigIntDigit));
+#else
+  // T1 = dl = digits[(i >> 1) - 3 .. (i >> 1) - 2]
+  __ lx(T1, FieldAddress(T1, target::TypedData::payload_offset() -
+                                 3 * kBytesPerBigIntDigit));
+#endif
+
+  // T5 = yth = yt >> 32
+  __ srli(T5, T3, target::kWordSize * 4);
+
+  // T6 = qh = dh / yth
+  __ divu(T6, T2, T5);
+
+  // A6:A1 = ph:pl = yt*qh
+  __ mulhu(A6, T3, T6);
+  __ mul(A1, T3, T6);
+
+  // A7 = tl = (dh << 32)|(dl >> 32)
+  __ slli(A7, T2, target::kWordSize * 4);
+  __ srli(TMP, T1, target::kWordSize * 4);
+  __ or_(A7, A7, TMP);
+
+  // S3 = th = dh >> 32
+  __ srli(S3, T2, target::kWordSize * 4);
+
+  // while ((ph > th) || ((ph == th) && (pl > tl)))
+  Label qh_adj_loop, qh_adj, qh_ok;
+  __ Bind(&qh_adj_loop);
+  __ bgtu(A6, S3, &qh_adj);
+  __ bne(A6, S3, &qh_ok);
+  __ bleu(A1, A7, &qh_ok);
+
+  __ Bind(&qh_adj);
+  // if (pl < yt) --ph
+  __ sltu(TMP, A1, T3);
+  __ sub(A6, A6, TMP);
+
+  // pl -= yt
+  __ sub(A1, A1, T3);
+
+  // --qh
+  __ subi(T6, T6, 1);
+
+  // Continue while loop.
+  __ j(&qh_adj_loop);
+
+  __ Bind(&qh_ok);
+  // A0 = qd = qh << 32
+  __ slli(A0, T6, target::kWordSize * 4);
+
+  // tl = (pl << 32)
+  __ slli(A7, A1, target::kWordSize * 4);
+
+  // th = (ph << 32)|(pl >> 32);
+  __ slli(S3, A6, target::kWordSize * 4);
+  __ srli(TMP, A1, target::kWordSize * 4);
+  __ or_(S3, S3, TMP);
+
+  // if (tl > dl) ++th
+  __ sltu(TMP, T1, A7);
+  __ add(S3, S3, TMP);
+
+  // dl -= tl
+  __ sub(T1, T1, A7);
+
+  // dh -= th
+  __ sub(T2, T2, S3);
+
+  // T6 = ql = ((dh << 32)|(dl >> 32)) / yth
+  __ slli(T6, T2, target::kWordSize * 4);
+  __ srli(TMP, T1, target::kWordSize * 4);
+  __ or_(T6, T6, TMP);
+  __ divu(T6, T6, T5);
+
+  // A6:A1 = ph:pl = yt*ql
+  __ mulhu(A6, T3, T6);
+  __ mul(A1, T3, T6);
+
+  // while ((ph > dh) || ((ph == dh) && (pl > dl))) {
+  Label ql_adj_loop, ql_adj, ql_ok;
+  __ Bind(&ql_adj_loop);
+  __ bgtu(A6, T2, &ql_adj);
+  __ bne(A6, T2, &ql_ok);
+  __ bleu(A1, T1, &ql_ok);
+
+  __ Bind(&ql_adj);
+  // if (pl < yt) --ph
+  __ sltu(TMP, A1, T3);
+  __ sub(A6, A6, TMP);
+
+  // pl -= yt
+  __ sub(A1, A1, T3);
+
+  // --ql
+  __ subi(T6, T6, 1);
+
+  // Continue while loop.
+  __ j(&ql_adj_loop);
+
+  __ Bind(&ql_ok);
+  // qd |= ql;
+  __ or_(A0, A0, T6);
+
+  __ Bind(&return_qd);
+  // args[2..3] = qd
+  __ sx(A0, FieldAddress(T4, target::TypedData::payload_offset() +
+                                 2 * kBytesPerBigIntDigit));
+
+  // Result = One or two digits processed.
+  __ li(A0, target::ToRawSmi(target::kWordSize / kBytesPerBigIntDigit));
+  __ ret();
 }
 
 void AsmIntrinsifier::Montgomery_mulMod(Assembler* assembler,
                                         Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  // Pseudo code:
+  // static int _mulMod(Uint32List args, Uint32List digits, int i) {
+  //   uint64_t rho = args[_RHO .. _RHO_HI];  // _RHO == 2, _RHO_HI == 3.
+  //   uint64_t d = digits[i >> 1 .. (i >> 1) + 1];  // i is Smi and even.
+  //   uint128_t t = rho*d;
+  //   args[_MU .. _MU_HI] = t mod DIGIT_BASE^2;  // _MU == 4, _MU_HI == 5.
+  //   return 2;
+  // }
+
+  __ lx(T0, Address(SP, 2 * target::kWordSize));  // args
+  __ lx(T1, Address(SP, 1 * target::kWordSize));  // digits
+  __ lx(T2, Address(SP, 0 * target::kWordSize));  // i as Smi
+
+  // T3 = rho = args[2..3]
+  __ lx(T3, FieldAddress(T0, target::TypedData::payload_offset() +
+                                 2 * kBytesPerBigIntDigit));
+
+  // T4 = digits[i >> 1 .. (i >> 1) + 1]
+  __ slli(T2, T2, 1);
+  __ add(T1, T1, T2);
+  __ lx(T4, FieldAddress(T1, target::TypedData::payload_offset()));
+
+  // T5 = rho*d mod DIGIT_BASE
+  __ mul(T5, T4, T3);  // T5 = low64(T4*T3).
+
+  // args[4 .. 5] = T5
+  __ sx(T5, FieldAddress(T0, target::TypedData::payload_offset() +
+                                 4 * kBytesPerBigIntDigit));
+
+  // Result = One or two digits processed.
+  __ li(A0, target::ToRawSmi(target::kWordSize / kBytesPerBigIntDigit));
+  __ ret();
 }
 
 // FA0: left
@@ -435,13 +1135,14 @@
 void AsmIntrinsifier::String_getHashCode(Assembler* assembler,
                                          Label* normal_ir_body) {
   __ lx(A0, Address(SP, 0 * target::kWordSize));
-#if XLEN == 32
-  // Smi field.
-  __ lw(A0, FieldAddress(A0, target::String::hash_offset()));
-#else
+
+#if defined(HASH_IN_OBJECT_HEADER)
   // uint32_t field in header.
   __ lwu(A0, FieldAddress(A0, target::String::hash_offset()));
   __ SmiTag(A0);
+#else
+  // Smi field.
+  __ lx(A0, FieldAddress(A0, target::String::hash_offset()));
 #endif
   __ beqz(A0, normal_ir_body, Assembler::kNearJump);
   __ ret();
@@ -537,7 +1238,60 @@
                                             intptr_t other_cid,
                                             Label* return_true,
                                             Label* return_false) {
-  UNIMPLEMENTED();
+  __ SmiUntag(T0);
+  __ LoadCompressedSmi(
+      T1, FieldAddress(A0, target::String::length_offset()));  // this.length
+  __ SmiUntag(T1);
+  __ LoadCompressedSmi(
+      T2, FieldAddress(A1, target::String::length_offset()));  // other.length
+  __ SmiUntag(T2);
+
+  // if (other.length == 0) return true;
+  __ beqz(T2, return_true);
+
+  // if (start < 0) return false;
+  __ bltz(T0, return_false);
+
+  // if (start + other.length > this.length) return false;
+  __ add(T3, T0, T2);
+  __ bgt(T3, T1, return_false);
+
+  if (receiver_cid == kOneByteStringCid) {
+    __ add(A0, A0, T0);
+  } else {
+    ASSERT(receiver_cid == kTwoByteStringCid);
+    __ add(A0, A0, T0);
+    __ add(A0, A0, T0);
+  }
+
+  // i = 0
+  __ li(T3, 0);
+
+  // do
+  Label loop;
+  __ Bind(&loop);
+
+  // this.codeUnitAt(i + start)
+  if (receiver_cid == kOneByteStringCid) {
+    __ lbu(TMP, FieldAddress(A0, target::OneByteString::data_offset()));
+  } else {
+    __ lhu(TMP, FieldAddress(A0, target::TwoByteString::data_offset()));
+  }
+  // other.codeUnitAt(i)
+  if (other_cid == kOneByteStringCid) {
+    __ lbu(TMP2, FieldAddress(A1, target::OneByteString::data_offset()));
+  } else {
+    __ lhu(TMP2, FieldAddress(A1, target::TwoByteString::data_offset()));
+  }
+  __ bne(TMP, TMP2, return_false);
+
+  // i++, while (i < len)
+  __ addi(T3, T3, 1);
+  __ addi(A0, A0, receiver_cid == kOneByteStringCid ? 1 : 2);
+  __ addi(A1, A1, other_cid == kOneByteStringCid ? 1 : 2);
+  __ blt(T3, T2, &loop);
+
+  __ j(return_true);
 }
 
 // bool _substringMatches(int start, String other)
@@ -545,26 +1299,284 @@
 // OneByteString other.
 void AsmIntrinsifier::StringBaseSubstringMatches(Assembler* assembler,
                                                  Label* normal_ir_body) {
-  // TODO(riscv)
+  Label return_true, return_false, try_two_byte;
+  __ lx(A0, Address(SP, 2 * target::kWordSize));  // this
+  __ lx(T0, Address(SP, 1 * target::kWordSize));  // start
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // other
+
+  __ BranchIfNotSmi(T0, normal_ir_body);
+
+  __ CompareClassId(A1, kOneByteStringCid, TMP);
+  __ BranchIf(NE, normal_ir_body);
+
+  __ CompareClassId(A0, kOneByteStringCid, TMP);
+  __ BranchIf(NE, normal_ir_body);
+
+  GenerateSubstringMatchesSpecialization(assembler, kOneByteStringCid,
+                                         kOneByteStringCid, &return_true,
+                                         &return_false);
+
+  __ Bind(&try_two_byte);
+  __ CompareClassId(A0, kTwoByteStringCid, TMP);
+  __ BranchIf(NE, normal_ir_body);
+
+  GenerateSubstringMatchesSpecialization(assembler, kTwoByteStringCid,
+                                         kOneByteStringCid, &return_true,
+                                         &return_false);
+
+  __ Bind(&return_true);
+  __ LoadObject(A0, CastHandle<Object>(TrueObject()));
+  __ ret();
+
+  __ Bind(&return_false);
+  __ LoadObject(A0, CastHandle<Object>(FalseObject()));
+  __ ret();
+
   __ Bind(normal_ir_body);
 }
 
 void AsmIntrinsifier::StringBaseCharAt(Assembler* assembler,
                                        Label* normal_ir_body) {
-  // TODO(riscv)
+  Label try_two_byte_string;
+
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // Index.
+  __ lx(A0, Address(SP, 1 * target::kWordSize));  // String.
+  __ BranchIfNotSmi(A1, normal_ir_body);          // Index is not a Smi.
+  // Range check.
+  __ lx(TMP, FieldAddress(A0, target::String::length_offset()));
+  __ bgeu(A1, TMP, normal_ir_body);  // Runtime throws exception.
+
+  __ CompareClassId(A0, kOneByteStringCid, TMP);
+  __ BranchIf(NE, &try_two_byte_string);
+  __ SmiUntag(A1);
+  __ add(A0, A0, A1);
+  __ lbu(A1, FieldAddress(A0, target::OneByteString::data_offset()));
+  __ CompareImmediate(A1, target::Symbols::kNumberOfOneCharCodeSymbols);
+  __ BranchIf(GE, normal_ir_body);
+  __ lx(A0, Address(THR, target::Thread::predefined_symbols_address_offset()));
+  __ slli(A1, A1, target::kWordSizeLog2);
+  __ add(A0, A0, A1);
+  __ lx(A0, Address(A0, target::Symbols::kNullCharCodeSymbolOffset *
+                            target::kWordSize));
+  __ ret();
+
+  __ Bind(&try_two_byte_string);
+  __ CompareClassId(A0, kTwoByteStringCid, TMP);
+  __ BranchIf(NE, normal_ir_body);
+  ASSERT(kSmiTagShift == 1);
+  __ add(A0, A0, A1);
+  __ lhu(A1, FieldAddress(A0, target::TwoByteString::data_offset()));
+  __ CompareImmediate(A1, target::Symbols::kNumberOfOneCharCodeSymbols);
+  __ BranchIf(GE, normal_ir_body);
+  __ lx(A0, Address(THR, target::Thread::predefined_symbols_address_offset()));
+  __ slli(A1, A1, target::kWordSizeLog2);
+  __ add(A0, A0, A1);
+  __ lx(A0, Address(A0, target::Symbols::kNullCharCodeSymbolOffset *
+                            target::kWordSize));
+  __ ret();
+
   __ Bind(normal_ir_body);
 }
 
 void AsmIntrinsifier::StringBaseIsEmpty(Assembler* assembler,
                                         Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  Label is_true;
+  __ lx(A0, Address(SP, 0 * target::kWordSize));
+  __ lx(A0, FieldAddress(A0, target::String::length_offset()));
+  __ beqz(A0, &is_true, Assembler::kNearJump);
+  __ LoadObject(A0, CastHandle<Object>(FalseObject()));
+  __ ret();
+  __ Bind(&is_true);
+  __ LoadObject(A0, CastHandle<Object>(TrueObject()));
+  __ ret();
 }
 
 void AsmIntrinsifier::OneByteString_getHashCode(Assembler* assembler,
                                                 Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  Label compute_hash;
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // OneByteString object.
+#if defined(HASH_IN_OBJECT_HEADER)
+  // uint32_t field in header.
+  __ lwu(A0, FieldAddress(A1, target::String::hash_offset()));
+  __ SmiTag(A0);
+#else
+  // Smi field.
+  __ lx(A0, FieldAddress(A1, target::String::hash_offset()));
+#endif
+  __ beqz(A0, &compute_hash);
+  __ ret();  // Return if already computed.
+
+  __ Bind(&compute_hash);
+  __ lx(T0, FieldAddress(A1, target::String::length_offset()));
+  __ SmiUntag(T0);
+
+  Label set_to_one, done;
+  // If the string is empty, set the hash to 1, and return.
+  __ beqz(T0, &set_to_one);
+
+  __ mv(T1, ZR);
+  __ addi(T2, A1, target::OneByteString::data_offset() - kHeapObjectTag);
+  // A1: Instance of OneByteString.
+  // T0: String length, untagged integer.
+  // T1: Loop counter, untagged integer.
+  // T2: String data.
+  // A0: Hash code, untagged integer.
+
+  Label loop;
+  // Add to hash code: (hash_ is uint32)
+  // hash_ += ch;
+  // hash_ += hash_ << 10;
+  // hash_ ^= hash_ >> 6;
+  // Get one characters (ch).
+  __ Bind(&loop);
+  __ lbu(T3, Address(T2, 0));
+  __ addi(T2, T2, 1);
+  // T3: ch.
+  __ addi(T1, T1, 1);
+#if XLEN == 32
+  __ add(A0, A0, T3);
+  __ slli(TMP, A0, 10);
+  __ add(A0, A0, TMP);
+  __ srli(TMP, A0, 6);
+#else
+  __ addw(A0, A0, T3);
+  __ slliw(TMP, A0, 10);
+  __ addw(A0, A0, TMP);
+  __ srliw(TMP, A0, 6);
+#endif
+  __ xor_(A0, A0, TMP);
+  __ bne(T1, T0, &loop);
+
+  // Finalize.
+  // hash_ += hash_ << 3;
+  // hash_ ^= hash_ >> 11;
+  // hash_ += hash_ << 15;
+#if XLEN == 32
+  __ slli(TMP, A0, 3);
+  __ add(A0, A0, TMP);
+  __ srli(TMP, A0, 11);
+  __ xor_(A0, A0, TMP);
+  __ slli(TMP, A0, 15);
+  __ add(A0, A0, TMP);
+#else
+  __ slliw(TMP, A0, 3);
+  __ addw(A0, A0, TMP);
+  __ srliw(TMP, A0, 11);
+  __ xor_(A0, A0, TMP);
+  __ slliw(TMP, A0, 15);
+  __ addw(A0, A0, TMP);
+#endif
+  // hash_ = hash_ & ((static_cast<intptr_t>(1) << bits) - 1);
+  __ AndImmediate(A0, A0,
+                  (static_cast<intptr_t>(1) << target::String::kHashBits) - 1);
+  // return hash_ == 0 ? 1 : hash_;
+  __ bnez(A0, &done, Assembler::kNearJump);
+  __ Bind(&set_to_one);
+  __ li(A0, 1);
+  __ Bind(&done);
+
+#if defined(HASH_IN_OBJECT_HEADER)
+  // A1: Untagged address of header word (lr/sc do not support offsets).
+  __ subi(A1, A1, kHeapObjectTag);
+  __ slli(A0, A0, target::UntaggedObject::kHashTagPos);
+  Label retry;
+  __ Bind(&retry);
+  __ lr(T0, Address(A1, 0));
+  __ or_(T0, T0, A0);
+  __ sc(TMP, T0, Address(A1, 0));
+  __ bnez(TMP, &retry);
+
+  __ srli(A0, A0, target::UntaggedObject::kHashTagPos);
+  __ SmiTag(A0);
+  __ ret();
+#else
+  __ SmiTag(A0);
+  __ sx(A0, FieldAddress(A1, target::String::hash_offset()));
+  __ ret();
+#endif
+}
+
+// Allocates a _OneByteString or _TwoByteString. The content is not initialized.
+// 'length-reg' (A1) contains the desired length as a _Smi or _Mint.
+// Returns new string as tagged pointer in A0.
+static void TryAllocateString(Assembler* assembler,
+                              classid_t cid,
+                              Label* ok,
+                              Label* failure) {
+  ASSERT(cid == kOneByteStringCid || cid == kTwoByteStringCid);
+  const Register length_reg = A1;
+  // _Mint length: call to runtime to produce error.
+  __ BranchIfNotSmi(length_reg, failure);
+  // negative length: call to runtime to produce error.
+  __ bltz(length_reg, failure);
+
+  NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, TMP, failure));
+  __ mv(T0, length_reg);  // Save the length register.
+  if (cid == kOneByteStringCid) {
+    // Untag length.
+    __ SmiUntag(length_reg);
+  } else {
+    // Untag length and multiply by element size -> no-op.
+    ASSERT(kSmiTagSize == 1);
+  }
+  const intptr_t fixed_size_plus_alignment_padding =
+      target::String::InstanceSize() +
+      target::ObjectAlignment::kObjectAlignment - 1;
+  __ addi(length_reg, length_reg, fixed_size_plus_alignment_padding);
+  __ andi(length_reg, length_reg,
+          ~(target::ObjectAlignment::kObjectAlignment - 1));
+
+  __ lx(A0, Address(THR, target::Thread::top_offset()));
+
+  // length_reg: allocation size.
+  __ add(T1, A0, length_reg);
+  __ bltu(T1, A0, failure);  // Fail on unsigned overflow.
+
+  // Check if the allocation fits into the remaining space.
+  // A0: potential new object start.
+  // T1: potential next object start.
+  // A1: allocation size.
+  __ lx(TMP, Address(THR, target::Thread::end_offset()));
+  __ bgtu(T1, TMP, failure);
+
+  // Successfully allocated the object(s), now update top to point to
+  // next object start and initialize the object.
+  __ sx(T1, Address(THR, target::Thread::top_offset()));
+  __ AddImmediate(A0, kHeapObjectTag);
+
+  // Initialize the tags.
+  // A0: new object start as a tagged pointer.
+  // T1: new object end address.
+  // A1: allocation size.
+  {
+    const intptr_t shift = target::UntaggedObject::kTagBitsSizeTagPos -
+                           target::ObjectAlignment::kObjectAlignmentLog2;
+
+    __ CompareImmediate(A1, target::UntaggedObject::kSizeTagMaxSizeTag);
+    Label dont_zero_tag;
+    __ BranchIf(UNSIGNED_LESS_EQUAL, &dont_zero_tag);
+    __ li(A1, 0);
+    __ Bind(&dont_zero_tag);
+    __ slli(A1, A1, shift);
+
+    // Get the class index and insert it into the tags.
+    // A1: size and bit tags.
+    // This also clears the hash, which is in the high word of the tags.
+    const uword tags =
+        target::MakeTagWordForNewSpaceObject(cid, /*instance_size=*/0);
+    __ OrImmediate(A1, A1, tags);
+    __ sx(A1, FieldAddress(A0, target::Object::tags_offset()));  // Store tags.
+  }
+
+  // Set the length field using the saved length (T0).
+  __ StoreIntoObjectNoBarrier(
+      A0, FieldAddress(A0, target::String::length_offset()), T0);
+#if !defined(HASH_IN_OBJECT_HEADER)
+  // Clear hash.
+  __ StoreIntoObjectNoBarrier(
+      A0, FieldAddress(A0, target::String::hash_offset()), ZR);
+#endif
+  __ j(ok);
 }
 
 // Arg0: OneByteString (receiver).
@@ -573,7 +1585,53 @@
 // The indexes must be valid.
 void AsmIntrinsifier::OneByteString_substringUnchecked(Assembler* assembler,
                                                        Label* normal_ir_body) {
-  // TODO(riscv)
+  const intptr_t kStringOffset = 2 * target::kWordSize;
+  const intptr_t kStartIndexOffset = 1 * target::kWordSize;
+  const intptr_t kEndIndexOffset = 0 * target::kWordSize;
+  Label ok;
+
+  __ lx(T0, Address(SP, kEndIndexOffset));
+  __ lx(TMP, Address(SP, kStartIndexOffset));
+  __ or_(T1, T0, TMP);
+  __ BranchIfNotSmi(T1, normal_ir_body);  // 'start', 'end' not Smi.
+
+  __ sub(A1, T0, TMP);
+  TryAllocateString(assembler, kOneByteStringCid, &ok, normal_ir_body);
+  __ Bind(&ok);
+  // A0: new string as tagged pointer.
+  // Copy string.
+  __ lx(T1, Address(SP, kStringOffset));
+  __ lx(T2, Address(SP, kStartIndexOffset));
+  __ SmiUntag(T2);
+  // Calculate start address.
+  __ add(T1, T1, T2);
+
+  // T1: Start address to copy from.
+  // T2: Untagged start index.
+  __ lx(T0, Address(SP, kEndIndexOffset));
+  __ SmiUntag(T0);
+  __ sub(T0, T0, T2);
+
+  // T1: Start address to copy from (untagged).
+  // T0: Untagged number of bytes to copy.
+  // A0: Tagged result string.
+  // T3: Pointer into T1.
+  // T4: Pointer into A0.
+  // T2: Scratch register.
+  Label loop, done;
+  __ blez(T0, &done, Assembler::kNearJump);
+  __ mv(T3, T1);
+  __ mv(T4, A0);
+  __ Bind(&loop);
+  __ subi(T0, T0, 1);
+  __ lbu(T2, FieldAddress(T3, target::OneByteString::data_offset()));
+  __ addi(T3, T3, 1);
+  __ sb(T2, FieldAddress(T4, target::OneByteString::data_offset()));
+  __ addi(T4, T4, 1);
+  __ bgtz(T0, &loop);
+
+  __ Bind(&done);
+  __ ret();
   __ Bind(normal_ir_body);
 }
 
@@ -603,13 +1661,27 @@
 
 void AsmIntrinsifier::AllocateOneByteString(Assembler* assembler,
                                             Label* normal_ir_body) {
-  // TODO(riscv)
+  Label ok;
+
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // Length.
+  TryAllocateString(assembler, kOneByteStringCid, &ok, normal_ir_body);
+
+  __ Bind(&ok);
+  __ ret();
+
   __ Bind(normal_ir_body);
 }
 
 void AsmIntrinsifier::AllocateTwoByteString(Assembler* assembler,
                                             Label* normal_ir_body) {
-  // TODO(riscv)
+  Label ok;
+
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // Length.
+  TryAllocateString(assembler, kTwoByteStringCid, &ok, normal_ir_body);
+
+  __ Bind(&ok);
+  __ ret();
+
   __ Bind(normal_ir_body);
 }
 
@@ -617,7 +1689,52 @@
 static void StringEquality(Assembler* assembler,
                            Label* normal_ir_body,
                            intptr_t string_cid) {
-  // TODO(riscv)
+  Label is_true, is_false, loop;
+  __ lx(A0, Address(SP, 1 * target::kWordSize));  // This.
+  __ lx(A1, Address(SP, 0 * target::kWordSize));  // Other.
+
+  // Are identical?
+  __ beq(A0, A1, &is_true, Assembler::kNearJump);
+
+  // Is other OneByteString?
+  __ BranchIfSmi(A1, normal_ir_body, Assembler::kNearJump);
+  __ CompareClassId(A1, string_cid, TMP);
+  __ BranchIf(NE, normal_ir_body, Assembler::kNearJump);
+
+  // Have same length?
+  __ lx(T2, FieldAddress(A0, target::String::length_offset()));
+  __ lx(T3, FieldAddress(A1, target::String::length_offset()));
+  __ bne(T2, T3, &is_false, Assembler::kNearJump);
+
+  // Check contents, no fall-through possible.
+  __ SmiUntag(T2);
+  __ Bind(&loop);
+  __ AddImmediate(T2, -1);
+  __ bltz(T2, &is_true, Assembler::kNearJump);
+  if (string_cid == kOneByteStringCid) {
+    __ lbu(TMP, FieldAddress(A0, target::OneByteString::data_offset()));
+    __ lbu(TMP2, FieldAddress(A1, target::OneByteString::data_offset()));
+    __ addi(A0, A0, 1);
+    __ addi(A1, A1, 1);
+  } else if (string_cid == kTwoByteStringCid) {
+    __ lhu(TMP, FieldAddress(A0, target::TwoByteString::data_offset()));
+    __ lhu(TMP2, FieldAddress(A1, target::TwoByteString::data_offset()));
+    __ addi(A0, A0, 2);
+    __ addi(A1, A1, 2);
+  } else {
+    UNIMPLEMENTED();
+  }
+  __ bne(TMP, TMP2, &is_false, Assembler::kNearJump);
+  __ j(&loop);
+
+  __ Bind(&is_true);
+  __ LoadObject(A0, CastHandle<Object>(TrueObject()));
+  __ ret();
+
+  __ Bind(&is_false);
+  __ LoadObject(A0, CastHandle<Object>(FalseObject()));
+  __ ret();
+
   __ Bind(normal_ir_body);
 }
 
@@ -645,7 +1762,7 @@
   // S4: Arguments descriptor. (Will be preserved.)
   // S5: Unknown. (Must be GC safe on tail call.)
 
-  // Load the specialized function pointer into R0. Leverage the fact the
+  // Load the specialized function pointer into T0. Leverage the fact the
   // string CIDs as well as stored function pointers are in sequence.
   __ lx(T2, Address(SP, kRegExpParamOffset));
   __ lx(T1, Address(SP, kStringParamOffset));
@@ -657,7 +1774,7 @@
                                                              sticky)));
 
   // Registers are now set up for the lazy compile stub. It expects the function
-  // in R0, the argument descriptor in R4, and IC-Data in R5.
+  // in T0, the argument descriptor in S4, and IC-Data in S5.
   __ li(S5, 0);
 
   // Tail-call the function.
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 0a47313..4abdfe1 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1816,7 +1816,7 @@
   __ Bind(&loop);
   __ movzxb(RBX, Address(RSI, RDX, TIMES_1, 0));
   __ movb(FieldAddress(RAX, RDX, TIMES_1, target::OneByteString::data_offset()),
-          RBX);
+          ByteRegisterOf(RBX));
   __ incq(RDX);
   __ Bind(&check);
   __ cmpq(RDX, RCX);
@@ -1833,7 +1833,7 @@
   __ SmiUntag(RBX);
   __ SmiUntag(RCX);
   __ movb(FieldAddress(RAX, RBX, TIMES_1, target::OneByteString::data_offset()),
-          RCX);
+          ByteRegisterOf(RCX));
   __ ret();
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 61bdd45..795745a 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -12,6 +12,7 @@
 #include "vm/compiler/backend/locations.h"
 #include "vm/cpu.h"
 #include "vm/instructions.h"
+#include "vm/tags.h"
 
 // An extra check since we are assuming the existence of /proc/cpuinfo below.
 #if !defined(USING_SIMULATOR) && !defined(__linux__) && !defined(ANDROID) &&   \
@@ -2727,11 +2728,6 @@
   BranchLink(target, ObjectPoolBuilderEntry::kPatchable, entry_kind);
 }
 
-void Assembler::BranchLinkToRuntime() {
-  ldr(IP, Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
-  blx(IP);
-}
-
 void Assembler::BranchLinkWithEquivalence(const Code& target,
                                           const Object& equivalence,
                                           CodeEntryKind entry_kind) {
@@ -3269,63 +3265,92 @@
 #endif
 }
 
-void Assembler::EnterCallRuntimeFrame(intptr_t frame_space) {
-  Comment("EnterCallRuntimeFrame");
-  // Preserve volatile CPU registers and PP.
-  SPILLS_LR_TO_FRAME(
-      EnterFrame(kDartVolatileCpuRegs | (1 << PP) | (1 << FP) | (1 << LR), 0));
-  COMPILE_ASSERT((kDartVolatileCpuRegs & (1 << PP)) == 0);
-
-  // Preserve all volatile FPU registers.
-    DRegister firstv = EvenDRegisterOf(kDartFirstVolatileFpuReg);
-    DRegister lastv = OddDRegisterOf(kDartLastVolatileFpuReg);
-    if ((lastv - firstv + 1) >= 16) {
-      DRegister mid = static_cast<DRegister>(firstv + 16);
-      vstmd(DB_W, SP, mid, lastv - mid + 1);
-      vstmd(DB_W, SP, firstv, 16);
-    } else {
-      vstmd(DB_W, SP, firstv, lastv - firstv + 1);
-    }
-
-  ReserveAlignedFrameSpace(frame_space);
-}
-
-void Assembler::LeaveCallRuntimeFrame() {
-  // SP might have been modified to reserve space for arguments
-  // and ensure proper alignment of the stack frame.
-  // We need to restore it before restoring registers.
-  const intptr_t kPushedFpuRegisterSize =
-      kDartVolatileFpuRegCount * kFpuRegisterSize;
-
-  COMPILE_ASSERT(PP < FP);
-  COMPILE_ASSERT((kDartVolatileCpuRegs & (1 << PP)) == 0);
-  // kVolatileCpuRegCount +1 for PP, -1 because even though LR is volatile,
-  // it is pushed ahead of FP.
-  const intptr_t kPushedRegistersSize =
-      kDartVolatileCpuRegCount * target::kWordSize + kPushedFpuRegisterSize;
-  AddImmediate(SP, FP, -kPushedRegistersSize);
-
-  // Restore all volatile FPU registers.
-    DRegister firstv = EvenDRegisterOf(kDartFirstVolatileFpuReg);
-    DRegister lastv = OddDRegisterOf(kDartLastVolatileFpuReg);
-    if ((lastv - firstv + 1) >= 16) {
-      DRegister mid = static_cast<DRegister>(firstv + 16);
-      vldmd(IA_W, SP, firstv, 16);
-      vldmd(IA_W, SP, mid, lastv - mid + 1);
-    } else {
-      vldmd(IA_W, SP, firstv, lastv - firstv + 1);
-    }
-
-  // Restore volatile CPU registers.
-  RESTORES_LR_FROM_FRAME(
-      LeaveFrame(kDartVolatileCpuRegs | (1 << PP) | (1 << FP) | (1 << LR)));
-}
-
 void Assembler::CallRuntime(const RuntimeEntry& entry,
                             intptr_t argument_count) {
-  entry.Call(this, argument_count);
+  ASSERT(!entry.is_leaf());
+  // Argument count is not checked here, but in the runtime entry for a more
+  // informative error message.
+  LoadFromOffset(R9, THR, entry.OffsetFromThread());
+  LoadImmediate(R4, argument_count);
+  ldr(IP, Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
+  blx(IP);
 }
 
+// For use by LR related macros (e.g. CLOBBERS_LR).
+#undef __
+#define __ assembler_->
+
+#if defined(VFPv3_D32)
+static const RegisterSet kVolatileFpuRegisters(0, 0xFF0F);  // Q0-Q3, Q8-Q15
+#else
+static const RegisterSet kVolatileFpuRegisters(0, 0x000F);  // Q0-Q3
+#endif
+
+LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
+                                   intptr_t frame_size,
+                                   bool preserve_registers)
+    : assembler_(assembler), preserve_registers_(preserve_registers) {
+  __ Comment("EnterCallRuntimeFrame");
+  if (preserve_registers) {
+    // Preserve volatile CPU registers and PP.
+    SPILLS_LR_TO_FRAME(__ EnterFrame(
+        kDartVolatileCpuRegs | (1 << PP) | (1 << FP) | (1 << LR), 0));
+    COMPILE_ASSERT((kDartVolatileCpuRegs & (1 << PP)) == 0);
+
+    __ PushRegisters(kVolatileFpuRegisters);
+  } else {
+    SPILLS_LR_TO_FRAME(__ EnterFrame((1 << FP) | (1 << LR), 0));
+    // These registers must always be preserved.
+    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+    COMPILE_ASSERT(IsCalleeSavedRegister(PP));
+    COMPILE_ASSERT(IsCalleeSavedRegister(CODE_REG));
+  }
+
+  __ ReserveAlignedFrameSpace(frame_size);
+}
+
+void LeafRuntimeScope::Call(const RuntimeEntry& entry,
+                            intptr_t argument_count) {
+  ASSERT(argument_count == entry.argument_count());
+  __ LoadFromOffset(TMP, THR, entry.OffsetFromThread());
+  __ str(TMP,
+         compiler::Address(THR, compiler::target::Thread::vm_tag_offset()));
+  __ blx(TMP);
+  __ LoadImmediate(TMP, VMTag::kDartTagId);
+  __ str(TMP,
+         compiler::Address(THR, compiler::target::Thread::vm_tag_offset()));
+}
+
+LeafRuntimeScope::~LeafRuntimeScope() {
+  if (preserve_registers_) {
+    // SP might have been modified to reserve space for arguments
+    // and ensure proper alignment of the stack frame.
+    // We need to restore it before restoring registers.
+    const intptr_t kPushedFpuRegisterSize =
+        kVolatileFpuRegisters.FpuRegisterCount() * kFpuRegisterSize;
+
+    COMPILE_ASSERT(PP < FP);
+    COMPILE_ASSERT((kDartVolatileCpuRegs & (1 << PP)) == 0);
+    // kVolatileCpuRegCount +1 for PP, -1 because even though LR is volatile,
+    // it is pushed ahead of FP.
+    const intptr_t kPushedRegistersSize =
+        kDartVolatileCpuRegCount * target::kWordSize + kPushedFpuRegisterSize;
+    __ AddImmediate(SP, FP, -kPushedRegistersSize);
+
+    __ PopRegisters(kVolatileFpuRegisters);
+
+    // Restore volatile CPU registers.
+    RESTORES_LR_FROM_FRAME(__ LeaveFrame(kDartVolatileCpuRegs | (1 << PP) |
+                                         (1 << FP) | (1 << LR)));
+  } else {
+    RESTORES_LR_FROM_FRAME(__ LeaveFrame((1 << FP) | (1 << LR)));
+  }
+}
+
+// For use by LR related macros (e.g. CLOBBERS_LR).
+#undef __
+#define __ this->
+
 void Assembler::EnterDartFrame(intptr_t frame_size, bool load_pool_pointer) {
   ASSERT(!constant_pool_allowed());
 
@@ -3396,6 +3421,10 @@
 }
 
 void Assembler::EnterCFrame(intptr_t frame_space) {
+  // Already saved.
+  COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+  COMPILE_ASSERT(IsCalleeSavedRegister(PP));
+
   EnterFrame(1 << FP, 0);
   ReserveAlignedFrameSpace(frame_space);
 }
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 78bb68e..877820a 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -776,7 +776,6 @@
                   ObjectPoolBuilderEntry::Patchability patchable =
                       ObjectPoolBuilderEntry::kNotPatchable,
                   CodeEntryKind entry_kind = CodeEntryKind::kNormal);
-  void BranchLinkToRuntime();
 
   // Branch and link to an entry address. Call sequence can be patched.
   void BranchLinkPatchable(const Code& code,
@@ -1259,12 +1258,7 @@
   // Requires a scratch register in addition to the assembler temporary.
   void EmitEntryFrameVerification(Register scratch);
 
-  // Create a frame for calling into runtime that preserves all volatile
-  // registers.  Frame's SP is guaranteed to be correctly aligned and
-  // frame_space bytes are reserved under it.
-  void EnterCallRuntimeFrame(intptr_t frame_space);
-  void LeaveCallRuntimeFrame();
-
+  // For non-leaf runtime calls. For leaf runtime calls, use LeafRuntimeScope,
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
 
   // Set up a Dart frame on entry with a frame pointer and PC information to
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 1212928..e2b39f7 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -12,6 +12,7 @@
 #include "vm/cpu.h"
 #include "vm/instructions.h"
 #include "vm/simulator.h"
+#include "vm/tags.h"
 
 namespace dart {
 
@@ -255,17 +256,15 @@
 
 #if defined(USING_THREAD_SANITIZER)
 void Assembler::TsanLoadAcquire(Register addr) {
-  EnterCallRuntimeFrame(/*frame_size=*/0, /*is_leaf=*/true);
-  ASSERT(kTsanLoadAcquireRuntimeEntry.is_leaf());
-  CallRuntime(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
-  LeaveCallRuntimeFrame(/*is_leaf=*/true);
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+  MoveRegister(R0, addr);
+  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
 }
 
 void Assembler::TsanStoreRelease(Register addr) {
-  EnterCallRuntimeFrame(/*frame_size=*/0, /*is_leaf=*/true);
-  ASSERT(kTsanStoreReleaseRuntimeEntry.is_leaf());
-  CallRuntime(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
-  LeaveCallRuntimeFrame(/*is_leaf=*/true);
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+  MoveRegister(R0, addr);
+  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
 }
 #endif
 
@@ -706,10 +705,6 @@
   Call(FieldAddress(CODE_REG, target::Code::entry_point_offset(entry_kind)));
 }
 
-void Assembler::BranchLinkToRuntime() {
-  Call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
-}
-
 void Assembler::BranchLinkWithEquivalence(const Code& target,
                                           const Object& equivalence,
                                           CodeEntryKind entry_kind) {
@@ -1615,6 +1610,10 @@
   // frames before doing an overflow check.)
   ldr(TMP, Address(thr, target::Thread::saved_stack_limit_offset()));
   AddImmediate(CSP, TMP, -4096);
+
+  // TODO(47824): This will probably cause signal handlers on Windows to crash.
+  // Windows requires the stack to grow in order, one page at a time, but
+  // pushing CSP to near the stack limit likely skips over many pages.
 }
 
 void Assembler::RestoreCSP() {
@@ -1820,110 +1819,83 @@
   StoreToOffset(state, THR, target::Thread::exit_through_ffi_offset());
 }
 
-void Assembler::EnterCallRuntimeFrame(intptr_t frame_size, bool is_leaf) {
-  Comment("EnterCallRuntimeFrame");
-  EnterFrame(0);
-  if (!FLAG_precompiled_mode) {
-    TagAndPushPPAndPcMarker();  // Save PP and PC marker.
-  }
-
-  // Store fpu registers with the lowest register number at the lowest
-  // address.
-  for (int i = kNumberOfVRegisters - 1; i >= 0; i--) {
-    if ((i >= kAbiFirstPreservedFpuReg) && (i <= kAbiLastPreservedFpuReg)) {
-      // TODO(zra): When SIMD is added, we must also preserve the top
-      // 64-bits of the callee-saved registers.
-      continue;
-    }
-    // TODO(zra): Save the whole V register.
-    VRegister reg = static_cast<VRegister>(i);
-    PushDouble(reg);
-  }
-
-  for (int i = kDartFirstVolatileCpuReg; i <= kDartLastVolatileCpuReg; i++) {
-    const Register reg = static_cast<Register>(i);
-    Push(reg);
-  }
-
-  if (!is_leaf) {  // Leaf calling sequence aligns the stack itself.
-    ReserveAlignedFrameSpace(frame_size);
-  } else {
-    PushPair(kCallLeafRuntimeCalleeSaveScratch1,
-             kCallLeafRuntimeCalleeSaveScratch2);
-  }
-}
-
-void Assembler::LeaveCallRuntimeFrame(bool is_leaf) {
-  // SP might have been modified to reserve space for arguments
-  // and ensure proper alignment of the stack frame.
-  // We need to restore it before restoring registers.
-  const intptr_t fixed_frame_words_without_pc_and_fp =
-      target::frame_layout.dart_fixed_frame_size - 2;
-  const intptr_t kPushedRegistersSize =
-      kDartVolatileFpuRegCount * sizeof(double) +
-      (kDartVolatileCpuRegCount + (is_leaf ? 2 : 0) +
-       fixed_frame_words_without_pc_and_fp) *
-          target::kWordSize;
-  AddImmediate(SP, FP, -kPushedRegistersSize);
-  if (is_leaf) {
-    PopPair(kCallLeafRuntimeCalleeSaveScratch1,
-            kCallLeafRuntimeCalleeSaveScratch2);
-  }
-  for (int i = kDartLastVolatileCpuReg; i >= kDartFirstVolatileCpuReg; i--) {
-    const Register reg = static_cast<Register>(i);
-    Pop(reg);
-  }
-
-  for (int i = 0; i < kNumberOfVRegisters; i++) {
-    if ((i >= kAbiFirstPreservedFpuReg) && (i <= kAbiLastPreservedFpuReg)) {
-      // TODO(zra): When SIMD is added, we must also restore the top
-      // 64-bits of the callee-saved registers.
-      continue;
-    }
-    // TODO(zra): Restore the whole V register.
-    VRegister reg = static_cast<VRegister>(i);
-    PopDouble(reg);
-  }
-
-  LeaveStubFrame();
-}
-
 void Assembler::CallRuntime(const RuntimeEntry& entry,
                             intptr_t argument_count) {
-  entry.Call(this, argument_count);
+  ASSERT(!entry.is_leaf());
+  // Argument count is not checked here, but in the runtime entry for a more
+  // informative error message.
+  ldr(R5, compiler::Address(THR, entry.OffsetFromThread()));
+  LoadImmediate(R4, argument_count);
+  Call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
 }
 
-void Assembler::CallRuntimeScope::Call(intptr_t argument_count) {
-  assembler_->CallRuntime(entry_, argument_count);
-}
+// FPU: Only the bottom 64-bits of v8-v15 are preserved by the caller. The upper
+// bits might be in use by Dart, so we save the whole register.
+static const RegisterSet kRuntimeCallSavedRegisters(kDartVolatileCpuRegs,
+                                                    kAllFpuRegistersList);
 
-Assembler::CallRuntimeScope::~CallRuntimeScope() {
-  if (preserve_registers_) {
-    assembler_->LeaveCallRuntimeFrame(entry_.is_leaf());
-    if (restore_code_reg_) {
-      assembler_->Pop(CODE_REG);
-    }
+#undef __
+#define __ assembler_->
+
+LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
+                                   intptr_t frame_size,
+                                   bool preserve_registers)
+    : assembler_(assembler), preserve_registers_(preserve_registers) {
+  __ Comment("EnterCallRuntimeFrame");
+  __ EnterFrame(0);
+
+  if (preserve_registers) {
+    __ PushRegisters(kRuntimeCallSavedRegisters);
+  } else {
+    // These registers must always be preserved.
+    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+    COMPILE_ASSERT(IsCalleeSavedRegister(PP));
+    COMPILE_ASSERT(IsCalleeSavedRegister(CODE_REG));
+    COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
+    COMPILE_ASSERT(IsCalleeSavedRegister(HEAP_BITS));
+    COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
   }
+
+  __ ReserveAlignedFrameSpace(frame_size);
 }
 
-Assembler::CallRuntimeScope::CallRuntimeScope(Assembler* assembler,
-                                              const RuntimeEntry& entry,
-                                              intptr_t frame_size,
-                                              bool preserve_registers,
-                                              const Address* caller)
-    : assembler_(assembler),
-      entry_(entry),
-      preserve_registers_(preserve_registers),
-      restore_code_reg_(caller != nullptr) {
-  if (preserve_registers_) {
-    if (caller != nullptr) {
-      assembler_->Push(CODE_REG);
-      assembler_->ldr(CODE_REG, *caller);
-    }
-    assembler_->EnterCallRuntimeFrame(frame_size, entry.is_leaf());
-  }
+void LeafRuntimeScope::Call(const RuntimeEntry& entry,
+                            intptr_t argument_count) {
+  ASSERT(argument_count == entry.argument_count());
+  // Since we are entering C++ code, we must restore the C stack pointer from
+  // the stack limit to an aligned value nearer to the top of the stack.
+  // We cache the stack limit in callee-saved registers, then align and call,
+  // restoring CSP and SP on return from the call.
+  // This sequence may occur in an intrinsic, so don't use registers an
+  // intrinsic must preserve.
+  __ mov(CSP, SP);
+  __ ldr(TMP, compiler::Address(THR, entry.OffsetFromThread()));
+  __ str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  __ blr(TMP);
+  __ LoadImmediate(TMP, VMTag::kDartTagId);
+  __ str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  __ SetupCSPFromThread(THR);
 }
 
+LeafRuntimeScope::~LeafRuntimeScope() {
+  if (preserve_registers_) {
+    // SP might have been modified to reserve space for arguments
+    // and ensure proper alignment of the stack frame.
+    // We need to restore it before restoring registers.
+    const intptr_t kPushedRegistersSize =
+        kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize +
+        kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize;
+    __ AddImmediate(SP, FP, -kPushedRegistersSize);
+    __ PopRegisters(kRuntimeCallSavedRegisters);
+  }
+
+  __ LeaveFrame();
+}
+
+// For use by LR related macros (e.g. CLOBBERS_LR).
+#undef __
+#define __ this->
+
 void Assembler::EnterStubFrame() {
   EnterDartFrame(0);
 }
@@ -1933,6 +1905,13 @@
 }
 
 void Assembler::EnterCFrame(intptr_t frame_space) {
+  // Already saved.
+  COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+  COMPILE_ASSERT(IsCalleeSavedRegister(PP));
+  COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
+  COMPILE_ASSERT(IsCalleeSavedRegister(HEAP_BITS));
+  COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
+
   Push(FP);
   mov(FP, SP);
   ReserveAlignedFrameSpace(frame_space);
@@ -2298,17 +2277,23 @@
 }
 
 void Assembler::PushRegisters(const RegisterSet& regs) {
-  const intptr_t fpu_regs_count = regs.FpuRegisterCount();
-  if (fpu_regs_count > 0) {
-    // Store fpu registers with the lowest register number at the lowest
-    // address.
-    for (intptr_t i = kNumberOfVRegisters - 1; i >= 0; --i) {
-      VRegister fpu_reg = static_cast<VRegister>(i);
-      if (regs.ContainsFpuRegister(fpu_reg)) {
-        PushQuad(fpu_reg);
+  VRegister vprev = kNoVRegister;
+  // Store fpu registers with the lowest register number at the lowest
+  // address.
+  for (intptr_t i = kNumberOfVRegisters - 1; i >= 0; --i) {
+    VRegister fpu_reg = static_cast<VRegister>(i);
+    if (regs.ContainsFpuRegister(fpu_reg)) {
+      if (vprev != kNoVRegister) {
+        PushQuadPair(/*low=*/fpu_reg, /*high=*/vprev);
+        vprev = kNoVRegister;
+      } else {
+        vprev = fpu_reg;
       }
     }
   }
+  if (vprev != kNoVRegister) {
+    PushQuad(vprev);
+  }
 
   // The order in which the registers are pushed must match the order
   // in which the registers are encoded in the safe point's stack map.
@@ -2350,50 +2335,98 @@
   }
   ASSERT(prev == kNoRegister);
 
-  const intptr_t fpu_regs_count = regs.FpuRegisterCount();
-  if (fpu_regs_count > 0) {
-    // Fpu registers have the lowest register number at the lowest address.
-    for (intptr_t i = 0; i < kNumberOfVRegisters; ++i) {
-      VRegister fpu_reg = static_cast<VRegister>(i);
-      if (regs.ContainsFpuRegister(fpu_reg)) {
+  pop_single = (regs.FpuRegisterCount() & 1) == 1;
+  VRegister vprev = kNoVRegister;
+  // Fpu registers have the lowest register number at the lowest address.
+  for (intptr_t i = 0; i < kNumberOfVRegisters; ++i) {
+    VRegister fpu_reg = static_cast<VRegister>(i);
+    if (regs.ContainsFpuRegister(fpu_reg)) {
+      if (pop_single) {
         PopQuad(fpu_reg);
+        pop_single = false;
+      } else if (vprev != kNoVRegister) {
+        PopQuadPair(/*low=*/vprev, /*high=*/fpu_reg);
+        vprev = kNoVRegister;
+      } else {
+        vprev = fpu_reg;
       }
     }
   }
+  ASSERT(vprev == kNoVRegister);
 }
 
 void Assembler::PushNativeCalleeSavedRegisters() {
   // Save the callee-saved registers.
+  // We use str instead of the Push macro because we will be pushing the PP
+  // register when it is not holding a pool-pointer since we are coming from
+  // C++ code.
+  Register prev = kNoRegister;
   for (int i = kAbiFirstPreservedCpuReg; i <= kAbiLastPreservedCpuReg; i++) {
     const Register r = static_cast<Register>(i);
-    // We use str instead of the Push macro because we will be pushing the PP
-    // register when it is not holding a pool-pointer since we are coming from
-    // C++ code.
-    str(r, Address(SP, -1 * target::kWordSize, Address::PreIndex));
+    if (prev != kNoRegister) {
+      stp(/*low=*/r, /*high=*/prev,
+          Address(SP, -2 * target::kWordSize, Address::PairPreIndex));
+      prev = kNoRegister;
+    } else {
+      prev = r;
+    }
+  }
+  if (prev != kNoRegister) {
+    str(prev, Address(SP, -1 * target::kWordSize, Address::PreIndex));
   }
 
   // Save the bottom 64-bits of callee-saved V registers.
+  VRegister vprev = kNoVRegister;
   for (int i = kAbiFirstPreservedFpuReg; i <= kAbiLastPreservedFpuReg; i++) {
     const VRegister r = static_cast<VRegister>(i);
-    PushDouble(r);
+    if (vprev != kNoVRegister) {
+      PushDoublePair(/*low=*/r, /*high=*/vprev);
+      vprev = kNoVRegister;
+    } else {
+      vprev = r;
+    }
+  }
+  if (vprev != kNoVRegister) {
+    PushDouble(vprev);
   }
 }
 
 void Assembler::PopNativeCalleeSavedRegisters() {
   // Restore the bottom 64-bits of callee-saved V registers.
+  bool pop_single = (kAbiPreservedFpuRegCount & 1) == 1;
+  VRegister vprev = kNoVRegister;
   for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) {
     const VRegister r = static_cast<VRegister>(i);
-    PopDouble(r);
+    if (pop_single) {
+      PopDouble(r);
+      pop_single = false;
+    } else if (vprev != kNoVRegister) {
+      PopDoublePair(/*low=*/vprev, /*high=*/r);
+      vprev = kNoVRegister;
+    } else {
+      vprev = r;
+    }
   }
 
   // Restore C++ ABI callee-saved registers.
+  // We use ldr instead of the Pop macro because we will be popping the PP
+  // register when it is not holding a pool-pointer since we are returning to
+  // C++ code. We also skip the dart stack pointer SP, since we are still
+  // using it as the stack pointer.
+  pop_single = (kAbiPreservedCpuRegCount & 1) == 1;
+  Register prev = kNoRegister;
   for (int i = kAbiLastPreservedCpuReg; i >= kAbiFirstPreservedCpuReg; i--) {
     Register r = static_cast<Register>(i);
-    // We use ldr instead of the Pop macro because we will be popping the PP
-    // register when it is not holding a pool-pointer since we are returning to
-    // C++ code. We also skip the dart stack pointer SP, since we are still
-    // using it as the stack pointer.
-    ldr(r, Address(SP, 1 * target::kWordSize, Address::PostIndex));
+    if (pop_single) {
+      ldr(r, Address(SP, 1 * target::kWordSize, Address::PostIndex));
+      pop_single = false;
+    } else if (prev != kNoRegister) {
+      ldp(/*low=*/prev, /*high=*/r,
+          Address(SP, 2 * target::kWordSize, Address::PairPostIndex));
+      prev = kNoRegister;
+    } else {
+      prev = r;
+    }
   }
 }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index a1126ec..b5ed07b 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -1129,6 +1129,18 @@
            (a.type() == Address::PairPreIndex));
     EmitLoadStoreRegPair(STP, rt, rt2, a, sz);
   }
+  void fldp(VRegister rt, VRegister rt2, Address a, OperandSize sz) {
+    ASSERT((a.type() == Address::PairOffset) ||
+           (a.type() == Address::PairPostIndex) ||
+           (a.type() == Address::PairPreIndex));
+    EmitLoadStoreVRegPair(FLDP, rt, rt2, a, sz);
+  }
+  void fstp(VRegister rt, VRegister rt2, Address a, OperandSize sz) {
+    ASSERT((a.type() == Address::PairOffset) ||
+           (a.type() == Address::PairPostIndex) ||
+           (a.type() == Address::PairPreIndex));
+    EmitLoadStoreVRegPair(FSTP, rt, rt2, a, sz);
+  }
 
   void ldxr(Register rt, Register rn, OperandSize size = kEightBytes) {
     // rt = value
@@ -1619,6 +1631,22 @@
   void PopQuad(VRegister reg) {
     fldrq(reg, Address(SP, 1 * kQuadSize, Address::PostIndex));
   }
+  void PushDoublePair(VRegister low, VRegister high) {
+    fstp(low, high,
+         Address(SP, -2 * kDoubleSize, Address::PairPreIndex, kDWord), kDWord);
+  }
+  void PopDoublePair(VRegister low, VRegister high) {
+    fldp(low, high,
+         Address(SP, 2 * kDoubleSize, Address::PairPostIndex, kDWord), kDWord);
+  }
+  void PushQuadPair(VRegister low, VRegister high) {
+    fstp(low, high, Address(SP, -2 * kQuadSize, Address::PairPreIndex, kQWord),
+         kQWord);
+  }
+  void PopQuadPair(VRegister low, VRegister high) {
+    fldp(low, high, Address(SP, 2 * kQuadSize, Address::PairPostIndex, kQWord),
+         kQWord);
+  }
   void TagAndPushPP() {
     // Add the heap object tag back to PP before putting it on the stack.
     add(TMP, PP, Operand(kHeapObjectTag));
@@ -1724,7 +1752,6 @@
                            CodeEntryKind entry_kind = CodeEntryKind::kNormal) {
     BranchLink(code, ObjectPoolBuilderEntry::kPatchable, entry_kind);
   }
-  void BranchLinkToRuntime();
 
   // Emit a call that shares its object pool entries with other calls
   // that have the same equivalence marker.
@@ -2073,51 +2100,9 @@
   void EnterOsrFrame(intptr_t extra_size, Register new_pp = kNoRegister);
   void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP);
 
+  // For non-leaf runtime calls. For leaf runtime calls, use LeafRuntimeScope,
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
 
-  // Helper method for performing runtime calls from callers requiring manual
-  // register preservation is required (e.g. outside IL instructions marked
-  // as calling).
-  class CallRuntimeScope : public ValueObject {
-   public:
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     bool preserve_registers = true)
-        : CallRuntimeScope(assembler,
-                           entry,
-                           frame_size,
-                           preserve_registers,
-                           /*caller=*/nullptr) {}
-
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     Address caller,
-                     bool preserve_registers = true)
-        : CallRuntimeScope(assembler,
-                           entry,
-                           frame_size,
-                           preserve_registers,
-                           &caller) {}
-
-    void Call(intptr_t argument_count);
-
-    ~CallRuntimeScope();
-
-   private:
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     bool preserve_registers,
-                     const Address* caller);
-
-    Assembler* const assembler_;
-    const RuntimeEntry& entry_;
-    const bool preserve_registers_;
-    const bool restore_code_reg_;
-  };
-
   // Set up a stub frame so that the stack traversal code can easily identify
   // a stub frame.
   void EnterStubFrame();
@@ -2744,6 +2729,35 @@
     Emit(encoding);
   }
 
+  void EmitLoadStoreVRegPair(LoadStoreRegPairOp op,
+                             VRegister rt,
+                             VRegister rt2,
+                             Address a,
+                             OperandSize sz) {
+    ASSERT(op != FLDP || rt != rt2);
+    ASSERT((sz == kSWord) || (sz == kDWord) || (sz == kQWord));
+    ASSERT(a.log2sz_ == -1 || a.log2sz_ == Log2OperandSizeBytes(sz));
+    int32_t opc = 0;
+    switch (sz) {
+      case kSWord:
+        opc = 0;
+        break;
+      case kDWord:
+        opc = B30;
+        break;
+      case kQWord:
+        opc = B31;
+        break;
+      default:
+        UNREACHABLE();
+        break;
+    }
+    const int32_t encoding =
+        opc | op | Arm64Encode::Rt(static_cast<Register>(rt)) |
+        Arm64Encode::Rt2(static_cast<Register>(rt2)) | a.encoding();
+    Emit(encoding);
+  }
+
   void EmitPCRelOp(PCRelOp op, Register rd, const Immediate& imm) {
     ASSERT(Utils::IsInt(21, imm.value()));
     ASSERT((rd != R31) && (rd != CSP));
@@ -2899,11 +2913,6 @@
                              CanBeSmi can_be_smi,
                              BarrierFilterMode barrier_filter_mode);
 
-  // Note: leaf call sequence uses some abi callee save registers as scratch
-  // so they should be manually preserved.
-  void EnterCallRuntimeFrame(intptr_t frame_size, bool is_leaf);
-  void LeaveCallRuntimeFrame(bool is_leaf);
-
   friend class dart::FlowGraphCompiler;
   std::function<void(Register reg)> generate_invoke_write_barrier_wrapper_;
   std::function<void()> generate_invoke_array_write_barrier_;
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 4c40284..cb29a3c 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -861,6 +861,70 @@
       "ret\n");
 }
 
+ASSEMBLER_TEST_GENERATE(LoadStoreDoublePair, assembler) {
+  __ SetupDartSP();
+  __ LoadDImmediate(V1, 3.0);
+  __ LoadDImmediate(V2, 4.0);
+  __ PushDoublePair(V1, V2);
+  __ LoadDImmediate(V1, 0.0);
+  __ LoadDImmediate(V2, 0.0);
+  __ PopDoublePair(V1, V2);
+  __ fsubd(V0, V2, V1);
+  __ RestoreCSP();
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(LoadStoreDoublePair, test) {
+  typedef double (*DoubleReturn)() DART_UNUSED;
+  EXPECT_EQ(1.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
+  EXPECT_DISASSEMBLY(
+      "mov sp, csp\n"
+      "sub csp, csp, #0x1000\n"
+      "fmovd v1, 3.000000\n"
+      "fmovd v2, 4.000000\n"
+      "fstpd v1, v2, [sp, #-16]!\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v2, tmp\n"
+      "fldpd v1, v2, [sp], #16 !\n"
+      "fsubd v0, v2, v1\n"
+      "mov csp, sp\n"
+      "ret\n");
+}
+
+ASSEMBLER_TEST_GENERATE(LoadStoreQuadPair, assembler) {
+  __ SetupDartSP();
+  __ LoadDImmediate(V1, 3.0);
+  __ LoadDImmediate(V2, 4.0);
+  __ PushQuadPair(V1, V2);
+  __ LoadDImmediate(V1, 0.0);
+  __ LoadDImmediate(V2, 0.0);
+  __ PopQuadPair(V1, V2);
+  __ fsubd(V0, V2, V1);
+  __ RestoreCSP();
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(LoadStoreQuadPair, test) {
+  typedef double (*DoubleReturn)() DART_UNUSED;
+  EXPECT_EQ(1.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
+  EXPECT_DISASSEMBLY(
+      "mov sp, csp\n"
+      "sub csp, csp, #0x1000\n"
+      "fmovd v1, 3.000000\n"
+      "fmovd v2, 4.000000\n"
+      "fstpq v1, v2, [sp, #-32]!\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v2, tmp\n"
+      "fldpq v1, v2, [sp], #32 !\n"
+      "fsubd v0, v2, v1\n"
+      "mov csp, sp\n"
+      "ret\n");
+}
+
 ASSEMBLER_TEST_GENERATE(Semaphore, assembler) {
   __ SetupDartSP();
   __ movz(R0, Immediate(40), 0);
diff --git a/runtime/vm/compiler/assembler/assembler_base.h b/runtime/vm/compiler/assembler/assembler_base.h
index 85259a3..7faf6fd 100644
--- a/runtime/vm/compiler/assembler/assembler_base.h
+++ b/runtime/vm/compiler/assembler/assembler_base.h
@@ -866,6 +866,35 @@
   ObjectPoolBuilder* object_pool_builder_;
 };
 
+// For leaf runtime calls. For non-leaf runtime calls, use
+// Assembler::CallRuntime.
+class LeafRuntimeScope : public ValueObject {
+ public:
+  // Enters a frame, saves registers, and aligns the stack according to the C
+  // ABI.
+  //
+  // If [preserve_registers] is false, only registers normally preserved at a
+  // Dart call will be preserved (SP, FP, THR, PP, CODE_REG, RA). Suitable for
+  // use in IL instructions marked with LocationSummary::kCall.
+  // If [preserve registers] is true, all registers allocatable by Dart (roughly
+  // everything but TMP, TMP2) will be preserved. Suitable for non-call IL
+  // instructions like the write barrier.
+  LeafRuntimeScope(Assembler* assembler,
+                   intptr_t frame_size,
+                   bool preserve_registers);
+
+  // Restores registers and leaves the frame.
+  ~LeafRuntimeScope();
+
+  // Sets the current tag, calls the runtime function, and restores the current
+  // tag.
+  void Call(const RuntimeEntry& entry, intptr_t argument_count);
+
+ private:
+  Assembler* const assembler_;
+  const bool preserve_registers_;
+};
+
 }  // namespace compiler
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index 69c197c..05d3863 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -11,6 +11,7 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/cpu.h"
 #include "vm/instructions.h"
+#include "vm/tags.h"
 
 namespace dart {
 
@@ -2179,7 +2180,7 @@
   addl(dest, inc_imm);
 }
 
-void Assembler::LoadDoubleConstant(XmmRegister dst, double value) {
+void Assembler::LoadDImmediate(XmmRegister dst, double value) {
   // TODO(5410843): Need to have a code constants table.
   int64_t constant = bit_cast<int64_t, double>(value);
   pushl(Immediate(Utils::High32Bits(constant)));
@@ -2446,59 +2447,86 @@
 // save it.
 static const intptr_t kNumberOfVolatileXmmRegisters = kNumberOfXmmRegisters - 1;
 
-void Assembler::EnterCallRuntimeFrame(intptr_t frame_space) {
-  Comment("EnterCallRuntimeFrame");
-  EnterFrame(0);
-
-  // Preserve volatile CPU registers.
-  for (intptr_t i = 0; i < kNumberOfVolatileCpuRegisters; i++) {
-    pushl(volatile_cpu_registers[i]);
-  }
-
-  // Preserve all XMM registers except XMM0
-  subl(ESP, Immediate((kNumberOfXmmRegisters - 1) * kFpuRegisterSize));
-  // Store XMM registers with the lowest register number at the lowest
-  // address.
-  intptr_t offset = 0;
-  for (intptr_t reg_idx = 1; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
-    XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-    movups(Address(ESP, offset), xmm_reg);
-    offset += kFpuRegisterSize;
-  }
-
-  ReserveAlignedFrameSpace(frame_space);
-}
-
-void Assembler::LeaveCallRuntimeFrame() {
-  // ESP might have been modified to reserve space for arguments
-  // and ensure proper alignment of the stack frame.
-  // We need to restore it before restoring registers.
-  const intptr_t kPushedRegistersSize =
-      kNumberOfVolatileCpuRegisters * target::kWordSize +
-      kNumberOfVolatileXmmRegisters * kFpuRegisterSize;
-  leal(ESP, Address(EBP, -kPushedRegistersSize));
-
-  // Restore all XMM registers except XMM0
-  // XMM registers have the lowest register number at the lowest address.
-  intptr_t offset = 0;
-  for (intptr_t reg_idx = 1; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
-    XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
-    movups(xmm_reg, Address(ESP, offset));
-    offset += kFpuRegisterSize;
-  }
-  addl(ESP, Immediate(offset));
-
-  // Restore volatile CPU registers.
-  for (intptr_t i = kNumberOfVolatileCpuRegisters - 1; i >= 0; i--) {
-    popl(volatile_cpu_registers[i]);
-  }
-
-  leave();
-}
-
 void Assembler::CallRuntime(const RuntimeEntry& entry,
                             intptr_t argument_count) {
-  entry.Call(this, argument_count);
+  ASSERT(!entry.is_leaf());
+  // Argument count is not checked here, but in the runtime entry for a more
+  // informative error message.
+  movl(ECX, compiler::Address(THR, entry.OffsetFromThread()));
+  movl(EDX, compiler::Immediate(argument_count));
+  call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
+}
+
+#define __ assembler_->
+
+LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
+                                   intptr_t frame_size,
+                                   bool preserve_registers)
+    : assembler_(assembler), preserve_registers_(preserve_registers) {
+  __ Comment("EnterCallRuntimeFrame");
+  __ EnterFrame(0);
+
+  if (preserve_registers_) {
+    // Preserve volatile CPU registers.
+    for (intptr_t i = 0; i < kNumberOfVolatileCpuRegisters; i++) {
+      __ pushl(volatile_cpu_registers[i]);
+    }
+
+    // Preserve all XMM registers except XMM0
+    __ subl(ESP, Immediate((kNumberOfXmmRegisters - 1) * kFpuRegisterSize));
+    // Store XMM registers with the lowest register number at the lowest
+    // address.
+    intptr_t offset = 0;
+    for (intptr_t reg_idx = 1; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
+      XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
+      __ movups(Address(ESP, offset), xmm_reg);
+      offset += kFpuRegisterSize;
+    }
+  } else {
+    // These registers must always be preserved.
+    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+  }
+
+  __ ReserveAlignedFrameSpace(frame_size);
+}
+
+void LeafRuntimeScope::Call(const RuntimeEntry& entry,
+                            intptr_t argument_count) {
+  ASSERT(argument_count == entry.argument_count());
+  __ movl(EAX, compiler::Address(THR, entry.OffsetFromThread()));
+  __ movl(compiler::Assembler::VMTagAddress(), EAX);
+  __ call(EAX);
+  __ movl(compiler::Assembler::VMTagAddress(),
+          compiler::Immediate(VMTag::kDartTagId));
+}
+
+LeafRuntimeScope::~LeafRuntimeScope() {
+  if (preserve_registers_) {
+    // ESP might have been modified to reserve space for arguments
+    // and ensure proper alignment of the stack frame.
+    // We need to restore it before restoring registers.
+    const intptr_t kPushedRegistersSize =
+        kNumberOfVolatileCpuRegisters * target::kWordSize +
+        kNumberOfVolatileXmmRegisters * kFpuRegisterSize;
+    __ leal(ESP, Address(EBP, -kPushedRegistersSize));
+
+    // Restore all XMM registers except XMM0
+    // XMM registers have the lowest register number at the lowest address.
+    intptr_t offset = 0;
+    for (intptr_t reg_idx = 1; reg_idx < kNumberOfXmmRegisters; ++reg_idx) {
+      XmmRegister xmm_reg = static_cast<XmmRegister>(reg_idx);
+      __ movups(xmm_reg, Address(ESP, offset));
+      offset += kFpuRegisterSize;
+    }
+    __ addl(ESP, Immediate(offset));
+
+    // Restore volatile CPU registers.
+    for (intptr_t i = kNumberOfVolatileCpuRegisters - 1; i >= 0; i--) {
+      __ popl(volatile_cpu_registers[i]);
+    }
+  }
+
+  __ leave();
 }
 
 void Assembler::Call(const Code& target,
@@ -2517,10 +2545,6 @@
       kHeapObjectTag));
 }
 
-void Assembler::CallToRuntime() {
-  call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
-}
-
 void Assembler::Jmp(const Code& target) {
   const ExternalLabel label(target::Code::EntryPointOf(target));
   jmp(&label);
@@ -2714,6 +2738,9 @@
 }
 
 void Assembler::EnterCFrame(intptr_t frame_space) {
+  // Already saved.
+  COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+
   EnterFrame(0);
   ReserveAlignedFrameSpace(frame_space);
 }
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 69207d5..8cee67d 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -713,6 +713,8 @@
     }
   }
 
+  void LoadDImmediate(XmmRegister dst, double value);
+
   void Drop(intptr_t stack_elements);
 
   void LoadIsolate(Register dst);
@@ -732,7 +734,6 @@
 
   void PushObject(const Object& object);
   void CompareObject(Register reg, const Object& object);
-  void LoadDoubleConstant(XmmRegister dst, double value);
 
   void LoadCompressed(Register dest, const Address& slot) { movl(dest, slot); }
 
@@ -825,18 +826,12 @@
   void EnterFullSafepoint(Register scratch);
   void ExitFullSafepoint(Register scratch, bool ignore_unwind_in_progress);
 
-  // Create a frame for calling into runtime that preserves all volatile
-  // registers.  Frame's RSP is guaranteed to be correctly aligned and
-  // frame_space bytes are reserved under it.
-  void EnterCallRuntimeFrame(intptr_t frame_space);
-  void LeaveCallRuntimeFrame();
-
+  // For non-leaf runtime calls. For leaf runtime calls, use LeafRuntimeScope,
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
 
   void Call(const Code& code,
             bool movable_target = false,
             CodeEntryKind entry_kind = CodeEntryKind::kNormal);
-  void CallToRuntime();
   // Will not clobber any registers and can therefore be called with 5 live
   // registers.
   void CallVmStub(const Code& code);
diff --git a/runtime/vm/compiler/assembler/assembler_ia32_test.cc b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
index 43c4818..e89073d 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
@@ -4558,8 +4558,8 @@
       "ret\n");
 }
 
-ASSEMBLER_TEST_GENERATE(TestLoadDoubleConstant, assembler) {
-  __ LoadDoubleConstant(XMM3, -12.34);
+ASSEMBLER_TEST_GENERATE(TestLoadDImmediate, assembler) {
+  __ LoadDImmediate(XMM3, -12.34);
   __ pushl(EAX);
   __ pushl(EAX);
   __ movsd(Address(ESP, 0), XMM3);
@@ -4569,9 +4569,9 @@
   __ ret();
 }
 
-ASSEMBLER_TEST_RUN(TestLoadDoubleConstant, test) {
-  typedef double (*TestLoadDoubleConstantCode)();
-  double res = reinterpret_cast<TestLoadDoubleConstantCode>(test->entry())();
+ASSEMBLER_TEST_RUN(TestLoadDImmediate, test) {
+  typedef double (*TestLoadDImmediateCode)();
+  double res = reinterpret_cast<TestLoadDImmediateCode>(test->entry())();
   EXPECT_FLOAT_EQ(-12.34, res, 0.0001);
   EXPECT_DISASSEMBLY(
       "push 0xc028ae14\n"
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index 897c9d7..335f0ea 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -12,6 +12,7 @@
 #include "vm/cpu.h"
 #include "vm/instructions.h"
 #include "vm/simulator.h"
+#include "vm/tags.h"
 
 namespace dart {
 
@@ -2323,10 +2324,14 @@
 
 #if defined(USING_THREAD_SANITIZER)
 void Assembler::TsanLoadAcquire(Register addr) {
-  UNIMPLEMENTED();
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+  MoveRegister(A0, addr);
+  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
 }
 void Assembler::TsanStoreRelease(Register addr) {
-  UNIMPLEMENTED();
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+  MoveRegister(A0, addr);
+  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
 }
 #endif
 
@@ -2674,10 +2679,6 @@
   Call(FieldAddress(CODE_REG, target::Code::entry_point_offset(entry_kind)));
 }
 
-void Assembler::JumpAndLinkToRuntime() {
-  Call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
-}
-
 void Assembler::JumpAndLinkWithEquivalence(const Code& target,
                                            const Object& equivalence,
                                            CodeEntryKind entry_kind) {
@@ -2945,37 +2946,6 @@
   fsd(src, Address(base, offset));
 }
 
-void Assembler::LoadUnboxedDouble(FpuRegister dst,
-                                  Register base,
-                                  int32_t offset) {
-  fld(dst, Address(base, offset));
-}
-void Assembler::StoreUnboxedDouble(FpuRegister src,
-                                   Register base,
-                                   int32_t offset) {
-  fsd(src, Address(base, offset));
-}
-void Assembler::MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
-  fmvd(dst, src);
-}
-
-void Assembler::LoadCompressed(Register dest, const Address& slot) {
-  lx(dest, slot);
-}
-void Assembler::LoadCompressedFromOffset(Register dest,
-                                         Register base,
-                                         int32_t offset) {
-  lx(dest, Address(base, offset));
-}
-void Assembler::LoadCompressedSmi(Register dest, const Address& slot) {
-  lx(dest, slot);
-}
-void Assembler::LoadCompressedSmiFromOffset(Register dest,
-                                            Register base,
-                                            int32_t offset) {
-  lx(dest, Address(base, offset));
-}
-
 // Store into a heap object and apply the generational and incremental write
 // barriers. All stores into heap objects must pass through this function or,
 // if the value can be proven either Smi or old-and-premarked, its NoBarrier
@@ -3474,12 +3444,12 @@
   subi(SP, SP, frame_size + 2 * target::kWordSize);
   sx(RA, Address(SP, frame_size + 1 * target::kWordSize));
   sx(FP, Address(SP, frame_size + 0 * target::kWordSize));
-  addi(FP, SP, frame_size + 0 * target::kWordSize);
+  addi(FP, SP, frame_size + 2 * target::kWordSize);
 }
 void Assembler::LeaveFrame() {
   // N.B. The ordering here is important. We must never read beyond SP or
   // it may have already been clobbered by a signal handler.
-  mv(SP, FP);
+  subi(SP, FP, 2 * target::kWordSize);
   lx(FP, Address(SP, 0 * target::kWordSize));
   lx(RA, Address(SP, 1 * target::kWordSize));
   addi(SP, SP, 2 * target::kWordSize);
@@ -3508,10 +3478,13 @@
 }
 
 void Assembler::TransitionNativeToGenerated(Register state,
-                                            bool exit_safepoint) {
+                                            bool exit_safepoint,
+                                            bool ignore_unwind_in_progress) {
   if (exit_safepoint) {
-    ExitFullSafepoint(state);
+    ExitFullSafepoint(state, ignore_unwind_in_progress);
   } else {
+    // flag only makes sense if we are leaving safepoint
+    ASSERT(!ignore_unwind_in_progress);
 #if defined(DEBUG)
     // Ensure we've already left the safepoint.
     ASSERT(target::Thread::full_safepoint_state_acquired() != 0);
@@ -3570,7 +3543,8 @@
   Bind(&done);
 }
 
-void Assembler::ExitFullSafepoint(Register state) {
+void Assembler::ExitFullSafepoint(Register state,
+                                  bool ignore_unwind_in_progress) {
   // We generate the same number of instructions whether or not the slow-path is
   // forced, for consistency with EnterFullSafepoint.
   Register addr = RA;
@@ -3596,7 +3570,14 @@
   }
 
   Bind(&slow_path);
-  lx(addr, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+  if (ignore_unwind_in_progress) {
+    lx(addr,
+       Address(THR,
+               target::Thread::
+                   exit_safepoint_ignore_unwind_in_progress_stub_offset()));
+  } else {
+    lx(addr, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+  }
   lx(addr, FieldAddress(addr, target::Code::entry_point_offset()));
   jalr(addr);
 
@@ -3635,6 +3616,16 @@
   CheckCodePointer();
 }
 
+void Assembler::RestorePoolPointer() {
+  if (FLAG_precompiled_mode) {
+    lx(PP, Address(THR, target::Thread::global_object_pool_offset()));
+  } else {
+    lx(PP, Address(FP, target::frame_layout.code_from_fp * target::kWordSize));
+    lx(PP, FieldAddress(PP, target::Code::object_pool_offset()));
+  }
+  subi(PP, PP, kHeapObjectTag);  // Pool in PP is untagged!
+}
+
 // Restores the values of the registers that are blocked to cache some values
 // e.g. BARRIER_MASK and NULL_REG.
 void Assembler::RestorePinnedRegisters() {
@@ -3666,7 +3657,7 @@
     subi(SP, SP, frame_size + 2 * target::kWordSize);
     sx(RA, Address(SP, frame_size + 1 * target::kWordSize));
     sx(FP, Address(SP, frame_size + 0 * target::kWordSize));
-    addi(FP, SP, frame_size + 0 * target::kWordSize);
+    addi(FP, SP, frame_size + 2 * target::kWordSize);
   } else {
     subi(SP, SP, frame_size + 4 * target::kWordSize);
     sx(RA, Address(SP, frame_size + 3 * target::kWordSize));
@@ -3674,7 +3665,7 @@
     sx(CODE_REG, Address(SP, frame_size + 1 * target::kWordSize));
     addi(PP, PP, kHeapObjectTag);
     sx(PP, Address(SP, frame_size + 0 * target::kWordSize));
-    addi(FP, SP, frame_size + 2 * target::kWordSize);
+    addi(FP, SP, frame_size + 4 * target::kWordSize);
     if (new_pp == kNoRegister) {
       LoadPoolPointer();
     } else {
@@ -3711,7 +3702,7 @@
     }
   }
   set_constant_pool_allowed(false);
-  mv(SP, FP);
+  subi(SP, FP, 2 * target::kWordSize);
   lx(FP, Address(SP, 0 * target::kWordSize));
   lx(RA, Address(SP, 1 * target::kWordSize));
   addi(SP, SP, 2 * target::kWordSize);
@@ -3721,25 +3712,108 @@
 
 void Assembler::CallRuntime(const RuntimeEntry& entry,
                             intptr_t argument_count) {
-  entry.Call(this, argument_count);
+  ASSERT(!entry.is_leaf());
+  // Argument count is not checked here, but in the runtime entry for a more
+  // informative error message.
+  lx(T5, compiler::Address(THR, entry.OffsetFromThread()));
+  li(T4, argument_count);
+  Call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
 }
 
+static const RegisterSet kRuntimeCallSavedRegisters(kDartVolatileCpuRegs,
+                                                    kAbiVolatileFpuRegs);
+
+#define __ assembler_->
+
+LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
+                                   intptr_t frame_size,
+                                   bool preserve_registers)
+    : assembler_(assembler), preserve_registers_(preserve_registers) {
+  // N.B. The ordering here is important. We must never write beyond SP or
+  // it can be clobbered by a signal handler.
+  __ subi(SP, SP, 4 * target::kWordSize);
+  __ sx(RA, Address(SP, 3 * target::kWordSize));
+  __ sx(FP, Address(SP, 2 * target::kWordSize));
+  __ sx(CODE_REG, Address(SP, 1 * target::kWordSize));
+  __ sx(PP, Address(SP, 0 * target::kWordSize));
+  __ addi(FP, SP, 4 * target::kWordSize);
+
+  if (preserve_registers) {
+    __ PushRegisters(kRuntimeCallSavedRegisters);
+  } else {
+    // Or no reason to save above.
+    COMPILE_ASSERT(!IsAbiPreservedRegister(CODE_REG));
+    COMPILE_ASSERT(!IsAbiPreservedRegister(PP));
+    // Or would need to save above.
+    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+    COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
+    COMPILE_ASSERT(IsCalleeSavedRegister(WRITE_BARRIER_MASK));
+    COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
+  }
+
+  __ ReserveAlignedFrameSpace(frame_size);
+}
+
+void LeafRuntimeScope::Call(const RuntimeEntry& entry,
+                            intptr_t argument_count) {
+  ASSERT(argument_count == entry.argument_count());
+  __ lx(TMP2, compiler::Address(THR, entry.OffsetFromThread()));
+  __ sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  __ jalr(TMP2);
+  __ LoadImmediate(TMP2, VMTag::kDartTagId);
+  __ sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset()));
+}
+
+LeafRuntimeScope::~LeafRuntimeScope() {
+  if (preserve_registers_) {
+    const intptr_t kSavedRegistersSize =
+        kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize +
+        kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize +
+        4 * target::kWordSize;
+
+    __ subi(SP, FP, kSavedRegistersSize);
+
+    __ PopRegisters(kRuntimeCallSavedRegisters);
+  }
+
+  __ subi(SP, FP, 4 * target::kWordSize);
+  __ lx(PP, Address(SP, 0 * target::kWordSize));
+  __ lx(CODE_REG, Address(SP, 1 * target::kWordSize));
+  __ lx(FP, Address(SP, 2 * target::kWordSize));
+  __ lx(RA, Address(SP, 3 * target::kWordSize));
+  __ addi(SP, SP, 4 * target::kWordSize);
+}
+
+#undef __
+
 void Assembler::EnterCFrame(intptr_t frame_space) {
+  // Already saved.
+  COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+  COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
+  COMPILE_ASSERT(IsCalleeSavedRegister(WRITE_BARRIER_MASK));
+  COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
+  // Need to save.
+  COMPILE_ASSERT(!IsCalleeSavedRegister(PP));
+
   // N.B. The ordering here is important. We must never read beyond SP or
   // it may have already been clobbered by a signal handler.
-  subi(SP, SP, frame_space + 2 * target::kWordSize);
-  sx(RA, Address(SP, frame_space + 1 * target::kWordSize));
-  sx(FP, Address(SP, frame_space + 0 * target::kWordSize));
-  addi(FP, SP, frame_space);
+  subi(SP, SP, frame_space + 3 * target::kWordSize);
+  sx(RA, Address(SP, frame_space + 2 * target::kWordSize));
+  sx(FP, Address(SP, frame_space + 1 * target::kWordSize));
+  sx(PP, Address(SP, frame_space + 0 * target::kWordSize));
+  addi(FP, SP, frame_space + 3 * target::kWordSize);
+  const intptr_t kAbiStackAlignment = 16;  // For both 32 and 64 bit.
+  andi(SP, SP, ~(kAbiStackAlignment - 1));
 }
 
 void Assembler::LeaveCFrame() {
   // N.B. The ordering here is important. We must never read beyond SP or
   // it may have already been clobbered by a signal handler.
-  mv(SP, FP);
-  lx(FP, Address(SP, 0 * target::kWordSize));
-  lx(RA, Address(SP, 1 * target::kWordSize));
-  addi(SP, SP, 2 * target::kWordSize);
+  subi(SP, FP, 3 * target::kWordSize);
+  lx(PP, Address(SP, 0 * target::kWordSize));
+  lx(FP, Address(SP, 1 * target::kWordSize));
+  lx(RA, Address(SP, 2 * target::kWordSize));
+  addi(SP, SP, 3 * target::kWordSize);
 }
 
 // A0: Receiver
@@ -4166,82 +4240,6 @@
   LoadImmediate(dst, target::ToRawSmi(object));
 }
 
-static const RegisterSet kRuntimeCallSavedRegisters(
-    kAbiVolatileCpuRegs | (1 << CALLEE_SAVED_TEMP) | (1 << CALLEE_SAVED_TEMP2),
-    kAbiVolatileFpuRegs);
-
-// Note: leaf call sequence uses some abi callee save registers as scratch
-// so they should be manually preserved.
-void Assembler::EnterCallRuntimeFrame(intptr_t frame_size, bool is_leaf) {
-  // N.B. The ordering here is important. We must never write beyond SP or
-  // it can be clobbered by a signal handler.
-  if (FLAG_precompiled_mode) {
-    subi(SP, SP, 2 * target::kWordSize + frame_size);
-    sx(RA, Address(SP, 1 * target::kWordSize + frame_size));
-    sx(FP, Address(SP, 0 * target::kWordSize + frame_size));
-    addi(FP, SP, 0 * target::kWordSize + frame_size);
-  } else {
-    subi(SP, SP, 4 * target::kWordSize + frame_size);
-    sx(RA, Address(SP, 3 * target::kWordSize + frame_size));
-    sx(FP, Address(SP, 2 * target::kWordSize + frame_size));
-    sx(CODE_REG, Address(SP, 1 * target::kWordSize + frame_size));
-    addi(PP, PP, kHeapObjectTag);
-    sx(PP, Address(SP, 0 * target::kWordSize + frame_size));
-    addi(FP, SP, 2 * target::kWordSize + frame_size);
-  }
-
-  PushRegisters(kRuntimeCallSavedRegisters);
-
-  if (!is_leaf) {  // Leaf calling sequence aligns the stack itself.
-    ReserveAlignedFrameSpace(0);
-  }
-}
-
-void Assembler::LeaveCallRuntimeFrame(bool is_leaf) {
-  const intptr_t kPushedRegistersSize =
-      kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize +
-      kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize +
-      (target::frame_layout.dart_fixed_frame_size - 2) *
-          target::kWordSize;  // From EnterStubFrame (excluding PC / FP)
-
-  subi(SP, FP, kPushedRegistersSize);
-
-  PopRegisters(kRuntimeCallSavedRegisters);
-
-  LeaveStubFrame();
-}
-
-void Assembler::CallRuntimeScope::Call(intptr_t argument_count) {
-  assembler_->CallRuntime(entry_, argument_count);
-}
-
-Assembler::CallRuntimeScope::~CallRuntimeScope() {
-  if (preserve_registers_) {
-    assembler_->LeaveCallRuntimeFrame(entry_.is_leaf());
-    if (restore_code_reg_) {
-      assembler_->PopRegister(CODE_REG);
-    }
-  }
-}
-
-Assembler::CallRuntimeScope::CallRuntimeScope(Assembler* assembler,
-                                              const RuntimeEntry& entry,
-                                              intptr_t frame_size,
-                                              bool preserve_registers,
-                                              const Address* caller)
-    : assembler_(assembler),
-      entry_(entry),
-      preserve_registers_(preserve_registers),
-      restore_code_reg_(caller != nullptr) {
-  if (preserve_registers_) {
-    if (caller != nullptr) {
-      assembler_->PushRegister(CODE_REG);
-      assembler_->lx(CODE_REG, *caller);
-    }
-    assembler_->EnterCallRuntimeFrame(frame_size, entry.is_leaf());
-  }
-}
-
 void Assembler::AddImmediateBranchOverflow(Register rd,
                                            Register rs1,
                                            intx_t imm,
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index c96fa8b..d24ea42 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -916,7 +916,6 @@
                             CodeEntryKind entry_kind = CodeEntryKind::kNormal) {
     JumpAndLink(code, ObjectPoolBuilderEntry::kPatchable, entry_kind);
   }
-  void JumpAndLinkToRuntime();
 
   // Emit a call that shares its object pool entries with other calls
   // that have the same equivalence marker.
@@ -1023,16 +1022,30 @@
     StoreDToOffset(src, base, offset - kHeapObjectTag);
   }
 
-  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset);
-  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset);
-  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src);
+  void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset) {
+    LoadDFromOffset(dst, base, offset);
+  }
+  void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset) {
+    StoreDToOffset(src, base, offset);
+  }
+  void MoveUnboxedDouble(FpuRegister dst, FpuRegister src) {
+    fmvd(dst, src);
+  }
 
-  void LoadCompressed(Register dest, const Address& slot);
-  void LoadCompressedFromOffset(Register dest, Register base, int32_t offset);
-  void LoadCompressedSmi(Register dest, const Address& slot);
+  void LoadCompressed(Register dest, const Address& slot) {
+    lx(dest, slot);
+  }
+  void LoadCompressedFromOffset(Register dest, Register base, int32_t offset) {
+    LoadFromOffset(dest, base, offset);
+  }
+  void LoadCompressedSmi(Register dest, const Address& slot) {
+    lx(dest, slot);
+  }
   void LoadCompressedSmiFromOffset(Register dest,
                                    Register base,
-                                   int32_t offset);
+                                   int32_t offset) {
+    LoadFromOffset(dest, base, offset);
+  }
 
   // Store into a heap object and apply the generational and incremental write
   // barriers. All stores into heap objects must pass through this function or,
@@ -1201,12 +1214,15 @@
                                    Register new_exit_frame,
                                    Register new_exit_through_ffi,
                                    bool enter_safepoint);
-  void TransitionNativeToGenerated(Register scratch, bool exit_safepoint);
+  void TransitionNativeToGenerated(Register scratch,
+                                   bool exit_safepoint,
+                                   bool ignore_unwind_in_progress = false);
   void EnterFullSafepoint(Register scratch);
-  void ExitFullSafepoint(Register scratch);
+  void ExitFullSafepoint(Register scratch, bool ignore_unwind_in_progress);
 
   void CheckCodePointer();
   void RestoreCodePointer();
+  void RestorePoolPointer();
 
   // Restores the values of the registers that are blocked to cache some values
   // e.g. BARRIER_MASK and NULL_REG.
@@ -1218,51 +1234,9 @@
   void EnterOsrFrame(intptr_t extra_size, Register new_pp = kNoRegister);
   void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP);
 
+  // For non-leaf runtime calls. For leaf runtime calls, use LeafRuntimeScope,
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
 
-  // Helper method for performing runtime calls from callers requiring manual
-  // register preservation is required (e.g. outside IL instructions marked
-  // as calling).
-  class CallRuntimeScope : public ValueObject {
-   public:
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     bool preserve_registers = true)
-        : CallRuntimeScope(assembler,
-                           entry,
-                           frame_size,
-                           preserve_registers,
-                           /*caller=*/nullptr) {}
-
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     Address caller,
-                     bool preserve_registers = true)
-        : CallRuntimeScope(assembler,
-                           entry,
-                           frame_size,
-                           preserve_registers,
-                           &caller) {}
-
-    void Call(intptr_t argument_count);
-
-    ~CallRuntimeScope();
-
-   private:
-    CallRuntimeScope(Assembler* assembler,
-                     const RuntimeEntry& entry,
-                     intptr_t frame_size,
-                     bool preserve_registers,
-                     const Address* caller);
-
-    Assembler* const assembler_;
-    const RuntimeEntry& entry_;
-    const bool preserve_registers_;
-    const bool restore_code_reg_;
-  };
-
   // Set up a stub frame so that the stack traversal code can easily identify
   // a stub frame.
   void EnterStubFrame() { EnterDartFrame(0); }
@@ -1438,11 +1412,6 @@
                              CanBeSmi can_be_smi,
                              BarrierFilterMode barrier_filter_mode);
 
-  // Note: leaf call sequence uses some abi callee save registers as scratch
-  // so they should be manually preserved.
-  void EnterCallRuntimeFrame(intptr_t frame_size, bool is_leaf);
-  void LeaveCallRuntimeFrame(bool is_leaf);
-
   friend class dart::FlowGraphCompiler;
   std::function<void(Register reg)> generate_invoke_write_barrier_wrapper_;
   std::function<void()> generate_invoke_array_write_barrier_;
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 82a37b8..bfc1a69 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -11,6 +11,7 @@
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/backend/locations.h"
 #include "vm/instructions.h"
+#include "vm/tags.h"
 
 namespace dart {
 
@@ -87,10 +88,6 @@
   call(FieldAddress(CODE_REG, target::Code::entry_point_offset()));
 }
 
-void Assembler::CallToRuntime() {
-  call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
-}
-
 void Assembler::pushq(Register reg) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   EmitRegisterREX(reg, REX_NONE);
@@ -311,6 +308,13 @@
   EmitOperand(reg & 7, address);
 }
 
+void Assembler::EmitB(int reg, const Address& address, int opcode) {
+  AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+  EmitOperandREX(reg & ~0x10, address, reg >= 8 ? REX_PREFIX : REX_NONE);
+  EmitUint8(opcode);
+  EmitOperand(reg & 7, address);
+}
+
 void Assembler::movl(Register dst, const Immediate& imm) {
   AssemblerBuffer::EnsureCapacity ensured(&buffer_);
   Operand operand(dst);
@@ -1507,7 +1511,8 @@
     testq(value, Immediate(kSmiTagMask));
     j(ZERO, &done, kNearJump);
   }
-  movb(TMP, FieldAddress(object, target::Object::tags_offset()));
+  movb(ByteRegisterOf(TMP),
+       FieldAddress(object, target::Object::tags_offset()));
   shrl(TMP, Immediate(target::UntaggedObject::kBarrierOverlapShift));
   andl(TMP, Address(THR, target::Thread::write_barrier_mask_offset()));
   testb(FieldAddress(value, target::Object::tags_offset()), TMP);
@@ -1573,7 +1578,8 @@
     testq(value, Immediate(kSmiTagMask));
     j(ZERO, &done, kNearJump);
   }
-  movb(TMP, FieldAddress(object, target::Object::tags_offset()));
+  movb(ByteRegisterOf(TMP),
+       FieldAddress(object, target::Object::tags_offset()));
   shrl(TMP, Immediate(target::UntaggedObject::kBarrierOverlapShift));
   andl(TMP, Address(THR, target::Thread::write_barrier_mask_offset()));
   testb(FieldAddress(value, target::Object::tags_offset()), TMP);
@@ -1755,7 +1761,7 @@
   switch (sz) {
     case kByte:
     case kUnsignedByte:
-      return movb(address, reg);
+      return movb(address, ByteRegisterOf(reg));
     case kTwoBytes:
     case kUnsignedTwoBytes:
       return movw(address, reg);
@@ -1873,42 +1879,6 @@
     CallingConventions::kVolatileCpuRegisters,
     CallingConventions::kVolatileXmmRegisters);
 
-void Assembler::EnterCallRuntimeFrame(intptr_t frame_space) {
-  Comment("EnterCallRuntimeFrame");
-  EnterFrame(0);
-  if (!FLAG_precompiled_mode) {
-    pushq(CODE_REG);
-    pushq(PP);
-  }
-
-  // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
-  PushRegisters(kVolatileRegisterSet);
-
-  ReserveAlignedFrameSpace(frame_space);
-}
-
-void Assembler::LeaveCallRuntimeFrame() {
-  // RSP might have been modified to reserve space for arguments
-  // and ensure proper alignment of the stack frame.
-  // We need to restore it before restoring registers.
-  const intptr_t kPushedCpuRegistersCount =
-      RegisterSet::RegisterCount(CallingConventions::kVolatileCpuRegisters);
-  const intptr_t kPushedXmmRegistersCount =
-      RegisterSet::RegisterCount(CallingConventions::kVolatileXmmRegisters);
-  const intptr_t kPushedRegistersSize =
-      kPushedCpuRegistersCount * target::kWordSize +
-      kPushedXmmRegistersCount * kFpuRegisterSize +
-      (target::frame_layout.dart_fixed_frame_size - 2) *
-          target::kWordSize;  // From EnterStubFrame (excluding PC / FP)
-
-  leaq(RSP, Address(RBP, -kPushedRegistersSize));
-
-  // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
-  PopRegisters(kVolatileRegisterSet);
-
-  LeaveStubFrame();
-}
-
 void Assembler::CallCFunction(Register reg, bool restore_rsp) {
   // Reserve shadow space for outgoing arguments.
   if (CallingConventions::kShadowSpaceBytes != 0) {
@@ -1934,24 +1904,86 @@
 
 void Assembler::CallRuntime(const RuntimeEntry& entry,
                             intptr_t argument_count) {
-  entry.Call(this, argument_count);
+  ASSERT(!entry.is_leaf());
+  // Argument count is not checked here, but in the runtime entry for a more
+  // informative error message.
+  movq(RBX, compiler::Address(THR, entry.OffsetFromThread()));
+  LoadImmediate(R10, compiler::Immediate(argument_count));
+  call(Address(THR, target::Thread::call_to_runtime_entry_point_offset()));
+}
+
+#define __ assembler_->
+
+LeafRuntimeScope::LeafRuntimeScope(Assembler* assembler,
+                                   intptr_t frame_size,
+                                   bool preserve_registers)
+    : assembler_(assembler), preserve_registers_(preserve_registers) {
+  __ Comment("EnterCallRuntimeFrame");
+  __ EnterFrame(0);
+
+  if (preserve_registers_) {
+    // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
+    __ PushRegisters(kVolatileRegisterSet);
+  } else {
+    // These registers must always be preserved.
+    ASSERT(IsCalleeSavedRegister(THR));
+    ASSERT(IsCalleeSavedRegister(PP));
+    ASSERT(IsCalleeSavedRegister(CODE_REG));
+  }
+
+  __ ReserveAlignedFrameSpace(frame_size);
+}
+
+void LeafRuntimeScope::Call(const RuntimeEntry& entry,
+                            intptr_t argument_count) {
+  ASSERT(entry.is_leaf());
+  ASSERT(entry.argument_count() == argument_count);
+  COMPILE_ASSERT(CallingConventions::kVolatileCpuRegisters & (1 << RAX));
+  __ movq(RAX, compiler::Address(THR, entry.OffsetFromThread()));
+  __ movq(compiler::Assembler::VMTagAddress(), RAX);
+  __ CallCFunction(RAX);
+  __ movq(compiler::Assembler::VMTagAddress(),
+          compiler::Immediate(VMTag::kDartTagId));
+}
+
+LeafRuntimeScope::~LeafRuntimeScope() {
+  if (preserve_registers_) {
+    // RSP might have been modified to reserve space for arguments
+    // and ensure proper alignment of the stack frame.
+    // We need to restore it before restoring registers.
+    const intptr_t kPushedCpuRegistersCount =
+        RegisterSet::RegisterCount(CallingConventions::kVolatileCpuRegisters);
+    const intptr_t kPushedXmmRegistersCount =
+        RegisterSet::RegisterCount(CallingConventions::kVolatileXmmRegisters);
+    const intptr_t kPushedRegistersSize =
+        kPushedCpuRegistersCount * target::kWordSize +
+        kPushedXmmRegistersCount * kFpuRegisterSize;
+
+    __ leaq(RSP, Address(RBP, -kPushedRegistersSize));
+
+    // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
+    __ PopRegisters(kVolatileRegisterSet);
+  } else {
+    const intptr_t kPushedRegistersSize =
+        (target::frame_layout.dart_fixed_frame_size - 2) *
+        target::kWordSize;  // From EnterStubFrame (excluding PC / FP)
+    __ leaq(RSP, Address(RBP, -kPushedRegistersSize));
+  }
+
+  __ LeaveFrame();
 }
 
 #if defined(USING_THREAD_SANITIZER)
 void Assembler::TsanLoadAcquire(Address addr) {
-  PushRegisters(kVolatileRegisterSet);
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
   leaq(CallingConventions::kArg1Reg, addr);
-  ASSERT(kTsanLoadAcquireRuntimeEntry.is_leaf());
-  CallRuntime(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
-  PopRegisters(kVolatileRegisterSet);
+  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
 }
 
 void Assembler::TsanStoreRelease(Address addr) {
-  PushRegisters(kVolatileRegisterSet);
+  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
   leaq(CallingConventions::kArg1Reg, addr);
-  ASSERT(kTsanStoreReleaseRuntimeEntry.is_leaf());
-  CallRuntime(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
-  PopRegisters(kVolatileRegisterSet);
+  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
 }
 #endif
 
@@ -2055,6 +2087,10 @@
 }
 
 void Assembler::EnterCFrame(intptr_t frame_space) {
+  // Already saved.
+  COMPILE_ASSERT(IsCalleeSavedRegister(THR));
+  COMPILE_ASSERT(IsCalleeSavedRegister(PP));
+
   EnterFrame(0);
   ReserveAlignedFrameSpace(frame_space);
 }
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 52af843..653e97f 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -334,10 +334,18 @@
   void name(Register dst, const Address& src) {                                \
     Emit##width(dst, src, __VA_ARGS__);                                        \
   }
+#define RAB(name, ...)                                                         \
+  void name(ByteRegister dst, const Address& src) {                            \
+    EmitB(dst, src, __VA_ARGS__);                                              \
+  }
 #define AR(width, name, ...)                                                   \
   void name(const Address& dst, Register src) {                                \
     Emit##width(src, dst, __VA_ARGS__);                                        \
   }
+#define ARB(name, ...)                                                         \
+  void name(const Address& dst, ByteRegister src) {                            \
+    EmitB(src, dst, __VA_ARGS__);                                              \
+  }
 #define REGULAR_INSTRUCTION(name, ...)                                         \
   RA(W, name##w, __VA_ARGS__)                                                  \
   RA(L, name##l, __VA_ARGS__)                                                  \
@@ -355,11 +363,11 @@
 #undef REGULAR_INSTRUCTION
   RA(Q, movsxd, 0x63)
   RR(Q, movsxd, 0x63)
-  AR(L, movb, 0x88)
+  ARB(movb, 0x88)
   AR(L, movl, 0x89)
   AR(Q, movq, 0x89)
   AR(W, movw, 0x89)
-  RA(L, movb, 0x8A)
+  RAB(movb, 0x8A)
   RA(L, movl, 0x8B)
   RA(Q, movq, 0x8B)
   RR(L, movl, 0x8B)
@@ -764,7 +772,6 @@
   void CallPatchable(const Code& code,
                      CodeEntryKind entry_kind = CodeEntryKind::kNormal);
   void Call(const Code& stub_entry);
-  void CallToRuntime();
 
   // Emit a call that shares its object pool entries with other calls
   // that have the same equivalence marker.
@@ -872,12 +879,7 @@
   // Clobbers RAX.
   void EmitEntryFrameVerification();
 
-  // Create a frame for calling into runtime that preserves all volatile
-  // registers.  Frame's RSP is guaranteed to be correctly aligned and
-  // frame_space bytes are reserved under it.
-  void EnterCallRuntimeFrame(intptr_t frame_space);
-  void LeaveCallRuntimeFrame();
-
+  // For non-leaf runtime calls. For leaf runtime calls, use LeafRuntimeScope,
   void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count);
 
   // Call runtime function. Reserves shadow space on the stack before calling
@@ -1315,6 +1317,7 @@
              int opcode,
              int prefix2 = -1,
              int prefix1 = -1);
+  void EmitB(int reg, const Address& address, int opcode);
   void CmpPS(XmmRegister dst, XmmRegister src, int condition);
 
   inline void EmitUint8(uint8_t value);
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index c0acbff..83239a8 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -6271,6 +6271,38 @@
 #endif
 }
 
+ASSEMBLER_TEST_GENERATE(MoveByteRunTest, assembler) {
+  __ pushq(Immediate(0x1234567887654321));
+  // RAX / AL
+  __ xorq(CallingConventions::kReturnReg, CallingConventions::kReturnReg);
+  __ movb(ByteRegisterOf(CallingConventions::kReturnReg), Address(RSP, 0));
+  // RBX / BH
+  __ pushq(RBX);
+  __ xorq(RBX, RBX);
+  __ movb(BH, Address(RSP, target::kWordSize));
+  __ shrq(RBX, Immediate(8));
+  __ addq(CallingConventions::kReturnReg, RBX);
+  __ popq(RBX);
+  // R8 / R8B
+  ASSERT((CallingConventions::kVolatileCpuRegisters & (1 << R8)) != 0);
+  __ xorq(R8, R8);
+  __ movb(R8B, Address(RSP, 0));
+  __ addq(CallingConventions::kReturnReg, R8);
+  // RDI / DIL
+  __ pushq(RDI);
+  __ xorq(RDI, RDI);
+  __ movb(DIL, Address(RSP, target::kWordSize));
+  __ addq(CallingConventions::kReturnReg, RDI);
+  __ popq(RDI);
+  __ Drop(1);
+  __ ret();
+}
+
+ASSEMBLER_TEST_RUN(MoveByteRunTest, test) {
+  intptr_t res = test->InvokeWithCodeAndThread<intptr_t>();
+  EXPECT_EQ(0x21 + 0x21 + 0x21 + 0x21, res);
+}
+
 }  // namespace compiler
 }  // namespace dart
 
diff --git a/runtime/vm/compiler/assembler/disassembler.cc b/runtime/vm/compiler/assembler/disassembler.cc
index 9d8e13c..e376b04 100644
--- a/runtime/vm/compiler/assembler/disassembler.cc
+++ b/runtime/vm/compiler/assembler/disassembler.cc
@@ -58,53 +58,6 @@
   va_end(args);
 }
 
-void DisassembleToJSONStream::ConsumeInstruction(char* hex_buffer,
-                                                 intptr_t hex_size,
-                                                 char* human_buffer,
-                                                 intptr_t human_size,
-                                                 Object* object,
-                                                 uword pc) {
-  // Instructions are represented as four consecutive values in a JSON array.
-  // The first is the address of the instruction, the second is the hex string,
-  // of the code, and the third is a human readable string, and the fourth is
-  // the object loaded by the instruction.
-  jsarr_.AddValueF("%" Pp "", pc);
-  jsarr_.AddValue(hex_buffer);
-  jsarr_.AddValue(human_buffer);
-
-  if (object != NULL) {
-    jsarr_.AddValue(*object);
-  } else {
-    jsarr_.AddValueNull();  // Not a reference to null.
-  }
-}
-
-void DisassembleToJSONStream::Print(const char* format, ...) {
-  va_list measure_args;
-  va_start(measure_args, format);
-  intptr_t len = Utils::VSNPrint(NULL, 0, format, measure_args);
-  va_end(measure_args);
-
-  char* p = reinterpret_cast<char*>(malloc(len + 1));
-  va_list print_args;
-  va_start(print_args, format);
-  intptr_t len2 = Utils::VSNPrint(p, len, format, print_args);
-  va_end(print_args);
-  ASSERT(len == len2);
-  for (intptr_t i = 0; i < len; i++) {
-    if (p[i] == '\n' || p[i] == '\r') {
-      p[i] = ' ';
-    }
-  }
-  // Instructions are represented as four consecutive values in a JSON array.
-  // Comments only use the third slot. See above comment for more information.
-  jsarr_.AddValueNull();
-  jsarr_.AddValueNull();
-  jsarr_.AddValue(p);
-  jsarr_.AddValueNull();
-  free(p);
-}
-
 void DisassembleToMemory::ConsumeInstruction(char* hex_buffer,
                                              intptr_t hex_size,
                                              char* human_buffer,
@@ -519,4 +472,53 @@
                                    bool optimized) {}
 #endif  // !defined(PRODUCT) || defined(FORCE_INCLUDE_DISASSEMBLER)
 
+#if !defined(PRODUCT)
+void DisassembleToJSONStream::ConsumeInstruction(char* hex_buffer,
+                                                 intptr_t hex_size,
+                                                 char* human_buffer,
+                                                 intptr_t human_size,
+                                                 Object* object,
+                                                 uword pc) {
+  // Instructions are represented as four consecutive values in a JSON array.
+  // The first is the address of the instruction, the second is the hex string,
+  // of the code, and the third is a human readable string, and the fourth is
+  // the object loaded by the instruction.
+  jsarr_.AddValueF("%" Pp "", pc);
+  jsarr_.AddValue(hex_buffer);
+  jsarr_.AddValue(human_buffer);
+
+  if (object != NULL) {
+    jsarr_.AddValue(*object);
+  } else {
+    jsarr_.AddValueNull();  // Not a reference to null.
+  }
+}
+
+void DisassembleToJSONStream::Print(const char* format, ...) {
+  va_list measure_args;
+  va_start(measure_args, format);
+  intptr_t len = Utils::VSNPrint(NULL, 0, format, measure_args);
+  va_end(measure_args);
+
+  char* p = reinterpret_cast<char*>(malloc(len + 1));
+  va_list print_args;
+  va_start(print_args, format);
+  intptr_t len2 = Utils::VSNPrint(p, len, format, print_args);
+  va_end(print_args);
+  ASSERT(len == len2);
+  for (intptr_t i = 0; i < len; i++) {
+    if (p[i] == '\n' || p[i] == '\r') {
+      p[i] = ' ';
+    }
+  }
+  // Instructions are represented as four consecutive values in a JSON array.
+  // Comments only use the third slot. See above comment for more information.
+  jsarr_.AddValueNull();
+  jsarr_.AddValueNull();
+  jsarr_.AddValue(p);
+  jsarr_.AddValueNull();
+  free(p);
+}
+#endif  // !defined(PRODUCT)
+
 }  // namespace dart
diff --git a/runtime/vm/compiler/assembler/disassembler.h b/runtime/vm/compiler/assembler/disassembler.h
index 77ad2ce..d58a0c9 100644
--- a/runtime/vm/compiler/assembler/disassembler.h
+++ b/runtime/vm/compiler/assembler/disassembler.h
@@ -61,6 +61,7 @@
   DISALLOW_COPY_AND_ASSIGN(DisassembleToStdout);
 };
 
+#if !defined(PRODUCT)
 // Disassemble into a JSONStream.
 class DisassembleToJSONStream : public DisassemblyFormatter {
  public:
@@ -82,6 +83,7 @@
   DISALLOW_ALLOCATION();
   DISALLOW_COPY_AND_ASSIGN(DisassembleToJSONStream);
 };
+#endif  // !defined(PRODUCT)
 
 #if !defined(PRODUCT) || defined(FORCE_INCLUDE_DISASSEMBLER)
 // Basic disassembly formatter that outputs the disassembled instruction
diff --git a/runtime/vm/compiler/assembler/disassembler_arm64.cc b/runtime/vm/compiler/assembler/disassembler_arm64.cc
index 490569d..e742ef7 100644
--- a/runtime/vm/compiler/assembler/disassembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/disassembler_arm64.cc
@@ -255,7 +255,9 @@
 void ARM64Decoder::PrintPairMemOperand(Instr* instr) {
   const Register rn = instr->RnField();
   const uint32_t simm7 = instr->SImm7Field();
-  const int32_t offset = simm7 << (2 + instr->Bit(31));
+  const intptr_t shift =
+      (instr->Bit(26) == 1) ? 2 + instr->SzField() : 2 + instr->SFField();
+  const int32_t offset = simm7 << shift;
   Print("[");
   PrintRegister(rn, R31IsSP);
   switch (instr->Bits(23, 3)) {
@@ -300,6 +302,11 @@
     PrintRegister(reg, R31IsZR);
     return 2;
   } else if (format[1] == 't') {  // 'rt: Rt register
+    if (format[2] == '2') {
+      int reg = instr->Rt2Field();
+      PrintRegister(reg, R31IsZR);
+      return 3;
+    }
     int reg = instr->RtField();
     PrintRegister(reg, R31IsZR);
     return 2;
@@ -331,6 +338,11 @@
     PrintVRegister(reg);
     return 2;
   } else if (format[1] == 't') {
+    if (format[2] == '2') {
+      int reg = instr->Vt2Field();
+      PrintVRegister(reg);
+      return 3;
+    }
     int reg = instr->VtField();
     PrintVRegister(reg);
     return 2;
@@ -536,6 +548,32 @@
       PrintMemOperand(instr);
       return 5;
     }
+    case 'o': {
+      ASSERT(STRING_STARTS_WITH(format, "opc"));
+      if (instr->Bit(26) == 0) {
+        if (instr->Bit(31) == 0) {
+          Print("w");
+        } else {
+          // 64-bit width is most commonly used, no need to print "x".
+        }
+      } else {
+        switch (instr->Bits(30, 2)) {
+          case 0:
+            Print("s");
+            break;
+          case 1:
+            Print("d");
+            break;
+          case 2:
+            Print("q");
+            break;
+          case 3:
+            Print("?");
+            break;
+        }
+      }
+      return 3;
+    }
     case 'p': {
       if (format[1] == 'c') {
         if (format[2] == 'a') {
@@ -719,12 +757,20 @@
 }
 
 void ARM64Decoder::DecodeLoadStoreRegPair(Instr* instr) {
-  if (instr->Bit(22) == 1) {
-    // Load.
-    Format(instr, "ldp'sf 'rt, 'ra, 'pmemop");
+  if (instr->Bit(26) == 1) {
+    // SIMD or FP src/dst.
+    if (instr->Bit(22) == 1) {
+      Format(instr, "fldp'opc 'vt, 'vt2, 'pmemop");
+    } else {
+      Format(instr, "fstp'opc 'vt, 'vt2, 'pmemop");
+    }
   } else {
-    // Store.
-    Format(instr, "stp'sf 'rt, 'ra, 'pmemop");
+    // Integer src/dst.
+    if (instr->Bit(22) == 1) {
+      Format(instr, "ldp'opc 'rt, 'rt2, 'pmemop");
+    } else {
+      Format(instr, "stp'opc 'rt, 'rt2, 'pmemop");
+    }
   }
 }
 
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index eed551a..d3c855b 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -489,6 +489,35 @@
 
 void ConstantPropagator::VisitStaticCall(StaticCallInstr* instr) {
   const auto kind = instr->function().recognized_kind();
+  if (kind != MethodRecognizer::kUnknown) {
+    if (instr->ArgumentCount() == 1) {
+      const Object& argument = instr->ArgumentAt(0)->constant_value();
+      if (IsUnknown(argument)) {
+        return;
+      }
+      if (IsConstant(argument)) {
+        Object& value = Object::ZoneHandle(Z);
+        if (instr->Evaluate(graph_, argument, &value)) {
+          SetValue(instr, value);
+          return;
+        }
+      }
+    } else if (instr->ArgumentCount() == 2) {
+      const Object& argument1 = instr->ArgumentAt(0)->constant_value();
+      const Object& argument2 = instr->ArgumentAt(1)->constant_value();
+      if (IsUnknown(argument1) || IsUnknown(argument2)) {
+        return;
+      }
+      if (IsConstant(argument1) && IsConstant(argument2)) {
+        Object& value = Object::ZoneHandle(Z);
+        if (instr->Evaluate(graph_, argument1, argument2, &value)) {
+          SetValue(instr, value);
+          return;
+        }
+      }
+    }
+  }
+
   switch (kind) {
     case MethodRecognizer::kOneByteString_equality:
     case MethodRecognizer::kTwoByteString_equality: {
@@ -499,29 +528,6 @@
         SetValue(instr, Bool::True());
         return;
       }
-      // Otherwise evaluate string compare with propagated constants.
-      const Object& o1 = instr->ArgumentAt(0)->constant_value();
-      const Object& o2 = instr->ArgumentAt(1)->constant_value();
-      if (o1.IsString() && o2.IsString()) {
-        SetValue(instr, Bool::Get(String::Cast(o1).Equals(String::Cast(o2))));
-        return;
-      }
-      break;
-    }
-    case MethodRecognizer::kStringBaseLength:
-    case MethodRecognizer::kStringBaseIsEmpty: {
-      ASSERT(instr->FirstArgIndex() == 0);
-      // Otherwise evaluate string length with propagated constants.
-      const Object& o = instr->ArgumentAt(0)->constant_value();
-      if (o.IsString()) {
-        const auto& str = String::Cast(o);
-        if (kind == MethodRecognizer::kStringBaseLength) {
-          SetValue(instr, Integer::ZoneHandle(Z, Integer::New(str.Length())));
-        } else {
-          SetValue(instr, Bool::Get(str.Length() == 0));
-        }
-        return;
-      }
       break;
     }
     default:
@@ -1454,6 +1460,10 @@
   SetValue(instr, non_constant_);
 }
 
+void ConstantPropagator::VisitLoadThread(LoadThreadInstr* instr) {
+  SetValue(instr, non_constant_);
+}
+
 void ConstantPropagator::VisitUnaryUint32Op(UnaryUint32OpInstr* instr) {
   // TODO(kmillikin): Handle unary operations.
   SetValue(instr, non_constant_);
diff --git a/runtime/vm/compiler/backend/evaluator.cc b/runtime/vm/compiler/backend/evaluator.cc
index fd8c0e8..9ab7d39 100644
--- a/runtime/vm/compiler/backend/evaluator.cc
+++ b/runtime/vm/compiler/backend/evaluator.cc
@@ -68,6 +68,16 @@
   return Integer::null();
 }
 
+static IntegerPtr BitLengthEvaluateRaw(const Integer& value, Zone* zone) {
+  if (value.IsSmi()) {
+    return Integer::New(Utils::BitLength(Smi::Cast(value).Value()), Heap::kOld);
+  } else if (value.IsMint()) {
+    return Integer::New(Utils::BitLength(Mint::Cast(value).value()),
+                        Heap::kOld);
+  }
+  return Integer::null();
+}
+
 int64_t Evaluator::TruncateTo(int64_t v, Representation r) {
   switch (r) {
     case kTagged: {
@@ -151,6 +161,34 @@
   return result.ptr();
 }
 
+IntegerPtr Evaluator::BitLengthEvaluate(const Object& value,
+                                        Representation representation,
+                                        Thread* thread) {
+  if (!value.IsInteger()) {
+    return Integer::null();
+  }
+  Zone* zone = thread->zone();
+  const Integer& value_int = Integer::Cast(value);
+  Integer& result =
+      Integer::Handle(zone, BitLengthEvaluateRaw(value_int, zone));
+
+  if (!result.IsNull()) {
+    if (!FlowGraph::IsConstantRepresentable(
+            result, representation,
+            /*tagged_value_must_be_smi=*/true)) {
+      // If this operation is not truncating it would deoptimize on overflow.
+      // Check that we match this behavior and don't produce a value that is
+      // larger than something this operation can produce. We could have
+      // specialized instructions that use this value under this assumption.
+      return Integer::null();
+    }
+
+    result ^= result.Canonicalize(thread);
+  }
+
+  return result.ptr();
+}
+
 double Evaluator::EvaluateDoubleOp(const double left,
                                    const double right,
                                    Token::Kind token_kind) {
diff --git a/runtime/vm/compiler/backend/evaluator.h b/runtime/vm/compiler/backend/evaluator.h
index e1ab8ea..dca583a 100644
--- a/runtime/vm/compiler/backend/evaluator.h
+++ b/runtime/vm/compiler/backend/evaluator.h
@@ -38,6 +38,12 @@
                                          Representation representation,
                                          Thread* thread);
 
+  // Evaluates an `int.bitLength` operation and returns a pointer to a
+  // canonicalized RawInteger.
+  static IntegerPtr BitLengthEvaluate(const Object& value,
+                                      Representation representation,
+                                      Thread* thread);
+
   // Evaluates a binary double operation and returns the result.
   static double EvaluateDoubleOp(const double left,
                                  const double right,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 7677166..3ec06a6 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -1796,9 +1796,6 @@
         result_location = Location::FpuRegisterLocation(
             AllocateFreeFpuRegister(blocked_fpu_registers));
         break;
-      case Location::kRequiresStackSlot:
-        UNREACHABLE();
-        break;
     }
     locs->set_out(0, result_location);
   }
@@ -2453,7 +2450,7 @@
   return false;
 }
 
-void FlowGraphCompiler::GenerateCidRangesCheck(
+bool FlowGraphCompiler::GenerateCidRangesCheck(
     compiler::Assembler* assembler,
     Register class_id_reg,
     const CidRangeVector& cid_ranges,
@@ -2467,7 +2464,7 @@
     if (fall_through_if_inside) {
       assembler->Jump(outside_range_lbl);
     }
-    return;
+    return false;
   }
 
   int bias = 0;
@@ -2484,6 +2481,27 @@
     bias = EmitTestAndCallCheckCid(assembler, jump_label, class_id_reg, range,
                                    bias, jump_on_miss);
   }
+  return bias != 0;
+}
+
+int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
+                                               compiler::Label* label,
+                                               Register class_id_reg,
+                                               const CidRangeValue& range,
+                                               int bias,
+                                               bool jump_on_miss) {
+  const intptr_t cid_start = range.cid_start;
+  if (range.IsSingleCid()) {
+    assembler->CompareImmediate(class_id_reg, cid_start - bias);
+    assembler->BranchIf(jump_on_miss ? NOT_EQUAL : EQUAL, label);
+  } else {
+    assembler->AddImmediate(class_id_reg, bias - cid_start);
+    bias = cid_start;
+    assembler->CompareImmediate(class_id_reg, range.Extent());
+    assembler->BranchIf(jump_on_miss ? UNSIGNED_GREATER : UNSIGNED_LESS_EQUAL,
+                        label);
+  }
+  return bias;
 }
 
 bool FlowGraphCompiler::CheckAssertAssignableTypeTestingABILocations(
@@ -3437,6 +3455,12 @@
   // If the location, payload, and container are equal, we're done.
   if (source.Equals(destination) && src_payload_type.Equals(dst_payload_type) &&
       src_container_type.Equals(dst_container_type)) {
+#if defined(TARGET_ARCH_RISCV64)
+    // Except we might still need to adjust for the difference between C's
+    // representation of uint32 (sign-extended to 64 bits) and Dart's
+    // (zero-extended).
+    EmitNativeMoveArchitecture(destination, source);
+#endif
     return;
   }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index f53e11f..f533e32 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -721,7 +721,9 @@
   // If [fall_through_if_inside] is `true`, then [outside_range_lbl] must be
   // supplied, since it will be jumped to in the last case if the cid is outside
   // the range.
-  static void GenerateCidRangesCheck(compiler::Assembler* assembler,
+  //
+  // Returns whether [class_id_reg] is clobbered by the check.
+  static bool GenerateCidRangesCheck(compiler::Assembler* assembler,
                                      Register class_id_reg,
                                      const CidRangeVector& cid_ranges,
                                      compiler::Label* inside_range_lbl,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index d95dd98..1d5dd66 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -804,32 +804,6 @@
   __ LoadClassId(class_id_reg, R0);
 }
 
-#undef __
-#define __ assembler->
-
-int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
-                                               compiler::Label* label,
-                                               Register class_id_reg,
-                                               const CidRangeValue& range,
-                                               int bias,
-                                               bool jump_on_miss) {
-  intptr_t cid_start = range.cid_start;
-  if (range.IsSingleCid()) {
-    __ AddImmediateSetFlags(class_id_reg, class_id_reg, bias - cid_start);
-    __ BranchIf(jump_on_miss ? NOT_ZERO : ZERO, label);
-    bias = cid_start;
-  } else {
-    __ AddImmediate(class_id_reg, class_id_reg, bias - cid_start);
-    __ CompareImmediate(class_id_reg, range.Extent());
-    __ BranchIf(jump_on_miss ? UNSIGNED_GREATER : UNSIGNED_LESS_EQUAL, label);
-    bias = cid_start;
-  }
-  return bias;
-}
-
-#undef __
-#define __ assembler()->
-
 void FlowGraphCompiler::EmitMove(Location destination,
                                  Location source,
                                  TemporaryRegisterAllocator* allocator) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index abad72a..1ccb222 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -814,32 +814,6 @@
   __ LoadClassId(class_id_reg, R0);
 }
 
-#undef __
-#define __ assembler->
-
-int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
-                                               compiler::Label* label,
-                                               Register class_id_reg,
-                                               const CidRangeValue& range,
-                                               int bias,
-                                               bool jump_on_miss) {
-  const intptr_t cid_start = range.cid_start;
-  if (range.IsSingleCid()) {
-    __ AddImmediateSetFlags(class_id_reg, class_id_reg, bias - cid_start);
-    __ BranchIf(jump_on_miss ? NOT_EQUAL : EQUAL, label);
-    bias = cid_start;
-  } else {
-    __ AddImmediate(class_id_reg, bias - cid_start);
-    bias = cid_start;
-    __ CompareImmediate(class_id_reg, range.Extent());
-    __ BranchIf(jump_on_miss ? UNSIGNED_GREATER : UNSIGNED_LESS_EQUAL, label);
-  }
-  return bias;
-}
-
-#undef __
-#define __ assembler()->
-
 void FlowGraphCompiler::EmitMove(Location destination,
                                  Location source,
                                  TemporaryRegisterAllocator* allocator) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 1daf4c0..9ed25de 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -808,31 +808,6 @@
   __ LoadClassId(class_id_reg, EAX);
 }
 
-#undef __
-#define __ assembler->
-
-int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
-                                               compiler::Label* label,
-                                               Register class_id_reg,
-                                               const CidRangeValue& range,
-                                               int bias,
-                                               bool jump_on_miss) {
-  intptr_t cid_start = range.cid_start;
-  if (range.IsSingleCid()) {
-    __ cmpl(class_id_reg, compiler::Immediate(cid_start - bias));
-    __ j(jump_on_miss ? NOT_EQUAL : EQUAL, label);
-  } else {
-    __ addl(class_id_reg, compiler::Immediate(bias - cid_start));
-    bias = cid_start;
-    __ cmpl(class_id_reg, compiler::Immediate(range.Extent()));
-    __ j(jump_on_miss ? ABOVE : BELOW_EQUAL, label);  // Unsigned higher.
-  }
-  return bias;
-}
-
-#undef __
-#define __ assembler()->
-
 void FlowGraphCompiler::EmitMove(Location destination,
                                  Location source,
                                  TemporaryRegisterAllocator* tmp) {
@@ -936,16 +911,16 @@
       } else {
         switch (src_type.AsPrimitive().representation()) {
           case compiler::ffi::kInt8:  // Sign extend operand.
-            __ movsxb(dst_reg, ByteRegisterOf(src_reg));
+            __ ExtendValue(dst_reg, src_reg, compiler::kByte);
             return;
           case compiler::ffi::kInt16:
-            __ movsxw(dst_reg, src_reg);
+            __ ExtendValue(dst_reg, src_reg, compiler::kTwoBytes);
             return;
           case compiler::ffi::kUint8:  // Zero extend operand.
-            __ movzxb(dst_reg, ByteRegisterOf(src_reg));
+            __ ExtendValue(dst_reg, src_reg, compiler::kUnsignedByte);
             return;
           case compiler::ffi::kUint16:
-            __ movzxw(dst_reg, src_reg);
+            __ ExtendValue(dst_reg, src_reg, compiler::kUnsignedTwoBytes);
             return;
           default:
             // 32 to 64 bit is covered in IL by Representation conversions.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index 11b6467..b89c53f 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -771,36 +771,6 @@
   __ LoadClassId(class_id_reg, A0);
 }
 
-#undef __
-#define __ assembler->
-
-int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
-                                               compiler::Label* label,
-                                               Register class_id_reg,
-                                               const CidRangeValue& range,
-                                               int bias,
-                                               bool jump_on_miss) {
-  const intptr_t cid_start = range.cid_start;
-  if (range.IsSingleCid()) {
-    __ AddImmediate(class_id_reg, class_id_reg, bias - cid_start);
-    if (jump_on_miss) {
-      __ bnez(class_id_reg, label);
-    } else {
-      __ beqz(class_id_reg, label);
-    }
-    bias = cid_start;
-  } else {
-    __ AddImmediate(class_id_reg, class_id_reg, bias - cid_start);
-    bias = cid_start;
-    __ CompareImmediate(class_id_reg, range.Extent());
-    __ BranchIf(jump_on_miss ? UNSIGNED_GREATER : UNSIGNED_LESS_EQUAL, label);
-  }
-  return bias;
-}
-
-#undef __
-#define __ assembler()->
-
 void FlowGraphCompiler::EmitMove(Location destination,
                                  Location source,
                                  TemporaryRegisterAllocator* allocator) {
@@ -931,7 +901,16 @@
       ASSERT(dst.num_regs() == 1);
       const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
       if (!sign_or_zero_extend) {
-        __ mv(dst_reg, src_reg);
+#if XLEN == 32
+        __ MoveRegister(dst_reg, src_reg);
+#else
+        if (src_size <= 4) {
+          // Signed-extended to XLEN, even unsigned types.
+          __ addiw(dst_reg, src_reg, 0);
+        } else {
+          __ MoveRegister(dst_reg, src_reg);
+        }
+#endif
       } else {
         switch (src_type.AsPrimitive().representation()) {
           // Calling convention: scalars are extended according to the sign of
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index bed125b..5ef22a0 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -781,34 +781,6 @@
   __ LoadClassId(class_id_reg, RAX);
 }
 
-#undef __
-#define __ assembler->
-
-int FlowGraphCompiler::EmitTestAndCallCheckCid(compiler::Assembler* assembler,
-                                               compiler::Label* label,
-                                               Register class_id_reg,
-                                               const CidRangeValue& range,
-                                               int bias,
-                                               bool jump_on_miss) {
-  // Note of WARNING: Due to smaller instruction encoding we use the 32-bit
-  // instructions on x64, which means the compare instruction has to be
-  // 32-bit (since the subtraction instruction is as well).
-  intptr_t cid_start = range.cid_start;
-  if (range.IsSingleCid()) {
-    __ cmpl(class_id_reg, compiler::Immediate(cid_start - bias));
-    __ BranchIf(jump_on_miss ? NOT_EQUAL : EQUAL, label);
-  } else {
-    __ addl(class_id_reg, compiler::Immediate(bias - cid_start));
-    bias = cid_start;
-    __ cmpl(class_id_reg, compiler::Immediate(range.Extent()));
-    __ BranchIf(jump_on_miss ? UNSIGNED_GREATER : UNSIGNED_LESS_EQUAL, label);
-  }
-  return bias;
-}
-
-#undef __
-#define __ assembler()->
-
 void FlowGraphCompiler::EmitMove(Location destination,
                                  Location source,
                                  TemporaryRegisterAllocator* tmp) {
@@ -944,7 +916,7 @@
           __ movw(dst_addr, src_reg);
           return;
         case 1:
-          __ movb(dst_addr, src_reg);
+          __ movb(dst_addr, ByteRegisterOf(src_reg));
           return;
         default:
           UNREACHABLE();
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 256e184..30f6bec 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -13,6 +13,7 @@
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/backend/linearscan.h"
 #include "vm/compiler/backend/locations.h"
+#include "vm/compiler/backend/locations_helpers.h"
 #include "vm/compiler/backend/loops.h"
 #include "vm/compiler/backend/range_analysis.h"
 #include "vm/compiler/ffi/frame_rebase.h"
@@ -4400,15 +4401,15 @@
 }
 
 void NativeParameterInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // The native entry frame has size -kExitLinkSlotFromFp. In order to access
-  // the top of stack from above the entry frame, we add a constant to account
-  // for the two frame pointers and two return addresses of the entry frame.
-  constexpr intptr_t kEntryFramePadding = 4;
-  compiler::ffi::FrameRebase rebase(
-      compiler->zone(),
-      /*old_base=*/SPREG, /*new_base=*/FPREG,
-      (-kExitLinkSlotFromEntryFp + kEntryFramePadding) *
-          compiler::target::kWordSize);
+  // There are two frames between SaveArguments and the NativeParameterInstr
+  // moves.
+  constexpr intptr_t delta =
+      kCallerSpSlotFromFp          // second frame FP to exit link slot
+      + -kExitLinkSlotFromEntryFp  // exit link slot to first frame FP
+      + kCallerSpSlotFromFp;       // first frame FP to argument save SP
+  compiler::ffi::FrameRebase rebase(compiler->zone(),
+                                    /*old_base=*/SPREG, /*new_base=*/FPREG,
+                                    delta * compiler::target::kWordSize);
   const auto& location =
       marshaller_.NativeLocationOfNativeParameter(def_index_);
   const auto& src =
@@ -5273,11 +5274,35 @@
     return CanonicalizeStringInterpolateSingle(this, flow_graph);
   }
 
+  const auto kind = function().recognized_kind();
+
+  if (kind != MethodRecognizer::kUnknown) {
+    if (ArgumentCount() == 1) {
+      const auto argument = ArgumentValueAt(0);
+      if (argument->BindsToConstant()) {
+        Object& result = Object::Handle();
+        if (Evaluate(flow_graph, argument->BoundConstant(), &result)) {
+          return flow_graph->TryCreateConstantReplacementFor(this, result);
+        }
+      }
+    } else if (ArgumentCount() == 2) {
+      const auto argument1 = ArgumentValueAt(0);
+      const auto argument2 = ArgumentValueAt(1);
+      if (argument1->BindsToConstant() && argument2->BindsToConstant()) {
+        Object& result = Object::Handle();
+        if (Evaluate(flow_graph, argument1->BoundConstant(),
+                     argument2->BoundConstant(), &result)) {
+          return flow_graph->TryCreateConstantReplacementFor(this, result);
+        }
+      }
+    }
+  }
+
   if (!compiler_state.is_aot()) {
     return this;
   }
 
-  if (function().recognized_kind() == MethodRecognizer::kObjectRuntimeType) {
+  if (kind == MethodRecognizer::kObjectRuntimeType) {
     if (input_use_list() == NULL) {
       // This function has only environment uses. In precompiled mode it is
       // fine to remove it - because we will never deoptimize.
@@ -5288,6 +5313,68 @@
   return this;
 }
 
+bool StaticCallInstr::Evaluate(FlowGraph* flow_graph,
+                               const Object& argument,
+                               Object* result) {
+  const auto kind = function().recognized_kind();
+  switch (kind) {
+    case MethodRecognizer::kSmi_bitLength: {
+      ASSERT(FirstArgIndex() == 0);
+      if (argument.IsInteger()) {
+        const Integer& value = Integer::Handle(
+            flow_graph->zone(),
+            Evaluator::BitLengthEvaluate(argument, representation(),
+                                         flow_graph->thread()));
+        if (!value.IsNull()) {
+          *result = value.ptr();
+          return true;
+        }
+      }
+      break;
+    }
+    case MethodRecognizer::kStringBaseLength:
+    case MethodRecognizer::kStringBaseIsEmpty: {
+      ASSERT(FirstArgIndex() == 0);
+      if (argument.IsString()) {
+        const auto& str = String::Cast(argument);
+        if (kind == MethodRecognizer::kStringBaseLength) {
+          *result = Integer::New(str.Length());
+        } else {
+          *result = Bool::Get(str.Length() == 0).ptr();
+          break;
+        }
+        return true;
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  return false;
+}
+
+bool StaticCallInstr::Evaluate(FlowGraph* flow_graph,
+                               const Object& argument1,
+                               const Object& argument2,
+                               Object* result) {
+  const auto kind = function().recognized_kind();
+  switch (kind) {
+    case MethodRecognizer::kOneByteString_equality:
+    case MethodRecognizer::kTwoByteString_equality: {
+      if (argument1.IsString() && argument2.IsString()) {
+        *result =
+            Bool::Get(String::Cast(argument1).Equals(String::Cast(argument2)))
+                .ptr();
+        return true;
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  return false;
+}
+
 LocationSummary* StaticCallInstr::MakeLocationSummary(Zone* zone,
                                                       bool optimizing) const {
   return MakeCallSummary(zone, this);
@@ -6407,26 +6494,21 @@
 LocationSummary* FfiCallInstr::MakeLocationSummaryInternal(
     Zone* zone,
     bool is_optimizing,
-    const Register temp) const {
-  // The temporary register needs to be callee-saved and not an argument
-  // register.
-  ASSERT(((1 << CallingConventions::kFfiAnyNonAbiRegister) &
-          CallingConventions::kArgumentRegisters) == 0);
+    const RegList temps) const {
+  auto contains_call =
+      is_leaf_ ? LocationSummary::kNativeLeafCall : LocationSummary::kCall;
 
-  // TODO(dartbug.com/45468): Investigate whether we can avoid spilling
-  // registers across ffi leaf calls by not using `kCall` here.
   LocationSummary* summary = new (zone) LocationSummary(
       zone, /*num_inputs=*/InputCount(),
-      /*num_temps=*/temp == kNoRegister ? 2 : 3, LocationSummary::kCall);
+      /*num_temps=*/Utils::CountOneBitsWord(temps), contains_call);
 
-  const Register temp0 = CallingConventions::kFfiAnyNonAbiRegister;
-  const Register temp1 = CallingConventions::kSecondNonArgumentRegister;
-  ASSERT(temp0 != temp1);
-  summary->set_temp(0, Location::RegisterLocation(temp0));
-  summary->set_temp(1, Location::RegisterLocation(temp1));
-
-  if (temp != kNoRegister) {
-    summary->set_temp(2, Location::RegisterLocation(temp));
+  intptr_t reg_i = 0;
+  for (intptr_t reg = 0; reg < kNumberOfCpuRegisters; reg++) {
+    if ((temps & (1 << reg)) != 0) {
+      summary->set_temp(reg_i,
+                        Location::RegisterLocation(static_cast<Register>(reg)));
+      reg_i++;
+    }
   }
 
   summary->set_in(TargetAddressIndex(),
@@ -6437,10 +6519,7 @@
   }
 
   if (marshaller_.PassTypedData()) {
-    // The register allocator already preserves this value across the call on
-    // a stack slot, so we'll use the spilled value directly.
-    summary->set_in(TypedDataIndex(), Location::RequiresStackSlot());
-
+    summary->set_in(TypedDataIndex(), Location::Any());
     // We don't care about return location, but we need to pass a register.
     summary->set_out(
         0, Location::RegisterLocation(CallingConventions::kReturnReg));
@@ -6567,14 +6646,14 @@
 void FfiCallInstr::EmitReturnMoves(FlowGraphCompiler* compiler,
                                    const Register temp0,
                                    const Register temp1) {
-  __ Comment("EmitReturnMoves");
-
   const auto& returnLocation =
       marshaller_.Location(compiler::ffi::kResultIndex);
   if (returnLocation.payload_type().IsVoid()) {
     return;
   }
 
+  __ Comment("EmitReturnMoves");
+
   NoTemporaryAllocator no_temp;
   if (returnLocation.IsRegisters() || returnLocation.IsFpuRegisters()) {
     const auto& src = returnLocation;
@@ -6588,14 +6667,20 @@
 
     // Get the typed data pointer which we have pinned to a stack slot.
     const Location typed_data_loc = locs()->in(TypedDataIndex());
-    ASSERT(typed_data_loc.IsStackSlot());
-    ASSERT(typed_data_loc.base_reg() == FPREG);
-    // If this is a leaf call there is no extra call frame to step through.
-    if (is_leaf_) {
-      __ LoadMemoryValue(temp0, FPREG, typed_data_loc.ToStackSlotOffset());
+    if (typed_data_loc.IsStackSlot()) {
+      ASSERT(typed_data_loc.base_reg() == FPREG);
+      // If this is a leaf call there is no extra call frame to step through.
+      if (is_leaf_) {
+        __ LoadMemoryValue(temp0, FPREG, typed_data_loc.ToStackSlotOffset());
+      } else {
+        __ LoadMemoryValue(
+            temp0, FPREG,
+            kSavedCallerFpSlotFromFp * compiler::target::kWordSize);
+        __ LoadMemoryValue(temp0, temp0, typed_data_loc.ToStackSlotOffset());
+      }
     } else {
-      __ LoadMemoryValue(temp0, FPREG, 0);
-      __ LoadMemoryValue(temp0, temp0, typed_data_loc.ToStackSlotOffset());
+      compiler->EmitMove(Location::RegisterLocation(temp0), typed_data_loc,
+                         &no_temp);
     }
     __ LoadField(temp0,
                  compiler::FieldAddress(
@@ -6863,6 +6948,11 @@
   return marshaller_.RepInFfiCall(compiler::ffi::kResultIndex);
 }
 
+// TODO(http://dartbug.com/48543): integrate with register allocator directly.
+DEFINE_BACKEND(LoadThread, (Register out)) {
+  __ MoveRegister(out, THR);
+}
+
 // SIMD
 
 SimdOpInstr::Kind SimdOpInstr::KindForOperator(MethodRecognizer::Kind kind) {
@@ -7038,12 +7128,10 @@
 
 // Define the metadata array.
 static const SimdOpInfo simd_op_information[] = {
-#define PP_APPLY(M, Args) M Args
 #define CASE(Arity, Mask, Name, Args, Result)                                  \
   {Arity, HAS_##Mask, REP(Result), {PP_APPLY(ENCODE_INPUTS_##Arity, Args)}},
     SIMD_OP_LIST(CASE, CASE)
 #undef CASE
-#undef PP_APPLY
 };
 
 // Undef all auxiliary macros.
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 809c16c..a7dd7aa 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -5,7 +5,6 @@
 #ifndef RUNTIME_VM_COMPILER_BACKEND_IL_H_
 #define RUNTIME_VM_COMPILER_BACKEND_IL_H_
 
-#include "vm/hash_map.h"
 #if defined(DART_PRECOMPILED_RUNTIME)
 #error "AOT runtime should not use compiler sources (including header files)"
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
@@ -202,7 +201,9 @@
   CidRange() : cid_start(kIllegalCid), cid_end(kIllegalCid) {}
 
   bool IsSingleCid() const { return cid_start == cid_end; }
-  bool Contains(intptr_t cid) { return cid_start <= cid && cid <= cid_end; }
+  bool Contains(intptr_t cid) const {
+    return cid_start <= cid && cid <= cid_end;
+  }
   int32_t Extent() const { return cid_end - cid_start; }
 
   // The number of class ids this range covers.
@@ -225,7 +226,9 @@
       : cid_start(other.cid_start), cid_end(other.cid_end) {}
 
   bool IsSingleCid() const { return cid_start == cid_end; }
-  bool Contains(intptr_t cid) { return cid_start <= cid && cid <= cid_end; }
+  bool Contains(intptr_t cid) const {
+    return cid_start <= cid && cid <= cid_end;
+  }
   int32_t Extent() const { return cid_end - cid_start; }
 
   // The number of class ids this range covers.
@@ -245,6 +248,18 @@
 
 typedef MallocGrowableArray<CidRangeValue> CidRangeVector;
 
+class CidRangeVectorUtils : public AllStatic {
+ public:
+  static bool ContainsCid(const CidRangeVector& ranges, intptr_t cid) {
+    for (const CidRangeValue& range : ranges) {
+      if (range.Contains(cid)) {
+        return true;
+      }
+    }
+    return false;
+  }
+};
+
 class HierarchyInfo : public ThreadStackResource {
  public:
   explicit HierarchyInfo(Thread* thread)
@@ -513,6 +528,7 @@
   M(BoxSmallInt, kNoGC)                                                        \
   M(IntConverter, kNoGC)                                                       \
   M(BitCast, kNoGC)                                                            \
+  M(LoadThread, kNoGC)                                                         \
   M(Deoptimize, kNoGC)                                                         \
   M(SimdOp, kNoGC)
 
@@ -4889,6 +4905,11 @@
   DECLARE_INSTRUCTION(StaticCall)
   virtual CompileType ComputeType() const;
   virtual Definition* Canonicalize(FlowGraph* flow_graph);
+  bool Evaluate(FlowGraph* flow_graph, const Object& argument, Object* result);
+  bool Evaluate(FlowGraph* flow_graph,
+                const Object& argument1,
+                const Object& argument2,
+                Object* result);
 
   // Accessors forwarded to the AST node.
   const Function& function() const { return function_; }
@@ -5284,7 +5305,7 @@
 
   LocationSummary* MakeLocationSummaryInternal(Zone* zone,
                                                bool is_optimizing,
-                                               const Register temp) const;
+                                               const RegList temps) const;
 
   // Clobbers both given registers.
   // `saved_fp` is used as the frame base to rebase off of.
@@ -5358,6 +5379,14 @@
   DISALLOW_COPY_AND_ASSIGN(AllocateHandleInstr);
 };
 
+// Populates the untagged base + offset outside the heap with a tagged value.
+//
+// The store must be outside of the heap, does not emit a store barrier.
+// For stores in the heap, use StoreIndexedInstr, which emits store barriers.
+//
+// Does not have a dual RawLoadFieldInstr, because for loads we do not have to
+// distinguish between loading from within the heap or outside the heap.
+// Use FlowGraphBuilder::RawLoadField.
 class RawStoreFieldInstr : public TemplateInstruction<2, NoThrow> {
  public:
   RawStoreFieldInstr(Value* base, Value* value, int32_t offset)
@@ -9272,6 +9301,32 @@
   DISALLOW_COPY_AND_ASSIGN(BitCastInstr);
 };
 
+class LoadThreadInstr : public TemplateDefinition<0, NoThrow, Pure> {
+ public:
+  LoadThreadInstr() : TemplateDefinition(DeoptId::kNone) {}
+
+  virtual bool ComputeCanDeoptimize() const { return false; }
+
+  virtual Representation representation() const { return kUntagged; }
+
+  virtual Representation RequiredInputRepresentation(intptr_t idx) const {
+    UNREACHABLE();
+  }
+
+  virtual CompileType ComputeType() const { return CompileType::Int(); }
+
+  // CSE is allowed. The thread should always be the same value.
+  virtual bool AttributesEqual(const Instruction& other) const {
+    ASSERT(other.IsLoadThread());
+    return true;
+  }
+
+  DECLARE_INSTRUCTION(LoadThread);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(LoadThreadInstr);
+};
+
 // SimdOpInstr
 //
 // All SIMD intrinsics and recognized methods are represented via instances
@@ -9833,7 +9888,6 @@
   return (constant == nullptr) || constant->value().ptr() == value.ptr();
 }
 
-
 }  // namespace dart
 
 #endif  // RUNTIME_VM_COMPILER_BACKEND_IL_H_
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 2d14822..c04289b 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -1402,27 +1402,33 @@
   __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
+#define R(r) (1 << r)
+
 LocationSummary* FfiCallInstr::MakeLocationSummary(Zone* zone,
                                                    bool is_optimizing) const {
-  return MakeLocationSummaryInternal(zone, is_optimizing, R0);
+  return MakeLocationSummaryInternal(
+      zone, is_optimizing,
+      (R(R0) | R(CallingConventions::kFfiAnyNonAbiRegister) |
+       R(CallingConventions::kSecondNonArgumentRegister)));
 }
 
+#undef R
+
 void FfiCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register branch = locs()->in(TargetAddressIndex()).reg();
+
+  // The temps are indexed according to their register number.
+  const Register temp2 = locs()->temp(0).reg();
   // For regular calls, this holds the FP for rebasing the original locations
   // during EmitParamMoves.
   // For leaf calls, this holds the SP used to restore the pre-aligned SP after
   // the call.
-  const Register saved_fp_or_sp = locs()->temp(0).reg();
-  RELEASE_ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-                  (1 << saved_fp_or_sp)) != 0);
-  const Register temp1 = locs()->temp(1).reg();
-  const Register temp2 = locs()->temp(2).reg();
-  const Register branch = locs()->in(TargetAddressIndex()).reg();
+  const Register saved_fp_or_sp = locs()->temp(1).reg();
+  const Register temp1 = locs()->temp(2).reg();
 
   // Ensure these are callee-saved register and are preserved across the call.
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-          (1 << saved_fp_or_sp)) != 0);
-  // temp doesn't need to be preserved.
+  ASSERT(IsCalleeSavedRegister(saved_fp_or_sp));
+  // Other temps don't need to be preserved.
 
   __ mov(saved_fp_or_sp,
          is_leaf_ ? compiler::Operand(SPREG) : compiler::Operand(FPREG));
@@ -1590,7 +1596,8 @@
   // Save the argument registers, in reverse order.
   SaveArguments(compiler);
 
-  // Enter the entry frame.
+  // Enter the entry frame. NativeParameterInstr expects this frame has size
+  // -exit_link_slot_from_entry_fp, verified below.
   SPILLS_LR_TO_FRAME(__ EnterFrame((1 << FP) | (1 << LR), 0));
 
   // Save a space for the code object.
@@ -5663,9 +5670,11 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // Call the function.
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
+  // Call the function. Parameters are already in their correct spots.
+  rt.Call(TargetFunction(), TargetFunction().argument_count());
 }
 
 LocationSummary* MathMinMaxInstr::MakeLocationSummary(Zone* zone,
@@ -6115,15 +6124,20 @@
   __ vmovd(D1, D2);
   if (TargetCPUFeatures::hardfp_supported()) {
     ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
-    __ CallRuntime(instr->TargetFunction(), kInputCount);
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    rt.Call(instr->TargetFunction(), kInputCount);
   } else {
     // If the ABI is not "hardfp", then we have to move the double arguments
     // to the integer registers, and take the results from the integer
     // registers.
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
     __ vmovrrd(R0, R1, D0);
     __ vmovrrd(R2, R3, D1);
-    ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
-    __ CallRuntime(instr->TargetFunction(), kInputCount);
+    rt.Call(instr->TargetFunction(), kInputCount);
     __ vmovdrr(D0, R0, R1);
     __ vmovdrr(D1, R2, R3);
   }
@@ -6141,16 +6155,20 @@
     __ vmovd(D1, D2);
   }
   if (TargetCPUFeatures::hardfp_supported()) {
-    ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-    __ CallRuntime(TargetFunction(), InputCount());
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    rt.Call(TargetFunction(), TargetFunction().argument_count());
   } else {
     // If the ABI is not "hardfp", then we have to move the double arguments
     // to the integer registers, and take the results from the integer
     // registers.
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
     __ vmovrrd(R0, R1, D0);
     __ vmovrrd(R2, R3, D1);
-    ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-    __ CallRuntime(TargetFunction(), InputCount());
+    rt.Call(TargetFunction(), TargetFunction().argument_count());
     __ vmovdrr(D0, R0, R1);
     __ vmovdrr(D1, R2, R3);
   }
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 33b02c1..2467df7 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -1227,27 +1227,35 @@
   __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
+#define R(r) (1 << r)
+
 LocationSummary* FfiCallInstr::MakeLocationSummary(Zone* zone,
                                                    bool is_optimizing) const {
-  return MakeLocationSummaryInternal(zone, is_optimizing, R11);
+  return MakeLocationSummaryInternal(
+      zone, is_optimizing,
+      (R(CallingConventions::kSecondNonArgumentRegister) | R(R11) |
+       R(CallingConventions::kFfiAnyNonAbiRegister) | R(R25)));
 }
 
+#undef R
+
 void FfiCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register branch = locs()->in(TargetAddressIndex()).reg();
+
+  // The temps are indexed according to their register number.
+  const Register temp1 = locs()->temp(0).reg();
+  const Register temp2 = locs()->temp(1).reg();
   // For regular calls, this holds the FP for rebasing the original locations
   // during EmitParamMoves.
   // For leaf calls, this holds the SP used to restore the pre-aligned SP after
   // the call.
-  const Register saved_fp_or_sp = locs()->temp(0).reg();
-  RELEASE_ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-                  (1 << saved_fp_or_sp)) != 0);
-  const Register temp1 = locs()->temp(1).reg();
-  const Register temp2 = locs()->temp(2).reg();
-  const Register branch = locs()->in(TargetAddressIndex()).reg();
+  const Register saved_fp_or_sp = locs()->temp(2).reg();
+  const Register temp_csp = locs()->temp(3).reg();
 
   // Ensure these are callee-saved register and are preserved across the call.
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-          (1 << saved_fp_or_sp)) != 0);
-  // temps don't need to be preserved.
+  ASSERT(IsCalleeSavedRegister(saved_fp_or_sp));
+  ASSERT(IsCalleeSavedRegister(temp_csp));
+  // Other temps don't need to be preserved.
 
   __ mov(saved_fp_or_sp, is_leaf_ ? SPREG : FPREG);
 
@@ -1279,14 +1287,14 @@
 
     // We are entering runtime code, so the C stack pointer must be restored
     // from the stack limit to the top of the stack.
-    __ mov(R25, CSP);
+    __ mov(temp_csp, CSP);
     __ mov(CSP, SP);
 
     __ blr(branch);
 
     // Restore the Dart stack pointer.
     __ mov(SP, CSP);
-    __ mov(CSP, R25);
+    __ mov(CSP, temp_csp);
 
 #if !defined(PRODUCT)
     __ LoadImmediate(temp1, compiler::target::Thread::vm_tag_dart_id());
@@ -1315,14 +1323,14 @@
 
       // We are entering runtime code, so the C stack pointer must be restored
       // from the stack limit to the top of the stack.
-      __ mov(R25, CSP);
+      __ mov(temp_csp, CSP);
       __ mov(CSP, SP);
 
       __ blr(branch);
 
       // Restore the Dart stack pointer.
       __ mov(SP, CSP);
-      __ mov(CSP, R25);
+      __ mov(CSP, temp_csp);
 
       // Update information in the thread object and leave the safepoint.
       __ TransitionNativeToGenerated(temp1, /*leave_safepoint=*/true);
@@ -1431,7 +1439,8 @@
   // Save the argument registers, in reverse order.
   SaveArguments(compiler);
 
-  // Enter the entry frame.
+  // Enter the entry frame. NativeParameterInstr expects this frame has size
+  // -exit_link_slot_from_entry_fp, verified below.
   __ EnterFrame(0);
 
   // Save a space for the code object.
@@ -4707,9 +4716,11 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // Call the function.
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
+  // Call the function. Parameters are already in their correct spots.
+  rt.Call(TargetFunction(), TargetFunction().argument_count());
 }
 
 LocationSummary* MathMinMaxInstr::MakeLocationSummary(Zone* zone,
@@ -5162,9 +5173,15 @@
 
   __ Bind(&do_pow);
   __ fmovdd(base, saved_base);  // Restore base.
-
-  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(instr->TargetFunction(), kInputCount);
+  {
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    ASSERT(base == V0);
+    ASSERT(exp == V1);
+    rt.Call(instr->TargetFunction(), kInputCount);
+    ASSERT(result == V0);
+  }
   __ Bind(&skip_call);
 }
 
@@ -5173,8 +5190,16 @@
     InvokeDoublePow(compiler, this);
     return;
   }
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), InputCount());
+
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
+  ASSERT(locs()->in(0).fpu_reg() == V0);
+  if (InputCount() == 2) {
+    ASSERT(locs()->in(1).fpu_reg() == V1);
+  }
+  rt.Call(TargetFunction(), InputCount());
+  ASSERT(locs()->out(0).fpu_reg() == V0);
 }
 
 LocationSummary* ExtractNthOutputInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 99b20f7..0d29e71 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -998,24 +998,32 @@
   __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
+#define R(r) (1 << r)
+
 LocationSummary* FfiCallInstr::MakeLocationSummary(Zone* zone,
                                                    bool is_optimizing) const {
-  return MakeLocationSummaryInternal(zone, is_optimizing, kNoRegister);
+  return MakeLocationSummaryInternal(
+      zone, is_optimizing,
+      (R(CallingConventions::kSecondNonArgumentRegister) |
+       R(CallingConventions::kFfiAnyNonAbiRegister)));
 }
 
+#undef R
+
 void FfiCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register branch = locs()->in(TargetAddressIndex()).reg();
+
+  // The temps are indexed according to their register number.
+  const Register temp = locs()->temp(0).reg();
   // For regular calls, this holds the FP for rebasing the original locations
   // during EmitParamMoves.
   // For leaf calls, this holds the SP used to restore the pre-aligned SP after
   // the call.
-  const Register saved_fp_or_sp = locs()->temp(0).reg();
-  const Register temp = locs()->temp(1).reg();
-  const Register branch = locs()->in(TargetAddressIndex()).reg();
+  const Register saved_fp_or_sp = locs()->temp(1).reg();
 
   // Ensure these are callee-saved register and are preserved across the call.
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-          (1 << saved_fp_or_sp)) != 0);
-  // temp doesn't need to be preserved.
+  ASSERT(IsCalleeSavedRegister(saved_fp_or_sp));
+  // Other temps don't need to be preserved.
 
   __ movl(saved_fp_or_sp, is_leaf_ ? SPREG : FPREG);
 
@@ -1140,7 +1148,8 @@
 void NativeEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   __ Bind(compiler->GetJumpLabel(this));
 
-  // Enter the entry frame.
+  // Enter the entry frame. NativeParameterInstr expects this frame has size
+  // -exit_link_slot_from_entry_fp, verified below.
   __ EnterFrame(0);
 
   // Save a space for the code object.
@@ -4803,23 +4812,14 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // Save ESP. EDI is chosen because it is callee saved so we do not need to
-  // back it up before calling into the runtime.
-  static const Register kSavedSPReg = EDI;
-  __ movl(kSavedSPReg, ESP);
-  __ ReserveAlignedFrameSpace(kWordSize * TargetFunction().argument_count());
-
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/4 * compiler::target::kWordSize,
+                                /*preserve_registers=*/false);
   __ movl(compiler::Address(ESP, +0 * kWordSize), locs()->in(0).reg());
   __ movl(compiler::Address(ESP, +1 * kWordSize), locs()->in(1).reg());
   __ movl(compiler::Address(ESP, +2 * kWordSize), locs()->in(2).reg());
   __ movl(compiler::Address(ESP, +3 * kWordSize), locs()->in(3).reg());
-
-  // Call the function.
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
-
-  // Restore ESP and pop the old value off the stack.
-  __ movl(ESP, kSavedSPReg);
+  rt.Call(TargetFunction(), 4);
 }
 
 LocationSummary* MathMinMaxInstr::MakeLocationSummary(Zone* zone,
@@ -5280,18 +5280,17 @@
   __ jmp(&skip_call);
 
   __ Bind(&do_pow);
-  // Save ESP.
-  __ movl(locs->temp(InvokeMathCFunctionInstr::kSavedSpTempIndex).reg(), ESP);
-  __ ReserveAlignedFrameSpace(kDoubleSize * kInputCount);
-  for (intptr_t i = 0; i < kInputCount; i++) {
-    __ movsd(compiler::Address(ESP, kDoubleSize * i), locs->in(i).fpu_reg());
+  {
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/kDoubleSize * kInputCount,
+                                  /*preserve_registers=*/false);
+    for (intptr_t i = 0; i < kInputCount; i++) {
+      __ movsd(compiler::Address(ESP, kDoubleSize * i), locs->in(i).fpu_reg());
+    }
+    rt.Call(instr->TargetFunction(), kInputCount);
+    __ fstpl(compiler::Address(ESP, 0));
+    __ movsd(locs->out(0).fpu_reg(), compiler::Address(ESP, 0));
   }
-  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(instr->TargetFunction(), kInputCount);
-  __ fstpl(compiler::Address(ESP, 0));
-  __ movsd(locs->out(0).fpu_reg(), compiler::Address(ESP, 0));
-  // Restore ESP.
-  __ movl(ESP, locs->temp(InvokeMathCFunctionInstr::kSavedSpTempIndex).reg());
   __ Bind(&skip_call);
 }
 
@@ -5300,19 +5299,19 @@
     InvokeDoublePow(compiler, this);
     return;
   }
-  // Save ESP.
-  __ movl(locs()->temp(kSavedSpTempIndex).reg(), ESP);
-  __ ReserveAlignedFrameSpace(kDoubleSize * InputCount());
-  for (intptr_t i = 0; i < InputCount(); i++) {
-    __ movsd(compiler::Address(ESP, kDoubleSize * i), locs()->in(i).fpu_reg());
-  }
 
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), InputCount());
-  __ fstpl(compiler::Address(ESP, 0));
-  __ movsd(locs()->out(0).fpu_reg(), compiler::Address(ESP, 0));
-  // Restore ESP.
-  __ movl(ESP, locs()->temp(kSavedSpTempIndex).reg());
+  {
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/kDoubleSize * InputCount(),
+                                  /*preserve_registers=*/false);
+    for (intptr_t i = 0; i < InputCount(); i++) {
+      __ movsd(compiler::Address(ESP, kDoubleSize * i),
+               locs()->in(i).fpu_reg());
+    }
+    rt.Call(TargetFunction(), InputCount());
+    __ fstpl(compiler::Address(ESP, 0));
+    __ movsd(locs()->out(0).fpu_reg(), compiler::Address(ESP, 0));
+  }
 }
 
 LocationSummary* ExtractNthOutputInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 51aa2b4..5f31d92 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -1374,10 +1374,14 @@
   __ Drop(ArgumentCount() + 1);  // Drop the arguments and result.
 }
 
+#define R(r) (1 << r)
+
 LocationSummary* FfiCallInstr::MakeLocationSummary(Zone* zone,
                                                    bool is_optimizing) const {
-  LocationSummary* summary =
-      MakeLocationSummaryInternal(zone, is_optimizing, CALLEE_SAVED_TEMP2);
+  LocationSummary* summary = MakeLocationSummaryInternal(
+      zone, is_optimizing,
+      (R(CallingConventions::kSecondNonArgumentRegister) |
+       R(CallingConventions::kFfiAnyNonAbiRegister) | R(CALLEE_SAVED_TEMP2)));
   // A3/A4/A5 are blocked during Dart register allocation because they are
   // assigned to TMP/TMP2/PP. This assignment is important for reducing code
   // size. To work around this for FFI calls, the FFI argument definitions are
@@ -1400,17 +1404,20 @@
   return summary;
 }
 
+#undef R
+
 void FfiCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register target = locs()->in(TargetAddressIndex()).reg();
+
+  // The temps are indexed according to their register number.
+  const Register temp1 = locs()->temp(0).reg();
   // For regular calls, this holds the FP for rebasing the original locations
   // during EmitParamMoves.
   // For leaf calls, this holds the SP used to restore the pre-aligned SP after
   // the call.
-  const Register saved_fp_or_sp = locs()->temp(0).reg();
-  RELEASE_ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-                  (1 << saved_fp_or_sp)) != 0);
-  const Register temp1 = locs()->temp(1).reg();
+  const Register saved_fp_or_sp = locs()->temp(1).reg();
   const Register temp2 = locs()->temp(2).reg();
-  const Register target = locs()->in(TargetAddressIndex()).reg();
+
   ASSERT(temp1 != target);
   ASSERT(temp2 != target);
   ASSERT(temp1 != saved_fp_or_sp);
@@ -1418,9 +1425,8 @@
   ASSERT(saved_fp_or_sp != target);
 
   // Ensure these are callee-saved register and are preserved across the call.
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters &
-          (1 << saved_fp_or_sp)) != 0);
-  // temps don't need to be preserved.
+  ASSERT(IsCalleeSavedRegister(saved_fp_or_sp));
+  // Other temps don't need to be preserved.
 
   __ mv(saved_fp_or_sp, is_leaf_ ? SPREG : FPREG);
 
@@ -1452,6 +1458,9 @@
 
     EmitCall(compiler, target);
 
+    ASSERT(!IsCalleeSavedRegister(PP));
+    __ RestorePoolPointer();
+
 #if !defined(PRODUCT)
     __ LoadImmediate(temp1, compiler::target::Thread::vm_tag_dart_id());
     __ StoreToOffset(temp1, THR, compiler::target::Thread::vm_tag_offset());
@@ -1585,7 +1594,8 @@
   // Save the argument registers, in reverse order.
   SaveArguments(compiler);
 
-  // Enter the entry frame.
+  // Enter the entry frame. NativeParameterInstr expects this frame has size
+  // -exit_link_slot_from_entry_fp, verified below.
   __ EnterFrame(0);
 
   // Save a space for the code object.
@@ -4518,13 +4528,13 @@
   } else if (!CanDeoptimize()) {
     compiler::Label done;
     __ SmiUntag(out, value);
-    __ BranchIfSmi(value, &done);
+    __ BranchIfSmi(value, &done, compiler::Assembler::kNearJump);
     LoadInt32FromMint(compiler, value, out, NULL);
     __ Bind(&done);
   } else {
     compiler::Label done;
     __ SmiUntag(out, value);
-    __ BranchIfSmi(value, &done);
+    __ BranchIfSmi(value, &done, compiler::Assembler::kNearJump);
     __ CompareClassId(value, kMintCid, TMP);
     __ BranchIf(NE, deopt);
     LoadInt32FromMint(compiler, value, out, out_of_range);
@@ -4550,13 +4560,13 @@
     ASSERT(is_truncating());
     compiler::Label done;
     __ SmiUntag(out, value);
-    __ BranchIfSmi(value, &done);
+    __ BranchIfSmi(value, &done, compiler::Assembler::kNearJump);
     __ LoadFieldFromOffset(out, value, Mint::value_offset());
     __ Bind(&done);
   } else {
     compiler::Label done;
     __ SmiUntag(out, value);
-    __ BranchIfSmi(value, &done);
+    __ BranchIfSmi(value, &done, compiler::Assembler::kNearJump);
     __ CompareClassId(value, kMintCid, TMP);
     __ BranchIf(NE, deopt);
     __ LoadFieldFromOffset(out, value, Mint::value_offset());
@@ -4902,6 +4912,9 @@
     UNIMPLEMENTED();
   }
 
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
   if (locs()->in(3).IsRegister()) {
     __ mv(A3, locs()->in(3).reg());
   } else if (locs()->in(3).IsStackSlot()) {
@@ -4909,10 +4922,7 @@
   } else {
     UNIMPLEMENTED();
   }
-
-  // Call the function.
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
+  rt.Call(TargetFunction(), TargetFunction().argument_count());
 }
 
 LocationSummary* MathMinMaxInstr::MakeLocationSummary(Zone* zone,
@@ -5234,8 +5244,15 @@
     UNIMPLEMENTED();
   }
 
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), InputCount());
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
+  ASSERT(locs()->in(0).fpu_reg() == FA0);
+  if (InputCount() == 2) {
+    ASSERT(locs()->in(1).fpu_reg() == FA1);
+  }
+  rt.Call(TargetFunction(), InputCount());
+  ASSERT(locs()->out(0).fpu_reg() == FA0);
 
   // TODO(riscv): Special case pow?
 }
diff --git a/runtime/vm/compiler/backend/il_test.cc b/runtime/vm/compiler/backend/il_test.cc
index d29658c..95f8ac0 100644
--- a/runtime/vm/compiler/backend/il_test.cc
+++ b/runtime/vm/compiler/backend/il_test.cc
@@ -679,4 +679,570 @@
   }));
 }
 
+#ifdef DART_TARGET_OS_WINDOWS
+const char* pointer_prefix = "0x";
+#else
+const char* pointer_prefix = "";
+#endif
+
+ISOLATE_UNIT_TEST_CASE(IRTest_RawStoreField) {
+  InstancePtr ptr = Smi::New(100);
+  OS::Print("&ptr %p\n", &ptr);
+
+  // clang-format off
+  auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
+    import 'dart:ffi';
+
+    void myFunction() {
+      final pointer = Pointer<IntPtr>.fromAddress(%s%p);
+      anotherFunction();
+    }
+
+    void anotherFunction() {}
+  )", pointer_prefix, &ptr), std::free);
+  // clang-format on
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
+  Invoke(root_library, "myFunction");
+  EXPECT_EQ(Smi::New(100), ptr);
+
+  const auto& my_function =
+      Function::Handle(GetFunction(root_library, "myFunction"));
+
+  TestPipeline pipeline(my_function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({
+      CompilerPass::kComputeSSA,
+  });
+
+  Zone* const zone = Thread::Current()->zone();
+
+  StaticCallInstr* pointer = nullptr;
+  StaticCallInstr* another_function_call = nullptr;
+  {
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveStaticCall, &pointer},
+        {kMatchAndMoveStaticCall, &another_function_call},
+    }));
+  }
+  auto pointer_value = Value(pointer);
+  auto* const load_untagged_instr = new (zone) LoadUntaggedInstr(
+      &pointer_value, compiler::target::PointerBase::data_offset());
+  flow_graph->InsertBefore(another_function_call, load_untagged_instr, nullptr,
+                           FlowGraph::kValue);
+  auto load_untagged_value = Value(load_untagged_instr);
+  auto pointer_value2 = Value(pointer);
+  auto* const raw_store_field_instr =
+      new (zone) RawStoreFieldInstr(&load_untagged_value, &pointer_value2, 0);
+  flow_graph->InsertBefore(another_function_call, raw_store_field_instr,
+                           nullptr, FlowGraph::kEffect);
+  another_function_call->RemoveFromGraph();
+
+  {
+    // Check we constructed the right graph.
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        kMatchAndMoveStaticCall,
+        kMatchAndMoveLoadUntagged,
+        kMatchAndMoveRawStoreField,
+    }));
+  }
+
+  pipeline.RunForcedOptimizedAfterSSAPasses();
+
+  {
+#if !defined(PRODUCT)
+    SetFlagScope<bool> sfs(&FLAG_disassemble_optimized, true);
+#endif
+    pipeline.CompileGraphAndAttachFunction();
+  }
+
+  // Ensure we can successfully invoke the function.
+  Invoke(root_library, "myFunction");
+
+  // Might be garbage if we ran a GC, but should never be a Smi.
+  EXPECT(!ptr.IsSmi());
+}
+
+// We do not have a RawLoadFieldInstr, instead we just use LoadIndexed for
+// loading from outside the heap.
+//
+// This test constructs to instructions from FlowGraphBuilder::RawLoadField
+// and exercises them to do a load from outside the heap.
+ISOLATE_UNIT_TEST_CASE(IRTest_RawLoadField) {
+  InstancePtr ptr = Smi::New(100);
+  intptr_t ptr2 = 100;
+  OS::Print("&ptr %p &ptr2 %p\n", &ptr, &ptr2);
+
+  // clang-format off
+  auto kScript = Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
+    import 'dart:ffi';
+
+    void myFunction() {
+      final pointer = Pointer<IntPtr>.fromAddress(%s%p);
+      anotherFunction();
+      final pointer2 = Pointer<IntPtr>.fromAddress(%s%p);
+      pointer2.value = 3;
+    }
+
+    void anotherFunction() {}
+  )", pointer_prefix, &ptr, pointer_prefix, &ptr2), std::free);
+  // clang-format on
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
+  Invoke(root_library, "myFunction");
+  EXPECT_EQ(Smi::New(100), ptr);
+  EXPECT_EQ(3, ptr2);
+
+  const auto& my_function =
+      Function::Handle(GetFunction(root_library, "myFunction"));
+
+  TestPipeline pipeline(my_function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({
+      CompilerPass::kComputeSSA,
+  });
+
+  Zone* const zone = Thread::Current()->zone();
+
+  StaticCallInstr* pointer = nullptr;
+  StaticCallInstr* another_function_call = nullptr;
+  StaticCallInstr* pointer2 = nullptr;
+  StaticCallInstr* pointer2_store = nullptr;
+  {
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveStaticCall, &pointer},
+        {kMatchAndMoveStaticCall, &another_function_call},
+        {kMatchAndMoveStaticCall, &pointer2},
+        {kMatchAndMoveStaticCall, &pointer2_store},
+    }));
+  }
+  auto pointer_value = Value(pointer);
+  auto* const load_untagged_instr = new (zone) LoadUntaggedInstr(
+      &pointer_value, compiler::target::PointerBase::data_offset());
+  flow_graph->InsertBefore(another_function_call, load_untagged_instr, nullptr,
+                           FlowGraph::kValue);
+  auto load_untagged_value = Value(load_untagged_instr);
+  auto* const constant_instr = new (zone) UnboxedConstantInstr(
+      Integer::ZoneHandle(zone, Integer::New(0, Heap::kOld)), kUnboxedIntPtr);
+  flow_graph->InsertBefore(another_function_call, constant_instr, nullptr,
+                           FlowGraph::kValue);
+  auto constant_value = Value(constant_instr);
+  auto* const load_indexed_instr = new (zone)
+      LoadIndexedInstr(&load_untagged_value, &constant_value,
+                       /*index_unboxed=*/true, /*index_scale=*/1, kArrayCid,
+                       kAlignedAccess, DeoptId::kNone, InstructionSource());
+  flow_graph->InsertBefore(another_function_call, load_indexed_instr, nullptr,
+                           FlowGraph::kValue);
+
+  another_function_call->RemoveFromGraph();
+  pointer2_store->InputAt(2)->definition()->ReplaceUsesWith(load_indexed_instr);
+
+  {
+    // Check we constructed the right graph.
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        kMatchAndMoveStaticCall,
+        kMatchAndMoveLoadUntagged,
+        kMatchAndMoveUnboxedConstant,
+        kMatchAndMoveLoadIndexed,
+        kMatchAndMoveStaticCall,
+        kMatchAndMoveStaticCall,
+    }));
+  }
+
+  pipeline.RunForcedOptimizedAfterSSAPasses();
+
+  {
+#if !defined(PRODUCT)
+    SetFlagScope<bool> sfs(&FLAG_disassemble_optimized, true);
+#endif
+    pipeline.CompileGraphAndAttachFunction();
+  }
+
+  // Ensure we can successfully invoke the function.
+  Invoke(root_library, "myFunction");
+  EXPECT_EQ(Smi::New(100), ptr);
+  EXPECT_EQ(100, ptr2);
+}
+
+ISOLATE_UNIT_TEST_CASE(IRTest_LoadThread) {
+  // clang-format off
+  auto kScript = R"(
+    import 'dart:ffi';
+
+    int myFunction() {
+      return 100;
+    }
+
+    void anotherFunction() {}
+  )";
+  // clang-format on
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  Zone* const zone = Thread::Current()->zone();
+  auto& invoke_result = Instance::Handle(zone);
+  invoke_result ^= Invoke(root_library, "myFunction");
+  EXPECT_EQ(Smi::New(100), invoke_result.ptr());
+
+  const auto& my_function =
+      Function::Handle(GetFunction(root_library, "myFunction"));
+
+  TestPipeline pipeline(my_function, CompilerPass::kJIT);
+  FlowGraph* flow_graph = pipeline.RunPasses({
+      CompilerPass::kComputeSSA,
+  });
+
+  ReturnInstr* return_instr = nullptr;
+  {
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchReturn, &return_instr},
+    }));
+  }
+
+  auto* const load_thread_instr = new (zone) LoadThreadInstr();
+  flow_graph->InsertBefore(return_instr, load_thread_instr, nullptr,
+                           FlowGraph::kValue);
+  auto load_thread_value = Value(load_thread_instr);
+
+  auto* const convert_instr = new (zone) IntConverterInstr(
+      kUntagged, kUnboxedFfiIntPtr, &load_thread_value, DeoptId::kNone);
+  flow_graph->InsertBefore(return_instr, convert_instr, nullptr,
+                           FlowGraph::kValue);
+  auto convert_value = Value(convert_instr);
+
+  auto* const box_instr = BoxInstr::Create(kUnboxedFfiIntPtr, &convert_value);
+  flow_graph->InsertBefore(return_instr, box_instr, nullptr, FlowGraph::kValue);
+
+  return_instr->InputAt(0)->definition()->ReplaceUsesWith(box_instr);
+
+  {
+    // Check we constructed the right graph.
+    ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry());
+    EXPECT(cursor.TryMatch({
+        kMoveGlob,
+        kMatchAndMoveLoadThread,
+        kMatchAndMoveIntConverter,
+        kMatchAndMoveBox,
+        kMatchReturn,
+    }));
+  }
+
+  pipeline.RunForcedOptimizedAfterSSAPasses();
+
+  {
+#if !defined(PRODUCT)
+    SetFlagScope<bool> sfs(&FLAG_disassemble_optimized, true);
+#endif
+    pipeline.CompileGraphAndAttachFunction();
+  }
+
+  // Ensure we can successfully invoke the function.
+  invoke_result ^= Invoke(root_library, "myFunction");
+  intptr_t result_int = Integer::Cast(invoke_result).AsInt64Value();
+  EXPECT_EQ(reinterpret_cast<intptr_t>(thread), result_int);
+}
+
+// Helper to set up an inlined FfiCall by replacing a StaticCall.
+FlowGraph* SetupFfiFlowgraph(TestPipeline* pipeline,
+                             Zone* zone,
+                             const compiler::ffi::CallMarshaller& marshaller,
+                             uword native_entry,
+                             bool is_leaf) {
+  FlowGraph* flow_graph = pipeline->RunPasses({CompilerPass::kComputeSSA});
+
+  // Make an FfiCall based on ffi_trampoline that calls our native function.
+  auto ffi_call = new FfiCallInstr(zone, DeoptId::kNone, marshaller, is_leaf);
+  RELEASE_ASSERT(ffi_call->InputCount() == 1);
+  // TargetAddress is the function pointer called.
+  const Representation address_repr =
+      compiler::target::kWordSize == 4 ? kUnboxedUint32 : kUnboxedInt64;
+  ffi_call->SetInputAt(
+      ffi_call->TargetAddressIndex(),
+      new Value(flow_graph->GetConstant(
+          Integer::Handle(Integer::NewCanonical(native_entry)), address_repr)));
+
+  // Replace the placeholder StaticCall with an FfiCall to our native function.
+  {
+    StaticCallInstr* static_call = nullptr;
+    {
+      ILMatcher cursor(flow_graph, flow_graph->graph_entry()->normal_entry(),
+                       /*trace=*/false);
+      cursor.TryMatch({kMoveGlob, {kMatchStaticCall, &static_call}});
+    }
+    RELEASE_ASSERT(static_call != nullptr);
+
+    flow_graph->InsertBefore(static_call, ffi_call, /*env=*/nullptr,
+                             FlowGraph::kEffect);
+    static_call->RemoveFromGraph(/*return_previous=*/false);
+  }
+
+  // Run remaining relevant compiler passes.
+  pipeline->RunAdditionalPasses({
+      CompilerPass::kApplyICData,
+      CompilerPass::kTryOptimizePatterns,
+      CompilerPass::kSetOuterInliningId,
+      CompilerPass::kTypePropagation,
+      // Skipping passes that don't seem to do anything for this test.
+      CompilerPass::kWidenSmiToInt32,
+      CompilerPass::kSelectRepresentations,
+      // Skipping passes that don't seem to do anything for this test.
+      CompilerPass::kTypePropagation,
+      CompilerPass::kRangeAnalysis,
+      // Skipping passes that don't seem to do anything for this test.
+      CompilerPass::kFinalizeGraph,
+      CompilerPass::kCanonicalize,
+      CompilerPass::kAllocateRegisters,
+      CompilerPass::kReorderBlocks,
+  });
+
+  return flow_graph;
+}
+
+// Test that FFI calls spill all live values to the stack, and that FFI leaf
+// calls are free to use available ABI callee-save registers to avoid spilling.
+// Additionally test that register allocation is done correctly by clobbering
+// all volatile registers in the native function being called.
+ISOLATE_UNIT_TEST_CASE(IRTest_FfiCallInstrLeafDoesntSpill) {
+  SetFlagScope<int> sfs(&FLAG_sound_null_safety, kNullSafetyOptionStrong);
+
+  const char* kScript = R"(
+    import 'dart:ffi';
+
+    // This is purely a placeholder and is never called.
+    void placeholder() {}
+
+    // Will call the "doFfiCall" and exercise its code.
+    bool invokeDoFfiCall() {
+      final double result = doFfiCall(1, 2, 3, 1.0, 2.0, 3.0);
+      if (result != (2 + 3 + 4 + 2.0 + 3.0 + 4.0)) {
+        throw 'Failed. Result was $result.';
+      }
+      return true;
+    }
+
+    // Will perform a "C" call while having live values in registers
+    // across the FfiCall.
+    double doFfiCall(int a, int b, int c, double x, double y, double z) {
+      // Ensure there is at least one live value in a register.
+      a += 1;
+      b += 1;
+      c += 1;
+      x += 1.0;
+      y += 1.0;
+      z += 1.0;
+      // We'll replace this StaticCall with an FfiCall.
+      placeholder();
+      // Use the live value.
+      return (a + b + c + x + y + z);
+    }
+
+    // FFI trampoline function.
+    typedef NT = Void Function();
+    typedef DT = void Function();
+    Pointer<NativeFunction<NT>> ptr = Pointer.fromAddress(0);
+    DT getFfiTrampolineClosure() => ptr.asFunction(isLeaf:true);
+  )";
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+
+  // Build a "C" function that we can actually invoke.
+  auto& c_function = Instructions::Handle(
+      BuildInstructions([](compiler::Assembler* assembler) {
+        // Clobber all volatile registers to make sure caller doesn't rely on
+        // any non-callee-save register.
+        for (intptr_t reg = 0; reg < kNumberOfFpuRegisters; reg++) {
+          if ((kAbiVolatileFpuRegs & (1 << reg)) != 0) {
+#if defined(TARGET_ARCH_ARM)
+            // On ARM we need an extra scratch register for LoadDImmediate.
+            assembler->LoadDImmediate(static_cast<DRegister>(reg), 0.0, R3);
+#else
+            assembler->LoadDImmediate(static_cast<FpuRegister>(reg), 0.0);
+#endif
+          }
+        }
+        for (intptr_t reg = 0; reg < kNumberOfCpuRegisters; reg++) {
+          if ((kDartVolatileCpuRegs & (1 << reg)) != 0) {
+            assembler->LoadImmediate(static_cast<Register>(reg), 0xDEADBEEF);
+          }
+        }
+        assembler->Ret();
+      }));
+  uword native_entry = c_function.EntryPoint();
+
+  // Get initial compilation done.
+  Invoke(root_library, "invokeDoFfiCall");
+
+  const Function& do_ffi_call =
+      Function::Handle(GetFunction(root_library, "doFfiCall"));
+  RELEASE_ASSERT(!do_ffi_call.IsNull());
+
+  const auto& value = Closure::Handle(
+      Closure::RawCast(Invoke(root_library, "getFfiTrampolineClosure")));
+  RELEASE_ASSERT(value.IsClosure());
+  const auto& ffi_trampoline =
+      Function::ZoneHandle(Closure::Cast(value).function());
+  RELEASE_ASSERT(!ffi_trampoline.IsNull());
+
+  // Construct the FFICallInstr from the trampoline matching our native
+  // function.
+  const char* error = nullptr;
+  const auto marshaller_ptr = compiler::ffi::CallMarshaller::FromFunction(
+      thread->zone(), ffi_trampoline, &error);
+  RELEASE_ASSERT(error == nullptr);
+  RELEASE_ASSERT(marshaller_ptr != nullptr);
+  const auto& marshaller = *marshaller_ptr;
+
+  const auto& compile_and_run =
+      [&](bool is_leaf, std::function<void(ParallelMoveInstr*)> verify) {
+        // Build the SSA graph for "doFfiCall"
+        TestPipeline pipeline(do_ffi_call, CompilerPass::kJIT);
+        FlowGraph* flow_graph = SetupFfiFlowgraph(
+            &pipeline, thread->zone(), marshaller, native_entry, is_leaf);
+
+        {
+          ParallelMoveInstr* parallel_move = nullptr;
+          ILMatcher cursor(flow_graph,
+                           flow_graph->graph_entry()->normal_entry(),
+                           /*trace=*/false);
+          while (cursor.TryMatch(
+              {kMoveGlob, {kMatchAndMoveParallelMove, &parallel_move}})) {
+            verify(parallel_move);
+          }
+        }
+
+        // Finish the compilation and attach code so we can run it.
+        pipeline.CompileGraphAndAttachFunction();
+
+        // Ensure we can successfully invoke the FFI call.
+        auto& result = Object::Handle(Invoke(root_library, "invokeDoFfiCall"));
+        RELEASE_ASSERT(result.IsBool());
+        EXPECT(Bool::Cast(result).value());
+      };
+
+  intptr_t num_cpu_reg_to_stack_nonleaf = 0;
+  intptr_t num_cpu_reg_to_stack_leaf = 0;
+  intptr_t num_fpu_reg_to_stack_nonleaf = 0;
+  intptr_t num_fpu_reg_to_stack_leaf = 0;
+
+  // Test non-leaf spills live values.
+  compile_and_run(/*is_leaf=*/false, [&](ParallelMoveInstr* parallel_move) {
+    // TargetAddress is passed in register, live values are all spilled.
+    for (int i = 0; i < parallel_move->NumMoves(); i++) {
+      auto move = parallel_move->moves()[i];
+      if (move->src_slot()->IsRegister() && move->dest_slot()->IsStackSlot()) {
+        num_cpu_reg_to_stack_nonleaf++;
+      } else if (move->src_slot()->IsFpuRegister() &&
+                 move->dest_slot()->IsDoubleStackSlot()) {
+        num_fpu_reg_to_stack_nonleaf++;
+      }
+    }
+  });
+
+  // Test leaf calls do not cause spills of live values.
+  compile_and_run(/*is_leaf=*/true, [&](ParallelMoveInstr* parallel_move) {
+    // TargetAddress is passed in registers, live values are not spilled and
+    // remains in callee-save registers.
+    for (int i = 0; i < parallel_move->NumMoves(); i++) {
+      auto move = parallel_move->moves()[i];
+      if (move->src_slot()->IsRegister() && move->dest_slot()->IsStackSlot()) {
+        num_cpu_reg_to_stack_leaf++;
+      } else if (move->src_slot()->IsFpuRegister() &&
+                 move->dest_slot()->IsDoubleStackSlot()) {
+        num_fpu_reg_to_stack_leaf++;
+      }
+    }
+  });
+
+  // We should have less moves to the stack (i.e. spilling) in leaf calls.
+  EXPECT_LT(num_cpu_reg_to_stack_leaf, num_cpu_reg_to_stack_nonleaf);
+  // We don't have volatile FPU registers on all platforms.
+  const bool has_callee_save_fpu_regs =
+      Utils::CountOneBitsWord(kAbiVolatileFpuRegs) <
+      Utils::CountOneBitsWord(kAllFpuRegistersList);
+  EXPECT(!has_callee_save_fpu_regs ||
+         num_fpu_reg_to_stack_leaf < num_fpu_reg_to_stack_nonleaf);
+}
+
+static void TestConstantFoldToSmi(const Library& root_library,
+                                  const char* function_name,
+                                  CompilerPass::PipelineMode mode,
+                                  intptr_t expected_value) {
+  const auto& function =
+      Function::Handle(GetFunction(root_library, function_name));
+
+  TestPipeline pipeline(function, mode);
+  FlowGraph* flow_graph = pipeline.RunPasses({});
+
+  auto entry = flow_graph->graph_entry()->normal_entry();
+  EXPECT(entry != nullptr);
+
+  ReturnInstr* ret = nullptr;
+
+  ILMatcher cursor(flow_graph, entry, true, ParallelMovesHandling::kSkip);
+  RELEASE_ASSERT(cursor.TryMatch({
+      kMoveGlob,
+      {kMatchReturn, &ret},
+  }));
+
+  ConstantInstr* constant = ret->value()->definition()->AsConstant();
+  EXPECT(constant != nullptr);
+  if (constant != nullptr) {
+    const Object& value = constant->value();
+    EXPECT(value.IsSmi());
+    if (value.IsSmi()) {
+      const intptr_t int_value = Smi::Cast(value).Value();
+      EXPECT_EQ(expected_value, int_value);
+    }
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(ConstantFold_bitLength) {
+  // clang-format off
+  auto kScript = R"(
+      b0() => 0. bitLength;  // 0...00000
+      b1() => 1. bitLength;  // 0...00001
+      b100() => 100. bitLength;
+      b200() => 200. bitLength;
+      bffff() => 0xffff. bitLength;
+      m1() => (-1).bitLength;  // 1...11111
+      m2() => (-2).bitLength;  // 1...11110
+
+      main() {
+        b0();
+        b1();
+        b100();
+        b200();
+        bffff();
+        m1();
+        m2();
+      }
+    )";
+  // clang-format on
+
+  const auto& root_library = Library::Handle(LoadTestScript(kScript));
+  Invoke(root_library, "main");
+
+  auto test = [&](const char* function, intptr_t expected) {
+    TestConstantFoldToSmi(root_library, function, CompilerPass::kJIT, expected);
+    TestConstantFoldToSmi(root_library, function, CompilerPass::kAOT, expected);
+  };
+
+  test("b0", 0);
+  test("b1", 1);
+  test("b100", 7);
+  test("b200", 8);
+  test("bffff", 16);
+  test("m1", 0);
+  test("m2", 1);
+}
 }  // namespace dart
diff --git a/runtime/vm/compiler/backend/il_test_helper.cc b/runtime/vm/compiler/backend/il_test_helper.cc
index df48df4..e1b3f68 100644
--- a/runtime/vm/compiler/backend/il_test_helper.cc
+++ b/runtime/vm/compiler/backend/il_test_helper.cc
@@ -5,6 +5,7 @@
 #include "vm/compiler/backend/il_test_helper.h"
 
 #include "vm/compiler/aot/aot_call_specializer.h"
+#include "vm/compiler/assembler/disassembler.h"
 #include "vm/compiler/backend/block_scheduler.h"
 #include "vm/compiler/backend/flow_graph.h"
 #include "vm/compiler/backend/flow_graph_compiler.h"
@@ -16,6 +17,7 @@
 #include "vm/compiler/jit/compiler.h"
 #include "vm/compiler/jit/jit_call_specializer.h"
 #include "vm/dart_api_impl.h"
+#include "vm/flags.h"
 #include "vm/parser.h"
 #include "vm/unit_test.h"
 
@@ -186,6 +188,32 @@
   pass_state_->call_specializer = nullptr;
 }
 
+// Keep in sync with CompilerPass::RunForceOptimizedPipeline.
+void TestPipeline::RunForcedOptimizedAfterSSAPasses() {
+  RunAdditionalPasses({
+      CompilerPass::kSetOuterInliningId,
+      CompilerPass::kTypePropagation,
+      CompilerPass::kCanonicalize,
+      CompilerPass::kBranchSimplify,
+      CompilerPass::kIfConvert,
+      CompilerPass::kConstantPropagation,
+      CompilerPass::kTypePropagation,
+      CompilerPass::kWidenSmiToInt32,
+      CompilerPass::kSelectRepresentations_Final,
+      CompilerPass::kTypePropagation,
+      CompilerPass::kTryCatchOptimization,
+      CompilerPass::kEliminateEnvironments,
+      CompilerPass::kEliminateDeadPhis,
+      CompilerPass::kDCE,
+      CompilerPass::kCanonicalize,
+      CompilerPass::kDelayAllocations,
+      CompilerPass::kEliminateWriteBarriers,
+      CompilerPass::kFinalizeGraph,
+      CompilerPass::kAllocateRegisters,
+      CompilerPass::kReorderBlocks,
+  });
+}
+
 void TestPipeline::CompileGraphAndAttachFunction() {
   Zone* zone = thread_->zone();
   const bool optimized = true;
@@ -248,6 +276,12 @@
   if (mode_ == CompilerPass::kAOT) {
     EXPECT(deopt_info_array.IsNull() || deopt_info_array.Length() == 0);
   }
+
+#if !defined(PRODUCT)
+  if (FLAG_disassemble_optimized) {
+    Disassembler::DisassembleCode(function_, code, optimized);
+  }
+#endif
 }
 
 bool ILMatcher::TryMatch(std::initializer_list<MatchCode> match_codes,
diff --git a/runtime/vm/compiler/backend/il_test_helper.h b/runtime/vm/compiler/backend/il_test_helper.h
index babe427..6e77ecc 100644
--- a/runtime/vm/compiler/backend/il_test_helper.h
+++ b/runtime/vm/compiler/backend/il_test_helper.h
@@ -91,6 +91,8 @@
 
   void RunAdditionalPasses(std::initializer_list<CompilerPass::Id> passes);
 
+  void RunForcedOptimizedAfterSSAPasses();
+
   void CompileGraphAndAttachFunction();
 
  private:
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index de70052..f461761 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -1175,29 +1175,38 @@
   __ Drop(ArgumentCount());  // Drop the arguments.
 }
 
+#define R(r) (1 << r)
+
 LocationSummary* FfiCallInstr::MakeLocationSummary(Zone* zone,
                                                    bool is_optimizing) const {
-  // Use R10 as a temp register. We can't use RDI, RSI, RDX, R8, R9 as they are
-  // arg registers, and R11 is TMP.
-  return MakeLocationSummaryInternal(zone, is_optimizing, R10);
+  // Use R10 as a temp. register. We can't use RDI, RSI, RDX, R8, R9 as they are
+  // argument registers, and R11 is TMP.
+  return MakeLocationSummaryInternal(
+      zone, is_optimizing,
+      (R(CallingConventions::kSecondNonArgumentRegister) | R(R10) |
+       R(CallingConventions::kFfiAnyNonAbiRegister)));
 }
 
+#undef R
+
 void FfiCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  const Register target_address = locs()->in(TargetAddressIndex()).reg();
+
+  // The temps are indexed according to their register number.
+  // For regular calls, this holds the FP for rebasing the original locations
+  // during EmitParamMoves.
+  const Register saved_fp = locs()->temp(0).reg();
+  const Register temp = locs()->temp(1).reg();
   // For leaf calls, this holds the SP used to restore the pre-aligned SP after
   // the call.
   // Note: R12 doubles as CODE_REG, which gets clobbered during frame setup in
   // regular calls.
-  const Register saved_sp = locs()->temp(0).reg();
-  // For regular calls, this holds the FP for rebasing the original locations
-  // during EmitParamMoves.
-  const Register saved_fp = locs()->temp(1).reg();
-  const Register temp = locs()->temp(2).reg();
-  const Register target_address = locs()->in(TargetAddressIndex()).reg();
+  const Register saved_sp = locs()->temp(2).reg();
 
   // Ensure these are callee-saved register and are preserved across the call.
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters & (1 << saved_sp)) != 0);
-  ASSERT((CallingConventions::kCalleeSaveCpuRegisters & (1 << saved_fp)) != 0);
-  // temp doesn't need to be preserved.
+  ASSERT(IsCalleeSavedRegister(saved_sp));
+  ASSERT(IsCalleeSavedRegister(saved_fp));
+  // Other temps don't need to be preserved.
 
   if (is_leaf_) {
     __ movq(saved_sp, SPREG);
@@ -1322,7 +1331,8 @@
   SaveArguments(compiler);
 
   // Enter the entry frame. Push a dummy return address for consistency with
-  // EnterFrame on ARM(64).
+  // EnterFrame on ARM(64). NativeParameterInstr expects this frame has size
+  // -exit_link_slot_from_entry_fp, verified below.
   __ PushImmediate(compiler::Immediate(0));
   __ EnterFrame(0);
 
@@ -2009,8 +2019,7 @@
         __ movb(element_address,
                 compiler::Immediate(static_cast<int8_t>(constant.Value())));
       } else {
-        ASSERT(locs()->in(2).reg() == RAX);
-        __ movb(element_address, RAX);
+        __ movb(element_address, ByteRegisterOf(locs()->in(2).reg()));
       }
       break;
     case kTypedDataUint8ClampedArrayCid:
@@ -2028,18 +2037,18 @@
         __ movb(element_address,
                 compiler::Immediate(static_cast<int8_t>(value)));
       } else {
-        ASSERT(locs()->in(2).reg() == RAX);
+        const Register storedValueReg = locs()->in(2).reg();
         compiler::Label store_value, store_0xff;
-        __ CompareImmediate(RAX, compiler::Immediate(0xFF));
+        __ CompareImmediate(storedValueReg, compiler::Immediate(0xFF));
         __ j(BELOW_EQUAL, &store_value, compiler::Assembler::kNearJump);
         // Clamp to 0x0 or 0xFF respectively.
         __ j(GREATER, &store_0xff);
-        __ xorq(RAX, RAX);
+        __ xorq(storedValueReg, storedValueReg);
         __ jmp(&store_value, compiler::Assembler::kNearJump);
         __ Bind(&store_0xff);
-        __ LoadImmediate(RAX, compiler::Immediate(0xFF));
+        __ LoadImmediate(storedValueReg, compiler::Immediate(0xFF));
         __ Bind(&store_value);
-        __ movb(element_address, RAX);
+        __ movb(element_address, ByteRegisterOf(storedValueReg));
       }
       break;
     }
@@ -5031,18 +5040,11 @@
 }
 
 void CaseInsensitiveCompareInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  // Save RSP. R13 is chosen because it is callee saved so we do not need to
-  // back it up before calling into the runtime.
-  static const Register kSavedSPReg = R13;
-  __ movq(kSavedSPReg, RSP);
-  __ ReserveAlignedFrameSpace(0);
-
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
   // Call the function. Parameters are already in their correct spots.
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
-
-  // Restore RSP.
-  __ movq(RSP, kSavedSPReg);
+  rt.Call(TargetFunction(), TargetFunction().argument_count());
 }
 
 LocationSummary* UnarySmiOpInstr::MakeLocationSummary(Zone* zone,
@@ -5381,7 +5383,7 @@
   // Calling convention on x64 uses XMM0 and XMM1 to pass the first two
   // double arguments and XMM0 to return the result.
   ASSERT(R13 != CALLEE_SAVED_TEMP);
-  ASSERT(((1 << R13) & CallingConventions::kCalleeSaveCpuRegisters) != 0);
+  ASSERT(IsCalleeSavedRegister(R13));
 
   if (recognized_kind() == MethodRecognizer::kMathDoublePow) {
     ASSERT(InputCount() == 2);
@@ -5524,18 +5526,15 @@
   __ jmp(&skip_call);
 
   __ Bind(&do_pow);
-
-  // Save RSP.
-  __ movq(locs->temp(InvokeMathCFunctionInstr::kSavedSpTempIndex).reg(), RSP);
-  __ ReserveAlignedFrameSpace(0);
-  __ movaps(XMM0, locs->in(0).fpu_reg());
-  ASSERT(locs->in(1).fpu_reg() == XMM1);
-
-  ASSERT(instr->TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(instr->TargetFunction(), kInputCount);
-  __ movaps(locs->out(0).fpu_reg(), XMM0);
-  // Restore RSP.
-  __ movq(RSP, locs->temp(InvokeMathCFunctionInstr::kSavedSpTempIndex).reg());
+  {
+    compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    __ movaps(XMM0, locs->in(0).fpu_reg());
+    ASSERT(locs->in(1).fpu_reg() == XMM1);
+    rt.Call(instr->TargetFunction(), kInputCount);
+    __ movaps(locs->out(0).fpu_reg(), XMM0);
+  }
   __ Bind(&skip_call);
 }
 
@@ -5545,21 +5544,15 @@
     return;
   }
 
+  compiler::LeafRuntimeScope rt(compiler->assembler(),
+                                /*frame_size=*/0,
+                                /*preserve_registers=*/false);
   ASSERT(locs()->in(0).fpu_reg() == XMM0);
   if (InputCount() == 2) {
     ASSERT(locs()->in(1).fpu_reg() == XMM1);
   }
-
-  // Save RSP.
-  __ movq(locs()->temp(kSavedSpTempIndex).reg(), RSP);
-  __ ReserveAlignedFrameSpace(0);
-
-  ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
-  __ CallRuntime(TargetFunction(), InputCount());
+  rt.Call(TargetFunction(), InputCount());
   ASSERT(locs()->out(0).fpu_reg() == XMM0);
-
-  // Restore RSP.
-  __ movq(RSP, locs()->temp(kSavedSpTempIndex).reg());
 }
 
 LocationSummary* ExtractNthOutputInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index 19191d1..266b485 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -465,6 +465,28 @@
   }
 }
 
+void FlowGraphAllocator::BlockCpuRegisters(intptr_t registers,
+                                           intptr_t from,
+                                           intptr_t to) {
+  for (intptr_t r = 0; r < kNumberOfCpuRegisters; r++) {
+    if ((registers & (1 << r)) != 0) {
+      BlockLocation(Location::RegisterLocation(static_cast<Register>(r)), from,
+                    to);
+    }
+  }
+}
+
+void FlowGraphAllocator::BlockFpuRegisters(intptr_t fpu_registers,
+                                           intptr_t from,
+                                           intptr_t to) {
+  for (intptr_t r = 0; r < kNumberOfFpuRegisters; r++) {
+    if ((fpu_registers & (1 << r)) != 0) {
+      BlockLocation(Location::FpuRegisterLocation(static_cast<FpuRegister>(r)),
+                    from, to);
+    }
+  }
+}
+
 void LiveRange::Print() {
   if (first_use_interval() == NULL) {
     return;
@@ -1389,6 +1411,21 @@
     }
   }
 
+  // Block all volatile (i.e. not native ABI callee-save) registers.
+  if (locs->native_leaf_call()) {
+    BlockCpuRegisters(kDartVolatileCpuRegs, pos, pos + 1);
+    BlockFpuRegisters(kAbiVolatileFpuRegs, pos, pos + 1);
+#if defined(TARGET_ARCH_ARM)
+    // We do not yet have a way to say that we only want FPU registers that
+    // overlap S registers.
+    // Block all Q/D FPU registers above the 8/16 that have S registers in
+    // VFPv3-D32.
+    // This way we avoid ending up trying to do single-word operations on
+    // registers that don't support it.
+    BlockFpuRegisters(kFpuRegistersWithoutSOverlap, pos, pos + 1);
+#endif
+  }
+
   // Block all allocatable registers for calls.
   if (locs->always_calls() && !locs->callee_safe_call()) {
     // Expected shape of live range:
@@ -1397,16 +1434,9 @@
     //              [--)
     //
     // The stack bitmap describes the position i.
-    for (intptr_t reg = 0; reg < kNumberOfCpuRegisters; reg++) {
-      BlockLocation(Location::RegisterLocation(static_cast<Register>(reg)), pos,
-                    pos + 1);
-    }
+    BlockCpuRegisters(kAllCpuRegistersList, pos, pos + 1);
 
-    for (intptr_t reg = 0; reg < kNumberOfFpuRegisters; reg++) {
-      BlockLocation(
-          Location::FpuRegisterLocation(static_cast<FpuRegister>(reg)), pos,
-          pos + 1);
-    }
+    BlockFpuRegisters(kAllFpuRegistersList, pos, pos + 1);
 
 #if defined(DEBUG)
     // Verify that temps, inputs and output were specified as fixed
@@ -1426,8 +1456,7 @@
                pair->At(1).policy() == Location::kAny);
       } else {
         ASSERT(!locs->in(j).IsUnallocated() ||
-               locs->in(j).policy() == Location::kAny ||
-               locs->in(j).policy() == Location::kRequiresStackSlot);
+               locs->in(j).policy() == Location::kAny);
       }
     }
 
@@ -1441,7 +1470,7 @@
 #endif
   }
 
-  if (locs->can_call()) {
+  if (locs->can_call() && !locs->native_leaf_call()) {
     safepoints_.Add(current);
   }
 
diff --git a/runtime/vm/compiler/backend/linearscan.h b/runtime/vm/compiler/backend/linearscan.h
index 2d6e919..bc26c63 100644
--- a/runtime/vm/compiler/backend/linearscan.h
+++ b/runtime/vm/compiler/backend/linearscan.h
@@ -156,6 +156,10 @@
                              bool* blocked_registers,
                              LiveRange** blocking_ranges);
 
+  void BlockCpuRegisters(intptr_t registers, intptr_t from, intptr_t to);
+
+  void BlockFpuRegisters(intptr_t fpu_registers, intptr_t from, intptr_t to);
+
   intptr_t NumberOfRegisters() const { return number_of_registers_; }
 
   // Find all safepoints that are covered by this live range.
diff --git a/runtime/vm/compiler/backend/locations.cc b/runtime/vm/compiler/backend/locations.cc
index 56640f8..9b5b166 100644
--- a/runtime/vm/compiler/backend/locations.cc
+++ b/runtime/vm/compiler/backend/locations.cc
@@ -185,8 +185,7 @@
   // restrictions.
   if (always_calls()) {
     if (loc.IsUnallocated()) {
-      ASSERT(loc.policy() == Location::kAny ||
-             loc.policy() == Location::kRequiresStackSlot);
+      ASSERT(loc.policy() == Location::kAny);
     } else if (loc.IsPairLocation()) {
       ASSERT(!loc.AsPairLocation()->At(0).IsUnallocated() ||
              loc.AsPairLocation()->At(0).policy() == Location::kAny);
@@ -311,8 +310,6 @@
           return "R";
         case kRequiresFpuRegister:
           return "DR";
-        case kRequiresStackSlot:
-          return "RS";
         case kWritableRegister:
           return "WR";
         case kSameAsFirstInput:
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index b9988948..2c59183 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -257,7 +257,6 @@
     kPrefersRegister,
     kRequiresRegister,
     kRequiresFpuRegister,
-    kRequiresStackSlot,
     kWritableRegister,
     kSameAsFirstInput,
   };
@@ -285,10 +284,6 @@
     return UnallocatedLocation(kRequiresFpuRegister);
   }
 
-  static Location RequiresStackSlot() {
-    return UnallocatedLocation(kRequiresStackSlot);
-  }
-
   static Location WritableRegister() {
     return UnallocatedLocation(kWritableRegister);
   }
@@ -593,13 +588,15 @@
       if (reg == PC) continue;
 #elif defined(TARGET_ARCH_ARM64)
       if (reg == R31) continue;
+#elif defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
+      if (reg == ZR || reg == TP || reg == GP) continue;
 #endif
       Add(Location::RegisterLocation(reg));
     }
 
-      for (intptr_t i = kNumberOfFpuRegisters - 1; i >= 0; --i) {
-        Add(Location::FpuRegisterLocation(static_cast<FpuRegister>(i)));
-      }
+    for (intptr_t i = kNumberOfFpuRegisters - 1; i >= 0; --i) {
+      Add(Location::FpuRegisterLocation(static_cast<FpuRegister>(i)));
+    }
   }
 
   void AddAllArgumentRegisters() {
@@ -719,12 +716,19 @@
 class LocationSummary : public ZoneAllocated {
  public:
   enum ContainsCall {
-    kNoCall,  // Used registers must be reserved as tmp.
-    kCall,    // Registers have been saved and can be used without reservation.
-    kCallCalleeSafe,       // Registers will be saved by the callee.
-    kCallOnSlowPath,       // Used registers must be reserved as tmp.
-    kCallOnSharedSlowPath  // Registers used to invoke shared stub must be
-                           // reserved as tmp.
+    // Used registers must be reserved as tmp.
+    kNoCall,
+    // Registers have been saved and can be used without reservation.
+    kCall,
+    // Registers will be saved by the callee.
+    kCallCalleeSafe,
+    // Used registers must be reserved as tmp.
+    kCallOnSlowPath,
+    // Registers used to invoke shared stub must be reserved as tmp.
+    kCallOnSharedSlowPath,
+    // Location is a native leaf call so any register not in the native ABI
+    // callee-save (or input/output/tmp) set might get clobbered.
+    kNativeLeafCall
   };
 
   LocationSummary(Zone* zone,
@@ -800,6 +804,8 @@
     return contains_call_ == kCallOnSharedSlowPath;
   }
 
+  bool native_leaf_call() const { return contains_call_ == kNativeLeafCall; }
+
   void PrintTo(BaseTextBuffer* f) const;
 
   static LocationSummary* Make(Zone* zone,
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 4d28937..2c4af9c 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2797,6 +2797,17 @@
     case Slot::Kind::kClosure_function:
     case Slot::Kind::kClosure_function_type_arguments:
     case Slot::Kind::kClosure_instantiator_type_arguments:
+    case Slot::Kind::kFinalizer_callback:
+    case Slot::Kind::kFinalizer_type_arguments:
+    case Slot::Kind::kFinalizerBase_all_entries:
+    case Slot::Kind::kFinalizerBase_detachments:
+    case Slot::Kind::kFinalizerBase_entries_collected:
+    case Slot::Kind::kFinalizerEntry_detach:
+    case Slot::Kind::kFinalizerEntry_finalizer:
+    case Slot::Kind::kFinalizerEntry_next:
+    case Slot::Kind::kFinalizerEntry_token:
+    case Slot::Kind::kFinalizerEntry_value:
+    case Slot::Kind::kNativeFinalizer_callback:
     case Slot::Kind::kFunction_data:
     case Slot::Kind::kFunction_signature:
     case Slot::Kind::kFunctionType_named_parameter_names:
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 4a512f8..9356180 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -227,6 +227,17 @@
     case Slot::Kind::kClosure_hash:
     case Slot::Kind::kCapturedVariable:
     case Slot::Kind::kDartField:
+    case Slot::Kind::kFinalizer_callback:
+    case Slot::Kind::kFinalizer_type_arguments:
+    case Slot::Kind::kFinalizerBase_all_entries:
+    case Slot::Kind::kFinalizerBase_detachments:
+    case Slot::Kind::kFinalizerBase_entries_collected:
+    case Slot::Kind::kFinalizerEntry_detach:
+    case Slot::Kind::kFinalizerEntry_finalizer:
+    case Slot::Kind::kFinalizerEntry_next:
+    case Slot::Kind::kFinalizerEntry_token:
+    case Slot::Kind::kFinalizerEntry_value:
+    case Slot::Kind::kNativeFinalizer_callback:
     case Slot::Kind::kFunction_data:
     case Slot::Kind::kFunction_signature:
     case Slot::Kind::kFunctionType_named_parameter_names:
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index ab82fe2..aa0c8ad 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -53,6 +53,15 @@
 //   that) or like a non-final field.
 #define NULLABLE_BOXED_NATIVE_SLOTS_LIST(V)                                    \
   V(Array, UntaggedArray, type_arguments, TypeArguments, FINAL)                \
+  V(Finalizer, UntaggedFinalizer, type_arguments, TypeArguments, FINAL)        \
+  V(FinalizerBase, UntaggedFinalizerBase, all_entries, LinkedHashSet, VAR)     \
+  V(FinalizerBase, UntaggedFinalizerBase, detachments, Dynamic, VAR)           \
+  V(FinalizerBase, UntaggedFinalizer, entries_collected, FinalizerEntry, VAR)  \
+  V(FinalizerEntry, UntaggedFinalizerEntry, value, Dynamic, VAR)               \
+  V(FinalizerEntry, UntaggedFinalizerEntry, detach, Dynamic, VAR)              \
+  V(FinalizerEntry, UntaggedFinalizerEntry, token, Dynamic, VAR)               \
+  V(FinalizerEntry, UntaggedFinalizerEntry, finalizer, FinalizerBase, VAR)     \
+  V(FinalizerEntry, UntaggedFinalizerEntry, next, FinalizerEntry, VAR)         \
   V(Function, UntaggedFunction, signature, FunctionType, FINAL)                \
   V(Context, UntaggedContext, parent, Context, FINAL)                          \
   V(Closure, UntaggedClosure, instantiator_type_arguments, TypeArguments,      \
@@ -91,6 +100,8 @@
   V(Closure, UntaggedClosure, function, Function, FINAL)                       \
   V(Closure, UntaggedClosure, context, Context, FINAL)                         \
   V(Closure, UntaggedClosure, hash, Context, VAR)                              \
+  V(Finalizer, UntaggedFinalizer, callback, Closure, FINAL)                    \
+  V(NativeFinalizer, UntaggedFinalizer, callback, Pointer, FINAL)              \
   V(Function, UntaggedFunction, data, Dynamic, FINAL)                          \
   V(FunctionType, UntaggedFunctionType, named_parameter_names, Array, FINAL)   \
   V(FunctionType, UntaggedFunctionType, parameter_types, Array, FINAL)         \
@@ -159,6 +170,8 @@
   AOT_ONLY_UNBOXED_NATIVE_SLOTS_LIST(V)                                        \
   V(ClosureData, UntaggedClosureData, default_type_arguments_kind, Uint8,      \
     FINAL)                                                                     \
+  V(FinalizerBase, UntaggedFinalizerBase, isolate, IntPtr, VAR)                \
+  V(FinalizerEntry, UntaggedFinalizerEntry, external_size, IntPtr, VAR)        \
   V(Function, UntaggedFunction, entry_point, Uword, FINAL)                     \
   V(Function, UntaggedFunction, kind_tag, Uint32, FINAL)                       \
   V(Function, UntaggedFunction, packed_fields, Uint32, FINAL)                  \
diff --git a/runtime/vm/compiler/compiler_pass.cc b/runtime/vm/compiler/compiler_pass.cc
index 33079e7..2ea7890 100644
--- a/runtime/vm/compiler/compiler_pass.cc
+++ b/runtime/vm/compiler/compiler_pass.cc
@@ -297,6 +297,7 @@
   INVOKE_PASS(TryOptimizePatterns);
 }
 
+// Keep in sync with TestPipeline::RunForcedOptimizedAfterSSAPasses.
 FlowGraph* CompilerPass::RunForceOptimizedPipeline(
     PipelineMode mode,
     CompilerPassState* pass_state) {
diff --git a/runtime/vm/compiler/ffi/native_location.cc b/runtime/vm/compiler/ffi/native_location.cc
index 7b362fd..ef92266 100644
--- a/runtime/vm/compiler/ffi/native_location.cc
+++ b/runtime/vm/compiler/ffi/native_location.cc
@@ -228,7 +228,13 @@
   if (!other.IsFpuRegisters()) {
     return false;
   }
-  return other.AsFpuRegisters().fpu_reg_ == fpu_reg_;
+  auto& other_fpu_reg = other.AsFpuRegisters();
+  if (other_fpu_reg.fpu_reg_kind() != fpu_reg_kind()) {
+    return false;
+  }
+  // We can only compare `fpu_reg_` if the kind is the same.
+  // Q5 is not the same register as (nor overlaps) D5.
+  return other_fpu_reg.fpu_reg_ == fpu_reg_;
 }
 
 bool NativeStackLocation::Equals(const NativeLocation& other) const {
diff --git a/runtime/vm/compiler/ffi/native_location_test.cc b/runtime/vm/compiler/ffi/native_location_test.cc
index 8ba10d9..a9d4e1c 100644
--- a/runtime/vm/compiler/ffi/native_location_test.cc
+++ b/runtime/vm/compiler/ffi/native_location_test.cc
@@ -35,6 +35,51 @@
   EXPECT_EQ(4, half_1.offset_in_bytes());
 }
 
+// Regression test for NativeFpuRegistersLocation::Equals not considering kind
+// when comparing.
+UNIT_TEST_CASE_WITH_ZONE(NativeStackLocation_Equals) {
+  const auto& native_type = *new (Z) NativePrimitiveType(kInt8);
+
+  // Two FPU registers of the same kind and number are equal.
+  {
+    const auto& native_location1 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kQuadFpuReg,
+        /*fpu_register=*/0);
+
+    const auto& native_location2 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kQuadFpuReg,
+        /*fpu_register=*/0);
+
+    EXPECT(native_location1.Equals(native_location2));
+  }
+
+  // Two FPU registers with different numbers are NOT equal.
+  {
+    const auto& native_location1 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kQuadFpuReg,
+        /*fpu_register=*/2);
+
+    const auto& native_location2 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kQuadFpuReg,
+        /*fpu_register=*/4);
+
+    EXPECT(!native_location1.Equals(native_location2));
+  }
+
+  // Two FPU registers with different kinds are NOT equal.
+  {
+    const auto& native_location1 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kQuadFpuReg,
+        /*fpu_register=*/3);
+
+    const auto& native_location2 = *new (Z) NativeFpuRegistersLocation(
+        native_type, native_type, kDoubleFpuReg,
+        /*fpu_register=*/3);
+
+    EXPECT(!native_location1.Equals(native_location2));
+  }
+}
+
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
index b8030e0..af69d91 100644
--- a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
@@ -15,8 +15,8 @@
 a6 int64[float]
 a7 int64[float]
 S+0 float
-S+4 float
 S+8 float
-S+12 float
+S+16 float
+S+24 float
 =>
 fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
index 71c8bd7..78c4aad 100644
--- a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
@@ -7,6 +7,6 @@
 a6 int32[int8]
 a7 int32[int8]
 S+0 int8
-S+1 int8
+S+4 int8
 =>
 a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
index 71c8bd7..bbb5b73 100644
--- a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
@@ -7,6 +7,6 @@
 a6 int32[int8]
 a7 int32[int8]
 S+0 int8
-S+1 int8
+S+8 int8
 =>
 a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
index eee3c90..929c3d7 100644
--- a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
@@ -10,6 +10,6 @@
 M(S+16 int64, S+24 int64) Struct(size: 9)
 S+32 double
 S+40 int32
-S+44 int32
+S+48 int32
 =>
 fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
index e8eafe5..bcaefe3 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
@@ -1,4 +1,4 @@
-Struct(size: 72, field alignment: 8, stack alignment: 8, members: {
+Struct(size: 72, field alignment: 8, stack alignment: 4, members: {
   0: int8,
   2: int16,
   4: int32,
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
index 21f9c56..728e016 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
@@ -1,3 +1,3 @@
-Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
-  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
+Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
+  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 8, members: {0: Array(element type: float, length: 2)}), length: 2)
 })
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
index a753409..c065867 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
@@ -1,4 +1,4 @@
-Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
   0: float,
   4: float,
   8: float,
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
index b2249b0..bf40a47 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
@@ -1,3 +1,3 @@
-Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+Struct(size: 8, field alignment: 1, stack alignment: 4, members: {
   0: Array(element type: int8, length: 8)
 })
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
index b2249b0..02a0124 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
@@ -1,3 +1,3 @@
-Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+Struct(size: 8, field alignment: 1, stack alignment: 8, members: {
   0: Array(element type: int8, length: 8)
 })
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
index cba532d..c11d2ed 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
@@ -1,4 +1,4 @@
-Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+Struct(size: 10, field alignment: 1, stack alignment: 4, members: {
   0: int8,
   1: int8,
   2: int8,
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
index cba532d..e2ae57e 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
@@ -1,4 +1,4 @@
-Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+Struct(size: 10, field alignment: 1, stack alignment: 8, members: {
   0: int8,
   1: int8,
   2: int8,
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index a6bc6e5..ca1f9dc 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -293,8 +293,7 @@
       const intptr_t used_data = (length << 1);
       map.set_used_data(used_data);
 
-      const intptr_t data_size = Utils::RoundUpToPowerOfTwo(used_data);
-      const auto& data = Array::Handle(Z, Array::New(data_size));
+      const auto& data = Array::Handle(Z, Array::New(used_data));
       map.set_data(data);
 
       map.set_deleted_keys(0);
@@ -343,8 +342,7 @@
       const intptr_t used_data = length;
       set.set_used_data(used_data);
 
-      const intptr_t data_size = Utils::RoundUpToPowerOfTwo(used_data);
-      const auto& data = Array::Handle(Z, Array::New(data_size));
+      const auto& data = Array::Handle(Z, Array::New(used_data));
       set.set_data(data);
 
       set.set_deleted_keys(0);
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
index ca7fcc2..c3682ed 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph_test.cc
@@ -326,7 +326,7 @@
 
   ILMatcher cursor(flow_graph, entry, true);
   // clang-format off
-  RELEASE_ASSERT(cursor.TryMatch({
+  std::initializer_list<MatchCode> expected = {
     kMatchAndMoveFunctionEntry,
     kMatchAndMoveCheckStackOverflow,
     kMoveDebugStepChecks,
@@ -339,7 +339,8 @@
     kMatchAndMoveClosureCall,
     kMoveDebugStepChecks,
     kMatchReturn,
-  }));
+  };
+  RELEASE_ASSERT(cursor.TryMatch(expected));
   // clang-format on
 }
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 2fab100..905570f 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -818,6 +818,14 @@
   V(ByteDataViewLength, TypedDataBase_length)                                  \
   V(ByteDataViewOffsetInBytes, TypedDataView_offset_in_bytes)                  \
   V(ByteDataViewTypedData, TypedDataView_typed_data)                           \
+  V(Finalizer_getCallback, Finalizer_callback)                                 \
+  V(FinalizerBase_getAllEntries, FinalizerBase_all_entries)                    \
+  V(FinalizerBase_getDetachments, FinalizerBase_detachments)                   \
+  V(FinalizerEntry_getDetach, FinalizerEntry_detach)                           \
+  V(FinalizerEntry_getNext, FinalizerEntry_next)                               \
+  V(FinalizerEntry_getToken, FinalizerEntry_token)                             \
+  V(FinalizerEntry_getValue, FinalizerEntry_value)                             \
+  V(NativeFinalizer_getCallback, NativeFinalizer_callback)                     \
   V(GrowableArrayLength, GrowableObjectArray_length)                           \
   V(ImmutableLinkedHashBase_getData, ImmutableLinkedHashBase_data)             \
   V(ImmutableLinkedHashBase_getIndex, ImmutableLinkedHashBase_index)           \
@@ -835,6 +843,11 @@
   V(WeakReference_getTarget, WeakReference_target)
 
 #define STORE_NATIVE_FIELD(V)                                                  \
+  V(Finalizer_setCallback, Finalizer_callback)                                 \
+  V(FinalizerBase_setAllEntries, FinalizerBase_all_entries)                    \
+  V(FinalizerBase_setDetachments, FinalizerBase_detachments)                   \
+  V(FinalizerEntry_setToken, FinalizerEntry_token)                             \
+  V(NativeFinalizer_setCallback, NativeFinalizer_callback)                     \
   V(LinkedHashBase_setData, LinkedHashBase_data)                               \
   V(LinkedHashBase_setIndex, LinkedHashBase_index)                             \
   V(WeakProperty_setKey, WeakProperty_key)                                     \
@@ -919,6 +932,12 @@
     case MethodRecognizer::kFfiAsExternalTypedDataFloat:
     case MethodRecognizer::kFfiAsExternalTypedDataDouble:
     case MethodRecognizer::kGetNativeField:
+    case MethodRecognizer::kFinalizerBase_exchangeEntriesCollectedWithNull:
+    case MethodRecognizer::kFinalizerBase_getIsolateFinalizers:
+    case MethodRecognizer::kFinalizerBase_setIsolate:
+    case MethodRecognizer::kFinalizerBase_setIsolateFinalizers:
+    case MethodRecognizer::kFinalizerEntry_allocate:
+    case MethodRecognizer::kFinalizerEntry_getExternalSize:
     case MethodRecognizer::kObjectEquals:
     case MethodRecognizer::kStringBaseLength:
     case MethodRecognizer::kStringBaseIsEmpty:
@@ -1567,6 +1586,77 @@
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += MathUnary(MathUnaryInstr::kSqrt);
     } break;
+    case MethodRecognizer::kFinalizerBase_setIsolate:
+      ASSERT_EQUAL(function.NumParameters(), 1);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += LoadIsolate();
+      body += ConvertUntaggedToUnboxed(kUnboxedIntPtr);
+      body += StoreNativeField(Slot::FinalizerBase_isolate());
+      body += NullConstant();
+      break;
+    case MethodRecognizer::kFinalizerBase_getIsolateFinalizers:
+      ASSERT_EQUAL(function.NumParameters(), 0);
+      body += LoadIsolate();
+      body += RawLoadField(compiler::target::Isolate::finalizers_offset());
+      break;
+    case MethodRecognizer::kFinalizerBase_setIsolateFinalizers:
+      ASSERT_EQUAL(function.NumParameters(), 1);
+      body += LoadIsolate();
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += RawStoreField(compiler::target::Isolate::finalizers_offset());
+      body += NullConstant();
+      break;
+    case MethodRecognizer::kFinalizerBase_exchangeEntriesCollectedWithNull:
+      ASSERT_EQUAL(function.NumParameters(), 1);
+      ASSERT(this->optimizing_);
+      // This relies on being force-optimized to do an 'atomic' exchange w.r.t.
+      // the GC.
+      // As an alternative design we could introduce an ExchangeNativeFieldInstr
+      // that uses the same machine code as std::atomic::exchange. Or we could
+      // use an FfiNative to do that in C.
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      // No GC from here til StoreNativeField.
+      body += LoadNativeField(Slot::FinalizerBase_entries_collected());
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += NullConstant();
+      body += StoreNativeField(Slot::FinalizerBase_entries_collected());
+      break;
+    case MethodRecognizer::kFinalizerEntry_allocate: {
+      // Object value, Object token, Object detach, FinalizerBase finalizer
+      ASSERT_EQUAL(function.NumParameters(), 4);
+
+      const auto class_table = thread_->isolate_group()->class_table();
+      ASSERT(class_table->HasValidClassAt(kFinalizerEntryCid));
+      const auto& finalizer_entry_class =
+          Class::ZoneHandle(H.zone(), class_table->At(kFinalizerEntryCid));
+
+      body +=
+          AllocateObject(TokenPosition::kNoSource, finalizer_entry_class, 0);
+      LocalVariable* const entry = MakeTemporary("entry");
+      // No GC from here to the end.
+      body += LoadLocal(entry);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += StoreNativeField(Slot::FinalizerEntry_value());
+      body += LoadLocal(entry);
+      body += LoadLocal(parsed_function_->RawParameterVariable(1));
+      body += StoreNativeField(Slot::FinalizerEntry_token());
+      body += LoadLocal(entry);
+      body += LoadLocal(parsed_function_->RawParameterVariable(2));
+      body += StoreNativeField(Slot::FinalizerEntry_detach());
+      body += LoadLocal(entry);
+      body += LoadLocal(parsed_function_->RawParameterVariable(3));
+      body += StoreNativeField(Slot::FinalizerEntry_finalizer());
+      body += LoadLocal(entry);
+      body += UnboxedIntConstant(0, kUnboxedIntPtr);
+      body += StoreNativeField(Slot::FinalizerEntry_external_size());
+      break;
+    }
+    case MethodRecognizer::kFinalizerEntry_getExternalSize:
+      ASSERT_EQUAL(function.NumParameters(), 1);
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += LoadNativeField(Slot::FinalizerEntry_external_size());
+      body += Box(kUnboxedInt64);
+      break;
 #define IL_BODY(method, slot)                                                  \
   case MethodRecognizer::k##method:                                            \
     ASSERT_EQUAL(function.NumParameters(), 1);                                 \
@@ -3905,6 +3995,13 @@
   return code;
 }
 
+Fragment FlowGraphBuilder::RawLoadField(int32_t offset) {
+  Fragment code;
+  code += UnboxedIntConstant(offset, kUnboxedIntPtr);
+  code += LoadIndexed(kArrayCid, /*index_scale=*/1, /*index_unboxed=*/true);
+  return code;
+}
+
 Fragment FlowGraphBuilder::RawStoreField(int32_t offset) {
   Fragment code;
   Value* value = Pop();
@@ -3931,9 +4028,7 @@
 Fragment FlowGraphBuilder::UnwrapHandle() {
   Fragment code;
   code += ConvertUnboxedToUntagged(kUnboxedIntPtr);
-  code += IntConstant(compiler::target::LocalHandle::ptr_offset());
-  code += UnboxTruncate(kUnboxedIntPtr);
-  code += LoadIndexed(kArrayCid, /*index_scale=*/1, /*index_unboxed=*/true);
+  code += RawLoadField(compiler::target::LocalHandle::ptr_offset());
   return code;
 }
 
@@ -3969,6 +4064,19 @@
   return Fragment(unbox);
 }
 
+Fragment FlowGraphBuilder::LoadThread() {
+  LoadThreadInstr* instr = new (Z) LoadThreadInstr();
+  Push(instr);
+  return Fragment(instr);
+}
+
+Fragment FlowGraphBuilder::LoadIsolate() {
+  Fragment body;
+  body += LoadThread();
+  body += LoadUntagged(compiler::target::Thread::isolate_offset());
+  return body;
+}
+
 // TODO(http://dartbug.com/47487): Support unboxed output value.
 Fragment FlowGraphBuilder::BoolToInt() {
   // TODO(http://dartbug.com/36855) Build IfThenElseInstr, instead of letting
@@ -4674,8 +4782,7 @@
   if (marshaller.IsPointer(compiler::ffi::kResultIndex) ||
       marshaller.IsVoid(compiler::ffi::kResultIndex)) {
     ASSERT(function.FfiCallbackExceptionalReturn() == Object::null());
-    catch_body += IntConstant(0);
-    catch_body += UnboxTruncate(kUnboxedFfiIntPtr);
+    catch_body += UnboxedIntConstant(0, kUnboxedFfiIntPtr);
   } else if (marshaller.IsHandle(compiler::ffi::kResultIndex)) {
     catch_body += UnhandledException();
     catch_body +=
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index f226a12..2a92d6a 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -276,6 +276,12 @@
   // target representation.
   Fragment UnboxTruncate(Representation to);
 
+  // Loads the (untagged) thread address.
+  Fragment LoadThread();
+
+  // Loads the (untagged) isolate address.
+  Fragment LoadIsolate();
+
   // Converts a true to 1 and false to 0.
   Fragment BoolToInt();
 
@@ -381,7 +387,12 @@
   // Leaves a `LocalHandle` on the stack.
   Fragment AllocateHandle(LocalVariable* api_local_scope);
 
-  // Populates the base + offset with a tagged value.
+  // Loads a tagged value from an untagged base + offset from outside the heap.
+  Fragment RawLoadField(int32_t offset);
+
+  // Populates the untagged base + offset outside the heap with a tagged value.
+  //
+  // The store must be outside of the heap, does not emit a store barrier.
   Fragment RawStoreField(int32_t offset);
 
   // Wraps an `Object` from the stack and leaves a `LocalHandle` on the stack.
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 15f48ef..a94761c 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2832,19 +2832,6 @@
   SkipStringReference();    // Read part URI index.
 }
 
-void KernelReaderHelper::SkipLibraryTypedef() {
-  SkipCanonicalNameReference();      // read canonical name.
-  ReadUInt();                        // read source_uri_index.
-  ReadPosition();                    // read position.
-  SkipStringReference();             // read name index.
-  SkipListOfExpressions();           // read annotations.
-  SkipTypeParametersList();          // read type parameters.
-  SkipDartType();                    // read type.
-  SkipTypeParametersList();          // read type parameters of function type.
-  SkipListOfVariableDeclarations();  // read positional parameters.
-  SkipListOfVariableDeclarations();  // read named parameters.
-}
-
 TokenPosition KernelReaderHelper::ReadPosition() {
   TokenPosition position = reader_.ReadPosition();
   RecordTokenPosition(position);
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 315e468..4016697 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -1279,7 +1279,6 @@
   void SkipLibraryCombinator();
   void SkipLibraryDependency();
   void SkipLibraryPart();
-  void SkipLibraryTypedef();
   TokenPosition ReadPosition();
   Tag ReadTag(uint8_t* payload = NULL);
   uint8_t ReadFlags() { return reader_.ReadFlags(); }
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index e8a7016..dc6050c 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -110,6 +110,29 @@
   V(::, _sqrt, MathSqrt, 0x03183390)                                           \
   V(::, _exp, MathExp, 0x00f4ffd0)                                             \
   V(::, _log, MathLog, 0x09ae8462)                                             \
+  V(FinalizerBase, get:_allEntries, FinalizerBase_getAllEntries, 0xf03ff26b)   \
+  V(FinalizerBase, set:_allEntries, FinalizerBase_setAllEntries, 0x8f0920e8)   \
+  V(FinalizerBase, get:_detachments, FinalizerBase_getDetachments, 0x2f650f36) \
+  V(FinalizerBase, set:_detachments, FinalizerBase_setDetachments, 0x788f1df3) \
+  V(FinalizerBase, _exchangeEntriesCollectedWithNull,                          \
+    FinalizerBase_exchangeEntriesCollectedWithNull, 0x6c9124fb)                \
+  V(FinalizerBase, _setIsolate, FinalizerBase_setIsolate, 0xbcf7db91)          \
+  V(FinalizerBase, get:_isolateFinalizers, FinalizerBase_getIsolateFinalizers, \
+    0x70f53b2b)                                                                \
+  V(FinalizerBase, set:_isolateFinalizers, FinalizerBase_setIsolateFinalizers, \
+    0xb3e66928)                                                                \
+  V(_FinalizerImpl, get:_callback, Finalizer_getCallback, 0x6f3d56bc)          \
+  V(_FinalizerImpl, set:_callback, Finalizer_setCallback, 0xc6aa96f9)          \
+  V(_NativeFinalizer, get:_callback, NativeFinalizer_getCallback, 0x5cb374f5)  \
+  V(_NativeFinalizer, set:_callback, NativeFinalizer_setCallback, 0xb12268f2)  \
+  V(FinalizerEntry, allocate, FinalizerEntry_allocate, 0xe0bad878)             \
+  V(FinalizerEntry, get:value, FinalizerEntry_getValue, 0xf5c9b9d7)            \
+  V(FinalizerEntry, get:detach, FinalizerEntry_getDetach, 0x171cd968)          \
+  V(FinalizerEntry, get:token, FinalizerEntry_getToken, 0x04915a72)            \
+  V(FinalizerEntry, set:token, FinalizerEntry_setToken, 0x63c96cef)            \
+  V(FinalizerEntry, get:next, FinalizerEntry_getNext, 0x7102d7a4)              \
+  V(FinalizerEntry, get:externalSize, FinalizerEntry_getExternalSize,          \
+    0x47df4d22)                                                                \
   V(Float32x4, _Float32x4FromDoubles, Float32x4FromDoubles, 0x1845792b)        \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 0xd3b64002)                      \
   V(Float32x4, _Float32x4Splat, Float32x4Splat, 0x13a552c3)                    \
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 9cc619d..5ae1b56 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -320,6 +320,10 @@
   return runtime_entry_->is_leaf();
 }
 
+intptr_t RuntimeEntry::argument_count() const {
+  return runtime_entry_->argument_count();
+}
+
 namespace target {
 
 const word kOldPageSize = dart::kOldPageSize;
@@ -439,6 +443,12 @@
       return WeakProperty::InstanceSize();
     case kWeakReferenceCid:
       return WeakReference::InstanceSize();
+    case kFinalizerCid:
+      return Finalizer::InstanceSize();
+    case kFinalizerEntryCid:
+      return FinalizerEntry::InstanceSize();
+    case kNativeFinalizerCid:
+      return NativeFinalizer::InstanceSize();
     case kByteBufferCid:
     case kByteDataViewCid:
     case kPointerCid:
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index f502d99..41ad454 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -211,10 +211,6 @@
 uword SymbolsPredefinedAddress();
 #endif
 
-typedef void (*RuntimeEntryCallInternal)(const dart::RuntimeEntry*,
-                                         Assembler*,
-                                         intptr_t);
-
 const Code& StubCodeAllocateArray();
 const Code& StubCodeSubtype3TestCache();
 const Code& StubCodeSubtype7TestCache();
@@ -223,43 +219,17 @@
  public:
   virtual ~RuntimeEntry() {}
 
-  void Call(Assembler* assembler, intptr_t argument_count) const {
-    ASSERT(call_ != NULL);
-    ASSERT(runtime_entry_ != NULL);
-
-    // We call a manually set function pointer which points to the
-    // implementation of call for the subclass. We do this instead of just
-    // defining Call in this class as a pure virtual method and providing an
-    // implementation in the subclass as RuntimeEntry objects are declared as
-    // globals which causes problems on Windows.
-    //
-    // When exit() is called on Windows, global objects start to be destroyed.
-    // As part of an object's destruction, the vtable is reset to that of the
-    // base class. Since some threads may still be running and accessing these
-    // now destroyed globals, an invocation to dart::RuntimeEntry::Call would
-    // instead invoke dart::compiler::RuntimeEntry::Call. If
-    // dart::compiler::RuntimeEntry::Call were a pure virtual method, _purecall
-    // would be invoked to handle the invalid call and attempt to call exit(),
-    // causing the process to hang on a lock.
-    //
-    // By removing the need to rely on a potentially invalid vtable at exit,
-    // we should be able to avoid hanging or crashing the process at shutdown,
-    // even as global objects start to be destroyed. See issue #35855.
-    call_(runtime_entry_, assembler, argument_count);
-  }
-
   word OffsetFromThread() const;
 
   bool is_leaf() const;
+  intptr_t argument_count() const;
 
  protected:
-  RuntimeEntry(const dart::RuntimeEntry* runtime_entry,
-               RuntimeEntryCallInternal call)
-      : runtime_entry_(runtime_entry), call_(call) {}
+  explicit RuntimeEntry(const dart::RuntimeEntry* runtime_entry)
+      : runtime_entry_(runtime_entry) {}
 
  private:
   const dart::RuntimeEntry* runtime_entry_;
-  RuntimeEntryCallInternal call_;
 };
 
 #define DECLARE_RUNTIME_ENTRY(name)                                            \
@@ -1045,6 +1015,42 @@
   FINAL_CLASS();
 };
 
+class FinalizerBase : public AllStatic {
+ public:
+  static word all_entries_offset();
+  static word detachments_offset();
+  static word entries_collected_offset();
+  static word isolate_offset();
+  FINAL_CLASS();
+};
+
+class Finalizer : public AllStatic {
+ public:
+  static word callback_offset();
+  static word type_arguments_offset();
+  static word InstanceSize();
+  FINAL_CLASS();
+};
+
+class NativeFinalizer : public AllStatic {
+ public:
+  static word callback_offset();
+  static word InstanceSize();
+  FINAL_CLASS();
+};
+
+class FinalizerEntry : public AllStatic {
+ public:
+  static word detach_offset();
+  static word external_size_offset();
+  static word finalizer_offset();
+  static word next_offset();
+  static word token_offset();
+  static word value_offset();
+  static word InstanceSize();
+  FINAL_CLASS();
+};
+
 class MirrorReference : public AllStatic {
  public:
   static word InstanceSize();
@@ -1242,6 +1248,7 @@
   static word current_tag_offset();
   static word user_tag_offset();
   static word ic_miss_code_offset();
+  static word finalizers_offset();
 #if !defined(PRODUCT)
   static word single_step_offset();
 #endif  // !defined(PRODUCT)
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 6f1d535..78c6e5d 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -183,6 +183,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -190,7 +191,7 @@
     IsolateGroup_shared_class_table_offset = 8;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 16;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 40;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 44;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
@@ -219,12 +220,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -243,158 +244,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    760;
+    752;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    764;
+    756;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 804;
+    Thread_double_truncate_round_supported_offset = 796;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    780;
+    772;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    768;
+    760;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    796;
+    788;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 828;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 820;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 764;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 776;
+    Thread_saved_shadow_call_stack_offset = 768;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    784;
+    776;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -406,20 +405,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 780;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 784;
+static constexpr dart::compiler::target::word Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -436,6 +433,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -492,7 +509,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -518,6 +535,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -754,6 +774,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -761,7 +782,7 @@
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 88;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 24;
 static constexpr dart::compiler::target::word
@@ -790,12 +811,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -815,160 +836,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1520;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1528;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1608;
+    Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1560;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1536;
+    1520;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1552;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1568;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -980,21 +999,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word Thread_random_offset = 1616;
+    Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1013,6 +1030,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -1069,8 +1106,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -1096,6 +1133,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -1330,6 +1370,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -1337,7 +1378,7 @@
     IsolateGroup_shared_class_table_offset = 8;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 16;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 40;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 44;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
@@ -1366,12 +1407,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -1390,158 +1431,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    728;
+    720;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    732;
+    724;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 768;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 772;
+    Thread_double_truncate_round_supported_offset = 764;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    748;
+    740;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    736;
+    728;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    764;
+    756;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 788;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 740;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 732;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 744;
+    Thread_saved_shadow_call_stack_offset = 736;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    752;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -1553,20 +1592,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 756;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 748;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 760;
-static constexpr dart::compiler::target::word Thread_random_offset = 776;
+    Thread_callback_stack_return_offset = 752;
+static constexpr dart::compiler::target::word Thread_random_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 776;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1583,6 +1620,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -1662,6 +1719,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -1898,6 +1958,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -1905,7 +1966,7 @@
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 88;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 24;
 static constexpr dart::compiler::target::word
@@ -1934,12 +1995,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -1959,160 +2020,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -2124,21 +2183,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2157,6 +2214,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -2213,9 +2290,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -2241,6 +2318,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -2475,6 +2555,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -2482,7 +2563,7 @@
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 88;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 16;
 static constexpr dart::compiler::target::word
@@ -2511,12 +2592,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -2536,160 +2617,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1520;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1528;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1608;
+    Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1560;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1536;
+    1520;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1552;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1568;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -2701,21 +2780,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word Thread_random_offset = 1616;
+    Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2734,6 +2811,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
 static constexpr dart::compiler::target::word Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    36;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 12;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 16;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    32;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -2790,8 +2887,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -2817,6 +2914,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     32;
 static constexpr dart::compiler::target::word Field_InstanceSize = 64;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 40;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
@@ -3051,6 +3151,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -3058,7 +3159,7 @@
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 88;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 16;
 static constexpr dart::compiler::target::word
@@ -3087,12 +3188,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -3112,160 +3213,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -3277,21 +3376,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3310,6 +3407,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
 static constexpr dart::compiler::target::word Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    36;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 12;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 16;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    32;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -3366,9 +3483,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -3394,6 +3511,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     32;
 static constexpr dart::compiler::target::word Field_InstanceSize = 64;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 40;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
@@ -3628,6 +3748,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 24;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 28;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 40;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 32;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -3635,7 +3756,7 @@
     IsolateGroup_shared_class_table_offset = 8;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 16;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 40;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 44;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 12;
 static constexpr dart::compiler::target::word
@@ -3664,12 +3785,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -3688,158 +3809,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    800;
+    792;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    804;
+    796;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 840;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 844;
+    Thread_double_truncate_round_supported_offset = 836;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    820;
+    812;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    808;
+    800;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    836;
+    828;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 868;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 860;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 812;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 804;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 816;
+    Thread_saved_shadow_call_stack_offset = 808;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    824;
+    816;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -3851,20 +3970,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 828;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 820;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 832;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+    Thread_callback_stack_return_offset = 824;
+static constexpr dart::compiler::target::word Thread_random_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 848;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3881,6 +3998,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -3937,9 +4074,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 720, 724, 728, -1,  -1,  732,
+        736, 740, -1, -1, -1, 744, 748, 752, 756, 760, 764,
+        768, 772, -1, -1, -1, -1,  776, 780, 784, 788};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -3965,6 +4102,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -4201,6 +4341,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 48;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 56;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 80;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 64;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -4208,7 +4349,7 @@
     IsolateGroup_shared_class_table_offset = 16;
 static constexpr dart::compiler::target::word
     IsolateGroup_cached_class_table_table_offset = 32;
-static constexpr dart::compiler::target::word Isolate_single_step_offset = 80;
+static constexpr dart::compiler::target::word Isolate_single_step_offset = 88;
 static constexpr dart::compiler::target::word Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word LinkedHashBase_data_offset = 24;
 static constexpr dart::compiler::target::word
@@ -4237,12 +4378,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -4262,160 +4403,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1600;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -4427,21 +4566,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4460,6 +4597,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -4516,9 +4673,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1416, 1424, 1432, -1,   -1,   1440,
+        1448, 1456, -1, -1, -1, 1464, 1472, 1480, 1488, 1496, 1504,
+        1512, 1520, -1, -1, -1, -1,   1528, 1536, 1544, 1552};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -4544,6 +4701,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -4775,6 +4935,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 20;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 24;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 36;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 28;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -4810,12 +4971,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -4834,158 +4995,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    760;
+    752;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    764;
+    756;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 792;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 804;
+    Thread_double_truncate_round_supported_offset = 796;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    780;
+    772;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    768;
+    760;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    796;
+    788;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 828;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 820;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 764;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 776;
+    Thread_saved_shadow_call_stack_offset = 768;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    784;
+    776;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -4997,20 +5156,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 780;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word Thread_random_offset = 808;
+    Thread_callback_stack_return_offset = 784;
+static constexpr dart::compiler::target::word Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5027,6 +5184,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -5083,7 +5260,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -5109,6 +5286,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -5340,6 +5520,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 72;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -5375,12 +5556,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -5400,160 +5581,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1520;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1528;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1608;
+    Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1560;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1536;
+    1520;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1552;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1568;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -5565,21 +5744,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word Thread_random_offset = 1616;
+    Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5598,6 +5775,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -5654,8 +5851,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -5681,6 +5878,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -5910,6 +6110,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 20;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 24;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 36;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 28;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -5945,12 +6146,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -5969,158 +6170,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    728;
+    720;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    732;
+    724;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 760;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 768;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 784;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 772;
+    Thread_double_truncate_round_supported_offset = 764;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    748;
+    740;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    736;
+    728;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    764;
+    756;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 788;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 740;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 732;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 744;
+    Thread_saved_shadow_call_stack_offset = 736;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    752;
+    744;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -6132,20 +6331,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 756;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 748;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 760;
-static constexpr dart::compiler::target::word Thread_random_offset = 776;
+    Thread_callback_stack_return_offset = 752;
+static constexpr dart::compiler::target::word Thread_random_offset = 768;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 776;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6162,6 +6359,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -6241,6 +6458,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -6472,6 +6692,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 72;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -6507,12 +6728,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -6532,160 +6753,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -6697,21 +6916,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6730,6 +6947,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -6786,9 +7023,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -6814,6 +7051,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -7043,6 +7283,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 72;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -7078,12 +7319,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -7103,160 +7344,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1520;
+    1504;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1528;
+    1512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1608;
+    Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1560;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1536;
+    1520;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1552;
+    Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1568;
+    1552;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -7268,21 +7507,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word Thread_random_offset = 1616;
+    Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7301,6 +7538,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
 static constexpr dart::compiler::target::word Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    36;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 12;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 16;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    32;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -7357,8 +7614,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -7384,6 +7641,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     32;
 static constexpr dart::compiler::target::word Field_InstanceSize = 64;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 40;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
@@ -7613,6 +7873,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 72;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -7648,12 +7909,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -7673,160 +7934,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1672;
+    Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1616;
+    Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -7838,21 +8097,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word Thread_random_offset = 1680;
+    Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7871,6 +8128,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 32;
 static constexpr dart::compiler::target::word Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    36;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 12;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    20;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 16;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    32;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 36;
@@ -7927,9 +8204,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 16;
@@ -7955,6 +8232,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     32;
 static constexpr dart::compiler::target::word Field_InstanceSize = 64;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 40;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 40;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 96;
@@ -8184,6 +8464,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 20;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 24;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 36;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 28;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     20;
@@ -8219,12 +8500,12 @@
     12;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    160;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 116;
+    168;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 124;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    180;
+    188;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -8243,158 +8524,156 @@
 static constexpr dart::compiler::target::word String_length_offset = 4;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 384;
+    Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    800;
+    792;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    804;
+    796;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 128;
+    Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 276;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 292;
+    Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 196;
+    Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 296;
+    Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 200;
+    Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 300;
+    Thread_allocate_object_slow_stub_offset = 196;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 832;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 840;
-static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 280;
+    Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 864;
+    Thread_call_to_runtime_stub_offset = 136;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 856;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 844;
+    Thread_double_truncate_round_supported_offset = 836;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    320;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
+    312;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 224;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    324;
+    316;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    236;
+    228;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    364;
+    356;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 360;
+    Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 256;
+    Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    820;
+    812;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 260;
+    Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 268;
+    Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 328;
+    Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 136;
+    Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 132;
+    Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 376;
+    Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 372;
+    Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    368;
+    360;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 380;
+    Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    808;
+    800;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 140;
+    Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    836;
+    828;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 868;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 860;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     64;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 240;
+    Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 244;
+    Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 252;
+    Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 312;
+    Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 316;
+    Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 216;
+    Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 148;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 812;
+    Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 804;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 816;
+    Thread_saved_shadow_call_stack_offset = 808;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    824;
+    816;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 248;
+    Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 336;
+    Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     76;
 static constexpr dart::compiler::target::word
@@ -8406,20 +8685,18 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 88;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    124;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 272;
+    Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 828;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 820;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 832;
-static constexpr dart::compiler::target::word Thread_random_offset = 848;
+    Thread_callback_stack_return_offset = 824;
+static constexpr dart::compiler::target::word Thread_random_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 332;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 856;
+    Thread_jump_to_frame_entry_point_offset = 324;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 848;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8436,6 +8713,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
 static constexpr dart::compiler::target::word Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    24;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 20;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    12;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    8;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 4;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 8;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    16;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 20;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 12;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 4;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    20;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 24;
@@ -8492,9 +8789,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 720, 724, 728, -1,  -1,  732,
+        736, 740, -1, -1, -1, 744, 748, 752, 756, 760, 764,
+        768, 772, -1, -1, -1, -1,  776, 780, 784, 788};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -8520,6 +8817,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     28;
 static constexpr dart::compiler::target::word Field_InstanceSize = 60;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 32;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 88;
@@ -8751,6 +9051,7 @@
 static constexpr dart::compiler::target::word Int32x4_value_offset = 8;
 static constexpr dart::compiler::target::word Isolate_current_tag_offset = 40;
 static constexpr dart::compiler::target::word Isolate_default_tag_offset = 48;
+static constexpr dart::compiler::target::word Isolate_finalizers_offset = 72;
 static constexpr dart::compiler::target::word Isolate_ic_miss_code_offset = 56;
 static constexpr dart::compiler::target::word IsolateGroup_object_store_offset =
     40;
@@ -8786,12 +9087,12 @@
     24;
 static constexpr dart::compiler::target::word NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word ObjectStore_double_type_offset =
-    320;
-static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 232;
+    336;
+static constexpr dart::compiler::target::word ObjectStore_int_type_offset = 248;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
-    360;
+    376;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -8811,160 +9112,158 @@
 static constexpr dart::compiler::target::word String_length_offset = 8;
 static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    Thread_AllocateArray_entry_point_offset = 744;
+    Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1584;
+    1568;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_code_offset = 232;
+    Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    Thread_array_write_barrier_entry_point_offset = 528;
+    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_entry_point_offset = 560;
+    Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_stub_offset = 368;
+    Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_entry_point_offset = 568;
+    Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_parameterized_stub_offset = 376;
+    Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    Thread_allocate_object_slow_stub_offset = 384;
+    Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word
-    Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
 static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_entry_point_offset = 536;
+    Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1696;
+    Thread_call_to_runtime_stub_offset = 248;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1680;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1664;
+    Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
-    616;
-static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
+    600;
+static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 424;
 static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
-    624;
+    608;
 static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
-    448;
+    432;
 static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
-    704;
+    688;
 static constexpr dart::compiler::target::word
-    Thread_double_negate_address_offset = 696;
+    Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    Thread_enter_safepoint_stub_offset = 488;
+    Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1616;
+    1600;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_stub_offset = 496;
+    Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_stub_offset = 512;
+    Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    Thread_call_native_through_safepoint_entry_point_offset = 632;
+    Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    Thread_fix_allocation_stub_code_offset = 248;
+    Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    Thread_fix_callers_target_code_offset = 240;
+    Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    Thread_float_absolute_address_offset = 728;
+    Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    Thread_float_negate_address_offset = 720;
+    Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word Thread_float_not_address_offset =
-    712;
+    696;
 static constexpr dart::compiler::target::word
-    Thread_float_zerow_address_offset = 736;
+    Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1592;
+    1576;
 static constexpr dart::compiler::target::word
-    Thread_invoke_dart_code_stub_offset = 256;
+    Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     128;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_return_stub_offset = 456;
+    Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    Thread_lazy_deopt_from_throw_stub_offset = 464;
+    Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    Thread_lazy_specialize_type_test_stub_offset = 480;
+    Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    Thread_megamorphic_call_checked_entry_offset = 600;
+    Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_entry_offset = 608;
+    Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    Thread_switchable_call_miss_stub_offset = 408;
+    Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 272;
+    Thread_late_initialization_error_shared_without_fpu_regs_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
-    Thread_predefined_symbols_address_offset = 680;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1600;
+    Thread_predefined_symbols_address_offset = 664;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1584;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1608;
+    Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_stub_offset = 472;
+    Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    Thread_slow_type_test_entry_point_offset = 648;
+    Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
 static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
     112;
 static constexpr dart::compiler::target::word
     Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
     152;
 static constexpr dart::compiler::target::word
@@ -8976,21 +9275,19 @@
 static constexpr dart::compiler::target::word
     Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 176;
-static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
-    224;
 static constexpr dart::compiler::target::word
-    Thread_write_barrier_entry_point_offset = 520;
+    Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word Thread_random_offset = 1672;
+    Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
-    Thread_jump_to_frame_entry_point_offset = 640;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1680;
+    Thread_jump_to_frame_entry_point_offset = 624;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1664;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9009,6 +9306,26 @@
 static constexpr dart::compiler::target::word Type_type_class_id_offset = 40;
 static constexpr dart::compiler::target::word Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word Finalizer_type_arguments_offset =
+    48;
+static constexpr dart::compiler::target::word Finalizer_callback_offset = 40;
+static constexpr dart::compiler::target::word FinalizerBase_all_entries_offset =
+    24;
+static constexpr dart::compiler::target::word FinalizerBase_detachments_offset =
+    16;
+static constexpr dart::compiler::target::word
+    FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word FinalizerBase_isolate_offset = 8;
+static constexpr dart::compiler::target::word FinalizerEntry_detach_offset = 16;
+static constexpr dart::compiler::target::word
+    FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_finalizer_offset =
+    32;
+static constexpr dart::compiler::target::word FinalizerEntry_next_offset = 40;
+static constexpr dart::compiler::target::word FinalizerEntry_token_offset = 24;
+static constexpr dart::compiler::target::word FinalizerEntry_value_offset = 8;
+static constexpr dart::compiler::target::word NativeFinalizer_callback_offset =
+    40;
 static constexpr dart::compiler::target::word FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     FunctionType_named_parameter_names_offset = 48;
@@ -9065,9 +9382,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1416, 1424, 1432, -1,   -1,   1440,
+        1448, 1456, -1, -1, -1, 1464, 1472, 1480, 1488, 1496, 1504,
+        1512, 1520, -1, -1, -1, -1,   1528, 1536, 1544, 1552};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -9093,6 +9410,9 @@
 static constexpr dart::compiler::target::word FfiTrampolineData_InstanceSize =
     48;
 static constexpr dart::compiler::target::word Field_InstanceSize = 96;
+static constexpr dart::compiler::target::word Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word FinalizerEntry_InstanceSize = 64;
+static constexpr dart::compiler::target::word NativeFinalizer_InstanceSize = 48;
 static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word Function_InstanceSize = 128;
@@ -9345,6 +9665,8 @@
     24;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     28;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    40;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -9354,7 +9676,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 16;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    40;
+    44;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     12;
@@ -9389,13 +9711,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 160;
+    AOT_ObjectStore_double_type_offset = 168;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 180;
+    AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -9418,152 +9740,150 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 384;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 760;
+    AOT_Thread_active_exception_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 764;
+    AOT_Thread_active_stacktrace_offset = 756;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 128;
+    AOT_Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    AOT_Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 292;
+    AOT_Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 196;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 300;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 204;
+    AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    800;
+    792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 280;
+    AOT_Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 144;
+    AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    824;
+    816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 804;
+    AOT_Thread_double_truncate_round_supported_offset = 796;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    320;
+    312;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    232;
+    224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 324;
+    AOT_Thread_deoptimize_entry_offset = 316;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 236;
+    AOT_Thread_deoptimize_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 364;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 360;
+    AOT_Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 256;
+    AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 780;
+    AOT_Thread_execution_state_offset = 772;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 260;
+    AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 136;
+    AOT_Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 132;
+    AOT_Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 376;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 372;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 368;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 380;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 768;
+    AOT_Thread_global_object_pool_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 140;
+    AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 796;
+    AOT_Thread_exit_through_ffi_offset = 788;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    828;
+    820;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 312;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 316;
+    AOT_Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 216;
+    AOT_Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        148;
+        140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 772;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 776;
+    AOT_Thread_saved_shadow_call_stack_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 784;
+    AOT_Thread_safepoint_state_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 248;
+    AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 336;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -9571,13 +9891,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
@@ -9591,21 +9911,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 124;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 272;
+    AOT_Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    788;
+    780;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
+    AOT_Thread_callback_stack_return_offset = 784;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 332;
+    AOT_Thread_jump_to_frame_entry_point_offset = 324;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    816;
+    808;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -9626,6 +9944,32 @@
     20;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    4;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 20;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -9692,7 +10036,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -9720,6 +10064,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 28;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44;
@@ -9982,6 +10331,8 @@
     48;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    80;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -9991,7 +10342,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    80;
+    88;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     24;
@@ -10026,13 +10377,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -10055,153 +10406,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1520;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1528;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1608;
+    AOT_Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1560;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1536;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1592;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1544;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1552;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1568;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -10209,13 +10558,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -10229,21 +10578,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
+    AOT_Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -10264,6 +10611,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -10331,8 +10704,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10360,6 +10733,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
@@ -10625,6 +11003,8 @@
     48;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    80;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -10634,7 +11014,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    80;
+    88;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     24;
@@ -10669,13 +11049,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -10698,153 +11078,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -10852,13 +11230,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -10872,21 +11250,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
+    AOT_Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1688;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -10907,6 +11283,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -10974,9 +11376,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11004,6 +11406,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
@@ -11265,6 +11672,8 @@
     48;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    80;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -11274,7 +11683,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    80;
+    88;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     16;
@@ -11309,13 +11718,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -11338,153 +11747,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1520;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1528;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1608;
+    AOT_Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1560;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1536;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1592;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1544;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1552;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1568;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -11492,13 +11899,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -11512,21 +11919,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
+    AOT_Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -11547,6 +11952,32 @@
     32;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 36;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 32;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -11614,8 +12045,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11643,6 +12074,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
@@ -11904,6 +12340,8 @@
     48;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    80;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -11913,7 +12351,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    80;
+    88;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     16;
@@ -11948,13 +12386,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -11977,153 +12415,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -12131,13 +12567,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -12151,21 +12587,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
+    AOT_Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1688;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12186,6 +12620,32 @@
     32;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 36;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 32;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -12253,9 +12713,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12283,6 +12743,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
@@ -12544,6 +13009,8 @@
     24;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     28;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    40;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     32;
 static constexpr dart::compiler::target::word
@@ -12553,7 +13020,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 16;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    40;
+    44;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 20;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     12;
@@ -12588,13 +13055,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 160;
+    AOT_ObjectStore_double_type_offset = 168;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 180;
+    AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -12617,152 +13084,150 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 384;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 800;
+    AOT_Thread_active_exception_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 804;
+    AOT_Thread_active_stacktrace_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 128;
+    AOT_Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    AOT_Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 292;
+    AOT_Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 196;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 300;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 204;
+    AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    840;
+    832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 280;
+    AOT_Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 144;
+    AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    864;
+    856;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 844;
+    AOT_Thread_double_truncate_round_supported_offset = 836;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    320;
+    312;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    232;
+    224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 324;
+    AOT_Thread_deoptimize_entry_offset = 316;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 236;
+    AOT_Thread_deoptimize_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 364;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 360;
+    AOT_Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 256;
+    AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 820;
+    AOT_Thread_execution_state_offset = 812;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 260;
+    AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 136;
+    AOT_Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 132;
+    AOT_Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 376;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 372;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 368;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 380;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 808;
+    AOT_Thread_global_object_pool_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 140;
+    AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 836;
+    AOT_Thread_exit_through_ffi_offset = 828;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    868;
+    860;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 312;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 316;
+    AOT_Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 216;
+    AOT_Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        148;
+        140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 812;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 816;
+    AOT_Thread_saved_shadow_call_stack_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 824;
+    AOT_Thread_safepoint_state_offset = 816;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 248;
+    AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 336;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -12770,13 +13235,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
@@ -12790,21 +13255,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 124;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 272;
+    AOT_Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    828;
+    820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 832;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 848;
+    AOT_Thread_callback_stack_return_offset = 824;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 332;
+    AOT_Thread_jump_to_frame_entry_point_offset = 324;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    856;
+    848;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12825,6 +13288,32 @@
     20;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    4;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 20;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -12891,9 +13380,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 720, 724, 728, -1,  -1,  732,
+        736, 740, -1, -1, -1, 744, 748, 752, 756, 760, 764,
+        768, 772, -1, -1, -1, -1,  776, 780, 784, 788};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -12921,6 +13410,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 28;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44;
@@ -13183,6 +13677,8 @@
     48;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     56;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    80;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     64;
 static constexpr dart::compiler::target::word
@@ -13192,7 +13688,7 @@
 static constexpr dart::compiler::target::word
     AOT_IsolateGroup_cached_class_table_table_offset = 32;
 static constexpr dart::compiler::target::word AOT_Isolate_single_step_offset =
-    80;
+    88;
 static constexpr dart::compiler::target::word AOT_Isolate_user_tag_offset = 40;
 static constexpr dart::compiler::target::word AOT_LinkedHashBase_data_offset =
     24;
@@ -13227,13 +13723,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -13256,153 +13752,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -13410,13 +13904,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -13430,21 +13924,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13465,6 +13957,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -13532,9 +14050,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1416, 1424, 1432, -1,   -1,   1440,
+        1448, 1456, -1, -1, -1, 1464, 1472, 1480, 1488, 1496, 1504,
+        1512, 1520, -1, -1, -1, -1,   1528, 1536, 1544, 1552};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -13562,6 +14080,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
@@ -13820,6 +14343,8 @@
     20;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     24;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    36;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -13862,13 +14387,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 160;
+    AOT_ObjectStore_double_type_offset = 168;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 180;
+    AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -13891,152 +14416,150 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 384;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 760;
+    AOT_Thread_active_exception_offset = 752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 764;
+    AOT_Thread_active_stacktrace_offset = 756;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 128;
+    AOT_Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    AOT_Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 292;
+    AOT_Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 196;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 300;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 204;
+    AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    800;
+    792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 280;
+    AOT_Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 144;
+    AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    824;
+    816;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 804;
+    AOT_Thread_double_truncate_round_supported_offset = 796;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    320;
+    312;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    232;
+    224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 324;
+    AOT_Thread_deoptimize_entry_offset = 316;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 236;
+    AOT_Thread_deoptimize_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 364;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 360;
+    AOT_Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 256;
+    AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 780;
+    AOT_Thread_execution_state_offset = 772;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 260;
+    AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 136;
+    AOT_Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 132;
+    AOT_Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 376;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 372;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 368;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 380;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 768;
+    AOT_Thread_global_object_pool_offset = 760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 140;
+    AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 796;
+    AOT_Thread_exit_through_ffi_offset = 788;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    828;
+    820;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 312;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 316;
+    AOT_Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 216;
+    AOT_Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        148;
+        140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 772;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 764;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 776;
+    AOT_Thread_saved_shadow_call_stack_offset = 768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 784;
+    AOT_Thread_safepoint_state_offset = 776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 248;
+    AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 336;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -14044,13 +14567,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
@@ -14064,21 +14587,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 124;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 272;
+    AOT_Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    788;
+    780;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 792;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
+    AOT_Thread_callback_stack_return_offset = 784;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 332;
+    AOT_Thread_jump_to_frame_entry_point_offset = 324;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    816;
+    808;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14099,6 +14620,32 @@
     20;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    4;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 20;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -14165,7 +14712,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -1, -1, -1, -1, -1, -1};
+        720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -14193,6 +14740,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 28;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44;
@@ -14450,6 +15002,8 @@
     40;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    72;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -14492,13 +15046,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -14521,153 +15075,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1520;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1528;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1608;
+    AOT_Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1560;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1536;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1592;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1544;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1552;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1568;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -14675,13 +15227,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -14695,21 +15247,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
+    AOT_Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14730,6 +15280,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -14797,8 +15373,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -14826,6 +15402,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
@@ -15086,6 +15667,8 @@
     40;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    72;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -15128,13 +15711,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -15157,153 +15740,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -15311,13 +15892,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -15331,21 +15912,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
+    AOT_Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1688;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -15366,6 +15945,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -15433,9 +16038,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -15463,6 +16068,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
@@ -15719,6 +16329,8 @@
     40;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    72;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -15761,13 +16373,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -15790,153 +16402,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1520;
+    AOT_Thread_active_exception_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1528;
+    AOT_Thread_active_stacktrace_offset = 1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1608;
+    AOT_Thread_double_truncate_round_supported_offset = 1592;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1560;
+    AOT_Thread_execution_state_offset = 1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1536;
+    AOT_Thread_global_object_pool_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1592;
+    AOT_Thread_exit_through_ffi_offset = 1576;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1648;
+    1632;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1544;
+    1528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1552;
+    AOT_Thread_saved_shadow_call_stack_offset = 1536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1568;
+    AOT_Thread_safepoint_state_offset = 1552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -15944,13 +16554,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -15964,21 +16574,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1576;
+    1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1584;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
+    AOT_Thread_callback_stack_return_offset = 1568;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1624;
+    1608;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -15999,6 +16607,32 @@
     32;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 36;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 32;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -16066,8 +16700,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, -1,   -1,   1464, 1472,
-        1480, 1488, 1496, -1,   1504, 1512, -1,   -1};
+        1416, 1424, 1432, 1440, -1,   -1,   1448, 1456,
+        1464, 1472, 1480, -1,   1488, 1496, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -16095,6 +16729,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
@@ -16351,6 +16990,8 @@
     40;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    72;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -16393,13 +17034,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -16422,153 +17063,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1584;
+    AOT_Thread_active_exception_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1592;
+    AOT_Thread_active_stacktrace_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1664;
+    1648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1672;
+    AOT_Thread_double_truncate_round_supported_offset = 1656;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1624;
+    AOT_Thread_execution_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1600;
+    AOT_Thread_global_object_pool_offset = 1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1656;
+    AOT_Thread_exit_through_ffi_offset = 1640;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1712;
+    1696;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1608;
+    1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1616;
+    AOT_Thread_saved_shadow_call_stack_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1632;
+    AOT_Thread_safepoint_state_offset = 1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -16576,13 +17215,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -16596,21 +17235,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1640;
+    1624;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1648;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
+    AOT_Thread_callback_stack_return_offset = 1632;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1688;
+    1672;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16631,6 +17268,32 @@
     32;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 34;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 35;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 36;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 24;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 32;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 32;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 36;
@@ -16698,9 +17361,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
-        1520, 1528, 1536, 1544, -1,   -1,   -1,   -1,   1552, 1560, -1,
-        -1,   1568, 1576, 1584, -1,   -1,   -1,   -1,   -1,   -1};
+        1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
+        1504, 1512, 1520, 1528, -1,   -1,   -1,   -1,   1536, 1544, -1,
+        -1,   1552, 1560, 1568, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -16728,6 +17391,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    40;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    40;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
@@ -16984,6 +17652,8 @@
     20;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     24;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    36;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -17026,13 +17696,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 160;
+    AOT_ObjectStore_double_type_offset = 168;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    116;
+    124;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 180;
+    AOT_ObjectStore_string_type_offset = 188;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    104;
+    112;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -17055,152 +17725,150 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 384;
+    AOT_Thread_AllocateArray_entry_point_offset = 376;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 800;
+    AOT_Thread_active_exception_offset = 792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 804;
+    AOT_Thread_active_stacktrace_offset = 796;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 128;
+    AOT_Thread_array_write_barrier_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 276;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 276;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 180;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 184;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
+    AOT_Thread_allocate_object_entry_point_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 292;
+    AOT_Thread_allocate_object_stub_offset = 188;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 196;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 192;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 200;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 292;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 300;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 204;
+    AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    840;
+    832;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 340;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     120;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 280;
+    AOT_Thread_call_to_runtime_entry_point_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 144;
+    AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    864;
+    856;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 844;
+    AOT_Thread_double_truncate_round_supported_offset = 836;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    320;
+    312;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    232;
+    224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 324;
+    AOT_Thread_deoptimize_entry_offset = 316;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 236;
+    AOT_Thread_deoptimize_stub_offset = 228;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 364;
+    AOT_Thread_double_abs_address_offset = 356;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 360;
+    AOT_Thread_double_negate_address_offset = 352;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 256;
+    AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 820;
+    AOT_Thread_execution_state_offset = 812;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 260;
+    AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 260;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 320;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 136;
+    AOT_Thread_fix_allocation_stub_code_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 132;
+    AOT_Thread_fix_callers_target_code_offset = 124;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 376;
+    AOT_Thread_float_absolute_address_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 372;
+    AOT_Thread_float_negate_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 368;
+    AOT_Thread_float_not_address_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 380;
+    AOT_Thread_float_zerow_address_offset = 372;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 808;
+    AOT_Thread_global_object_pool_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 140;
+    AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 836;
+    AOT_Thread_exit_through_ffi_offset = 828;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    868;
+    860;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 64;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 240;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 244;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 236;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 252;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 244;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 80;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 312;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 316;
+    AOT_Thread_switchable_call_miss_entry_offset = 308;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 216;
+    AOT_Thread_switchable_call_miss_stub_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 144;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        148;
+        140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 160;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 152;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 156;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 148;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 168;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 164;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 156;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 176;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 168;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 172;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 164;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 184;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 172;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     112;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 352;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 812;
+    AOT_Thread_predefined_symbols_address_offset = 344;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 804;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 816;
+    AOT_Thread_saved_shadow_call_stack_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 824;
+    AOT_Thread_safepoint_state_offset = 816;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 248;
+    AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 336;
+    AOT_Thread_slow_type_test_entry_point_offset = 328;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     28;
 static constexpr dart::compiler::target::word
@@ -17208,13 +17876,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 300;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 204;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 200;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 76;
 static constexpr dart::compiler::target::word
@@ -17228,21 +17896,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 104;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 124;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 272;
+    AOT_Thread_write_barrier_entry_point_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    828;
+    820;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 832;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 848;
+    AOT_Thread_callback_stack_return_offset = 824;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 332;
+    AOT_Thread_jump_to_frame_entry_point_offset = 324;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    856;
+    848;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -17263,6 +17929,32 @@
     20;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 22;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 23;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 24;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    20;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 12;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    4;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 28;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 16;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    20;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    12;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 20;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 28;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 24;
@@ -17329,9 +18021,9 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,  -1,  -1, -1, -1, 728, 732, 736, -1,  -1,  740,
-        744, 748, -1, -1, -1, 752, 756, 760, 764, 768, 772,
-        776, 780, -1, -1, -1, -1,  784, 788, 792, 796};
+        -1,  -1,  -1, -1, -1, 720, 724, 728, -1,  -1,  732,
+        736, 740, -1, -1, -1, 744, 748, 752, 756, 760, 764,
+        768, 772, -1, -1, -1, -1,  776, 780, 784, 788};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -17359,6 +18051,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 28;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 28;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    32;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 44;
@@ -17616,6 +18313,8 @@
     40;
 static constexpr dart::compiler::target::word AOT_Isolate_default_tag_offset =
     48;
+static constexpr dart::compiler::target::word AOT_Isolate_finalizers_offset =
+    72;
 static constexpr dart::compiler::target::word AOT_Isolate_ic_miss_code_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -17658,13 +18357,13 @@
 static constexpr dart::compiler::target::word
     AOT_NativeArguments_thread_offset = 0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_double_type_offset = 320;
+    AOT_ObjectStore_double_type_offset = 336;
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
-    232;
+    248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_string_type_offset = 360;
+    AOT_ObjectStore_string_type_offset = 376;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
-    208;
+    224;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -17687,153 +18386,151 @@
 static constexpr dart::compiler::target::word
     AOT_SubtypeTestCache_cache_offset = 8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_AllocateArray_entry_point_offset = 744;
+    AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1576;
+    AOT_Thread_active_exception_offset = 1560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1584;
+    AOT_Thread_active_stacktrace_offset = 1568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_code_offset = 232;
+    AOT_Thread_array_write_barrier_entry_point_offset = 512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_array_write_barrier_entry_point_offset = 528;
+    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
+    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 336;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
+    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
+    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 344;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
+    AOT_Thread_allocate_object_entry_point_offset = 544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_entry_point_offset = 560;
+    AOT_Thread_allocate_object_stub_offset = 352;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_stub_offset = 368;
+    AOT_Thread_allocate_object_parameterized_entry_point_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
+    AOT_Thread_allocate_object_parameterized_stub_offset = 360;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_parameterized_stub_offset = 376;
+    AOT_Thread_allocate_object_slow_entry_point_offset = 560;
 static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_entry_point_offset = 576;
-static constexpr dart::compiler::target::word
-    AOT_Thread_allocate_object_slow_stub_offset = 384;
+    AOT_Thread_allocate_object_slow_stub_offset = 368;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1656;
+    1640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
+    AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
     216;
 static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
 static constexpr dart::compiler::target::word
-    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
+    AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 640;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_entry_point_offset = 536;
+    AOT_Thread_call_to_runtime_entry_point_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_to_runtime_stub_offset = 264;
+    AOT_Thread_call_to_runtime_stub_offset = 248;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1696;
+    1680;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1664;
+    AOT_Thread_double_truncate_round_supported_offset = 1648;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
-    616;
+    600;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
-    440;
+    424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_entry_offset = 624;
+    AOT_Thread_deoptimize_entry_offset = 608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_deoptimize_stub_offset = 448;
+    AOT_Thread_deoptimize_stub_offset = 432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_abs_address_offset = 704;
+    AOT_Thread_double_abs_address_offset = 688;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_negate_address_offset = 696;
+    AOT_Thread_double_negate_address_offset = 680;
 static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
 static constexpr dart::compiler::target::word
-    AOT_Thread_enter_safepoint_stub_offset = 488;
+    AOT_Thread_enter_safepoint_stub_offset = 472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1616;
+    AOT_Thread_execution_state_offset = 1600;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_stub_offset = 496;
+    AOT_Thread_exit_safepoint_stub_offset = 480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
+    AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+    AOT_Thread_call_native_through_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
+    AOT_Thread_call_native_through_safepoint_entry_point_offset = 616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_allocation_stub_code_offset = 248;
+    AOT_Thread_fix_allocation_stub_code_offset = 232;
 static constexpr dart::compiler::target::word
-    AOT_Thread_fix_callers_target_code_offset = 240;
+    AOT_Thread_fix_callers_target_code_offset = 224;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_absolute_address_offset = 728;
+    AOT_Thread_float_absolute_address_offset = 712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_negate_address_offset = 720;
+    AOT_Thread_float_negate_address_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_not_address_offset = 712;
+    AOT_Thread_float_not_address_offset = 696;
 static constexpr dart::compiler::target::word
-    AOT_Thread_float_zerow_address_offset = 736;
+    AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1592;
+    AOT_Thread_global_object_pool_offset = 1576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_invoke_dart_code_stub_offset = 256;
+    AOT_Thread_invoke_dart_code_stub_offset = 240;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1648;
+    AOT_Thread_exit_through_ffi_offset = 1632;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1704;
+    1688;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 128;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_return_stub_offset = 456;
+    AOT_Thread_lazy_deopt_from_return_stub_offset = 440;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_deopt_from_throw_stub_offset = 464;
+    AOT_Thread_lazy_deopt_from_throw_stub_offset = 448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_lazy_specialize_type_test_stub_offset = 480;
+    AOT_Thread_lazy_specialize_type_test_stub_offset = 464;
 static constexpr dart::compiler::target::word
     AOT_Thread_marking_stack_block_offset = 160;
 static constexpr dart::compiler::target::word
-    AOT_Thread_megamorphic_call_checked_entry_offset = 600;
+    AOT_Thread_megamorphic_call_checked_entry_offset = 584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_entry_offset = 608;
+    AOT_Thread_switchable_call_miss_entry_offset = 592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_switchable_call_miss_stub_offset = 408;
+    AOT_Thread_switchable_call_miss_stub_offset = 392;
 static constexpr dart::compiler::target::word
-    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
+    AOT_Thread_no_scope_native_wrapper_entry_point_offset = 648;
 static constexpr dart::compiler::target::word
-    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
+    AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 264;
 static constexpr dart::compiler::target::word
     AOT_Thread_late_initialization_error_shared_without_fpu_regs_stub_offset =
-        272;
+        256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 296;
+    AOT_Thread_null_error_shared_with_fpu_regs_stub_offset = 280;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 288;
+    AOT_Thread_null_error_shared_without_fpu_regs_stub_offset = 272;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 312;
+    AOT_Thread_null_arg_error_shared_with_fpu_regs_stub_offset = 296;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 304;
+    AOT_Thread_null_arg_error_shared_without_fpu_regs_stub_offset = 288;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 328;
+    AOT_Thread_null_cast_error_shared_with_fpu_regs_stub_offset = 312;
 static constexpr dart::compiler::target::word
-    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 320;
+    AOT_Thread_null_cast_error_shared_without_fpu_regs_stub_offset = 304;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 344;
+    AOT_Thread_range_error_shared_with_fpu_regs_stub_offset = 328;
 static constexpr dart::compiler::target::word
-    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
+    AOT_Thread_range_error_shared_without_fpu_regs_stub_offset = 320;
 static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
     200;
 static constexpr dart::compiler::target::word
-    AOT_Thread_predefined_symbols_address_offset = 680;
+    AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1600;
+    1584;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1608;
+    AOT_Thread_saved_shadow_call_stack_offset = 1592;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1624;
+    AOT_Thread_safepoint_state_offset = 1608;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_stub_offset = 472;
+    AOT_Thread_slow_type_test_stub_offset = 456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_slow_type_test_entry_point_offset = 648;
+    AOT_Thread_slow_type_test_entry_point_offset = 632;
 static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
     56;
 static constexpr dart::compiler::target::word
@@ -17841,13 +18538,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_stack_overflow_flags_offset = 120;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 576;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
+    AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 384;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 568;
 static constexpr dart::compiler::target::word
-    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
+    AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 376;
 static constexpr dart::compiler::target::word
     AOT_Thread_store_buffer_block_offset = 152;
 static constexpr dart::compiler::target::word
@@ -17861,21 +18558,19 @@
     AOT_Thread_unboxed_double_runtime_arg_offset = 192;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 176;
 static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_code_offset = 224;
-static constexpr dart::compiler::target::word
-    AOT_Thread_write_barrier_entry_point_offset = 520;
+    AOT_Thread_write_barrier_entry_point_offset = 504;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1632;
+    1616;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1640;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1672;
+    AOT_Thread_callback_stack_return_offset = 1624;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1656;
 static constexpr dart::compiler::target::word
-    AOT_Thread_jump_to_frame_entry_point_offset = 640;
+    AOT_Thread_jump_to_frame_entry_point_offset = 624;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1680;
+    1664;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -17896,6 +18591,32 @@
     40;
 static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 42;
 static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 43;
+static constexpr dart::compiler::target::word
+    AOT_Finalizer_type_arguments_offset = 48;
+static constexpr dart::compiler::target::word AOT_Finalizer_callback_offset =
+    40;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_all_entries_offset = 24;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_detachments_offset = 16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerBase_entries_collected_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerBase_isolate_offset =
+    8;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_detach_offset =
+    16;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_external_size_offset = 56;
+static constexpr dart::compiler::target::word
+    AOT_FinalizerEntry_finalizer_offset = 32;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_next_offset =
+    40;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_token_offset =
+    24;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_value_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_NativeFinalizer_callback_offset = 40;
 static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 56;
 static constexpr dart::compiler::target::word
     AOT_FunctionType_named_parameter_names_offset = 48;
@@ -17963,9 +18684,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        -1,   -1,   -1, -1, -1, 1432, 1440, 1448, -1,   -1,   1456,
-        1464, 1472, -1, -1, -1, 1480, 1488, 1496, 1504, 1512, 1520,
-        1528, 1536, -1, -1, -1, -1,   1544, 1552, 1560, 1568};
+        -1,   -1,   -1, -1, -1, 1416, 1424, 1432, -1,   -1,   1440,
+        1448, 1456, -1, -1, -1, 1464, 1472, 1480, 1488, 1496, 1504,
+        1512, 1520, -1, -1, -1, -1,   1528, 1536, 1544, 1552};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -17993,6 +18714,11 @@
 static constexpr dart::compiler::target::word
     AOT_FfiTrampolineData_InstanceSize = 48;
 static constexpr dart::compiler::target::word AOT_Field_InstanceSize = 80;
+static constexpr dart::compiler::target::word AOT_Finalizer_InstanceSize = 56;
+static constexpr dart::compiler::target::word AOT_FinalizerEntry_InstanceSize =
+    64;
+static constexpr dart::compiler::target::word AOT_NativeFinalizer_InstanceSize =
+    48;
 static constexpr dart::compiler::target::word AOT_Float32x4_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 80;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index cbd470c..1e03be5 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -149,6 +149,7 @@
   FIELD(Int32x4, value_offset)                                                 \
   FIELD(Isolate, current_tag_offset)                                           \
   FIELD(Isolate, default_tag_offset)                                           \
+  FIELD(Isolate, finalizers_offset)                                            \
   FIELD(Isolate, ic_miss_code_offset)                                          \
   FIELD(IsolateGroup, object_store_offset)                                     \
   FIELD(IsolateGroup, shared_class_table_offset)                               \
@@ -191,7 +192,6 @@
   FIELD(Thread, AllocateArray_entry_point_offset)                              \
   FIELD(Thread, active_exception_offset)                                       \
   FIELD(Thread, active_stacktrace_offset)                                      \
-  FIELD(Thread, array_write_barrier_code_offset)                               \
   FIELD(Thread, array_write_barrier_entry_point_offset)                        \
   FIELD(Thread, allocate_mint_with_fpu_regs_entry_point_offset)                \
   FIELD(Thread, allocate_mint_with_fpu_regs_stub_offset)                       \
@@ -279,7 +279,6 @@
   FIELD(Thread, unboxed_int64_runtime_arg_offset)                              \
   FIELD(Thread, unboxed_double_runtime_arg_offset)                             \
   FIELD(Thread, vm_tag_offset)                                                 \
-  FIELD(Thread, write_barrier_code_offset)                                     \
   FIELD(Thread, write_barrier_entry_point_offset)                              \
   FIELD(Thread, write_barrier_mask_offset)                                     \
   FIELD(Thread, heap_base_offset)                                              \
@@ -300,6 +299,19 @@
   FIELD(Type, type_class_id_offset)                                            \
   FIELD(Type, type_state_offset)                                               \
   FIELD(Type, nullability_offset)                                              \
+  FIELD(Finalizer, type_arguments_offset)                                      \
+  FIELD(Finalizer, callback_offset)                                            \
+  FIELD(FinalizerBase, all_entries_offset)                                     \
+  FIELD(FinalizerBase, detachments_offset)                                     \
+  FIELD(FinalizerBase, entries_collected_offset)                               \
+  FIELD(FinalizerBase, isolate_offset)                                         \
+  FIELD(FinalizerEntry, detach_offset)                                         \
+  FIELD(FinalizerEntry, external_size_offset)                                  \
+  FIELD(FinalizerEntry, finalizer_offset)                                      \
+  FIELD(FinalizerEntry, next_offset)                                           \
+  FIELD(FinalizerEntry, token_offset)                                          \
+  FIELD(FinalizerEntry, value_offset)                                          \
+  FIELD(NativeFinalizer, callback_offset)                                      \
   FIELD(FunctionType, hash_offset)                                             \
   FIELD(FunctionType, named_parameter_names_offset)                            \
   FIELD(FunctionType, nullability_offset)                                      \
@@ -362,6 +374,9 @@
   SIZEOF(ExternalTypedData, InstanceSize, UntaggedExternalTypedData)           \
   SIZEOF(FfiTrampolineData, InstanceSize, UntaggedFfiTrampolineData)           \
   SIZEOF(Field, InstanceSize, UntaggedField)                                   \
+  SIZEOF(Finalizer, InstanceSize, UntaggedFinalizer)                           \
+  SIZEOF(FinalizerEntry, InstanceSize, UntaggedFinalizerEntry)                 \
+  SIZEOF(NativeFinalizer, InstanceSize, UntaggedNativeFinalizer)               \
   SIZEOF(Float32x4, InstanceSize, UntaggedFloat32x4)                           \
   SIZEOF(Float64x2, InstanceSize, UntaggedFloat64x2)                           \
   SIZEOF(Function, InstanceSize, UntaggedFunction)                             \
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index 6c4b3ae..7dd9e8f 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -128,18 +128,18 @@
 #elif defined(TARGET_ARCH_ARM64)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 12;
 #if defined(DART_COMPRESSED_POINTERS)
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 292;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 260;
 #else
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 268;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 236;
 #endif
   static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 2;
 #elif defined(TARGET_ARCH_RISCV32)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 192;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 198;
   static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 2;
 #elif defined(TARGET_ARCH_RISCV64)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 196;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 202;
   static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 2;
 #else
 #error What architecture?
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index 3c65323..dda5901 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -43,16 +43,13 @@
   __ tst(R0, Operand(1 << target::ObjectAlignment::kNewObjectBitPosition));
   __ BranchIf(NOT_ZERO, &done);
 
-  if (preserve_registers) {
-    __ EnterCallRuntimeFrame(0);
-  } else {
-    __ ReserveAlignedFrameSpace(0);
-  }
-  // [R0] already contains first argument.
-  __ mov(R1, Operand(THR));
-  __ CallRuntime(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
-  if (preserve_registers) {
-    __ LeaveCallRuntimeFrame();
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    // [R0] already contains first argument.
+    __ mov(R1, Operand(THR));
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
   }
 
   __ Bind(&done);
@@ -584,7 +581,9 @@
 
   // Set retval in NativeArgs.
   ASSERT(retval_offset == 3 * target::kWordSize);
-  __ add(R3, FP, Operand(2 * target::kWordSize));
+  __ add(R3, FP,
+         Operand((target::frame_layout.param_end_from_fp + 1) *
+                 target::kWordSize));
 
   // Passing the structure by value as in runtime calls would require changing
   // Dart API for native functions.
@@ -839,13 +838,17 @@
       __ vstmd(DB_W, SP, D0, kNumberOfDRegisters);
     }
 
-  __ mov(R0, Operand(SP));  // Pass address of saved registers block.
-  bool is_lazy =
-      (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
-  __ mov(R1, Operand(is_lazy ? 1 : 0));
-  __ ReserveAlignedFrameSpace(0);
-  __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 2);
-  // Result (R0) is stack-size (FP - SP) in bytes.
+    {
+      __ mov(R0, Operand(SP));  // Pass address of saved registers block.
+      LeafRuntimeScope rt(assembler,
+                          /*frame_size=*/0,
+                          /*preserve_registers=*/false);
+      bool is_lazy =
+          (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
+      __ mov(R1, Operand(is_lazy ? 1 : 0));
+      rt.Call(kDeoptimizeCopyFrameRuntimeEntry, 2);
+      // Result (R0) is stack-size (FP - SP) in bytes.
+    }
 
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into R1 temporarily.
@@ -863,15 +866,19 @@
   // DeoptimizeFillFrame expects a Dart frame, i.e. EnterDartFrame(0), but there
   // is no need to set the correct PC marker or load PP, since they get patched.
   __ EnterStubFrame();
-  __ mov(R0, Operand(FP));  // Get last FP address.
   if (kind == kLazyDeoptFromReturn) {
     __ Push(R1);  // Preserve result as first local.
   } else if (kind == kLazyDeoptFromThrow) {
     __ Push(R1);  // Preserve exception as first local.
     __ Push(R2);  // Preserve stacktrace as second local.
   }
-  __ ReserveAlignedFrameSpace(0);
-  __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);  // Pass last FP in R0.
+  {
+    __ mov(R0, Operand(FP));  // Get last FP address.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    rt.Call(kDeoptimizeFillFrameRuntimeEntry, 1);
+  }
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into R1.
     __ ldr(R1, Address(FP, target::frame_layout.first_local_from_fp *
@@ -1195,8 +1202,6 @@
 //   R2 : arguments array.
 //   R3 : current thread.
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
-  // Marker for the profiler.
-  NOT_IN_PRODUCT(READS_RETURN_ADDRESS_FROM_LR(__ Push(LR)));
   SPILLS_LR_TO_FRAME(__ EnterFrame((1 << FP) | (1 << LR), 0));
 
   // Push code object to PC marker slot.
@@ -1319,7 +1324,6 @@
 
   // Restore the frame pointer and return.
   RESTORES_LR_FROM_FRAME(__ LeaveFrame((1 << FP) | (1 << LR)));
-  NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ Ret();
 }
 
@@ -1560,7 +1564,6 @@
 COMPILE_ASSERT(kWriteBarrierValueReg == R0);
 COMPILE_ASSERT(kWriteBarrierSlotReg == R9);
 static void GenerateWriteBarrierStubHelper(Assembler* assembler,
-                                           Address stub_code,
                                            bool cards) {
   Label add_to_mark_stack, remember_card, lost_race;
   __ tst(R0, Operand(1 << target::ObjectAlignment::kNewObjectBitPosition));
@@ -1619,16 +1622,12 @@
 
   // Handle overflow: Call the runtime leaf function.
   __ Bind(&overflow);
-  // Setup frame, push callee-saved registers.
-
-  __ Push(CODE_REG);
-  __ ldr(CODE_REG, stub_code);
-  __ EnterCallRuntimeFrame(0 * target::kWordSize);
-  __ mov(R0, Operand(THR));
-  __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1);
-  // Restore callee-saved registers, tear down frame.
-  __ LeaveCallRuntimeFrame();
-  __ Pop(CODE_REG);
+  {
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                        /*preserve_registers=*/true);
+    __ mov(R0, Operand(THR));
+    rt.Call(kStoreBufferBlockProcessRuntimeEntry, 1);
+  }
   __ Ret();
 
   __ Bind(&add_to_mark_stack);
@@ -1660,13 +1659,12 @@
   __ Ret();
 
   __ Bind(&marking_overflow);
-  __ Push(CODE_REG);
-  __ ldr(CODE_REG, stub_code);
-  __ EnterCallRuntimeFrame(0 * target::kWordSize);
-  __ mov(R0, Operand(THR));
-  __ CallRuntime(kMarkingStackBlockProcessRuntimeEntry, 1);
-  __ LeaveCallRuntimeFrame();
-  __ Pop(CODE_REG);
+  {
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                        /*preserve_registers=*/true);
+    __ mov(R0, Operand(THR));
+    rt.Call(kMarkingStackBlockProcessRuntimeEntry, 1);
+  }
   __ Ret();
 
   __ Bind(&lost_race);
@@ -1699,32 +1697,23 @@
 
     // Card table not yet allocated.
     __ Bind(&remember_card_slow);
-    __ Push(CODE_REG);
-    __ Push(R0);
-    __ Push(R1);
-    __ ldr(CODE_REG, stub_code);
-    __ mov(R0, Operand(R1));  // Arg0 = Object
-    __ mov(R1, Operand(R9));  // Arg1 = Slot
-    __ EnterCallRuntimeFrame(0);
-    __ CallRuntime(kRememberCardRuntimeEntry, 2);
-    __ LeaveCallRuntimeFrame();
-    __ Pop(R1);
-    __ Pop(R0);
-    __ Pop(CODE_REG);
+    {
+      LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                          /*preserve_registers=*/true);
+      __ mov(R0, Operand(R1));  // Arg0 = Object
+      __ mov(R1, Operand(R9));  // Arg1 = Slot
+      rt.Call(kRememberCardRuntimeEntry, 2);
+    }
     __ Ret();
   }
 }
 
 void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler, Address(THR, target::Thread::write_barrier_code_offset()),
-      false);
+  GenerateWriteBarrierStubHelper(assembler, false);
 }
 
 void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler,
-      Address(THR, target::Thread::array_write_barrier_code_offset()), true);
+  GenerateWriteBarrierStubHelper(assembler, true);
 }
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index e32707b..ed64ffd 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -42,11 +42,11 @@
   __ tbnz(&done, R0, target::ObjectAlignment::kNewObjectBitPosition);
 
   {
-    Assembler::CallRuntimeScope scope(
-        assembler, kEnsureRememberedAndMarkingDeferredRuntimeEntry,
-        /*frame_size=*/0, /*preserve_registers=*/preserve_registers);
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0, preserve_registers);
+    // R0 already loaded.
     __ mov(R1, THR);
-    scope.Call(/*argument_count=*/2);
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry,
+            /*argument_count=*/2);
   }
 
   __ Bind(&done);
@@ -700,7 +700,8 @@
 
   // Set retval in NativeArgs.
   ASSERT(retval_offset == 3 * target::kWordSize);
-  __ AddImmediate(R3, FP, 2 * target::kWordSize);
+  __ AddImmediate(
+      R3, FP, (target::frame_layout.param_end_from_fp + 1) * target::kWordSize);
 
   // Passing the structure by value as in runtime calls would require changing
   // Dart API for native functions.
@@ -976,13 +977,17 @@
     __ PushQuad(vreg);
   }
 
-  __ mov(R0, SP);  // Pass address of saved registers block.
-  bool is_lazy =
-      (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
-  __ LoadImmediate(R1, is_lazy ? 1 : 0);
-  __ ReserveAlignedFrameSpace(0);
-  __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 2);
-  // Result (R0) is stack-size (FP - SP) in bytes.
+  {
+    __ mov(R0, SP);  // Pass address of saved registers block.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    bool is_lazy =
+        (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
+    __ LoadImmediate(R1, is_lazy ? 1 : 0);
+    rt.Call(kDeoptimizeCopyFrameRuntimeEntry, 2);
+    // Result (R0) is stack-size (FP - SP) in bytes.
+  }
 
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into R1 temporarily.
@@ -1009,9 +1014,13 @@
     __ Push(R1);  // Preserve exception as first local.
     __ Push(R2);  // Preserve stacktrace as second local.
   }
-  __ ReserveAlignedFrameSpace(0);
-  __ mov(R0, FP);  // Pass last FP as parameter in R0.
-  __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
+  {
+    __ mov(R0, FP);  // Pass last FP as parameter in R0.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    rt.Call(kDeoptimizeFillFrameRuntimeEntry, 1);
+  }
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into R1.
     __ LoadFromOffset(
@@ -1365,8 +1374,6 @@
   // from over-writing Dart frames.
   __ mov(SP, CSP);
   __ SetupCSPFromThread(R3);
-  // Marker for the profiler.
-  NOT_IN_PRODUCT(READS_RETURN_ADDRESS_FROM_LR(__ Push(LR)));
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1413,6 +1420,9 @@
   ASSERT(target::frame_layout.exit_link_slot_from_entry_fp == -23);
 #endif
   __ Push(R6);
+  // In debug mode, verify that we've pushed the top exit frame info at the
+  // correct offset from FP.
+  __ EmitEntryFrameVerification();
 
   // Mark that the thread is executing Dart code. Do this after initializing the
   // exit link for the profiler.
@@ -1489,7 +1499,6 @@
 
   // Restore the frame pointer and C stack pointer and return.
   __ LeaveFrame();
-  NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ RestoreCSP();
   __ ret();
 }
@@ -1736,7 +1745,6 @@
 COMPILE_ASSERT(kWriteBarrierValueReg == R0);
 COMPILE_ASSERT(kWriteBarrierSlotReg == R25);
 static void GenerateWriteBarrierStubHelper(Assembler* assembler,
-                                           Address stub_code,
                                            bool cards) {
   Label add_to_mark_stack, remember_card, lost_race;
   __ tbz(&add_to_mark_stack, R0,
@@ -1799,11 +1807,11 @@
   // Handle overflow: Call the runtime leaf function.
   __ Bind(&overflow);
   {
-    Assembler::CallRuntimeScope scope(assembler,
-                                      kStoreBufferBlockProcessRuntimeEntry,
-                                      /*frame_size=*/0, stub_code);
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/true);
     __ mov(R0, THR);
-    scope.Call(/*argument_count=*/1);
+    rt.Call(kStoreBufferBlockProcessRuntimeEntry, /*argument_count=*/1);
   }
   __ ret();
 
@@ -1841,11 +1849,11 @@
 
   __ Bind(&marking_overflow);
   {
-    Assembler::CallRuntimeScope scope(assembler,
-                                      kMarkingStackBlockProcessRuntimeEntry,
-                                      /*frame_size=*/0, stub_code);
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/true);
     __ mov(R0, THR);
-    scope.Call(/*argument_count=*/1);
+    rt.Call(kMarkingStackBlockProcessRuntimeEntry, /*argument_count=*/1);
   }
   __ ret();
 
@@ -1881,26 +1889,23 @@
     // Card table not yet allocated.
     __ Bind(&remember_card_slow);
     {
-      Assembler::CallRuntimeScope scope(assembler, kRememberCardRuntimeEntry,
-                                        /*frame_size=*/0, stub_code);
+      LeafRuntimeScope rt(assembler,
+                          /*frame_size=*/0,
+                          /*preserve_registers=*/true);
       __ mov(R0, R1);   // Arg0 = Object
       __ mov(R1, R25);  // Arg1 = Slot
-      scope.Call(/*argument_count=*/2);
+      rt.Call(kRememberCardRuntimeEntry, /*argument_count=*/2);
     }
     __ ret();
   }
 }
 
 void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler, Address(THR, target::Thread::write_barrier_code_offset()),
-      false);
+  GenerateWriteBarrierStubHelper(assembler, false);
 }
 
 void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler,
-      Address(THR, target::Thread::array_write_barrier_code_offset()), true);
+  GenerateWriteBarrierStubHelper(assembler, true);
 }
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 52f6ed0..a40060d 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -41,16 +41,13 @@
   __ testl(EAX, Immediate(1 << target::ObjectAlignment::kNewObjectBitPosition));
   __ BranchIf(NOT_ZERO, &done);
 
-  if (preserve_registers) {
-    __ EnterCallRuntimeFrame(2 * target::kWordSize);
-  } else {
-    __ ReserveAlignedFrameSpace(2 * target::kWordSize);
-  }
-  __ movl(Address(ESP, 1 * target::kWordSize), THR);
-  __ movl(Address(ESP, 0 * target::kWordSize), EAX);
-  __ CallRuntime(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
-  if (preserve_registers) {
-    __ LeaveCallRuntimeFrame();
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/2 * target::kWordSize,
+                        preserve_registers);
+    __ movl(Address(ESP, 1 * target::kWordSize), THR);
+    __ movl(Address(ESP, 0 * target::kWordSize), EAX);
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
   }
 
   __ Bind(&done);
@@ -436,16 +433,21 @@
   }
 
   // Pass NativeArguments structure by value and call native function.
-  __ movl(Address(ESP, thread_offset), THR);    // Set thread in NativeArgs.
-  __ movl(Address(ESP, argc_tag_offset), EDX);  // Set argc in NativeArguments.
-  __ movl(Address(ESP, argv_offset), EAX);      // Set argv in NativeArguments.
-  __ leal(EAX,
-          Address(EBP, 2 * target::kWordSize));  // Compute return value addr.
-  __ movl(Address(ESP, retval_offset), EAX);  // Set retval in NativeArguments.
-  __ leal(
-      EAX,
-      Address(ESP, 2 * target::kWordSize));  // Pointer to the NativeArguments.
-  __ movl(Address(ESP, 0), EAX);  // Pass the pointer to the NativeArguments.
+  // Set thread in NativeArgs.
+  __ movl(Address(ESP, thread_offset), THR);
+  // Set argc in NativeArguments.
+  __ movl(Address(ESP, argc_tag_offset), EDX);
+  // Set argv in NativeArguments.
+  __ movl(Address(ESP, argv_offset), EAX);
+  // Compute return value addr.
+  __ leal(EAX, Address(EBP, (target::frame_layout.param_end_from_fp + 1) *
+                                target::kWordSize));
+  // Set retval in NativeArguments.
+  __ movl(Address(ESP, retval_offset), EAX);
+  // Pointer to the NativeArguments.
+  __ leal(EAX, Address(ESP, 2 * target::kWordSize));
+  // Pass the pointer to the NativeArguments.
+  __ movl(Address(ESP, 0), EAX);
 
   __ movl(Address(ESP, target::kWordSize), ECX);  // Function to call.
   __ call(wrapper_address);
@@ -646,15 +648,19 @@
     offset += kFpuRegisterSize;
   }
 
-  __ movl(ECX, ESP);  // Preserve saved registers block.
-  __ ReserveAlignedFrameSpace(2 * target::kWordSize);
-  __ movl(Address(ESP, 0 * target::kWordSize),
-          ECX);  // Start of register block.
-  bool is_lazy =
-      (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
-  __ movl(Address(ESP, 1 * target::kWordSize), Immediate(is_lazy ? 1 : 0));
-  __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 2);
-  // Result (EAX) is stack-size (FP - SP) in bytes.
+  {
+    __ movl(ECX, ESP);  // Preserve saved registers block.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/2 * target::kWordSize,
+                        /*preserve_registers=*/false);
+    bool is_lazy =
+        (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
+    __ movl(Address(ESP, 0 * target::kWordSize),
+            ECX);  // Start of register block.
+    __ movl(Address(ESP, 1 * target::kWordSize), Immediate(is_lazy ? 1 : 0));
+    rt.Call(kDeoptimizeCopyFrameRuntimeEntry, 2);
+    // Result (EAX) is stack-size (FP - SP) in bytes.
+  }
 
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into EBX temporarily.
@@ -681,9 +687,13 @@
     __ pushl(EBX);  // Preserve exception as first local.
     __ pushl(ECX);  // Preserve stacktrace as first local.
   }
-  __ ReserveAlignedFrameSpace(1 * target::kWordSize);
-  __ movl(Address(ESP, 0), EBP);  // Pass last FP as parameter on stack.
-  __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/1 * target::kWordSize,
+                        /*preserve_registers=*/false);
+    __ movl(Address(ESP, 0), EBP);  // Pass last FP as parameter on stack.
+    rt.Call(kDeoptimizeFillFrameRuntimeEntry, 1);
+  }
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into EBX.
     __ movl(EBX, Address(EBP, target::frame_layout.first_local_from_fp *
@@ -964,12 +974,10 @@
 //   ESP + 16 : current thread.
 // Uses EAX, EDX, ECX, EDI as temporary registers.
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
-  const intptr_t kTargetCodeOffset = 3 * target::kWordSize;
-  const intptr_t kArgumentsDescOffset = 4 * target::kWordSize;
-  const intptr_t kArgumentsOffset = 5 * target::kWordSize;
-  const intptr_t kThreadOffset = 6 * target::kWordSize;
-
-  NOT_IN_PRODUCT(__ pushl(Address(ESP, 0)));  // Marker for the profiler.
+  const intptr_t kTargetCodeOffset = 2 * target::kWordSize;
+  const intptr_t kArgumentsDescOffset = 3 * target::kWordSize;
+  const intptr_t kArgumentsOffset = 4 * target::kWordSize;
+  const intptr_t kThreadOffset = 5 * target::kWordSize;
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1084,7 +1092,6 @@
 
   // Restore the frame pointer.
   __ LeaveFrame();
-  NOT_IN_PRODUCT(__ popl(ECX));  // Drop profiler marker.
 
   __ ret();
 }
@@ -1322,7 +1329,6 @@
 COMPILE_ASSERT(kWriteBarrierValueReg == kNoRegister);
 COMPILE_ASSERT(kWriteBarrierSlotReg == EDI);
 static void GenerateWriteBarrierStubHelper(Assembler* assembler,
-                                           Address stub_code,
                                            bool cards) {
   Label remember_card;
 
@@ -1404,13 +1410,13 @@
 
   // Handle overflow: Call the runtime leaf function.
   __ Bind(&overflow);
-  // Setup frame, push callee-saved registers.
-
-  __ EnterCallRuntimeFrame(1 * target::kWordSize);
-  __ movl(Address(ESP, 0), THR);  // Push the thread as the only argument.
-  __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1);
-  // Restore callee-saved registers, tear down frame.
-  __ LeaveCallRuntimeFrame();
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/1 * target::kWordSize,
+                        /*preserve_registers=*/true);
+    __ movl(Address(ESP, 0), THR);  // Push the thread as the only argument.
+    rt.Call(kStoreBufferBlockProcessRuntimeEntry, 1);
+  }
   __ ret();
 
   __ Bind(&lost_race);
@@ -1442,11 +1448,15 @@
 
     // Card table not yet allocated.
     __ Bind(&remember_card_slow);
-    __ EnterCallRuntimeFrame(2 * target::kWordSize);
-    __ movl(Address(ESP, 0 * target::kWordSize), EDX);  // Object
-    __ movl(Address(ESP, 1 * target::kWordSize), EDI);  // Slot
-    __ CallRuntime(kRememberCardRuntimeEntry, 2);
-    __ LeaveCallRuntimeFrame();
+
+    {
+      LeafRuntimeScope rt(assembler,
+                          /*frame_size=*/2 * target::kWordSize,
+                          /*preserve_registers=*/true);
+      __ movl(Address(ESP, 0 * target::kWordSize), EDX);  // Object
+      __ movl(Address(ESP, 1 * target::kWordSize), EDI);  // Slot
+      rt.Call(kRememberCardRuntimeEntry, 2);
+    }
     __ popl(ECX);
     __ popl(EAX);
     __ ret();
@@ -1454,15 +1464,11 @@
 }
 
 void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler, Address(THR, target::Thread::write_barrier_code_offset()),
-      false);
+  GenerateWriteBarrierStubHelper(assembler, false);
 }
 
 void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler,
-      Address(THR, target::Thread::array_write_barrier_code_offset()), true);
+  GenerateWriteBarrierStubHelper(assembler, true);
 }
 
 void StubCodeCompiler::GenerateAllocateObjectStub(Assembler* assembler) {
diff --git a/runtime/vm/compiler/stub_code_compiler_riscv.cc b/runtime/vm/compiler/stub_code_compiler_riscv.cc
index f4a17da..e63cc88 100644
--- a/runtime/vm/compiler/stub_code_compiler_riscv.cc
+++ b/runtime/vm/compiler/stub_code_compiler_riscv.cc
@@ -43,11 +43,11 @@
   __ bnez(TMP2, &done);
 
   {
-    Assembler::CallRuntimeScope scope(
-        assembler, kEnsureRememberedAndMarkingDeferredRuntimeEntry,
-        /*frame_size=*/0, /*preserve_registers=*/preserve_registers);
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0, preserve_registers);
+    // A0 already loaded.
     __ mv(A1, THR);
-    scope.Call(/*argument_count=*/2);
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry,
+            /*argument_count=*/2);
   }
 
   __ Bind(&done);
@@ -216,16 +216,16 @@
   RegisterSet all_registers;
   all_registers.AddAllGeneralRegisters();
 
-  __ EnterFrame(0);
   __ PushRegisters(all_registers);
+  __ EnterFrame(0);
 
   __ ReserveAlignedFrameSpace(0);
 
   __ lx(TMP, Address(THR, kEnterSafepointRuntimeEntry.OffsetFromThread()));
   __ jalr(TMP);
 
-  __ PopRegisters(all_registers);
   __ LeaveFrame();
+  __ PopRegisters(all_registers);
   __ ret();
 }
 
@@ -234,8 +234,8 @@
   RegisterSet all_registers;
   all_registers.AddAllGeneralRegisters();
 
-  __ EnterFrame(0);
   __ PushRegisters(all_registers);
+  __ EnterFrame(0);
 
   __ ReserveAlignedFrameSpace(0);
 
@@ -248,8 +248,8 @@
   __ lx(TMP, Address(THR, runtime_entry_offset));
   __ jalr(TMP);
 
-  __ PopRegisters(all_registers);
   __ LeaveFrame();
+  __ PopRegisters(all_registers);
   __ ret();
 }
 
@@ -322,11 +322,11 @@
          kNativeCallbackTrampolineSize *
              NativeCallbackTrampolines::NumCallbackTrampolinesPerPage());
 
+  const intptr_t shared_stub_start = __ CodeSize();
+
   __ Bind(&loaded_callback_id_hi);
   __ srai(T1, T1, 12);
 
-  const intptr_t shared_stub_start = __ CodeSize();
-
   // Save THR (callee-saved) and RA. Keeps stack aligned.
   COMPILE_ASSERT(StubCodeCompiler::kNativeCallbackTrampolineStackDelta == 2);
   __ PushRegisterPair(RA, THR);
@@ -630,7 +630,8 @@
   // Set argv in target::NativeArguments: R2 already contains argv.
   // Set retval in NativeArgs.
   ASSERT(retval_offset == 3 * target::kWordSize);
-  __ AddImmediate(T3, FP, 2 * target::kWordSize);
+  __ AddImmediate(
+      T3, FP, (target::frame_layout.param_end_from_fp + 1) * target::kWordSize);
 
   // Passing the structure by value as in runtime calls would require changing
   // Dart API for native functions.
@@ -843,11 +844,11 @@
 //   +------------------+
 //   | PC marker        | <- TOS
 //   +------------------+
-//   | Saved FP         | <- FP of stub
+//   | Saved FP         |
 //   +------------------+
 //   | return-address   |  (deoptimization point)
 //   +------------------+
-//   | Saved CODE_REG   |
+//   | Saved CODE_REG   | <- FP of stub
 //   +------------------+
 //   | ...              | <- SP of optimized frame
 //
@@ -880,7 +881,7 @@
       // Save the original value of CODE_REG pushed before invoking this stub
       // instead of the value used to call this stub.
       COMPILE_ASSERT(TMP > CODE_REG);  // TMP saved first
-      __ lx(TMP, Address(FP, 2 * target::kWordSize));
+      __ lx(TMP, Address(FP, 0 * target::kWordSize));
       __ sx(TMP, Address(SP, i * target::kWordSize));
     } else {
       __ sx(r, Address(SP, i * target::kWordSize));
@@ -893,13 +894,17 @@
     __ fsd(freg, Address(SP, i * kFpuRegisterSize));
   }
 
-  __ mv(A0, SP);  // Pass address of saved registers block.
-  bool is_lazy =
-      (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
-  __ li(A1, is_lazy ? 1 : 0);
-  __ ReserveAlignedFrameSpace(0);
-  __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 2);
-  // Result (A0) is stack-size (FP - SP) in bytes.
+  {
+    __ mv(A0, SP);  // Pass address of saved registers block.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    bool is_lazy =
+        (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
+    __ li(A1, is_lazy ? 1 : 0);
+    rt.Call(kDeoptimizeCopyFrameRuntimeEntry, 2);
+    // Result (A0) is stack-size (FP - SP) in bytes.
+  }
 
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into T1 temporarily.
@@ -926,9 +931,13 @@
     __ PushRegister(T1);  // Preserve exception as first local.
     __ PushRegister(T2);  // Preserve stacktrace as second local.
   }
-  __ ReserveAlignedFrameSpace(0);
-  __ mv(A0, FP);  // Pass last FP as parameter in R0.
-  __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
+  {
+    __ mv(A0, FP);  // Pass last FP as parameter in R0.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    rt.Call(kDeoptimizeFillFrameRuntimeEntry, 1);
+  }
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into T1.
     __ LoadFromOffset(
@@ -1276,7 +1285,6 @@
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
   __ Comment("InvokeDartCodeStub");
 
-  NOT_IN_PRODUCT(__ PushRegister(RA));  // Marker for the profiler.
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1319,10 +1327,13 @@
   // target::frame_layout.exit_link_slot_from_entry_fp must be kept in sync
   // with the code below.
 #if XLEN == 32
-  ASSERT_EQUAL(target::frame_layout.exit_link_slot_from_entry_fp, -40);
+  ASSERT_EQUAL(target::frame_layout.exit_link_slot_from_entry_fp, -42);
 #elif XLEN == 64
-  ASSERT_EQUAL(target::frame_layout.exit_link_slot_from_entry_fp, -28);
+  ASSERT_EQUAL(target::frame_layout.exit_link_slot_from_entry_fp, -30);
 #endif
+  // In debug mode, verify that we've pushed the top exit frame info at the
+  // correct offset from FP.
+  __ EmitEntryFrameVerification();
 
   // Mark that the thread is executing Dart code. Do this after initializing the
   // exit link for the profiler.
@@ -1396,7 +1407,6 @@
 
   // Restore the frame pointer and C stack pointer and return.
   __ LeaveFrame();
-  __ NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ ret();
 }
 
@@ -1638,7 +1648,6 @@
 COMPILE_ASSERT(kWriteBarrierValueReg == A1);
 COMPILE_ASSERT(kWriteBarrierSlotReg == A6);
 static void GenerateWriteBarrierStubHelper(Assembler* assembler,
-                                           Address stub_code,
                                            bool cards) {
   Label add_to_mark_stack, remember_card, lost_race;
   __ andi(TMP2, A1, 1 << target::ObjectAlignment::kNewObjectBitPosition);
@@ -1714,11 +1723,10 @@
   __ lx(T2, Address(SP, 2 * target::kWordSize));
   __ addi(SP, SP, 3 * target::kWordSize);
   {
-    Assembler::CallRuntimeScope scope(assembler,
-                                      kStoreBufferBlockProcessRuntimeEntry,
-                                      /*frame_size=*/0, stub_code);
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                        /*preserve_registers=*/true);
     __ mv(A0, THR);
-    scope.Call(/*argument_count=*/1);
+    rt.Call(kStoreBufferBlockProcessRuntimeEntry, /*argument_count=*/1);
   }
   __ ret();
 
@@ -1768,11 +1776,10 @@
   __ lx(T2, Address(SP, 2 * target::kWordSize));
   __ addi(SP, SP, 3 * target::kWordSize);
   {
-    Assembler::CallRuntimeScope scope(assembler,
-                                      kMarkingStackBlockProcessRuntimeEntry,
-                                      /*frame_size=*/0, stub_code);
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                        /*preserve_registers=*/true);
     __ mv(A0, THR);
-    scope.Call(/*argument_count=*/1);
+    rt.Call(kMarkingStackBlockProcessRuntimeEntry, /*argument_count=*/1);
   }
   __ ret();
 
@@ -1807,26 +1814,22 @@
     // Card table not yet allocated.
     __ Bind(&remember_card_slow);
     {
-      Assembler::CallRuntimeScope scope(assembler, kRememberCardRuntimeEntry,
-                                        /*frame_size=*/0, stub_code);
+      LeafRuntimeScope rt(assembler, /*frame_size=*/0,
+                          /*preserve_registers=*/true);
       __ mv(A0, A0);  // Arg0 = Object
       __ mv(A1, A6);  // Arg1 = Slot
-      scope.Call(/*argument_count=*/2);
+      rt.Call(kRememberCardRuntimeEntry, /*argument_count=*/2);
     }
     __ ret();
   }
 }
 
 void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler, Address(THR, target::Thread::write_barrier_code_offset()),
-      false);
+  GenerateWriteBarrierStubHelper(assembler, false);
 }
 
 void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler,
-      Address(THR, target::Thread::array_write_barrier_code_offset()), true);
+  GenerateWriteBarrierStubHelper(assembler, true);
 }
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
@@ -3002,12 +3005,18 @@
 #error Unimplemented
 #endif
   Label exit_through_non_ffi;
-  // Check if we exited generated from FFI. If so do transition.
+  // Check if we exited generated from FFI. If so do transition - this is needed
+  // because normally runtime calls transition back to generated via destructor
+  // of TransititionGeneratedToVM/Native that is part of runtime boilerplate
+  // code (see DEFINE_RUNTIME_ENTRY_IMPL in runtime_entry.h). Ffi calls don't
+  // have this boilerplate, don't have this stack resource, have to transition
+  // explicitly.
   __ LoadFromOffset(TMP, THR,
                     compiler::target::Thread::exit_through_ffi_offset());
   __ LoadImmediate(TMP2, target::Thread::exit_through_ffi());
   __ bne(TMP, TMP2, &exit_through_non_ffi);
-  __ Stop("Unimplemented");
+  __ TransitionNativeToGenerated(TMP, /*leave_safepoint=*/true,
+                                 /*ignore_unwind_in_progress=*/true);
   __ Bind(&exit_through_non_ffi);
 
   // Refresh pinned registers values (inc. write barrier mask and null object).
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 0268696..998fac5 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -45,16 +45,11 @@
   __ testq(RAX, Immediate(1 << target::ObjectAlignment::kNewObjectBitPosition));
   __ BranchIf(NOT_ZERO, &done);
 
-  if (preserve_registers) {
-    __ EnterCallRuntimeFrame(0);
-  } else {
-    __ ReserveAlignedFrameSpace(0);
-  }
-  __ movq(CallingConventions::kArg1Reg, RAX);
-  __ movq(CallingConventions::kArg2Reg, THR);
-  __ CallRuntime(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
-  if (preserve_registers) {
-    __ LeaveCallRuntimeFrame();
+  {
+    LeafRuntimeScope rt(assembler, /*frame_size=*/0, preserve_registers);
+    __ movq(CallingConventions::kArg1Reg, RAX);
+    __ movq(CallingConventions::kArg2Reg, THR);
+    rt.Call(kEnsureRememberedAndMarkingDeferredRuntimeEntry, 2);
   }
 
   __ Bind(&done);
@@ -729,15 +724,17 @@
     }
 
     // Pass target::NativeArguments structure by value and call native function.
-    __ movq(Address(RSP, thread_offset), THR);  // Set thread in NativeArgs.
-    __ movq(Address(RSP, argc_tag_offset),
-            R10);  // Set argc in target::NativeArguments.
-    __ movq(Address(RSP, argv_offset),
-            R13);  // Set argv in target::NativeArguments.
-    __ leaq(RAX,
-            Address(RBP, 2 * target::kWordSize));  // Compute return value addr.
-    __ movq(Address(RSP, retval_offset),
-            RAX);  // Set retval in target::NativeArguments.
+    // Set thread in NativeArgs.
+    __ movq(Address(RSP, thread_offset), THR);
+    // Set argc in target::NativeArguments.
+    __ movq(Address(RSP, argc_tag_offset), R10);
+    // Set argv in target::NativeArguments.
+    __ movq(Address(RSP, argv_offset), R13);
+    // Compute return value addr.
+    __ leaq(RAX, Address(RBP, (target::frame_layout.param_end_from_fp + 1) *
+                                  target::kWordSize));
+    // Set retval in target::NativeArguments.
+    __ movq(Address(RSP, retval_offset), RAX);
 
     // Pass the pointer to the target::NativeArguments.
     __ movq(CallingConventions::kArg1Reg, RSP);
@@ -980,14 +977,18 @@
     offset += kFpuRegisterSize;
   }
 
-  // Pass address of saved registers block.
-  __ movq(CallingConventions::kArg1Reg, RSP);
-  bool is_lazy =
-      (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
-  __ movq(CallingConventions::kArg2Reg, Immediate(is_lazy ? 1 : 0));
-  __ ReserveAlignedFrameSpace(0);  // Ensure stack is aligned before the call.
-  __ CallRuntime(kDeoptimizeCopyFrameRuntimeEntry, 2);
-  // Result (RAX) is stack-size (FP - SP) in bytes.
+  {
+    // Pass address of saved registers block.
+    __ movq(CallingConventions::kArg1Reg, RSP);
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    bool is_lazy =
+        (kind == kLazyDeoptFromReturn) || (kind == kLazyDeoptFromThrow);
+    __ movq(CallingConventions::kArg2Reg, Immediate(is_lazy ? 1 : 0));
+    rt.Call(kDeoptimizeCopyFrameRuntimeEntry, 2);
+    // Result (RAX) is stack-size (FP - SP) in bytes.
+  }
 
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into RBX temporarily.
@@ -1019,10 +1020,13 @@
     __ pushq(RBX);  // Preserve exception as first local.
     __ pushq(RDX);  // Preserve stacktrace as second local.
   }
-  __ ReserveAlignedFrameSpace(0);
-  // Pass last FP as a parameter.
-  __ movq(CallingConventions::kArg1Reg, RBP);
-  __ CallRuntime(kDeoptimizeFillFrameRuntimeEntry, 1);
+  {
+    __ movq(CallingConventions::kArg1Reg, RBP);  // Pass last FP as a parameter.
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/false);
+    rt.Call(kDeoptimizeFillFrameRuntimeEntry, 1);
+  }
   if (kind == kLazyDeoptFromReturn) {
     // Restore result into RBX.
     __ movq(RBX, Address(RBP, target::frame_layout.first_local_from_fp *
@@ -1375,7 +1379,6 @@
 //   RDX : arguments array.
 //   RCX : current thread.
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
-  NOT_IN_PRODUCT(__ pushq(Address(RSP, 0)));  // Marker for the profiler.
   __ EnterFrame(0);
 
   const Register kTargetReg = CallingConventions::kArg1Reg;
@@ -1518,7 +1521,6 @@
 
   // Restore the frame pointer.
   __ LeaveFrame();
-  NOT_IN_PRODUCT(__ popq(RCX));  // Drop profiler marker.
 
   __ ret();
 }
@@ -1771,7 +1773,6 @@
 COMPILE_ASSERT(kWriteBarrierValueReg == RAX);
 COMPILE_ASSERT(kWriteBarrierSlotReg == R13);
 static void GenerateWriteBarrierStubHelper(Assembler* assembler,
-                                           Address stub_code,
                                            bool cards) {
   Label add_to_mark_stack, remember_card, lost_race;
   __ testq(RAX, Immediate(1 << target::ObjectAlignment::kNewObjectBitPosition));
@@ -1833,14 +1834,13 @@
 
   // Handle overflow: Call the runtime leaf function.
   __ Bind(&overflow);
-  // Setup frame, push callee-saved registers.
-  __ pushq(CODE_REG);
-  __ movq(CODE_REG, stub_code);
-  __ EnterCallRuntimeFrame(0);
-  __ movq(CallingConventions::kArg1Reg, THR);
-  __ CallRuntime(kStoreBufferBlockProcessRuntimeEntry, 1);
-  __ LeaveCallRuntimeFrame();
-  __ popq(CODE_REG);
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/true);
+    __ movq(CallingConventions::kArg1Reg, THR);
+    rt.Call(kStoreBufferBlockProcessRuntimeEntry, 1);
+  }
   __ ret();
 
   __ Bind(&add_to_mark_stack);
@@ -1875,13 +1875,13 @@
   __ ret();
 
   __ Bind(&marking_overflow);
-  __ pushq(CODE_REG);
-  __ movq(CODE_REG, stub_code);
-  __ EnterCallRuntimeFrame(0);
-  __ movq(CallingConventions::kArg1Reg, THR);
-  __ CallRuntime(kMarkingStackBlockProcessRuntimeEntry, 1);
-  __ LeaveCallRuntimeFrame();
-  __ popq(CODE_REG);
+  {
+    LeafRuntimeScope rt(assembler,
+                        /*frame_size=*/0,
+                        /*preserve_registers=*/true);
+    __ movq(CallingConventions::kArg1Reg, THR);
+    rt.Call(kMarkingStackBlockProcessRuntimeEntry, 1);
+  }
   __ ret();
 
   __ Bind(&lost_race);
@@ -1911,28 +1911,24 @@
 
     // Card table not yet allocated.
     __ Bind(&remember_card_slow);
-    __ pushq(CODE_REG);
-    __ movq(CODE_REG, stub_code);
-    __ EnterCallRuntimeFrame(0);
-    __ movq(CallingConventions::kArg1Reg, RDX);
-    __ movq(CallingConventions::kArg2Reg, R13);
-    __ CallRuntime(kRememberCardRuntimeEntry, 2);
-    __ LeaveCallRuntimeFrame();
-    __ popq(CODE_REG);
+    {
+      LeafRuntimeScope rt(assembler,
+                          /*frame_size=*/0,
+                          /*preserve_registers=*/true);
+      __ movq(CallingConventions::kArg1Reg, RDX);
+      __ movq(CallingConventions::kArg2Reg, R13);
+      rt.Call(kRememberCardRuntimeEntry, 2);
+    }
     __ ret();
   }
 }
 
 void StubCodeCompiler::GenerateWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler, Address(THR, target::Thread::write_barrier_code_offset()),
-      false);
+  GenerateWriteBarrierStubHelper(assembler, false);
 }
 
 void StubCodeCompiler::GenerateArrayWriteBarrierStub(Assembler* assembler) {
-  GenerateWriteBarrierStubHelper(
-      assembler,
-      Address(THR, target::Thread::array_write_barrier_code_offset()), true);
+  GenerateWriteBarrierStubHelper(assembler, true);
 }
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index d560e44..18a2bc2 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -30,6 +30,8 @@
 // to compare LR register code.
 #define LR LR_DO_NOT_USE_DIRECTLY
 
+#define R(reg) (static_cast<RegList>(1) << (reg))
+
 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at
 // a time.
 #if defined(__ARM_ARCH_7A__)
@@ -47,7 +49,7 @@
 // The Linux/Android ABI and the iOS ABI differ in their choice of frame
 // pointer, their treatment of R9, and the interprocedural stack alignment.
 
-// EABI (Linux, Android)
+// EABI (Linux, Android, Windows)
 // See "Procedure Call Standard for the ARM Architecture".
 // R0-R1:  Argument / result / volatile
 // R2-R3:  Argument / volatile
@@ -59,9 +61,10 @@
 // R15:    Program counter
 // Stack alignment: 4 bytes always, 8 bytes at public interfaces
 
-// Linux (Debian armhf) and Android also differ in whether floating point
-// arguments are passed in floating point registers. Linux uses hardfp and
-// Android uses softfp. See TargetCPUFeatures::hardfp_supported().
+// Linux (Debian armhf), Windows and Android also differ in whether floating
+// point arguments are passed in floating point registers. Linux and Windows
+// use hardfp and Android uses softfp. See
+// TargetCPUFeatures::hardfp_supported().
 
 // iOS ABI
 // See "iOS ABI Function Call Guide"
@@ -90,7 +93,7 @@
   R8 = 8,
   R9 = 9,
   R10 = 10,  // THR
-  R11 = 11,  // Linux FP
+  R11 = 11,  // Linux/Android/Windows FP
   R12 = 12,  // IP aka TMP
   R13 = 13,  // SP
   R14 = 14,  // LR
@@ -209,6 +212,9 @@
   D31 = 31,
   kNumberOfDRegisters = 32,
 #endif
+  // Number of D registers that overlap S registers.
+  // One D register overlaps two S registers, so regardless of the numbers of D
+  // registers, there are only 32 S registers that are overlapped.
   kNumberOfOverlappingDRegisters = 16,
 };
 
@@ -243,6 +249,10 @@
   Q15 = 15,
   kNumberOfQRegisters = 16,
 #endif
+  // Number of Q registers that overlap S registers.
+  // One Q register overlaps four S registers, so regardless of the numbers of Q
+  // registers, there are only 32 S registers that are overlapped.
+  kNumberOfOverlappingQRegisters = 8,
 };
 
 static inline DRegister EvenDRegisterOf(QRegister q) {
@@ -256,7 +266,7 @@
 static inline SRegister EvenSRegisterOf(DRegister d) {
 #if defined(VFPv3_D32)
   // When we have 32 D registers, the S registers only overlap the first 16.
-  // That is, there are only 32 S registers.
+  // That is, there are only ever 32 S registers in any extension.
   ASSERT(d < D16);
 #endif
   return static_cast<SRegister>(d * 2);
@@ -535,6 +545,7 @@
 // List of registers used in load/store multiple.
 typedef uint16_t RegList;
 const RegList kAllCpuRegistersList = 0xFFFF;
+const RegList kAllFpuRegistersList = (1 << kNumberOfFpuRegisters) - 1;
 
 // C++ ABI call registers.
 const RegList kAbiArgumentCpuRegs =
@@ -571,11 +582,12 @@
 #else
 const int kDartVolatileCpuRegCount = 5;
 #endif
-const QRegister kDartFirstVolatileFpuReg = Q0;
-const QRegister kDartLastVolatileFpuReg = Q3;
-const int kDartVolatileFpuRegCount = 4;
 
-#define R(REG) (1 << REG)
+const RegList kAbiVolatileFpuRegs = R(Q0) | R(Q1) | R(Q2) | R(Q3);
+
+const RegList kFpuRegistersWithoutSOverlap =
+    kAllFpuRegistersList &
+    ~((1 << QRegister::kNumberOfOverlappingQRegisters) - 1);
 
 class CallingConventions {
  public:
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 9b4df71..b09a94a 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -49,7 +49,7 @@
   R15 = 15,  // SP in Dart code.
   R16 = 16,  // IP0 aka TMP
   R17 = 17,  // IP1 aka TMP2
-  R18 = 18,  // reserved on iOS, shadow call stack on Fuchsia.
+  R18 = 18,  // reserved on iOS, shadow call stack on Fuchsia, TEB on Windows.
   R19 = 19,
   R20 = 20,
   R21 = 21,  // DISPATCH_TABLE_REG
@@ -81,7 +81,9 @@
 };
 
 enum VRegister {
+  // v0 Volatile; Parameter/scratch register, result register.
   V0 = 0,
+  // v1-v7 Volatile; Parameter/scratch register.
   V1 = 1,
   V2 = 2,
   V3 = 3,
@@ -89,6 +91,8 @@
   V5 = 5,
   V6 = 6,
   V7 = 7,
+  // v8-v15 Non-volatile; Scratch registers
+  // Only the bottom 64 bits are non-volatile! [ARM IHI 0055B, 5.1.2]
   V8 = 8,
   V9 = 9,
   V10 = 10,
@@ -97,6 +101,7 @@
   V13 = 13,
   V14 = 14,
   V15 = 15,
+  // v16-v31 Volatile; Scratch registers.
   V16 = 16,
   V17 = 17,
   V18 = 18,
@@ -104,7 +109,7 @@
   V20 = 20,
   V21 = 21,
   V22 = 22,
-  V23 = 24,
+  V23 = 23,
   V24 = 24,
   V25 = 25,
   V26 = 26,
@@ -380,11 +385,12 @@
 // List of registers used in load/store multiple.
 typedef uint32_t RegList;
 const RegList kAllCpuRegistersList = 0xFFFFFFFF;
+const RegList kAllFpuRegistersList = 0xFFFFFFFF;
 
 // See "Procedure Call Standard for the ARM 64-bit Architecture", document
 // number "ARM IHI 0055B", May 22 2013.
 
-#define R(REG) (1 << REG)
+#define R(reg) (static_cast<RegList>(1) << (reg))
 
 // C++ ABI call registers.
 const RegList kAbiArgumentCpuRegs =
@@ -429,15 +435,10 @@
 const int kDartVolatileCpuRegCount = 15;
 const int kDartVolatileFpuRegCount = 24;
 
-// Two callee save scratch registers used by leaf runtime call sequence.
-const Register kCallLeafRuntimeCalleeSaveScratch1 = R20;
-const Register kCallLeafRuntimeCalleeSaveScratch2 = R25;
-static_assert((R(kCallLeafRuntimeCalleeSaveScratch1) & kAbiPreservedCpuRegs) !=
-                  0,
-              "Need callee save scratch register for leaf runtime calls.");
-static_assert((R(kCallLeafRuntimeCalleeSaveScratch2) & kAbiPreservedCpuRegs) !=
-                  0,
-              "Need callee save scratch register for leaf runtime calls.");
+const RegList kAbiVolatileFpuRegs =
+    R(V0) | R(V1) | R(V2) | R(V3) | R(V4) | R(V5) | R(V6) | R(V7) | R(V16) |
+    R(V17) | R(V18) | R(V19) | R(V20) | R(V21) | R(V22) | R(V23) | R(V24) |
+    R(V25) | R(V26) | R(V27) | R(V28) | R(V29) | R(V30) | R(V31);
 
 constexpr int kStoreBufferWrapperSize = 32;
 
@@ -719,6 +720,8 @@
   LoadStoreRegPairFixed = LoadStoreFixed | B29,
   STP = LoadStoreRegPairFixed,
   LDP = LoadStoreRegPairFixed | B22,
+  FSTP = STP | B26,
+  FLDP = LDP | B26,
 };
 
 // C3.4.1
@@ -1061,6 +1064,8 @@
   kVmBits = 5,
   kVtShift = 0,
   kVtBits = 5,
+  kVt2Shift = 10,
+  kVt2Bits = 5,
 
   // Immediates.
   kImm3Shift = 10,
@@ -1291,6 +1296,9 @@
   inline VRegister VtField() const {
     return static_cast<VRegister>(Bits(kVtShift, kVtBits));
   }
+  inline VRegister Vt2Field() const {
+    return static_cast<VRegister>(Bits(kVt2Shift, kVt2Bits));
+  }
 
   // Immediates
   inline int Imm3Field() const { return Bits(kImm3Shift, kImm3Bits); }
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 061771d..733dd8c 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -16,6 +16,8 @@
 
 namespace dart {
 
+#define R(reg) (1 << (reg))
+
 enum Register {
   EAX = 0,
   ECX = 1,
@@ -29,6 +31,8 @@
   kNoRegister = -1,  // Signals an illegal register.
 };
 
+// Low and high bytes registers of the the first four general purpose registers.
+// The other four general purpose registers do not have byte registers.
 enum ByteRegister {
   AL = 0,
   CL = 1,
@@ -42,6 +46,10 @@
 };
 
 inline ByteRegister ByteRegisterOf(Register reg) {
+  // This only works for EAX, ECX, EDX, EBX.
+  // Remaining Register values map to high byte of the above registers.
+  RELEASE_ASSERT(reg == Register::EAX || reg == Register::ECX ||
+                 reg == Register::EDX || reg == Register::EBX);
   return static_cast<ByteRegister>(reg);
 }
 
@@ -263,12 +271,23 @@
 
 typedef uint32_t RegList;
 const RegList kAllCpuRegistersList = 0xFF;
+const RegList kAllFpuRegistersList = (1 << kNumberOfFpuRegisters) - 1;
 
 const intptr_t kReservedCpuRegisters = (1 << SPREG) | (1 << FPREG) | (1 << THR);
 // CPU registers available to Dart allocator.
 const RegList kDartAvailableCpuRegs =
     kAllCpuRegistersList & ~kReservedCpuRegisters;
 
+const RegList kAbiPreservedCpuRegs = (1 << EDI) | (1 << ESI) | (1 << EBX);
+
+// Registers available to Dart that are not preserved by runtime calls.
+const RegList kDartVolatileCpuRegs =
+    kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
+
+const RegList kAbiVolatileFpuRegs = kAllFpuRegistersList;
+
+#undef R
+
 enum ScaleFactor {
   TIMES_1 = 0,
   TIMES_2 = 1,
@@ -332,8 +351,7 @@
   static const intptr_t kXmmArgumentRegisters = 0;
   static const intptr_t kNumFpuArgRegs = 0;
 
-  static constexpr intptr_t kCalleeSaveCpuRegisters =
-      (1 << EDI) | (1 << ESI) | (1 << EBX);
+  static constexpr intptr_t kCalleeSaveCpuRegisters = kAbiPreservedCpuRegs;
 
   static const bool kArgumentIntRegXorFpuReg = false;
 
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index 645b69e..f8430df 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -387,8 +387,9 @@
 
 typedef uint32_t RegList;
 const RegList kAllCpuRegistersList = 0xFFFFFFFF;
+const RegList kAllFpuRegistersList = 0xFFFFFFFF;
 
-#define R(REG) (1 << REG)
+#define R(reg) (static_cast<RegList>(1) << (reg))
 
 // C++ ABI call registers.
 
@@ -425,16 +426,6 @@
 constexpr intptr_t kReservedFpuRegisters = 0;
 constexpr intptr_t kNumberOfReservedFpuRegisters = 0;
 
-// Two callee save scratch registers used by leaf runtime call sequence.
-constexpr Register kCallLeafRuntimeCalleeSaveScratch1 = CALLEE_SAVED_TEMP;
-constexpr Register kCallLeafRuntimeCalleeSaveScratch2 = CALLEE_SAVED_TEMP2;
-static_assert((R(kCallLeafRuntimeCalleeSaveScratch1) & kAbiPreservedCpuRegs) !=
-                  0,
-              "Need callee save scratch register for leaf runtime calls.");
-static_assert((R(kCallLeafRuntimeCalleeSaveScratch2) & kAbiPreservedCpuRegs) !=
-                  0,
-              "Need callee save scratch register for leaf runtime calls.");
-
 constexpr int kStoreBufferWrapperSize = 26;
 
 class CallingConventions {
@@ -460,7 +451,7 @@
 
   // How stack arguments are aligned.
   static constexpr AlignmentStrategy kArgumentStackAlignment =
-      kAlignedToValueSize;
+      kAlignedToWordSize;
 
   // How fields in compounds are aligned.
   static constexpr AlignmentStrategy kFieldAlignment = kAlignedToValueSize;
@@ -1419,6 +1410,11 @@
 
 #undef R
 
+inline Register ConcreteRegister(Register r) {
+  return r;
+}
+#define LINK_REGISTER RA
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_CONSTANTS_RISCV_H_
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index a880647..930f588 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -16,6 +16,8 @@
 
 namespace dart {
 
+#define R(reg) (static_cast<RegList>(1) << (reg))
+
 enum Register {
   RAX = 0,
   RCX = 1,
@@ -345,7 +347,7 @@
 const RegList kAllFpuRegistersList = 0xFFFF;
 
 const RegList kReservedCpuRegisters =
-    (1 << SPREG) | (1 << FPREG) | (1 << TMP) | (1 << PP) | (1 << THR);
+    R(SPREG) | R(FPREG) | R(TMP) | R(PP) | R(THR);
 constexpr intptr_t kNumberOfReservedCpuRegisters = 5;
 // CPU registers available to Dart allocator.
 const RegList kDartAvailableCpuRegs =
@@ -354,6 +356,20 @@
     kNumberOfCpuRegisters - kNumberOfReservedCpuRegisters;
 constexpr int kStoreBufferWrapperSize = 13;
 
+#if defined(DART_TARGET_OS_WINDOWS)
+const RegList kAbiPreservedCpuRegs =
+    R(RBX) | R(RSI) | R(RDI) | R(R12) | R(R13) | R(R14) | R(R15);
+const RegList kAbiVolatileFpuRegs =
+    R(XMM0) | R(XMM1) | R(XMM2) | R(XMM3) | R(XMM4) | R(XMM5);
+#else
+const RegList kAbiPreservedCpuRegs = R(RBX) | R(R12) | R(R13) | R(R14) | R(R15);
+const RegList kAbiVolatileFpuRegs = kAllFpuRegistersList;
+#endif
+
+// Registers available to Dart that are not preserved by runtime calls.
+const RegList kDartVolatileCpuRegs =
+    kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
+
 enum ScaleFactor {
   TIMES_1 = 0,
   TIMES_2 = 1,
@@ -383,8 +399,6 @@
   TIMES_COMPRESSED_HALF_WORD_SIZE = TIMES_COMPRESSED_WORD_SIZE - 1,
 };
 
-#define R(reg) (1 << (reg))
-
 class CallingConventions {
  public:
 #if defined(DART_TARGET_OS_WINDOWS)
@@ -422,11 +436,7 @@
   static const intptr_t kVolatileCpuRegisters =
       R(RAX) | R(RCX) | R(RDX) | R(R8) | R(R9) | R(R10) | R(R11);
 
-  static const intptr_t kVolatileXmmRegisters =
-      R(XMM0) | R(XMM1) | R(XMM2) | R(XMM3) | R(XMM4) | R(XMM5);
-
-  static const intptr_t kCalleeSaveCpuRegisters =
-      R(RBX) | R(RSI) | R(RDI) | R(R12) | R(R13) | R(R14) | R(R15);
+  static const RegList kVolatileXmmRegisters = kAbiVolatileFpuRegs;
 
   static const intptr_t kCalleeSaveXmmRegisters =
       R(XMM6) | R(XMM7) | R(XMM8) | R(XMM9) | R(XMM10) | R(XMM11) | R(XMM12) |
@@ -490,13 +500,7 @@
                                                 R(RSI) | R(RDI) | R(R8) |
                                                 R(R9) | R(R10) | R(R11);
 
-  static const intptr_t kVolatileXmmRegisters =
-      R(XMM0) | R(XMM1) | R(XMM2) | R(XMM3) | R(XMM4) | R(XMM5) | R(XMM6) |
-      R(XMM7) | R(XMM8) | R(XMM9) | R(XMM10) | R(XMM11) | R(XMM12) | R(XMM13) |
-      R(XMM14) | R(XMM15);
-
-  static const intptr_t kCalleeSaveCpuRegisters =
-      R(RBX) | R(R12) | R(R13) | R(R14) | R(R15);
+  static const RegList kVolatileXmmRegisters = kAbiVolatileFpuRegs;
 
   static const intptr_t kCalleeSaveXmmRegisters = 0;
 
@@ -530,6 +534,8 @@
 
 #endif
 
+  static const intptr_t kCalleeSaveCpuRegisters = kAbiPreservedCpuRegs;
+
   COMPILE_ASSERT((kArgumentRegisters & kReservedCpuRegisters) == 0);
 
   static constexpr Register kFfiAnyNonAbiRegister = R12;
@@ -544,9 +550,6 @@
        (kArgumentRegisters | R(kPointerToReturnStructRegisterCall))) == 0);
 };
 
-constexpr intptr_t kAbiPreservedCpuRegs =
-    CallingConventions::kCalleeSaveCpuRegisters;
-
 #undef R
 
 class Instr {
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index 284b62d..b18056a 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -16,6 +16,8 @@
 
 #if defined(DART_HOST_OS_IOS)
 #include <libkern/OSCacheControl.h>
+#elif defined(DART_HOST_OS_WINDOWS)
+#include <processthreadsapi.h>
 #endif
 
 #if !defined(TARGET_HOST_MISMATCH)
@@ -88,6 +90,10 @@
   __builtin___clear_cache(beg, end);
 #elif defined(DART_HOST_OS_ANDROID)
   cacheflush(start, start + size, 0);
+#elif defined(DART_HOST_OS_WINDOWS)
+  BOOL result = FlushInstructionCache(
+      GetCurrentProcess(), reinterpret_cast<const void*>(start), size);
+  ASSERT(result != 0);
 #else
 #error FlushICache only tested/supported on Linux, Android and iOS
 #endif
@@ -126,6 +132,16 @@
   initialized_ = true;
 #endif
 }
+#elif DART_HOST_OS_WINDOWS
+void HostCPUFeatures::Init() {
+  hardware_ = "";
+  integer_division_supported_ = true;
+  neon_supported_ = true;
+  hardfp_supported_ = true;
+#if defined(DEBUG)
+  initialized_ = true;
+#endif
+}
 #else  // DART_HOST_OS_IOS
 void HostCPUFeatures::Init() {
   bool is_arm64 = false;
diff --git a/runtime/vm/cpu_arm64.cc b/runtime/vm/cpu_arm64.cc
index 23e9fee..1ae9f0d 100644
--- a/runtime/vm/cpu_arm64.cc
+++ b/runtime/vm/cpu_arm64.cc
@@ -22,6 +22,8 @@
 
 #if defined(DART_HOST_OS_MACOS) || defined(DART_HOST_OS_IOS)
 #include <libkern/OSCacheControl.h>
+#elif defined(DART_HOST_OS_WINDOWS)
+#include <processthreadsapi.h>
 #endif
 
 namespace dart {
@@ -52,6 +54,10 @@
   zx_status_t result = zx_cache_flush(reinterpret_cast<const void*>(start),
                                       size, ZX_CACHE_FLUSH_INSN);
   ASSERT(result == ZX_OK);
+#elif defined(DART_HOST_OS_WINDOWS)
+  BOOL result = FlushInstructionCache(
+      GetCurrentProcess(), reinterpret_cast<const void*>(start), size);
+  ASSERT(result != 0);
 #else
 #error FlushICache not implemented for this OS
 #endif
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index b2fd4b3..9042281 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -370,6 +370,7 @@
     Object::InitNullAndBool(vm_isolate_->group());
     vm_isolate_->isolate_group_->set_object_store(new ObjectStore());
     vm_isolate_->isolate_object_store()->Init();
+    vm_isolate_->finalizers_ = GrowableObjectArray::null();
     Object::Init(vm_isolate_->group());
     OffsetsTable::Init();
     ArgumentsDescriptor::Init();
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 9fbb7d0..400aff2 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1812,7 +1812,16 @@
 
 DART_EXPORT void Dart_NotifyLowMemory() {
   API_TIMELINE_BEGIN_END(Thread::Current());
-  Isolate::NotifyLowMemory();
+  SemiSpace::ClearCache();
+  Zone::ClearCache();
+
+  // For each isolate's global variables, we might also clear:
+  //  - RegExp backtracking stack (both bytecode and compiled versions)
+  //  - String -> RegExp cache
+  //  - BigInt division/remainder cache
+  //  - double.toString cache
+  // But cache invalidation code might be larger than the expected size of some
+  // caches.
 }
 
 DART_EXPORT void Dart_ExitIsolate() {
@@ -1852,7 +1861,7 @@
   NoBackgroundCompilerScope no_bg_compiler(T);
 
 #if defined(DEBUG)
-  T->isolate_group()->heap()->CollectAllGarbage();
+  T->isolate_group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   {
     HeapIterationScope iteration(T);
     CheckFunctionTypesVisitor check_canonical(T);
@@ -6985,7 +6994,7 @@
 }
 
 DART_EXPORT void Dart_DumpNativeStackTrace(void* context) {
-#ifndef PRODUCT
+#if !defined(PRODUCT) || defined(DART_PRECOMPILER)
   Profiler::DumpStackTrace(context);
 #endif
 }
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index bb5eda5..d38bf58 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -129,7 +129,7 @@
 #define API_TIMELINE_BEGIN_END(thread)                                         \
   do {                                                                         \
   } while (false)
-#endif  // !PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 class Api : AllStatic {
  public:
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 46df59f..2081ad0 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -677,18 +677,14 @@
 }
 
 ObjectPtr DartLibraryCalls::LookupHandler(Dart_Port port_id) {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
+  Thread* const thread = Thread::Current();
+  Zone* const zone = thread->zone();
   const auto& function = Function::Handle(
       zone, thread->isolate_group()->object_store()->lookup_port_handler());
-  const int kNumArguments = 1;
   ASSERT(!function.IsNull());
   Array& args = Array::Handle(
       zone, thread->isolate()->isolate_object_store()->dart_args_1());
-  if (args.IsNull()) {
-    args = Array::New(kNumArguments);
-    thread->isolate()->isolate_object_store()->set_dart_args_1(args);
-  }
+  ASSERT(!args.IsNull());
   args.SetAt(0, Integer::Handle(zone, Integer::New(port_id)));
   const Object& result =
       Object::Handle(zone, DartEntry::InvokeFunction(function, args));
@@ -706,24 +702,7 @@
   return result.ptr();
 }
 
-ObjectPtr DartLibraryCalls::HandleMessage(Dart_Port port_id,
-                                          const Instance& message) {
-  auto thread = Thread::Current();
-  auto zone = thread->zone();
-  auto isolate = thread->isolate();
-  auto object_store = thread->isolate_group()->object_store();
-  const auto& function =
-      Function::Handle(zone, object_store->handle_message_function());
-  const int kNumArguments = 2;
-  ASSERT(!function.IsNull());
-  Array& args =
-      Array::Handle(zone, isolate->isolate_object_store()->dart_args_2());
-  if (args.IsNull()) {
-    args = Array::New(kNumArguments);
-    isolate->isolate_object_store()->set_dart_args_2(args);
-  }
-  args.SetAt(0, Integer::Handle(zone, Integer::New(port_id)));
-  args.SetAt(1, message);
+static void DebuggerSetResumeIfStepping(Isolate* isolate) {
 #if !defined(PRODUCT)
   if (isolate->debugger()->IsStepping()) {
     // If the isolate is being debugged and the debugger was stepping
@@ -732,6 +711,52 @@
     isolate->debugger()->SetResumeAction(Debugger::kStepInto);
   }
 #endif
+}
+
+ObjectPtr DartLibraryCalls::HandleMessage(Dart_Port port_id,
+                                          const Instance& message) {
+  auto* const thread = Thread::Current();
+  auto* const zone = thread->zone();
+  auto* const isolate = thread->isolate();
+  auto* const object_store = thread->isolate_group()->object_store();
+  const auto& function =
+      Function::Handle(zone, object_store->handle_message_function());
+  ASSERT(!function.IsNull());
+  Array& args =
+      Array::Handle(zone, isolate->isolate_object_store()->dart_args_2());
+  ASSERT(!args.IsNull());
+  args.SetAt(0, Integer::Handle(zone, Integer::New(port_id)));
+  args.SetAt(1, message);
+  DebuggerSetResumeIfStepping(isolate);
+  const Object& handler =
+      Object::Handle(zone, DartEntry::InvokeFunction(function, args));
+  return handler.ptr();
+}
+
+ObjectPtr DartLibraryCalls::HandleFinalizerMessage(
+    const FinalizerBase& finalizer) {
+  if (FLAG_trace_finalizers) {
+    THR_Print("Running finalizer %p callback on isolate %p\n",
+              finalizer.ptr()->untag(), finalizer.isolate());
+  }
+
+  auto* const thread = Thread::Current();
+  auto* const zone = thread->zone();
+  auto* const isolate = thread->isolate();
+  auto* const object_store = thread->isolate_group()->object_store();
+  auto& function = Function::Handle(zone);
+  if (finalizer.IsFinalizer()) {
+    function ^= object_store->handle_finalizer_message_function();
+  } else {
+    ASSERT(finalizer.IsNativeFinalizer());
+    function ^= object_store->handle_native_finalizer_message_function();
+  }
+  ASSERT(!function.IsNull());
+  Array& args =
+      Array::Handle(zone, isolate->isolate_object_store()->dart_args_1());
+  ASSERT(!args.IsNull());
+  args.SetAt(0, finalizer);
+  DebuggerSetResumeIfStepping(isolate);
   const Object& handler =
       Object::Handle(zone, DartEntry::InvokeFunction(function, args));
   return handler.ptr();
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 4f650a8..c5cc2be 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -36,8 +36,8 @@
   intptr_t TypeArgsLen() const;  // 0 if no type argument vector is passed.
   intptr_t FirstArgIndex() const { return TypeArgsLen() > 0 ? 1 : 0; }
   intptr_t CountWithTypeArgs() const { return FirstArgIndex() + Count(); }
-  intptr_t Count() const;            // Excluding type arguments vector.
-  intptr_t Size() const;             // Excluding type arguments vector.
+  intptr_t Count() const;  // Excluding type arguments vector.
+  intptr_t Size() const;   // Excluding type arguments vector.
   intptr_t SizeWithTypeArgs() const { return FirstArgIndex() + Size(); }
   intptr_t PositionalCount() const;  // Excluding type arguments vector.
   intptr_t NamedCount() const { return Count() - PositionalCount(); }
@@ -292,10 +292,12 @@
   // handler for this port id.
   static ObjectPtr HandleMessage(Dart_Port port_id, const Instance& message);
 
+  // Invokes the finalizer to run its callbacks.
+  static ObjectPtr HandleFinalizerMessage(const FinalizerBase& finalizer);
+
   // Returns a list of open ReceivePorts.
   static ObjectPtr LookupOpenPorts();
 
-
   // Returns null on success, an ErrorPtr on failure.
   static ObjectPtr DrainMicrotaskQueue();
 
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 0a63ce4..76ee165c 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -201,7 +201,7 @@
 
 intptr_t DeoptContext::GetSourceFp() const {
   return source_frame_[source_frame_size_ - 1 - num_args_ -
-                       kParamEndSlotFromFp];
+                       kParamEndSlotFromFp + kSavedCallerFpSlotFromFp];
 }
 
 intptr_t DeoptContext::GetSourcePp() const {
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index 7f87db9..bceb26e 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -1361,7 +1361,17 @@
 }
 
 void Elf::FinalizeEhFrame() {
-#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+#if !defined(TARGET_ARCH_IA32)
+#if defined(TARGET_ARCH_X64)
+  // The x86_64 psABI defines the DWARF register numbers, which differ from
+  // the registers' usual encoding within instructions.
+  const intptr_t DWARF_RA = 16;  // No corresponding register.
+  const intptr_t DWARF_FP = 6;   // RBP
+#else
+  const intptr_t DWARF_RA = ConcreteRegister(LINK_REGISTER);
+  const intptr_t DWARF_FP = FP;
+#endif
+
   // No text section added means no .eh_frame.
   TextSection* text_section = nullptr;
   if (auto* const section = section_table_->Find(kTextName)) {
@@ -1391,18 +1401,17 @@
     dwarf_stream.string("zR");             // NOLINT
     dwarf_stream.uleb128(1);               // Code alignment (must be 1).
     dwarf_stream.sleb128(kDataAlignment);  // Data alignment
-    dwarf_stream.u1(
-        ConcreteRegister(LINK_REGISTER));  // Return address register
+    dwarf_stream.u1(DWARF_RA);             // Return address register
     dwarf_stream.uleb128(1);               // Augmentation size
     dwarf_stream.u1(DW_EH_PE_pcrel | DW_EH_PE_sdata4);  // FDE encoding.
     // CFA is caller's SP (FP+kCallerSpSlotFromFp*kWordSize)
     dwarf_stream.u1(Dwarf::DW_CFA_def_cfa);
-    dwarf_stream.uleb128(FP);
+    dwarf_stream.uleb128(DWARF_FP);
     dwarf_stream.uleb128(kCallerSpSlotFromFp * compiler::target::kWordSize);
   });
 
   // Emit rule defining that |reg| value is stored at CFA+offset.
-  const auto cfa_offset = [&](Register reg, intptr_t offset) {
+  const auto cfa_offset = [&](intptr_t reg, intptr_t offset) {
     const intptr_t scaled_offset = offset / kDataAlignment;
     RELEASE_ASSERT(scaled_offset >= 0);
     dwarf_stream.u1(Dwarf::DW_CFA_offset | reg);
@@ -1424,14 +1433,14 @@
       // Caller FP at FP+kSavedCallerPcSlotFromFp*kWordSize,
       // where FP is CFA - kCallerSpSlotFromFp*kWordSize.
       COMPILE_ASSERT((kSavedCallerFpSlotFromFp - kCallerSpSlotFromFp) <= 0);
-      cfa_offset(FP,
-                 (kSavedCallerFpSlotFromFp - kCallerSpSlotFromFp) * kWordSize);
+      cfa_offset(DWARF_FP, (kSavedCallerFpSlotFromFp - kCallerSpSlotFromFp) *
+                               compiler::target::kWordSize);
 
       // Caller LR at FP+kSavedCallerPcSlotFromFp*kWordSize,
       // where FP is CFA - kCallerSpSlotFromFp*kWordSize
       COMPILE_ASSERT((kSavedCallerPcSlotFromFp - kCallerSpSlotFromFp) <= 0);
-      cfa_offset(ConcreteRegister(LINK_REGISTER),
-                 (kSavedCallerPcSlotFromFp - kCallerSpSlotFromFp) * kWordSize);
+      cfa_offset(DWARF_RA, (kSavedCallerPcSlotFromFp - kCallerSpSlotFromFp) *
+                               compiler::target::kWordSize);
     });
   }
 
@@ -1442,7 +1451,7 @@
   eh_frame->AddPortion(dwarf_stream.buffer(), dwarf_stream.bytes_written(),
                        dwarf_stream.relocations());
   section_table_->Add(eh_frame, ".eh_frame");
-#endif  // defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
+#endif  // !defined(TARGET_ARCH_IA32)
 }
 
 void Elf::FinalizeDwarfSections() {
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 1e77f74..68b49e4 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -202,6 +202,7 @@
     "Generate code for a generic CPU, unknown at compile time")                \
   D(trace_cha, bool, false, "Trace CHA operations")                            \
   R(trace_field_guards, false, bool, false, "Trace changes in field's cids.")  \
+  D(trace_finalizers, bool, false, "Traces finalizers.")                       \
   D(trace_ic, bool, false, "Trace IC handling")                                \
   D(trace_ic_miss_in_optimized, bool, false,                                   \
     "Trace IC miss in optimized code")                                         \
diff --git a/runtime/vm/heap/gc_shared.cc b/runtime/vm/heap/gc_shared.cc
new file mode 100644
index 0000000..a9e7275
--- /dev/null
+++ b/runtime/vm/heap/gc_shared.cc
@@ -0,0 +1,44 @@
+// 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.
+
+// Logic shared between the Scavenger and Marker.
+
+#include "vm/heap/gc_shared.h"
+
+#include "vm/dart_api_state.h"
+#include "vm/heap/scavenger.h"
+#include "vm/log.h"
+#include "vm/message_handler.h"
+#include "vm/object.h"
+
+namespace dart {
+
+void GCLinkedLists::Release() {
+#define FOREACH(type, var) var.Release();
+  GC_LINKED_LIST(FOREACH)
+#undef FOREACH
+}
+
+bool GCLinkedLists::IsEmpty() {
+#define FOREACH(type, var)                                                     \
+  if (!var.IsEmpty()) {                                                        \
+    return false;                                                              \
+  }
+  GC_LINKED_LIST(FOREACH)
+  return true;
+#undef FOREACH
+}
+
+void GCLinkedLists::FlushInto(GCLinkedLists* to) {
+#define FOREACH(type, var) var.FlushInto(&to->var);
+  GC_LINKED_LIST(FOREACH)
+#undef FOREACH
+}
+
+Heap::Space SpaceForExternal(FinalizerEntryPtr raw_entry) {
+  ASSERT(!raw_entry->untag()->value().IsSmi());
+  return raw_entry->untag()->value()->IsOldObject() ? Heap::kOld : Heap::kNew;
+}
+
+}  // namespace dart
diff --git a/runtime/vm/heap/gc_shared.h b/runtime/vm/heap/gc_shared.h
new file mode 100644
index 0000000..1a0d98d7
--- /dev/null
+++ b/runtime/vm/heap/gc_shared.h
@@ -0,0 +1,267 @@
+// 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.
+
+// Logic shared between the Scavenger and Marker.
+
+#ifndef RUNTIME_VM_HEAP_GC_SHARED_H_
+#define RUNTIME_VM_HEAP_GC_SHARED_H_
+
+#include "vm/compiler/runtime_api.h"
+#if defined(SHOULD_NOT_INCLUDE_RUNTIME)
+#error "Should not include runtime"
+#endif
+
+#include "vm/dart_api_state.h"
+#include "vm/heap/scavenger.h"
+#include "vm/log.h"
+#include "vm/message_handler.h"
+#include "vm/object.h"
+
+namespace dart {
+
+// These object types have a linked list chaining all pending objects when
+// processing these in the GC.
+// The field should not be visited by pointer visitors.
+// The field should only be set during a GC.
+//
+// Macro params:
+// - type
+// - variable name
+#define GC_LINKED_LIST(V)                                                      \
+  V(WeakProperty, weak_properties)                                             \
+  V(WeakReference, weak_references)                                            \
+  V(FinalizerEntry, finalizer_entries)
+
+template <typename Type, typename PtrType>
+class GCLinkedList {
+ public:
+  void Enqueue(PtrType ptr) {
+    ASSERT(ptr->untag()->next_seen_by_gc().IsRawNull());
+    ptr->untag()->next_seen_by_gc_ = head_;
+    if (head_ == Type::null()) {
+      tail_ = ptr;
+    }
+    head_ = ptr;
+  }
+
+  void FlushInto(GCLinkedList<Type, PtrType>* to) {
+    if (to->head_ == Type::null()) {
+      ASSERT(to->tail_ == Type::null());
+      to->head_ = head_;
+      to->tail_ = tail_;
+    } else {
+      ASSERT(to->tail_ != Type::null());
+      ASSERT(to->tail_->untag()->next_seen_by_gc() == Type::null());
+      to->tail_->untag()->next_seen_by_gc_ = head_;
+      to->tail_ = tail_;
+    }
+    Release();
+  }
+
+  PtrType Release() {
+    PtrType return_value = head_;
+    head_ = Type::null();
+    tail_ = Type::null();
+    return return_value;
+  }
+
+  bool IsEmpty() { return head_ == Type::null() && tail_ == Type::null(); }
+
+ private:
+  PtrType head_ = Type::null();
+  PtrType tail_ = Type::null();
+};
+
+struct GCLinkedLists {
+  void Release();
+  bool IsEmpty();
+  void FlushInto(GCLinkedLists* to);
+
+#define FOREACH(type, var) GCLinkedList<type, type##Ptr> var;
+  GC_LINKED_LIST(FOREACH)
+#undef FOREACH
+};
+
+#ifdef DEBUG
+#define TRACE_FINALIZER(format, ...)                                           \
+  if (FLAG_trace_finalizers) {                                                 \
+    THR_Print("%s %p " format "\n", GCVisitorType::kName, visitor,             \
+              __VA_ARGS__);                                                    \
+  }
+#else
+#define TRACE_FINALIZER(format, ...)
+#endif
+
+// The space in which `raw_entry`'s `value` is.
+Heap::Space SpaceForExternal(FinalizerEntryPtr raw_entry);
+
+// Runs the finalizer if not detached, detaches the value and set external size
+// to 0.
+// TODO(http://dartbug.com/47777): Can this be merged with
+// NativeFinalizer::RunCallback?
+template <typename GCVisitorType>
+void RunNativeFinalizerCallback(NativeFinalizerPtr raw_finalizer,
+                                FinalizerEntryPtr raw_entry,
+                                Heap::Space before_gc_space,
+                                GCVisitorType* visitor) {
+  PointerPtr callback_pointer = raw_finalizer->untag()->callback();
+  const auto callback = reinterpret_cast<NativeFinalizer::Callback>(
+      callback_pointer->untag()->data());
+  ObjectPtr token_object = raw_entry->untag()->token();
+  const bool is_detached = token_object == raw_entry;
+  const intptr_t external_size = raw_entry->untag()->external_size();
+  if (is_detached) {
+    // Detached from Dart code.
+    ASSERT(token_object == raw_entry);
+    ASSERT(external_size == 0);
+    if (FLAG_trace_finalizers) {
+      TRACE_FINALIZER("Not running native finalizer %p callback %p, detached",
+                      raw_finalizer->untag(), callback);
+    }
+  } else {
+    // TODO(http://dartbug.com/48615): Unbox pointer address in entry.
+    ASSERT(token_object.IsPointer());
+    PointerPtr token = static_cast<PointerPtr>(token_object);
+    void* peer = reinterpret_cast<void*>(token->untag()->data());
+    if (FLAG_trace_finalizers) {
+      TRACE_FINALIZER("Running native finalizer %p callback %p with token %p",
+                      raw_finalizer->untag(), callback, peer);
+    }
+    raw_entry.untag()->set_token(raw_entry);
+    (*callback)(peer);
+    if (external_size > 0) {
+      if (FLAG_trace_finalizers) {
+        TRACE_FINALIZER("Clearing external size %" Pd " bytes in %s space",
+                        external_size, before_gc_space == 0 ? "new" : "old");
+      }
+      visitor->isolate_group()->heap()->FreedExternal(external_size,
+                                                      before_gc_space);
+      raw_entry->untag()->set_external_size(0);
+    }
+  }
+}
+
+// This function processes all finalizer entries discovered by a scavenger or
+// marker. If an entry is referencing an object that is going to die, such entry
+// is cleared and enqueued in the respective finalizer.
+//
+// Finalizer entries belonging to unreachable finalizer entries do not get
+// processed, so the callback will not be called for these finalizers.
+//
+// For more documentation see runtime/docs/gc.md.
+//
+// |GCVisitorType| is a concrete type implementing either marker or scavenger.
+// It is expected to provide |ForwardOrSetNullIfCollected| method for clearing
+// fields referring to dead objects and |kName| field which contains visitor
+// name for tracing output.
+template <typename GCVisitorType>
+void MournFinalized(GCVisitorType* visitor) {
+  FinalizerEntryPtr current_entry =
+      visitor->delayed_.finalizer_entries.Release();
+  while (current_entry != FinalizerEntry::null()) {
+    TRACE_FINALIZER("Processing Entry %p", current_entry->untag());
+    FinalizerEntryPtr next_entry =
+        current_entry->untag()->next_seen_by_gc_.Decompress(
+            current_entry->heap_base());
+    current_entry->untag()->next_seen_by_gc_ = FinalizerEntry::null();
+
+    uword heap_base = current_entry->heap_base();
+    const Heap::Space before_gc_space = SpaceForExternal(current_entry);
+    const bool value_collected_this_gc =
+        GCVisitorType::ForwardOrSetNullIfCollected(
+            heap_base, &current_entry->untag()->value_);
+    if (!value_collected_this_gc && before_gc_space == Heap::kNew) {
+      const Heap::Space after_gc_space = SpaceForExternal(current_entry);
+      if (after_gc_space == Heap::kOld) {
+        const intptr_t external_size = current_entry->untag()->external_size_;
+        TRACE_FINALIZER("Promoting external size %" Pd
+                        " bytes from new to old space",
+                        external_size);
+        visitor->isolate_group()->heap()->PromotedExternal(external_size);
+      }
+    }
+    GCVisitorType::ForwardOrSetNullIfCollected(
+        heap_base, &current_entry->untag()->detach_);
+    GCVisitorType::ForwardOrSetNullIfCollected(
+        heap_base, &current_entry->untag()->finalizer_);
+
+    ObjectPtr token_object = current_entry->untag()->token();
+    // See sdk/lib/_internal/vm/lib/internal_patch.dart FinalizerBase.detach.
+    const bool is_detached = token_object == current_entry;
+
+    if (value_collected_this_gc && !is_detached) {
+      FinalizerBasePtr finalizer = current_entry->untag()->finalizer();
+
+      if (finalizer.IsRawNull()) {
+        TRACE_FINALIZER("Value collected entry %p finalizer null",
+                        current_entry->untag());
+
+        // Do nothing, the finalizer has been GCed.
+      } else {
+        TRACE_FINALIZER("Value collected entry %p finalizer %p",
+                        current_entry->untag(), finalizer->untag());
+
+        FinalizerPtr finalizer_dart = static_cast<FinalizerPtr>(finalizer);
+        // Move entry to entries collected and current head of that list as
+        // the next element. Using a atomic exchange satisfies concurrency
+        // between the parallel GC tasks.
+        // We rely on the fact that the mutator thread is not running to avoid
+        // races between GC and mutator modifying Finalizer.entries_collected.
+        //
+        // We only run in serial marker or in the finalize step in the marker,
+        // both are in safepoint.
+        // The main scavenger worker is at safepoint, the other scavenger
+        // workers are are not, but they bypass safepoint because the main
+        // worker is at a safepoint already.
+        ASSERT(Thread::Current()->IsAtSafepoint() ||
+               Thread::Current()->BypassSafepoints());
+
+        if (finalizer.IsNativeFinalizer()) {
+          NativeFinalizerPtr native_finalizer =
+              static_cast<NativeFinalizerPtr>(finalizer);
+
+          // Immediately call native callback.
+          RunNativeFinalizerCallback(native_finalizer, current_entry,
+                                     before_gc_space, visitor);
+
+          // Fall-through sending a message to clear the entries and remove
+          // from detachments.
+        }
+
+        FinalizerEntryPtr previous_head =
+            finalizer_dart->untag()->exchange_entries_collected(current_entry);
+        current_entry->untag()->set_next(previous_head);
+        const bool first_entry = previous_head.IsRawNull();
+        // Schedule calling Dart finalizer.
+        if (first_entry) {
+          Isolate* isolate = finalizer->untag()->isolate_;
+          if (isolate == nullptr) {
+            TRACE_FINALIZER(
+                "Not scheduling finalizer %p callback on isolate null",
+                finalizer->untag());
+          } else {
+            TRACE_FINALIZER("Scheduling finalizer %p callback on isolate %p",
+                            finalizer->untag(), isolate);
+
+            PersistentHandle* handle =
+                isolate->group()->api_state()->AllocatePersistentHandle();
+            handle->set_ptr(finalizer);
+            MessageHandler* message_handler = isolate->message_handler();
+            message_handler->PostMessage(
+                Message::New(handle, Message::kNormalPriority),
+                /*before_events*/ false);
+          }
+        }
+      }
+    }
+
+    current_entry = next_entry;
+  }
+}
+
+#undef TRACE_FINALIZER
+
+}  // namespace dart
+
+#endif  // RUNTIME_VM_HEAP_GC_SHARED_H_
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index feed760..481bafe 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -109,7 +109,7 @@
     }
     // All GC tasks finished without allocating successfully. Collect both
     // generations.
-    CollectMostGarbage();
+    CollectMostGarbage(GCReason::kOldSpace, /*compact=*/ false);
     addr = old_space_.TryAllocate(size, type);
     if (addr != 0) {
       return addr;
@@ -126,7 +126,7 @@
       return addr;
     }
     // Before throwing an out-of-memory error try a synchronous GC.
-    CollectAllGarbage(GCReason::kLowMemory);
+    CollectAllGarbage(GCReason::kOldSpace, /*compact=*/ true);
     WaitForSweeperTasks(thread);
   }
   uword addr = old_space_.TryAllocate(size, type, PageSpace::kForceGrowth);
@@ -421,17 +421,11 @@
   old_space_.NotifyIdle(deadline);
 
   if (OS::GetCurrentMonotonicMicros() < deadline) {
-    SemiSpace::DrainCache();
+    SemiSpace::ClearCache();
   }
 }
 
-void Heap::NotifyLowMemory() {
-  TIMELINE_FUNCTION_GC_DURATION(Thread::Current(), "NotifyLowMemory");
-  CollectMostGarbage(GCReason::kLowMemory);
-}
-
 void Heap::EvacuateNewSpace(Thread* thread, GCReason reason) {
-  ASSERT(reason != GCReason::kOldSpace);
   ASSERT(reason != GCReason::kPromotion);
   ASSERT(reason != GCReason::kFinalize);
   if (thread->isolate_group() == Dart::vm_isolate_group()) {
@@ -460,7 +454,6 @@
 
 void Heap::CollectNewSpaceGarbage(Thread* thread, GCReason reason) {
   NoActiveIsolateScope no_active_isolate_scope;
-  ASSERT(reason != GCReason::kOldSpace);
   ASSERT(reason != GCReason::kPromotion);
   ASSERT(reason != GCReason::kFinalize);
   if (thread->isolate_group() == Dart::vm_isolate_group()) {
@@ -573,16 +566,14 @@
   }
 }
 
-void Heap::CollectMostGarbage(GCReason reason) {
+void Heap::CollectMostGarbage(GCReason reason, bool compact) {
   Thread* thread = Thread::Current();
   CollectNewSpaceGarbage(thread, reason);
-  CollectOldSpaceGarbage(thread,
-                         reason == GCReason::kLowMemory ? GCType::kMarkCompact
-                                                        : GCType::kMarkSweep,
-                         reason);
+  CollectOldSpaceGarbage(
+      thread, compact ? GCType::kMarkCompact : GCType::kMarkSweep, reason);
 }
 
-void Heap::CollectAllGarbage(GCReason reason) {
+void Heap::CollectAllGarbage(GCReason reason, bool compact) {
   Thread* thread = Thread::Current();
 
   // New space is evacuated so this GC will collect all dead objects
@@ -594,10 +585,8 @@
     // retained by the incremental barrier.
     CollectOldSpaceGarbage(thread, GCType::kMarkSweep, reason);
   }
-  CollectOldSpaceGarbage(thread,
-                         reason == GCReason::kLowMemory ? GCType::kMarkCompact
-                                                        : GCType::kMarkSweep,
-                         reason);
+  CollectOldSpaceGarbage(
+      thread, compact ? GCType::kMarkCompact : GCType::kMarkSweep, reason);
   WaitForSweeperTasks(thread);
 }
 
@@ -898,12 +887,8 @@
       return "external";
     case GCReason::kIdle:
       return "idle";
-    case GCReason::kLowMemory:
-      return "low memory";
     case GCReason::kDebugging:
       return "debugging";
-    case GCReason::kSendAndExit:
-      return "send_and_exit";
     default:
       UNREACHABLE();
       return "";
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 59eae20..179122d 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -106,7 +106,6 @@
   ObjectPtr FindObject(FindObjectVisitor* visitor);
 
   void NotifyIdle(int64_t deadline);
-  void NotifyLowMemory();
 
   // Collect a single generation.
   void CollectGarbage(Space space);
@@ -117,13 +116,15 @@
   // mark-sweep treats new space as roots, a cycle between unreachable old and
   // new objects will not be collected until the new objects are promoted.
   // Verification based on heap iteration should instead use CollectAllGarbage.
-  void CollectMostGarbage(GCReason reason = GCReason::kFull);
+  void CollectMostGarbage(GCReason reason = GCReason::kFull,
+                          bool compact = false);
 
   // Collect both generations by performing an evacuation followed by a
   // mark-sweep. If incremental marking was in progress, perform another
   // mark-sweep. This function will collect all unreachable objects, including
   // those in inter-generational cycles or stored during incremental marking.
-  void CollectAllGarbage(GCReason reason = GCReason::kFull);
+  void CollectAllGarbage(GCReason reason = GCReason::kFull,
+                         bool compact = false);
 
   void CheckStartConcurrentMarking(Thread* thread, GCReason reason);
   void StartConcurrentMarking(Thread* thread, GCReason reason);
@@ -395,7 +396,6 @@
   friend class Become;       // VisitObjectPointers
   friend class GCCompactor;  // VisitObjectPointers
   friend class Precompiler;  // VisitObjects
-  friend class Unmarker;     // VisitObjects
   friend class ServiceEvent;
   friend class Scavenger;             // VerifyGC
   friend class PageSpace;             // VerifyGC
@@ -405,7 +405,7 @@
   friend class ProgramVisitor;        // VisitObjectsImagePages
   friend class Serializer;            // VisitObjectsImagePages
   friend class HeapTestHelper;
-  friend class MetricsTestHelper;
+  friend class GCTestHelper;
 
   DISALLOW_COPY_AND_ASSIGN(Heap);
 };
@@ -471,7 +471,7 @@
   static void CollectNewSpace() {
     Thread* thread = Thread::Current();
     ASSERT(thread->execution_state() == Thread::kThreadInVM);
-    thread->heap()->new_space()->Scavenge(GCReason::kDebugging);
+    thread->heap()->CollectNewSpaceGarbage(thread, GCReason::kDebugging);
   }
 
   // Fully collect old gen and wait for the sweeper to finish. The normal call
@@ -488,10 +488,10 @@
     WaitForGCTasks();
   }
 
-  static void CollectAllGarbage() {
+  static void CollectAllGarbage(bool compact = false) {
     Thread* thread = Thread::Current();
     ASSERT(thread->execution_state() == Thread::kThreadInVM);
-    thread->heap()->CollectAllGarbage(GCReason::kDebugging);
+    thread->heap()->CollectAllGarbage(GCReason::kDebugging, compact);
   }
 
   static void WaitForGCTasks() {
diff --git a/runtime/vm/heap/heap_sources.gni b/runtime/vm/heap/heap_sources.gni
index de6d25e..a8e8d99 100644
--- a/runtime/vm/heap/heap_sources.gni
+++ b/runtime/vm/heap/heap_sources.gni
@@ -11,6 +11,8 @@
   "compactor.h",
   "freelist.cc",
   "freelist.h",
+  "gc_shared.cc",
+  "gc_shared.h",
   "heap.cc",
   "heap.h",
   "marker.cc",
diff --git a/runtime/vm/heap/marker.cc b/runtime/vm/heap/marker.cc
index 3309815..2b77843 100644
--- a/runtime/vm/heap/marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -4,9 +4,11 @@
 
 #include "vm/heap/marker.h"
 
+#include "platform/assert.h"
 #include "platform/atomic.h"
 #include "vm/allocation.h"
 #include "vm/dart_api_state.h"
+#include "vm/heap/gc_shared.h"
 #include "vm/heap/pages.h"
 #include "vm/heap/pointer_block.h"
 #include "vm/isolate.h"
@@ -14,6 +16,7 @@
 #include "vm/object_id_ring.h"
 #include "vm/raw_object.h"
 #include "vm/stack_frame.h"
+#include "vm/tagged_pointer.h"
 #include "vm/thread_barrier.h"
 #include "vm/thread_pool.h"
 #include "vm/thread_registry.h"
@@ -34,34 +37,35 @@
         page_space_(page_space),
         work_list_(marking_stack),
         deferred_work_list_(deferred_marking_stack),
-        delayed_weak_properties_(WeakProperty::null()),
-        delayed_weak_properties_tail_(WeakProperty::null()),
-        delayed_weak_references_(WeakReference::null()),
-        delayed_weak_references_tail_(WeakReference::null()),
         marked_bytes_(0),
         marked_micros_(0) {
     ASSERT(thread_->isolate_group() == isolate_group);
   }
-  ~MarkingVisitorBase() {
-    ASSERT(delayed_weak_properties_ == WeakProperty::null());
-    ASSERT(delayed_weak_references_ == WeakReference::null());
-  }
+  ~MarkingVisitorBase() { ASSERT(delayed_.IsEmpty()); }
 
   uintptr_t marked_bytes() const { return marked_bytes_; }
   int64_t marked_micros() const { return marked_micros_; }
   void AddMicros(int64_t micros) { marked_micros_ += micros; }
 
+#ifdef DEBUG
+  constexpr static const char* const kName = "Marker";
+#endif
+
+  static bool IsMarked(ObjectPtr raw) {
+    ASSERT(raw->IsHeapObject());
+    ASSERT(raw->IsOldObject());
+    return raw->untag()->IsMarked();
+  }
+
   bool ProcessPendingWeakProperties() {
     bool more_to_mark = false;
-    WeakPropertyPtr cur_weak = delayed_weak_properties_;
-    delayed_weak_properties_tail_ = delayed_weak_properties_ =
-        WeakProperty::null();
+    WeakPropertyPtr cur_weak = delayed_.weak_properties.Release();
     while (cur_weak != WeakProperty::null()) {
       WeakPropertyPtr next_weak =
-          cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+          cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
       ObjectPtr raw_key = cur_weak->untag()->key();
       // Reset the next pointer in the weak property.
-      cur_weak->untag()->next_ = WeakProperty::null();
+      cur_weak->untag()->next_seen_by_gc_ = WeakProperty::null();
       if (raw_key->IsSmiOrNewObject() || raw_key->untag()->IsMarked()) {
         ObjectPtr raw_val = cur_weak->untag()->value();
         if (!raw_val->IsSmiOrNewObject() && !raw_val->untag()->IsMarked()) {
@@ -73,7 +77,8 @@
         cur_weak->untag()->VisitPointersNonvirtual(this);
       } else {
         // Requeue this weak property to be handled later.
-        EnqueueWeakProperty(cur_weak);
+        ASSERT(IsMarked(cur_weak));
+        delayed_.weak_properties.Enqueue(cur_weak);
       }
       // Advance to next weak property in the queue.
       cur_weak = next_weak;
@@ -125,6 +130,9 @@
         } else if (class_id == kWeakReferenceCid) {
           WeakReferencePtr raw_weak = static_cast<WeakReferencePtr>(raw_obj);
           size = ProcessWeakReference(raw_weak);
+        } else if (class_id == kFinalizerEntryCid) {
+          FinalizerEntryPtr raw_weak = static_cast<FinalizerEntryPtr>(raw_obj);
+          size = ProcessFinalizerEntry(raw_weak);
         } else {
           size = raw_obj->untag()->VisitPointersNonvirtual(this);
         }
@@ -182,34 +190,6 @@
     }
   }
 
-  void EnqueueWeakProperty(WeakPropertyPtr raw_weak) {
-    ASSERT(raw_weak->IsHeapObject());
-    ASSERT(raw_weak->IsOldObject());
-    ASSERT(raw_weak->IsWeakProperty());
-    ASSERT(raw_weak->untag()->IsMarked());
-    ASSERT(raw_weak->untag()->next_ ==
-           CompressedWeakPropertyPtr(WeakProperty::null()));
-    raw_weak->untag()->next_ = delayed_weak_properties_;
-    if (delayed_weak_properties_ == WeakProperty::null()) {
-      delayed_weak_properties_tail_ = raw_weak;
-    }
-    delayed_weak_properties_ = raw_weak;
-  }
-
-  void EnqueueWeakReference(WeakReferencePtr raw_weak) {
-    ASSERT(raw_weak->IsHeapObject());
-    ASSERT(raw_weak->IsOldObject());
-    ASSERT(raw_weak->IsWeakReference());
-    ASSERT(raw_weak->untag()->IsMarked());
-    ASSERT(raw_weak->untag()->next_ ==
-           CompressedWeakReferencePtr(WeakReference::null()));
-    raw_weak->untag()->next_ = delayed_weak_references_;
-    if (delayed_weak_references_ == WeakReference::null()) {
-      delayed_weak_references_tail_ = raw_weak;
-    }
-    delayed_weak_references_ = raw_weak;
-  }
-
   intptr_t ProcessWeakProperty(WeakPropertyPtr raw_weak) {
     // The fate of the weak property is determined by its key.
     ObjectPtr raw_key =
@@ -218,7 +198,8 @@
     if (raw_key->IsHeapObject() && raw_key->IsOldObject() &&
         !raw_key->untag()->IsMarked()) {
       // Key was white. Enqueue the weak property.
-      EnqueueWeakProperty(raw_weak);
+      ASSERT(IsMarked(raw_weak));
+      delayed_.weak_properties.Enqueue(raw_weak);
       return raw_weak->untag()->HeapSize();
     }
     // Key is gray or black. Make the weak property black.
@@ -235,7 +216,8 @@
         !raw_target->untag()->IsMarked()) {
       // Target was white. Enqueue the weak reference. It is potentially dead.
       // It might still be made alive by weak properties in next rounds.
-      EnqueueWeakReference(raw_weak);
+      ASSERT(IsMarked(raw_weak));
+      delayed_.weak_references.Enqueue(raw_weak);
     }
     // Always visit the type argument.
     ObjectPtr raw_type_arguments =
@@ -245,6 +227,17 @@
     return raw_weak->untag()->HeapSize();
   }
 
+  intptr_t ProcessFinalizerEntry(FinalizerEntryPtr raw_entry) {
+    ASSERT(IsMarked(raw_entry));
+    delayed_.finalizer_entries.Enqueue(raw_entry);
+    // Only visit token and next.
+    MarkObject(LoadCompressedPointerIgnoreRace(&raw_entry->untag()->token_)
+                   .Decompress(raw_entry->heap_base()));
+    MarkObject(LoadCompressedPointerIgnoreRace(&raw_entry->untag()->next_)
+                   .Decompress(raw_entry->heap_base()));
+    return raw_entry->untag()->HeapSize();
+  }
+
   void ProcessDeferredMarking() {
     ObjectPtr raw_obj;
     while ((raw_obj = deferred_work_list_.Pop()) != nullptr) {
@@ -279,15 +272,15 @@
   void FinalizeMarking() {
     work_list_.Finalize();
     deferred_work_list_.Finalize();
+    MournFinalized(this);
   }
 
   void MournWeakProperties() {
-    WeakPropertyPtr cur_weak = delayed_weak_properties_;
-    delayed_weak_properties_ = WeakProperty::null();
+    WeakPropertyPtr cur_weak = delayed_.weak_properties.Release();
     while (cur_weak != WeakProperty::null()) {
       WeakPropertyPtr next_weak =
-          cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
-      cur_weak->untag()->next_ = WeakProperty::null();
+          cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
+      cur_weak->untag()->next_seen_by_gc_ = WeakProperty::null();
       RELEASE_ASSERT(!cur_weak->untag()->key()->untag()->IsMarked());
       WeakProperty::Clear(cur_weak);
       cur_weak = next_weak;
@@ -295,72 +288,59 @@
   }
 
   void MournWeakReferences() {
-    WeakReferencePtr cur_weak = delayed_weak_references_;
-    delayed_weak_references_ = WeakReference::null();
+    WeakReferencePtr cur_weak = delayed_.weak_references.Release();
     while (cur_weak != WeakReference::null()) {
       WeakReferencePtr next_weak =
-          cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
-      cur_weak->untag()->next_ = WeakReference::null();
+          cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
+      cur_weak->untag()->next_seen_by_gc_ = WeakReference::null();
+
       // If we did not mark the target through a weak property in a later round,
       // then the target is dead and we should clear it.
-      if (!cur_weak->untag()->target()->untag()->IsMarked()) {
-        WeakReference::Clear(cur_weak);
-      }
+      ForwardOrSetNullIfCollected(cur_weak->heap_base(),
+                                  &cur_weak->untag()->target_);
+
       cur_weak = next_weak;
     }
   }
 
+  // Returns whether the object referred to in `ptr_address` was GCed this GC.
+  static bool ForwardOrSetNullIfCollected(uword heap_base,
+                                          CompressedObjectPtr* ptr_address) {
+    ObjectPtr raw = ptr_address->Decompress(heap_base);
+    if (raw.IsRawNull()) {
+      // Object already null before this GC.
+      return false;
+    }
+    if (raw.IsNewObject()) {
+      // Object not touched during this GC.
+      return false;
+    }
+    if (raw->untag()->IsMarked()) {
+      return false;
+    }
+    *ptr_address = Object::null();
+    return true;
+  }
+
   bool WaitForWork(RelaxedAtomic<uintptr_t>* num_busy) {
     return work_list_.WaitForWork(num_busy);
   }
 
-  void Flush(WeakPropertyPtr* weak_properties_head,
-             WeakPropertyPtr* weak_properties_tail,
-             WeakReferencePtr* weak_references_head,
-             WeakReferencePtr* weak_references_tail) {
+  void Flush(GCLinkedLists* global_list) {
     work_list_.Flush();
     deferred_work_list_.Flush();
-
-    if (*weak_properties_head == WeakProperty::null()) {
-      *weak_properties_head = delayed_weak_properties_;
-      *weak_properties_tail = delayed_weak_properties_tail_;
-    } else {
-      (*weak_properties_tail)->untag()->next_ = delayed_weak_properties_;
-      *weak_properties_tail = delayed_weak_properties_tail_;
-    }
-    delayed_weak_properties_tail_ = delayed_weak_properties_ =
-        WeakProperty::null();
-
-    if (*weak_references_head == WeakReference::null()) {
-      *weak_references_head = delayed_weak_references_;
-      *weak_references_tail = delayed_weak_references_tail_;
-    } else {
-      (*weak_references_tail)->untag()->next_ = delayed_weak_references_;
-      *weak_references_tail = delayed_weak_references_tail_;
-    }
-    delayed_weak_references_tail_ = delayed_weak_references_ =
-        WeakReference::null();
+    delayed_.FlushInto(global_list);
   }
 
-  void Adopt(WeakPropertyPtr weak_properties_head,
-             WeakPropertyPtr weak_properties_tail,
-             WeakReferencePtr weak_references_head,
-             WeakReferencePtr weak_references_tail) {
-    ASSERT(delayed_weak_properties_ == WeakProperty::null());
-    ASSERT(delayed_weak_properties_tail_ == WeakProperty::null());
-    ASSERT(delayed_weak_references_ == WeakReference::null());
-    ASSERT(delayed_weak_references_tail_ == WeakReference::null());
-    delayed_weak_properties_ = weak_properties_head;
-    delayed_weak_properties_tail_ = weak_properties_tail;
-    delayed_weak_references_ = weak_references_head;
-    delayed_weak_references_tail_ = weak_references_tail;
+  void Adopt(GCLinkedLists* other) {
+    ASSERT(delayed_.IsEmpty());
+    other->FlushInto(&delayed_);
   }
 
   void AbandonWork() {
     work_list_.AbandonWork();
     deferred_work_list_.AbandonWork();
-    delayed_weak_properties_ = WeakProperty::null();
-    delayed_weak_references_ = WeakReference::null();
+    delayed_.Release();
   }
 
  private:
@@ -430,13 +410,13 @@
   PageSpace* page_space_;
   MarkerWorkList work_list_;
   MarkerWorkList deferred_work_list_;
-  WeakPropertyPtr delayed_weak_properties_;
-  WeakPropertyPtr delayed_weak_properties_tail_;
-  WeakReferencePtr delayed_weak_references_;
-  WeakReferencePtr delayed_weak_references_tail_;
+  GCLinkedLists delayed_;
   uintptr_t marked_bytes_;
   int64_t marked_micros_;
 
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
+
   DISALLOW_IMPLICIT_CONSTRUCTORS(MarkingVisitorBase);
 };
 
@@ -746,6 +726,9 @@
       // Phase 3: Weak processing and statistics.
       visitor_->MournWeakProperties();
       visitor_->MournWeakReferences();
+      // Don't MournFinalized here, do it on main thread, so that we don't have
+      // to coordinate workers.
+
       marker_->IterateWeakRoots(thread);
       int64_t stop = OS::GetCurrentMonotonicMicros();
       visitor_->AddMicros(stop - start);
@@ -984,6 +967,7 @@
       visitor.FinalizeMarking();
       visitor.MournWeakProperties();
       visitor.MournWeakReferences();
+      MournFinalized(&visitor);
       IterateWeakRoots(thread);
       // All marking done; detach code, etc.
       int64_t stop = OS::GetCurrentMonotonicMicros();
@@ -998,10 +982,7 @@
       RelaxedAtomic<uintptr_t> num_busy = 0;
       // Phase 1: Iterate over roots and drain marking stack in tasks.
 
-      WeakPropertyPtr weak_properties_head = WeakProperty::null();
-      WeakPropertyPtr weak_properties_tail = WeakProperty::null();
-      WeakReferencePtr weak_references_head = WeakReference::null();
-      WeakReferencePtr weak_references_tail = WeakReference::null();
+      GCLinkedLists global_list;
 
       for (intptr_t i = 0; i < num_tasks; ++i) {
         SyncMarkingVisitor* visitor = visitors_[i];
@@ -1013,12 +994,12 @@
                                      &marking_stack_, &deferred_marking_stack_);
           visitors_[i] = visitor;
         }
+
         // Move all work from local blocks to the global list. Any given
         // visitor might not get to run if it fails to reach TryEnter soon
         // enough, and we must fail to visit objects but they're sitting in
         // such a visitor's local blocks.
-        visitor->Flush(&weak_properties_head, &weak_properties_tail,
-                       &weak_references_head, &weak_references_tail);
+        visitor->Flush(&global_list);
         // Need to move weak property list too.
 
         if (i < (num_tasks - 1)) {
@@ -1029,8 +1010,7 @@
           ASSERT(result);
         } else {
           // Last worker is the main thread.
-          visitor->Adopt(weak_properties_head, weak_properties_tail,
-                         weak_references_head, weak_references_tail);
+          visitor->Adopt(&global_list);
           ParallelMarkTask task(this, isolate_group_, &marking_stack_, barrier,
                                 visitor, &num_busy);
           task.RunEnteredIsolateGroup();
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index bed2610..e11759a 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -4,11 +4,16 @@
 
 #include "vm/heap/scavenger.h"
 
+#include "platform/assert.h"
 #include "platform/leak_sanitizer.h"
+#include "vm/class_id.h"
+#include "vm/compiler/runtime_api.h"
 #include "vm/dart.h"
 #include "vm/dart_api_state.h"
 #include "vm/flag_list.h"
+#include "vm/flags.h"
 #include "vm/heap/become.h"
+#include "vm/heap/gc_shared.h"
 #include "vm/heap/pages.h"
 #include "vm/heap/pointer_block.h"
 #include "vm/heap/safepoint.h"
@@ -16,11 +21,14 @@
 #include "vm/heap/weak_table.h"
 #include "vm/isolate.h"
 #include "vm/lockers.h"
+#include "vm/log.h"
 #include "vm/longjump.h"
 #include "vm/object.h"
 #include "vm/object_id_ring.h"
 #include "vm/object_set.h"
+#include "vm/port.h"
 #include "vm/stack_frame.h"
+#include "vm/tagged_pointer.h"
 #include "vm/thread_barrier.h"
 #include "vm/thread_registry.h"
 #include "vm/timeline.h"
@@ -131,13 +139,12 @@
         freelist_(freelist),
         bytes_promoted_(0),
         visiting_old_object_(nullptr),
-        promoted_list_(promotion_stack),
-        delayed_weak_properties_(WeakProperty::null()),
-        delayed_weak_references_(WeakReference::null()) {}
-  ~ScavengerVisitorBase() {
-    ASSERT(delayed_weak_properties_ == WeakProperty::null());
-    ASSERT(delayed_weak_references_ == WeakReference::null());
-  }
+        promoted_list_(promotion_stack) {}
+  ~ScavengerVisitorBase() { ASSERT(delayed_.IsEmpty()); }
+
+#ifdef DEBUG
+  constexpr static const char* const kName = "Scavenger";
+#endif
 
   virtual void VisitTypedDataViewPointers(TypedDataViewPtr view,
                                           CompressedObjectPtr* first,
@@ -299,6 +306,7 @@
 
       MournWeakProperties();
       MournOrUpdateWeakReferences();
+      MournFinalized(this);
     }
     page_space_->ReleaseLock(freelist_);
     thread_ = nullptr;
@@ -308,13 +316,15 @@
 
   void AbandonWork() {
     promoted_list_.AbandonWork();
-    delayed_weak_properties_ = WeakProperty::null();
-    delayed_weak_references_ = WeakReference::null();
+    delayed_.Release();
   }
 
   NewPage* head() const { return head_; }
   NewPage* tail() const { return tail_; }
 
+  static bool ForwardOrSetNullIfCollected(uword heap_base,
+                                          CompressedObjectPtr* ptr_address);
+
  private:
   void UpdateStoreBuffer(ObjectPtr obj) {
     ASSERT(obj->IsHeapObject());
@@ -511,8 +521,13 @@
   inline void ProcessToSpace();
   DART_FORCE_INLINE intptr_t ProcessCopied(ObjectPtr raw_obj);
   inline void ProcessPromotedList();
-  inline void EnqueueWeakProperty(WeakPropertyPtr raw_weak);
-  inline void EnqueueWeakReference(WeakReferencePtr raw_weak);
+
+  bool IsNotForwarding(ObjectPtr raw) {
+    ASSERT(raw->IsHeapObject());
+    ASSERT(raw->IsNewObject());
+    return !IsForwarding(ReadHeaderRelaxed(raw));
+  }
+
   inline void MournWeakProperties();
   inline void MournOrUpdateWeakReferences();
 
@@ -523,15 +538,16 @@
   FreeList* freelist_;
   intptr_t bytes_promoted_;
   ObjectPtr visiting_old_object_;
-
   PromotionWorkList promoted_list_;
-  WeakPropertyPtr delayed_weak_properties_;
-  WeakReferencePtr delayed_weak_references_;
+  GCLinkedLists delayed_;
 
   NewPage* head_ = nullptr;
   NewPage* tail_ = nullptr;  // Allocating from here.
   NewPage* scan_ = nullptr;  // Resolving from here.
 
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
+
   DISALLOW_COPY_AND_ASSIGN(ScavengerVisitorBase);
 };
 
@@ -678,7 +694,7 @@
   page_cache_mutex = new Mutex(NOT_IN_PRODUCT("page_cache_mutex"));
 }
 
-void SemiSpace::DrainCache() {
+void SemiSpace::ClearCache() {
   MutexLocker ml(page_cache_mutex);
   ASSERT(page_cache_size >= 0);
   ASSERT(page_cache_size <= kPageCacheCapacity);
@@ -688,7 +704,7 @@
 }
 
 void SemiSpace::Cleanup() {
-  DrainCache();
+  ClearCache();
   delete page_cache_mutex;
   page_cache_mutex = nullptr;
 }
@@ -1185,9 +1201,44 @@
       ASSERT(raw_object->untag()->IsRemembered());
       raw_object->untag()->ClearRememberedBit();
       visitor->VisitingOldObject(raw_object);
-      // Note that this treats old-space WeakProperties as strong. A dead key
-      // won't be reclaimed until after the key is promoted.
-      raw_object->untag()->VisitPointersNonvirtual(visitor);
+      intptr_t class_id = raw_object->GetClassId();
+      // This treats old-space weak references in WeakProperty, WeakReference,
+      // and FinalizerEntry as strong references. This prevents us from having
+      // to enqueue them in `visitor->delayed_`. Enqueuing them in the delayed
+      // would require having two `next_seen_by_gc` fields. One for used during
+      // marking and one for the objects seen in the store buffers + new space.
+      // Treating the weak references as strong here means we can have a single
+      // `next_seen_by_gc` field.
+      if (UNLIKELY(class_id == kFinalizerEntryCid)) {
+        FinalizerEntryPtr raw_entry =
+            static_cast<FinalizerEntryPtr>(raw_object);
+        // Detect `FinalizerEntry::value` promotion to update external space.
+        //
+        // This treats old-space FinalizerEntry fields as strong. Values, deatch
+        // keys, and finalizers in new space won't be reclaimed until after they
+        // are promoted.
+        // This will only visit the strong references, end enqueue the entry.
+        // This enables us to update external space in MournFinalized.
+        const Heap::Space before_gc_space = SpaceForExternal(raw_entry);
+        UntaggedFinalizerEntry::VisitFinalizerEntryPointers(raw_entry, visitor);
+        if (before_gc_space == Heap::kNew) {
+          const Heap::Space after_gc_space = SpaceForExternal(raw_entry);
+          if (after_gc_space == Heap::kOld) {
+            const intptr_t external_size = raw_entry->untag()->external_size_;
+            if (FLAG_trace_finalizers) {
+              THR_Print(
+                  "Scavenger %p Store buffer, promoting external size %" Pd
+                  " bytes from new to old space\n",
+                  visitor, external_size);
+            }
+            visitor->isolate_group()->heap()->PromotedExternal(external_size);
+          }
+        }
+      } else {
+        // This treats old-space WeakProperties and WeakReferences as strong. A
+        // dead key or target won't be reclaimed until after it is promoted.
+        raw_object->untag()->VisitPointersNonvirtual(visitor);
+      }
     }
     pending->Reset();
     // Return the emptied block for recycling (no need to check threshold).
@@ -1323,11 +1374,10 @@
   // Finished this round of scavenging. Process the pending weak properties
   // for which the keys have become reachable. Potentially this adds more
   // objects to the to space.
-  WeakPropertyPtr cur_weak = delayed_weak_properties_;
-  delayed_weak_properties_ = WeakProperty::null();
+  WeakPropertyPtr cur_weak = delayed_.weak_properties.Release();
   while (cur_weak != WeakProperty::null()) {
     WeakPropertyPtr next_weak =
-        cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+        cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
     // Promoted weak properties are not enqueued. So we can guarantee that
     // we do not need to think about store barriers here.
     ASSERT(cur_weak->IsNewObject());
@@ -1341,11 +1391,12 @@
     ASSERT(from_->Contains(raw_addr));
     uword header = ReadHeaderRelaxed(raw_key);
     // Reset the next pointer in the weak property.
-    cur_weak->untag()->next_ = WeakProperty::null();
+    cur_weak->untag()->next_seen_by_gc_ = WeakProperty::null();
     if (IsForwarding(header)) {
       cur_weak->untag()->VisitPointersNonvirtual(this);
     } else {
-      EnqueueWeakProperty(cur_weak);
+      ASSERT(IsNotForwarding(cur_weak));
+      delayed_.weak_properties.Enqueue(cur_weak);
     }
     // Advance to next weak property in the queue.
     cur_weak = next_weak;
@@ -1378,38 +1429,6 @@
 }
 
 template <bool parallel>
-void ScavengerVisitorBase<parallel>::EnqueueWeakProperty(
-    WeakPropertyPtr raw_weak) {
-  ASSERT(raw_weak->IsHeapObject());
-  ASSERT(raw_weak->IsNewObject());
-  ASSERT(raw_weak->IsWeakProperty());
-#if defined(DEBUG)
-  uword header = ReadHeaderRelaxed(raw_weak);
-  ASSERT(!IsForwarding(header));
-#endif  // defined(DEBUG)
-  ASSERT(raw_weak->untag()->next_ ==
-         CompressedWeakPropertyPtr(WeakProperty::null()));
-  raw_weak->untag()->next_ = delayed_weak_properties_;
-  delayed_weak_properties_ = raw_weak;
-}
-
-template <bool parallel>
-void ScavengerVisitorBase<parallel>::EnqueueWeakReference(
-    WeakReferencePtr raw_weak) {
-  ASSERT(raw_weak->IsHeapObject());
-  ASSERT(raw_weak->IsNewObject());
-  ASSERT(raw_weak->IsWeakReference());
-#if defined(DEBUG)
-  uword header = ReadHeaderRelaxed(raw_weak);
-  ASSERT(!IsForwarding(header));
-#endif  // defined(DEBUG)
-  ASSERT(raw_weak->untag()->next_ ==
-         CompressedWeakReferencePtr(WeakReference::null()));
-  raw_weak->untag()->next_ = delayed_weak_references_;
-  delayed_weak_references_ = raw_weak;
-}
-
-template <bool parallel>
 intptr_t ScavengerVisitorBase<parallel>::ProcessCopied(ObjectPtr raw_obj) {
   intptr_t class_id = raw_obj->GetClassId();
   if (UNLIKELY(class_id == kWeakPropertyCid)) {
@@ -1420,7 +1439,8 @@
       uword header = ReadHeaderRelaxed(raw_key);
       if (!IsForwarding(header)) {
         // Key is white.  Enqueue the weak property.
-        EnqueueWeakProperty(raw_weak);
+        ASSERT(IsNotForwarding(raw_weak));
+        delayed_.weak_properties.Enqueue(raw_weak);
         return raw_weak->untag()->HeapSize();
       }
     }
@@ -1434,7 +1454,8 @@
       if (!IsForwarding(header)) {
         // Target is white. Enqueue the weak reference. Always visit type
         // arguments.
-        EnqueueWeakReference(raw_weak);
+        ASSERT(IsNotForwarding(raw_weak));
+        delayed_.weak_references.Enqueue(raw_weak);
 #if !defined(DART_COMPRESSED_POINTERS)
         ScavengePointer(&raw_weak->untag()->type_arguments_);
 #else
@@ -1444,6 +1465,21 @@
         return raw_weak->untag()->HeapSize();
       }
     }
+  } else if (UNLIKELY(class_id == kFinalizerEntryCid)) {
+    FinalizerEntryPtr raw_entry = static_cast<FinalizerEntryPtr>(raw_obj);
+    ASSERT(IsNotForwarding(raw_entry));
+    delayed_.finalizer_entries.Enqueue(raw_entry);
+    // Only visit token and next.
+#if !defined(DART_COMPRESSED_POINTERS)
+    ScavengePointer(&raw_entry->untag()->token_);
+    ScavengePointer(&raw_entry->untag()->next_);
+#else
+    ScavengeCompressedPointer(raw_entry->heap_base(),
+                              &raw_entry->untag()->token_);
+    ScavengeCompressedPointer(raw_entry->heap_base(),
+                              &raw_entry->untag()->next_);
+#endif
+    return raw_entry->untag()->HeapSize();
   }
   return raw_obj->untag()->VisitPointersNonvirtual(this);
 }
@@ -1507,13 +1543,12 @@
 
   // The queued weak properties at this point do not refer to reachable keys,
   // so we clear their key and value fields.
-  WeakPropertyPtr cur_weak = delayed_weak_properties_;
-  delayed_weak_properties_ = WeakProperty::null();
+  WeakPropertyPtr cur_weak = delayed_.weak_properties.Release();
   while (cur_weak != WeakProperty::null()) {
     WeakPropertyPtr next_weak =
-        cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+        cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
     // Reset the next pointer in the weak property.
-    cur_weak->untag()->next_ = WeakProperty::null();
+    cur_weak->untag()->next_seen_by_gc_ = WeakProperty::null();
 
 #if defined(DEBUG)
     ObjectPtr raw_key = cur_weak->untag()->key();
@@ -1537,31 +1572,49 @@
 
   // The queued weak references at this point either should have their target
   // updated or should be cleared.
-  WeakReferencePtr cur_weak = delayed_weak_references_;
-  delayed_weak_references_ = WeakReference::null();
+  WeakReferencePtr cur_weak = delayed_.weak_references.Release();
   while (cur_weak != WeakReference::null()) {
     WeakReferencePtr next_weak =
-        cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+        cur_weak->untag()->next_seen_by_gc_.Decompress(cur_weak->heap_base());
     // Reset the next pointer in the weak reference.
-    cur_weak->untag()->next_ = WeakReference::null();
+    cur_weak->untag()->next_seen_by_gc_ = WeakReference::null();
 
-    ObjectPtr raw_target = cur_weak->untag()->target();
-    uword raw_addr = UntaggedObject::ToAddr(raw_target);
-    uword header = *reinterpret_cast<uword*>(raw_addr);
-    if (IsForwarding(header)) {
-      // Get the new location of the object.
-      cur_weak->untag()->target_ = ForwardedObj(header);
-    } else {
-      ASSERT(raw_target->IsHeapObject());
-      ASSERT(raw_target->IsNewObject());
-      WeakReference::Clear(cur_weak);
-    }
+    // If we did not mark the target through a weak property in a later round,
+    // then the target is dead and we should clear it.
+    ForwardOrSetNullIfCollected(cur_weak->heap_base(),
+                                &cur_weak->untag()->target_);
 
     // Advance to next weak reference in the queue.
     cur_weak = next_weak;
   }
 }
 
+// Returns whether the object referred to in `ptr_address` was GCed this GC.
+template <bool parallel>
+bool ScavengerVisitorBase<parallel>::ForwardOrSetNullIfCollected(
+    uword heap_base,
+    CompressedObjectPtr* ptr_address) {
+  ObjectPtr raw = ptr_address->Decompress(heap_base);
+  if (raw.IsRawNull()) {
+    // Object already null before this GC.
+    return false;
+  }
+  if (raw.IsOldObject()) {
+    // Object not touched during this GC.
+    return false;
+  }
+  uword header = *reinterpret_cast<uword*>(UntaggedObject::ToAddr(raw));
+  if (IsForwarding(header)) {
+    // Get the new location of the object.
+    *ptr_address = ForwardedObj(header);
+    return false;
+  }
+  ASSERT(raw->IsHeapObject());
+  ASSERT(raw->IsNewObject());
+  *ptr_address = Object::null();
+  return true;
+}
+
 void Scavenger::VisitObjectPointers(ObjectPointerVisitor* visitor) const {
   ASSERT(Thread::Current()->IsAtSafepoint() ||
          (Thread::Current()->task_kind() == Thread::kMarkerTask) ||
diff --git a/runtime/vm/heap/scavenger.h b/runtime/vm/heap/scavenger.h
index bc626a5..5a93aec 100644
--- a/runtime/vm/heap/scavenger.h
+++ b/runtime/vm/heap/scavenger.h
@@ -168,7 +168,7 @@
 class SemiSpace {
  public:
   static void Init();
-  static void DrainCache();
+  static void ClearCache();
   static void Cleanup();
   static intptr_t CachedSize();
 
@@ -449,6 +449,7 @@
   template <bool>
   friend class ScavengerVisitorBase;
   friend class ScavengerWeakVisitor;
+  friend class ScavengerFinalizerVisitor;
 
   DISALLOW_COPY_AND_ASSIGN(Scavenger);
 };
diff --git a/runtime/vm/heap/spaces.h b/runtime/vm/heap/spaces.h
index f6827aa..c1c0663 100644
--- a/runtime/vm/heap/spaces.h
+++ b/runtime/vm/heap/spaces.h
@@ -40,14 +40,12 @@
   kNewSpace,     // New space is full.
   kStoreBuffer,  // Store buffer is too big.
   kPromotion,    // Old space limit crossed after a scavenge.
-  kOldSpace,     // Old space limit crossed.
+  kOldSpace,     // Old space limit crossed, or old space allocation failed.
   kFinalize,     // Concurrent marking finished.
   kFull,         // Heap::CollectAllGarbage
   kExternal,     // Dart_NewFinalizableHandle Dart_NewWeakPersistentHandle
   kIdle,         // Dart_NotifyIdle
-  kLowMemory,    // Dart_NotifyLowMemory
   kDebugging,    // service request, etc.
-  kSendAndExit,  // SendPort.sendAndExit
 };
 
 }  // namespace dart
diff --git a/runtime/vm/heap/weak_code.cc b/runtime/vm/heap/weak_code.cc
index 44730a3..5e59703 100644
--- a/runtime/vm/heap/weak_code.cc
+++ b/runtime/vm/heap/weak_code.cc
@@ -58,7 +58,7 @@
   return false;
 }
 
-void WeakCodeReferences::DisableCode() {
+void WeakCodeReferences::DisableCode(bool are_mutators_stopped) {
   Thread* thread = Thread::Current();
   const Array& code_objects = Array::Handle(thread->zone(), array_.ptr());
 #if defined(DART_PRECOMPILED_RUNTIME)
@@ -74,8 +74,7 @@
   }
 
   auto isolate_group = IsolateGroup::Current();
-  // Deoptimize stacks and disable code with mutators stopped.
-  isolate_group->RunWithStoppedMutators([&]() {
+  auto disable_code_fun = [&]() {
     Code& code = Code::Handle();
     isolate_group->ForEachIsolate(
         [&](Isolate* isolate) {
@@ -140,7 +139,15 @@
     }
 
     UpdateArrayTo(Object::null_array());
-  });
+  };
+
+  // Deoptimize stacks and disable code (with mutators stopped if they are not
+  // stopped yet).
+  if (are_mutators_stopped) {
+    disable_code_fun();
+  } else {
+    isolate_group->RunWithStoppedMutators(disable_code_fun);
+  }
 
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
diff --git a/runtime/vm/heap/weak_code.h b/runtime/vm/heap/weak_code.h
index 74b4389..e87ac5c 100644
--- a/runtime/vm/heap/weak_code.h
+++ b/runtime/vm/heap/weak_code.h
@@ -28,7 +28,7 @@
 
   static bool IsOptimizedCode(const Array& dependent_code, const Code& code);
 
-  void DisableCode();
+  void DisableCode(bool are_mutators_stopped);
 
   bool HasCodes() const;
 
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 4528f28..1552a72 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -23,6 +23,7 @@
 #include "vm/stub_code.h"
 #include "vm/timeline.h"
 #include "vm/type_testing_stubs.h"
+#include "vm/zone_text_buffer.h"
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
 #include "vm/compiler/backend/code_statistics.h"
@@ -1056,48 +1057,81 @@
   }
 }
 
-static void EnsureAssemblerIdentifier(char* label) {
+static void AddAssemblerIdentifier(ZoneTextBuffer* printer, const char* label) {
+  ASSERT(label[0] != '.');
   for (char c = *label; c != '\0'; c = *++label) {
+#define OP(dart_name, asm_name)                                                \
+  if (strncmp(label, dart_name, strlen(dart_name)) == 0) {                     \
+    printer->AddString(asm_name);                                              \
+    label += (strlen(dart_name) - 1);                                          \
+    continue;                                                                  \
+  }
+
+    OP("+", "operator_add")
+    OP("-", "operator_sub")
+    OP("*", "operator_mul")
+    OP("/", "operator_div")
+    OP("~/", "operator_truncdiv")
+    OP("%", "operator_mod")
+    OP("~", "operator_not")
+    OP("&", "operator_and")
+    OP("|", "operator_or")
+    OP("^", "operator_xor")
+    OP("<<", "operator_sll")
+    OP(">>>", "operator_srl")
+    OP(">>", "operator_sra")
+    OP("[]=", "operator_set")
+    OP("[]", "operator_get")
+    OP("unary-", "operator_neg")
+    OP("==", "operator_eq")
+    OP("<anonymous closure>", "anonymous_closure")
+    OP("<=", "operator_le")
+    OP("<", "operator_lt")
+    OP(">=", "operator_ge")
+    OP(">", "operator_gt")
+#undef OP
+
     if (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) ||
-        ((c >= '0') && (c <= '9'))) {
+        ((c >= '0') && (c <= '9')) || (c == '.')) {
+      printer->AddChar(c);
       continue;
     }
-    *label = '_';
+    printer->AddChar('_');
   }
 }
 
 const char* SnapshotTextObjectNamer::SnapshotNameFor(intptr_t code_index,
                                                      const Code& code) {
   ASSERT(!code.IsNull());
-  const char* prefix = FLAG_precompiled_mode ? "Precompiled_" : "";
   owner_ = code.owner();
   if (owner_.IsNull()) {
     insns_ = code.instructions();
     const char* name = StubCode::NameOfStub(insns_.EntryPoint());
     ASSERT(name != nullptr);
-    return OS::SCreate(zone_, "%sStub_%s", prefix, name);
+    return OS::SCreate(zone_, "Stub_%s", name);
   }
   // The weak reference to the Code's owner should never have been removed via
   // an intermediate serialization, since WSRs are only introduced during
   // precompilation.
   owner_ = WeakSerializationReference::Unwrap(owner_);
   ASSERT(!owner_.IsNull());
+  ZoneTextBuffer printer(zone_);
   if (owner_.IsClass()) {
-    string_ = Class::Cast(owner_).Name();
-    const char* name = string_.ToCString();
-    EnsureAssemblerIdentifier(const_cast<char*>(name));
-    return OS::SCreate(zone_, "%sAllocationStub_%s_%" Pd, prefix, name,
-                       code_index);
+    const char* name = Class::Cast(owner_).ScrubbedNameCString();
+    printer.AddString("AllocationStub_");
+    AddAssemblerIdentifier(&printer, name);
   } else if (owner_.IsAbstractType()) {
     const char* name = namer_.StubNameForType(AbstractType::Cast(owner_));
-    return OS::SCreate(zone_, "%s%s_%" Pd, prefix, name, code_index);
+    printer.AddString(name);
   } else if (owner_.IsFunction()) {
-    const char* name = Function::Cast(owner_).ToQualifiedCString();
-    EnsureAssemblerIdentifier(const_cast<char*>(name));
-    return OS::SCreate(zone_, "%s%s_%" Pd, prefix, name, code_index);
+    const char* name = Function::Cast(owner_).QualifiedScrubbedNameCString();
+    AddAssemblerIdentifier(&printer, name);
   } else {
     UNREACHABLE();
   }
+
+  printer.Printf("_%" Pd, code_index);
+  return printer.buffer();
 }
 
 const char* SnapshotTextObjectNamer::SnapshotNameFor(
@@ -1298,7 +1332,9 @@
   // tells unwinder that caller's value of register R is stored at address
   // CFA+offs.
 
-#if defined(TARGET_ARCH_X64)
+#if defined(TARGET_ARCH_IA32)
+  UNREACHABLE();
+#elif defined(TARGET_ARCH_X64)
   assembly_stream_->WriteString(".cfi_def_cfa rbp, 16\n");
   assembly_stream_->WriteString(".cfi_offset rbp, -16\n");
   assembly_stream_->WriteString(".cfi_offset rip, -8\n");
@@ -1319,7 +1355,6 @@
   assembly_stream_->WriteString(".cfi_offset r11, -8\n");
 #endif
   assembly_stream_->WriteString(".cfi_offset lr, -4\n");
-
 // libunwind on ARM may use .ARM.exidx instead of .debug_frame
 #if !defined(DART_TARGET_OS_MACOS) && !defined(DART_TARGET_OS_MACOS_IOS)
   COMPILE_ASSERT(FP == R11);
@@ -1327,6 +1362,16 @@
   assembly_stream_->WriteString(".save {r11, lr}\n");
   assembly_stream_->WriteString(".setfp r11, sp, #0\n");
 #endif
+#elif defined(TARGET_ARCH_RISCV32)
+  assembly_stream_->WriteString(".cfi_def_cfa fp, 0\n");
+  assembly_stream_->WriteString(".cfi_offset fp, -8\n");
+  assembly_stream_->WriteString(".cfi_offset ra, -4\n");
+#elif defined(TARGET_ARCH_RISCV64)
+  assembly_stream_->WriteString(".cfi_def_cfa fp, 0\n");
+  assembly_stream_->WriteString(".cfi_offset fp, -16\n");
+  assembly_stream_->WriteString(".cfi_offset ra, -8\n");
+#else
+#error Unexpected architecture.
 #endif
 }
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 260c293..e797f5c 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1012,7 +1012,7 @@
   // Verify that all canonical instances are correctly setup in the
   // corresponding canonical tables.
   NoBackgroundCompilerScope no_bg_compiler(Thread::Current());
-  heap()->CollectAllGarbage();
+  heap()->CollectAllGarbage(GCReason::kDebugging);
   Thread* thread = Thread::Current();
   SafepointMutexLocker ml(
       thread->isolate_group()->constant_canonicalization_mutex());
@@ -1203,10 +1203,6 @@
 #endif
       break;
     }
-    case Isolate::kLowMemoryMsg: {
-      I->group()->heap()->NotifyLowMemory();
-      break;
-    }
     case Isolate::kDrainServiceExtensionsMsg: {
 #ifndef PRODUCT
       Object& obj = Object::Handle(zone, message.At(2));
@@ -1392,6 +1388,15 @@
         }
       }
     }
+  } else if (message->IsFinalizerInvocationRequest()) {
+    const Object& msg_handler = Object::Handle(
+        zone,
+        DartLibraryCalls::HandleFinalizerMessage(FinalizerBase::Cast(msg)));
+    if (msg_handler.IsError()) {
+      status = ProcessUnhandledException(Error::Cast(msg_handler));
+    } else {
+      // The handler closure which was used to successfully handle the message.
+    }
   } else if (message->dest_port() == Message::kIllegalPort) {
     // Check whether this is a delayed OOB message which needed handling as
     // part of the regular message dispatch. All other messages are dropped on
@@ -1690,6 +1695,7 @@
       default_tag_(UserTag::null()),
       ic_miss_code_(Code::null()),
       field_table_(new FieldTable(/*isolate=*/this)),
+      finalizers_(GrowableObjectArray::null()),
       isolate_group_(isolate_group),
       isolate_object_store_(new IsolateObjectStore()),
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -1949,6 +1955,10 @@
   origin_id_ = id;
 }
 
+void Isolate::set_finalizers(const GrowableObjectArray& value) {
+  finalizers_ = value.ptr();
+}
+
 bool Isolate::IsPaused() const {
 #if defined(PRODUCT)
   return false;
@@ -2426,15 +2436,15 @@
     head = next;
   } while (head != nullptr);
   head = reversed_head;
-
   if (Service::profiler_stream.enabled() && !IsSystemIsolate(this)) {
-    SampleBlockListProcessor buffer(head);
     StackZone zone(thread);
-    HandleScope handle_scope(thread);
-    StreamableSampleFilter filter(main_port());
-    Profile profile;
-    profile.Build(thread, &filter, &buffer);
-    if (profile.sample_count() > 0) {
+    SampleBlockListProcessor buffer(head);
+    if (buffer.HasStreamableSamples(thread)) {
+      HandleScope handle_scope(thread);
+      StreamableSampleFilter filter(main_port());
+      Profile profile;
+      profile.Build(thread, &filter, &buffer);
+      ASSERT(profile.sample_count() > 0);
       ServiceEvent event(this, ServiceEvent::kCpuSamples);
       event.set_cpu_profile(&profile);
       Service::HandleEvent(&event);
@@ -2452,22 +2462,6 @@
 }
 #endif  // !defined(PRODUCT)
 
-// static
-void Isolate::NotifyLowMemory() {
-  IsolateGroup::ForEach([](IsolateGroup* group) { group->NotifyLowMemory(); });
-}
-
-void IsolateGroup::NotifyLowMemory() {
-  SafepointReadRwLocker ml(Thread::Current(), isolates_lock_.get());
-  MonitorLocker ml2(Isolate::isolate_creation_monitor_);
-  for (Isolate* isolate : isolates_) {
-    if (isolate->AcceptsMessagesLocked()) {
-      isolate->KillLocked(Isolate::kLowMemoryMsg);
-      return;  // Only wake up one member of the group.
-    }
-  }
-}
-
 void Isolate::LowLevelShutdown() {
   // Ensure we have a zone and handle scope so that we can call VM functions,
   // but we no longer allocate new heap objects.
@@ -2485,6 +2479,45 @@
     }
   }
 
+  // Set live finalizers isolate to null, before deleting the message handler.
+  const auto& finalizers =
+      GrowableObjectArray::Handle(stack_zone.GetZone(), finalizers_);
+  if (!finalizers.IsNull()) {
+    const intptr_t num_finalizers = finalizers.Length();
+    auto& weak_reference = WeakReference::Handle(stack_zone.GetZone());
+    auto& finalizer = FinalizerBase::Handle(stack_zone.GetZone());
+    auto& current_entry = FinalizerEntry::Handle(stack_zone.GetZone());
+    auto& all_entries = LinkedHashSet::Handle(stack_zone.GetZone());
+    for (int i = 0; i < num_finalizers; i++) {
+      weak_reference ^= finalizers.At(i);
+      finalizer ^= weak_reference.target();
+      if (!finalizer.IsNull()) {
+        if (finalizer.isolate() == this) {
+          if (FLAG_trace_finalizers) {
+            THR_Print("Isolate %p Setting finalizer %p isolate to null\n", this,
+                      finalizer.ptr()->untag());
+          }
+          // Finalizer was not sent to another isolate with send and exit.
+          finalizer.set_isolate(nullptr);
+        } else {
+          // TODO(http://dartbug.com/47777): Send and exit support.
+          UNREACHABLE();
+        }
+
+        if (finalizer.IsNativeFinalizer()) {
+          // Immediately call native callback.
+          const auto& native_finalizer = NativeFinalizer::Cast(finalizer);
+          all_entries = finalizer.all_entries();
+          LinkedHashSet::Iterator iterator(all_entries);
+          while (iterator.MoveNext()) {
+            current_entry ^= iterator.CurrentKey();
+            native_finalizer.RunCallback(current_entry, "Isolate shutdown");
+          }
+        }
+      }
+    }
+  }
+
   // Close all the ports owned by this isolate.
   PortMap::ClosePorts(message_handler());
 
@@ -2591,7 +2624,6 @@
           "--check-reloaded is enabled.\n");
     }
   }
-
 #endif  // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
 
   // Then, proceed with low-level teardown.
@@ -2741,6 +2773,7 @@
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&ic_miss_code_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&tag_table_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&sticky_error_));
+  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&finalizers_));
 #if !defined(PRODUCT)
   visitor->VisitPointer(
       reinterpret_cast<ObjectPtr*>(&pending_service_extension_calls_));
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 7665ac1..76bbd89 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -604,8 +604,6 @@
     return deferred_marking_stack_;
   }
 
-  void NotifyLowMemory();
-
   // Runs the given [function] on every isolate in the isolate group.
   //
   // During the duration of this function, no new isolates can be added or
@@ -970,9 +968,8 @@
     // Internal message ids.
     kInterruptMsg = 10,     // Break in the debugger.
     kInternalKillMsg = 11,  // Like kill, but does not run exit listeners, etc.
-    kLowMemoryMsg = 12,     // Run compactor, etc.
-    kDrainServiceExtensionsMsg = 13,  // Invoke pending service extensions
-    kCheckForReload = 14,  // Participate in other isolate group reload.
+    kDrainServiceExtensionsMsg = 12,  // Invoke pending service extensions
+    kCheckForReload = 13,  // Participate in other isolate group reload.
   };
   // The different Isolate API message priorities for ping and kill messages.
   enum LibMsgPriority {
@@ -1068,6 +1065,11 @@
   void set_init_callback_data(void* value) { init_callback_data_ = value; }
   void* init_callback_data() const { return init_callback_data_; }
 
+  void set_finalizers(const GrowableObjectArray& value);
+  static intptr_t finalizers_offset() {
+    return OFFSET_OF(Isolate, finalizers_);
+  }
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
   NativeCallbackTrampolines* native_callback_trampolines() {
     return &native_callback_trampolines_;
@@ -1446,8 +1448,6 @@
   WeakTable* forward_table_old() { return forward_table_old_.get(); }
   void set_forward_table_old(WeakTable* table);
 
-  static void NotifyLowMemory();
-
   void RememberLiveTemporaries();
   void DeferredMarkLiveTemporaries();
 
@@ -1545,6 +1545,9 @@
   UserTagPtr default_tag_;
   CodePtr ic_miss_code_;
   FieldTable* field_table_ = nullptr;
+  // Used to clear out `UntaggedFinalizerBase::isolate_` pointers on isolate
+  // shutdown to prevent usage of dangling pointers.
+  GrowableObjectArrayPtr finalizers_;
   bool single_step_ = false;
   bool is_system_isolate_ = false;
   // End accessed from generated code.
@@ -1656,7 +1659,7 @@
   Dart_EnvironmentCallback environment_callback_ = nullptr;
   Random random_;
   Simulator* simulator_ = nullptr;
-  Mutex mutex_;                            // Protects compiler stats.
+  Mutex mutex_;  // Protects compiler stats.
   MessageHandler* message_handler_ = nullptr;
   intptr_t defer_finalization_count_ = 0;
   DeoptContext* deopt_context_ = nullptr;
@@ -1732,7 +1735,7 @@
   friend class ServiceIsolate;
   friend class Thread;
   friend class Timeline;
-  friend class IsolateGroup;   // reload_context_
+  friend class IsolateGroup;  // reload_context_
 
   DISALLOW_COPY_AND_ASSIGN(Isolate);
 };
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index c61d766..a04ea6f 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -666,10 +666,9 @@
   modified_libs_transitive_ = nullptr;
 
   if (FLAG_gc_during_reload) {
-    // We use kLowMemory to force the GC to compact, which is more likely to
-    // discover untracked pointers (and other issues, like incorrect class
-    // table).
-    heap->CollectAllGarbage(GCReason::kLowMemory);
+    // We force the GC to compact, which is more likely to discover untracked
+    // pointers (and other issues, like incorrect class table).
+    heap->CollectAllGarbage(GCReason::kDebugging, /*compact=*/ true);
   }
 
   // Copy the size table for isolate group & class tables for each isolate.
@@ -680,10 +679,9 @@
   }
 
   if (FLAG_gc_during_reload) {
-    // We use kLowMemory to force the GC to compact, which is more likely to
-    // discover untracked pointers (and other issues, like incorrect class
-    // table).
-    heap->CollectAllGarbage(GCReason::kLowMemory);
+    // We force the GC to compact, which is more likely to discover untracked
+    // pointers (and other issues, like incorrect class table).
+    heap->CollectAllGarbage(GCReason::kDebugging, /*compact=*/ true);
   }
 
   // We synchronously load the hot-reload kernel diff (which includes changed
@@ -711,10 +709,9 @@
     IG->program_reload_context()->ReloadPhase3FinalizeLoading();
 
     if (FLAG_gc_during_reload) {
-      // We use kLowMemory to force the GC to compact, which is more likely to
-      // discover untracked pointers (and other issues, like incorrect class
-      // table).
-      heap->CollectAllGarbage(GCReason::kLowMemory);
+      // We force the GC to compact, which is more likely to discover untracked
+      // pointers (and other issues, like incorrect class table).
+      heap->CollectAllGarbage(GCReason::kDebugging, /*compact=*/ true);
     }
 
     // If we use the CFE and performed a compilation, we need to notify that
@@ -742,10 +739,9 @@
 
         // We are still using the old class table at this point.
         if (FLAG_gc_during_reload) {
-          // We use kLowMemory to force the GC to compact, which is more likely
-          // to discover untracked pointers (and other issues, like incorrect
-          // class table).
-          heap->CollectAllGarbage(GCReason::kLowMemory);
+          // We force the GC to compact, which is more likely to discover
+          // untracked pointers (and other issues, like incorrect class table).
+          heap->CollectAllGarbage(GCReason::kDebugging, /*compact=*/ true);
         }
         const intptr_t count = locator.count();
         if (count > 0) {
@@ -783,10 +779,9 @@
         }
         // We are using the new class table now.
         if (FLAG_gc_during_reload) {
-          // We use kLowMemory to force the GC to compact, which is more likely
-          // to discover untracked pointers (and other issues, like incorrect
-          // class table).
-          heap->CollectAllGarbage(GCReason::kLowMemory);
+          // We force the GC to compact, which is more likely to discover
+          // untracked pointers (and other issues, like incorrect class table).
+          heap->CollectAllGarbage(GCReason::kDebugging, /*compact=*/ true);
         }
       }
       if (discard_class_tables) {
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index ff0cfa2..0efa27f 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 76;
-static const uint32_t kMaxSupportedKernelFormatVersion = 76;
+static const uint32_t kMinSupportedKernelFormatVersion = 77;
+static const uint32_t kMaxSupportedKernelFormatVersion = 77;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 0b1eb10..f5e8986 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -1300,7 +1300,8 @@
     }
     if (!Api::IsFfiEnabled() &&
         target_library.url() == Symbols::DartFfi().ptr() &&
-        library->url() != Symbols::DartCore().ptr()) {
+        library->url() != Symbols::DartCore().ptr() &&
+        library->url() != Symbols::DartInternal().ptr()) {
       H.ReportError(
           "import of dart:ffi is not supported in the current Dart runtime");
     }
diff --git a/runtime/vm/message.cc b/runtime/vm/message.cc
index 0f2d2e4..d9d0680 100644
--- a/runtime/vm/message.cc
+++ b/runtime/vm/message.cc
@@ -45,12 +45,20 @@
   ASSERT(IsPersistentHandle());
 }
 
+Message::Message(PersistentHandle* handle, Priority priority)
+    : dest_port_(ILLEGAL_PORT),
+      payload_(handle),
+      snapshot_length_(kFinalizerSnapshotLen),
+      priority_(priority) {
+  ASSERT(IsFinalizerInvocationRequest());
+}
+
 Message::~Message() {
   if (IsSnapshot()) {
     free(payload_.snapshot_);
   }
   delete finalizable_data_;
-  if (IsPersistentHandle()) {
+  if (IsPersistentHandle() || IsFinalizerInvocationRequest()) {
     auto isolate_group = IsolateGroup::Current();
     isolate_group->api_state()->FreePersistentHandle(
         payload_.persistent_handle_);
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index 4c82bdf..46064a9 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.h
@@ -62,8 +62,13 @@
   // the VM heap. This is indicated by setting the len_ field to 0.
   Message(Dart_Port dest_port, ObjectPtr raw_obj, Priority priority);
 
+  // A message sent from SendPort.send or SendPort.sendAndExit where sender and
+  // receiver are in the same isolate group.
   Message(Dart_Port dest_port, PersistentHandle* handle, Priority priority);
 
+  // A message sent from GC to run a finalizer.
+  Message(PersistentHandle* handle, Priority priority);
+
   ~Message();
 
   template <typename... Args>
@@ -94,7 +99,7 @@
     return payload_.raw_obj_;
   }
   PersistentHandle* persistent_handle() const {
-    ASSERT(IsPersistentHandle());
+    ASSERT(IsPersistentHandle() || IsFinalizerInvocationRequest());
     return payload_.persistent_handle_;
   }
   Priority priority() const { return priority_; }
@@ -103,7 +108,9 @@
   // of at the top of the message loop. Control messages from dart:isolate or
   // vm-service requests.
   bool IsOOB() const { return priority_ == Message::kOOBPriority; }
-  bool IsSnapshot() const { return !IsRaw() && !IsPersistentHandle(); }
+  bool IsSnapshot() const {
+    return !IsRaw() && !IsPersistentHandle() && !IsFinalizerInvocationRequest();
+  }
   // A message whose object is an immortal object from the vm-isolate's heap.
   bool IsRaw() const { return snapshot_length_ == 0; }
   // A message sent from SendPort.send or SendPort.sendAndExit where sender and
@@ -111,6 +118,10 @@
   bool IsPersistentHandle() const {
     return snapshot_length_ == kPersistentHandleSnapshotLen;
   }
+  // A message sent from GC to run a finalizer.
+  bool IsFinalizerInvocationRequest() const {
+    return snapshot_length_ == kFinalizerSnapshotLen;
+  }
 
   void DropFinalizers() {
     if (finalizable_data_ != nullptr) {
@@ -124,6 +135,7 @@
 
  private:
   static intptr_t const kPersistentHandleSnapshotLen = -1;
+  static intptr_t const kFinalizerSnapshotLen = -2;
 
   friend class MessageQueue;
 
diff --git a/runtime/vm/message_handler.h b/runtime/vm/message_handler.h
index 715641b..228c745 100644
--- a/runtime/vm/message_handler.h
+++ b/runtime/vm/message_handler.h
@@ -211,6 +211,8 @@
   Thread* thread() const { return Thread::Current(); }
 
  private:
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
   friend class PortMap;
   friend class MessageHandlerTestPeer;
   friend class MessageHandlerTask;
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index 22de126..9bd1a91 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -26,28 +26,53 @@
 
 namespace dart {
 
-static Dart_CObject cobj_null = {.type = Dart_CObject_kNull,
-                                 .value = {.as_int64 = 0}};
-static Dart_CObject cobj_sentinel = {.type = Dart_CObject_kUnsupported};
-static Dart_CObject cobj_transition_sentinel = {.type =
-                                                    Dart_CObject_kUnsupported};
-static Dart_CObject cobj_empty_array = {
-    .type = Dart_CObject_kArray,
-    .value = {.as_array = {.length = 0, .values = nullptr}}};
-static Dart_CObject cobj_zero_array_element = {.type = Dart_CObject_kInt32,
-                                               .value = {.as_int32 = 0}};
-static Dart_CObject* cobj_zero_array_values[1] = {&cobj_zero_array_element};
-static Dart_CObject cobj_zero_array = {
-    .type = Dart_CObject_kArray,
-    .value = {.as_array = {.length = 1, .values = &cobj_zero_array_values[0]}}};
-static Dart_CObject cobj_dynamic_type = {.type = Dart_CObject_kUnsupported};
-static Dart_CObject cobj_void_type = {.type = Dart_CObject_kUnsupported};
-static Dart_CObject cobj_empty_type_arguments = {.type =
-                                                     Dart_CObject_kUnsupported};
-static Dart_CObject cobj_true = {.type = Dart_CObject_kBool,
-                                 .value = {.as_bool = true}};
-static Dart_CObject cobj_false = {.type = Dart_CObject_kBool,
-                                  .value = {.as_bool = false}};
+static Dart_CObject cobj_sentinel = {Dart_CObject_kUnsupported, {false}};
+static Dart_CObject cobj_transition_sentinel = {Dart_CObject_kUnsupported,
+                                                {false}};
+static Dart_CObject cobj_dynamic_type = {Dart_CObject_kUnsupported, {false}};
+static Dart_CObject cobj_void_type = {Dart_CObject_kUnsupported, {false}};
+static Dart_CObject cobj_empty_type_arguments = {Dart_CObject_kUnsupported,
+                                                 {false}};
+static Dart_CObject cobj_true = {Dart_CObject_kBool, {true}};
+static Dart_CObject cobj_false = {Dart_CObject_kBool, {false}};
+
+// Workaround for lack of designated initializers until we adopt c++20
+class PredefinedCObjects {
+ public:
+  static PredefinedCObjects& getInstance() {
+    static PredefinedCObjects instance;
+    return instance;
+  }
+
+  static Dart_CObject* cobj_null() { return &getInstance().cobj_null_; }
+  static Dart_CObject* cobj_empty_array() {
+    return &getInstance().cobj_empty_array_;
+  }
+  static Dart_CObject* cobj_zero_array() {
+    return &getInstance().cobj_zero_array_;
+  }
+
+ private:
+  PredefinedCObjects() {
+    cobj_null_.type = Dart_CObject_kNull;
+    cobj_null_.value.as_int64 = 0;
+    cobj_empty_array_.type = Dart_CObject_kArray;
+    cobj_empty_array_.value.as_array = {0, nullptr};
+    cobj_zero_array_element.type = Dart_CObject_kInt32;
+    cobj_zero_array_element.value.as_int32 = 0;
+    cobj_zero_array_values[0] = {&cobj_zero_array_element};
+    cobj_zero_array_.type = Dart_CObject_kArray;
+    cobj_zero_array_.value.as_array = {1, &cobj_zero_array_values[0]};
+  }
+
+  Dart_CObject cobj_null_;
+  Dart_CObject cobj_empty_array_;
+  Dart_CObject* cobj_zero_array_values[1];
+  Dart_CObject cobj_zero_array_element;
+  Dart_CObject cobj_zero_array_;
+
+  DISALLOW_COPY_AND_ASSIGN(PredefinedCObjects);
+};
 
 enum class MessagePhase {
   kBeforeTypes = 0,
@@ -2801,7 +2826,7 @@
     for (intptr_t i = 0; i < count; i++) {
       Dart_CObject* array = reinterpret_cast<Dart_CObject*>(objects_[i]);
       intptr_t length = array->value.as_array.length;
-      s->WriteRef(&cobj_null);  // TypeArguments
+      s->WriteRef(PredefinedCObjects::cobj_null());  // TypeArguments
       for (intptr_t j = 0; j < length; j++) {
         s->WriteRef(array->value.as_array.values[j]);
       }
@@ -3242,7 +3267,7 @@
   intptr_t cid;
   switch (object->type) {
     case Dart_CObject_kNull:
-      ForwardRef(object, &cobj_null);
+      ForwardRef(object, PredefinedCObjects::cobj_null());
       return true;
     case Dart_CObject_kBool:
       ForwardRef(object, object->value.as_bool ? &cobj_true : &cobj_false);
@@ -3640,11 +3665,11 @@
 }
 
 void ApiMessageSerializer::AddBaseObjects() {
-  AddBaseObject(&cobj_null);
+  AddBaseObject(PredefinedCObjects::cobj_null());
   AddBaseObject(&cobj_sentinel);
   AddBaseObject(&cobj_transition_sentinel);
-  AddBaseObject(&cobj_empty_array);
-  AddBaseObject(&cobj_zero_array);
+  AddBaseObject(PredefinedCObjects::cobj_empty_array());
+  AddBaseObject(PredefinedCObjects::cobj_zero_array());
   AddBaseObject(&cobj_dynamic_type);
   AddBaseObject(&cobj_void_type);
   AddBaseObject(&cobj_empty_type_arguments);
@@ -3653,11 +3678,11 @@
 }
 
 void ApiMessageDeserializer::AddBaseObjects() {
-  AddBaseObject(&cobj_null);
+  AddBaseObject(PredefinedCObjects::cobj_null());
   AddBaseObject(&cobj_sentinel);
   AddBaseObject(&cobj_transition_sentinel);
-  AddBaseObject(&cobj_empty_array);
-  AddBaseObject(&cobj_zero_array);
+  AddBaseObject(PredefinedCObjects::cobj_empty_array());
+  AddBaseObject(PredefinedCObjects::cobj_zero_array());
   AddBaseObject(&cobj_dynamic_type);
   AddBaseObject(&cobj_void_type);
   AddBaseObject(&cobj_empty_type_arguments);
@@ -3916,6 +3941,11 @@
 ObjectPtr ReadMessage(Thread* thread, Message* message) {
   if (message->IsRaw()) {
     return message->raw_obj();
+  } else if (message->IsFinalizerInvocationRequest()) {
+    PersistentHandle* handle = message->persistent_handle();
+    Object& msg_obj = Object::Handle(thread->zone(), handle->ptr());
+    ASSERT(msg_obj.IsFinalizer() || msg_obj.IsNativeFinalizer());
+    return msg_obj.ptr();
   } else if (message->IsPersistentHandle()) {
     return ReadObjectGraphCopyMessage(thread, message->persistent_handle());
   } else {
diff --git a/runtime/vm/metrics_test.cc b/runtime/vm/metrics_test.cc
index 2be5b71..5a9ebf7 100644
--- a/runtime/vm/metrics_test.cc
+++ b/runtime/vm/metrics_test.cc
@@ -88,8 +88,9 @@
 
   // Ensure we've done new/old GCs to ensure max metrics are initialized.
   String::New("<land-in-new-space>", Heap::kNew);
-  IsolateGroup::Current()->heap()->new_space()->Scavenge(GCReason::kLowMemory);
-  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kLowMemory);
+  IsolateGroup::Current()->heap()->new_space()->Scavenge(GCReason::kDebugging);
+  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kDebugging,
+                                                     /*compact=*/ true);
 
   // Ensure we've something live in new space.
   String::New("<land-in-new-space2>", Heap::kNew);
@@ -114,13 +115,6 @@
   }
 }
 
-class MetricsTestHelper {
- public:
-  static void Scavenge(Thread* thread) {
-    thread->heap()->CollectNewSpaceGarbage(thread, GCReason::kDebugging);
-  }
-};
-
 static uintptr_t event_counter;
 static const char* last_gcevent_type;
 static const char* last_gcevent_reason;
@@ -151,18 +145,18 @@
 
   Dart_SetGCEventCallback(&MyGCEventCallback);
 
-  MetricsTestHelper::Scavenge(Thread::Current());
+  GCTestHelper::CollectNewSpace();
 
   EXPECT_EQ(1UL, event_counter);
   EXPECT_STREQ("Scavenge", last_gcevent_type);
   EXPECT_STREQ("debugging", last_gcevent_reason);
 
   // This call emits 2 or 3 events.
-  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kLowMemory);
+  GCTestHelper::CollectAllGarbage(/*compact=*/ true);
 
   EXPECT_GE(event_counter, 3UL);
   EXPECT_STREQ("MarkCompact", last_gcevent_type);
-  EXPECT_STREQ("low memory", last_gcevent_reason);
+  EXPECT_STREQ("debugging", last_gcevent_reason);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 793accb..abaeb8b 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -276,7 +276,7 @@
     Isolate* isolate = (thread == NULL) ? NULL : thread->isolate();
     CHECK_ISOLATE(isolate);
     TransitionNativeToVM _(thread);
-    IsolateGroup::Current()->heap()->CollectAllGarbage();
+    IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kDebugging);
     return nullptr;
 
   } else if (strcmp(command, "is-thread-in-generated") == 0) {
diff --git a/runtime/vm/native_entry.h b/runtime/vm/native_entry.h
index 460d382..5022ffc 100644
--- a/runtime/vm/native_entry.h
+++ b/runtime/vm/native_entry.h
@@ -15,7 +15,6 @@
 #include "vm/native_function.h"
 #include "vm/runtime_entry.h"
 
-
 namespace dart {
 
 // Forward declarations.
@@ -51,6 +50,9 @@
   static ObjectPtr DN_Helper##name(Isolate* isolate, Thread* thread,           \
                                    Zone* zone, NativeArguments* arguments)
 
+#define DEFINE_FFI_NATIVE_ENTRY(name, return_type, argument_types)             \
+  return_type BootstrapNatives::FN_##name argument_types
+
 // Helpers that throw an argument exception.
 void DartNativeThrowTypeArgumentCountException(int num_type_args,
                                                int num_type_args_expected);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 00807b5..2a287b9 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -45,6 +45,7 @@
 #include "vm/kernel_binary.h"
 #include "vm/kernel_isolate.h"
 #include "vm/kernel_loader.h"
+#include "vm/log.h"
 #include "vm/native_symbol.h"
 #include "vm/object_graph.h"
 #include "vm/object_store.h"
@@ -118,7 +119,7 @@
 
 cpp_vtable Object::builtin_vtables_[kNumPredefinedCids] = {};
 
-// These are initialized to a value that will force a illegal memory access if
+// These are initialized to a value that will force an illegal memory access if
 // they are being used.
 #if defined(RAW_NULL)
 #error RAW_NULL should not be defined.
@@ -192,6 +193,9 @@
   buffer->Printf("%.*s", static_cast<int>(len), &name[start_pos]);
 }
 
+// Used to define setters and getters for untagged object fields that are
+// defined with the WSR_COMPRESSED_POINTER_FIELD macro. See
+// PRECOMPILER_WSR_FIELD_DECLARATION in object.h for more information.
 #if defined(DART_PRECOMPILER)
 #define PRECOMPILER_WSR_FIELD_DEFINITION(Class, Type, Name)                    \
   Type##Ptr Class::Name() const {                                              \
@@ -2341,6 +2345,19 @@
     pending_classes.Add(cls);
     RegisterClass(cls, Symbols::FfiDynamicLibrary(), lib);
 
+    cls = Class::New<NativeFinalizer, RTN::NativeFinalizer>(isolate_group);
+    object_store->set_native_finalizer_class(cls);
+    RegisterPrivateClass(cls, Symbols::_NativeFinalizer(), lib);
+
+    cls = Class::New<Finalizer, RTN::Finalizer>(isolate_group);
+    cls.set_type_arguments_field_offset(
+        Finalizer::type_arguments_offset(),
+        RTN::Finalizer::type_arguments_offset());
+    cls.set_num_type_arguments_unsafe(1);
+    object_store->set_finalizer_class(cls);
+    pending_classes.Add(cls);
+    RegisterPrivateClass(cls, Symbols::_FinalizerImpl(), core_lib);
+
     // Pre-register the internal library so we can place the vm class
     // FinalizerEntry there rather than the core library.
     lib = Library::LookupLibrary(thread, Symbols::DartInternal());
@@ -2353,6 +2370,11 @@
     ASSERT(!lib.IsNull());
     ASSERT(lib.ptr() == Library::InternalLibrary());
 
+    cls = Class::New<FinalizerEntry, RTN::FinalizerEntry>(isolate_group);
+    object_store->set_finalizer_entry_class(cls);
+    pending_classes.Add(cls);
+    RegisterClass(cls, Symbols::FinalizerEntry(), lib);
+
     // Finish the initialization by compiling the bootstrap scripts containing
     // the base interfaces and the implementation of the internal classes.
     const Error& error = Error::Handle(
@@ -2520,6 +2542,12 @@
     object_store->set_weak_property_class(cls);
     cls = Class::New<WeakReference, RTN::WeakReference>(isolate_group);
     object_store->set_weak_reference_class(cls);
+    cls = Class::New<Finalizer, RTN::Finalizer>(isolate_group);
+    object_store->set_finalizer_class(cls);
+    cls = Class::New<NativeFinalizer, RTN::NativeFinalizer>(isolate_group);
+    object_store->set_native_finalizer_class(cls);
+    cls = Class::New<FinalizerEntry, RTN::FinalizerEntry>(isolate_group);
+    object_store->set_finalizer_entry_class(cls);
 
     cls = Class::New<MirrorReference, RTN::MirrorReference>(isolate_group);
     cls = Class::New<UserTag, RTN::UserTag>(isolate_group);
@@ -2971,6 +2999,11 @@
   set_state_bits(HasPragmaBit::update(value, state_bits()));
 }
 
+void Class::set_implements_finalizable(bool value) const {
+  ASSERT(IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
+  set_state_bits(ImplementsFinalizableBit::update(value, state_bits()));
+}
+
 // Initialize class fields of type Array with empty array.
 void Class::InitEmptyFields() {
   if (Object::empty_array().ptr() == Array::null()) {
@@ -4083,7 +4116,7 @@
       THR_Print("Deopt for CHA (new subclass %s)\n", subclass.ToCString());
     }
   }
-  a.DisableCode();
+  a.DisableCode(/*are_mutators_stopped=*/false);
 }
 
 void Class::DisableAllCHAOptimizedCode() {
@@ -5416,7 +5449,9 @@
             AbstractType::Handle(zone, type_arguments.TypeAtNullSafe(0));
         // If T0 is Future<S0>, then T0 <: Future<S1>, iff S0 <: S1.
         if (type_arg.IsSubtypeOf(other_type_arg, space, trail)) {
-          if (verified_nullability) {
+          // verified_nullability doesn't take into account the nullability of
+          // S1, just of the FutureOr type.
+          if (verified_nullability || !other_type_arg.IsNonNullable()) {
             return true;
           }
         }
@@ -6906,6 +6941,8 @@
   if (result.IsNull()) {
     // Canonicalize each type argument.
     AbstractType& type_arg = AbstractType::Handle(zone);
+    GrowableHandlePtrArray<const AbstractType> canonicalized_types(zone,
+                                                                   num_types);
     for (intptr_t i = 0; i < num_types; i++) {
       type_arg = TypeAt(i);
       type_arg = type_arg.Canonicalize(thread, trail);
@@ -6914,7 +6951,7 @@
         ASSERT(IsRecursive());
         return this->ptr();
       }
-      SetTypeAt(i, type_arg);
+      canonicalized_types.Add(type_arg);
     }
     // Canonicalization of a type argument of a recursive type argument vector
     // may change the hash of the vector, so invalidate.
@@ -6929,6 +6966,9 @@
     // canonical entry.
     result ^= table.GetOrNull(CanonicalTypeArgumentsKey(*this));
     if (result.IsNull()) {
+      for (intptr_t i = 0; i < num_types; i++) {
+        SetTypeAt(i, canonicalized_types.At(i));
+      }
       // Make sure we have an old space object and add it to the table.
       if (this->IsNew()) {
         result ^= Object::Clone(*this, Heap::kOld);
@@ -8050,6 +8090,38 @@
   }
 }
 
+bool Function::ForceOptimize() const {
+  return IsFfiFromAddress() || IsFfiGetAddress() || IsFfiLoad() ||
+         IsFfiStore() || IsFfiTrampoline() || IsFfiAsExternalTypedData() ||
+         IsTypedDataViewFactory() || IsUtf8Scan() || IsGetNativeField() ||
+         IsFinalizerForceOptimized();
+}
+
+bool Function::IsFinalizerForceOptimized() const {
+  // Either because of unboxed/untagged data, or because we don't want the GC
+  // to trigger in between.
+  switch (recognized_kind()) {
+    case MethodRecognizer::kFinalizerBase_getIsolateFinalizers:
+    case MethodRecognizer::kFinalizerBase_setIsolate:
+    case MethodRecognizer::kFinalizerBase_setIsolateFinalizers:
+    case MethodRecognizer::kFinalizerEntry_getExternalSize:
+      // Unboxed/untagged representation not supported in unoptimized.
+      return true;
+    case MethodRecognizer::kFinalizerBase_exchangeEntriesCollectedWithNull:
+      // Prevent the GC from running so that the operation is atomic from
+      // a GC point of view. Always double check implementation in
+      // kernel_to_il.cc that no GC can happen in between the relevant IL
+      // instructions.
+      // TODO(https://dartbug.com/48527): Support inlining.
+      return true;
+    case MethodRecognizer::kFinalizerEntry_allocate:
+      // Both of the above reasons.
+      return true;
+    default:
+      return false;
+  }
+}
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
 bool Function::CanBeInlined() const {
   // Our force-optimized functions cannot deoptimize to an unoptimized frame.
@@ -9689,6 +9761,13 @@
   return Symbols::New(thread, printer.buffer());
 }
 
+const char* Function::QualifiedScrubbedNameCString() const {
+  Thread* thread = Thread::Current();
+  ZoneTextBuffer printer(thread->zone());
+  PrintName(NameFormattingParams(kScrubbedName), &printer);
+  return printer.buffer();
+}
+
 StringPtr Function::QualifiedUserVisibleName() const {
   Thread* thread = Thread::Current();
   ZoneTextBuffer printer(thread->zone());
@@ -10448,12 +10527,14 @@
   // code (in which case the caller might get different answers if it obtains
   // the guarded cid multiple times).
   Thread* thread = Thread::Current();
+#if defined(DART_PRECOMPILED_RUNTIME)
+  ASSERT(!thread->IsInsideCompiler() || is_static());
+#else
   ASSERT(!thread->IsInsideCompiler() ||
-#if !defined(DART_PRECOMPILED_RUNTIME)
          ((CompilerState::Current().should_clone_fields() == !IsOriginal())) ||
-#endif
          is_static());
 #endif
+#endif
   return LoadNonPointer<ClassIdTagType, std::memory_order_relaxed>(
       &untag()->guarded_cid_);
 }
@@ -10463,12 +10544,14 @@
   // Same assert as guarded_cid(), because is_nullable() also needs to be
   // consistent for the background compiler.
   Thread* thread = Thread::Current();
+#if defined(DART_PRECOMPILED_RUNTIME)
+  ASSERT(!thread->IsInsideCompiler() || is_static());
+#else
   ASSERT(!thread->IsInsideCompiler() ||
-#if !defined(DART_PRECOMPILED_RUNTIME)
          ((CompilerState::Current().should_clone_fields() == !IsOriginal())) ||
-#endif
          is_static());
 #endif
+#endif
   return is_nullable_unsafe();
 }
 
@@ -10949,7 +11032,7 @@
   a.Register(code);
 }
 
-void Field::DeoptimizeDependentCode() const {
+void Field::DeoptimizeDependentCode(bool are_mutators_stopped) const {
   DEBUG_ASSERT(
       IsolateGroup::Current()->program_lock()->IsCurrentThreadWriter());
   ASSERT(IsOriginal());
@@ -10957,7 +11040,7 @@
   if (FLAG_trace_deoptimization && a.HasCodes()) {
     THR_Print("Deopt for field guard (field %s)\n", ToCString());
   }
-  a.DisableCode();
+  a.DisableCode(are_mutators_stopped);
 }
 
 bool Field::IsConsistentWith(const Field& other) const {
@@ -11231,45 +11314,102 @@
   }
 }
 
-bool Field::UpdateGuardedCidAndLength(const Object& value) const {
-  ASSERT(IsOriginal());
-  const intptr_t cid = value.GetClassId();
+class FieldGuardUpdater {
+ public:
+  FieldGuardUpdater(const Field* field, const Object& value);
+
+  bool IsUpdateNeeded() {
+    return does_guarded_cid_need_update_ || does_is_nullable_need_update_ ||
+           does_list_length_and_offset_need_update_ ||
+           does_static_type_exactness_state_need_update_;
+  }
+  void DoUpdate();
+
+ private:
+  void ReviewExactnessState();
+  void ReviewGuards();
+
+  intptr_t guarded_cid() { return guarded_cid_; }
+  void set_guarded_cid(intptr_t guarded_cid) {
+    guarded_cid_ = guarded_cid;
+    does_guarded_cid_need_update_ = true;
+  }
+
+  bool is_nullable() { return is_nullable_; }
+  void set_is_nullable(bool is_nullable) {
+    is_nullable_ = is_nullable;
+    does_is_nullable_need_update_ = true;
+  }
+
+  intptr_t guarded_list_length() { return list_length_; }
+  void set_guarded_list_length_and_offset(
+      intptr_t list_length,
+      intptr_t list_length_in_object_offset) {
+    list_length_ = list_length;
+    list_length_in_object_offset_ = list_length_in_object_offset;
+    does_list_length_and_offset_need_update_ = true;
+  }
+
+  StaticTypeExactnessState static_type_exactness_state() {
+    return static_type_exactness_state_;
+  }
+  void set_static_type_exactness_state(StaticTypeExactnessState state) {
+    static_type_exactness_state_ = state;
+    does_static_type_exactness_state_need_update_ = true;
+  }
+
+  const Field* field_;
+  const Object& value_;
+
+  intptr_t guarded_cid_;
+  bool is_nullable_;
+  intptr_t list_length_;
+  intptr_t list_length_in_object_offset_;
+  StaticTypeExactnessState static_type_exactness_state_;
+
+  bool does_guarded_cid_need_update_ = false;
+  bool does_is_nullable_need_update_ = false;
+  bool does_list_length_and_offset_need_update_ = false;
+  bool does_static_type_exactness_state_need_update_ = false;
+};
+
+void FieldGuardUpdater::ReviewGuards() {
+  ASSERT(field_->IsOriginal());
+  const intptr_t cid = value_.GetClassId();
 
   if (guarded_cid() == kIllegalCid) {
-    // Field is assigned first time.
     set_guarded_cid(cid);
     set_is_nullable(cid == kNullCid);
 
     // Start tracking length if needed.
     ASSERT((guarded_list_length() == Field::kUnknownFixedLength) ||
            (guarded_list_length() == Field::kNoFixedLength));
-    if (needs_length_check()) {
+    if (field_->needs_length_check()) {
       ASSERT(guarded_list_length() == Field::kUnknownFixedLength);
-      set_guarded_list_length(GetListLength(value));
-      InitializeGuardedListLengthInObjectOffset();
+      set_guarded_list_length_and_offset(GetListLength(value_),
+                                         GetListLengthOffset(cid));
     }
 
     if (FLAG_trace_field_guards) {
-      THR_Print("    => %s\n", GuardedPropertiesAsCString());
+      THR_Print("    => %s\n", field_->GuardedPropertiesAsCString());
     }
-
-    return false;
+    return;
   }
 
   if ((cid == guarded_cid()) || ((cid == kNullCid) && is_nullable())) {
     // Class id of the assigned value matches expected class id and nullability.
 
     // If we are tracking length check if it has matches.
-    if (needs_length_check() &&
-        (guarded_list_length() != GetListLength(value))) {
+    if (field_->needs_length_check() &&
+        (guarded_list_length() != GetListLength(value_))) {
       ASSERT(guarded_list_length() != Field::kUnknownFixedLength);
-      set_guarded_list_length(Field::kNoFixedLength);
-      set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset);
-      return true;
+      set_guarded_list_length_and_offset(Field::kNoFixedLength,
+                                         Field::kUnknownLengthOffset);
+      return;
     }
 
     // Everything matches.
-    return false;
+    return;
   }
 
   if ((cid == kNullCid) && !is_nullable()) {
@@ -11288,14 +11428,11 @@
   }
 
   // If we were tracking length drop collected feedback.
-  if (needs_length_check()) {
+  if (field_->needs_length_check()) {
     ASSERT(guarded_list_length() != Field::kUnknownFixedLength);
-    set_guarded_list_length(Field::kNoFixedLength);
-    set_guarded_list_length_in_object_offset(Field::kUnknownLengthOffset);
+    set_guarded_list_length_and_offset(Field::kNoFixedLength,
+                                       Field::kUnknownLengthOffset);
   }
-
-  // Expected class id or nullability of the field changed.
-  return true;
 }
 
 bool Class::FindInstantiationOf(Zone* zone,
@@ -11555,10 +11692,10 @@
   }
 }
 
-bool Field::UpdateGuardedExactnessState(const Object& value) const {
+void FieldGuardUpdater::ReviewExactnessState() {
   if (!static_type_exactness_state().IsExactOrUninitialized()) {
     // Nothing to update.
-    return false;
+    return;
   }
 
   if (guarded_cid() == kDynamicCid) {
@@ -11568,14 +11705,14 @@
           "dynamic\n");
     }
     set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
-    return true;  // Invalidate.
+    return;
   }
 
   // If we are storing null into a field or we have an exact super type
   // then there is nothing to do.
-  if (value.IsNull() || static_type_exactness_state().IsHasExactSuperType() ||
+  if (value_.IsNull() || static_type_exactness_state().IsHasExactSuperType() ||
       static_type_exactness_state().IsHasExactSuperClass()) {
-    return false;
+    return;
   }
 
   // If we are storing a non-null value into a field that is considered
@@ -11583,16 +11720,16 @@
   // type.
   ASSERT(guarded_cid() != kNullCid);
 
-  const Type& field_type = Type::Cast(AbstractType::Handle(type()));
+  const Type& field_type = Type::Cast(AbstractType::Handle(field_->type()));
   const TypeArguments& field_type_args =
       TypeArguments::Handle(field_type.arguments());
 
-  const Instance& instance = Instance::Cast(value);
+  const Instance& instance = Instance::Cast(value_);
   TypeArguments& args = TypeArguments::Handle();
   if (static_type_exactness_state().IsTriviallyExact()) {
     args = instance.GetTypeArguments();
     if (args.ptr() == field_type_args.ptr()) {
-      return false;
+      return;
     }
 
     if (FLAG_trace_field_guards) {
@@ -11601,13 +11738,43 @@
     }
 
     set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
-    return true;
+    return;
   }
 
   ASSERT(static_type_exactness_state().IsUninitialized());
   set_static_type_exactness_state(StaticTypeExactnessState::Compute(
       field_type, instance, FLAG_trace_field_guards));
-  return true;
+  return;
+}
+
+FieldGuardUpdater::FieldGuardUpdater(const Field* field, const Object& value)
+    : field_(field),
+      value_(value),
+      guarded_cid_(field->guarded_cid()),
+      is_nullable_(field->is_nullable()),
+      list_length_(field->guarded_list_length()),
+      list_length_in_object_offset_(
+          field->guarded_list_length_in_object_offset()),
+      static_type_exactness_state_(field->static_type_exactness_state()) {
+  ReviewGuards();
+  ReviewExactnessState();
+}
+
+void FieldGuardUpdater::DoUpdate() {
+  if (does_guarded_cid_need_update_) {
+    field_->set_guarded_cid(guarded_cid_);
+  }
+  if (does_is_nullable_need_update_) {
+    field_->set_is_nullable(is_nullable_);
+  }
+  if (does_list_length_and_offset_need_update_) {
+    field_->set_guarded_list_length(list_length_);
+    field_->set_guarded_list_length_in_object_offset(
+        list_length_in_object_offset_);
+  }
+  if (does_static_type_exactness_state_need_update_) {
+    field_->set_static_type_exactness_state(static_type_exactness_state_);
+  }
 }
 
 void Field::RecordStore(const Object& value) const {
@@ -11633,20 +11800,19 @@
               value.ToCString());
   }
 
-  bool invalidate = false;
-  if (UpdateGuardedCidAndLength(value)) {
-    invalidate = true;
-  }
-  if (UpdateGuardedExactnessState(value)) {
-    invalidate = true;
-  }
-
-  if (invalidate) {
+  FieldGuardUpdater updater(this, value);
+  if (updater.IsUpdateNeeded()) {
     if (FLAG_trace_field_guards) {
       THR_Print("    => %s\n", GuardedPropertiesAsCString());
     }
-
-    DeoptimizeDependentCode();
+    // Nobody else could have updated guard state since we are holding write
+    // program lock. But we need to ensure we stop mutators as we update
+    // guard state as we can't have optimized code running with updated fields.
+    auto isolate_group = IsolateGroup::Current();
+    isolate_group->RunWithStoppedMutators([&]() {
+      updater.DoUpdate();
+      DeoptimizeDependentCode(/*are_mutators_stopped=*/true);
+    });
   }
 }
 
@@ -24413,7 +24579,7 @@
   Zone* const zone = thread->zone();
 
   const auto& data_array = Array::Handle(zone, data());
-  const intptr_t data_length = data_array.Length();
+  const intptr_t data_length = Utils::RoundUpToPowerOfTwo(data_array.Length());
   const intptr_t index_size_mult = IsLinkedHashMap() ? 1 : 2;
   const intptr_t index_size = Utils::Maximum(LinkedHashBase::kInitialIndexSize,
                                              data_length * index_size_mult);
@@ -25915,14 +26081,125 @@
                        space, WeakReference::ContainsCompressedPointers());
   return static_cast<WeakReferencePtr>(raw);
 }
-
 const char* WeakReference::ToCString() const {
   TypeArguments& type_args = TypeArguments::Handle(GetTypeArguments());
   String& type_args_name = String::Handle(type_args.UserVisibleName());
-  return OS::SCreate(Thread::Current()->zone(), "WeakReference%s",
+  return OS::SCreate(Thread::Current()->zone(), "_WeakReference%s",
                      type_args_name.ToCString());
 }
 
+const char* FinalizerBase::ToCString() const {
+  return "FinalizerBase";
+}
+
+FinalizerPtr Finalizer::New(Heap::Space space) {
+  ASSERT(IsolateGroup::Current()->object_store()->finalizer_class() !=
+         Class::null());
+  ASSERT(
+      Class::Handle(IsolateGroup::Current()->object_store()->finalizer_class())
+          .EnsureIsAllocateFinalized(Thread::Current()) == Error::null());
+
+  ObjectPtr raw =
+      Object::Allocate(Finalizer::kClassId, Finalizer::InstanceSize(), space,
+                       Finalizer::ContainsCompressedPointers());
+  return static_cast<FinalizerPtr>(raw);
+}
+
+const char* Finalizer::ToCString() const {
+  TypeArguments& type_args = TypeArguments::Handle(GetTypeArguments());
+  String& type_args_name = String::Handle(type_args.UserVisibleName());
+  return OS::SCreate(Thread::Current()->zone(), "_FinalizerImpl%s",
+                     type_args_name.ToCString());
+}
+
+NativeFinalizerPtr NativeFinalizer::New(Heap::Space space) {
+  ASSERT(IsolateGroup::Current()->object_store()->native_finalizer_class() !=
+         Class::null());
+  ASSERT(Class::Handle(
+             IsolateGroup::Current()->object_store()->native_finalizer_class())
+             .EnsureIsAllocateFinalized(Thread::Current()) == Error::null());
+  ObjectPtr raw = Object::Allocate(
+      NativeFinalizer::kClassId, NativeFinalizer::InstanceSize(), space,
+      NativeFinalizer::ContainsCompressedPointers());
+  return static_cast<NativeFinalizerPtr>(raw);
+}
+
+// Runs the finalizer if not detached, detaches the value and set external size
+// to 0.
+// TODO(http://dartbug.com/47777): Can this be merged with
+// RunNativeFinalizerCallback?
+void NativeFinalizer::RunCallback(const FinalizerEntry& entry,
+                                  const char* trace_context) const {
+  Thread* const thread = Thread::Current();
+  Zone* const zone = thread->zone();
+  IsolateGroup* const group = thread->isolate_group();
+  const intptr_t external_size = entry.external_size();
+  const auto& token_object = Object::Handle(zone, entry.token());
+  const auto& callback_pointer = Pointer::Handle(zone, this->callback());
+  const auto callback = reinterpret_cast<NativeFinalizer::Callback>(
+      callback_pointer.NativeAddress());
+  if (token_object.IsFinalizerEntry()) {
+    // Detached from Dart code.
+    ASSERT(token_object.ptr() == entry.ptr());
+    ASSERT(external_size == 0);
+    if (FLAG_trace_finalizers) {
+      THR_Print(
+          "%s: Not running native finalizer %p callback %p, "
+          "detached\n",
+          trace_context, ptr()->untag(), callback);
+    }
+  } else {
+    const auto& token = Pointer::Cast(token_object);
+    void* peer = reinterpret_cast<void*>(token.NativeAddress());
+    if (FLAG_trace_finalizers) {
+      THR_Print(
+          "%s: Running native finalizer %p callback %p "
+          "with token %p\n",
+          trace_context, ptr()->untag(), callback, peer);
+    }
+    entry.set_token(entry);
+    callback(peer);
+    if (external_size > 0) {
+      ASSERT(!entry.value()->IsSmi());
+      Heap::Space space =
+          entry.value()->IsOldObject() ? Heap::kOld : Heap::kNew;
+      if (FLAG_trace_finalizers) {
+        THR_Print("%s: Clearing external size %" Pd " bytes in %s space\n",
+                  trace_context, external_size, space == 0 ? "new" : "old");
+      }
+      group->heap()->FreedExternal(external_size, space);
+      entry.set_external_size(0);
+    }
+  }
+}
+
+const char* NativeFinalizer::ToCString() const {
+  const auto& pointer = Pointer::Handle(callback());
+  return OS::SCreate(Thread::Current()->zone(), "_NativeFinalizer %s",
+                     pointer.ToCString());
+}
+
+FinalizerEntryPtr FinalizerEntry::New(const FinalizerBase& finalizer,
+                                      Heap::Space space) {
+  ASSERT(IsolateGroup::Current()->object_store()->finalizer_entry_class() !=
+         Class::null());
+  auto& entry = FinalizerEntry::Handle();
+  entry ^=
+      Object::Allocate(FinalizerEntry::kClassId, FinalizerEntry::InstanceSize(),
+                       space, FinalizerEntry::ContainsCompressedPointers());
+  entry.set_external_size(0);
+  entry.set_finalizer(finalizer);
+  return entry.ptr();
+}
+
+void FinalizerEntry::set_finalizer(const FinalizerBase& value) const {
+  untag()->set_finalizer(value.ptr());
+}
+
+const char* FinalizerEntry::ToCString() const {
+  return "FinalizerEntry";
+}
+
 AbstractTypePtr MirrorReference::GetAbstractTypeReferent() const {
   ASSERT(Object::Handle(referent()).IsAbstractType());
   return AbstractType::Cast(Object::Handle(referent())).ptr();
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 25d7a8e..cb2be7d 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -35,7 +35,6 @@
 #include "vm/raw_object.h"
 #include "vm/report.h"
 #include "vm/static_type_exactness_state.h"
-#include "vm/tags.h"
 #include "vm/thread.h"
 #include "vm/token_position.h"
 
@@ -660,8 +659,21 @@
     return obj;
   }
 
-  cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); }
-  void set_vtable(cpp_vtable value) { *vtable_address() = value; }
+  // Memcpy to account for the strict aliasing rule.
+  // Explicit cast to silence -Wdynamic-class-memaccess.
+  // This is still undefined behavior because we're messing with the internal
+  // representation of C++ objects, but works okay in practice with
+  // -fno-strict-vtable-pointers.
+  cpp_vtable vtable() const {
+    cpp_vtable result;
+    memcpy(&result, reinterpret_cast<const void*>(this),  // NOLINT
+           sizeof(result));
+    return result;
+  }
+  void set_vtable(cpp_vtable value) {
+    memcpy(reinterpret_cast<void*>(this), &value,  // NOLINT
+           sizeof(cpp_vtable));
+  }
 
   static ObjectPtr Allocate(intptr_t cls_id,
                             intptr_t size,
@@ -804,11 +816,6 @@
     obj->SetPtr(ptr, kObjectCid);
   }
 
-  cpp_vtable* vtable_address() const {
-    uword vtable_addr = reinterpret_cast<uword>(this);
-    return reinterpret_cast<cpp_vtable*>(vtable_addr);
-  }
-
   static cpp_vtable builtin_vtables_[kNumPredefinedCids];
 
   // The static values below are singletons shared between the different
@@ -888,6 +895,18 @@
   DISALLOW_COPY_AND_ASSIGN(Object);
 };
 
+// Used to declare setters and getters for untagged object fields that are
+// defined with the WSR_COMPRESSED_POINTER_FIELD macro.
+//
+// In the precompiler, the getter transparently unwraps the
+// WeakSerializationReference, if present, to get the wrapped value of the
+// appropriate type, since a WeakSerializationReference object should be
+// transparent to the parts of the precompiler that are not the serializer.
+// Meanwhile, the setter takes an Object to allow the precompiler to set the
+// field to a WeakSerializationReference.
+//
+// Since WeakSerializationReferences are only used during precompilation,
+// this macro creates the normally expected getter and setter otherwise.
 #if defined(DART_PRECOMPILER)
 #define PRECOMPILER_WSR_FIELD_DECLARATION(Type, Name)                          \
   Type##Ptr Name() const;                                                      \
@@ -1597,6 +1616,10 @@
   static uint16_t NumNativeFieldsOf(ClassPtr clazz) {
     return clazz->untag()->num_native_fields_;
   }
+  static bool ImplementsFinalizable(ClassPtr clazz) {
+    ASSERT(Class::Handle(clazz).is_type_finalized());
+    return ImplementsFinalizableBit::decode(clazz->untag()->state_bits_);
+  }
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
   CodePtr allocation_stub() const { return untag()->allocation_stub(); }
@@ -1820,6 +1843,7 @@
     kIsAllocatedBit,
     kIsLoadedBit,
     kHasPragmaBit,
+    kImplementsFinalizableBit,
   };
   class ConstBit : public BitField<uint32_t, bool, kConstBit, 1> {};
   class ImplementedBit : public BitField<uint32_t, bool, kImplementedBit, 1> {};
@@ -1842,6 +1866,8 @@
   class IsAllocatedBit : public BitField<uint32_t, bool, kIsAllocatedBit, 1> {};
   class IsLoadedBit : public BitField<uint32_t, bool, kIsLoadedBit, 1> {};
   class HasPragmaBit : public BitField<uint32_t, bool, kHasPragmaBit, 1> {};
+  class ImplementsFinalizableBit
+      : public BitField<uint32_t, bool, kImplementsFinalizableBit, 1> {};
 
   void set_name(const String& value) const;
   void set_user_name(const String& value) const;
@@ -1880,6 +1906,12 @@
   bool has_pragma() const { return HasPragmaBit::decode(state_bits()); }
   void set_has_pragma(bool has_pragma) const;
 
+  bool implements_finalizable() const {
+    ASSERT(is_type_finalized());
+    return ImplementsFinalizable(ptr());
+  }
+  void set_implements_finalizable(bool value) const;
+
  private:
   void set_functions(const Array& value) const;
   void set_fields(const Array& value) const;
@@ -2631,6 +2663,7 @@
   void PrintName(const NameFormattingParams& params,
                  BaseTextBuffer* printer) const;
   StringPtr QualifiedScrubbedName() const;
+  const char* QualifiedScrubbedNameCString() const;
   StringPtr QualifiedUserVisibleName() const;
   const char* QualifiedUserVisibleNameCString() const;
 
@@ -3174,11 +3207,9 @@
   // deoptimize, since we won't generate deoptimization info or register
   // dependencies. It will be compiled into optimized code immediately when it's
   // run.
-  bool ForceOptimize() const {
-    return IsFfiFromAddress() || IsFfiGetAddress() || IsFfiLoad() ||
-           IsFfiStore() || IsFfiTrampoline() || IsFfiAsExternalTypedData() ||
-           IsTypedDataViewFactory() || IsUtf8Scan() || IsGetNativeField();
-  }
+  bool ForceOptimize() const;
+
+  bool IsFinalizerForceOptimized() const;
 
   bool CanBeInlined() const;
 
@@ -4390,7 +4421,7 @@
   void RegisterDependentCode(const Code& code) const;
 
   // Deoptimize all dependent code objects.
-  void DeoptimizeDependentCode() const;
+  void DeoptimizeDependentCode(bool are_mutators_stopped = false) const;
 
   // Used by background compiler to check consistency of field copy with its
   // original.
@@ -4509,15 +4540,6 @@
   class IsNonNullableIntBit
       : public BitField<uint16_t, bool, kIsNonNullableIntBit, 1> {};
 
-  // Update guarded cid and guarded length for this field. Returns true, if
-  // deoptimization of dependent code is required.
-  bool UpdateGuardedCidAndLength(const Object& value) const;
-
-  // Update guarded exactness state for this field. Returns true, if
-  // deoptimization of dependent code is required.
-  // Assumes that guarded cid was already updated.
-  bool UpdateGuardedExactnessState(const Object& value) const;
-
   // Force this field's guard to be dynamic and deoptimize dependent code.
   void ForceDynamicGuardedCidAndLength() const;
 
@@ -4719,6 +4741,7 @@
   void SetName(const String& name) const;
 
   StringPtr url() const { return untag()->url(); }
+  static StringPtr UrlOf(LibraryPtr lib) { return lib->untag()->url(); }
   StringPtr private_key() const { return untag()->private_key(); }
   bool LoadNotStarted() const {
     return untag()->load_state_ == UntaggedLibrary::kAllocated;
@@ -5744,7 +5767,7 @@
   // pc descriptors table to visit objects if any in the table.
   // Note: never return a reference to a UntaggedPcDescriptors::PcDescriptorRec
   // as the object can move.
-  class Iterator : ValueObject {
+  class Iterator : public ValueObject {
    public:
     Iterator(const PcDescriptors& descriptors, intptr_t kind_mask)
         : descriptors_(descriptors),
@@ -5929,9 +5952,7 @@
   static intptr_t UnroundedSize(intptr_t length) {
     return HeaderSize() + length;
   }
-  static intptr_t InstanceSize() {
-    return 0;
-  }
+  static intptr_t InstanceSize() { return 0; }
   static intptr_t InstanceSize(intptr_t length) {
     return RoundedAllocationSize(UnroundedSize(length));
   }
@@ -9732,7 +9753,7 @@
 };
 
 // Synchronize with implementation in compiler (intrinsifier).
-class StringHasher : ValueObject {
+class StringHasher : public ValueObject {
  public:
   StringHasher() : hash_(0) {}
   void Add(uint16_t code_unit) { hash_ = CombineHashes(hash_, code_unit); }
@@ -11304,7 +11325,7 @@
   //  - There are no checks for concurrent modifications.
   //  - Accessing a key or value before the first call to MoveNext and after
   //    MoveNext returns false will result in crashes.
-  class Iterator : ValueObject {
+  class Iterator : public ValueObject {
    public:
     explicit Iterator(const LinkedHashMap& map)
         : data_(Array::Handle(map.data())),
@@ -11400,7 +11421,7 @@
   //  - There are no checks for concurrent modifications.
   //  - Accessing a key or value before the first call to MoveNext and after
   //    MoveNext returns false will result in crashes.
-  class Iterator : ValueObject {
+  class Iterator : public ValueObject {
    public:
     explicit Iterator(const LinkedHashSet& set)
         : data_(Array::Handle(set.data())),
@@ -11989,7 +12010,7 @@
   }
 
   static void Clear(WeakPropertyPtr raw_weak) {
-    ASSERT(raw_weak->untag()->next_ ==
+    ASSERT(raw_weak->untag()->next_seen_by_gc_ ==
            CompressedWeakPropertyPtr(WeakProperty::null()));
     // This action is performed by the GC. No barrier.
     raw_weak->untag()->key_ = Object::null();
@@ -12021,15 +12042,159 @@
     return RoundedAllocationSize(sizeof(UntaggedWeakReference));
   }
 
-  static void Clear(WeakReferencePtr raw_weak) {
-    ASSERT(raw_weak->untag()->next_ ==
-           CompressedWeakReferencePtr(WeakReference::null()));
-    // This action is performed by the GC. No barrier.
-    raw_weak->untag()->target_ = Object::null();
+ private:
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(WeakReference, Instance);
+  friend class Class;
+};
+
+class FinalizerBase;
+class FinalizerEntry : public Instance {
+ public:
+  ObjectPtr value() const { return untag()->value(); }
+  void set_value(const Object& value) const { untag()->set_value(value.ptr()); }
+  static intptr_t value_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, value_);
+  }
+
+  ObjectPtr detach() const { return untag()->detach(); }
+  void set_detach(const Object& value) const {
+    untag()->set_detach(value.ptr());
+  }
+  static intptr_t detach_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, detach_);
+  }
+
+  ObjectPtr token() const { return untag()->token(); }
+  void set_token(const Object& value) const { untag()->set_token(value.ptr()); }
+  static intptr_t token_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, token_);
+  }
+
+  FinalizerBasePtr finalizer() const { return untag()->finalizer(); }
+  void set_finalizer(const FinalizerBase& value) const;
+  static intptr_t finalizer_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, finalizer_);
+  }
+
+  FinalizerEntryPtr next() const { return untag()->next(); }
+  void set_next(const FinalizerEntry& value) const {
+    untag()->set_next(value.ptr());
+  }
+  static intptr_t next_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, next_);
+  }
+
+  intptr_t external_size() const { return untag()->external_size(); }
+  void set_external_size(intptr_t value) const {
+    untag()->set_external_size(value);
+  }
+  static intptr_t external_size_offset() {
+    return OFFSET_OF(UntaggedFinalizerEntry, external_size_);
+  }
+
+  static intptr_t InstanceSize() {
+    return RoundedAllocationSize(sizeof(UntaggedFinalizerEntry));
+  }
+
+  // Allocates a new FinalizerEntry, initializing the external size (to 0) and
+  // finalizer.
+  //
+  // Should only be used for object tests.
+  //
+  // Does not initialize `value`, `token`, and `detach` to allow for flexible
+  // testing code setting those manually.
+  //
+  // Does _not_ add the entry to the finalizer. We could add the entry to
+  // finalizer.all_entries.data, but we have no way of initializing the hashset
+  // index.
+  static FinalizerEntryPtr New(const FinalizerBase& finalizer,
+                               Heap::Space space = Heap::kNew);
+
+ private:
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(FinalizerEntry, Instance);
+  friend class Class;
+};
+
+class FinalizerBase : public Instance {
+ public:
+  static intptr_t isolate_offset() {
+    return OFFSET_OF(UntaggedFinalizerBase, isolate_);
+  }
+  Isolate* isolate() const { return untag()->isolate_; }
+  void set_isolate(Isolate* value) const { untag()->isolate_ = value; }
+
+  static intptr_t detachments_offset() {
+    return OFFSET_OF(UntaggedFinalizerBase, detachments_);
+  }
+
+  LinkedHashSetPtr all_entries() const { return untag()->all_entries(); }
+  void set_all_entries(const LinkedHashSet& value) const {
+    untag()->set_all_entries(value.ptr());
+  }
+  static intptr_t all_entries_offset() {
+    return OFFSET_OF(UntaggedFinalizerBase, all_entries_);
+  }
+
+  FinalizerEntryPtr entries_collected() const {
+    return untag()->entries_collected();
+  }
+  void set_entries_collected(const FinalizerEntry& value) const {
+    untag()->set_entries_collected(value.ptr());
+  }
+  static intptr_t entries_collected_offset() {
+    return OFFSET_OF(UntaggedFinalizer, entries_collected_);
   }
 
  private:
-  FINAL_HEAP_OBJECT_IMPLEMENTATION(WeakReference, Instance);
+  HEAP_OBJECT_IMPLEMENTATION(FinalizerBase, Instance);
+  friend class Class;
+};
+
+class Finalizer : public FinalizerBase {
+ public:
+  static intptr_t type_arguments_offset() {
+    return OFFSET_OF(UntaggedFinalizer, type_arguments_);
+  }
+
+  ObjectPtr callback() const { return untag()->callback(); }
+  static intptr_t callback_offset() {
+    return OFFSET_OF(UntaggedFinalizer, callback_);
+  }
+
+  static intptr_t InstanceSize() {
+    return RoundedAllocationSize(sizeof(UntaggedFinalizer));
+  }
+
+  static FinalizerPtr New(Heap::Space space = Heap::kNew);
+
+ private:
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(Finalizer, FinalizerBase);
+  friend class Class;
+};
+
+class NativeFinalizer : public FinalizerBase {
+ public:
+  typedef void (*Callback)(void*);
+
+  PointerPtr callback() const { return untag()->callback(); }
+  void set_callback(const Pointer& value) const {
+    untag()->set_callback(value.ptr());
+  }
+  static intptr_t callback_offset() {
+    return OFFSET_OF(UntaggedNativeFinalizer, callback_);
+  }
+
+  static intptr_t InstanceSize() {
+    return RoundedAllocationSize(sizeof(UntaggedNativeFinalizer));
+  }
+
+  static NativeFinalizerPtr New(Heap::Space space = Heap::kNew);
+
+  void RunCallback(const FinalizerEntry& entry,
+                   const char* trace_context) const;
+
+ private:
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(NativeFinalizer, FinalizerBase);
   friend class Class;
 };
 
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 0eeb88c..66ebd79 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -35,6 +35,10 @@
   V(ExceptionHandlers)                                                         \
   V(FfiTrampolineData)                                                         \
   V(Field)                                                                     \
+  V(Finalizer)                                                                 \
+  V(FinalizerBase)                                                             \
+  V(FinalizerEntry)                                                            \
+  V(NativeFinalizer)                                                           \
   V(Function)                                                                  \
   V(FunctionType)                                                              \
   V(FutureOr)                                                                  \
@@ -585,13 +589,23 @@
                         Class::Handle(class_table_->At(cid)).ToCString());
         return false;
       }
+      const bool implements_finalizable =
+          Class::ImplementsFinalizable(class_table_->At(cid));
+      if (implements_finalizable) {
+        exception_msg_ = OS::SCreate(
+            zone_,
+            "Illegal argument in isolate message: (object implements "
+            "Finalizable - %s)",
+            Class::Handle(class_table_->At(cid)).ToCString());
+        return false;
+      }
       return true;
     }
 #define HANDLE_ILLEGAL_CASE(Type)                                              \
   case k##Type##Cid: {                                                         \
     exception_msg_ =                                                           \
         "Illegal argument in isolate message: "                                \
-        "(object is a" #Type ")";                                              \
+        "(object is a " #Type ")";                                             \
     return false;                                                              \
   }
 
@@ -600,6 +614,8 @@
       // those are the only non-abstract classes (so we avoid checking more cids
       // here that cannot happen in reality)
       HANDLE_ILLEGAL_CASE(DynamicLibrary)
+      HANDLE_ILLEGAL_CASE(Finalizer)
+      HANDLE_ILLEGAL_CASE(NativeFinalizer)
       HANDLE_ILLEGAL_CASE(MirrorReference)
       HANDLE_ILLEGAL_CASE(Pointer)
       HANDLE_ILLEGAL_CASE(ReceivePort)
@@ -1362,8 +1378,8 @@
         Object::null());
     // To satisfy some ASSERT()s in GC we'll use Object:null() explicitly here.
     Base::StoreCompressedPointerNoBarrier(
-        Types::GetWeakPropertyPtr(to), OFFSET_OF(UntaggedWeakProperty, next_),
-        Object::null());
+        Types::GetWeakPropertyPtr(to),
+        OFFSET_OF(UntaggedWeakProperty, next_seen_by_gc_), Object::null());
     Base::EnqueueWeakProperty(from);
   }
 
@@ -1380,8 +1396,8 @@
         from, to, OFFSET_OF(UntaggedWeakReference, type_arguments_));
     // To satisfy some ASSERT()s in GC we'll use Object:null() explicitly here.
     Base::StoreCompressedPointerNoBarrier(
-        Types::GetWeakReferencePtr(to), OFFSET_OF(UntaggedWeakReference, next_),
-        Object::null());
+        Types::GetWeakReferencePtr(to),
+        OFFSET_OF(UntaggedWeakReference, next_seen_by_gc_), Object::null());
     Base::EnqueueWeakReference(from);
   }
 
@@ -1812,10 +1828,10 @@
       }
 
       if (FLAG_gc_on_foc_slow_path) {
-        // We use kLowMemory to force the GC to compact, which is more likely to
-        // discover untracked pointers (and other issues, like incorrect class
-        // table).
-        thread_->heap()->CollectAllGarbage(GCReason::kLowMemory);
+        // We force the GC to compact, which is more likely to discover
+        // untracked pointers (and other issues, like incorrect class table).
+        thread_->heap()->CollectAllGarbage(GCReason::kDebugging,
+                                           /*compact=*/true);
       }
 
       // Fast copy failed due to
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 210f508..eab9078 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -1700,6 +1700,44 @@
   jsobj.AddProperty("target", target_handle);
 }
 
+void FinalizerBase::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  UNREACHABLE();
+}
+
+void Finalizer::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  JSONObject jsobj(stream);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  jsobj.AddProperty("kind", "Finalizer");
+  jsobj.AddServiceId(*this);
+  if (ref) {
+    return;
+  }
+
+  const Object& finalizer_callback = Object::Handle(callback());
+  jsobj.AddProperty("callback", finalizer_callback);
+
+  // Not exposing entries.
+}
+
+void NativeFinalizer::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  JSONObject jsobj(stream);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  jsobj.AddProperty("kind", "NativeFinalizer");
+  jsobj.AddServiceId(*this);
+  if (ref) {
+    return;
+  }
+
+  const Object& finalizer_callback = Object::Handle(callback());
+  jsobj.AddProperty("callback_address", finalizer_callback);
+
+  // Not exposing entries.
+}
+
+void FinalizerEntry::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  UNREACHABLE();
+}
+
 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
   PrintSharedInstanceJSON(&jsobj, ref);
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 23f9b4d..056d9e6 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -78,6 +78,8 @@
   resume_capabilities_ = GrowableObjectArray::New();
   exit_listeners_ = GrowableObjectArray::New();
   error_listeners_ = GrowableObjectArray::New();
+  dart_args_1_ = Array::New(1);
+  dart_args_2_ = Array::New(2);
 
   // Allocate pre-allocated unhandled exception object initialized with the
   // pre-allocated OutOfMemoryError.
@@ -467,7 +469,33 @@
   auto* const thread = Thread::Current();
   SafepointWriteRwLocker locker(thread,
                                 thread->isolate_group()->program_lock());
-  // TODO(http://dartbug.com/47777): Implement finalizers.
+  if (handle_finalizer_message_function_.load() == Function::null()) {
+    auto* const zone = thread->zone();
+    auto& cls = Class::Handle(zone);
+    auto& function = Function::Handle(zone);
+    auto& error = Error::Handle(zone);
+
+    const auto& ffi_lib = Library::Handle(zone, Library::FfiLibrary());
+    ASSERT(!ffi_lib.IsNull());
+
+    cls = finalizer_class();
+    ASSERT(!cls.IsNull());
+    error = cls.EnsureIsFinalized(thread);
+    ASSERT(error.IsNull());
+    function =
+        cls.LookupFunctionAllowPrivate(Symbols::_handleFinalizerMessage());
+    ASSERT(!function.IsNull());
+    handle_finalizer_message_function_.store(function.ptr());
+
+    cls = native_finalizer_class();
+    ASSERT(!cls.IsNull());
+    error = cls.EnsureIsFinalized(thread);
+    ASSERT(error.IsNull());
+    function = cls.LookupFunctionAllowPrivate(
+        Symbols::_handleNativeFinalizerMessage());
+    ASSERT(!function.IsNull());
+    handle_native_finalizer_message_function_.store(function.ptr());
+  }
 }
 
 void ObjectStore::LazyInitIsolateMembers() {
@@ -512,13 +540,14 @@
     auto* const zone = thread->zone();
     auto& cls = Class::Handle(zone);
     auto& field = Field::Handle(zone);
+    auto& error = Error::Handle(zone);
 
     const auto& internal_lib =
         Library::Handle(zone, Library::InternalLibrary());
     cls = internal_lib.LookupClass(Symbols::Symbol());
     ASSERT(!cls.IsNull());
-    const auto& error = cls.EnsureIsFinalized(thread);
-    ASSERT(error == Error::null());
+    error = cls.EnsureIsFinalized(thread);
+    ASSERT(error.IsNull());
     symbol_class_.store(cls.ptr());
 
     field = cls.LookupInstanceFieldAllowPrivate(Symbols::_name());
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index f86b8c5..b9ba248 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -55,6 +55,8 @@
   LAZY_CORE(Function, _object_to_string_function)                              \
   LAZY_INTERNAL(Class, symbol_class)                                           \
   LAZY_INTERNAL(Field, symbol_name_field)                                      \
+  LAZY_FFI(Function, handle_finalizer_message_function)                        \
+  LAZY_FFI(Function, handle_native_finalizer_message_function)                 \
   LAZY_ASYNC(Type, non_nullable_future_rare_type)                              \
   LAZY_ASYNC(Type, non_nullable_future_never_type)                             \
   LAZY_ASYNC(Type, nullable_future_null_type)                                  \
@@ -126,6 +128,9 @@
   RW(Class, expando_class)                                                     \
   RW(Class, weak_property_class)                                               \
   RW(Class, weak_reference_class)                                              \
+  RW(Class, finalizer_class)                                                   \
+  RW(Class, finalizer_entry_class)                                             \
+  RW(Class, native_finalizer_class)                                            \
   ARW_AR(Array, symbol_table)                                                  \
   RW(Array, canonical_types)                                                   \
   RW(Array, canonical_function_types)                                          \
@@ -315,8 +320,8 @@
   RW(UnhandledException, preallocated_unhandled_exception)                     \
   RW(StackTrace, preallocated_stack_trace)                                     \
   RW(UnwindError, preallocated_unwind_error)                                   \
-  RW(Array, dart_args_1)                                                       \
-  RW(Array, dart_args_2)                                                       \
+  R_(Array, dart_args_1)                                                       \
+  R_(Array, dart_args_2)                                                       \
   R_(GrowableObjectArray, resume_capabilities)                                 \
   R_(GrowableObjectArray, exit_listeners)                                      \
   R_(GrowableObjectArray, error_listeners)
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index ac5c703..e042e93 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include <limits>
+#include <memory>
 
 #include "include/dart_api.h"
 
@@ -16,17 +17,21 @@
 #include "vm/code_descriptors.h"
 #include "vm/compiler/assembler/assembler.h"
 #include "vm/compiler/compiler_state.h"
+#include "vm/compiler/runtime_api.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_entry.h"
 #include "vm/debugger.h"
 #include "vm/debugger_api_impl_test.h"
+#include "vm/flags.h"
 #include "vm/isolate.h"
 #include "vm/malloc_hooks.h"
+#include "vm/message_handler.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
 #include "vm/simulator.h"
 #include "vm/symbols.h"
+#include "vm/tagged_pointer.h"
 #include "vm/unit_test.h"
 
 namespace dart {
@@ -4005,6 +4010,1273 @@
   WeakReference_Preserve_ReachableThroughWeakProperty(thread, Heap::kOld);
 }
 
+static int NumEntries(const FinalizerEntry& entry, intptr_t acc = 0) {
+  if (entry.IsNull()) {
+    return acc;
+  }
+  return NumEntries(FinalizerEntry::Handle(entry.next()), acc + 1);
+}
+
+static void Finalizer_PreserveOne(Thread* thread,
+                                  Heap::Space space,
+                                  bool with_detach) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+
+  const auto& finalizer = Finalizer::Handle(Finalizer::New(space));
+  finalizer.set_isolate(thread->isolate());
+  const auto& entry =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, space));
+  const auto& value = String::Handle(OneByteString::New("value", space));
+  entry.set_value(value);
+  auto& detach = Object::Handle();
+  if (with_detach) {
+    detach = OneByteString::New("detach", space);
+  } else {
+    detach = Object::null();
+  }
+  entry.set_detach(detach);
+  const auto& token = String::Handle(OneByteString::New("token", space));
+  entry.set_token(token);
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  // Nothing in the entry should have been collected.
+  EXPECT_NE(Object::null(), entry.value());
+  EXPECT((entry.detach() == Object::null()) ^ with_detach);
+  EXPECT_NE(Object::null(), entry.token());
+
+  // The entry should not have moved to the collected list.
+  EXPECT_EQ(0,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  // We should have no messages.
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveNoDetachOne_NewSpace) {
+  Finalizer_PreserveOne(thread, Heap::kNew, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveNoDetachOne_OldSpace) {
+  Finalizer_PreserveOne(thread, Heap::kOld, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveWithDetachOne_NewSpace) {
+  Finalizer_PreserveOne(thread, Heap::kNew, true);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveWithDetachOne_OldSpace) {
+  Finalizer_PreserveOne(thread, Heap::kOld, true);
+}
+
+static void Finalizer_ClearDetachOne(Thread* thread, Heap::Space space) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+
+  const auto& finalizer = Finalizer::Handle(Finalizer::New(space));
+  finalizer.set_isolate(thread->isolate());
+  const auto& entry =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, space));
+  const auto& value = String::Handle(OneByteString::New("value", space));
+  entry.set_value(value);
+  const auto& token = String::Handle(OneByteString::New("token", space));
+  entry.set_token(token);
+
+  {
+    HANDLESCOPE(thread);
+    const auto& detach = String::Handle(OneByteString::New("detach", space));
+    entry.set_detach(detach);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  // Detach should have been collected.
+  EXPECT_NE(Object::null(), entry.value());
+  EXPECT_EQ(Object::null(), entry.detach());
+  EXPECT_NE(Object::null(), entry.token());
+
+  // The entry should not have moved to the collected list.
+  EXPECT_EQ(0,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  // We should have no messages.
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearDetachOne_NewSpace) {
+  Finalizer_ClearDetachOne(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearDetachOne_OldSpace) {
+  Finalizer_ClearDetachOne(thread, Heap::kOld);
+}
+
+static void Finalizer_ClearValueOne(Thread* thread,
+                                    Heap::Space space,
+                                    bool null_token) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+
+  const auto& finalizer = Finalizer::Handle(Finalizer::New(space));
+  finalizer.set_isolate(thread->isolate());
+  const auto& entry =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, space));
+  const auto& detach = String::Handle(OneByteString::New("detach", space));
+  auto& token = Object::Handle();
+  if (null_token) {
+    // Null is a valid token in Dart finalizers.
+    token = Object::null();
+  } else {
+    token = OneByteString::New("token", space);
+  }
+  entry.set_token(token);
+  entry.set_detach(detach);
+
+  {
+    HANDLESCOPE(thread);
+    const auto& value = String::Handle(OneByteString::New("value", space));
+    entry.set_value(value);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  // Value should have been collected.
+  EXPECT_EQ(Object::null(), entry.value());
+  EXPECT_NE(Object::null(), entry.detach());
+
+  // The entry should have moved to the collected list.
+  EXPECT_EQ(1,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  // We should have 1 message.
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(1, aq.queue()->Length());
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueOne_NewSpace) {
+  Finalizer_ClearValueOne(thread, Heap::kNew, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueOne_OldSpace) {
+  Finalizer_ClearValueOne(thread, Heap::kOld, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueNullTokenOne_NewSpace) {
+  Finalizer_ClearValueOne(thread, Heap::kNew, true);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueNullTokenOne_OldSpace) {
+  Finalizer_ClearValueOne(thread, Heap::kOld, true);
+}
+
+static void Finalizer_DetachOne(Thread* thread,
+                                Heap::Space space,
+                                bool clear_value) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+
+  const auto& finalizer = Finalizer::Handle(Finalizer::New(space));
+  finalizer.set_isolate(thread->isolate());
+  const auto& entry =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, space));
+  const auto& detach = String::Handle(OneByteString::New("detach", space));
+  entry.set_detach(detach);
+
+  // Simulate calling detach, setting the token of the entry to the entry.
+  entry.set_token(entry);
+
+  auto& value = String::Handle();
+  {
+    HANDLESCOPE(thread);
+
+    const auto& object = String::Handle(OneByteString::New("value", space));
+    entry.set_value(object);
+    if (!clear_value) {
+      value = object.ptr();
+    }
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  EXPECT((entry.value() == Object::null()) ^ !clear_value);
+  EXPECT_NE(Object::null(), entry.detach());
+  EXPECT_EQ(entry.ptr(), entry.token());
+
+  // The entry should have been removed entirely
+  EXPECT_EQ(0,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  // We should have no message.
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_DetachOne_NewSpace) {
+  Finalizer_DetachOne(thread, Heap::kNew, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_DetachOne_OldSpace) {
+  Finalizer_DetachOne(thread, Heap::kOld, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_DetachAndClearValueOne_NewSpace) {
+  Finalizer_DetachOne(thread, Heap::kNew, true);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_DetachAndClearValueOne_OldSpace) {
+  Finalizer_DetachOne(thread, Heap::kOld, true);
+}
+
+static void Finalizer_GcFinalizer(Thread* thread, Heap::Space space) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+
+  const auto& detach = String::Handle(OneByteString::New("detach", space));
+  const auto& token = String::Handle(OneByteString::New("token", space));
+
+  {
+    HANDLESCOPE(thread);
+    const auto& finalizer = Finalizer::Handle(Finalizer::New(space));
+    finalizer.set_isolate(thread->isolate());
+    const auto& entry =
+        FinalizerEntry::Handle(FinalizerEntry::New(finalizer, space));
+    entry.set_detach(detach);
+    entry.set_token(token);
+    const auto& value = String::Handle(OneByteString::New("value", space));
+    entry.set_value(value);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  // We should have no message, the Finalizer itself has been GCed.
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(0, aq.queue()->Length());
+  }
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_GcFinalizer_NewSpace) {
+  Finalizer_GcFinalizer(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_GcFinalizer_OldSpace) {
+  Finalizer_GcFinalizer(thread, Heap::kOld);
+}
+
+static void Finalizer_TwoEntriesCrossGen(
+    Thread* thread,
+    Heap::Space* spaces,
+    bool collect_old_space,
+    bool collect_new_space,
+    bool evacuate_new_space_and_collect_old_space,
+    bool clear_value_1,
+    bool clear_value_2,
+    bool clear_detach_1,
+    bool clear_detach_2) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  // We're reusing the isolate in a loop, so there are messages from previous
+  // runs of this test.
+  intptr_t queue_length_start = 0;
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    queue_length_start = aq.queue()->Length();
+  }
+
+  const auto& finalizer = Finalizer::Handle(Finalizer::New(spaces[0]));
+  finalizer.set_isolate(thread->isolate());
+  const auto& entry1 =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, spaces[1]));
+  const auto& entry2 =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, spaces[2]));
+
+  auto& value1 = String::Handle();
+  auto& detach1 = String::Handle();
+  const auto& token1 = String::Handle(OneByteString::New("token1", spaces[3]));
+  entry1.set_token(token1);
+
+  auto& value2 = String::Handle();
+  auto& detach2 = String::Handle();
+  const auto& token2 = String::Handle(OneByteString::New("token2", spaces[4]));
+  entry2.set_token(token2);
+  entry2.set_detach(detach2);
+
+  {
+    HANDLESCOPE(thread);
+    auto& object = String::Handle();
+
+    object ^= OneByteString::New("value1", spaces[5]);
+    entry1.set_value(object);
+    if (!clear_value_1) {
+      value1 = object.ptr();
+    }
+
+    object ^= OneByteString::New("detach", spaces[6]);
+    entry1.set_detach(object);
+    if (!clear_detach_1) {
+      detach1 = object.ptr();
+    }
+
+    object ^= OneByteString::New("value2", spaces[7]);
+    entry2.set_value(object);
+    if (!clear_value_2) {
+      value2 = object.ptr();
+    }
+
+    object ^= OneByteString::New("detach", spaces[8]);
+    entry2.set_detach(object);
+    if (!clear_detach_2) {
+      detach2 = object.ptr();
+    }
+  }
+
+  if (collect_old_space) {
+    GCTestHelper::CollectOldSpace();
+  }
+  if (collect_new_space) {
+    GCTestHelper::CollectNewSpace();
+  }
+  if (evacuate_new_space_and_collect_old_space) {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  EXPECT((entry1.value() == Object::null()) ^ !clear_value_1);
+  EXPECT((entry2.value() == Object::null()) ^ !clear_value_2);
+  EXPECT((entry1.detach() == Object::null()) ^ !clear_detach_1);
+  EXPECT((entry2.detach() == Object::null()) ^ !clear_detach_2);
+  EXPECT_NE(Object::null(), entry1.token());
+  EXPECT_NE(Object::null(), entry2.token());
+
+  const intptr_t expect_num_cleared =
+      (clear_value_1 ? 1 : 0) + (clear_value_2 ? 1 : 0);
+  EXPECT_EQ(expect_num_cleared,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  const intptr_t expect_num_messages = expect_num_cleared == 0 ? 0 : 1;
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(expect_num_messages + queue_length_start, aq.queue()->Length());
+  }
+}
+
+const intptr_t kFinalizerTwoEntriesNumObjects = 9;
+
+static void Finalizer_TwoEntries(Thread* thread,
+                                 Heap::Space space,
+                                 bool clear_value_1,
+                                 bool clear_value_2,
+                                 bool clear_detach_1,
+                                 bool clear_detach_2) {
+  const bool collect_old_space = true;
+  const bool collect_new_space = space == Heap::kNew;
+  const bool evacuate_new_space_and_collect_old_space = !collect_new_space;
+
+  Heap::Space spaces[kFinalizerTwoEntriesNumObjects];
+  for (intptr_t i = 0; i < kFinalizerTwoEntriesNumObjects; i++) {
+    spaces[i] = space;
+  }
+  Finalizer_TwoEntriesCrossGen(
+      thread, spaces, collect_old_space, collect_new_space,
+      evacuate_new_space_and_collect_old_space, clear_value_1, clear_value_2,
+      clear_detach_1, clear_detach_2);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueTwo_NewSpace) {
+  Finalizer_TwoEntries(thread, Heap::kNew, true, true, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearValueTwo_OldSpace) {
+  Finalizer_TwoEntries(thread, Heap::kOld, true, true, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearFirstValue_NewSpace) {
+  Finalizer_TwoEntries(thread, Heap::kNew, true, false, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearFirstValue_OldSpace) {
+  Finalizer_TwoEntries(thread, Heap::kOld, true, false, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearSecondValue_NewSpace) {
+  Finalizer_TwoEntries(thread, Heap::kNew, false, true, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearSecondValue_OldSpace) {
+  Finalizer_TwoEntries(thread, Heap::kOld, false, true, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveTwo_NewSpace) {
+  Finalizer_TwoEntries(thread, Heap::kNew, false, false, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_PreserveTwo_OldSpace) {
+  Finalizer_TwoEntries(thread, Heap::kOld, false, false, false, false);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearDetachTwo_NewSpace) {
+  Finalizer_TwoEntries(thread, Heap::kNew, false, false, true, true);
+}
+
+ISOLATE_UNIT_TEST_CASE(Finalizer_ClearDetachTwo_OldSpace) {
+  Finalizer_TwoEntries(thread, Heap::kOld, false, false, true, true);
+}
+
+static void Finalizer_TwoEntriesCrossGen(Thread* thread, intptr_t test_i) {
+  ASSERT(test_i < (1 << kFinalizerTwoEntriesNumObjects));
+  Heap::Space spaces[kFinalizerTwoEntriesNumObjects];
+  for (intptr_t i = 0; i < kFinalizerTwoEntriesNumObjects; i++) {
+    spaces[i] = ((test_i >> i) & 0x1) == 0x1 ? Heap::kOld : Heap::kNew;
+  }
+  // Either collect or evacuate new space.
+  for (const bool collect_new_space : {false, true}) {
+    // Always run old space collection first.
+    const bool collect_old_space = true;
+    // Always run old space collection after new space.
+    const bool evacuate_new_space_and_collect_old_space = true;
+    for (intptr_t test_j = 0; test_j < 16; test_j++) {
+      const bool clear_value_1 = (test_j >> 0 & 0x1) == 0x1;
+      const bool clear_value_2 = (test_j >> 1 & 0x1) == 0x1;
+      const bool clear_detach_1 = (test_j >> 2 & 0x1) == 0x1;
+      const bool clear_detach_2 = (test_j >> 3 & 0x1) == 0x1;
+      Finalizer_TwoEntriesCrossGen(
+          thread, spaces, collect_old_space, collect_new_space,
+          evacuate_new_space_and_collect_old_space, clear_value_1,
+          clear_value_2, clear_detach_1, clear_detach_2);
+    }
+  }
+}
+#define FINALIZER_CROSS_GEN_TEST_CASE(n)                                       \
+  ISOLATE_UNIT_TEST_CASE(Finalizer_CrossGen_##n) {                             \
+    Finalizer_TwoEntriesCrossGen(thread, n);                                   \
+  }
+
+#define REPEAT_512(V)                                                          \
+  V(0)                                                                         \
+  V(1)                                                                         \
+  V(2)                                                                         \
+  V(3)                                                                         \
+  V(4)                                                                         \
+  V(5)                                                                         \
+  V(6)                                                                         \
+  V(7)                                                                         \
+  V(8)                                                                         \
+  V(9)                                                                         \
+  V(10)                                                                        \
+  V(11)                                                                        \
+  V(12)                                                                        \
+  V(13)                                                                        \
+  V(14)                                                                        \
+  V(15)                                                                        \
+  V(16)                                                                        \
+  V(17)                                                                        \
+  V(18)                                                                        \
+  V(19)                                                                        \
+  V(20)                                                                        \
+  V(21)                                                                        \
+  V(22)                                                                        \
+  V(23)                                                                        \
+  V(24)                                                                        \
+  V(25)                                                                        \
+  V(26)                                                                        \
+  V(27)                                                                        \
+  V(28)                                                                        \
+  V(29)                                                                        \
+  V(30)                                                                        \
+  V(31)                                                                        \
+  V(32)                                                                        \
+  V(33)                                                                        \
+  V(34)                                                                        \
+  V(35)                                                                        \
+  V(36)                                                                        \
+  V(37)                                                                        \
+  V(38)                                                                        \
+  V(39)                                                                        \
+  V(40)                                                                        \
+  V(41)                                                                        \
+  V(42)                                                                        \
+  V(43)                                                                        \
+  V(44)                                                                        \
+  V(45)                                                                        \
+  V(46)                                                                        \
+  V(47)                                                                        \
+  V(48)                                                                        \
+  V(49)                                                                        \
+  V(50)                                                                        \
+  V(51)                                                                        \
+  V(52)                                                                        \
+  V(53)                                                                        \
+  V(54)                                                                        \
+  V(55)                                                                        \
+  V(56)                                                                        \
+  V(57)                                                                        \
+  V(58)                                                                        \
+  V(59)                                                                        \
+  V(60)                                                                        \
+  V(61)                                                                        \
+  V(62)                                                                        \
+  V(63)                                                                        \
+  V(64)                                                                        \
+  V(65)                                                                        \
+  V(66)                                                                        \
+  V(67)                                                                        \
+  V(68)                                                                        \
+  V(69)                                                                        \
+  V(70)                                                                        \
+  V(71)                                                                        \
+  V(72)                                                                        \
+  V(73)                                                                        \
+  V(74)                                                                        \
+  V(75)                                                                        \
+  V(76)                                                                        \
+  V(77)                                                                        \
+  V(78)                                                                        \
+  V(79)                                                                        \
+  V(80)                                                                        \
+  V(81)                                                                        \
+  V(82)                                                                        \
+  V(83)                                                                        \
+  V(84)                                                                        \
+  V(85)                                                                        \
+  V(86)                                                                        \
+  V(87)                                                                        \
+  V(88)                                                                        \
+  V(89)                                                                        \
+  V(90)                                                                        \
+  V(91)                                                                        \
+  V(92)                                                                        \
+  V(93)                                                                        \
+  V(94)                                                                        \
+  V(95)                                                                        \
+  V(96)                                                                        \
+  V(97)                                                                        \
+  V(98)                                                                        \
+  V(99)                                                                        \
+  V(100)                                                                       \
+  V(101)                                                                       \
+  V(102)                                                                       \
+  V(103)                                                                       \
+  V(104)                                                                       \
+  V(105)                                                                       \
+  V(106)                                                                       \
+  V(107)                                                                       \
+  V(108)                                                                       \
+  V(109)                                                                       \
+  V(110)                                                                       \
+  V(111)                                                                       \
+  V(112)                                                                       \
+  V(113)                                                                       \
+  V(114)                                                                       \
+  V(115)                                                                       \
+  V(116)                                                                       \
+  V(117)                                                                       \
+  V(118)                                                                       \
+  V(119)                                                                       \
+  V(120)                                                                       \
+  V(121)                                                                       \
+  V(122)                                                                       \
+  V(123)                                                                       \
+  V(124)                                                                       \
+  V(125)                                                                       \
+  V(126)                                                                       \
+  V(127)                                                                       \
+  V(128)                                                                       \
+  V(129)                                                                       \
+  V(130)                                                                       \
+  V(131)                                                                       \
+  V(132)                                                                       \
+  V(133)                                                                       \
+  V(134)                                                                       \
+  V(135)                                                                       \
+  V(136)                                                                       \
+  V(137)                                                                       \
+  V(138)                                                                       \
+  V(139)                                                                       \
+  V(140)                                                                       \
+  V(141)                                                                       \
+  V(142)                                                                       \
+  V(143)                                                                       \
+  V(144)                                                                       \
+  V(145)                                                                       \
+  V(146)                                                                       \
+  V(147)                                                                       \
+  V(148)                                                                       \
+  V(149)                                                                       \
+  V(150)                                                                       \
+  V(151)                                                                       \
+  V(152)                                                                       \
+  V(153)                                                                       \
+  V(154)                                                                       \
+  V(155)                                                                       \
+  V(156)                                                                       \
+  V(157)                                                                       \
+  V(158)                                                                       \
+  V(159)                                                                       \
+  V(160)                                                                       \
+  V(161)                                                                       \
+  V(162)                                                                       \
+  V(163)                                                                       \
+  V(164)                                                                       \
+  V(165)                                                                       \
+  V(166)                                                                       \
+  V(167)                                                                       \
+  V(168)                                                                       \
+  V(169)                                                                       \
+  V(170)                                                                       \
+  V(171)                                                                       \
+  V(172)                                                                       \
+  V(173)                                                                       \
+  V(174)                                                                       \
+  V(175)                                                                       \
+  V(176)                                                                       \
+  V(177)                                                                       \
+  V(178)                                                                       \
+  V(179)                                                                       \
+  V(180)                                                                       \
+  V(181)                                                                       \
+  V(182)                                                                       \
+  V(183)                                                                       \
+  V(184)                                                                       \
+  V(185)                                                                       \
+  V(186)                                                                       \
+  V(187)                                                                       \
+  V(188)                                                                       \
+  V(189)                                                                       \
+  V(190)                                                                       \
+  V(191)                                                                       \
+  V(192)                                                                       \
+  V(193)                                                                       \
+  V(194)                                                                       \
+  V(195)                                                                       \
+  V(196)                                                                       \
+  V(197)                                                                       \
+  V(198)                                                                       \
+  V(199)                                                                       \
+  V(200)                                                                       \
+  V(201)                                                                       \
+  V(202)                                                                       \
+  V(203)                                                                       \
+  V(204)                                                                       \
+  V(205)                                                                       \
+  V(206)                                                                       \
+  V(207)                                                                       \
+  V(208)                                                                       \
+  V(209)                                                                       \
+  V(210)                                                                       \
+  V(211)                                                                       \
+  V(212)                                                                       \
+  V(213)                                                                       \
+  V(214)                                                                       \
+  V(215)                                                                       \
+  V(216)                                                                       \
+  V(217)                                                                       \
+  V(218)                                                                       \
+  V(219)                                                                       \
+  V(220)                                                                       \
+  V(221)                                                                       \
+  V(222)                                                                       \
+  V(223)                                                                       \
+  V(224)                                                                       \
+  V(225)                                                                       \
+  V(226)                                                                       \
+  V(227)                                                                       \
+  V(228)                                                                       \
+  V(229)                                                                       \
+  V(230)                                                                       \
+  V(231)                                                                       \
+  V(232)                                                                       \
+  V(233)                                                                       \
+  V(234)                                                                       \
+  V(235)                                                                       \
+  V(236)                                                                       \
+  V(237)                                                                       \
+  V(238)                                                                       \
+  V(239)                                                                       \
+  V(240)                                                                       \
+  V(241)                                                                       \
+  V(242)                                                                       \
+  V(243)                                                                       \
+  V(244)                                                                       \
+  V(245)                                                                       \
+  V(246)                                                                       \
+  V(247)                                                                       \
+  V(248)                                                                       \
+  V(249)                                                                       \
+  V(250)                                                                       \
+  V(251)                                                                       \
+  V(252)                                                                       \
+  V(253)                                                                       \
+  V(254)                                                                       \
+  V(255)                                                                       \
+  V(256)                                                                       \
+  V(257)                                                                       \
+  V(258)                                                                       \
+  V(259)                                                                       \
+  V(260)                                                                       \
+  V(261)                                                                       \
+  V(262)                                                                       \
+  V(263)                                                                       \
+  V(264)                                                                       \
+  V(265)                                                                       \
+  V(266)                                                                       \
+  V(267)                                                                       \
+  V(268)                                                                       \
+  V(269)                                                                       \
+  V(270)                                                                       \
+  V(271)                                                                       \
+  V(272)                                                                       \
+  V(273)                                                                       \
+  V(274)                                                                       \
+  V(275)                                                                       \
+  V(276)                                                                       \
+  V(277)                                                                       \
+  V(278)                                                                       \
+  V(279)                                                                       \
+  V(280)                                                                       \
+  V(281)                                                                       \
+  V(282)                                                                       \
+  V(283)                                                                       \
+  V(284)                                                                       \
+  V(285)                                                                       \
+  V(286)                                                                       \
+  V(287)                                                                       \
+  V(288)                                                                       \
+  V(289)                                                                       \
+  V(290)                                                                       \
+  V(291)                                                                       \
+  V(292)                                                                       \
+  V(293)                                                                       \
+  V(294)                                                                       \
+  V(295)                                                                       \
+  V(296)                                                                       \
+  V(297)                                                                       \
+  V(298)                                                                       \
+  V(299)                                                                       \
+  V(300)                                                                       \
+  V(301)                                                                       \
+  V(302)                                                                       \
+  V(303)                                                                       \
+  V(304)                                                                       \
+  V(305)                                                                       \
+  V(306)                                                                       \
+  V(307)                                                                       \
+  V(308)                                                                       \
+  V(309)                                                                       \
+  V(310)                                                                       \
+  V(311)                                                                       \
+  V(312)                                                                       \
+  V(313)                                                                       \
+  V(314)                                                                       \
+  V(315)                                                                       \
+  V(316)                                                                       \
+  V(317)                                                                       \
+  V(318)                                                                       \
+  V(319)                                                                       \
+  V(320)                                                                       \
+  V(321)                                                                       \
+  V(322)                                                                       \
+  V(323)                                                                       \
+  V(324)                                                                       \
+  V(325)                                                                       \
+  V(326)                                                                       \
+  V(327)                                                                       \
+  V(328)                                                                       \
+  V(329)                                                                       \
+  V(330)                                                                       \
+  V(331)                                                                       \
+  V(332)                                                                       \
+  V(333)                                                                       \
+  V(334)                                                                       \
+  V(335)                                                                       \
+  V(336)                                                                       \
+  V(337)                                                                       \
+  V(338)                                                                       \
+  V(339)                                                                       \
+  V(340)                                                                       \
+  V(341)                                                                       \
+  V(342)                                                                       \
+  V(343)                                                                       \
+  V(344)                                                                       \
+  V(345)                                                                       \
+  V(346)                                                                       \
+  V(347)                                                                       \
+  V(348)                                                                       \
+  V(349)                                                                       \
+  V(350)                                                                       \
+  V(351)                                                                       \
+  V(352)                                                                       \
+  V(353)                                                                       \
+  V(354)                                                                       \
+  V(355)                                                                       \
+  V(356)                                                                       \
+  V(357)                                                                       \
+  V(358)                                                                       \
+  V(359)                                                                       \
+  V(360)                                                                       \
+  V(361)                                                                       \
+  V(362)                                                                       \
+  V(363)                                                                       \
+  V(364)                                                                       \
+  V(365)                                                                       \
+  V(366)                                                                       \
+  V(367)                                                                       \
+  V(368)                                                                       \
+  V(369)                                                                       \
+  V(370)                                                                       \
+  V(371)                                                                       \
+  V(372)                                                                       \
+  V(373)                                                                       \
+  V(374)                                                                       \
+  V(375)                                                                       \
+  V(376)                                                                       \
+  V(377)                                                                       \
+  V(378)                                                                       \
+  V(379)                                                                       \
+  V(380)                                                                       \
+  V(381)                                                                       \
+  V(382)                                                                       \
+  V(383)                                                                       \
+  V(384)                                                                       \
+  V(385)                                                                       \
+  V(386)                                                                       \
+  V(387)                                                                       \
+  V(388)                                                                       \
+  V(389)                                                                       \
+  V(390)                                                                       \
+  V(391)                                                                       \
+  V(392)                                                                       \
+  V(393)                                                                       \
+  V(394)                                                                       \
+  V(395)                                                                       \
+  V(396)                                                                       \
+  V(397)                                                                       \
+  V(398)                                                                       \
+  V(399)                                                                       \
+  V(400)                                                                       \
+  V(401)                                                                       \
+  V(402)                                                                       \
+  V(403)                                                                       \
+  V(404)                                                                       \
+  V(405)                                                                       \
+  V(406)                                                                       \
+  V(407)                                                                       \
+  V(408)                                                                       \
+  V(409)                                                                       \
+  V(410)                                                                       \
+  V(411)                                                                       \
+  V(412)                                                                       \
+  V(413)                                                                       \
+  V(414)                                                                       \
+  V(415)                                                                       \
+  V(416)                                                                       \
+  V(417)                                                                       \
+  V(418)                                                                       \
+  V(419)                                                                       \
+  V(420)                                                                       \
+  V(421)                                                                       \
+  V(422)                                                                       \
+  V(423)                                                                       \
+  V(424)                                                                       \
+  V(425)                                                                       \
+  V(426)                                                                       \
+  V(427)                                                                       \
+  V(428)                                                                       \
+  V(429)                                                                       \
+  V(430)                                                                       \
+  V(431)                                                                       \
+  V(432)                                                                       \
+  V(433)                                                                       \
+  V(434)                                                                       \
+  V(435)                                                                       \
+  V(436)                                                                       \
+  V(437)                                                                       \
+  V(438)                                                                       \
+  V(439)                                                                       \
+  V(440)                                                                       \
+  V(441)                                                                       \
+  V(442)                                                                       \
+  V(443)                                                                       \
+  V(444)                                                                       \
+  V(445)                                                                       \
+  V(446)                                                                       \
+  V(447)                                                                       \
+  V(448)                                                                       \
+  V(449)                                                                       \
+  V(450)                                                                       \
+  V(451)                                                                       \
+  V(452)                                                                       \
+  V(453)                                                                       \
+  V(454)                                                                       \
+  V(455)                                                                       \
+  V(456)                                                                       \
+  V(457)                                                                       \
+  V(458)                                                                       \
+  V(459)                                                                       \
+  V(460)                                                                       \
+  V(461)                                                                       \
+  V(462)                                                                       \
+  V(463)                                                                       \
+  V(464)                                                                       \
+  V(465)                                                                       \
+  V(466)                                                                       \
+  V(467)                                                                       \
+  V(468)                                                                       \
+  V(469)                                                                       \
+  V(470)                                                                       \
+  V(471)                                                                       \
+  V(472)                                                                       \
+  V(473)                                                                       \
+  V(474)                                                                       \
+  V(475)                                                                       \
+  V(476)                                                                       \
+  V(477)                                                                       \
+  V(478)                                                                       \
+  V(479)                                                                       \
+  V(480)                                                                       \
+  V(481)                                                                       \
+  V(482)                                                                       \
+  V(483)                                                                       \
+  V(484)                                                                       \
+  V(485)                                                                       \
+  V(486)                                                                       \
+  V(487)                                                                       \
+  V(488)                                                                       \
+  V(489)                                                                       \
+  V(490)                                                                       \
+  V(491)                                                                       \
+  V(492)                                                                       \
+  V(493)                                                                       \
+  V(494)                                                                       \
+  V(495)                                                                       \
+  V(496)                                                                       \
+  V(497)                                                                       \
+  V(498)                                                                       \
+  V(499)                                                                       \
+  V(500)                                                                       \
+  V(501)                                                                       \
+  V(502)                                                                       \
+  V(503)                                                                       \
+  V(504)                                                                       \
+  V(505)                                                                       \
+  V(506)                                                                       \
+  V(507)                                                                       \
+  V(508)                                                                       \
+  V(509)                                                                       \
+  V(510)                                                                       \
+  V(511)
+
+REPEAT_512(FINALIZER_CROSS_GEN_TEST_CASE)
+
+#undef FINALIZER_CROSS_GEN_TEST_CASE
+
+void NativeFinalizer_TwoEntriesCrossGen_Finalizer(void* peer) {
+  intptr_t* token = reinterpret_cast<intptr_t*>(peer);
+  (*token)++;
+}
+
+static void NativeFinalizer_TwoEntriesCrossGen(
+    Thread* thread,
+    Heap::Space* spaces,
+    bool collect_new_space,
+    bool evacuate_new_space_and_collect_old_space,
+    bool clear_value_1,
+    bool clear_value_2,
+    bool clear_detach_1,
+    bool clear_detach_2) {
+#ifdef DEBUG
+  SetFlagScope<bool> sfs(&FLAG_trace_finalizers, true);
+#endif
+
+  intptr_t token1_memory = 0;
+  intptr_t token2_memory = 0;
+
+  MessageHandler* handler = thread->isolate()->message_handler();
+  // We're reusing the isolate in a loop, so there are messages from previous
+  // runs of this test.
+  intptr_t queue_length_start = 0;
+  {
+    MessageHandler::AcquiredQueues aq(handler);
+    queue_length_start = aq.queue()->Length();
+  }
+
+  ObjectStore* object_store = thread->isolate_group()->object_store();
+  const auto& void_type = Type::Handle(object_store->never_type());
+  const auto& callback = Pointer::Handle(Pointer::New(
+      void_type,
+      reinterpret_cast<uword>(&NativeFinalizer_TwoEntriesCrossGen_Finalizer),
+      spaces[3]));
+
+  const auto& finalizer =
+      NativeFinalizer::Handle(NativeFinalizer::New(spaces[0]));
+  finalizer.set_callback(callback);
+  finalizer.set_isolate(thread->isolate());
+
+  const auto& isolate_finalizers =
+      GrowableObjectArray::Handle(GrowableObjectArray::New());
+  const auto& weak1 = WeakReference::Handle(WeakReference::New());
+  weak1.set_target(finalizer);
+  isolate_finalizers.Add(weak1);
+  thread->isolate()->set_finalizers(isolate_finalizers);
+
+  const auto& all_entries = LinkedHashSet::Handle(LinkedHashSet::NewDefault());
+  finalizer.set_all_entries(all_entries);
+  const auto& all_entries_data = Array::Handle(all_entries.data());
+  THR_Print("entry1 space: %s\n", spaces[1] == Heap::kNew ? "new" : "old");
+  const auto& entry1 =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, spaces[1]));
+  all_entries_data.SetAt(0, entry1);
+  THR_Print("entry2 space: %s\n", spaces[2] == Heap::kNew ? "new" : "old");
+  const auto& entry2 =
+      FinalizerEntry::Handle(FinalizerEntry::New(finalizer, spaces[2]));
+  all_entries_data.SetAt(1, entry2);
+  all_entries.set_used_data(2);  // Don't bother setting the index.
+
+  const intptr_t external_size1 = 1024;
+  const intptr_t external_size2 = 2048;
+  entry1.set_external_size(external_size1);
+  entry2.set_external_size(external_size2);
+  IsolateGroup::Current()->heap()->AllocatedExternal(external_size1, spaces[5]);
+  IsolateGroup::Current()->heap()->AllocatedExternal(external_size2, spaces[7]);
+
+  auto& value1 = String::Handle();
+  auto& detach1 = String::Handle();
+  const auto& token1 = Pointer::Handle(Pointer::New(
+      void_type, reinterpret_cast<uword>(&token1_memory), spaces[3]));
+  entry1.set_token(token1);
+
+  auto& value2 = String::Handle();
+  auto& detach2 = String::Handle();
+  const auto& token2 = Pointer::Handle(Pointer::New(
+      void_type, reinterpret_cast<uword>(&token2_memory), spaces[4]));
+  entry2.set_token(token2);
+  entry2.set_detach(detach2);
+
+  {
+    HANDLESCOPE(thread);
+    auto& object = String::Handle();
+
+    THR_Print("value1 space: %s\n", spaces[5] == Heap::kNew ? "new" : "old");
+    object ^= OneByteString::New("value1", spaces[5]);
+    entry1.set_value(object);
+    if (!clear_value_1) {
+      value1 = object.ptr();
+    }
+
+    object ^= OneByteString::New("detach", spaces[6]);
+    entry1.set_detach(object);
+    if (!clear_detach_1) {
+      detach1 = object.ptr();
+    }
+
+    THR_Print("value2 space: %s\n", spaces[7] == Heap::kNew ? "new" : "old");
+    object ^= OneByteString::New("value2", spaces[7]);
+    entry2.set_value(object);
+    if (!clear_value_2) {
+      value2 = object.ptr();
+    }
+
+    object ^= OneByteString::New("detach", spaces[8]);
+    entry2.set_detach(object);
+    if (!clear_detach_2) {
+      detach2 = object.ptr();
+    }
+  }
+
+  THR_Print("CollectOldSpace\n");
+  GCTestHelper::CollectOldSpace();
+  if (collect_new_space) {
+    THR_Print("CollectNewSpace\n");
+    GCTestHelper::CollectNewSpace();
+  }
+  if (evacuate_new_space_and_collect_old_space) {
+    THR_Print("CollectAllGarbage\n");
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  EXPECT((entry1.value() == Object::null()) ^ !clear_value_1);
+  EXPECT((entry2.value() == Object::null()) ^ !clear_value_2);
+  EXPECT((entry1.detach() == Object::null()) ^ !clear_detach_1);
+  EXPECT((entry2.detach() == Object::null()) ^ !clear_detach_2);
+  EXPECT_NE(Object::null(), entry1.token());
+  EXPECT_NE(Object::null(), entry2.token());
+
+  const intptr_t expect_num_cleared =
+      (clear_value_1 ? 1 : 0) + (clear_value_2 ? 1 : 0);
+  EXPECT_EQ(expect_num_cleared,
+            NumEntries(FinalizerEntry::Handle(finalizer.entries_collected())));
+
+  EXPECT_EQ(clear_value_1 ? 1 : 0, token1_memory);
+  EXPECT_EQ(clear_value_2 ? 1 : 0, token2_memory);
+
+  const intptr_t expect_num_messages = expect_num_cleared == 0 ? 0 : 1;
+  {
+    // Acquire ownership of message handler queues.
+    MessageHandler::AcquiredQueues aq(handler);
+    EXPECT_EQ(expect_num_messages + queue_length_start, aq.queue()->Length());
+  }
+
+  // Simulate detachments.
+  entry1.set_token(entry1);
+  entry2.set_token(entry2);
+  all_entries_data.SetAt(0, Object::Handle(Object::null()));
+  all_entries_data.SetAt(1, Object::Handle(Object::null()));
+  all_entries.set_used_data(0);
+}
+
+static void NativeFinalizer_TwoEntriesCrossGen(Thread* thread,
+                                               intptr_t test_i) {
+  ASSERT(test_i < (1 << kFinalizerTwoEntriesNumObjects));
+  Heap::Space spaces[kFinalizerTwoEntriesNumObjects];
+  for (intptr_t i = 0; i < kFinalizerTwoEntriesNumObjects; i++) {
+    spaces[i] = ((test_i >> i) & 0x1) == 0x1 ? Heap::kOld : Heap::kNew;
+  }
+  // Either collect or evacuate new space.
+  for (const bool collect_new_space : {true, false}) {
+    // Always run old space collection after new space.
+    const bool evacuate_new_space_and_collect_old_space = true;
+    const bool clear_value_1 = true;
+    const bool clear_value_2 = true;
+    const bool clear_detach_1 = false;
+    const bool clear_detach_2 = false;
+    THR_Print(
+        "collect_new_space: %s evacuate_new_space_and_collect_old_space: %s\n",
+        collect_new_space ? "true" : "false",
+        evacuate_new_space_and_collect_old_space ? "true" : "false");
+    NativeFinalizer_TwoEntriesCrossGen(thread, spaces, collect_new_space,
+                                       evacuate_new_space_and_collect_old_space,
+                                       clear_value_1, clear_value_2,
+                                       clear_detach_1, clear_detach_2);
+  }
+}
+
+#define FINALIZER_NATIVE_CROSS_GEN_TEST_CASE(n)                                \
+  ISOLATE_UNIT_TEST_CASE(NativeFinalizer_CrossGen_##n) {                       \
+    NativeFinalizer_TwoEntriesCrossGen(thread, n);                             \
+  }
+
+REPEAT_512(FINALIZER_NATIVE_CROSS_GEN_TEST_CASE)
+
+#undef FINALIZER_NATIVE_CROSS_GEN_TEST_CASE
+
+#undef REPEAT_512
+
+static ClassPtr GetClass(const Library& lib, const char* name) {
+  const Class& cls = Class::Handle(
+      lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
+  EXPECT(!cls.IsNull());  // No ambiguity error expected.
+  return cls.ptr();
+}
+
+TEST_CASE(ImplementsFinalizable) {
+  Zone* const zone = Thread::Current()->zone();
+
+  const char* kScript = R"(
+import 'dart:ffi';
+
+class AImpl implements A {}
+class ASub extends A {}
+// Wonky class order and non-alhpabetic naming on purpose.
+class C extends Z {}
+class E extends D {}
+class A implements Finalizable {}
+class Z implements A {}
+class D implements C {}
+class X extends E {}
+)";
+  Dart_Handle h_lib = TestCase::LoadTestScript(kScript, nullptr);
+  EXPECT_VALID(h_lib);
+
+  TransitionNativeToVM transition(thread);
+  const Library& lib = Library::CheckedHandle(zone, Api::UnwrapHandle(h_lib));
+  EXPECT(!lib.IsNull());
+
+  const auto& class_x = Class::Handle(zone, GetClass(lib, "X"));
+  ClassFinalizer::FinalizeTypesInClass(class_x);
+  EXPECT(class_x.implements_finalizable());
+
+  const auto& class_a_impl = Class::Handle(zone, GetClass(lib, "AImpl"));
+  ClassFinalizer::FinalizeTypesInClass(class_a_impl);
+  EXPECT(class_a_impl.implements_finalizable());
+
+  const auto& class_a_sub = Class::Handle(zone, GetClass(lib, "ASub"));
+  ClassFinalizer::FinalizeTypesInClass(class_a_sub);
+  EXPECT(class_a_sub.implements_finalizable());
+}
+
 ISOLATE_UNIT_TEST_CASE(MirrorReference) {
   const MirrorReference& reference =
       MirrorReference::Handle(MirrorReference::New(Object::Handle()));
@@ -4063,13 +5335,6 @@
   return field.ptr();
 }
 
-static ClassPtr GetClass(const Library& lib, const char* name) {
-  const Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
-  EXPECT(!cls.IsNull());  // No ambiguity error expected.
-  return cls.ptr();
-}
-
 ISOLATE_UNIT_TEST_CASE(FindClosureIndex) {
   // Allocate the class first.
   const String& class_name = String::Handle(Symbols::New(thread, "MyClass"));
@@ -5226,12 +6491,14 @@
     // Check data, only for non-nested.
     const auto& data1 = Array::Handle(map1.data());
     const auto& data2 = Array::Handle(map2.data());
-    const bool data_length_equal = data1.Length() == data2.Length();
+    const intptr_t data1_length = Smi::Value(map1.used_data());
+    const intptr_t data2_length = Smi::Value(map2.used_data());
+    const bool data_length_equal = data1_length == data2_length;
     bool data_equal = data_length_equal;
     if (data_length_equal) {
       auto& object1 = Instance::Handle();
       auto& object2 = Instance::Handle();
-      for (intptr_t i = 0; i < data1.Length(); i++) {
+      for (intptr_t i = 0; i < data1_length; i++) {
         object1 ^= data1.At(i);
         object2 ^= data2.At(i);
         data_equal &= object1.CanonicalizeEquals(object2);
@@ -5242,14 +6509,14 @@
         THR_Print("LinkedHashBaseEqual Data not equal.\n");
         THR_Print("LinkedHashBaseEqual data1.length %" Pd " data1.length %" Pd
                   " \n",
-                  data1.Length(), data2.Length());
+                  data1_length, data2_length);
         auto& object1 = Instance::Handle();
-        for (intptr_t i = 0; i < data1.Length(); i++) {
+        for (intptr_t i = 0; i < data1_length; i++) {
           object1 ^= data1.At(i);
           THR_Print("LinkedHashBaseEqual data1[%" Pd "] %s\n", i,
                     object1.ToCString());
         }
-        for (intptr_t i = 0; i < data2.Length(); i++) {
+        for (intptr_t i = 0; i < data2_length; i++) {
           object1 ^= data2.At(i);
           THR_Print("LinkedHashBaseEqual data2[%" Pd "] %s\n", i,
                     object1.ToCString());
@@ -5315,7 +6582,7 @@
     const TypeArguments& type_arguments) {
   auto& map = LinkedHashMap::Handle(ImmutableLinkedHashMap::NewUninitialized());
 
-  const auto& data = Array::Handle(Array::New(input_data.Length()));
+  const auto& data = Array::Handle(Array::New(used_data));
   for (intptr_t i = 0; i < used_data; i++) {
     data.SetAt(i, Object::Handle(input_data.At(i)));
   }
@@ -5706,7 +6973,7 @@
     const TypeArguments& type_arguments) {
   auto& set = LinkedHashSet::Handle(ImmutableLinkedHashSet::NewUninitialized());
 
-  const auto& data = Array::Handle(Array::New(input_data.Length()));
+  const auto& data = Array::Handle(Array::New(used_data));
   for (intptr_t i = 0; i < used_data; i++) {
     data.SetAt(i, Object::Handle(input_data.At(i)));
   }
@@ -6130,6 +7397,23 @@
 #undef EXPECT_NOT_SUBTYPE
 #undef EXPECT_SUBTYPE
 
+static void ExpectTypesEquivalent(const Expect& expect,
+                                  const AbstractType& expected,
+                                  const AbstractType& got,
+                                  TypeEquality kind) {
+  if (got.IsEquivalent(expected, kind)) return;
+  TextBuffer buffer(128);
+  buffer.AddString("Expected type ");
+  expected.PrintName(Object::kScrubbedName, &buffer);
+  buffer.AddString(", got ");
+  got.PrintName(Object::kScrubbedName, &buffer);
+  expect.Fail("%s", buffer.buffer());
+}
+
+#define EXPECT_TYPES_EQUAL(expected, got)                                      \
+  ExpectTypesEquivalent(Expect(__FILE__, __LINE__), expected, got,             \
+                        TypeEquality::kCanonical);
+
 TEST_CASE(Class_GetInstantiationOf) {
   const char* kScript = R"(
     class B<T> {}
@@ -6151,17 +7435,6 @@
   const auto& core_lib = Library::Handle(zone, Library::CoreLibrary());
   const auto& class_list = Class::Handle(zone, GetClass(core_lib, "List"));
 
-  auto expect_type_equal = [](const AbstractType& expected,
-                              const AbstractType& got) {
-    if (got.Equals(expected)) return;
-    TextBuffer buffer(128);
-    buffer.AddString("Expected type ");
-    expected.PrintName(Object::kScrubbedName, &buffer);
-    buffer.AddString(", got ");
-    got.PrintName(Object::kScrubbedName, &buffer);
-    dart::Expect(__FILE__, __LINE__).Fail("%s", buffer.buffer());
-  };
-
   const auto& decl_type_b = Type::Handle(zone, class_b.DeclarationType());
   const auto& decl_type_list = Type::Handle(zone, class_list.DeclarationType());
   const auto& null_tav = Object::null_type_arguments();
@@ -6191,7 +7464,7 @@
     const auto& inst_b_a1 =
         Type::Handle(zone, class_a1.GetInstantiationOf(zone, class_b));
     EXPECT(!inst_b_a1.IsNull());
-    expect_type_equal(type_b_list_a1_y, inst_b_a1);
+    EXPECT_TYPES_EQUAL(type_b_list_a1_y, inst_b_a1);
   }
 
   // Test that A2.GetInstantiationOf(B) returns B<List<A2::X>>.
@@ -6219,8 +7492,342 @@
     const auto& inst_b_a2 =
         Type::Handle(zone, class_a2.GetInstantiationOf(zone, class_b));
     EXPECT(!inst_b_a2.IsNull());
-    expect_type_equal(type_b_list_a2_x, inst_b_a2);
+    EXPECT_TYPES_EQUAL(type_b_list_a2_x, inst_b_a2);
   }
 }
 
+#undef EXPECT_TYPES_EQUAL
+
+#define EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got)                   \
+  ExpectTypesEquivalent(Expect(__FILE__, __LINE__), expected, got,             \
+                        TypeEquality::kSyntactical);
+
+static TypePtr CreateFutureOrType(const AbstractType& param,
+                                  Nullability nullability) {
+  const auto& async_lib = Library::Handle(Library::AsyncLibrary());
+  const auto& future_or_class =
+      Class::Handle(async_lib.LookupClass(Symbols::FutureOr()));
+  const auto& tav = TypeArguments::Handle(TypeArguments::New(1));
+  tav.SetTypeAt(0, param);
+  const auto& type =
+      AbstractType::Handle(Type::New(future_or_class, tav, nullability));
+  return Type::RawCast(
+      ClassFinalizer::FinalizeType(type, ClassFinalizer::kFinalize));
+}
+
+static TypePtr CreateFutureType(const AbstractType& param,
+                                Nullability nullability) {
+  ObjectStore* const object_store = IsolateGroup::Current()->object_store();
+  const auto& future_class = Class::Handle(object_store->future_class());
+  const auto& tav = TypeArguments::Handle(TypeArguments::New(1));
+  tav.SetTypeAt(0, param);
+  const auto& type = Type::Handle(Type::New(future_class, tav, nullability));
+  return Type::RawCast(
+      ClassFinalizer::FinalizeType(type, ClassFinalizer::kFinalize));
+}
+
+ISOLATE_UNIT_TEST_CASE(AbstractType_NormalizeFutureOrType) {
+  // This should be kept up to date with any changes in
+  // https://github.com/dart-lang/language/blob/master/resources/type-system/normalization.md
+
+  ObjectStore* const object_store = IsolateGroup::Current()->object_store();
+
+  auto normalized_future_or = [&](const AbstractType& param,
+                                  Nullability nullability) -> AbstractTypePtr {
+    const auto& type = Type::Handle(CreateFutureOrType(param, nullability));
+    return type.NormalizeFutureOrType(Heap::kNew);
+  };
+
+  // NORM(FutureOr<T>) =
+  //   let S be NORM(T)
+  //   if S is a top type then S
+  {
+    const auto& type = AbstractType::Handle(normalized_future_or(
+        Object::dynamic_type(), Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::dynamic_type(), type);
+  }
+
+  {
+    const auto& type = AbstractType::Handle(
+        normalized_future_or(Object::void_type(), Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::void_type(), type);
+  }
+
+  {
+    const auto& type_nullable_object =
+        Type::Handle(object_store->nullable_object_type());
+    const auto& type = AbstractType::Handle(
+        normalized_future_or(type_nullable_object, Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, type);
+  }
+
+  //   if S is Object then S
+
+  {
+    const auto& type_non_nullable_object =
+        Type::Handle(object_store->non_nullable_object_type());
+    const auto& type = AbstractType::Handle(normalized_future_or(
+        type_non_nullable_object, Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_non_nullable_object, type);
+  }
+
+  //   if S is Object* then S
+
+  {
+    const auto& type_legacy_object =
+        Type::Handle(object_store->legacy_object_type());
+    const auto& type = AbstractType::Handle(
+        normalized_future_or(type_legacy_object, Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_legacy_object, type);
+  }
+
+  //   if S is Never then Future<Never>
+
+  {
+    const auto& type_never = Type::Handle(object_store->never_type());
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_never, Nullability::kNonNullable));
+    const auto& got = AbstractType::Handle(
+        normalized_future_or(type_never, Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  //   if S is Null then Future<Null>?
+
+  {
+    const auto& type_null = Type::Handle(object_store->null_type());
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_null, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        normalized_future_or(type_null, Nullability::kNonNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  //   else FutureOr<S>
+
+  // NORM(T?) =
+  //   let S be NORM(T)
+  //   ...
+  //   if S is FutureOr<R> and R is nullable then S
+
+  {
+    const auto& type_nullable_int =
+        Type::Handle(object_store->nullable_int_type());
+    const auto& expected = Type::Handle(
+        CreateFutureOrType(type_nullable_int, Nullability::kNonNullable));
+    const auto& got = AbstractType::Handle(
+        normalized_future_or(type_nullable_int, Nullability::kNullable));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+}
+
+TEST_CASE(AbstractType_InstantiatedFutureOrIsNormalized) {
+  const char* kScript = R"(
+import 'dart:async';
+
+FutureOr<T>? foo<T>() { return null; }
+FutureOr<T?> bar<T>() { return null; }
+)";
+
+  Dart_Handle api_lib = TestCase::LoadTestScript(kScript, nullptr);
+  EXPECT_VALID(api_lib);
+  TransitionNativeToVM transition(thread);
+  Zone* const zone = thread->zone();
+  ObjectStore* const object_store = IsolateGroup::Current()->object_store();
+
+  const auto& null_tav = Object::null_type_arguments();
+  auto instantiate_future_or =
+      [&](const AbstractType& generic,
+          const AbstractType& param) -> AbstractTypePtr {
+    const auto& tav = TypeArguments::Handle(TypeArguments::New(1));
+    tav.SetTypeAt(0, param);
+    return generic.InstantiateFrom(null_tav, tav, kCurrentAndEnclosingFree,
+                                   Heap::kNew);
+  };
+
+  const auto& root_lib =
+      Library::CheckedHandle(zone, Api::UnwrapHandle(api_lib));
+  EXPECT(!root_lib.IsNull());
+  const auto& foo = Function::Handle(zone, GetFunction(root_lib, "foo"));
+  const auto& bar = Function::Handle(zone, GetFunction(root_lib, "bar"));
+  const auto& foo_sig = FunctionType::Handle(zone, foo.signature());
+  const auto& bar_sig = FunctionType::Handle(zone, bar.signature());
+
+  const auto& nullable_future_or_T =
+      AbstractType::Handle(zone, foo_sig.result_type());
+  const auto& future_or_nullable_T =
+      AbstractType::Handle(zone, bar_sig.result_type());
+
+  const auto& type_nullable_object =
+      Type::Handle(object_store->nullable_object_type());
+  const auto& type_non_nullable_object =
+      Type::Handle(object_store->non_nullable_object_type());
+  const auto& type_legacy_object =
+      Type::Handle(object_store->legacy_object_type());
+
+  // Testing same cases as AbstractType_NormalizeFutureOrType.
+
+  // FutureOr<T>?[top type] = top type
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, Object::dynamic_type()));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::dynamic_type(), got);
+  }
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, Object::void_type()));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::void_type(), got);
+  }
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_nullable_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  // FutureOr<T?>[top type] = top type
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, Object::dynamic_type()));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::dynamic_type(), got);
+  }
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, Object::void_type()));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(Object::void_type(), got);
+  }
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_nullable_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  // FutureOr<T?>[Object] = Object?
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_non_nullable_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  // FutureOr<T?>[Object*] = Object?
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_legacy_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  // FutureOr<T>?[Object] = Object?
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_non_nullable_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  // FutureOr<T>?[Object*] = Object?
+
+  {
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_legacy_object));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(type_nullable_object, got);
+  }
+
+  const auto& type_never = Type::Handle(object_store->never_type());
+  const auto& type_null = Type::Handle(object_store->null_type());
+
+  // FutureOr<T?>[Never] = Future<Null>?
+
+  {
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_null, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_never));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T>?[Never] = Future<Never>?
+
+  {
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_never, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_never));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T?>[Null] = Future<Null>?
+
+  {
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_null, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_null));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T>?[Null] = Future<Null>?
+
+  {
+    const auto& expected =
+        Type::Handle(CreateFutureType(type_null, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_null));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  const auto& type_nullable_int =
+      Type::Handle(object_store->nullable_int_type());
+  const auto& type_non_nullable_int =
+      Type::Handle(object_store->non_nullable_int_type());
+
+  // FutureOr<T?>[int] = FutureOr<int?>
+
+  {
+    const auto& expected = Type::Handle(
+        CreateFutureOrType(type_nullable_int, Nullability::kNonNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_non_nullable_int));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T?>[int?] = FutureOr<int?>
+
+  {
+    const auto& expected = Type::Handle(
+        CreateFutureOrType(type_nullable_int, Nullability::kNonNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(future_or_nullable_T, type_nullable_int));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T>?[int?] = FutureOr<int?>
+
+  {
+    const auto& expected = Type::Handle(
+        CreateFutureOrType(type_nullable_int, Nullability::kNonNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_nullable_int));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+
+  // FutureOr<T>?[int] = FutureOr<int>?
+
+  {
+    const auto& expected = Type::Handle(
+        CreateFutureOrType(type_non_nullable_int, Nullability::kNullable));
+    const auto& got = AbstractType::Handle(
+        instantiate_future_or(nullable_future_or_T, type_non_nullable_int));
+    EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT(expected, got);
+  }
+}
+
+#undef EXPECT_TYPES_SYNTACTICALLY_EQUIVALENT
+
 }  // namespace dart
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 448a10b..84bf154 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -294,7 +294,7 @@
 };
 
 // The timezone names encountered so far.  The timezone names must live forever.
-std::set<const std::string> timezone_names;
+std::set<std::string> timezone_names;
 
 // Initialized on OS:Init(), deinitialized on OS::Cleanup.
 std::shared_ptr<InspectMetrics> metrics;
@@ -460,9 +460,6 @@
   return -1;
 }
 
-// The timezone names encountered so far.  The timezone names must live forever.
-std::set<const std::string> timezone_names;
-
 // TODO(5411554):  May need to hoist these architecture dependent code
 // into a architecture specific file e.g: os_ia32_fuchsia.cc
 intptr_t OS::ActivationFrameAlignment() {
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index 1f6a0e3..e125847 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -13,7 +13,9 @@
 #include "vm/globals.h"
 
 // Declare the OS-specific types ahead of defining the generic classes.
-#if defined(DART_HOST_OS_ANDROID)
+#if defined(DART_USE_ABSL)
+#include "vm/os_thread_absl.h"
+#elif defined(DART_HOST_OS_ANDROID)
 #include "vm/os_thread_android.h"
 #elif defined(DART_HOST_OS_FUCHSIA)
 #include "vm/os_thread_fuchsia.h"
@@ -251,7 +253,7 @@
   static void Cleanup();
 #ifdef SUPPORT_TIMELINE
   static ThreadId GetCurrentThreadTraceId();
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
   static OSThread* GetOSThreadFromThread(ThreadState* thread);
   static void AddThreadToListLocked(OSThread* thread);
   static void RemoveThreadFromList(OSThread* thread);
diff --git a/runtime/vm/os_thread_absl.cc b/runtime/vm/os_thread_absl.cc
new file mode 100644
index 0000000..e5887c3
--- /dev/null
+++ b/runtime/vm/os_thread_absl.cc
@@ -0,0 +1,458 @@
+// 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.
+
+#include "platform/globals.h"  // NOLINT
+
+#if defined(DART_USE_ABSL)
+
+#include <errno.h>  // NOLINT
+#include <stdio.h>
+#include <sys/resource.h>  // NOLINT
+#include <sys/syscall.h>   // NOLINT
+#include <sys/time.h>      // NOLINT
+
+#include "platform/address_sanitizer.h"
+#include "platform/assert.h"
+#include "platform/safe_stack.h"
+#include "platform/signal_blocker.h"
+#include "platform/utils.h"
+#include "vm/flags.h"
+#include "vm/os_thread.h"
+
+namespace dart {
+
+DEFINE_FLAG(int,
+            worker_thread_priority,
+            kMinInt,
+            "The thread priority the VM should use for new worker threads.");
+
+#define VALIDATE_PTHREAD_RESULT(result)                                        \
+  if (result != 0) {                                                           \
+    const int kBufferSize = 1024;                                              \
+    char error_buf[kBufferSize];                                               \
+    FATAL2("pthread error: %d (%s)", result,                                   \
+           Utils::StrError(result, error_buf, kBufferSize));                   \
+  }
+
+// Variation of VALIDATE_PTHREAD_RESULT for named objects.
+#if defined(PRODUCT)
+#define VALIDATE_PTHREAD_RESULT_NAMED(result) VALIDATE_PTHREAD_RESULT(result)
+#else
+#define VALIDATE_PTHREAD_RESULT_NAMED(result)                                  \
+  if (result != 0) {                                                           \
+    const int kBufferSize = 1024;                                              \
+    char error_buf[kBufferSize];                                               \
+    FATAL3("[%s] pthread error: %d (%s)", name_, result,                       \
+           Utils::StrError(result, error_buf, kBufferSize));                   \
+  }
+#endif
+
+#if defined(DEBUG)
+#define ASSERT_PTHREAD_SUCCESS(result) VALIDATE_PTHREAD_RESULT(result)
+#else
+// NOTE: This (currently) expands to a no-op.
+#define ASSERT_PTHREAD_SUCCESS(result) ASSERT(result == 0)
+#endif
+
+#ifdef DEBUG
+#define RETURN_ON_PTHREAD_FAILURE(result)                                      \
+  if (result != 0) {                                                           \
+    const int kBufferSize = 1024;                                              \
+    char error_buf[kBufferSize];                                               \
+    fprintf(stderr, "%s:%d: pthread error: %d (%s)\n", __FILE__, __LINE__,     \
+            result, Utils::StrError(result, error_buf, kBufferSize));          \
+    return result;                                                             \
+  }
+#else
+#define RETURN_ON_PTHREAD_FAILURE(result)                                      \
+  if (result != 0) return result;
+#endif
+
+class ThreadStartData {
+ public:
+  ThreadStartData(const char* name,
+                  OSThread::ThreadStartFunction function,
+                  uword parameter)
+      : name_(name), function_(function), parameter_(parameter) {}
+
+  const char* name() const { return name_; }
+  OSThread::ThreadStartFunction function() const { return function_; }
+  uword parameter() const { return parameter_; }
+
+ private:
+  const char* name_;
+  OSThread::ThreadStartFunction function_;
+  uword parameter_;
+
+  DISALLOW_COPY_AND_ASSIGN(ThreadStartData);
+};
+
+// TODO(bkonyi): remove this call once the prebuilt SDK is updated.
+// Spawned threads inherit their spawner's signal mask. We sometimes spawn
+// threads for running Dart code from a thread that is blocking SIGPROF.
+// This function explicitly unblocks SIGPROF so the profiler continues to
+// sample this thread.
+static void UnblockSIGPROF() {
+  sigset_t set;
+  sigemptyset(&set);
+  sigaddset(&set, SIGPROF);
+  int r = pthread_sigmask(SIG_UNBLOCK, &set, NULL);
+  USE(r);
+  ASSERT(r == 0);
+  ASSERT(!CHECK_IS_BLOCKING(SIGPROF));
+}
+
+// Dispatch to the thread start function provided by the caller. This trampoline
+// is used to ensure that the thread is properly destroyed if the thread just
+// exits.
+static void* ThreadStart(void* data_ptr) {
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  if (FLAG_worker_thread_priority != kMinInt) {
+    if (setpriority(PRIO_PROCESS, syscall(__NR_gettid),
+                    FLAG_worker_thread_priority) == -1) {
+      FATAL2("Setting thread priority to %d failed: errno = %d\n",
+             FLAG_worker_thread_priority, errno);
+    }
+  }
+#elif defined(DART_HOST_OS_MACOS)
+  if (FLAG_worker_thread_priority != kMinInt) {
+    const pthread_t thread = pthread_self();
+    int policy = SCHED_FIFO;
+    struct sched_param schedule;
+    if (pthread_getschedparam(thread, &policy, &schedule) != 0) {
+      FATAL1("Obtainign sched param failed: errno = %d\n", errno);
+    }
+    schedule.sched_priority = FLAG_worker_thread_priority;
+    if (pthread_setschedparam(thread, policy, &schedule) != 0) {
+      FATAL2("Setting thread priority to %d failed: errno = %d\n",
+             FLAG_worker_thread_priority, errno);
+    }
+  }
+#endif
+
+  ThreadStartData* data = reinterpret_cast<ThreadStartData*>(data_ptr);
+
+  const char* name = data->name();
+  OSThread::ThreadStartFunction function = data->function();
+  uword parameter = data->parameter();
+  delete data;
+
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  // Set the thread name. There is 16 bytes limit on the name (including \0).
+  // pthread_setname_np ignores names that are too long rather than truncating.
+  char truncated_name[16];
+  snprintf(truncated_name, ARRAY_SIZE(truncated_name), "%s", name);
+  pthread_setname_np(pthread_self(), truncated_name);
+#elif defined(DART_HOST_OS_MACOS)
+  // Set the thread name.
+  pthread_setname_np(name);
+#endif
+
+  // Create new OSThread object and set as TLS for new thread.
+  OSThread* thread = OSThread::CreateOSThread();
+  if (thread != NULL) {
+    OSThread::SetCurrent(thread);
+    thread->set_name(name);
+    UnblockSIGPROF();
+    // Call the supplied thread start function handing it its parameters.
+    function(parameter);
+  }
+
+  return NULL;
+}
+
+int OSThread::Start(const char* name,
+                    ThreadStartFunction function,
+                    uword parameter) {
+  pthread_attr_t attr;
+  int result = pthread_attr_init(&attr);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  result = pthread_attr_setstacksize(&attr, OSThread::GetMaxStackSize());
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  ThreadStartData* data = new ThreadStartData(name, function, parameter);
+
+  pthread_t tid;
+  result = pthread_create(&tid, &attr, ThreadStart, data);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  result = pthread_attr_destroy(&attr);
+  RETURN_ON_PTHREAD_FAILURE(result);
+
+  return 0;
+}
+
+const ThreadId OSThread::kInvalidThreadId = static_cast<ThreadId>(0);
+const ThreadJoinId OSThread::kInvalidThreadJoinId =
+    static_cast<ThreadJoinId>(0);
+
+ThreadLocalKey OSThread::CreateThreadLocal(ThreadDestructor destructor) {
+  pthread_key_t key = kUnsetThreadLocalKey;
+  int result = pthread_key_create(&key, destructor);
+  VALIDATE_PTHREAD_RESULT(result);
+  ASSERT(key != kUnsetThreadLocalKey);
+  return key;
+}
+
+void OSThread::DeleteThreadLocal(ThreadLocalKey key) {
+  ASSERT(key != kUnsetThreadLocalKey);
+  int result = pthread_key_delete(key);
+  VALIDATE_PTHREAD_RESULT(result);
+}
+
+void OSThread::SetThreadLocal(ThreadLocalKey key, uword value) {
+  ASSERT(key != kUnsetThreadLocalKey);
+  int result = pthread_setspecific(key, reinterpret_cast<void*>(value));
+  VALIDATE_PTHREAD_RESULT(result);
+}
+
+intptr_t OSThread::GetMaxStackSize() {
+  const int kStackSize = (128 * kWordSize * KB);
+  return kStackSize;
+}
+
+ThreadId OSThread::GetCurrentThreadId() {
+  return pthread_self();
+}
+
+#ifdef SUPPORT_TIMELINE
+ThreadId OSThread::GetCurrentThreadTraceId() {
+#if defined(DART_HOST_OS_ANDROID)
+  return GetCurrentThreadId();
+#elif defined(DART_HOST_OS_LINUX)
+  return syscall(__NR_gettid);
+#elif defined(DART_HOST_OS_MACOS)
+  return ThreadIdFromIntPtr(pthread_mach_thread_np(pthread_self()));
+#endif
+}
+#endif  // SUPPORT_TIMELINE
+
+ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
+  ASSERT(thread != NULL);
+  // Make sure we're filling in the join id for the current thread.
+  ASSERT(thread->id() == GetCurrentThreadId());
+  // Make sure the join_id_ hasn't been set, yet.
+  DEBUG_ASSERT(thread->join_id_ == kInvalidThreadJoinId);
+  pthread_t id = pthread_self();
+#if defined(DEBUG)
+  thread->join_id_ = id;
+#endif
+  return id;
+}
+
+void OSThread::Join(ThreadJoinId id) {
+  int result = pthread_join(id, NULL);
+  ASSERT(result == 0);
+}
+
+intptr_t OSThread::ThreadIdToIntPtr(ThreadId id) {
+  ASSERT(sizeof(id) == sizeof(intptr_t));
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  return static_cast<intptr_t>(id);
+#elif defined(DART_HOST_OS_MACOS)
+  return reinterpret_cast<intptr_t>(id);
+#endif
+}
+
+ThreadId OSThread::ThreadIdFromIntPtr(intptr_t id) {
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  return static_cast<ThreadId>(id);
+#elif defined(DART_HOST_OS_MACOS)
+  return reinterpret_cast<ThreadId>(id);
+#endif
+}
+
+bool OSThread::Compare(ThreadId a, ThreadId b) {
+  return pthread_equal(a, b) != 0;
+}
+
+bool OSThread::GetCurrentStackBounds(uword* lower, uword* upper) {
+#if defined(DART_HOST_OS_ANDROID) || defined(DART_HOST_OS_LINUX)
+  pthread_attr_t attr;
+  // May fail on the main thread.
+  if (pthread_getattr_np(pthread_self(), &attr) != 0) {
+    return false;
+  }
+
+  void* base;
+  size_t size;
+  int error = pthread_attr_getstack(&attr, &base, &size);
+  pthread_attr_destroy(&attr);
+  if (error != 0) {
+    return false;
+  }
+
+  *lower = reinterpret_cast<uword>(base);
+  *upper = *lower + size;
+  return true;
+#elif defined(DART_HOST_OS_MACOS)
+  *upper = reinterpret_cast<uword>(pthread_get_stackaddr_np(pthread_self()));
+  *lower = *upper - pthread_get_stacksize_np(pthread_self());
+  return true;
+#endif
+}
+
+#if defined(USING_SAFE_STACK)
+NO_SANITIZE_ADDRESS
+NO_SANITIZE_SAFE_STACK
+uword OSThread::GetCurrentSafestackPointer() {
+#error "SAFE_STACK is unsupported on this platform"
+  return 0;
+}
+
+NO_SANITIZE_ADDRESS
+NO_SANITIZE_SAFE_STACK
+void OSThread::SetCurrentSafestackPointer(uword ssp) {
+#error "SAFE_STACK is unsupported on this platform"
+}
+#endif
+
+Mutex::Mutex(NOT_IN_PRODUCT(const char* name))
+#if !defined(PRODUCT)
+    : name_(name)
+#endif
+{
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  owner_ = OSThread::kInvalidThreadId;
+#endif  // defined(DEBUG)
+}
+
+Mutex::~Mutex() {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(owner_ == OSThread::kInvalidThreadId);
+#endif  // defined(DEBUG)
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Mutex::Lock() {
+  data_.mutex()->Lock();
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  owner_ = OSThread::GetCurrentThreadId();
+#endif  // defined(DEBUG)
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+bool Mutex::TryLock() {
+  if (!data_.mutex()->TryLock()) {
+    return false;
+  }
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  owner_ = OSThread::GetCurrentThreadId();
+#endif  // defined(DEBUG)
+  return true;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Mutex::Unlock() {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(IsOwnedByCurrentThread());
+  owner_ = OSThread::kInvalidThreadId;
+#endif  // defined(DEBUG)
+  data_.mutex()->Unlock();
+}
+
+Monitor::Monitor() {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  owner_ = OSThread::kInvalidThreadId;
+#endif  // defined(DEBUG)
+}
+
+Monitor::~Monitor() {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(owner_ == OSThread::kInvalidThreadId);
+#endif  // defined(DEBUG)
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+bool Monitor::TryEnter() {
+  if (!data_.mutex()->TryLock()) {
+    return false;
+  }
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(owner_ == OSThread::kInvalidThreadId);
+  owner_ = OSThread::GetCurrentThreadId();
+#endif  // defined(DEBUG)
+  return true;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Enter() {
+  data_.mutex()->Lock();
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(owner_ == OSThread::kInvalidThreadId);
+  owner_ = OSThread::GetCurrentThreadId();
+#endif  // defined(DEBUG)
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Exit() {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(IsOwnedByCurrentThread());
+  owner_ = OSThread::kInvalidThreadId;
+#endif  // defined(DEBUG)
+  data_.mutex()->Unlock();
+}
+
+Monitor::WaitResult Monitor::Wait(int64_t millis) {
+  Monitor::WaitResult retval = WaitMicros(millis * kMicrosecondsPerMillisecond);
+  return retval;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+Monitor::WaitResult Monitor::WaitMicros(int64_t micros) {
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(IsOwnedByCurrentThread());
+  ThreadId saved_owner = owner_;
+  owner_ = OSThread::kInvalidThreadId;
+#endif  // defined(DEBUG)
+
+  Monitor::WaitResult retval = kNotified;
+  if (micros == kNoTimeout) {
+    // Wait forever.
+    data_.cond()->Wait(data_.mutex());
+  } else {
+    if (data_.cond()->WaitWithTimeout(data_.mutex(),
+                                      absl::Microseconds(micros))) {
+      retval = kTimedOut;
+    }
+  }
+
+#if defined(DEBUG)
+  // When running with assertions enabled we track the owner.
+  ASSERT(owner_ == OSThread::kInvalidThreadId);
+  owner_ = OSThread::GetCurrentThreadId();
+  ASSERT(owner_ == saved_owner);
+#endif  // defined(DEBUG)
+  return retval;
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::Notify() {
+  // When running with assertions enabled we track the owner.
+  ASSERT(IsOwnedByCurrentThread());
+  data_.cond()->Signal();
+}
+
+ABSL_NO_THREAD_SAFETY_ANALYSIS
+void Monitor::NotifyAll() {
+  // When running with assertions enabled we track the owner.
+  ASSERT(IsOwnedByCurrentThread());
+  data_.cond()->SignalAll();
+}
+
+}  // namespace dart
+
+#endif  // defined(DART_USE_ABSL)
diff --git a/runtime/vm/os_thread_absl.h b/runtime/vm/os_thread_absl.h
new file mode 100644
index 0000000..e10793b
--- /dev/null
+++ b/runtime/vm/os_thread_absl.h
@@ -0,0 +1,77 @@
+// 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.
+
+#ifndef RUNTIME_VM_OS_THREAD_ABSL_H_
+#define RUNTIME_VM_OS_THREAD_ABSL_H_
+
+#if !defined(RUNTIME_VM_OS_THREAD_H_)
+#error Do not include os_thread_absl.h directly; use os_thread.h instead.
+#endif
+
+#include <pthread.h>
+
+#include "platform/assert.h"
+#include "platform/globals.h"
+#include "third_party/absl/synchronization/mutex.h"
+
+namespace dart {
+
+typedef pthread_key_t ThreadLocalKey;
+typedef pthread_t ThreadId;
+typedef pthread_t ThreadJoinId;
+
+static const ThreadLocalKey kUnsetThreadLocalKey =
+    static_cast<pthread_key_t>(-1);
+
+class ThreadInlineImpl {
+ private:
+  ThreadInlineImpl() {}
+  ~ThreadInlineImpl() {}
+
+  static uword GetThreadLocal(ThreadLocalKey key) {
+    ASSERT(key != kUnsetThreadLocalKey);
+    return reinterpret_cast<uword>(pthread_getspecific(key));
+  }
+
+  friend class OSThread;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(ThreadInlineImpl);
+};
+
+class MutexData {
+ private:
+  MutexData() : mutex_() {}
+  ~MutexData() {}
+
+  absl::Mutex* mutex() { return &mutex_; }
+
+  absl::Mutex mutex_;
+
+  friend class Mutex;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(MutexData);
+};
+
+class MonitorData {
+ private:
+  MonitorData() : mutex_(), cond_() {}
+  ~MonitorData() {}
+
+  absl::Mutex* mutex() { return &mutex_; }
+  absl::CondVar* cond() { return &cond_; }
+
+  absl::Mutex mutex_;
+  absl::CondVar cond_;
+
+  friend class Monitor;
+
+  DISALLOW_ALLOCATION();
+  DISALLOW_COPY_AND_ASSIGN(MonitorData);
+};
+
+}  // namespace dart
+
+#endif  // RUNTIME_VM_OS_THREAD_ABSL_H_
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc
index 8c09320..a55dd95 100644
--- a/runtime/vm/os_thread_android.cc
+++ b/runtime/vm/os_thread_android.cc
@@ -4,7 +4,7 @@
 
 #include "platform/globals.h"  // NOLINT
 
-#if defined(DART_HOST_OS_ANDROID)
+#if defined(DART_HOST_OS_ANDROID) && !defined(DART_USE_ABSL)
 
 #include "vm/os_thread.h"
 
@@ -215,7 +215,7 @@
 ThreadId OSThread::GetCurrentThreadTraceId() {
   return GetCurrentThreadId();
 }
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
   ASSERT(thread != NULL);
@@ -491,4 +491,4 @@
 
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_ANDROID)
+#endif  // defined(DART_HOST_OS_ANDROID) && !defined(DART_USE_ABSL)
diff --git a/runtime/vm/os_thread_fuchsia.cc b/runtime/vm/os_thread_fuchsia.cc
index 1eb8a3a..5e47b4e 100644
--- a/runtime/vm/os_thread_fuchsia.cc
+++ b/runtime/vm/os_thread_fuchsia.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"  // NOLINT
-#if defined(DART_HOST_OS_FUCHSIA)
+#if defined(DART_HOST_OS_FUCHSIA) && !defined(DART_USE_ABSL)
 
 #include "vm/os.h"
 #include "vm/os_thread.h"
@@ -170,7 +170,7 @@
 ThreadId OSThread::GetCurrentThreadTraceId() {
   return pthread_self();
 }
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
   ASSERT(thread != NULL);
@@ -492,4 +492,4 @@
 
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_FUCHSIA)
+#endif  // defined(DART_HOST_OS_FUCHSIA) && !defined(DART_USE_ABSL)
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc
index 409b03b..8c6368b 100644
--- a/runtime/vm/os_thread_linux.cc
+++ b/runtime/vm/os_thread_linux.cc
@@ -4,7 +4,7 @@
 
 #include "platform/globals.h"  // NOLINT
 
-#if defined(DART_HOST_OS_LINUX)
+#if defined(DART_HOST_OS_LINUX) && !defined(DART_USE_ABSL)
 
 #include "vm/os_thread.h"
 
@@ -216,7 +216,7 @@
 ThreadId OSThread::GetCurrentThreadTraceId() {
   return syscall(__NR_gettid);
 }
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
   ASSERT(thread != NULL);
@@ -497,4 +497,4 @@
 
 }  // namespace dart
 
-#endif  // defined(DART_HOST_OS_LINUX)
+#endif  // defined(DART_HOST_OS_LINUX) && !defined(DART_USE_ABSL)
diff --git a/runtime/vm/os_thread_macos.cc b/runtime/vm/os_thread_macos.cc
index 401fdc7..7931ee7 100644
--- a/runtime/vm/os_thread_macos.cc
+++ b/runtime/vm/os_thread_macos.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"  // NOLINT
-#if defined(DART_HOST_OS_MACOS)
+#if defined(DART_HOST_OS_MACOS) && !defined(DART_USE_ABSL)
 
 #include "vm/os_thread.h"
 
@@ -194,7 +194,7 @@
 ThreadId OSThread::GetCurrentThreadTraceId() {
   return ThreadIdFromIntPtr(pthread_mach_thread_np(pthread_self()));
 }
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
   ASSERT(thread != NULL);
diff --git a/runtime/vm/os_thread_win.cc b/runtime/vm/os_thread_win.cc
index 8b859a8..0d0a742 100644
--- a/runtime/vm/os_thread_win.cc
+++ b/runtime/vm/os_thread_win.cc
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 #include "platform/globals.h"  // NOLINT
-#if defined(DART_HOST_OS_WINDOWS)
+#if defined(DART_HOST_OS_WINDOWS) && !defined(DART_USE_ABSL)
 
 #include "vm/growable_array.h"
 #include "vm/lockers.h"
@@ -133,7 +133,7 @@
 ThreadId OSThread::GetCurrentThreadTraceId() {
   return ::GetCurrentThreadId();
 }
-#endif  // PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) {
   ASSERT(thread != NULL);
@@ -172,14 +172,10 @@
 }
 
 bool OSThread::GetCurrentStackBounds(uword* lower, uword* upper) {
-// On Windows stack limits for the current thread are available in
-// the thread information block (TIB). Its fields can be accessed through
-// FS segment register on x86 and GS segment register on x86_64.
-#ifdef _WIN64
-  *upper = static_cast<uword>(__readgsqword(offsetof(NT_TIB64, StackBase)));
-#else
-  *upper = static_cast<uword>(__readfsdword(offsetof(NT_TIB, StackBase)));
-#endif
+  // On Windows stack limits for the current thread are available in
+  // the thread information block (TIB).
+  NT_TIB* tib = reinterpret_cast<NT_TIB*>(NtCurrentTeb());
+  *upper = reinterpret_cast<uword>(tib->StackBase);
   // Notice that we cannot use the TIB's StackLimit for the stack end, as it
   // tracks the end of the committed range. We're after the end of the reserved
   // stack area (most of which will be uncommitted, most times).
@@ -530,4 +526,4 @@
 #endif  // _WIN64
 }  // extern "C"
 
-#endif  // defined(DART_HOST_OS_WINDOWS)
+#endif  // defined(DART_HOST_OS_WINDOWS) && !defined(DART_USE_ABSL)
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index 0916e2a..2a6d1b8 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -35,19 +35,10 @@
 class LocalScope;
 class LocalVariable;
 struct RegExpCompileData;
-class SourceLabel;
 template <typename T>
 class GrowableArray;
 class Parser;
 
-struct CatchParamDesc;
-class ClassDesc;
-struct MemberDesc;
-struct ParamList;
-struct QualIdent;
-class TopLevel;
-class RecursionChecker;
-
 // The class ParsedFunction holds the result of parsing a function.
 class ParsedFunction : public ZoneAllocated {
  public:
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 8ff785b..d8ae4af 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -63,12 +63,462 @@
     "default is ~4 seconds. Large values will greatly increase memory "
     "consumption.");
 
+// Include native stack dumping helpers into AOT compiler even in PRODUCT
+// mode. This allows to report more informative errors when gen_snapshot
+// crashes.
+#if !defined(PRODUCT) || defined(DART_PRECOMPILER)
+ProfilerCounters Profiler::counters_ = {};
+
+static void DumpStackFrame(intptr_t frame_index, uword pc, uword fp) {
+  uword start = 0;
+  if (auto const name = NativeSymbolResolver::LookupSymbolName(pc, &start)) {
+    uword offset = pc - start;
+    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s+0x%" Px "\n", pc, fp, name,
+                 offset);
+    NativeSymbolResolver::FreeSymbolName(name);
+    return;
+  }
+
+  char* dso_name;
+  uword dso_base;
+  if (NativeSymbolResolver::LookupSharedObject(pc, &dso_base, &dso_name)) {
+    uword dso_offset = pc - dso_base;
+    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s+0x%" Px "\n", pc, fp, dso_name,
+                 dso_offset);
+    NativeSymbolResolver::FreeSymbolName(dso_name);
+    return;
+  }
+
+  OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " Unknown symbol\n", pc, fp);
+}
+
+class ProfilerStackWalker : public ValueObject {
+ public:
+  ProfilerStackWalker(Dart_Port port_id,
+                      Sample* head_sample,
+                      SampleBuffer* sample_buffer,
+                      intptr_t skip_count = 0)
+      : port_id_(port_id),
+        sample_(head_sample),
+        sample_buffer_(sample_buffer),
+        skip_count_(skip_count),
+        frames_skipped_(0),
+        frame_index_(0),
+        total_frames_(0) {
+    if (sample_ == NULL) {
+      ASSERT(sample_buffer_ == NULL);
+    } else {
+      ASSERT(sample_buffer_ != NULL);
+      ASSERT(sample_->head_sample());
+    }
+  }
+
+  bool Append(uword pc, uword fp) {
+    if (frames_skipped_ < skip_count_) {
+      frames_skipped_++;
+      return true;
+    }
+
+    if (sample_ == NULL) {
+      DumpStackFrame(frame_index_, pc, fp);
+      frame_index_++;
+      total_frames_++;
+      return true;
+    }
+    if (total_frames_ >= FLAG_max_profile_depth) {
+      sample_->set_truncated_trace(true);
+      return false;
+    }
+    ASSERT(sample_ != NULL);
+    if (frame_index_ == Sample::kPCArraySizeInWords) {
+      Sample* new_sample = sample_buffer_->ReserveSampleAndLink(sample_);
+      if (new_sample == NULL) {
+        // Could not reserve new sample- mark this as truncated.
+        sample_->set_truncated_trace(true);
+        return false;
+      }
+      frame_index_ = 0;
+      sample_ = new_sample;
+    }
+    ASSERT(frame_index_ < Sample::kPCArraySizeInWords);
+    sample_->SetAt(frame_index_, pc);
+    frame_index_++;
+    total_frames_++;
+    return true;
+  }
+
+ protected:
+  Dart_Port port_id_;
+  Sample* sample_;
+  SampleBuffer* sample_buffer_;
+  intptr_t skip_count_;
+  intptr_t frames_skipped_;
+  intptr_t frame_index_;
+  intptr_t total_frames_;
+};
+
+// The layout of C stack frames.
+#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64) ||                       \
+    defined(HOST_ARCH_ARM) || defined(HOST_ARCH_ARM64)
+// +-------------+
+// | saved IP/LR |
+// +-------------+
+// | saved FP    |  <- FP
+// +-------------+
+static constexpr intptr_t kHostSavedCallerPcSlotFromFp = 1;
+static constexpr intptr_t kHostSavedCallerFpSlotFromFp = 0;
+#elif defined(HOST_ARCH_RISCV32) || defined(HOST_ARCH_RISCV64)
+// +-------------+
+// |             | <- FP
+// +-------------+
+// | saved RA    |
+// +-------------+
+// | saved FP    |
+// +-------------+
+static constexpr intptr_t kHostSavedCallerPcSlotFromFp = -1;
+static constexpr intptr_t kHostSavedCallerFpSlotFromFp = -2;
+#else
+#error What architecture?
+#endif
+
+// If the VM is compiled without frame pointers (which is the default on
+// recent GCC versions with optimizing enabled) the stack walking code may
+// fail.
+//
+class ProfilerNativeStackWalker : public ProfilerStackWalker {
+ public:
+  ProfilerNativeStackWalker(ProfilerCounters* counters,
+                            Dart_Port port_id,
+                            Sample* sample,
+                            SampleBuffer* sample_buffer,
+                            uword stack_lower,
+                            uword stack_upper,
+                            uword pc,
+                            uword fp,
+                            uword sp,
+                            intptr_t skip_count = 0)
+      : ProfilerStackWalker(port_id, sample, sample_buffer, skip_count),
+        counters_(counters),
+        stack_upper_(stack_upper),
+        original_pc_(pc),
+        original_fp_(fp),
+        original_sp_(sp),
+        lower_bound_(stack_lower) {}
+
+  void walk() {
+    const uword kMaxStep = VirtualMemory::PageSize();
+
+    Append(original_pc_, original_fp_);
+
+    uword* pc = reinterpret_cast<uword*>(original_pc_);
+    uword* fp = reinterpret_cast<uword*>(original_fp_);
+    uword* previous_fp = fp;
+
+    uword gap = original_fp_ - original_sp_;
+    if (gap >= kMaxStep) {
+      // Gap between frame pointer and stack pointer is
+      // too large.
+      counters_->incomplete_sample_fp_step.fetch_add(1);
+      return;
+    }
+
+    if (!ValidFramePointer(fp)) {
+      counters_->incomplete_sample_fp_bounds.fetch_add(1);
+      return;
+    }
+
+    while (true) {
+      pc = CallerPC(fp);
+      previous_fp = fp;
+      fp = CallerFP(fp);
+
+      if (fp == NULL) {
+        return;
+      }
+
+      if (fp <= previous_fp) {
+        // Frame pointer did not move to a higher address.
+        counters_->incomplete_sample_fp_step.fetch_add(1);
+        return;
+      }
+
+      gap = fp - previous_fp;
+      if (gap >= kMaxStep) {
+        // Frame pointer step is too large.
+        counters_->incomplete_sample_fp_step.fetch_add(1);
+        return;
+      }
+
+      if (!ValidFramePointer(fp)) {
+        // Frame pointer is outside of isolate stack boundary.
+        counters_->incomplete_sample_fp_bounds.fetch_add(1);
+        return;
+      }
+
+      const uword pc_value = reinterpret_cast<uword>(pc);
+      if ((pc_value + 1) < pc_value) {
+        // It is not uncommon to encounter an invalid pc as we
+        // traverse a stack frame.  Most of these we can tolerate.  If
+        // the pc is so large that adding one to it will cause an
+        // overflow it is invalid and it will cause headaches later
+        // while we are building the profile.  Discard it.
+        counters_->incomplete_sample_bad_pc.fetch_add(1);
+        return;
+      }
+
+      // Move the lower bound up.
+      lower_bound_ = reinterpret_cast<uword>(fp);
+
+      if (!Append(pc_value, reinterpret_cast<uword>(fp))) {
+        return;
+      }
+    }
+  }
+
+ private:
+  uword* CallerPC(uword* fp) const {
+    ASSERT(fp != NULL);
+    uword* caller_pc_ptr = fp + kHostSavedCallerPcSlotFromFp;
+    // This may actually be uninitialized, by design (see class comment above).
+    MSAN_UNPOISON(caller_pc_ptr, kWordSize);
+    ASAN_UNPOISON(caller_pc_ptr, kWordSize);
+    return reinterpret_cast<uword*>(*caller_pc_ptr);
+  }
+
+  uword* CallerFP(uword* fp) const {
+    ASSERT(fp != NULL);
+    uword* caller_fp_ptr = fp + kHostSavedCallerFpSlotFromFp;
+    // This may actually be uninitialized, by design (see class comment above).
+    MSAN_UNPOISON(caller_fp_ptr, kWordSize);
+    ASAN_UNPOISON(caller_fp_ptr, kWordSize);
+    return reinterpret_cast<uword*>(*caller_fp_ptr);
+  }
+
+  bool ValidFramePointer(uword* fp) const {
+    if (fp == NULL) {
+      return false;
+    }
+    uword cursor = reinterpret_cast<uword>(fp);
+    cursor += sizeof(fp);
+    bool r = (cursor >= lower_bound_) && (cursor < stack_upper_);
+    return r;
+  }
+
+  ProfilerCounters* const counters_;
+  const uword stack_upper_;
+  const uword original_pc_;
+  const uword original_fp_;
+  const uword original_sp_;
+  uword lower_bound_;
+};
+
+static bool ValidateThreadStackBounds(uintptr_t fp,
+                                      uintptr_t sp,
+                                      uword stack_lower,
+                                      uword stack_upper) {
+  if (stack_lower >= stack_upper) {
+    // Stack boundary is invalid.
+    return false;
+  }
+
+  if ((sp < stack_lower) || (sp >= stack_upper)) {
+    // Stack pointer is outside thread's stack boundary.
+    return false;
+  }
+
+  if ((fp < stack_lower) || (fp >= stack_upper)) {
+    // Frame pointer is outside threads's stack boundary.
+    return false;
+  }
+
+  return true;
+}
+
+// Get |thread|'s stack boundary and verify that |sp| and |fp| are within
+// it. Return |false| if anything looks suspicious.
+static bool GetAndValidateThreadStackBounds(OSThread* os_thread,
+                                            Thread* thread,
+                                            uintptr_t fp,
+                                            uintptr_t sp,
+                                            uword* stack_lower,
+                                            uword* stack_upper) {
+  ASSERT(os_thread != NULL);
+  ASSERT(stack_lower != NULL);
+  ASSERT(stack_upper != NULL);
+
+#if defined(USING_SIMULATOR)
+  const bool use_simulator_stack_bounds =
+      thread != NULL && thread->IsExecutingDartCode();
+  if (use_simulator_stack_bounds) {
+    Isolate* isolate = thread->isolate();
+    ASSERT(isolate != NULL);
+    Simulator* simulator = isolate->simulator();
+    *stack_lower = simulator->stack_limit();
+    *stack_upper = simulator->stack_base();
+  }
+#else
+  const bool use_simulator_stack_bounds = false;
+#endif  // defined(USING_SIMULATOR)
+
+  if (!use_simulator_stack_bounds) {
+    *stack_lower = os_thread->stack_limit();
+    *stack_upper = os_thread->stack_base();
+  }
+
+  if ((*stack_lower == 0) || (*stack_upper == 0)) {
+    return false;
+  }
+
+  if (!use_simulator_stack_bounds && (sp > *stack_lower)) {
+    // The stack pointer gives us a tighter lower bound.
+    *stack_lower = sp;
+  }
+
+  return ValidateThreadStackBounds(fp, sp, *stack_lower, *stack_upper);
+}
+
+// Some simple sanity checking of |pc|, |fp|, and |sp|.
+static bool InitialRegisterCheck(uintptr_t pc, uintptr_t fp, uintptr_t sp) {
+  if ((sp == 0) || (fp == 0) || (pc == 0)) {
+    // None of these registers should be zero.
+    return false;
+  }
+
+  if (sp > fp) {
+    // Assuming the stack grows down, we should never have a stack pointer above
+    // the frame pointer.
+    return false;
+  }
+
+  return true;
+}
+
+void Profiler::DumpStackTrace(void* context) {
+  if (context == NULL) {
+    DumpStackTrace(/*for_crash=*/true);
+    return;
+  }
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
+    defined(DART_HOST_OS_ANDROID)
+  ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
+  mcontext_t mcontext = ucontext->uc_mcontext;
+  uword pc = SignalHandler::GetProgramCounter(mcontext);
+  uword fp = SignalHandler::GetFramePointer(mcontext);
+  uword sp = SignalHandler::GetCStackPointer(mcontext);
+  DumpStackTrace(sp, fp, pc, /*for_crash=*/true);
+#elif defined(DART_HOST_OS_WINDOWS)
+  CONTEXT* ctx = reinterpret_cast<CONTEXT*>(context);
+#if defined(HOST_ARCH_IA32)
+  uword pc = static_cast<uword>(ctx->Eip);
+  uword fp = static_cast<uword>(ctx->Ebp);
+  uword sp = static_cast<uword>(ctx->Esp);
+#elif defined(HOST_ARCH_X64)
+  uword pc = static_cast<uword>(ctx->Rip);
+  uword fp = static_cast<uword>(ctx->Rbp);
+  uword sp = static_cast<uword>(ctx->Rsp);
+#else
+#error Unsupported architecture.
+#endif
+  DumpStackTrace(sp, fp, pc, /*for_crash=*/true);
+#else
+// TODO(fschneider): Add support for more platforms.
+// Do nothing on unsupported platforms.
+#endif
+}
+
+void Profiler::DumpStackTrace(bool for_crash) {
+  uintptr_t sp = OSThread::GetCurrentStackPointer();
+  uintptr_t fp = 0;
+  uintptr_t pc = OS::GetProgramCounter();
+
+  COPY_FP_REGISTER(fp);
+
+  DumpStackTrace(sp, fp, pc, for_crash);
+}
+
+void Profiler::DumpStackTrace(uword sp, uword fp, uword pc, bool for_crash) {
+  if (for_crash) {
+    // Allow only one stack trace to prevent recursively printing stack traces
+    // if we hit an assert while printing the stack.
+    static RelaxedAtomic<uintptr_t> started_dump = 0;
+    if (started_dump.fetch_add(1u) != 0) {
+      OS::PrintErr("Aborting re-entrant request for stack trace.\n");
+      return;
+    }
+  }
+
+  auto os_thread = OSThread::Current();
+  ASSERT(os_thread != nullptr);
+  auto thread = Thread::Current();  // NULL if no current isolate.
+  auto isolate = thread == nullptr ? nullptr : thread->isolate();
+  auto isolate_group = thread == nullptr ? nullptr : thread->isolate_group();
+  auto source = isolate_group == nullptr ? nullptr : isolate_group->source();
+  auto vm_source =
+      Dart::vm_isolate() == nullptr ? nullptr : Dart::vm_isolate()->source();
+  const char* isolate_group_name =
+      isolate_group == nullptr ? "(nil)" : isolate_group->source()->name;
+  const char* isolate_name = isolate == nullptr ? "(nil)" : isolate->name();
+#if defined(PRODUCT)
+  const intptr_t thread_id = -1;
+#else
+  const intptr_t thread_id = OSThread::ThreadIdToIntPtr(os_thread->trace_id());
+#endif
+
+  OS::PrintErr("version=%s\n", Version::String());
+  OS::PrintErr("pid=%" Pd ", thread=%" Pd
+               ", isolate_group=%s(%p), isolate=%s(%p)\n",
+               static_cast<intptr_t>(OS::ProcessId()), thread_id,
+               isolate_group_name, isolate_group, isolate_name, isolate);
+  OS::PrintErr("isolate_instructions=%" Px ", vm_instructions=%" Px "\n",
+               source == nullptr
+                   ? 0
+                   : reinterpret_cast<uword>(source->snapshot_instructions),
+               vm_source == nullptr
+                   ? 0
+                   : reinterpret_cast<uword>(vm_source->snapshot_instructions));
+
+  if (!InitialRegisterCheck(pc, fp, sp)) {
+    OS::PrintErr("Stack dump aborted because InitialRegisterCheck failed.\n");
+    return;
+  }
+
+  uword stack_lower = 0;
+  uword stack_upper = 0;
+  if (!GetAndValidateThreadStackBounds(os_thread, thread, fp, sp, &stack_lower,
+                                       &stack_upper)) {
+    OS::PrintErr(
+        "Stack dump aborted because GetAndValidateThreadStackBounds failed.\n");
+    return;
+  }
+
+  ProfilerNativeStackWalker native_stack_walker(&counters_, ILLEGAL_PORT, NULL,
+                                                NULL, stack_lower, stack_upper,
+                                                pc, fp, sp,
+                                                /*skip_count=*/0);
+  native_stack_walker.walk();
+  OS::PrintErr("-- End of DumpStackTrace\n");
+
+  if (thread != nullptr) {
+    if (thread->execution_state() == Thread::kThreadInNative) {
+      TransitionNativeToVM transition(thread);
+      StackFrame::DumpCurrentTrace();
+    } else if (thread->execution_state() == Thread::kThreadInVM) {
+      StackFrame::DumpCurrentTrace();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      if (thread->HasCompilerState()) {
+        thread->compiler_state().ReportCrash();
+      }
+#endif
+    }
+  }
+}
+#endif  // !defined(PRODUCT) || defined(DART_PRECOMPILER)
+
 #ifndef PRODUCT
 
 RelaxedAtomic<bool> Profiler::initialized_ = false;
 SampleBlockBuffer* Profiler::sample_block_buffer_ = nullptr;
 AllocationSampleBuffer* Profiler::allocation_sample_buffer_ = nullptr;
-ProfilerCounters Profiler::counters_ = {};
 
 bool SampleBlockProcessor::initialized_ = false;
 bool SampleBlockProcessor::shutdown_ = false;
@@ -263,6 +713,38 @@
   return buffer;
 }
 
+bool SampleBlockListProcessor::HasStreamableSamples(Thread* thread) {
+  ReusableGrowableObjectArrayHandleScope reusable_array_handle_scope(thread);
+  Zone* zone = thread->zone();
+  Isolate* isolate = thread->isolate();
+  ASSERT(isolate->tag_table() != GrowableObjectArray::null());
+  GrowableObjectArray& tag_table = reusable_array_handle_scope.Handle();
+  tag_table ^= isolate->tag_table();
+  UserTag& tag = UserTag::Handle(zone);
+  while (head_ != nullptr) {
+    if (head_->HasStreamableSamples(tag_table, &tag)) {
+      return true;
+    }
+    head_ = head_->next_free_;
+  }
+  return false;
+}
+
+bool SampleBlock::HasStreamableSamples(const GrowableObjectArray& tag_table,
+                                       UserTag* tag) {
+  for (intptr_t i = 0; i < capacity_; ++i) {
+    Sample* sample = At(i);
+    uword sample_tag = sample->user_tag();
+    for (intptr_t j = 0; j < tag_table.Length(); ++j) {
+      *tag ^= tag_table.At(j);
+      if (tag->tag() == sample_tag && tag->streamable()) {
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
 ProcessedSampleBuffer* SampleBlockBuffer::BuildProcessedSampleBuffer(
     SampleFilter* filter,
     ProcessedSampleBuffer* buffer) {
@@ -570,94 +1052,6 @@
   sample->Clear();
 }
 
-static void DumpStackFrame(intptr_t frame_index, uword pc, uword fp) {
-  uword start = 0;
-  if (auto const name = NativeSymbolResolver::LookupSymbolName(pc, &start)) {
-    uword offset = pc - start;
-    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s+0x%" Px "\n", pc, fp, name,
-                 offset);
-    NativeSymbolResolver::FreeSymbolName(name);
-    return;
-  }
-
-  char* dso_name;
-  uword dso_base;
-  if (NativeSymbolResolver::LookupSharedObject(pc, &dso_base, &dso_name)) {
-    uword dso_offset = pc - dso_base;
-    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s+0x%" Px "\n", pc, fp, dso_name,
-                 dso_offset);
-    NativeSymbolResolver::FreeSymbolName(dso_name);
-    return;
-  }
-
-  OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " Unknown symbol\n", pc, fp);
-}
-
-class ProfilerStackWalker : public ValueObject {
- public:
-  ProfilerStackWalker(Dart_Port port_id,
-                      Sample* head_sample,
-                      SampleBuffer* sample_buffer,
-                      intptr_t skip_count = 0)
-      : port_id_(port_id),
-        sample_(head_sample),
-        sample_buffer_(sample_buffer),
-        skip_count_(skip_count),
-        frames_skipped_(0),
-        frame_index_(0),
-        total_frames_(0) {
-    if (sample_ == NULL) {
-      ASSERT(sample_buffer_ == NULL);
-    } else {
-      ASSERT(sample_buffer_ != NULL);
-      ASSERT(sample_->head_sample());
-    }
-  }
-
-  bool Append(uword pc, uword fp) {
-    if (frames_skipped_ < skip_count_) {
-      frames_skipped_++;
-      return true;
-    }
-
-    if (sample_ == NULL) {
-      DumpStackFrame(frame_index_, pc, fp);
-      frame_index_++;
-      total_frames_++;
-      return true;
-    }
-    if (total_frames_ >= FLAG_max_profile_depth) {
-      sample_->set_truncated_trace(true);
-      return false;
-    }
-    ASSERT(sample_ != NULL);
-    if (frame_index_ == Sample::kPCArraySizeInWords) {
-      Sample* new_sample = sample_buffer_->ReserveSampleAndLink(sample_);
-      if (new_sample == NULL) {
-        // Could not reserve new sample- mark this as truncated.
-        sample_->set_truncated_trace(true);
-        return false;
-      }
-      frame_index_ = 0;
-      sample_ = new_sample;
-    }
-    ASSERT(frame_index_ < Sample::kPCArraySizeInWords);
-    sample_->SetAt(frame_index_, pc);
-    frame_index_++;
-    total_frames_++;
-    return true;
-  }
-
- protected:
-  Dart_Port port_id_;
-  Sample* sample_;
-  SampleBuffer* sample_buffer_;
-  intptr_t skip_count_;
-  intptr_t frames_skipped_;
-  intptr_t frame_index_;
-  intptr_t total_frames_;
-};
-
 // Executing Dart code, walk the stack.
 class ProfilerDartStackWalker : public ProfilerStackWalker {
  public:
@@ -666,6 +1060,8 @@
                           SampleBuffer* sample_buffer,
                           uword pc,
                           uword fp,
+                          uword sp,
+                          uword lr,
                           bool allocation_sample,
                           intptr_t skip_count = 0)
       : ProfilerStackWalker((thread->isolate() != NULL)
@@ -676,7 +1072,9 @@
                             skip_count),
         thread_(thread),
         pc_(reinterpret_cast<uword*>(pc)),
-        fp_(reinterpret_cast<uword*>(fp)) {}
+        fp_(reinterpret_cast<uword*>(fp)),
+        sp_(reinterpret_cast<uword*>(sp)),
+        lr_(reinterpret_cast<uword*>(lr)) {}
 
   void walk() {
     RELEASE_ASSERT(StubCode::HasBeenInitialized());
@@ -695,7 +1093,6 @@
       // Skip exit frame.
       pc_ = CallerPC();
       fp_ = CallerFP();
-
     } else {
       if (thread_->vm_tag() == VMTag::kDartTagId) {
         // Running compiled code.
@@ -705,22 +1102,28 @@
         // No Dart on the stack; caller shouldn't use this walker.
         UNREACHABLE();
       }
+
+      const bool is_entry_frame =
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+          StubCode::InInvocationStub(Stack(0)) ||
+          StubCode::InInvocationStub(Stack(1));
+#else
+          StubCode::InInvocationStub(reinterpret_cast<uword>(lr_));
+#endif
+      if (is_entry_frame) {
+        // During the prologue of a function, CallerPC will return the caller's
+        // caller. For most frames, the missing PC will be added during profile
+        // processing. However, during this stack walk, it can cause us to fail
+        // to identify the entry frame and lead the stack walk into the weeds.
+        // Do not continue the stalk walk since this might be a false positive
+        // from a Smi or unboxed value.
+        sample_->set_ignore_sample(true);
+        return;
+      }
     }
 
     sample_->set_exit_frame_sample(has_exit_frame);
 
-    if (!has_exit_frame && (CallerPC() == EntryMarker())) {
-      // During the prologue of a function, CallerPC will return the caller's
-      // caller. For most frames, the missing PC will be added during profile
-      // processing. However, during this stack walk, it can cause us to fail
-      // to identify the entry frame and lead the stack walk into the weeds.
-      // Do not continue the stalk walk since this might be a false positive
-      // from a Smi or unboxed value.
-      RELEASE_ASSERT(!has_exit_frame);
-      sample_->set_ignore_sample(true);
-      return;
-    }
-
     for (;;) {
       // Skip entry frame.
       if (StubCode::InInvocationStub(reinterpret_cast<uword>(pc_))) {
@@ -776,175 +1179,20 @@
     return reinterpret_cast<uword*>(*exit_link_ptr);
   }
 
-  // Note because of stack guards, it is important that this marker lives
-  // above FP.
-  uword* EntryMarker() const {
-    ASSERT(fp_ != NULL);
-    uword* entry_marker_ptr = fp_ + kSavedCallerPcSlotFromFp + 1;
+  uword Stack(intptr_t index) const {
+    ASSERT(sp_ != NULL);
+    uword* stack_ptr = sp_ + index;
     // MSan/ASan are unaware of frames initialized by generated code.
-    MSAN_UNPOISON(entry_marker_ptr, kWordSize);
-    ASAN_UNPOISON(entry_marker_ptr, kWordSize);
-    return reinterpret_cast<uword*>(*entry_marker_ptr);
+    MSAN_UNPOISON(stack_ptr, kWordSize);
+    ASAN_UNPOISON(stack_ptr, kWordSize);
+    return *stack_ptr;
   }
 
   Thread* const thread_;
   uword* pc_;
   uword* fp_;
-};
-
-// The layout of C stack frames.
-#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64) ||                       \
-    defined(HOST_ARCH_ARM) || defined(HOST_ARCH_ARM64)
-// +-------------+
-// | saved IP/LR |
-// +-------------+
-// | saved FP    |  <- FP
-// +-------------+
-static constexpr intptr_t kHostSavedCallerPcSlotFromFp = 1;
-static constexpr intptr_t kHostSavedCallerFpSlotFromFp = 0;
-#elif defined(HOST_ARCH_RISCV32) || defined(HOST_ARCH_RISCV64)
-// +-------------+
-// |             | <- FP
-// +-------------+
-// | saved RA    |
-// +-------------+
-// | saved FP    |
-// +-------------+
-static constexpr intptr_t kHostSavedCallerPcSlotFromFp = -1;
-static constexpr intptr_t kHostSavedCallerFpSlotFromFp = -2;
-#else
-#error What architecture?
-#endif
-
-// If the VM is compiled without frame pointers (which is the default on
-// recent GCC versions with optimizing enabled) the stack walking code may
-// fail.
-//
-class ProfilerNativeStackWalker : public ProfilerStackWalker {
- public:
-  ProfilerNativeStackWalker(ProfilerCounters* counters,
-                            Dart_Port port_id,
-                            Sample* sample,
-                            SampleBuffer* sample_buffer,
-                            uword stack_lower,
-                            uword stack_upper,
-                            uword pc,
-                            uword fp,
-                            uword sp,
-                            intptr_t skip_count = 0)
-      : ProfilerStackWalker(port_id, sample, sample_buffer, skip_count),
-        counters_(counters),
-        stack_upper_(stack_upper),
-        original_pc_(pc),
-        original_fp_(fp),
-        original_sp_(sp),
-        lower_bound_(stack_lower) {}
-
-  void walk() {
-    const uword kMaxStep = VirtualMemory::PageSize();
-
-    Append(original_pc_, original_fp_);
-
-    uword* pc = reinterpret_cast<uword*>(original_pc_);
-    uword* fp = reinterpret_cast<uword*>(original_fp_);
-    uword* previous_fp = fp;
-
-    uword gap = original_fp_ - original_sp_;
-    if (gap >= kMaxStep) {
-      // Gap between frame pointer and stack pointer is
-      // too large.
-      counters_->incomplete_sample_fp_step.fetch_add(1);
-      return;
-    }
-
-    if (!ValidFramePointer(fp)) {
-      counters_->incomplete_sample_fp_bounds.fetch_add(1);
-      return;
-    }
-
-    while (true) {
-      pc = CallerPC(fp);
-      previous_fp = fp;
-      fp = CallerFP(fp);
-
-      if (fp == NULL) {
-        return;
-      }
-
-      if (fp <= previous_fp) {
-        // Frame pointer did not move to a higher address.
-        counters_->incomplete_sample_fp_step.fetch_add(1);
-        return;
-      }
-
-      gap = fp - previous_fp;
-      if (gap >= kMaxStep) {
-        // Frame pointer step is too large.
-        counters_->incomplete_sample_fp_step.fetch_add(1);
-        return;
-      }
-
-      if (!ValidFramePointer(fp)) {
-        // Frame pointer is outside of isolate stack boundary.
-        counters_->incomplete_sample_fp_bounds.fetch_add(1);
-        return;
-      }
-
-      const uword pc_value = reinterpret_cast<uword>(pc);
-      if ((pc_value + 1) < pc_value) {
-        // It is not uncommon to encounter an invalid pc as we
-        // traverse a stack frame.  Most of these we can tolerate.  If
-        // the pc is so large that adding one to it will cause an
-        // overflow it is invalid and it will cause headaches later
-        // while we are building the profile.  Discard it.
-        counters_->incomplete_sample_bad_pc.fetch_add(1);
-        return;
-      }
-
-      // Move the lower bound up.
-      lower_bound_ = reinterpret_cast<uword>(fp);
-
-      if (!Append(pc_value, reinterpret_cast<uword>(fp))) {
-        return;
-      }
-    }
-  }
-
- private:
-  uword* CallerPC(uword* fp) const {
-    ASSERT(fp != NULL);
-    uword* caller_pc_ptr = fp + kHostSavedCallerPcSlotFromFp;
-    // This may actually be uninitialized, by design (see class comment above).
-    MSAN_UNPOISON(caller_pc_ptr, kWordSize);
-    ASAN_UNPOISON(caller_pc_ptr, kWordSize);
-    return reinterpret_cast<uword*>(*caller_pc_ptr);
-  }
-
-  uword* CallerFP(uword* fp) const {
-    ASSERT(fp != NULL);
-    uword* caller_fp_ptr = fp + kHostSavedCallerFpSlotFromFp;
-    // This may actually be uninitialized, by design (see class comment above).
-    MSAN_UNPOISON(caller_fp_ptr, kWordSize);
-    ASAN_UNPOISON(caller_fp_ptr, kWordSize);
-    return reinterpret_cast<uword*>(*caller_fp_ptr);
-  }
-
-  bool ValidFramePointer(uword* fp) const {
-    if (fp == NULL) {
-      return false;
-    }
-    uword cursor = reinterpret_cast<uword>(fp);
-    cursor += sizeof(fp);
-    bool r = (cursor >= lower_bound_) && (cursor < stack_upper_);
-    return r;
-  }
-
-  ProfilerCounters* const counters_;
-  const uword stack_upper_;
-  const uword original_pc_;
-  const uword original_fp_;
-  const uword original_sp_;
-  uword lower_bound_;
+  uword* sp_;
+  uword* lr_;
 };
 
 static void CopyStackBuffer(Sample* sample, uword sp_addr) {
@@ -1039,87 +1287,6 @@
 #endif
 }
 
-static bool ValidateThreadStackBounds(uintptr_t fp,
-                                      uintptr_t sp,
-                                      uword stack_lower,
-                                      uword stack_upper) {
-  if (stack_lower >= stack_upper) {
-    // Stack boundary is invalid.
-    return false;
-  }
-
-  if ((sp < stack_lower) || (sp >= stack_upper)) {
-    // Stack pointer is outside thread's stack boundary.
-    return false;
-  }
-
-  if ((fp < stack_lower) || (fp >= stack_upper)) {
-    // Frame pointer is outside threads's stack boundary.
-    return false;
-  }
-
-  return true;
-}
-
-// Get |thread|'s stack boundary and verify that |sp| and |fp| are within
-// it. Return |false| if anything looks suspicious.
-static bool GetAndValidateThreadStackBounds(OSThread* os_thread,
-                                            Thread* thread,
-                                            uintptr_t fp,
-                                            uintptr_t sp,
-                                            uword* stack_lower,
-                                            uword* stack_upper) {
-  ASSERT(os_thread != NULL);
-  ASSERT(stack_lower != NULL);
-  ASSERT(stack_upper != NULL);
-
-#if defined(USING_SIMULATOR)
-  const bool use_simulator_stack_bounds =
-      thread != NULL && thread->IsExecutingDartCode();
-  if (use_simulator_stack_bounds) {
-    Isolate* isolate = thread->isolate();
-    ASSERT(isolate != NULL);
-    Simulator* simulator = isolate->simulator();
-    *stack_lower = simulator->stack_limit();
-    *stack_upper = simulator->stack_base();
-  }
-#else
-  const bool use_simulator_stack_bounds = false;
-#endif  // defined(USING_SIMULATOR)
-
-  if (!use_simulator_stack_bounds) {
-    *stack_lower = os_thread->stack_limit();
-    *stack_upper = os_thread->stack_base();
-  }
-
-  if ((*stack_lower == 0) || (*stack_upper == 0)) {
-    return false;
-  }
-
-  if (!use_simulator_stack_bounds && (sp > *stack_lower)) {
-    // The stack pointer gives us a tighter lower bound.
-    *stack_lower = sp;
-  }
-
-  return ValidateThreadStackBounds(fp, sp, *stack_lower, *stack_upper);
-}
-
-// Some simple sanity checking of |pc|, |fp|, and |sp|.
-static bool InitialRegisterCheck(uintptr_t pc, uintptr_t fp, uintptr_t sp) {
-  if ((sp == 0) || (fp == 0) || (pc == 0)) {
-    // None of these registers should be zero.
-    return false;
-  }
-
-  if (sp > fp) {
-    // Assuming the stack grows down, we should never have a stack pointer above
-    // the frame pointer.
-    return false;
-  }
-
-  return true;
-}
-
 static Sample* SetupSample(Thread* thread,
                            bool allocation_sample,
                            ThreadId tid) {
@@ -1177,122 +1344,6 @@
   return isolate != Dart::vm_isolate();
 }
 
-void Profiler::DumpStackTrace(void* context) {
-  if (context == NULL) {
-    DumpStackTrace(/*for_crash=*/true);
-    return;
-  }
-#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS) ||              \
-    defined(DART_HOST_OS_ANDROID)
-  ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
-  mcontext_t mcontext = ucontext->uc_mcontext;
-  uword pc = SignalHandler::GetProgramCounter(mcontext);
-  uword fp = SignalHandler::GetFramePointer(mcontext);
-  uword sp = SignalHandler::GetCStackPointer(mcontext);
-  DumpStackTrace(sp, fp, pc, /*for_crash=*/true);
-#elif defined(DART_HOST_OS_WINDOWS)
-  CONTEXT* ctx = reinterpret_cast<CONTEXT*>(context);
-#if defined(HOST_ARCH_IA32)
-  uword pc = static_cast<uword>(ctx->Eip);
-  uword fp = static_cast<uword>(ctx->Ebp);
-  uword sp = static_cast<uword>(ctx->Esp);
-#elif defined(HOST_ARCH_X64)
-  uword pc = static_cast<uword>(ctx->Rip);
-  uword fp = static_cast<uword>(ctx->Rbp);
-  uword sp = static_cast<uword>(ctx->Rsp);
-#else
-#error Unsupported architecture.
-#endif
-  DumpStackTrace(sp, fp, pc, /*for_crash=*/true);
-#else
-// TODO(fschneider): Add support for more platforms.
-// Do nothing on unsupported platforms.
-#endif
-}
-
-void Profiler::DumpStackTrace(bool for_crash) {
-  uintptr_t sp = OSThread::GetCurrentStackPointer();
-  uintptr_t fp = 0;
-  uintptr_t pc = OS::GetProgramCounter();
-
-  COPY_FP_REGISTER(fp);
-
-  DumpStackTrace(sp, fp, pc, for_crash);
-}
-
-void Profiler::DumpStackTrace(uword sp, uword fp, uword pc, bool for_crash) {
-  if (for_crash) {
-    // Allow only one stack trace to prevent recursively printing stack traces
-    // if we hit an assert while printing the stack.
-    static RelaxedAtomic<uintptr_t> started_dump = 0;
-    if (started_dump.fetch_add(1u) != 0) {
-      OS::PrintErr("Aborting re-entrant request for stack trace.\n");
-      return;
-    }
-  }
-
-  auto os_thread = OSThread::Current();
-  ASSERT(os_thread != nullptr);
-  auto thread = Thread::Current();  // NULL if no current isolate.
-  auto isolate = thread == nullptr ? nullptr : thread->isolate();
-  auto isolate_group = thread == nullptr ? nullptr : thread->isolate_group();
-  auto source = isolate_group == nullptr ? nullptr : isolate_group->source();
-  auto vm_source =
-      Dart::vm_isolate() == nullptr ? nullptr : Dart::vm_isolate()->source();
-  const char* isolate_group_name =
-      isolate_group == nullptr ? "(nil)" : isolate_group->source()->name;
-  const char* isolate_name = isolate == nullptr ? "(nil)" : isolate->name();
-
-  OS::PrintErr("version=%s\n", Version::String());
-  OS::PrintErr("pid=%" Pd ", thread=%" Pd
-               ", isolate_group=%s(%p), isolate=%s(%p)\n",
-               static_cast<intptr_t>(OS::ProcessId()),
-               OSThread::ThreadIdToIntPtr(os_thread->trace_id()),
-               isolate_group_name, isolate_group, isolate_name, isolate);
-  OS::PrintErr("isolate_instructions=%" Px ", vm_instructions=%" Px "\n",
-               source == nullptr
-                   ? 0
-                   : reinterpret_cast<uword>(source->snapshot_instructions),
-               vm_source == nullptr
-                   ? 0
-                   : reinterpret_cast<uword>(vm_source->snapshot_instructions));
-
-  if (!InitialRegisterCheck(pc, fp, sp)) {
-    OS::PrintErr("Stack dump aborted because InitialRegisterCheck failed.\n");
-    return;
-  }
-
-  uword stack_lower = 0;
-  uword stack_upper = 0;
-  if (!GetAndValidateThreadStackBounds(os_thread, thread, fp, sp, &stack_lower,
-                                       &stack_upper)) {
-    OS::PrintErr(
-        "Stack dump aborted because GetAndValidateThreadStackBounds failed.\n");
-    return;
-  }
-
-  ProfilerNativeStackWalker native_stack_walker(&counters_, ILLEGAL_PORT, NULL,
-                                                NULL, stack_lower, stack_upper,
-                                                pc, fp, sp,
-                                                /*skip_count=*/0);
-  native_stack_walker.walk();
-  OS::PrintErr("-- End of DumpStackTrace\n");
-
-  if (thread != nullptr) {
-    if (thread->execution_state() == Thread::kThreadInNative) {
-      TransitionNativeToVM transition(thread);
-      StackFrame::DumpCurrentTrace();
-    } else if (thread->execution_state() == Thread::kThreadInVM) {
-      StackFrame::DumpCurrentTrace();
-#if !defined(DART_PRECOMPILED_RUNTIME)
-      if (thread->HasCompilerState()) {
-        thread->compiler_state().ReportCrash();
-      }
-#endif
-    }
-  }
-}
-
 void Profiler::SampleAllocation(Thread* thread,
                                 intptr_t cid,
                                 uint32_t identity_hash) {
@@ -1314,6 +1365,7 @@
   uintptr_t sp = OSThread::GetCurrentStackPointer();
   uintptr_t fp = 0;
   uintptr_t pc = OS::GetProgramCounter();
+  uintptr_t lr = 0;
 
   COPY_FP_REGISTER(fp);
 
@@ -1348,8 +1400,8 @@
     native_stack_walker.walk();
   } else if (exited_dart_code) {
     ProfilerDartStackWalker dart_exit_stack_walker(
-        thread, sample, isolate->current_allocation_sample_block(), pc, fp,
-        /* allocation_sample*/ true);
+        thread, sample, isolate->current_allocation_sample_block(), pc, fp, sp,
+        lr, /* allocation_sample*/ true);
     dart_exit_stack_walker.walk();
   } else {
     // Fall back.
@@ -1457,6 +1509,7 @@
   uintptr_t sp = 0;
   uintptr_t fp = state.fp;
   uintptr_t pc = state.pc;
+  uintptr_t lr = state.lr;
 #if defined(USING_SIMULATOR)
   Simulator* simulator = NULL;
 #endif
@@ -1468,6 +1521,7 @@
     sp = simulator->get_register(SPREG);
     fp = simulator->get_register(FPREG);
     pc = simulator->get_pc();
+    lr = simulator->get_lr();
 #else
     sp = state.dsp;
 #endif
@@ -1540,9 +1594,9 @@
       sample, isolate->current_sample_block(), stack_lower, stack_upper, pc, fp,
       sp);
   const bool exited_dart_code = thread->HasExitedDartCode();
-  ProfilerDartStackWalker dart_stack_walker(thread, sample,
-                                            isolate->current_sample_block(), pc,
-                                            fp, /* allocation_sample*/ false);
+  ProfilerDartStackWalker dart_stack_walker(
+      thread, sample, isolate->current_sample_block(), pc, fp, sp, lr,
+      /* allocation_sample*/ false);
 
   // All memory access is done inside CollectSample.
   CollectSample(isolate, exited_dart_code, in_dart_code, sample,
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index c68c792..dc7e10b 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.h
@@ -756,6 +756,8 @@
   virtual Sample* ReserveSampleAndLink(Sample* previous);
 
  protected:
+  bool HasStreamableSamples(const GrowableObjectArray& tag_table, UserTag* tag);
+
   Isolate* owner_ = nullptr;
   bool allocation_block_ = false;
 
@@ -882,6 +884,10 @@
       SampleFilter* filter,
       ProcessedSampleBuffer* buffer = nullptr);
 
+  // Returns true when at least one sample in the sample block list has a user
+  // tag with CPU sample streaming enabled.
+  bool HasStreamableSamples(Thread* thread);
+
  private:
   SampleBlock* head_;
 
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index eb83d68..80c1008 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -552,6 +552,9 @@
 COMPRESSED_VISITOR(RegExp)
 COMPRESSED_VISITOR(WeakProperty)
 COMPRESSED_VISITOR(WeakReference)
+COMPRESSED_VISITOR(Finalizer)
+COMPRESSED_VISITOR(FinalizerEntry)
+COMPRESSED_VISITOR(NativeFinalizer)
 COMPRESSED_VISITOR(MirrorReference)
 COMPRESSED_VISITOR(UserTag)
 REGULAR_VISITOR(SubtypeTestCache)
@@ -594,6 +597,7 @@
 UNREACHABLE_VISITOR(CallSiteData)
 UNREACHABLE_VISITOR(TypedDataBase)
 UNREACHABLE_VISITOR(Error)
+UNREACHABLE_VISITOR(FinalizerBase)
 UNREACHABLE_VISITOR(Number)
 UNREACHABLE_VISITOR(Integer)
 UNREACHABLE_VISITOR(String)
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 5a084c5..89dae69 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -623,6 +623,20 @@
     }
   }
 
+  template <typename type,
+            typename compressed_type,
+            std::memory_order order = std::memory_order_relaxed>
+  type ExchangeCompressedPointer(compressed_type const* addr, type value) {
+    compressed_type previous_value =
+        reinterpret_cast<std::atomic<compressed_type>*>(
+            const_cast<compressed_type*>(addr))
+            ->exchange(static_cast<compressed_type>(value), order);
+    if (value.IsHeapObject()) {
+      CheckHeapPointerStore(value, Thread::Current());
+    }
+    return static_cast<type>(previous_value.Decompress(heap_base()));
+  }
+
   template <std::memory_order order = std::memory_order_relaxed>
   SmiPtr LoadSmi(SmiPtr const* addr) const {
     return reinterpret_cast<std::atomic<SmiPtr>*>(const_cast<SmiPtr*>(addr))
@@ -911,6 +925,15 @@
  protected:                                                                    \
   Compressed##type name##_;
 
+// Used to define untagged object fields that can have values wrapped in
+// WeakSerializationReferences. Since WeakSerializationReferences are only used
+// during precompilation, these fields have type CompressedObjectPtr in the
+// precompiler and the normally expected type otherwise.
+//
+// Fields that are defined with WSR_COMPRESSED_POINTER_FIELD should have
+// getters and setters that are declared in object.h with
+// PRECOMPILER_WSR_FIELD_DECLARATION and defined in object.cc with
+// PRECOMPILER_WSR_FIELD_DEFINITION.
 #if defined(DART_PRECOMPILER)
 #define WSR_COMPRESSED_POINTER_FIELD(Type, Name)                               \
   COMPRESSED_POINTER_FIELD(ObjectPtr, Name)
@@ -2823,6 +2846,9 @@
 // TypedData extends this with a length field, while Pointer extends this with
 // TypeArguments field.
 class UntaggedPointerBase : public UntaggedInstance {
+ public:
+  uint8_t* data() { return data_; }
+
  protected:
   // The contents of [data_] depends on what concrete subclass is used:
   //
@@ -3265,7 +3291,7 @@
 class UntaggedWeakProperty : public UntaggedInstance {
   RAW_HEAP_OBJECT_IMPLEMENTATION(WeakProperty);
 
-  COMPRESSED_POINTER_FIELD(ObjectPtr, key)
+  COMPRESSED_POINTER_FIELD(ObjectPtr, key)  // Weak reference.
   VISIT_FROM(key)
   COMPRESSED_POINTER_FIELD(ObjectPtr, value)
   VISIT_TO(value)
@@ -3273,8 +3299,10 @@
 
   // Linked list is chaining all pending weak properties. Not visited by
   // pointer visitors.
-  CompressedWeakPropertyPtr next_;
+  COMPRESSED_POINTER_FIELD(WeakPropertyPtr, next_seen_by_gc)
 
+  template <typename Type, typename PtrType>
+  friend class GCLinkedList;
   friend class GCMarker;
   template <bool>
   friend class MarkingVisitorBase;
@@ -3288,7 +3316,7 @@
 class UntaggedWeakReference : public UntaggedInstance {
   RAW_HEAP_OBJECT_IMPLEMENTATION(WeakReference);
 
-  COMPRESSED_POINTER_FIELD(ObjectPtr, target)
+  COMPRESSED_POINTER_FIELD(ObjectPtr, target)  // Weak reference.
   VISIT_FROM(target)
   COMPRESSED_POINTER_FIELD(TypeArgumentsPtr, type_arguments)
   VISIT_TO(type_arguments)
@@ -3296,8 +3324,10 @@
 
   // Linked list is chaining all pending weak properties. Not visited by
   // pointer visitors.
-  CompressedWeakReferencePtr next_;
+  COMPRESSED_POINTER_FIELD(WeakReferencePtr, next_seen_by_gc)
 
+  template <typename Type, typename PtrType>
+  friend class GCLinkedList;
   friend class GCMarker;
   template <bool>
   friend class MarkingVisitorBase;
@@ -3308,6 +3338,114 @@
   friend class SlowObjectCopy;  // For OFFSET_OF
 };
 
+class UntaggedFinalizerBase : public UntaggedInstance {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(FinalizerBase);
+
+  // The isolate this finalizer belongs to. Updated on sent and exit and set
+  // to null on isolate shutdown. See Isolate::finalizers_.
+  Isolate* isolate_;
+
+  COMPRESSED_POINTER_FIELD(ObjectPtr, detachments)
+  VISIT_FROM(detachments)
+  COMPRESSED_POINTER_FIELD(LinkedHashSetPtr, all_entries)
+  COMPRESSED_POINTER_FIELD(FinalizerEntryPtr, entries_collected)
+
+// With compressed pointers, the first field in a subclass is at offset 28.
+// If the fields would be public, the first field in a subclass is at offset 32.
+// On Windows, it is always at offset 32, no matter public/private.
+// This makes it 32 for all OSes.
+// We can't use ALIGN8 on the first fields of the subclasses because they use
+// the COMPRESSED_POINTER_FIELD macro to define it.
+#ifdef DART_COMPRESSED_POINTERS
+  uint32_t align_next_field;
+#endif
+
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
+  friend class GCMarker;
+  template <bool>
+  friend class MarkingVisitorBase;
+  friend class Scavenger;
+  template <bool>
+  friend class ScavengerVisitorBase;
+};
+
+class UntaggedFinalizer : public UntaggedFinalizerBase {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(Finalizer);
+
+  COMPRESSED_POINTER_FIELD(ClosurePtr, callback)
+  COMPRESSED_POINTER_FIELD(TypeArgumentsPtr, type_arguments)
+  VISIT_TO(type_arguments)
+
+  template <std::memory_order order = std::memory_order_relaxed>
+  FinalizerEntryPtr exchange_entries_collected(FinalizerEntryPtr value) {
+    return ExchangeCompressedPointer<FinalizerEntryPtr,
+                                     CompressedFinalizerEntryPtr, order>(
+        &entries_collected_, value);
+  }
+
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
+  friend class GCMarker;
+  template <bool>
+  friend class MarkingVisitorBase;
+  friend class Scavenger;
+  template <bool>
+  friend class ScavengerVisitorBase;
+};
+
+class UntaggedNativeFinalizer : public UntaggedFinalizerBase {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(NativeFinalizer);
+
+  COMPRESSED_POINTER_FIELD(PointerPtr, callback)
+  VISIT_TO(callback)
+
+  friend class GCMarker;
+  template <bool>
+  friend class MarkingVisitorBase;
+  friend class Scavenger;
+  template <bool>
+  friend class ScavengerVisitorBase;
+};
+
+class UntaggedFinalizerEntry : public UntaggedInstance {
+ public:
+  intptr_t external_size() { return external_size_; }
+  void set_external_size(intptr_t value) { external_size_ = value; }
+
+ private:
+  RAW_HEAP_OBJECT_IMPLEMENTATION(FinalizerEntry);
+
+  COMPRESSED_POINTER_FIELD(ObjectPtr, value)  // Weak reference.
+  VISIT_FROM(value)
+  COMPRESSED_POINTER_FIELD(ObjectPtr, detach)  // Weak reference.
+  COMPRESSED_POINTER_FIELD(ObjectPtr, token)
+  COMPRESSED_POINTER_FIELD(FinalizerBasePtr, finalizer)  // Weak reference.
+  // Used for the linked list in Finalizer::entries_collected_. That cannot be
+  // an ordinary list because we need to add elements during a GC so we cannot
+  // modify the heap.
+  COMPRESSED_POINTER_FIELD(FinalizerEntryPtr, next)
+  VISIT_TO(next)
+
+  // Linked list is chaining all pending. Not visited by pointer visitors.
+  // Only populated during the GC, otherwise null.
+  COMPRESSED_POINTER_FIELD(FinalizerEntryPtr, next_seen_by_gc)
+
+  intptr_t external_size_;
+
+  template <typename Type, typename PtrType>
+  friend class GCLinkedList;
+  template <typename GCVisitorType>
+  friend void MournFinalized(GCVisitorType* visitor);
+  friend class GCMarker;
+  template <bool>
+  friend class MarkingVisitorBase;
+  friend class Scavenger;
+  template <bool>
+  friend class ScavengerVisitorBase;
+  friend class ScavengerFinalizerVisitor;
+};
+
 // MirrorReferences are used by mirrors to hold reflectees that are VM
 // internal objects, such as libraries, classes, functions or types.
 class UntaggedMirrorReference : public UntaggedInstance {
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index b5b7854..2fb6faf 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -202,7 +202,7 @@
   const uword pc_offset = caller_frame->pc() - code.PayloadStart();
 
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
 
   const CodeSourceMap& map =
@@ -373,7 +373,7 @@
 
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateDouble, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   arguments.SetReturn(Object::Handle(zone, Double::New(0.0)));
 }
@@ -385,28 +385,28 @@
 
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateMint, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   arguments.SetReturn(Object::Handle(zone, Integer::New(kMaxInt64)));
 }
 
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateFloat32x4, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   arguments.SetReturn(Object::Handle(zone, Float32x4::New(0.0, 0.0, 0.0, 0.0)));
 }
 
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateFloat64x2, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   arguments.SetReturn(Object::Handle(zone, Float64x2::New(0.0, 0.0)));
 }
 
 DEFINE_RUNTIME_ENTRY_NO_LAZY_DEOPT(AllocateInt32x4, 0) {
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   arguments.SetReturn(Object::Handle(zone, Int32x4::New(0, 0, 0, 0)));
 }
@@ -2680,7 +2680,7 @@
   auto isolate_group = thread->isolate_group();
 
   if (FLAG_shared_slow_path_triggers_gc) {
-    isolate->group()->heap()->CollectAllGarbage();
+    isolate->group()->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
 
   bool do_deopt = false;
diff --git a/runtime/vm/runtime_entry.h b/runtime/vm/runtime_entry.h
index 99b6a76..db9f1f0 100644
--- a/runtime/vm/runtime_entry.h
+++ b/runtime/vm/runtime_entry.h
@@ -38,7 +38,7 @@
                bool can_lazy_deopt)
       :
 #if !defined(DART_PRECOMPILED_RUNTIME)
-        compiler::RuntimeEntry(this, &CallInternal),
+        compiler::RuntimeEntry(this),
 #endif
         name_(name),
         function_(function),
@@ -56,15 +56,6 @@
   bool can_lazy_deopt() const { return can_lazy_deopt_; }
   uword GetEntryPoint() const;
 
-  // Generate code to call the runtime entry.
-  NOT_IN_PRECOMPILED(void Call(compiler::Assembler* assembler,
-                               intptr_t argument_count) const);
-
- protected:
-  NOT_IN_PRECOMPILED(static void CallInternal(const RuntimeEntry* runtime_entry,
-                                              compiler::Assembler* assembler,
-                                              intptr_t argument_count));
-
  private:
   const char* const name_;
   const RuntimeFunction function_;
diff --git a/runtime/vm/runtime_entry_arm.cc b/runtime/vm/runtime_entry_arm.cc
index e08ebbd..9941586 100644
--- a/runtime/vm/runtime_entry_arm.cc
+++ b/runtime/vm/runtime_entry_arm.cc
@@ -39,41 +39,6 @@
   return entry;
 }
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-// Generate code to call into the stub which will call the runtime
-// function. Input for the stub is as follows:
-//   SP : points to the arguments and return value array.
-//   R9 : address of the runtime function to call.
-//   R4 : number of arguments to the call.
-void RuntimeEntry::CallInternal(const RuntimeEntry* runtime_entry,
-                                compiler::Assembler* assembler,
-                                intptr_t argument_count) {
-  if (runtime_entry->is_leaf()) {
-    ASSERT(argument_count == runtime_entry->argument_count());
-    __ LoadFromOffset(
-        TMP, THR, compiler::target::Thread::OffsetFromThread(runtime_entry));
-    __ str(TMP,
-           compiler::Address(THR, compiler::target::Thread::vm_tag_offset()));
-    __ blx(TMP);
-    __ LoadImmediate(TMP, VMTag::kDartTagId);
-    __ str(TMP,
-           compiler::Address(THR, compiler::target::Thread::vm_tag_offset()));
-    // These registers must be preserved by runtime functions, otherwise
-    // we'd need to restore them here.
-    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
-    COMPILE_ASSERT(IsCalleeSavedRegister(PP));
-    COMPILE_ASSERT(IsCalleeSavedRegister(CODE_REG));
-  } else {
-    // Argument count is not checked here, but in the runtime entry for a more
-    // informative error message.
-    __ LoadFromOffset(
-        R9, THR, compiler::target::Thread::OffsetFromThread(runtime_entry));
-    __ LoadImmediate(R4, argument_count);
-    __ BranchLinkToRuntime();
-  }
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/runtime_entry_arm64.cc b/runtime/vm/runtime_entry_arm64.cc
index 05efb72..0a596d8 100644
--- a/runtime/vm/runtime_entry_arm64.cc
+++ b/runtime/vm/runtime_entry_arm64.cc
@@ -39,58 +39,6 @@
   return entry;
 }
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-// Generate code to call into the stub which will call the runtime
-// function. Input for the stub is as follows:
-//   SP : points to the arguments and return value array.
-//   R5 : address of the runtime function to call.
-//   R4 : number of arguments to the call.
-void RuntimeEntry::CallInternal(const RuntimeEntry* runtime_entry,
-                                compiler::Assembler* assembler,
-                                intptr_t argument_count) {
-  if (runtime_entry->is_leaf()) {
-    ASSERT(argument_count == runtime_entry->argument_count());
-    // Since we are entering C++ code, we must restore the C stack pointer from
-    // the stack limit to an aligned value nearer to the top of the stack.
-    // We cache the Dart stack pointer and the stack limit in callee-saved
-    // registers, then align and call, restoring CSP and SP on return from the
-    // call.
-    // This sequence may occur in an intrinsic, so don't use registers an
-    // intrinsic must preserve.
-    COMPILE_ASSERT(kCallLeafRuntimeCalleeSaveScratch1 != CODE_REG);
-    COMPILE_ASSERT(kCallLeafRuntimeCalleeSaveScratch2 != CODE_REG);
-    COMPILE_ASSERT(kCallLeafRuntimeCalleeSaveScratch1 != ARGS_DESC_REG);
-    COMPILE_ASSERT(kCallLeafRuntimeCalleeSaveScratch2 != ARGS_DESC_REG);
-    __ mov(kCallLeafRuntimeCalleeSaveScratch1, CSP);
-    __ mov(kCallLeafRuntimeCalleeSaveScratch2, SP);
-    __ ReserveAlignedFrameSpace(0);
-    __ mov(CSP, SP);
-    __ ldr(TMP,
-           compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ str(TMP, compiler::Address(THR, Thread::vm_tag_offset()));
-    __ blr(TMP);
-    __ LoadImmediate(TMP, VMTag::kDartTagId);
-    __ str(TMP, compiler::Address(THR, Thread::vm_tag_offset()));
-    __ mov(SP, kCallLeafRuntimeCalleeSaveScratch2);
-    __ mov(CSP, kCallLeafRuntimeCalleeSaveScratch1);
-    // These registers must be preserved by runtime functions, otherwise
-    // we'd need to restore them here.
-    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
-    COMPILE_ASSERT(IsCalleeSavedRegister(PP));
-    COMPILE_ASSERT(IsCalleeSavedRegister(CODE_REG));
-    COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
-    COMPILE_ASSERT(IsCalleeSavedRegister(HEAP_BITS));
-    COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
-  } else {
-    // Argument count is not checked here, but in the runtime entry for a more
-    // informative error message.
-    __ ldr(R5, compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ LoadImmediate(R4, argument_count);
-    __ BranchLinkToRuntime();
-  }
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM64
diff --git a/runtime/vm/runtime_entry_ia32.cc b/runtime/vm/runtime_entry_ia32.cc
index bbf92c5..2656ff4 100644
--- a/runtime/vm/runtime_entry_ia32.cc
+++ b/runtime/vm/runtime_entry_ia32.cc
@@ -18,38 +18,6 @@
   return reinterpret_cast<uword>(function());
 }
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-// Generate code to call into the stub which will call the runtime
-// function. Input for the stub is as follows:
-// For regular runtime calls -
-//   ESP : points to the arguments and return value array.
-//   ECX : address of the runtime function to call.
-//   EDX : number of arguments to the call as Smi.
-// For leaf calls the caller is responsible to setup the arguments
-// and look for return values based on the C calling convention.
-void RuntimeEntry::CallInternal(const RuntimeEntry* runtime_entry,
-                                compiler::Assembler* assembler,
-                                intptr_t argument_count) {
-  if (runtime_entry->is_leaf()) {
-    ASSERT(argument_count == runtime_entry->argument_count());
-    __ movl(EAX, compiler::Immediate(runtime_entry->GetEntryPoint()));
-    __ movl(compiler::Assembler::VMTagAddress(), EAX);
-    __ call(EAX);
-    __ movl(compiler::Assembler::VMTagAddress(),
-            compiler::Immediate(VMTag::kDartTagId));
-    // These registers must be preserved by runtime functions, otherwise
-    // we'd need to restore them here.
-    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
-  } else {
-    // Argument count is not checked here, but in the runtime entry for a more
-    // informative error message.
-    __ movl(ECX, compiler::Immediate(runtime_entry->GetEntryPoint()));
-    __ movl(EDX, compiler::Immediate(argument_count));
-    __ CallToRuntime();
-  }
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_IA32
diff --git a/runtime/vm/runtime_entry_riscv.cc b/runtime/vm/runtime_entry_riscv.cc
index 3987176..8a03273 100644
--- a/runtime/vm/runtime_entry_riscv.cc
+++ b/runtime/vm/runtime_entry_riscv.cc
@@ -39,47 +39,6 @@
   return entry;
 }
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-// Generate code to call into the stub which will call the runtime
-// function. Input for the stub is as follows:
-//   SP : points to the arguments and return value array.
-//   T5 : address of the runtime function to call.
-//   T4 : number of arguments to the call.
-void RuntimeEntry::CallInternal(const RuntimeEntry* runtime_entry,
-                                compiler::Assembler* assembler,
-                                intptr_t argument_count) {
-  if (runtime_entry->is_leaf()) {
-    ASSERT(argument_count == runtime_entry->argument_count());
-    COMPILE_ASSERT(!IsAbiPreservedRegister(PP));
-    // PP is a C volatile register.
-    // SP will be aligned to the C stack alignment.
-    __ mv(CALLEE_SAVED_TEMP, PP);
-    __ mv(CALLEE_SAVED_TEMP2, SP);
-    __ lx(TMP2,
-          compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ sx(TMP2, compiler::Address(THR, Thread::vm_tag_offset()));
-    __ ReserveAlignedFrameSpace(0);
-    __ jalr(TMP2);
-    __ LoadImmediate(TMP2, VMTag::kDartTagId);
-    __ sx(TMP2, compiler::Address(THR, Thread::vm_tag_offset()));
-    __ mv(PP, CALLEE_SAVED_TEMP);
-    __ mv(SP, CALLEE_SAVED_TEMP2);
-    // These registers must be preserved by runtime functions, otherwise
-    // we'd need to restore them here.
-    COMPILE_ASSERT(IsCalleeSavedRegister(THR));
-    COMPILE_ASSERT(IsCalleeSavedRegister(NULL_REG));
-    COMPILE_ASSERT(IsCalleeSavedRegister(WRITE_BARRIER_MASK));
-    COMPILE_ASSERT(IsCalleeSavedRegister(DISPATCH_TABLE_REG));
-  } else {
-    // Argument count is not checked here, but in the runtime entry for a more
-    // informative error message.
-    __ lx(T5, compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ li(T4, argument_count);
-    __ JumpAndLinkToRuntime();
-  }
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_RISCV
diff --git a/runtime/vm/runtime_entry_x64.cc b/runtime/vm/runtime_entry_x64.cc
index fe759e1..f9d0217 100644
--- a/runtime/vm/runtime_entry_x64.cc
+++ b/runtime/vm/runtime_entry_x64.cc
@@ -20,40 +20,6 @@
   return reinterpret_cast<uword>(function());
 }
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
-// Generate code to call into the stub which will call the runtime
-// function. Input for the stub is as follows:
-//   RSP : points to the arguments and return value array.
-//   RBX : address of the runtime function to call.
-//   R10 : number of arguments to the call.
-void RuntimeEntry::CallInternal(const RuntimeEntry* runtime_entry,
-                                compiler::Assembler* assembler,
-                                intptr_t argument_count) {
-  if (runtime_entry->is_leaf()) {
-    ASSERT(argument_count == runtime_entry->argument_count());
-    COMPILE_ASSERT(CallingConventions::kVolatileCpuRegisters & (1 << RAX));
-    __ movq(RAX,
-            compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ movq(compiler::Assembler::VMTagAddress(), RAX);
-    __ CallCFunction(RAX);
-    __ movq(compiler::Assembler::VMTagAddress(),
-            compiler::Immediate(VMTag::kDartTagId));
-    // These registers must be preserved by runtime functions, otherwise
-    // we'd need to restore them here.
-    ASSERT(IsCalleeSavedRegister(THR));
-    ASSERT(IsCalleeSavedRegister(PP));
-    ASSERT(IsCalleeSavedRegister(CODE_REG));
-  } else {
-    // Argument count is not checked here, but in the runtime entry for a more
-    // informative error message.
-    __ movq(RBX,
-            compiler::Address(THR, Thread::OffsetFromThread(runtime_entry)));
-    __ LoadImmediate(R10, compiler::Immediate(argument_count));
-    __ CallToRuntime();
-  }
-}
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_X64
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 7a966ac..b155a46 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -21,11 +21,6 @@
             "enclosing scope (up to innermost loop) and spare the allocation "
             "of a local context.");
 
-int SourceLabel::FunctionLevel() const {
-  ASSERT(owner() != NULL);
-  return owner()->function_level();
-}
-
 LocalScope::LocalScope(LocalScope* parent, int function_level, int loop_level)
     : parent_(parent),
       child_(NULL),
@@ -36,11 +31,9 @@
       begin_token_pos_(TokenPosition::kNoSource),
       end_token_pos_(TokenPosition::kNoSource),
       variables_(),
-      labels_(),
       context_variables_(),
       context_slots_(new (Thread::Current()->zone())
-                         ZoneGrowableArray<const Slot*>()),
-      referenced_() {
+                         ZoneGrowableArray<const Slot*>()) {
   // Hook this node into the children of the parent, unless the parent has a
   // different function_level, since the local scope of a nested function can
   // be discarded after it has been parsed.
@@ -87,66 +80,6 @@
   return true;
 }
 
-bool LocalScope::AddLabel(SourceLabel* label) {
-  if (LocalLookupLabel(label->name()) != NULL) {
-    return false;
-  }
-  labels_.Add(label);
-  if (label->owner() == NULL) {
-    // Labels must be added to their owner scope first. Subsequent calls
-    // to 'add' treat the label as an alias.
-    label->set_owner(this);
-  }
-  return true;
-}
-
-void LocalScope::MoveLabel(SourceLabel* label) {
-  ASSERT(LocalLookupLabel(label->name()) == NULL);
-  ASSERT(label->kind() == SourceLabel::kForward);
-  labels_.Add(label);
-  label->set_owner(this);
-}
-
-NameReference* LocalScope::FindReference(const String& name) const {
-  ASSERT(name.IsSymbol());
-  intptr_t num_references = referenced_.length();
-  for (intptr_t i = 0; i < num_references; i++) {
-    if (name.ptr() == referenced_[i]->name().ptr()) {
-      return referenced_[i];
-    }
-  }
-  return NULL;
-}
-
-void LocalScope::AddReferencedName(TokenPosition token_pos,
-                                   const String& name) {
-  if (LocalLookupVariable(name) != NULL) {
-    return;
-  }
-  NameReference* ref = FindReference(name);
-  if (ref != NULL) {
-    ref->set_token_pos(token_pos);
-    return;
-  }
-  ref = new NameReference(token_pos, name);
-  referenced_.Add(ref);
-  // Add name reference in innermost enclosing scopes that do not
-  // define a local variable with this name.
-  LocalScope* scope = this->parent();
-  while (scope != NULL && (scope->LocalLookupVariable(name) == NULL)) {
-    scope->referenced_.Add(ref);
-    scope = scope->parent();
-  }
-}
-
-TokenPosition LocalScope::PreviousReferencePos(const String& name) const {
-  NameReference* ref = FindReference(name);
-  if (ref != NULL) {
-    return ref->token_pos();
-  }
-  return TokenPosition::kNoSource;
-}
-
 void LocalScope::AllocateContextVariable(LocalVariable* variable,
                                          LocalScope** context_owner) {
   ASSERT(variable->is_captured());
@@ -464,17 +397,6 @@
   }
 }
 
-SourceLabel* LocalScope::LocalLookupLabel(const String& name) const {
-  ASSERT(name.IsSymbol());
-  for (intptr_t i = 0; i < labels_.length(); i++) {
-    SourceLabel* label = labels_[i];
-    if (label->name().ptr() == name.ptr()) {
-      return label;
-    }
-  }
-  return NULL;
-}
-
 LocalVariable* LocalScope::LocalLookupVariable(const String& name) const {
   ASSERT(name.IsSymbol());
   for (intptr_t i = 0; i < variables_.length(); i++) {
@@ -529,71 +451,6 @@
   }
 }
 
-SourceLabel* LocalScope::LookupLabel(const String& name) {
-  LocalScope* current_scope = this;
-  while (current_scope != NULL) {
-    SourceLabel* label = current_scope->LocalLookupLabel(name);
-    if (label != NULL) {
-      return label;
-    }
-    current_scope = current_scope->parent();
-  }
-  return NULL;
-}
-
-SourceLabel* LocalScope::LookupInnermostLabel(Token::Kind jump_kind) {
-  ASSERT((jump_kind == Token::kCONTINUE) || (jump_kind == Token::kBREAK));
-  LocalScope* current_scope = this;
-  while (current_scope != NULL) {
-    for (intptr_t i = 0; i < current_scope->labels_.length(); i++) {
-      SourceLabel* label = current_scope->labels_[i];
-      if ((label->kind() == SourceLabel::kWhile) ||
-          (label->kind() == SourceLabel::kFor) ||
-          (label->kind() == SourceLabel::kDoWhile) ||
-          ((jump_kind == Token::kBREAK) &&
-           (label->kind() == SourceLabel::kSwitch))) {
-        return label;
-      }
-    }
-    current_scope = current_scope->parent();
-  }
-  return NULL;
-}
-
-LocalScope* LocalScope::LookupSwitchScope() {
-  LocalScope* current_scope = this->parent();
-  int this_level = this->function_level();
-  while (current_scope != NULL &&
-         current_scope->function_level() == this_level) {
-    for (int i = 0; i < current_scope->labels_.length(); i++) {
-      SourceLabel* label = current_scope->labels_[i];
-      if (label->kind() == SourceLabel::kSwitch) {
-        // This scope contains a label that is bound to a switch statement,
-        // so it is the scope of the a statement body.
-        return current_scope;
-      }
-    }
-    current_scope = current_scope->parent();
-  }
-  // We did not find a switch statement scope at the same function level.
-  return NULL;
-}
-
-SourceLabel* LocalScope::CheckUnresolvedLabels() {
-  for (int i = 0; i < this->labels_.length(); i++) {
-    SourceLabel* label = this->labels_[i];
-    if (label->kind() == SourceLabel::kForward) {
-      LocalScope* outer_switch = LookupSwitchScope();
-      if (outer_switch == NULL) {
-        return label;
-      } else {
-        outer_switch->MoveLabel(label);
-      }
-    }
-  }
-  return NULL;
-}
-
 int LocalScope::NumCapturedVariables() const {
   // It is not necessary to traverse parent scopes, since we are only interested
   // in the captured variables referenced in this scope. If this scope is the
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index ff80167..3751aab 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -276,71 +276,6 @@
   GrowableArray<VarDesc> vars_;
 };
 
-class NameReference : public ZoneAllocated {
- public:
-  NameReference(TokenPosition token_pos, const String& name)
-      : token_pos_(token_pos), name_(name) {
-    ASSERT(name.IsSymbol());
-  }
-  const String& name() const { return name_; }
-  TokenPosition token_pos() const { return token_pos_; }
-  void set_token_pos(TokenPosition value) { token_pos_ = value; }
-
- private:
-  TokenPosition token_pos_;
-  const String& name_;
-};
-
-class SourceLabel : public ZoneAllocated {
- public:
-  enum Kind {
-    kFor,
-    kWhile,
-    kDoWhile,
-    kSwitch,
-    kCase,
-    kTry,
-    kCatch,
-    kForward,
-    kStatement  // Any statement other than the above
-  };
-
-  SourceLabel(TokenPosition token_pos, const String& name, Kind kind)
-      : token_pos_(token_pos), name_(name), owner_(NULL), kind_(kind) {
-    ASSERT(name.IsSymbol());
-  }
-
-  static SourceLabel* New(TokenPosition token_pos, String* name, Kind kind) {
-    if (name != NULL) {
-      return new SourceLabel(token_pos, *name, kind);
-    } else {
-      return new SourceLabel(token_pos, Symbols::DefaultLabel(), kind);
-    }
-  }
-
-  TokenPosition token_pos() const { return token_pos_; }
-  const String& name() const { return name_; }
-  LocalScope* owner() const { return owner_; }
-  void set_owner(LocalScope* owner) { owner_ = owner; }
-
-  Kind kind() const { return kind_; }
-
-  // Returns the function level of the scope in which the label is defined.
-  int FunctionLevel() const;
-
-  bool IsUnresolved() { return kind_ == kForward; }
-  void ResolveForwardReference() { kind_ = kCase; }
-
- private:
-  const TokenPosition token_pos_;
-  const String& name_;
-  LocalScope* owner_;  // Local scope declaring this label.
-
-  Kind kind_;
-
-  DISALLOW_COPY_AND_ASSIGN(SourceLabel);
-};
-
 class LocalScope : public ZoneAllocated {
  public:
   LocalScope(LocalScope* parent, int function_level, int loop_level);
@@ -403,19 +338,9 @@
   // Returns false if a variable with the same name is already present.
   bool InsertParameterAt(intptr_t pos, LocalVariable* parameter);
 
-  // Add a label to the scope. Returns false if a label with the same name
-  // is already present.
-  bool AddLabel(SourceLabel* label);
-
-  // Move an unresolved label of a switch case label to an outer switch.
-  void MoveLabel(SourceLabel* label);
-
   // Lookup a variable in this scope only.
   LocalVariable* LocalLookupVariable(const String& name) const;
 
-  // Lookup a label in this scope only.
-  SourceLabel* LocalLookupLabel(const String& name) const;
-
   // Lookup a variable in this scope and its parents. If the variable
   // is found in a parent scope and 'test_only' is not true, we insert
   // aliases of the variable in the current and intermediate scopes up to
@@ -423,26 +348,9 @@
   // We mark a variable as 'captured' when applicable.
   LocalVariable* LookupVariable(const String& name, bool test_only);
 
-  // Lookup a label in this scope and its parents.
-  SourceLabel* LookupLabel(const String& name);
-
-  // Lookup the "innermost" label that labels a for, while, do, or switch
-  // statement.
-  SourceLabel* LookupInnermostLabel(Token::Kind jump_kind);
-
-  // Lookup scope of outer switch statement at same function level.
-  // Returns NULL if this scope is not embedded in a switch.
-  LocalScope* LookupSwitchScope();
-
   // Mark this variable as captured by this scope.
   void CaptureVariable(LocalVariable* variable);
 
-  // Look for unresolved forward references to labels in this scope.
-  // If there are any, propagate the forward reference to the next
-  // outer scope of a switch statement. If there is no outer switch
-  // statement, return the first unresolved label found.
-  SourceLabel* CheckUnresolvedLabels();
-
   // Accessing the variables in the scope.
   intptr_t num_variables() const { return variables_.length(); }
   LocalVariable* VariableAt(intptr_t index) const {
@@ -454,12 +362,6 @@
   // this local scope.
   int NumCapturedVariables() const;
 
-  // Add a reference to the given name into this scope and the enclosing
-  // scopes that do not have a local variable declaration for this name
-  // already.
-  void AddReferencedName(TokenPosition token_pos, const String& name);
-  TokenPosition PreviousReferencePos(const String& name) const;
-
   // Allocate both captured and non-captured variables declared in this scope
   // and in its children scopes of the same function level. Allocating means
   // assigning a frame slot index or a context slot index.
@@ -512,8 +414,6 @@
   void CollectLocalVariables(LocalVarDescriptorsBuilder* vars,
                              int16_t* scope_id);
 
-  NameReference* FindReference(const String& name) const;
-
   static const int kUninitializedContextLevel = INT_MIN;
   LocalScope* parent_;
   LocalScope* child_;
@@ -524,17 +424,12 @@
   TokenPosition begin_token_pos_;  // Token index of beginning of scope.
   TokenPosition end_token_pos_;    // Token index of end of scope.
   GrowableArray<LocalVariable*> variables_;
-  GrowableArray<SourceLabel*> labels_;
 
   // List of variables allocated into the context which is owned by this scope,
   // and their corresponding Slots.
   GrowableArray<LocalVariable*> context_variables_;
   ZoneGrowableArray<const Slot*>* context_slots_;
 
-  // List of names referenced in this scope and its children that
-  // are not resolved to local variables.
-  GrowableArray<NameReference*> referenced_;
-
   DISALLOW_COPY_AND_ASSIGN(LocalScope);
 };
 
diff --git a/runtime/vm/scopes_test.cc b/runtime/vm/scopes_test.cc
index 1005d4c..e54d49e 100644
--- a/runtime/vm/scopes_test.cc
+++ b/runtime/vm/scopes_test.cc
@@ -22,9 +22,6 @@
   const String& c = String::ZoneHandle(Symbols::New(thread, "c"));
   LocalVariable* var_c = new LocalVariable(
       TokenPosition::kNoSource, TokenPosition::kNoSource, c, dynamic_type);
-  const String& L = String::ZoneHandle(Symbols::New(thread, "L"));
-  SourceLabel* label_L =
-      new SourceLabel(TokenPosition::kNoSource, L, SourceLabel::kFor);
 
   LocalScope* outer_scope = new LocalScope(NULL, 0, 0);
   LocalScope* inner_scope1 = new LocalScope(outer_scope, 0, 0);
@@ -51,13 +48,11 @@
   EXPECT(outer_scope->AddVariable(var_a));
   EXPECT(inner_scope1->AddVariable(var_b));
   EXPECT(inner_scope2->AddVariable(var_c));
-  EXPECT(inner_scope2->AddLabel(label_L));
   EXPECT(!outer_scope->AddVariable(var_a));
 
   // Check the simple layout above.
   EXPECT_EQ(var_a, outer_scope->LocalLookupVariable(a));
   EXPECT_EQ(var_a, inner_scope1->LookupVariable(a, true));
-  EXPECT_EQ(label_L, inner_scope2->LookupLabel(L));
   EXPECT(outer_scope->LocalLookupVariable(b) == NULL);
   EXPECT(inner_scope1->LocalLookupVariable(c) == NULL);
 
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 336cd88..72b9021 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -1205,9 +1205,9 @@
   if (!ServiceIsolate::IsRunning()) {
     OS::PrintErr("  Start the vm-service to debug.\n");
   } else if (ServiceIsolate::server_address() == NULL) {
-    OS::PrintErr("  Connect to Observatory to debug.\n");
+    OS::PrintErr("  Connect to the Dart VM service to debug.\n");
   } else {
-    OS::PrintErr("  Connect to Observatory at %s to debug.\n",
+    OS::PrintErr("  Connect to the Dart VM service at %s to debug.\n",
                  ServiceIsolate::server_address());
   }
   const Error& err = Error::Handle(Thread::Current()->sticky_error());
@@ -4389,7 +4389,7 @@
   bool include_code_samples =
       BoolParameter::Parse(js->LookupParam("_code"), false);
 #if defined(DEBUG)
-  IsolateGroup::Current()->heap()->CollectAllGarbage();
+  IsolateGroup::Current()->heap()->CollectAllGarbage(GCReason::kDebugging);
 #endif
   if (CheckNativeAllocationProfilerDisabled(thread, js)) {
     return;
@@ -4435,7 +4435,7 @@
   }
   if (should_collect) {
     isolate_group->UpdateLastAllocationProfileGCTimestamp();
-    isolate_group->heap()->CollectAllGarbage();
+    isolate_group->heap()->CollectAllGarbage(GCReason::kDebugging);
   }
   isolate_group->class_table()->AllocationProfilePrintJSON(js, internal);
 }
diff --git a/runtime/vm/simulator_arm.h b/runtime/vm/simulator_arm.h
index 61beaec..8851f6f 100644
--- a/runtime/vm/simulator_arm.h
+++ b/runtime/vm/simulator_arm.h
@@ -53,6 +53,7 @@
   }
 
   int32_t get_sp() const { return get_register(SPREG); }
+  int32_t get_lr() const { return get_register(R14); }
 
   // Special case of set_register and get_register to access the raw PC value.
   void set_pc(int32_t value);
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index 056678d..4f34a91 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -966,6 +966,19 @@
     if ((instr != NULL) && (reg == R31) && !Utils::IsAligned(value, 16)) {
       UnalignedAccess("CSP set", value, instr);
     }
+
+#if defined(DEBUG)
+    if (reg == SP) {
+      // Memory below CSP can be written to at any instruction boundary by a
+      // signal handler. Simulate this to ensure we're keeping CSP far enough
+      // ahead of SP to prevent Dart frames from being trashed.
+      uword csp = registers_[R31];
+      WriteX(csp - 1 * kWordSize, icount_, NULL);
+      WriteX(csp - 2 * kWordSize, icount_, NULL);
+      WriteX(csp - 3 * kWordSize, icount_, NULL);
+      WriteX(csp - 4 * kWordSize, icount_, NULL);
+    }
+#endif
   }
 }
 
@@ -2113,17 +2126,16 @@
 void Simulator::DecodeLoadStoreRegPair(Instr* instr) {
   const int32_t opc = instr->Bits(23, 3);
   const Register rn = instr->RnField();
-  const Register rt = instr->RtField();
-  const Register rt2 = instr->Rt2Field();
   const int64_t rn_val = get_register(rn, R31IsSP);
-  const intptr_t shift = 2 + instr->SFField();
+  const intptr_t shift =
+      (instr->Bit(26) == 1) ? 2 + instr->SzField() : 2 + instr->SFField();
   const intptr_t size = 1 << shift;
   const int32_t offset = (static_cast<uint32_t>(instr->SImm7Field()) << shift);
   uword address = 0;
   uword wb_address = 0;
   bool wb = false;
 
-  if ((instr->Bits(30, 2) == 3) || (instr->Bit(26) != 0)) {
+  if ((instr->Bits(30, 2) == 3)) {
     UnimplementedInstruction(instr);
     return;
   }
@@ -2155,45 +2167,109 @@
   }
 
   // Do access.
-  if (instr->Bit(22)) {
-    // Format(instr, "ldp'sf 'rt, 'ra, 'memop");
-    const bool signd = instr->Bit(30) == 1;
-    int64_t val1 = 0;  // Sign extend into an int64_t.
-    int64_t val2 = 0;
-    if (instr->Bit(31) == 1) {
-      // 64-bit read.
-      val1 = ReadX(address, instr);
-      val2 = ReadX(address + size, instr);
+  if (instr->Bit(26) == 1) {
+    // SIMD/FP.
+    const VRegister vt = instr->VtField();
+    const VRegister vt2 = instr->Vt2Field();
+    if (instr->Bit(22)) {
+      // Format(instr, "ldp 'vt, 'vt2, 'memop");
+      switch (size) {
+        case 4:
+          set_vregisterd(vt, 0, static_cast<int64_t>(ReadWU(address, instr)));
+          set_vregisterd(vt, 1, 0);
+          set_vregisterd(vt2, 0,
+                         static_cast<int64_t>(ReadWU(address + 4, instr)));
+          set_vregisterd(vt2, 1, 0);
+          break;
+        case 8:
+          set_vregisterd(vt, 0, ReadX(address, instr));
+          set_vregisterd(vt, 1, 0);
+          set_vregisterd(vt2, 0, ReadX(address + 8, instr));
+          set_vregisterd(vt2, 1, 0);
+          break;
+        case 16: {
+          simd_value_t val;
+          val.bits.i64[0] = ReadX(address, instr);
+          val.bits.i64[1] = ReadX(address + 8, instr);
+          set_vregister(vt, val);
+          val.bits.i64[0] = ReadX(address + 16, instr);
+          val.bits.i64[1] = ReadX(address + 24, instr);
+          set_vregister(vt2, val);
+          break;
+        }
+        default:
+          UnimplementedInstruction(instr);
+          return;
+      }
     } else {
-      if (signd) {
-        val1 = static_cast<int64_t>(ReadW(address, instr));
-        val2 = static_cast<int64_t>(ReadW(address + size, instr));
-      } else {
-        val1 = static_cast<int64_t>(ReadWU(address, instr));
-        val2 = static_cast<int64_t>(ReadWU(address + size, instr));
+      // Format(instr, "stp 'vt, 'vt2, 'memop");
+      switch (size) {
+        case 4:
+          WriteW(address, get_vregisterd(vt, 0) & kWRegMask, instr);
+          WriteW(address + 4, get_vregisterd(vt2, 0) & kWRegMask, instr);
+          break;
+        case 8:
+          WriteX(address, get_vregisterd(vt, 0), instr);
+          WriteX(address + 8, get_vregisterd(vt2, 0), instr);
+          break;
+        case 16: {
+          simd_value_t val;
+          get_vregister(vt, &val);
+          WriteX(address, val.bits.i64[0], instr);
+          WriteX(address + 8, val.bits.i64[1], instr);
+          get_vregister(vt2, &val);
+          WriteX(address + 16, val.bits.i64[0], instr);
+          WriteX(address + 24, val.bits.i64[1], instr);
+          break;
+        }
+        default:
+          UnimplementedInstruction(instr);
+          return;
       }
     }
-
-    // Write to register.
-    if (instr->Bit(31) == 1) {
-      set_register(instr, rt, val1, R31IsZR);
-      set_register(instr, rt2, val2, R31IsZR);
-    } else {
-      set_wregister(rt, static_cast<int32_t>(val1), R31IsZR);
-      set_wregister(rt2, static_cast<int32_t>(val2), R31IsZR);
-    }
   } else {
-    // Format(instr, "stp'sf 'rt, 'ra, 'memop");
-    if (instr->Bit(31) == 1) {
-      const int64_t val1 = get_register(rt, R31IsZR);
-      const int64_t val2 = get_register(rt2, R31IsZR);
-      WriteX(address, val1, instr);
-      WriteX(address + size, val2, instr);
+    // Integer.
+    const Register rt = instr->RtField();
+    const Register rt2 = instr->Rt2Field();
+    if (instr->Bit(22)) {
+      // Format(instr, "ldp'sf 'rt, 'rt2, 'memop");
+      const bool signd = instr->Bit(30) == 1;
+      int64_t val1 = 0;  // Sign extend into an int64_t.
+      int64_t val2 = 0;
+      if (instr->Bit(31) == 1) {
+        // 64-bit read.
+        val1 = ReadX(address, instr);
+        val2 = ReadX(address + size, instr);
+      } else {
+        if (signd) {
+          val1 = static_cast<int64_t>(ReadW(address, instr));
+          val2 = static_cast<int64_t>(ReadW(address + size, instr));
+        } else {
+          val1 = static_cast<int64_t>(ReadWU(address, instr));
+          val2 = static_cast<int64_t>(ReadWU(address + size, instr));
+        }
+      }
+      // Write to register.
+      if (instr->Bit(31) == 1) {
+        set_register(instr, rt, val1, R31IsZR);
+        set_register(instr, rt2, val2, R31IsZR);
+      } else {
+        set_wregister(rt, static_cast<int32_t>(val1), R31IsZR);
+        set_wregister(rt2, static_cast<int32_t>(val2), R31IsZR);
+      }
     } else {
-      const int32_t val1 = get_wregister(rt, R31IsZR);
-      const int32_t val2 = get_wregister(rt2, R31IsZR);
-      WriteW(address, val1, instr);
-      WriteW(address + size, val2, instr);
+      // Format(instr, "stp'sf 'rt, 'rt2, 'memop");
+      if (instr->Bit(31) == 1) {
+        const int64_t val1 = get_register(rt, R31IsZR);
+        const int64_t val2 = get_register(rt2, R31IsZR);
+        WriteX(address, val1, instr);
+        WriteX(address + size, val2, instr);
+      } else {
+        const int32_t val1 = get_wregister(rt, R31IsZR);
+        const int32_t val2 = get_wregister(rt2, R31IsZR);
+        WriteW(address, val1, instr);
+        WriteW(address + size, val2, instr);
+      }
     }
   }
 
@@ -3734,6 +3810,7 @@
   set_register(NULL, SP, static_cast<int64_t>(sp));
   set_register(NULL, FP, static_cast<int64_t>(fp));
   set_register(NULL, THR, reinterpret_cast<int64_t>(thread));
+  set_register(NULL, R31, thread->saved_stack_limit() - 4096);
   // Set the tag.
   thread->set_vm_tag(VMTag::kDartTagId);
   // Clear top exit frame.
diff --git a/runtime/vm/simulator_arm64.h b/runtime/vm/simulator_arm64.h
index 7cfbc16..be20b2b 100644
--- a/runtime/vm/simulator_arm64.h
+++ b/runtime/vm/simulator_arm64.h
@@ -67,6 +67,7 @@
   void set_vregister(VRegister reg, const simd_value_t& value);
 
   int64_t get_sp() const { return get_register(SPREG); }
+  int64_t get_lr() const { return get_register(R30); }
 
   uint64_t get_pc() const;
   uint64_t get_last_pc() const;
diff --git a/runtime/vm/simulator_riscv.h b/runtime/vm/simulator_riscv.h
index b63ed39..9a5ca23 100644
--- a/runtime/vm/simulator_riscv.h
+++ b/runtime/vm/simulator_riscv.h
@@ -165,6 +165,7 @@
   uintx_t get_pc() const { return pc_; }
   uintx_t get_sp() const { return get_xreg(SP); }
   uintx_t get_fp() const { return get_xreg(FP); }
+  uintx_t get_lr() const { return get_xreg(RA); }
   void PrintRegisters();
   void PrintStack();
 
diff --git a/runtime/vm/stack_frame.cc b/runtime/vm/stack_frame.cc
index 55eebc9..0297144 100644
--- a/runtime/vm/stack_frame.cc
+++ b/runtime/vm/stack_frame.cc
@@ -722,7 +722,7 @@
   for (intptr_t index = index_; index < deopt_instructions_.length(); index++) {
     DeoptInstr* deopt_instr = deopt_instructions_[index];
     if (deopt_instr->kind() == DeoptInstr::kCallerFp) {
-      return index - num_materializations_;
+      return index - num_materializations_ - kSavedCallerFpSlotFromFp;
     }
   }
   UNREACHABLE();
diff --git a/runtime/vm/stack_frame_riscv.h b/runtime/vm/stack_frame_riscv.h
index 4bf58ab..58b31a6 100644
--- a/runtime/vm/stack_frame_riscv.h
+++ b/runtime/vm/stack_frame_riscv.h
@@ -23,10 +23,10 @@
                | first local       T|
                | caller's PP       T|
                | code object       T|    (current frame's code object)
-               | caller's FP        | <- FP of current frame
+               | caller's FP        |
                | caller's RA        |    (PC of caller frame)
                +--------------------+
-Caller frame   | last parameter     | <- SP of caller frame
+Caller frame   | last parameter     | <- SP of caller frame, FP of current frame
                |  ...               |
 
                T against a slot indicates it needs to be traversed during GC.
@@ -35,24 +35,24 @@
 static const int kDartFrameFixedSize = 4;  // PP, FP, RA, PC marker.
 static const int kSavedPcSlotFromSp = -1;
 
-static const int kFirstObjectSlotFromFp = -1;  // Used by GC to traverse stack.
-static const int kLastFixedObjectSlotFromFp = -2;
+static const int kFirstObjectSlotFromFp = -3;  // Used by GC to traverse stack.
+static const int kLastFixedObjectSlotFromFp = -4;
 
-static const int kFirstLocalSlotFromFp = -3;
-static const int kSavedCallerPpSlotFromFp = -2;
-static const int kPcMarkerSlotFromFp = -1;
-static const int kSavedCallerFpSlotFromFp = 0;
-static const int kSavedCallerPcSlotFromFp = 1;
+static const int kFirstLocalSlotFromFp = -5;
+static const int kSavedCallerPpSlotFromFp = -4;
+static const int kPcMarkerSlotFromFp = -3;
+static const int kSavedCallerFpSlotFromFp = -2;
+static const int kSavedCallerPcSlotFromFp = -1;
 
-static const int kParamEndSlotFromFp = 1;  // One slot past last parameter.
-static const int kCallerSpSlotFromFp = 2;
+static const int kParamEndSlotFromFp = -1;  // One slot past last parameter.
+static const int kCallerSpSlotFromFp = 0;
 static const int kLastParamSlotFromEntrySp = 0;
 
 // Entry and exit frame layout.
 #if defined(TARGET_ARCH_RISCV64)
-static const int kExitLinkSlotFromEntryFp = -28;
+static const int kExitLinkSlotFromEntryFp = -30;
 #elif defined(TARGET_ARCH_RISCV32)
-static const int kExitLinkSlotFromEntryFp = -40;
+static const int kExitLinkSlotFromEntryFp = -42;
 #endif
 COMPILE_ASSERT(kAbiPreservedCpuRegCount == 11);
 COMPILE_ASSERT(kAbiPreservedFpuRegCount == 12);
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 9b665c2..4c7cbcf 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -83,7 +83,8 @@
       var_data_field(Field::Handle(zone)),
       state_field(Field::Handle(zone)),
       on_data_field(Field::Handle(zone)),
-      state_data_field(Field::Handle(zone)) {
+      state_data_field(Field::Handle(zone)),
+      has_value_field(Field::Handle(zone)) {
   const auto& async_lib = Library::Handle(zone, Library::AsyncLibrary());
   // Look up classes:
   // - async:
@@ -143,6 +144,9 @@
   state_data_field =
       stream_iterator_class.LookupFieldAllowPrivate(Symbols::_stateData());
   ASSERT(!state_data_field.IsNull());
+  has_value_field =
+      stream_iterator_class.LookupFieldAllowPrivate(Symbols::_hasValue());
+  ASSERT(!has_value_field.IsNull());
 }
 
 ClosurePtr CallerClosureFinder::GetCallerInFutureImpl(const Object& future) {
@@ -201,9 +205,33 @@
 
   // If the async* stream is await-for'd:
   if (callback_instance_.GetClassId() == stream_iterator_class.id()) {
-    // _StreamIterator._stateData
-    future_ = Instance::Cast(callback_instance_).GetField(state_data_field);
-    return GetCallerInFutureImpl(future_);
+    // If `_hasValue` is true then the `StreamIterator._stateData` field
+    // contains the iterator's value. In that case we cannot unwind anymore.
+    //
+    // Notice: With correct async* semantics this may never be true: The async*
+    // generator should only be invoked to produce a vaue if there's an
+    // in-progress `await streamIterator.moveNext()` call. Once such call has
+    // finished the async* generator should be paused/yielded until the next
+    // such call - and being paused/yielded means it should not appear in stack
+    // traces.
+    //
+    // See dartbug.com/48695.
+    const auto& stream_iterator = Instance::Cast(callback_instance_);
+    if (stream_iterator.GetField(has_value_field) ==
+        Object::bool_true().ptr()) {
+      return Closure::null();
+    }
+
+    // If we have an await'er for `await streamIterator.moveNext()` we continue
+    // unwinding there.
+    //
+    // Notice: With correct async* semantics this may always contain a Future
+    // See also comment above as well as dartbug.com/48695.
+    future_ = stream_iterator.GetField(state_data_field);
+    if (future_.GetClassId() == future_impl_class.id()) {
+      return GetCallerInFutureImpl(future_);
+    }
+    return Closure::null();
   }
 
   UNREACHABLE();  // If no onData is found we have a bug.
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index 566a0a8..0683cf7 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -92,6 +92,7 @@
   Field& state_field;
   Field& on_data_field;
   Field& state_data_field;
+  Field& has_value_field;
 
   DISALLOW_COPY_AND_ASSIGN(CallerClosureFinder);
 };
diff --git a/runtime/vm/stub_code_arm64_test.cc b/runtime/vm/stub_code_arm64_test.cc
index 9814bba..28c2c1b 100644
--- a/runtime/vm/stub_code_arm64_test.cc
+++ b/runtime/vm/stub_code_arm64_test.cc
@@ -81,12 +81,16 @@
   const Smi& rhs_index = Smi::ZoneHandle(Smi::New(rhs_index_value));
   const Smi& length = Smi::ZoneHandle(Smi::New(length_value));
   __ EnterDartFrame(0);
-  __ ReserveAlignedFrameSpace(0);
-  __ LoadObject(R0, str);
-  __ LoadObject(R1, lhs_index);
-  __ LoadObject(R2, rhs_index);
-  __ LoadObject(R3, length);
-  __ CallRuntime(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  {
+    compiler::LeafRuntimeScope rt(assembler,
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    __ LoadObject(R0, str);
+    __ LoadObject(R1, lhs_index);
+    __ LoadObject(R2, rhs_index);
+    __ LoadObject(R3, length);
+    rt.Call(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  }
   __ LeaveDartFrame();
   __ ret();  // Return value is in R0.
 }
@@ -107,6 +111,10 @@
   const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
       *CreateFunction("Test_CallLeafRuntimeStubCode"), nullptr, &assembler,
       Code::PoolAttachment::kAttachPool));
+  if (FLAG_disassemble) {
+    OS::PrintErr("Disassemble:\n");
+    code.Disassemble();
+  }
   const Function& function = RegisterFakeFunction(kName, code);
   Instance& result = Instance::Handle();
   result ^= DartEntry::InvokeFunction(function, Object::empty_array());
diff --git a/runtime/vm/stub_code_arm_test.cc b/runtime/vm/stub_code_arm_test.cc
index 9fee1fd..a905113 100644
--- a/runtime/vm/stub_code_arm_test.cc
+++ b/runtime/vm/stub_code_arm_test.cc
@@ -80,12 +80,16 @@
   const Smi& rhs_index = Smi::ZoneHandle(Smi::New(rhs_index_value));
   const Smi& length = Smi::ZoneHandle(Smi::New(length_value));
   __ EnterDartFrame(0);
-  __ ReserveAlignedFrameSpace(0);
-  __ LoadObject(R0, str);
-  __ LoadObject(R1, lhs_index);
-  __ LoadObject(R2, rhs_index);
-  __ LoadObject(R3, length);
-  __ CallRuntime(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  {
+    compiler::LeafRuntimeScope rt(assembler,
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    __ LoadObject(R0, str);
+    __ LoadObject(R1, lhs_index);
+    __ LoadObject(R2, rhs_index);
+    __ LoadObject(R3, length);
+    rt.Call(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  }
   __ LeaveDartFrameAndReturn();  // Return value is in R0.
 }
 
@@ -105,6 +109,10 @@
   const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
       *CreateFunction("Test_CallLeafRuntimeStubCode"), nullptr, &assembler,
       Code::PoolAttachment::kAttachPool));
+  if (FLAG_disassemble) {
+    OS::PrintErr("Disassemble:\n");
+    code.Disassemble();
+  }
   const Function& function = RegisterFakeFunction(kName, code);
   Instance& result = Instance::Handle();
   result ^= DartEntry::InvokeFunction(function, Object::empty_array());
diff --git a/runtime/vm/stub_code_ia32_test.cc b/runtime/vm/stub_code_ia32_test.cc
index 13473ad..b7f5ec1 100644
--- a/runtime/vm/stub_code_ia32_test.cc
+++ b/runtime/vm/stub_code_ia32_test.cc
@@ -80,16 +80,20 @@
   const Smi& rhs_index = Smi::ZoneHandle(Smi::New(rhs_index_value));
   const Smi& length = Smi::ZoneHandle(Smi::New(length_value));
   __ enter(compiler::Immediate(0));
-  __ ReserveAlignedFrameSpace(4 * kWordSize);
-  __ LoadObject(EAX, str);
-  __ movl(compiler::Address(ESP, 0), EAX);  // Push argument 1.
-  __ LoadObject(EAX, lhs_index);
-  __ movl(compiler::Address(ESP, kWordSize), EAX);  // Push argument 2.
-  __ LoadObject(EAX, rhs_index);
-  __ movl(compiler::Address(ESP, 2 * kWordSize), EAX);  // Push argument 3.
-  __ LoadObject(EAX, length);
-  __ movl(compiler::Address(ESP, 3 * kWordSize), EAX);  // Push argument 4.
-  __ CallRuntime(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  {
+    compiler::LeafRuntimeScope rt(assembler,
+                                  /*frame_size=*/4 * kWordSize,
+                                  /*preserve_registers=*/false);
+    __ LoadObject(EAX, str);
+    __ movl(compiler::Address(ESP, 0), EAX);  // Push argument 1.
+    __ LoadObject(EAX, lhs_index);
+    __ movl(compiler::Address(ESP, kWordSize), EAX);  // Push argument 2.
+    __ LoadObject(EAX, rhs_index);
+    __ movl(compiler::Address(ESP, 2 * kWordSize), EAX);  // Push argument 3.
+    __ LoadObject(EAX, length);
+    __ movl(compiler::Address(ESP, 3 * kWordSize), EAX);  // Push argument 4.
+    rt.Call(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  }
   __ leave();
   __ ret();  // Return value is in EAX.
 }
@@ -109,6 +113,10 @@
   const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
       *CreateFunction("Test_CallLeafRuntimeStubCode"), nullptr, &assembler,
       Code::PoolAttachment::kAttachPool));
+  if (FLAG_disassemble) {
+    OS::PrintErr("Disassemble:\n");
+    code.Disassemble();
+  }
   const Function& function = RegisterFakeFunction(kName, code);
   Instance& result = Instance::Handle();
   result ^= DartEntry::InvokeFunction(function, Object::empty_array());
diff --git a/runtime/vm/stub_code_riscv_test.cc b/runtime/vm/stub_code_riscv_test.cc
index df605de..d97a775 100644
--- a/runtime/vm/stub_code_riscv_test.cc
+++ b/runtime/vm/stub_code_riscv_test.cc
@@ -81,12 +81,16 @@
   const Smi& rhs_index = Smi::ZoneHandle(Smi::New(rhs_index_value));
   const Smi& length = Smi::ZoneHandle(Smi::New(length_value));
   __ EnterDartFrame(0);
-  __ ReserveAlignedFrameSpace(0);
-  __ LoadObject(A0, str);
-  __ LoadObject(A1, lhs_index);
-  __ LoadObject(A2, rhs_index);
-  __ LoadObject(A3, length);
-  __ CallRuntime(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  {
+    compiler::LeafRuntimeScope rt(assembler,
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    __ LoadObject(A0, str);
+    __ LoadObject(A1, lhs_index);
+    __ LoadObject(A2, rhs_index);
+    __ LoadObject(A3, length);
+    rt.Call(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  }
   __ LeaveDartFrame();
   __ ret();  // Return value is in A0.
 }
@@ -107,6 +111,10 @@
   const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
       *CreateFunction("Test_CallLeafRuntimeStubCode"), nullptr, &assembler,
       Code::PoolAttachment::kAttachPool));
+  if (FLAG_disassemble) {
+    OS::PrintErr("Disassemble:\n");
+    code.Disassemble();
+  }
   const Function& function = RegisterFakeFunction(kName, code);
   Instance& result = Instance::Handle();
   result ^= DartEntry::InvokeFunction(function, Object::empty_array());
diff --git a/runtime/vm/stub_code_x64_test.cc b/runtime/vm/stub_code_x64_test.cc
index c586af8..d1d85c6 100644
--- a/runtime/vm/stub_code_x64_test.cc
+++ b/runtime/vm/stub_code_x64_test.cc
@@ -81,12 +81,16 @@
   const Smi& rhs_index = Smi::ZoneHandle(Smi::New(rhs_index_value));
   const Smi& length = Smi::ZoneHandle(Smi::New(length_value));
   __ EnterStubFrame();
-  __ ReserveAlignedFrameSpace(0);
-  __ LoadObject(CallingConventions::kArg1Reg, str);
-  __ LoadObject(CallingConventions::kArg2Reg, lhs_index);
-  __ LoadObject(CallingConventions::kArg3Reg, rhs_index);
-  __ LoadObject(CallingConventions::kArg4Reg, length);
-  __ CallRuntime(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  {
+    compiler::LeafRuntimeScope rt(assembler,
+                                  /*frame_size=*/0,
+                                  /*preserve_registers=*/false);
+    __ LoadObject(CallingConventions::kArg1Reg, str);
+    __ LoadObject(CallingConventions::kArg2Reg, lhs_index);
+    __ LoadObject(CallingConventions::kArg3Reg, rhs_index);
+    __ LoadObject(CallingConventions::kArg4Reg, length);
+    rt.Call(kCaseInsensitiveCompareUCS2RuntimeEntry, 4);
+  }
   __ LeaveStubFrame();
   __ ret();  // Return value is in RAX.
 }
@@ -107,6 +111,10 @@
   const Code& code = Code::Handle(Code::FinalizeCodeAndNotify(
       *CreateFunction("Test_CallLeafRuntimeStubCode"), nullptr, &assembler,
       Code::PoolAttachment::kAttachPool));
+  if (FLAG_disassemble) {
+    OS::PrintErr("Disassemble:\n");
+    code.Disassemble();
+  }
   const Function& function = RegisterFakeFunction(kName, code);
   Instance& result = Instance::Handle();
   result ^= DartEntry::InvokeFunction(function, Object::empty_array());
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 7784041..52ec048 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -137,6 +137,9 @@
   V(FfiVoid, "Void")                                                           \
   V(FfiHandle, "Handle")                                                       \
   V(Field, "Field")                                                            \
+  V(Finalizable, "Finalizable")                                                \
+  V(FinalizerBase, "FinalizerBase")                                            \
+  V(FinalizerEntry, "FinalizerEntry")                                          \
   V(FinallyRetVal, ":finally_ret_val")                                         \
   V(FirstArg, "x")                                                             \
   V(Float32List, "Float32List")                                                \
@@ -308,6 +311,8 @@
   V(_ExternalUint64Array, "_ExternalUint64Array")                              \
   V(_ExternalUint8Array, "_ExternalUint8Array")                                \
   V(_ExternalUint8ClampedArray, "_ExternalUint8ClampedArray")                  \
+  V(_FinalizerImpl, "_FinalizerImpl")                                          \
+  V(_NativeFinalizer, "_NativeFinalizer")                                      \
   V(_Float32ArrayFactory, "Float32List.")                                      \
   V(_Float32ArrayView, "_Float32ArrayView")                                    \
   V(_Float32List, "_Float32List")                                              \
@@ -407,6 +412,9 @@
   V(_ensureScheduleImmediate, "_ensureScheduleImmediate")                      \
   V(_future, "_future")                                                        \
   V(_handleMessage, "_handleMessage")                                          \
+  V(_handleFinalizerMessage, "_handleFinalizerMessage")                        \
+  V(_handleNativeFinalizerMessage, "_handleNativeFinalizerMessage")            \
+  V(_hasValue, "_hasValue")                                                    \
   V(_instanceOf, "_instanceOf")                                                \
   V(_listGetAt, "_listGetAt")                                                  \
   V(_listLength, "_listLength")                                                \
diff --git a/runtime/vm/tagged_pointer.h b/runtime/vm/tagged_pointer.h
index 0f53fe7..09968d4 100644
--- a/runtime/vm/tagged_pointer.h
+++ b/runtime/vm/tagged_pointer.h
@@ -413,6 +413,10 @@
 DEFINE_TAGGED_POINTER(RegExp, Instance)
 DEFINE_TAGGED_POINTER(WeakProperty, Instance)
 DEFINE_TAGGED_POINTER(WeakReference, Instance)
+DEFINE_TAGGED_POINTER(FinalizerBase, Instance)
+DEFINE_TAGGED_POINTER(Finalizer, Instance)
+DEFINE_TAGGED_POINTER(FinalizerEntry, Instance)
+DEFINE_TAGGED_POINTER(NativeFinalizer, Instance)
 DEFINE_TAGGED_POINTER(MirrorReference, Instance)
 DEFINE_TAGGED_POINTER(UserTag, Instance)
 DEFINE_TAGGED_POINTER(FutureOr, Instance)
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 8c352db..15a7bd9 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -92,9 +92,6 @@
   V(TypeParameter)
 
 #define CACHED_VM_STUBS_LIST(V)                                                \
-  V(CodePtr, write_barrier_code_, StubCode::WriteBarrier().ptr(), nullptr)     \
-  V(CodePtr, array_write_barrier_code_, StubCode::ArrayWriteBarrier().ptr(),   \
-    nullptr)                                                                   \
   V(CodePtr, fix_callers_target_code_, StubCode::FixCallersTarget().ptr(),     \
     nullptr)                                                                   \
   V(CodePtr, fix_allocation_stub_code_,                                        \
@@ -269,7 +266,12 @@
   // exceptions. This allows triggering the normal TSAN shadow stack unwinding
   // implementation.
   // -> See https://dartbug.com/47472#issuecomment-948235479 for details.
+#if defined(USING_THREAD_SANITIZER)
   void* setjmp_function = reinterpret_cast<void*>(&setjmp);
+#else
+  // MSVC (on Windows) is not happy with getting address of purely intrinsic.
+  void* setjmp_function = nullptr;
+#endif
   jmp_buf* setjmp_buffer = nullptr;
   uword exception_pc = 0;
   uword exception_sp = 0;
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 13f4ab9..c242cda 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -91,6 +91,9 @@
 //       |TimelineEventRecorder::lock_|
 //
 
+std::atomic<bool> RecorderLock::shutdown_lock_ = {false};
+std::atomic<intptr_t> RecorderLock::outstanding_event_writes_ = {0};
+
 static TimelineEventRecorder* CreateTimelineRecorder() {
   // Some flags require that we use the endless recorder.
   const bool use_endless_recorder =
@@ -223,6 +226,7 @@
   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DISABLE)
 #undef TIMELINE_STREAM_DISABLE
   Timeline::Clear();
+  RecorderLock::WaitForShutdown();
   delete recorder_;
   recorder_ = NULL;
   if (enabled_streams_ != NULL) {
@@ -236,8 +240,9 @@
 }
 
 void Timeline::ReclaimCachedBlocksFromThreads() {
+  RecorderLockScope rl;
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder == NULL) {
+  if (recorder == NULL || rl.IsShuttingDown()) {
     return;
   }
 
@@ -269,8 +274,9 @@
 void Timeline::PrintFlagsToJSON(JSONStream* js) {
   JSONObject obj(js);
   obj.AddProperty("type", "TimelineFlags");
+  RecorderLockScope rl;
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder == NULL) {
+  if (recorder == NULL || rl.IsShuttingDown()) {
     obj.AddProperty("recorderName", "null");
   } else {
     obj.AddProperty("recorderName", recorder->name());
@@ -294,8 +300,9 @@
 #endif
 
 void Timeline::Clear() {
+  RecorderLockScope rl;
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder == NULL) {
+  if (recorder == NULL || rl.IsShuttingDown()) {
     return;
   }
   ReclaimCachedBlocksFromThreads();
@@ -553,9 +560,9 @@
 
 void TimelineEvent::Complete() {
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder != NULL) {
-    recorder->CompleteEvent(this);
-  }
+  recorder->CompleteEvent(this);
+  // Paired with RecorderLock::EnterLock() in TimelineStream::StartEvent().
+  RecorderLock::ExitLock();
 }
 
 void TimelineEvent::Init(EventType event_type, const char* label) {
@@ -771,15 +778,24 @@
 }
 
 TimelineEvent* TimelineStream::StartEvent() {
+  // Paired with RecorderLock::ExitLock() in TimelineEvent::Complete().
+  //
+  // The lock must be held until the event is completed to avoid having the
+  // memory backing the event being freed in the middle of processing the
+  // event.
+  RecorderLock::EnterLock();
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (!enabled() || (recorder == NULL)) {
-    return NULL;
+  if (!enabled() || (recorder == nullptr) || RecorderLock::IsShuttingDown()) {
+    RecorderLock::ExitLock();
+    return nullptr;
   }
-  ASSERT(name_ != NULL);
+  ASSERT(name_ != nullptr);
   TimelineEvent* event = recorder->StartEvent();
-  if (event != NULL) {
-    event->StreamInit(this);
+  if (event == nullptr) {
+    RecorderLock::ExitLock();
+    return nullptr;
   }
+  event->StreamInit(this);
   return event;
 }
 
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index f4389ce..6d5c062 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -121,6 +121,48 @@
 #endif
 };
 
+class RecorderLock : public AllStatic {
+ public:
+  static void EnterLock() {
+    outstanding_event_writes_.fetch_add(1, std::memory_order_acquire);
+  }
+
+  static void ExitLock() {
+    intptr_t count =
+        outstanding_event_writes_.fetch_sub(1, std::memory_order_release);
+    ASSERT(count >= 0);
+  }
+
+  static bool IsShuttingDown() {
+    return shutdown_lock_.load(std::memory_order_relaxed);
+  }
+
+  static void WaitForShutdown() {
+    shutdown_lock_.exchange(true);
+    // Spin waiting for outstanding events to be completed.
+    while (outstanding_event_writes_.load(std::memory_order_relaxed) > 0) {
+    }
+  }
+
+ private:
+  static std::atomic<bool> shutdown_lock_;
+  static std::atomic<intptr_t> outstanding_event_writes_;
+
+  DISALLOW_COPY_AND_ASSIGN(RecorderLock);
+};
+
+class RecorderLockScope {
+ public:
+  RecorderLockScope() { RecorderLock::EnterLock(); }
+
+  ~RecorderLockScope() { RecorderLock::ExitLock(); }
+
+  bool IsShuttingDown() { return RecorderLock::IsShuttingDown(); }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(RecorderLockScope);
+};
+
 class Timeline : public AllStatic {
  public:
   // Initialize timeline system. Not thread safe.
@@ -166,6 +208,8 @@
   TIMELINE_STREAM_LIST(TIMELINE_STREAM_DECLARE)
 #undef TIMELINE_STREAM_DECLARE
 
+  static RecorderLock recorder_lock_;
+
   template <class>
   friend class TimelineRecorderOverride;
   friend class ReclaimBlocksIsolateVisitor;
@@ -503,7 +547,7 @@
 #define TIMELINE_DURATION(thread, stream, name)
 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function)
 #define TIMELINE_FUNCTION_GC_DURATION(thread, name)
-#endif  // !PRODUCT
+#endif  // SUPPORT_TIMELINE
 
 // See |TimelineBeginEndScope|.
 class TimelineEventScope : public StackResource {
diff --git a/runtime/vm/type_testing_stubs.cc b/runtime/vm/type_testing_stubs.cc
index c4dc3d3..41ac9d1 100644
--- a/runtime/vm/type_testing_stubs.cc
+++ b/runtime/vm/type_testing_stubs.cc
@@ -570,17 +570,18 @@
 }
 
 // Builds a cid range check for the concrete subclasses and implementors of
-// type. Assumes cid to check is already in TTSInternalRegs::kScratchReg. Falls
-// through or jumps to check_succeeded if the range contains the cid, else
-// jumps to check_failed.
-void TypeTestingStubGenerator::BuildOptimizedSubtypeRangeCheck(
+// type. Falls through or jumps to check_succeeded if the range contains the
+// cid, else jumps to check_failed.
+//
+// Returns whether class_id_reg is clobbered.
+bool TypeTestingStubGenerator::BuildOptimizedSubtypeRangeCheck(
     compiler::Assembler* assembler,
     const CidRangeVector& ranges,
     Register class_id_reg,
     compiler::Label* check_succeeded,
     compiler::Label* check_failed) {
   CommentCheckedClasses(assembler, ranges);
-  FlowGraphCompiler::GenerateCidRangesCheck(
+  return FlowGraphCompiler::GenerateCidRangesCheck(
       assembler, class_id_reg, ranges, check_succeeded, check_failed, true);
 }
 
@@ -591,12 +592,9 @@
         const Type& type,
         const Class& type_class) {
   ASSERT(hi->CanUseGenericSubtypeRangeCheckFor(type));
-  compiler::Label check_failed;
+  compiler::Label check_failed, load_succeeded;
   // a) First we perform subtype cid-range checks and load the instance type
   // arguments based on which check succeeded.
-  __ LoadClassIdMayBeSmi(TTSInternalRegs::kScratchReg,
-                         TypeTestABI::kInstanceReg);
-  compiler::Label load_succeeded;
   if (BuildLoadInstanceTypeArguments(assembler, hi, type, type_class,
                                      TTSInternalRegs::kScratchReg,
                                      TTSInternalRegs::kInstanceTypeArgumentsReg,
@@ -879,6 +877,7 @@
     const intptr_t tav_offset =
         compiler::target::Class::TypeArgumentsFieldOffset(type_class);
     compiler::Label is_subtype;
+    __ LoadClassIdMayBeSmi(class_id_reg, TypeTestABI::kInstanceReg);
     BuildOptimizedSubtypeRangeCheck(assembler, ranges, class_id_reg,
                                     &is_subtype, load_failed);
     __ Bind(&is_subtype);
@@ -898,12 +897,31 @@
   CidRangeVector cid_checks_only, type_argument_checks, not_checked;
   SplitOnTypeArgumentTests(hi, type, type_class, ranges, &cid_checks_only,
                            &type_argument_checks, &not_checked);
+  ASSERT(!CidRangeVectorUtils::ContainsCid(type_argument_checks, kSmiCid));
+  const bool smi_valid =
+      CidRangeVectorUtils::ContainsCid(cid_checks_only, kSmiCid);
+  // If we'll generate any cid checks and Smi isn't a valid subtype, then
+  // do a single Smi check here, since each generated check requires a fresh
+  // load of the class id. Otherwise, we'll generate the Smi check as part of
+  // the cid checks only block.
+  if (!smi_valid &&
+      (!cid_checks_only.is_empty() || !type_argument_checks.is_empty())) {
+    __ BranchIfSmi(TypeTestABI::kInstanceReg, load_failed);
+  }
+  // Ensure that if the cid checks only block is skipped, the first iteration
+  // of the type arguments check will generate a cid load.
+  bool cid_needs_reload = true;
   if (!cid_checks_only.is_empty()) {
     compiler::Label is_subtype, keep_looking;
     compiler::Label* check_failed =
         type_argument_checks.is_empty() ? load_failed : &keep_looking;
-    BuildOptimizedSubtypeRangeCheck(assembler, cid_checks_only, class_id_reg,
-                                    &is_subtype, check_failed);
+    if (smi_valid) {
+      __ LoadClassIdMayBeSmi(class_id_reg, TypeTestABI::kInstanceReg);
+    } else {
+      __ LoadClassId(class_id_reg, TypeTestABI::kInstanceReg);
+    }
+    cid_needs_reload = BuildOptimizedSubtypeRangeCheck(
+        assembler, cid_checks_only, class_id_reg, &is_subtype, check_failed);
     __ Bind(&is_subtype);
     __ Ret();
     __ Bind(&keep_looking);
@@ -929,8 +947,11 @@
       // and avoid emitting a jump to load_succeeded.
       compiler::Label* check_failed =
           i < vectors.length() - 1 ? &keep_looking : load_failed;
-      BuildOptimizedSubtypeRangeCheck(assembler, *vector, class_id_reg,
-                                      &load_tav, check_failed);
+      if (cid_needs_reload) {
+        __ LoadClassId(class_id_reg, TypeTestABI::kInstanceReg);
+      }
+      cid_needs_reload = BuildOptimizedSubtypeRangeCheck(
+          assembler, *vector, class_id_reg, &load_tav, check_failed);
       __ Bind(&load_tav);
       __ LoadCompressedFieldFromOffset(instance_type_args_reg,
                                        TypeTestABI::kInstanceReg, tav_offset);
diff --git a/runtime/vm/type_testing_stubs.h b/runtime/vm/type_testing_stubs.h
index 5775b53..7807bc1 100644
--- a/runtime/vm/type_testing_stubs.h
+++ b/runtime/vm/type_testing_stubs.h
@@ -71,7 +71,7 @@
       const Type& type,
       const Class& type_class);
 
-  static void BuildOptimizedSubtypeRangeCheck(compiler::Assembler* assembler,
+  static bool BuildOptimizedSubtypeRangeCheck(compiler::Assembler* assembler,
                                               const CidRangeVector& ranges,
                                               Register class_id_reg,
                                               compiler::Label* check_succeeded,
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index 3c68eb8..2a0f8e9 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -2264,6 +2264,107 @@
 }
 #endif  // !defined(PRODUCT)
 
+// This test checks for a failure due to not reloading the class id between
+// different uses of GenerateCidRangeChecks when loading the instance type
+// arguments vector in a TTS for an implemented class. GenerateCidRangeChecks
+// might clobber the register that holds the class ID to check, hence the need
+// to reload.
+//
+// To ensure that the register is clobbered on all architectures, we set things
+// up by generating the following classes:
+// * B<X>, a generic abstract class which is implemented by the others.
+// * I, implements B<String>, has a single int field x, and is
+//   used to create the checked instance.
+// * G<Y>, which implements B<Y> and has no fields (so its TAV field
+//   offset will correspond to that of the offset of x in I).
+// * C and D, consecutively defined non-generic classes which both implement
+//   B<int>.
+// * U0 - UN, unrelated concrete classes as needed for cid alignment.
+//
+// We'll carefully set things up so that the following equation between their
+// class ids holds:
+//
+//   G = I - C.
+//
+// Thus, when we create a TTS for B<int> and check it against an instance V
+// of I. The cid for I will be loaded into a register R, and then two
+// check blocks will be generated:
+//
+//   * A check for the cid range [C-D], which has the side effect of
+//     subtracting the cid of C from the contents of R (here, the cid of I).
+//
+//   * A check that R contains the cid for G.
+//
+// Thus, if the cid of I is not reloaded into R before the second check, and
+// the equation earlier holds, we'll get a false positive that V is an instance
+// of G, so the code will then try to load the instance type arguments from V
+// as if it was an instance of G. This means the contents of x will be loaded
+// and attempted to be used as a TypeArgumentsPtr, which will cause a crash
+// during the checks that the instantiation of Y is int.
+ISOLATE_UNIT_TEST_CASE(TTS_Regress_CidRangeChecks) {
+  // We create the classes in this order: B, G, C, D, U..., I. We need
+  // G = I - C => G + C = I
+  //           => G + C = D + N + 1 (where N is the number of U classes)
+  //           => (B + 1) + C = (C + 1) + N + 1
+  //           => B - 1 = N.
+  // The cid for B will be the next allocated cid, which is the number of
+  // non-top-level cids in the current class table.
+  ClassTable* const class_table = IsolateGroup::Current()->class_table();
+  const intptr_t kNumUnrelated = class_table->NumCids() - 1;
+  TextBuffer buffer(1024);
+  buffer.AddString(R"(
+      abstract class B<X> {}
+      class G<Y> implements B<Y> {}
+      class C implements B<int> {}
+      class D implements B<int> {}
+)");
+  for (intptr_t i = 0; i < kNumUnrelated; i++) {
+    buffer.Printf(R"(
+      class U%)" Pd R"( {}
+)",
+                  i);
+  }
+  buffer.AddString(R"(
+      class I implements B<String> {
+        final x = 1;
+      }
+
+      createI() => I();
+)");
+
+  const auto& root_library = Library::Handle(LoadTestScript(buffer.buffer()));
+  const auto& class_b = Class::Handle(GetClass(root_library, "B"));
+  const auto& class_g = Class::Handle(GetClass(root_library, "G"));
+  const auto& class_c = Class::Handle(GetClass(root_library, "C"));
+  const auto& class_d = Class::Handle(GetClass(root_library, "D"));
+  const auto& class_u0 = Class::Handle(GetClass(root_library, "U0"));
+  const auto& class_i = Class::Handle(GetClass(root_library, "I"));
+  const auto& obj_i = Object::Handle(Invoke(root_library, "createI"));
+  {
+    SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+    ClassFinalizer::FinalizeClass(class_g);
+  }
+
+  // Double-check assumptions from calculating kNumUnrelated.
+  EXPECT_EQ(kNumUnrelated, class_b.id() - 1);
+  EXPECT_EQ(class_b.id() + 1, class_g.id());
+  EXPECT_EQ(class_c.id() + 1, class_d.id());
+  EXPECT_EQ(class_d.id() + 1, class_u0.id());
+  EXPECT_EQ(class_u0.id() + kNumUnrelated, class_i.id());
+  EXPECT_EQ(class_g.id(), class_i.id() - class_c.id());
+
+  const auto& tav_null = Object::null_type_arguments();
+  auto& tav_int = TypeArguments::Handle(TypeArguments::New(1));
+  tav_int.SetTypeAt(0, Type::Handle(Type::IntType()));
+  CanonicalizeTAV(&tav_int);
+
+  auto& type_b_int = Type::Handle(Type::New(class_b, tav_int));
+  FinalizeAndCanonicalize(&type_b_int);
+
+  TTSTestState state(thread, type_b_int);
+  state.InvokeEagerlySpecializedStub(Failure({obj_i, tav_null, tav_null}));
+}
+
 }  // namespace dart
 
 #endif  // !defined(TARGET_ARCH_IA32)
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index 059703c..0a2264a 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -210,6 +210,8 @@
   "os_macos.cc",
   "os_thread.cc",
   "os_thread.h",
+  "os_thread_absl.cc",
+  "os_thread_absl.h",
   "os_thread_android.cc",
   "os_thread_android.h",
   "os_thread_fuchsia.cc",
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index fc0fd8d..33b2332 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -61,18 +61,20 @@
 }
 
 void Zone::Cleanup() {
-  {
-    MutexLocker ml(segment_cache_mutex);
-    ASSERT(segment_cache_size >= 0);
-    ASSERT(segment_cache_size <= kSegmentCacheCapacity);
-    while (segment_cache_size > 0) {
-      delete segment_cache[--segment_cache_size];
-    }
-  }
+  ClearCache();
   delete segment_cache_mutex;
   segment_cache_mutex = nullptr;
 }
 
+void Zone::ClearCache() {
+  MutexLocker ml(segment_cache_mutex);
+  ASSERT(segment_cache_size >= 0);
+  ASSERT(segment_cache_size <= kSegmentCacheCapacity);
+  while (segment_cache_size > 0) {
+    delete segment_cache[--segment_cache_size];
+  }
+}
+
 Zone::Segment* Zone::Segment::New(intptr_t size, Zone::Segment* next) {
   size = Utils::RoundUp(size, VirtualMemory::PageSize());
   VirtualMemory* memory = nullptr;
diff --git a/runtime/vm/zone.h b/runtime/vm/zone.h
index 5156751..a22f953 100644
--- a/runtime/vm/zone.h
+++ b/runtime/vm/zone.h
@@ -90,6 +90,7 @@
   static void Init();
   static void Cleanup();
 
+  static void ClearCache();
   static intptr_t Size() { return total_size_; }
 
  private:
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 867dd32..281ad47 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -26,6 +26,7 @@
   dart_stripped_binary = "dart"
   dart_precompiled_runtime_stripped_binary = "dart_precompiled_runtime_product"
   gen_snapshot_stripped_binary = "gen_snapshot_product"
+  analyze_snapshot_binary = "analyze_snapshot_product"
 }
 
 # The directory layout of the SDK is as follows:
@@ -39,7 +40,6 @@
 # ......dartanalyzer
 # ......dartdevc
 # ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32)
-# ......pub
 # ......snapshots/
 # ........analysis_server.dart.snapshot
 # ........dart2js.dart.snapshot
@@ -88,16 +88,12 @@
 # ......api_readme.md
 
 # Scripts that go under bin/
-_platform_sdk_scripts = [
-  "dartanalyzer",
-  "pub",
-]
+_platform_sdk_scripts = [ "dartanalyzer" ]
 
 _full_sdk_scripts = [
   "dart2js",
   "dartanalyzer",
   "dartdevc",
-  "pub",
 ]
 
 # Snapshots that go under bin/snapshots
@@ -757,8 +753,9 @@
   ]
 
   # We do not support AOT on ia32 and should therefore not add the
-  # dart native compilation files (since there is no AOT compiler/runtime available)
-  if (dart_target_arch != "ia32") {
+  # dart native compilation files since there is no AOT compiler/runtime
+  # available.
+  if (dart_target_arch != "ia32" && dart_target_arch != "x86") {
     public_deps += [ ":group_dart2native" ]
   }
 }
diff --git a/sdk/bin/pub.bat b/sdk/bin/pub.bat
deleted file mode 100644
index 7eb8b0d..0000000
--- a/sdk/bin/pub.bat
+++ /dev/null
@@ -1,56 +0,0 @@
-@echo off
-REM Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-rem Run pub.dart on the Dart VM. This script is only used when running pub from
-rem within the Dart source repo. The shipped SDK instead uses "pub_sdk.bat",
-rem which is renamed to "pub.bat" when the SDK is built.
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-rem Get absolute full name for SDK_DIR.
-for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
-
-rem Remove trailing backslash if there is one
-IF %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-
-set VM_OPTIONS=
-
-rem We allow extra vm options to be passed in through an environment variable.
-if not "_%DART_VM_OPTIONS%_" == "__" (
-  set VM_OPTIONS=%VM_OPTIONS% %DART_VM_OPTIONS%
-)
-
-rem Use the Dart binary in the built SDK so pub can find the version file next
-rem to it.
-set BUILD_DIR=%SDK_DIR%\..\out\ReleaseX64
-set DART=%BUILD_DIR%\dart-sdk\bin\dart
-
-rem Run pub.
-set PUB="%SDK_DIR%\..\third_party\pkg\pub\bin\pub.dart"
-"%DART%" "--packages=%SDK_DIR%\..\.packages" %VM_OPTIONS% "%PUB%" %*
-
-endlocal
-
-exit /b %errorlevel%
-
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 [" 2^>nul`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/sdk/bin/pub_sdk b/sdk/bin/pub_sdk
deleted file mode 100755
index 17ce14c..0000000
--- a/sdk/bin/pub_sdk
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2014, 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.
-
-# Run pub.dart on the Dart VM. This script assumes the Dart SDK's directory
-# structure.
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-function array_contains() {
-  local needle="$1"
-  local element
-  shift
-  for element; do [ "$element" = "$needle" ] && return 0; done
-  return 1
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-DART="$BIN_DIR/dart"
-
-unset VM_OPTIONS
-declare -a VM_OPTIONS
-
-# Allow extra VM options to be passed in through an environment variable.
-if [[ $DART_VM_OPTIONS ]]; then
-  read -a OPTIONS <<< "$DART_VM_OPTIONS"
-  VM_OPTIONS+=("${OPTIONS[@]}")
-fi
-
-if [ -t 2 ]; then # Only print warning when run in terminal.
-  >&2 echo 'The top level `pub` command is deprecated. Use `dart pub` instead.'
-fi
-
-# Forward to the `dart __deprecatedpub` command.
-exec "$DART" "${VM_OPTIONS[@]}" __deprecated_pub "$@"
diff --git a/sdk/bin/pub_sdk.bat b/sdk/bin/pub_sdk.bat
deleted file mode 100644
index e882aac..0000000
--- a/sdk/bin/pub_sdk.bat
+++ /dev/null
@@ -1,50 +0,0 @@
-@echo off
-REM Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-rem Get absolute full name for SDK_DIR.
-for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
-
-rem Remove trailing backslash if there is one
-IF %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-
-set VM_OPTIONS=
-set USING_DART_1=
-
-rem We allow extra vm options to be passed in through an environment variable.
-if not "_%DART_VM_OPTIONS%_" == "__" (
-  set VM_OPTIONS=%VM_OPTIONS% %DART_VM_OPTIONS%
-  for %%o in (%DART_VM_OPTIONS%) do (
-    if "%%o" equ "--no-preview-dart-2" set USING_DART_1=y
-  )
-)
-
-echo "The top level `pub.bat` command is deprecated. Use `dart pub` instead." 1>&2
-"%BIN_DIR%\dart" %VM_OPTIONS% __deprecated_pub %*
-
-endlocal
-
-exit /b %errorlevel%
-
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 [" 2^>nul`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 413116c..a70800f 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -389,23 +389,23 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
-    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
+  static InternetAddress get loopbackIPv4 {
+    throw UnsupportedError("InternetAddress.loopbackIPv4");
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
-    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
+  static InternetAddress get loopbackIPv6 {
+    throw UnsupportedError("InternetAddress.loopbackIPv6");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
-    throw UnsupportedError("InternetAddress.ANY_IP_V4");
+  static InternetAddress get anyIPv4 {
+    throw UnsupportedError("InternetAddress.anyIPv4");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
-    throw UnsupportedError("InternetAddress.ANY_IP_V6");
+  static InternetAddress get anyIPv6 {
+    throw UnsupportedError("InternetAddress.anyIPv6");
   }
 
   @patch
diff --git a/sdk/lib/_internal/js_runtime/lib/io_patch.dart b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
index ae50e7b..e22aae2 100644
--- a/sdk/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
@@ -389,23 +389,23 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
+  static InternetAddress get loopbackIPv4 {
+    throw new UnsupportedError("InternetAddress.loopbackIPv4");
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
+  static InternetAddress get loopbackIPv6 {
+    throw new UnsupportedError("InternetAddress.loopbackIPv6");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V4");
+  static InternetAddress get anyIPv4 {
+    throw new UnsupportedError("InternetAddress.anyIPv4");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V6");
+  static InternetAddress get anyIPv6 {
+    throw new UnsupportedError("InternetAddress.anyIPv6");
   }
 
   @patch
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index ad7098c..7c43ba8 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -2772,8 +2772,64 @@
   return JS('', '!self.window && !!self.postMessage');
 }
 
-/// The src url for the script tag that loaded this code.
-String? thisScript = _computeThisScript();
+/// The src URL for the script tag that loaded this code.
+final String? thisScript = _computeThisScript();
+
+/// Base URL of `thisScript`.
+final String _thisScriptBaseUrl = _computeBaseUrl();
+
+String _computeBaseUrl() {
+  String script = thisScript!;
+  return JS('', '#.substring(0, #.lastIndexOf("/"))', script, script);
+}
+
+/// Trusted Type policy [1] for generating validated URLs for scripts for
+/// deferred loading. Only the `createScriptURL` member of this policy is used.
+///
+/// [1]: https://w3c.github.io/webappsec-trusted-types/dist/spec/#trusted-type-policy
+final Object _deferredLoadingTrustedTypesPolicy = _computePolicy();
+
+const _deferredLoadingTrustedTypesPolicyName = 'dart:deferred-loading';
+
+Object _computePolicy() {
+  // There is no actual validation, since the URLs for deferred loading are safe
+  // by construction (see [_getBasedScriptUrl].  If the URL was validated, the
+  // validation would ensure it is based off the main script.
+  final Object policyOptions = JS('=Object', '{createScriptURL: (url) => url}');
+
+  // For our purposes, the policyOptions duck-types to an object with a single
+  // method of the policy, so we use the options as a policy polyfill.
+  final fallbackPolicy = policyOptions;
+
+  final Object? policyFactory = JS('', 'self.trustedTypes');
+  if (policyFactory == null) return fallbackPolicy;
+  final Object? newPolicy = JS('', '#.createPolicy(#, #)', policyFactory,
+      _deferredLoadingTrustedTypesPolicyName, policyOptions);
+  return newPolicy ?? fallbackPolicy;
+}
+
+/// A TrustedScriptURL for the component that is alongside the main script of
+/// this program. On browsers or environments that do not support
+/// TrustedScriptURL, a String is returned instead.
+///
+/// Changes to this method require a careful review to ensure that the URLs
+/// remain safe by construction.
+///
+/// The component is encoded to prevent any directory 'navigation'. If deferred
+/// loading is changed to use a more structured layout with subdirectories, this
+/// method will need to be updated to make the URL still clearly safe by
+/// construction.
+Object _getBasedScriptUrl(String component) {
+  final base = _thisScriptBaseUrl;
+  final encodedComponent = _encodeURIComponent(component);
+  final url = '$base/$encodedComponent';
+  final policy = _deferredLoadingTrustedTypesPolicy;
+  return JS('', '#.createScriptURL(#)', policy, url);
+}
+
+String _encodeURIComponent(String component) {
+  return JS('', 'self.encodeURIComponent(#)', component);
+}
 
 /// The src url for the script tag that loaded this function.
 ///
@@ -2832,14 +2888,16 @@
     return future.then((Null _) => null);
   }
 
-  String uri = thisScript!;
+  Object trustedScriptUri = _getBasedScriptUrl(hunkName);
+  // [trustedScriptUri] is either a String, in which case `toString()` is an
+  // identity function, or it is a TrustedScriptURL and `toString()` returns the
+  // sanitized URL.
+  String uriAsString = JS('', '#.toString()', trustedScriptUri);
 
-  int index = uri.lastIndexOf('/');
-  uri = '${uri.substring(0, index + 1)}$hunkName';
-  _eventLog.add(' - download: $hunkName from $uri');
+  _eventLog.add(' - download: $hunkName from $uriAsString');
 
   var deferredLibraryLoader = JS('', 'self.dartDeferredLibraryLoader');
-  Completer<Null> completer = new Completer<Null>();
+  Completer<Null> completer = Completer();
 
   void success() {
     _eventLog.add(' - download success: $hunkName');
@@ -2851,7 +2909,7 @@
     _loadingLibraries[hunkName] = null;
     stackTrace ??= StackTrace.current;
     completer.completeError(
-        new DeferredLoadException('Loading $uri failed: $error\n'
+        DeferredLoadException('Loading $uriAsString failed: $error\n'
             'event log:\n${_eventLog.join("\n")}\n'),
         stackTrace);
   }
@@ -2866,17 +2924,15 @@
     try {
       // Share the loadId that hunk belongs to, this will allow for any
       // additional loadId based bundling optimizations.
-      JS('void', '#(#, #, #, #)', deferredLibraryLoader, uri, jsSuccess,
+      JS('void', '#(#, #, #, #)', deferredLibraryLoader, uriAsString, jsSuccess,
           jsFailure, loadId);
     } catch (error, stackTrace) {
       failure(error, "invoking dartDeferredLibraryLoader hook", stackTrace);
     }
   } else if (_isWorker()) {
     // We are in a web worker. Load the code with an XMLHttpRequest.
-    int index = uri.lastIndexOf('/');
-    uri = '${uri.substring(0, index + 1)}$hunkName';
     var xhr = JS('var', 'new XMLHttpRequest()');
-    JS('void', '#.open("GET", #)', xhr, uri);
+    JS('void', '#.open("GET", #)', xhr, uriAsString);
     JS(
         'void',
         '#.addEventListener("load", #, false)',
@@ -2909,7 +2965,7 @@
     // Inject a script tag.
     var script = JS('', 'document.createElement("script")');
     JS('', '#.type = "text/javascript"', script);
-    JS('', '#.src = #', script, uri);
+    JS('', '#.src = #', script, trustedScriptUri);
     if (_cspNonce != null && _cspNonce != '') {
       JS('', '#.nonce = #', script, _cspNonce);
       JS('', '#.setAttribute("nonce", #)', script, _cspNonce);
diff --git a/sdk/lib/_internal/vm/bin/secure_socket_patch.dart b/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
index 680adcf..bfdc6bd 100644
--- a/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
@@ -209,6 +209,8 @@
 
 class _SecurityContext extends NativeFieldWrapperClass1
     implements SecurityContext {
+  bool _allowLegacyUnsafeRenegotiation = false;
+
   _SecurityContext(bool withTrustedRoots) {
     _createNativeContext();
     if (withTrustedRoots) {
@@ -216,6 +218,13 @@
     }
   }
 
+  set allowLegacyUnsafeRenegotiation(bool allow) {
+    _allowLegacyUnsafeRenegotiation = allow;
+    _setAllowTlsRenegotiation(allow);
+  }
+
+  bool get allowLegacyUnsafeRenegotiation => _allowLegacyUnsafeRenegotiation;
+
   @pragma("vm:external-name", "SecurityContext_Allocate")
   external void _createNativeContext();
 
@@ -266,6 +275,8 @@
   external void _setAlpnProtocols(Uint8List protocols, bool isServer);
   @pragma("vm:external-name", "SecurityContext_TrustBuiltinRoots")
   external void _trustBuiltinRoots();
+  @pragma("vm:external-name", "SecurityContext_SetAllowTlsRenegotiation")
+  external void _setAllowTlsRenegotiation(bool allow);
 }
 
 /**
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index d681626..7c9925a 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -48,22 +48,22 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
+  static InternetAddress get loopbackIPv4 {
     return _InternetAddress.loopbackIPv4;
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
+  static InternetAddress get loopbackIPv6 {
     return _InternetAddress.loopbackIPv6;
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
+  static InternetAddress get anyIPv4 {
     return _InternetAddress.anyIPv4;
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
+  static InternetAddress get anyIPv6 {
     return _InternetAddress.anyIPv6;
   }
 
diff --git a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
index beff01e..2cfd340 100644
--- a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
@@ -177,7 +177,7 @@
   }
 
   static List<_InternetAddress> lookup(String host,
-      {InternetAddressType type: InternetAddressType.ANY}) {
+      {InternetAddressType type: InternetAddressType.any}) {
     var response = _nativeLookupRequest(host, type._value);
     if (response is OSError) {
       throw response;
diff --git a/sdk/lib/_internal/vm/bin/vmservice_io.dart b/sdk/lib/_internal/vm/bin/vmservice_io.dart
index 3df0e4c..033a9cf 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_io.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_io.dart
@@ -103,6 +103,7 @@
         enableDevTools.toString(),
         devToolsBinaries,
         enableLogging.toString(),
+        _enableServicePortFallback.toString(),
       ],
       mode: ProcessStartMode.detachedWithStdio,
     );
diff --git a/sdk/lib/_internal/vm/bin/vmservice_server.dart b/sdk/lib/_internal/vm/bin/vmservice_server.dart
index c8e61b2..129e237 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_server.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_server.dart
@@ -4,10 +4,12 @@
 
 part of vmservice_io;
 
+// TODO(48602): deprecate SILENT_OBSERVATORY in favor of SILENT_VM_SERVICE
 bool silentObservatory = bool.fromEnvironment('SILENT_OBSERVATORY');
+bool silentVMService = bool.fromEnvironment('SILENT_VM_SERVICE');
 
 void serverPrint(String s) {
-  if (silentObservatory) {
+  if (silentObservatory || silentVMService) {
     // We've been requested to be silent.
     return;
   }
@@ -409,11 +411,8 @@
       // Already running.
       return this;
     }
-
     // Startup HTTP server.
-    var pollError;
-    var pollStack;
-    Future<bool> poll() async {
+    Future<bool> startServer() async {
       try {
         var address;
         var addresses = await InternetAddress.lookup(_ip);
@@ -423,35 +422,29 @@
           if (address.type == InternetAddressType.IPv4) break;
         }
         _server = await HttpServer.bind(address, _port);
-        return true;
       } catch (e, st) {
-        pollError = e;
-        pollStack = st;
-        return false;
+        if (_port != 0 && _enableServicePortFallback) {
+          serverPrint(
+              'Failed to bind Dart VM service HTTP server to port $_port. '
+              'Falling back to automatic port selection');
+          _port = 0;
+          return await startServer();
+        } else {
+          serverPrint('Could not start Dart VM service HTTP server:\n'
+              '$e\n$st');
+          _notifyServerState('');
+          onServerAddressChange(null);
+          return false;
+        }
       }
+      return true;
     }
 
-    // poll for the network for ~10 seconds.
-    int attempts = 0;
-    final maxAttempts = 10;
-    while (!await poll()) {
-      attempts++;
-      serverPrint('Observatory server failed to start after $attempts tries');
-      if (attempts > maxAttempts) {
-        serverPrint('Could not start Observatory HTTP server:\n'
-            '$pollError\n$pollStack\n');
-        _notifyServerState('');
-        onServerAddressChange(null);
-        return this;
-      }
-      if (_port != 0 && _enableServicePortFallback && attempts >= 3) {
-        _port = 0;
-        serverPrint('Falling back to automatic port selection');
-      }
-      await Future<void>.delayed(const Duration(seconds: 1));
+    if (!(await startServer())) {
+      return this;
     }
     if (_service.isExiting) {
-      serverPrint('Observatory HTTP server exiting before listening as '
+      serverPrint('Dart VM service HTTP server exiting before listening as '
           'vm service has received exit request\n');
       await shutdown(true);
       return this;
@@ -468,7 +461,7 @@
   }
 
   Future<void> outputConnectionInformation() async {
-    serverPrint('Observatory listening on $serverAddress');
+    serverPrint('The Dart VM service is listening on $serverAddress');
     if (Platform.isFuchsia) {
       // Create a file with the port number.
       final tmp = Directory.systemTemp.path;
@@ -507,14 +500,14 @@
     // Shutdown HTTP server and subscription.
     Uri oldServerAddress = serverAddress!;
     return cleanup(forced).then((_) {
-      serverPrint('Observatory no longer listening on $oldServerAddress');
+      serverPrint('Dart VM service no longer listening on $oldServerAddress');
       _server = null;
       _notifyServerState('');
       onServerAddressChange(null);
       return this;
     }).catchError((e, st) {
       _server = null;
-      serverPrint('Could not shutdown Observatory HTTP server:\n$e\n$st\n');
+      serverPrint('Could not shutdown Dart VM service HTTP server:\n$e\n$st\n');
       _notifyServerState('');
       onServerAddressChange(null);
       return this;
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index fa4b32d..c49bb48 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -16,7 +16,30 @@
   }
 }
 
-abstract class _HashFieldBase {
+// Common interface for [_HashFieldBase] and [_HashVMBase].
+abstract class _HashAbstractBase {
+  Uint32List get _index;
+  void set _index(Uint32List value);
+
+  int get _hashMask;
+  void set _hashMask(int value);
+
+  List get _data;
+  void set _data(List value);
+
+  int get _usedData;
+  void set _usedData(int value);
+
+  int get _deletedKeys;
+  void set _deletedKeys(int value);
+}
+
+abstract class _HashAbstractImmutableBase extends _HashAbstractBase {
+  @pragma("wasm:entry-point")
+  Uint32List? get _indexNullable;
+}
+
+abstract class _HashFieldBase implements _HashAbstractBase {
   // Each occupied entry in _index is a fixed-size integer that encodes a pair:
   //   [ hash pattern for key | index of entry in _data ]
   // The hash pattern is based on hashCode, but is guaranteed to be non-zero.
@@ -43,11 +66,11 @@
   // Note: All fields are initialized in a single constructor so that the VM
   // recognizes they cannot hold null values. This makes a big (20%) performance
   // difference on some operations.
-  _HashFieldBase(int dataSize);
+  _HashFieldBase();
 }
 
 // Base class for VM-internal classes; keep in sync with _HashFieldBase.
-abstract class _HashVMBase {
+abstract class _HashVMBase implements _HashAbstractBase {
   @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:typed_data#_Uint32List")
   @pragma("vm:prefer-inline")
@@ -99,8 +122,9 @@
   external void set _deletedKeys(int value);
 }
 
-// Base class for VM-internal classes; keep in sync with _HashFieldBase.
-abstract class _HashVMImmutableBase extends _HashVMBase {
+// Base class for immutable VM-internal classes.
+abstract class _HashVMImmutableBase extends _HashVMBase
+    implements _HashAbstractImmutableBase {
   // The data is an immutable list rather than a mutable list.
   @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", "dart:core#_ImmutableList")
@@ -123,8 +147,7 @@
 // This mixin can be applied to _HashFieldBase or _HashVMBase (for
 // normal and VM-internalized classes, respectiveley), which provide the
 // actual fields/accessors that this mixin assumes.
-// TODO(koda): Consider moving field comments to _HashFieldBase.
-abstract class _HashBase implements _HashVMBase {
+mixin _HashBase on _HashAbstractBase {
   // The number of bits used for each component is determined by table size.
   // If initialized, the length of _index is (at least) twice the number of
   // entries in _data, and both are doubled when _data is full. Thus, _index
@@ -208,17 +231,22 @@
   }
 }
 
-class _OperatorEqualsAndHashCode {
+abstract class _EqualsAndHashCode {
+  int _hashCode(e);
+  bool _equals(e1, e2);
+}
+
+mixin _OperatorEqualsAndHashCode implements _EqualsAndHashCode {
   int _hashCode(e) => e.hashCode;
   bool _equals(e1, e2) => e1 == e2;
 }
 
-class _IdenticalAndIdentityHashCode {
+mixin _IdenticalAndIdentityHashCode implements _EqualsAndHashCode {
   int _hashCode(e) => identityHashCode(e);
   bool _equals(e1, e2) => identical(e1, e2);
 }
 
-class _OperatorEqualsAndCanonicalHashCode {
+mixin _OperatorEqualsAndCanonicalHashCode implements _EqualsAndHashCode {
   static final int cidSymbol = ClassID.getID(#a);
 
   int _hashCode(e) {
@@ -232,6 +260,14 @@
   bool _equals(e1, e2) => e1 == e2;
 }
 
+mixin _CustomEqualsAndHashCode implements _EqualsAndHashCode {
+  dynamic get _hasher;
+  dynamic get _equality;
+
+  int _hashCode(e) => _hasher(e);
+  bool _equals(e1, e2) => _equality(e1, e2);
+}
+
 final _uninitializedIndex = new Uint32List(_HashBase._UNINITIALIZED_INDEX_SIZE);
 // Note: not const. Const arrays are made immutable by having a different class
 // than regular arrays that throws on element assignment. We want the data field
@@ -243,9 +279,9 @@
 class _InternalLinkedHashMap<K, V> extends _HashVMBase
     with
         MapMixin<K, V>,
-        _LinkedHashMapMixin<K, V>,
         _HashBase,
-        _OperatorEqualsAndHashCode
+        _OperatorEqualsAndHashCode,
+        _LinkedHashMapMixin<K, V>
     implements LinkedHashMap<K, V> {
   _InternalLinkedHashMap() {
     _index = _uninitializedIndex;
@@ -273,15 +309,19 @@
 class _InternalImmutableLinkedHashMap<K, V> extends _HashVMImmutableBase
     with
         MapMixin<K, V>,
-        _LinkedHashMapMixin<K, V>,
         _HashBase,
         _OperatorEqualsAndCanonicalHashCode,
-        _UnmodifiableMapMixin<K, V>
+        _LinkedHashMapMixin<K, V>,
+        _UnmodifiableMapMixin<K, V>,
+        _ImmutableLinkedHashMapMixin<K, V>
     implements LinkedHashMap<K, V> {
   factory _InternalImmutableLinkedHashMap._uninstantiable() {
     throw new UnsupportedError("ImmutableMap can only be allocated by the VM");
   }
+}
 
+mixin _ImmutableLinkedHashMapMixin<K, V>
+    on _LinkedHashMapMixin<K, V>, _HashAbstractImmutableBase {
   bool containsKey(Object? key) {
     if (_indexNullable == null) {
       _createIndex();
@@ -297,8 +337,8 @@
   }
 
   void _createIndex() {
-    final size = max(_data.length, _HashBase._INITIAL_INDEX_SIZE);
-    assert(size == _roundUpToPowerOfTwo(size));
+    final size =
+        _roundUpToPowerOfTwo(max(_data.length, _HashBase._INITIAL_INDEX_SIZE));
     final newIndex = new Uint32List(size);
     final hashMask = _HashBase._indexSizeToHashMask(size);
     assert(_hashMask == hashMask);
@@ -345,12 +385,7 @@
   return x + 1;
 }
 
-abstract class _LinkedHashMapMixin<K, V> implements _HashBase {
-  int _hashCode(e);
-  bool _equals(e1, e2);
-  int get _checkSum;
-  bool _isModifiedSince(List oldData, int oldCheckSum);
-
+mixin _LinkedHashMapMixin<K, V> on _HashBase, _EqualsAndHashCode {
   int get length => (_usedData >> 1) - _deletedKeys;
   bool get isEmpty => length == 0;
   bool get isNotEmpty => !isEmpty;
@@ -592,12 +627,10 @@
 class _CompactLinkedIdentityHashMap<K, V> extends _HashFieldBase
     with
         MapMixin<K, V>,
-        _LinkedHashMapMixin<K, V>,
         _HashBase,
-        _IdenticalAndIdentityHashCode
+        _IdenticalAndIdentityHashCode,
+        _LinkedHashMapMixin<K, V>
     implements LinkedHashMap<K, V> {
-  _CompactLinkedIdentityHashMap() : super(_HashBase._INITIAL_INDEX_SIZE);
-
   void addAll(Map<K, V> other) {
     if (other is _CompactLinkedIdentityHashMap) {
       final otherBase = other as _CompactLinkedIdentityHashMap;
@@ -610,15 +643,15 @@
 }
 
 class _CompactLinkedCustomHashMap<K, V> extends _HashFieldBase
-    with MapMixin<K, V>, _LinkedHashMapMixin<K, V>, _HashBase
+    with
+        MapMixin<K, V>,
+        _HashBase,
+        _CustomEqualsAndHashCode,
+        _LinkedHashMapMixin<K, V>
     implements LinkedHashMap<K, V> {
-  final _equality;
-  final _hasher;
-  final _validKey;
-
-  // TODO(koda): Ask gbracha why I cannot have fields _equals/_hashCode.
-  int _hashCode(e) => _hasher(e);
-  bool _equals(e1, e2) => _equality(e1, e2);
+  final dynamic _equality;
+  final dynamic _hasher;
+  final dynamic _validKey;
 
   bool containsKey(Object? o) => _validKey(o) ? super.containsKey(o) : false;
   V? operator [](Object? o) => _validKey(o) ? super[o] : null;
@@ -628,8 +661,7 @@
   void operator []=(K key, V value);
 
   _CompactLinkedCustomHashMap(this._equality, this._hasher, validKey)
-      : _validKey = (validKey != null) ? validKey : new _TypeTest<K>().test,
-        super(_HashBase._INITIAL_INDEX_SIZE);
+      : _validKey = (validKey != null) ? validKey : new _TypeTest<K>().test;
 }
 
 // Iterates through _data[_offset + _step], _data[_offset + 2*_step], ...
@@ -739,12 +771,7 @@
   E get current => _current as E;
 }
 
-abstract class _LinkedHashSetMixin<E> implements _HashBase {
-  int _hashCode(e);
-  bool _equals(e1, e2);
-  int get _checkSum;
-  bool _isModifiedSince(List oldData, int oldCheckSum);
-
+mixin _LinkedHashSetMixin<E> on _HashBase, _EqualsAndHashCode {
   bool get isEmpty => length == 0;
   bool get isNotEmpty => !isEmpty;
   int get length => _usedData - _deletedKeys;
@@ -910,14 +937,14 @@
   }
 }
 
-// Set implementation, analogous to _CompactLinkedHashMap.
+// Set implementation, analogous to _InternalLinkedHashMap.
 @pragma('vm:entry-point')
 class _CompactLinkedHashSet<E> extends _HashVMBase
     with
         SetMixin<E>,
-        _LinkedHashSetMixin<E>,
         _HashBase,
-        _OperatorEqualsAndHashCode
+        _OperatorEqualsAndHashCode,
+        _LinkedHashSetMixin<E>
     implements LinkedHashSet<E> {
   _CompactLinkedHashSet() {
     _index = _uninitializedIndex;
@@ -951,15 +978,19 @@
 class _CompactImmutableLinkedHashSet<E> extends _HashVMImmutableBase
     with
         SetMixin<E>,
-        _LinkedHashSetMixin<E>,
         _HashBase,
         _OperatorEqualsAndCanonicalHashCode,
-        _UnmodifiableSetMixin<E>
+        _LinkedHashSetMixin<E>,
+        _UnmodifiableSetMixin<E>,
+        _ImmutableLinkedHashSetMixin<E>
     implements LinkedHashSet<E> {
   factory _CompactImmutableLinkedHashSet._uninstantiable() {
     throw new UnsupportedError("ImmutableSet can only be allocated by the VM");
   }
+}
 
+mixin _ImmutableLinkedHashSetMixin<E>
+    on Set<E>, _LinkedHashSetMixin<E>, _HashAbstractImmutableBase {
   E? lookup(Object? key) {
     if (_indexNullable == null) {
       _createIndex();
@@ -1029,12 +1060,10 @@
 class _CompactLinkedIdentityHashSet<E> extends _HashFieldBase
     with
         SetMixin<E>,
-        _LinkedHashSetMixin<E>,
         _HashBase,
-        _IdenticalAndIdentityHashCode
+        _IdenticalAndIdentityHashCode,
+        _LinkedHashSetMixin<E>
     implements LinkedHashSet<E> {
-  _CompactLinkedIdentityHashSet() : super(_HashBase._INITIAL_INDEX_SIZE);
-
   Set<E> toSet() => new _CompactLinkedIdentityHashSet<E>()..addAll(this);
 
   static Set<R> _newEmpty<R>() => new _CompactLinkedIdentityHashSet<R>();
@@ -1053,22 +1082,22 @@
 }
 
 class _CompactLinkedCustomHashSet<E> extends _HashFieldBase
-    with SetMixin<E>, _LinkedHashSetMixin<E>, _HashBase
+    with
+        SetMixin<E>,
+        _HashBase,
+        _CustomEqualsAndHashCode,
+        _LinkedHashSetMixin<E>
     implements LinkedHashSet<E> {
-  final _equality;
-  final _hasher;
-  final _validKey;
-
-  int _hashCode(e) => _hasher(e);
-  bool _equals(e1, e2) => _equality(e1, e2);
+  final dynamic _equality;
+  final dynamic _hasher;
+  final dynamic _validKey;
 
   bool contains(Object? o) => _validKey(o) ? super.contains(o) : false;
   E? lookup(Object? o) => _validKey(o) ? super.lookup(o) : null;
   bool remove(Object? o) => _validKey(o) ? super.remove(o) : false;
 
   _CompactLinkedCustomHashSet(this._equality, this._hasher, validKey)
-      : _validKey = (validKey != null) ? validKey : new _TypeTest<E>().test,
-        super(_HashBase._INITIAL_INDEX_SIZE);
+      : _validKey = (validKey != null) ? validKey : new _TypeTest<E>().test;
 
   Set<R> cast<R>() => Set.castFrom<E, R>(this);
   Set<E> toSet() =>
diff --git a/sdk/lib/_internal/vm/lib/core_patch.dart b/sdk/lib/_internal/vm/lib/core_patch.dart
index 78b3bab..79ff4aa 100644
--- a/sdk/lib/_internal/vm/lib/core_patch.dart
+++ b/sdk/lib/_internal/vm/lib/core_patch.dart
@@ -13,10 +13,14 @@
     show
         allocateOneByteString,
         allocateTwoByteString,
+        checkValidWeakTarget,
         ClassID,
         CodeUnits,
         copyRangeFromUint8ListToOneByteString,
         EfficientLengthIterable,
+        FinalizerBase,
+        FinalizerBaseMembers,
+        FinalizerEntry,
         FixedLengthListBase,
         IterableElementError,
         ListIterator,
@@ -28,11 +32,12 @@
         makeFixedListUnmodifiable,
         makeListFixedLength,
         patch,
+        reachabilityFence,
         unsafeCast,
         writeIntoOneByteString,
         writeIntoTwoByteString;
 
-import "dart:async" show Completer, DeferredLoadException, Future, Timer;
+import "dart:async" show Completer, DeferredLoadException, Future, Timer, Zone;
 
 import "dart:collection"
     show
@@ -49,9 +54,9 @@
 
 import "dart:convert" show ascii, Encoding, json, latin1, utf8;
 
-import "dart:ffi" show Pointer, Struct, Union;
+import "dart:ffi" show Pointer, Struct, Union, NativePort;
 
-import "dart:isolate" show Isolate;
+import "dart:isolate" show Isolate, RawReceivePort;
 
 import "dart:typed_data"
     show Endian, Uint8List, Int64List, Uint16List, Uint32List;
diff --git a/sdk/lib/_internal/vm/lib/expando_patch.dart b/sdk/lib/_internal/vm/lib/expando_patch.dart
index cf34b7f..fd5bd93 100644
--- a/sdk/lib/_internal/vm/lib/expando_patch.dart
+++ b/sdk/lib/_internal/vm/lib/expando_patch.dart
@@ -28,7 +28,8 @@
 
   @patch
   T? operator [](Object object) {
-    _checkType(object);
+    // TODO(http://dartbug.com/48634): Rename to `key`.
+    checkValidWeakTarget(object, 'object');
 
     var mask = _size - 1;
     var idx = object._identityHashCode & mask;
@@ -50,7 +51,8 @@
 
   @patch
   void operator []=(Object object, T? value) {
-    _checkType(object);
+    // TODO(http://dartbug.com/48634): Rename to `key`.
+    checkValidWeakTarget(object, 'object');
 
     var mask = _size - 1;
     var idx = object._identityHashCode & mask;
@@ -147,19 +149,6 @@
     }
   }
 
-  static _checkType(object) {
-    if ((object == null) ||
-        (object is bool) ||
-        (object is num) ||
-        (object is String) ||
-        (object is Pointer) ||
-        (object is Struct) ||
-        (object is Union)) {
-      throw new ArgumentError.value(object,
-          "Expandos are not allowed on strings, numbers, booleans, null, Pointers, Structs or Unions.");
-    }
-  }
-
   int get _size => _data.length;
   int get _limit => (3 * (_size ~/ 4));
 
@@ -170,14 +159,14 @@
 @patch
 class WeakReference<T extends Object> {
   @patch
-  factory WeakReference(T object) = _WeakReferenceImpl<T>;
+  factory WeakReference(T target) = _WeakReferenceImpl<T>;
 }
 
 @pragma("vm:entry-point")
 class _WeakReferenceImpl<T extends Object> implements WeakReference<T> {
-  _WeakReferenceImpl(T object) {
-    Expando._checkType(object);
-    _target = object;
+  _WeakReferenceImpl(T target) {
+    checkValidWeakTarget(target, 'target');
+    _target = target;
   }
 
   @pragma("vm:recognized", "other")
@@ -190,11 +179,3 @@
   @pragma("vm:external-name", "WeakReference_setTarget")
   external set _target(T? value);
 }
-
-@patch
-class Finalizer<T> {
-  @patch
-  factory Finalizer(void Function(T) object) {
-    throw UnimplementedError("Finalizer");
-  }
-}
diff --git a/sdk/lib/_internal/vm/lib/ffi_allocation_patch.dart b/sdk/lib/_internal/vm/lib/ffi_allocation_patch.dart
index 0edd45c..791bd90 100644
--- a/sdk/lib/_internal/vm/lib/ffi_allocation_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_allocation_patch.dart
@@ -4,9 +4,9 @@
 
 // All imports must be in all FFI patch files to not depend on the order
 // the patches are applied.
-import "dart:_internal" show patch;
-import 'dart:typed_data';
+import 'dart:_internal';
 import 'dart:isolate';
+import 'dart:typed_data';
 
 extension AllocatorAlloc on Allocator {
   // TODO(http://dartbug.com/39964): Add `alignmentOf<T>()` call.
diff --git a/sdk/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart b/sdk/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart
index b9bcaf0..83a6a8a 100644
--- a/sdk/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart
@@ -4,9 +4,9 @@
 
 // All imports must be in all FFI patch files to not depend on the order
 // the patches are applied.
-import "dart:_internal" show patch;
-import 'dart:typed_data';
+import 'dart:_internal';
 import 'dart:isolate';
+import 'dart:typed_data';
 
 @pragma("vm:external-name", "Ffi_dl_open")
 external DynamicLibrary _open(String path);
diff --git a/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
index e697230..7c7d38d 100644
--- a/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
@@ -8,5 +8,96 @@
 import 'dart:isolate';
 import 'dart:typed_data';
 
-// This is a placeholder file which will shortly contain a NativeFinalizer
-// implementation.
+@patch
+@pragma("vm:entry-point")
+abstract class Finalizable {}
+
+@patch
+@pragma("vm:entry-point")
+abstract class NativeFinalizer {
+  @patch
+  factory NativeFinalizer(Pointer<NativeFinalizerFunction> callback) =
+      _NativeFinalizer;
+}
+
+@pragma("vm:entry-point")
+class _NativeFinalizer extends FinalizerBase implements NativeFinalizer {
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Pointer<NativeFinalizerFunction> get _callback;
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set _callback(Pointer<NativeFinalizerFunction> value);
+
+  _NativeFinalizer(Pointer<NativeFinalizerFunction> callback) {
+    allEntries = <FinalizerEntry>{};
+    _callback = callback;
+    setIsolate();
+    isolateRegisterFinalizer();
+  }
+
+  void attach(
+    Finalizable value,
+    Pointer<Void> token, {
+    Object? detach,
+    int? externalSize,
+  }) {
+    externalSize ??= 0;
+    RangeError.checkNotNegative(externalSize, 'externalSize');
+    if (value == null) {
+      throw ArgumentError.value(value, 'value', "Cannot be a null");
+    }
+    if (detach != null) {
+      checkValidWeakTarget(detach, 'detach');
+    }
+
+    final entry = FinalizerEntry.allocate(value, token, detach, this);
+    allEntries.add(entry);
+
+    if (externalSize > 0) {
+      entry.setExternalSize(externalSize);
+    }
+
+    if (detach != null) {
+      (detachments[detach] ??= <FinalizerEntry>{}).add(entry);
+    }
+
+    // The `value` stays reachable till here because the static type is
+    // `Finalizable`.
+  }
+
+  @override
+  void detach(Object detach) {
+    final entries = detachments[detach];
+    if (entries != null) {
+      for (final entry in entries) {
+        entry.token = entry;
+        final externalSize = entry.externalSize;
+        if (externalSize > 0) {
+          entry.setExternalSize(0);
+          assert(entry.externalSize == 0);
+        }
+        allEntries.remove(entry);
+      }
+      detachments[detach] = null;
+    }
+  }
+
+  void _removeEntries() {
+    FinalizerEntry? entry = exchangeEntriesCollectedWithNull();
+    while (entry != null) {
+      assert(entry.externalSize == 0);
+      allEntries.remove(entry);
+      final detach = entry.detach;
+      if (detach != null) {
+        detachments[detach]?.remove(entry);
+      }
+      entry = entry.next;
+    }
+  }
+
+  @pragma("vm:entry-point", "call")
+  static _handleNativeFinalizerMessage(_NativeFinalizer finalizer) {
+    finalizer._removeEntries();
+  }
+}
diff --git a/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart b/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
index ca47a83..d62f0a0 100644
--- a/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_native_type_patch.dart
@@ -4,9 +4,9 @@
 
 // All imports must be in all FFI patch files to not depend on the order
 // the patches are applied.
-import "dart:_internal" show patch;
-import 'dart:typed_data';
+import 'dart:_internal';
 import 'dart:isolate';
+import 'dart:typed_data';
 
 // NativeType is not private, because it is used in type arguments.
 // NativeType is abstract because it not used with const constructors in
diff --git a/sdk/lib/_internal/vm/lib/ffi_patch.dart b/sdk/lib/_internal/vm/lib/ffi_patch.dart
index bbf8499..be50104 100644
--- a/sdk/lib/_internal/vm/lib/ffi_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_patch.dart
@@ -4,9 +4,9 @@
 
 // All imports must be in all FFI patch files to not depend on the order
 // the patches are applied.
-import "dart:_internal" show patch, has63BitSmis;
-import 'dart:typed_data';
+import 'dart:_internal';
 import 'dart:isolate';
+import 'dart:typed_data';
 
 const Map<Type, int> _knownSizes = {
   Int8: 1,
@@ -205,15 +205,22 @@
   @pragma("vm:entry-point")
   final List<int> _nestedDimensions;
 
+  int? _nestedDimensionsFlattenedCache;
+  int? _nestedDimensionsFirstCache;
+  List<int>? _nestedDimensionsRestCache;
+
   @pragma("vm:entry-point")
   Array._(this._typedDataBase, this._size, this._nestedDimensions);
 
-  late final int _nestedDimensionsFlattened = _nestedDimensions.fold(
-      1, (accumulator, element) => accumulator * element);
+  int get _nestedDimensionsFlattened =>
+      _nestedDimensionsFlattenedCache ??= _nestedDimensions.fold<int>(
+          1, (accumulator, element) => accumulator * element);
 
-  late final int _nestedDimensionsFirst = _nestedDimensions.first;
+  int get _nestedDimensionsFirst =>
+      _nestedDimensionsFirstCache ??= _nestedDimensions.first;
 
-  late final List<int> _nestedDimensionsRest = _nestedDimensions.sublist(1);
+  List<int> get _nestedDimensionsRest =>
+      _nestedDimensionsRestCache ??= _nestedDimensions.sublist(1);
 
   _checkIndex(int index) {
     if (index < 0 || index >= _size) {
diff --git a/sdk/lib/_internal/vm/lib/ffi_struct_patch.dart b/sdk/lib/_internal/vm/lib/ffi_struct_patch.dart
index 00279f3..3c83583 100644
--- a/sdk/lib/_internal/vm/lib/ffi_struct_patch.dart
+++ b/sdk/lib/_internal/vm/lib/ffi_struct_patch.dart
@@ -4,9 +4,9 @@
 
 // All imports must be in all FFI patch files to not depend on the order
 // the patches are applied.
-import "dart:_internal" show patch;
-import 'dart:typed_data';
+import 'dart:_internal';
 import 'dart:isolate';
+import 'dart:typed_data';
 
 @pragma("vm:entry-point")
 abstract class _Compound extends NativeType {}
diff --git a/sdk/lib/_internal/vm/lib/finalizer_patch.dart b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
index aec537b..417344f 100644
--- a/sdk/lib/_internal/vm/lib/finalizer_patch.dart
+++ b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
@@ -4,5 +4,75 @@
 
 // part of "core_patch.dart";
 
-// This is a placeholder file which will shortly contain a Finalizer
-// implementation.
+@patch
+@pragma("vm:entry-point")
+abstract class Finalizer<T> {
+  @patch
+  factory Finalizer(void Function(T) callback) = _FinalizerImpl<T>;
+}
+
+@pragma("vm:entry-point")
+class _FinalizerImpl<T> extends FinalizerBase implements Finalizer<T> {
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external void Function(T) get _callback;
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set _callback(void Function(T) value);
+
+  /// Constructs a finalizer.
+  ///
+  /// This is fine as a non-atomic operation, because the GC only looks at
+  /// finalizer instances when it process their entries. By preventing inlining
+  /// we ensure the the finalizer to have been fully initialized by the time
+  /// any [attach] on it is called.
+  ///
+  /// Alternatively, we could make it a recognized method and add a reachability
+  /// fence on the relevant members.
+  @pragma('vm:never-inline')
+  _FinalizerImpl(void Function(T) callback) {
+    allEntries = <FinalizerEntry>{};
+    _callback = Zone.current.bindUnaryCallbackGuarded(callback);
+    setIsolate();
+    isolateRegisterFinalizer();
+  }
+
+  void attach(Object value, T token, {Object? detach}) {
+    checkValidWeakTarget(value, 'value');
+    if (detach != null) {
+      checkValidWeakTarget(detach, 'detach');
+    }
+
+    final entry = FinalizerEntry.allocate(value, token, detach, this);
+    allEntries.add(entry);
+    // Ensure value stays reachable until after having initialized the entry.
+    // This ensures the token and finalizer are set.
+    reachabilityFence(value);
+
+    if (detach != null) {
+      (detachments[detach] ??= <FinalizerEntry>{}).add(entry);
+    }
+  }
+
+  void _runFinalizers() {
+    FinalizerEntry? entry = exchangeEntriesCollectedWithNull();
+    while (entry != null) {
+      final token = entry.token;
+      // Check token for identical, detach might have been called.
+      if (!identical(token, entry)) {
+        _callback(unsafeCast<T>(token));
+      }
+      allEntries.remove(entry);
+      final detach = entry.detach;
+      if (detach != null) {
+        detachments[detach]?.remove(entry);
+      }
+      entry = entry.next;
+    }
+  }
+
+  @pragma("vm:entry-point", "call")
+  static _handleFinalizerMessage(_FinalizerImpl finalizer) {
+    finalizer._runFinalizers();
+  }
+}
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index 4c0fa92..c02b2f8 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -9,7 +9,7 @@
 
 import "dart:async" show Timer;
 import "dart:core" hide Symbol;
-
+import "dart:ffi" show Pointer, Struct, Union, IntPtr, Handle, Void, FfiNative;
 import "dart:isolate" show SendPort;
 import "dart:typed_data" show Int32List, Uint8List;
 
@@ -209,3 +209,223 @@
     throw new LateError.localADI(localName);
   }
 }
+
+void checkValidWeakTarget(object, name) {
+  if ((object == null) ||
+      (object is bool) ||
+      (object is num) ||
+      (object is String) ||
+      (object is Pointer) ||
+      (object is Struct) ||
+      (object is Union)) {
+    throw new ArgumentError.value(object, name,
+        "Cannot be a string, number, boolean, null, Pointer, Struct or Union");
+  }
+}
+
+@pragma("vm:entry-point")
+class FinalizerBase {
+  /// The list of finalizers of this isolate.
+  ///
+  /// Reuses [WeakReference] so that we don't have to implement yet another
+  /// mechanism to hold on weakly to things.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external static List<WeakReference<FinalizerBase>>? get _isolateFinalizers;
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external static set _isolateFinalizers(
+      List<WeakReference<FinalizerBase>>? value);
+
+  static int _isolateFinalizersPurgeCollectedAt = 1;
+
+  /// Amortizes the cost for purging nulled out entries.
+  ///
+  /// Similar to how Expandos purge their nulled out entries on a rehash when
+  /// resizing.
+  static void _isolateFinalizersEnsureCapacity() {
+    _isolateFinalizers ??= <WeakReference<FinalizerBase>>[];
+    if (_isolateFinalizers!.length < _isolateFinalizersPurgeCollectedAt) {
+      return;
+    }
+    // retainWhere does a single traversal.
+    _isolateFinalizers!.retainWhere((weak) => weak.target != null);
+    // We might have dropped most finalizers, trigger next resize at 2x.
+    _isolateFinalizersPurgeCollectedAt = _isolateFinalizers!.length * 2;
+  }
+
+  /// Registers this [FinalizerBase] to the isolate.
+  ///
+  /// This is used to prevent sending messages from the GC to the isolate after
+  /// isolate shutdown.
+  void _isolateRegisterFinalizer() {
+    _isolateFinalizersEnsureCapacity();
+    _isolateFinalizers!.add(WeakReference(this));
+  }
+
+  /// The isolate this [FinalizerBase] belongs to.
+  ///
+  /// This is used to send finalizer messages to `_handleFinalizerMessage`
+  /// without a Dart_Port.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external _setIsolate();
+
+  /// All active attachments.
+  ///
+  /// This keeps the [FinalizerEntry]s belonging to this finalizer alive. If an
+  /// entry gets collected, the finalizer is not run when the
+  /// [FinalizerEntry.value] is collected.
+  ///
+  /// TODO(http://dartbug.com/47777): For native finalizers, what data structure
+  /// can we use that we can modify in the VM. So that we don't have to send a
+  /// message to Dart to clean up entries for which the GC has run.
+  ///
+  /// Requirements for data structure:
+  /// 1. Keeps entries reachable. Entries that are collected will never run
+  ///    the GC.
+  /// 2. Atomic insert in Dart on `attach`. GC should not run in between.
+  /// 3. Atomic remove in Dart on `detach`. multiple GC tasks run in parallel.
+  /// 4. Atomic remove in C++ on value being collected. Multiple GC tasks run in
+  ///    parallel.
+  ///
+  /// For Dart finalizers we execute the remove in Dart, much simpler.
+  @pragma("vm:recognized", "other")
+  @pragma('vm:prefer-inline')
+  external Set<FinalizerEntry> get _allEntries;
+  @pragma("vm:recognized", "other")
+  @pragma('vm:prefer-inline')
+  external set _allEntries(Set<FinalizerEntry> entries);
+
+  /// Entries of which the value has been collected.
+  ///
+  /// This is a linked list, with [FinalizerEntry.next].
+  ///
+  /// Atomic exchange: The GC cannot run between reading the value and storing
+  /// `null`. Atomicity guaranteed by force optimizing the function.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external FinalizerEntry? _exchangeEntriesCollectedWithNull();
+
+  /// A weak map from `detach` keys to [FinalizerEntry]s.
+  ///
+  /// Using the [FinalizerEntry.detach] keys as keys in an [Expando] ensures
+  /// they can be GCed.
+  ///
+  /// [FinalizerEntry]s do not get GCed themselves when their
+  /// [FinalizerEntry.detach] is unreachable, in contrast to `WeakProperty`s
+  /// which are GCed themselves when their `key` is no longer reachable.
+  /// To prevent [FinalizerEntry]s staying around in [_detachments] forever,
+  /// we reuse `WeakProperty`s.
+  /// To avoid code duplication, we do not inline the code but use an [Expando]
+  /// here instead.
+  ///
+  /// We cannot eagerly purge entries from the map (in the Expando) when GCed.
+  /// The map is indexed on detach, and doesn't enable finding the entries
+  /// based on their identity.
+  /// Instead we rely on the WeakProperty being nulled out (assuming the
+  /// `detach` key gets GCed) and then reused.
+  @pragma("vm:recognized", "other")
+  @pragma('vm:prefer-inline')
+  external Expando<Set<FinalizerEntry>>? get _detachments;
+  @pragma("vm:recognized", "other")
+  @pragma('vm:prefer-inline')
+  external set _detachments(Expando<Set<FinalizerEntry>>? value);
+
+  void detach(Object detach) {
+    final entries = detachments[detach];
+    if (entries != null) {
+      for (final entry in entries) {
+        entry.token = entry;
+        _allEntries.remove(entry);
+      }
+      detachments[detach] = null;
+    }
+  }
+}
+
+// Extension so that the members can be accessed from other libs.
+extension FinalizerBaseMembers on FinalizerBase {
+  /// See documentation on [_allEntries].
+  @pragma('vm:prefer-inline')
+  Set<FinalizerEntry> get allEntries => _allEntries;
+  @pragma('vm:prefer-inline')
+  set allEntries(Set<FinalizerEntry> value) => _allEntries = value;
+
+  /// See documentation on [_exchangeEntriesCollectedWithNull].
+  FinalizerEntry? exchangeEntriesCollectedWithNull() =>
+      _exchangeEntriesCollectedWithNull();
+
+  /// See documentation on [_detachments].
+  @pragma('vm:prefer-inline')
+  Expando<Set<FinalizerEntry>> get detachments {
+    _detachments ??= Expando<Set<FinalizerEntry>>();
+    return unsafeCast<Expando<Set<FinalizerEntry>>>(_detachments);
+  }
+
+  /// See documentation on [_isolateRegisterFinalizer].
+  isolateRegisterFinalizer() => _isolateRegisterFinalizer();
+
+  /// See documentation on [_setIsolate].
+  setIsolate() => _setIsolate();
+}
+
+/// Contains the informatation of an active [Finalizer.attach].
+///
+/// It holds on to the [value], optional [detach], and [token]. In addition, it
+/// also keeps a reference the [finalizer] it belings to and a [next] field for
+/// when being used in a linked list.
+///
+/// This is being kept alive by [FinalizerBase._allEntries] until either (1)
+/// [Finalizer.detach] detaches it, or (2) [value] is collected and the
+/// `callback` has been invoked.
+///
+/// Note that the GC itself uses an extra hidden field `next_seen_by_gc` to keep a
+/// linked list of pending entries while running the GC.
+@pragma("vm:entry-point")
+class FinalizerEntry {
+  @pragma('vm:never-inline')
+  @pragma("vm:recognized", "other")
+  @pragma("vm:external-name", "FinalizerEntry_allocate")
+  external static FinalizerEntry allocate(
+      Object value, Object? token, Object? detach, FinalizerBase finalizer);
+
+  /// The [value] the [FinalizerBase] is attached to.
+  ///
+  /// Set to `null` by GC when unreachable.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Object? get value;
+
+  /// The [detach] object can be passed to [FinalizerBase] to detach
+  /// the finalizer.
+  ///
+  /// Set to `null` by GC when unreachable.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Object? get detach;
+
+  /// The [token] is passed to [FinalizerBase] when the finalizer is run.
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external Object? get token;
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external set token(Object? value);
+
+  /// The [next] entry in a linked list.
+  ///
+  /// Used in for the linked list starting from
+  /// [FinalizerBase._exchangeEntriesCollectedWithNull].
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external FinalizerEntry? get next;
+
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  external int get externalSize;
+
+  /// Update the external size.
+  @FfiNative<Void Function(Handle, IntPtr)>('FinalizerEntry_SetExternalSize')
+  external void setExternalSize(int externalSize);
+}
diff --git a/sdk/lib/_internal/wasm/lib/errors_patch.dart b/sdk/lib/_internal/wasm/lib/errors_patch.dart
new file mode 100644
index 0000000..810e550
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/errors_patch.dart
@@ -0,0 +1,59 @@
+// 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.
+
+external Never _throwObjectWithStackTrace(Object error, StackTrace stacktrace);
+
+@patch
+class Error {
+  @patch
+  static String _objectToString(Object object) {
+    return object.toString();
+  }
+
+  @patch
+  static String _stringToSafeString(String string) {
+    // TODO(joshualitt): JSON encode string.
+    return string;
+  }
+
+  @patch
+  StackTrace? get stackTrace => _stackTrace;
+
+  StackTrace? _stackTrace;
+
+  @patch
+  static Never _throw(Object error, StackTrace stackTrace) {
+    if (error is Error && error._stackTrace == null) {
+      error._stackTrace = stackTrace;
+    }
+    return _throwObjectWithStackTrace(error, stackTrace);
+  }
+}
+
+class _Error extends Error {
+  final String _message;
+
+  _Error(this._message);
+
+  @override
+  String toString() => _message;
+}
+
+class _TypeError extends _Error implements TypeError {
+  _TypeError(String message) : super('TypeError: $message');
+
+  factory _TypeError.fromMessageAndStackTrace(
+      String message, StackTrace stackTrace) {
+    final typeError = _TypeError(message);
+    typeError._stackTrace = stackTrace;
+    return typeError;
+  }
+
+  @pragma("wasm:entry-point")
+  static Never _throwNullCheckError(StackTrace stackTrace) {
+    final typeError = _TypeError.fromMessageAndStackTrace(
+        "Null check operator used on a null value", stackTrace);
+    return _throwObjectWithStackTrace(typeError, stackTrace);
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/hash_factories.dart b/sdk/lib/_internal/wasm/lib/hash_factories.dart
index 4217e38..8159f09 100644
--- a/sdk/lib/_internal/wasm/lib/hash_factories.dart
+++ b/sdk/lib/_internal/wasm/lib/hash_factories.dart
@@ -49,3 +49,24 @@
   @patch
   factory LinkedHashSet.identity() => new _CompactLinkedIdentityHashSet<E>();
 }
+
+abstract class _HashWasmImmutableBase extends _HashFieldBase
+    implements _HashAbstractImmutableBase {
+  external Uint32List? get _indexNullable;
+}
+
+@pragma("wasm:entry-point")
+class _WasmImmutableLinkedHashMap<K, V> extends _HashWasmImmutableBase
+    with
+        MapMixin<K, V>,
+        _HashBase,
+        _OperatorEqualsAndHashCode,
+        _LinkedHashMapMixin<K, V>,
+        _UnmodifiableMapMixin<K, V>,
+        _ImmutableLinkedHashMapMixin<K, V>
+    implements LinkedHashMap<K, V> {
+  factory _WasmImmutableLinkedHashMap._uninstantiable() {
+    throw new UnsupportedError(
+        "Immutable maps can only be instantiated via constants");
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/immutable_map.dart b/sdk/lib/_internal/wasm/lib/immutable_map.dart
deleted file mode 100644
index 74127f4..0000000
--- a/sdk/lib/_internal/wasm/lib/immutable_map.dart
+++ /dev/null
@@ -1,221 +0,0 @@
-// 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.
-
-// part of "core_patch.dart";
-
-/// Immutable map class for compiler generated map literals.
-// TODO(lrn): Extend MapBase with UnmodifiableMapMixin when mixins
-// support forwarding const constructors.
-@pragma("wasm:entry-point")
-class _ImmutableMap<K, V> implements Map<K, V> {
-  final _ImmutableList _kvPairs;
-
-  @pragma("wasm:entry-point")
-  const _ImmutableMap._create(_ImmutableList keyValuePairs)
-      : _kvPairs = keyValuePairs;
-
-  Map<K2, V2> cast<K2, V2>() => Map.castFrom<K, V, K2, V2>(this);
-
-  V? operator [](Object? key) {
-    // To preserve the key-value order of the map literal, the keys are
-    // not sorted. Need to do linear search or implement an additional
-    // lookup table.
-    for (int i = 0; i < _kvPairs.length - 1; i += 2) {
-      if (key == _kvPairs[i]) {
-        return _kvPairs[i + 1];
-      }
-    }
-    return null;
-  }
-
-  bool get isEmpty {
-    return _kvPairs.length == 0;
-  }
-
-  bool get isNotEmpty => !isEmpty;
-
-  int get length {
-    return _kvPairs.length ~/ 2;
-  }
-
-  void forEach(void f(K key, V value)) {
-    for (int i = 0; i < _kvPairs.length; i += 2) {
-      f(_kvPairs[i], _kvPairs[i + 1]);
-    }
-  }
-
-  Iterable<K> get keys {
-    return new _ImmutableMapKeyIterable<K>(this);
-  }
-
-  Iterable<V> get values {
-    return new _ImmutableMapValueIterable<V>(this);
-  }
-
-  bool containsKey(Object? key) {
-    for (int i = 0; i < _kvPairs.length; i += 2) {
-      if (key == _kvPairs[i]) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  bool containsValue(Object? value) {
-    for (int i = 1; i < _kvPairs.length; i += 2) {
-      if (value == _kvPairs[i]) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  void operator []=(K key, V value) {
-    throw new UnsupportedError("Cannot set value in unmodifiable Map");
-  }
-
-  void addAll(Map<K, V> other) {
-    throw new UnsupportedError("Cannot set value in unmodifiable Map");
-  }
-
-  V putIfAbsent(K key, V ifAbsent()) {
-    throw new UnsupportedError("Cannot set value in unmodifiable Map");
-  }
-
-  void clear() {
-    throw new UnsupportedError("Cannot clear unmodifiable Map");
-  }
-
-  V? remove(Object? key) {
-    throw new UnsupportedError("Cannot remove from unmodifiable Map");
-  }
-
-  Iterable<MapEntry<K, V>> get entries =>
-      new _ImmutableMapEntryIterable<K, V>(this);
-
-  Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> f(K key, V value)) {
-    var result = <K2, V2>{};
-    for (int i = 0; i < _kvPairs.length; i += 2) {
-      var entry = f(_kvPairs[i], _kvPairs[i + 1]);
-      result[entry.key] = entry.value;
-    }
-    return result;
-  }
-
-  void addEntries(Iterable<MapEntry<K, V>> newEntries) {
-    throw new UnsupportedError("Cannot modify an unmodifiable Map");
-  }
-
-  V update(K key, V update(V value), {V ifAbsent()?}) {
-    throw new UnsupportedError("Cannot modify an unmodifiable Map");
-  }
-
-  void updateAll(V update(K key, V value)) {
-    throw new UnsupportedError("Cannot modify an unmodifiable Map");
-  }
-
-  void removeWhere(bool predicate(K key, V value)) {
-    throw new UnsupportedError("Cannot modify an unmodifiable Map");
-  }
-
-  String toString() => MapBase.mapToString(this);
-}
-
-class _ImmutableMapKeyIterable<E> extends EfficientLengthIterable<E> {
-  final _ImmutableMap _map;
-  _ImmutableMapKeyIterable(this._map);
-
-  Iterator<E> get iterator {
-    return new _ImmutableMapKeyIterator<E>(_map);
-  }
-
-  int get length => _map.length;
-}
-
-class _ImmutableMapValueIterable<E> extends EfficientLengthIterable<E> {
-  final _ImmutableMap _map;
-  _ImmutableMapValueIterable(this._map);
-
-  Iterator<E> get iterator {
-    return new _ImmutableMapValueIterator<E>(_map);
-  }
-
-  int get length => _map.length;
-}
-
-class _ImmutableMapEntryIterable<K, V>
-    extends EfficientLengthIterable<MapEntry<K, V>> {
-  final _ImmutableMap _map;
-  _ImmutableMapEntryIterable(this._map);
-
-  Iterator<MapEntry<K, V>> get iterator {
-    return new _ImmutableMapEntryIterator<K, V>(_map);
-  }
-
-  int get length => _map.length;
-}
-
-class _ImmutableMapKeyIterator<E> implements Iterator<E> {
-  _ImmutableMap _map;
-  int _nextIndex = 0;
-  E? _current;
-
-  _ImmutableMapKeyIterator(this._map);
-
-  bool moveNext() {
-    int newIndex = _nextIndex;
-    if (newIndex < _map.length) {
-      _nextIndex = newIndex + 1;
-      _current = _map._kvPairs[newIndex * 2];
-      return true;
-    }
-    _current = null;
-    return false;
-  }
-
-  E get current => _current as E;
-}
-
-class _ImmutableMapValueIterator<E> implements Iterator<E> {
-  _ImmutableMap _map;
-  int _nextIndex = 0;
-  E? _current;
-
-  _ImmutableMapValueIterator(this._map);
-
-  bool moveNext() {
-    int newIndex = _nextIndex;
-    if (newIndex < _map.length) {
-      _nextIndex = newIndex + 1;
-      _current = _map._kvPairs[newIndex * 2 + 1];
-      return true;
-    }
-    _current = null;
-    return false;
-  }
-
-  E get current => _current as E;
-}
-
-class _ImmutableMapEntryIterator<K, V> implements Iterator<MapEntry<K, V>> {
-  _ImmutableMap _map;
-  int _nextIndex = 0;
-  MapEntry<K, V>? _current;
-
-  _ImmutableMapEntryIterator(this._map);
-
-  bool moveNext() {
-    int newIndex = _nextIndex;
-    if (newIndex < _map.length) {
-      _nextIndex = newIndex + 1;
-      _current = new MapEntry<K, V>(
-          _map._kvPairs[newIndex * 2], _map._kvPairs[newIndex * 2 + 1]);
-      return true;
-    }
-    _current = null;
-    return false;
-  }
-
-  MapEntry<K, V> get current => _current as MapEntry<K, V>;
-}
diff --git a/sdk/lib/_internal/wasm/lib/internal_patch.dart b/sdk/lib/_internal/wasm/lib/internal_patch.dart
index 3cd8846..b6e9a14 100644
--- a/sdk/lib/_internal/wasm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/wasm/lib/internal_patch.dart
@@ -84,6 +84,20 @@
 // Important: this is unsafe and must be used with care.
 external T unsafeCast<T>(Object? v);
 
+// A version of [unsafeCast] that is opaque to the TFA. The TFA knows about the
+// [unsafeCast] function and will sharpen the result type with the inferred type
+// of the input. When such sharpening is undesirable, this function should be
+// used. One such situation is when either the source or destination type is not
+// an ordinary Dart type, for instance if it is one of the special Wasm types
+// from wasm_types.dart.
+external T unsafeCastOpaque<T>(Object? v);
+
+// This function can be used to keep an object alive till that point.
+void reachabilityFence(Object? object) {}
+
+// This function can be used to encode native side effects.
+external void _nativeEffect(Object object);
+
 // Thomas Wang 64-bit mix.
 // https://gist.github.com/badboy/6267743
 int mix64(int n) {
diff --git a/sdk/lib/_internal/wasm/lib/js_util_wasm_patch.dart b/sdk/lib/_internal/wasm/lib/js_util_wasm_patch.dart
new file mode 100644
index 0000000..f4e7512
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/js_util_wasm_patch.dart
@@ -0,0 +1,31 @@
+// 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.
+
+library dart.js_util_wasm;
+
+import "dart:_internal";
+import "dart:js_util_wasm";
+import "dart:wasm";
+
+/// js_util_wasm methods used by the wasm runtime.
+@pragma("wasm:export", "\$listLength")
+double _listLength(List list) => list.length.toDouble();
+
+@pragma("wasm:export", "\$listRead")
+WasmAnyRef? _listRead(List<Object?> list, double index) =>
+    jsifyRaw(list[index.toInt()]);
+
+@pragma("wasm:export", "\$listAllocate")
+List<Object?> _listAllocate() => [];
+
+@pragma("wasm:export", "\$listAdd")
+void _listAdd(List<Object?> list, WasmAnyRef? item) =>
+    list.add(dartifyRaw(item));
+
+@patch
+Object _jsObjectToDartObject(WasmAnyRef ref) => unsafeCastOpaque<Object>(ref);
+
+@patch
+WasmAnyRef _jsObjectFromDartObject(Object object) =>
+    unsafeCastOpaque<WasmAnyRef>(object);
diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart
index 3de0d58..42b6082 100644
--- a/sdk/lib/async/stream_impl.dart
+++ b/sdk/lib/async/stream_impl.dart
@@ -978,6 +978,7 @@
   /// This will usually cause the [_subscription] to be paused, but as an
   /// optimization, we only pause after the [moveNext] future has been
   /// completed.
+  @pragma("vm:entry-point")
   bool _hasValue = false;
 
   _StreamIterator(final Stream<T> stream)
diff --git a/sdk/lib/core/weak.dart b/sdk/lib/core/weak.dart
index 01ef31c..3c8f968 100644
--- a/sdk/lib/core/weak.dart
+++ b/sdk/lib/core/weak.dart
@@ -207,15 +207,15 @@
   /// with different, or the same, finalization token.
   void attach(Object value, T finalizationToken, {Object? detach});
 
-  /// Detaches the finalizer from values attached with [detachToken].
+  /// Detaches this finalizer from values attached with [detach].
   ///
   /// Each attachment between this finalizer and a value,
-  /// which was created by calling [attach] with the [detachToken] object as
+  /// which was created by calling [attach] with the [detach] object as
   /// `detach` argument, is removed.
   ///
   /// If the finalizer was attached multiple times to the same value
   /// with different detachment keys,
-  /// only those attachments which used [detachToken] are removed.
+  /// only those attachments which used [detach] are removed.
   ///
   /// After detaching, an attachment won't cause any callbacks to happen
   /// if the object become inaccessible.
@@ -242,5 +242,5 @@
   ///   }
   /// }
   /// ```
-  void detach(Object detachToken);
+  void detach(Object detach);
 }
diff --git a/sdk/lib/ffi/c_type.dart b/sdk/lib/ffi/c_type.dart
index b1bc764..cb9d386 100644
--- a/sdk/lib/ffi/c_type.dart
+++ b/sdk/lib/ffi/c_type.dart
@@ -9,6 +9,44 @@
 /// these C types in this library.
 part of dart.ffi;
 
+/// The C `char` type.
+///
+/// Typically a signed or unsigned 8-bit integer.
+/// For a guaranteed 8-bit integer, use [Int8] with the C `int8_t` type
+/// or [Uint8] with the C `uint8_t` type.
+/// For a specifically `signed` or `unsigned` `char`, use [SignedChar] or
+/// [UnsignedChar].
+///
+/// The [Char] type is a native type, and should not be constructed in
+/// Dart code.
+/// It occurs only in native type signatures and as annotation on [Struct] and
+/// [Union] fields.
+@AbiSpecificIntegerMapping({
+  Abi.androidArm: Uint8(),
+  Abi.androidArm64: Uint8(),
+  Abi.androidIA32: Int8(),
+  Abi.androidX64: Int8(),
+  Abi.fuchsiaArm64: Uint8(),
+  Abi.fuchsiaX64: Int8(),
+  Abi.iosArm: Int8(),
+  Abi.iosArm64: Int8(),
+  Abi.iosX64: Int8(),
+  Abi.linuxArm: Uint8(),
+  Abi.linuxArm64: Uint8(),
+  Abi.linuxIA32: Int8(),
+  Abi.linuxX64: Int8(),
+  Abi.linuxRiscv32: Uint8(),
+  Abi.linuxRiscv64: Uint8(),
+  Abi.macosArm64: Int8(),
+  Abi.macosX64: Int8(),
+  Abi.windowsArm64: Int8(),
+  Abi.windowsIA32: Int8(),
+  Abi.windowsX64: Int8(),
+})
+class Char extends AbiSpecificInteger {
+  const Char();
+}
+
 /// The C `signed char` type.
 ///
 /// Typically a signed 8-bit integer.
@@ -490,8 +528,8 @@
   Abi.linuxArm64: Uint32(),
   Abi.linuxIA32: Int32(),
   Abi.linuxX64: Int32(),
-  Abi.linuxRiscv32: Uint32(),
-  Abi.linuxRiscv64: Uint32(),
+  Abi.linuxRiscv32: Int32(),
+  Abi.linuxRiscv64: Int32(),
   Abi.macosArm64: Int32(),
   Abi.macosX64: Int32(),
   Abi.windowsArm64: Uint16(),
diff --git a/sdk/lib/ffi/ffi.dart b/sdk/lib/ffi/ffi.dart
index 968c555..0d4d5b7 100644
--- a/sdk/lib/ffi/ffi.dart
+++ b/sdk/lib/ffi/ffi.dart
@@ -39,6 +39,7 @@
 
 /// Represents a pointer into the native C memory. Cannot be extended.
 @pragma('vm:entry-point')
+@pragma("wasm:entry-point")
 class Pointer<T extends NativeType> extends NativeType {
   /// Construction from raw integer.
   external factory Pointer.fromAddress(int ptr);
diff --git a/sdk/lib/ffi/native_finalizer.dart b/sdk/lib/ffi/native_finalizer.dart
index 49fc667..14074cf 100644
--- a/sdk/lib/ffi/native_finalizer.dart
+++ b/sdk/lib/ffi/native_finalizer.dart
@@ -221,3 +221,77 @@
 abstract class Finalizable {
   factory Finalizable._() => throw UnsupportedError("");
 }
+
+/// The native function type for [NativeFinalizer]s.
+///
+/// A [NativeFinalizer]'s `callback` should have the C
+/// `void nativeFinalizer(void* token)` type.
+typedef NativeFinalizerFunction
+    = NativeFunction<Void Function(Pointer<Void> token)>;
+
+/// A native finalizer which can be attached to Dart objects.
+///
+/// When [attach]ed to a Dart object, this finalizer's native callback is called
+/// after the Dart object is garbage collected or becomes inaccessible for other
+/// reasons.
+///
+/// Callbacks will happen as early as possible, when the object becomes
+/// inaccessible to the program, and may happen at any moment during execution
+/// of the program. At the latest, when an isolate group shuts down,
+/// this callback is guaranteed to be called for each object in that isolate
+/// group that the finalizer is still attached to.
+///
+/// Compared to the [Finalizer] from `dart:core`, which makes no promises to
+/// ever call an attached callback, this native finalizer promises that all
+/// attached finalizers are definitely called at least once before the program
+/// ends, and the callbacks are called as soon as possible after an object
+/// is recognized as inaccessible.
+abstract class NativeFinalizer {
+  /// Creates a finalizer with the given finalization callback.
+  ///
+  /// The [callback] must be a native function which can be executed outside of
+  /// a Dart isolate. This means that passing an FFI trampoline (a function
+  /// pointer obtained via [Pointer.fromFunction]) is not supported.
+  ///
+  /// The [callback] might be invoked on an arbitrary thread and not necessary
+  /// on the same thread that created [NativeFinalizer].
+  // TODO(https://dartbug.com/47778): Implement isolate independent code and
+  // update the above comment.
+  external factory NativeFinalizer(Pointer<NativeFinalizerFunction> callback);
+
+  /// Attaches this finalizer to [value].
+  ///
+  /// When [value] is no longer accessible to the program,
+  /// the finalizer will call its callback function with [token]
+  /// as argument.
+  ///
+  /// If a non-`null` [detach] value is provided, that object can be
+  /// passed to [Finalizer.detach] to remove the attachment again.
+  ///
+  /// The [value] and [detach] arguments do not count towards those
+  /// objects being accessible to the program. Both must be objects supported
+  /// as an [Expando] key. They may be the *same* object.
+  ///
+  /// Multiple objects may be using the same finalization token,
+  /// and the finalizer can be attached multiple times to the same object
+  /// with different, or the same, finalization token.
+  ///
+  /// The callback will be called exactly once per attachment, except for
+  /// registrations which have been detached since they were attached.
+  ///
+  /// The [externalSize] should represent the amount of native (non-Dart) memory
+  /// owned by the given [value]. This information is used for garbage
+  /// collection scheduling heuristics.
+  void attach(Finalizable value, Pointer<Void> token,
+      {Object? detach, int? externalSize});
+
+  /// Detaches this finalizer from values attached with [detach].
+  ///
+  /// If this finalizer was attached multiple times to the same object with
+  /// different detachment keys, only those attachments which used [detach]
+  /// are removed.
+  ///
+  /// After detaching, an attachment won't cause any callbacks to happen if the
+  /// object become inaccessible.
+  void detach(Object detach);
+}
diff --git a/sdk/lib/ffi/struct.dart b/sdk/lib/ffi/struct.dart
index 0a249f8..c02a059 100644
--- a/sdk/lib/ffi/struct.dart
+++ b/sdk/lib/ffi/struct.dart
@@ -8,6 +8,7 @@
 ///
 /// FFI struct types should extend [Struct]. For more information see the
 /// documentation on this class.
+@pragma("wasm:entry-point")
 abstract class _Compound extends NativeType {
   @pragma("vm:entry-point")
   final Object _typedDataBase;
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 516fa1f..8ad4a99 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -25239,9 +25239,50 @@
 
   List<PerformanceEntry> getEntriesByType(String entryType) native;
 
-  void mark(String markName) native;
+  PerformanceEntry? mark(String markName, [Map? markOptions]) {
+    if (markOptions != null) {
+      var markOptions_1 = convertDartToNative_Dictionary(markOptions);
+      return _mark_1(markName, markOptions_1);
+    }
+    return _mark_2(markName);
+  }
 
-  void measure(String measureName, String? startMark, String? endMark) native;
+  @JSName('mark')
+  PerformanceEntry? _mark_1(markName, markOptions) native;
+  @JSName('mark')
+  PerformanceEntry? _mark_2(markName) native;
+
+  PerformanceMeasure? measure(String measureName,
+      [measureOptions_OR_startMark, String? endMark]) {
+    if (measureOptions_OR_startMark == null && endMark == null) {
+      return _measure_1(measureName);
+    }
+    if ((measureOptions_OR_startMark is String ||
+            measureOptions_OR_startMark == null) &&
+        endMark == null) {
+      return _measure_2(measureName, measureOptions_OR_startMark);
+    }
+    if ((measureOptions_OR_startMark is String ||
+        measureOptions_OR_startMark == null)) {
+      return _measure_3(measureName, measureOptions_OR_startMark, endMark);
+    }
+    if ((measureOptions_OR_startMark is Map) && endMark == null) {
+      var measureOptions_1 =
+          convertDartToNative_Dictionary(measureOptions_OR_startMark);
+      return _measure_4(measureName, measureOptions_1);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @JSName('measure')
+  PerformanceMeasure? _measure_1(measureName) native;
+  @JSName('measure')
+  PerformanceMeasure? _measure_2(measureName, String? startMark) native;
+  @JSName('measure')
+  PerformanceMeasure? _measure_3(measureName, String? startMark, endMark)
+      native;
+  @JSName('measure')
+  PerformanceMeasure? _measure_4(measureName, measureOptions) native;
 
   double now() native;
 
diff --git a/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart
index 0928116..f61af6a 100644
--- a/sdk/lib/io/data_transformer.dart
+++ b/sdk/lib/io/data_transformer.dart
@@ -11,82 +11,52 @@
   /// Minimal value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int minWindowBits = 8;
-  @Deprecated("Use minWindowBits instead")
-  static const int MIN_WINDOW_BITS = 8;
 
   /// Maximal value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int maxWindowBits = 15;
-  @Deprecated("Use maxWindowBits instead")
-  static const int MAX_WINDOW_BITS = 15;
 
   /// Default value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int defaultWindowBits = 15;
-  @Deprecated("Use defaultWindowBits instead")
-  static const int DEFAULT_WINDOW_BITS = 15;
 
   /// Minimal value for [ZLibCodec.level] and [ZLibEncoder.level].
   static const int minLevel = -1;
-  @Deprecated("Use minLevel instead")
-  static const int MIN_LEVEL = -1;
 
   /// Maximal value for [ZLibCodec.level] and [ZLibEncoder.level]
   static const int maxLevel = 9;
-  @Deprecated("Use maxLevel instead")
-  static const int MAX_LEVEL = 9;
 
   /// Default value for [ZLibCodec.level] and [ZLibEncoder.level].
   static const int defaultLevel = 6;
-  @Deprecated("Use defaultLevel instead")
-  static const int DEFAULT_LEVEL = 6;
 
   /// Minimal value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int minMemLevel = 1;
-  @Deprecated("Use minMemLevel instead")
-  static const int MIN_MEM_LEVEL = 1;
 
   /// Maximal value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int maxMemLevel = 9;
-  @Deprecated("Use maxMemLevel instead")
-  static const int MAX_MEM_LEVEL = 9;
 
   /// Default value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int defaultMemLevel = 8;
-  @Deprecated("Use defaultMemLevel instead")
-  static const int DEFAULT_MEM_LEVEL = 8;
 
   /// Recommended strategy for data produced by a filter (or predictor)
   static const int strategyFiltered = 1;
-  @Deprecated("Use strategyFiltered instead")
-  static const int STRATEGY_FILTERED = 1;
 
   /// Use this strategy to force Huffman encoding only (no string match)
   static const int strategyHuffmanOnly = 2;
-  @Deprecated("Use strategyHuffmanOnly instead")
-  static const int STRATEGY_HUFFMAN_ONLY = 2;
 
   /// Use this strategy to limit match distances to one (run-length encoding)
   static const int strategyRle = 3;
-  @Deprecated("Use strategyRle instead")
-  static const int STRATEGY_RLE = 3;
 
   /// This strategy prevents the use of dynamic Huffman codes, allowing for a
   /// simpler decoder
   static const int strategyFixed = 4;
-  @Deprecated("Use strategyFixed instead")
-  static const int STRATEGY_FIXED = 4;
 
   /// Recommended strategy for normal data
   static const int strategyDefault = 0;
-  @Deprecated("Use strategyDefault instead")
-  static const int STRATEGY_DEFAULT = 0;
 }
 
 /// An instance of the default implementation of the [ZLibCodec].
 const ZLibCodec zlib = const ZLibCodec._default();
-@Deprecated("Use zlib instead")
-const ZLibCodec ZLIB = zlib;
 
 /// The [ZLibCodec] encodes raw bytes to ZLib compressed bytes and decodes ZLib
 /// compressed bytes to raw bytes.
@@ -176,8 +146,6 @@
 
 /// An instance of the default implementation of the [GZipCodec].
 const GZipCodec gzip = const GZipCodec._default();
-@Deprecated("Use gzip instead")
-const GZipCodec GZIP = gzip;
 
 /// The [GZipCodec] encodes raw bytes to GZip compressed bytes and decodes GZip
 /// compressed bytes to raw bytes.
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index 4f352ce..bf80c30 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -8,87 +8,43 @@
 class FileMode {
   /// The mode for opening a file only for reading.
   static const read = const FileMode._internal(0);
-  @Deprecated("Use read instead")
-  static const READ = read;
 
   /// Mode for opening a file for reading and writing. The file is
   /// overwritten if it already exists. The file is created if it does not
   /// already exist.
   static const write = const FileMode._internal(1);
-  @Deprecated("Use write instead")
-  static const WRITE = write;
 
   /// Mode for opening a file for reading and writing to the
   /// end of it. The file is created if it does not already exist.
   static const append = const FileMode._internal(2);
-  @Deprecated("Use append instead")
-  static const APPEND = append;
 
   /// Mode for opening a file for writing *only*. The file is
   /// overwritten if it already exists. The file is created if it does not
   /// already exist.
   static const writeOnly = const FileMode._internal(3);
-  @Deprecated("Use writeOnly instead")
-  static const WRITE_ONLY = writeOnly;
 
   /// Mode for opening a file for writing *only* to the
   /// end of it. The file is created if it does not already exist.
   static const writeOnlyAppend = const FileMode._internal(4);
-  @Deprecated("Use writeOnlyAppend instead")
-  static const WRITE_ONLY_APPEND = writeOnlyAppend;
 
   final int _mode;
 
   const FileMode._internal(this._mode);
 }
 
-/// The mode for opening a file only for reading.
-@Deprecated("Use FileMode.read instead")
-const READ = FileMode.read;
-
-/// The mode for opening a file for reading and writing. The file is
-/// overwritten if it already exists. The file is created if it does not
-/// already exist.
-@Deprecated("Use FileMode.write instead")
-const WRITE = FileMode.write;
-
-/// The mode for opening a file for reading and writing to the
-/// end of it. The file is created if it does not already exist.
-@Deprecated("Use FileMode.append instead")
-const APPEND = FileMode.append;
-
-/// Mode for opening a file for writing *only*. The file is
-/// overwritten if it already exists. The file is created if it does not
-/// already exist.
-@Deprecated("Use FileMode.writeOnly instead")
-const WRITE_ONLY = FileMode.writeOnly;
-
-/// Mode for opening a file for writing *only* to the
-/// end of it. The file is created if it does not already exist.
-@Deprecated("Use FileMode.writeOnlyAppend instead")
-const WRITE_ONLY_APPEND = FileMode.writeOnlyAppend;
-
 /// Type of lock when requesting a lock on a file.
 class FileLock {
   /// Shared file lock.
   static const shared = const FileLock._internal(1);
-  @Deprecated("Use shared instead")
-  static const SHARED = shared;
 
   /// Exclusive file lock.
   static const exclusive = const FileLock._internal(2);
-  @Deprecated("Use exclusive instead")
-  static const EXCLUSIVE = exclusive;
 
   /// Blocking shared file lock.
   static const blockingShared = const FileLock._internal(3);
-  @Deprecated("Use blockingShared instead")
-  static const BLOCKING_SHARED = blockingShared;
 
   /// Blocking exclusive file lock.
   static const blockingExclusive = const FileLock._internal(4);
-  @Deprecated("Use blockingExclusive instead")
-  static const BLOCKING_EXCLUSIVE = blockingExclusive;
 
   final int _type;
 
diff --git a/sdk/lib/io/file_system_entity.dart b/sdk/lib/io/file_system_entity.dart
index ca14f1f..738c40b 100644
--- a/sdk/lib/io/file_system_entity.dart
+++ b/sdk/lib/io/file_system_entity.dart
@@ -11,20 +11,12 @@
 /// to indicate the object's type.
 class FileSystemEntityType {
   static const file = const FileSystemEntityType._internal(0);
-  @Deprecated("Use file instead")
-  static const FILE = file;
 
   static const directory = const FileSystemEntityType._internal(1);
-  @Deprecated("Use directory instead")
-  static const DIRECTORY = directory;
 
   static const link = const FileSystemEntityType._internal(2);
-  @Deprecated("Use link instead")
-  static const LINK = link;
 
   static const notFound = const FileSystemEntityType._internal(3);
-  @Deprecated("Use notFound instead")
-  static const NOT_FOUND = notFound;
 
   static const _typeList = const [
     FileSystemEntityType.file,
@@ -447,7 +439,7 @@
   ///
   /// Use `events` to specify what events to listen for. The constants in
   /// [FileSystemEvent] can be or'ed together to mix events. Default is
-  /// [FileSystemEvent.ALL].
+  /// [FileSystemEvent.all].
   ///
   /// A move event may be reported as separate delete and create events.
   Stream<FileSystemEvent> watch(
@@ -870,29 +862,19 @@
 class FileSystemEvent {
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemCreateEvent]s.
   static const int create = 1 << 0;
-  @Deprecated("Use create instead")
-  static const int CREATE = 1 << 0;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemModifyEvent]s.
   static const int modify = 1 << 1;
-  @Deprecated("Use modify instead")
-  static const int MODIFY = 1 << 1;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemDeleteEvent]s.
   static const int delete = 1 << 2;
-  @Deprecated("Use delete instead")
-  static const int DELETE = 1 << 2;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemMoveEvent]s.
   static const int move = 1 << 3;
-  @Deprecated("Use move instead")
-  static const int MOVE = 1 << 3;
 
   /// Bitfield for [FileSystemEntity.watch], for enabling all of [create],
   /// [modify], [delete] and [move].
   static const int all = create | modify | delete | move;
-  @Deprecated("Use all instead")
-  static const int ALL = create | modify | delete | move;
 
   static const int _modifyAttributes = 1 << 4;
   static const int _deleteSelf = 1 << 5;
diff --git a/sdk/lib/io/process.dart b/sdk/lib/io/process.dart
index bf2058f..aacdb79 100644
--- a/sdk/lib/io/process.dart
+++ b/sdk/lib/io/process.dart
@@ -130,24 +130,16 @@
 class ProcessStartMode {
   /// Normal child process.
   static const normal = const ProcessStartMode._internal(0);
-  @Deprecated("Use normal instead")
-  static const NORMAL = normal;
 
   /// Stdio handles are inherited by the child process.
   static const inheritStdio = const ProcessStartMode._internal(1);
-  @Deprecated("Use inheritStdio instead")
-  static const INHERIT_STDIO = inheritStdio;
 
   /// Detached child process with no open communication channel.
   static const detached = const ProcessStartMode._internal(2);
-  @Deprecated("Use detached instead")
-  static const DETACHED = detached;
 
   /// Detached child process with stdin, stdout and stderr still open
   /// for communication with the child.
   static const detachedWithStdio = const ProcessStartMode._internal(3);
-  @Deprecated("Use detachedWithStdio instead")
-  static const DETACHED_WITH_STDIO = detachedWithStdio;
 
   static List<ProcessStartMode> get values => const <ProcessStartMode>[
         normal,
@@ -512,65 +504,6 @@
   static const ProcessSignal sigpoll = const ProcessSignal._(29, "SIGPOLL");
   static const ProcessSignal sigsys = const ProcessSignal._(31, "SIGSYS");
 
-  @Deprecated("Use sighup instead")
-  static const ProcessSignal SIGHUP = sighup;
-  @Deprecated("Use sigint instead")
-  static const ProcessSignal SIGINT = sigint;
-  @Deprecated("Use sigquit instead")
-  static const ProcessSignal SIGQUIT = sigquit;
-  @Deprecated("Use sigill instead")
-  static const ProcessSignal SIGILL = sigill;
-  @Deprecated("Use sigtrap instead")
-  static const ProcessSignal SIGTRAP = sigtrap;
-  @Deprecated("Use sigabrt instead")
-  static const ProcessSignal SIGABRT = sigabrt;
-  @Deprecated("Use sigbus instead")
-  static const ProcessSignal SIGBUS = sigbus;
-  @Deprecated("Use sigfpe instead")
-  static const ProcessSignal SIGFPE = sigfpe;
-  @Deprecated("Use sigkill instead")
-  static const ProcessSignal SIGKILL = sigkill;
-  @Deprecated("Use sigusr1 instead")
-  static const ProcessSignal SIGUSR1 = sigusr1;
-  @Deprecated("Use sigsegv instead")
-  static const ProcessSignal SIGSEGV = sigsegv;
-  @Deprecated("Use sigusr2 instead")
-  static const ProcessSignal SIGUSR2 = sigusr2;
-  @Deprecated("Use sigpipe instead")
-  static const ProcessSignal SIGPIPE = sigpipe;
-  @Deprecated("Use sigalrm instead")
-  static const ProcessSignal SIGALRM = sigalrm;
-  @Deprecated("Use sigterm instead")
-  static const ProcessSignal SIGTERM = sigterm;
-  @Deprecated("Use sigchld instead")
-  static const ProcessSignal SIGCHLD = sigchld;
-  @Deprecated("Use sigcont instead")
-  static const ProcessSignal SIGCONT = sigcont;
-  @Deprecated("Use sigstop instead")
-  static const ProcessSignal SIGSTOP = sigstop;
-  @Deprecated("Use sigtstp instead")
-  static const ProcessSignal SIGTSTP = sigtstp;
-  @Deprecated("Use sigttin instead")
-  static const ProcessSignal SIGTTIN = sigttin;
-  @Deprecated("Use sigttou instead")
-  static const ProcessSignal SIGTTOU = sigttou;
-  @Deprecated("Use sigurg instead")
-  static const ProcessSignal SIGURG = sigurg;
-  @Deprecated("Use sigxcpu instead")
-  static const ProcessSignal SIGXCPU = sigxcpu;
-  @Deprecated("Use sigxfsz instead")
-  static const ProcessSignal SIGXFSZ = sigxfsz;
-  @Deprecated("Use sigvtalrm instead")
-  static const ProcessSignal SIGVTALRM = sigvtalrm;
-  @Deprecated("Use sigprof instead")
-  static const ProcessSignal SIGPROF = sigprof;
-  @Deprecated("Use sigwinch instead")
-  static const ProcessSignal SIGWINCH = sigwinch;
-  @Deprecated("Use sigpoll instead")
-  static const ProcessSignal SIGPOLL = sigpoll;
-  @Deprecated("Use sigsys instead")
-  static const ProcessSignal SIGSYS = sigsys;
-
   final int _signalNumber;
   final String _name;
 
diff --git a/sdk/lib/io/security_context.dart b/sdk/lib/io/security_context.dart
index d041975..8e9839e 100644
--- a/sdk/lib/io/security_context.dart
+++ b/sdk/lib/io/security_context.dart
@@ -160,6 +160,16 @@
   /// or client connections.
   void setAlpnProtocols(List<String> protocols, bool isServer);
 
+  /// If `true`, the [SecurityContext] will allow TLS renegotiation.
+  /// Renegotiation is only supported as a client and the HelloRequest must be
+  /// received at a quiet point in the application protocol. This is sufficient
+  /// to support the legacy use case of requesting a new client certificate
+  /// between an HTTP request and response in (unpipelined) HTTP/1.1.
+  /// NOTE: Renegotiation is an extremely problematic protocol feature and
+  /// should only be used to communicate with legacy servers in environments
+  /// where it is known to be safe.
+  abstract bool allowLegacyUnsafeRenegotiation;
+
   /// Encodes a set of supported protocols for ALPN/NPN usage.
   ///
   /// The [protocols] list is expected to contain protocols in descending order
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 3c102c5..dd68941 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -16,13 +16,6 @@
   static const InternetAddressType unix = const InternetAddressType._(2);
   static const InternetAddressType any = const InternetAddressType._(-1);
 
-  @Deprecated("Use IPv4 instead")
-  static const InternetAddressType IP_V4 = IPv4;
-  @Deprecated("Use IPv6 instead")
-  static const InternetAddressType IP_V6 = IPv6;
-  @Deprecated("Use any instead")
-  static const InternetAddressType ANY = any;
-
   final int _value;
 
   const InternetAddressType._(this._value);
@@ -53,33 +46,25 @@
   ///
   /// Use this address when listening on or connecting
   /// to the loopback adapter using IP version 4 (IPv4).
-  static InternetAddress get loopbackIPv4 => LOOPBACK_IP_V4;
-  @Deprecated("Use loopbackIPv4 instead")
-  external static InternetAddress get LOOPBACK_IP_V4;
+  external static InternetAddress get loopbackIPv4;
 
   /// IP version 6 loopback address.
   ///
   /// Use this address when listening on or connecting to
   /// the loopback adapter using IP version 6 (IPv6).
-  static InternetAddress get loopbackIPv6 => LOOPBACK_IP_V6;
-  @Deprecated("Use loopbackIPv6 instead")
-  external static InternetAddress get LOOPBACK_IP_V6;
+  external static InternetAddress get loopbackIPv6;
 
   /// IP version 4 any address.
   ///
   /// Use this address when listening on the addresses
   /// of all adapters using IP version 4 (IPv4).
-  static InternetAddress get anyIPv4 => ANY_IP_V4;
-  @Deprecated("Use anyIPv4 instead")
-  external static InternetAddress get ANY_IP_V4;
+  external static InternetAddress get anyIPv4;
 
   /// IP version 6 any address.
   ///
   /// Use this address when listening on the addresses
   /// of all adapters using IP version 6 (IPv6).
-  static InternetAddress get anyIPv6 => ANY_IP_V6;
-  @Deprecated("Use anyIPv6 instead")
-  external static InternetAddress get ANY_IP_V6;
+  external static InternetAddress get anyIPv6;
 
   /// The address family of the [InternetAddress].
   InternetAddressType get type;
@@ -349,13 +334,6 @@
   static const SocketDirection send = const SocketDirection._(1);
   static const SocketDirection both = const SocketDirection._(2);
 
-  @Deprecated("Use receive instead")
-  static const SocketDirection RECEIVE = receive;
-  @Deprecated("Use send instead")
-  static const SocketDirection SEND = send;
-  @Deprecated("Use both instead")
-  static const SocketDirection BOTH = both;
-
   final _value;
 
   const SocketDirection._(this._value);
@@ -373,8 +351,6 @@
   ///
   /// tcpNoDelay is disabled by default.
   static const SocketOption tcpNoDelay = const SocketOption._(0);
-  @Deprecated("Use tcpNoDelay instead")
-  static const SocketOption TCP_NODELAY = tcpNoDelay;
 
   static const SocketOption _ipMulticastLoop = const SocketOption._(1);
   static const SocketOption _ipMulticastHops = const SocketOption._(2);
@@ -504,15 +480,6 @@
   /// An event indicates the socket is closed.
   static const RawSocketEvent closed = const RawSocketEvent._(3);
 
-  @Deprecated("Use read instead")
-  static const RawSocketEvent READ = read;
-  @Deprecated("Use write instead")
-  static const RawSocketEvent WRITE = write;
-  @Deprecated("Use readClosed instead")
-  static const RawSocketEvent READ_CLOSED = readClosed;
-  @Deprecated("Use closed instead")
-  static const RawSocketEvent CLOSED = closed;
-
   final int _value;
 
   const RawSocketEvent._(this._value);
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index 42b7bc2..dcaf1d8 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -348,15 +348,6 @@
   static const StdioType file = const StdioType._("file");
   static const StdioType other = const StdioType._("other");
 
-  @Deprecated("Use terminal instead")
-  static const StdioType TERMINAL = terminal;
-  @Deprecated("Use pipe instead")
-  static const StdioType PIPE = pipe;
-  @Deprecated("Use file instead")
-  static const StdioType FILE = file;
-  @Deprecated("Use other instead")
-  static const StdioType OTHER = other;
-
   final String name;
   const StdioType._(this.name);
   String toString() => "StdioType: $name";
diff --git a/sdk/lib/io/string_transformer.dart b/sdk/lib/io/string_transformer.dart
index bf04327..5bb7f38 100644
--- a/sdk/lib/io/string_transformer.dart
+++ b/sdk/lib/io/string_transformer.dart
@@ -12,8 +12,6 @@
 /// On Windows this will use the currently active code page for the conversion.
 /// On all other systems it will always use UTF-8.
 const SystemEncoding systemEncoding = const SystemEncoding();
-@Deprecated("Use systemEncoding instead")
-const SystemEncoding SYSTEM_ENCODING = const SystemEncoding();
 
 /// The system encoding is the current code page on Windows and UTF-8 on Linux
 /// and Mac.
diff --git a/sdk/lib/io/sync_socket.dart b/sdk/lib/io/sync_socket.dart
index 6feb625..8df113a 100644
--- a/sdk/lib/io/sync_socket.dart
+++ b/sdk/lib/io/sync_socket.dart
@@ -58,7 +58,7 @@
   /// Shuts down a socket in the provided direction.
   ///
   /// Calling shutdown will never throw an exception and calling it several times
-  /// is supported. If both [SocketDirection.RECEIVE] and [SocketDirection.SEND]
+  /// is supported. If both [SocketDirection.receive] and [SocketDirection.send]
   /// directions are closed, the socket is closed completely, the same as if
   /// [closeSync] has been called.
   void shutdown(SocketDirection direction);
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 517beee..8098a0f 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -144,106 +144,6 @@
   /// inspect the isolate and see uncaught errors or when it terminates.
   Isolate(this.controlPort, {this.pauseCapability, this.terminateCapability});
 
-  /// Runs [computation] in a new isolate and returns the result.
-  ///
-  /// ```dart
-  /// int slowFib(int n) =>
-  ///     n <= 1 ? 1 : slowFib(n - 1) + slowFib(n - 2);
-  ///
-  /// // Compute without blocking current isolate.
-  /// var fib40 = await Isolate.run(() => slowFib(40));
-  /// ```
-  ///
-  /// If [computation] is asynchronous (returns a `Future<R>`) then
-  /// that future is awaited in the new isolate, completing the entire
-  /// asynchronous computation, before returning the result.
-  ///
-  /// ```dart
-  /// int slowFib(int n) =>
-  ///     n <= 1 ? 1 : slowFib(n - 1) + slowFib(n - 2);
-  /// Stream<int> fibStream() async* {
-  ///   for (var i = 0;; i++) yield slowFib(i);
-  /// }
-  ///
-  /// // Returns `Future<int>`.
-  /// var fib40 = await Isolate.run(() => fibStream().elementAt(40));
-  /// ```
-  ///
-  /// If [computation] throws, the isolate is terminated and this
-  /// function throws the same error.
-  ///
-  /// ```dart import:convert
-  /// Future<int> eventualError() async {
-  ///   await Future.delayed(const Duration(seconds: 1));
-  ///   throw StateError("In a bad state!");
-  /// }
-  ///
-  /// try {
-  ///   await Isolate.run(eventualError);
-  /// } on StateError catch (e, s) {
-  ///   print(e.message); // In a bad state!
-  ///   print(LineSplitter.split("$s").first); // Contains "eventualError"
-  /// }
-  /// ```
-  /// Any uncaught asynchronous errors will terminate the computation as well,
-  /// but will be reported as a [RemoteError] because [addErrorListener]
-  /// does not provide the original error object.
-  ///
-  /// The result is sent using [exit], which means it's sent to this
-  /// isolate without copying.
-  ///
-  /// The [computation] function and its result (or error) must be
-  /// sendable between isolates.
-  ///
-  /// The [debugName] is only used to name the new isolate for debugging.
-  @Since("2.17")
-  static Future<R> run<R>(FutureOr<R> computation(), {String? debugName}) {
-    var result = Completer<R>();
-    var resultPort = RawReceivePort();
-    resultPort.handler = (response) {
-      resultPort.close();
-      if (response == null) {
-        // onExit handler message, isolate terminated without sending result.
-        result.completeError(
-            RemoteError("Computation ended without result", ""),
-            StackTrace.empty);
-        return;
-      }
-      var list = response as List<Object?>;
-      if (list.length == 2) {
-        var remoteError = list[0];
-        var remoteStack = list[1];
-        if (remoteStack is StackTrace) {
-          // Typed error.
-          result.completeError(remoteError!, remoteStack);
-        } else {
-          // onError handler message, uncaught async error.
-          // Both values are strings, so calling `toString` is efficient.
-          var error =
-              RemoteError(remoteError.toString(), remoteStack.toString());
-          result.completeError(error, error.stackTrace);
-        }
-      } else {
-        assert(list.length == 1);
-        result.complete(list[0] as R);
-      }
-    };
-    try {
-      Isolate.spawn(_RemoteRunner._remoteExecute,
-              _RemoteRunner<R>(computation, resultPort.sendPort),
-              onError: resultPort.sendPort,
-              onExit: resultPort.sendPort,
-              errorsAreFatal: true,
-              debugName: debugName)
-          .then<void>((_) {}, onError: result.completeError);
-    } on Object {
-      // Sending the computation failed.
-      resultPort.close();
-      rethrow;
-    }
-    return result.future;
-  }
-
   /// An [Isolate] object representing the current isolate.
   ///
   /// The current isolate for code using [current]
@@ -716,6 +616,9 @@
   ///     therefore not be sent.
   ///   - [ReceivePort]
   ///   - [DynamicLibrary]
+  ///   - [Finalizable]
+  ///   - [Finalizer]
+  ///   - [NativeFinalizer]
   ///   - [Pointer]
   ///   - [UserTag]
   ///   - `MirrorReference`
@@ -895,62 +798,3 @@
   /// transferable bytes, even if the calls occur in different isolates.
   ByteBuffer materialize();
 }
-
-/// Parameter object used by [Isolate.run].
-///
-/// The [_remoteExecute] function is run in a new isolate with a
-/// [_RemoteRunner] object as argument.
-class _RemoteRunner<R> {
-  /// User computation to run.
-  final FutureOr<R> Function() computation;
-
-  /// Port to send isolate computation result on.
-  ///
-  /// Only one object is ever sent on this port.
-  /// If the value is `null`, it is sent by the isolate's "on-exit" handler
-  /// when the isolate terminates without otherwise sending value.
-  /// If the value is a list with one element,
-  /// then it is the result value of the computation.
-  /// Otherwise it is a list with two elements representing an error.
-  /// If the error is sent by the isolate's "on-error" uncaught error handler,
-  /// then the list contains two strings. This also terminates the isolate.
-  /// If sent manually by this class, after capturing the error,
-  /// the list contains one non-`null` [Object] and one [StackTrace].
-  final SendPort resultPort;
-
-  _RemoteRunner(this.computation, this.resultPort);
-
-  /// Run in a new isolate to get the result of [computation].
-  ///
-  /// The result is sent back on [resultPort] as a single-element list.
-  /// A two-element list sent on the same port is an error result.
-  /// When sent by this function, it's always an object and a [StackTrace].
-  /// (The same port listens on uncaught errors from the isolate, which
-  /// sends two-element lists containing [String]s instead).
-  static void _remoteExecute(_RemoteRunner<Object?> runner) {
-    runner._run();
-  }
-
-  void _run() async {
-    R result;
-    try {
-      var potentiallyAsyncResult = computation();
-      if (potentiallyAsyncResult is Future<R>) {
-        result = await potentiallyAsyncResult;
-      } else {
-        result = potentiallyAsyncResult as R;
-      }
-    } catch (e, s) {
-      // If sending fails, the error becomes an uncaught error.
-      Isolate.exit(resultPort, _list2(e, s));
-    }
-    Isolate.exit(resultPort, _list1(result));
-  }
-
-  /// Helper function to create a one-element non-growable list.
-  static List<Object?> _list1(Object? value) => List.filled(1, value);
-
-  /// Helper function to create a two-element non-growable list.
-  static List<Object?> _list2(Object? value1, Object? value2) =>
-      List.filled(2, value1)..[1] = value2;
-}
diff --git a/sdk/lib/js_util/js_util_sources.gni b/sdk/lib/js_util/js_util_sources.gni
index d3ac6d2..011df2e 100644
--- a/sdk/lib/js_util/js_util_sources.gni
+++ b/sdk/lib/js_util/js_util_sources.gni
@@ -2,4 +2,7 @@
 # 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.
 
-js_util_sdk_sources = [ "js_util.dart" ]
+js_util_sdk_sources = [
+  "js_util.dart",
+  "js_util_wasm.dart",
+]
diff --git a/sdk/lib/js_util/js_util_wasm.dart b/sdk/lib/js_util/js_util_wasm.dart
new file mode 100644
index 0000000..49b4a90
--- /dev/null
+++ b/sdk/lib/js_util/js_util_wasm.dart
@@ -0,0 +1,164 @@
+// 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.
+
+// Prototype js util library for wasm.
+library dart.js_util_wasm;
+
+import 'dart:wasm';
+
+/// [JSValue] is the root of the JS interop object hierarchy.
+class JSValue {
+  final WasmAnyRef _ref;
+
+  JSValue(this._ref);
+
+  static JSValue? box(WasmAnyRef? ref) => ref == null ? null : JSValue(ref);
+
+  WasmAnyRef toAnyRef() => _ref;
+  String toString() => _jsStringToDartString(_ref);
+  List<Object?> toObjectList() => _jsArrayToDartList(_ref);
+  Object toObject() => _jsObjectToDartObject(_ref);
+}
+
+/// Raw private JS functions.
+external WasmAnyRef _jsObjectFromDartObject(Object object);
+
+external Object _jsObjectToDartObject(WasmAnyRef ref);
+
+@pragma("wasm:import", "dart2wasm.arrayFromDartList")
+external WasmAnyRef _jsArrayFromDartList(List<Object?> list);
+
+@pragma("wasm:import", "dart2wasm.arrayToDartList")
+external List<Object?> _jsArrayToDartList(WasmAnyRef list);
+
+@pragma("wasm:import", "dart2wasm.stringFromDartString")
+external WasmAnyRef _jsStringFromDartString(String string);
+
+@pragma("wasm:import", "dart2wasm.stringToDartString")
+external String _jsStringToDartString(WasmAnyRef string);
+
+/// Raw public JS functions.
+/// These are public temporarily to give performance conscious users an escape
+/// hatch while we decide what this API will actually look like. They may
+/// become private in the future, or disappear entirely. For descriptions of the
+/// API, please see the corresponding non-raw functions.
+@pragma("wasm:import", "dart2wasm.eval")
+external void evalRaw(WasmAnyRef code);
+
+@pragma("wasm:import", "dart2wasm.dartify")
+external WasmAnyRef? dartifyRaw(WasmAnyRef? object);
+
+@pragma("wasm:import", "dart2wasm.newObject")
+external WasmAnyRef newObjectRaw();
+
+@pragma("wasm:import", "dart2wasm.globalThis")
+external WasmAnyRef globalThisRaw();
+
+@pragma("wasm:import", "dart2wasm.callConstructorVarArgs")
+external WasmAnyRef callConstructorVarArgsRaw(
+    WasmAnyRef o, WasmAnyRef name, WasmAnyRef args);
+
+@pragma("wasm:import", "dart2wasm.hasProperty")
+external bool hasPropertyRaw(WasmAnyRef o, WasmAnyRef name);
+
+@pragma("wasm:import", "dart2wasm.getProperty")
+external WasmAnyRef? getPropertyRaw(WasmAnyRef o, WasmAnyRef name);
+
+@pragma("wasm:import", "dart2wasm.setProperty")
+external WasmAnyRef? setPropertyRaw(
+    WasmAnyRef o, WasmAnyRef name, WasmAnyRef? value);
+
+@pragma("wasm:import", "dart2wasm.callMethodVarArgs")
+external WasmAnyRef? callMethodVarArgsRaw(
+    WasmAnyRef o, WasmAnyRef method, WasmAnyRef? args);
+
+WasmAnyRef? jsifyRaw(Object? object) {
+  if (object == null) {
+    return null;
+  } else if (object is JSValue) {
+    return object.toAnyRef();
+  } else if (object is String) {
+    return _jsStringFromDartString(object);
+  } else if (object is List<Object?>) {
+    return _jsArrayFromDartList(object);
+  } else {
+    return _jsObjectFromDartObject(object);
+  }
+}
+
+/// Conversion functions.
+/// TODO(joshualitt): Only a small set of types currently work:
+///   JS -> Dart:
+///     null
+///     strings
+///     arrays
+///     opaque Dart objects passed to JS
+///   Dart -> JS:
+///     null
+///     boolean
+///     doubles
+///     strings
+///     lists
+///     opaque JS objects passed to Dart
+/// In the future we would like to support more types, at least maps,
+/// and to fix some of the issues returning some types from JS.
+
+/// Extension methods for conversions.
+extension StringToJS on String {
+  JSValue toJS() => JSValue(_jsStringFromDartString(this));
+}
+
+extension ListOfObjectToJS on List<Object?> {
+  JSValue toJS() => JSValue(_jsArrayFromDartList(this));
+}
+
+extension ObjectToJS on Object {
+  JSValue toJS() => JSValue(_jsObjectFromDartObject(this));
+}
+
+/// Recursively converts objects from Dart to JS.
+JSValue? jsify(Object? object) => JSValue.box(jsifyRaw(object));
+
+/// Recursively converts objects from JS to Dart.
+Object? dartify(JSValue? object) => object == null
+    ? null
+    : _jsObjectToDartObject(dartifyRaw(object.toAnyRef())!);
+
+/// js util methods.
+/// These are low level calls into JS, and require care to use correctly.
+
+/// Evals a snippet of JS code in a Dart string.
+void eval(String code) => evalRaw(code.toJS().toAnyRef());
+
+/// Creates a new JS object literal and returns it.
+JSValue newObject() => JSValue(newObjectRaw());
+
+/// Returns a reference to `globalThis`.
+JSValue globalThis() => JSValue(globalThisRaw());
+
+/// Gets a [String] name property off of a JS object [o], invokes it as
+/// a constructor with a JS array of arguments [args], and returns the
+/// constructed JS object.
+JSValue callConstructorVarArgs(JSValue o, String name, List<JSValue?> args) =>
+    JSValue(callConstructorVarArgsRaw(
+        o.toAnyRef(), name.toJS().toAnyRef(), args.toJS().toAnyRef()));
+
+/// Checks for a [String] name on a JS object [o].
+bool hasProperty(JSValue o, String name) =>
+    hasPropertyRaw(o.toAnyRef(), name.toJS().toAnyRef());
+
+/// Gets a JS property with [String] name off of a JS object [o].
+JSValue? getProperty(JSValue o, String name) =>
+    JSValue.box(getPropertyRaw(o.toAnyRef(), name.toJS().toAnyRef()));
+
+/// Sets a JS property with [String] name on JS object [o] to the JS value
+/// [value], then returns [value].
+JSValue? setProperty(JSValue o, String name, JSValue? value) => JSValue.box(
+    setPropertyRaw(o.toAnyRef(), name.toJS().toAnyRef(), value?.toAnyRef()));
+
+/// Calls a JS method with a [String] name on JS object [o] with a JS array
+/// of arguments [args] and returns the resulting JS value.
+JSValue? callMethodVarArgs(JSValue o, String method, List<JSValue?> args) =>
+    JSValue.box(callMethodVarArgsRaw(
+        o.toAnyRef(), method.toJS().toAnyRef(), args.toJS().toAnyRef()));
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 619c1c0..212955e 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -193,11 +193,11 @@
           "_internal/vm/lib/bool_patch.dart",
           "_internal/wasm/lib/date_patch.dart",
           "_internal/wasm/lib/double.dart",
+          "_internal/wasm/lib/errors_patch.dart",
           "_internal/wasm/lib/expando_patch.dart",
           "_internal/wasm/lib/function.dart",
           "_internal/wasm/lib/growable_list.dart",
           "_internal/wasm/lib/identical_patch.dart",
-          "_internal/wasm/lib/immutable_map.dart",
           "_internal/wasm/lib/int.dart",
           "_internal/vm/lib/integers_patch.dart",
           "_internal/wasm/lib/list.dart",
@@ -216,9 +216,26 @@
           "_internal/wasm/lib/developer.dart"
         ]
       },
+      "ffi": {
+        "uri": "ffi/ffi.dart",
+        "patches": [
+          "_internal/vm/lib/ffi_patch.dart",
+          "_internal/vm/lib/ffi_allocation_patch.dart",
+          "_internal/vm/lib/ffi_dynamic_library_patch.dart",
+          "_internal/vm/lib/ffi_native_type_patch.dart",
+          "_internal/vm/lib/ffi_struct_patch.dart"
+        ]
+      },
+      "nativewrappers": {
+        "uri": "html/dartium/nativewrappers.dart"
+      },
       "isolate": {
         "uri": "isolate/isolate.dart"
       },
+      "js_util_wasm": {
+        "uri": "js_util/js_util_wasm.dart",
+        "patches": "_internal/wasm/lib/js_util_wasm_patch.dart"
+      },
       "math": {
         "uri": "math/math.dart",
         "patches": "_internal/wasm/lib/math_patch.dart"
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index 055f5e8..e0a8e42 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -185,11 +185,11 @@
       - _internal/vm/lib/bool_patch.dart
       - _internal/wasm/lib/date_patch.dart
       - _internal/wasm/lib/double.dart
+      - _internal/wasm/lib/errors_patch.dart
       - _internal/wasm/lib/expando_patch.dart
       - _internal/wasm/lib/function.dart
       - _internal/wasm/lib/growable_list.dart
       - _internal/wasm/lib/identical_patch.dart
-      - _internal/wasm/lib/immutable_map.dart
       - _internal/wasm/lib/int.dart
       - _internal/vm/lib/integers_patch.dart
       - _internal/wasm/lib/list.dart
@@ -204,8 +204,21 @@
       uri: developer/developer.dart
       patches:
       - _internal/wasm/lib/developer.dart
+    ffi:
+      uri: "ffi/ffi.dart"
+      patches:
+        - "_internal/vm/lib/ffi_patch.dart"
+        - "_internal/vm/lib/ffi_allocation_patch.dart"
+        - "_internal/vm/lib/ffi_dynamic_library_patch.dart"
+        - "_internal/vm/lib/ffi_native_type_patch.dart"
+        - "_internal/vm/lib/ffi_struct_patch.dart"
+    nativewrappers:
+      uri: "html/dartium/nativewrappers.dart"
     isolate:
       uri: isolate/isolate.dart
+    js_util_wasm:
+      uri: js_util/js_util_wasm.dart
+      patches: _internal/wasm/lib/js_util_wasm_patch.dart
     math:
       uri: math/math.dart
       patches: _internal/wasm/lib/math_patch.dart
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index 29544d8..37e538b 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -386,7 +386,7 @@
   int? get numberOfOutputs native;
 
   @JSName('connect')
-  AudioNode _connect(destination, [int? output, int? input]) native;
+  AudioNode? _connect(destination, [int? output, int? input]) native;
 
   void disconnect([destination_OR_output, int? output, int? input]) native;
 
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/corelib/bigint_add_test.dart b/tests/corelib/bigint_add_test.dart
new file mode 100644
index 0000000..d947d50
--- /dev/null
+++ b/tests/corelib/bigint_add_test.dart
@@ -0,0 +1,140 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectSum(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a + b;
+  String actualString = actual.toRadixString(16);
+  print("$aString + $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/corelib/bigint_div_test.dart b/tests/corelib/bigint_div_test.dart
new file mode 100644
index 0000000..ee56068
--- /dev/null
+++ b/tests/corelib/bigint_div_test.dart
@@ -0,0 +1,84 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectQuotient(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a ~/ b;
+  String actualString = actual.toRadixString(16);
+  print("$aString ~/ $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "1");
+  expectQuotient("d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e", "157b1");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e", "36662bd");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "141bfd63e");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "3714fb67de7");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "-1");
+  expectQuotient("-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e", "-157b1");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e", "-36662bd");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "-141bfd63e");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "-3714fb67de7");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "-1");
+  expectQuotient("d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e", "-157b1");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e", "-36662bd");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "-141bfd63e");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "-3714fb67de7");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "1");
+  expectQuotient("-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e", "157b1");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e", "36662bd");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "141bfd63e");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "3714fb67de7");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/corelib/bigint_mod_test.dart b/tests/corelib/bigint_mod_test.dart
new file mode 100644
index 0000000..d72e5d9
--- /dev/null
+++ b/tests/corelib/bigint_mod_test.dart
@@ -0,0 +1,112 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectRemainder(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a % b;
+  String actualString = actual.toRadixString(16);
+  print("$aString % $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1fdbde7efec117ff81df42cc8367092a65e4");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "359d4ac0e4440150310acc0e96fdb973c");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "84c9b202365aef6ea4b442ff6897d72e");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "2c66626e41743605244c026579e4f0");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1", "0");
+
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d11b55d5217bfadc012a3502892428b8c9906d8a");
+  expectRemainder(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "8163cdbfe36a817074a6295b3e8fcf60892a");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3c526a361d552fe1825b7b010d68af57d2");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "2775302963150716c7737ef76ff317e0");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "127bc92b2e824f670375f473110a1e");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1", "0");
+
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1fdbde7efec117ff81df42cc8367092a65e4");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "359d4ac0e4440150310acc0e96fdb973c");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "84c9b202365aef6ea4b442ff6897d72e");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "2c66626e41743605244c026579e4f0");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1", "0");
+
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d11b55d5217bfadc012a3502892428b8c9906d8a");
+  expectRemainder(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "8163cdbfe36a817074a6295b3e8fcf60892a");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3c526a361d552fe1825b7b010d68af57d2");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "2775302963150716c7737ef76ff317e0");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "127bc92b2e824f670375f473110a1e");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1", "0");
+}
diff --git a/tests/corelib/bigint_mul_test.dart b/tests/corelib/bigint_mul_test.dart
new file mode 100644
index 0000000..9351dbe
--- /dev/null
+++ b/tests/corelib/bigint_mul_test.dart
@@ -0,0 +1,136 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectProduct(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a * b;
+  String actualString = actual.toRadixString(16);
+  print("$aString * $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0", "0");
+
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0", "0");
+
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0", "0");
+
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0", "0");
+}
diff --git a/tests/corelib/bigint_sll_test.dart b/tests/corelib/bigint_sll_test.dart
new file mode 100644
index 0000000..082c810
--- /dev/null
+++ b/tests/corelib/bigint_sll_test.dart
@@ -0,0 +1,61 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectShifted(aString, n, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a << n;
+  String actualString = actual.toRadixString(16);
+  print("$aString << $n");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae124");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
+
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae124");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "-d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "-d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
+}
diff --git a/tests/corelib/bigint_sra_test.dart b/tests/corelib/bigint_sra_test.dart
new file mode 100644
index 0000000..a7d073a
--- /dev/null
+++ b/tests/corelib/bigint_sra_test.dart
@@ -0,0 +1,61 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectShifted(aString, n, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a >> n;
+  String actualString = actual.toRadixString(16);
+  print("$aString >> $n");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b849");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c24");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "1b0f7d9546e0392f6636b70109e56b669");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "d87becaa3701c97b31b5b8084f2b5b34");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "6c3df6551b80e4bd98dadc042795ad9a");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "1b0f7d9546e0392f6636b7010");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "d87becaa3701c97b31b5b808");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "6c3df6551b80e4bd98dadc04");
+
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b849");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c25");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "-1b0f7d9546e0392f6636b70109e56b66a");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "-d87becaa3701c97b31b5b8084f2b5b35");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "-6c3df6551b80e4bd98dadc042795ad9b");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "-1b0f7d9546e0392f6636b7011");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "-d87becaa3701c97b31b5b809");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "-6c3df6551b80e4bd98dadc05");
+}
diff --git a/tests/corelib/bigint_sub_test.dart b/tests/corelib/bigint_sub_test.dart
new file mode 100644
index 0000000..1c9d048
--- /dev/null
+++ b/tests/corelib/bigint_sub_test.dart
@@ -0,0 +1,140 @@
+// 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.
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectDifference(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a - b;
+  String actualString = actual.toRadixString(16);
+  print("$aString - $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/corelib_2/bigint_add_test.dart b/tests/corelib_2/bigint_add_test.dart
new file mode 100644
index 0000000..20e8e66
--- /dev/null
+++ b/tests/corelib_2/bigint_add_test.dart
@@ -0,0 +1,142 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectSum(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a + b;
+  String actualString = actual.toRadixString(16);
+  print("$aString + $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectSum(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectSum("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectSum("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/corelib_2/bigint_div_test.dart b/tests/corelib_2/bigint_div_test.dart
new file mode 100644
index 0000000..589dedb
--- /dev/null
+++ b/tests/corelib_2/bigint_div_test.dart
@@ -0,0 +1,86 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectQuotient(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a ~/ b;
+  String actualString = actual.toRadixString(16);
+  print("$aString ~/ $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "1");
+  expectQuotient("d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e", "157b1");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e", "36662bd");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "141bfd63e");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "3714fb67de7");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "-1");
+  expectQuotient("-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e", "-157b1");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e", "-36662bd");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "-141bfd63e");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "-3714fb67de7");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "-1");
+  expectQuotient("d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e", "-157b1");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e", "-36662bd");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "-141bfd63e");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "-3714fb67de7");
+  expectQuotient("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e", "1");
+  expectQuotient("-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e", "157b1");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e", "36662bd");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "141bfd63e");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "3714fb67de7");
+  expectQuotient("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/corelib_2/bigint_mod_test.dart b/tests/corelib_2/bigint_mod_test.dart
new file mode 100644
index 0000000..56e0aa3
--- /dev/null
+++ b/tests/corelib_2/bigint_mod_test.dart
@@ -0,0 +1,114 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectRemainder(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a % b;
+  String actualString = actual.toRadixString(16);
+  print("$aString % $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1fdbde7efec117ff81df42cc8367092a65e4");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "359d4ac0e4440150310acc0e96fdb973c");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "84c9b202365aef6ea4b442ff6897d72e");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "2c66626e41743605244c026579e4f0");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1", "0");
+
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d11b55d5217bfadc012a3502892428b8c9906d8a");
+  expectRemainder(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "8163cdbfe36a817074a6295b3e8fcf60892a");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3c526a361d552fe1825b7b010d68af57d2");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e", "2775302963150716c7737ef76ff317e0");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e", "127bc92b2e824f670375f473110a1e");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1", "0");
+
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1fdbde7efec117ff81df42cc8367092a65e4");
+  expectRemainder(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "359d4ac0e4440150310acc0e96fdb973c");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "84c9b202365aef6ea4b442ff6897d72e");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "2c66626e41743605244c026579e4f0");
+  expectRemainder("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1", "0");
+
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d11b55d5217bfadc012a3502892428b8c9906d8a");
+  expectRemainder(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "8163cdbfe36a817074a6295b3e8fcf60892a");
+  expectRemainder(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3c526a361d552fe1825b7b010d68af57d2");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e", "2775302963150716c7737ef76ff317e0");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e", "127bc92b2e824f670375f473110a1e");
+  expectRemainder("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1", "0");
+}
diff --git a/tests/corelib_2/bigint_mul_test.dart b/tests/corelib_2/bigint_mul_test.dart
new file mode 100644
index 0000000..7fb5f07
--- /dev/null
+++ b/tests/corelib_2/bigint_mul_test.dart
@@ -0,0 +1,138 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectProduct(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a * b;
+  String actualString = actual.toRadixString(16);
+  print("$aString * $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0", "0");
+
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0", "0");
+
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0", "0");
+
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "b3f2d29d6885d40866b040adf8f545352154823b15fed8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "885bc7febac39cd5592e28ce964bfea66a31ea38d8aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "35d827ae2b7d1edeeae0115c81ba4a2496fe6d06aa8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "91a87047f3ae4999a45912763e9eb292049652bc8c35c5c223fcf4bf6eb904401c1875fc");
+  expectProduct(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "352d4596b9163adef2fad0a96d914a7908ab1a7435c5c223fcf4bf6eb904401c1875fc");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectProduct("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0", "0");
+}
diff --git a/tests/corelib_2/bigint_sll_test.dart b/tests/corelib_2/bigint_sll_test.dart
new file mode 100644
index 0000000..551f85f
--- /dev/null
+++ b/tests/corelib_2/bigint_sll_test.dart
@@ -0,0 +1,63 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectShifted(aString, n, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a << n;
+  String actualString = actual.toRadixString(16);
+  print("$aString << $n");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae124");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
+
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae124");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c248");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "-d87becaa3701c97b31b5b8084f2b5b34e785709200000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b8490000000000000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "-d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "-1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
+}
diff --git a/tests/corelib_2/bigint_sra_test.dart b/tests/corelib_2/bigint_sra_test.dart
new file mode 100644
index 0000000..84f35f3
--- /dev/null
+++ b/tests/corelib_2/bigint_sra_test.dart
@@ -0,0 +1,63 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectShifted(aString, n, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a >> n;
+  String actualString = actual.toRadixString(16);
+  print("$aString >> $n");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "6c3df6551b80e4bd98dadc042795ad9a73c2b849");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "361efb2a8dc0725ecc6d6e0213cad6cd39e15c24");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "1b0f7d9546e0392f6636b70109e56b669");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "d87becaa3701c97b31b5b8084f2b5b34");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "6c3df6551b80e4bd98dadc042795ad9a");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "1b0f7d9546e0392f6636b7010");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "d87becaa3701c97b31b5b808");
+  expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "6c3df6551b80e4bd98dadc04");
+
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 1,
+      "-6c3df6551b80e4bd98dadc042795ad9a73c2b849");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 2,
+      "-361efb2a8dc0725ecc6d6e0213cad6cd39e15c25");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 31,
+      "-1b0f7d9546e0392f6636b70109e56b66a");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 32,
+      "-d87becaa3701c97b31b5b8084f2b5b35");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 33,
+      "-6c3df6551b80e4bd98dadc042795ad9b");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 63,
+      "-1b0f7d9546e0392f6636b7011");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 64,
+      "-d87becaa3701c97b31b5b809");
+  expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
+      "-6c3df6551b80e4bd98dadc05");
+}
diff --git a/tests/corelib_2/bigint_sub_test.dart b/tests/corelib_2/bigint_sub_test.dart
new file mode 100644
index 0000000..ff7555d
--- /dev/null
+++ b/tests/corelib_2/bigint_sub_test.dart
@@ -0,0 +1,142 @@
+// 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.
+
+// @dart = 2.9
+
+// Testing Bigints with and without intrinsics.
+// VMOptions=--intrinsify --no-enable-asserts
+// VMOptions=--intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --enable-asserts
+// VMOptions=--no-intrinsify --no-enable-asserts
+
+import "package:expect/expect.dart";
+
+expectDifference(aString, bString, expectedString) {
+  BigInt a = BigInt.parse(aString, radix: 16);
+  BigInt b = BigInt.parse(bString, radix: 16);
+  BigInt expected = BigInt.parse(expectedString, radix: 16);
+  BigInt actual = a - b;
+  String actualString = actual.toRadixString(16);
+  print("$aString - $bString");
+  print(" = $actualString (expected $expectedString)");
+  Expect.equals(expected, actual);
+}
+
+main() {
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "1ad478de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87c8de9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87bece9e340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaae340aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference(
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "d87becaa3740aba6cb25ae8dbb531d2bc0105fa0");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857093");
+  expectDifference("d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "d87becaa3701c97b31b5b8084f2b5b34e7857092");
+
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d4cba13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "3b04b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-a13fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87b4b6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3fac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87bec6a8ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-ac3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87beca98ac2e74f9845c182e303993e0efa8184");
+  expectDifference(
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092",
+      "-3ee22b996ff6856c27c1f6d88aef0e",
+      "-d87becaa36c2e74f9845c182e303993e0efa8184");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-1",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857091");
+  expectDifference("-d87becaa3701c97b31b5b8084f2b5b34e7857092", "-0",
+      "-d87becaa3701c97b31b5b8084f2b5b34e7857092");
+}
diff --git a/tests/ffi/c_types_test.dart b/tests/ffi/c_types_test.dart
index c132f3b..3c2e815 100644
--- a/tests/ffi/c_types_test.dart
+++ b/tests/ffi/c_types_test.dart
@@ -64,6 +64,11 @@
   String toString() => cRepresentation;
 }
 
+final char = CType(
+  sizeOf<Char>(),
+  'char',
+  ffiLoad: (Pointer p) => p.cast<Char>().value,
+);
 final uchar = CType(
   sizeOf<UnsignedChar>(),
   'char',
@@ -137,6 +142,7 @@
 );
 
 final cTypes = [
+  char,
   uchar,
   schar,
   short,
diff --git a/tests/ffi/ffi.status b/tests/ffi/ffi.status
index e22df5b..361a252 100644
--- a/tests/ffi/ffi.status
+++ b/tests/ffi/ffi.status
@@ -20,6 +20,7 @@
 [ $system == android ]
 *: Pass, Slow # https://github.com/dart-lang/sdk/issues/38489
 regress_47594_test: Skip # DartDev is not available on Android.
+vmspecific_native_finalizer_isolate_groups_test: Skip # SpawnUri not available on Android tester.
 
 [ $system == windows ]
 regress_47594_test: Skip # DynamicLibrary.process() is not available on Windows.
diff --git a/tests/ffi/ffi_native_test.dart b/tests/ffi/ffi_native_test.dart
index 2874007..44b35fb 100644
--- a/tests/ffi/ffi_native_test.dart
+++ b/tests/ffi/ffi_native_test.dart
@@ -95,4 +95,12 @@
   external static int bad3(DoesNotExtend obj); //# 11: compile-time error
 }
 
+// Error: 'FfiNative' can't be declared with optional parameters.
+@FfiNative<Void Function([Double])>('doesntmatter') //# 12: compile-time error
+external static int badOptParam(); //# 12: compile-time error
+
+// Error: 'FfiNative' can't be declared with named parameters.
+@FfiNative<Void Function({Double})>('doesntmatter') //# 13: compile-time error
+external static int badNamedParam(); //# 13: compile-time error
+
 void main() {/* Intentionally empty: Compile-time error tests. */}
diff --git a/tests/ffi/ffi_test_helpers.dart b/tests/ffi/ffi_test_helpers.dart
index 0c598ec..92dc3c7 100644
--- a/tests/ffi/ffi_test_helpers.dart
+++ b/tests/ffi/ffi_test_helpers.dart
@@ -4,6 +4,8 @@
 //
 // Helpers for tests which trigger GC in delicate places.
 
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
 import 'dart:ffi';
 
 import 'dylib_utils.dart';
@@ -17,12 +19,45 @@
 final DynamicLibrary ffiTestFunctions =
     dlopenPlatformSpecific("ffi_test_functions");
 
-final triggerGc = ffiTestFunctions
-    .lookupFunction<NativeNullaryOp, NullaryOpVoid>("TriggerGC");
-
 final collectOnNthAllocation = ffiTestFunctions
     .lookupFunction<NativeUnaryOp, UnaryOpVoid>("CollectOnNthAllocation");
 
 extension PointerOffsetBy<T extends NativeType> on Pointer<T> {
   Pointer<T> offsetBy(int bytes) => Pointer.fromAddress(address + bytes);
 }
+
+/// Triggers garbage collection.
+// Defined in `dart:_internal`.
+// ignore: undefined_identifier
+void triggerGc() => VMInternalsForTesting.collectAllGarbage();
+
+void Function(String) _namedPrint(String? name) {
+  if (name != null) {
+    return (String value) => print('$name: $value');
+  }
+  return (String value) => print(value);
+}
+
+/// Does a GC and if [doAwait] awaits a future to enable running finalizers.
+///
+/// Also prints for debug purposes.
+///
+/// If provided, [name] prefixes the debug prints.
+void doGC({String? name}) {
+  final _print = _namedPrint(name);
+
+  _print('Do GC.');
+  triggerGc();
+  _print('GC done');
+}
+
+void createAndLoseFinalizable(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  setTokenFinalizer.attach(myFinalizable, token.cast());
+}
+
+final setTokenTo42Ptr =
+    ffiTestFunctions.lookup<NativeFinalizerFunction>("SetArgumentTo42");
+final setTokenFinalizer = NativeFinalizer(setTokenTo42Ptr);
+
+class MyFinalizable implements Finalizable {}
diff --git a/tests/ffi/vmspecific_native_finalizer_2_test.dart b/tests/ffi/vmspecific_native_finalizer_2_test.dart
new file mode 100644
index 0000000..41fb3bd
--- /dev/null
+++ b/tests/ffi/vmspecific_native_finalizer_2_test.dart
@@ -0,0 +1,95 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testFinalizerRuns();
+  testFinalizerDetach();
+  testDoubleDetach();
+  testDetachNonDetach();
+  testWrongArguments();
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+void testFinalizerRuns() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    createAndLoseFinalizable(token);
+    doGC();
+    Expect.equals(42, token.value);
+  });
+}
+
+void createAndLoseFinalizable(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  setTokenFinalizer.attach(myFinalizable, token.cast());
+  Expect.equals(0, token.value);
+}
+
+void testFinalizerDetach() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    attachAndDetach(token);
+    doGC();
+    Expect.equals(0, token.value);
+  });
+}
+
+class Detach {
+  String identifier;
+
+  Detach(this.identifier);
+}
+
+void attachAndDetach(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  final detach = Detach('detach 123');
+  setTokenFinalizer.attach(myFinalizable, token.cast(), detach: detach);
+  setTokenFinalizer.detach(detach);
+  Expect.equals(0, token.value);
+}
+
+void testDoubleDetach() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    final myFinalizable = MyFinalizable();
+    final detach = Detach('detach 321');
+    setTokenFinalizer.attach(myFinalizable, token.cast(), detach: detach);
+    setTokenFinalizer.detach(detach);
+    setTokenFinalizer.detach(detach);
+    Expect.equals(0, token.value);
+  });
+}
+
+void testDetachNonDetach() {
+  final detach = Detach('detach 456');
+  setTokenFinalizer.detach(detach);
+  setTokenFinalizer.detach(detach);
+}
+
+void testWrongArguments() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>().cast<Void>();
+    Expect.throws(() {
+      final myFinalizable = MyFinalizable();
+      setTokenFinalizer.attach(myFinalizable, token, externalSize: -1024);
+    });
+    Expect.throws(() {
+      final myFinalizable = MyFinalizable();
+      setTokenFinalizer.attach(myFinalizable, token, detach: 123);
+    });
+  });
+}
diff --git a/tests/ffi/vmspecific_native_finalizer_isolate_groups_test.dart b/tests/ffi/vmspecific_native_finalizer_isolate_groups_test.dart
new file mode 100644
index 0000000..fb90ef1
--- /dev/null
+++ b/tests/ffi/vmspecific_native_finalizer_isolate_groups_test.dart
@@ -0,0 +1,51 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'ffi_test_helpers.dart';
+
+void main(List<String> args, int? address) async {
+  if (address != null) {
+    await mainHelper(args, address);
+  } else {
+    await testFinalizerRunsOnIsolateGroupShutdown();
+  }
+}
+
+Future mainHelper(List<String> args, int address) async {
+  final token = Pointer<IntPtr>.fromAddress(address);
+  createAndLoseFinalizable(token);
+  print('Isolate done.');
+}
+
+Future<void> testFinalizerRunsOnIsolateGroupShutdown() async {
+  await using((Arena allocator) async {
+    final token = allocator<IntPtr>();
+    Expect.equals(0, token.value);
+    final portExitMessage = ReceivePort();
+    await Isolate.spawnUri(
+      Platform.script,
+      [],
+      token.address,
+      onExit: portExitMessage.sendPort,
+    );
+    await portExitMessage.first;
+    print('Helper isolate has exited.');
+
+    Expect.equals(42, token.value);
+
+    print('End of test, shutting down.');
+  });
+}
diff --git a/tests/ffi/vmspecific_native_finalizer_isolates_test.dart b/tests/ffi/vmspecific_native_finalizer_isolates_test.dart
new file mode 100644
index 0000000..27ad4e0
--- /dev/null
+++ b/tests/ffi/vmspecific_native_finalizer_isolates_test.dart
@@ -0,0 +1,83 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() async {
+  await testSendAndExitFinalizable();
+  await testSendAndExitFinalizer();
+  await testFinalizerRunsOnIsolateShutdown();
+  print('End of test, shutting down.');
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+void runIsolateAttachFinalizer(int address) {
+  final token = Pointer<IntPtr>.fromAddress(address);
+  createAndLoseFinalizable(token);
+  print('Isolate done.');
+}
+
+Future<void> testFinalizerRunsOnIsolateShutdown() async {
+  await using((Arena allocator) async {
+    final token = allocator<IntPtr>();
+    Expect.equals(0, token.value);
+    final portExitMessage = ReceivePort();
+    await Isolate.spawn(
+      runIsolateAttachFinalizer,
+      token.address,
+      onExit: portExitMessage.sendPort,
+    );
+    await portExitMessage.first;
+
+    doGC();
+    Expect.equals(42, token.value);
+  });
+}
+
+Future<void> testSendAndExitFinalizable() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn(
+    (SendPort sendPort) {
+      try {
+        Isolate.exit(sendPort, MyFinalizable());
+      } catch (e) {
+        print('Expected exception: $e.');
+        Isolate.exit(sendPort, e);
+      }
+    },
+    receivePort.sendPort,
+  );
+  final result = await receivePort.first;
+  Expect.type<ArgumentError>(result);
+}
+
+Future<void> testSendAndExitFinalizer() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn(
+    (SendPort sendPort) {
+      try {
+        Isolate.exit(sendPort, MyFinalizable());
+      } catch (e) {
+        print('Expected exception: $e.');
+        Isolate.exit(sendPort, e);
+      }
+    },
+    receivePort.sendPort,
+  );
+  final result = await receivePort.first;
+  Expect.type<ArgumentError>(result);
+}
diff --git a/tests/ffi/vmspecific_native_finalizer_test.dart b/tests/ffi/vmspecific_native_finalizer_test.dart
new file mode 100644
index 0000000..ad315fb
--- /dev/null
+++ b/tests/ffi/vmspecific_native_finalizer_test.dart
@@ -0,0 +1,84 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+
+import 'dart:ffi';
+import 'dart:io';
+
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testMallocFree();
+  print('end of test, shutting down');
+}
+
+void testMallocFree() {
+  if (Platform.isWindows) {
+    // malloc and free not supported.
+    return;
+  }
+
+  print('freePtr $freePtr');
+
+  {
+    final resource = MyNativeResource();
+    resource.close();
+    doGC();
+  }
+
+  {
+    MyNativeResource();
+    doGC();
+  }
+
+  // Run finalizer on shutdown (or on a GC that runs before shutdown).
+  MyNativeResource();
+}
+
+class MyNativeResource implements Finalizable {
+  final Pointer<Void> pointer;
+
+  bool _closed = false;
+
+  MyNativeResource._(this.pointer, {int? externalSize}) {
+    print('pointer $pointer');
+    freeFinalizer.attach(this, pointer,
+        externalSize: externalSize, detach: this);
+  }
+
+  factory MyNativeResource() {
+    const num = 1;
+    const size = 16;
+    final pointer = calloc(num, size);
+    return MyNativeResource._(pointer, externalSize: size);
+  }
+
+  /// Eagerly stop using the native resource. Cancelling the finalizer.
+  void close() {
+    _closed = true;
+    freeFinalizer.detach(this);
+    free(pointer);
+  }
+
+  void useResource() {
+    if (_closed) {
+      throw UnsupportedError('The native resource has already been released');
+    }
+    print(pointer.address);
+  }
+}
+
+final DynamicLibrary stdlib = DynamicLibrary.process();
+
+typedef PosixCallocNative = Pointer<Void> Function(IntPtr num, IntPtr size);
+typedef PosixCalloc = Pointer<Void> Function(int num, int size);
+final PosixCalloc calloc =
+    stdlib.lookupFunction<PosixCallocNative, PosixCalloc>('calloc');
+
+typedef PosixFreeNative = Void Function(Pointer<Void>);
+final freePtr = stdlib.lookup<NativeFunction<PosixFreeNative>>('free');
+final free = freePtr.asFunction<void Function(Pointer<Void>)>();
+
+final freeFinalizer = NativeFinalizer(freePtr);
diff --git a/tests/ffi/vmspecific_static_checks_test.dart b/tests/ffi/vmspecific_static_checks_test.dart
index ba7f5ab..47df844 100644
--- a/tests/ffi/vmspecific_static_checks_test.dart
+++ b/tests/ffi/vmspecific_static_checks_test.dart
@@ -880,3 +880,9 @@
 {
   const AbiSpecificInteger4();
 }
+
+class MyFinalizableStruct extends Struct
+    implements Finalizable //# 2000: compile-time error
+{
+  external Pointer<Void> field;
+}
diff --git a/tests/ffi_2/c_types_test.dart b/tests/ffi_2/c_types_test.dart
index 032853c..7a651ce 100644
--- a/tests/ffi_2/c_types_test.dart
+++ b/tests/ffi_2/c_types_test.dart
@@ -66,6 +66,11 @@
   String toString() => cRepresentation;
 }
 
+final char = CType(
+  sizeOf<Char>(),
+  'char',
+  ffiLoad: (Pointer p) => p.cast<Char>().value,
+);
 final uchar = CType(
   sizeOf<UnsignedChar>(),
   'char',
@@ -139,6 +144,7 @@
 );
 
 final cTypes = [
+  char,
   uchar,
   schar,
   short,
diff --git a/tests/ffi_2/ffi_2.status b/tests/ffi_2/ffi_2.status
index e22df5b..361a252 100644
--- a/tests/ffi_2/ffi_2.status
+++ b/tests/ffi_2/ffi_2.status
@@ -20,6 +20,7 @@
 [ $system == android ]
 *: Pass, Slow # https://github.com/dart-lang/sdk/issues/38489
 regress_47594_test: Skip # DartDev is not available on Android.
+vmspecific_native_finalizer_isolate_groups_test: Skip # SpawnUri not available on Android tester.
 
 [ $system == windows ]
 regress_47594_test: Skip # DynamicLibrary.process() is not available on Windows.
diff --git a/tests/ffi_2/ffi_test_helpers.dart b/tests/ffi_2/ffi_test_helpers.dart
index aa2ed86..9573a5c 100644
--- a/tests/ffi_2/ffi_test_helpers.dart
+++ b/tests/ffi_2/ffi_test_helpers.dart
@@ -6,6 +6,8 @@
 
 // @dart = 2.9
 
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
 import 'dart:ffi';
 
 import 'dylib_utils.dart';
@@ -19,12 +21,45 @@
 final DynamicLibrary ffiTestFunctions =
     dlopenPlatformSpecific("ffi_test_functions");
 
-final triggerGc = ffiTestFunctions
-    .lookupFunction<NativeNullaryOp, NullaryOpVoid>("TriggerGC");
-
 final collectOnNthAllocation = ffiTestFunctions
     .lookupFunction<NativeUnaryOp, UnaryOpVoid>("CollectOnNthAllocation");
 
 extension PointerOffsetBy<T extends NativeType> on Pointer<T> {
   Pointer<T> offsetBy(int bytes) => Pointer.fromAddress(address + bytes);
 }
+
+/// Triggers garbage collection.
+// Defined in `dart:_internal`.
+// ignore: undefined_identifier
+void triggerGc() => VMInternalsForTesting.collectAllGarbage();
+
+void Function(String) _namedPrint(String name) {
+  if (name != null) {
+    return (String value) => print('$name: $value');
+  }
+  return (String value) => print(value);
+}
+
+/// Does a GC and if [doAwait] awaits a future to enable running finalizers.
+///
+/// Also prints for debug purposes.
+///
+/// If provided, [name] prefixes the debug prints.
+void doGC({String name}) {
+  final _print = _namedPrint(name);
+
+  _print('Do GC.');
+  triggerGc();
+  _print('GC done');
+}
+
+void createAndLoseFinalizable(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  setTokenFinalizer.attach(myFinalizable, token.cast());
+}
+
+final setTokenTo42Ptr =
+    ffiTestFunctions.lookup<NativeFinalizerFunction>("SetArgumentTo42");
+final setTokenFinalizer = NativeFinalizer(setTokenTo42Ptr);
+
+class MyFinalizable implements Finalizable {}
diff --git a/tests/ffi_2/vmspecific_native_finalizer_2_test.dart b/tests/ffi_2/vmspecific_native_finalizer_2_test.dart
new file mode 100644
index 0000000..4f651db1
--- /dev/null
+++ b/tests/ffi_2/vmspecific_native_finalizer_2_test.dart
@@ -0,0 +1,97 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+// @dart = 2.9
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testFinalizerRuns();
+  testFinalizerDetach();
+  testDoubleDetach();
+  testDetachNonDetach();
+  testWrongArguments();
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+void testFinalizerRuns() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    createAndLoseFinalizable(token);
+    doGC();
+    Expect.equals(42, token.value);
+  });
+}
+
+void createAndLoseFinalizable(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  setTokenFinalizer.attach(myFinalizable, token.cast());
+  Expect.equals(0, token.value);
+}
+
+void testFinalizerDetach() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    attachAndDetach(token);
+    doGC();
+    Expect.equals(0, token.value);
+  });
+}
+
+class Detach {
+  String identifier;
+
+  Detach(this.identifier);
+}
+
+void attachAndDetach(Pointer<IntPtr> token) {
+  final myFinalizable = MyFinalizable();
+  final detach = Detach('detach 123');
+  setTokenFinalizer.attach(myFinalizable, token.cast(), detach: detach);
+  setTokenFinalizer.detach(detach);
+  Expect.equals(0, token.value);
+}
+
+void testDoubleDetach() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>();
+    final myFinalizable = MyFinalizable();
+    final detach = Detach('detach 321');
+    setTokenFinalizer.attach(myFinalizable, token.cast(), detach: detach);
+    setTokenFinalizer.detach(detach);
+    setTokenFinalizer.detach(detach);
+    Expect.equals(0, token.value);
+  });
+}
+
+void testDetachNonDetach() {
+  final detach = Detach('detach 456');
+  setTokenFinalizer.detach(detach);
+  setTokenFinalizer.detach(detach);
+}
+
+void testWrongArguments() {
+  using((Arena allocator) {
+    final token = allocator<IntPtr>().cast<Void>();
+    Expect.throws(() {
+      final myFinalizable = MyFinalizable();
+      setTokenFinalizer.attach(myFinalizable, token, externalSize: -1024);
+    });
+    Expect.throws(() {
+      final myFinalizable = MyFinalizable();
+      setTokenFinalizer.attach(myFinalizable, token, detach: 123);
+    });
+  });
+}
diff --git a/tests/ffi_2/vmspecific_native_finalizer_isolate_groups_test.dart b/tests/ffi_2/vmspecific_native_finalizer_isolate_groups_test.dart
new file mode 100644
index 0000000..c68f4a3
--- /dev/null
+++ b/tests/ffi_2/vmspecific_native_finalizer_isolate_groups_test.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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'ffi_test_helpers.dart';
+
+void main(List<String> args, int address) async {
+  if (address != null) {
+    await mainHelper(args, address);
+  } else {
+    await testFinalizerRunsOnIsolateGroupShutdown();
+  }
+}
+
+Future mainHelper(List<String> args, int address) async {
+  final token = Pointer<IntPtr>.fromAddress(address);
+  createAndLoseFinalizable(token);
+  print('Isolate done.');
+}
+
+Future<void> testFinalizerRunsOnIsolateGroupShutdown() async {
+  await using((Arena allocator) async {
+    final token = allocator<IntPtr>();
+    Expect.equals(0, token.value);
+    final portExitMessage = ReceivePort();
+    await Isolate.spawnUri(
+      Platform.script,
+      [],
+      token.address,
+      onExit: portExitMessage.sendPort,
+    );
+    await portExitMessage.first;
+    print('Helper isolate has exited.');
+
+    Expect.equals(42, token.value);
+
+    print('End of test, shutting down.');
+  });
+}
diff --git a/tests/ffi_2/vmspecific_native_finalizer_isolates_test.dart b/tests/ffi_2/vmspecific_native_finalizer_isolates_test.dart
new file mode 100644
index 0000000..50eadfb
--- /dev/null
+++ b/tests/ffi_2/vmspecific_native_finalizer_isolates_test.dart
@@ -0,0 +1,85 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() async {
+  await testSendAndExitFinalizable();
+  await testSendAndExitFinalizer();
+  await testFinalizerRunsOnIsolateShutdown();
+  print('End of test, shutting down.');
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+void runIsolateAttachFinalizer(int address) {
+  final token = Pointer<IntPtr>.fromAddress(address);
+  createAndLoseFinalizable(token);
+  print('Isolate done.');
+}
+
+Future<void> testFinalizerRunsOnIsolateShutdown() async {
+  await using((Arena allocator) async {
+    final token = allocator<IntPtr>();
+    Expect.equals(0, token.value);
+    final portExitMessage = ReceivePort();
+    await Isolate.spawn(
+      runIsolateAttachFinalizer,
+      token.address,
+      onExit: portExitMessage.sendPort,
+    );
+    await portExitMessage.first;
+
+    doGC();
+    Expect.equals(42, token.value);
+  });
+}
+
+Future<void> testSendAndExitFinalizable() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn(
+    (SendPort sendPort) {
+      try {
+        Isolate.exit(sendPort, MyFinalizable());
+      } catch (e) {
+        print('Expected exception: $e.');
+        Isolate.exit(sendPort, e);
+      }
+    },
+    receivePort.sendPort,
+  );
+  final result = await receivePort.first;
+  Expect.type<ArgumentError>(result);
+}
+
+Future<void> testSendAndExitFinalizer() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn(
+    (SendPort sendPort) {
+      try {
+        Isolate.exit(sendPort, MyFinalizable());
+      } catch (e) {
+        print('Expected exception: $e.');
+        Isolate.exit(sendPort, e);
+      }
+    },
+    receivePort.sendPort,
+  );
+  final result = await receivePort.first;
+  Expect.type<ArgumentError>(result);
+}
diff --git a/tests/ffi_2/vmspecific_native_finalizer_test.dart b/tests/ffi_2/vmspecific_native_finalizer_test.dart
new file mode 100644
index 0000000..f596609
--- /dev/null
+++ b/tests/ffi_2/vmspecific_native_finalizer_test.dart
@@ -0,0 +1,89 @@
+// 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.
+//
+// SharedObjects=ffi_test_functions
+
+// @dart = 2.9
+
+import 'dart:ffi';
+import 'dart:io';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testMallocFree();
+  print('end of test, shutting down');
+}
+
+DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
+
+void testMallocFree() {
+  if (Platform.isWindows) {
+    // malloc and free not supported.
+    return;
+  }
+
+  print('freePtr $freePtr');
+
+  {
+    final resource = MyNativeResource();
+    resource.close();
+    doGC();
+  }
+
+  {
+    MyNativeResource();
+    doGC();
+  }
+
+  // Run finalizer on shutdown (or on a GC that runs before shutdown).
+  MyNativeResource();
+}
+
+class MyNativeResource implements Finalizable {
+  final Pointer<Void> pointer;
+
+  bool _closed = false;
+
+  MyNativeResource._(this.pointer, {int externalSize}) {
+    print('pointer $pointer');
+    freeFinalizer.attach(this, pointer,
+        externalSize: externalSize, detach: this);
+  }
+
+  factory MyNativeResource() {
+    const num = 1;
+    const size = 16;
+    final pointer = calloc(num, size);
+    return MyNativeResource._(pointer, externalSize: size);
+  }
+
+  /// Eagerly stop using the native resource. Cancelling the finalizer.
+  void close() {
+    _closed = true;
+    freeFinalizer.detach(this);
+    free(pointer);
+  }
+
+  void useResource() {
+    if (_closed) {
+      throw UnsupportedError('The native resource has already been released');
+    }
+    print(pointer.address);
+  }
+}
+
+final DynamicLibrary stdlib = DynamicLibrary.process();
+
+typedef PosixCallocNative = Pointer<Void> Function(IntPtr num, IntPtr size);
+typedef PosixCalloc = Pointer<Void> Function(int num, int size);
+final PosixCalloc calloc =
+    stdlib.lookupFunction<PosixCallocNative, PosixCalloc>('calloc');
+
+typedef PosixFreeNative = Void Function(Pointer<Void>);
+final freePtr = stdlib.lookup<NativeFunction<PosixFreeNative>>('free');
+final free = freePtr.asFunction<void Function(Pointer<Void>)>();
+
+final freeFinalizer = NativeFinalizer(freePtr);
diff --git a/tests/ffi_2/vmspecific_static_checks_test.dart b/tests/ffi_2/vmspecific_static_checks_test.dart
index ecb15cb..cd0feaf 100644
--- a/tests/ffi_2/vmspecific_static_checks_test.dart
+++ b/tests/ffi_2/vmspecific_static_checks_test.dart
@@ -879,3 +879,10 @@
 {
   const AbiSpecificInteger4();
 }
+
+class MyFinalizableStruct extends Struct
+    implements Finalizable //# 2000: compile-time error
+{
+   Pointer<Void> field;
+}
+
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/field/function_field_test.dart b/tests/language/field/function_field_test.dart
new file mode 100644
index 0000000..1b40df7
--- /dev/null
+++ b/tests/language/field/function_field_test.dart
@@ -0,0 +1,16 @@
+// 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:expect/expect.dart";
+
+class A {
+  int Function(int) f;
+
+  A(this.f);
+}
+
+main() {
+  A a = A((x) => x + x);
+  Expect.equals(a.f(2), 4);
+}
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/inference_update_1/horizontal_inference_disabled_test.dart b/tests/language/inference_update_1/horizontal_inference_disabled_test.dart
new file mode 100644
index 0000000..e335aee
--- /dev/null
+++ b/tests/language/inference_update_1/horizontal_inference_disabled_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+// Tests that when the feature is disabled, inferred types do not flow
+// "horizontally" from a non-closure argument of an invocation to a closure
+// argument.
+
+// @dart=2.17
+
+import '../static_type_helper.dart';
+
+testLaterUnnamedParameter(void Function<T>(T, void Function(T)) f) {
+  f(0, (x) {
+    x.expectStaticType<Exactly<Object?>>();
+  });
+}
+
+testEarlierUnnamedParameter(void Function<T>(void Function(T), T) f) {
+  f((x) {
+    x.expectStaticType<Exactly<Object?>>();
+  }, 0);
+}
+
+testLaterNamedParameter(
+    void Function<T>({required T a, required void Function(T) b}) f) {
+  f(
+      a: 0,
+      b: (x) {
+        x.expectStaticType<Exactly<Object?>>();
+      });
+}
+
+testEarlierNamedParameter(
+    void Function<T>({required void Function(T) a, required T b}) f) {
+  f(
+      a: (x) {
+        x.expectStaticType<Exactly<Object?>>();
+      },
+      b: 0);
+}
+
+testPropagateToReturnType(U Function<T, U>(T, U Function(T)) f) {
+  f(0, (x) => [x]).expectStaticType<Exactly<List<Object?>>>();
+}
+
+main() {}
diff --git a/tests/language/inference_update_1/horizontal_inference_enabled_test.dart b/tests/language/inference_update_1/horizontal_inference_enabled_test.dart
new file mode 100644
index 0000000..33b32df
--- /dev/null
+++ b/tests/language/inference_update_1/horizontal_inference_enabled_test.dart
@@ -0,0 +1,110 @@
+// 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.
+
+// Tests that when the feature is enabled, inferred types can flow
+// "horizontally" from a non-closure argument of an invocation to a closure
+// argument.
+
+// SharedOptions=--enable-experiment=inference-update-1
+
+import '../static_type_helper.dart';
+
+testLaterUnnamedParameter(void Function<T>(T, void Function(T)) f) {
+  f(0, (x) {
+    x.expectStaticType<Exactly<int>>();
+  });
+}
+
+testEarlierUnnamedParameter(void Function<T>(void Function(T), T) f) {
+  f((x) {
+    x.expectStaticType<Exactly<int>>();
+  }, 0);
+}
+
+testLaterNamedParameter(
+    void Function<T>({required T a, required void Function(T) b}) f) {
+  f(
+      a: 0,
+      b: (x) {
+        x.expectStaticType<Exactly<int>>();
+      });
+}
+
+testEarlierNamedParameter(
+    void Function<T>({required void Function(T) a, required T b}) f) {
+  f(
+      a: (x) {
+        x.expectStaticType<Exactly<int>>();
+      },
+      b: 0);
+}
+
+testPropagateToReturnType(U Function<T, U>(T, U Function(T)) f) {
+  f(0, (x) => [x]).expectStaticType<Exactly<List<int>>>();
+}
+
+testFold(List<int> list) {
+  var a = list.fold(
+      0,
+      (x, y) =>
+          (x..expectStaticType<Exactly<int>>()) +
+          (y..expectStaticType<Exactly<int>>()));
+  a.expectStaticType<Exactly<int>>();
+}
+
+// The test cases below exercise situations where there are multiple closures in
+// the invocation, and they need to be inferred in the right order.
+
+testClosureAsParameterType(U Function<T, U>(T, U Function(T)) f) {
+  f(() => 0, (h) => [h()]..expectStaticType<Exactly<List<int>>>())
+      .expectStaticType<Exactly<List<int>>>();
+}
+
+testPropagateToEarlierClosure(U Function<T, U>(U Function(T), T Function()) f) {
+  f((x) => [x]..expectStaticType<Exactly<List<int>>>(), () => 0)
+      .expectStaticType<Exactly<List<int>>>();
+}
+
+testPropagateToLaterClosure(U Function<T, U>(T Function(), U Function(T)) f) {
+  f(() => 0, (x) => [x]..expectStaticType<Exactly<List<int>>>())
+      .expectStaticType<Exactly<List<int>>>();
+}
+
+testLongDepedencyChain(
+    V Function<T, U, V>(T Function(), U Function(T), V Function(U)) f) {
+  f(() => [0], (x) => x.single..expectStaticType<Exactly<int>>(),
+          (y) => {y}..expectStaticType<Exactly<Set<int>>>())
+      .expectStaticType<Exactly<Set<int>>>();
+}
+
+testDependencyCycle(Map<T, U> Function<T, U>(T Function(U), U Function(T)) f) {
+  f((x) => [x]..expectStaticType<Exactly<List<Object?>>>(),
+          (y) => {y}..expectStaticType<Exactly<Set<Object?>>>())
+      .expectStaticType<Exactly<Map<List<Object?>, Set<Object?>>>>();
+}
+
+testPropagateFromContravariantReturnType(
+    U Function<T, U>(void Function(T) Function(), U Function(T)) f) {
+  f(() => (int i) {}, (x) => [x]..expectStaticType<Exactly<List<int>>>())
+      .expectStaticType<Exactly<List<int>>>();
+}
+
+testPropagateToContravariantParameterType(
+    U Function<T, U>(T Function(), U Function(void Function(T))) f) {
+  f(() => 0, (x) => [x]..expectStaticType<Exactly<List<void Function(int)>>>())
+      .expectStaticType<Exactly<List<void Function(int)>>>();
+}
+
+testReturnTypeRefersToMultipleTypeVars(
+    void Function<T, U>(
+            Map<T, U> Function(), void Function(T), void Function(U))
+        f) {
+  f(() => {0: ''}, (k) {
+    k.expectStaticType<Exactly<int>>();
+  }, (v) {
+    v.expectStaticType<Exactly<String>>();
+  });
+}
+
+main() {}
diff --git a/tests/language/inference_update_1/write_capture_deferral_disabled_test.dart b/tests/language/inference_update_1/write_capture_deferral_disabled_test.dart
new file mode 100644
index 0000000..1083524
--- /dev/null
+++ b/tests/language/inference_update_1/write_capture_deferral_disabled_test.dart
@@ -0,0 +1,55 @@
+// 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.
+
+// Tests that when the feature is disabled, if an invocation argument is a
+// closure, write captures made by that closure take effect immediately after
+// the closure is visited
+
+// @dart=2.17
+
+import '../static_type_helper.dart';
+
+withUnnamedArguments(
+    int? i, void Function(Object?, void Function(), Object?) f) {
+  if (i != null) {
+    f(i..expectStaticType<Exactly<int>>(), () {
+      i = null;
+    }, i..expectStaticType<Exactly<int?>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withNamedArguments(int? i,
+    void Function({Object? x, required void Function() g, Object? y}) f) {
+  if (i != null) {
+    f(
+        x: i..expectStaticType<Exactly<int>>(),
+        g: () {
+          i = null;
+        },
+        y: i..expectStaticType<Exactly<int?>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withIdentical_lhs(int? i) {
+  if (i != null) {
+    i..expectStaticType<Exactly<int>>();
+    identical(() {
+      i = null;
+    }, i..expectStaticType<Exactly<int?>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withIdentical_rhs(int? i) {
+  if (i != null) {
+    identical(i..expectStaticType<Exactly<int>>(), () {
+      i = null;
+    });
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+main() {}
diff --git a/tests/language/inference_update_1/write_capture_deferral_enabled_test.dart b/tests/language/inference_update_1/write_capture_deferral_enabled_test.dart
new file mode 100644
index 0000000..3a93caa
--- /dev/null
+++ b/tests/language/inference_update_1/write_capture_deferral_enabled_test.dart
@@ -0,0 +1,55 @@
+// 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.
+
+// Tests that when the feature is enabled, if an invocation argument is a
+// closure, write captures made by that closure do not take effect until after
+// the invocation.  This is a minor improvement to flow analysis that falls
+// naturally out of the fact that closures are analyzed last (so that their
+// types can depend on the types of other arguments).
+
+// SharedOptions=--enable-experiment=inference-update-1
+
+import '../static_type_helper.dart';
+
+withUnnamedArguments(int? i, void Function(void Function(), Object?) f) {
+  if (i != null) {
+    f(() {
+      i = null;
+    }, i..expectStaticType<Exactly<int>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withNamedArguments(
+    int? i, void Function({required void Function() g, Object? x}) f) {
+  if (i != null) {
+    f(
+        g: () {
+          i = null;
+        },
+        x: i..expectStaticType<Exactly<int>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withIdentical_lhs(int? i) {
+  if (i != null) {
+    i..expectStaticType<Exactly<int>>();
+    identical(() {
+      i = null;
+    }, i..expectStaticType<Exactly<int>>());
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+withIdentical_rhs(int? i) {
+  if (i != null) {
+    identical(i..expectStaticType<Exactly<int>>(), () {
+      i = null;
+    });
+    i..expectStaticType<Exactly<int?>>();
+  }
+}
+
+main() {}
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/string/escape4_test.dart b/tests/language/string/escape4_test.dart
index 6f4efba..0f2a6cb 100644
--- a/tests/language/string/escape4_test.dart
+++ b/tests/language/string/escape4_test.dart
@@ -9,23 +9,21 @@
   // static error updater tool, so if you need to tweak the static error
   // expectations in this test, you may need to do so manually.
   print('Hello, World!\
+  //   ^
+  // [cfe] Can't find ')' to match '('.
+  //    ^
+  // [cfe] String starting with ' must end with '.
+  //                  ^
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_STARTED
+  // [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
+  // [cfe] The string '\' can't stand alone.
 ');
-// [error line 11, column 8, length 1]
-// [cfe] Can't find ')' to match '('.
-// [error line 11, column 9, length 1]
-// [cfe] String starting with ' must end with '.
-// [error line 11, column 23, length 1]
-// [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-// [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
-// [error line 11, column 23, length 1]
-// [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
-// [error line 12, column 1, length 3]
+// [error column 1, length 3]
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
-// [error line 12, column 1]
 // [cfe] String starting with ' must end with '.
-// [error line 12, column 3, length 1]
+//^
 // [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
 }
-// [error line 29, column 1, length 1]
+// [error column 1, length 1]
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language/string/unicode1_test.dart b/tests/language/string/unicode1_test.dart
index 04a9f5f..bf87c76 100644
--- a/tests/language/string/unicode1_test.dart
+++ b/tests/language/string/unicode1_test.dart
@@ -7,10 +7,10 @@
 main() {
   var str = "Foo\u00";
   //            ^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
+  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
   str = "Foo\uDEEMBar";
   //        ^^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
+  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
 }
diff --git a/tests/language/string/unicode2_test.dart b/tests/language/string/unicode2_test.dart
index 4624fbd..ace2a0f 100644
--- a/tests/language/string/unicode2_test.dart
+++ b/tests/language/string/unicode2_test.dart
@@ -7,11 +7,14 @@
 main() {
   var str = "Foo\u{}Bar";
   //            ^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
   str = "Foo\u{000000000}Bar";
+  //        ^^^^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
   str = "Foo\u{DEAF!}Bar";
   //        ^^^^^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
 }
diff --git a/tests/language/variance/variance_in_inference_error_test.dart b/tests/language/variance/variance_in_inference_error_test.dart
index 34c6fb3..a4c67b7 100644
--- a/tests/language/variance/variance_in_inference_error_test.dart
+++ b/tests/language/variance/variance_in_inference_error_test.dart
@@ -48,30 +48,40 @@
 //^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 // [cfe] unspecified
+//                                 ^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 
   // String <: T <: int is not a valid constraint.
   inferCovContra(Covariant<String>(), Contravariant<int>());
 //^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 // [cfe] unspecified
+//                                    ^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 
   // Middle <: T <: Lower is not a valid constraint
   inferCovContra(Covariant<Middle>(), Contravariant<Lower>());
 //^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 // [cfe] unspecified
+//                                    ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 
   // Upper <: T <: Lower is not a valid constraint
   inferCovContra(Covariant<Upper>(), Contravariant<Lower>());
 //^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 // [cfe] unspecified
+//                                   ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 
   // Upper <: T <: Middle is not a valid constraint
   inferCovContra(Covariant<Upper>(), Contravariant<Middle>());
 //^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 // [cfe] unspecified
+//                                   ^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 
   // Inference for Contrabound(...) produces Lower <: T <: Upper.
   // Since T is contravariant, we choose Upper as the solution.
diff --git a/tests/language/variance/variance_inout_inference_error_test.dart b/tests/language/variance/variance_inout_inference_error_test.dart
index 8bf485f..7f51119 100644
--- a/tests/language/variance/variance_inout_inference_error_test.dart
+++ b/tests/language/variance/variance_inout_inference_error_test.dart
@@ -23,6 +23,8 @@
 main() {
   // Middle <: T <: Middle and int <: T <: int are not valid constraints.
   inferInvInv(Invariant<Middle>(), Invariant<int>());
+//^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 //            ^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 // [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Object>'.
@@ -32,12 +34,16 @@
 
   // Middle <: T <: Middle and Upper <: T <: Upper are not valid constraints.
   inferInvInv(Invariant<Middle>(), Invariant<Upper>());
+//^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 //            ^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 // [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
 
   // Middle <: T <: Middle and Lower <: T <: Lower are not valid constraints.
   inferInvInv(Invariant<Middle>(), Invariant<Lower>());
+//^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 //                                 ^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 // [cfe] The argument type 'Invariant<Lower>' can't be assigned to the parameter type 'Invariant<Middle>'.
@@ -46,6 +52,8 @@
   // Middle <: T <: Middle
   // Upper <: T <: Middle is not a valid constraint.
   inferInvCov(Invariant<Middle>(), Covariant<Upper>());
+//^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 //            ^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 // [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
@@ -54,6 +62,8 @@
   // Middle <: T <: Lower
   // Middle <: T <: Lower is not a valid constraint
   inferInvContra(Invariant<Middle>(), Contravariant<Lower>());
+//^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
 //                                    ^^^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
 // [cfe] The argument type 'Contravariant<Lower>' can't be assigned to the parameter type 'Contravariant<Middle>'.
diff --git a/tests/language/vm/lazy_deopt_with_exception_concurrent_test.dart b/tests/language/vm/lazy_deopt_with_exception_concurrent_test.dart
new file mode 100644
index 0000000..5aa5637
--- /dev/null
+++ b/tests/language/vm/lazy_deopt_with_exception_concurrent_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2016, 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.
+// Test deoptimization on an optimistically hoisted smi check.
+// VMOptions=--optimization-counter-threshold=10  --no-background-compilation
+
+// Test that lazy deoptimization works if the program returns to a function
+// that is scheduled for lazy deoptimization via an exception, even under
+// heavy concurrent load.
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+class C {
+  dynamic x = 42;
+}
+
+@pragma('vm:never-inline')
+AA(C c, bool b) {
+  if (b) {
+    c.x = 2.5;
+    throw 123;
+  }
+}
+
+@pragma('vm:never-inline')
+T1(C c, bool b) {
+  try {
+    AA(c, b);
+  } on dynamic {}
+  return c.x + 1;
+}
+
+@pragma('vm:never-inline')
+T2(C c, bool b) {
+  try {
+    AA(c, b);
+  } on String {
+    Expect.isTrue(false);
+  } on int catch (e) {
+    Expect.equals(e, 123);
+    Expect.equals(b, true);
+    Expect.equals(c.x, 2.5);
+  }
+  return c.x + 1;
+}
+
+main() async {
+  const count = 10;
+
+  final rp = ReceivePort();
+  for (int i = 0; i < count; ++i) {
+    Isolate.spawn(entry, i, onExit: rp.sendPort);
+  }
+  final si = StreamIterator(rp);
+  int j = 0;
+  while (await si.moveNext()) {
+    j++;
+    if (j == count) break;
+  }
+  print('done');
+
+  if (j != count) throw 'a';
+  si.cancel();
+  rp.close();
+  print('done');
+}
+
+void entry(_) {
+  var c = new C();
+  for (var i = 0; i < 100000; ++i) {
+    T1(c, false);
+    T2(c, false);
+  }
+  Expect.equals(43, T1(c, false));
+  Expect.equals(43, T2(c, false));
+  Expect.equals(3.5, T1(c, true));
+  Expect.equals(3.5, T2(c, true));
+}
diff --git a/tests/language_2/constructor/reference_test.dart b/tests/language_2/constructor/reference_test.dart
index 738d450..72d1b40 100644
--- a/tests/language_2/constructor/reference_test.dart
+++ b/tests/language_2/constructor/reference_test.dart
@@ -91,7 +91,7 @@
   Foo<int>.bar.baz();
   // ^^^^^
   // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
-  // [cfe] This requires the 'constructor-tearoffs' language feature to be enabled.
+  // [cfe] The 'constructor-tearoffs' language feature is disabled for this library.
   //       ^
   // [cfe] Member not found: 'bar'.
   //           ^^^
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/field/function_field_test.dart b/tests/language_2/field/function_field_test.dart
new file mode 100644
index 0000000..1b40df7
--- /dev/null
+++ b/tests/language_2/field/function_field_test.dart
@@ -0,0 +1,16 @@
+// 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:expect/expect.dart";
+
+class A {
+  int Function(int) f;
+
+  A(this.f);
+}
+
+main() {
+  A a = A((x) => x + x);
+  Expect.equals(a.f(2), 4);
+}
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/tests/language_2/string/escape4_test.dart b/tests/language_2/string/escape4_test.dart
index fb83da2..cfedc5d 100644
--- a/tests/language_2/string/escape4_test.dart
+++ b/tests/language_2/string/escape4_test.dart
@@ -11,23 +11,21 @@
   // static error updater tool, so if you need to tweak the static error
   // expectations in this test, you may need to do so manually.
   print('Hello, World!\
+  //   ^
+  // [cfe] Can't find ')' to match '('.
+  //    ^
+  // [cfe] String starting with ' must end with '.
+  //                  ^
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_STARTED
+  // [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
+  // [cfe] The string '\' can't stand alone.
 ');
-// [error line 13, column 8, length 1]
-// [cfe] Can't find ')' to match '('.
-// [error line 13, column 9, length 1]
-// [cfe] String starting with ' must end with '.
-// [error line 13, column 23, length 1]
-// [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-// [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
-// [error line 13, column 23, length 1]
-// [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
-// [error line 14, column 1, length 3]
+// [error column 1, length 3]
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
 // [cfe] Expected ';' after this.
-// [error line 14, column 1]
 // [cfe] String starting with ' must end with '.
-// [error line 14, column 3, length 1]
+//^
 // [analyzer] SYNTACTIC_ERROR.UNTERMINATED_STRING_LITERAL
 }
-// [error line 31, column 1, length 1]
+// [error column 1, length 1]
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language_2/string/unicode1_test.dart b/tests/language_2/string/unicode1_test.dart
index 58b39bd..7844330 100644
--- a/tests/language_2/string/unicode1_test.dart
+++ b/tests/language_2/string/unicode1_test.dart
@@ -9,10 +9,10 @@
 main() {
   var str = "Foo\u00";
   //            ^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
+  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
   str = "Foo\uDEEMBar";
   //        ^^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
+  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits.
 }
diff --git a/tests/language_2/string/unicode2_test.dart b/tests/language_2/string/unicode2_test.dart
index 042b642..6c2cb90 100644
--- a/tests/language_2/string/unicode2_test.dart
+++ b/tests/language_2/string/unicode2_test.dart
@@ -9,11 +9,14 @@
 main() {
   var str = "Foo\u{}Bar";
   //            ^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
   str = "Foo\u{000000000}Bar";
+  //        ^^^^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
   str = "Foo\u{DEAF!}Bar";
   //        ^^^^^^^^
-  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE
-  // [cfe] An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+  // [analyzer] SYNTACTIC_ERROR.INVALID_UNICODE_ESCAPE_U_BRACKET
+  // [cfe] An escape sequence starting with '\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'.
 }
diff --git a/tests/language_2/vm/lazy_deopt_with_exception_concurrent_test.dart b/tests/language_2/vm/lazy_deopt_with_exception_concurrent_test.dart
new file mode 100644
index 0000000..3e07cbb
--- /dev/null
+++ b/tests/language_2/vm/lazy_deopt_with_exception_concurrent_test.dart
@@ -0,0 +1,82 @@
+// Copyright (c) 2016, 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.
+// Test deoptimization on an optimistically hoisted smi check.
+// VMOptions=--optimization-counter-threshold=10  --no-background-compilation
+
+// @dart = 2.9
+
+// Test that lazy deoptimization works if the program returns to a function
+// that is scheduled for lazy deoptimization via an exception.
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:expect/expect.dart';
+
+class C {
+  dynamic x = 42;
+}
+
+@pragma('vm:never-inline')
+AA(C c, bool b) {
+  if (b) {
+    c.x = 2.5;
+    throw 123;
+  }
+}
+
+@pragma('vm:never-inline')
+T1(C c, bool b) {
+  try {
+    AA(c, b);
+  } on dynamic {}
+  return c.x + 1;
+}
+
+@pragma('vm:never-inline')
+T2(C c, bool b) {
+  try {
+    AA(c, b);
+  } on String {
+    Expect.isTrue(false);
+  } on int catch (e) {
+    Expect.equals(e, 123);
+    Expect.equals(b, true);
+    Expect.equals(c.x, 2.5);
+  }
+  return c.x + 1;
+}
+
+main() async {
+  const count = 10;
+
+  final rp = ReceivePort();
+  for (int i = 0; i < count; ++i) {
+    Isolate.spawn(entry, i, onExit: rp.sendPort);
+  }
+  final si = StreamIterator(rp);
+  int j = 0;
+  while (await si.moveNext()) {
+    j++;
+    if (j == count) break;
+  }
+  print('done');
+
+  if (j != count) throw 'a';
+  si.cancel();
+  rp.close();
+  print('done');
+}
+
+void entry(_) {
+  var c = new C();
+  for (var i = 0; i < 100000; ++i) {
+    T1(c, false);
+    T2(c, false);
+  }
+  Expect.equals(43, T1(c, false));
+  Expect.equals(43, T2(c, false));
+  Expect.equals(3.5, T1(c, true));
+  Expect.equals(3.5, T2(c, true));
+}
diff --git a/tests/language_2/vm/regress_36977_test.dart b/tests/language_2/vm/regress_36977_test.dart
index 0ee27a7..0beca90 100755
--- a/tests/language_2/vm/regress_36977_test.dart
+++ b/tests/language_2/vm/regress_36977_test.dart
@@ -140,7 +140,7 @@
                                 var5[-5],
                                 (-(((var1 ? false : true) ? var5[-87] : par2)))
                               } ??
-                              {FileSystemEvent.MODIFY, 31, var2})))) +
+                              {FileSystemEvent.modify, 31, var2})))) +
               var2),
           (((++par2)).isEven
               ? foo1(
@@ -237,7 +237,7 @@
                       -13,
                       par2,
                       -83,
-                      ZLibOption.DEFAULT_MEM_LEVEL,
+                      ZLibOption.defaultMemLevel,
                       (var2++)
                     })))))
         });
diff --git a/tests/lib/html/performance_api_test.dart b/tests/lib/html/performance_api_test.dart
index 2e5643d..848ec9e 100644
--- a/tests/lib/html/performance_api_test.dart
+++ b/tests/lib/html/performance_api_test.dart
@@ -30,5 +30,12 @@
         var loadEventStart = window.performance.timing.loadEventStart;
       }, expectation);
     });
+    test('markAndMeasure', () {
+      window.performance.mark('mark1');
+      window.performance.mark('mark2', {'detail': 'metadata'});
+      window.performance.measure('measure1');
+      window.performance.measure('measure2', 'mark1');
+      window.performance.measure('measure3', 'mark1', 'mark2');
+    });
   });
 }
diff --git a/tests/lib/isolate/isolate_run_test.dart b/tests/lib/isolate/isolate_run_test.dart
deleted file mode 100644
index 27312b8..0000000
--- a/tests/lib/isolate/isolate_run_test.dart
+++ /dev/null
@@ -1,115 +0,0 @@
-// 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:isolate';
-import 'dart:async';
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-
-void main() async {
-  asyncStart();
-  // Sending result back.
-  await testValue();
-  await testAsyncValue();
-  // Sending error from computation back.
-  await testError();
-  await testAsyncError();
-  // Sending uncaught async error back.
-  await testUncaughtError();
-  // Not sending anything back before isolate dies.
-  await testIsolateHangs();
-  await testIsolateKilled();
-  await testIsolateExits();
-  asyncEnd();
-}
-
-final StackTrace stack = StackTrace.fromString("Known Stacktrace");
-final ArgumentError error = ArgumentError.value(42, "name");
-
-var variable = 0;
-
-Future<void> testValue() async {
-  var value = await Isolate.run<int>(() {
-    variable = 1; // Changed in other isolate!
-    Expect.equals(1, variable);
-    return 42;
-  });
-  Expect.equals(42, value);
-  Expect.equals(0, variable);
-}
-
-Future<void> testAsyncValue() async {
-  var value = await Isolate.run<int>(() async {
-    variable = 1;
-    return 42;
-  });
-  Expect.equals(42, value);
-  Expect.equals(0, variable);
-}
-
-Future<void> testError() async {
-  var e = await asyncExpectThrows<ArgumentError>(Isolate.run<int>(() {
-    variable = 1;
-    Error.throwWithStackTrace(error, stack);
-  }));
-  Expect.equals(42, e.invalidValue);
-  Expect.equals("name", e.name);
-  Expect.equals(0, variable);
-}
-
-Future<void> testAsyncError() async {
-  var e = await asyncExpectThrows<ArgumentError>(Isolate.run<int>(() async {
-    variable = 1;
-    Error.throwWithStackTrace(error, stack);
-  }));
-  Expect.equals(42, e.invalidValue);
-  Expect.equals("name", e.name);
-  Expect.equals(0, variable);
-}
-
-Future<void> testUncaughtError() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    unawaited(Future.error(error, stack)); // Uncaught error
-    await Completer().future; // Never completes.
-    return -1;
-  }));
-
-  Expect.type<RemoteError>(e);
-  Expect.equals(error.toString(), e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateHangs() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    await Completer<Never>().future; // Never completes.
-    // Isolate should end while hanging here, because its event loop is empty.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateKilled() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    Isolate.current.kill(); // Send kill request.
-    await Completer<Never>().future; // Never completes.
-    // Isolate should get killed while hanging here.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateExits() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    Isolate.exit(); // Dies here without sending anything back.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
diff --git a/tests/lib/isolate/spawn_uri__package_uri__test.dart b/tests/lib/isolate/spawn_uri__package_uri__test.dart
index d5efa2c..b212874 100644
--- a/tests/lib/isolate/spawn_uri__package_uri__test.dart
+++ b/tests/lib/isolate/spawn_uri__package_uri__test.dart
@@ -12,6 +12,7 @@
 main() async {
   // Run the Dart VM with or without:
   //     --packages=<packages|package_config>
+  final futures = <Future>[];
   for (final runWithPackagesArg in const [true, false]) {
     // Run the isolate with or without
     //    Isolate.spawnUri(..., packageConfig: <packages|package_config>)
@@ -20,15 +21,16 @@
       print('TEST spawnWithPackageConfig = $spawnWithPackageConfig ');
       final bool checkForResolveUri =
           runWithPackagesArg || !spawnWithPackageConfig;
-      await runDotPackagesTest(
-          runWithPackagesArg, spawnWithPackageConfig, checkForResolveUri);
+      futures.add(runDotPackagesTest(
+          runWithPackagesArg, spawnWithPackageConfig, checkForResolveUri));
       for (final optionalPackageUri in const [true, false]) {
         print('TEST optionalPackageUri = $optionalPackageUri');
-        await runPackageConfigTest(runWithPackagesArg, spawnWithPackageConfig,
-            optionalPackageUri, checkForResolveUri);
+        futures.add(runPackageConfigTest(runWithPackagesArg,
+            spawnWithPackageConfig, optionalPackageUri, checkForResolveUri));
       }
     }
   }
+  await Future.wait(futures);
 }
 
 Future runPackageConfigTest(bool withPackagesArg, bool spawnWithArg,
diff --git a/tests/lib/js/operator_test.dart b/tests/lib/js/operator_test.dart
new file mode 100644
index 0000000..cd688cc
--- /dev/null
+++ b/tests/lib/js/operator_test.dart
@@ -0,0 +1,170 @@
+// 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.
+
+@JS()
+library operator_test;
+
+import 'package:js/js.dart';
+
+@JS()
+class JSClass {
+  // https://dart.dev/guides/language/language-tour#_operators for the list of
+  // operators allowed by the language.
+  external void operator <(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator -(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator +(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator /(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~/(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator *(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator %(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator |(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ^(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator &(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <<(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator [](_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator []=(_, __);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~();
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external bool operator ==(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+}
+
+@JS()
+@anonymous
+class AnonymousClass {
+  external void operator <(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator -(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator +(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator /(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~/(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator *(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator %(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator |(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ^(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator &(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <<(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator [](_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator []=(_, __);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~();
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external bool operator ==(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+}
+
+@JS()
+class JSClassExtensions {}
+
+extension _ on JSClassExtensions {
+  // External operators in extensions are allowed for now, but don't work as
+  // intended. Specific operators will need to be allowlisted in the future.
+  // TODO(srujzs): Remove this test once we do that.
+  external void operator <(_);
+  external void operator >(_);
+  external void operator <=(_);
+  external void operator >=(_);
+  external void operator -(_);
+  external void operator +(_);
+  external void operator /(_);
+  external void operator ~/(_);
+  external void operator *(_);
+  external void operator %(_);
+  external void operator |(_);
+  external void operator ^(_);
+  external void operator &(_);
+  external void operator <<(_);
+  external void operator >>(_);
+  external void operator >>>(_);
+  external void operator [](_);
+  external void operator []=(_, __);
+  external void operator ~();
+  // No `==` as it's an `Object` method.
+}
+
+void main() {}
diff --git a/tests/lib/mirrors/invocation_fuzz_test.dart b/tests/lib/mirrors/invocation_fuzz_test.dart
index ed8ba09..13aec04 100644
--- a/tests/lib/mirrors/invocation_fuzz_test.dart
+++ b/tests/lib/mirrors/invocation_fuzz_test.dart
@@ -38,6 +38,10 @@
   // Don't call private methods in dart.async as they may circumvent the zoned
   // error handling below.
   new RegExp(r"^dart\.async\._.*$"),
+
+  // Don't try to invoke FFI Natives on simulator.
+  // TODO(http://dartbug.com/48365): Support FFI in simulators.
+  'dart._internal.FinalizerEntry.setExternalSize',
 ];
 
 bool isDenylisted(Symbol qualifiedSymbol) {
diff --git a/tests/lib_2/html/performance_api_test.dart b/tests/lib_2/html/performance_api_test.dart
index b29684c..46b9ee3 100644
--- a/tests/lib_2/html/performance_api_test.dart
+++ b/tests/lib_2/html/performance_api_test.dart
@@ -1,4 +1,3 @@
-
 // @dart = 2.9
 import 'dart:html';
 
@@ -28,5 +27,12 @@
         var loadEventStart = window.performance.timing.loadEventStart;
       }, expectation);
     });
+    test('markAndMeasure', () {
+      window.performance.mark('mark1');
+      window.performance.mark('mark2', {'detail': 'metadata'});
+      window.performance.measure('measure1');
+      window.performance.measure('measure2', 'mark1');
+      window.performance.measure('measure3', 'mark1', 'mark2');
+    });
   });
 }
diff --git a/tests/lib_2/isolate/isolate_run_test.dart b/tests/lib_2/isolate/isolate_run_test.dart
deleted file mode 100644
index d39c83d..0000000
--- a/tests/lib_2/isolate/isolate_run_test.dart
+++ /dev/null
@@ -1,117 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-import 'dart:isolate';
-import 'dart:async';
-import 'package:async_helper/async_helper.dart';
-import 'package:expect/expect.dart';
-
-void main() async {
-  asyncStart();
-  // Sending result back.
-  await testValue();
-  await testAsyncValue();
-  // Sending error from computation back.
-  await testError();
-  await testAsyncError();
-  // Sending uncaught async error back.
-  await testUncaughtError();
-  // Not sending anything back before isolate dies.
-  await testIsolateHangs();
-  await testIsolateKilled();
-  await testIsolateExits();
-  asyncEnd();
-}
-
-final StackTrace stack = StackTrace.fromString("Known Stacktrace");
-final ArgumentError error = ArgumentError.value(42, "name");
-
-var variable = 0;
-
-Future<void> testValue() async {
-  var value = await Isolate.run<int>(() {
-    variable = 1; // Changed in other isolate!
-    Expect.equals(1, variable);
-    return 42;
-  });
-  Expect.equals(42, value);
-  Expect.equals(0, variable);
-}
-
-Future<void> testAsyncValue() async {
-  var value = await Isolate.run<int>(() async {
-    variable = 1;
-    return 42;
-  });
-  Expect.equals(42, value);
-  Expect.equals(0, variable);
-}
-
-Future<void> testError() async {
-  var e = await asyncExpectThrows<ArgumentError>(Isolate.run<int>(() {
-    variable = 1;
-    Error.throwWithStackTrace(error, stack);
-  }));
-  Expect.equals(42, e.invalidValue);
-  Expect.equals("name", e.name);
-  Expect.equals(0, variable);
-}
-
-Future<void> testAsyncError() async {
-  var e = await asyncExpectThrows<ArgumentError>(Isolate.run<int>(() async {
-    variable = 1;
-    Error.throwWithStackTrace(error, stack);
-  }));
-  Expect.equals(42, e.invalidValue);
-  Expect.equals("name", e.name);
-  Expect.equals(0, variable);
-}
-
-Future<void> testUncaughtError() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    unawaited(Future.error(error, stack)); // Uncaught error
-    await Completer().future; // Never completes.
-    return -1;
-  }));
-
-  Expect.type<RemoteError>(e);
-  Expect.equals(error.toString(), e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateHangs() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    await Completer<Never>().future; // Never completes.
-    // Isolate should end while hanging here, because its event loop is empty.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateKilled() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    Isolate.current.kill(); // Send kill request.
-    await Completer<Never>().future; // Never completes.
-    // Isolate should get killed while hanging here.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
-
-Future<void> testIsolateExits() async {
-  var e = await asyncExpectThrows<RemoteError>(Isolate.run<int>(() async {
-    variable = 1;
-    Isolate.exit(); // Dies here without sending anything back.
-  }));
-  Expect.type<RemoteError>(e);
-  Expect.equals("Computation ended without result", e.toString());
-  Expect.equals(0, variable);
-}
diff --git a/tests/lib_2/isolate/spawn_uri__package_uri__test.dart b/tests/lib_2/isolate/spawn_uri__package_uri__test.dart
index 46d4a14..23d4707 100644
--- a/tests/lib_2/isolate/spawn_uri__package_uri__test.dart
+++ b/tests/lib_2/isolate/spawn_uri__package_uri__test.dart
@@ -14,6 +14,7 @@
 main() async {
   // Run the Dart VM with or without:
   //     --packages=<packages|package_config>
+  final futures = <Future>[];
   for (final runWithPackagesArg in const [true, false]) {
     // Run the isolate with or without
     //    Isolate.spawnUri(..., packageConfig: <packages|package_config>)
@@ -22,15 +23,16 @@
       print('TEST spawnWithPackageConfig = $spawnWithPackageConfig ');
       final bool checkForResolveUri =
           runWithPackagesArg || !spawnWithPackageConfig;
-      await runDotPackagesTest(
-          runWithPackagesArg, spawnWithPackageConfig, checkForResolveUri);
+      futures.add(runDotPackagesTest(
+          runWithPackagesArg, spawnWithPackageConfig, checkForResolveUri));
       for (final optionalPackageUri in const [true, false]) {
         print('TEST optionalPackageUri = $optionalPackageUri');
-        await runPackageConfigTest(runWithPackagesArg, spawnWithPackageConfig,
-            optionalPackageUri, checkForResolveUri);
+        futures.add(runPackageConfigTest(runWithPackagesArg,
+            spawnWithPackageConfig, optionalPackageUri, checkForResolveUri));
       }
     }
   }
+  await Future.wait(futures);
 }
 
 Future runPackageConfigTest(bool withPackagesArg, bool spawnWithArg,
diff --git a/tests/lib_2/js/operator_test.dart b/tests/lib_2/js/operator_test.dart
new file mode 100644
index 0000000..cd688cc
--- /dev/null
+++ b/tests/lib_2/js/operator_test.dart
@@ -0,0 +1,170 @@
+// 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.
+
+@JS()
+library operator_test;
+
+import 'package:js/js.dart';
+
+@JS()
+class JSClass {
+  // https://dart.dev/guides/language/language-tour#_operators for the list of
+  // operators allowed by the language.
+  external void operator <(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator -(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator +(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator /(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~/(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator *(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator %(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator |(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ^(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator &(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <<(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator [](_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator []=(_, __);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~();
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external bool operator ==(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+}
+
+@JS()
+@anonymous
+class AnonymousClass {
+  external void operator <(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >=(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator -(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator +(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator /(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~/(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator *(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator %(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator |(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ^(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator &(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator <<(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator >>>(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator [](_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator []=(_, __);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external void operator ~();
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+  external bool operator ==(_);
+  //                     ^
+  // [web] JS interop classes do not support operator methods.
+}
+
+@JS()
+class JSClassExtensions {}
+
+extension _ on JSClassExtensions {
+  // External operators in extensions are allowed for now, but don't work as
+  // intended. Specific operators will need to be allowlisted in the future.
+  // TODO(srujzs): Remove this test once we do that.
+  external void operator <(_);
+  external void operator >(_);
+  external void operator <=(_);
+  external void operator >=(_);
+  external void operator -(_);
+  external void operator +(_);
+  external void operator /(_);
+  external void operator ~/(_);
+  external void operator *(_);
+  external void operator %(_);
+  external void operator |(_);
+  external void operator ^(_);
+  external void operator &(_);
+  external void operator <<(_);
+  external void operator >>(_);
+  external void operator >>>(_);
+  external void operator [](_);
+  external void operator []=(_, __);
+  external void operator ~();
+  // No `==` as it's an `Object` method.
+}
+
+void main() {}
diff --git a/tests/lib_2/mirrors/invocation_fuzz_test.dart b/tests/lib_2/mirrors/invocation_fuzz_test.dart
index 68360d1..d81a174 100644
--- a/tests/lib_2/mirrors/invocation_fuzz_test.dart
+++ b/tests/lib_2/mirrors/invocation_fuzz_test.dart
@@ -40,6 +40,10 @@
   // Don't call private methods in dart.async as they may circumvent the zoned
   // error handling below.
   new RegExp(r"^dart\.async\._.*$"),
+
+  // Don't try to invoke FFI Natives on simulator.
+  // TODO(http://dartbug.com/48365): Support FFI in simulators.
+  'dart._internal.FinalizerEntry.setExternalSize',
 ];
 
 bool isDenylisted(Symbol qualifiedSymbol) {
diff --git a/tests/modular/issue226161959/b.dart b/tests/modular/issue226161959/b.dart
new file mode 100644
index 0000000..fdcd5b5
--- /dev/null
+++ b/tests/modular/issue226161959/b.dart
@@ -0,0 +1,9 @@
+// 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 'm.dart';
+
+class B extends A {}
+
+class C extends B with M {}
diff --git a/tests/modular/issue226161959/m.dart b/tests/modular/issue226161959/m.dart
new file mode 100644
index 0000000..56cb29a
--- /dev/null
+++ b/tests/modular/issue226161959/m.dart
@@ -0,0 +1,12 @@
+// 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.
+
+class A {
+  String foo() => 'A';
+}
+
+mixin M on A {
+  @override
+  String foo() => 'M' + super.foo();
+}
diff --git a/tests/modular/issue226161959/main.dart b/tests/modular/issue226161959/main.dart
new file mode 100644
index 0000000..4315bee
--- /dev/null
+++ b/tests/modular/issue226161959/main.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+import 'b.dart';
+
+main() {
+  C c = C();
+  Expect.equals('MA', c.foo());
+}
diff --git a/tests/modular/issue226161959/modules.yaml b/tests/modular/issue226161959/modules.yaml
new file mode 100644
index 0000000..31e04b2
--- /dev/null
+++ b/tests/modular/issue226161959/modules.yaml
@@ -0,0 +1,8 @@
+# Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+dependencies:
+  main: [b, m, expect]
+  b: [m]
+  m: []
diff --git a/tests/standalone/io/file_test.dart b/tests/standalone/io/file_test.dart
index d78e512..95ad2e4 100644
--- a/tests/standalone/io/file_test.dart
+++ b/tests/standalone/io/file_test.dart
@@ -756,6 +756,7 @@
     try {
       openedFile.truncateSync(-5);
     } on FileSystemException catch (ex) {
+      Expect.notEquals(ex.osError!.errorCode, 0);
       exceptionCaught = true;
     } on Exception catch (ex) {
       wrongExceptionCaught = true;
diff --git a/tests/standalone/io/secure_socket_allow_renegotiation_test.dart b/tests/standalone/io/secure_socket_allow_renegotiation_test.dart
new file mode 100644
index 0000000..f2f5716
--- /dev/null
+++ b/tests/standalone/io/secure_socket_allow_renegotiation_test.dart
@@ -0,0 +1,81 @@
+// 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.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// VMOptions=--short_socket_write
+// VMOptions=--short_socket_read --short_socket_write
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
+//
+// It is not possible to initiate TLS-renegotiation from a pure-Dart server so
+// just test that the `allowLegacyUnsafeRenegotiation` in `SecurityContext`
+// does not affect connections that do *not* do renegotiation.
+
+import "dart:async";
+import 'dart:convert';
+import "dart:io";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+late InternetAddress HOST;
+
+String localFile(path) => Platform.script.resolve(path).toFilePath();
+
+SecurityContext serverContext = new SecurityContext()
+  ..useCertificateChain(localFile('certificates/server_chain.pem'))
+  ..usePrivateKey(localFile('certificates/server_key.pem'),
+      password: 'dartdart');
+
+Future<SecureServerSocket> startEchoServer() {
+  return SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
+    server.listen((SecureSocket client) {
+      client.fold<List<int>>(
+          <int>[], (message, data) => message..addAll(data)).then((message) {
+        client.add(message);
+        client.close();
+      });
+    });
+    return server;
+  });
+}
+
+testSuccess(SecureServerSocket server) async {
+  // NOTE: this test only verifies that `allowLegacyUnsafeRenegotiation` does
+  // not cause incorrect behavior when enabled - the server does *not* actually
+  // trigger TLS renegotiation.
+  SecurityContext clientContext = new SecurityContext()
+    ..allowLegacyUnsafeRenegotiation = true
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  await SecureSocket.connect(HOST, server.port, context: clientContext)
+      .then((socket) async {
+    socket.write("Hello server.");
+    socket.close();
+    Expect.isTrue(await utf8.decoder.bind(socket).contains("Hello server."));
+  });
+}
+
+testProperty() {
+  SecurityContext context = new SecurityContext();
+  Expect.isFalse(context.allowLegacyUnsafeRenegotiation);
+  context.allowLegacyUnsafeRenegotiation = true;
+  Expect.isTrue(context.allowLegacyUnsafeRenegotiation);
+  context.allowLegacyUnsafeRenegotiation = false;
+  Expect.isFalse(context.allowLegacyUnsafeRenegotiation);
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  testProperty();
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index 2a096b9..d63011a 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -641,7 +641,7 @@
 }
 
 Future<RawServerSocket> createTestServer() async {
-  final server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  final server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   return server
     ..listen((client) {
       String receivedData = "";
@@ -649,16 +649,16 @@
       client.writeEventsEnabled = false;
       client.listen((event) {
         switch (event) {
-          case RawSocketEvent.READ:
+          case RawSocketEvent.read:
             assert(client.available() > 0);
             final buffer = client.read(200)!;
             receivedData += String.fromCharCodes(buffer);
             break;
-          case RawSocketEvent.READ_CLOSED:
+          case RawSocketEvent.readClosed:
             client.close();
             server.close();
             break;
-          case RawSocketEvent.CLOSED:
+          case RawSocketEvent.closed:
             Expect.equals(
                 "Hello, client 1!\nHello, client 2!\nHello, server!\n",
                 receivedData);
diff --git a/tests/standalone_2/io/file_test.dart b/tests/standalone_2/io/file_test.dart
index a3a4823..851d2c3 100644
--- a/tests/standalone_2/io/file_test.dart
+++ b/tests/standalone_2/io/file_test.dart
@@ -760,6 +760,7 @@
     try {
       openedFile.truncateSync(-5);
     } on FileSystemException catch (ex) {
+      Expect.notEquals(ex.osError.errorCode, 0);
       exceptionCaught = true;
     } on Exception catch (ex) {
       wrongExceptionCaught = true;
diff --git a/tests/standalone_2/io/secure_socket_allow_renegotiation_test.dart b/tests/standalone_2/io/secure_socket_allow_renegotiation_test.dart
new file mode 100644
index 0000000..16790e1
--- /dev/null
+++ b/tests/standalone_2/io/secure_socket_allow_renegotiation_test.dart
@@ -0,0 +1,83 @@
+// 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.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// VMOptions=--short_socket_write
+// VMOptions=--short_socket_read --short_socket_write
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
+//
+// It is not possible to initiate TLS-renegotiation from a pure-Dart server so
+// just test that the `allowLegacyUnsafeRenegotiation` in `SecurityContext`
+// does not affect connections that do *not* do renegotiation.
+
+// @dart = 2.9
+
+import "dart:async";
+import 'dart:convert';
+import "dart:io";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+InternetAddress HOST;
+
+String localFile(path) => Platform.script.resolve(path).toFilePath();
+
+SecurityContext serverContext = new SecurityContext()
+  ..useCertificateChain(localFile('certificates/server_chain.pem'))
+  ..usePrivateKey(localFile('certificates/server_key.pem'),
+      password: 'dartdart');
+
+Future<SecureServerSocket> startEchoServer() {
+  return SecureServerSocket.bind(HOST, 0, serverContext).then((server) {
+    server.listen((SecureSocket client) {
+      client.fold<List<int>>(
+          <int>[], (message, data) => message..addAll(data)).then((message) {
+        client.add(message);
+        client.close();
+      });
+    });
+    return server;
+  });
+}
+
+testSuccess(SecureServerSocket server) async {
+  // NOTE: this test only verifies that `allowLegacyUnsafeRenegotiation` does
+  // not cause incorrect behavior when enabled - the server does *not* actually
+  // trigger TLS renegotiation.
+  SecurityContext clientContext = new SecurityContext()
+    ..allowLegacyUnsafeRenegotiation = true
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  await SecureSocket.connect(HOST, server.port, context: clientContext)
+      .then((socket) async {
+    socket.write("Hello server.");
+    socket.close();
+    Expect.isTrue(await utf8.decoder.bind(socket).contains("Hello server."));
+  });
+}
+
+testProperty() {
+  SecurityContext context = new SecurityContext();
+  Expect.isFalse(context.allowLegacyUnsafeRenegotiation);
+  context.allowLegacyUnsafeRenegotiation = true;
+  Expect.isTrue(context.allowLegacyUnsafeRenegotiation);
+  context.allowLegacyUnsafeRenegotiation = false;
+  Expect.isFalse(context.allowLegacyUnsafeRenegotiation);
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  testProperty();
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index ecc6b3d..228552a 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -637,7 +637,7 @@
 }
 
 Future<RawServerSocket> createTestServer() async {
-  final server = await RawServerSocket.bind(InternetAddress.LOOPBACK_IP_V4, 0);
+  final server = await RawServerSocket.bind(InternetAddress.loopbackIPv4, 0);
   return server
     ..listen((client) {
       String receivedData = "";
@@ -645,16 +645,16 @@
       client.writeEventsEnabled = false;
       client.listen((event) {
         switch (event) {
-          case RawSocketEvent.READ:
+          case RawSocketEvent.read:
             assert(client.available() > 0);
             final buffer = client.read(200);
             receivedData += String.fromCharCodes(buffer);
             break;
-          case RawSocketEvent.READ_CLOSED:
+          case RawSocketEvent.readClosed:
             client.close();
             server.close();
             break;
-          case RawSocketEvent.CLOSED:
+          case RawSocketEvent.closed:
             Expect.equals(
                 "Hello, client 1!\nHello, client 2!\nHello, server!\n",
                 receivedData);
diff --git a/tests/web/32853_test.dart b/tests/web/32853_test.dart
deleted file mode 100644
index ccf8dab..0000000
--- a/tests/web/32853_test.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2018, 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.
-
-// dart2jsOptions=--strong
-
-// Regression test for issue 32853.
-
-
-int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
-
-main() {
-  int Function<T extends Comparable<T>>(T, T) f = foo;
-  print(f<num>(1, 2));
-}
\ No newline at end of file
diff --git a/tests/web/deferred/trusted_script_url/lib.dart b/tests/web/deferred/trusted_script_url/lib.dart
new file mode 100644
index 0000000..d4933a8
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/lib.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.
+
+import 'package:expect/expect.dart';
+
+class _Thing {}
+
+Object create() => _Thing();
+
+void check(Object o) {
+  Expect.isTrue(o is _Thing);
+}
diff --git a/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart b/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart
new file mode 100644
index 0000000..b7c0f71
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart
@@ -0,0 +1,16 @@
+// 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:expect/expect.dart';
+
+import 'lib.dart' deferred as lib;
+
+void main() {
+  lib.loadLibrary().then((_) {
+    lib.check(dontInline(lib.create()));
+  });
+}
+
+@pragma('dart2js:noInline')
+Object dontInline(Object x) => x;
diff --git a/tests/web/deferred/trusted_script_url/trusted_script_url_test.html b/tests/web/deferred/trusted_script_url/trusted_script_url_test.html
new file mode 100644
index 0000000..6d8895a
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/trusted_script_url_test.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="dart.unittest" content="full-stack-traces">
+  <!-- The following line forces the use of TrustedScriptURLs.
+       This is the key difference between this file and
+       default generated html file.
+  -->
+  <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
+  <title> trusted_script_url_test </title>
+  <style>
+     .unittest-table { font-family:monospace; border:1px; }
+     .unittest-pass { background: #6b3;}
+     .unittest-fail { background: #d55;}
+     .unittest-error { background: #a11;}
+  </style>
+</head>
+<body>
+  <h1> Running trusted_script_url_test </h1>
+  <script type="text/javascript"
+      src="/root_dart/pkg/test_runner/lib/src/test_controller.js"></script>
+  %TEST_SCRIPTS%
+</body>
+</html>
diff --git a/tests/web/regress/if_method_call_test.dart b/tests/web/if_method_call_test.dart
similarity index 100%
rename from tests/web/regress/if_method_call_test.dart
rename to tests/web/if_method_call_test.dart
diff --git a/tests/web/10216a_test.dart b/tests/web/regress/issue/10216a_test.dart
similarity index 100%
rename from tests/web/10216a_test.dart
rename to tests/web/regress/issue/10216a_test.dart
diff --git a/tests/web/10216b_test.dart b/tests/web/regress/issue/10216b_test.dart
similarity index 100%
rename from tests/web/10216b_test.dart
rename to tests/web/regress/issue/10216b_test.dart
diff --git a/tests/web/11673_test.dart b/tests/web/regress/issue/11673_test.dart
similarity index 100%
rename from tests/web/11673_test.dart
rename to tests/web/regress/issue/11673_test.dart
diff --git a/tests/web/12320_test.dart b/tests/web/regress/issue/12320_test.dart
similarity index 100%
rename from tests/web/12320_test.dart
rename to tests/web/regress/issue/12320_test.dart
diff --git a/tests/web/12_test.dart b/tests/web/regress/issue/12_test.dart
similarity index 100%
rename from tests/web/12_test.dart
rename to tests/web/regress/issue/12_test.dart
diff --git a/tests/web/16400_test.dart b/tests/web/regress/issue/16400_test.dart
similarity index 100%
rename from tests/web/16400_test.dart
rename to tests/web/regress/issue/16400_test.dart
diff --git a/tests/web/16407_test.dart b/tests/web/regress/issue/16407_test.dart
similarity index 100%
rename from tests/web/16407_test.dart
rename to tests/web/regress/issue/16407_test.dart
diff --git a/tests/web/16967_test.dart b/tests/web/regress/issue/16967_test.dart
similarity index 100%
rename from tests/web/16967_test.dart
rename to tests/web/regress/issue/16967_test.dart
diff --git a/tests/web/17094_test.dart b/tests/web/regress/issue/17094_test.dart
similarity index 100%
rename from tests/web/17094_test.dart
rename to tests/web/regress/issue/17094_test.dart
diff --git a/tests/web/17645_test.dart b/tests/web/regress/issue/17645_test.dart
similarity index 100%
rename from tests/web/17645_test.dart
rename to tests/web/regress/issue/17645_test.dart
diff --git a/tests/web/17856_test.dart b/tests/web/regress/issue/17856_test.dart
similarity index 100%
rename from tests/web/17856_test.dart
rename to tests/web/regress/issue/17856_test.dart
diff --git a/tests/web/18175_test.dart b/tests/web/regress/issue/18175_test.dart
similarity index 100%
rename from tests/web/18175_test.dart
rename to tests/web/regress/issue/18175_test.dart
diff --git a/tests/web/18383_test.dart b/tests/web/regress/issue/18383_test.dart
similarity index 100%
rename from tests/web/18383_test.dart
rename to tests/web/regress/issue/18383_test.dart
diff --git a/tests/web/regress/190814734a_test.dart b/tests/web/regress/issue/190814734a_test.dart
similarity index 100%
rename from tests/web/regress/190814734a_test.dart
rename to tests/web/regress/issue/190814734a_test.dart
diff --git a/tests/web/regress/190814734b_test.dart b/tests/web/regress/issue/190814734b_test.dart
similarity index 100%
rename from tests/web/regress/190814734b_test.dart
rename to tests/web/regress/issue/190814734b_test.dart
diff --git a/tests/web/19191_test.dart b/tests/web/regress/issue/19191_test.dart
similarity index 100%
rename from tests/web/19191_test.dart
rename to tests/web/regress/issue/19191_test.dart
diff --git a/tests/web/regress/192964907a_test.dart b/tests/web/regress/issue/192964907a_test.dart
similarity index 100%
rename from tests/web/regress/192964907a_test.dart
rename to tests/web/regress/issue/192964907a_test.dart
diff --git a/tests/web/regress/192964907b_test.dart b/tests/web/regress/issue/192964907b_test.dart
similarity index 100%
rename from tests/web/regress/192964907b_test.dart
rename to tests/web/regress/issue/192964907b_test.dart
diff --git a/tests/web/21351_test.dart b/tests/web/regress/issue/21351_test.dart
similarity index 100%
rename from tests/web/21351_test.dart
rename to tests/web/regress/issue/21351_test.dart
diff --git a/tests/web/21579_test.dart b/tests/web/regress/issue/21579_test.dart
similarity index 100%
rename from tests/web/21579_test.dart
rename to tests/web/regress/issue/21579_test.dart
diff --git a/tests/web/22487_test.dart b/tests/web/regress/issue/22487_test.dart
similarity index 100%
rename from tests/web/22487_test.dart
rename to tests/web/regress/issue/22487_test.dart
diff --git a/tests/web/22776_test.dart b/tests/web/regress/issue/22776_test.dart
similarity index 100%
rename from tests/web/22776_test.dart
rename to tests/web/regress/issue/22776_test.dart
diff --git a/tests/web/22868_test.dart b/tests/web/regress/issue/22868_test.dart
similarity index 100%
rename from tests/web/22868_test.dart
rename to tests/web/regress/issue/22868_test.dart
diff --git a/tests/web/22917_test.dart b/tests/web/regress/issue/22917_test.dart
similarity index 100%
rename from tests/web/22917_test.dart
rename to tests/web/regress/issue/22917_test.dart
diff --git a/tests/web/23404_test.dart b/tests/web/regress/issue/23404_test.dart
similarity index 100%
rename from tests/web/23404_test.dart
rename to tests/web/regress/issue/23404_test.dart
diff --git a/tests/web/23432_test.dart b/tests/web/regress/issue/23432_test.dart
similarity index 100%
rename from tests/web/23432_test.dart
rename to tests/web/regress/issue/23432_test.dart
diff --git a/tests/web/23486_helper.dart b/tests/web/regress/issue/23486_helper.dart
similarity index 100%
rename from tests/web/23486_helper.dart
rename to tests/web/regress/issue/23486_helper.dart
diff --git a/tests/web/23486_test.dart b/tests/web/regress/issue/23486_test.dart
similarity index 100%
rename from tests/web/23486_test.dart
rename to tests/web/regress/issue/23486_test.dart
diff --git a/tests/web/23804_test.dart b/tests/web/regress/issue/23804_test.dart
similarity index 100%
rename from tests/web/23804_test.dart
rename to tests/web/regress/issue/23804_test.dart
diff --git a/tests/web/23828_test.dart b/tests/web/regress/issue/23828_test.dart
similarity index 100%
rename from tests/web/23828_test.dart
rename to tests/web/regress/issue/23828_test.dart
diff --git a/tests/web/26243_test.dart b/tests/web/regress/issue/26243_test.dart
similarity index 100%
rename from tests/web/26243_test.dart
rename to tests/web/regress/issue/26243_test.dart
diff --git a/tests/web/27198_test.dart b/tests/web/regress/issue/27198_test.dart
similarity index 100%
rename from tests/web/27198_test.dart
rename to tests/web/regress/issue/27198_test.dart
diff --git a/tests/web/27199_test.dart b/tests/web/regress/issue/27199_test.dart
similarity index 100%
rename from tests/web/27199_test.dart
rename to tests/web/regress/issue/27199_test.dart
diff --git a/tests/web/27323_test.dart b/tests/web/regress/issue/27323_test.dart
similarity index 100%
rename from tests/web/27323_test.dart
rename to tests/web/regress/issue/27323_test.dart
diff --git a/tests/web/27354_test.dart b/tests/web/regress/issue/27354_test.dart
similarity index 100%
rename from tests/web/27354_test.dart
rename to tests/web/regress/issue/27354_test.dart
diff --git a/tests/web/28749_test.dart b/tests/web/regress/issue/28749_test.dart
similarity index 100%
rename from tests/web/28749_test.dart
rename to tests/web/regress/issue/28749_test.dart
diff --git a/tests/web/28919_test.dart b/tests/web/regress/issue/28919_test.dart
similarity index 100%
rename from tests/web/28919_test.dart
rename to tests/web/regress/issue/28919_test.dart
diff --git a/tests/web/29130_test.dart b/tests/web/regress/issue/29130_test.dart
similarity index 100%
rename from tests/web/29130_test.dart
rename to tests/web/regress/issue/29130_test.dart
diff --git a/tests/web/regression_2913_test.dart b/tests/web/regress/issue/2913_test.dart
similarity index 100%
rename from tests/web/regression_2913_test.dart
rename to tests/web/regress/issue/2913_test.dart
diff --git a/tests/web/31803_test.dart b/tests/web/regress/issue/31803_test.dart
similarity index 100%
rename from tests/web/31803_test.dart
rename to tests/web/regress/issue/31803_test.dart
diff --git a/tests/web/regress_32069_test.dart b/tests/web/regress/issue/32069_test.dart
similarity index 100%
rename from tests/web/regress_32069_test.dart
rename to tests/web/regress/issue/32069_test.dart
diff --git a/tests/web/32770a_test.dart b/tests/web/regress/issue/32770a_test.dart
similarity index 100%
rename from tests/web/32770a_test.dart
rename to tests/web/regress/issue/32770a_test.dart
diff --git a/tests/web/32770b_test.dart b/tests/web/regress/issue/32770b_test.dart
similarity index 100%
rename from tests/web/32770b_test.dart
rename to tests/web/regress/issue/32770b_test.dart
diff --git a/tests/web/32770c_test.dart b/tests/web/regress/issue/32770c_test.dart
similarity index 100%
rename from tests/web/32770c_test.dart
rename to tests/web/regress/issue/32770c_test.dart
diff --git a/tests/web/32774_test.dart b/tests/web/regress/issue/32774_test.dart
similarity index 100%
rename from tests/web/32774_test.dart
rename to tests/web/regress/issue/32774_test.dart
diff --git a/tests/web/32828_test.dart b/tests/web/regress/issue/32828_test.dart
similarity index 100%
rename from tests/web/32828_test.dart
rename to tests/web/regress/issue/32828_test.dart
diff --git a/tests/web/regress/issue/32853_test.dart b/tests/web/regress/issue/32853_test.dart
new file mode 100644
index 0000000..8c32ce6
--- /dev/null
+++ b/tests/web/regress/issue/32853_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2018, 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.
+
+// dart2jsOptions=--strong
+
+// Regression test for issue 32853.
+
+int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
+
+main() {
+  int Function<T extends Comparable<T>>(T, T) f = foo;
+  print(f<num>(1, 2));
+}
diff --git a/tests/web/32928_test.dart b/tests/web/regress/issue/32928_test.dart
similarity index 100%
rename from tests/web/32928_test.dart
rename to tests/web/regress/issue/32928_test.dart
diff --git a/tests/web/32969_test.dart b/tests/web/regress/issue/32969_test.dart
similarity index 100%
rename from tests/web/32969_test.dart
rename to tests/web/regress/issue/32969_test.dart
diff --git a/tests/web/32997a_lib.dart b/tests/web/regress/issue/32997a_lib.dart
similarity index 100%
rename from tests/web/32997a_lib.dart
rename to tests/web/regress/issue/32997a_lib.dart
diff --git a/tests/web/32997a_test.dart b/tests/web/regress/issue/32997a_test.dart
similarity index 100%
rename from tests/web/32997a_test.dart
rename to tests/web/regress/issue/32997a_test.dart
diff --git a/tests/web/32997b_lib.dart b/tests/web/regress/issue/32997b_lib.dart
similarity index 100%
rename from tests/web/32997b_lib.dart
rename to tests/web/regress/issue/32997b_lib.dart
diff --git a/tests/web/32997b_test.dart b/tests/web/regress/issue/32997b_test.dart
similarity index 100%
rename from tests/web/32997b_test.dart
rename to tests/web/regress/issue/32997b_test.dart
diff --git a/tests/web/33296_test.dart b/tests/web/regress/issue/33296_test.dart
similarity index 100%
rename from tests/web/33296_test.dart
rename to tests/web/regress/issue/33296_test.dart
diff --git a/tests/web/33572_test.dart b/tests/web/regress/issue/33572_test.dart
similarity index 100%
rename from tests/web/33572_test.dart
rename to tests/web/regress/issue/33572_test.dart
diff --git a/tests/web/33_test.dart b/tests/web/regress/issue/33_test.dart
similarity index 100%
rename from tests/web/33_test.dart
rename to tests/web/regress/issue/33_test.dart
diff --git a/tests/web/34156_test.dart b/tests/web/regress/issue/34156_test.dart
similarity index 100%
rename from tests/web/34156_test.dart
rename to tests/web/regress/issue/34156_test.dart
diff --git a/tests/web/34701_test.dart b/tests/web/regress/issue/34701_test.dart
similarity index 100%
rename from tests/web/34701_test.dart
rename to tests/web/regress/issue/34701_test.dart
diff --git a/tests/web/35341_test.dart b/tests/web/regress/issue/35341_test.dart
similarity index 100%
rename from tests/web/35341_test.dart
rename to tests/web/regress/issue/35341_test.dart
diff --git a/tests/web/35356_test.dart b/tests/web/regress/issue/35356_test.dart
similarity index 100%
rename from tests/web/35356_test.dart
rename to tests/web/regress/issue/35356_test.dart
diff --git a/tests/web/35853_test.dart b/tests/web/regress/issue/35853_test.dart
similarity index 100%
rename from tests/web/35853_test.dart
rename to tests/web/regress/issue/35853_test.dart
diff --git a/tests/web/35965a_test.dart b/tests/web/regress/issue/35965a_test.dart
similarity index 100%
rename from tests/web/35965a_test.dart
rename to tests/web/regress/issue/35965a_test.dart
diff --git a/tests/web/regress_36222_test.dart b/tests/web/regress/issue/36222_test.dart
similarity index 100%
rename from tests/web/regress_36222_test.dart
rename to tests/web/regress/issue/36222_test.dart
diff --git a/tests/web/issue36562_test.dart b/tests/web/regress/issue/36562_test.dart
similarity index 100%
rename from tests/web/issue36562_test.dart
rename to tests/web/regress/issue/36562_test.dart
diff --git a/tests/web/37494_test.dart b/tests/web/regress/issue/37494_test.dart
similarity index 100%
rename from tests/web/37494_test.dart
rename to tests/web/regress/issue/37494_test.dart
diff --git a/tests/web/37576_test.dart b/tests/web/regress/issue/37576_test.dart
similarity index 100%
rename from tests/web/37576_test.dart
rename to tests/web/regress/issue/37576_test.dart
diff --git a/tests/web/38005_test.dart b/tests/web/regress/issue/38005_test.dart
similarity index 100%
rename from tests/web/38005_test.dart
rename to tests/web/regress/issue/38005_test.dart
diff --git a/tests/web/38949_test.dart b/tests/web/regress/issue/38949_test.dart
similarity index 100%
rename from tests/web/38949_test.dart
rename to tests/web/regress/issue/38949_test.dart
diff --git a/tests/web/3_test.dart b/tests/web/regress/issue/3_test.dart
similarity index 100%
rename from tests/web/3_test.dart
rename to tests/web/regress/issue/3_test.dart
diff --git a/tests/web/40152a_test.dart b/tests/web/regress/issue/40152a_test.dart
similarity index 100%
rename from tests/web/40152a_test.dart
rename to tests/web/regress/issue/40152a_test.dart
diff --git a/tests/web/regress_40349_test.dart b/tests/web/regress/issue/40349_test.dart
similarity index 100%
rename from tests/web/regress_40349_test.dart
rename to tests/web/regress/issue/40349_test.dart
diff --git a/tests/web/40902_test.dart b/tests/web/regress/issue/40902_test.dart
similarity index 100%
rename from tests/web/40902_test.dart
rename to tests/web/regress/issue/40902_test.dart
diff --git a/tests/web/41449a_test.dart b/tests/web/regress/issue/41449a_test.dart
similarity index 100%
rename from tests/web/41449a_test.dart
rename to tests/web/regress/issue/41449a_test.dart
diff --git a/tests/web/41449b_test.dart b/tests/web/regress/issue/41449b_test.dart
similarity index 100%
rename from tests/web/41449b_test.dart
rename to tests/web/regress/issue/41449b_test.dart
diff --git a/tests/web/41449c_test.dart b/tests/web/regress/issue/41449c_test.dart
similarity index 100%
rename from tests/web/41449c_test.dart
rename to tests/web/regress/issue/41449c_test.dart
diff --git a/tests/web/41449d_test.dart b/tests/web/regress/issue/41449d_test.dart
similarity index 100%
rename from tests/web/41449d_test.dart
rename to tests/web/regress/issue/41449d_test.dart
diff --git a/tests/web/regress/41781_test.dart b/tests/web/regress/issue/41781_test.dart
similarity index 100%
rename from tests/web/regress/41781_test.dart
rename to tests/web/regress/issue/41781_test.dart
diff --git a/tests/web/42088_test.dart b/tests/web/regress/issue/42088_test.dart
similarity index 100%
rename from tests/web/42088_test.dart
rename to tests/web/regress/issue/42088_test.dart
diff --git a/tests/web/42189_test.dart b/tests/web/regress/issue/42189_test.dart
similarity index 100%
rename from tests/web/42189_test.dart
rename to tests/web/regress/issue/42189_test.dart
diff --git a/tests/web/regress_42281_test.dart b/tests/web/regress/issue/42281_test.dart
similarity index 100%
rename from tests/web/regress_42281_test.dart
rename to tests/web/regress/issue/42281_test.dart
diff --git a/tests/web/42501_test.dart b/tests/web/regress/issue/42501_test.dart
similarity index 100%
rename from tests/web/42501_test.dart
rename to tests/web/regress/issue/42501_test.dart
diff --git a/tests/web/42531_test.dart b/tests/web/regress/issue/42531_test.dart
similarity index 100%
rename from tests/web/42531_test.dart
rename to tests/web/regress/issue/42531_test.dart
diff --git a/tests/web/regress/43520_safari_test.dart b/tests/web/regress/issue/43520_safari_test.dart
similarity index 100%
rename from tests/web/regress/43520_safari_test.dart
rename to tests/web/regress/issue/43520_safari_test.dart
diff --git a/tests/web/43_test.dart b/tests/web/regress/issue/43_test.dart
similarity index 100%
rename from tests/web/43_test.dart
rename to tests/web/regress/issue/43_test.dart
diff --git a/tests/web/regress/4434_lib.dart b/tests/web/regress/issue/4434_lib.dart
similarity index 100%
rename from tests/web/regress/4434_lib.dart
rename to tests/web/regress/issue/4434_lib.dart
diff --git a/tests/web/regress/4434_test.dart b/tests/web/regress/issue/4434_test.dart
similarity index 100%
rename from tests/web/regress/4434_test.dart
rename to tests/web/regress/issue/4434_test.dart
diff --git a/tests/web/regress/44818_test.dart b/tests/web/regress/issue/44818_test.dart
similarity index 100%
rename from tests/web/regress/44818_test.dart
rename to tests/web/regress/issue/44818_test.dart
diff --git a/tests/web/regress/4492_test.dart b/tests/web/regress/issue/4492_test.dart
similarity index 100%
rename from tests/web/regress/4492_test.dart
rename to tests/web/regress/issue/4492_test.dart
diff --git a/tests/web/45046_test.dart b/tests/web/regress/issue/45046_test.dart
similarity index 100%
rename from tests/web/45046_test.dart
rename to tests/web/regress/issue/45046_test.dart
diff --git a/tests/web/regress/4515_1_test.dart b/tests/web/regress/issue/4515_1_test.dart
similarity index 100%
rename from tests/web/regress/4515_1_test.dart
rename to tests/web/regress/issue/4515_1_test.dart
diff --git a/tests/web/regress/4515_2_test.dart b/tests/web/regress/issue/4515_2_test.dart
similarity index 100%
rename from tests/web/regress/4515_2_test.dart
rename to tests/web/regress/issue/4515_2_test.dart
diff --git a/tests/web/regress/4515_3_test.dart b/tests/web/regress/issue/4515_3_test.dart
similarity index 100%
rename from tests/web/regress/4515_3_test.dart
rename to tests/web/regress/issue/4515_3_test.dart
diff --git a/tests/web/regress/45413_test.dart b/tests/web/regress/issue/45413_test.dart
similarity index 100%
rename from tests/web/regress/45413_test.dart
rename to tests/web/regress/issue/45413_test.dart
diff --git a/tests/web/regress/45943_test.dart b/tests/web/regress/issue/45943_test.dart
similarity index 100%
rename from tests/web/regress/45943_test.dart
rename to tests/web/regress/issue/45943_test.dart
diff --git a/tests/web/regress/4639_test.dart b/tests/web/regress/issue/4639_test.dart
similarity index 100%
rename from tests/web/regress/4639_test.dart
rename to tests/web/regress/issue/4639_test.dart
diff --git a/tests/web/regress/46417_test.dart b/tests/web/regress/issue/46417_test.dart
similarity index 100%
rename from tests/web/regress/46417_test.dart
rename to tests/web/regress/issue/46417_test.dart
diff --git a/tests/web/regress/46589_test.dart b/tests/web/regress/issue/46589_test.dart
similarity index 100%
rename from tests/web/regress/46589_test.dart
rename to tests/web/regress/issue/46589_test.dart
diff --git a/tests/web/47691_test.dart b/tests/web/regress/issue/47691_test.dart
similarity index 100%
rename from tests/web/47691_test.dart
rename to tests/web/regress/issue/47691_test.dart
diff --git a/tests/web/regress/48317_test.dart b/tests/web/regress/issue/48317_test.dart
similarity index 100%
rename from tests/web/regress/48317_test.dart
rename to tests/web/regress/issue/48317_test.dart
diff --git a/tests/web/48383_test.dart b/tests/web/regress/issue/48383_test.dart
similarity index 100%
rename from tests/web/48383_test.dart
rename to tests/web/regress/issue/48383_test.dart
diff --git a/tests/web/regress/issue/48422_test.dart b/tests/web/regress/issue/48422_test.dart
new file mode 100644
index 0000000..ea7886c
--- /dev/null
+++ b/tests/web/regress/issue/48422_test.dart
@@ -0,0 +1,51 @@
+// 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:expect/expect.dart';
+
+void main() {
+  testTryFinally();
+  testTryCatchFinally();
+}
+
+void testTryFinally() {
+  callback(Map<String, dynamic> m) {
+    Expect.isNull(m['foo']);
+  }
+
+  var val;
+  try {
+    try {
+      val = <String, dynamic>{};
+    } catch (_) {
+      val = {}.cast<String, dynamic>();
+    }
+    // This `return` means we consider the `try` block to abort. Nevertheless,
+    // the results of its inference must flow to the `finally`.
+    return;
+  } finally {
+    callback(val);
+  }
+}
+
+void testTryCatchFinally() {
+  callback(Map<String, dynamic> m) {
+    Expect.isNull(m['foo']);
+  }
+
+  var val;
+  try {
+    try {
+      val = <String, dynamic>{};
+    } catch (_) {
+      val = {}.cast<String, dynamic>();
+    }
+    // This `return` means we consider the `try` block to abort. Nevertheless,
+    // the results of its inference must flow to the `finally`.
+    return;
+  } catch (_) {
+  } finally {
+    callback(val);
+  }
+}
diff --git a/tests/web/48442_test.dart b/tests/web/regress/issue/48442_test.dart
similarity index 100%
rename from tests/web/48442_test.dart
rename to tests/web/regress/issue/48442_test.dart
diff --git a/tests/web/7_test.dart b/tests/web/regress/issue/7_test.dart
similarity index 100%
rename from tests/web/7_test.dart
rename to tests/web/regress/issue/7_test.dart
diff --git a/tests/web/881_test.dart b/tests/web/regress/issue/881_test.dart
similarity index 100%
rename from tests/web/881_test.dart
rename to tests/web/regress/issue/881_test.dart
diff --git a/tests/web/regress_null_aware_test.dart b/tests/web/regress/null_aware_test.dart
similarity index 100%
rename from tests/web/regress_null_aware_test.dart
rename to tests/web/regress/null_aware_test.dart
diff --git a/tests/web/regress/regression_type_variables_is_test.dart b/tests/web/regress/type_variables_is_test.dart
similarity index 100%
rename from tests/web/regress/regression_type_variables_is_test.dart
rename to tests/web/regress/type_variables_is_test.dart
diff --git a/tests/web/regress/scope_info_field_loop_test.dart b/tests/web/scope_info_field_loop_test.dart
similarity index 100%
rename from tests/web/regress/scope_info_field_loop_test.dart
rename to tests/web/scope_info_field_loop_test.dart
diff --git a/tests/web/regress/unused_generator_type_parameter_test.dart b/tests/web/unused_generator_type_parameter_test.dart
similarity index 100%
rename from tests/web/regress/unused_generator_type_parameter_test.dart
rename to tests/web/unused_generator_type_parameter_test.dart
diff --git a/tests/web/wasm/js_util_test.dart b/tests/web/wasm/js_util_test.dart
new file mode 100644
index 0000000..a5b31c1
--- /dev/null
+++ b/tests/web/wasm/js_util_test.dart
@@ -0,0 +1,85 @@
+// 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:js_util_wasm';
+
+import 'package:expect/expect.dart';
+
+void createObjectTest() {
+  JSValue o = newObject();
+  Expect.isFalse(hasProperty(o, 'foo'));
+  Expect.equals('bar', setProperty(o, 'foo', 'bar'.toJS()).toString());
+  Expect.isTrue(hasProperty(o, 'foo'));
+  Expect.equals('bar', getProperty(o, 'foo').toString());
+}
+
+// Unfortunately, lists do not currently compare identically.
+void _expectListEquals(List<Object?> l, List<Object?> r) {
+  Expect.equals(l.length, r.length);
+  for (int i = 0; i < l.length; i++) {
+    Expect.equals(l[i], r[i]);
+  }
+}
+
+void evalAndConstructTest() {
+  eval(r'''
+    function JSClass(c) {
+      this.c = c;
+      this.sum = (a, b) => {
+        return a + b + this.c;
+      }
+      this.list = ['a', 'b', 'c'];
+    }
+    globalThis.JSClass = JSClass;
+  ''');
+  JSValue gt = globalThis();
+  JSValue jsClass = callConstructorVarArgs(gt, 'JSClass', ['world!'.toJS()]);
+  Expect.equals(
+      'hello world!',
+      callMethodVarArgs(jsClass, 'sum', ['hello'.toJS(), ' '.toJS()])
+          .toString());
+  _expectListEquals(
+      ['a', 'b', 'c'], getProperty(jsClass, 'list')!.toObjectList());
+}
+
+class Foo {
+  final int i;
+  Foo(this.i);
+}
+
+void dartObjectRoundTripTest() {
+  JSValue o = newObject();
+  setProperty(o, 'foo', Foo(4).toJS());
+  Object foo = getProperty(o, 'foo')!.toObject();
+  Expect.equals(4, (foo as Foo).i);
+}
+
+void deepConversionsTest() {
+  // Dart to JS.
+  Expect.isNull(dartify(jsify(null)));
+  Expect.equals(true, dartify(jsify(true)));
+  Expect.equals(2.0, dartify(jsify(2.0)));
+  Expect.equals('foo', dartify(jsify('foo')));
+  _expectListEquals(
+      ['a', 'b', 'c'], dartify(jsify(['a', 'b', 'c'])) as List<Object?>);
+
+  // JS to Dart.
+  eval(r'''
+    globalThis.a = null;
+    globalThis.b = 'foo';
+    globalThis.c = ['a', 'b', 'c'];
+  ''');
+  JSValue gt = globalThis();
+  Expect.isNull(dartify(getProperty(gt, 'a')));
+  Expect.equals('foo', dartify(getProperty(gt, 'b')));
+  _expectListEquals(
+      ['a', 'b', 'c'], dartify(getProperty(gt, 'c')) as List<Object?>);
+}
+
+void main() {
+  createObjectTest();
+  evalAndConstructTest();
+  dartObjectRoundTripTest();
+  deepConversionsTest();
+}
diff --git a/tests/web/web.status b/tests/web/web.status
index c54cd80..d20e136 100644
--- a/tests/web/web.status
+++ b/tests/web/web.status
@@ -5,6 +5,9 @@
 [ $compiler != dart2js ]
 dummy_compiler_test: SkipByDesign # Issue 30773. Test should be migrated as a unit test of dart2js, is only intended to test self-hosting.
 
+[ $compiler != dart2wasm ]
+wasm/*: SkipByDesign
+
 [ $runtime == jsshell ]
 deferred/load_in_correct_order_test: SkipByDesign # jsshell preamble does not support this test.
 
diff --git a/tests/web_2/32853_test.dart b/tests/web_2/32853_test.dart
deleted file mode 100644
index f90fb71..0000000
--- a/tests/web_2/32853_test.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// @dart = 2.7
-
-// dart2jsOptions=--strong
-
-// Regression test for issue 32853.
-
-
-int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
-
-main() {
-  int Function<T extends Comparable<T>>(T, T) f = foo;
-  print(f<num>(1, 2));
-}
\ No newline at end of file
diff --git a/tests/web_2/regress/if_method_call_test.dart b/tests/web_2/if_method_call_test.dart
similarity index 100%
rename from tests/web_2/regress/if_method_call_test.dart
rename to tests/web_2/if_method_call_test.dart
diff --git a/tests/web_2/10216a_test.dart b/tests/web_2/regress/issue/10216a_test.dart
similarity index 100%
rename from tests/web_2/10216a_test.dart
rename to tests/web_2/regress/issue/10216a_test.dart
diff --git a/tests/web_2/10216b_test.dart b/tests/web_2/regress/issue/10216b_test.dart
similarity index 100%
rename from tests/web_2/10216b_test.dart
rename to tests/web_2/regress/issue/10216b_test.dart
diff --git a/tests/web_2/11673_test.dart b/tests/web_2/regress/issue/11673_test.dart
similarity index 100%
rename from tests/web_2/11673_test.dart
rename to tests/web_2/regress/issue/11673_test.dart
diff --git a/tests/web_2/12320_test.dart b/tests/web_2/regress/issue/12320_test.dart
similarity index 100%
rename from tests/web_2/12320_test.dart
rename to tests/web_2/regress/issue/12320_test.dart
diff --git a/tests/web_2/12_test.dart b/tests/web_2/regress/issue/12_test.dart
similarity index 100%
rename from tests/web_2/12_test.dart
rename to tests/web_2/regress/issue/12_test.dart
diff --git a/tests/web_2/16400_test.dart b/tests/web_2/regress/issue/16400_test.dart
similarity index 100%
rename from tests/web_2/16400_test.dart
rename to tests/web_2/regress/issue/16400_test.dart
diff --git a/tests/web_2/16407_test.dart b/tests/web_2/regress/issue/16407_test.dart
similarity index 100%
rename from tests/web_2/16407_test.dart
rename to tests/web_2/regress/issue/16407_test.dart
diff --git a/tests/web_2/16967_test.dart b/tests/web_2/regress/issue/16967_test.dart
similarity index 100%
rename from tests/web_2/16967_test.dart
rename to tests/web_2/regress/issue/16967_test.dart
diff --git a/tests/web_2/17094_test.dart b/tests/web_2/regress/issue/17094_test.dart
similarity index 100%
rename from tests/web_2/17094_test.dart
rename to tests/web_2/regress/issue/17094_test.dart
diff --git a/tests/web_2/17645_test.dart b/tests/web_2/regress/issue/17645_test.dart
similarity index 100%
rename from tests/web_2/17645_test.dart
rename to tests/web_2/regress/issue/17645_test.dart
diff --git a/tests/web_2/17856_test.dart b/tests/web_2/regress/issue/17856_test.dart
similarity index 100%
rename from tests/web_2/17856_test.dart
rename to tests/web_2/regress/issue/17856_test.dart
diff --git a/tests/web_2/regress/183227419_test.dart b/tests/web_2/regress/issue/183227419_test.dart
similarity index 100%
rename from tests/web_2/regress/183227419_test.dart
rename to tests/web_2/regress/issue/183227419_test.dart
diff --git a/tests/web_2/18383_test.dart b/tests/web_2/regress/issue/18383_test.dart
similarity index 100%
rename from tests/web_2/18383_test.dart
rename to tests/web_2/regress/issue/18383_test.dart
diff --git a/tests/web_2/19191_test.dart b/tests/web_2/regress/issue/19191_test.dart
similarity index 100%
rename from tests/web_2/19191_test.dart
rename to tests/web_2/regress/issue/19191_test.dart
diff --git a/tests/web_2/21351_test.dart b/tests/web_2/regress/issue/21351_test.dart
similarity index 100%
rename from tests/web_2/21351_test.dart
rename to tests/web_2/regress/issue/21351_test.dart
diff --git a/tests/web_2/21579_test.dart b/tests/web_2/regress/issue/21579_test.dart
similarity index 100%
rename from tests/web_2/21579_test.dart
rename to tests/web_2/regress/issue/21579_test.dart
diff --git a/tests/web_2/22487_test.dart b/tests/web_2/regress/issue/22487_test.dart
similarity index 100%
rename from tests/web_2/22487_test.dart
rename to tests/web_2/regress/issue/22487_test.dart
diff --git a/tests/web_2/22776_test.dart b/tests/web_2/regress/issue/22776_test.dart
similarity index 100%
rename from tests/web_2/22776_test.dart
rename to tests/web_2/regress/issue/22776_test.dart
diff --git a/tests/web_2/22868_test.dart b/tests/web_2/regress/issue/22868_test.dart
similarity index 100%
rename from tests/web_2/22868_test.dart
rename to tests/web_2/regress/issue/22868_test.dart
diff --git a/tests/web_2/22917_test.dart b/tests/web_2/regress/issue/22917_test.dart
similarity index 100%
rename from tests/web_2/22917_test.dart
rename to tests/web_2/regress/issue/22917_test.dart
diff --git a/tests/web_2/23404_test.dart b/tests/web_2/regress/issue/23404_test.dart
similarity index 100%
rename from tests/web_2/23404_test.dart
rename to tests/web_2/regress/issue/23404_test.dart
diff --git a/tests/web_2/23432_test.dart b/tests/web_2/regress/issue/23432_test.dart
similarity index 100%
rename from tests/web_2/23432_test.dart
rename to tests/web_2/regress/issue/23432_test.dart
diff --git a/tests/web_2/23486_helper.dart b/tests/web_2/regress/issue/23486_helper.dart
similarity index 100%
rename from tests/web_2/23486_helper.dart
rename to tests/web_2/regress/issue/23486_helper.dart
diff --git a/tests/web_2/23486_test.dart b/tests/web_2/regress/issue/23486_test.dart
similarity index 100%
rename from tests/web_2/23486_test.dart
rename to tests/web_2/regress/issue/23486_test.dart
diff --git a/tests/web_2/23804_test.dart b/tests/web_2/regress/issue/23804_test.dart
similarity index 100%
rename from tests/web_2/23804_test.dart
rename to tests/web_2/regress/issue/23804_test.dart
diff --git a/tests/web_2/23828_test.dart b/tests/web_2/regress/issue/23828_test.dart
similarity index 100%
rename from tests/web_2/23828_test.dart
rename to tests/web_2/regress/issue/23828_test.dart
diff --git a/tests/web_2/26243_test.dart b/tests/web_2/regress/issue/26243_test.dart
similarity index 100%
rename from tests/web_2/26243_test.dart
rename to tests/web_2/regress/issue/26243_test.dart
diff --git a/tests/web_2/27198_test.dart b/tests/web_2/regress/issue/27198_test.dart
similarity index 100%
rename from tests/web_2/27198_test.dart
rename to tests/web_2/regress/issue/27198_test.dart
diff --git a/tests/web_2/27199_test.dart b/tests/web_2/regress/issue/27199_test.dart
similarity index 100%
rename from tests/web_2/27199_test.dart
rename to tests/web_2/regress/issue/27199_test.dart
diff --git a/tests/web_2/27323_test.dart b/tests/web_2/regress/issue/27323_test.dart
similarity index 100%
rename from tests/web_2/27323_test.dart
rename to tests/web_2/regress/issue/27323_test.dart
diff --git a/tests/web_2/27354_test.dart b/tests/web_2/regress/issue/27354_test.dart
similarity index 100%
rename from tests/web_2/27354_test.dart
rename to tests/web_2/regress/issue/27354_test.dart
diff --git a/tests/web_2/28749_test.dart b/tests/web_2/regress/issue/28749_test.dart
similarity index 100%
rename from tests/web_2/28749_test.dart
rename to tests/web_2/regress/issue/28749_test.dart
diff --git a/tests/web_2/28919_test.dart b/tests/web_2/regress/issue/28919_test.dart
similarity index 100%
rename from tests/web_2/28919_test.dart
rename to tests/web_2/regress/issue/28919_test.dart
diff --git a/tests/web_2/29130_test.dart b/tests/web_2/regress/issue/29130_test.dart
similarity index 100%
rename from tests/web_2/29130_test.dart
rename to tests/web_2/regress/issue/29130_test.dart
diff --git a/tests/web_2/regression_2913_test.dart b/tests/web_2/regress/issue/2913_test.dart
similarity index 100%
rename from tests/web_2/regression_2913_test.dart
rename to tests/web_2/regress/issue/2913_test.dart
diff --git a/tests/web_2/31803_test.dart b/tests/web_2/regress/issue/31803_test.dart
similarity index 100%
rename from tests/web_2/31803_test.dart
rename to tests/web_2/regress/issue/31803_test.dart
diff --git a/tests/web_2/regress_32069_test.dart b/tests/web_2/regress/issue/32069_test.dart
similarity index 100%
rename from tests/web_2/regress_32069_test.dart
rename to tests/web_2/regress/issue/32069_test.dart
diff --git a/tests/web_2/32770a_test.dart b/tests/web_2/regress/issue/32770a_test.dart
similarity index 100%
rename from tests/web_2/32770a_test.dart
rename to tests/web_2/regress/issue/32770a_test.dart
diff --git a/tests/web_2/32770b_test.dart b/tests/web_2/regress/issue/32770b_test.dart
similarity index 100%
rename from tests/web_2/32770b_test.dart
rename to tests/web_2/regress/issue/32770b_test.dart
diff --git a/tests/web_2/32770c_test.dart b/tests/web_2/regress/issue/32770c_test.dart
similarity index 100%
rename from tests/web_2/32770c_test.dart
rename to tests/web_2/regress/issue/32770c_test.dart
diff --git a/tests/web_2/32774_test.dart b/tests/web_2/regress/issue/32774_test.dart
similarity index 100%
rename from tests/web_2/32774_test.dart
rename to tests/web_2/regress/issue/32774_test.dart
diff --git a/tests/web_2/32828_test.dart b/tests/web_2/regress/issue/32828_test.dart
similarity index 100%
rename from tests/web_2/32828_test.dart
rename to tests/web_2/regress/issue/32828_test.dart
diff --git a/tests/web_2/regress/issue/32853_test.dart b/tests/web_2/regress/issue/32853_test.dart
new file mode 100644
index 0000000..80819b3
--- /dev/null
+++ b/tests/web_2/regress/issue/32853_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
+// dart2jsOptions=--strong
+
+// Regression test for issue 32853.
+
+int foo<T extends Comparable<T>>(T a, T b) => a.compareTo(b);
+
+main() {
+  int Function<T extends Comparable<T>>(T, T) f = foo;
+  print(f<num>(1, 2));
+}
diff --git a/tests/web_2/32928_test.dart b/tests/web_2/regress/issue/32928_test.dart
similarity index 100%
rename from tests/web_2/32928_test.dart
rename to tests/web_2/regress/issue/32928_test.dart
diff --git a/tests/web_2/32969_test.dart b/tests/web_2/regress/issue/32969_test.dart
similarity index 100%
rename from tests/web_2/32969_test.dart
rename to tests/web_2/regress/issue/32969_test.dart
diff --git a/tests/web_2/32997a_lib.dart b/tests/web_2/regress/issue/32997a_lib.dart
similarity index 100%
rename from tests/web_2/32997a_lib.dart
rename to tests/web_2/regress/issue/32997a_lib.dart
diff --git a/tests/web_2/32997a_test.dart b/tests/web_2/regress/issue/32997a_test.dart
similarity index 100%
rename from tests/web_2/32997a_test.dart
rename to tests/web_2/regress/issue/32997a_test.dart
diff --git a/tests/web_2/32997b_lib.dart b/tests/web_2/regress/issue/32997b_lib.dart
similarity index 100%
rename from tests/web_2/32997b_lib.dart
rename to tests/web_2/regress/issue/32997b_lib.dart
diff --git a/tests/web_2/32997b_test.dart b/tests/web_2/regress/issue/32997b_test.dart
similarity index 100%
rename from tests/web_2/32997b_test.dart
rename to tests/web_2/regress/issue/32997b_test.dart
diff --git a/tests/web_2/33296_test.dart b/tests/web_2/regress/issue/33296_test.dart
similarity index 100%
rename from tests/web_2/33296_test.dart
rename to tests/web_2/regress/issue/33296_test.dart
diff --git a/tests/web_2/33572_test.dart b/tests/web_2/regress/issue/33572_test.dart
similarity index 100%
rename from tests/web_2/33572_test.dart
rename to tests/web_2/regress/issue/33572_test.dart
diff --git a/tests/web_2/33_test.dart b/tests/web_2/regress/issue/33_test.dart
similarity index 100%
rename from tests/web_2/33_test.dart
rename to tests/web_2/regress/issue/33_test.dart
diff --git a/tests/web_2/34156_test.dart b/tests/web_2/regress/issue/34156_test.dart
similarity index 100%
rename from tests/web_2/34156_test.dart
rename to tests/web_2/regress/issue/34156_test.dart
diff --git a/tests/web_2/34701_test.dart b/tests/web_2/regress/issue/34701_test.dart
similarity index 100%
rename from tests/web_2/34701_test.dart
rename to tests/web_2/regress/issue/34701_test.dart
diff --git a/tests/web_2/35341_test.dart b/tests/web_2/regress/issue/35341_test.dart
similarity index 100%
rename from tests/web_2/35341_test.dart
rename to tests/web_2/regress/issue/35341_test.dart
diff --git a/tests/web_2/35356_test.dart b/tests/web_2/regress/issue/35356_test.dart
similarity index 100%
rename from tests/web_2/35356_test.dart
rename to tests/web_2/regress/issue/35356_test.dart
diff --git a/tests/web_2/35853_test.dart b/tests/web_2/regress/issue/35853_test.dart
similarity index 100%
rename from tests/web_2/35853_test.dart
rename to tests/web_2/regress/issue/35853_test.dart
diff --git a/tests/web_2/35965a_test.dart b/tests/web_2/regress/issue/35965a_test.dart
similarity index 100%
rename from tests/web_2/35965a_test.dart
rename to tests/web_2/regress/issue/35965a_test.dart
diff --git a/tests/web_2/regress_36222_test.dart b/tests/web_2/regress/issue/36222_test.dart
similarity index 100%
rename from tests/web_2/regress_36222_test.dart
rename to tests/web_2/regress/issue/36222_test.dart
diff --git a/tests/web_2/37494_test.dart b/tests/web_2/regress/issue/37494_test.dart
similarity index 100%
rename from tests/web_2/37494_test.dart
rename to tests/web_2/regress/issue/37494_test.dart
diff --git a/tests/web_2/37576_test.dart b/tests/web_2/regress/issue/37576_test.dart
similarity index 100%
rename from tests/web_2/37576_test.dart
rename to tests/web_2/regress/issue/37576_test.dart
diff --git a/tests/web_2/38005_test.dart b/tests/web_2/regress/issue/38005_test.dart
similarity index 100%
rename from tests/web_2/38005_test.dart
rename to tests/web_2/regress/issue/38005_test.dart
diff --git a/tests/web_2/38949_test.dart b/tests/web_2/regress/issue/38949_test.dart
similarity index 100%
rename from tests/web_2/38949_test.dart
rename to tests/web_2/regress/issue/38949_test.dart
diff --git a/tests/web_2/3_test.dart b/tests/web_2/regress/issue/3_test.dart
similarity index 100%
rename from tests/web_2/3_test.dart
rename to tests/web_2/regress/issue/3_test.dart
diff --git a/tests/web_2/40152a_test.dart b/tests/web_2/regress/issue/40152a_test.dart
similarity index 100%
rename from tests/web_2/40152a_test.dart
rename to tests/web_2/regress/issue/40152a_test.dart
diff --git a/tests/web_2/regress_40349_test.dart b/tests/web_2/regress/issue/40349_test.dart
similarity index 100%
rename from tests/web_2/regress_40349_test.dart
rename to tests/web_2/regress/issue/40349_test.dart
diff --git a/tests/web_2/40902_test.dart b/tests/web_2/regress/issue/40902_test.dart
similarity index 100%
rename from tests/web_2/40902_test.dart
rename to tests/web_2/regress/issue/40902_test.dart
diff --git a/tests/web_2/41449a_test.dart b/tests/web_2/regress/issue/41449a_test.dart
similarity index 100%
rename from tests/web_2/41449a_test.dart
rename to tests/web_2/regress/issue/41449a_test.dart
diff --git a/tests/web_2/41449b_test.dart b/tests/web_2/regress/issue/41449b_test.dart
similarity index 100%
rename from tests/web_2/41449b_test.dart
rename to tests/web_2/regress/issue/41449b_test.dart
diff --git a/tests/web_2/41449c_test.dart b/tests/web_2/regress/issue/41449c_test.dart
similarity index 100%
rename from tests/web_2/41449c_test.dart
rename to tests/web_2/regress/issue/41449c_test.dart
diff --git a/tests/web_2/41449d_test.dart b/tests/web_2/regress/issue/41449d_test.dart
similarity index 100%
rename from tests/web_2/41449d_test.dart
rename to tests/web_2/regress/issue/41449d_test.dart
diff --git a/tests/web_2/regress/41781_test.dart b/tests/web_2/regress/issue/41781_test.dart
similarity index 100%
rename from tests/web_2/regress/41781_test.dart
rename to tests/web_2/regress/issue/41781_test.dart
diff --git a/tests/web_2/42088_test.dart b/tests/web_2/regress/issue/42088_test.dart
similarity index 100%
rename from tests/web_2/42088_test.dart
rename to tests/web_2/regress/issue/42088_test.dart
diff --git a/tests/web_2/42189_test.dart b/tests/web_2/regress/issue/42189_test.dart
similarity index 100%
rename from tests/web_2/42189_test.dart
rename to tests/web_2/regress/issue/42189_test.dart
diff --git a/tests/web_2/regress_42281_test.dart b/tests/web_2/regress/issue/42281_test.dart
similarity index 100%
rename from tests/web_2/regress_42281_test.dart
rename to tests/web_2/regress/issue/42281_test.dart
diff --git a/tests/web_2/42501_test.dart b/tests/web_2/regress/issue/42501_test.dart
similarity index 100%
rename from tests/web_2/42501_test.dart
rename to tests/web_2/regress/issue/42501_test.dart
diff --git a/tests/web_2/42531_test.dart b/tests/web_2/regress/issue/42531_test.dart
similarity index 100%
rename from tests/web_2/42531_test.dart
rename to tests/web_2/regress/issue/42531_test.dart
diff --git a/tests/web_2/regress/43520_safari_test.dart b/tests/web_2/regress/issue/43520_safari_test.dart
similarity index 100%
rename from tests/web_2/regress/43520_safari_test.dart
rename to tests/web_2/regress/issue/43520_safari_test.dart
diff --git a/tests/web_2/43_test.dart b/tests/web_2/regress/issue/43_test.dart
similarity index 100%
rename from tests/web_2/43_test.dart
rename to tests/web_2/regress/issue/43_test.dart
diff --git a/tests/web_2/regress/4434_lib.dart b/tests/web_2/regress/issue/4434_lib.dart
similarity index 100%
rename from tests/web_2/regress/4434_lib.dart
rename to tests/web_2/regress/issue/4434_lib.dart
diff --git a/tests/web_2/regress/4434_test.dart b/tests/web_2/regress/issue/4434_test.dart
similarity index 100%
rename from tests/web_2/regress/4434_test.dart
rename to tests/web_2/regress/issue/4434_test.dart
diff --git a/tests/web_2/regress/44818_test.dart b/tests/web_2/regress/issue/44818_test.dart
similarity index 100%
rename from tests/web_2/regress/44818_test.dart
rename to tests/web_2/regress/issue/44818_test.dart
diff --git a/tests/web_2/regress/4492_test.dart b/tests/web_2/regress/issue/4492_test.dart
similarity index 100%
rename from tests/web_2/regress/4492_test.dart
rename to tests/web_2/regress/issue/4492_test.dart
diff --git a/tests/web_2/45046_test.dart b/tests/web_2/regress/issue/45046_test.dart
similarity index 100%
rename from tests/web_2/45046_test.dart
rename to tests/web_2/regress/issue/45046_test.dart
diff --git a/tests/web_2/regress/4515_1_test.dart b/tests/web_2/regress/issue/4515_1_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_1_test.dart
rename to tests/web_2/regress/issue/4515_1_test.dart
diff --git a/tests/web_2/regress/4515_2_test.dart b/tests/web_2/regress/issue/4515_2_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_2_test.dart
rename to tests/web_2/regress/issue/4515_2_test.dart
diff --git a/tests/web_2/regress/4515_3_test.dart b/tests/web_2/regress/issue/4515_3_test.dart
similarity index 100%
rename from tests/web_2/regress/4515_3_test.dart
rename to tests/web_2/regress/issue/4515_3_test.dart
diff --git a/tests/web_2/regress/45943_test.dart b/tests/web_2/regress/issue/45943_test.dart
similarity index 100%
rename from tests/web_2/regress/45943_test.dart
rename to tests/web_2/regress/issue/45943_test.dart
diff --git a/tests/web_2/regress/4639_test.dart b/tests/web_2/regress/issue/4639_test.dart
similarity index 100%
rename from tests/web_2/regress/4639_test.dart
rename to tests/web_2/regress/issue/4639_test.dart
diff --git a/tests/web_2/regress/46417_test.dart b/tests/web_2/regress/issue/46417_test.dart
similarity index 100%
rename from tests/web_2/regress/46417_test.dart
rename to tests/web_2/regress/issue/46417_test.dart
diff --git a/tests/web_2/regress/46589_test.dart b/tests/web_2/regress/issue/46589_test.dart
similarity index 100%
rename from tests/web_2/regress/46589_test.dart
rename to tests/web_2/regress/issue/46589_test.dart
diff --git a/tests/web_2/47691_test.dart b/tests/web_2/regress/issue/47691_test.dart
similarity index 100%
rename from tests/web_2/47691_test.dart
rename to tests/web_2/regress/issue/47691_test.dart
diff --git a/tests/web_2/regress/48317_test.dart b/tests/web_2/regress/issue/48317_test.dart
similarity index 100%
rename from tests/web_2/regress/48317_test.dart
rename to tests/web_2/regress/issue/48317_test.dart
diff --git a/tests/web_2/48383_test.dart b/tests/web_2/regress/issue/48383_test.dart
similarity index 100%
rename from tests/web_2/48383_test.dart
rename to tests/web_2/regress/issue/48383_test.dart
diff --git a/tests/web_2/regress/issue/48422_test.dart b/tests/web_2/regress/issue/48422_test.dart
new file mode 100644
index 0000000..ea7886c
--- /dev/null
+++ b/tests/web_2/regress/issue/48422_test.dart
@@ -0,0 +1,51 @@
+// 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:expect/expect.dart';
+
+void main() {
+  testTryFinally();
+  testTryCatchFinally();
+}
+
+void testTryFinally() {
+  callback(Map<String, dynamic> m) {
+    Expect.isNull(m['foo']);
+  }
+
+  var val;
+  try {
+    try {
+      val = <String, dynamic>{};
+    } catch (_) {
+      val = {}.cast<String, dynamic>();
+    }
+    // This `return` means we consider the `try` block to abort. Nevertheless,
+    // the results of its inference must flow to the `finally`.
+    return;
+  } finally {
+    callback(val);
+  }
+}
+
+void testTryCatchFinally() {
+  callback(Map<String, dynamic> m) {
+    Expect.isNull(m['foo']);
+  }
+
+  var val;
+  try {
+    try {
+      val = <String, dynamic>{};
+    } catch (_) {
+      val = {}.cast<String, dynamic>();
+    }
+    // This `return` means we consider the `try` block to abort. Nevertheless,
+    // the results of its inference must flow to the `finally`.
+    return;
+  } catch (_) {
+  } finally {
+    callback(val);
+  }
+}
diff --git a/tests/web_2/48442_test.dart b/tests/web_2/regress/issue/48442_test.dart
similarity index 100%
rename from tests/web_2/48442_test.dart
rename to tests/web_2/regress/issue/48442_test.dart
diff --git a/tests/web_2/7_test.dart b/tests/web_2/regress/issue/7_test.dart
similarity index 100%
rename from tests/web_2/7_test.dart
rename to tests/web_2/regress/issue/7_test.dart
diff --git a/tests/web_2/881_test.dart b/tests/web_2/regress/issue/881_test.dart
similarity index 100%
rename from tests/web_2/881_test.dart
rename to tests/web_2/regress/issue/881_test.dart
diff --git a/tests/web_2/regress/null_aware_test.dart b/tests/web_2/regress/null_aware_test.dart
new file mode 100644
index 0000000..2b3e177
--- /dev/null
+++ b/tests/web_2/regress/null_aware_test.dart
@@ -0,0 +1,19 @@
+// 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.md file.
+
+// @dart = 2.7
+
+// Regression test for failure on CFE null-aware encoding.
+
+class Class {
+  Map<String, Set<String>> map;
+
+  List<String> method(String node, Set<String> set) => set.add(node)
+      ? [node, ...?map[node]?.expand((node) => method(node, set))?.toList()]
+      : [];
+}
+
+main(args) {
+  if (args != null && args.isNotEmpty) new Class().method('', <String>{});
+}
diff --git a/tests/web_2/regress/regression_type_variables_is_test.dart b/tests/web_2/regress/type_variables_is_test.dart
similarity index 100%
rename from tests/web_2/regress/regression_type_variables_is_test.dart
rename to tests/web_2/regress/type_variables_is_test.dart
diff --git a/tests/web_2/regress_null_aware_test.dart b/tests/web_2/regress_null_aware_test.dart
deleted file mode 100644
index 68cbcdc..0000000
--- a/tests/web_2/regress_null_aware_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// 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.md file.
-
-// @dart = 2.7
-
-// Regression test for failure on CFE null-aware encoding.
-
-class Class {
-  Map<String, Set<String>> map;
-
-  List<String> method(String node, Set<String> set) =>
-      set.add(node)
-          ? [
-              node,
-              ...?map[node]
-                  ?.expand((node) => method(node, set))
-                  ?.toList()
-            ]
-          : [];
-}
-
-main(args) {
-  if (args != null && args.isNotEmpty) new Class().method('', <String>{});
-}
diff --git a/tests/web_2/regress/scope_info_field_loop_test.dart b/tests/web_2/scope_info_field_loop_test.dart
similarity index 100%
rename from tests/web_2/regress/scope_info_field_loop_test.dart
rename to tests/web_2/scope_info_field_loop_test.dart
diff --git a/tests/web_2/regress/unused_generator_type_parameter_test.dart b/tests/web_2/unused_generator_type_parameter_test.dart
similarity index 100%
rename from tests/web_2/regress/unused_generator_type_parameter_test.dart
rename to tests/web_2/unused_generator_type_parameter_test.dart
diff --git a/third_party/pkg_tested/OWNERS b/third_party/pkg_tested/OWNERS
new file mode 100644
index 0000000..e1e4bf0
--- /dev/null
+++ b/third_party/pkg_tested/OWNERS
@@ -0,0 +1,2 @@
+# Test status file
+per-file pkg_tested.status=file:/tools/OWNERS_ENG
diff --git a/tools/OWNERS b/tools/OWNERS
index bc4a8dd..fefa34e 100644
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -6,5 +6,6 @@
 per-file OWNERS_FOUNDATION=file:OWNERS_FOUNDATION
 per-file OWNERS_INFRA=file:OWNERS_INFRA
 per-file OWNERS_PRODUCT=file:OWNERS_PRODUCT
+per-file OWNERS_PUB=file:OWNERS_PUB
 per-file OWNERS_VM=file:OWNERS_VM
 per-file OWNERS_WEB=file:OWNERS_WEB
diff --git a/tools/OWNERS_ENG b/tools/OWNERS_ENG
index 6857872..ef746ec 100644
--- a/tools/OWNERS_ENG
+++ b/tools/OWNERS_ENG
@@ -3,5 +3,6 @@
 file:OWNERS_CFE
 file:OWNERS_FOUNDATION
 file:OWNERS_INFRA
+file:OWNERS_PUB
 file:OWNERS_VM
 file:OWNERS_WEB
diff --git a/tools/OWNERS_PUB b/tools/OWNERS_PUB
new file mode 100644
index 0000000..9242dc8
--- /dev/null
+++ b/tools/OWNERS_PUB
@@ -0,0 +1,3 @@
+jonasfj@google.com
+sigurdm@google.com
+zarah@google.com
diff --git a/tools/VERSION b/tools/VERSION
index 1139bac..349b693 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 182
-PRERELEASE_PATCH 2
\ No newline at end of file
+PRERELEASE 266
+PRERELEASE_PATCH 1
\ No newline at end of file
diff --git a/tools/bots/bot_utils.py b/tools/bots/bot_utils.py
index 58f136d..0b82701 100755
--- a/tools/bots/bot_utils.py
+++ b/tools/bots/bot_utils.py
@@ -37,6 +37,22 @@
     'x64': 'x64',
     'arm': 'arm',
     'arm64': 'arm64',
+    'riscv64': 'riscv64',
+}
+
+SYSTEM_TO_CIPD = {
+    'win32': 'windows',
+    'windows': 'windows',
+    'linux': 'linux',
+    'macos': 'mac',
+}
+
+ARCH_TO_CIPD = {
+    'ia32': '386',
+    'x64': 'amd64',
+    'arm': 'arm6l',
+    'arm64': 'arm64',
+    'riscv64': 'riscv64',
 }
 
 
diff --git a/tools/bots/dart_sdk.py b/tools/bots/dart_sdk.py
index 934906f..87ab3b6 100755
--- a/tools/bots/dart_sdk.py
+++ b/tools/bots/dart_sdk.py
@@ -19,6 +19,21 @@
                         utils.GetBuildRoot(BUILD_OS, build_mode, arch), path)
 
 
+def UploadFlutterCipd(arch, sdk_path, channel):
+    cipd_os = bot_utils.SYSTEM_TO_CIPD[BUILD_OS]
+    cipd_arch = bot_utils.ARCH_TO_CIPD[arch]
+    cipd_platform = cipd_os + '-' + cipd_arch
+    version = utils.GetVersion()
+    name = 'flutter/dart-sdk/%s' % cipd_platform
+    version_tag = 'version:%s' % version
+    git_tag = 'git_revision:%s' % utils.GetGitRevision()
+    bot_utils.run([
+        'cipd', 'create', '-name', name, '-in', sdk_path, '-install-mode',
+        'copy', '-tag', version_tag, '-tag', git_tag, '-ref', channel,
+        '-preserve-writable'
+    ])
+
+
 def BuildDartdocAPIDocs(dirname):
     dart_sdk = BuildRootPath('dart-sdk')
     dart_exe = os.path.join(dart_sdk, 'bin', 'dart')
@@ -234,6 +249,12 @@
             sdk_path = BuildRootPath('dart-sdk', arch=arch)
             CreateAndUploadSDKZip(arch, sdk_path)
             DartArchiveUnstrippedBinaries(arch)
+            if CHANNEL != bot_utils.Channel.BLEEDING_EDGE:
+                try:
+                    UploadFlutterCipd(arch, sdk_path, CHANNEL)
+                except Exception as error:
+                    print('Error uploading to CIPD:')
+                    print(repr(error))
         if BUILD_OS == 'linux':
             CreateUploadVersionFile()
     else:
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index adbceae..0bac3b9 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1776,6 +1776,29 @@
     },
     {
       "builders": [
+        "vm-kernel-msvc-windows"
+      ],
+      "meta": {
+        "description": "This configuration builds the VM with MSVC."
+      },
+      "steps": [
+        {
+          "name": "build dart x64",
+          "script": "tools/build.py",
+          "arguments": [
+            "--mode=all",
+            "--arch=x64",
+            "--no-clang",
+            "--no-goma",
+            "dart_precompiled_runtime",
+            "gen_snapshot",
+            "runtime"
+          ]
+        }
+      ]
+    },
+    {
+      "builders": [
         "vm-kernel-linux-debug-simarm",
         "vm-kernel-linux-debug-simarm64",
         "vm-kernel-linux-debug-simarm64c",
@@ -2946,7 +2969,8 @@
           "arguments": [
             "-ndart2wasm-hostasserts-linux-x64-d8",
             "language",
-            "corelib"
+            "corelib",
+            "web/wasm"
           ],
           "shards": 30,
           "fileset": "dart2wasm_hostasserts"
@@ -2962,7 +2986,7 @@
       },
       "steps": [
         {
-          "name": "build dart",
+          "name": "build dart (clang builds)",
           "script": "tools/build.py",
           "arguments": [
             "--arch=ia32,x64,arm,arm64",
@@ -2972,10 +2996,21 @@
           ]
         },
         {
+          "name": "build dart (gcc builds)",
+          "script": "tools/build.py",
+          "arguments": [
+            "--no-clang",
+            "--arch=riscv64",
+            "--mode=release",
+            "--check-clean",
+            "create_sdk"
+          ]
+        },
+        {
           "name": "upload sdk",
           "script": "tools/bots/dart_sdk.py",
           "arguments": [
-            "--arch=ia32,x64,arm,arm64"
+            "--arch=ia32,x64,arm,arm64,riscv64"
           ]
         },
         {
@@ -4175,4 +4210,4 @@
     "macos": "buildtools/mac-x64/clang/bin/llvm-symbolizer",
     "windows": "buildtools/win-x64/clang/bin/llvm-symbolizer.exe"
   }
-}
+}
\ No newline at end of file
diff --git a/tools/dart2js/sourceMapViewer/bin/source_map_viewer.dart b/tools/dart2js/sourceMapViewer/bin/source_map_viewer.dart
index 51b958c..b7b26b3 100644
--- a/tools/dart2js/sourceMapViewer/bin/source_map_viewer.dart
+++ b/tools/dart2js/sourceMapViewer/bin/source_map_viewer.dart
@@ -81,7 +81,7 @@
 
   // Use port 0 to get an ephemeral port.
   int port = 0;
-  HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, port).then((server) {
+  HttpServer.bind(InternetAddress.loopbackIPv4, port).then((server) {
     port = server.port;
     print("Source mapping server is running on "
         "'http://${server.address.address}:$port/'");
diff --git a/tools/dom/OWNERS b/tools/dom/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/tools/dom/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index ac5b337..f877c25 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -451,6 +451,15 @@
 };
 
 [DartSupplemental]
+interface AudioNode : EventTarget {
+    [DartSuppress] AudioNode connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
+    [DartSuppress] void connect(AudioParam destination, optional unsigned long output = 0);
+    AudioNode? connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
+    // Scripts don't unify return types, so this is changed from void to do so.
+    AudioNode? connect(AudioParam destination, optional unsigned long output = 0);
+};
+
+[DartSupplemental]
 interface HTMLInputElement {
     [DartSuppress] attribute boolean webkitSpeech;
     [DartSuppress] attribute boolean webkitGrammar;
@@ -591,6 +600,16 @@
     // Marked as nullable to address browser compatibility. See 41905.
     [DartSuppress, Measure] readonly attribute MemoryInfo memory;
     [Measure] readonly attribute MemoryInfo? memory;
+    [DartSuppress] void mark(DOMString markName);
+    PerformanceEntry? mark(DOMString markName, optional Dictionary markOptions);
+    [DartSuppress] void measure(DOMString measureName, optional DOMString startMark = null, optional DOMString endMark = null);
+    // Note that `startMark` and `endMark` can't be null (but they can be
+    // undefined) in Firefox. Firefox also seems to disallow `measureOptions`.
+    // Safari also requires that `endMark` be non-null if `startMark` is
+    // non-null. In order to unify different browser behavior, we allow all
+    // possible syntaxes.
+    PerformanceMeasure? measure(DOMString measureName, optional DOMString? startMark, optional DOMString? endMark);
+    PerformanceMeasure? measure(DOMString measureName, Dictionary measureOptions);
 };
 
 [DartSupplemental]
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 0fd686d..012b604 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -125,6 +125,9 @@
   macros:
     help: "Static meta-programming"
 
+  inference-update-1:
+    help: "Enhanced type inference"
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
diff --git a/tools/generate_package_config.py b/tools/generate_package_config.py
new file mode 100644
index 0000000..3c2f80f
--- /dev/null
+++ b/tools/generate_package_config.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+# 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.
+
+# Invoke the `tools/generate_package_config.dart` script.
+
+# NOTE(devoncarew): This script is currently a no-op in order to facilitate us
+# landing the package_config generation changes through flutter/engine. Once
+# generate_package_config.py exists in flutter/engine, we'll update that repo's
+# DEPS file to call this script, and then land the full package_config changes
+# in dart-lang/sdk.
+
+USE_PYTHON3 = True
+
+
+def Main():
+    print('generate_package_config.py called')
+
+
+if __name__ == '__main__':
+    Main()
diff --git a/tools/gn.py b/tools/gn.py
index 2b43717..f5c01ad 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -97,13 +97,10 @@
     m = platform.machine()
     if m == 'aarch64' or m == 'arm64':
         return 'arm64'
-    if m == 'armv7l' or m == 'armv6l':
+    if m == 'armv7l':
         return 'arm'
 
-    if arch in [
-            'ia32', 'arm', 'armv6', 'simarm', 'simarm_x64', 'riscv32',
-            'simriscv32'
-    ]:
+    if arch in ['ia32', 'arm', 'simarm', 'simarm_x64', 'riscv32', 'simriscv32']:
         return 'x86'
     if arch in [
             'x64', 'arm64', 'simarm64', 'arm_x64', 'x64c', 'arm64c',
@@ -239,11 +236,6 @@
             gn_args['arm_version'] = 7
             gn_args['arm_float_abi'] = floatabi
             gn_args['arm_use_neon'] = True
-        elif gn_args['target_cpu'] == 'armv6':
-            floatabi = 'softfp' if args.arm_float_abi == '' else args.arm_float_abi
-            gn_args['target_cpu'] = 'arm'
-            gn_args['arm_version'] = 6
-            gn_args['arm_float_abi'] = floatabi
 
     gn_args['is_debug'] = mode == 'debug'
     gn_args['is_release'] = mode == 'release'
@@ -282,6 +274,8 @@
             'exe.stripped/dart_precompiled_runtime_product')
         gn_args['gen_snapshot_stripped_binary'] = (
             'exe.stripped/gen_snapshot_product')
+        gn_args['analyze_snapshot_binary'] = (
+            'exe.stripped/analyze_snapshot_product')
 
     # Setup the user-defined sysroot.
     if UseSysroot(args, gn_args):
@@ -387,7 +381,6 @@
                     'x64',
                     'arm',
                     'arm_x64',
-                    'armv6',
                     'arm64',
                     'x64c',
                     'arm64c',
diff --git a/tools/linux_dist_support/create_debian_packages.py b/tools/linux_dist_support/create_debian_packages.py
index 94c0d53..ae3473f 100755
--- a/tools/linux_dist_support/create_debian_packages.py
+++ b/tools/linux_dist_support/create_debian_packages.py
@@ -35,7 +35,7 @@
     result.add_option("-a",
                       "--arch",
                       help='Target architectures (comma-separated).',
-                      metavar='[all,ia32,x64,armel,armhf]',
+                      metavar='[all,ia32,x64,armhf]',
                       default='x64')
     result.add_option("-t",
                       "--toolchain",
@@ -92,12 +92,6 @@
             RunBuildPackage(['-B', '-aarmhf', '-us', '-uc'],
                             join(temp_dir, tarroot), toolchain)
 
-        # Build armel binary package.
-        if 'armel' in arch:
-            print("Building armel package")
-            RunBuildPackage(['-B', '-aarmel', '-us', '-uc'],
-                            join(temp_dir, tarroot), toolchain)
-
         # Copy the Debian package files to the build directory.
         debbase = 'dart_%s' % version
         source_package = [
@@ -108,7 +102,6 @@
         i386_package = ['%s-1_i386.deb' % debbase]
         amd64_package = ['%s-1_amd64.deb' % debbase]
         armhf_package = ['%s-1_armhf.deb' % debbase]
-        armel_package = ['%s-1_armel.deb' % debbase]
 
         for name in source_package:
             copyfile(join(temp_dir, name), join(out_dir, name))
@@ -121,9 +114,6 @@
         if ('armhf' in arch):
             for name in armhf_package:
                 copyfile(join(temp_dir, name), join(out_dir, name))
-        if ('armel' in arch):
-            for name in armel_package:
-                copyfile(join(temp_dir, name), join(out_dir, name))
 
 
 def Main():
diff --git a/tools/manage_deps.dart b/tools/manage_deps.dart
index f954327..80b1b56 100755
--- a/tools/manage_deps.dart
+++ b/tools/manage_deps.dart
@@ -231,6 +231,7 @@
     cmd[0],
     cmd.skip(1).toList(),
     workingDirectory: workingDirectory,
+    environment: {'DEPOT_TOOLS_UPDATE': '0'},
   );
   printSuccessTrailer(result, onFailure);
   final output = (result.stdout as String);
diff --git a/tools/sdks/update.sh b/tools/sdks/update.sh
index 8cb5633..2292649 100755
--- a/tools/sdks/update.sh
+++ b/tools/sdks/update.sh
@@ -34,7 +34,7 @@
 gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-linux-arm-release.zip" .
 unzip -q dartsdk-linux-arm-release.zip -d sdk
 cipd create \
-  -name dart/dart-sdk/linux-armv6l \
+  -name dart/dart-sdk/linux-arm \
   -in sdk \
   -install-mode copy \
   -tag version:$1 \
@@ -51,6 +51,16 @@
   -ref $channel
 rm -rf sdk
 
+gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-linux-riscv64-release.zip" .
+unzip -q dartsdk-linux-riscv64-release.zip -d sdk
+cipd create \
+  -name dart/dart-sdk/linux-riscv64 \
+  -in sdk \
+  -install-mode copy \
+  -tag version:$1 \
+  -ref $channel
+rm -rf sdk
+
 gsutil.py cp "gs://dart-archive/channels/$channel/release/$1/sdk/dartsdk-macos-x64-release.zip" .
 unzip -q dartsdk-macos-x64-release.zip -d sdk
 cipd create \
diff --git a/tools/utils.py b/tools/utils.py
index cecdbc2..2f42263 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -152,12 +152,10 @@
 # Try to guess the host architecture.
 def GuessArchitecture():
     os_id = platform.machine()
-    if os_id.startswith('armv6'):
-        return 'armv6'
+    if os_id.startswith('aarch64') or os_id == 'arm64':
+        return 'arm64'
     elif os_id.startswith('arm'):
         return 'arm'
-    elif os_id.startswith('aarch64'):
-        return 'arm64'
     elif '64' in os_id:
         return 'x64'
     elif (not os_id) or (not re.match('(x|i[3-6])86', os_id) is None):